diff options
419 files changed, 5097 insertions, 7520 deletions
diff --git a/FILES.byname b/FILES.byname index cf3a584ec6..0cf61683e4 100644 --- a/FILES.byname +++ b/FILES.byname @@ -3552,28 +3552,28 @@ 1990/10/02 | 159 | dviware/dvisun/makefile 1990/10/02 | 280 | dviware/dvisun/README 2019/06/09 | 55720 | dviware/dvisun.zip -2020/11/28 | 56953 | dviware/dvisvgm/aclocal.m4 +2021/08/16 | 56953 | dviware/dvisvgm/aclocal.m4 2019/03/09 | 5827 | dviware/dvisvgm/ar-lib 2018/09/08 | 576 | dviware/dvisvgm/AUTHORS -2020/11/28 | 413542 | dviware/dvisvgm/ChangeLog +2021/08/16 | 431902 | dviware/dvisvgm/ChangeLog 2019/03/09 | 7383 | dviware/dvisvgm/compile 2019/03/09 | 44166 | dviware/dvisvgm/config.guess -2020/11/28 | 4369 | dviware/dvisvgm/config.h.in +2021/08/16 | 4369 | dviware/dvisvgm/config.h.in 2019/03/09 | 36408 | dviware/dvisvgm/config.sub -2020/11/28 | 682288 | dviware/dvisvgm/configure -2020/11/28 | 8411 | dviware/dvisvgm/configure.ac +2021/08/16 | 689496 | dviware/dvisvgm/configure +2021/08/16 | 8409 | dviware/dvisvgm/configure.ac 2016/09/03 | 35147 | dviware/dvisvgm/COPYING 2019/03/09 | 23568 | dviware/dvisvgm/depcomp -2020/03/02 | 718 | dviware/dvisvgm/doc/conf-dblatex-man.xsl -2020/03/21 | 2618 | dviware/dvisvgm/doc/conf-dblatex-pdf.xsl -2020/11/28 | 67141 | dviware/dvisvgm/doc/dvisvgm.1 -2020/08/27 | 60694 | dviware/dvisvgm/doc/dvisvgm.txt.in +2021/01/12 | 718 | dviware/dvisvgm/doc/conf-dblatex-man.xsl +2021/01/12 | 2618 | dviware/dvisvgm/doc/conf-dblatex-pdf.xsl +2021/08/16 | 67474 | dviware/dvisvgm/doc/dvisvgm.1 +2021/04/28 | 61026 | dviware/dvisvgm/doc/dvisvgm.txt.in 2020/03/21 | 840 | dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl -2020/03/21 | 3678 | dviware/dvisvgm/doc/Makefile.am -2020/11/28 | 21313 | dviware/dvisvgm/doc/Makefile.in -2020/03/02 | 1041 | dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl -2020/03/21 | 712 | dviware/dvisvgm/doc/tweak-dblatex-tex.py -2020/03/02 | 1698 | dviware/dvisvgm/doc/tweak-db-refentry.xsl +2021/01/12 | 3678 | dviware/dvisvgm/doc/Makefile.am +2021/08/16 | 21341 | dviware/dvisvgm/doc/Makefile.in +2021/01/12 | 1041 | dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl +2021/03/05 | 717 | dviware/dvisvgm/doc/tweak-dblatex-tex.py +2021/01/12 | 1698 | dviware/dvisvgm/doc/tweak-db-refentry.xsl 2016/09/03 | 9236 | dviware/dvisvgm/INSTALL 2019/03/09 | 15368 | dviware/dvisvgm/install-sh 2020/08/27 | 623 | dviware/dvisvgm/libs/brotli/common/constants.c @@ -3655,12 +3655,12 @@ 2018/07/31 | 2615 | dviware/dvisvgm/libs/brotli/include/brotli/types.h 2017/12/28 | 1084 | dviware/dvisvgm/libs/brotli/LICENSE 2020/08/27 | 1997 | dviware/dvisvgm/libs/brotli/Makefile.am -2020/11/28 | 33375 | dviware/dvisvgm/libs/brotli/Makefile.in +2021/08/16 | 33403 | dviware/dvisvgm/libs/brotli/Makefile.in 2018/09/08 | 132235 | dviware/dvisvgm/libs/clipper/clipper.cpp 2016/09/03 | 15879 | dviware/dvisvgm/libs/clipper/clipper.hpp 2017/04/14 | 1374 | dviware/dvisvgm/libs/clipper/License.txt 2017/04/14 | 202 | dviware/dvisvgm/libs/clipper/Makefile.am -2020/11/28 | 20338 | dviware/dvisvgm/libs/clipper/Makefile.in +2021/08/16 | 20366 | dviware/dvisvgm/libs/clipper/Makefile.in 2019/03/09 | 467 | dviware/dvisvgm/libs/defs.am 2017/04/14 | 188824 | dviware/dvisvgm/libs/ff-woff/fontforge/alphabet.c 2017/04/14 | 32761 | dviware/dvisvgm/libs/ff-woff/fontforge/asmfpst.c @@ -3717,7 +3717,7 @@ 2017/04/14 | 210538 | dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.c 2017/04/14 | 8655 | dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.h 2017/04/14 | 114 | dviware/dvisvgm/libs/ff-woff/fontforge/tables.h -2020/03/02 | 2041 | dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp +2021/01/12 | 2041 | dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp 2017/04/14 | 83106 | dviware/dvisvgm/libs/ff-woff/fontforge/tottfaat.c 2017/04/14 | 217496 | dviware/dvisvgm/libs/ff-woff/fontforge/tottf.c 2017/04/14 | 149564 | dviware/dvisvgm/libs/ff-woff/fontforge/tottfgpos.c @@ -3743,11 +3743,11 @@ 2017/04/14 | 5185 | dviware/dvisvgm/libs/ff-woff/inc/utype.h 2017/04/14 | 9905 | dviware/dvisvgm/libs/ff-woff/LICENSE 2019/04/12 | 2027 | dviware/dvisvgm/libs/ff-woff/Makefile.am -2020/11/28 | 40554 | dviware/dvisvgm/libs/ff-woff/Makefile.in -2020/03/02 | 241 | dviware/dvisvgm/libs/Makefile.am -2020/11/28 | 19936 | dviware/dvisvgm/libs/Makefile.in +2021/08/16 | 40582 | dviware/dvisvgm/libs/ff-woff/Makefile.in +2021/01/12 | 241 | dviware/dvisvgm/libs/Makefile.am +2021/08/16 | 19964 | dviware/dvisvgm/libs/Makefile.in 2018/09/08 | 171 | dviware/dvisvgm/libs/md5/Makefile.am -2020/11/28 | 19545 | dviware/dvisvgm/libs/md5/Makefile.in +2021/08/16 | 19573 | dviware/dvisvgm/libs/md5/Makefile.in 2018/09/08 | 8743 | dviware/dvisvgm/libs/md5/md5.c 2018/09/08 | 1426 | dviware/dvisvgm/libs/md5/md5.h 2019/10/25 | 2146 | dviware/dvisvgm/libs/potrace/auxiliary.h @@ -3759,7 +3759,7 @@ 2019/10/25 | 442 | dviware/dvisvgm/libs/potrace/decompose.h 2019/10/25 | 11118 | dviware/dvisvgm/libs/potrace/lists.h 2019/03/09 | 330 | dviware/dvisvgm/libs/potrace/Makefile.am -2020/11/28 | 20804 | dviware/dvisvgm/libs/potrace/Makefile.in +2021/08/16 | 20832 | dviware/dvisvgm/libs/potrace/Makefile.in 2019/10/25 | 3122 | dviware/dvisvgm/libs/potrace/potracelib.c 2019/10/25 | 4573 | dviware/dvisvgm/libs/potrace/potracelib.h 2019/10/25 | 2654 | dviware/dvisvgm/libs/potrace/progress.h @@ -3768,14 +3768,14 @@ 2019/03/09 | 102582 | dviware/dvisvgm/libs/variant/include/mpark/variant.hpp 2017/10/30 | 1338 | dviware/dvisvgm/libs/variant/LICENSE.md 2019/03/09 | 71 | dviware/dvisvgm/libs/variant/Makefile.am -2020/11/28 | 15593 | dviware/dvisvgm/libs/variant/Makefile.in +2021/08/16 | 15621 | dviware/dvisvgm/libs/variant/Makefile.in 2017/10/30 | 1171 | dviware/dvisvgm/libs/woff2/include/woff2/decode.h 2017/10/30 | 1434 | dviware/dvisvgm/libs/woff2/include/woff2/encode.h 2017/10/30 | 2304 | dviware/dvisvgm/libs/woff2/include/woff2/output.h 2018/07/31 | 131 | dviware/dvisvgm/libs/woff2/include/woff2/version.h 2016/09/03 | 11358 | dviware/dvisvgm/libs/woff2/LICENSE 2019/03/09 | 701 | dviware/dvisvgm/libs/woff2/Makefile.am -2020/11/28 | 24681 | dviware/dvisvgm/libs/woff2/Makefile.in +2021/08/16 | 24709 | dviware/dvisvgm/libs/woff2/Makefile.in 2017/10/30 | 4185 | dviware/dvisvgm/libs/woff2/src/buffer.h 2018/07/31 | 12155 | dviware/dvisvgm/libs/woff2/src/font.cc 2017/10/30 | 3509 | dviware/dvisvgm/libs/woff2/src/font.h @@ -3797,281 +3797,285 @@ 2018/07/31 | 15423 | dviware/dvisvgm/libs/woff2/src/woff2_enc.cc 2017/10/30 | 1564 | dviware/dvisvgm/libs/woff2/src/woff2_out.cc 2019/10/25 | 200 | dviware/dvisvgm/libs/xxHash/Makefile.am -2020/11/28 | 19650 | dviware/dvisvgm/libs/xxHash/Makefile.in +2021/08/16 | 19678 | dviware/dvisvgm/libs/xxHash/Makefile.in 2020/07/31 | 2393 | dviware/dvisvgm/libs/xxHash/xxh3.h 2020/07/04 | 1855 | dviware/dvisvgm/libs/xxHash/xxhash.c 2020/07/31 | 184809 | dviware/dvisvgm/libs/xxHash/xxhash.h 2019/03/09 | 324151 | dviware/dvisvgm/ltmain.sh 2019/03/09 | 2105 | dviware/dvisvgm/m4/ax_check_compile_flag.m4 2017/10/30 | 11836 | dviware/dvisvgm/m4/ax_code_coverage.m4 -2019/04/12 | 19367 | dviware/dvisvgm/m4/ax_cxx_compile_stdcxx.m4 +2021/06/11 | 19816 | dviware/dvisvgm/m4/ax_cxx_compile_stdcxx.m4 2019/03/09 | 305862 | dviware/dvisvgm/m4/libtool.m4 2019/03/09 | 6140 | dviware/dvisvgm/m4/lt~obsolete.m4 2019/03/09 | 14514 | dviware/dvisvgm/m4/ltoptions.m4 2019/03/09 | 4384 | dviware/dvisvgm/m4/ltsugar.m4 2019/03/09 | 699 | dviware/dvisvgm/m4/ltversion.m4 2019/03/09 | 95 | dviware/dvisvgm/m4/Makefile.am -2020/11/28 | 13474 | dviware/dvisvgm/m4/Makefile.in -2020/03/02 | 744 | dviware/dvisvgm/Makefile.am -2020/11/28 | 27892 | dviware/dvisvgm/Makefile.in +2021/08/16 | 13502 | dviware/dvisvgm/m4/Makefile.in +2021/01/12 | 744 | dviware/dvisvgm/Makefile.am +2021/08/16 | 27920 | dviware/dvisvgm/Makefile.in 2019/03/09 | 6878 | dviware/dvisvgm/missing -2020/11/28 | 37376 | dviware/dvisvgm/NEWS -2020/03/02 | 6173 | dviware/dvisvgm/README -2020/03/02 | 158418 | dviware/dvisvgm/src/AGLTable.hpp -2020/11/21 | 15777 | dviware/dvisvgm/src/BasicDVIReader.cpp -2020/11/21 | 5248 | dviware/dvisvgm/src/BasicDVIReader.hpp -2020/03/02 | 9132 | dviware/dvisvgm/src/Bezier.cpp -2020/03/02 | 2502 | dviware/dvisvgm/src/Bezier.hpp -2020/03/02 | 3175 | dviware/dvisvgm/src/BgColorSpecialHandler.cpp -2020/03/02 | 2228 | dviware/dvisvgm/src/BgColorSpecialHandler.hpp -2020/03/02 | 4889 | dviware/dvisvgm/src/Bitmap.cpp -2020/03/02 | 4166 | dviware/dvisvgm/src/Bitmap.hpp -2020/03/02 | 7864 | dviware/dvisvgm/src/BoundingBox.cpp -2020/03/02 | 3912 | dviware/dvisvgm/src/BoundingBox.hpp -2020/03/21 | 5928 | dviware/dvisvgm/src/Calculator.cpp -2020/03/02 | 2272 | dviware/dvisvgm/src/Calculator.hpp -2020/03/02 | 2000 | dviware/dvisvgm/src/Character.hpp -2020/03/02 | 2040 | dviware/dvisvgm/src/CharMapID.cpp -2020/03/02 | 2541 | dviware/dvisvgm/src/CharMapID.hpp -2020/03/02 | 8299 | dviware/dvisvgm/src/CLCommandLine.cpp -2020/03/02 | 2891 | dviware/dvisvgm/src/CLCommandLine.hpp -2020/03/02 | 6531 | dviware/dvisvgm/src/CLOption.hpp -2020/11/21 | 3539 | dviware/dvisvgm/src/CMap.cpp -2020/11/21 | 4475 | dviware/dvisvgm/src/CMap.hpp -2020/03/02 | 5322 | dviware/dvisvgm/src/CMapManager.cpp -2020/03/02 | 2221 | dviware/dvisvgm/src/CMapManager.hpp -2020/11/21 | 8332 | dviware/dvisvgm/src/CMapReader.cpp -2020/03/02 | 3080 | dviware/dvisvgm/src/CMapReader.hpp -2020/03/02 | 19513 | dviware/dvisvgm/src/Color.cpp -2020/03/02 | 4778 | dviware/dvisvgm/src/Color.hpp -2020/03/02 | 4118 | dviware/dvisvgm/src/ColorSpecialHandler.cpp -2020/03/02 | 2118 | dviware/dvisvgm/src/ColorSpecialHandler.hpp -2020/03/13 | 7644 | dviware/dvisvgm/src/CommandLine.hpp -2020/03/02 | 3410 | dviware/dvisvgm/src/Directory.cpp -2020/03/02 | 2053 | dviware/dvisvgm/src/Directory.hpp -2020/03/02 | 2290 | dviware/dvisvgm/src/DLLoader.cpp -2020/03/02 | 2539 | dviware/dvisvgm/src/DLLoader.hpp -2020/03/02 | 2334 | dviware/dvisvgm/src/DVIActions.hpp -2020/11/21 | 24893 | dviware/dvisvgm/src/DVIReader.cpp -2020/11/21 | 8202 | dviware/dvisvgm/src/DVIReader.hpp -2020/07/04 | 17801 | dviware/dvisvgm/src/dvisvgm.cpp -2020/07/14 | 19595 | dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp -2020/07/14 | 4585 | dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp -2020/07/14 | 12412 | dviware/dvisvgm/src/DVIToSVGActions.cpp -2020/03/02 | 4915 | dviware/dvisvgm/src/DVIToSVGActions.hpp -2020/11/21 | 21324 | dviware/dvisvgm/src/DVIToSVG.cpp -2020/03/02 | 5602 | dviware/dvisvgm/src/DVIToSVG.hpp -2020/03/02 | 10960 | dviware/dvisvgm/src/EllipticalArc.cpp -2020/03/02 | 3100 | dviware/dvisvgm/src/EllipticalArc.hpp -2020/03/02 | 9971 | dviware/dvisvgm/src/EmSpecialHandler.cpp -2020/03/02 | 2930 | dviware/dvisvgm/src/EmSpecialHandler.hpp -2020/03/02 | 3935 | dviware/dvisvgm/src/EncFile.cpp -2020/03/02 | 2116 | dviware/dvisvgm/src/EncFile.hpp -2020/03/02 | 3776 | dviware/dvisvgm/src/EPSFile.cpp -2020/03/02 | 2051 | dviware/dvisvgm/src/EPSFile.hpp -2020/03/02 | 2098 | dviware/dvisvgm/src/EPSToSVG.hpp -2020/03/02 | 3098 | dviware/dvisvgm/src/ffwrapper.c -2020/03/02 | 1657 | dviware/dvisvgm/src/ffwrapper.h -2020/03/02 | 9824 | dviware/dvisvgm/src/FileFinder.cpp -2020/03/02 | 2586 | dviware/dvisvgm/src/FileFinder.hpp -2020/03/02 | 10157 | dviware/dvisvgm/src/FilePath.cpp -2020/03/02 | 3434 | dviware/dvisvgm/src/FilePath.hpp -2020/07/07 | 10368 | dviware/dvisvgm/src/FileSystem.cpp -2020/07/07 | 3105 | dviware/dvisvgm/src/FileSystem.hpp -2020/03/02 | 1821 | dviware/dvisvgm/src/FixWord.hpp -2020/07/07 | 12510 | dviware/dvisvgm/src/FontCache.cpp -2020/03/02 | 2857 | dviware/dvisvgm/src/FontCache.hpp -2020/11/21 | 21199 | dviware/dvisvgm/src/Font.cpp -2020/11/21 | 3488 | dviware/dvisvgm/src/FontEncoding.cpp -2020/11/21 | 2795 | dviware/dvisvgm/src/FontEncoding.hpp -2020/03/02 | 13507 | dviware/dvisvgm/src/FontEngine.cpp -2020/03/02 | 3254 | dviware/dvisvgm/src/FontEngine.hpp -2020/04/11 | 17311 | dviware/dvisvgm/src/Font.hpp -2020/11/21 | 12332 | dviware/dvisvgm/src/FontManager.cpp -2020/11/21 | 3939 | dviware/dvisvgm/src/FontManager.hpp -2020/11/21 | 9307 | dviware/dvisvgm/src/FontMap.cpp -2020/03/02 | 2909 | dviware/dvisvgm/src/FontMap.hpp -2020/03/02 | 1984 | dviware/dvisvgm/src/FontMetrics.cpp -2020/03/02 | 3396 | dviware/dvisvgm/src/FontMetrics.hpp -2020/03/02 | 1805 | dviware/dvisvgm/src/FontStyle.hpp -2020/03/02 | 10110 | dviware/dvisvgm/src/FontWriter.cpp -2020/03/02 | 2742 | dviware/dvisvgm/src/FontWriter.hpp -2020/03/02 | 2745 | dviware/dvisvgm/src/GFGlyphTracer.cpp -2020/03/02 | 2571 | dviware/dvisvgm/src/GFGlyphTracer.hpp -2020/03/02 | 10894 | dviware/dvisvgm/src/GFReader.cpp -2020/03/02 | 3967 | dviware/dvisvgm/src/GFReader.hpp -2020/03/02 | 3610 | dviware/dvisvgm/src/GFTracer.cpp -2020/03/02 | 2107 | dviware/dvisvgm/src/GFTracer.hpp -2020/08/21 | 12116 | dviware/dvisvgm/src/Ghostscript.cpp -2020/03/02 | 4032 | dviware/dvisvgm/src/Ghostscript.hpp -2020/03/02 | 1537 | dviware/dvisvgm/src/Glyph.hpp -2020/03/02 | 2941 | dviware/dvisvgm/src/GlyphTracerMessages.hpp -2020/07/04 | 27938 | dviware/dvisvgm/src/GraphicsPath.hpp -2020/07/07 | 3609 | dviware/dvisvgm/src/HashFunction.cpp -2020/07/07 | 2550 | dviware/dvisvgm/src/HashFunction.hpp -2020/03/02 | 3623 | dviware/dvisvgm/src/HtmlSpecialHandler.cpp -2020/03/02 | 2214 | dviware/dvisvgm/src/HtmlSpecialHandler.hpp -2020/03/02 | 9805 | dviware/dvisvgm/src/HyperlinkManager.cpp -2020/03/02 | 3980 | dviware/dvisvgm/src/HyperlinkManager.hpp +2021/08/16 | 38153 | dviware/dvisvgm/NEWS +2021/01/12 | 6173 | dviware/dvisvgm/README +2021/01/12 | 158418 | dviware/dvisvgm/src/AGLTable.hpp +2021/01/12 | 15777 | dviware/dvisvgm/src/BasicDVIReader.cpp +2021/01/12 | 5248 | dviware/dvisvgm/src/BasicDVIReader.hpp +2021/01/12 | 9132 | dviware/dvisvgm/src/Bezier.cpp +2021/01/12 | 2502 | dviware/dvisvgm/src/Bezier.hpp +2021/03/05 | 3164 | dviware/dvisvgm/src/BgColorSpecialHandler.cpp +2021/01/12 | 2228 | dviware/dvisvgm/src/BgColorSpecialHandler.hpp +2021/01/12 | 4889 | dviware/dvisvgm/src/Bitmap.cpp +2021/01/12 | 4166 | dviware/dvisvgm/src/Bitmap.hpp +2021/03/05 | 7856 | dviware/dvisvgm/src/BoundingBox.cpp +2021/01/12 | 3912 | dviware/dvisvgm/src/BoundingBox.hpp +2021/01/12 | 6779 | dviware/dvisvgm/src/Calculator.cpp +2021/01/12 | 2365 | dviware/dvisvgm/src/Calculator.hpp +2021/01/12 | 2000 | dviware/dvisvgm/src/Character.hpp +2021/01/12 | 2040 | dviware/dvisvgm/src/CharMapID.cpp +2021/01/12 | 2541 | dviware/dvisvgm/src/CharMapID.hpp +2021/01/12 | 8299 | dviware/dvisvgm/src/CLCommandLine.cpp +2021/01/12 | 2891 | dviware/dvisvgm/src/CLCommandLine.hpp +2021/01/12 | 6531 | dviware/dvisvgm/src/CLOption.hpp +2021/01/12 | 3539 | dviware/dvisvgm/src/CMap.cpp +2021/01/12 | 4475 | dviware/dvisvgm/src/CMap.hpp +2021/05/26 | 5299 | dviware/dvisvgm/src/CMapManager.cpp +2021/01/12 | 2221 | dviware/dvisvgm/src/CMapManager.hpp +2021/01/12 | 8332 | dviware/dvisvgm/src/CMapReader.cpp +2021/01/12 | 3080 | dviware/dvisvgm/src/CMapReader.hpp +2021/01/12 | 19513 | dviware/dvisvgm/src/Color.cpp +2021/01/12 | 4778 | dviware/dvisvgm/src/Color.hpp +2021/01/12 | 4118 | dviware/dvisvgm/src/ColorSpecialHandler.cpp +2021/01/12 | 2118 | dviware/dvisvgm/src/ColorSpecialHandler.hpp +2021/01/12 | 7644 | dviware/dvisvgm/src/CommandLine.hpp +2021/01/12 | 3410 | dviware/dvisvgm/src/Directory.cpp +2021/01/12 | 2053 | dviware/dvisvgm/src/Directory.hpp +2021/01/12 | 2290 | dviware/dvisvgm/src/DLLoader.cpp +2021/01/12 | 2539 | dviware/dvisvgm/src/DLLoader.hpp +2021/01/12 | 2334 | dviware/dvisvgm/src/DVIActions.hpp +2021/05/26 | 24848 | dviware/dvisvgm/src/DVIReader.cpp +2021/01/12 | 8202 | dviware/dvisvgm/src/DVIReader.hpp +2021/03/15 | 17805 | dviware/dvisvgm/src/dvisvgm.cpp +2021/03/25 | 19490 | dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp +2021/03/15 | 4603 | dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp +2021/05/26 | 12271 | dviware/dvisvgm/src/DVIToSVGActions.cpp +2021/03/15 | 5087 | dviware/dvisvgm/src/DVIToSVGActions.hpp +2021/05/26 | 21223 | dviware/dvisvgm/src/DVIToSVG.cpp +2021/03/25 | 5630 | dviware/dvisvgm/src/DVIToSVG.hpp +2021/03/25 | 10946 | dviware/dvisvgm/src/EllipticalArc.cpp +2021/01/12 | 3100 | dviware/dvisvgm/src/EllipticalArc.hpp +2021/03/15 | 9740 | dviware/dvisvgm/src/EmSpecialHandler.cpp +2021/01/12 | 2930 | dviware/dvisvgm/src/EmSpecialHandler.hpp +2021/01/12 | 3935 | dviware/dvisvgm/src/EncFile.cpp +2021/01/12 | 2116 | dviware/dvisvgm/src/EncFile.hpp +2021/01/12 | 3776 | dviware/dvisvgm/src/EPSFile.cpp +2021/01/12 | 2051 | dviware/dvisvgm/src/EPSFile.hpp +2021/01/12 | 2098 | dviware/dvisvgm/src/EPSToSVG.hpp +2021/01/12 | 3098 | dviware/dvisvgm/src/ffwrapper.c +2021/01/12 | 1657 | dviware/dvisvgm/src/ffwrapper.h +2021/01/12 | 9824 | dviware/dvisvgm/src/FileFinder.cpp +2021/01/12 | 2586 | dviware/dvisvgm/src/FileFinder.hpp +2021/08/16 | 10407 | dviware/dvisvgm/src/FilePath.cpp +2021/01/12 | 3434 | dviware/dvisvgm/src/FilePath.hpp +2021/08/16 | 11115 | dviware/dvisvgm/src/FileSystem.cpp +2021/03/05 | 3168 | dviware/dvisvgm/src/FileSystem.hpp +2021/01/12 | 1821 | dviware/dvisvgm/src/FixWord.hpp +2021/03/05 | 12504 | dviware/dvisvgm/src/FontCache.cpp +2021/01/12 | 2857 | dviware/dvisvgm/src/FontCache.hpp +2021/05/26 | 21738 | dviware/dvisvgm/src/Font.cpp +2021/01/12 | 3488 | dviware/dvisvgm/src/FontEncoding.cpp +2021/01/12 | 2795 | dviware/dvisvgm/src/FontEncoding.hpp +2021/05/26 | 13490 | dviware/dvisvgm/src/FontEngine.cpp +2021/01/12 | 3263 | dviware/dvisvgm/src/FontEngine.hpp +2021/06/11 | 18771 | dviware/dvisvgm/src/Font.hpp +2021/05/26 | 12225 | dviware/dvisvgm/src/FontManager.cpp +2021/01/12 | 3939 | dviware/dvisvgm/src/FontManager.hpp +2021/01/12 | 9307 | dviware/dvisvgm/src/FontMap.cpp +2021/01/12 | 2909 | dviware/dvisvgm/src/FontMap.hpp +2021/01/12 | 1984 | dviware/dvisvgm/src/FontMetrics.cpp +2021/05/26 | 3441 | dviware/dvisvgm/src/FontMetrics.hpp +2021/01/12 | 1805 | dviware/dvisvgm/src/FontStyle.hpp +2021/03/05 | 10107 | dviware/dvisvgm/src/FontWriter.cpp +2021/01/12 | 2742 | dviware/dvisvgm/src/FontWriter.hpp +2021/03/25 | 2757 | dviware/dvisvgm/src/GFGlyphTracer.cpp +2021/03/25 | 2583 | dviware/dvisvgm/src/GFGlyphTracer.hpp +2021/03/25 | 10879 | dviware/dvisvgm/src/GFReader.cpp +2021/01/12 | 3967 | dviware/dvisvgm/src/GFReader.hpp +2021/01/12 | 3610 | dviware/dvisvgm/src/GFTracer.cpp +2021/01/12 | 2107 | dviware/dvisvgm/src/GFTracer.hpp +2021/03/15 | 12128 | dviware/dvisvgm/src/Ghostscript.cpp +2021/03/15 | 4044 | dviware/dvisvgm/src/Ghostscript.hpp +2021/01/12 | 1537 | dviware/dvisvgm/src/Glyph.hpp +2021/01/12 | 2941 | dviware/dvisvgm/src/GlyphTracerMessages.hpp +2021/03/25 | 27848 | dviware/dvisvgm/src/GraphicsPath.hpp +2021/01/12 | 3609 | dviware/dvisvgm/src/HashFunction.cpp +2021/01/12 | 2550 | dviware/dvisvgm/src/HashFunction.hpp +2021/01/12 | 3623 | dviware/dvisvgm/src/HtmlSpecialHandler.cpp +2021/01/12 | 2214 | dviware/dvisvgm/src/HtmlSpecialHandler.hpp +2021/03/15 | 9665 | dviware/dvisvgm/src/HyperlinkManager.cpp +2021/03/25 | 3986 | dviware/dvisvgm/src/HyperlinkManager.hpp 2016/09/03 | 10028 | dviware/dvisvgm/src/iapi.h 2016/09/03 | 4595 | dviware/dvisvgm/src/ierrors.h -2020/03/02 | 6950 | dviware/dvisvgm/src/ImageToSVG.cpp -2020/03/02 | 4430 | dviware/dvisvgm/src/ImageToSVG.hpp -2020/03/02 | 3788 | dviware/dvisvgm/src/InputBuffer.cpp -2020/03/02 | 4758 | dviware/dvisvgm/src/InputBuffer.hpp -2020/03/02 | 12299 | dviware/dvisvgm/src/InputReader.cpp -2020/03/02 | 4184 | dviware/dvisvgm/src/InputReader.hpp -2020/03/02 | 4491 | dviware/dvisvgm/src/JFM.cpp -2020/03/02 | 2120 | dviware/dvisvgm/src/JFM.hpp -2020/03/02 | 4728 | dviware/dvisvgm/src/Length.cpp -2020/03/02 | 4138 | dviware/dvisvgm/src/Length.hpp -2020/03/02 | 2014 | dviware/dvisvgm/src/macros.hpp -2020/03/02 | 7116 | dviware/dvisvgm/src/Makefile.am -2020/11/28 | 59734 | dviware/dvisvgm/src/Makefile.in -2020/03/02 | 8495 | dviware/dvisvgm/src/MapLine.cpp -2020/03/02 | 3089 | dviware/dvisvgm/src/MapLine.hpp -2020/03/21 | 16856 | dviware/dvisvgm/src/Matrix.cpp -2020/03/02 | 4123 | dviware/dvisvgm/src/Matrix.hpp -2020/07/07 | 2704 | dviware/dvisvgm/src/MD5HashFunction.hpp -2020/03/02 | 7517 | dviware/dvisvgm/src/Message.cpp -2020/03/02 | 1779 | dviware/dvisvgm/src/MessageException.hpp -2020/03/02 | 3541 | dviware/dvisvgm/src/Message.hpp -2020/03/02 | 5814 | dviware/dvisvgm/src/MetafontWrapper.cpp -2020/03/02 | 1876 | dviware/dvisvgm/src/MetafontWrapper.hpp -2020/03/02 | 3776 | dviware/dvisvgm/src/MiKTeXCom.cpp -2020/03/02 | 1894 | dviware/dvisvgm/src/MiKTeXCom.hpp -2020/03/02 | 2062 | dviware/dvisvgm/src/NoPsSpecialHandler.cpp -2020/03/02 | 1999 | dviware/dvisvgm/src/NoPsSpecialHandler.hpp -2020/03/21 | 3927 | dviware/dvisvgm/src/NumericRanges.hpp -2020/03/02 | 8119 | dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp -2020/03/02 | 2709 | dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp -2020/03/02 | 4213 | dviware/dvisvgm/src/optimizer/DependencyGraph.hpp -2020/07/16 | 6395 | dviware/dvisvgm/src/optimizer/GroupCollapser.cpp -2020/03/02 | 1984 | dviware/dvisvgm/src/optimizer/GroupCollapser.hpp +2021/01/12 | 6950 | dviware/dvisvgm/src/ImageToSVG.cpp +2021/03/15 | 4602 | dviware/dvisvgm/src/ImageToSVG.hpp +2021/01/12 | 3788 | dviware/dvisvgm/src/InputBuffer.cpp +2021/08/16 | 5059 | dviware/dvisvgm/src/InputBuffer.hpp +2021/01/12 | 12299 | dviware/dvisvgm/src/InputReader.cpp +2021/01/12 | 4184 | dviware/dvisvgm/src/InputReader.hpp +2021/01/12 | 4491 | dviware/dvisvgm/src/JFM.cpp +2021/05/26 | 2166 | dviware/dvisvgm/src/JFM.hpp +2021/01/12 | 4728 | dviware/dvisvgm/src/Length.cpp +2021/01/12 | 4138 | dviware/dvisvgm/src/Length.hpp +2021/01/12 | 2014 | dviware/dvisvgm/src/macros.hpp +2021/03/15 | 7207 | dviware/dvisvgm/src/Makefile.am +2021/08/16 | 60275 | dviware/dvisvgm/src/Makefile.in +2021/01/12 | 8495 | dviware/dvisvgm/src/MapLine.cpp +2021/01/12 | 3089 | dviware/dvisvgm/src/MapLine.hpp +2021/03/25 | 16862 | dviware/dvisvgm/src/Matrix.cpp +2021/03/25 | 4152 | dviware/dvisvgm/src/Matrix.hpp +2021/01/12 | 2704 | dviware/dvisvgm/src/MD5HashFunction.hpp +2021/03/25 | 7509 | dviware/dvisvgm/src/Message.cpp +2021/01/12 | 1779 | dviware/dvisvgm/src/MessageException.hpp +2021/01/12 | 3541 | dviware/dvisvgm/src/Message.hpp +2021/01/12 | 5814 | dviware/dvisvgm/src/MetafontWrapper.cpp +2021/01/12 | 1876 | dviware/dvisvgm/src/MetafontWrapper.hpp +2021/01/12 | 3776 | dviware/dvisvgm/src/MiKTeXCom.cpp +2021/01/12 | 1894 | dviware/dvisvgm/src/MiKTeXCom.hpp +2021/01/12 | 2062 | dviware/dvisvgm/src/NoPsSpecialHandler.cpp +2021/01/12 | 1999 | dviware/dvisvgm/src/NoPsSpecialHandler.hpp +2021/01/12 | 3927 | dviware/dvisvgm/src/NumericRanges.hpp +2021/03/15 | 2575 | dviware/dvisvgm/src/Opacity.cpp +2021/03/15 | 3720 | dviware/dvisvgm/src/Opacity.hpp +2021/01/12 | 8119 | dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp +2021/01/12 | 2709 | dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp +2021/01/12 | 4213 | dviware/dvisvgm/src/optimizer/DependencyGraph.hpp +2021/03/15 | 6378 | dviware/dvisvgm/src/optimizer/GroupCollapser.cpp +2021/01/12 | 1984 | dviware/dvisvgm/src/optimizer/GroupCollapser.hpp 2019/12/06 | 534 | dviware/dvisvgm/src/optimizer/Makefile.am -2020/11/28 | 22166 | dviware/dvisvgm/src/optimizer/Makefile.in -2020/03/02 | 1642 | dviware/dvisvgm/src/optimizer/OptimizerModule.hpp -2020/07/15 | 3192 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp -2020/03/02 | 1644 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp -2020/07/14 | 4394 | dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp -2020/03/02 | 2297 | dviware/dvisvgm/src/optimizer/SVGOptimizer.hpp -2020/03/02 | 4212 | dviware/dvisvgm/src/optimizer/TextSimplifier.cpp -2020/03/02 | 1699 | dviware/dvisvgm/src/optimizer/TextSimplifier.hpp -2020/07/29 | 6846 | dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp -2020/03/02 | 1856 | dviware/dvisvgm/src/optimizer/TransformSimplifier.hpp -2020/07/15 | 2013 | dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp -2020/03/02 | 1687 | dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp -2020/03/02 | 2067 | dviware/dvisvgm/src/options.dtd -2020/03/13 | 8986 | dviware/dvisvgm/src/options.xml -2020/03/21 | 2829 | dviware/dvisvgm/src/PageRanges.cpp -2020/03/21 | 1676 | dviware/dvisvgm/src/PageRanges.hpp -2020/03/02 | 5332 | dviware/dvisvgm/src/PageSize.cpp -2020/03/02 | 2092 | dviware/dvisvgm/src/PageSize.hpp -2020/03/02 | 4043 | dviware/dvisvgm/src/Pair.hpp -2020/03/02 | 4052 | dviware/dvisvgm/src/PapersizeSpecialHandler.cpp -2020/03/02 | 2514 | dviware/dvisvgm/src/PapersizeSpecialHandler.hpp -2020/07/04 | 13145 | dviware/dvisvgm/src/PathClipper.cpp -2020/07/04 | 2432 | dviware/dvisvgm/src/PathClipper.hpp -2020/03/02 | 15422 | dviware/dvisvgm/src/PDFParser.cpp -2020/03/02 | 5841 | dviware/dvisvgm/src/PDFParser.hpp -2020/11/21 | 10419 | dviware/dvisvgm/src/PdfSpecialHandler.cpp -2020/11/21 | 2836 | dviware/dvisvgm/src/PdfSpecialHandler.hpp -2020/03/02 | 2548 | dviware/dvisvgm/src/PDFToSVG.hpp -2020/03/02 | 1913 | dviware/dvisvgm/src/PreScanDVIReader.cpp -2020/03/02 | 1886 | dviware/dvisvgm/src/PreScanDVIReader.hpp -2020/03/02 | 10029 | dviware/dvisvgm/src/Process.cpp -2020/03/02 | 1815 | dviware/dvisvgm/src/Process.hpp -2020/09/12 | 12528 | dviware/dvisvgm/src/psdefs.cpp -2020/03/02 | 1806 | dviware/dvisvgm/src/PSFilter.hpp -2020/09/12 | 17224 | dviware/dvisvgm/src/PSInterpreter.cpp -2020/09/12 | 6967 | dviware/dvisvgm/src/PSInterpreter.hpp -2020/03/02 | 6516 | dviware/dvisvgm/src/PSPattern.cpp -2020/03/02 | 3928 | dviware/dvisvgm/src/PSPattern.hpp -2020/03/02 | 4494 | dviware/dvisvgm/src/PSPreviewFilter.cpp -2020/03/02 | 2605 | dviware/dvisvgm/src/PSPreviewFilter.hpp -2020/09/12 | 50592 | dviware/dvisvgm/src/PsSpecialHandler.cpp -2020/09/12 | 10282 | dviware/dvisvgm/src/PsSpecialHandler.hpp -2020/03/02 | 7059 | dviware/dvisvgm/src/RangeMap.cpp -2020/03/02 | 5180 | dviware/dvisvgm/src/RangeMap.hpp -2020/03/02 | 2871 | dviware/dvisvgm/src/ShadingPatch.cpp -2020/03/02 | 3150 | dviware/dvisvgm/src/ShadingPatch.hpp -2020/03/02 | 4203 | dviware/dvisvgm/src/SignalHandler.cpp -2020/03/02 | 2180 | dviware/dvisvgm/src/SignalHandler.hpp -2020/03/02 | 4623 | dviware/dvisvgm/src/SourceInput.cpp -2020/03/02 | 2388 | dviware/dvisvgm/src/SourceInput.hpp -2020/03/02 | 4238 | dviware/dvisvgm/src/SpecialActions.hpp -2020/03/02 | 2512 | dviware/dvisvgm/src/SpecialHandler.hpp -2020/03/02 | 6511 | dviware/dvisvgm/src/SpecialManager.cpp -2020/03/02 | 2958 | dviware/dvisvgm/src/SpecialManager.hpp -2020/03/02 | 5021 | dviware/dvisvgm/src/StreamReader.cpp -2020/03/02 | 2975 | dviware/dvisvgm/src/StreamReader.hpp -2020/03/02 | 3768 | dviware/dvisvgm/src/StreamWriter.cpp -2020/03/02 | 2196 | dviware/dvisvgm/src/StreamWriter.hpp -2020/11/21 | 9290 | dviware/dvisvgm/src/Subfont.cpp -2020/11/21 | 3521 | dviware/dvisvgm/src/Subfont.hpp -2020/03/02 | 3760 | dviware/dvisvgm/src/SVGCharHandler.cpp -2020/03/02 | 2024 | dviware/dvisvgm/src/SVGCharHandlerFactory.cpp -2020/03/02 | 1645 | dviware/dvisvgm/src/SVGCharHandlerFactory.hpp -2020/03/02 | 4093 | dviware/dvisvgm/src/SVGCharHandler.hpp -2020/03/02 | 5746 | dviware/dvisvgm/src/SVGCharPathHandler.cpp -2020/03/02 | 2455 | dviware/dvisvgm/src/SVGCharPathHandler.hpp -2020/03/02 | 3754 | dviware/dvisvgm/src/SVGCharTspanTextHandler.cpp -2020/03/02 | 2041 | dviware/dvisvgm/src/SVGCharTspanTextHandler.hpp -2020/03/02 | 6355 | dviware/dvisvgm/src/SVGOutput.cpp -2020/03/02 | 3493 | dviware/dvisvgm/src/SVGOutput.hpp -2020/03/02 | 2119 | dviware/dvisvgm/src/SVGSingleCharTextHandler.cpp -2020/03/02 | 1784 | dviware/dvisvgm/src/SVGSingleCharTextHandler.hpp -2020/03/02 | 12250 | dviware/dvisvgm/src/SVGTree.cpp -2020/03/02 | 4540 | dviware/dvisvgm/src/SVGTree.hpp -2020/03/02 | 2005 | dviware/dvisvgm/src/System.cpp -2020/03/02 | 1511 | dviware/dvisvgm/src/System.hpp -2020/03/02 | 20890 | dviware/dvisvgm/src/TensorProductPatch.cpp -2020/03/02 | 5274 | dviware/dvisvgm/src/TensorProductPatch.hpp -2020/03/02 | 6113 | dviware/dvisvgm/src/Terminal.cpp -2020/03/02 | 2284 | dviware/dvisvgm/src/Terminal.hpp -2020/03/02 | 7079 | dviware/dvisvgm/src/TFM.cpp -2020/03/02 | 3519 | dviware/dvisvgm/src/TFM.hpp -2020/03/02 | 4761 | dviware/dvisvgm/src/ToUnicodeMap.cpp -2020/03/02 | 1844 | dviware/dvisvgm/src/ToUnicodeMap.hpp -2020/03/02 | 13166 | dviware/dvisvgm/src/TpicSpecialHandler.cpp -2020/03/02 | 2613 | dviware/dvisvgm/src/TpicSpecialHandler.hpp -2020/03/02 | 8160 | dviware/dvisvgm/src/TriangularPatch.cpp -2020/03/02 | 3049 | dviware/dvisvgm/src/TriangularPatch.hpp -2020/03/02 | 7114 | dviware/dvisvgm/src/TrueTypeFont.cpp -2020/03/02 | 3275 | dviware/dvisvgm/src/TrueTypeFont.hpp -2020/03/02 | 4167 | dviware/dvisvgm/src/TTFAutohint.cpp -2020/03/02 | 2090 | dviware/dvisvgm/src/TTFAutohint.hpp -2020/11/21 | 8002 | dviware/dvisvgm/src/Unicode.cpp -2020/11/21 | 1860 | dviware/dvisvgm/src/Unicode.hpp -2020/03/02 | 7171 | dviware/dvisvgm/src/utility.cpp -2020/03/13 | 5501 | dviware/dvisvgm/src/utility.hpp -2020/03/02 | 3452 | dviware/dvisvgm/src/VectorIterator.hpp -2020/03/02 | 2949 | dviware/dvisvgm/src/VectorStream.hpp -2020/03/02 | 1577 | dviware/dvisvgm/src/version.hpp.in -2020/03/02 | 1911 | dviware/dvisvgm/src/VFActions.hpp -2020/03/02 | 6570 | dviware/dvisvgm/src/VFReader.cpp -2020/03/02 | 2443 | dviware/dvisvgm/src/VFReader.hpp -2020/03/02 | 1604 | dviware/dvisvgm/src/windows.hpp -2020/03/02 | 2240 | dviware/dvisvgm/src/XMLDocument.cpp -2020/03/02 | 2053 | dviware/dvisvgm/src/XMLDocument.hpp -2020/09/12 | 15612 | dviware/dvisvgm/src/XMLNode.cpp -2020/07/15 | 9954 | dviware/dvisvgm/src/XMLNode.hpp -2020/03/02 | 3036 | dviware/dvisvgm/src/XMLString.cpp -2020/03/02 | 1887 | dviware/dvisvgm/src/XMLString.hpp -2020/07/07 | 4735 | dviware/dvisvgm/src/XXHashFunction.hpp -2020/03/02 | 5940 | dviware/dvisvgm/src/ZLibOutputStream.hpp +2021/08/16 | 22194 | dviware/dvisvgm/src/optimizer/Makefile.in +2021/01/12 | 1642 | dviware/dvisvgm/src/optimizer/OptimizerModule.hpp +2021/01/12 | 3192 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp +2021/01/12 | 1644 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp +2021/01/12 | 4394 | dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp +2021/01/12 | 2297 | dviware/dvisvgm/src/optimizer/SVGOptimizer.hpp +2021/03/15 | 4179 | dviware/dvisvgm/src/optimizer/TextSimplifier.cpp +2021/01/12 | 1699 | dviware/dvisvgm/src/optimizer/TextSimplifier.hpp +2021/01/12 | 6846 | dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp +2021/01/12 | 1856 | dviware/dvisvgm/src/optimizer/TransformSimplifier.hpp +2021/01/12 | 2013 | dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp +2021/01/12 | 1687 | dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp +2021/01/12 | 2067 | dviware/dvisvgm/src/options.dtd +2021/01/12 | 8986 | dviware/dvisvgm/src/options.xml +2021/01/12 | 2829 | dviware/dvisvgm/src/PageRanges.cpp +2021/01/12 | 1676 | dviware/dvisvgm/src/PageRanges.hpp +2021/01/12 | 5332 | dviware/dvisvgm/src/PageSize.cpp +2021/01/12 | 2092 | dviware/dvisvgm/src/PageSize.hpp +2021/01/12 | 4043 | dviware/dvisvgm/src/Pair.hpp +2021/03/05 | 4042 | dviware/dvisvgm/src/PapersizeSpecialHandler.cpp +2021/01/12 | 2514 | dviware/dvisvgm/src/PapersizeSpecialHandler.hpp +2021/01/12 | 13145 | dviware/dvisvgm/src/PathClipper.cpp +2021/01/12 | 2432 | dviware/dvisvgm/src/PathClipper.hpp +2021/01/12 | 15422 | dviware/dvisvgm/src/PDFParser.cpp +2021/01/12 | 5841 | dviware/dvisvgm/src/PDFParser.hpp +2021/05/26 | 10418 | dviware/dvisvgm/src/PdfSpecialHandler.cpp +2021/01/12 | 2836 | dviware/dvisvgm/src/PdfSpecialHandler.hpp +2021/01/12 | 2548 | dviware/dvisvgm/src/PDFToSVG.hpp +2021/01/12 | 1913 | dviware/dvisvgm/src/PreScanDVIReader.cpp +2021/01/12 | 1886 | dviware/dvisvgm/src/PreScanDVIReader.hpp +2021/01/12 | 10029 | dviware/dvisvgm/src/Process.cpp +2021/01/12 | 1815 | dviware/dvisvgm/src/Process.hpp +2021/04/28 | 12876 | dviware/dvisvgm/src/psdefs.cpp +2021/01/12 | 1806 | dviware/dvisvgm/src/PSFilter.hpp +2021/03/25 | 17287 | dviware/dvisvgm/src/PSInterpreter.cpp +2021/03/15 | 7037 | dviware/dvisvgm/src/PSInterpreter.hpp +2021/03/15 | 6485 | dviware/dvisvgm/src/PSPattern.cpp +2021/05/26 | 4059 | dviware/dvisvgm/src/PSPattern.hpp +2021/01/12 | 4494 | dviware/dvisvgm/src/PSPreviewFilter.cpp +2021/01/12 | 2605 | dviware/dvisvgm/src/PSPreviewFilter.hpp +2021/08/16 | 49917 | dviware/dvisvgm/src/PsSpecialHandler.cpp +2021/08/16 | 9935 | dviware/dvisvgm/src/PsSpecialHandler.hpp +2021/03/05 | 7053 | dviware/dvisvgm/src/RangeMap.cpp +2021/01/12 | 5180 | dviware/dvisvgm/src/RangeMap.hpp +2021/01/12 | 2871 | dviware/dvisvgm/src/ShadingPatch.cpp +2021/01/12 | 3150 | dviware/dvisvgm/src/ShadingPatch.hpp +2021/01/12 | 4203 | dviware/dvisvgm/src/SignalHandler.cpp +2021/01/12 | 2180 | dviware/dvisvgm/src/SignalHandler.hpp +2021/01/12 | 4623 | dviware/dvisvgm/src/SourceInput.cpp +2021/01/12 | 2388 | dviware/dvisvgm/src/SourceInput.hpp +2021/03/15 | 4494 | dviware/dvisvgm/src/SpecialActions.hpp +2021/01/12 | 2512 | dviware/dvisvgm/src/SpecialHandler.hpp +2021/01/12 | 6511 | dviware/dvisvgm/src/SpecialManager.cpp +2021/01/12 | 2958 | dviware/dvisvgm/src/SpecialManager.hpp +2021/01/12 | 5021 | dviware/dvisvgm/src/StreamReader.cpp +2021/01/12 | 2975 | dviware/dvisvgm/src/StreamReader.hpp +2021/01/12 | 3768 | dviware/dvisvgm/src/StreamWriter.cpp +2021/01/12 | 2196 | dviware/dvisvgm/src/StreamWriter.hpp +2021/03/05 | 9256 | dviware/dvisvgm/src/Subfont.cpp +2021/01/12 | 3521 | dviware/dvisvgm/src/Subfont.hpp +2021/05/26 | 3676 | dviware/dvisvgm/src/SVGCharHandler.cpp +2021/01/12 | 2024 | dviware/dvisvgm/src/SVGCharHandlerFactory.cpp +2021/01/12 | 1645 | dviware/dvisvgm/src/SVGCharHandlerFactory.hpp +2021/03/15 | 4471 | dviware/dvisvgm/src/SVGCharHandler.hpp +2021/06/11 | 5814 | dviware/dvisvgm/src/SVGCharPathHandler.cpp +2021/03/15 | 2455 | dviware/dvisvgm/src/SVGCharPathHandler.hpp +2021/05/26 | 3959 | dviware/dvisvgm/src/SVGCharTspanTextHandler.cpp +2021/03/15 | 2041 | dviware/dvisvgm/src/SVGCharTspanTextHandler.hpp +2021/04/28 | 4511 | dviware/dvisvgm/src/SVGElement.cpp +2021/04/28 | 2803 | dviware/dvisvgm/src/SVGElement.hpp +2021/01/12 | 6355 | dviware/dvisvgm/src/SVGOutput.cpp +2021/01/12 | 3493 | dviware/dvisvgm/src/SVGOutput.hpp +2021/03/15 | 2182 | dviware/dvisvgm/src/SVGSingleCharTextHandler.cpp +2021/01/12 | 1784 | dviware/dvisvgm/src/SVGSingleCharTextHandler.hpp +2021/05/26 | 12102 | dviware/dvisvgm/src/SVGTree.cpp +2021/03/15 | 4721 | dviware/dvisvgm/src/SVGTree.hpp +2021/01/12 | 2005 | dviware/dvisvgm/src/System.cpp +2021/01/12 | 1511 | dviware/dvisvgm/src/System.hpp +2021/05/26 | 21248 | dviware/dvisvgm/src/TensorProductPatch.cpp +2021/01/12 | 5274 | dviware/dvisvgm/src/TensorProductPatch.hpp +2021/01/12 | 6113 | dviware/dvisvgm/src/Terminal.cpp +2021/01/12 | 2284 | dviware/dvisvgm/src/Terminal.hpp +2021/01/12 | 7079 | dviware/dvisvgm/src/TFM.cpp +2021/01/12 | 3519 | dviware/dvisvgm/src/TFM.hpp +2021/01/12 | 4761 | dviware/dvisvgm/src/ToUnicodeMap.cpp +2021/01/12 | 1844 | dviware/dvisvgm/src/ToUnicodeMap.hpp +2021/03/15 | 12940 | dviware/dvisvgm/src/TpicSpecialHandler.cpp +2021/01/12 | 2613 | dviware/dvisvgm/src/TpicSpecialHandler.hpp +2021/05/26 | 8354 | dviware/dvisvgm/src/TriangularPatch.cpp +2021/01/12 | 3049 | dviware/dvisvgm/src/TriangularPatch.hpp +2021/03/05 | 7108 | dviware/dvisvgm/src/TrueTypeFont.cpp +2021/01/12 | 3275 | dviware/dvisvgm/src/TrueTypeFont.hpp +2021/01/12 | 4167 | dviware/dvisvgm/src/TTFAutohint.cpp +2021/01/12 | 2090 | dviware/dvisvgm/src/TTFAutohint.hpp +2021/01/12 | 8002 | dviware/dvisvgm/src/Unicode.cpp +2021/01/12 | 1860 | dviware/dvisvgm/src/Unicode.hpp +2021/03/05 | 7162 | dviware/dvisvgm/src/utility.cpp +2021/05/26 | 5772 | dviware/dvisvgm/src/utility.hpp +2021/03/25 | 3439 | dviware/dvisvgm/src/VectorIterator.hpp +2021/01/12 | 2949 | dviware/dvisvgm/src/VectorStream.hpp +2021/01/12 | 1577 | dviware/dvisvgm/src/version.hpp.in +2021/01/12 | 1911 | dviware/dvisvgm/src/VFActions.hpp +2021/01/12 | 6570 | dviware/dvisvgm/src/VFReader.cpp +2021/01/12 | 2443 | dviware/dvisvgm/src/VFReader.hpp +2021/01/12 | 1604 | dviware/dvisvgm/src/windows.hpp +2021/03/05 | 2237 | dviware/dvisvgm/src/XMLDocument.cpp +2021/01/12 | 2053 | dviware/dvisvgm/src/XMLDocument.hpp +2021/03/15 | 15641 | dviware/dvisvgm/src/XMLNode.cpp +2021/03/15 | 9963 | dviware/dvisvgm/src/XMLNode.hpp +2021/01/12 | 3036 | dviware/dvisvgm/src/XMLString.cpp +2021/01/12 | 1887 | dviware/dvisvgm/src/XMLString.hpp +2021/01/12 | 4735 | dviware/dvisvgm/src/XXHashFunction.hpp +2021/01/12 | 5940 | dviware/dvisvgm/src/ZLibOutputStream.hpp 2019/03/09 | 4642 | dviware/dvisvgm/test-driver -2020/03/02 | 6075 | dviware/dvisvgm/tests/BezierTest.cpp -2020/03/02 | 2704 | dviware/dvisvgm/tests/BitmapTest.cpp -2020/03/02 | 6074 | dviware/dvisvgm/tests/BoundingBoxTest.cpp -2020/03/21 | 3204 | dviware/dvisvgm/tests/CalculatorTest.cpp -2020/03/02 | 1216 | dviware/dvisvgm/tests/check-conv -2020/03/02 | 2974 | dviware/dvisvgm/tests/CMapManagerTest.cpp -2020/03/02 | 4223 | dviware/dvisvgm/tests/CMapReaderTest.cpp -2020/03/02 | 4980 | dviware/dvisvgm/tests/CMapTest.cpp -2020/03/02 | 4702 | dviware/dvisvgm/tests/ColorSpecialTest.cpp -2020/03/02 | 6942 | dviware/dvisvgm/tests/ColorTest.cpp -2020/03/02 | 8439 | dviware/dvisvgm/tests/CommandLineTest.cpp +2021/01/12 | 6075 | dviware/dvisvgm/tests/BezierTest.cpp +2021/01/12 | 2704 | dviware/dvisvgm/tests/BitmapTest.cpp +2021/01/12 | 6074 | dviware/dvisvgm/tests/BoundingBoxTest.cpp +2021/01/12 | 3688 | dviware/dvisvgm/tests/CalculatorTest.cpp +2021/01/12 | 1216 | dviware/dvisvgm/tests/check-conv +2021/01/12 | 2974 | dviware/dvisvgm/tests/CMapManagerTest.cpp +2021/01/12 | 4223 | dviware/dvisvgm/tests/CMapReaderTest.cpp +2021/01/12 | 4980 | dviware/dvisvgm/tests/CMapTest.cpp +2021/01/12 | 4702 | dviware/dvisvgm/tests/ColorSpecialTest.cpp +2021/01/12 | 6942 | dviware/dvisvgm/tests/ColorTest.cpp +2021/01/12 | 8439 | dviware/dvisvgm/tests/CommandLineTest.cpp 2016/09/03 | 2508 | dviware/dvisvgm/tests/data/cidjmgr0-h.tfm 2016/09/03 | 24244 | dviware/dvisvgm/tests/data/cmr10.600gf 2017/11/23 | 35752 | dviware/dvisvgm/tests/data/cmr10.pfb @@ -4081,8 +4085,9 @@ 2016/09/03 | 2072 | dviware/dvisvgm/tests/data/frktest.dvi 2016/09/03 | 337419 | dviware/dvisvgm/tests/data/frktest-nf-cmp.svg 2016/09/03 | 163979 | dviware/dvisvgm/tests/data/frktest-wf-cmp.svg -2020/03/02 | 428 | dviware/dvisvgm/tests/data/Makefile.am -2020/11/28 | 13688 | dviware/dvisvgm/tests/data/Makefile.in +2021/05/26 | 63012 | dviware/dvisvgm/tests/data/lmmono12-regular.otf +2021/06/11 | 452 | dviware/dvisvgm/tests/data/Makefile.am +2021/08/16 | 13740 | dviware/dvisvgm/tests/data/Makefile.in 2016/09/03 | 1207 | dviware/dvisvgm/tests/data/ot1.cmap 2016/09/03 | 1320 | dviware/dvisvgm/tests/data/sample.dvi 2016/09/03 | 60654 | dviware/dvisvgm/tests/data/sample-nf-cmp.svg @@ -4090,23 +4095,23 @@ 2017/11/23 | 1016 | dviware/dvisvgm/tests/data/sample_v2.dvi 2017/11/23 | 256 | dviware/dvisvgm/tests/data/sample_v3.dvi 2016/09/03 | 46985 | dviware/dvisvgm/tests/data/sample-wf-cmp.svg -2020/03/02 | 2512 | dviware/dvisvgm/tests/DependencyGraphTest.cpp -2020/03/02 | 2773 | dviware/dvisvgm/tests/DirectoryTest.cpp -2020/03/02 | 33210 | dviware/dvisvgm/tests/DVIReaderTest.cpp -2020/07/04 | 13283 | dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp -2020/03/02 | 5850 | dviware/dvisvgm/tests/EllipticalArcTest.cpp -2020/03/02 | 7485 | dviware/dvisvgm/tests/EmSpecialTest.cpp -2020/03/02 | 3124 | dviware/dvisvgm/tests/FileFinderTest.cpp -2020/03/02 | 3758 | dviware/dvisvgm/tests/FilePathTest.cpp -2020/03/02 | 3899 | dviware/dvisvgm/tests/FileSystemTest.cpp -2020/03/02 | 5070 | dviware/dvisvgm/tests/FontCacheTest.cpp -2020/03/02 | 2582 | dviware/dvisvgm/tests/FontManagerTest.cpp -2020/03/02 | 2850 | dviware/dvisvgm/tests/FontMapTest.cpp -2020/03/02 | 2026 | dviware/dvisvgm/tests/genhashcheck.py -2020/03/02 | 4645 | dviware/dvisvgm/tests/GFGlyphTracerTest.cpp -2020/03/02 | 12993 | dviware/dvisvgm/tests/GFReaderTest.cpp -2020/03/02 | 2083 | dviware/dvisvgm/tests/GhostscriptTest.cpp -2020/03/02 | 7230 | dviware/dvisvgm/tests/GraphicsPathTest.cpp +2021/01/12 | 2512 | dviware/dvisvgm/tests/DependencyGraphTest.cpp +2021/01/12 | 2773 | dviware/dvisvgm/tests/DirectoryTest.cpp +2021/01/12 | 33210 | dviware/dvisvgm/tests/DVIReaderTest.cpp +2021/01/12 | 13283 | dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp +2021/01/12 | 5850 | dviware/dvisvgm/tests/EllipticalArcTest.cpp +2021/03/15 | 7485 | dviware/dvisvgm/tests/EmSpecialTest.cpp +2021/01/12 | 3124 | dviware/dvisvgm/tests/FileFinderTest.cpp +2021/08/16 | 4004 | dviware/dvisvgm/tests/FilePathTest.cpp +2021/01/12 | 3899 | dviware/dvisvgm/tests/FileSystemTest.cpp +2021/01/12 | 5070 | dviware/dvisvgm/tests/FontCacheTest.cpp +2021/05/26 | 3875 | dviware/dvisvgm/tests/FontManagerTest.cpp +2021/01/12 | 2850 | dviware/dvisvgm/tests/FontMapTest.cpp +2021/01/12 | 2026 | dviware/dvisvgm/tests/genhashcheck.py +2021/01/12 | 4645 | dviware/dvisvgm/tests/GFGlyphTracerTest.cpp +2021/01/12 | 12993 | dviware/dvisvgm/tests/GFReaderTest.cpp +2021/01/12 | 2083 | dviware/dvisvgm/tests/GhostscriptTest.cpp +2021/01/12 | 7230 | dviware/dvisvgm/tests/GraphicsPathTest.cpp 2019/10/25 | 14367 | dviware/dvisvgm/tests/gtest/include/gtest/gtest-death-test.h 2019/10/25 | 93924 | dviware/dvisvgm/tests/gtest/include/gtest/gtest.h 2019/10/25 | 27039 | dviware/dvisvgm/tests/gtest/include/gtest/gtest-matchers.h @@ -4144,45 +4149,45 @@ 2019/10/25 | 14711 | dviware/dvisvgm/tests/gtest/src/gtest-printers.cc 2019/10/25 | 4010 | dviware/dvisvgm/tests/gtest/src/gtest-test-part.cc 2019/10/25 | 3923 | dviware/dvisvgm/tests/gtest/src/gtest-typed-test.cc -2020/07/07 | 5568 | dviware/dvisvgm/tests/HashFunctionTest.cpp -2020/03/02 | 4034 | dviware/dvisvgm/tests/JFMReaderTest.cpp -2020/03/02 | 7803 | dviware/dvisvgm/tests/LengthTest.cpp -2020/03/02 | 15639 | dviware/dvisvgm/tests/Makefile.am -2020/11/28 | 256010 | dviware/dvisvgm/tests/Makefile.in -2020/03/02 | 5795 | dviware/dvisvgm/tests/MapLineTest.cpp -2020/03/02 | 8338 | dviware/dvisvgm/tests/MatrixTest.cpp -2020/03/02 | 2315 | dviware/dvisvgm/tests/MessageExceptionTest.cpp -2020/03/02 | 4799 | dviware/dvisvgm/tests/normalize.xsl -2020/03/02 | 4640 | dviware/dvisvgm/tests/PageRagesTest.cpp -2020/03/02 | 2398 | dviware/dvisvgm/tests/PageSizeTest.cpp -2020/03/02 | 4193 | dviware/dvisvgm/tests/PairTest.cpp -2020/03/02 | 4922 | dviware/dvisvgm/tests/PapersizeSpecialTest.cpp -2020/03/02 | 8452 | dviware/dvisvgm/tests/PDFParserTest.cpp -2020/09/12 | 8951 | dviware/dvisvgm/tests/PSInterpreterTest.cpp -2020/03/02 | 6392 | dviware/dvisvgm/tests/RangeMapTest.cpp -2020/03/02 | 3629 | dviware/dvisvgm/tests/ShadingPatchTest.cpp -2020/03/02 | 3801 | dviware/dvisvgm/tests/SpecialManagerTest.cpp -2020/03/02 | 5392 | dviware/dvisvgm/tests/SplittedCharInputBufferTest.cpp -2020/03/02 | 7499 | dviware/dvisvgm/tests/StreamInputBufferTest.cpp -2020/03/02 | 4178 | dviware/dvisvgm/tests/StreamReaderTest.cpp -2020/03/02 | 3420 | dviware/dvisvgm/tests/StreamWriterTest.cpp -2020/03/02 | 4460 | dviware/dvisvgm/tests/StringMatcherTest.cpp -2020/11/21 | 3363 | dviware/dvisvgm/tests/SubfontTest.cpp -2020/03/02 | 6521 | dviware/dvisvgm/tests/SVGOutputTest.cpp -2020/03/02 | 12810 | dviware/dvisvgm/tests/TensorProductPatchTest.cpp -2020/03/02 | 1999 | dviware/dvisvgm/tests/testmain.cpp +2021/01/12 | 5568 | dviware/dvisvgm/tests/HashFunctionTest.cpp +2021/01/12 | 4034 | dviware/dvisvgm/tests/JFMReaderTest.cpp +2021/01/12 | 7803 | dviware/dvisvgm/tests/LengthTest.cpp +2021/01/12 | 15639 | dviware/dvisvgm/tests/Makefile.am +2021/08/16 | 256038 | dviware/dvisvgm/tests/Makefile.in +2021/01/12 | 5795 | dviware/dvisvgm/tests/MapLineTest.cpp +2021/03/25 | 8332 | dviware/dvisvgm/tests/MatrixTest.cpp +2021/01/12 | 2315 | dviware/dvisvgm/tests/MessageExceptionTest.cpp +2021/01/12 | 4799 | dviware/dvisvgm/tests/normalize.xsl +2021/01/12 | 4640 | dviware/dvisvgm/tests/PageRagesTest.cpp +2021/01/12 | 2398 | dviware/dvisvgm/tests/PageSizeTest.cpp +2021/01/12 | 4193 | dviware/dvisvgm/tests/PairTest.cpp +2021/01/12 | 4922 | dviware/dvisvgm/tests/PapersizeSpecialTest.cpp +2021/01/12 | 8452 | dviware/dvisvgm/tests/PDFParserTest.cpp +2021/03/15 | 9574 | dviware/dvisvgm/tests/PSInterpreterTest.cpp +2021/01/12 | 6392 | dviware/dvisvgm/tests/RangeMapTest.cpp +2021/01/12 | 3629 | dviware/dvisvgm/tests/ShadingPatchTest.cpp +2021/01/12 | 3801 | dviware/dvisvgm/tests/SpecialManagerTest.cpp +2021/01/12 | 5392 | dviware/dvisvgm/tests/SplittedCharInputBufferTest.cpp +2021/01/12 | 7499 | dviware/dvisvgm/tests/StreamInputBufferTest.cpp +2021/01/12 | 4178 | dviware/dvisvgm/tests/StreamReaderTest.cpp +2021/01/12 | 3420 | dviware/dvisvgm/tests/StreamWriterTest.cpp +2021/01/12 | 4460 | dviware/dvisvgm/tests/StringMatcherTest.cpp +2021/01/12 | 3363 | dviware/dvisvgm/tests/SubfontTest.cpp +2021/01/12 | 6521 | dviware/dvisvgm/tests/SVGOutputTest.cpp +2021/01/12 | 12810 | dviware/dvisvgm/tests/TensorProductPatchTest.cpp +2021/01/12 | 1999 | dviware/dvisvgm/tests/testmain.cpp 2019/10/25 | 184 | dviware/dvisvgm/tests/testutil.hpp -2020/03/02 | 3348 | dviware/dvisvgm/tests/TFMReaderTest.cpp -2020/03/02 | 2501 | dviware/dvisvgm/tests/ToUnicodeMapTest.cpp -2020/03/02 | 14085 | dviware/dvisvgm/tests/TpicSpecialTest.cpp -2020/03/02 | 7066 | dviware/dvisvgm/tests/TriangularPatchTest.cpp -2020/11/21 | 6084 | dviware/dvisvgm/tests/UnicodeTest.cpp -2020/03/02 | 5208 | dviware/dvisvgm/tests/UtilityTest.cpp -2020/03/02 | 3785 | dviware/dvisvgm/tests/VectorIteratorTest.cpp -2020/03/02 | 2276 | dviware/dvisvgm/tests/VectorStreamTest.cpp -2020/03/02 | 15061 | dviware/dvisvgm/tests/XMLNodeTest.cpp -2020/03/02 | 3034 | dviware/dvisvgm/tests/XMLStringTest.cpp -2020/11/30 | 3503052 | dviware/dvisvgm.zip +2021/01/12 | 3348 | dviware/dvisvgm/tests/TFMReaderTest.cpp +2021/01/12 | 2501 | dviware/dvisvgm/tests/ToUnicodeMapTest.cpp +2021/03/15 | 13772 | dviware/dvisvgm/tests/TpicSpecialTest.cpp +2021/01/12 | 7066 | dviware/dvisvgm/tests/TriangularPatchTest.cpp +2021/01/12 | 6084 | dviware/dvisvgm/tests/UnicodeTest.cpp +2021/01/12 | 5208 | dviware/dvisvgm/tests/UtilityTest.cpp +2021/01/12 | 3785 | dviware/dvisvgm/tests/VectorIteratorTest.cpp +2021/01/12 | 2276 | dviware/dvisvgm/tests/VectorStreamTest.cpp +2021/01/12 | 15061 | dviware/dvisvgm/tests/XMLNodeTest.cpp +2021/01/12 | 3034 | dviware/dvisvgm/tests/XMLStringTest.cpp +2021/08/25 | 3557191 | dviware/dvisvgm.zip 1991/04/12 | 1728 | dviware/dvitops/aftopl.1 1991/04/12 | 12075 | dviware/dvitops/aftopl.c 1991/01/25 | 837 | dviware/dvitops/cms.h @@ -5100,7 +5105,7 @@ 1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp 1990/10/02 | 812 | dviware/vutex/vaxvms.ins 1990/10/02 | 127576 | dviware/vutex/vutex.web -2021/08/24 | 59260 | FILES.last07days +2021/08/25 | 55899 | FILES.last07days 2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs 2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf 2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf @@ -146387,7 +146392,7 @@ 1995/04/26 | 830 | graphics/pstex/readme.dos 1995/04/26 | 1436 | graphics/pstex/std.h 2006/05/21 | 60272 | graphics/pstex.zip -2021/08/23 | 23995 | graphics/pstricks/base/Changes +2021/08/25 | 24348 | graphics/pstricks/base/Changes 2020/06/09 | 2081 | graphics/pstricks/base/config/distiller.cfg 2020/06/09 | 14970 | graphics/pstricks/base/config/dvips.cfg 2020/06/09 | 4938 | graphics/pstricks/base/config/dvipsone.cfg @@ -146401,7 +146406,7 @@ 2018/02/08 | 78815 | graphics/pstricks/base/doc/images/tiger.eps 2018/02/08 | 33406 | graphics/pstricks/base/doc/images/tiger.pdf 2018/02/08 | 25329 | graphics/pstricks/base/doc/pst-doc.bst -2019/05/11 | 18735 | graphics/pstricks/base/doc/pst-doc.cls +2021/08/25 | 18774 | graphics/pstricks/base/doc/pst-doc.cls 2018/02/08 | 1086 | graphics/pstricks/base/doc/pst-doc.ist 2018/02/08 | 6433 | graphics/pstricks/base/doc/pst-doc.pdf 2018/02/08 | 133777 | graphics/pstricks/base/doc/pst-news05.pdf @@ -146434,11 +146439,11 @@ 2019/05/11 | 5421 | graphics/pstricks/base/doc/pst-news19.tex 2020/09/18 | 320406 | graphics/pstricks/base/doc/pst-news20.pdf 2020/09/18 | 4946 | graphics/pstricks/base/doc/pst-news20.tex -2021/08/23 | 43741 | graphics/pstricks/base/doc/pst-news21.pdf -2021/08/23 | 2502 | graphics/pstricks/base/doc/pst-news21.tex +2021/08/25 | 529359 | graphics/pstricks/base/doc/pst-news21.pdf +2021/08/25 | 7611 | graphics/pstricks/base/doc/pst-news21.tex 2018/02/08 | 3459 | graphics/pstricks/base/doc/pst-news.sty 2018/02/08 | 9737 | graphics/pstricks/base/doc/pst-news.tex -2018/02/08 | 3180 | graphics/pstricks/base/doc/PSTricks.bib +2021/08/25 | 3978 | graphics/pstricks/base/doc/PSTricks.bib 2018/02/08 | 17221 | graphics/pstricks/base/doc/pstricks-bug.tex 2018/02/08 | 5367012 | graphics/pstricks/base/doc/pstricks-doc.pdf 2018/02/08 | 898183 | graphics/pstricks/base/doc/pst-user.pdf @@ -146449,14 +146454,14 @@ 2020/06/07 | 4734 | graphics/pstricks/base/dvips/pst-dots97.pro 2020/06/09 | 6815 | graphics/pstricks/base/dvips/pst-dots.pro 2020/06/07 | 12327 | graphics/pstricks/base/dvips/pstricks97.pro -2021/08/19 | 36942 | graphics/pstricks/base/dvips/pstricks.pro +2021/08/25 | 37013 | graphics/pstricks/base/dvips/pstricks.pro 2020/11/20 | 23491 | graphics/pstricks/base/generic/pst-fp.tex 2020/06/09 | 2787 | graphics/pstricks/base/generic/pst-key.tex 2020/06/07 | 70662 | graphics/pstricks/base/generic/pstricks97.tex +2021/08/25 | 18890 | graphics/pstricks/base/generic/pstricks-arrows.tex 2020/06/09 | 14948 | graphics/pstricks/base/generic/pstricks.con -2021/08/23 | 140425 | graphics/pstricks/base/generic/pstricks.tex +2021/08/25 | 132707 | graphics/pstricks/base/generic/pstricks.tex 2020/06/09 | 3057 | graphics/pstricks/base/generic/pstricks-tex.def -2020/04/22 | 139190 | graphics/pstricks/base/generic/pstricks.tex.neu 2020/06/09 | 1004 | graphics/pstricks/base/generic/pstricks-xetex.def 2020/06/09 | 1107 | graphics/pstricks/base/latex/pst-all.sty 2020/06/09 | 899 | graphics/pstricks/base/latex/pstcol.sty @@ -146464,7 +146469,7 @@ 2020/09/18 | 5261 | graphics/pstricks/base/latex/pstricks-pdf.sty 2021/08/23 | 8069 | graphics/pstricks/base/latex/pstricks.sty 2021/08/23 | 4651 | graphics/pstricks/base/README -2021/08/23 | 8003972 | graphics/pstricks/base.zip +2021/08/25 | 8184083 | graphics/pstricks/base.zip 2014/07/25 | 3769 | graphics/pstricks/contrib/dsptricks/dspblocks.sty 2014/07/24 | 9254 | graphics/pstricks/contrib/dsptricks/dspfunctions.sty 2014/07/25 | 212782 | graphics/pstricks/contrib/dsptricks/dspTricksManual.pdf @@ -146674,14 +146679,14 @@ 2018/02/13 | 1169 | graphics/pstricks/contrib/pst-antiprism/README.md 2018/02/13 | 2412 | graphics/pstricks/contrib/pst-antiprism/tex/pst-antiprism.tex 2018/02/13 | 317587 | graphics/pstricks/contrib/pst-antiprism.zip -2021/07/28 | 354 | graphics/pstricks/contrib/pst-arrow/Changes -2021/07/28 | 3204 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.bib -2021/07/28 | 212452 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.pdf -2021/07/28 | 30546 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.tex -2021/07/28 | 527 | graphics/pstricks/contrib/pst-arrow/latex/pst-arrow.sty -2021/07/28 | 562 | graphics/pstricks/contrib/pst-arrow/README -2021/07/28 | 21115 | graphics/pstricks/contrib/pst-arrow/tex/pst-arrow.tex -2021/07/28 | 149475 | graphics/pstricks/contrib/pst-arrow.zip +2021/08/25 | 533 | graphics/pstricks/contrib/pst-arrow/Changes +2021/08/25 | 3204 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.bib +2021/08/25 | 222065 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.pdf +2021/08/25 | 31168 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.tex +2021/08/25 | 527 | graphics/pstricks/contrib/pst-arrow/latex/pst-arrow.sty +2021/08/25 | 562 | graphics/pstricks/contrib/pst-arrow/README +2021/08/25 | 10422 | graphics/pstricks/contrib/pst-arrow/tex/pst-arrow.tex +2021/08/25 | 151742 | graphics/pstricks/contrib/pst-arrow.zip 2006/09/17 | 210219 | graphics/pstricks/contrib/pst-asr/pst-asr-doc.pdf 2006/10/19 | 50318 | graphics/pstricks/contrib/pst-asr/pst-asr-doc-source.zip 2006/09/23 | 54041 | graphics/pstricks/contrib/pst-asr/pst-asr-examples.pdf @@ -187949,13 +187954,13 @@ 2005/10/04 | 11559 | macros/generic/TeX-PS/poligraf.zip 2001/06/09 | 25695 | macros/generic/TeX-PS/trans.tex 2021/05/27 | 748 | macros/generic/tokcycle/README -2021/06/25 | 601001 | macros/generic/tokcycle/tokcycle-doc.pdf +2021/08/25 | 627435 | macros/generic/tokcycle/tokcycle-doc.pdf 2021/05/27 | 53642 | macros/generic/tokcycle/tokcycle-doc.tex -2021/06/25 | 604143 | macros/generic/tokcycle/tokcycle-examples.pdf +2021/08/25 | 630351 | macros/generic/tokcycle/tokcycle-examples.pdf 2021/05/27 | 77366 | macros/generic/tokcycle/tokcycle-examples.tex 2020/02/04 | 131 | macros/generic/tokcycle/tokcycle.sty -2021/06/25 | 18602 | macros/generic/tokcycle/tokcycle.tex -2021/06/25 | 1194315 | macros/generic/tokcycle.zip +2021/08/25 | 18738 | macros/generic/tokcycle/tokcycle.tex +2021/08/25 | 1223986 | macros/generic/tokcycle.zip 2020/06/30 | 4310 | macros/generic/tracklang/CHANGES 2020/06/30 | 930 | macros/generic/tracklang/README 2020/06/30 | 313 | macros/generic/tracklang/samples/animals/animals2-en-GB.ldf @@ -202575,16 +202580,16 @@ 2021/06/13 | 2422 | macros/latex/contrib/href-ul/href-ul.tex 2021/06/13 | 1164 | macros/latex/contrib/href-ul/README.md 2021/06/13 | 51933 | macros/latex/contrib/href-ul.zip -2021/08/06 | 403 | macros/latex/contrib/huawei/DEPENDS.txt -2021/08/06 | 17466 | macros/latex/contrib/huawei/huawei.cls -2021/08/06 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf -2021/08/06 | 336961 | macros/latex/contrib/huawei/huawei.pdf -2021/08/06 | 8141 | macros/latex/contrib/huawei/huawei.tex -2021/08/06 | 1497 | macros/latex/contrib/huawei/README.md -2021/08/06 | 1947 | macros/latex/contrib/huawei/samples/huawei-cfp.tex -2021/08/06 | 2057 | macros/latex/contrib/huawei/samples/huawei-charter.tex -2021/08/06 | 1461 | macros/latex/contrib/huawei/samples/huawei-main.bib -2021/08/06 | 604627 | macros/latex/contrib/huawei.zip +2021/08/25 | 403 | macros/latex/contrib/huawei/DEPENDS.txt +2021/08/25 | 17491 | macros/latex/contrib/huawei/huawei.cls +2021/08/25 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf +2021/08/25 | 333239 | macros/latex/contrib/huawei/huawei.pdf +2021/08/25 | 7605 | macros/latex/contrib/huawei/huawei.tex +2021/08/25 | 1497 | macros/latex/contrib/huawei/README.md +2021/08/25 | 1947 | macros/latex/contrib/huawei/samples/huawei-cfp.tex +2021/08/25 | 2057 | macros/latex/contrib/huawei/samples/huawei-charter.tex +2021/08/25 | 1461 | macros/latex/contrib/huawei/samples/huawei-main.bib +2021/08/25 | 600780 | macros/latex/contrib/huawei.zip 2020/11/03 | 174943 | macros/latex/contrib/hulipsum/hulipsum.dtx 2020/11/01 | 1704 | macros/latex/contrib/hulipsum/hulipsum.ins 2020/11/03 | 145394 | macros/latex/contrib/hulipsum/hulipsum.pdf @@ -209624,23 +209629,23 @@ 2003/09/04 | 15735 | macros/latex/contrib/pointRuler/ruler.pdf 2003/09/04 | 1453 | macros/latex/contrib/pointRuler/ruler.tex 2009/10/27 | 121931 | macros/latex/contrib/pointRuler.zip -2017/05/04 | 4249 | macros/latex/contrib/polski/conowego.txt -2007/12/18 | 9731 | macros/latex/contrib/polski/czytaj.txt +2021/08/25 | 4524 | macros/latex/contrib/polski/conowego.txt +2021/08/25 | 9865 | macros/latex/contrib/polski/czytaj.txt 2017/05/04 | 9362 | macros/latex/contrib/polski/ot1patch.dtx 1998/04/20 | 131 | macros/latex/contrib/polski/ot1patch.ins 2008/02/24 | 17771 | macros/latex/contrib/polski/plfonts.fdd 2017/05/04 | 15617 | macros/latex/contrib/polski/plprefix.dtx 1998/04/20 | 141 | macros/latex/contrib/polski/plprefix.ins -2021/08/22 | 54079 | macros/latex/contrib/polski/polski.dtx -2017/05/04 | 7384 | macros/latex/contrib/polski/polski.ins -2021/08/22 | 191131 | macros/latex/contrib/polski/polski.pdf -2017/05/05 | 1413 | macros/latex/contrib/polski/README -2021/08/22 | 86160 | macros/latex/contrib/polski/sample-polski.pdf +2021/08/25 | 54079 | macros/latex/contrib/polski/polski.dtx +2021/08/25 | 7396 | macros/latex/contrib/polski/polski.ins +2021/08/25 | 191317 | macros/latex/contrib/polski/polski.pdf +2021/08/25 | 1436 | macros/latex/contrib/polski/README +2021/08/25 | 86160 | macros/latex/contrib/polski/sample-polski.pdf 2007/12/18 | 4902 | macros/latex/contrib/polski/sample-polski.tex 2007/12/18 | 2294 | macros/latex/contrib/polski/sample-rysunek1.mps 2007/12/18 | 1396 | macros/latex/contrib/polski/sample-rysunek.mp -2007/12/18 | 17316 | macros/latex/contrib/polski/strony.dtx -2021/08/23 | 322705 | macros/latex/contrib/polski.zip +2021/08/25 | 16980 | macros/latex/contrib/polski/strony.dtx +2021/08/25 | 322788 | macros/latex/contrib/polski.zip 2007/03/18 | 14445 | macros/latex/contrib/polynomial/polynomial.dtx 2007/03/18 | 994 | macros/latex/contrib/polynomial/polynomial.ins 2007/03/18 | 144575 | macros/latex/contrib/polynomial/polynomial.pdf @@ -277645,7 +277650,7 @@ 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz -2021/08/24 | 399840 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60307.tar.xz +2021/08/25 | 399840 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60315.tar.xz 2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz 2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz 2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz @@ -277669,7 +277674,7 @@ 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz 2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz -2021/08/24 | 108268 | systems/texlive/tlnet/archive/texlive-scripts.r60307.tar.xz +2021/08/25 | 108288 | systems/texlive/tlnet/archive/texlive-scripts.r60315.tar.xz 2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz 2021/04/12 | 36308 | systems/texlive/tlnet/archive/texlive-scripts.win32.r58829.tar.xz 2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz @@ -279393,16 +279398,16 @@ 2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz 2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz 2021/05/02 | 105152 | systems/texlive/tlnet/install-tl -2021/08/24 | 6811534 | systems/texlive/tlnet/install-tl-unx.tar.gz -2021/08/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2021/08/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2021/08/25 | 6811609 | systems/texlive/tlnet/install-tl-unx.tar.gz +2021/08/25 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2021/08/25 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat -2021/08/24 | 20809390 | systems/texlive/tlnet/install-tl-windows.exe -2021/08/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2021/08/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2021/08/24 | 25585288 | systems/texlive/tlnet/install-tl.zip -2021/08/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2021/08/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2021/08/25 | 20810684 | systems/texlive/tlnet/install-tl-windows.exe +2021/08/25 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2021/08/25 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2021/08/25 | 25585309 | systems/texlive/tlnet/install-tl.zip +2021/08/25 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2021/08/25 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc 2021/04/01 | 1229 | systems/texlive/tlnet/README.md 2021/04/01 | 0 | systems/texlive/tlnet/TEXLIVE_2021 2021/07/03 | 7181 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg @@ -279412,7 +279417,7 @@ 2021/07/03 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2021/07/02 | 49348 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2021/08/23 | 6780 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2021/08/24 | 6908 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2020/04/15 | 223687 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt 2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe 2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt @@ -279454,12 +279459,12 @@ 2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm 2021/05/16 | 5402 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2021/05/16 | 27555 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2021/08/24 | 17372965 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2021/08/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2021/08/25 | 17372965 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2021/08/25 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2021/05/16 | 86511 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2021/08/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2021/08/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2021/08/24 | 2331668 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2021/08/25 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2021/08/25 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2021/08/25 | 2329648 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2021/05/16 | 58801 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2021/05/16 | 42084 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2021/05/16 | 16103 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm @@ -284342,7 +284347,7 @@ 2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma 2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma 2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma -2021/08/24 | 594084 | systems/win32/miktex/tm/packages/files.csv.lzma +2021/08/25 | 594084 | systems/win32/miktex/tm/packages/files.csv.lzma 2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma 2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma 2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma @@ -285704,9 +285709,9 @@ 2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma 2021/08/07 | 39000 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma 2021/08/07 | 43393 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma -2021/08/24 | 235961 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2021/08/24 | 1329200 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2021/08/24 | 1235424 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2021/08/25 | 236026 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2021/08/25 | 1329454 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2021/08/25 | 1235066 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2021/08/07 | 13446 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma 2021/08/07 | 14327 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma 2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma @@ -285906,189 +285911,189 @@ 2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma 2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma 2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma -2021/08/24 | 594002 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2021/08/24 | 51113 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma -2021/08/24 | 56475 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2021/08/24 | 975020 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma -2021/08/24 | 1077990 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2021/08/24 | 29036 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma -2021/08/24 | 31352 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2021/08/24 | 29841 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma -2021/08/24 | 34665 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2021/08/24 | 50151 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma -2021/08/24 | 57548 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2021/08/24 | 83540 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma -2021/08/24 | 95401 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2021/08/24 | 67821 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma -2021/08/24 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2021/08/24 | 27199 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma -2021/08/24 | 30824 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2021/08/24 | 330788 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma -2021/08/24 | 392793 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2021/08/24 | 32673 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma -2021/08/24 | 36629 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma -2021/08/24 | 51310 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma -2021/08/24 | 56686 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2021/08/24 | 241811 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma -2021/08/24 | 263960 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2021/08/24 | 180012 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma -2021/08/24 | 195635 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma -2021/08/24 | 54632 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma -2021/08/24 | 61812 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2021/08/24 | 21224 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma -2021/08/24 | 23364 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2021/08/24 | 461812 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2021/08/24 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma -2021/08/24 | 51203 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2021/08/24 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma -2021/08/24 | 325043 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2021/08/24 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma -2021/08/24 | 45311 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma -2021/08/24 | 119820 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma -2021/08/24 | 133865 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2021/08/24 | 1291302 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma -2021/08/24 | 1421870 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2021/08/24 | 100625 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma -2021/08/24 | 112984 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2021/08/24 | 43029 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma -2021/08/24 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2021/08/24 | 25020 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma -2021/08/24 | 28181 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2021/08/24 | 56316 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma -2021/08/24 | 62786 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2021/08/24 | 136817 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma -2021/08/24 | 154426 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2021/08/24 | 73197 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma -2021/08/24 | 77951 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2021/08/24 | 71667 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma -2021/08/24 | 80449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2021/08/24 | 258880 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma -2021/08/24 | 295204 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2021/08/24 | 22049 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma -2021/08/24 | 24996 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2021/08/24 | 97339 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma -2021/08/24 | 112088 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2021/08/24 | 64428 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma -2021/08/24 | 73147 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2021/08/24 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma -2021/08/24 | 115351 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2021/08/24 | 38141 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma -2021/08/24 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2021/08/24 | 483653 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma -2021/08/24 | 566528 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2021/08/24 | 147372 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma -2021/08/24 | 159580 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma -2021/08/24 | 94799 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma -2021/08/24 | 109030 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2021/08/24 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma -2021/08/24 | 17981 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2021/08/24 | 28391 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma -2021/08/24 | 30058 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2021/08/24 | 629401 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma -2021/08/24 | 681250 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2021/08/24 | 531852 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma -2021/08/24 | 596930 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2021/08/24 | 476923 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma -2021/08/24 | 510588 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2021/08/24 | 94311 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma -2021/08/24 | 103400 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2021/08/24 | 1713895 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma -2021/08/24 | 2009906 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2021/08/24 | 67619 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma -2021/08/24 | 74210 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2021/08/24 | 27359 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma -2021/08/24 | 31620 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2021/08/24 | 7722 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma -2021/08/24 | 8769 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2021/08/24 | 196872 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma -2021/08/24 | 215248 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2021/08/24 | 250264 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma -2021/08/24 | 284027 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2021/08/24 | 98380 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma -2021/08/24 | 103202 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2021/08/24 | 60639 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma -2021/08/24 | 68024 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma -2021/08/24 | 124282 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma -2021/08/24 | 136822 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2021/08/24 | 178355 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma -2021/08/24 | 196741 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2021/08/24 | 199733 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma -2021/08/24 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2021/08/24 | 67485 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma -2021/08/24 | 76827 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2021/08/24 | 31231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma -2021/08/24 | 35087 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2021/08/24 | 37804 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma -2021/08/24 | 42712 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2021/08/24 | 42890 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma -2021/08/24 | 46906 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2021/08/24 | 45970 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma -2021/08/24 | 52524 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2021/08/24 | 194383 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma -2021/08/24 | 206604 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2021/08/24 | 35692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma -2021/08/24 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2021/08/24 | 744116 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma -2021/08/24 | 815247 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2021/08/24 | 198172 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma -2021/08/24 | 202795 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2021/08/24 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma -2021/08/24 | 243425 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2021/08/24 | 78775 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma -2021/08/24 | 87776 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2021/08/24 | 1169719 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma -2021/08/24 | 1301191 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2021/08/24 | 20137 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma -2021/08/24 | 23901 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma -2021/08/24 | 31540 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma -2021/08/24 | 37238 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2021/08/24 | 64186 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma -2021/08/24 | 72206 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2021/08/24 | 50395 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma -2021/08/24 | 57729 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2021/08/24 | 1340931 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma -2021/08/24 | 1464201 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2021/08/24 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma -2021/08/24 | 51749 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2021/08/24 | 56514 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma -2021/08/24 | 60040 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2021/08/24 | 25291 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma -2021/08/24 | 27390 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma -2021/08/24 | 16413 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma -2021/08/24 | 18176 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2021/08/24 | 63778 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma -2021/08/24 | 69914 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2021/08/24 | 154807 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma -2021/08/24 | 169242 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2021/08/24 | 57013 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma -2021/08/24 | 65786 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2021/08/24 | 98261 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma -2021/08/24 | 105222 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2021/08/24 | 2672610 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma -2021/08/24 | 2796725 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2021/08/24 | 56357 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma -2021/08/24 | 62227 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2021/08/24 | 33545 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma -2021/08/24 | 37359 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2021/08/24 | 27728 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma -2021/08/24 | 33631 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2021/08/24 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma -2021/08/24 | 70649 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2021/08/24 | 312109 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma -2021/08/24 | 345739 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2021/08/24 | 55499 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma -2021/08/24 | 57141 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2021/08/24 | 589843 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma -2021/08/24 | 624655 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2021/08/24 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma -2021/08/24 | 43425 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2021/08/24 | 235988 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2021/08/24 | 1330068 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2021/08/24 | 1235510 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2021/08/24 | 13466 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma -2021/08/24 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2021/08/25 | 594002 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2021/08/25 | 51114 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma +2021/08/25 | 56476 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2021/08/25 | 975019 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma +2021/08/25 | 1077990 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2021/08/25 | 29037 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma +2021/08/25 | 31350 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2021/08/25 | 29842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma +2021/08/25 | 34666 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2021/08/25 | 50153 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma +2021/08/25 | 57549 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2021/08/25 | 83541 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma +2021/08/25 | 95402 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2021/08/25 | 67821 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma +2021/08/25 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2021/08/25 | 27200 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma +2021/08/25 | 30825 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2021/08/25 | 330788 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma +2021/08/25 | 392794 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2021/08/25 | 32674 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma +2021/08/25 | 36629 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2021/08/25 | 51309 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma +2021/08/25 | 56685 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2021/08/25 | 241811 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma +2021/08/25 | 263958 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2021/08/25 | 180012 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma +2021/08/25 | 195637 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2021/08/25 | 54633 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma +2021/08/25 | 61814 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2021/08/25 | 21226 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma +2021/08/25 | 23364 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2021/08/25 | 461812 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2021/08/25 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma +2021/08/25 | 51203 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2021/08/25 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma +2021/08/25 | 325043 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2021/08/25 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma +2021/08/25 | 45312 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2021/08/25 | 119821 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma +2021/08/25 | 133864 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2021/08/25 | 1291300 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma +2021/08/25 | 1421867 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2021/08/25 | 100627 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma +2021/08/25 | 112984 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2021/08/25 | 43029 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma +2021/08/25 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2021/08/25 | 25021 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma +2021/08/25 | 28181 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2021/08/25 | 56318 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma +2021/08/25 | 62785 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2021/08/25 | 136818 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma +2021/08/25 | 154428 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2021/08/25 | 73197 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma +2021/08/25 | 77952 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2021/08/25 | 71670 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma +2021/08/25 | 80449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2021/08/25 | 258881 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma +2021/08/25 | 295205 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2021/08/25 | 22049 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma +2021/08/25 | 24995 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2021/08/25 | 97339 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma +2021/08/25 | 112087 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2021/08/25 | 64429 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma +2021/08/25 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2021/08/25 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma +2021/08/25 | 115351 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2021/08/25 | 38142 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma +2021/08/25 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2021/08/25 | 483652 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma +2021/08/25 | 566529 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2021/08/25 | 147372 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma +2021/08/25 | 159580 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2021/08/25 | 94800 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma +2021/08/25 | 109030 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2021/08/25 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma +2021/08/25 | 17981 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2021/08/25 | 28392 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma +2021/08/25 | 30059 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2021/08/25 | 629399 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma +2021/08/25 | 681251 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2021/08/25 | 531852 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma +2021/08/25 | 596930 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2021/08/25 | 476919 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma +2021/08/25 | 510588 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2021/08/25 | 94311 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma +2021/08/25 | 103401 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2021/08/25 | 1713893 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma +2021/08/25 | 2009904 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2021/08/25 | 67619 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma +2021/08/25 | 74209 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2021/08/25 | 27358 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma +2021/08/25 | 31620 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2021/08/25 | 7719 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma +2021/08/25 | 8768 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2021/08/25 | 196873 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma +2021/08/25 | 215249 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2021/08/25 | 250265 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma +2021/08/25 | 284023 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2021/08/25 | 98382 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma +2021/08/25 | 103204 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2021/08/25 | 60638 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma +2021/08/25 | 68023 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma +2021/08/25 | 124283 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma +2021/08/25 | 136823 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2021/08/25 | 178352 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma +2021/08/25 | 196741 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2021/08/25 | 199733 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma +2021/08/25 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2021/08/25 | 67486 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma +2021/08/25 | 76826 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2021/08/25 | 31233 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma +2021/08/25 | 35087 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2021/08/25 | 37806 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma +2021/08/25 | 42712 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2021/08/25 | 42892 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma +2021/08/25 | 46906 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2021/08/25 | 45970 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma +2021/08/25 | 52522 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2021/08/25 | 194384 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma +2021/08/25 | 206604 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2021/08/25 | 35692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma +2021/08/25 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2021/08/25 | 744117 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma +2021/08/25 | 815244 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2021/08/25 | 198170 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma +2021/08/25 | 202796 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2021/08/25 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma +2021/08/25 | 243427 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2021/08/25 | 78776 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma +2021/08/25 | 87777 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2021/08/25 | 1169718 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma +2021/08/25 | 1301192 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2021/08/25 | 20136 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma +2021/08/25 | 23903 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2021/08/25 | 31536 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma +2021/08/25 | 37241 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2021/08/25 | 64186 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma +2021/08/25 | 72208 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2021/08/25 | 50393 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma +2021/08/25 | 57730 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2021/08/25 | 1340932 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma +2021/08/25 | 1464203 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2021/08/25 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma +2021/08/25 | 51750 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2021/08/25 | 56515 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma +2021/08/25 | 60040 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2021/08/25 | 25290 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma +2021/08/25 | 27390 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2021/08/25 | 16413 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma +2021/08/25 | 18177 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2021/08/25 | 63778 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma +2021/08/25 | 69914 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2021/08/25 | 154806 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma +2021/08/25 | 169243 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2021/08/25 | 57014 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma +2021/08/25 | 65786 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2021/08/25 | 98261 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma +2021/08/25 | 105221 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2021/08/25 | 2672610 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma +2021/08/25 | 2796727 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2021/08/25 | 56358 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma +2021/08/25 | 62229 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2021/08/25 | 33546 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma +2021/08/25 | 37359 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2021/08/25 | 27729 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma +2021/08/25 | 33634 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2021/08/25 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma +2021/08/25 | 70647 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2021/08/25 | 312109 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma +2021/08/25 | 345739 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2021/08/25 | 55500 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma +2021/08/25 | 57140 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2021/08/25 | 589844 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma +2021/08/25 | 624655 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2021/08/25 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma +2021/08/25 | 43425 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2021/08/25 | 235980 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2021/08/25 | 1329561 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2021/08/25 | 1234961 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2021/08/25 | 13467 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma +2021/08/25 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma 2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma -2021/08/24 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini +2021/08/25 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini 2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma 2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma 2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma @@ -286464,7 +286469,7 @@ 2020/10/20 | 342254 | systems/win32/miktex/tm/packages/preview.tar.lzma 2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma 2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma -2021/08/24 | 935 | systems/win32/miktex/tm/packages/pr.ini +2021/08/25 | 935 | systems/win32/miktex/tm/packages/pr.ini 2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma 2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma 2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma @@ -288038,7 +288043,7 @@ 2004/06/04 | 404 | tds/tds.sed 2004/06/23 | 65418 | tds/tds.tex 2019/05/29 | 304264 | tds.zip -2021/08/25 | 186 | timestamp +2021/08/26 | 186 | timestamp 2002/08/26 | 61898 | usergrps/dante/antrag.pdf 2002/08/26 | 118217 | usergrps/dante/antrag.ps 2021/08/04 | 917 | usergrps/dante/dtk/doc/beispiel.bib @@ -289371,40 +289376,40 @@ 1999/06/04 | 27445 | usergrps/uktug/baskervi/baskrep.cls 1999/05/12 | 7702 | usergrps/uktug/baskervi/epstopdf 1997/10/01 | 444 | usergrps/uktug/baskervi/README -2021/08/17 | 9387 | usergrps/usergrps/bg.html -2021/08/17 | 9084 | usergrps/usergrps/br.html -2021/08/17 | 9349 | usergrps/usergrps/cn.html -2021/08/17 | 9503 | usergrps/usergrps/cz.html -2021/08/17 | 9637 | usergrps/usergrps/de.html -2021/08/17 | 9141 | usergrps/usergrps/dk.html -2021/08/17 | 8920 | usergrps/usergrps/ee.html -2021/08/17 | 9145 | usergrps/usergrps/esc.html -2021/08/17 | 9290 | usergrps/usergrps/es.html -2021/08/17 | 9430 | usergrps/usergrps/fr.html -2021/08/17 | 9273 | usergrps/usergrps/gb.html -2021/08/17 | 9166 | usergrps/usergrps/gr.html -2021/08/17 | 9570 | usergrps/usergrps/hu.html -2021/08/17 | 9066 | usergrps/usergrps/ie.html -2021/08/17 | 6322 | usergrps/usergrps/index.html -2021/08/17 | 9041 | usergrps/usergrps/is.html -2021/08/17 | 9293 | usergrps/usergrps/it.html -2021/08/17 | 9010 | usergrps/usergrps/kh.html -2021/08/17 | 9410 | usergrps/usergrps/kr.html -2021/08/17 | 9896 | usergrps/usergrps/labels.pdf +2021/08/25 | 9387 | usergrps/usergrps/bg.html +2021/08/25 | 9055 | usergrps/usergrps/br.html +2021/08/25 | 9349 | usergrps/usergrps/cn.html +2021/08/25 | 9503 | usergrps/usergrps/cz.html +2021/08/25 | 9637 | usergrps/usergrps/de.html +2021/08/25 | 9141 | usergrps/usergrps/dk.html +2021/08/25 | 8920 | usergrps/usergrps/ee.html +2021/08/25 | 9145 | usergrps/usergrps/esc.html +2021/08/25 | 9290 | usergrps/usergrps/es.html +2021/08/25 | 9430 | usergrps/usergrps/fr.html +2021/08/25 | 9273 | usergrps/usergrps/gb.html +2021/08/25 | 9166 | usergrps/usergrps/gr.html +2021/08/25 | 9570 | usergrps/usergrps/hu.html +2021/08/25 | 9066 | usergrps/usergrps/ie.html +2021/08/25 | 6322 | usergrps/usergrps/index.html +2021/08/25 | 9041 | usergrps/usergrps/is.html +2021/08/25 | 9293 | usergrps/usergrps/it.html +2021/08/25 | 9010 | usergrps/usergrps/kh.html +2021/08/25 | 9410 | usergrps/usergrps/kr.html +2021/08/25 | 9897 | usergrps/usergrps/labels.pdf 2021/08/11 | 2266 | usergrps/usergrps/labels.tex -2021/08/17 | 8950 | usergrps/usergrps/lt.html -2021/08/17 | 34178 | usergrps/usergrps/lugs.html -2021/08/17 | 49885 | usergrps/usergrps/lugs.pdf -2021/08/17 | 22038 | usergrps/usergrps/lugs.tex -2021/08/17 | 9000 | usergrps/usergrps/mx.html -2021/08/17 | 9386 | usergrps/usergrps/nl.html -2021/08/17 | 9111 | usergrps/usergrps/no.html -2021/08/17 | 9575 | usergrps/usergrps/pl.html -2021/08/17 | 9139 | usergrps/usergrps/pt.html -2021/08/17 | 9181 | usergrps/usergrps/us.html -2021/08/17 | 9050 | usergrps/usergrps/uy.html -2021/08/17 | 9121 | usergrps/usergrps/vn.html -2021/08/17 | 9060 | usergrps/usergrps/za.html +2021/08/25 | 8950 | usergrps/usergrps/lt.html +2021/08/25 | 34149 | usergrps/usergrps/lugs.html +2021/08/25 | 49892 | usergrps/usergrps/lugs.pdf +2021/08/25 | 22024 | usergrps/usergrps/lugs.tex +2021/08/25 | 9000 | usergrps/usergrps/mx.html +2021/08/25 | 9386 | usergrps/usergrps/nl.html +2021/08/25 | 9111 | usergrps/usergrps/no.html +2021/08/25 | 9575 | usergrps/usergrps/pl.html +2021/08/25 | 9139 | usergrps/usergrps/pt.html +2021/08/25 | 9181 | usergrps/usergrps/us.html +2021/08/25 | 9050 | usergrps/usergrps/uy.html +2021/08/25 | 9121 | usergrps/usergrps/vn.html +2021/08/25 | 9060 | usergrps/usergrps/za.html 1992/12/06 | 2551 | web/aplweb/announcement 1993/11/03 | 802292 | web/aplweb/aplweba.zip 1993/11/03 | 771814 | web/aplweb/aplwebb.zip diff --git a/FILES.byname.gz b/FILES.byname.gz Binary files differindex 26fb785501..fcaef121f3 100644 --- a/FILES.byname.gz +++ b/FILES.byname.gz diff --git a/FILES.last07days b/FILES.last07days index 2cd9ccb1e3..ab17950119 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,224 +1,299 @@ -2021/08/24 | 98380 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma -2021/08/24 | 98261 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma -2021/08/24 | 975020 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma -2021/08/24 | 97339 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma -2021/08/24 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma -2021/08/24 | 95401 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2021/08/24 | 94799 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma -2021/08/24 | 94311 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma -2021/08/24 | 935 | systems/win32/miktex/tm/packages/pr.ini +2021/08/25 | 9897 | usergrps/usergrps/labels.pdf +2021/08/25 | 9865 | macros/latex/contrib/polski/czytaj.txt +2021/08/25 | 98382 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma +2021/08/25 | 98261 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma +2021/08/25 | 975019 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma +2021/08/25 | 97339 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma +2021/08/25 | 96632 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma +2021/08/25 | 9637 | usergrps/usergrps/de.html +2021/08/25 | 9575 | usergrps/usergrps/pl.html +2021/08/25 | 9570 | usergrps/usergrps/hu.html +2021/08/25 | 95402 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2021/08/25 | 9503 | usergrps/usergrps/cz.html +2021/08/25 | 94800 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma +2021/08/25 | 94311 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma +2021/08/25 | 9430 | usergrps/usergrps/fr.html +2021/08/25 | 9410 | usergrps/usergrps/kr.html +2021/08/25 | 9387 | usergrps/usergrps/bg.html +2021/08/25 | 9386 | usergrps/usergrps/nl.html +2021/08/25 | 935 | systems/win32/miktex/tm/packages/pr.ini +2021/08/25 | 9349 | usergrps/usergrps/cn.html +2021/08/25 | 9293 | usergrps/usergrps/it.html +2021/08/25 | 9290 | usergrps/usergrps/es.html +2021/08/25 | 9273 | usergrps/usergrps/gb.html +2021/08/25 | 9181 | usergrps/usergrps/us.html +2021/08/25 | 9166 | usergrps/usergrps/gr.html +2021/08/25 | 9145 | usergrps/usergrps/esc.html +2021/08/25 | 9141 | usergrps/usergrps/dk.html +2021/08/25 | 9139 | usergrps/usergrps/pt.html +2021/08/25 | 9121 | usergrps/usergrps/vn.html +2021/08/25 | 9111 | usergrps/usergrps/no.html +2021/08/25 | 9066 | usergrps/usergrps/ie.html +2021/08/25 | 9060 | usergrps/usergrps/za.html +2021/08/25 | 9055 | usergrps/usergrps/br.html +2021/08/25 | 9050 | usergrps/usergrps/uy.html +2021/08/25 | 9041 | usergrps/usergrps/is.html +2021/08/25 | 9010 | usergrps/usergrps/kh.html +2021/08/25 | 9000 | usergrps/usergrps/mx.html +2021/08/25 | 8950 | usergrps/usergrps/lt.html +2021/08/25 | 8920 | usergrps/usergrps/ee.html +2021/08/25 | 87777 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2021/08/25 | 8768 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2021/08/25 | 86160 | macros/latex/contrib/polski/sample-polski.pdf +2021/08/25 | 83541 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma +2021/08/25 | 8184083 | graphics/pstricks/base.zip +2021/08/25 | 815244 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2021/08/25 | 80449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2021/08/25 | 78776 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma +2021/08/25 | 77952 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2021/08/25 | 7719 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma +2021/08/25 | 76826 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2021/08/25 | 7611 | graphics/pstricks/base/doc/pst-news21.tex +2021/08/25 | 7605 | macros/latex/contrib/huawei/huawei.tex +2021/08/25 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2021/08/25 | 744117 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma +2021/08/25 | 74209 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2021/08/25 | 7396 | macros/latex/contrib/polski/polski.ins +2021/08/25 | 73197 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma +2021/08/25 | 73148 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2021/08/25 | 72208 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2021/08/25 | 71670 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma +2021/08/25 | 70647 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2021/08/25 | 69914 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2021/08/25 | 681251 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2021/08/25 | 6811609 | systems/texlive/tlnet/install-tl-unx.tar.gz +2021/08/25 | 68023 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma +2021/08/25 | 67821 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma +2021/08/25 | 67619 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma +2021/08/25 | 67486 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma +2021/08/25 | 65786 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2021/08/25 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma +2021/08/25 | 64429 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma +2021/08/25 | 64186 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma +2021/08/25 | 63778 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma +2021/08/25 | 6322 | usergrps/usergrps/index.html +2021/08/25 | 630351 | macros/generic/tokcycle/tokcycle-examples.pdf +2021/08/25 | 629399 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma +2021/08/25 | 62785 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2021/08/25 | 627435 | macros/generic/tokcycle/tokcycle-doc.pdf +2021/08/25 | 624655 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2021/08/25 | 62229 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2021/08/25 | 61814 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2021/08/25 | 60638 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma +2021/08/25 | 600780 | macros/latex/contrib/huawei.zip +2021/08/25 | 60040 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2021/08/25 | 596930 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2021/08/25 | 594084 | systems/win32/miktex/tm/packages/files.csv.lzma +2021/08/25 | 594002 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2021/08/25 | 589844 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma +2021/08/25 | 57730 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2021/08/25 | 57549 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2021/08/25 | 57140 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2021/08/25 | 57014 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma +2021/08/25 | 56685 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2021/08/25 | 566529 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2021/08/25 | 56515 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma +2021/08/25 | 56476 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2021/08/25 | 56358 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma +2021/08/25 | 56318 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma +2021/08/25 | 562 | graphics/pstricks/contrib/pst-arrow/README +2021/08/25 | 55500 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma +2021/08/25 | 54633 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma +2021/08/25 | 54079 | macros/latex/contrib/polski/polski.dtx +2021/08/25 | 533 | graphics/pstricks/contrib/pst-arrow/Changes +2021/08/25 | 531852 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma +2021/08/25 | 529359 | graphics/pstricks/base/doc/pst-news21.pdf +2021/08/25 | 527 | graphics/pstricks/contrib/pst-arrow/latex/pst-arrow.sty +2021/08/25 | 52522 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2021/08/25 | 51750 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2021/08/25 | 51309 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma +2021/08/25 | 51203 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2021/08/25 | 51114 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma +2021/08/25 | 510588 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2021/08/25 | 50393 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma +2021/08/25 | 50153 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma +2021/08/25 | 49892 | usergrps/usergrps/lugs.pdf +2021/08/25 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2021/08/25 | 483652 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma +2021/08/25 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2021/08/25 | 476919 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma +2021/08/25 | 46906 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2021/08/25 | 461812 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2021/08/25 | 45970 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma +2021/08/25 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma +2021/08/25 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2021/08/25 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2021/08/25 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2021/08/25 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2021/08/25 | 45312 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2021/08/25 | 4524 | macros/latex/contrib/polski/conowego.txt +2021/08/25 | 43425 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2021/08/25 | 43029 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma +2021/08/25 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2021/08/25 | 42892 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma +2021/08/25 | 42712 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2021/08/25 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma +2021/08/25 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma +2021/08/25 | 403 | macros/latex/contrib/huawei/DEPENDS.txt +2021/08/25 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2021/08/25 | 399840 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60315.tar.xz +2021/08/25 | 3978 | graphics/pstricks/base/doc/PSTricks.bib +2021/08/25 | 392794 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2021/08/25 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma +2021/08/25 | 38142 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma +2021/08/25 | 37806 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma +2021/08/25 | 37359 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2021/08/25 | 37241 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2021/08/25 | 37013 | graphics/pstricks/base/dvips/pstricks.pro +2021/08/25 | 36629 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2021/08/25 | 35692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma +2021/08/25 | 3557191 | dviware/dvisvgm.zip +2021/08/25 | 35087 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2021/08/25 | 34666 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2021/08/25 | 345739 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2021/08/25 | 34149 | usergrps/usergrps/lugs.html +2021/08/25 | 33634 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2021/08/25 | 33546 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma +2021/08/25 | 333239 | macros/latex/contrib/huawei/huawei.pdf +2021/08/25 | 330788 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma +2021/08/25 | 32674 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma +2021/08/25 | 325043 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2021/08/25 | 322788 | macros/latex/contrib/polski.zip +2021/08/25 | 3204 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.bib +2021/08/25 | 31620 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2021/08/25 | 31536 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma +2021/08/25 | 31350 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2021/08/25 | 31233 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma +2021/08/25 | 312109 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma +2021/08/25 | 31168 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.tex +2021/08/25 | 30825 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2021/08/25 | 30059 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2021/08/25 | 29842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma +2021/08/25 | 295205 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2021/08/25 | 29037 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma +2021/08/25 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma +2021/08/25 | 284023 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2021/08/25 | 28392 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma +2021/08/25 | 28181 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2021/08/25 | 2796727 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2021/08/25 | 27729 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma +2021/08/25 | 27390 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2021/08/25 | 27358 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma +2021/08/25 | 27200 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma +2021/08/25 | 2672610 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma +2021/08/25 | 263958 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2021/08/25 | 258881 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma +2021/08/25 | 25585309 | systems/texlive/tlnet/install-tl.zip +2021/08/25 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf +2021/08/25 | 25290 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma +2021/08/25 | 250265 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma +2021/08/25 | 25021 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma +2021/08/25 | 24995 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2021/08/25 | 24348 | graphics/pstricks/base/Changes +2021/08/25 | 243427 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2021/08/25 | 241811 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma +2021/08/25 | 23903 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2021/08/25 | 236026 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2021/08/25 | 235980 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2021/08/25 | 23364 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2021/08/25 | 2329648 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2021/08/25 | 222065 | graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.pdf +2021/08/25 | 22049 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma +2021/08/25 | 22024 | usergrps/usergrps/lugs.tex +2021/08/25 | 215249 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2021/08/25 | 21226 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma +2021/08/25 | 20810684 | systems/texlive/tlnet/install-tl-windows.exe +2021/08/25 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma +2021/08/25 | 206604 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2021/08/25 | 2057 | macros/latex/contrib/huawei/samples/huawei-charter.tex +2021/08/25 | 202796 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2021/08/25 | 20136 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma +2021/08/25 | 2009904 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2021/08/25 | 199733 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma +2021/08/25 | 198170 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma +2021/08/25 | 196873 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma +2021/08/25 | 196741 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2021/08/25 | 195637 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2021/08/25 | 1947 | macros/latex/contrib/huawei/samples/huawei-cfp.tex +2021/08/25 | 194384 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma +2021/08/25 | 191317 | macros/latex/contrib/polski/polski.pdf +2021/08/25 | 18890 | graphics/pstricks/base/generic/pstricks-arrows.tex +2021/08/25 | 18774 | graphics/pstricks/base/doc/pst-doc.cls +2021/08/25 | 18738 | macros/generic/tokcycle/tokcycle.tex +2021/08/25 | 18177 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2021/08/25 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2021/08/25 | 180012 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma +2021/08/25 | 17981 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2021/08/25 | 178352 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma +2021/08/25 | 17491 | macros/latex/contrib/huawei/huawei.cls +2021/08/25 | 17372965 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2021/08/25 | 1713893 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma +2021/08/25 | 16980 | macros/latex/contrib/polski/strony.dtx +2021/08/25 | 169243 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2021/08/25 | 16413 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma +2021/08/25 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma +2021/08/25 | 159580 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2021/08/25 | 154806 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma +2021/08/25 | 154428 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2021/08/25 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2021/08/25 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2021/08/25 | 151742 | graphics/pstricks/contrib/pst-arrow.zip +2021/08/25 | 1497 | macros/latex/contrib/huawei/README.md +2021/08/25 | 147372 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma +2021/08/25 | 1464203 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2021/08/25 | 1461 | macros/latex/contrib/huawei/samples/huawei-main.bib +2021/08/25 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2021/08/25 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2021/08/25 | 1436 | macros/latex/contrib/polski/README +2021/08/25 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2021/08/25 | 1421867 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2021/08/25 | 136823 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2021/08/25 | 136818 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma +2021/08/25 | 13467 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma +2021/08/25 | 1340932 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma +2021/08/25 | 133864 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2021/08/25 | 1329561 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2021/08/25 | 1329454 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2021/08/25 | 132707 | graphics/pstricks/base/generic/pstricks.tex +2021/08/25 | 1301192 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2021/08/25 | 1291300 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma +2021/08/25 | 124283 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma +2021/08/25 | 1235066 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2021/08/25 | 1234961 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2021/08/25 | 1223986 | macros/generic/tokcycle.zip +2021/08/25 | 119821 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma +2021/08/25 | 1169718 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma +2021/08/25 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini +2021/08/25 | 115351 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2021/08/25 | 112984 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2021/08/25 | 112087 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2021/08/25 | 109030 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2021/08/25 | 108288 | systems/texlive/tlnet/archive/texlive-scripts.r60315.tar.xz +2021/08/25 | 1077990 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2021/08/25 | 105221 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2021/08/25 | 10422 | graphics/pstricks/contrib/pst-arrow/tex/pst-arrow.tex +2021/08/25 | 103401 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2021/08/25 | 103204 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2021/08/25 | 100627 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma 2021/08/24 | 9296 | systems/texlive/tlnet/archive/polski.r60313.tar.xz -2021/08/24 | 87776 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2021/08/24 | 8769 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2021/08/24 | 83540 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma -2021/08/24 | 815247 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2021/08/24 | 80449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2021/08/24 | 78775 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma -2021/08/24 | 77951 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2021/08/24 | 7722 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma -2021/08/24 | 76827 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2021/08/24 | 75792 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2021/08/24 | 744116 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma -2021/08/24 | 74210 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2021/08/24 | 73197 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma -2021/08/24 | 73147 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2021/08/24 | 72206 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2021/08/24 | 71667 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma -2021/08/24 | 70649 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2021/08/24 | 69914 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma 2021/08/24 | 6912 | systems/texlive/tlnet/archive/cascade.source.r60310.tar.xz -2021/08/24 | 681250 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2021/08/24 | 6811534 | systems/texlive/tlnet/install-tl-unx.tar.gz -2021/08/24 | 68024 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma -2021/08/24 | 67821 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma -2021/08/24 | 67619 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma -2021/08/24 | 67485 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma -2021/08/24 | 65786 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2021/08/24 | 65619 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma -2021/08/24 | 64428 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma -2021/08/24 | 64186 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma -2021/08/24 | 63778 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma -2021/08/24 | 629401 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma -2021/08/24 | 62786 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2021/08/24 | 624655 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2021/08/24 | 62227 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2021/08/24 | 61812 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2021/08/24 | 60639 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma -2021/08/24 | 60040 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2021/08/24 | 596930 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2021/08/24 | 594084 | systems/win32/miktex/tm/packages/files.csv.lzma -2021/08/24 | 594002 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2021/08/24 | 589843 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma -2021/08/24 | 57729 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2021/08/24 | 57548 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2021/08/24 | 57141 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2021/08/24 | 57013 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma -2021/08/24 | 56686 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2021/08/24 | 566528 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2021/08/24 | 56514 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma -2021/08/24 | 56475 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2021/08/24 | 56357 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma -2021/08/24 | 56316 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma -2021/08/24 | 55499 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma -2021/08/24 | 54632 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma -2021/08/24 | 531852 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma -2021/08/24 | 52524 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2021/08/24 | 51749 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2021/08/24 | 51310 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma -2021/08/24 | 51203 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2021/08/24 | 51113 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma -2021/08/24 | 510588 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2021/08/24 | 50395 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma -2021/08/24 | 50151 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma -2021/08/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 -2021/08/24 | 483653 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma -2021/08/24 | 48252 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2021/08/24 | 476923 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma -2021/08/24 | 46906 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2021/08/24 | 461812 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2021/08/24 | 45970 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma -2021/08/24 | 45905 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma -2021/08/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2021/08/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2021/08/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2021/08/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2021/08/24 | 6908 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2021/08/24 | 453160 | systems/texlive/tlnet/archive/mandi.doc.r60311.tar.xz -2021/08/24 | 45311 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma -2021/08/24 | 43425 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2021/08/24 | 43029 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma -2021/08/24 | 43003 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2021/08/24 | 42890 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma -2021/08/24 | 42712 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2021/08/24 | 42386 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma 2021/08/24 | 41697 | macros/latex/contrib/gamebooklib/gamebooklib.dtx -2021/08/24 | 41194 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma 2021/08/24 | 407284 | systems/texlive/tlnet/archive/semantex.doc.r60312.tar.xz -2021/08/24 | 40229 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2021/08/24 | 399840 | systems/texlive/tlnet/archive/texlive-scripts.doc.r60307.tar.xz 2021/08/24 | 393533 | macros/latex/contrib/gamebooklib.zip -2021/08/24 | 392793 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2021/08/24 | 39128 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma -2021/08/24 | 38141 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma -2021/08/24 | 37804 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma -2021/08/24 | 37359 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2021/08/24 | 37238 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2021/08/24 | 36629 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma -2021/08/24 | 35692 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma -2021/08/24 | 35087 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2021/08/24 | 34665 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2021/08/24 | 345739 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2021/08/24 | 33631 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2021/08/24 | 33545 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma -2021/08/24 | 330788 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma -2021/08/24 | 32673 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma -2021/08/24 | 325043 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2021/08/24 | 31620 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2021/08/24 | 31540 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma -2021/08/24 | 31352 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2021/08/24 | 31231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma -2021/08/24 | 312109 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma 2021/08/24 | 30828 | systems/texlive/tlnet/archive/polski.source.r60313.tar.xz -2021/08/24 | 30824 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2021/08/24 | 30058 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2021/08/24 | 29841 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma -2021/08/24 | 295204 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2021/08/24 | 29036 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma -2021/08/24 | 284581 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma 2021/08/24 | 284564 | systems/texlive/tlnet/archive/polski.doc.r60313.tar.xz 2021/08/24 | 28416 | systems/texlive/tlnet/archive/mandi.source.r60311.tar.xz -2021/08/24 | 284027 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2021/08/24 | 28391 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma -2021/08/24 | 28181 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2021/08/24 | 2796725 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2021/08/24 | 27728 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma -2021/08/24 | 27390 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma -2021/08/24 | 27359 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma -2021/08/24 | 27199 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma 2021/08/24 | 26984 | systems/texlive/tlnet/archive/semantex.r60312.tar.xz -2021/08/24 | 2672610 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma -2021/08/24 | 263960 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma 2021/08/24 | 263005 | macros/latex/contrib/gamebooklib/gamebooklib.pdf -2021/08/24 | 258880 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma -2021/08/24 | 25585288 | systems/texlive/tlnet/install-tl.zip -2021/08/24 | 25291 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma -2021/08/24 | 250264 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma -2021/08/24 | 25020 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma -2021/08/24 | 24996 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma 2021/08/24 | 2488 | systems/texlive/tlnet/archive/cascade.r60310.tar.xz -2021/08/24 | 243425 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2021/08/24 | 241811 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma -2021/08/24 | 23901 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma -2021/08/24 | 235988 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2021/08/24 | 235961 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2021/08/24 | 23364 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2021/08/24 | 2331668 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2021/08/24 | 2252 | macros/latex/contrib/gamebooklib/gamebooklib_countpagesperseed.sh -2021/08/24 | 22049 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma -2021/08/24 | 215248 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2021/08/24 | 21224 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma 2021/08/24 | 2104108 | systems/texlive/tlnet/archive/kpfonts-otf.doc.r60309.tar.xz -2021/08/24 | 20809390 | systems/texlive/tlnet/install-tl-windows.exe -2021/08/24 | 208049 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma -2021/08/24 | 206604 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2021/08/24 | 202795 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2021/08/24 | 20137 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma -2021/08/24 | 2009906 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2021/08/24 | 199733 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma -2021/08/24 | 198172 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma -2021/08/24 | 196872 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma -2021/08/24 | 196741 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2021/08/24 | 195635 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma -2021/08/24 | 194383 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma -2021/08/24 | 18176 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2021/08/24 | 180121 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2021/08/24 | 180012 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma -2021/08/24 | 17981 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma 2021/08/24 | 178816 | systems/texlive/tlnet/archive/cascade.doc.r60310.tar.xz -2021/08/24 | 178355 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma -2021/08/24 | 17372965 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2021/08/24 | 1713895 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma -2021/08/24 | 169242 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2021/08/24 | 16413 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma -2021/08/24 | 16357 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma -2021/08/24 | 159580 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma -2021/08/24 | 154807 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma -2021/08/24 | 154426 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2021/08/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2021/08/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2021/08/24 | 147372 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma -2021/08/24 | 1464201 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2021/08/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2021/08/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2021/08/24 | 14348 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma -2021/08/24 | 1421870 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2021/08/24 | 136822 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2021/08/24 | 136817 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma -2021/08/24 | 13466 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma -2021/08/24 | 1340931 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma -2021/08/24 | 133865 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2021/08/24 | 1330068 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2021/08/24 | 1329200 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2021/08/24 | 1301191 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2021/08/24 | 1291302 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma -2021/08/24 | 124282 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma -2021/08/24 | 1235510 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2021/08/24 | 1235424 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma -2021/08/24 | 119820 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma 2021/08/24 | 117057 | macros/latex/contrib/gamebooklib/gamebooklib_test.pdf -2021/08/24 | 1169719 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma -2021/08/24 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini -2021/08/24 | 115351 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2021/08/24 | 112984 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma 2021/08/24 | 11264 | systems/texlive/tlnet/archive/mandi.r60311.tar.xz -2021/08/24 | 112088 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2021/08/24 | 109030 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2021/08/24 | 108268 | systems/texlive/tlnet/archive/texlive-scripts.r60307.tar.xz 2021/08/24 | 1082624 | systems/texlive/tlnet/archive/kpfonts-otf.r60309.tar.xz -2021/08/24 | 1077990 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2021/08/24 | 105222 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2021/08/24 | 103400 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2021/08/24 | 103202 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2021/08/24 | 100625 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma 2021/08/23 | 99500 | systems/texlive/tlnet/archive/profcollege.r60301.tar.xz 2021/08/23 | 912 | systems/texlive/tlnet/archive/uptex.r60299.tar.xz 2021/08/23 | 908096 | systems/texlive/tlnet/archive/tex4ht.r60305.tar.xz @@ -226,32 +301,25 @@ 2021/08/23 | 882492 | systems/texlive/tlnet/archive/beebe.r60298.tar.xz 2021/08/23 | 8680 | systems/texlive/tlnet/archive/biblatex-lncs.doc.r60303.tar.xz 2021/08/23 | 8069 | graphics/pstricks/base/latex/pstricks.sty -2021/08/23 | 8003972 | graphics/pstricks/base.zip 2021/08/23 | 745 | macros/latex/contrib/gamebooklib/Makefile 2021/08/23 | 70833 | macros/latex/contrib/cascade/cascade-french.pdf -2021/08/23 | 6780 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2021/08/23 | 62028 | systems/texlive/tlnet/archive/siunitx.r60302.tar.xz 2021/08/23 | 4735516 | systems/texlive/tlnet/archive/profcollege.doc.r60301.tar.xz 2021/08/23 | 4730 | macros/latex/contrib/semantex/stripsemantex.sty 2021/08/23 | 4651 | graphics/pstricks/base/README 2021/08/23 | 442658 | macros/latex/contrib/semantex.zip -2021/08/23 | 43741 | graphics/pstricks/base/doc/pst-news21.pdf 2021/08/23 | 4304260 | fonts/kpfonts-otf.zip 2021/08/23 | 385165 | macros/latex/contrib/semantex/semantex.pdf -2021/08/23 | 322705 | macros/latex/contrib/polski.zip 2021/08/23 | 318470 | macros/latex/contrib/semantex/semantex.sty 2021/08/23 | 31160 | systems/texlive/tlnet/archive/nicematrix.r60304.tar.xz 2021/08/23 | 26384 | macros/latex/contrib/cascade/cascade.dtx 2021/08/23 | 2556 | systems/texlive/tlnet/archive/biblatex-lncs.r60303.tar.xz -2021/08/23 | 2502 | graphics/pstricks/base/doc/pst-news21.tex 2021/08/23 | 240360 | systems/texlive/tlnet/archive/uptex.doc.r60299.tar.xz -2021/08/23 | 23995 | graphics/pstricks/base/Changes 2021/08/23 | 2029916 | systems/texlive/tlnet/archive/siunitx.doc.r60302.tar.xz 2021/08/23 | 191044 | macros/latex/contrib/cascade.zip 2021/08/23 | 1812220 | systems/texlive/tlnet/archive/nicematrix.doc.r60304.tar.xz 2021/08/23 | 178126 | macros/latex/contrib/semantex/semantex.tex 2021/08/23 | 1660 | macros/latex/contrib/semantex/README.md -2021/08/23 | 140425 | graphics/pstricks/base/generic/pstricks.tex 2021/08/23 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r60305.tar.xz 2021/08/23 | 1252 | systems/texlive/tlnet/archive/collection-bibtexextra.r60303.tar.xz 2021/08/23 | 1214248 | systems/texlive/tlnet/archive/tex4ht.source.r60305.tar.xz @@ -267,7 +335,6 @@ 2021/08/22 | 9072 | macros/latex/contrib/siunitx/siunitx-symbol.dtx 2021/08/22 | 902528 | systems/texlive/tlnet/archive/charissil.r60294.tar.xz 2021/08/22 | 8752 | macros/latex/contrib/siunitx/siunitx-command.dtx -2021/08/22 | 86160 | macros/latex/contrib/polski/sample-polski.pdf 2021/08/22 | 6652 | macros/latex/contrib/profcollege/metapost/PfCSvgnames.mp 2021/08/22 | 648099 | macros/latex/contrib/profcollege/latex/ProfCollege.sty 2021/08/22 | 636202 | macros/latex/contrib/siunitx/siunitx.pdf @@ -275,7 +342,6 @@ 2021/08/22 | 608765 | support/TeX4ht/source/tex4ht-html4.tex 2021/08/22 | 57971 | macros/latex/contrib/siunitx/CHANGELOG.md 2021/08/22 | 57804 | macros/latex/contrib/mandi/mandistudent.dtx -2021/08/22 | 54079 | macros/latex/contrib/polski/polski.dtx 2021/08/22 | 5386 | macros/latex/contrib/profcollege/metapost/PfCLabyNombre.mp 2021/08/22 | 5118681 | macros/latex/contrib/profcollege.zip 2021/08/22 | 5056 | macros/latex/contrib/profcollege/metapost/PfCAfficheur.mp @@ -311,7 +377,6 @@ 2021/08/22 | 19826 | macros/latex/contrib/siunitx/siunitx.dtx 2021/08/22 | 1967989 | macros/latex/contrib/profcollege/doc/ProfCollege-doc.zip 2021/08/22 | 19350 | macros/latex/contrib/profcollege/latex/PfCEquationLaurent1.tex -2021/08/22 | 191131 | macros/latex/contrib/polski/polski.pdf 2021/08/22 | 19039 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/LICENSE 2021/08/22 | 184 | macros/latex/contrib/biblatex-contrib/biblatex-lncs/lncs.dbx 2021/08/22 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg @@ -574,7 +639,6 @@ 2021/08/19 | 38757 | systems/win32/miktex/tm/packages/easybook__source.tar.lzma 2021/08/19 | 3755141 | systems/win32/miktex/tm/packages/media9__doc.tar.lzma 2021/08/19 | 37261 | systems/win32/miktex/tm/packages/projlib__source.tar.lzma -2021/08/19 | 36942 | graphics/pstricks/base/dvips/pstricks.pro 2021/08/19 | 364912 | systems/texlive/tlnet/archive/ejpecp.doc.r60267.tar.xz 2021/08/19 | 3591 | systems/win32/miktex/tm/packages/tikzbricks__source.tar.lzma 2021/08/19 | 347339 | systems/win32/miktex/tm/packages/ejpecp__doc.tar.lzma @@ -644,43 +708,3 @@ 2021/08/19 | 1019664 | systems/win32/miktex/tm/packages/zref-check__doc.tar.lzma 2021/08/19 | 1018292 | systems/texlive/tlnet/archive/zref-check.doc.r60270.tar.xz 2021/08/19 | 1008 | macros/xetex/latex/mynsfc/README.md -2021/08/18 | 939765 | install/macros/luatex/latex/ekdosis.tds.zip -2021/08/18 | 930575 | macros/luatex/latex/ekdosis/ekdosis.pdf -2021/08/18 | 914203 | macros/luatex/latex/ekdosis.zip -2021/08/18 | 853 | macros/luatex/latex/ekdosis/samples/Makefile -2021/08/18 | 801818 | install/macros/latex/contrib/bytefield.tds.zip -2021/08/18 | 795870 | macros/latex/contrib/bytefield.zip -2021/08/18 | 7552 | systems/texlive/tlnet/archive/beamer-rl.r60262.tar.xz -2021/08/18 | 715945 | macros/latex/contrib/verifiche.zip -2021/08/18 | 6851 | macros/luatex/latex/ekdosis/samples/Caesar_BG-6-13-1-tei.xml -2021/08/18 | 630473 | macros/latex/contrib/bytefield/bytefield.pdf -2021/08/18 | 57586 | macros/latex/contrib/verifiche/verifiche.dtx -2021/08/18 | 575187 | macros/latex/contrib/keyparse/keyparse.pdf -2021/08/18 | 564027 | macros/latex/contrib/keyparse.zip -2021/08/18 | 562540 | systems/texlive/tlnet/archive/yquant.doc.r60259.tar.xz -2021/08/18 | 555406 | macros/latex/contrib/lambdax/lambdax.pdf -2021/08/18 | 519980 | macros/latex/contrib/verifiche/verifiche.pdf -2021/08/18 | 50656 | systems/texlive/tlnet/archive/yquant.r60259.tar.xz -2021/08/18 | 443607 | macros/luatex/latex/ekdosis/ekdosis.dtx -2021/08/18 | 4266 | macros/luatex/latex/ekdosis/README.md -2021/08/18 | 3977 | macros/luatex/latex/ekdosis/Makefile -2021/08/18 | 3903 | macros/luatex/latex/ekdosis/samples/Caesar_BG-6-13-1.tex -2021/08/18 | 333 | macros/latex/contrib/keyparse/README.md -2021/08/18 | 332 | macros/latex/contrib/lambdax/README.md -2021/08/18 | 23535 | macros/latex/contrib/bytefield/bf-example.tex -2021/08/18 | 217368 | systems/texlive/tlnet/archive/beamer-rl.doc.r60262.tar.xz -2021/08/18 | 2013 | macros/latex/contrib/keyparse/keyparse.ins -2021/08/18 | 199324 | macros/latex/contrib/bytefield/bf-example.pdf -2021/08/18 | 1952 | macros/latex/contrib/lambdax/lambdax.ins -2021/08/18 | 1874 | macros/luatex/latex/ekdosis/ekdosis.ins -2021/08/18 | 182373 | macros/latex/contrib/verifiche/verifiche-example.pdf -2021/08/18 | 18006 | macros/luatex/latex/ekdosis/samples/Caesar_BG-6-13-1.pdf -2021/08/18 | 1791 | macros/latex/contrib/gamebooklib/gamebooklib.ins -2021/08/18 | 1710 | macros/latex/contrib/bytefield/README -2021/08/18 | 1710 | macros/latex/contrib/bytefield/bytefield.ins -2021/08/18 | 1569 | macros/latex/contrib/gamebooklib/README -2021/08/18 | 14320 | macros/latex/contrib/keyparse/keyparse.dtx -2021/08/18 | 140900 | macros/latex/contrib/bytefield/bytefield.dtx -2021/08/18 | 12114 | macros/latex/contrib/lambdax/lambdax.dtx -2021/08/18 | 11925 | macros/luatex/latex/ekdosis/ekdosis.el -2021/08/18 | 1145 | macros/latex/contrib/lambdax/lambdax.bib diff --git a/dviware/dvisvgm/ChangeLog b/dviware/dvisvgm/ChangeLog index 76ae6adb0e..ad24ed0c63 100644 --- a/dviware/dvisvgm/ChangeLog +++ b/dviware/dvisvgm/ChangeLog @@ -1,3 +1,440 @@ +2021-08-16 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, + src/version.hpp: + set version to 2.12 + + * NEWS: + updated NEWS + +2021-08-15 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.cpp: + skip fill actions if colorspace with unsupported pattern type is active + +2021-08-13 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: + ensure adding color attribute to tiling patterns +(closes #158) + +2021-07-19 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml: + updated FreeType to version 2.11 + +2021-07-04 Martin Gieseking <martin.gieseking@uos.de> + + * src/FilePath.cpp: + prevent out-of-bounds access + + * src/InputBuffer.hpp: + delete unused assignment operator + +2021-06-15 Martin Gieseking <martin.gieseking@uos.de> + + * .gitattributes: + Update .gitattributes + +marked all files in libs and its subfolders as + vendored code + +2021-06-13 Martin Gieseking <martin.gieseking@uos.de> + + * src/FilePath.cpp: + fixed handling of root directories in file paths + + * src/FilePath.cpp, src/FileSystem.cpp, tests/FilePathTest.cpp: + improved handling of drive letters on Windows + +2021-06-11 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.cpp: + fixed displaced graphics if PDF MediaBox isn't located at origin + + * tests/data/Makefile.am: + added missing test data file to Makefile + +2021-06-10 Martin Gieseking <martin.gieseking@uos.de> + + * m4/ax_cxx_compile_stdcxx.m4: + ax_cxx_compile_stdcxx.m4 to version 12 + +2021-05-30 Martin Gieseking <martin.gieseking@uos.de> + + * src/Font.hpp: + simplified boolean expression + + * src/Font.hpp, src/SVGCharPathHandler.cpp: + removed default parameter from virtual methods + +2021-05-25 Martin Gieseking <martin.gieseking@uos.de> + + * src/PSPattern.hpp, src/PsSpecialHandler.cpp: + removed dynamic casting in processing of PS patterns + + * src/PdfSpecialHandler.cpp: + replaced dynamic_cast with static_cast as type is unambiguous + + * src/TensorProductPatch.cpp, src/TriangularPatch.cpp: + replaced dynamic casts of shading patches with PS type comparisons + + * src/CMapManager.cpp: + replaced dynamic cast of CMap type test with existing method + mapsToUnicode() + +2021-05-24 Martin Gieseking <martin.gieseking@uos.de> + + * src/DVIReader.cpp, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, + src/Font.cpp, src/Font.hpp, src/FontEngine.cpp, src/FontManager.cpp, + src/SVGCharHandler.cpp, src/SVGCharPathHandler.cpp, + src/SVGCharTspanTextHandler.cpp, src/SVGTree.cpp, src/utility.hpp, + tests/FontManagerTest.cpp, tests/data/lmmono12-regular.otf: + added font_cast to replace dynamic casts of Font pointers + +2021-05-20 Martin Gieseking <martin.gieseking@uos.de> + + * src/DVIReader.cpp, src/FontMetrics.hpp, src/JFM.hpp: + replaced dynamic cast to test for JFM with dedicated method + +2021-04-23 Martin Gieseking <martin.gieseking@uos.de> + + * src/psdefs.cpp: + fixed PS error thrown when trying to set a shading pattern + + * src/PsSpecialHandler.cpp, src/SVGElement.cpp, src/SVGElement.hpp: + always add fill attribute to pattern paths + +2021-04-10 Martin Gieseking <martin.gieseking@uos.de> + + * doc/dvisvgm.1, doc/dvisvgm.txt.in: + reworded few parts of the manual page + +2021-04-01 Martin Gieseking <martin.gieseking@uos.de> + + * src/PsSpecialHandler.cpp: + restore proper context node at end of pattern definition + +2021-03-22 Martin Gieseking <martin.gieseking@uos.de> + + * src/GraphicsPath.hpp: + use std::equal to check equality of GraphicsPaths + + * src/EllipticalArc.cpp, src/Matrix.cpp, src/Matrix.hpp, + tests/MatrixTest.cpp: + Matrix: added default constructor; explicit init list constructor + + * src/GFReader.cpp, src/Message.cpp, src/VectorIterator.hpp: + removed redundant index checks + + * src/DVIToSVG.cpp, src/DVIToSVG.hpp: + initialize basic members outside constructor body + + * src/DvisvgmSpecialHandler.cpp: + two small code improvements + + * src/FontManager.cpp: + removed redundant check + + * src/GFGlyphTracer.cpp, src/GFGlyphTracer.hpp, src/HyperlinkManager.hpp, + src/PSInterpreter.cpp, src/PsSpecialHandler.cpp: + added missing const to reference parameters + + * src/InputBuffer.hpp: + prevent unwanted copying of input buffers + +2021-03-15 Martin Gieseking <martin.gieseking@uos.de> + + * doc/dvisvgm.1: + fixed typo in manual + + * src/PSInterpreter.cpp: + fixed expression to check current GS running mode + + * src/SVGSingleCharTextHandler.cpp: + reset change flag of color and opacity properties unconditionally + + * src/SVGCharTspanTextHandler.cpp: + create initial tspan if opacity values differ from defaults + + * src/Ghostscript.cpp, src/Ghostscript.hpp, src/PSInterpreter.cpp, + src/PSInterpreter.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: + update opacity settings on grestore +Requires GS >= 9.52 because earlier + versions only provide operators to set the +opacity/blendmode values and + none to retrieve them. + + * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.hpp, + src/psdefs.cpp, tests/PSInterpreterTest.cpp: + renamed PS operator setisshapealpha + + * src/dvisvgm.cpp: + added missing parenthesis in info message + +2021-03-14 Martin Gieseking <martin.gieseking@uos.de> + + * src/optimizer/GroupCollapser.cpp, src/optimizer/TextSimplifier.cpp: + minor loop optimizations + + * src/XMLNode.cpp: + don't create newlines inside text elements +since they may lead to + additional whitespace, e.g. between tspans that lack absolute coordinates + + * src/SVGCharPathHandler.cpp, src/SVGElement.cpp, src/SVGElement.hpp: + don't add style attributes to groups because they're not inheritable + +2021-03-13 Martin Gieseking <martin.gieseking@uos.de> + + * src/Makefile.am, src/Opacity.cpp, src/Opacity.hpp, + src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: + combined alpha and blendmode values into dedicated class + + * src/SVGCharHandler.hpp: + added default and move constructor to CharProperty + + * src/DVIToSVGActions.hpp, src/ImageToSVG.hpp, src/Opacity.hpp, + src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, + src/SVGCharHandler.hpp, src/SVGCharPathHandler.cpp, + src/SVGCharTspanTextHandler.cpp, src/SVGSingleCharTextHandler.cpp, + src/SVGTree.hpp, src/SpecialActions.hpp: + added opacity properties to text elements + + * src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, + src/SVGCharPathHandler.cpp, src/SVGCharTspanTextHandler.cpp, + src/SVGSingleCharTextHandler.cpp: + added shorthand operator for CharProperty::get() + + * src/Opacity.hpp, src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: + PS handler: replaced isolated opacity variables with Opacity class + + * src/Makefile.am, src/Opacity.hpp, src/PsSpecialHandler.cpp, + src/PsSpecialHandler.hpp, src/SVGElement.cpp, src/SVGElement.hpp, + src/XMLNode.hpp: + added class to handle SVG attributes in a uniform manner + + * src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, + src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, + src/EmSpecialHandler.cpp, src/HyperlinkManager.cpp, src/ImageToSVG.hpp, + src/PSPattern.cpp, src/PsSpecialHandler.cpp, src/SVGCharHandler.cpp, + src/SVGCharHandler.hpp, src/SVGCharPathHandler.cpp, + src/SVGCharPathHandler.hpp, src/SVGCharTspanTextHandler.cpp, + src/SVGCharTspanTextHandler.hpp, src/SVGElement.cpp, src/SVGElement.hpp, + src/SVGSingleCharTextHandler.cpp, src/SVGTree.cpp, src/SVGTree.hpp, + src/SpecialActions.hpp, src/TpicSpecialHandler.cpp, + tests/TpicSpecialTest.cpp: + added opacity properties to graphics elements created outside the PS + handler +(closes #148) + + * src/EmSpecialHandler.cpp, src/SVGElement.cpp, src/SVGElement.hpp, + src/TpicSpecialHandler.cpp, tests/EmSpecialTest.cpp, + tests/TpicSpecialTest.cpp: + unified handling of "point" attributes + + * src/EmSpecialHandler.cpp, src/SVGCharHandler.cpp, + src/SVGCharPathHandler.cpp, src/SVGElement.cpp, src/SVGTree.cpp, + src/TpicSpecialHandler.cpp: + removed redundant casts to XMLString + +2021-03-05 Martin Gieseking <martin.gieseking@uos.de> + + * .github/workflows/c-cpp.yml: + added GitHub CI configuration + + * .github/workflows/c-cpp.yml: + removed distcheck from CI + + * README.md: + added GitHub CI badge; removed Copr badge + +2021-03-04 Martin Gieseking <martin.gieseking@uos.de> + + * src/BgColorSpecialHandler.cpp, src/BoundingBox.cpp, + src/DvisvgmSpecialHandler.cpp, src/EllipticalArc.cpp, + src/EmSpecialHandler.cpp, src/FontCache.cpp, src/FontEngine.cpp, + src/FontManager.cpp, src/FontWriter.cpp, src/PSInterpreter.cpp, + src/PapersizeSpecialHandler.cpp, src/RangeMap.cpp, src/Subfont.cpp, + src/TpicSpecialHandler.cpp, src/TrueTypeFont.cpp, src/XMLDocument.cpp, + src/XMLNode.cpp, src/dvisvgm.cpp, src/utility.cpp: + avoid copying objects in emplace methods + +2021-02-15 Martin Gieseking <martin.gieseking@uos.de> + + * .gitignore: + added .pyc to ignored file suffixes + +2021-02-09 Martin Gieseking <martin.gieseking@uos.de> + + * src/FilePath.cpp, src/FileSystem.cpp, src/FileSystem.hpp: + improved handling of differing drive letters in Windows file paths + +2021-01-27 Martin Gieseking <martin.gieseking@uos.de> + + * doc/dvisvgm.txt.in: + fixed typo in manual + +2021-01-26 Martin Gieseking <martin.gieseking@uos.de> + + * doc/tweak-dblatex-tex.py: + updated tweak-dblatex-tex to Python 3 + +2021-01-21 Martin Gieseking <martin.gieseking@uos.de> + + * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, + src/version.hpp: + set version to 2.11.1 + + * NEWS: + updated NEWS + +2021-01-03 Martin Gieseking <martin.gieseking@uos.de> + + * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, + doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, + doc/dvisvgm.1, doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, + doc/tweak-db-refentry.xsl, doc/tweak-dblatex-pdf.xsl, libs/Makefile.am, + libs/ff-woff/fontforge/tmpfile2.cpp, src/AGLTable.hpp, + src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/Bezier.cpp, + src/Bezier.hpp, src/BgColorSpecialHandler.cpp, + src/BgColorSpecialHandler.hpp, src/Bitmap.cpp, src/Bitmap.hpp, + src/BoundingBox.cpp, src/BoundingBox.hpp, src/CLCommandLine.cpp, + src/CLCommandLine.hpp, src/CLOption.hpp, src/CMap.cpp, src/CMap.hpp, + src/CMapManager.cpp, src/CMapManager.hpp, src/CMapReader.cpp, + src/CMapReader.hpp, src/Calculator.cpp, src/Calculator.hpp, + src/CharMapID.cpp, src/CharMapID.hpp, src/Character.hpp, src/Color.cpp, + src/Color.hpp, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, + src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, + src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, + src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, + src/DVIToSVGActions.hpp, src/Directory.cpp, src/Directory.hpp, + src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, + src/EPSFile.cpp, src/EPSFile.hpp, src/EPSToSVG.hpp, + src/EllipticalArc.cpp, src/EllipticalArc.hpp, src/EmSpecialHandler.cpp, + src/EmSpecialHandler.hpp, src/EncFile.cpp, src/EncFile.hpp, + src/FileFinder.cpp, src/FileFinder.hpp, src/FilePath.cpp, + src/FilePath.hpp, src/FileSystem.cpp, src/FileSystem.hpp, + src/FixWord.hpp, src/Font.cpp, src/Font.hpp, src/FontCache.cpp, + src/FontCache.hpp, src/FontEncoding.cpp, src/FontEncoding.hpp, + src/FontEngine.cpp, src/FontEngine.hpp, src/FontManager.cpp, + src/FontManager.hpp, src/FontMap.cpp, src/FontMap.hpp, + src/FontMetrics.cpp, src/FontMetrics.hpp, src/FontStyle.hpp, + src/FontWriter.cpp, src/FontWriter.hpp, src/GFGlyphTracer.cpp, + src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.hpp, + src/GFTracer.cpp, src/GFTracer.hpp, src/Ghostscript.cpp, + src/Ghostscript.hpp, src/Glyph.hpp, src/GlyphTracerMessages.hpp, + src/GraphicsPath.hpp, src/HashFunction.cpp, src/HashFunction.hpp, + src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, + src/HyperlinkManager.cpp, src/HyperlinkManager.hpp, src/ImageToSVG.cpp, + src/ImageToSVG.hpp, src/InputBuffer.cpp, src/InputBuffer.hpp, + src/InputReader.cpp, src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, + src/Length.cpp, src/Length.hpp, src/MD5HashFunction.hpp, src/Makefile.am, + src/MapLine.cpp, src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, + src/Message.cpp, src/Message.hpp, src/MessageException.hpp, + src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, + src/MiKTeXCom.hpp, src/NoPsSpecialHandler.cpp, + src/NoPsSpecialHandler.hpp, src/NumericRanges.hpp, src/PDFParser.cpp, + src/PDFParser.hpp, src/PDFToSVG.hpp, src/PSFilter.hpp, + src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PSPattern.cpp, + src/PSPattern.hpp, src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp, + src/PageRanges.cpp, src/PageRanges.hpp, src/PageSize.cpp, + src/PageSize.hpp, src/Pair.hpp, src/PapersizeSpecialHandler.cpp, + src/PapersizeSpecialHandler.hpp, src/PathClipper.cpp, + src/PathClipper.hpp, src/PdfSpecialHandler.cpp, + src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, + src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, + src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, + src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, + src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, + src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, + src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, + src/SVGOutput.cpp, src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, + src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, + src/ShadingPatch.cpp, src/ShadingPatch.hpp, src/SignalHandler.cpp, + src/SignalHandler.hpp, src/SourceInput.cpp, src/SourceInput.hpp, + src/SpecialActions.hpp, src/SpecialHandler.hpp, src/SpecialManager.cpp, + src/SpecialManager.hpp, src/StreamReader.cpp, src/StreamReader.hpp, + src/StreamWriter.cpp, src/StreamWriter.hpp, src/Subfont.cpp, + src/Subfont.hpp, src/System.cpp, src/System.hpp, src/TFM.cpp, + src/TFM.hpp, src/TTFAutohint.cpp, src/TTFAutohint.hpp, + src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, src/Terminal.cpp, + src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, + src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, + src/TriangularPatch.cpp, src/TriangularPatch.hpp, src/TrueTypeFont.cpp, + src/TrueTypeFont.hpp, src/Unicode.cpp, src/Unicode.hpp, + src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, + src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, + src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, + src/XMLString.hpp, src/XXHashFunction.hpp, src/ZLibOutputStream.hpp, + src/dvisvgm.cpp, src/ffwrapper.c, src/ffwrapper.h, src/macros.hpp, + src/optimizer/AttributeExtractor.cpp, + src/optimizer/AttributeExtractor.hpp, src/optimizer/DependencyGraph.hpp, + src/optimizer/GroupCollapser.cpp, src/optimizer/GroupCollapser.hpp, + src/optimizer/OptimizerModule.hpp, + src/optimizer/RedundantElementRemover.cpp, + src/optimizer/RedundantElementRemover.hpp, + src/optimizer/SVGOptimizer.cpp, src/optimizer/SVGOptimizer.hpp, + src/optimizer/TextSimplifier.cpp, src/optimizer/TextSimplifier.hpp, + src/optimizer/TransformSimplifier.cpp, + src/optimizer/TransformSimplifier.hpp, src/optimizer/WSNodeRemover.cpp, + src/optimizer/WSNodeRemover.hpp, src/options.dtd, src/options.xml, + src/psdefs.cpp, src/utility.cpp, src/utility.hpp, src/version.hpp, + src/version.hpp.in, src/windows.hpp, tests/BezierTest.cpp, + tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, + tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, + tests/CalculatorTest.cpp, tests/ColorSpecialTest.cpp, + tests/ColorTest.cpp, tests/CommandLineTest.cpp, tests/DVIReaderTest.cpp, + tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, + tests/DvisvgmSpecialTest.cpp, tests/EllipticalArcTest.cpp, + tests/EmSpecialTest.cpp, tests/FileFinderTest.cpp, + tests/FilePathTest.cpp, tests/FileSystemTest.cpp, + tests/FontCacheTest.cpp, tests/FontManagerTest.cpp, + tests/FontMapTest.cpp, tests/GFGlyphTracerTest.cpp, + tests/GFReaderTest.cpp, tests/GhostscriptTest.cpp, + tests/GraphicsPathTest.cpp, tests/HashFunctionTest.cpp, + tests/JFMReaderTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, + tests/MapLineTest.cpp, tests/MatrixTest.cpp, + tests/MessageExceptionTest.cpp, tests/PDFParserTest.cpp, + tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, + tests/PageSizeTest.cpp, tests/PairTest.cpp, + tests/PapersizeSpecialTest.cpp, tests/RangeMapTest.cpp, + tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, + tests/SpecialManagerTest.cpp, tests/SplittedCharInputBufferTest.cpp, + tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, + tests/StreamWriterTest.cpp, tests/StringMatcherTest.cpp, + tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, + tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, + tests/TpicSpecialTest.cpp, tests/TriangularPatchTest.cpp, + tests/UnicodeTest.cpp, tests/UtilityTest.cpp, + tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, + tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, + tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, + tests/normalize.xsl, tests/testmain.cpp: + updated year in copyright statements to 2021 + +2020-12-30 Martin Gieseking <martin.gieseking@uos.de> + + * src/Calculator.cpp, tests/CalculatorTest.cpp: + fixed a comment and added minor calculator tests + + * src/Calculator.cpp, src/Calculator.hpp, tests/CalculatorTest.cpp: + use variant type for token objects in class Calculator + +2020-12-29 Martin Gieseking <martin.gieseking@uos.de> + + * src/FontEngine.cpp: + renamed some local variables + +2020-12-21 Martin Gieseking <martin.gieseking@uos.de> + + * src/FontEngine.cpp: + ensure unambiguity of GID to charcode mappings +(fixes #147) + + * src/Font.cpp, src/FontEngine.cpp, src/FontEngine.hpp: + Renamed FontEngine::buildCharMap() + 2020-11-28 Martin Gieseking <martin.gieseking@uos.de> * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, diff --git a/dviware/dvisvgm/Makefile.am b/dviware/dvisvgm/Makefile.am index 7bb20a01c7..d5445a09ed 100644 --- a/dviware/dvisvgm/Makefile.am +++ b/dviware/dvisvgm/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. diff --git a/dviware/dvisvgm/Makefile.in b/dviware/dvisvgm/Makefile.in index e4e663c7fb..a39a2f7d6b 100644 --- a/dviware/dvisvgm/Makefile.in +++ b/dviware/dvisvgm/Makefile.in @@ -354,6 +354,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/NEWS b/dviware/dvisvgm/NEWS index 9d8991c5d0..c711e4503c 100644 --- a/dviware/dvisvgm/NEWS +++ b/dviware/dvisvgm/NEWS @@ -1,3 +1,19 @@ +dvisvgm-2.12 (2021-08-16) +- added transparency support of SVG elements created outside the PS handler + (GH issue #148) +- fixed spacing issue caused by unexpected newline characters in SVG output +- fixed PS error occurred when defining (yet unsupported) PS shading patterns +- fixed issue in color handling of PS tiling patterns (GH issue #158) +- fixed displaced graphics occurred if PDF MediBox is not located at the origin +- fixed handling of root directories of file paths +- improved handling of drive letters (Windows only) +- several code refactorings and improvements + +dvisvgm-2.11.1 (2021-01-21) +- fixed possible ambiguity of GID to charcode mappings (GH issue #147) +- refactored representation of token objects in calculator class +- few minor code and test improvements + dvisvgm-2.11 (2020-11-28) - added fallback mechanism for JFM-based virtual fonts proposed by Takuji Tanaka (GH issue #144) diff --git a/dviware/dvisvgm/README b/dviware/dvisvgm/README index f880af15f8..e5a2d98c8a 100644 --- a/dviware/dvisvgm/README +++ b/dviware/dvisvgm/README @@ -130,7 +130,7 @@ ADDITIONAL INFORMATION COPYRIGHT - Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> + Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the diff --git a/dviware/dvisvgm/configure b/dviware/dvisvgm/configure index fa07dfa281..307a061c43 100755 --- a/dviware/dvisvgm/configure +++ b/dviware/dvisvgm/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for dvisvgm 2.11. +# Generated by GNU Autoconf 2.69 for dvisvgm 2.12. # # Report bugs to <martin.gieseking@uos.de>. # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='dvisvgm' PACKAGE_TARNAME='dvisvgm' -PACKAGE_VERSION='2.11' -PACKAGE_STRING='dvisvgm 2.11' +PACKAGE_VERSION='2.12' +PACKAGE_STRING='dvisvgm 2.12' PACKAGE_BUGREPORT='martin.gieseking@uos.de' PACKAGE_URL='' @@ -795,6 +795,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -904,6 +905,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1156,6 +1158,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1293,7 +1304,7 @@ fi 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 + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1406,7 +1417,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 2.11 to adapt to many kinds of systems. +\`configure' configures dvisvgm 2.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1446,6 +1457,7 @@ Fine tuning of the installation directories: --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] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1477,7 +1489,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of dvisvgm 2.11:";; + short | recursive ) echo "Configuration of dvisvgm 2.12:";; esac cat <<\_ACEOF @@ -1625,7 +1637,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -dvisvgm configure 2.11 +dvisvgm configure 2.12 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2169,7 +2181,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 2.11, which was +It was created by dvisvgm $as_me 2.12, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2527,7 +2539,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -DATE="November 2020" +DATE="August 2021" ac_config_headers="$ac_config_headers config.h" @@ -3157,7 +3169,7 @@ fi # Define the identity of the package. PACKAGE='dvisvgm' - VERSION='2.11' + VERSION='2.12' cat >>confdefs.h <<_ACEOF @@ -4868,6 +4880,315 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do switch="-std=gnu++${alternative}" @@ -20138,7 +20459,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 2.11, which was +This file was extended by dvisvgm $as_me 2.12, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20204,7 +20525,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 2.11 +dvisvgm config.status 2.12 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/dviware/dvisvgm/configure.ac b/dviware/dvisvgm/configure.ac index adeab7d4bf..05590fc521 100644 --- a/dviware/dvisvgm/configure.ac +++ b/dviware/dvisvgm/configure.ac @@ -1,11 +1,11 @@ # This file is part of dvisvgm -# Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> +# Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> # # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([dvisvgm],[2.11],[martin.gieseking@uos.de]) -DATE="November 2020" +AC_INIT([dvisvgm],[2.12],[martin.gieseking@uos.de]) +DATE="August 2021" AC_CONFIG_SRCDIR(src) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/dviware/dvisvgm/doc/Makefile.am b/dviware/dvisvgm/doc/Makefile.am index 92c7d25efd..dfdc0483b2 100644 --- a/dviware/dvisvgm/doc/Makefile.am +++ b/dviware/dvisvgm/doc/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. diff --git a/dviware/dvisvgm/doc/Makefile.in b/dviware/dvisvgm/doc/Makefile.in index 8efa4e7554..5e7f5aab37 100644 --- a/dviware/dvisvgm/doc/Makefile.in +++ b/dviware/dvisvgm/doc/Makefile.in @@ -306,6 +306,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/doc/conf-dblatex-man.xsl b/dviware/dvisvgm/doc/conf-dblatex-man.xsl index 2e52f9e96f..a42a929360 100644 --- a/dviware/dvisvgm/doc/conf-dblatex-man.xsl +++ b/dviware/dvisvgm/doc/conf-dblatex-man.xsl @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- This file is part of dvisvgm --> -<!-- Copyright (C) 2015-2020 Martin Gieseking <martin.gieseking@uos.de> --> +<!-- Copyright (C) 2015-2021 Martin Gieseking <martin.gieseking@uos.de> --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- output monospaced text in bold --> <xsl:template match="literal"> diff --git a/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl b/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl index bb3bd93b63..dd676ef67b 100644 --- a/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl +++ b/dviware/dvisvgm/doc/conf-dblatex-pdf.xsl @@ -1,6 +1,6 @@ <?xml version='1.0' encoding="iso-8859-1"?> <!-- This file is part of dvisvgm --> -<!-- Copyright (C) 2015-2020 Martin Gieseking <martin.gieseking@uos.de> --> +<!-- Copyright (C) 2015-2021 Martin Gieseking <martin.gieseking@uos.de> --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="xetex.font"> <xsl:text>\setmainfont{Source Serif Pro} </xsl:text> diff --git a/dviware/dvisvgm/doc/dvisvgm.1 b/dviware/dvisvgm/doc/dvisvgm.1 index ee6b6d0315..995ad789fd 100644 --- a/dviware/dvisvgm/doc/dvisvgm.1 +++ b/dviware/dvisvgm/doc/dvisvgm.1 @@ -2,12 +2,12 @@ .\" Title: dvisvgm .\" Author: Martin Gieseking <martin.gieseking@uos.de> .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 2020-08-23 +.\" Date: 2021-04-10 .\" Manual: dvisvgm Manual -.\" Source: dvisvgm 2.11 +.\" Source: dvisvgm 2.12 .\" Language: English .\" -.TH "DVISVGM" "1" "2020\-08\-23" "dvisvgm 2\&.11" "dvisvgm Manual" +.TH "DVISVGM" "1" "2021\-04\-10" "dvisvgm 2\&.12" "dvisvgm Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -46,7 +46,7 @@ SVG is a vector\-based graphics format and therefore dvisvgm tries to convert th .sp However, TeX\(cqs main source for font descriptions is Metafont, which produces bitmap output (GF files)\&. That\(cqs why not all obtainable TeX fonts are available in a scalable format\&. In these cases, dvisvgm tries to vectorize Metafont\(cqs output by tracing the glyph bitmaps\&. The results are not as perfect as most (manually optimized) PFB or OTF counterparts, but are nonetheless really nice in most cases\&. .sp -When running dvisvgm without option \fB\-\-no\-fonts\fR, it creates \fIfont\fR elements (\fB<font>\fR\&...\fB</font>\fR) to embed the font data into the SVG files\&. Unfortunately, only few SVG renderers support these elements yet\&. Most web browsers and vector graphics applications don\(cqt evaluate them properly so that the text components of the resulting graphics might look strange\&. In order to create more compatible SVG files, command\-line option \fB\-\-no\-fonts\fR can be given to replace the font elements by plain graphics paths\&. Most web browsers (but only few external SVG renderers) also suppport WOFF and WOFF2 fonts that can be used instead of the default SVG fonts\&. Option \fB\-\-font\-format\fR offers the functionality to change the format applied to the fonts being embedded\&. This, however, only works when converting DVI files\&. Text present in PDF and PostScript files is always converted to path elements\&. +When running dvisvgm without option \fB\-\-no\-fonts\fR, it creates \fIfont\fR elements (\fB<font>\fR\&...\fB</font>\fR) to embed the font data into the SVG files\&. Unfortunately, only few SVG renderers support these elements yet\&. Most web browsers and vector graphics applications don\(cqt evaluate them properly so that the text components of the resulting graphics might look strange\&. In order to create more compatible SVG files, command\-line option \fB\-\-no\-fonts\fR can be given to replace the font elements by plain graphics paths\&. Most web browsers (but only few external SVG renderers) also support WOFF and WOFF2 fonts that can be used instead of the default SVG fonts\&. Option \fB\-\-font\-format\fR offers the functionality to change the format applied to the fonts being embedded\&. This, however, only works when converting DVI files\&. Text present in PDF and PostScript files is always converted to path elements\&. .SH "OPTIONS" .sp dvisvgm provides a POSIX\-compliant command\-line interface with short and long option names\&. They may be given before and/or after the name of the file to be converted\&. Also, the order of specifying the options is not significant, i\&.e\&. you can add them in any order without changing dvisvgm\(cqs behavior\&. Certain options accept or require additional parameters which are directly appended to or separated by whitespace from a short option (e\&.g\&. \fB\-v0\fR or \fB\-v 0\fR)\&. Long options require an additional equals sign (\fB=\fR) between option name and argument but without any surrounding whitespace (e\&.g\&. \fB\-\-verbosity=0\fR)\&. Multiple short options that don\(cqt expect a further parameter can be combined after a single dash (e\&.g\&. \fB\-ejs\fR rather than \fB\-e \-j \-s\fR)\&. @@ -662,21 +662,22 @@ expression, it\(cqs assigned to the attribute\&. Otherwise, the matrix expressio .PP \fB\-o, \-\-output\fR=\fIpattern\fR .RS 4 -Sets the pattern specifying the names of the generated SVG files\&. Parameter +Sets the pattern that determines the names of the generated SVG files\&. The required parameter \fIpattern\fR -is a string that may contain static character sequences as well as the variables +may consist of an arbitrary sequence of characters which make up the filenames\&. With the exception of the following mentioned variables and expressions, all characters are treated as static parts of the filenames and are therefore identical for all pages processed during a run of dvisvgm\&. The strings \fB%f\fR, \fB%p\fR, \fB%P\fR, \fB%hd\fR, \fB%ho\fR, and -\fB%hc\fR\&. +\fB%hc\fR +are variables that can be used as part of the pattern\&. \fB%f\fR expands to the base name of the DVI file, i\&.e\&. the filename without suffix, \fB%p\fR is the current page number, and \fB%P\fR -the total number of pages in the DVI file\&. An optional number (0\-9) given directly after the percent sign specifies the minimal number of digits to be written\&. If a particular value consists of less digits, the number is padded with leading zeros\&. Example: +the total number of pages in the DVI file\&. An optional number (0\-9) given directly after the percent sign of a variable holding a numeric value denotes the minimal number of digits to be created\&. If a particular value consists of less digits, the number is padded with leading zeros\&. Example: \fB%3p\fR enforces 3 digits for the current page number (001, 002, etc\&.)\&. Without an explicit width specifier, \fB%p\fR @@ -703,7 +704,7 @@ and \fB%hc\fR are only set if option \fB\-\-page\-hashes\fR -is present\&. Otherwise, it\(cqs empty\&. For further information, see the description of option +is present\&. Otherwise, they are empty\&. For further information, see the description of option \fB\-\-page\-hashes\fR below\&. .sp @@ -1692,4 +1693,4 @@ Please report bugs using the bug tracker at GitHub (\m[blue]https://github.com/m Written by Martin Gieseking <\m[blue]\fBmartin\&.gieseking@uos\&.de\fR\m[]> .SH "COPYING" .sp -Copyright \(co 2005\-2020 Martin Gieseking\&. Free use of this software is granted under the terms of the GNU General Public License (GPL) version 3 or, (at your option) any later version\&. +Copyright \(co 2005\-2021 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/dviware/dvisvgm/doc/dvisvgm.txt.in b/dviware/dvisvgm/doc/dvisvgm.txt.in index 4613c1a08e..2c98ac0500 100644 --- a/dviware/dvisvgm/doc/dvisvgm.txt.in +++ b/dviware/dvisvgm/doc/dvisvgm.txt.in @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////// // This file is part of dvisvgm -- a fast DVI to SVG converter // -// Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> // +// Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> // // // // This program is free software; you can redistribute it and/or // // modify it under the terms of the GNU General Public License as // @@ -22,7 +22,7 @@ Martin Gieseking <@PACKAGE_BUGREPORT@> :man source: dvisvgm :man version: @VERSION@ :man manual: dvisvgm Manual -:revdate: 2020-08-23 09:04 +0200 +:revdate: 2021-04-10 01:45 +0200 Name ---- @@ -69,7 +69,7 @@ to embed the font data into the SVG files. Unfortunately, only few SVG renderers elements yet. Most web browsers and vector graphics applications don't evaluate them properly so that the text components of the resulting graphics might look strange. In order to create more compatible SVG files, command-line option *--no-fonts* can be given to replace the font elements -by plain graphics paths. Most web browsers (but only few external SVG renderers) also suppport +by plain graphics paths. Most web browsers (but only few external SVG renderers) also support WOFF and WOFF2 fonts that can be used instead of the default SVG fonts. Option *--font-format* offers the functionality to change the format applied to the fonts being embedded. This, however, only works when converting DVI files. Text present in PDF and PostScript files is always @@ -454,14 +454,18 @@ The following list describes the currently available optimizer modules. expression is used. *-o, --output*='pattern':: -Sets the pattern specifying the names of the generated SVG files. Parameter 'pattern' is a string -that may contain static character sequences as well as the variables +%f+, +%p+, +%P+, +%hd+, -+%ho+, and +%hc+. +%f+ expands to the base name of the DVI file, i.e. the filename without -suffix, +%p+ is the current page number, and +%P+ the total number of pages in the DVI file. An -optional number (0-9) given directly after the percent sign specifies the minimal number of digits -to be written. If a particular value consists of less digits, the number is padded with leading -zeros. Example: +%3p+ enforces 3 digits for the current page number (001, 002, etc.). Without an -explicit width specifier, +%p+ gets the same number of digits as +%P+. +Sets the pattern that determines the names of the generated SVG files. The required parameter +'pattern' may consist of an arbitrary sequence of characters which make up the filenames. With the +exception of the following mentioned variables and expressions, all characters are treated as static +parts of the filenames and are therefore identical for all pages processed during a run of dvisvgm. +The strings +%f+, +%p+, +%P+, +%hd+, +%ho+, and +%hc+ are variables that can be used as part of the +pattern. +%f+ expands to the base name of the DVI file, i.e. the filename without suffix, +%p+ is the +current page number, and +%P+ the total number of pages in the DVI file. +An optional number (0-9) given directly after the percent sign of a variable holding a numeric value +denotes the minimal number of digits to be created. If a particular value consists of less digits, +the number is padded with leading zeros. +Example: +%3p+ enforces 3 digits for the current page number (001, 002, etc.). Without an explicit +width specifier, +%p+ gets the same number of digits as +%P+. + If you need more control over the numbering, you can use arithmetic expressions as part of a pattern. The syntax is +%(+'expr'+)+ where 'expr' may contain additions, subtractions, multiplications, and @@ -471,7 +475,8 @@ where the numbering starts with 0 rather than 1. + The variables +%hX+ contain different hash values computed from the DVI page data and the options given on the command-line. +%hd+ and +%hc+ are only set if option *--page-hashes* is present. -Otherwise, it's empty. For further information, see the description of option *--page-hashes* below. +Otherwise, they are empty. For further information, see the description of option *--page-hashes* +below. + The default 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' @@ -1001,7 +1006,7 @@ Written by {author} <{email}> Copying ------- -Copyright (C) 2005-2020 Martin Gieseking. Free use of this software is +Copyright (C) 2005-2021 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/dviware/dvisvgm/doc/tweak-db-refentry.xsl b/dviware/dvisvgm/doc/tweak-db-refentry.xsl index 1750d7a4f7..fc77008ed1 100644 --- a/dviware/dvisvgm/doc/tweak-db-refentry.xsl +++ b/dviware/dvisvgm/doc/tweak-db-refentry.xsl @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- This file is part of dvisvgm --> -<!-- Copyright (C) 2015-2020 Martin Gieseking <martin.gieseking@uos.de> --> +<!-- Copyright (C) 2015-2021 Martin Gieseking <martin.gieseking@uos.de> --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" diff --git a/dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl b/dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl index d1762adecb..d4e3c8b0c1 100644 --- a/dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl +++ b/dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- This file is part of dvisvgm --> -<!-- Copyright (C) 2015-2020 Martin Gieseking <martin.gieseking@uos.de> --> +<!-- Copyright (C) 2015-2021 Martin Gieseking <martin.gieseking@uos.de> --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output doctype-public="-//OASIS//DTD DocBook XML V4.5//EN" doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"/> diff --git a/dviware/dvisvgm/doc/tweak-dblatex-tex.py b/dviware/dvisvgm/doc/tweak-dblatex-tex.py index 3f34d94e65..68a649e559 100644 --- a/dviware/dvisvgm/doc/tweak-dblatex-tex.py +++ b/dviware/dvisvgm/doc/tweak-dblatex-tex.py @@ -10,9 +10,9 @@ def main (latex_file, stdout): lines = infile.readlines() for line in lines: if re.match(r'(.*\\def)|(.*\\href)', line) == None: - line = re.sub(r'([a-zA-Z0-9]+)/', r'\1\slash{}', line) + line = re.sub(r'([a-zA-Z0-9]+)/', r'\1\\slash{}', line) line = re.sub(r'-{}-{}', r'\=/\=/', line) line = re.sub(r'([^a-zA-Z0-9])-{}', r'\1\=/', line) - print >>outfile, line.rstrip() + print(line.rstrip(), file=outfile) os.remove(latex_file_old) return 0 diff --git a/dviware/dvisvgm/libs/Makefile.am b/dviware/dvisvgm/libs/Makefile.am index 6b6e0433e4..e756a6be09 100644 --- a/dviware/dvisvgm/libs/Makefile.am +++ b/dviware/dvisvgm/libs/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. diff --git a/dviware/dvisvgm/libs/Makefile.in b/dviware/dvisvgm/libs/Makefile.in index 2f71ea816b..8bc25f567a 100644 --- a/dviware/dvisvgm/libs/Makefile.in +++ b/dviware/dvisvgm/libs/Makefile.in @@ -332,6 +332,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/brotli/Makefile.in b/dviware/dvisvgm/libs/brotli/Makefile.in index 023388493b..9e978253bf 100644 --- a/dviware/dvisvgm/libs/brotli/Makefile.in +++ b/dviware/dvisvgm/libs/brotli/Makefile.in @@ -397,6 +397,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/clipper/Makefile.in b/dviware/dvisvgm/libs/clipper/Makefile.in index 0a219fa872..241afcb139 100644 --- a/dviware/dvisvgm/libs/clipper/Makefile.in +++ b/dviware/dvisvgm/libs/clipper/Makefile.in @@ -345,6 +345,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/ff-woff/Makefile.in b/dviware/dvisvgm/libs/ff-woff/Makefile.in index 05f8d3c8e2..cb23f3e56a 100644 --- a/dviware/dvisvgm/libs/ff-woff/Makefile.in +++ b/dviware/dvisvgm/libs/ff-woff/Makefile.in @@ -409,6 +409,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp b/dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp index d9e5280b2c..9e4a26dbfb 100644 --- a/dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp +++ b/dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp @@ -3,7 +3,7 @@ * works on POSIX and Windows systems. * License: Revised BSD license used by FontForge * https://github.com/fontforge/fontforge/blob/master/LICENSE -* (C) 2017-2020 Martin Gieseking <martin.gieseking@uos.de> */ +* (C) 2017-2021 Martin Gieseking <martin.gieseking@uos.de> */ #include <cstdio> #include <cstdlib> diff --git a/dviware/dvisvgm/libs/md5/Makefile.in b/dviware/dvisvgm/libs/md5/Makefile.in index c38b576680..47788de0b1 100644 --- a/dviware/dvisvgm/libs/md5/Makefile.in +++ b/dviware/dvisvgm/libs/md5/Makefile.in @@ -328,6 +328,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/potrace/Makefile.in b/dviware/dvisvgm/libs/potrace/Makefile.in index b735f00749..a6f517bf4c 100644 --- a/dviware/dvisvgm/libs/potrace/Makefile.in +++ b/dviware/dvisvgm/libs/potrace/Makefile.in @@ -333,6 +333,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/variant/Makefile.in b/dviware/dvisvgm/libs/variant/Makefile.in index 1fa76c5068..11d200e521 100644 --- a/dviware/dvisvgm/libs/variant/Makefile.in +++ b/dviware/dvisvgm/libs/variant/Makefile.in @@ -292,6 +292,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/woff2/Makefile.in b/dviware/dvisvgm/libs/woff2/Makefile.in index 279493dc64..673488dce6 100644 --- a/dviware/dvisvgm/libs/woff2/Makefile.in +++ b/dviware/dvisvgm/libs/woff2/Makefile.in @@ -366,6 +366,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/libs/xxHash/Makefile.in b/dviware/dvisvgm/libs/xxHash/Makefile.in index 322bf0a182..be3355a4f1 100644 --- a/dviware/dvisvgm/libs/xxHash/Makefile.in +++ b/dviware/dvisvgm/libs/xxHash/Makefile.in @@ -328,6 +328,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/m4/Makefile.in b/dviware/dvisvgm/m4/Makefile.in index 557e923063..2fb5c67bac 100644 --- a/dviware/dvisvgm/m4/Makefile.in +++ b/dviware/dvisvgm/m4/Makefile.in @@ -271,6 +271,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/m4/ax_cxx_compile_stdcxx.m4 b/dviware/dvisvgm/m4/ax_cxx_compile_stdcxx.m4 index 43087b2e68..9413da624d 100644 --- a/dviware/dvisvgm/m4/ax_cxx_compile_stdcxx.m4 +++ b/dviware/dvisvgm/m4/ax_cxx_compile_stdcxx.m4 @@ -16,7 +16,7 @@ # The second argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. # -std=c++11). If neither is specified, you get whatever works, with -# preference for an extended mode. +# preference for no added switch, and then for an extended mode. # # The third argument, if specified 'mandatory' or if left unspecified, # indicates that baseline support for the specified C++ standard is @@ -35,13 +35,14 @@ # Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> # Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com> # Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com> +# Copyright (c) 2020 Jason Merrill <jason@redhat.com> # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 11 +#serial 12 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). @@ -62,6 +63,16 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl AC_LANG_PUSH([C++])dnl ac_success=no + m4_if([$2], [], [dnl + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, + ax_cv_cxx_compile_cxx$1, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [ax_cv_cxx_compile_cxx$1=yes], + [ax_cv_cxx_compile_cxx$1=no])]) + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then + ac_success=yes + fi]) + m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do diff --git a/dviware/dvisvgm/src/AGLTable.hpp b/dviware/dvisvgm/src/AGLTable.hpp index c1d460273a..67c6dbcea1 100644 --- a/dviware/dvisvgm/src/AGLTable.hpp +++ b/dviware/dvisvgm/src/AGLTable.hpp @@ -2,7 +2,7 @@ ** AGLTable.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/BasicDVIReader.cpp b/dviware/dvisvgm/src/BasicDVIReader.cpp index 29ca84999f..d37a89c20c 100644 --- a/dviware/dvisvgm/src/BasicDVIReader.cpp +++ b/dviware/dvisvgm/src/BasicDVIReader.cpp @@ -2,7 +2,7 @@ ** BasicDVIReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/BasicDVIReader.hpp b/dviware/dvisvgm/src/BasicDVIReader.hpp index a5b18b0420..a71c547fa5 100644 --- a/dviware/dvisvgm/src/BasicDVIReader.hpp +++ b/dviware/dvisvgm/src/BasicDVIReader.hpp @@ -2,7 +2,7 @@ ** BasicDVIReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Bezier.cpp b/dviware/dvisvgm/src/Bezier.cpp index 87a0070621..b26ed71149 100644 --- a/dviware/dvisvgm/src/Bezier.cpp +++ b/dviware/dvisvgm/src/Bezier.cpp @@ -2,7 +2,7 @@ ** Bezier.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Bezier.hpp b/dviware/dvisvgm/src/Bezier.hpp index 322dd4e72d..18050ca857 100644 --- a/dviware/dvisvgm/src/Bezier.hpp +++ b/dviware/dvisvgm/src/Bezier.hpp @@ -2,7 +2,7 @@ ** Bezier.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/BgColorSpecialHandler.cpp b/dviware/dvisvgm/src/BgColorSpecialHandler.cpp index 3b315b50a3..3ae90b13a5 100644 --- a/dviware/dvisvgm/src/BgColorSpecialHandler.cpp +++ b/dviware/dvisvgm/src/BgColorSpecialHandler.cpp @@ -2,7 +2,7 @@ ** BgColorSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -36,7 +36,7 @@ void BgColorSpecialHandler::preprocess (const string&, std::istream &is, Special if (!_pageColors.empty() && _pageColors.back().first == pageno) _pageColors.back().second = color; else - _pageColors.emplace_back(PageColor(pageno, color)); + _pageColors.emplace_back(pageno, color); } } diff --git a/dviware/dvisvgm/src/BgColorSpecialHandler.hpp b/dviware/dvisvgm/src/BgColorSpecialHandler.hpp index 9334a5c541..07c13437e5 100644 --- a/dviware/dvisvgm/src/BgColorSpecialHandler.hpp +++ b/dviware/dvisvgm/src/BgColorSpecialHandler.hpp @@ -2,7 +2,7 @@ ** BgColorSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Bitmap.cpp b/dviware/dvisvgm/src/Bitmap.cpp index 64ebd6195e..c59e444608 100644 --- a/dviware/dvisvgm/src/Bitmap.cpp +++ b/dviware/dvisvgm/src/Bitmap.cpp @@ -2,7 +2,7 @@ ** Bitmap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Bitmap.hpp b/dviware/dvisvgm/src/Bitmap.hpp index 0d04aa2a69..f0bba3b41e 100644 --- a/dviware/dvisvgm/src/Bitmap.hpp +++ b/dviware/dvisvgm/src/Bitmap.hpp @@ -2,7 +2,7 @@ ** Bitmap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/BoundingBox.cpp b/dviware/dvisvgm/src/BoundingBox.cpp index 2dbcc2ebcd..0fb6fde883 100644 --- a/dviware/dvisvgm/src/BoundingBox.cpp +++ b/dviware/dvisvgm/src/BoundingBox.cpp @@ -2,7 +2,7 @@ ** BoundingBox.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -76,7 +76,7 @@ vector<Length> BoundingBox::extractLengths (string boxstr) { vector<string> lengthStrings = util::split(boxstr, " "); for (const string &lenstr : lengthStrings) { if (!lenstr.empty()) - lengths.emplace_back(Length(lenstr)); + lengths.emplace_back(lenstr); } return lengths; } diff --git a/dviware/dvisvgm/src/BoundingBox.hpp b/dviware/dvisvgm/src/BoundingBox.hpp index c52312a24a..e3b59ebf5d 100644 --- a/dviware/dvisvgm/src/BoundingBox.hpp +++ b/dviware/dvisvgm/src/BoundingBox.hpp @@ -2,7 +2,7 @@ ** BoundingBox.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CLCommandLine.cpp b/dviware/dvisvgm/src/CLCommandLine.cpp index 1f6bb4475e..ae245699c5 100644 --- a/dviware/dvisvgm/src/CLCommandLine.cpp +++ b/dviware/dvisvgm/src/CLCommandLine.cpp @@ -2,7 +2,7 @@ ** CLCommandLine.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CLCommandLine.hpp b/dviware/dvisvgm/src/CLCommandLine.hpp index 257ff4160f..9f9814368b 100644 --- a/dviware/dvisvgm/src/CLCommandLine.hpp +++ b/dviware/dvisvgm/src/CLCommandLine.hpp @@ -2,7 +2,7 @@ ** CLCommandLine.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CLOption.hpp b/dviware/dvisvgm/src/CLOption.hpp index d9da7ae008..594610b896 100644 --- a/dviware/dvisvgm/src/CLOption.hpp +++ b/dviware/dvisvgm/src/CLOption.hpp @@ -2,7 +2,7 @@ ** CLOption.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CMap.cpp b/dviware/dvisvgm/src/CMap.cpp index 193def52fd..6c9b10ed10 100644 --- a/dviware/dvisvgm/src/CMap.cpp +++ b/dviware/dvisvgm/src/CMap.cpp @@ -2,7 +2,7 @@ ** CMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CMap.hpp b/dviware/dvisvgm/src/CMap.hpp index 37a54ba0f8..606a401ff7 100644 --- a/dviware/dvisvgm/src/CMap.hpp +++ b/dviware/dvisvgm/src/CMap.hpp @@ -2,7 +2,7 @@ ** CMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CMapManager.cpp b/dviware/dvisvgm/src/CMapManager.cpp index 52b323ebc6..3a4c1a4e80 100644 --- a/dviware/dvisvgm/src/CMapManager.cpp +++ b/dviware/dvisvgm/src/CMapManager.cpp @@ -2,7 +2,7 @@ ** CMapManager.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -119,7 +119,7 @@ const CMap* CMapManager::findCompatibleBaseFontMap (const PhysicalFont *font, co // try to find a compatible encoding CMap - const bool is_unicode_map = bool(dynamic_cast<const UnicodeCMap*>(cmap)); + const bool is_unicode_map = cmap->mapsToUnicode(); const string ro = cmap->getROString(); for (const CharMapIDToEncName &enc : encodings) { for (const CharMapID &id : charmapIDs) { diff --git a/dviware/dvisvgm/src/CMapManager.hpp b/dviware/dvisvgm/src/CMapManager.hpp index aeb9156e84..eab32e7646 100644 --- a/dviware/dvisvgm/src/CMapManager.hpp +++ b/dviware/dvisvgm/src/CMapManager.hpp @@ -2,7 +2,7 @@ ** CMapManager.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CMapReader.cpp b/dviware/dvisvgm/src/CMapReader.cpp index 8ab22c22e3..c56d3bd463 100644 --- a/dviware/dvisvgm/src/CMapReader.cpp +++ b/dviware/dvisvgm/src/CMapReader.cpp @@ -2,7 +2,7 @@ ** CMapReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CMapReader.hpp b/dviware/dvisvgm/src/CMapReader.hpp index 04ce5740c0..6e9a03ce98 100644 --- a/dviware/dvisvgm/src/CMapReader.hpp +++ b/dviware/dvisvgm/src/CMapReader.hpp @@ -2,7 +2,7 @@ ** CMapReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Calculator.cpp b/dviware/dvisvgm/src/Calculator.cpp index 0fdcf0f2fa..00490efa04 100644 --- a/dviware/dvisvgm/src/Calculator.cpp +++ b/dviware/dvisvgm/src/Calculator.cpp @@ -2,7 +2,7 @@ ** Calculator.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,20 +25,19 @@ using namespace std; -// token types -const char END = 0; -const char NUMBER = 1; -const char NAME = 2; - - /** Evaluates a given arithmetic expression and returns its value. * The evaluator is implemented as a recursive descent parser. * @param[in] is reads expression from this stream * @return expression value */ -double Calculator::eval (istream &is) { +double Calculator::eval (istream &is) const { double ret = expr(is, false); - if (lookAhead(is) > 0) + try { + // check if expression has been fully evaluated (next token is of type bool) + mpark::get<bool>(lookAhead(is)); + } + catch (mpark::bad_variant_access &e) { throw CalculatorException("expression syntax error"); + } return ret; } @@ -46,7 +45,7 @@ double Calculator::eval (istream &is) { /** Evaluates a given arithmetic expression and returns its value. * @param[in] expr expression to evaluate * @return expression value */ -double Calculator::eval (const string &expr) { +double Calculator::eval (const string &expr) const { istringstream iss; iss.str(expr); return eval(iss); @@ -54,133 +53,150 @@ double Calculator::eval (const string &expr) { /** Evaluates the root rule of the expression grammar. */ -double Calculator::expr (istream &is, bool skip) { // expr: +double Calculator::expr (istream &is, bool skip) const { // expr: double left = term(is, skip); - for (;;) { - 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 + bool ready=false; + while (!ready) { + Token token = lookAhead(is); + char *op = mpark::get_if<char>(&token); + if (!op) + ready = true; + else { + switch (*op) { + case '+': left += term(is, true); break; // term '+' term => $1 + $3 + case '-': left -= term(is, true); break; // term '-' term => $1 - $3 + default : ready = true; + } } } + return left; // term => $1 } -double Calculator::term (istream &is, bool skip) { // term: +double Calculator::term (istream &is, bool skip) const { // term: double left = prim(is, skip); - for (;;) - switch (lookAhead(is)) { - case '*': left *= prim(is, true); break; // prim '*' prim => $1 * $3 - case '(': left *= prim(is, false); 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; + bool ready=false; + while (!ready) { + Token token = lookAhead(is); + char *op = mpark::get_if<char>(&token); + if (!op) + ready = true; + else { + switch (*op) { + case '*': left *= prim(is, true); break; // prim '*' prim => $1 * $3 + case '(': left *= prim(is, false); 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: + ready = true; } - 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; } + } + return left; } -double Calculator::prim (istream &is, bool skip) { // prim: +/** Evaluates a primary expression of the grammar which doesn't contain any binary operators. */ +double Calculator::prim (istream &is, bool skip) const { // 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); + Token token = lookAhead(is); + if (mpark::get_if<double>(&token)) { // NUMBER => $1 + double ret = mpark::get<double>(lex(is)); + token = lookAhead(is); + if (mpark::get_if<string>(&token)) // NUMBER STRING => $1 * $2 + ret *= getVariable(mpark::get<string>(lex(is))); + return ret; + } + if (mpark::get_if<string>(&token)) // STRING => getVariable($1) + return getVariable(mpark::get<string>(lex(is))); + if (char *op = mpark::get_if<char>(&token)) { + switch (*op) { + case '-': // '-' prim => -$2 + return -prim(is, true); + case '(': { // '(' expr ')' => $2 + double e = expr(is, true); + try { + if (mpark::get<char>(lookAhead(is)) != ')') + throw CalculatorException("')' expected"); + } + catch (mpark::bad_variant_access &e) { + throw CalculatorException("')' expected"); + } + is.get(); // skip processed char + return e; } - 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"); } + throw CalculatorException("primary expression expected"); +} + + +/** 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 { + auto it = _variables.find(name); + if (it == _variables.end()) + throw CalculatorException("undefined variable '" + name + "'"); + return it->second; } -/** Determines type of next token without swallowing it. That means - * the same token will be read again next time. */ -char Calculator::lookAhead (istream &is) { +/** Determines the type of the next token without swallowing it. That means + * the same token will be read again next time. The value of the returned token + * object is only set for character tokens and should be considered undefined + * for the other types. */ +Calculator::Token Calculator::lookAhead (istream &is) { is >> ws; int c = is.peek(); if (is.eof()) - return END; + return false; if (isdigit(c) || c == '.') - return NUMBER; + return double(0); if (isalpha(c)) - return NAME; + return string(); 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. +/** Reads and swallows the next token. The returned Token object is represented by + * a variant and thus contains both its type and value. * @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: { - string str; - while (isdigit(is.peek()) || is.peek() == '.') - str += char(is.get()); - try { - _numValue = stod(str); - } - catch (const exception&) { - throw CalculatorException("invalid number: "+str); - } - break; + * @return the read token */ +Calculator::Token Calculator::lex (istream &is) { + Token token = lookAhead(is); + if (mpark::get_if<char>(&token)) + is.get(); // token already contains the value from look ahead + else if (mpark::get_if<double>(&token)) { + string str; + while (isdigit(is.peek()) || is.peek() == '.') + str += char(is.get()); + try { + token.emplace<double>(stod(str)); } - case NAME: { - _strValue.clear(); - while (isalpha(is.peek())) - _strValue += char(is.get()); - break; + catch (const exception&) { + throw CalculatorException("invalid number: "+str); } - 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 { - auto it = _variables.find(name); - if (it == _variables.end()) - throw CalculatorException("undefined variable '" + name + "'"); - return it->second; + else if (mpark::get_if<string>(&token)) { + string name; + while (isalpha(is.peek())) + name += char(is.get()); + token.emplace<string>(name); + } + return token; } - diff --git a/dviware/dvisvgm/src/Calculator.hpp b/dviware/dvisvgm/src/Calculator.hpp index 92ec4e40b1..50f8fb959c 100644 --- a/dviware/dvisvgm/src/Calculator.hpp +++ b/dviware/dvisvgm/src/Calculator.hpp @@ -2,7 +2,7 @@ ** Calculator.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -24,31 +24,31 @@ #include <istream> #include <map> #include <string> +#include <mpark/variant.hpp> #include "MessageException.hpp" - struct CalculatorException : public MessageException { explicit CalculatorException (const std::string &msg) : MessageException(msg) {} }; class Calculator { public: - double eval (std::istream &is); - double eval (const std::string &expr); + double eval (std::istream &is) const; + double eval (const std::string &expr) const; 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); + double expr (std::istream &is, bool skip) const; + double term (std::istream &is, bool skip) const; + double prim (std::istream &is, bool skip) const; + + using Token = mpark::variant<bool, char, double, std::string>; + static Token lex (std::istream &is); + static Token lookAhead (std::istream &is); private: std::map<std::string,double> _variables; - double _numValue=0; - std::string _strValue; }; #endif diff --git a/dviware/dvisvgm/src/CharMapID.cpp b/dviware/dvisvgm/src/CharMapID.cpp index 9c56afc73a..0020b38d04 100644 --- a/dviware/dvisvgm/src/CharMapID.cpp +++ b/dviware/dvisvgm/src/CharMapID.cpp @@ -2,7 +2,7 @@ ** CharMapID.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CharMapID.hpp b/dviware/dvisvgm/src/CharMapID.hpp index ed044a9cf3..8b8890bc3a 100644 --- a/dviware/dvisvgm/src/CharMapID.hpp +++ b/dviware/dvisvgm/src/CharMapID.hpp @@ -2,7 +2,7 @@ ** CharMapID.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Character.hpp b/dviware/dvisvgm/src/Character.hpp index 667a583100..1e381f9311 100644 --- a/dviware/dvisvgm/src/Character.hpp +++ b/dviware/dvisvgm/src/Character.hpp @@ -2,7 +2,7 @@ ** Character.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Color.cpp b/dviware/dvisvgm/src/Color.cpp index bf9a05d7a3..60107be9de 100644 --- a/dviware/dvisvgm/src/Color.cpp +++ b/dviware/dvisvgm/src/Color.cpp @@ -2,7 +2,7 @@ ** Color.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Color.hpp b/dviware/dvisvgm/src/Color.hpp index 6f6f812207..061e3e1236 100644 --- a/dviware/dvisvgm/src/Color.hpp +++ b/dviware/dvisvgm/src/Color.hpp @@ -2,7 +2,7 @@ ** Color.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ColorSpecialHandler.cpp b/dviware/dvisvgm/src/ColorSpecialHandler.cpp index 2cacf82992..fed3a985f4 100644 --- a/dviware/dvisvgm/src/ColorSpecialHandler.cpp +++ b/dviware/dvisvgm/src/ColorSpecialHandler.cpp @@ -2,7 +2,7 @@ ** ColorSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ColorSpecialHandler.hpp b/dviware/dvisvgm/src/ColorSpecialHandler.hpp index eeab300f47..0d90283503 100644 --- a/dviware/dvisvgm/src/ColorSpecialHandler.hpp +++ b/dviware/dvisvgm/src/ColorSpecialHandler.hpp @@ -2,7 +2,7 @@ ** ColorSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/CommandLine.hpp b/dviware/dvisvgm/src/CommandLine.hpp index 7ea6ddd76e..c4a215b301 100644 --- a/dviware/dvisvgm/src/CommandLine.hpp +++ b/dviware/dvisvgm/src/CommandLine.hpp @@ -2,7 +2,7 @@ // It is part of the dvisvgm package and published under the terms // of the GNU General Public License version 3, or (at your option) any later version. // See file COPYING for further details. -// Copyright (C) 2016-2020 Martin Gieseking <martin.gieseking@uos.de> +// Copyright (C) 2016-2021 Martin Gieseking <martin.gieseking@uos.de> #ifndef COMMANDLINE_HPP #define COMMANDLINE_HPP @@ -20,7 +20,7 @@ class CommandLine : public CL::CommandLine { CommandLine () : CL::CommandLine( "This program converts DVI files, as created by TeX/LaTeX, as well as\nEPS and PDF files to the XML-based scalable vector graphics format SVG.", "[options] dvifile\n--eps [options] epsfile\n--pdf [options] pdffile", - "Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de>" + "Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de>" ) {} CommandLine (int argc, char **argv) : CommandLine() { diff --git a/dviware/dvisvgm/src/DLLoader.cpp b/dviware/dvisvgm/src/DLLoader.cpp index 9a974e89d9..064368c24a 100644 --- a/dviware/dvisvgm/src/DLLoader.cpp +++ b/dviware/dvisvgm/src/DLLoader.cpp @@ -2,7 +2,7 @@ ** DLLoader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/DLLoader.hpp b/dviware/dvisvgm/src/DLLoader.hpp index 469fd1c4aa..558c27d0c3 100644 --- a/dviware/dvisvgm/src/DLLoader.hpp +++ b/dviware/dvisvgm/src/DLLoader.hpp @@ -2,7 +2,7 @@ ** DLLoader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/DVIActions.hpp b/dviware/dvisvgm/src/DVIActions.hpp index 31ea693477..f51120ab77 100644 --- a/dviware/dvisvgm/src/DVIActions.hpp +++ b/dviware/dvisvgm/src/DVIActions.hpp @@ -2,7 +2,7 @@ ** DVIActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/DVIReader.cpp b/dviware/dvisvgm/src/DVIReader.cpp index 893e6a818b..c524ff60db 100644 --- a/dviware/dvisvgm/src/DVIReader.cpp +++ b/dviware/dvisvgm/src/DVIReader.cpp @@ -2,7 +2,7 @@ ** DVIReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -26,7 +26,6 @@ #include "Font.hpp" #include "FontManager.hpp" #include "HashFunction.hpp" -#include "JFM.hpp" #include "utility.hpp" #include "VectorStream.hpp" @@ -203,11 +202,11 @@ void DVIReader::cmdPop (int) { * @param[in] font current font (corresponding to _currFontNum) * @param[in] c character to typeset */ void DVIReader::putVFChar (Font *font, uint32_t c) { - if (auto vf = dynamic_cast<VirtualFont*>(font)) { // is current font a virtual font? + if (auto vf = font_cast<VirtualFont*>(font)) { // is current font a virtual font? FontManager &fm = FontManager::instance(); const vector<uint8_t> *dvi = vf->getDVI(c); // try to get DVI snippet that represents character c Font *firstFont = fm.vfFirstFont(vf); - if (!dvi && (!firstFont || !dynamic_cast<const JFM*>(firstFont->getMetrics()))) + if (!dvi && (!firstFont || !firstFont->getMetrics()->isJFM())) return; fm.enterVF(vf); // enter VF font number context int savedFontNum = _currFontNum; // save current font number @@ -485,7 +484,7 @@ const Font* DVIReader::defineFont (uint32_t fontnum, const string &name, uint32_ else { // TFM-based font specified by name int id = fm.registerFont(fontnum, name, cs, dsize, ssize); font = fm.getFontById(id); - if (auto vf = dynamic_cast<VirtualFont*>(font)) { + if (auto vf = font_cast<VirtualFont*>(font)) { // read vf file, register its font and character definitions fm.enterVF(vf); ifstream ifs(vf->path(), ios::binary); @@ -592,7 +591,7 @@ void DVIReader::cmdXFontDef (int) { FontManager::instance().registerFont(fontnum, fontname, fontIndex, ptsize, style, color); font = FontManager::instance().getFont(fontnum); } - dviXFontDef(fontnum, dynamic_cast<const NativeFont*>(font)); + dviXFontDef(fontnum, font_cast<const NativeFont*>(font)); } diff --git a/dviware/dvisvgm/src/DVIReader.hpp b/dviware/dvisvgm/src/DVIReader.hpp index 0e227ba8f6..ff8390f515 100644 --- a/dviware/dvisvgm/src/DVIReader.hpp +++ b/dviware/dvisvgm/src/DVIReader.hpp @@ -2,7 +2,7 @@ ** DVIReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/DVIToSVG.cpp b/dviware/dvisvgm/src/DVIToSVG.cpp index df3d3e39e6..22c41415bf 100644 --- a/dviware/dvisvgm/src/DVIToSVG.cpp +++ b/dviware/dvisvgm/src/DVIToSVG.cpp @@ -2,7 +2,7 @@ ** DVIToSVG.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -74,13 +74,10 @@ bool DVIToSVG::COMPUTE_PROGRESS = false; DVIToSVG::HashSettings DVIToSVG::PAGE_HASH_SETTINGS; -DVIToSVG::DVIToSVG (istream &is, SVGOutputBase &out) : DVIReader(is), _out(out) +DVIToSVG::DVIToSVG (istream &is, SVGOutputBase &out) + : DVIReader(is), _out(out), _prevWritingMode(WritingMode::LR) { - _pageHeight = _pageWidth = 0; - _tx = _ty = 0; // no cursor translation - _pageByte = 0; _prevXPos = _prevYPos = numeric_limits<double>::min(); - _prevWritingMode = WritingMode::LR; _actions = util::make_unique<DVIToSVGActions>(*this, _svg); } @@ -362,7 +359,7 @@ void DVIToSVG::embedFonts (XMLElement *svgElement) { unordered_set<const Font*> tracedFonts; // collect unique fonts already traced for (const auto &fontchar : usedCharsMap) { const Font *font = fontchar.first; - if (auto ph_font = dynamic_cast<const PhysicalFont*>(font)) { + if (auto ph_font = font_cast<const PhysicalFont*>(font)) { // Check if glyphs should be traced. Only trace the glyphs of unique fonts, i.e. // avoid retracing the same glyphs again if they are referenced in various sizes. if (TRACE_MODE != 0 && tracedFonts.find(ph_font->uniqueFont()) == tracedFonts.end()) { @@ -481,7 +478,7 @@ void DVIToSVG::dviEop () { void DVIToSVG::dviSetChar0 (uint32_t c, const Font *font) { - if (_actions && !dynamic_cast<const VirtualFont*>(font)) + if (_actions && !font_cast<const VirtualFont*>(font)) _actions->setChar(dviState().h+_tx, dviState().v+_ty, c, dviState().d != WritingMode::LR, *font); } @@ -520,7 +517,7 @@ void DVIToSVG::dviPop () { void DVIToSVG::dviFontNum (uint32_t fontnum, SetFontMode, const Font *font) { - if (_actions && font && !dynamic_cast<const VirtualFont*>(font)) + if (_actions && font && !font_cast<const VirtualFont*>(font)) _actions->setFont(FontManager::instance().fontID(fontnum), *font); // all fonts get a recomputed ID } diff --git a/dviware/dvisvgm/src/DVIToSVG.hpp b/dviware/dvisvgm/src/DVIToSVG.hpp index 1bafa7cb3d..150f611fd0 100644 --- a/dviware/dvisvgm/src/DVIToSVG.hpp +++ b/dviware/dvisvgm/src/DVIToSVG.hpp @@ -2,7 +2,7 @@ ** DVIToSVG.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -101,13 +101,13 @@ class DVIToSVG : public DVIReader { SVGTree _svg; SVGOutputBase &_out; std::unique_ptr<DVIActions> _actions; - std::string _bboxFormatString; ///< bounding box size/format set by the user - std::string _transCmds; ///< page transformation commands set by the user - double _pageHeight, _pageWidth; ///< global page height and width stored in the postamble - double _tx, _ty; ///< translation of cursor position - double _prevXPos, _prevYPos; ///< previous cursor position - WritingMode _prevWritingMode; ///< previous writing mode - std::streampos _pageByte; ///< position of the stream pointer relative to the preceding bop (in bytes) + std::string _bboxFormatString; ///< bounding box size/format set by the user + std::string _transCmds; ///< page transformation commands set by the user + double _pageHeight=0, _pageWidth=0; ///< global page height and width stored in the postamble + double _tx=0, _ty=0; ///< translation of cursor position + double _prevXPos, _prevYPos; ///< previous cursor position + WritingMode _prevWritingMode; ///< previous writing mode + std::streampos _pageByte=0; ///< position of the stream pointer relative to the preceding bop (in bytes) }; #endif diff --git a/dviware/dvisvgm/src/DVIToSVGActions.cpp b/dviware/dvisvgm/src/DVIToSVGActions.cpp index 2464aec517..6de95de7b8 100644 --- a/dviware/dvisvgm/src/DVIToSVGActions.cpp +++ b/dviware/dvisvgm/src/DVIToSVGActions.cpp @@ -2,7 +2,7 @@ ** DVIToSVGActions.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -105,7 +105,7 @@ void DVIToSVGActions::setChar (double x, double y, unsigned c, bool vertical, co GlyphMetrics metrics; font.getGlyphMetrics(c, vertical, metrics); - auto pf = dynamic_cast<const PhysicalFont*>(&font); + auto pf = font_cast<const PhysicalFont*>(&font); if (PhysicalFont::EXACT_BBOX && pf) { GlyphMetrics exact_metrics; pf->getExactGlyphBox(c, exact_metrics, vertical, &callback); @@ -166,15 +166,13 @@ void DVIToSVGActions::setRule (double x, double y, double height, double width) return; // (x,y) is the lower left corner of the rectangle - auto rect = util::make_unique<XMLElement>("rect"); + auto rect = util::make_unique<SVGElement>("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().toSVG()); - if (getColor() != Color::BLACK) - rect->addAttribute("fill", _svg.getColor().svgColorString()); + rect->setTransform(getMatrix()); + rect->setFillColor(_svg.getColor()); _svg.appendToPage(std::move(rect)); // update bounding box @@ -237,12 +235,12 @@ void DVIToSVGActions::endPage (unsigned pageno) { _svg.transformPage(matrix); if (_bgcolor != Color::TRANSPARENT) { // create a rectangle filled with the background color - auto rect = util::make_unique<XMLElement>("rect"); + auto rect = util::make_unique<SVGElement>("rect"); rect->addAttribute("x", _bbox.minX()); rect->addAttribute("y", _bbox.minY()); rect->addAttribute("width", _bbox.width()); rect->addAttribute("height", _bbox.height()); - rect->addAttribute("fill", _bgcolor.svgColorString()); + rect->setFillColor(_bgcolor); _svg.prependToPage(std::move(rect)); } } diff --git a/dviware/dvisvgm/src/DVIToSVGActions.hpp b/dviware/dvisvgm/src/DVIToSVGActions.hpp index 2ae3fb9a2e..23706f987d 100644 --- a/dviware/dvisvgm/src/DVIToSVGActions.hpp +++ b/dviware/dvisvgm/src/DVIToSVGActions.hpp @@ -2,7 +2,7 @@ ** DVIToSVGActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -49,6 +49,8 @@ class DVIToSVGActions : public DVIActions, public SpecialActions { void setBgColor (const Color &color) override; void setColor (const Color &color) override {_svg.setColor(color);} void setMatrix (const Matrix &m) override {_svg.setMatrix(m);} + void setOpacity (const Opacity &opacity) override {_svg.setOpacity(opacity);} + const Opacity& getOpacity () const override {return _svg.getOpacity();} const Matrix& getMatrix () const override {return _svg.getMatrix();} Matrix getPageTransformation () const override {return _dvireader->getPageTransformation();} Color getColor () const override {return _svg.getColor();} diff --git a/dviware/dvisvgm/src/Directory.cpp b/dviware/dvisvgm/src/Directory.cpp index e7200a0dc3..224165e255 100644 --- a/dviware/dvisvgm/src/Directory.cpp +++ b/dviware/dvisvgm/src/Directory.cpp @@ -2,7 +2,7 @@ ** Directory.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Directory.hpp b/dviware/dvisvgm/src/Directory.hpp index d617b4fcbd..14360a9f67 100644 --- a/dviware/dvisvgm/src/Directory.hpp +++ b/dviware/dvisvgm/src/Directory.hpp @@ -2,7 +2,7 @@ ** Directory.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp b/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp index 97285db1a9..e6f444fa84 100644 --- a/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp +++ b/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp @@ -2,7 +2,7 @@ ** DvisvgmSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -81,8 +81,7 @@ void DvisvgmSpecialHandler::preprocessRawSet (InputReader &ir) { _currentMacro = _macros.end(); throw SpecialException("redefinition of SVG fragment '" + id + "'"); } - pair<string, StringVector> entry(id, StringVector()); - pair<MacroMap::iterator, bool> state = _macros.emplace(move(entry)); + pair<MacroMap::iterator, bool> state = _macros.emplace(id, StringVector()); _currentMacro = state.first; } @@ -194,7 +193,7 @@ static void expand_constants (string &str, SpecialActions &actions) { /** Evaluates substrings of the form {?(expr)} where 'expr' is a math expression, * and replaces the substring by the computed value. * @param[in,out] str string to scan for expressions */ -static void evaluate_expressions (string &str, SpecialActions &actions) { +static void evaluate_expressions (string &str, const SpecialActions &actions) { size_t left = str.find("{?("); // start position of expression macro while (left != string::npos) { size_t right = str.find(")}", left+2); // end position of expression macro @@ -386,14 +385,13 @@ void DvisvgmSpecialHandler::processImg (InputReader &ir, SpecialActions &actions Length h = read_length(ir); string f = ir.getString(); update_bbox(w, h, Length(0), false, actions); - auto img = util::make_unique<XMLElement>("image"); + auto img = util::make_unique<SVGElement>("image"); img->addAttribute("x", actions.getX()); img->addAttribute("y", actions.getY()); img->addAttribute("width", w.bp()); img->addAttribute("height", h.bp()); img->addAttribute("xlink:href", f); - if (!actions.getMatrix().isIdentity()) - img->addAttribute("transform", actions.getMatrix().toSVG()); + img->setTransform(actions.getMatrix()); actions.svgTree().appendToPage(std::move(img)); } catch (const UnitException &e) { @@ -448,10 +446,10 @@ void DvisvgmSpecialHandler::XMLParser::parse (const string &xml, SpecialActions // collect/extract an XML fragment that only contains complete tags // incomplete tags are held back _xmlbuf += xml; - size_t left=0, right; + size_t left=0; try { while (left != string::npos) { - right = _xmlbuf.find('<', left); + size_t right = _xmlbuf.find('<', left); if (left < right && left < _xmlbuf.length()) // plain text found? (actions.svgTree().*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left))); if (right != string::npos) { @@ -523,7 +521,7 @@ void DvisvgmSpecialHandler::XMLParser::openElement (const string &tag, SpecialAc BufferInputReader ir(ib); string name = ir.getString("/ \t\n\r"); ir.skipSpace(); - auto elemNode = util::make_unique<XMLElement>(name); + auto elemNode = util::make_unique<SVGElement>(name); map<string, string> attribs; if (ir.parseAttributes(attribs, true, "\"'")) { for (const auto &attrpair : attribs) diff --git a/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp b/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp index d6aa32c9ee..5bd8d66874 100644 --- a/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp +++ b/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp @@ -2,7 +2,7 @@ ** DvisvgmSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -29,6 +29,7 @@ class InputReader; class SpecialActions; +class SVGElement; class SVGTree; class XMLElement; class XMLNode; @@ -44,7 +45,7 @@ class XMLNode; class DvisvgmSpecialHandler : public SpecialHandler { class XMLParser { using AppendFunc = void (SVGTree::*)(std::unique_ptr<XMLNode>); - using PushFunc = void (SVGTree::*)(std::unique_ptr<XMLElement>); + using PushFunc = void (SVGTree::*)(std::unique_ptr<SVGElement>); using PopFunc = void (SVGTree::*)(); using NameStack = std::vector<std::string>; diff --git a/dviware/dvisvgm/src/EPSFile.cpp b/dviware/dvisvgm/src/EPSFile.cpp index 1a19c07cc7..2f61f9f07d 100644 --- a/dviware/dvisvgm/src/EPSFile.cpp +++ b/dviware/dvisvgm/src/EPSFile.cpp @@ -2,7 +2,7 @@ ** EPSFile.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/EPSFile.hpp b/dviware/dvisvgm/src/EPSFile.hpp index 7b02db95b1..384af7225e 100644 --- a/dviware/dvisvgm/src/EPSFile.hpp +++ b/dviware/dvisvgm/src/EPSFile.hpp @@ -2,7 +2,7 @@ ** EPSFile.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/EPSToSVG.hpp b/dviware/dvisvgm/src/EPSToSVG.hpp index 64f5ac604d..75a574cf38 100644 --- a/dviware/dvisvgm/src/EPSToSVG.hpp +++ b/dviware/dvisvgm/src/EPSToSVG.hpp @@ -2,7 +2,7 @@ ** EPSToSVG.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/EllipticalArc.cpp b/dviware/dvisvgm/src/EllipticalArc.cpp index a151c51307..e7353458e3 100644 --- a/dviware/dvisvgm/src/EllipticalArc.cpp +++ b/dviware/dvisvgm/src/EllipticalArc.cpp @@ -2,7 +2,7 @@ ** EllipticalArc.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -177,7 +177,7 @@ vector<Bezier> EllipticalArc::approximate () const { if (isStraightLine()) { DPair dir = (_endPoint - _startPoint); dir /= dir.length()/3.0; - beziers.emplace_back(Bezier(_startPoint, _startPoint+dir, _endPoint-dir, _endPoint)); + beziers.emplace_back(_startPoint, _startPoint+dir, _endPoint-dir, _endPoint); } else { CenterParams cparams = getCenterParams(); @@ -190,11 +190,11 @@ vector<Bezier> EllipticalArc::approximate () const { if (numCurves > 0) { double c = cos(_rotationAngle); double s = sin(_rotationAngle); - Matrix ellipse = {_rx*c, -_ry*s, cparams.center.x(), _rx*s, _ry*c, cparams.center.y()}; + Matrix ellipse{_rx*c, -_ry*s, cparams.center.x(), _rx*s, _ry*c, cparams.center.y()}; double angle = cparams.startAngle; double diff = cparams.deltaAngle/numCurves; while (numCurves-- > 0) { - beziers.emplace_back(approx_unit_arc(angle, diff).transform(ellipse)); + beziers.push_back(approx_unit_arc(angle, diff).transform(ellipse)); angle += diff; } } diff --git a/dviware/dvisvgm/src/EllipticalArc.hpp b/dviware/dvisvgm/src/EllipticalArc.hpp index 422a40b207..78785c4ff1 100644 --- a/dviware/dvisvgm/src/EllipticalArc.hpp +++ b/dviware/dvisvgm/src/EllipticalArc.hpp @@ -2,7 +2,7 @@ ** EllipticalArc.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/EmSpecialHandler.cpp b/dviware/dvisvgm/src/EmSpecialHandler.cpp index efbd7abef3..ac1d4fc6bc 100644 --- a/dviware/dvisvgm/src/EmSpecialHandler.cpp +++ b/dviware/dvisvgm/src/EmSpecialHandler.cpp @@ -2,7 +2,7 @@ ** EmSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -24,9 +24,8 @@ #include "InputReader.hpp" #include "Length.hpp" #include "SpecialActions.hpp" +#include "SVGElement.hpp" #include "SVGTree.hpp" -#include "XMLNode.hpp" -#include "XMLString.hpp" using namespace std; @@ -77,17 +76,19 @@ static DPair cut_vector (char cuttype, const DPair &linedir, double linewidth) { static void create_line (const DPair &p1, const DPair &p2, char c1, char c2, double lw, SpecialActions &actions) { if (actions.outputLocked()) return; - unique_ptr<XMLElement> node; + unique_ptr<SVGElement> node; DPair dir = p2-p1; if (dir.x() == 0 || dir.y() == 0 || (c1 == 'p' && c2 == 'p')) { // draw regular line - node = util::make_unique<XMLElement>("line"); + node = util::make_unique<SVGElement>("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().svgColorString()); + node->setStrokeWidth(lw); + node->setStrokeColor(actions.getColor()); + node->setStrokeOpacity(actions.getOpacity()); + // update bounding box DPair cv = cut_vector('p', dir, lw); actions.embed(p1+cv); @@ -97,24 +98,24 @@ static void create_line (const DPair &p1, const DPair &p2, char c1, char c2, dou } else { // draw polygon + vector<DPair> points; 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; - ostringstream oss; - oss << XMLString(q11.x()) << ',' << XMLString(q11.y()) << ' ' - << XMLString(q12.x()) << ',' << XMLString(q12.y()) << ' ' - << XMLString(q22.x()) << ',' << XMLString(q22.y()) << ' ' - << XMLString(q21.x()) << ',' << XMLString(q21.y()); - node = util::make_unique<XMLElement>("polygon"); - node->addAttribute("points", oss.str()); - if (actions.getColor() != Color::BLACK) - node->addAttribute("fill", actions.getColor().svgColorString()); + points.push_back(p1+cv1); + points.push_back(p1-cv1); + points.push_back(p2-cv2); + points.push_back(p2+cv2); + + node = util::make_unique<SVGElement>("polygon"); + node->setPoints(points); + node->setFillColor(actions.getColor()); + node->setFillOpacity(actions.getOpacity()); + // update bounding box - actions.embed(q11); - actions.embed(q12); - actions.embed(q21); - actions.embed(q22); + actions.embed(points[0]); + actions.embed(points[1]); + actions.embed(points[2]); + actions.embed(points[3]); } actions.svgTree().appendToPage(std::move(node)); } @@ -236,7 +237,7 @@ void EmSpecialHandler::line (InputReader &ir, SpecialActions& actions) { // Line endpoints don't necessarily have to be defined before // a line definition. If a point isn't defined yet, we put the line // in a wait list and process the lines at the end of the page. - _lines.emplace_back(Line(pointnum1, pointnum2, char(cut1), char(cut2), linewidth)); + _lines.emplace_back(pointnum1, pointnum2, char(cut1), char(cut2), linewidth); } } diff --git a/dviware/dvisvgm/src/EmSpecialHandler.hpp b/dviware/dvisvgm/src/EmSpecialHandler.hpp index e20339e548..fc9f14a468 100644 --- a/dviware/dvisvgm/src/EmSpecialHandler.hpp +++ b/dviware/dvisvgm/src/EmSpecialHandler.hpp @@ -2,7 +2,7 @@ ** EmSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/EncFile.cpp b/dviware/dvisvgm/src/EncFile.cpp index ce0f18d81e..d08791c03e 100644 --- a/dviware/dvisvgm/src/EncFile.cpp +++ b/dviware/dvisvgm/src/EncFile.cpp @@ -2,7 +2,7 @@ ** EncFile.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/EncFile.hpp b/dviware/dvisvgm/src/EncFile.hpp index 8f2b14c430..0e5f90bcb3 100644 --- a/dviware/dvisvgm/src/EncFile.hpp +++ b/dviware/dvisvgm/src/EncFile.hpp @@ -2,7 +2,7 @@ ** EncFile.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FileFinder.cpp b/dviware/dvisvgm/src/FileFinder.cpp index a52ccd37d3..3358d5c273 100644 --- a/dviware/dvisvgm/src/FileFinder.cpp +++ b/dviware/dvisvgm/src/FileFinder.cpp @@ -2,7 +2,7 @@ ** FileFinder.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FileFinder.hpp b/dviware/dvisvgm/src/FileFinder.hpp index 7218bf6c0b..5774f8165c 100644 --- a/dviware/dvisvgm/src/FileFinder.hpp +++ b/dviware/dvisvgm/src/FileFinder.hpp @@ -2,7 +2,7 @@ ** FileFinder.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FilePath.cpp b/dviware/dvisvgm/src/FilePath.cpp index 2150cf31f7..fd81c0221b 100644 --- a/dviware/dvisvgm/src/FilePath.cpp +++ b/dviware/dvisvgm/src/FilePath.cpp @@ -2,7 +2,7 @@ ** FilePath.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -37,34 +37,24 @@ static string& single_slashes (string &str) { #ifdef _WIN32 +/** Returns the drive letter of a given path string or 0 if there's none. */ +static char drive_letter (const string &path) { + if (path.length() >= 2 && path[1] == ':' && isalpha(path[0])) + return tolower(path[0]); + return '\0'; +} + +/** Removes the drive letter and following colon from a given path string if present. + * @param[in] path path to strip drive letter from + * @return drive letter or 0 if there was none */ static char strip_drive_letter (string &path) { - char letter = 0; + char letter = '\0'; if (path.length() >= 2 && path[1] == ':' && isalpha(path[0])) { letter = 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) + ":")) { - path.insert(0, FileSystem::getcwd()+"/"); - strip_drive_letter(path); - } - else - throw MessageException("drive " + string(1, target_drive) + ": not accessible"); - } - } - } - return target_drive; + return tolower(letter); } - #endif @@ -99,7 +89,7 @@ void FilePath::set (const string &path) { * @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 */ void FilePath::set (const string &path, bool isfile) { - init(path, isfile, FileSystem::getcwd()); + init(path, isfile, ""); } @@ -121,47 +111,42 @@ void FilePath::init (string path, bool isfile, string current_dir) { _fname.clear(); single_slashes(path); single_slashes(current_dir); -#ifdef _WIN32 - path = FileSystem::ensureForwardSlashes(path); +#ifndef _WIN32 + if (current_dir.empty()) + current_dir = FileSystem::getcwd(); +#else _drive = strip_drive_letter(path); + if (current_dir.empty() || drive_letter(current_dir) != _drive) + current_dir = FileSystem::getcwd(_drive); + if (!_drive) + _drive = drive_letter(current_dir); + strip_drive_letter(current_dir); + path = FileSystem::ensureForwardSlashes(path); #endif if (isfile) { size_t pos = path.rfind('/'); _fname = path.substr((pos == string::npos) ? 0 : pos+1); - if (pos != string::npos) + // remove filename from path + if (pos == 0 && _fname.length() > 1) // file in root directory? + path.erase(1); + else if (pos != string::npos) path.erase(pos); else path.clear(); } - if (current_dir.empty()) - current_dir = FileSystem::getcwd(); -#ifdef _WIN32 - _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 + "/"); + if ((path.empty() || path[0] != '/') && !current_dir.empty()) + path.insert(0, current_dir + "/"); string elem; for (char c : path) { if (c != '/') elem += c; - else { + else if (!elem.empty()){ add(elem); elem.clear(); } } - add(elem); + if (!elem.empty()) + add(elem); } @@ -169,7 +154,7 @@ void FilePath::init (string path, bool isfile, string current_dir) { void FilePath::add (const string &dir) { if (dir == ".." && !_dirs.empty()) _dirs.pop_back(); - else if (dir.length() > 0 && dir != ".") + else if (!dir.empty() && dir != ".") _dirs.emplace_back(dir); } @@ -223,16 +208,16 @@ string FilePath::basename () const { * @return the absolute path string */ string FilePath::absolute (bool with_filename) const { string path; +#ifdef _WIN32 + if (_drive) + path = string(1, _drive) + ":"; +#endif for (const Directory &dir : _dirs) path += "/" + string(dir); 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); } @@ -245,28 +230,32 @@ string FilePath::absolute (bool with_filename) const { * @param[in] with_filename if false, the filename is omitted * @return the relative path string */ string FilePath::relative (string reldir, bool with_filename) const { +#ifdef _WIN32 + char reldrive = drive_letter(reldir); + if (reldir.empty()) { + reldir = FileSystem::getcwd(_drive); + reldrive = drive_letter(FileSystem::getcwd()); + } + bool isAbsolute = (reldir[0] == '/') + || (reldir.length() >= 3 && isalpha(reldir[0]) && reldir[1] == ':' && reldir[2] == '/'); +#else if (reldir.empty()) reldir = FileSystem::getcwd(); -#ifdef _WIN32 - adapt_current_path(reldir, _drive); + bool isAbsolute = (reldir[0] == '/'); #endif - if (reldir[0] != '/') + if (!isAbsolute) return absolute(); - FilePath rel(reldir, false); + FilePath relpath(reldir, false); string path; -#ifdef _WIN32 - if (rel._drive && _drive && tolower(rel._drive) != tolower(_drive)) - path += string(1, _drive) + ":"; -#endif auto it1 = _dirs.begin(); - auto it2 = rel._dirs.begin(); - while (it1 != _dirs.end() && it2 != rel._dirs.end() && *it1 == *it2) + auto it2 = relpath._dirs.begin(); + while (it1 != _dirs.end() && it2 != relpath._dirs.end() && *it1 == *it2) ++it1, ++it2; - for (; it2 != rel._dirs.end(); ++it2) + for (; it2 != relpath._dirs.end(); ++it2) path += "../"; for (; it1 != _dirs.end(); ++it1) path += string(*it1) + "/"; - if (!path.empty()) + if (!path.empty() && path.back() == '/') path.erase(path.length()-1, 1); // remove trailing slash if (with_filename && !_fname.empty()) { if (!path.empty() && path != "/") @@ -275,6 +264,10 @@ string FilePath::relative (string reldir, bool with_filename) const { } if (path.empty()) path = "."; +#ifdef _WIN32 + if (relpath._drive && _drive && _drive != reldrive) + path.insert(0, string(1, _drive) + ":"); +#endif return single_slashes(path); } diff --git a/dviware/dvisvgm/src/FilePath.hpp b/dviware/dvisvgm/src/FilePath.hpp index e9d55562c5..af81db66f4 100644 --- a/dviware/dvisvgm/src/FilePath.hpp +++ b/dviware/dvisvgm/src/FilePath.hpp @@ -2,7 +2,7 @@ ** FilePath.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FileSystem.cpp b/dviware/dvisvgm/src/FileSystem.cpp index e1db59fa03..ada3f8e47c 100644 --- a/dviware/dvisvgm/src/FileSystem.cpp +++ b/dviware/dvisvgm/src/FileSystem.cpp @@ -2,7 +2,7 @@ ** FileSystem.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -135,16 +135,38 @@ string FileSystem::ensureForwardSlashes (string path) { } +/** Returns the absolute path of the current working directory. */ string FileSystem::getcwd () { char buf[1024]; #ifdef _WIN32 - return ensureForwardSlashes(_getcwd(buf, 1024)); + GetCurrentDirectoryA(1024, buf); + return ensureForwardSlashes(buf); #else return ::getcwd(buf, 1024); #endif } +#ifdef _WIN32 +/** Returns the absolute path of the current directory of a given drive. + * Windows keeps a current directory for every drive, i.e. when accessing a drive + * without specifying a path (e.g. with "cd z:"), the current directory of that + * drive is used. + * @param[in] drive letter of drive to get the current directory from + * @return absolute path of the directory */ +string FileSystem::getcwd (char drive) { + string cwd = getcwd(); + if (cwd.length() > 1 && cwd[1] == ':' && tolower(cwd[0]) != tolower(drive)) { + chdir(string(1, drive)+":"); + string cwd2 = cwd; + cwd = getcwd(); + chdir(string(1, cwd2[0])+":"); + } + return cwd; +} +#endif + + /** Changes the work directory. * @param[in] dir path to new work directory * @return true on success */ diff --git a/dviware/dvisvgm/src/FileSystem.hpp b/dviware/dvisvgm/src/FileSystem.hpp index 9a45c4ac19..0c13f178e9 100644 --- a/dviware/dvisvgm/src/FileSystem.hpp +++ b/dviware/dvisvgm/src/FileSystem.hpp @@ -2,7 +2,7 @@ ** FileSystem.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -48,6 +48,9 @@ class FileSystem { static uint64_t filesize (const std::string &fname); static std::string ensureForwardSlashes (std::string path); static std::string getcwd (); +#ifdef _WIN32 + static std::string getcwd (char drive); +#endif static std::string tmpdir (); static bool chdir (const std::string &dir); static bool exists (const std::string &fname); diff --git a/dviware/dvisvgm/src/FixWord.hpp b/dviware/dvisvgm/src/FixWord.hpp index 3414e1ead4..b6166b15dc 100644 --- a/dviware/dvisvgm/src/FixWord.hpp +++ b/dviware/dvisvgm/src/FixWord.hpp @@ -2,7 +2,7 @@ ** FixWord.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Font.cpp b/dviware/dvisvgm/src/Font.cpp index 5aee699422..052d6c038f 100644 --- a/dviware/dvisvgm/src/Font.cpp +++ b/dviware/dvisvgm/src/Font.cpp @@ -2,7 +2,7 @@ ** Font.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -636,7 +636,7 @@ bool NativeFontImpl::findAndAssignBaseFontMap () { FontEngine &fe = FontEngine::instance(); fe.setFont(*this); fe.setUnicodeCharMap(); - fe.buildCharMap(_toUnicodeMap); + fe.buildGidToCharCodeMap(_toUnicodeMap); if (!_toUnicodeMap.addMissingMappings(fe.getNumGlyphs())) Message::wstream(true) << "incomplete Unicode mapping for native font " << name() << " (" << filename() << ")\n"; return true; @@ -679,3 +679,11 @@ const vector<uint8_t>* VirtualFontImpl::getDVI (int c) const { return (it == _charDefs.end() ? nullptr : &it->second); } +////////////////////////////////////////////////////////////////////////////// + +void PhysicalFont::visit (FontVisitor &visitor) {visitor.visited(this);} +void VirtualFont::visit (FontVisitor &visitor) {visitor.visited(this);} +void NativeFont::visit (FontVisitor &visitor) {visitor.visited(this);} +void PhysicalFont::visit (FontVisitor &visitor) const {visitor.visited(this);} +void VirtualFont::visit (FontVisitor &visitor) const {visitor.visited(this);} +void NativeFont::visit (FontVisitor &visitor) const {visitor.visited(this);} diff --git a/dviware/dvisvgm/src/Font.hpp b/dviware/dvisvgm/src/Font.hpp index 0a92cbeff5..f4bb58a9c6 100644 --- a/dviware/dvisvgm/src/Font.hpp +++ b/dviware/dvisvgm/src/Font.hpp @@ -2,7 +2,7 @@ ** Font.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -50,6 +50,7 @@ struct GlyphMetrics { double wl, wr, h, d; }; +class FontVisitor; /** Abstract base for all font classes. */ class Font { @@ -69,17 +70,19 @@ class Font { virtual const char* path () const =0; virtual const char* filename () const; virtual const FontEncoding* encoding () const; - virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *callback=nullptr) const =0; + virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *callback) const =0; virtual void getGlyphMetrics (int c, bool vertical, GlyphMetrics &metrics) const; virtual uint32_t unicode (uint32_t c) const; virtual void tidy () const {} virtual bool findAndAssignBaseFontMap () {return true;} - virtual bool verticalLayout () const {return getMetrics() ? getMetrics()->verticalLayout() : false;} + virtual bool verticalLayout () const {return getMetrics() != nullptr && getMetrics()->verticalLayout();} virtual bool verifyChecksums () const {return true;} virtual int fontIndex () const {return 0;} virtual const FontStyle* style () const {return nullptr;} virtual Color color () const {return Color::BLACK;} virtual const FontMap::Entry* fontMapEntry () const; + virtual void visit (FontVisitor &visitor) =0; + virtual void visit (FontVisitor &visitor) const =0; }; @@ -100,7 +103,9 @@ class EmptyFont : public Font { double italicCorr (int c) const override {return 0;} const FontMetrics* getMetrics () const override {return nullptr;} const char* path () const override {return nullptr;} - bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=nullptr) const override {return false;} + bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback*) const override {return false;} + void visit (FontVisitor &visitor) override {} + void visit (FontVisitor &visitor) const override {} private: std::string _fontname; @@ -115,9 +120,9 @@ class PhysicalFont : public virtual Font { static std::unique_ptr<Font> create (const std::string &name, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type); static std::unique_ptr<Font> create (const std::string &name, int fontindex, uint32_t checksum, double dsize, double ssize); virtual Type type () const =0; - bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=nullptr) const override; - virtual bool getExactGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb=nullptr) const; - virtual bool getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical, GFGlyphTracer::Callback *cb=nullptr) const; + bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb) const override; + virtual bool getExactGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb) const; + virtual bool getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical, GFGlyphTracer::Callback *cb) const; virtual bool isCIDFont () const; virtual int hAdvance () const; virtual std::string familyName () const; @@ -129,12 +134,14 @@ class PhysicalFont : public virtual Font { virtual double scaledAscent () const; virtual int ascent () const; virtual int descent () const; - virtual int traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb=nullptr) const; + virtual int traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb) const; virtual int collectCharMapIDs (std::vector<CharMapID> &charmapIDs) const; virtual CharMapID getCharMapID () const =0; virtual void setCharMapID (const CharMapID &id) {} virtual Character decodeChar (uint32_t c) const; const char* path () const override; + void visit (FontVisitor &visitor) override; + void visit (FontVisitor &visitor) const override; protected: bool createGF (std::string &gfname) const; @@ -159,7 +166,9 @@ class VirtualFont : public virtual Font { public: static std::unique_ptr<Font> create (const std::string &name, uint32_t checksum, double dsize, double ssize); virtual const DVIVector* getDVI (int c) const =0; - bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=nullptr) const override {return false;} + bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback*) const override {return false;} + void visit (FontVisitor &visitor) override; + void visit (FontVisitor &visitor) const override; protected: virtual void assignChar (uint32_t c, DVIVector &&dvi) =0; @@ -272,6 +281,8 @@ class NativeFont : public PhysicalFont { Color color () const override {return _color;} const FontMap::Entry* fontMapEntry () const override {return nullptr;} static std::string uniqueName (const std::string &path, const FontStyle &style); + void visit (FontVisitor &visitor) override; + void visit (FontVisitor &visitor) const override; protected: NativeFont (double ptsize, const FontStyle &style, Color color) : _ptsize(ptsize), _style(style), _color(color) {} @@ -390,6 +401,33 @@ class VirtualFontImpl : public VirtualFont, public TFMFont { }; +struct FontVisitor { + virtual ~FontVisitor () =default; + virtual void visited (const PhysicalFont *font) {} + virtual void visited (const VirtualFont *font) {} + virtual void visited (const NativeFont *font) {visited(static_cast<const PhysicalFont*>(font));} + virtual void visited (PhysicalFont *font) {} + virtual void visited (VirtualFont *font) {} + virtual void visited (NativeFont *font) {visited(static_cast<PhysicalFont*>(font));} +}; + + +/** This function works similar to dynamic_cast but only on pointers to Font classes. + * It uses double dispatch instead of RTTI and should therefore be faster. + * @param[in] font font pointer to be cast + * @return cast pointer on success, nullptr otherwise */ +template <typename C> +C font_cast (typename util::set_const_of<Font>::by<typename std::remove_pointer<C>::type>::type *font) { + struct : FontVisitor { + void visited (C font) override {result = font;} + C result = nullptr; + } visitor; + if (font) + font->visit(visitor); + return visitor.result; +} + + struct FontException : public MessageException { explicit FontException (const std::string &msg) : MessageException(msg) {} }; diff --git a/dviware/dvisvgm/src/FontCache.cpp b/dviware/dvisvgm/src/FontCache.cpp index 1fd13c9c11..2e741fb82c 100644 --- a/dviware/dvisvgm/src/FontCache.cpp +++ b/dviware/dvisvgm/src/FontCache.cpp @@ -2,7 +2,7 @@ ** FontCache.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -281,9 +281,9 @@ bool FontCache::fontinfo (const string &dirname, vector<FontInfo> &infos, vector string path = dirname+"/"+(fname.substr(1)); ifstream ifs(path, ios::binary); if (fontinfo(ifs, info)) - infos.emplace_back(move(info)); + infos.push_back(move(info)); else - invalid.emplace_back(fname.substr(1)); + invalid.push_back(fname.substr(1)); } } } diff --git a/dviware/dvisvgm/src/FontCache.hpp b/dviware/dvisvgm/src/FontCache.hpp index 8a6025a3d2..e7bbf36126 100644 --- a/dviware/dvisvgm/src/FontCache.hpp +++ b/dviware/dvisvgm/src/FontCache.hpp @@ -2,7 +2,7 @@ ** FontCache.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontEncoding.cpp b/dviware/dvisvgm/src/FontEncoding.cpp index f1e1e38383..afc221063e 100644 --- a/dviware/dvisvgm/src/FontEncoding.cpp +++ b/dviware/dvisvgm/src/FontEncoding.cpp @@ -2,7 +2,7 @@ ** FontEncoding.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontEncoding.hpp b/dviware/dvisvgm/src/FontEncoding.hpp index a50d97eabf..141f4486fe 100644 --- a/dviware/dvisvgm/src/FontEncoding.hpp +++ b/dviware/dvisvgm/src/FontEncoding.hpp @@ -2,7 +2,7 @@ ** FontEncoding.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontEngine.cpp b/dviware/dvisvgm/src/FontEngine.cpp index bee1ca886d..4a9e9dd955 100644 --- a/dviware/dvisvgm/src/FontEngine.cpp +++ b/dviware/dvisvgm/src/FontEngine.cpp @@ -2,7 +2,7 @@ ** FontEngine.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -103,7 +103,7 @@ bool FontEngine::setFont (const Font &font) { return true; if (const char *path=font.path()) { - auto pf = dynamic_cast<const PhysicalFont*>(&font); + auto pf = font_cast<const PhysicalFont*>(&font); if (setFont(path, font.fontIndex(), pf ? pf->getCharMapID() : CharMapID())) { _currentFont = &font; return true; @@ -131,37 +131,38 @@ bool FontEngine::setCharMap (const CharMapID &charMapID) { } -/** Returns a character map that maps from character indexes to character codes +/** Returns a character map that maps from glyph indexes to character codes * of the current encoding. * @param[out] charmap the resulting charmap */ -void FontEngine::buildCharMap (RangeMap &charmap) { +void FontEngine::buildGidToCharCodeMap (RangeMap &charmap) { charmap.clear(); - FT_UInt glyph_index; - uint32_t charcode = FT_Get_First_Char(_currentFace, &glyph_index); - while (glyph_index) { - charmap.addRange(glyph_index, glyph_index, charcode); - charcode = FT_Get_Next_Char(_currentFace, charcode, &glyph_index); + FT_UInt gid; // index of current glyph + uint32_t charcode = FT_Get_First_Char(_currentFace, &gid); + while (gid) { + if (!charmap.valueAt(gid)) + charmap.addRange(gid, gid, charcode); + charcode = FT_Get_Next_Char(_currentFace, charcode, &gid); } } -/** Creates a charmap that maps from the custom character encoding to unicode. +/** Creates a charmap that maps from the custom character encoding to Unicode. * @return pointer to charmap if it could be created, 0 otherwise */ unique_ptr<const RangeMap> FontEngine::createCustomToUnicodeMap () { FT_CharMap ftcharmap = _currentFace->charmap; if (FT_Select_Charmap(_currentFace, FT_ENCODING_ADOBE_CUSTOM) != 0) return nullptr; - RangeMap index_to_source_chrcode; - buildCharMap(index_to_source_chrcode); + RangeMap gidToCharCodeMap; + buildGidToCharCodeMap(gidToCharCodeMap); if (FT_Select_Charmap(_currentFace, FT_ENCODING_UNICODE) != 0) return nullptr; auto charmap = util::make_unique<RangeMap>(); - FT_UInt glyph_index; - uint32_t unicode_point = FT_Get_First_Char(_currentFace, &glyph_index); - while (glyph_index) { - uint32_t custom_charcode = index_to_source_chrcode.valueAt(glyph_index); - charmap->addRange(custom_charcode, custom_charcode, unicode_point); - unicode_point = FT_Get_Next_Char(_currentFace, unicode_point, &glyph_index); + FT_UInt gid; // index of current glyph + uint32_t ucCharcode = FT_Get_First_Char(_currentFace, &gid); // Unicode code point + while (gid) { + uint32_t customCharcode = gidToCharCodeMap.valueAt(gid); + charmap->addRange(customCharcode, customCharcode, ucCharcode); + ucCharcode = FT_Get_Next_Char(_currentFace, ucCharcode, &gid); } FT_Set_Charmap(_currentFace, ftcharmap); return std::move(charmap); @@ -307,7 +308,7 @@ int FontEngine::getCharMapIDs (vector<CharMapID> &charmapIDs) const { if (_currentFace) { for (int i=0; i < _currentFace->num_charmaps; i++) { FT_CharMap charmap = _currentFace->charmaps[i]; - charmapIDs.emplace_back(CharMapID(charmap->platform_id, charmap->encoding_id)); + charmapIDs.emplace_back(charmap->platform_id, charmap->encoding_id); } } return charmapIDs.size(); diff --git a/dviware/dvisvgm/src/FontEngine.hpp b/dviware/dvisvgm/src/FontEngine.hpp index 5796c2b1b3..45d9c6d3b6 100644 --- a/dviware/dvisvgm/src/FontEngine.hpp +++ b/dviware/dvisvgm/src/FontEngine.hpp @@ -2,7 +2,7 @@ ** FontEngine.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -64,7 +64,7 @@ class FontEngine { std::string getGlyphName (const Character &c) const; int getCharByGlyphName (const char *name) const; bool setCharMap (const CharMapID &charMapID); - void buildCharMap (RangeMap &charmap); + void buildGidToCharCodeMap (RangeMap &charmap); std::unique_ptr<const RangeMap> createCustomToUnicodeMap (); protected: diff --git a/dviware/dvisvgm/src/FontManager.cpp b/dviware/dvisvgm/src/FontManager.cpp index 929e9f823b..a41b8563b8 100644 --- a/dviware/dvisvgm/src/FontManager.cpp +++ b/dviware/dvisvgm/src/FontManager.cpp @@ -2,7 +2,7 @@ ** FontManager.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -221,16 +221,14 @@ int FontManager::registerFont (uint32_t fontnum, const string &name, uint32_t ch } _name2id[name] = newid; } - _fonts.emplace_back(std::move(newfont)); + _fonts.push_back(std::move(newfont)); if (_vfStack.empty()) // register font referenced in dvi file? _num2id[fontnum] = newid; else { // register font referenced in vf file const VirtualFont *vf = _vfStack.top(); _vfnum2id[vf][fontnum] = newid; - if (_vfFirstFontNumMap.find(vf) == _vfFirstFontNumMap.end()) { // first fontdef of VF? - _vfFirstFontNumMap.emplace(vf, fontnum); - _vfFirstFontMap.emplace(vf, _fonts.back().get()); - } + _vfFirstFontNumMap.emplace(vf, fontnum); + _vfFirstFontMap.emplace(vf, _fonts.back().get()); } return newid; } @@ -269,7 +267,7 @@ int FontManager::registerFont (uint32_t fontnum, string filename, int fontIndex, const int newid = _fonts.size(); // the new font gets this ID auto it = _name2id.find(fontname); if (it != _name2id.end()) { // font with same name already registered? - if (auto font = dynamic_cast<NativeFont*>(_fonts[it->second].get())) + if (auto font = font_cast<NativeFont*>(_fonts[it->second].get())) newfont = font->clone(ptsize, style, color); } else { @@ -291,7 +289,7 @@ int FontManager::registerFont (uint32_t fontnum, string filename, int fontIndex, } _name2id[fontname] = newid; } - _fonts.emplace_back(std::move(newfont)); + _fonts.push_back(std::move(newfont)); _num2id[fontnum] = newid; return newid; } @@ -330,7 +328,7 @@ ostream& FontManager::write (ostream &os, Font *font, int level) { if (_fonts[i] == font) id = i; - VirtualFont *vf = dynamic_cast<VirtualFont*>(font); + VirtualFont *vf = font_cast<VirtualFont*>(font); for (int j=0; j < level+1; j++) os << " "; os << "id " << id diff --git a/dviware/dvisvgm/src/FontManager.hpp b/dviware/dvisvgm/src/FontManager.hpp index 321e167b11..413b649169 100644 --- a/dviware/dvisvgm/src/FontManager.hpp +++ b/dviware/dvisvgm/src/FontManager.hpp @@ -2,7 +2,7 @@ ** FontManager.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontMap.cpp b/dviware/dvisvgm/src/FontMap.cpp index 6be5fe6690..a16d38aa2f 100644 --- a/dviware/dvisvgm/src/FontMap.cpp +++ b/dviware/dvisvgm/src/FontMap.cpp @@ -2,7 +2,7 @@ ** FontMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontMap.hpp b/dviware/dvisvgm/src/FontMap.hpp index f4824aa7f1..8ed6519922 100644 --- a/dviware/dvisvgm/src/FontMap.hpp +++ b/dviware/dvisvgm/src/FontMap.hpp @@ -2,7 +2,7 @@ ** FontMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontMetrics.cpp b/dviware/dvisvgm/src/FontMetrics.cpp index 7d858fea90..b2cba24818 100644 --- a/dviware/dvisvgm/src/FontMetrics.cpp +++ b/dviware/dvisvgm/src/FontMetrics.cpp @@ -2,7 +2,7 @@ ** FontMetrics.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontMetrics.hpp b/dviware/dvisvgm/src/FontMetrics.hpp index 66637e3044..20a2d46be0 100644 --- a/dviware/dvisvgm/src/FontMetrics.hpp +++ b/dviware/dvisvgm/src/FontMetrics.hpp @@ -2,7 +2,7 @@ ** FontMetrics.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -43,6 +43,7 @@ struct FontMetrics { virtual uint32_t getChecksum () const =0; virtual uint16_t firstChar () const =0; virtual uint16_t lastChar () const =0; + virtual bool isJFM () const {return false;} static std::unique_ptr<FontMetrics> read (const std::string &fontname); }; diff --git a/dviware/dvisvgm/src/FontStyle.hpp b/dviware/dvisvgm/src/FontStyle.hpp index 79a03dac36..094ba2da1f 100644 --- a/dviware/dvisvgm/src/FontStyle.hpp +++ b/dviware/dvisvgm/src/FontStyle.hpp @@ -2,7 +2,7 @@ ** FontStyle.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/FontWriter.cpp b/dviware/dvisvgm/src/FontWriter.cpp index 4dd4c5c0d8..ccd4d037f5 100644 --- a/dviware/dvisvgm/src/FontWriter.cpp +++ b/dviware/dvisvgm/src/FontWriter.cpp @@ -2,7 +2,7 @@ ** FontWriter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -59,7 +59,7 @@ const FontWriter::FontFormatInfo* FontWriter::fontFormatInfo (FontFormat format) vector<string> FontWriter::supportedFormats () { vector<string> formats; for (const FontFormatInfo &info : _formatInfos) - formats.emplace_back(info.formatstr_short); + formats.push_back(info.formatstr_short); return formats; } diff --git a/dviware/dvisvgm/src/FontWriter.hpp b/dviware/dvisvgm/src/FontWriter.hpp index e6cad37e88..1fa5dab4db 100644 --- a/dviware/dvisvgm/src/FontWriter.hpp +++ b/dviware/dvisvgm/src/FontWriter.hpp @@ -2,7 +2,7 @@ ** FontWriter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/GFGlyphTracer.cpp b/dviware/dvisvgm/src/GFGlyphTracer.cpp index db77ae1dc8..8c346b0464 100644 --- a/dviware/dvisvgm/src/GFGlyphTracer.cpp +++ b/dviware/dvisvgm/src/GFGlyphTracer.cpp @@ -2,7 +2,7 @@ ** GFGlyphTracer.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,7 +25,7 @@ using namespace std; /** Constructs a new glyph tracer. * @param[in] is GF input stream * @param[in] upp target units per PS point */ -GFGlyphTracer::GFGlyphTracer (string &fname, double upp, Callback *cb) +GFGlyphTracer::GFGlyphTracer (const string &fname, double upp, Callback *cb) : GFTracer(_ifs, upp), _callback(cb) { if (_callback) @@ -34,7 +34,7 @@ GFGlyphTracer::GFGlyphTracer (string &fname, double upp, Callback *cb) } -void GFGlyphTracer::reset (string &fname, double upp) { +void GFGlyphTracer::reset (const string &fname, double upp) { if (_callback) _callback->setFont(fname); if (_ifs.is_open()) diff --git a/dviware/dvisvgm/src/GFGlyphTracer.hpp b/dviware/dvisvgm/src/GFGlyphTracer.hpp index d0d45ffd61..21ff3178fc 100644 --- a/dviware/dvisvgm/src/GFGlyphTracer.hpp +++ b/dviware/dvisvgm/src/GFGlyphTracer.hpp @@ -2,7 +2,7 @@ ** GFGlyphTracer.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -38,8 +38,8 @@ class GFGlyphTracer : public GFTracer { public: GFGlyphTracer () : GFTracer(_ifs, 0) {} - GFGlyphTracer (std::string &fname, double upp, Callback *cb=nullptr); - void reset (std::string &fname, double upp); + GFGlyphTracer (const std::string &fname, double upp, Callback *cb=nullptr); + void reset (const std::string &fname, double upp); void setCallback (Callback *cb) {_callback = cb;} bool executeChar (uint8_t c) override; void moveTo (double x, double y) override; diff --git a/dviware/dvisvgm/src/GFReader.cpp b/dviware/dvisvgm/src/GFReader.cpp index 4712de41d3..fba6e665de 100644 --- a/dviware/dvisvgm/src/GFReader.cpp +++ b/dviware/dvisvgm/src/GFReader.cpp @@ -2,7 +2,7 @@ ** GFReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -92,7 +92,7 @@ int GFReader::executeCommand () { if (opcode < 0) // at end of file? throw GFException("unexpected end of file"); - if (opcode >= 0 && opcode <= 63) + if (opcode <= 63) cmdPaint0(opcode); else if (opcode >= 74 && opcode <= 238) cmdNewRow(opcode-74); diff --git a/dviware/dvisvgm/src/GFReader.hpp b/dviware/dvisvgm/src/GFReader.hpp index e829bf8ffa..401f89babb 100644 --- a/dviware/dvisvgm/src/GFReader.hpp +++ b/dviware/dvisvgm/src/GFReader.hpp @@ -2,7 +2,7 @@ ** GFReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/GFTracer.cpp b/dviware/dvisvgm/src/GFTracer.cpp index 4a3fa5e776..408fb49d0b 100644 --- a/dviware/dvisvgm/src/GFTracer.cpp +++ b/dviware/dvisvgm/src/GFTracer.cpp @@ -2,7 +2,7 @@ ** GFTracer.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/GFTracer.hpp b/dviware/dvisvgm/src/GFTracer.hpp index e72848896d..f52ffd6cc8 100644 --- a/dviware/dvisvgm/src/GFTracer.hpp +++ b/dviware/dvisvgm/src/GFTracer.hpp @@ -2,7 +2,7 @@ ** GFTracer.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Ghostscript.cpp b/dviware/dvisvgm/src/Ghostscript.cpp index 11ea79fc1a..96b06b1b68 100644 --- a/dviware/dvisvgm/src/Ghostscript.cpp +++ b/dviware/dvisvgm/src/Ghostscript.cpp @@ -2,7 +2,7 @@ ** Ghostscript.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -215,7 +215,7 @@ bool Ghostscript::available () { /** 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) { +bool Ghostscript::revision (gsapi_revision_t *r) const { #if defined(HAVE_LIBGS) return (gsapi_revision(r, sizeof(gsapi_revision_t)) == 0); #else @@ -227,7 +227,7 @@ bool Ghostscript::revision (gsapi_revision_t *r) { /** Returns the revision number of the GS library. */ -int Ghostscript::revision () { +int Ghostscript::revision () const { gsapi_revision_t r; if (revision(&r)) return static_cast<int>(r.revision); diff --git a/dviware/dvisvgm/src/Ghostscript.hpp b/dviware/dvisvgm/src/Ghostscript.hpp index 8c9a429798..88bebf01ea 100644 --- a/dviware/dvisvgm/src/Ghostscript.hpp +++ b/dviware/dvisvgm/src/Ghostscript.hpp @@ -2,7 +2,7 @@ ** Ghostscript.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -78,8 +78,8 @@ class Ghostscript ~Ghostscript (); bool init (int argc, const char **argv, void *caller=nullptr); bool available (); - bool revision (gsapi_revision_t *r); - int revision (); + bool revision (gsapi_revision_t *r) const; + int revision () const; std::string revisionstr (); int set_stdio (Stdin in, Stdout out, Stderr err); int run_string_begin (int user_errors, int *pexit_code); diff --git a/dviware/dvisvgm/src/Glyph.hpp b/dviware/dvisvgm/src/Glyph.hpp index dfa8cb366a..37de9bd58c 100644 --- a/dviware/dvisvgm/src/Glyph.hpp +++ b/dviware/dvisvgm/src/Glyph.hpp @@ -2,7 +2,7 @@ ** Glyph.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/GlyphTracerMessages.hpp b/dviware/dvisvgm/src/GlyphTracerMessages.hpp index f291d05ccc..32f4f08955 100644 --- a/dviware/dvisvgm/src/GlyphTracerMessages.hpp +++ b/dviware/dvisvgm/src/GlyphTracerMessages.hpp @@ -2,7 +2,7 @@ ** GlyphTracerMessages.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/GraphicsPath.hpp b/dviware/dvisvgm/src/GraphicsPath.hpp index 64c112ad0b..a0c9f8ab8f 100644 --- a/dviware/dvisvgm/src/GraphicsPath.hpp +++ b/dviware/dvisvgm/src/GraphicsPath.hpp @@ -2,7 +2,7 @@ ** GraphicsPath.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -20,6 +20,7 @@ #pragma once +#include <algorithm> #include <array> #include <cctype> #include <cmath> @@ -662,24 +663,14 @@ class GraphicsPath { bool operator == (const GraphicsPath &path) const { if (size() != path.size()) return false; - auto it = _commands.begin(); - for (const auto &cmd : path._commands) { - if (*it++ != cmd) - return false; - } - return true; + return std::equal(_commands.begin(), _commands.end(), path._commands.begin()); } /** Returns true if this path differs from another one (command-wise). */ bool operator != (const GraphicsPath &path) const { if (size() != path.size()) return true; - auto it = _commands.begin(); - for (const auto &cmd : path._commands) { - if (*it++ != cmd) - return true; - } - return false; + return !std::equal(_commands.begin(), _commands.end(), path._commands.begin()); } /** Iterates over all commands defining this path and calls the corresponding template methods. diff --git a/dviware/dvisvgm/src/HashFunction.cpp b/dviware/dvisvgm/src/HashFunction.cpp index 16661fb3d6..bada148b6c 100644 --- a/dviware/dvisvgm/src/HashFunction.cpp +++ b/dviware/dvisvgm/src/HashFunction.cpp @@ -2,7 +2,7 @@ ** HashFunction.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/HashFunction.hpp b/dviware/dvisvgm/src/HashFunction.hpp index e31040075e..5efbdf8468 100644 --- a/dviware/dvisvgm/src/HashFunction.hpp +++ b/dviware/dvisvgm/src/HashFunction.hpp @@ -2,7 +2,7 @@ ** HashFunction.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/HtmlSpecialHandler.cpp b/dviware/dvisvgm/src/HtmlSpecialHandler.cpp index 01051f9d64..dca8111405 100644 --- a/dviware/dvisvgm/src/HtmlSpecialHandler.cpp +++ b/dviware/dvisvgm/src/HtmlSpecialHandler.cpp @@ -2,7 +2,7 @@ ** HtmlSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/HtmlSpecialHandler.hpp b/dviware/dvisvgm/src/HtmlSpecialHandler.hpp index e09a6d7b51..2122ed749d 100644 --- a/dviware/dvisvgm/src/HtmlSpecialHandler.hpp +++ b/dviware/dvisvgm/src/HtmlSpecialHandler.hpp @@ -2,7 +2,7 @@ ** HtmlSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/HyperlinkManager.cpp b/dviware/dvisvgm/src/HyperlinkManager.cpp index ef636c5aac..f991e13145 100644 --- a/dviware/dvisvgm/src/HyperlinkManager.cpp +++ b/dviware/dvisvgm/src/HyperlinkManager.cpp @@ -2,7 +2,7 @@ ** HyperlinkManager.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -106,7 +106,7 @@ void HyperlinkManager::createLink (string uri, SpecialActions &actions) { uri = "/" + uri; uri = _base + uri; } - auto anchorNode = util::make_unique<XMLElement>("a"); + auto anchorNode = util::make_unique<SVGElement>("a"); anchorNode->addAttribute("xlink:href", uri); anchorNode->addAttribute("xlink:title", XMLString(name.empty() ? uri : name, false)); actions.svgTree().pushPageContext(std::move(anchorNode)); @@ -148,14 +148,14 @@ void HyperlinkManager::markLinkedBox (SpecialActions &actions) { if (bbox.width() > 0 && bbox.height() > 0) { // does the bounding box extend in both dimensions? if (MARKER_TYPE != MarkerType::NONE) { const double linewidth = _linewidth >= 0 ? _linewidth : min(0.5, bbox.height()/15); - auto rect = util::make_unique<XMLElement>("rect"); + auto rect = util::make_unique<SVGElement>("rect"); double x = bbox.minX(); double y = bbox.maxY()+linewidth; double w = bbox.width(); double h = linewidth; const Color linecolor = COLORSOURCE == ColorSource::DEFAULT ? actions.getColor() : LINK_LINECOLOR; if (MARKER_TYPE == MarkerType::LINE) - rect->addAttribute("fill", linecolor.svgColorString()); + rect->setFillColor(linecolor); else { const double offset = _linewidth < 0 ? linewidth : 0 ; x -= offset; @@ -163,16 +163,16 @@ void HyperlinkManager::markLinkedBox (SpecialActions &actions) { w += 2*offset; h += bbox.height()+offset; if (MARKER_TYPE == MarkerType::BGCOLOR) { - rect->addAttribute("fill", LINK_BGCOLOR.svgColorString()); + rect->setFillColor(LINK_BGCOLOR); if (COLORSOURCE != ColorSource::DEFAULT) { - rect->addAttribute("stroke", linecolor.svgColorString()); - rect->addAttribute("stroke-width", linewidth); + rect->setStrokeColor(linecolor); + rect->setStrokeWidth(linewidth); } } else { // LM_BOX - rect->addAttribute("fill", "none"); - rect->addAttribute("stroke", linecolor.svgColorString()); - rect->addAttribute("stroke-width", linewidth); + rect->setNoFillColor(); + rect->setStrokeColor(linecolor); + rect->setStrokeWidth(linewidth); } } rect->addAttribute("x", x); @@ -192,13 +192,13 @@ void HyperlinkManager::markLinkedBox (SpecialActions &actions) { // Create an invisible rectangle around the linked area so that it's easier to access. // This is only necessary when using paths rather than real text elements together with fonts. if (!SVGTree::USE_FONTS) { - auto rect = util::make_unique<XMLElement>("rect"); + auto rect = util::make_unique<SVGElement>("rect"); rect->addAttribute("x", bbox.minX()); rect->addAttribute("y", bbox.minY()); rect->addAttribute("width", bbox.width()); rect->addAttribute("height", bbox.height()); - rect->addAttribute("fill", "white"); - rect->addAttribute("fill-opacity", 0); + rect->setFillColor(Color::WHITE); + rect->setFillOpacity(OpacityAlpha(0, 0)); actions.svgTree().appendToPage(std::move(rect)); } } diff --git a/dviware/dvisvgm/src/HyperlinkManager.hpp b/dviware/dvisvgm/src/HyperlinkManager.hpp index ca8d4fd0ef..9dfbb02532 100644 --- a/dviware/dvisvgm/src/HyperlinkManager.hpp +++ b/dviware/dvisvgm/src/HyperlinkManager.hpp @@ -2,7 +2,7 @@ ** HyperlinkManager.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -52,7 +52,7 @@ class HyperlinkManager { void checkNewLine (SpecialActions &actions); void createLink (std::string uri, SpecialActions &actions); void createViews (unsigned pageno, SpecialActions &actions); - void setBaseUrl (std::string &base) {_base = base;} + void setBaseUrl (const std::string &base) {_base = base;} void setLineWidth (double w) {_linewidth = w;} static HyperlinkManager& instance (); static bool setLinkMarker (const std::string &marker); diff --git a/dviware/dvisvgm/src/ImageToSVG.cpp b/dviware/dvisvgm/src/ImageToSVG.cpp index dfb7943a06..6c52a0b826 100644 --- a/dviware/dvisvgm/src/ImageToSVG.cpp +++ b/dviware/dvisvgm/src/ImageToSVG.cpp @@ -2,7 +2,7 @@ ** ImageToSVG.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ImageToSVG.hpp b/dviware/dvisvgm/src/ImageToSVG.hpp index 92a860949c..04d86751eb 100644 --- a/dviware/dvisvgm/src/ImageToSVG.hpp +++ b/dviware/dvisvgm/src/ImageToSVG.hpp @@ -2,7 +2,7 @@ ** ImageToSVG.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -57,9 +57,11 @@ class ImageToSVG : protected SpecialActions { void setY (double y) override {_y = y; _svg.setY(y);} void finishLine () override {} void setColor (const Color &color) override {_svg.setColor(color);} + void setOpacity (const Opacity &opacity) override {_svg.setOpacity(opacity);} Color getColor () const override {return _svg.getColor();} void setMatrix (const Matrix &m) override {_svg.setMatrix(m);} const Matrix& getMatrix () const override {return _svg.getMatrix();} + const Opacity& getOpacity () const override {return _svg.getOpacity();} const SVGTree& svgTree () const override {return _svg;} void setBgColor (const Color &color) override {} void embed (const BoundingBox &bbox) override {_bbox.embed(bbox);} diff --git a/dviware/dvisvgm/src/InputBuffer.cpp b/dviware/dvisvgm/src/InputBuffer.cpp index b6e85f27e1..6ee562da7d 100644 --- a/dviware/dvisvgm/src/InputBuffer.cpp +++ b/dviware/dvisvgm/src/InputBuffer.cpp @@ -2,7 +2,7 @@ ** InputBuffer.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/InputBuffer.hpp b/dviware/dvisvgm/src/InputBuffer.hpp index 1474ce0a52..a59cdc31c9 100644 --- a/dviware/dvisvgm/src/InputBuffer.hpp +++ b/dviware/dvisvgm/src/InputBuffer.hpp @@ -2,7 +2,7 @@ ** InputBuffer.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -40,12 +40,14 @@ struct InputBuffer { class StreamInputBuffer : public InputBuffer { public: explicit StreamInputBuffer (std::istream &is, size_t bufsize=1024); + StreamInputBuffer (const StreamInputBuffer &ib) =delete; ~StreamInputBuffer () override; int get () override; int peek () const override; int peek (size_t n) const override; bool eof () const override {return pos() == _size1 && _size2 == 0;} void invalidate () override {_bufptr = _buf1+_size1; _size2 = 0;} + void operator = (const StreamInputBuffer &ib) =delete; protected: int fillBuffer (uint8_t *buf); @@ -65,6 +67,7 @@ class StreamInputBuffer : public InputBuffer { class StringInputBuffer : public InputBuffer { public: explicit StringInputBuffer (const std::string &str) : _str(&str) {} + StringInputBuffer (const StreamInputBuffer &ib) =delete; void assign (const std::string &str) {_str = &str; _pos=0;} int get () override {return _pos < _str->length() ? _str->at(_pos++) : -1;} int peek () const override {return _pos < _str->length() ? _str->at(_pos) : -1;} @@ -81,6 +84,7 @@ class StringInputBuffer : public InputBuffer { class CharInputBuffer : public InputBuffer { public: CharInputBuffer (const char *buf, size_t size) : _pos(buf), _size(buf ? size : 0) {} + CharInputBuffer (const CharInputBuffer &ib) =delete; int get () override { if (_size == 0) @@ -112,6 +116,7 @@ class CharInputBuffer : public InputBuffer { class SplittedCharInputBuffer : public InputBuffer { public: SplittedCharInputBuffer (const char *buf1, size_t s1, const char *buf2, size_t s2); + SplittedCharInputBuffer (const SplittedCharInputBuffer &ib) =delete; int get () override; int peek () const override; int peek (size_t n) const override; diff --git a/dviware/dvisvgm/src/InputReader.cpp b/dviware/dvisvgm/src/InputReader.cpp index 074c184822..6b5a7b70f0 100644 --- a/dviware/dvisvgm/src/InputReader.cpp +++ b/dviware/dvisvgm/src/InputReader.cpp @@ -2,7 +2,7 @@ ** InputReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/InputReader.hpp b/dviware/dvisvgm/src/InputReader.hpp index 9825156c09..d9b697963b 100644 --- a/dviware/dvisvgm/src/InputReader.hpp +++ b/dviware/dvisvgm/src/InputReader.hpp @@ -2,7 +2,7 @@ ** InputReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/JFM.cpp b/dviware/dvisvgm/src/JFM.cpp index 7c749fd34e..d0dd13c9b9 100644 --- a/dviware/dvisvgm/src/JFM.cpp +++ b/dviware/dvisvgm/src/JFM.cpp @@ -2,7 +2,7 @@ ** JFM.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/JFM.hpp b/dviware/dvisvgm/src/JFM.hpp index 8d4a1daf21..29da9d53c3 100644 --- a/dviware/dvisvgm/src/JFM.hpp +++ b/dviware/dvisvgm/src/JFM.hpp @@ -2,7 +2,7 @@ ** JFM.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -29,6 +29,7 @@ class JFM : public TFM { public: explicit JFM (std::istream &is); bool verticalLayout () const override {return _vertical;} + bool isJFM () const override {return true;} uint32_t minChar () const {return _minchar;} uint32_t maxChar () const {return static_cast<uint32_t>(_minchar+_charTypeTable.size()-1);} diff --git a/dviware/dvisvgm/src/Length.cpp b/dviware/dvisvgm/src/Length.cpp index d20af5056c..d4992c77ef 100644 --- a/dviware/dvisvgm/src/Length.cpp +++ b/dviware/dvisvgm/src/Length.cpp @@ -2,7 +2,7 @@ ** Length.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Length.hpp b/dviware/dvisvgm/src/Length.hpp index 1b0d35d35f..f03711ecd2 100644 --- a/dviware/dvisvgm/src/Length.hpp +++ b/dviware/dvisvgm/src/Length.hpp @@ -2,7 +2,7 @@ ** Length.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/MD5HashFunction.hpp b/dviware/dvisvgm/src/MD5HashFunction.hpp index 27539576ed..e34db10602 100644 --- a/dviware/dvisvgm/src/MD5HashFunction.hpp +++ b/dviware/dvisvgm/src/MD5HashFunction.hpp @@ -2,7 +2,7 @@ ** MD5HashFunction.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Makefile.am b/dviware/dvisvgm/src/Makefile.am index e7c7c27522..3163e892a8 100644 --- a/dviware/dvisvgm/src/Makefile.am +++ b/dviware/dvisvgm/src/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. @@ -104,6 +104,7 @@ libdvisvgm_la_SOURCES = \ MetafontWrapper.hpp MetafontWrapper.cpp \ NoPsSpecialHandler.hpp NoPsSpecialHandler.cpp \ NumericRanges.hpp \ + Opacity.hpp Opacity.cpp \ PageRanges.hpp PageRanges.cpp \ PageSize.hpp PageSize.cpp \ Pair.hpp \ @@ -134,6 +135,7 @@ libdvisvgm_la_SOURCES = \ SVGCharHandlerFactory.hpp SVGCharHandlerFactory.cpp \ SVGCharPathHandler.hpp SVGCharPathHandler.cpp \ SVGCharTspanTextHandler.hpp SVGCharTspanTextHandler.cpp \ + SVGElement.hpp SVGElement.cpp \ SVGOutput.hpp SVGOutput.cpp \ SVGSingleCharTextHandler.hpp SVGSingleCharTextHandler.cpp \ SVGTree.hpp SVGTree.cpp \ diff --git a/dviware/dvisvgm/src/Makefile.in b/dviware/dvisvgm/src/Makefile.in index b327bda7ac..0ef19f52c2 100644 --- a/dviware/dvisvgm/src/Makefile.in +++ b/dviware/dvisvgm/src/Makefile.in @@ -163,29 +163,30 @@ am__libdvisvgm_la_SOURCES_DIST = AGLTable.hpp BasicDVIReader.hpp \ MD5HashFunction.hpp Message.hpp Message.cpp \ MessageException.hpp MetafontWrapper.hpp MetafontWrapper.cpp \ NoPsSpecialHandler.hpp NoPsSpecialHandler.cpp \ - NumericRanges.hpp PageRanges.hpp PageRanges.cpp PageSize.hpp \ - PageSize.cpp Pair.hpp PapersizeSpecialHandler.hpp \ - PapersizeSpecialHandler.cpp PathClipper.hpp PathClipper.cpp \ - PDFParser.hpp PDFParser.cpp PdfSpecialHandler.hpp \ - PdfSpecialHandler.cpp PDFToSVG.hpp PreScanDVIReader.hpp \ - PreScanDVIReader.cpp Process.hpp Process.cpp psdefs.cpp \ - PSFilter.hpp PSInterpreter.hpp PSInterpreter.cpp PSPattern.hpp \ - PSPattern.cpp PSPreviewFilter.hpp PSPreviewFilter.cpp \ - PsSpecialHandler.hpp PsSpecialHandler.cpp RangeMap.hpp \ - RangeMap.cpp ShadingPatch.hpp ShadingPatch.cpp \ - SignalHandler.hpp SignalHandler.cpp SourceInput.hpp \ - SourceInput.cpp SpecialActions.hpp SpecialHandler.hpp \ - SpecialManager.hpp SpecialManager.cpp StreamReader.hpp \ - StreamReader.cpp StreamWriter.hpp StreamWriter.cpp Subfont.hpp \ - Subfont.cpp SVGCharHandler.hpp SVGCharHandler.cpp \ + NumericRanges.hpp Opacity.hpp Opacity.cpp PageRanges.hpp \ + PageRanges.cpp PageSize.hpp PageSize.cpp Pair.hpp \ + PapersizeSpecialHandler.hpp PapersizeSpecialHandler.cpp \ + PathClipper.hpp PathClipper.cpp PDFParser.hpp PDFParser.cpp \ + PdfSpecialHandler.hpp PdfSpecialHandler.cpp PDFToSVG.hpp \ + PreScanDVIReader.hpp PreScanDVIReader.cpp Process.hpp \ + Process.cpp psdefs.cpp PSFilter.hpp PSInterpreter.hpp \ + PSInterpreter.cpp PSPattern.hpp PSPattern.cpp \ + PSPreviewFilter.hpp PSPreviewFilter.cpp PsSpecialHandler.hpp \ + PsSpecialHandler.cpp RangeMap.hpp RangeMap.cpp \ + ShadingPatch.hpp ShadingPatch.cpp SignalHandler.hpp \ + SignalHandler.cpp SourceInput.hpp SourceInput.cpp \ + SpecialActions.hpp SpecialHandler.hpp SpecialManager.hpp \ + SpecialManager.cpp StreamReader.hpp StreamReader.cpp \ + StreamWriter.hpp StreamWriter.cpp Subfont.hpp Subfont.cpp \ + SVGCharHandler.hpp SVGCharHandler.cpp \ SVGCharHandlerFactory.hpp SVGCharHandlerFactory.cpp \ SVGCharPathHandler.hpp SVGCharPathHandler.cpp \ SVGCharTspanTextHandler.hpp SVGCharTspanTextHandler.cpp \ - SVGOutput.hpp SVGOutput.cpp SVGSingleCharTextHandler.hpp \ - SVGSingleCharTextHandler.cpp SVGTree.hpp SVGTree.cpp \ - System.hpp System.cpp TensorProductPatch.hpp \ - TensorProductPatch.cpp Terminal.hpp Terminal.cpp TFM.hpp \ - TFM.cpp ToUnicodeMap.hpp ToUnicodeMap.cpp \ + SVGElement.hpp SVGElement.cpp SVGOutput.hpp SVGOutput.cpp \ + SVGSingleCharTextHandler.hpp SVGSingleCharTextHandler.cpp \ + SVGTree.hpp SVGTree.cpp System.hpp System.cpp \ + TensorProductPatch.hpp TensorProductPatch.cpp Terminal.hpp \ + Terminal.cpp TFM.hpp TFM.cpp ToUnicodeMap.hpp ToUnicodeMap.cpp \ TpicSpecialHandler.hpp TpicSpecialHandler.cpp \ TriangularPatch.hpp TriangularPatch.cpp TrueTypeFont.hpp \ TrueTypeFont.cpp TTFAutohint.hpp TTFAutohint.cpp Unicode.hpp \ @@ -208,7 +209,7 @@ am_libdvisvgm_la_OBJECTS = BasicDVIReader.lo Bezier.lo \ Ghostscript.lo HashFunction.lo HtmlSpecialHandler.lo \ HyperlinkManager.lo ImageToSVG.lo InputBuffer.lo \ InputReader.lo JFM.lo Length.lo MapLine.lo Matrix.lo \ - Message.lo MetafontWrapper.lo NoPsSpecialHandler.lo \ + Message.lo MetafontWrapper.lo NoPsSpecialHandler.lo Opacity.lo \ PageRanges.lo PageSize.lo PapersizeSpecialHandler.lo \ PathClipper.lo PDFParser.lo PdfSpecialHandler.lo \ PreScanDVIReader.lo Process.lo psdefs.lo PSInterpreter.lo \ @@ -216,8 +217,8 @@ am_libdvisvgm_la_OBJECTS = BasicDVIReader.lo Bezier.lo \ RangeMap.lo ShadingPatch.lo SignalHandler.lo SourceInput.lo \ SpecialManager.lo StreamReader.lo StreamWriter.lo Subfont.lo \ SVGCharHandler.lo SVGCharHandlerFactory.lo \ - SVGCharPathHandler.lo SVGCharTspanTextHandler.lo SVGOutput.lo \ - SVGSingleCharTextHandler.lo SVGTree.lo System.lo \ + SVGCharPathHandler.lo SVGCharTspanTextHandler.lo SVGElement.lo \ + SVGOutput.lo SVGSingleCharTextHandler.lo SVGTree.lo System.lo \ TensorProductPatch.lo Terminal.lo TFM.lo ToUnicodeMap.lo \ TpicSpecialHandler.lo TriangularPatch.lo TrueTypeFont.lo \ TTFAutohint.lo Unicode.lo utility.lo VFReader.lo \ @@ -277,10 +278,10 @@ am__depfiles_remade = ./$(DEPDIR)/BasicDVIReader.Plo \ ./$(DEPDIR)/JFM.Plo ./$(DEPDIR)/Length.Plo \ ./$(DEPDIR)/MapLine.Plo ./$(DEPDIR)/Matrix.Plo \ ./$(DEPDIR)/Message.Plo ./$(DEPDIR)/MetafontWrapper.Plo \ - ./$(DEPDIR)/NoPsSpecialHandler.Plo ./$(DEPDIR)/PDFParser.Plo \ - ./$(DEPDIR)/PSInterpreter.Plo ./$(DEPDIR)/PSPattern.Plo \ - ./$(DEPDIR)/PSPreviewFilter.Plo ./$(DEPDIR)/PageRanges.Plo \ - ./$(DEPDIR)/PageSize.Plo \ + ./$(DEPDIR)/NoPsSpecialHandler.Plo ./$(DEPDIR)/Opacity.Plo \ + ./$(DEPDIR)/PDFParser.Plo ./$(DEPDIR)/PSInterpreter.Plo \ + ./$(DEPDIR)/PSPattern.Plo ./$(DEPDIR)/PSPreviewFilter.Plo \ + ./$(DEPDIR)/PageRanges.Plo ./$(DEPDIR)/PageSize.Plo \ ./$(DEPDIR)/PapersizeSpecialHandler.Plo \ ./$(DEPDIR)/PathClipper.Plo ./$(DEPDIR)/PdfSpecialHandler.Plo \ ./$(DEPDIR)/PreScanDVIReader.Plo ./$(DEPDIR)/Process.Plo \ @@ -289,7 +290,7 @@ am__depfiles_remade = ./$(DEPDIR)/BasicDVIReader.Plo \ ./$(DEPDIR)/SVGCharHandlerFactory.Plo \ ./$(DEPDIR)/SVGCharPathHandler.Plo \ ./$(DEPDIR)/SVGCharTspanTextHandler.Plo \ - ./$(DEPDIR)/SVGOutput.Plo \ + ./$(DEPDIR)/SVGElement.Plo ./$(DEPDIR)/SVGOutput.Plo \ ./$(DEPDIR)/SVGSingleCharTextHandler.Plo \ ./$(DEPDIR)/SVGTree.Plo ./$(DEPDIR)/ShadingPatch.Plo \ ./$(DEPDIR)/SignalHandler.Plo ./$(DEPDIR)/SourceInput.Plo \ @@ -559,6 +560,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -618,29 +620,30 @@ libdvisvgm_la_SOURCES = AGLTable.hpp BasicDVIReader.hpp \ MD5HashFunction.hpp Message.hpp Message.cpp \ MessageException.hpp MetafontWrapper.hpp MetafontWrapper.cpp \ NoPsSpecialHandler.hpp NoPsSpecialHandler.cpp \ - NumericRanges.hpp PageRanges.hpp PageRanges.cpp PageSize.hpp \ - PageSize.cpp Pair.hpp PapersizeSpecialHandler.hpp \ - PapersizeSpecialHandler.cpp PathClipper.hpp PathClipper.cpp \ - PDFParser.hpp PDFParser.cpp PdfSpecialHandler.hpp \ - PdfSpecialHandler.cpp PDFToSVG.hpp PreScanDVIReader.hpp \ - PreScanDVIReader.cpp Process.hpp Process.cpp psdefs.cpp \ - PSFilter.hpp PSInterpreter.hpp PSInterpreter.cpp PSPattern.hpp \ - PSPattern.cpp PSPreviewFilter.hpp PSPreviewFilter.cpp \ - PsSpecialHandler.hpp PsSpecialHandler.cpp RangeMap.hpp \ - RangeMap.cpp ShadingPatch.hpp ShadingPatch.cpp \ - SignalHandler.hpp SignalHandler.cpp SourceInput.hpp \ - SourceInput.cpp SpecialActions.hpp SpecialHandler.hpp \ - SpecialManager.hpp SpecialManager.cpp StreamReader.hpp \ - StreamReader.cpp StreamWriter.hpp StreamWriter.cpp Subfont.hpp \ - Subfont.cpp SVGCharHandler.hpp SVGCharHandler.cpp \ + NumericRanges.hpp Opacity.hpp Opacity.cpp PageRanges.hpp \ + PageRanges.cpp PageSize.hpp PageSize.cpp Pair.hpp \ + PapersizeSpecialHandler.hpp PapersizeSpecialHandler.cpp \ + PathClipper.hpp PathClipper.cpp PDFParser.hpp PDFParser.cpp \ + PdfSpecialHandler.hpp PdfSpecialHandler.cpp PDFToSVG.hpp \ + PreScanDVIReader.hpp PreScanDVIReader.cpp Process.hpp \ + Process.cpp psdefs.cpp PSFilter.hpp PSInterpreter.hpp \ + PSInterpreter.cpp PSPattern.hpp PSPattern.cpp \ + PSPreviewFilter.hpp PSPreviewFilter.cpp PsSpecialHandler.hpp \ + PsSpecialHandler.cpp RangeMap.hpp RangeMap.cpp \ + ShadingPatch.hpp ShadingPatch.cpp SignalHandler.hpp \ + SignalHandler.cpp SourceInput.hpp SourceInput.cpp \ + SpecialActions.hpp SpecialHandler.hpp SpecialManager.hpp \ + SpecialManager.cpp StreamReader.hpp StreamReader.cpp \ + StreamWriter.hpp StreamWriter.cpp Subfont.hpp Subfont.cpp \ + SVGCharHandler.hpp SVGCharHandler.cpp \ SVGCharHandlerFactory.hpp SVGCharHandlerFactory.cpp \ SVGCharPathHandler.hpp SVGCharPathHandler.cpp \ SVGCharTspanTextHandler.hpp SVGCharTspanTextHandler.cpp \ - SVGOutput.hpp SVGOutput.cpp SVGSingleCharTextHandler.hpp \ - SVGSingleCharTextHandler.cpp SVGTree.hpp SVGTree.cpp \ - System.hpp System.cpp TensorProductPatch.hpp \ - TensorProductPatch.cpp Terminal.hpp Terminal.cpp TFM.hpp \ - TFM.cpp ToUnicodeMap.hpp ToUnicodeMap.cpp \ + SVGElement.hpp SVGElement.cpp SVGOutput.hpp SVGOutput.cpp \ + SVGSingleCharTextHandler.hpp SVGSingleCharTextHandler.cpp \ + SVGTree.hpp SVGTree.cpp System.hpp System.cpp \ + TensorProductPatch.hpp TensorProductPatch.cpp Terminal.hpp \ + Terminal.cpp TFM.hpp TFM.cpp ToUnicodeMap.hpp ToUnicodeMap.cpp \ TpicSpecialHandler.hpp TpicSpecialHandler.cpp \ TriangularPatch.hpp TriangularPatch.cpp TrueTypeFont.hpp \ TrueTypeFont.cpp TTFAutohint.hpp TTFAutohint.cpp Unicode.hpp \ @@ -821,6 +824,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Message.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetafontWrapper.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NoPsSpecialHandler.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Opacity.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDFParser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSInterpreter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSPattern.Plo@am__quote@ # am--include-marker @@ -838,6 +842,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGCharHandlerFactory.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGCharPathHandler.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGCharTspanTextHandler.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGElement.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGOutput.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGSingleCharTextHandler.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGTree.Plo@am__quote@ # am--include-marker @@ -1180,6 +1185,7 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/Message.Plo -rm -f ./$(DEPDIR)/MetafontWrapper.Plo -rm -f ./$(DEPDIR)/NoPsSpecialHandler.Plo + -rm -f ./$(DEPDIR)/Opacity.Plo -rm -f ./$(DEPDIR)/PDFParser.Plo -rm -f ./$(DEPDIR)/PSInterpreter.Plo -rm -f ./$(DEPDIR)/PSPattern.Plo @@ -1197,6 +1203,7 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/SVGCharHandlerFactory.Plo -rm -f ./$(DEPDIR)/SVGCharPathHandler.Plo -rm -f ./$(DEPDIR)/SVGCharTspanTextHandler.Plo + -rm -f ./$(DEPDIR)/SVGElement.Plo -rm -f ./$(DEPDIR)/SVGOutput.Plo -rm -f ./$(DEPDIR)/SVGSingleCharTextHandler.Plo -rm -f ./$(DEPDIR)/SVGTree.Plo @@ -1321,6 +1328,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/Message.Plo -rm -f ./$(DEPDIR)/MetafontWrapper.Plo -rm -f ./$(DEPDIR)/NoPsSpecialHandler.Plo + -rm -f ./$(DEPDIR)/Opacity.Plo -rm -f ./$(DEPDIR)/PDFParser.Plo -rm -f ./$(DEPDIR)/PSInterpreter.Plo -rm -f ./$(DEPDIR)/PSPattern.Plo @@ -1338,6 +1346,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/SVGCharHandlerFactory.Plo -rm -f ./$(DEPDIR)/SVGCharPathHandler.Plo -rm -f ./$(DEPDIR)/SVGCharTspanTextHandler.Plo + -rm -f ./$(DEPDIR)/SVGElement.Plo -rm -f ./$(DEPDIR)/SVGOutput.Plo -rm -f ./$(DEPDIR)/SVGSingleCharTextHandler.Plo -rm -f ./$(DEPDIR)/SVGTree.Plo diff --git a/dviware/dvisvgm/src/MapLine.cpp b/dviware/dvisvgm/src/MapLine.cpp index cd3d8ae7ea..5b43cd448a 100644 --- a/dviware/dvisvgm/src/MapLine.cpp +++ b/dviware/dvisvgm/src/MapLine.cpp @@ -2,7 +2,7 @@ ** MapLine.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/MapLine.hpp b/dviware/dvisvgm/src/MapLine.hpp index 9a6fa17648..2d75665353 100644 --- a/dviware/dvisvgm/src/MapLine.hpp +++ b/dviware/dvisvgm/src/MapLine.hpp @@ -2,7 +2,7 @@ ** MapLine.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Matrix.cpp b/dviware/dvisvgm/src/Matrix.cpp index d0dcb2124d..d4c6e19629 100644 --- a/dviware/dvisvgm/src/Matrix.cpp +++ b/dviware/dvisvgm/src/Matrix.cpp @@ -2,7 +2,7 @@ ** Matrix.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -520,7 +520,7 @@ Matrix Matrix::parseSVGTransform (const string &transform) { vector<double> params; if (parse_transform_cmd(iss, "matrix", 6, 6, params)) { if (ne(params[0], 1) || ne(params[1], 0) || ne(params[2], 0) || ne(params[3], 1) || ne(params[4], 0) || ne(params[5], 0)) - matrix.rmultiply({params[0], params[2], params[4], params[1], params[3], params[5]}); + matrix.rmultiply(Matrix{params[0], params[2], params[4], params[1], params[3], params[5]}); } else if (parse_transform_cmd(iss, "rotate", 1, 3, params)) { if (params.size() == 1) { diff --git a/dviware/dvisvgm/src/Matrix.hpp b/dviware/dvisvgm/src/Matrix.hpp index 154ac8a37b..cff7353055 100644 --- a/dviware/dvisvgm/src/Matrix.hpp +++ b/dviware/dvisvgm/src/Matrix.hpp @@ -2,7 +2,7 @@ ** Matrix.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -40,11 +40,12 @@ class Matrix { friend double det (const Matrix &m, int row, int col); public: + Matrix () {set(0);} + Matrix (double d); Matrix (const std::string &cmds, Calculator &calc); - Matrix (double d=0); explicit Matrix (const double *v, unsigned size=9); explicit Matrix (const std::vector<double> &v, int start=0); - Matrix (std::initializer_list<double> initlist); + explicit Matrix (std::initializer_list<double> initlist); Matrix& set (double d); Matrix& set (const double *v, unsigned size); Matrix& set (const std::vector<double> &v, int start=0); diff --git a/dviware/dvisvgm/src/Message.cpp b/dviware/dvisvgm/src/Message.cpp index caf8051f88..e829f78e16 100644 --- a/dviware/dvisvgm/src/Message.cpp +++ b/dviware/dvisvgm/src/Message.cpp @@ -2,7 +2,7 @@ ** Message.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -74,7 +74,7 @@ void MessageStream::putChar (char c, ostream &os) { _col++; } _nl = false; - if (!_nl || c != '\n') + if (c != '\n') os << c; } } diff --git a/dviware/dvisvgm/src/Message.hpp b/dviware/dvisvgm/src/Message.hpp index fd6f048622..afb93d9432 100644 --- a/dviware/dvisvgm/src/Message.hpp +++ b/dviware/dvisvgm/src/Message.hpp @@ -2,7 +2,7 @@ ** Message.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/MessageException.hpp b/dviware/dvisvgm/src/MessageException.hpp index 325e83e403..1cfcb49e7d 100644 --- a/dviware/dvisvgm/src/MessageException.hpp +++ b/dviware/dvisvgm/src/MessageException.hpp @@ -2,7 +2,7 @@ ** MessageException.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/MetafontWrapper.cpp b/dviware/dvisvgm/src/MetafontWrapper.cpp index 11667fb5e7..7788bef3d9 100644 --- a/dviware/dvisvgm/src/MetafontWrapper.cpp +++ b/dviware/dvisvgm/src/MetafontWrapper.cpp @@ -2,7 +2,7 @@ ** MetafontWrapper.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/MetafontWrapper.hpp b/dviware/dvisvgm/src/MetafontWrapper.hpp index 582a146aee..4ec5afd304 100644 --- a/dviware/dvisvgm/src/MetafontWrapper.hpp +++ b/dviware/dvisvgm/src/MetafontWrapper.hpp @@ -2,7 +2,7 @@ ** MetafontWrapper.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/MiKTeXCom.cpp b/dviware/dvisvgm/src/MiKTeXCom.cpp index 9cd02edf41..1bbd40cae6 100644 --- a/dviware/dvisvgm/src/MiKTeXCom.cpp +++ b/dviware/dvisvgm/src/MiKTeXCom.cpp @@ -2,7 +2,7 @@ ** MiKTeXCom.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/MiKTeXCom.hpp b/dviware/dvisvgm/src/MiKTeXCom.hpp index 3da270cea1..b05b26a132 100644 --- a/dviware/dvisvgm/src/MiKTeXCom.hpp +++ b/dviware/dvisvgm/src/MiKTeXCom.hpp @@ -2,7 +2,7 @@ ** MiKTeXCom.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/NoPsSpecialHandler.cpp b/dviware/dvisvgm/src/NoPsSpecialHandler.cpp index f5b3d7244e..77af3d9d0c 100644 --- a/dviware/dvisvgm/src/NoPsSpecialHandler.cpp +++ b/dviware/dvisvgm/src/NoPsSpecialHandler.cpp @@ -2,7 +2,7 @@ ** NoPsSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/NoPsSpecialHandler.hpp b/dviware/dvisvgm/src/NoPsSpecialHandler.hpp index 9af3d47df5..b4af33ab6c 100644 --- a/dviware/dvisvgm/src/NoPsSpecialHandler.hpp +++ b/dviware/dvisvgm/src/NoPsSpecialHandler.hpp @@ -2,7 +2,7 @@ ** NoPsSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/NumericRanges.hpp b/dviware/dvisvgm/src/NumericRanges.hpp index 1669f7ddce..5102b715b0 100644 --- a/dviware/dvisvgm/src/NumericRanges.hpp +++ b/dviware/dvisvgm/src/NumericRanges.hpp @@ -2,7 +2,7 @@ ** NumericRanges.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Opacity.cpp b/dviware/dvisvgm/src/Opacity.cpp new file mode 100644 index 0000000000..efc8bed05e --- /dev/null +++ b/dviware/dvisvgm/src/Opacity.cpp @@ -0,0 +1,59 @@ +/************************************************************************* +** Opacity.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include "Opacity.hpp" + +using namespace std; + +string Opacity::cssBlendMode (BlendMode bm) { + switch (bm) { + case BM_NORMAL : return "normal"; + case BM_MULTIPLY : return "multiply"; + case BM_SCREEN : return "screen"; + case BM_OVERLAY : return "overlay"; + case BM_SOFTLIGHT : return "soft-light"; + case BM_HARDLIGHT : return "hard-light"; + case BM_COLORDODGE: return "color-dodge"; + case BM_COLORBURN : return "color-burn"; + case BM_DARKEN : return "darken"; + case BM_LIGHTEN : return "lighten"; + case BM_DIFFERENCE: return "difference"; + case BM_EXCLUSION : return "exclusion"; + case BM_HUE : return "hue"; + case BM_SATURATION: return "saturation"; + case BM_COLOR : return "color"; + case BM_LUMINOSITY: return "luminosity"; + } + return ""; +} + + +bool Opacity::operator == (const Opacity &opacity) const { + return opacity._fillalpha == _fillalpha + && opacity._strokealpha == _strokealpha + && opacity._blendMode == _blendMode; +} + + +bool Opacity::operator != (const Opacity &opacity) const { + return opacity._fillalpha != _fillalpha + || opacity._strokealpha != _strokealpha + || opacity._blendMode != _blendMode; +}
\ No newline at end of file diff --git a/dviware/dvisvgm/src/Opacity.hpp b/dviware/dvisvgm/src/Opacity.hpp new file mode 100644 index 0000000000..8a4e1edac6 --- /dev/null +++ b/dviware/dvisvgm/src/Opacity.hpp @@ -0,0 +1,75 @@ +/************************************************************************* +** Opacity.hpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#ifndef OPACITY_HPP +#define OPACITY_HPP + +#include <string> + +class OpacityAlpha { + public: + OpacityAlpha () =default; + OpacityAlpha (double constalpha, double shapealpha) : _constalpha(constalpha), _shapealpha(shapealpha) {} + void setConstAlpha (double alpha) { _constalpha = alpha;} + void setShapeAlpha (double shapealpha) {_shapealpha = shapealpha;} + double value () const {return _constalpha * _shapealpha;} + bool operator == (const OpacityAlpha &alpha) const {return alpha._constalpha == _constalpha && alpha._shapealpha == _shapealpha;} + bool operator != (const OpacityAlpha &alpha) const {return alpha._constalpha != _constalpha || alpha._shapealpha != _shapealpha;} + bool isOpaque () const {return _constalpha == 1.0 && _shapealpha == 1.0;} + + private: + double _constalpha=1.0; + double _shapealpha=1.0; +}; + +class Opacity { + public: + enum BlendMode { + BM_NORMAL, BM_MULTIPLY, BM_SCREEN, BM_OVERLAY, + BM_SOFTLIGHT, BM_HARDLIGHT, BM_COLORDODGE, BM_COLORBURN, + BM_DARKEN, BM_LIGHTEN, BM_DIFFERENCE, BM_EXCLUSION, + BM_HUE, BM_SATURATION, BM_COLOR, BM_LUMINOSITY + }; + + public: + Opacity () =default; + Opacity (OpacityAlpha fillalpha, OpacityAlpha strokealpha, BlendMode bm) : _fillalpha(fillalpha), _strokealpha(strokealpha), _blendMode(bm) {} + Opacity (OpacityAlpha fillalpha, OpacityAlpha strokealpha) : Opacity(fillalpha, strokealpha, BM_NORMAL) {} + explicit Opacity (BlendMode bm) : _blendMode(bm) {} + OpacityAlpha& fillalpha () {return _fillalpha;} + OpacityAlpha& strokealpha () {return _strokealpha;} + const OpacityAlpha& fillalpha () const {return _fillalpha;} + const OpacityAlpha& strokealpha () const {return _strokealpha;} + BlendMode blendMode () const {return _blendMode;} + void setBlendMode (BlendMode mode) {_blendMode = mode;} + std::string cssBlendMode () const {return cssBlendMode(_blendMode);} + static std::string cssBlendMode (BlendMode bm); + bool isFillDefault () const {return _fillalpha.isOpaque() && _blendMode == BM_NORMAL;} + bool isStrokeDefault () const {return _strokealpha.isOpaque() && _blendMode == BM_NORMAL;} + bool operator == (const Opacity &opacity) const; + bool operator != (const Opacity &opacity) const; + + private: + OpacityAlpha _fillalpha; + OpacityAlpha _strokealpha; + BlendMode _blendMode=BM_NORMAL; +}; + +#endif diff --git a/dviware/dvisvgm/src/PDFParser.cpp b/dviware/dvisvgm/src/PDFParser.cpp index e511d4dc39..aaf50886ec 100644 --- a/dviware/dvisvgm/src/PDFParser.cpp +++ b/dviware/dvisvgm/src/PDFParser.cpp @@ -2,7 +2,7 @@ ** PDFParser.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PDFParser.hpp b/dviware/dvisvgm/src/PDFParser.hpp index b261ee9cf7..a342e740cd 100644 --- a/dviware/dvisvgm/src/PDFParser.hpp +++ b/dviware/dvisvgm/src/PDFParser.hpp @@ -2,7 +2,7 @@ ** PDFParser.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PDFToSVG.hpp b/dviware/dvisvgm/src/PDFToSVG.hpp index a6c71f964b..91792689a2 100644 --- a/dviware/dvisvgm/src/PDFToSVG.hpp +++ b/dviware/dvisvgm/src/PDFToSVG.hpp @@ -2,7 +2,7 @@ ** PDFToSVG.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PSFilter.hpp b/dviware/dvisvgm/src/PSFilter.hpp index 87aff89a7c..59a4565d1d 100644 --- a/dviware/dvisvgm/src/PSFilter.hpp +++ b/dviware/dvisvgm/src/PSFilter.hpp @@ -2,7 +2,7 @@ ** PSFilter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PSInterpreter.cpp b/dviware/dvisvgm/src/PSInterpreter.cpp index 5e09642ef6..c296a18f04 100644 --- a/dviware/dvisvgm/src/PSInterpreter.cpp +++ b/dviware/dvisvgm/src/PSInterpreter.cpp @@ -2,7 +2,7 @@ ** PSInterpreter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -59,8 +59,10 @@ void PSInterpreter::init () { // in conjunction with -dDELAYBIND and -dWRITESYSTEMDICT. // Thus, -dDELAYSAFER (or -dNOSAFER) must be added. // https://www.ghostscript.com/doc/9.50/Use.htm#Safer - if (gsrev >= 950) + if (gsrev >= 950) { gsargs.emplace_back("-dDELAYSAFER"); + gsargs.emplace_back("-dALLOWPSTRANSPARENCY"); + } } _gs.init(gsargs.size(), gsargs.data(), this); _gs.set_stdio(input, output, error); @@ -130,7 +132,7 @@ bool PSInterpreter::execute (const char *str, size_t len, bool flush) { // feed Ghostscript with code chunks that are not larger than 64KB // => see documentation of gsapi_run_string_foo() const char *p=str; - while (PS_RUNNING && len > 0) { + while (_mode == PS_RUNNING && len > 0) { SignalHandler::instance().check(); size_t chunksize = min(len, (size_t)0xffff); _gs.run_string_continue(p, chunksize, 0, &status); @@ -279,6 +281,7 @@ void PSInterpreter::callActions (InputReader &in) { {"rotate", { 1, &PSActions::rotate}}, {"save", { 1, &PSActions::save}}, {"scale", { 2, &PSActions::scale}}, + {"setalphaisshape", { 1, &PSActions::setalphaisshape}}, {"setblendmode", { 1, &PSActions::setblendmode}}, {"setcolorspace", { 1, &PSActions::setcolorspace}}, {"setcmykcolor", { 4, &PSActions::setcmykcolor}}, @@ -286,7 +289,6 @@ void PSInterpreter::callActions (InputReader &in) { {"setfillconstantalpha", { 1, &PSActions::setfillconstantalpha}}, {"setgray", { 1, &PSActions::setgray}}, {"sethsbcolor", { 3, &PSActions::sethsbcolor}}, - {"setisshapealpha", { 1, &PSActions::setisshapealpha}}, {"setlinecap", { 1, &PSActions::setlinecap}}, {"setlinejoin", { 1, &PSActions::setlinejoin}}, {"setlinewidth", { 1, &PSActions::setlinewidth}}, @@ -309,7 +311,7 @@ void PSInterpreter::callActions (InputReader &in) { _rawData.clear(); in.skipSpace(); while (!in.eof()) { - _rawData.emplace_back(in.getString()); + _rawData.push_back(in.getString()); in.skipSpace(); } } @@ -320,14 +322,14 @@ void PSInterpreter::callActions (InputReader &in) { if (pcount < 0) { // variable number of parameters? in.skipSpace(); while (!in.eof()) { // read all available parameters - params.emplace_back(in.getString()); + params.push_back(in.getString()); in.skipSpace(); } } else { // fix number of parameters for (int i=0; i < pcount; i++) { in.skipSpace(); - params.emplace_back(in.getString()); + params.push_back(in.getString()); } } // convert parameter strings to doubles @@ -415,7 +417,7 @@ bool PSInterpreter::imageDeviceKnown (string deviceStr) { return false; deviceStr = deviceStr.substr(0, deviceStr.find(':')); // strip optional argument auto infos = getImageDeviceInfos(); - auto it = find_if(infos.begin(), infos.end(), [&](PSDeviceInfo &info) { + auto it = find_if(infos.begin(), infos.end(), [&](const PSDeviceInfo &info) { return info.name == deviceStr; }); return it != infos.end(); diff --git a/dviware/dvisvgm/src/PSInterpreter.hpp b/dviware/dvisvgm/src/PSInterpreter.hpp index 638e42dd8d..180b99e0ea 100644 --- a/dviware/dvisvgm/src/PSInterpreter.hpp +++ b/dviware/dvisvgm/src/PSInterpreter.hpp @@ -2,7 +2,7 @@ ** PSInterpreter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -62,6 +62,7 @@ struct PSActions { virtual void rotate (std::vector<double> &p) =0; virtual void save (std::vector<double> &p) =0; virtual void scale (std::vector<double> &p) =0; + virtual void setalphaisshape (std::vector<double> &p) =0; virtual void setblendmode (std::vector<double> &p) =0; virtual void setcolorspace (std::vector<double> &p) =0; virtual void setcmykcolor (std::vector<double> &cmyk) =0; @@ -69,7 +70,6 @@ struct PSActions { virtual void setfillconstantalpha (std::vector<double> &p) =0; virtual void setgray (std::vector<double> &p) =0; virtual void sethsbcolor (std::vector<double> &hsb) =0; - virtual void setisshapealpha (std::vector<double> &p) =0; virtual void setlinecap (std::vector<double> &p) =0; virtual void setlinejoin (std::vector<double> &p) =0; virtual void setlinewidth (std::vector<double> &p) =0; @@ -114,6 +114,7 @@ class PSInterpreter { BoundingBox pdfPageBox (const std::string &fname, int pageno); const std::vector<std::string>& rawData () const {return _rawData;} bool setImageDevice (const std::string &deviceStr); + bool hasFullOpacitySupport () const {return _gs.revision() >= 952;} static std::vector<PSDeviceInfo> getImageDeviceInfos (); static void listImageDeviceInfos (std::ostream &os); static bool imageDeviceKnown (std::string deviceStr); diff --git a/dviware/dvisvgm/src/PSPattern.cpp b/dviware/dvisvgm/src/PSPattern.cpp index 4659dc7a84..2320e14cac 100644 --- a/dviware/dvisvgm/src/PSPattern.cpp +++ b/dviware/dvisvgm/src/PSPattern.cpp @@ -2,7 +2,7 @@ ** PSPattern.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -106,8 +106,8 @@ unique_ptr<XMLElement> PSTilingPattern::createClipNode() const { * define the pattern graphic. */ unique_ptr<XMLElement> PSTilingPattern::createGroupNode () const { // add all succeeding path elements to this group - auto group = util::make_unique<XMLElement>("g"); - group->addAttribute("clip-path", XMLString("url(#pc")+XMLString(psID())+")"); + auto group = util::make_unique<SVGElement>("g"); + group->setClipPathUrl("pc"+XMLString(psID())); return group; } diff --git a/dviware/dvisvgm/src/PSPattern.hpp b/dviware/dvisvgm/src/PSPattern.hpp index 2c53dd2b3e..5e3661fd35 100644 --- a/dviware/dvisvgm/src/PSPattern.hpp +++ b/dviware/dvisvgm/src/PSPattern.hpp @@ -2,7 +2,7 @@ ** PSPattern.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -40,6 +40,8 @@ class PSPattern { virtual int psID () const {return _id;} virtual std::string svgID () const; virtual void apply (SpecialActions &actions); + virtual void setColor (Color color) {} + virtual bool tiled () const =0; protected: explicit PSPattern (int id) : _id(id) {} @@ -54,6 +56,8 @@ class PSTilingPattern : public PSPattern { public: virtual XMLElement* getContainerNode () {return _groupNode.get();} void apply (SpecialActions &actions) override; + bool tiled () const override {return true;} + protected: PSTilingPattern (int id, BoundingBox &bbox, Matrix &matrix, double xstep, double ystep); @@ -82,7 +86,7 @@ class PSUncoloredTilingPattern final : public PSTilingPattern { public: PSUncoloredTilingPattern (int id, BoundingBox &bbox, Matrix &matrix, double xstep, double ystep); std::string svgID () const override; - void setColor (Color color) {_currentColor = color;} + void setColor (Color color) override {_currentColor = color;} void apply (SpecialActions &actions) override; protected: diff --git a/dviware/dvisvgm/src/PSPreviewFilter.cpp b/dviware/dvisvgm/src/PSPreviewFilter.cpp index 20e8b53643..312b3eb6de 100644 --- a/dviware/dvisvgm/src/PSPreviewFilter.cpp +++ b/dviware/dvisvgm/src/PSPreviewFilter.cpp @@ -2,7 +2,7 @@ ** PSPreviewFilter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PSPreviewFilter.hpp b/dviware/dvisvgm/src/PSPreviewFilter.hpp index acadf9f39e..62860b6932 100644 --- a/dviware/dvisvgm/src/PSPreviewFilter.hpp +++ b/dviware/dvisvgm/src/PSPreviewFilter.hpp @@ -2,7 +2,7 @@ ** PSPreviewFilter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PageRanges.cpp b/dviware/dvisvgm/src/PageRanges.cpp index 2623d2ef46..46f2707821 100644 --- a/dviware/dvisvgm/src/PageRanges.cpp +++ b/dviware/dvisvgm/src/PageRanges.cpp @@ -2,7 +2,7 @@ ** PageRanges.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PageRanges.hpp b/dviware/dvisvgm/src/PageRanges.hpp index 555338449a..f03dfc5162 100644 --- a/dviware/dvisvgm/src/PageRanges.hpp +++ b/dviware/dvisvgm/src/PageRanges.hpp @@ -2,7 +2,7 @@ ** PageRanges.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PageSize.cpp b/dviware/dvisvgm/src/PageSize.cpp index ac8e1c5275..8b5c29445b 100644 --- a/dviware/dvisvgm/src/PageSize.cpp +++ b/dviware/dvisvgm/src/PageSize.cpp @@ -2,7 +2,7 @@ ** PageSize.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PageSize.hpp b/dviware/dvisvgm/src/PageSize.hpp index 43c555b9dd..4eb4e5e201 100644 --- a/dviware/dvisvgm/src/PageSize.hpp +++ b/dviware/dvisvgm/src/PageSize.hpp @@ -2,7 +2,7 @@ ** PageSize.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Pair.hpp b/dviware/dvisvgm/src/Pair.hpp index 63806c5b6a..466e6fd8f2 100644 --- a/dviware/dvisvgm/src/Pair.hpp +++ b/dviware/dvisvgm/src/Pair.hpp @@ -2,7 +2,7 @@ ** Pair.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PapersizeSpecialHandler.cpp b/dviware/dvisvgm/src/PapersizeSpecialHandler.cpp index c2ab96a8a8..00a7a4191e 100644 --- a/dviware/dvisvgm/src/PapersizeSpecialHandler.cpp +++ b/dviware/dvisvgm/src/PapersizeSpecialHandler.cpp @@ -2,7 +2,7 @@ ** PapersizeSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -58,7 +58,7 @@ void PapersizeSpecialHandler::storePaperSize (unsigned pageno, Length width, Len if (!_pageSizes.empty() && _pageSizes.back().first == pageno) _pageSizes.back().second = whpair; else - _pageSizes.emplace_back(PageSize(pageno, whpair)); + _pageSizes.emplace_back(pageno, whpair); } } diff --git a/dviware/dvisvgm/src/PapersizeSpecialHandler.hpp b/dviware/dvisvgm/src/PapersizeSpecialHandler.hpp index ed836f37d7..02599d8c32 100644 --- a/dviware/dvisvgm/src/PapersizeSpecialHandler.hpp +++ b/dviware/dvisvgm/src/PapersizeSpecialHandler.hpp @@ -2,7 +2,7 @@ ** PapersizeSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PathClipper.cpp b/dviware/dvisvgm/src/PathClipper.cpp index f1cca09fd6..a36dc5d3df 100644 --- a/dviware/dvisvgm/src/PathClipper.cpp +++ b/dviware/dvisvgm/src/PathClipper.cpp @@ -2,7 +2,7 @@ ** PathClipper.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PathClipper.hpp b/dviware/dvisvgm/src/PathClipper.hpp index 7c42f5de6d..8ab9b48c4f 100644 --- a/dviware/dvisvgm/src/PathClipper.hpp +++ b/dviware/dvisvgm/src/PathClipper.hpp @@ -2,7 +2,7 @@ ** PathClipper.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PdfSpecialHandler.cpp b/dviware/dvisvgm/src/PdfSpecialHandler.cpp index 0d1b7177bd..9a12af7a64 100644 --- a/dviware/dvisvgm/src/PdfSpecialHandler.cpp +++ b/dviware/dvisvgm/src/PdfSpecialHandler.cpp @@ -2,7 +2,7 @@ ** PdfSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -95,7 +95,7 @@ static char prepare_mode (InputReader &ir) { void PdfSpecialHandler::preprocessPagesize (StreamInputReader &ir, SpecialActions &actions) { // add page sizes to collection of paper sizes in order to handle them equally SpecialHandler *handler = SpecialManager::instance().findHandlerByName("papersize"); - if (auto papersizeHandler = dynamic_cast<PapersizeSpecialHandler*>(handler)) { + if (auto papersizeHandler = static_cast<PapersizeSpecialHandler*>(handler)) { try { Length width, height; // parse parameter sequence of the form (name length)+ diff --git a/dviware/dvisvgm/src/PdfSpecialHandler.hpp b/dviware/dvisvgm/src/PdfSpecialHandler.hpp index 0e7d3382ad..e7a18bacce 100644 --- a/dviware/dvisvgm/src/PdfSpecialHandler.hpp +++ b/dviware/dvisvgm/src/PdfSpecialHandler.hpp @@ -2,7 +2,7 @@ ** PdfSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PreScanDVIReader.cpp b/dviware/dvisvgm/src/PreScanDVIReader.cpp index 8e255ef088..ef862f02cc 100644 --- a/dviware/dvisvgm/src/PreScanDVIReader.cpp +++ b/dviware/dvisvgm/src/PreScanDVIReader.cpp @@ -2,7 +2,7 @@ ** PreScanDVIReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PreScanDVIReader.hpp b/dviware/dvisvgm/src/PreScanDVIReader.hpp index 900fd1fc01..a0e5a5fc64 100644 --- a/dviware/dvisvgm/src/PreScanDVIReader.hpp +++ b/dviware/dvisvgm/src/PreScanDVIReader.hpp @@ -2,7 +2,7 @@ ** PreScanDVIReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Process.cpp b/dviware/dvisvgm/src/Process.cpp index 2e15153b9e..2010b05db9 100644 --- a/dviware/dvisvgm/src/Process.cpp +++ b/dviware/dvisvgm/src/Process.cpp @@ -2,7 +2,7 @@ ** Process.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Process.hpp b/dviware/dvisvgm/src/Process.hpp index 53311921c9..3e9417d7bb 100644 --- a/dviware/dvisvgm/src/Process.hpp +++ b/dviware/dvisvgm/src/Process.hpp @@ -2,7 +2,7 @@ ** Process.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/PsSpecialHandler.cpp b/dviware/dvisvgm/src/PsSpecialHandler.cpp index f7b5508b65..0df21e8804 100644 --- a/dviware/dvisvgm/src/PsSpecialHandler.cpp +++ b/dviware/dvisvgm/src/PsSpecialHandler.cpp @@ -2,7 +2,7 @@ ** PsSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -32,7 +32,7 @@ #include "PSPreviewFilter.hpp" #include "PsSpecialHandler.hpp" #include "SpecialActions.hpp" -#include "SVGTree.hpp" +#include "SVGElement.hpp" #include "TensorProductPatch.hpp" #include "TriangularPatch.hpp" #include "utility.hpp" @@ -81,11 +81,11 @@ void PsSpecialHandler::initgraphics () { _linecap = _linejoin = 0; // butt end caps and miter joins _miterlimit = 4; _xmlnode = _savenode = nullptr; - _isshapealpha = false; // opacity operators change constant component by default - _fillalpha = _strokealpha = {1, 1}; // set constant and shape opacity to non-transparent - _blendmode = 0; // "normal" mode (no blending) + _isshapealpha = false; // opacity operators change constant component by default + _opacity = Opacity(); _sx = _sy = _cos = 1.0; _pattern = nullptr; + _makingPattern = false; _patternEnabled = false; _currentcolor = Color::BLACK; _dashoffset = 0; @@ -287,7 +287,6 @@ bool PsSpecialHandler::process (const string &prefix, istream &is, SpecialAction return true; } - /** Handles a psfile/pdffile special which places an external EPS/PDF graphic * at the current DVI position. The lower left corner (llx,lly) of the * given bounding box is placed at the DVI position. @@ -366,16 +365,15 @@ void PsSpecialHandler::imgfile (FileType filetype, const string &fname, const ma matrix.scale(sx, sy).rotate(-angle).scale(hscale/100, vscale/100); // apply transformation attributes matrix.translate(x+hoffset, y-voffset); // move image to current DVI position matrix.lmultiply(_actions->getMatrix()); - // update bounding box BoundingBox bbox(0, 0, urx-llx, ury-lly); bbox.transform(matrix); _actions->embed(bbox); // insert element containing the image data - matrix.rmultiply(TranslationMatrix(-llx, -lly)); // move lower left corner of image to origin - if (!matrix.isIdentity()) - imgNode->addAttribute("transform", matrix.toSVG()); + if (filetype != FileType::PDF) + matrix.rmultiply(TranslationMatrix(-llx, -lly)); // move lower left corner of image to origin + imgNode->setTransform(matrix); _actions->svgTree().appendToPage(std::move(imgNode)); } // restore DVI position @@ -386,7 +384,7 @@ void PsSpecialHandler::imgfile (FileType filetype, const string &fname, const ma /** Returns path + basename of temporary bitmap images. */ -static string image_base_path (SpecialActions &actions) { +static string image_base_path (const SpecialActions &actions) { FilePath imgpath = actions.getSVGFilePath(actions.getCurrentPageNumber()); return FileSystem::tmpdir() + "/" + imgpath.basename() + "-tmp-"; } @@ -399,8 +397,8 @@ static string image_base_path (SpecialActions &actions) { * @param[in] bbox bounding box of the image * @param[in] clip if true, the image is clipped to its bounding box * @return pointer to the element or nullptr if there's no image data */ -unique_ptr<XMLElement> PsSpecialHandler::createImageNode (FileType type, const string &fname, int pageno, BoundingBox bbox, bool clip) { - unique_ptr<XMLElement> node; +unique_ptr<SVGElement> PsSpecialHandler::createImageNode (FileType type, const string &fname, int pageno, BoundingBox bbox, bool clip) { + unique_ptr<SVGElement> node; string pathstr; if (const char *path = FileFinder::instance().lookup(fname, false)) pathstr = FileSystem::ensureForwardSlashes(path); @@ -409,7 +407,7 @@ unique_ptr<XMLElement> PsSpecialHandler::createImageNode (FileType type, const s if (pathstr.empty()) Message::wstream(true) << "file '" << fname << "' not found\n"; else if (type == FileType::BITMAP || type == FileType::SVG) { - node = util::make_unique<XMLElement>("image"); + node = util::make_unique<SVGElement>("image"); node->addAttribute("x", 0); node->addAttribute("y", 0); node->addAttribute("width", bbox.width()); @@ -429,7 +427,7 @@ unique_ptr<XMLElement> PsSpecialHandler::createImageNode (FileType type, const s if (clip) rectclip = to_string(bbox.minX())+" "+to_string(bbox.minY())+" "+to_string(bbox.width())+" "+to_string(bbox.height())+" rectclip"; - node = util::make_unique<XMLElement>("g"); // put SVG nodes created from the EPS/PDF file in this group + node = util::make_unique<SVGElement>("g"); // put SVG nodes created from the EPS/PDF file in this group _xmlnode = node.get(); _psi.execute( "\n@beginspecial @setspecial" // enter special environment @@ -556,9 +554,8 @@ void PsSpecialHandler::setpagedevice (std::vector<double> &p) { _linewidth = 1; _linecap = _linejoin = 0; // butt end caps and miter joins _miterlimit = 4; - _isshapealpha = false; // opacity operators change constant component by default - _fillalpha = _strokealpha = {1, 1}; // set constant and shape opacity to non-transparent - _blendmode = 0; // "normal" mode (no blending) + _isshapealpha = false; // opacity operators change constant component by default + _opacity = Opacity(); _sx = _sy = _cos = 1.0; _pattern = nullptr; _currentcolor = Color::BLACK; @@ -613,14 +610,37 @@ void PsSpecialHandler::closepath (vector<double>&) { } -static string css_blendmode_name (int mode) { - static const array<const char*,16> modenames = {{ - "normal", "multiply", "screen", "overlay", "soft-light", "hard-light", "color-dodge", "color-burn", - "darken", "lighten", "difference", "exclusion", "hue", "saturation", "color", "luminosity" - }}; +void PsSpecialHandler::setblendmode (vector<double> &p) { + int mode = static_cast<int>(p[0]); + static const Opacity::BlendMode blendmodes[] = { + Opacity::BM_NORMAL, Opacity::BM_MULTIPLY, Opacity::BM_SCREEN, Opacity::BM_OVERLAY, + Opacity::BM_SOFTLIGHT, Opacity::BM_HARDLIGHT, Opacity::BM_COLORDODGE, Opacity::BM_COLORBURN, + Opacity::BM_DARKEN, Opacity::BM_LIGHTEN, Opacity::BM_DIFFERENCE, Opacity::BM_EXCLUSION, + Opacity::BM_HUE, Opacity::BM_SATURATION, Opacity::BM_COLOR, Opacity::BM_LUMINOSITY + }; if (mode < 0 || mode > 15) - return ""; - return modenames[mode]; + mode = Opacity::BM_NORMAL; + _opacity.setBlendMode(blendmodes[mode]); +} + + +void PsSpecialHandler::setfillconstantalpha (vector<double> &p) { + if (_isshapealpha) + _opacity.fillalpha().setShapeAlpha(p[0]); + else + _opacity.fillalpha().setConstAlpha(p[0]); + if (_actions) + _actions->setOpacity(_opacity); +} + + +void PsSpecialHandler::setstrokeconstantalpha (vector<double> &p) { + if (_isshapealpha) + _opacity.strokealpha().setShapeAlpha(p[0]); + else + _opacity.strokealpha().setConstAlpha(p[0]); + if (_actions) + _actions->setOpacity(_opacity); } @@ -639,18 +659,18 @@ void PsSpecialHandler::stroke (vector<double> &p) { } if (_clipStack.prependedPath()) _path.prepend(*_clipStack.prependedPath()); - unique_ptr<XMLElement> path; + unique_ptr<SVGElement> path; Pair<double> 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 = util::make_unique<XMLElement>("circle"); + path = util::make_unique<SVGElement>("circle"); path->addAttribute("cx", x); path->addAttribute("cy", y); path->addAttribute("r", r); - path->addAttribute("fill", _actions->getColor().svgColorString()); + path->setFillColor(_actions->getColor()); bbox = BoundingBox(x-r, y-r, x+r, y+r); } } @@ -661,35 +681,20 @@ void PsSpecialHandler::stroke (vector<double> &p) { ostringstream oss; _path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); - path = util::make_unique<XMLElement>("path"); + path = util::make_unique<SVGElement>("path"); path->addAttribute("d", oss.str()); - path->addAttribute("stroke", _actions->getColor().svgColorString()); - path->addAttribute("fill", "none"); - if (_linewidth != 1) - path->addAttribute("stroke-width", _linewidth); - if (_miterlimit != 4) - path->addAttribute("stroke-miterlimit", _miterlimit); - if (_linecap > 0) // default value is "butt", no need to set it explicitly - path->addAttribute("stroke-linecap", _linecap == 1 ? "round" : "square"); - if (_linejoin > 0) // default value is "miter", no need to set it explicitly - path->addAttribute("stroke-linejoin", _linecap == 1 ? "round" : "bevel"); - if (_strokealpha[0] < 1 || _strokealpha[1] < 1) - path->addAttribute("stroke-opacity", _strokealpha[0] * _strokealpha[1]); - if (_blendmode > 0 && _blendmode < 16) - path->addAttribute("style", "mix-blend-mode:"+css_blendmode_name(_blendmode)); - if (!_dashpattern.empty()) { - string patternStr; - for (double dashValue : _dashpattern) - patternStr += XMLString(dashValue)+","; - patternStr.pop_back(); - path->addAttribute("stroke-dasharray", patternStr); - if (_dashoffset != 0) - path->addAttribute("stroke-dashoffset", _dashoffset); - } + path->setStrokeColor(_actions->getColor()); + path->setNoFillColor(); + path->setStrokeWidth(_linewidth); + path->setStrokeMiterLimit(_miterlimit); + path->setStrokeLineCap(_linecap == 0 ? SVGElement::LC_BUTT : _linecap == 1 ? SVGElement::LC_ROUND : SVGElement::LC_SQUARE); + path->setStrokeLineJoin(_linejoin == 0 ? SVGElement::LJ_MITER : _linecap == 1 ? SVGElement::LJ_ROUND : SVGElement::LJ_BEVEL); + path->setStrokeOpacity(_opacity); + path->setStrokeDash(_dashpattern, _dashoffset); } - if (path && _clipStack.path() && !_savenode) { + if (path && _clipStack.path() && !_makingPattern) { // assign clipping path and clip bounding box - path->addAttribute("clip-path", XMLString("url(#clip")+XMLString(_clipStack.topID())+")"); + path->setClipPathUrl("clip"+XMLString(_clipStack.topID())); bbox.intersect(_clipStack.path()->computeBBox()); _clipStack.removePrependedPath(); } @@ -708,7 +713,7 @@ void PsSpecialHandler::stroke (vector<double> &p) { * @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */ void PsSpecialHandler::fill (vector<double> &p, bool evenodd) { _path.removeRedundantCommands(); - if ((_path.empty() && !_clipStack.prependedPath()) || !_actions) + if ((_path.empty() && !_clipStack.prependedPath()) || (_patternEnabled && !_pattern) || !_actions) return; // compute bounding box @@ -723,24 +728,20 @@ void PsSpecialHandler::fill (vector<double> &p, bool evenodd) { ostringstream oss; _path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); - unique_ptr<XMLElement> path = util::make_unique<XMLElement>("path"); + auto path = util::make_unique<SVGElement>("path"); path->addAttribute("d", oss.str()); if (_pattern) - path->addAttribute("fill", XMLString("url(#")+_pattern->svgID()+")"); - else if (_actions->getColor() != Color::BLACK || _savenode) - path->addAttribute("fill", _actions->getColor().svgColorString()); - if (_clipStack.path() && !_savenode) { // clip path active and not inside pattern definition? + path->setFillPatternUrl(XMLString(_pattern->svgID())); + else if (_actions->getColor() != Color::BLACK || _makingPattern) + path->setFillColor(_actions->getColor(), false); + if (_clipStack.path() && !_makingPattern) { // clip path active and not inside pattern definition? // assign clipping path and clip bounding box - path->addAttribute("clip-path", XMLString("url(#clip")+XMLString(_clipStack.topID())+")"); + path->setClipPathUrl("clip"+XMLString(_clipStack.topID())); bbox.intersect(_clipStack.path()->computeBBox()); _clipStack.removePrependedPath(); } - if (evenodd) // SVG default fill rule is "nonzero" algorithm - path->addAttribute("fill-rule", "evenodd"); - if (_fillalpha[0] < 1 || _fillalpha[1] < 1) - path->addAttribute("fill-opacity", _fillalpha[0] * _fillalpha[1]); - if (_blendmode > 0 && _blendmode < 16) - path->addAttribute("style", "mix-blend-mode:"+css_blendmode_name(_blendmode)); + path->setFillRule(evenodd ? SVGElement::FR_EVENODD : SVGElement::FR_NONZERO); + path->setFillOpacity(_opacity); if (_xmlnode) _xmlnode->append(std::move(path)); else { @@ -788,8 +789,8 @@ void PsSpecialHandler::image (std::vector<double> &p) { // if set, assign clipping path to image if (_clipStack.path()) { - auto group = util::make_unique<XMLElement>("g"); - group->addAttribute("clip-path", XMLString("url(#clip")+XMLString(_clipStack.topID())+")"); + auto group = util::make_unique<SVGElement>("g"); + group->setClipPathUrl("clip"+XMLString(_clipStack.topID())); group->append(std::move(image)); image = std::move(group); // handle the entire group as image to add } @@ -846,10 +847,9 @@ void PsSpecialHandler::makepattern (vector<double> &p) { switch (pattern_type) { case 0: // pattern definition completed - if (_savenode) { - _xmlnode = _savenode; - _savenode = nullptr; - } + _xmlnode = _savenode; + _savenode = nullptr; + _makingPattern = false; break; case 1: { // tiling pattern int id = static_cast<int>(p[1]); @@ -869,6 +869,7 @@ void PsSpecialHandler::makepattern (vector<double> &p) { _savenode = _xmlnode; _xmlnode = pattern->getContainerNode(); // insert the following SVG elements into this node _patterns[id] = std::move(pattern); + _makingPattern = true; break; } case 2: { @@ -891,13 +892,9 @@ void PsSpecialHandler::setpattern (vector<double> &p) { if (it == _patterns.end()) _pattern = nullptr; else { - if (auto pattern = dynamic_cast<PSUncoloredTilingPattern*>(it->second.get())) - pattern->setColor(color); + it->second->setColor(color); it->second->apply(*_actions); - if (auto pattern = dynamic_cast<PSTilingPattern*>(it->second.get())) - _pattern = pattern; - else - _pattern = nullptr; + _pattern = it->second->tiled() ? static_cast<PSTilingPattern*>(it->second.get()) : nullptr; } } @@ -961,16 +958,15 @@ void PsSpecialHandler::clip (Path path, bool evenodd) { intersectedPath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); } if (pathReplaced) { - auto pathElem = util::make_unique<XMLElement>("path"); + auto pathElem = util::make_unique<SVGElement>("path"); pathElem->addAttribute("d", oss.str()); - if (evenodd) - pathElem->addAttribute("clip-rule", "evenodd"); + pathElem->setClipRule(evenodd ? SVGElement::FR_EVENODD : SVGElement::FR_NONZERO); int newID = _clipStack.topID(); - auto clipElem = util::make_unique<XMLElement>("clipPath"); + auto clipElem = util::make_unique<SVGElement>("clipPath"); clipElem->addAttribute("id", XMLString("clip")+XMLString(newID)); if (!COMPUTE_CLIPPATHS_INTERSECTIONS && oldID) - clipElem->addAttribute("clip-path", XMLString("url(#clip")+XMLString(oldID)+")"); + clipElem->setClipPathUrl("clip"+XMLString(oldID)); clipElem->append(std::move(pathElem)); _actions->svgTree().appendToDefs(std::move(clipElem)); @@ -1046,7 +1042,7 @@ void PsSpecialHandler::shfill (vector<double> ¶ms) { * @param[in,out] it iterator used to sequentially access the patch data * @param[out] points the points defining the geometry of the patch * @param[out] colors the colors assigned to the vertices of the patch */ -static void read_patch_data (ShadingPatch &patch, int edgeflag, +static void read_patch_data (const ShadingPatch &patch, int edgeflag, VectorIterator<double> &it, vector<DPair> &points, vector<Color> &colors) { // number of control points and colors required to define a single patch @@ -1087,14 +1083,14 @@ class ShadingCallback : public ShadingPatch::Callback { ShadingCallback (SpecialActions &actions, XMLElement *parent, int clippathID) : _actions(actions) { - auto group = util::make_unique<XMLElement>("g"); + auto group = util::make_unique<SVGElement>("g"); _group = group.get(); if (parent) parent->append(std::move(group)); else actions.svgTree().appendToPage(std::move(group)); if (clippathID > 0) - _group->addAttribute("clip-path", XMLString("url(#clip")+XMLString(clippathID)+")"); + _group->setClipPathUrl("clip"+XMLString(clippathID)); } void patchSegment (GraphicsPath<double> &path, const Color &color) override { @@ -1104,15 +1100,15 @@ class ShadingCallback : public ShadingPatch::Callback { // draw a single patch segment ostringstream oss; path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); - auto pathElem = util::make_unique<XMLElement>("path"); + auto pathElem = util::make_unique<SVGElement>("path"); pathElem->addAttribute("d", oss.str()); - pathElem->addAttribute("fill", color.svgColorString()); + pathElem->setFillColor(color); _group->append(std::move(pathElem)); } private: SpecialActions &_actions; - XMLElement *_group; + SVGElement *_group; }; diff --git a/dviware/dvisvgm/src/PsSpecialHandler.hpp b/dviware/dvisvgm/src/PsSpecialHandler.hpp index 8b66499041..72586ba659 100644 --- a/dviware/dvisvgm/src/PsSpecialHandler.hpp +++ b/dviware/dvisvgm/src/PsSpecialHandler.hpp @@ -2,7 +2,7 @@ ** PsSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,12 +28,13 @@ #include <vector> #include "GraphicsPath.hpp" #include "PSInterpreter.hpp" -#include "SpecialHandler.hpp" +#include "Opacity.hpp" #include "PSPattern.hpp" #include "PSPreviewFilter.hpp" - +#include "SpecialHandler.hpp" class PSPattern; +class SVGElement; class XMLElement; class PsSpecialHandler : public SpecialHandler, protected PSActions { @@ -104,7 +105,7 @@ class PsSpecialHandler : public SpecialHandler, protected PSActions { void executeAndSync (std::istream &is, bool updatePos); void processHeaderFile (const char *fname); void imgfile (FileType type, const std::string &fname, const std::map<std::string,std::string> &attr); - std::unique_ptr<XMLElement> createImageNode (FileType type, const std::string &fname, int pageno, BoundingBox bbox, bool clip); + std::unique_ptr<SVGElement> createImageNode (FileType type, const std::string &fname, int pageno, BoundingBox bbox, bool clip); void dviBeginPage (unsigned int pageno, SpecialActions &actions) override; void dviEndPage (unsigned pageno, SpecialActions &actions) override; void clip (Path path, bool evenodd); @@ -138,14 +139,14 @@ class PsSpecialHandler : public SpecialHandler, protected PSActions { void rotate (std::vector<double> &p) override; void save (std::vector<double> &p) override; void scale (std::vector<double> &p) override; - void setblendmode (std::vector<double> &p) override {_blendmode = int(p[0]);} + void setalphaisshape (std::vector<double> &p) override { _isshapealpha = bool(p[0]);} + void setblendmode (std::vector<double> &p) override; void setcolorspace (std::vector<double> &p) override {_patternEnabled = bool(p[0]);} void setcmykcolor (std::vector<double> &cmyk) override; void setdash (std::vector<double> &p) override; - void setfillconstantalpha (std::vector<double> &p) override {_fillalpha[_isshapealpha ? 1 : 0] = p[0];} + void setfillconstantalpha (std::vector<double> &p) override; void setgray (std::vector<double> &p) override; void sethsbcolor (std::vector<double> &hsb) override; - void setisshapealpha (std::vector<double> &p) override {_isshapealpha = bool(p[0]);} void setlinecap (std::vector<double> &p) override {_linecap = uint8_t(p[0]);} void setlinejoin (std::vector<double> &p) override {_linejoin = uint8_t(p[0]);} void setlinewidth (std::vector<double> &p) override {_linewidth = scale(p[0] ? p[0] : 0.5);} @@ -155,7 +156,7 @@ class PsSpecialHandler : public SpecialHandler, protected PSActions { void setpagedevice (std::vector<double> &p) override; void setpattern (std::vector<double> &p) override; void setrgbcolor (std::vector<double> &rgb) override; - void setstrokeconstantalpha (std::vector<double> &p) override {_strokealpha[_isshapealpha ? 1 : 0] = p[0];} + void setstrokeconstantalpha (std::vector<double> &p) override; void shfill (std::vector<double> &p) override; void stroke (std::vector<double> &p) override; void translate (std::vector<double> &p) override; @@ -176,15 +177,14 @@ class PsSpecialHandler : public SpecialHandler, protected PSActions { double _cos; ///< cosine of angle between (1,0) and transform(1,0) double _linewidth; ///< current line width in bp units double _miterlimit; ///< current miter limit in bp units - bool _isshapealpha; ///< if true, opacity operators act on index 1 (shape component), otherwise on index 0 (constant component) - std::array<double,2> _fillalpha; ///< constant and shape opacity used for fill operations (0=fully transparent, ..., 1=opaque) - std::array<double,2> _strokealpha; ///< constant and shape opacity used for stroke operations (0=fully transparent, ..., 1=opaque) - int _blendmode; ///< blend mode used when overlaying colored areas + bool _isshapealpha; ///< if true, opacity operators act on shape component, otherwise on constant component + Opacity _opacity; uint8_t _linecap : 2; ///< current line cap (0=butt, 1=round, 2=projecting square) uint8_t _linejoin : 2; ///< current line join (0=miter, 1=round, 2=bevel) double _dashoffset; ///< current dash offset std::vector<double> _dashpattern; ClippingStack _clipStack; + bool _makingPattern=false; ///< true if executing makepattern operator std::map<int, std::unique_ptr<PSPattern>> _patterns; PSTilingPattern *_pattern; ///< current pattern bool _patternEnabled; ///< true if active color space is a pattern diff --git a/dviware/dvisvgm/src/RangeMap.cpp b/dviware/dvisvgm/src/RangeMap.cpp index 86190cacf9..27aa8bc427 100644 --- a/dviware/dvisvgm/src/RangeMap.cpp +++ b/dviware/dvisvgm/src/RangeMap.cpp @@ -2,7 +2,7 @@ ** RangeMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -82,14 +82,14 @@ void RangeMap::addRange (uint32_t cmin, uint32_t cmax, uint32_t vmin) { Range range(cmin, cmax, vmin); if (_ranges.empty()) - _ranges.emplace_back(std::move(range)); + _ranges.push_back(std::move(range)); else { // check for simple cases that can be handled pretty fast Range &lrange = *_ranges.begin(); Range &rrange = *_ranges.rbegin(); if (cmin > rrange.max()) { // non-overlapping range at end of vector? if (!rrange.join(range)) - _ranges.emplace_back(std::move(range)); + _ranges.push_back(std::move(range)); } else if (cmax < lrange.min()) { // non-overlapping range at begin of vector? if (!lrange.join(range)) diff --git a/dviware/dvisvgm/src/RangeMap.hpp b/dviware/dvisvgm/src/RangeMap.hpp index 3e3bff9d4b..3f5cb7a6e5 100644 --- a/dviware/dvisvgm/src/RangeMap.hpp +++ b/dviware/dvisvgm/src/RangeMap.hpp @@ -2,7 +2,7 @@ ** RangeMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SVGCharHandler.cpp b/dviware/dvisvgm/src/SVGCharHandler.cpp index f8d75a28d3..3b3f4d3f31 100644 --- a/dviware/dvisvgm/src/SVGCharHandler.cpp +++ b/dviware/dvisvgm/src/SVGCharHandler.cpp @@ -2,7 +2,7 @@ ** SVGCharHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -20,12 +20,12 @@ #include "SVGCharHandler.hpp" #include "utility.hpp" -#include "XMLNode.hpp" +#include "SVGElement.hpp" using namespace std; -void SVGCharHandler::setInitialContextNode (XMLElement *node) { +void SVGCharHandler::setInitialContextNode (SVGElement *node) { resetContextNode(); _initialContextNode = node; } @@ -34,9 +34,9 @@ void SVGCharHandler::setInitialContextNode (XMLElement *node) { /** Changes the context element. All following nodes will be appended to this node. * @param[in] node the new context node * @return bare pointer to the new context node or 0 if context hasn't changed */ -XMLElement* SVGCharHandler::pushContextNode (unique_ptr<XMLElement> node) { +SVGElement* SVGCharHandler::pushContextNode (unique_ptr<SVGElement> node) { if (node && (_contextNodeStack.empty() || node.get() != _contextNodeStack.top())) { - XMLElement *nodeptr = node.get(); + SVGElement *nodeptr = node.get(); contextNode()->append(std::move(node)); _contextNodeStack.push(nodeptr); return nodeptr; @@ -61,23 +61,22 @@ void SVGCharHandler::resetContextNode () { /** Creates and returns a new SVG text element. * @param[in] x current x coordinate * @param[in] y current y coordinate */ -unique_ptr<XMLElement> SVGCharTextHandler::createTextNode (double x, double y) const { +unique_ptr<SVGElement> SVGCharTextHandler::createTextNode (double x, double y) const { const Font *font = _font.get(); if (!font) return nullptr; - auto textNode = util::make_unique<XMLElement>("text"); + auto textNode = util::make_unique<SVGElement>("text"); if (_selectFontByClass) textNode->addAttribute("class", string("f")+XMLString(_fontnum)); else { textNode->addAttribute("font-family", font->name()); - textNode->addAttribute("font-size", XMLString(font->scaledSize())); - if (font->color() != Color::BLACK) - textNode->addAttribute("fill", font->color().svgColorString()); + textNode->addAttribute("font-size", font->scaledSize()); + textNode->setFillColor(font->color()); } if (_vertical) { textNode->addAttribute("writing-mode", "tb"); // align glyphs designed for horizontal layout properly - if (auto pf = dynamic_cast<const PhysicalFont*>(font)) { + if (auto pf = font_cast<const PhysicalFont*>(font)) { if (!pf->getMetrics()->verticalLayout()) { // alphabetic text designed for horizontal layout? x += pf->scaledAscent()/2.5; // move vertical baseline to the right by strikethrough offset textNode->addAttribute("glyph-orientation-vertical", 90); // ensure rotation @@ -86,7 +85,7 @@ unique_ptr<XMLElement> SVGCharTextHandler::createTextNode (double x, double y) c } textNode->addAttribute("x", x); textNode->addAttribute("y", y); - if (!_matrix.get().isIdentity()) - textNode->addAttribute("transform", _matrix.get().toSVG()); + if (!_matrix->isIdentity()) + textNode->addAttribute("transform", _matrix->toSVG()); return textNode; } diff --git a/dviware/dvisvgm/src/SVGCharHandler.hpp b/dviware/dvisvgm/src/SVGCharHandler.hpp index f75df47215..99ac4af858 100644 --- a/dviware/dvisvgm/src/SVGCharHandler.hpp +++ b/dviware/dvisvgm/src/SVGCharHandler.hpp @@ -2,7 +2,7 @@ ** SVGCharHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -26,12 +26,15 @@ #include "Color.hpp" #include "Font.hpp" #include "Matrix.hpp" +#include "Opacity.hpp" template <typename T> class CharProperty { public: + CharProperty () =default; CharProperty (const T &v) : _value(v) {} + CharProperty (T &&v) : _value(std::move(v)) {} void set (const T &v) { if (v != _value) { @@ -40,10 +43,11 @@ class CharProperty { } } - const T& get () const {return _value;} - operator const T& () const {return _value;} - bool changed () const {return _changed;} - void changed (bool c) {_changed = c;} + const T& get () const {return _value;} + const T* operator -> () const {return &_value;} + operator const T& () const {return _value;} + bool changed () const {return _changed;} + void changed (bool c) {_changed = c;} private: T _value; @@ -51,7 +55,7 @@ class CharProperty { }; -class XMLElement; +class SVGElement; /** Base class for all character handlers. These handlers create SVG representations @@ -60,36 +64,39 @@ class SVGCharHandler { public: SVGCharHandler () : _matrix(1) {} virtual ~SVGCharHandler() =default; - virtual void setInitialContextNode (XMLElement *node); + virtual void setInitialContextNode (SVGElement *node); virtual void appendChar (uint32_t c, double x, double y) =0; virtual void notifyXAdjusted () {} virtual void notifyYAdjusted () {} - void setColor (const Color &color) {_color.set(color);} - void setFont (const Font &font, int id) {_font.set(&font); _fontnum = id;} - void setMatrix (const Matrix &matrix) {_matrix.set(matrix);} - void setVertical (bool vertical) {_vertical.set(vertical);} - Color getColor () const {return _color.get();} - const Font* getFont () const {return _font.get();} - const Matrix& getMatrix () const {return _matrix.get();} + void setColor (const Color &color) {_color.set(color);} + void setOpacity (const Opacity &opacity) {_opacity.set(opacity);} + void setFont (const Font &font, int id) {_font.set(&font); _fontnum = id;} + void setMatrix (const Matrix &matrix) {_matrix.set(matrix);} + void setVertical (bool vertical) {_vertical.set(vertical);} + Color getColor () const {return _color.get();} + const Opacity& getOpacity () const {return _opacity.get();} + const Font* getFont () const {return _font.get();} + const Matrix& getMatrix () const {return _matrix.get();} protected: virtual void resetContextNode (); - XMLElement* pushContextNode (std::unique_ptr<XMLElement> node); + SVGElement* pushContextNode (std::unique_ptr<SVGElement> node); void popContextNode (); - XMLElement* contextNode () const { + SVGElement* contextNode () const { return _contextNodeStack.empty() ? _initialContextNode : _contextNodeStack.top(); } CharProperty<Color> _color=Color::BLACK; ///< current color + CharProperty<Opacity> _opacity; ///< current opacity values CharProperty<const Font*> _font=0; ///< current font int _fontnum=0; ///< current font ID CharProperty<Matrix> _matrix; ///< current transformation CharProperty<bool> _vertical=false; ///< current writing mode private: - XMLElement *_initialContextNode= nullptr; ///< SVG element the generated character nodes are attached to - std::stack<XMLElement*> _contextNodeStack; + SVGElement *_initialContextNode= nullptr; ///< SVG element the generated character nodes are attached to + std::stack<SVGElement*> _contextNodeStack; }; @@ -99,7 +106,7 @@ class SVGCharTextHandler : public SVGCharHandler { explicit SVGCharTextHandler (bool selectFontByClass) : _selectFontByClass(selectFontByClass) {} protected: - std::unique_ptr<XMLElement> createTextNode (double x, double y) const; + std::unique_ptr<SVGElement> createTextNode (double x, double y) const; private: bool _selectFontByClass; diff --git a/dviware/dvisvgm/src/SVGCharHandlerFactory.cpp b/dviware/dvisvgm/src/SVGCharHandlerFactory.cpp index 397943ace0..0a4666f5ae 100644 --- a/dviware/dvisvgm/src/SVGCharHandlerFactory.cpp +++ b/dviware/dvisvgm/src/SVGCharHandlerFactory.cpp @@ -2,7 +2,7 @@ ** SVGCharHandlerFactory.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SVGCharHandlerFactory.hpp b/dviware/dvisvgm/src/SVGCharHandlerFactory.hpp index f37b9977c2..a43257bc15 100644 --- a/dviware/dvisvgm/src/SVGCharHandlerFactory.hpp +++ b/dviware/dvisvgm/src/SVGCharHandlerFactory.hpp @@ -2,7 +2,7 @@ ** SVGCharHandlerFactory.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SVGCharPathHandler.cpp b/dviware/dvisvgm/src/SVGCharPathHandler.cpp index 7a766bae49..2aa9209dda 100644 --- a/dviware/dvisvgm/src/SVGCharPathHandler.cpp +++ b/dviware/dvisvgm/src/SVGCharPathHandler.cpp @@ -2,7 +2,7 @@ ** SVGCharPathHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,7 +23,7 @@ #include "FontManager.hpp" #include "SVGCharPathHandler.hpp" #include "utility.hpp" -#include "XMLNode.hpp" +#include "SVGElement.hpp" using namespace std; @@ -61,22 +61,23 @@ void SVGCharPathHandler::appendChar (uint32_t c, double x, double y) { // Glyphs of non-black fonts (e.g. defined in a XeTeX document) can't change their color. CharProperty<Color> &color = (_fontColor.get() != Color::BLACK) ? _fontColor : _color; bool applyColor = color.get() != Color::BLACK; - bool applyMatrix = !_matrix.get().isIdentity(); + bool applyMatrix = !_matrix->isIdentity(); + bool applyOpacity = !_opacity->isFillDefault(); if (!_groupNode) { color.changed(applyColor); _matrix.changed(applyMatrix); } - if (color.changed() || _matrix.changed()) { + if (color.changed() || _matrix.changed() || _opacity.changed()) { resetContextNode(); - if (applyColor || applyMatrix) { - _groupNode = pushContextNode(util::make_unique<XMLElement>("g")); - if (applyColor) - contextNode()->addAttribute("fill", color.get().svgColorString()); - if (applyMatrix) - contextNode()->addAttribute("transform", _matrix.get().toSVG()); + if (applyColor || applyMatrix || applyOpacity) { + _groupNode = pushContextNode(util::make_unique<SVGElement>("g")); + contextNode()->setFillColor(color); + contextNode()->setFillOpacity(_opacity->fillalpha()); + contextNode()->setTransform(_matrix); } color.changed(false); _matrix.changed(false); + _opacity.changed(false); } const Font *font = _font.get(); if (font->verticalLayout()) { @@ -84,12 +85,12 @@ void SVGCharPathHandler::appendChar (uint32_t c, double x, double y) { GlyphMetrics metrics; font->getGlyphMetrics(c, _vertical, metrics); x -= metrics.wl; - if (auto pf = dynamic_cast<const PhysicalFont*>(font)) { + if (auto pf = font_cast<const PhysicalFont*>(font)) { // Center glyph between top and bottom border of the TFM box. // This is just an approximation used until I find a way to compute // the exact location in vertical mode. GlyphMetrics exact_metrics; - pf->getExactGlyphBox(c, exact_metrics, false); + pf->getExactGlyphBox(c, exact_metrics, false, nullptr); y += exact_metrics.h+(metrics.d-exact_metrics.h-exact_metrics.d)/2; } else @@ -109,28 +110,27 @@ void SVGCharPathHandler::appendChar (uint32_t c, double x, double y) { void SVGCharPathHandler::appendUseElement (uint32_t c, double x, double y, const Matrix &matrix) { string id = "#g" + to_string(FontManager::instance().fontID(_font)) + "-" + to_string(c); - auto useNode = util::make_unique<XMLElement>("use"); - useNode->addAttribute("x", XMLString(x)); - useNode->addAttribute("y", XMLString(y)); + auto useNode = util::make_unique<SVGElement>("use"); + useNode->addAttribute("x", x); + useNode->addAttribute("y", y); useNode->addAttribute("xlink:href", id); - if (!matrix.isIdentity()) - useNode->addAttribute("transform", matrix.toSVG()); + useNode->setFillOpacity(_opacity->blendMode()); // add blend mode style here because it's not inheritable + useNode->setTransform(matrix); contextNode()->append(std::move(useNode)); } void SVGCharPathHandler::appendPathElement (uint32_t c, double x, double y, const Matrix &matrix) { Glyph glyph; - auto pf = dynamic_cast<const PhysicalFont*>(_font.get()); - if (pf && pf->getGlyph(c, glyph)) { + auto pf = font_cast<const PhysicalFont*>(_font.get()); + if (pf && pf->getGlyph(c, glyph, nullptr)) { double sx = pf->scaledSize()/pf->unitsPerEm(); double sy = -sx; ostringstream oss; glyph.writeSVG(oss, _relativePathCommands, sx, sy, x, y); - auto glyphNode = util::make_unique<XMLElement>("path"); + auto glyphNode = util::make_unique<SVGElement>("path"); glyphNode->addAttribute("d", oss.str()); - if (!matrix.isIdentity()) - glyphNode->addAttribute("transform", matrix.toSVG()); + glyphNode->setTransform(matrix); contextNode()->append(std::move(glyphNode)); } } diff --git a/dviware/dvisvgm/src/SVGCharPathHandler.hpp b/dviware/dvisvgm/src/SVGCharPathHandler.hpp index c404cbcd5a..4ecdd5272e 100644 --- a/dviware/dvisvgm/src/SVGCharPathHandler.hpp +++ b/dviware/dvisvgm/src/SVGCharPathHandler.hpp @@ -2,7 +2,7 @@ ** SVGCharPathHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -39,7 +39,7 @@ class SVGCharPathHandler : public SVGCharHandler { private: AppendMethod _appendChar; ///< method called to append a single character bool _relativePathCommands; ///< if true, create relative rather than absolute SVG path commands - XMLElement *_groupNode=nullptr; ///< current group node taking the path elements + SVGElement *_groupNode=nullptr; ///< current group node taking the path elements CharProperty<Color> _fontColor=Color::BLACK; ///< color of current font }; diff --git a/dviware/dvisvgm/src/SVGCharTspanTextHandler.cpp b/dviware/dvisvgm/src/SVGCharTspanTextHandler.cpp index 6b89348dc1..5c9d57f8a9 100644 --- a/dviware/dvisvgm/src/SVGCharTspanTextHandler.cpp +++ b/dviware/dvisvgm/src/SVGCharTspanTextHandler.cpp @@ -2,7 +2,7 @@ ** SVGCharTspanTextHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -20,7 +20,7 @@ #include "SVGCharTspanTextHandler.hpp" #include "utility.hpp" -#include "XMLNode.hpp" +#include "SVGElement.hpp" using namespace std; @@ -36,9 +36,10 @@ void SVGCharTspanTextHandler::appendChar (uint32_t c, double x, double y) { if (!_textNode || _font.changed() || _matrix.changed() || _vertical.changed()) { resetContextNode(); _textNode = pushContextNode(createTextNode(x, y)); - _color.changed(true); // force creating tspan with color attribute if current color differs from font color + _color.changed(true); // force creating tspan with color attribute if current color differs from font color + _opacity.changed(true); // dito for opacity properties } - if (_tspanNode && (_xchanged || _ychanged || _color.changed())) { + if (_tspanNode && (_xchanged || _ychanged || _color.changed() || _opacity.changed())) { // if drawing position or color was explicitly changed, finish current tspan element popContextNode(); _tspanNode = nullptr; @@ -46,15 +47,18 @@ void SVGCharTspanTextHandler::appendChar (uint32_t c, double x, double y) { // Apply text color changes only if the color of the entire font is black. // Glyphs of non-black fonts (e.g. defined in a XeTeX document) can't change their color. bool applyColor = _color.get() != Color::BLACK && _font.get()->color() == Color::BLACK; - if (_xchanged || _ychanged || (_color.changed() && applyColor)) { - _tspanNode = pushContextNode(util::make_unique<XMLElement>("tspan")); + bool applyOpacity = !_opacity->isFillDefault(); + if (_xchanged || _ychanged || (_color.changed() && applyColor) || (_opacity.changed() && applyOpacity)) { + _tspanNode = pushContextNode(util::make_unique<SVGElement>("tspan")); if (applyColor) - _tspanNode->addAttribute("fill", _color.get().svgColorString()); + _tspanNode->setFillColor(_color); _color.changed(false); + _tspanNode->setFillOpacity(_opacity); + _opacity.changed(false); if (_xchanged) { if (_vertical) { // align glyphs designed for horizontal layout properly - if (auto pf = dynamic_cast<const PhysicalFont*>(_font.get())) + if (auto pf = font_cast<const PhysicalFont*>(_font.get())) if (!pf->getMetrics()->verticalLayout()) x += pf->scaledAscent()/2.5; // move vertical baseline to the right by strikethrough offset } @@ -70,7 +74,7 @@ void SVGCharTspanTextHandler::appendChar (uint32_t c, double x, double y) { } -void SVGCharTspanTextHandler::setInitialContextNode (XMLElement *node) { +void SVGCharTspanTextHandler::setInitialContextNode (SVGElement *node) { SVGCharHandler::setInitialContextNode(node); _textNode = _tspanNode = nullptr; _xchanged = _ychanged = false; diff --git a/dviware/dvisvgm/src/SVGCharTspanTextHandler.hpp b/dviware/dvisvgm/src/SVGCharTspanTextHandler.hpp index b847965a1a..28ec792ece 100644 --- a/dviware/dvisvgm/src/SVGCharTspanTextHandler.hpp +++ b/dviware/dvisvgm/src/SVGCharTspanTextHandler.hpp @@ -2,7 +2,7 @@ ** SVGCharTspanTextHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -29,15 +29,15 @@ class SVGCharTspanTextHandler : public SVGCharTextHandler { void notifyXAdjusted () override {_xchanged = true;} void notifyYAdjusted() override {_ychanged = true;} void appendChar (uint32_t c, double x, double y) override; - void setInitialContextNode (XMLElement *node) override; + void setInitialContextNode (SVGElement *node) override; protected: void resetContextNode () override; private: bool _xchanged, _ychanged; - XMLElement *_textNode; - XMLElement *_tspanNode; + SVGElement *_textNode; + SVGElement *_tspanNode; }; #endif diff --git a/dviware/dvisvgm/src/SVGElement.cpp b/dviware/dvisvgm/src/SVGElement.cpp new file mode 100644 index 0000000000..129bb22c82 --- /dev/null +++ b/dviware/dvisvgm/src/SVGElement.cpp @@ -0,0 +1,153 @@ +/************************************************************************* +** SVGElement.cpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#include <sstream> +#include "Color.hpp" +#include "Matrix.hpp" +#include "Opacity.hpp" +#include "SVGElement.hpp" +#include "XMLString.hpp" + +using namespace std; + + +void SVGElement::setClipPathUrl (const string &url) { + if (!url.empty()) + addAttribute("clip-path", "url(#"+url+")"); +} + + +void SVGElement::setClipRule (FillRule rule) { + if (rule != FR_NONZERO) + addAttribute("clip-rule", "evenodd"); +} + + +void SVGElement::setFillColor (Color color, bool skipBlack) { + if (color != Color::BLACK || !skipBlack) + addAttribute("fill", color.svgColorString()); +} + + +void SVGElement::setFillOpacity (const Opacity &opacity) { + if (!opacity.isFillDefault()) { + setFillOpacity(opacity.fillalpha()); + setFillOpacity(opacity.blendMode()); + } +} + + +void SVGElement::setFillOpacity (const OpacityAlpha &alpha) { + if (!alpha.isOpaque()) + addAttribute("fill-opacity", alpha.value()); +} + + +void SVGElement::setFillOpacity (Opacity::BlendMode blendMode) { + if (blendMode != Opacity::BM_NORMAL) + addAttribute("style", "mix-blend-mode:"+Opacity::cssBlendMode(blendMode)); +} + + +void SVGElement::setFillRule (FillRule rule) { + if (rule != FR_NONZERO) + addAttribute("fill-rule", "evenodd"); +} + + +void SVGElement::setFillPatternUrl (const std::string &url) { + if (!url.empty()) + addAttribute("fill", "url(#" + url + ")"); +} + + +void SVGElement::setNoFillColor () { + addAttribute("fill", "none"); +} + + +void SVGElement::setPoints (const vector<DPair> &points) { + if (!points.empty()) { + ostringstream oss; + for (const DPair &p : points) + oss << XMLString(p.x()) << ' ' << XMLString(p.y()) << ' '; + string str = oss.str(); + str.pop_back(); + addAttribute("points", str); + } +} + + +void SVGElement::setStrokeColor (Color color) { + addAttribute("stroke", color.svgColorString()); +} + + +void SVGElement::setStrokeDash (const vector<double> &pattern, double offset) { + if (!pattern.empty()) { + string patternStr; + for (double dashValue : pattern) + patternStr += XMLString(dashValue)+" "; + patternStr.pop_back(); + addAttribute("stroke-dasharray", patternStr); + if (offset != 0) + addAttribute("stroke-dashoffset", offset); + } +} + + +void SVGElement::setStrokeLineCap (LineCap cap) { + if (cap != LC_BUTT) + addAttribute("stroke-linecap", cap == LC_ROUND ? "round" : "square"); +} + + +void SVGElement::setStrokeLineJoin (LineJoin join) { + if (join != LJ_MITER) + addAttribute("stroke-linejoin", join == LJ_BEVEL ? "bevel" : "round"); +} + + +void SVGElement::setStrokeMiterLimit (double limit) { + if (limit != 4) + addAttribute("stroke-miterlimit", limit); +} + + +void SVGElement::setStrokeOpacity (const Opacity &opacity) { + if (!opacity.isStrokeDefault()) { + if (!opacity.strokealpha().isOpaque()) + addAttribute("stroke-opacity", opacity.strokealpha().value()); + if (opacity.blendMode() != Opacity::BM_NORMAL) + addAttribute("style", "mix-blend-mode:"+opacity.cssBlendMode()); + } +} + + +void SVGElement::setStrokeWidth (double width) { + if (width != 1) + addAttribute("stroke-width", width); +} + + +void SVGElement::setTransform (const Matrix &matrix) { + if (!matrix.isIdentity()) + addAttribute("transform", matrix.toSVG()); +} diff --git a/dviware/dvisvgm/src/SVGElement.hpp b/dviware/dvisvgm/src/SVGElement.hpp new file mode 100644 index 0000000000..c3d68bf593 --- /dev/null +++ b/dviware/dvisvgm/src/SVGElement.hpp @@ -0,0 +1,60 @@ +/************************************************************************* +** SVGElement.hpp ** +** ** +** This file is part of dvisvgm -- a fast DVI to SVG converter ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** +** ** +** This program is free software; you can redistribute it and/or ** +** modify it under the terms of the GNU General Public License as ** +** published by the Free Software Foundation; either version 3 of ** +** the License, or (at your option) any later version. ** +** ** +** This program is distributed in the hope that it will be useful, but ** +** WITHOUT ANY WARRANTY; without even the implied warranty of ** +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** +** GNU General Public License for more details. ** +** ** +** You should have received a copy of the GNU General Public License ** +** along with this program; if not, see <http://www.gnu.org/licenses/>. ** +*************************************************************************/ + +#ifndef SVGELEMENT_HPP +#define SVGELEMENT_HPP + +#include "XMLNode.hpp" + +class Color; +class Matrix; +class Opacity; + +class SVGElement : public XMLElement { + public: + enum FillRule {FR_EVENODD, FR_NONZERO}; + enum LineCap {LC_BUTT, LC_ROUND, LC_SQUARE}; + enum LineJoin {LJ_BEVEL, LJ_MITER, LJ_ROUND}; + + public: + explicit SVGElement (std::string name) : XMLElement(std::move(name)) {} + explicit SVGElement (const XMLElement &node) : XMLElement(node) {} + explicit SVGElement (XMLElement &&node) noexcept : XMLElement(std::move(node)) {} + void setClipPathUrl (const std::string &url); + void setClipRule (FillRule rule); + void setFillColor (Color color, bool skipBlack=true); + void setFillOpacity (const Opacity &opacity); + void setFillOpacity (const OpacityAlpha &alpha); + void setFillOpacity (Opacity::BlendMode blendMode); + void setFillPatternUrl (const std::string &url); + void setFillRule (FillRule rule); + void setNoFillColor (); + void setPoints (const std::vector<DPair> &points); + void setStrokeColor (Color color); + void setStrokeDash (const std::vector<double> &pattern, double offset=0); + void setStrokeLineCap (LineCap cap); + void setStrokeLineJoin (LineJoin join); + void setStrokeOpacity (const Opacity &opacity); + void setStrokeWidth (double width); + void setStrokeMiterLimit (double limit); + void setTransform (const Matrix &matrix); +}; + +#endif diff --git a/dviware/dvisvgm/src/SVGOutput.cpp b/dviware/dvisvgm/src/SVGOutput.cpp index 18702be776..59a26764a7 100644 --- a/dviware/dvisvgm/src/SVGOutput.cpp +++ b/dviware/dvisvgm/src/SVGOutput.cpp @@ -2,7 +2,7 @@ ** SVGOutput.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SVGOutput.hpp b/dviware/dvisvgm/src/SVGOutput.hpp index f29a032674..96acf807e3 100644 --- a/dviware/dvisvgm/src/SVGOutput.hpp +++ b/dviware/dvisvgm/src/SVGOutput.hpp @@ -2,7 +2,7 @@ ** SVGOutput.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SVGSingleCharTextHandler.cpp b/dviware/dvisvgm/src/SVGSingleCharTextHandler.cpp index 89d1c548b0..4cece0bdab 100644 --- a/dviware/dvisvgm/src/SVGSingleCharTextHandler.cpp +++ b/dviware/dvisvgm/src/SVGSingleCharTextHandler.cpp @@ -2,7 +2,7 @@ ** SVGSingleCharTextHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -19,7 +19,7 @@ *************************************************************************/ #include "SVGSingleCharTextHandler.hpp" -#include "XMLNode.hpp" +#include "SVGElement.hpp" using namespace std; @@ -29,9 +29,11 @@ void SVGSingleCharTextHandler::appendChar (uint32_t c, double x, double y) { textNode->append(XMLString(font->unicode(c), false)); // Apply color changes only if the color differs from black and if the font color itself is black. // Glyphs from non-black fonts (e.g. defined in a XeTeX document) can't change their color. - if (_color.get() != Color::BLACK && font->color() == Color::BLACK) { - textNode->addAttribute("fill", _color.get().svgColorString()); - _color.changed(false); - } + if (_color.get() != Color::BLACK && font->color() == Color::BLACK) + textNode->setFillColor(_color); + _color.changed(false); + if (!_opacity->isFillDefault()) + textNode->setFillOpacity(_opacity); + _opacity.changed(false); contextNode()->append(std::move(textNode)); } diff --git a/dviware/dvisvgm/src/SVGSingleCharTextHandler.hpp b/dviware/dvisvgm/src/SVGSingleCharTextHandler.hpp index 67fcabd44c..57f05a4b07 100644 --- a/dviware/dvisvgm/src/SVGSingleCharTextHandler.hpp +++ b/dviware/dvisvgm/src/SVGSingleCharTextHandler.hpp @@ -2,7 +2,7 @@ ** SVGSingleCharTextHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SVGTree.cpp b/dviware/dvisvgm/src/SVGTree.cpp index e35a14d9b3..f501a2c85b 100644 --- a/dviware/dvisvgm/src/SVGTree.cpp +++ b/dviware/dvisvgm/src/SVGTree.cpp @@ -2,7 +2,7 @@ ** SVGTree.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -31,7 +31,6 @@ #include "SVGCharHandlerFactory.hpp" #include "SVGTree.hpp" #include "XMLDocument.hpp" -#include "XMLNode.hpp" #include "XMLString.hpp" using namespace std; @@ -55,7 +54,7 @@ SVGTree::SVGTree () : _charHandler(SVGCharHandlerFactory::createHandler()) { /** Clears the SVG tree and initializes the root element. */ void SVGTree::reset () { _doc.clear(); - auto rootNode = util::make_unique<XMLElement>("svg"); + auto rootNode = util::make_unique<SVGElement>("svg"); rootNode->addAttribute("version", "1.1"); rootNode->addAttribute("xmlns", "http://www.w3.org/2000/svg"); rootNode->addAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); @@ -111,20 +110,20 @@ bool SVGTree::setFontFormat (string formatstr) { /** Starts a new page. * @param[in] pageno number of new page */ void SVGTree::newPage (int pageno) { - auto pageNode = util::make_unique<XMLElement>("g"); + auto pageNode = util::make_unique<SVGElement>("g"); if (pageno >= 0) pageNode->addAttribute("id", string("page")+XMLString(pageno)); _charHandler->setInitialContextNode(pageNode.get()); _page = pageNode.get(); _root->append(std::move(pageNode)); - _defsContextStack = stack<XMLElement*>(); - _pageContextStack = stack<XMLElement*>(); + _defsContextStack = stack<SVGElement*>(); + _pageContextStack = stack<SVGElement*>(); } void SVGTree::appendToDefs (unique_ptr<XMLNode> node) { if (!_defs) { - auto defsNode = util::make_unique<XMLElement>("defs"); + auto defsNode = util::make_unique<SVGElement>("defs"); _defs = defsNode.get(); _root->prepend(std::move(defsNode)); } @@ -134,7 +133,7 @@ void SVGTree::appendToDefs (unique_ptr<XMLNode> node) { void SVGTree::appendToPage (unique_ptr<XMLNode> node) { - XMLElement *parent = _pageContextStack.empty() ? _page : _pageContextStack.top(); + SVGElement *parent = _pageContextStack.empty() ? _page : _pageContextStack.top(); parent->append(std::move(node)); _charHandler->setInitialContextNode(parent); } @@ -149,8 +148,7 @@ void SVGTree::prependToPage (unique_ptr<XMLNode> node) { void SVGTree::transformPage (const Matrix &usermatrix) { - if (!usermatrix.isIdentity()) - _page->addAttribute("transform", usermatrix.toSVG()); + _page->setTransform(usermatrix); } @@ -171,8 +169,8 @@ static unique_ptr<XMLElement> createGlyphNode (int c, const PhysicalFont &font, double extend = font.style() ? font.style()->extend : 1; glyphNode = util::make_unique<XMLElement>("glyph"); glyphNode->addAttribute("unicode", XMLString(font.unicode(c), false)); - glyphNode->addAttribute("horiz-adv-x", XMLString(font.hAdvance(c)*extend)); - glyphNode->addAttribute("vert-adv-y", XMLString(font.vAdvance(c))); + glyphNode->addAttribute("horiz-adv-x", font.hAdvance(c)*extend); + glyphNode->addAttribute("vert-adv-y", font.vAdvance(c)); string name = font.glyphName(c); if (!name.empty()) glyphNode->addAttribute("glyph-name", name); @@ -192,7 +190,7 @@ static unique_ptr<XMLElement> createGlyphNode (int c, const PhysicalFont &font, static string font_info (const Font &font) { ostringstream oss; - if (auto nf = dynamic_cast<const NativeFont*>(&font)) { + if (auto nf = font_cast<const NativeFont*>(&font)) { oss << nf->familyName() << ' ' << nf->styleName() << "; " << nf->filename(); if (nf->style()) { if (nf->style()->bold != 0) @@ -211,7 +209,7 @@ void SVGTree::appendFontStyles (const unordered_set<const Font*> &fonts) { if (CREATE_CSS && USE_FONTS && !fonts.empty() && _page) { map<int, const Font*> sortmap; for (const Font *font : fonts) - if (!dynamic_cast<const VirtualFont*>(font)) // skip virtual fonts + if (!font_cast<const VirtualFont*>(font)) // skip virtual fonts sortmap[FontManager::instance().fontID(font)] = font; ostringstream style; // add font style definitions in ascending order @@ -260,14 +258,14 @@ void SVGTree::append (const PhysicalFont &font, const set<int> &chars, GFGlyphTr auto fontNode = util::make_unique<XMLElement>("font"); string fontname = font.name(); fontNode->addAttribute("id", fontname); - fontNode->addAttribute("horiz-adv-x", XMLString(font.hAdvance())); + fontNode->addAttribute("horiz-adv-x", font.hAdvance()); auto faceNode = util::make_unique<XMLElement>("font-face"); faceNode->addAttribute("font-family", fontname); - faceNode->addAttribute("units-per-em", XMLString(font.unitsPerEm())); + faceNode->addAttribute("units-per-em", font.unitsPerEm()); if (!font.verticalLayout()) { - faceNode->addAttribute("ascent", XMLString(font.ascent())); - faceNode->addAttribute("descent", XMLString(font.descent())); + faceNode->addAttribute("ascent", font.ascent()); + faceNode->addAttribute("descent", font.descent()); } fontNode->append(std::move(faceNode)); for (int c : chars) @@ -297,8 +295,8 @@ void SVGTree::append (const PhysicalFont &font, const set<int> &chars, GFGlyphTr } -void SVGTree::pushDefsContext (unique_ptr<XMLElement> node) { - XMLElement *nodePtr = node.get(); +void SVGTree::pushDefsContext (unique_ptr<SVGElement> node) { + SVGElement *nodePtr = node.get(); if (_defsContextStack.empty()) appendToDefs(std::move(node)); else @@ -314,8 +312,8 @@ void SVGTree::popDefsContext () { /** Pushes a new context element that will take all following nodes added to the page. */ -void SVGTree::pushPageContext (unique_ptr<XMLElement> node) { - XMLElement *nodePtr = node.get(); +void SVGTree::pushPageContext (unique_ptr<SVGElement> node) { + SVGElement *nodePtr = node.get(); if (_pageContextStack.empty()) _page->append(std::move(node)); else diff --git a/dviware/dvisvgm/src/SVGTree.hpp b/dviware/dvisvgm/src/SVGTree.hpp index a441a314a5..86d9411449 100644 --- a/dviware/dvisvgm/src/SVGTree.hpp +++ b/dviware/dvisvgm/src/SVGTree.hpp @@ -2,7 +2,7 @@ ** SVGTree.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -31,13 +31,14 @@ #include "GFGlyphTracer.hpp" #include "Matrix.hpp" #include "SVGCharHandler.hpp" +#include "SVGElement.hpp" #include "XMLDocument.hpp" -#include "XMLNode.hpp" class BoundingBox; class Color; class Font; class Matrix; +class Opacity; class PhysicalFont; class SVGTree { @@ -54,24 +55,26 @@ class SVGTree { void appendChar (int c, double x, double y) {_charHandler->appendChar(c, x, y);} void appendFontStyles (const std::unordered_set<const Font*> &fonts); void append (const PhysicalFont &font, const std::set<int> &chars, GFGlyphTracer::Callback *callback=nullptr); - void pushDefsContext (std::unique_ptr<XMLElement> node); + void pushDefsContext (std::unique_ptr<SVGElement> node); void popDefsContext (); - void pushPageContext (std::unique_ptr<XMLElement> node); + void pushPageContext (std::unique_ptr<SVGElement> node); void popPageContext (); void setBBox (const BoundingBox &bbox); void setFont (int id, const Font &font); static bool setFontFormat (std::string formatstr); - void setX (double x) {_charHandler->notifyXAdjusted();} - void setY (double y) {_charHandler->notifyYAdjusted();} - void setMatrix (const Matrix &m) {_charHandler->setMatrix(m);} + void setX (double x) {_charHandler->notifyXAdjusted();} + void setY (double y) {_charHandler->notifyYAdjusted();} + void setMatrix (const Matrix &m) {_charHandler->setMatrix(m);} void setColor (const Color &c); - void setVertical (bool state) {_charHandler->setVertical(state);} + void setOpacity (const Opacity &op) {_charHandler->setOpacity(op);} + void setVertical (bool state) {_charHandler->setVertical(state);} void transformPage (const Matrix &m); - Color getColor () const {return _charHandler->getColor();} - const Matrix& getMatrix () const {return _charHandler->getMatrix();} - XMLElement* rootNode () const {return _root;} - XMLElement* defsNode () const {return _defs;} - XMLElement* pageNode () const {return _page;} + Color getColor () const {return _charHandler->getColor();} + const Opacity& getOpacity () const {return _charHandler->getOpacity();} + const Matrix& getMatrix () const {return _charHandler->getMatrix();} + XMLElement* rootNode () const {return _root;} + XMLElement* defsNode () const {return _defs;} + XMLElement* pageNode () const {return _page;} protected: XMLCData* styleCDataNode (); @@ -88,11 +91,11 @@ class SVGTree { private: XMLDocument _doc; - XMLElement *_root, *_page, *_defs; + SVGElement *_root, *_page, *_defs; XMLCData *_styleCDataNode; std::unique_ptr<SVGCharHandler> _charHandler; - std::stack<XMLElement*> _defsContextStack; - std::stack<XMLElement*> _pageContextStack; + std::stack<SVGElement*> _defsContextStack; + std::stack<SVGElement*> _pageContextStack; }; #endif diff --git a/dviware/dvisvgm/src/ShadingPatch.cpp b/dviware/dvisvgm/src/ShadingPatch.cpp index 847dc3aa0c..a734c4c48b 100644 --- a/dviware/dvisvgm/src/ShadingPatch.cpp +++ b/dviware/dvisvgm/src/ShadingPatch.cpp @@ -2,7 +2,7 @@ ** ShadingPatch.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ShadingPatch.hpp b/dviware/dvisvgm/src/ShadingPatch.hpp index 573188b77b..2a8103d044 100644 --- a/dviware/dvisvgm/src/ShadingPatch.hpp +++ b/dviware/dvisvgm/src/ShadingPatch.hpp @@ -2,7 +2,7 @@ ** ShadingPatch.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SignalHandler.cpp b/dviware/dvisvgm/src/SignalHandler.cpp index 14badba085..129b010d72 100644 --- a/dviware/dvisvgm/src/SignalHandler.cpp +++ b/dviware/dvisvgm/src/SignalHandler.cpp @@ -2,7 +2,7 @@ ** SignalHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SignalHandler.hpp b/dviware/dvisvgm/src/SignalHandler.hpp index 647a3650fc..ef6a0a4e55 100644 --- a/dviware/dvisvgm/src/SignalHandler.hpp +++ b/dviware/dvisvgm/src/SignalHandler.hpp @@ -2,7 +2,7 @@ ** SignalHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SourceInput.cpp b/dviware/dvisvgm/src/SourceInput.cpp index 5cd2e22749..55196c76ce 100644 --- a/dviware/dvisvgm/src/SourceInput.cpp +++ b/dviware/dvisvgm/src/SourceInput.cpp @@ -2,7 +2,7 @@ ** SourceInput.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SourceInput.hpp b/dviware/dvisvgm/src/SourceInput.hpp index 63f4af9b7a..7d7a08c88f 100644 --- a/dviware/dvisvgm/src/SourceInput.hpp +++ b/dviware/dvisvgm/src/SourceInput.hpp @@ -2,7 +2,7 @@ ** SourceInput.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SpecialActions.hpp b/dviware/dvisvgm/src/SpecialActions.hpp index f8eba3fd12..a7e4ac31f9 100644 --- a/dviware/dvisvgm/src/SpecialActions.hpp +++ b/dviware/dvisvgm/src/SpecialActions.hpp @@ -2,7 +2,7 @@ ** SpecialActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -27,6 +27,7 @@ #include "Color.hpp" #include "FilePath.hpp" #include "Matrix.hpp" +#include "Opacity.hpp" #include "SVGTree.hpp" class XMLElement; @@ -46,6 +47,8 @@ class SpecialActions { virtual const Matrix& getMatrix () const =0; virtual Matrix getPageTransformation () const {return Matrix(1);} virtual void setBgColor (const Color &color) =0; + virtual void setOpacity (const Opacity &opacity) =0; + virtual const Opacity& getOpacity () const =0; virtual const SVGTree& svgTree () const =0; SVGTree& svgTree () {return const_cast<SVGTree&>(const_cast<const SpecialActions*>(this)->svgTree());} virtual BoundingBox& bbox () =0; @@ -75,6 +78,8 @@ class EmptySpecialActions : public SpecialActions { void finishLine () override {} void setColor (const Color &color) override {} void setBgColor (const Color &color) override {} + void setOpacity (const Opacity &opacity) override {} + const Opacity& getOpacity () const override {return _svg.getOpacity();} Color getColor () const override {return Color::BLACK;} void setMatrix (const Matrix &m) override {} const Matrix& getMatrix () const override {return _matrix;} diff --git a/dviware/dvisvgm/src/SpecialHandler.hpp b/dviware/dvisvgm/src/SpecialHandler.hpp index 6c676a6ba0..382f0e53d1 100644 --- a/dviware/dvisvgm/src/SpecialHandler.hpp +++ b/dviware/dvisvgm/src/SpecialHandler.hpp @@ -2,7 +2,7 @@ ** SpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SpecialManager.cpp b/dviware/dvisvgm/src/SpecialManager.cpp index f3b2f3aa50..68e1c68b51 100644 --- a/dviware/dvisvgm/src/SpecialManager.cpp +++ b/dviware/dvisvgm/src/SpecialManager.cpp @@ -2,7 +2,7 @@ ** SpecialManager.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/SpecialManager.hpp b/dviware/dvisvgm/src/SpecialManager.hpp index 4c4ccae281..76cdb3e2e6 100644 --- a/dviware/dvisvgm/src/SpecialManager.hpp +++ b/dviware/dvisvgm/src/SpecialManager.hpp @@ -2,7 +2,7 @@ ** SpecialManager.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/StreamReader.cpp b/dviware/dvisvgm/src/StreamReader.cpp index 200b6592d9..8924d885b5 100644 --- a/dviware/dvisvgm/src/StreamReader.cpp +++ b/dviware/dvisvgm/src/StreamReader.cpp @@ -2,7 +2,7 @@ ** StreamReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/StreamReader.hpp b/dviware/dvisvgm/src/StreamReader.hpp index 653b451b69..08a4fd3636 100644 --- a/dviware/dvisvgm/src/StreamReader.hpp +++ b/dviware/dvisvgm/src/StreamReader.hpp @@ -2,7 +2,7 @@ ** StreamReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/StreamWriter.cpp b/dviware/dvisvgm/src/StreamWriter.cpp index c0885c31b1..21eefd1b9e 100644 --- a/dviware/dvisvgm/src/StreamWriter.cpp +++ b/dviware/dvisvgm/src/StreamWriter.cpp @@ -2,7 +2,7 @@ ** StreamWriter.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/StreamWriter.hpp b/dviware/dvisvgm/src/StreamWriter.hpp index 16a54b1050..5128bbf736 100644 --- a/dviware/dvisvgm/src/StreamWriter.hpp +++ b/dviware/dvisvgm/src/StreamWriter.hpp @@ -2,7 +2,7 @@ ** StreamWriter.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Subfont.cpp b/dviware/dvisvgm/src/Subfont.cpp index 540270f8a8..738ce24455 100644 --- a/dviware/dvisvgm/src/Subfont.cpp +++ b/dviware/dvisvgm/src/Subfont.cpp @@ -2,7 +2,7 @@ ** Subfont.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -53,7 +53,7 @@ SubfontDefinition::SubfontDefinition (string name, const char *fpath) : _sfname( while (is && !isspace(is.peek())) id += char(is.get()); if (!id.empty()) { - auto state = _subfonts.emplace(pair<string,unique_ptr<Subfont>>(id, unique_ptr<Subfont>())); + auto state = _subfonts.emplace(id, unique_ptr<Subfont>()); if (state.second) // id was not present in map already state.first->second = unique_ptr<Subfont>(new Subfont(*this, state.first->first)); skip_mapping_data(is); diff --git a/dviware/dvisvgm/src/Subfont.hpp b/dviware/dvisvgm/src/Subfont.hpp index 5b921bdddb..961720a99c 100644 --- a/dviware/dvisvgm/src/Subfont.hpp +++ b/dviware/dvisvgm/src/Subfont.hpp @@ -2,7 +2,7 @@ ** Subfont.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/System.cpp b/dviware/dvisvgm/src/System.cpp index ed14df6821..4f8b0a139c 100644 --- a/dviware/dvisvgm/src/System.cpp +++ b/dviware/dvisvgm/src/System.cpp @@ -2,7 +2,7 @@ ** System.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/System.hpp b/dviware/dvisvgm/src/System.hpp index 72a0cb3da8..fb698d303b 100644 --- a/dviware/dvisvgm/src/System.hpp +++ b/dviware/dvisvgm/src/System.hpp @@ -2,7 +2,7 @@ ** System.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TFM.cpp b/dviware/dvisvgm/src/TFM.cpp index ea6f2ecbe4..011e659dc9 100644 --- a/dviware/dvisvgm/src/TFM.cpp +++ b/dviware/dvisvgm/src/TFM.cpp @@ -2,7 +2,7 @@ ** TFM.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TFM.hpp b/dviware/dvisvgm/src/TFM.hpp index 261a5ce736..0bb881df8f 100644 --- a/dviware/dvisvgm/src/TFM.hpp +++ b/dviware/dvisvgm/src/TFM.hpp @@ -2,7 +2,7 @@ ** TFM.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TTFAutohint.cpp b/dviware/dvisvgm/src/TTFAutohint.cpp index ad1b03f21a..6e8fbefd48 100644 --- a/dviware/dvisvgm/src/TTFAutohint.cpp +++ b/dviware/dvisvgm/src/TTFAutohint.cpp @@ -2,7 +2,7 @@ ** TTFAutohint.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TTFAutohint.hpp b/dviware/dvisvgm/src/TTFAutohint.hpp index d23ceb2be0..3d774984c7 100644 --- a/dviware/dvisvgm/src/TTFAutohint.hpp +++ b/dviware/dvisvgm/src/TTFAutohint.hpp @@ -2,7 +2,7 @@ ** TTFAutohint.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TensorProductPatch.cpp b/dviware/dvisvgm/src/TensorProductPatch.cpp index dcd31e275d..261dbc28f5 100644 --- a/dviware/dvisvgm/src/TensorProductPatch.cpp +++ b/dviware/dvisvgm/src/TensorProductPatch.cpp @@ -2,7 +2,7 @@ ** TensorProductPatch.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -63,7 +63,9 @@ void TensorProductPatch::setFirstMatrixColumn (DPair source[4][4], int col, bool * @param[in] edgeflag defines how to connect this patch with another one * @param[in] patch reference patch required if edgeflag > 0 */ void TensorProductPatch::setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) { - auto tpPatch = dynamic_cast<TensorProductPatch*>(patch); + TensorProductPatch *tpPatch = nullptr; + if (patch && patch->psShadingType() == psShadingType()) + tpPatch = static_cast<TensorProductPatch*>(patch); if (edgeflag > 0 && !tpPatch) throw ShadingException("missing preceding data in definition of tensor-product patch"); if ((edgeflag == 0 && points.size() != 16) || (edgeflag > 0 && points.size() != 12)) @@ -107,7 +109,9 @@ void TensorProductPatch::setPoints (const PointVec &points, int edgeflag, Shadin * @param[in] edgeflag defines how to connect this patch with another one * @param[in] patch reference patch required if edgeflag > 0 */ void TensorProductPatch::setColors(const ColorVec &colors, int edgeflag, ShadingPatch* patch) { - auto tpPatch = dynamic_cast<TensorProductPatch*>(patch); + TensorProductPatch *tpPatch = nullptr; + if (patch && patch->psShadingType() == psShadingType()) + tpPatch = static_cast<TensorProductPatch*>(patch); if (edgeflag > 0 && !tpPatch) throw ShadingException("missing preceding data in definition of tensor-product patch"); if ((edgeflag == 0 && colors.size() != 4) || (edgeflag > 0 && colors.size() != 2)) @@ -492,7 +496,9 @@ DPair CoonsPatch::valueAt (double u, double v) const { * @param[in] edgeflag defines how to connect this patch to another one * @param[in] patch reference patch required if edgeflag > 0 */ void CoonsPatch::setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) { - auto coonsPatch = dynamic_cast<CoonsPatch*>(patch); + CoonsPatch *coonsPatch = nullptr; + if (patch && patch->psShadingType() == psShadingType()) + coonsPatch = static_cast<CoonsPatch*>(patch); if (edgeflag > 0 && !coonsPatch) throw ShadingException("missing preceding data in definition of relative Coons patch"); if ((edgeflag == 0 && points.size() != 12) || (edgeflag > 0 && points.size() != 8)) @@ -529,7 +535,9 @@ void CoonsPatch::setPoints (const PointVec &points, int edgeflag, ShadingPatch * void CoonsPatch::setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) { - auto coonsPatch = dynamic_cast<CoonsPatch*>(patch); + CoonsPatch *coonsPatch = nullptr; + if (patch && patch->psShadingType() == psShadingType()) + coonsPatch = static_cast<CoonsPatch*>(patch); if (edgeflag > 0 && !coonsPatch) throw ShadingException("missing preceding data in definition of relative Coons patch"); if ((edgeflag == 0 && colors.size() != 4) || (edgeflag > 0 && colors.size() != 2)) diff --git a/dviware/dvisvgm/src/TensorProductPatch.hpp b/dviware/dvisvgm/src/TensorProductPatch.hpp index e53604cf52..654271b90d 100644 --- a/dviware/dvisvgm/src/TensorProductPatch.hpp +++ b/dviware/dvisvgm/src/TensorProductPatch.hpp @@ -2,7 +2,7 @@ ** TensorProductPatch.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Terminal.cpp b/dviware/dvisvgm/src/Terminal.cpp index 3b2ff2b871..274426443a 100644 --- a/dviware/dvisvgm/src/Terminal.cpp +++ b/dviware/dvisvgm/src/Terminal.cpp @@ -2,7 +2,7 @@ ** Terminal.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Terminal.hpp b/dviware/dvisvgm/src/Terminal.hpp index fd7a920c16..f84d47b707 100644 --- a/dviware/dvisvgm/src/Terminal.hpp +++ b/dviware/dvisvgm/src/Terminal.hpp @@ -2,7 +2,7 @@ ** Terminal.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ToUnicodeMap.cpp b/dviware/dvisvgm/src/ToUnicodeMap.cpp index 6ab99a248e..0a0b069e96 100644 --- a/dviware/dvisvgm/src/ToUnicodeMap.cpp +++ b/dviware/dvisvgm/src/ToUnicodeMap.cpp @@ -2,7 +2,7 @@ ** ToUnicodeMap.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ToUnicodeMap.hpp b/dviware/dvisvgm/src/ToUnicodeMap.hpp index 74d6dcb648..806233e12f 100644 --- a/dviware/dvisvgm/src/ToUnicodeMap.hpp +++ b/dviware/dvisvgm/src/ToUnicodeMap.hpp @@ -2,7 +2,7 @@ ** ToUnicodeMap.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TpicSpecialHandler.cpp b/dviware/dvisvgm/src/TpicSpecialHandler.cpp index 47d3e46988..b611117725 100644 --- a/dviware/dvisvgm/src/TpicSpecialHandler.cpp +++ b/dviware/dvisvgm/src/TpicSpecialHandler.cpp @@ -2,7 +2,7 @@ ** TpicSpecialHandler.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -28,6 +28,7 @@ #include "InputReader.hpp" #include "GraphicsPath.hpp" #include "SpecialActions.hpp" +#include "SVGElement.hpp" #include "SVGTree.hpp" #include "TpicSpecialHandler.hpp" #include "utility.hpp" @@ -70,28 +71,32 @@ Color TpicSpecialHandler::fillColor (bool grayOnly) const { * @param[in] penwidth pen with used to compute the stroke parameters * @param[in] pencolor the drawing color * @param[in] ddist dash/dot distance of line in PS point units (0:solid line, >0:dashed line, <0:dotted line) */ -static void add_stroke_attribs (XMLElement *elem, double penwidth, Color pencolor, double ddist) { +static void add_stroke_attribs (SVGElement *elem, double penwidth, Color pencolor, double ddist) { if (penwidth > 0) { // attributes actually required? - elem->addAttribute("stroke", pencolor.svgColorString()); - elem->addAttribute("stroke-width", XMLString(penwidth)); + elem->setStrokeColor(pencolor); + elem->setStrokeWidth(penwidth); + vector<double> dasharray; if (ddist > 0) - elem->addAttribute("stroke-dasharray", XMLString(ddist)); - else if (ddist < 0) - elem->addAttribute("stroke-dasharray", XMLString(penwidth) + ' ' + XMLString(-ddist)); + dasharray.push_back(ddist); + else if (ddist < 0) { + dasharray.push_back(penwidth); + dasharray.push_back(-ddist); + } + elem->setStrokeDash(dasharray); } } -static unique_ptr<XMLElement> create_ellipse_element (double cx, double cy, double rx, double ry) { +static unique_ptr<SVGElement> create_ellipse_element (double cx, double cy, double rx, double ry) { bool is_circle = (rx == ry); - auto elem = util::make_unique<XMLElement>(is_circle ? "circle" : "ellipse"); - elem->addAttribute("cx", XMLString(cx)); - elem->addAttribute("cy", XMLString(cy)); + auto elem = util::make_unique<SVGElement>(is_circle ? "circle" : "ellipse"); + elem->addAttribute("cx", cx); + elem->addAttribute("cy", cy); if (is_circle) - elem->addAttribute("r", XMLString(rx)); + elem->addAttribute("r", rx); else { - elem->addAttribute("rx", XMLString(rx)); - elem->addAttribute("ry", XMLString(ry)); + elem->addAttribute("rx", rx); + elem->addAttribute("ry", ry); } return elem; } @@ -102,7 +107,7 @@ static unique_ptr<XMLElement> create_ellipse_element (double cx, double cy, doub * @param[in] actions object providing the actions that can be performed by the SpecialHandler */ void TpicSpecialHandler::drawLines (double ddist, SpecialActions &actions) { if (!_points.empty() && (_penwidth > 0 || _grayLevel >= 0) && !actions.outputLocked()) { - unique_ptr<XMLElement> elem; + unique_ptr<SVGElement> elem; if (_points.size() == 1) { const DPair &p = _points.back(); elem = create_ellipse_element(p.x()+actions.getX(), p.y()+actions.getY(), _penwidth/2.0, _penwidth/2.0); @@ -110,26 +115,27 @@ void TpicSpecialHandler::drawLines (double ddist, SpecialActions &actions) { } else { if (_points.size() == 2 || (_grayLevel < 0 && _points.front() != _points.back())) { - elem = util::make_unique<XMLElement>("polyline"); - elem->addAttribute("fill", "none"); - elem->addAttribute("stroke-linecap", "round"); + elem = util::make_unique<SVGElement>("polyline"); + elem->setNoFillColor(); + elem->setStrokeLineCap(SVGElement::LC_ROUND); } else { while (_points.front() == _points.back()) _points.pop_back(); - elem = util::make_unique<XMLElement>("polygon"); - elem->addAttribute("fill", _grayLevel < 0 ? "none" : fillColor(false).svgColorString()); + elem = util::make_unique<SVGElement>("polygon"); + if (_grayLevel < 0) + elem->setNoFillColor(); + else + elem->setFillColor(fillColor(false)); } - ostringstream oss; - for (auto it=_points.begin(); it != _points.end(); ++it) { - if (it != _points.begin()) - oss << ' '; - double x = it->x()+actions.getX(); - double y = it->y()+actions.getY(); - oss << XMLString(x) << ',' << XMLString(y); + vector<DPair> points; + for (const DPair &p : _points) { + double x = p.x()+actions.getX(); + double y = p.y()+actions.getY(); + points.emplace_back(x, y); actions.embed(DPair(x, y)); } - elem->addAttribute("points", oss.str()); + elem->setPoints(points); add_stroke_attribs(elem.get(), _penwidth, Color::BLACK, ddist); } actions.svgTree().appendToPage(std::move(elem)); @@ -175,8 +181,8 @@ void TpicSpecialHandler::drawSplines (double ddist, SpecialActions &actions) { path.lineto(p+_points[numPoints-1]); actions.embed(p+_points[numPoints-1]); } - auto pathElem = util::make_unique<XMLElement>("path"); - pathElem->addAttribute("fill", "none"); + auto pathElem = util::make_unique<SVGElement>("path"); + pathElem->setNoFillColor(); ostringstream oss; path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); pathElem->addAttribute("d", oss.str()); @@ -200,7 +206,7 @@ void TpicSpecialHandler::drawArc (double cx, double cy, double rx, double ry, do if ((_penwidth > 0 || _grayLevel >= 0) && !actions.outputLocked()) { cx += actions.getX(); cy += actions.getY(); - unique_ptr<XMLElement> elem; + unique_ptr<SVGElement> elem; bool closed=true; if (abs(angle2-angle1) >= math::TWO_PI) // closed ellipse? elem = create_ellipse_element(cx, cy, rx, ry); @@ -213,18 +219,21 @@ void TpicSpecialHandler::drawArc (double cx, double cy, double rx, double ry, do path.closepath(); else closed = false; - elem = util::make_unique<XMLElement>("path"); + elem = util::make_unique<SVGElement>("path"); ostringstream oss; path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS); elem->addAttribute("d", oss.str()); } if (_penwidth > 0) { - elem->addAttribute("stroke-width", _penwidth); - elem->addAttribute("stroke", actions.getColor().svgColorString()); + elem->setStrokeWidth(_penwidth); + elem->setStrokeColor(actions.getColor()); if (!closed) - elem->addAttribute("stroke-linecap", "round"); + elem->setStrokeLineCap(SVGElement::LC_ROUND); } - elem->addAttribute("fill", _grayLevel < 0 ? "none" : fillColor(true).svgColorString()); + if (_grayLevel < 0) + elem->setNoFillColor(); + else + elem->setFillColor(fillColor(true)); actions.svgTree().appendToPage(std::move(elem)); double pw = _penwidth/2.0; actions.embed(BoundingBox(cx-rx-pw, cy-ry-pw, cx+rx+pw, cy+ry+pw)); @@ -296,7 +305,7 @@ bool TpicSpecialHandler::process (const string &prefix, istream &is, SpecialActi case cmd_id("pa"): { // add point to path double x = ir.getDouble()*mi2bp; double y = ir.getDouble()*mi2bp; - _points.emplace_back(DPair(x,y)); + _points.emplace_back(x, y); break; } case cmd_id("fp"): // draw solid lines through recorded points; close and fill path if fill color was defined diff --git a/dviware/dvisvgm/src/TpicSpecialHandler.hpp b/dviware/dvisvgm/src/TpicSpecialHandler.hpp index f6ec271994..8a9b458056 100644 --- a/dviware/dvisvgm/src/TpicSpecialHandler.hpp +++ b/dviware/dvisvgm/src/TpicSpecialHandler.hpp @@ -2,7 +2,7 @@ ** TpicSpecialHandler.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TriangularPatch.cpp b/dviware/dvisvgm/src/TriangularPatch.cpp index fadeb725ff..c57836d900 100644 --- a/dviware/dvisvgm/src/TriangularPatch.cpp +++ b/dviware/dvisvgm/src/TriangularPatch.cpp @@ -2,7 +2,7 @@ ** TriangularPatch.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -31,7 +31,9 @@ TriangularPatch::TriangularPatch (const PointVec &points, const ColorVec &colors void TriangularPatch::setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) { - auto triangularPatch = dynamic_cast<TriangularPatch*>(patch); + TriangularPatch *triangularPatch = nullptr; + if (patch && patch->psShadingType() == psShadingType()) + triangularPatch = static_cast<TriangularPatch*>(patch); if (edgeflag > 0 && !triangularPatch) throw ShadingException("missing preceding data in definition of triangular patch"); if ((edgeflag == 0 && points.size() != 3) || (edgeflag > 0 && points.size() != 1)) @@ -62,7 +64,9 @@ void TriangularPatch::setPoints (const DPair &p1, const DPair &p2, const DPair & void TriangularPatch::setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) { - auto triangularPatch = dynamic_cast<TriangularPatch*>(patch); + TriangularPatch *triangularPatch = nullptr; + if (patch && patch->psShadingType() == psShadingType()) + triangularPatch = static_cast<TriangularPatch*>(patch); if (edgeflag > 0 && !triangularPatch) throw ShadingException("missing preceding data in definition of triangular patch"); if ((edgeflag == 0 && colors.size() != 3) || (edgeflag > 0 && colors.size() != 1)) diff --git a/dviware/dvisvgm/src/TriangularPatch.hpp b/dviware/dvisvgm/src/TriangularPatch.hpp index 797068bacd..8d4453e5db 100644 --- a/dviware/dvisvgm/src/TriangularPatch.hpp +++ b/dviware/dvisvgm/src/TriangularPatch.hpp @@ -2,7 +2,7 @@ ** TriangularPatch.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/TrueTypeFont.cpp b/dviware/dvisvgm/src/TrueTypeFont.cpp index 2921af59ea..84b56c5850 100644 --- a/dviware/dvisvgm/src/TrueTypeFont.cpp +++ b/dviware/dvisvgm/src/TrueTypeFont.cpp @@ -2,7 +2,7 @@ ** TrueTypeFont.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -56,7 +56,7 @@ bool TrueTypeFont::read (const string &fname) { if ((offset | length) > _buffer.size() || offset+length > _buffer.size()) return false; TTFTableRecord record = {tag, checksum, length, reinterpret_cast<const uint8_t*>(_buffer.data())+offset}; - _tableRecords.emplace_back(std::move(record)); + _tableRecords.push_back(std::move(record)); } return true; } @@ -94,7 +94,7 @@ void TrueTypeFont::writeWOFF (ostream &os) const { woffRecord.compressTableData(); woffSize += woffRecord.paddedSize(); ttfSize += ttfRecord.paddedSize(); - woffRecords.emplace_back(std::move(woffRecord)); + woffRecords.push_back(std::move(woffRecord)); } // write WOFF header StreamWriter writer(os); diff --git a/dviware/dvisvgm/src/TrueTypeFont.hpp b/dviware/dvisvgm/src/TrueTypeFont.hpp index 0ae155c52c..a287f305fa 100644 --- a/dviware/dvisvgm/src/TrueTypeFont.hpp +++ b/dviware/dvisvgm/src/TrueTypeFont.hpp @@ -2,7 +2,7 @@ ** TrueTypeFont.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Unicode.cpp b/dviware/dvisvgm/src/Unicode.cpp index 0fea9c3daf..5b7fb3d238 100644 --- a/dviware/dvisvgm/src/Unicode.cpp +++ b/dviware/dvisvgm/src/Unicode.cpp @@ -2,7 +2,7 @@ ** Unicode.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/Unicode.hpp b/dviware/dvisvgm/src/Unicode.hpp index e085bac54d..1547e3f7d4 100644 --- a/dviware/dvisvgm/src/Unicode.hpp +++ b/dviware/dvisvgm/src/Unicode.hpp @@ -2,7 +2,7 @@ ** Unicode.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/VFActions.hpp b/dviware/dvisvgm/src/VFActions.hpp index 2d4a2a2c5f..6939d8e710 100644 --- a/dviware/dvisvgm/src/VFActions.hpp +++ b/dviware/dvisvgm/src/VFActions.hpp @@ -2,7 +2,7 @@ ** VFActions.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/VFReader.cpp b/dviware/dvisvgm/src/VFReader.cpp index eb1193ddaa..6533333b5e 100644 --- a/dviware/dvisvgm/src/VFReader.cpp +++ b/dviware/dvisvgm/src/VFReader.cpp @@ -2,7 +2,7 @@ ** VFReader.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/VFReader.hpp b/dviware/dvisvgm/src/VFReader.hpp index bbf4986d7f..dabad67460 100644 --- a/dviware/dvisvgm/src/VFReader.hpp +++ b/dviware/dvisvgm/src/VFReader.hpp @@ -2,7 +2,7 @@ ** VFReader.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/VectorIterator.hpp b/dviware/dvisvgm/src/VectorIterator.hpp index 0fb53d78e4..45009e4ea1 100644 --- a/dviware/dvisvgm/src/VectorIterator.hpp +++ b/dviware/dvisvgm/src/VectorIterator.hpp @@ -2,7 +2,7 @@ ** VectorIterator.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -93,7 +93,7 @@ class VectorIterator { bool operator >= (const VectorIterator &it) const {return _pos >= it._pos;} bool operator < (const VectorIterator &it) const {return _pos < it._pos;} bool operator > (const VectorIterator &it) const {return _pos > it._pos;} - bool valid () const {return _pos >= 0 && _pos < _vector.size();} + bool valid () const {return _pos < _vector.size();} void invalidate () {_pos = _vector.size();} void reset () {_pos = 0;} diff --git a/dviware/dvisvgm/src/VectorStream.hpp b/dviware/dvisvgm/src/VectorStream.hpp index 0372d368d0..22709803ca 100644 --- a/dviware/dvisvgm/src/VectorStream.hpp +++ b/dviware/dvisvgm/src/VectorStream.hpp @@ -2,7 +2,7 @@ ** VectorStream.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/XMLDocument.cpp b/dviware/dvisvgm/src/XMLDocument.cpp index ffe23b1f80..8b3c7f31e9 100644 --- a/dviware/dvisvgm/src/XMLDocument.cpp +++ b/dviware/dvisvgm/src/XMLDocument.cpp @@ -2,7 +2,7 @@ ** XMLDocument.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -39,7 +39,7 @@ void XMLDocument::append (unique_ptr<XMLNode> node) { if (node->toElement()) _rootElement = util::static_unique_ptr_cast<XMLElement>(std::move(node)); else - _nodes.emplace_back(std::move(node)); + _nodes.push_back(std::move(node)); } } diff --git a/dviware/dvisvgm/src/XMLDocument.hpp b/dviware/dvisvgm/src/XMLDocument.hpp index 2eaaee4a28..c6b5645226 100644 --- a/dviware/dvisvgm/src/XMLDocument.hpp +++ b/dviware/dvisvgm/src/XMLDocument.hpp @@ -2,7 +2,7 @@ ** XMLDocument.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/XMLNode.cpp b/dviware/dvisvgm/src/XMLNode.cpp index eb49b9c9db..8549593a13 100644 --- a/dviware/dvisvgm/src/XMLNode.cpp +++ b/dviware/dvisvgm/src/XMLNode.cpp @@ -2,7 +2,7 @@ ** XMLNode.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -107,7 +107,7 @@ void XMLElement::addAttribute (const string &name, const string &value) { if (Attribute *attr = getAttribute(name)) attr->value = value; else - _attributes.emplace_back(Attribute(name, value)); + _attributes.emplace_back(name, value); } @@ -387,12 +387,12 @@ ostream& XMLElement::write (ostream &os) const { os << '>'; // Insert newlines around children except text nodes. According to the // SVG specification, pure whitespace nodes are ignored by the SVG renderer. - if (WRITE_NEWLINES && !_firstChild->toText()) + if (WRITE_NEWLINES && name() != "text" && !_firstChild->toText()) os << '\n'; for (XMLNode *child = _firstChild.get(); child; child = child->next()) { child->write(os); if (!child->toText()) { - if (WRITE_NEWLINES && (!child->next() || !child->next()->toText())) + if (WRITE_NEWLINES && name() != "text" && (!child->next() || !child->next()->toText())) os << '\n'; } } diff --git a/dviware/dvisvgm/src/XMLNode.hpp b/dviware/dvisvgm/src/XMLNode.hpp index 65bd69fab8..aeab862130 100644 --- a/dviware/dvisvgm/src/XMLNode.hpp +++ b/dviware/dvisvgm/src/XMLNode.hpp @@ -2,7 +2,7 @@ ** XMLNode.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -128,7 +128,7 @@ class XMLElement : public XMLNode { explicit XMLElement (std::string name); XMLElement (const XMLElement &node); XMLElement (XMLElement &&node) noexcept; - ~XMLElement (); + ~XMLElement () override; std::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLElement>(*this);} void clear () override; void addAttribute (const std::string &name, const std::string &value); diff --git a/dviware/dvisvgm/src/XMLString.cpp b/dviware/dvisvgm/src/XMLString.cpp index 31de6a7b33..72026bdd76 100644 --- a/dviware/dvisvgm/src/XMLString.cpp +++ b/dviware/dvisvgm/src/XMLString.cpp @@ -2,7 +2,7 @@ ** XMLString.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/XMLString.hpp b/dviware/dvisvgm/src/XMLString.hpp index 52c227ae8a..36ef2bee55 100644 --- a/dviware/dvisvgm/src/XMLString.hpp +++ b/dviware/dvisvgm/src/XMLString.hpp @@ -2,7 +2,7 @@ ** XMLString.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/XXHashFunction.hpp b/dviware/dvisvgm/src/XXHashFunction.hpp index d26a4e4984..4478a2204c 100644 --- a/dviware/dvisvgm/src/XXHashFunction.hpp +++ b/dviware/dvisvgm/src/XXHashFunction.hpp @@ -2,7 +2,7 @@ ** XXHashFunction.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ZLibOutputStream.hpp b/dviware/dvisvgm/src/ZLibOutputStream.hpp index c1c065e357..a995dbf01e 100644 --- a/dviware/dvisvgm/src/ZLibOutputStream.hpp +++ b/dviware/dvisvgm/src/ZLibOutputStream.hpp @@ -2,7 +2,7 @@ ** ZLibOutputStream.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/dvisvgm.cpp b/dviware/dvisvgm/src/dvisvgm.cpp index 803e34e717..5cf833dd82 100644 --- a/dviware/dvisvgm/src/dvisvgm.cpp +++ b/dviware/dvisvgm/src/dvisvgm.cpp @@ -2,7 +2,7 @@ ** dvisvgm.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -244,7 +244,7 @@ class VersionInfo { protected: void append (const string &name, const string &version) { - _versionPairs.emplace_back(pair<string,string>(name, version)); + _versionPairs.emplace_back(name, version); } private: @@ -349,7 +349,8 @@ static void set_variables (const CommandLine &cmdline) { string msg = "unknown font format '"+cmdline.fontFormatOpt.value()+"' (supported formats: "; for (const string &format : FontWriter::supportedFormats()) msg += format + ", "; - msg.erase(msg.end()-2); + msg.erase(msg.end()-2, msg.end()); + msg += ")"; throw CL::CommandLineException(msg); } SVGTree::CREATE_USE_ELEMENTS = cmdline.noFontsOpt.value() < 1; diff --git a/dviware/dvisvgm/src/ffwrapper.c b/dviware/dvisvgm/src/ffwrapper.c index 61f17fdc6d..4f89c2b6d1 100644 --- a/dviware/dvisvgm/src/ffwrapper.c +++ b/dviware/dvisvgm/src/ffwrapper.c @@ -2,7 +2,7 @@ ** ffwrapper.c ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/ffwrapper.h b/dviware/dvisvgm/src/ffwrapper.h index e3e2f98832..6474d854a2 100644 --- a/dviware/dvisvgm/src/ffwrapper.h +++ b/dviware/dvisvgm/src/ffwrapper.h @@ -2,7 +2,7 @@ ** ffwrapper.h ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/macros.hpp b/dviware/dvisvgm/src/macros.hpp index 0a03776057..907e402c8c 100644 --- a/dviware/dvisvgm/src/macros.hpp +++ b/dviware/dvisvgm/src/macros.hpp @@ -2,7 +2,7 @@ ** macros.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp b/dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp index 28046e45a2..e5f3b95536 100644 --- a/dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp +++ b/dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp @@ -2,7 +2,7 @@ ** AttributeExtractor.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp b/dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp index b4c6f2775c..c8ab6bd61a 100644 --- a/dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp +++ b/dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp @@ -2,7 +2,7 @@ ** AttributeExtractor.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/DependencyGraph.hpp b/dviware/dvisvgm/src/optimizer/DependencyGraph.hpp index 98d2a8d699..912d4a9110 100644 --- a/dviware/dvisvgm/src/optimizer/DependencyGraph.hpp +++ b/dviware/dvisvgm/src/optimizer/DependencyGraph.hpp @@ -2,7 +2,7 @@ ** DependencyGraph.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp b/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp index c3060be788..c5954d705c 100644 --- a/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp +++ b/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp @@ -2,7 +2,7 @@ ** GroupCollapser.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -107,7 +107,7 @@ void GroupCollapser::execute (XMLElement *context) { * @return true if all attributes have been moved */ bool GroupCollapser::moveAttributes (XMLElement &source, XMLElement &dest) { vector<string> movedAttributes; - for (const XMLElement::Attribute &attr : source.attributes()) { + for (const auto &attr : source.attributes()) { if (attr.name == "transform") { string transform; if (const char *destvalue = dest.getAttributeValue("transform")) diff --git a/dviware/dvisvgm/src/optimizer/GroupCollapser.hpp b/dviware/dvisvgm/src/optimizer/GroupCollapser.hpp index 08db518a90..2694c4f355 100644 --- a/dviware/dvisvgm/src/optimizer/GroupCollapser.hpp +++ b/dviware/dvisvgm/src/optimizer/GroupCollapser.hpp @@ -2,7 +2,7 @@ ** GroupCollapser.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/Makefile.in b/dviware/dvisvgm/src/optimizer/Makefile.in index 0913c8462f..26731769a2 100644 --- a/dviware/dvisvgm/src/optimizer/Makefile.in +++ b/dviware/dvisvgm/src/optimizer/Makefile.in @@ -346,6 +346,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/src/optimizer/OptimizerModule.hpp b/dviware/dvisvgm/src/optimizer/OptimizerModule.hpp index 276cfa5578..91f0263bb8 100644 --- a/dviware/dvisvgm/src/optimizer/OptimizerModule.hpp +++ b/dviware/dvisvgm/src/optimizer/OptimizerModule.hpp @@ -2,7 +2,7 @@ ** OptimizerModule.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp b/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp index a8aca1a993..f8d040a329 100644 --- a/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp +++ b/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp @@ -2,7 +2,7 @@ ** RedundantElementRemover.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp b/dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp index 8d5a6b689f..52ce905c8e 100644 --- a/dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp +++ b/dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp @@ -2,7 +2,7 @@ ** RedundantElementRemover.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp b/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp index ac4a78fe20..8f9635a836 100644 --- a/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp +++ b/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp @@ -2,7 +2,7 @@ ** SVGOptimizer.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/SVGOptimizer.hpp b/dviware/dvisvgm/src/optimizer/SVGOptimizer.hpp index 0da157fbbb..b15723d9ea 100644 --- a/dviware/dvisvgm/src/optimizer/SVGOptimizer.hpp +++ b/dviware/dvisvgm/src/optimizer/SVGOptimizer.hpp @@ -2,7 +2,7 @@ ** SVGOptimizer.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/TextSimplifier.cpp b/dviware/dvisvgm/src/optimizer/TextSimplifier.cpp index b94ab9458e..2b778dadbc 100644 --- a/dviware/dvisvgm/src/optimizer/TextSimplifier.cpp +++ b/dviware/dvisvgm/src/optimizer/TextSimplifier.cpp @@ -2,7 +2,7 @@ ** TextSimplifier.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -39,7 +39,7 @@ static XMLElement::Attributes common_inheritable_attributes (const vector<XMLEle if (commonAttribs.empty()) { if (intersected) break; - for (const auto attrib : elem->attributes()) { + for (const auto &attrib : elem->attributes()) { if (AttributeExtractor::inheritable(attrib)) commonAttribs.push_back(attrib); } @@ -94,11 +94,11 @@ void TextSimplifier::execute (XMLElement *context) { vector<XMLElement::Attribute> attribs = common_inheritable_attributes(tspans); if (!tspans.empty() && !attribs.empty()) { // move all common tspan attributes to the parent text element - for (const XMLElement::Attribute &attr : attribs) + for (const auto &attr : attribs) context->addAttribute(attr.name, attr.value); // remove all common attributes from the tspan elements for (XMLElement *tspan : tspans) { - for (const XMLElement::Attribute &attr : attribs) + for (const auto &attr : attribs) tspan->removeAttribute(attr.name); // unwrap the tspan if there are no remaining attributes if (tspan->attributes().empty()) diff --git a/dviware/dvisvgm/src/optimizer/TextSimplifier.hpp b/dviware/dvisvgm/src/optimizer/TextSimplifier.hpp index cfdd548e87..9ad3e0edb0 100644 --- a/dviware/dvisvgm/src/optimizer/TextSimplifier.hpp +++ b/dviware/dvisvgm/src/optimizer/TextSimplifier.hpp @@ -2,7 +2,7 @@ ** TextSimplifier.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp b/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp index 2541631b0e..ce0a6d8d7a 100644 --- a/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp +++ b/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp @@ -2,7 +2,7 @@ ** TransformSimplifier.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/TransformSimplifier.hpp b/dviware/dvisvgm/src/optimizer/TransformSimplifier.hpp index 5d503635ba..10591dc271 100644 --- a/dviware/dvisvgm/src/optimizer/TransformSimplifier.hpp +++ b/dviware/dvisvgm/src/optimizer/TransformSimplifier.hpp @@ -2,7 +2,7 @@ ** TransformSimplifier.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp b/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp index 3f83011f5a..09de2f19bb 100644 --- a/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp +++ b/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp @@ -2,7 +2,7 @@ ** WSNodeRemover.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp b/dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp index 8c21ce2b6e..438c21c8fd 100644 --- a/dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp +++ b/dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp @@ -2,7 +2,7 @@ ** WSNodeRemover.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/options.dtd b/dviware/dvisvgm/src/options.dtd index d2806badce..21c33a168a 100644 --- a/dviware/dvisvgm/src/options.dtd +++ b/dviware/dvisvgm/src/options.dtd @@ -3,7 +3,7 @@ ** options.dtd ** ** ** ** This file is part of dvisvgm - a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/options.xml b/dviware/dvisvgm/src/options.xml index b1911694dd..1d0d09e3d6 100644 --- a/dviware/dvisvgm/src/options.xml +++ b/dviware/dvisvgm/src/options.xml @@ -3,7 +3,7 @@ ** options.xml ** ** ** ** This file is part of dvisvgm - a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -26,7 +26,7 @@ <usage>--eps [options] epsfile</usage> <usage>--pdf [options] pdffile</usage> <description>This program converts DVI files, as created by TeX/LaTeX, as well as\nEPS and PDF files to the XML-based scalable vector graphics format SVG.</description> - <copyright>Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de></copyright> + <copyright>Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de></copyright> </program> <options> <section title="Input options"> diff --git a/dviware/dvisvgm/src/psdefs.cpp b/dviware/dvisvgm/src/psdefs.cpp index 8cc5a10cb9..baa8b09a6c 100644 --- a/dviware/dvisvgm/src/psdefs.cpp +++ b/dviware/dvisvgm/src/psdefs.cpp @@ -2,7 +2,7 @@ ** psdefs.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -115,47 +115,51 @@ const char *PSInterpreter::PSDEFS = "rgbcolor 3(setrgbcolor)prcmd}def/printgstate{@dodraw @GD/@nulldev get not and{" "matrix currentmatrix aload pop 6(setmatrix)prcmd applyscalevals currentlinewid" "th 1(setlinewidth)prcmd currentlinecap 1(setlinecap)prcmd currentlinejoin 1(se" -"tlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd prcolor currentdash ma" -"rk 3 1 roll exch aload length 1 add -1 roll counttomark(setdash)prcmd pop}if}d" -"ef/strconcat{exch dup length 2 index length add string dup dup 4 2 roll copy l" -"ength 4 -1 roll putinterval}def/setgstate{/setgstate sysexec printgstate}def/s" -"ave{@UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)prcmd}def/" -"restore{:restore @checknulldev printgstate @UD/@saveID known{@UD begin @saveID" -" end}{0}ifelse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore @checknull" -"dev printgstate 0(grestore)prcmd}def/grestoreall{:grestoreall @checknulldev se" -"tstate 0(grestoreall)prcmd}def/rotate{dup type/arraytype ne @dodraw and{dup 1(" -"rotate)prcmd}if/rotate sysexec applyscalevals}def/scale{dup type/arraytype ne " -"@dodraw and{2 copy 2(scale)prcmd}if/scale sysexec applyscalevals}def/translate" -"{dup type/arraytype ne @dodraw and{2 copy 2(translate)prcmd}if/translate sysex" -"ec}def/setmatrix{dup/setmatrix sysexec @dodraw{aload pop 6(setmatrix)prcmd app" -"lyscalevals}{pop}ifelse}def/initmatrix{matrix setmatrix}def/concat{matrix curr" -"entmatrix matrix concatmatrix setmatrix}def/makepattern{gsave<</mx 3 -1 roll>>" -"begin<</XUID[1000000 @patcnt]>>copy mx/makepattern sysexec dup begin PatternTy" -"pe 2 lt{PatternType @patcnt BBox aload pop XStep YStep PaintType mx aload pop " -"15(makepattern)prcmd :newpath matrix setmatrix dup PaintProc 0 1(makepattern)p" -"rcmd @GD/@patcnt @patcnt 1 add put}if end end grestore}def/setpattern{begin Pa" -"tternType 1 eq{PaintType 1 eq{XUID aload pop exch pop 1}{:gsave[currentcolorsp" -"ace aload length -1 roll pop]/setcolorspace sysexec/setcolor sysexec XUID aloa" -"d pop exch pop currentrgbcolor :grestore 4}ifelse(setpattern)prcmd currentcolo" -"rspace 0 get/Pattern ne{[/Pattern currentcolorspace]/setcolorspace sysexec}if " -"currentcolorspace @setcolorspace}{/setpattern sysexec}ifelse end}def/setcolor{" -"dup type/dicttype eq{setpattern}{/setcolor sysexec/currentrgbcolor sysexec set" -"rgbcolor}ifelse}def/setcolorspace{dup/setcolorspace sysexec @setcolorspace}def" -"/@setcolorspace{dup type/arraytype eq{0 get}if/Pattern eq{1}{0}ifelse 1(setcol" -"orspace)prcmd}def/setgray 1 defpr/setcmykcolor 4 defpr/sethsbcolor 3 defpr/set" -"rgbcolor 3 defpr/.setalphaisshape{@SD/.setalphaisshape known{dup/.setalphaissh" -"ape sysexec}if{1}{0}ifelse 1(setisshapealpha)prcmd}bind def/.setfillconstantal" -"pha{@SD/.setfillconstantalpha known{dup/.setfillconstantalpha sysexec}if 1(set" -"fillconstantalpha)prcmd}bind def/.setstrokeconstantalpha{@SD/.setstrokeconstan" -"talpha known{dup/.setstrokeconstantalpha sysexec}if 1(setstrokeconstantalpha)p" -"rcmd}bind def/.setopacityalpha{false .setalphaisshape dup .setfillconstantalph" -"a .setstrokeconstantalpha}bind def/.setshapealpha{true .setalphaisshape dup .s" -"etfillconstantalpha .setstrokeconstantalpha}bind def/.setblendmode{dup/.setble" -"ndmode sysexec<</Normal 0/Compatible 0/Multiply 1/Screen 2/Overlay 3/SoftLight" -" 4/HardLight 5/ColorDodge 6/ColorBurn 7/Darken 8/Lighten 9/Difference 10/Exclu" -"sion 11/Hue 12/Saturation 13/Color 14/Luminosity 15/CompatibleOverprint 16>>ex" -"ch get 1(setblendmode)prcmd}def/@pdfpagecount{(r)file runpdfbegin pdfpagecount" -" runpdfend}def/@pdfpagebox{(r)file runpdfbegin dup dup 1 lt exch pdfpagecount " -"gt or{pop}{pdfgetpage/MediaBox pget pop aload pop}ifelse runpdfend}def DELAYBI" -"ND{.bindnow}if "; +"tlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd revision dup 952 lt{po" +"p}{.currentblendmode .setblendmode 952 eq{.currentopacityalpha .setopacityalph" +"a .currentshapealpha .setshapealpha}{.currentalphaisshape{1}{0}ifelse 1(setalp" +"haisshape)prcmd .currentstrokeconstantalpha 1(setstrokeconstantalpha)prcmd .cu" +"rrentfillconstantalpha 1(setfillconstantalpha)prcmd}ifelse}ifelse prcolor curr" +"entdash mark 3 1 roll exch aload length 1 add -1 roll counttomark(setdash)prcm" +"d pop}if}def/strconcat{exch dup length 2 index length add string dup dup 4 2 r" +"oll copy length 4 -1 roll putinterval}def/setgstate{/setgstate sysexec printgs" +"tate}def/save{@UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)" +"prcmd}def/restore{:restore @checknulldev printgstate @UD/@saveID known{@UD beg" +"in @saveID end}{0}ifelse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore " +"@checknulldev printgstate 0(grestore)prcmd}def/grestoreall{:grestoreall @check" +"nulldev setstate 0(grestoreall)prcmd}def/rotate{dup type/arraytype ne @dodraw " +"and{dup 1(rotate)prcmd}if/rotate sysexec applyscalevals}def/scale{dup type/arr" +"aytype ne @dodraw and{2 copy 2(scale)prcmd}if/scale sysexec applyscalevals}def" +"/translate{dup type/arraytype ne @dodraw and{2 copy 2(translate)prcmd}if/trans" +"late sysexec}def/setmatrix{dup/setmatrix sysexec @dodraw{aload pop 6(setmatrix" +")prcmd applyscalevals}{pop}ifelse}def/initmatrix{matrix setmatrix}def/concat{m" +"atrix currentmatrix matrix concatmatrix setmatrix}def/makepattern{gsave<</mx 3" +" -1 roll>>begin<</XUID[1000000 @patcnt]>>copy mx/makepattern sysexec dup begin" +" PatternType 2 lt{PatternType @patcnt BBox aload pop XStep YStep PaintType mx " +"aload pop 15(makepattern)prcmd :newpath matrix setmatrix dup PaintProc 0 1(mak" +"epattern)prcmd @GD/@patcnt @patcnt 1 add put}if end end grestore}def/setpatter" +"n{dup begin PatternType end 1 eq{begin PaintType 1 eq{XUID aload pop exch pop " +"1}{:gsave[currentcolorspace aload length -1 roll pop]/setcolorspace sysexec/se" +"tcolor sysexec XUID aload pop exch pop currentrgbcolor :grestore 4}ifelse(setp" +"attern)prcmd currentcolorspace 0 get/Pattern ne{[/Pattern currentcolorspace]/s" +"etcolorspace sysexec}if currentcolorspace @setcolorspace end}{/setpattern syse" +"xec}ifelse}def/setcolor{dup type/dicttype eq{setpattern}{/setcolor sysexec/cur" +"rentrgbcolor sysexec setrgbcolor}ifelse}def/setcolorspace{dup/setcolorspace sy" +"sexec @setcolorspace}def/@setcolorspace{dup type/arraytype eq{0 get}if/Pattern" +" eq{1}{0}ifelse 1(setcolorspace)prcmd}def/setgray 1 defpr/setcmykcolor 4 defpr" +"/sethsbcolor 3 defpr/setrgbcolor 3 defpr/.setalphaisshape{@SD/.setalphaisshape" +" known{dup/.setalphaisshape sysexec}if{1}{0}ifelse 1(setalphaisshape)prcmd}bin" +"d def/.setfillconstantalpha{@SD/.setfillconstantalpha known{dup/.setfillconsta" +"ntalpha sysexec}if 1(setfillconstantalpha)prcmd}bind def/.setstrokeconstantalp" +"ha{@SD/.setstrokeconstantalpha known{dup/.setstrokeconstantalpha sysexec}if 1(" +"setstrokeconstantalpha)prcmd}bind def/.setopacityalpha{false .setalphaisshape " +"dup .setfillconstantalpha .setstrokeconstantalpha}bind def/.setshapealpha{true" +" .setalphaisshape dup .setfillconstantalpha .setstrokeconstantalpha}bind def/." +"setblendmode{dup/.setblendmode sysexec<</Normal 0/Compatible 0/Multiply 1/Scre" +"en 2/Overlay 3/SoftLight 4/HardLight 5/ColorDodge 6/ColorBurn 7/Darken 8/Light" +"en 9/Difference 10/Exclusion 11/Hue 12/Saturation 13/Color 14/Luminosity 15/Co" +"mpatibleOverprint 16>>exch get 1(setblendmode)prcmd}def/@pdfpagecount{(r)file " +"runpdfbegin pdfpagecount runpdfend}def/@pdfpagebox{(r)file runpdfbegin dup dup" +" 1 lt exch pdfpagecount gt or{pop}{pdfgetpage/MediaBox pget pop aload pop}ifel" +"se runpdfend}def DELAYBIND{.bindnow}if "; diff --git a/dviware/dvisvgm/src/utility.cpp b/dviware/dvisvgm/src/utility.cpp index 8fe31fcf2d..37055f2cb8 100644 --- a/dviware/dvisvgm/src/utility.cpp +++ b/dviware/dvisvgm/src/utility.cpp @@ -2,7 +2,7 @@ ** utility.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -134,17 +134,17 @@ string util::replace (string str, const string &find, const string &repl) { vector<string> util::split (const string &str, const string &sep) { vector<string> parts; if (str.empty() || sep.empty()) - parts.emplace_back(str); + parts.push_back(str); else { size_t left=0; while (left <= str.length()) { size_t right = str.find(sep, left); if (right == string::npos) { - parts.emplace_back(str.substr(left)); + parts.push_back(str.substr(left)); left = string::npos; } else { - parts.emplace_back(str.substr(left, right-left)); + parts.push_back(str.substr(left, right-left)); left = right+sep.length(); } } diff --git a/dviware/dvisvgm/src/utility.hpp b/dviware/dvisvgm/src/utility.hpp index 7ad3bc8d69..275da3cc3a 100644 --- a/dviware/dvisvgm/src/utility.hpp +++ b/dviware/dvisvgm/src/utility.hpp @@ -2,7 +2,7 @@ ** utility.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,6 +25,7 @@ #include <memory> #include <sstream> #include <string> +#include <type_traits> #include <vector> namespace math { @@ -145,6 +146,17 @@ std::unique_ptr<T> static_unique_ptr_cast (std::unique_ptr<U> &&old){ return std::unique_ptr<T>{static_cast<T*>(old.release())}; } +template <typename T> +struct set_const_of { + template <typename U> + struct by { + using type = typename std::conditional< + std::is_const<U>::value, + typename std::add_const<T>::type, + typename std::remove_const<T>::type + >::type; + }; +}; } // namespace util #endif diff --git a/dviware/dvisvgm/src/version.hpp.in b/dviware/dvisvgm/src/version.hpp.in index 20ba32bbd5..70d27f6e48 100644 --- a/dviware/dvisvgm/src/version.hpp.in +++ b/dviware/dvisvgm/src/version.hpp.in @@ -2,7 +2,7 @@ ** version.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/src/windows.hpp b/dviware/dvisvgm/src/windows.hpp index 114420c3d5..5f71bbed1e 100644 --- a/dviware/dvisvgm/src/windows.hpp +++ b/dviware/dvisvgm/src/windows.hpp @@ -2,7 +2,7 @@ ** windows.hpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/BezierTest.cpp b/dviware/dvisvgm/tests/BezierTest.cpp index e03e4670fe..aa86660d84 100644 --- a/dviware/dvisvgm/tests/BezierTest.cpp +++ b/dviware/dvisvgm/tests/BezierTest.cpp @@ -2,7 +2,7 @@ ** BezierTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/BitmapTest.cpp b/dviware/dvisvgm/tests/BitmapTest.cpp index 7c12d80b35..547988bf57 100644 --- a/dviware/dvisvgm/tests/BitmapTest.cpp +++ b/dviware/dvisvgm/tests/BitmapTest.cpp @@ -2,7 +2,7 @@ ** BitmapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/BoundingBoxTest.cpp b/dviware/dvisvgm/tests/BoundingBoxTest.cpp index 417080b5be..15c9ae0e00 100644 --- a/dviware/dvisvgm/tests/BoundingBoxTest.cpp +++ b/dviware/dvisvgm/tests/BoundingBoxTest.cpp @@ -2,7 +2,7 @@ ** BoundingBoxTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/CMapManagerTest.cpp b/dviware/dvisvgm/tests/CMapManagerTest.cpp index 5e4a98b9e7..2456780e4f 100644 --- a/dviware/dvisvgm/tests/CMapManagerTest.cpp +++ b/dviware/dvisvgm/tests/CMapManagerTest.cpp @@ -2,7 +2,7 @@ ** CMapManagerTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/CMapReaderTest.cpp b/dviware/dvisvgm/tests/CMapReaderTest.cpp index 28df86bb41..e890562f56 100644 --- a/dviware/dvisvgm/tests/CMapReaderTest.cpp +++ b/dviware/dvisvgm/tests/CMapReaderTest.cpp @@ -2,7 +2,7 @@ ** CMapReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/CMapTest.cpp b/dviware/dvisvgm/tests/CMapTest.cpp index 68a216a898..1b95e31cce 100644 --- a/dviware/dvisvgm/tests/CMapTest.cpp +++ b/dviware/dvisvgm/tests/CMapTest.cpp @@ -2,7 +2,7 @@ ** CMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/CalculatorTest.cpp b/dviware/dvisvgm/tests/CalculatorTest.cpp index af79a4c8e1..09945222d4 100644 --- a/dviware/dvisvgm/tests/CalculatorTest.cpp +++ b/dviware/dvisvgm/tests/CalculatorTest.cpp @@ -2,7 +2,7 @@ ** CalculatorTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -25,7 +25,10 @@ TEST(CalculatorTest, eval) { Calculator calc; + EXPECT_EQ(calc.eval("2"), 2); + EXPECT_EQ(calc.eval("-2"), -2); EXPECT_EQ(calc.eval("2+3+4"), 9); + 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); @@ -36,7 +39,11 @@ TEST(CalculatorTest, eval) { EXPECT_EQ(calc.eval("(1+2)-(3+4)"), -4); EXPECT_EQ(calc.eval("-2+3+4"), 5); EXPECT_EQ(calc.eval("3/2"), 1.5); + EXPECT_EQ(calc.eval("1+3/2"), 2.5); + EXPECT_EQ(calc.eval("3/2+1"), 2.5); EXPECT_EQ(calc.eval("3%2"), 1); + EXPECT_EQ(calc.eval("1+3%2"), 2); + EXPECT_EQ(calc.eval("3%2+1"), 2); EXPECT_EQ(calc.eval("-(4)"), -4); } @@ -51,6 +58,8 @@ TEST(CalculatorTest, variables) { calc.setVariable("b", 3); EXPECT_EQ(calc.eval("a+b"), 5); + EXPECT_EQ(calc.eval("a+a*b"), 8); + EXPECT_EQ(calc.eval("a*a+b"), 7); EXPECT_EQ(calc.eval("2a+2b"), 10); EXPECT_EQ(calc.eval("2a(1+2b)"), 28); } @@ -64,6 +73,8 @@ TEST(CalculatorTest, exceptions) { ASSERT_THROW(calc.eval("1%0"), CalculatorException); ASSERT_THROW(calc.eval("2*(3+4"), CalculatorException); ASSERT_THROW(calc.eval("2*(3+4))"), CalculatorException); + ASSERT_THROW(calc.eval("2*3+4)"), CalculatorException); + ASSERT_THROW(calc.eval("2(3+4"), CalculatorException); } diff --git a/dviware/dvisvgm/tests/ColorSpecialTest.cpp b/dviware/dvisvgm/tests/ColorSpecialTest.cpp index f05393a61a..453ba09a20 100644 --- a/dviware/dvisvgm/tests/ColorSpecialTest.cpp +++ b/dviware/dvisvgm/tests/ColorSpecialTest.cpp @@ -2,7 +2,7 @@ ** ColorSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/ColorTest.cpp b/dviware/dvisvgm/tests/ColorTest.cpp index c82d384fae..116400ef91 100644 --- a/dviware/dvisvgm/tests/ColorTest.cpp +++ b/dviware/dvisvgm/tests/ColorTest.cpp @@ -2,7 +2,7 @@ ** ColorTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/CommandLineTest.cpp b/dviware/dvisvgm/tests/CommandLineTest.cpp index ad7b0768c2..e9149ffeb6 100644 --- a/dviware/dvisvgm/tests/CommandLineTest.cpp +++ b/dviware/dvisvgm/tests/CommandLineTest.cpp @@ -2,7 +2,7 @@ ** CommandLineTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/DVIReaderTest.cpp b/dviware/dvisvgm/tests/DVIReaderTest.cpp index e5b0ef8dc0..9998ccfbcc 100644 --- a/dviware/dvisvgm/tests/DVIReaderTest.cpp +++ b/dviware/dvisvgm/tests/DVIReaderTest.cpp @@ -2,7 +2,7 @@ ** DVIReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/DependencyGraphTest.cpp b/dviware/dvisvgm/tests/DependencyGraphTest.cpp index 866d505864..6246e35738 100644 --- a/dviware/dvisvgm/tests/DependencyGraphTest.cpp +++ b/dviware/dvisvgm/tests/DependencyGraphTest.cpp @@ -2,7 +2,7 @@ ** DependencyGraphTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/DirectoryTest.cpp b/dviware/dvisvgm/tests/DirectoryTest.cpp index b610737930..7534cc498c 100644 --- a/dviware/dvisvgm/tests/DirectoryTest.cpp +++ b/dviware/dvisvgm/tests/DirectoryTest.cpp @@ -2,7 +2,7 @@ ** DirectoryTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp b/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp index 89dba64201..c7963b290c 100644 --- a/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp +++ b/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp @@ -2,7 +2,7 @@ ** DvisvgmSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/EllipticalArcTest.cpp b/dviware/dvisvgm/tests/EllipticalArcTest.cpp index 4bf4977cca..4e367a4804 100644 --- a/dviware/dvisvgm/tests/EllipticalArcTest.cpp +++ b/dviware/dvisvgm/tests/EllipticalArcTest.cpp @@ -2,7 +2,7 @@ ** EllipticalArcTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/EmSpecialTest.cpp b/dviware/dvisvgm/tests/EmSpecialTest.cpp index 00cc10f73c..c06ea92592 100644 --- a/dviware/dvisvgm/tests/EmSpecialTest.cpp +++ b/dviware/dvisvgm/tests/EmSpecialTest.cpp @@ -2,7 +2,7 @@ ** EmSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -152,7 +152,7 @@ TEST_F(EmSpecialTest, vline) { handler.processSpecial("point 1, 10, 10"); handler.processSpecial("point 2, 100, 100"); handler.processSpecial("line 1v, 2v, 10bp"); // cut line ends vertically - EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='10,17.07 10,2.93 100,92.93 100,107.07'/>\n</g>"); + EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='10 17.07 10 2.93 100 92.93 100 107.07'/>\n</g>"); } @@ -160,7 +160,7 @@ TEST_F(EmSpecialTest, hline) { handler.processSpecial("point 1, 10, 10"); handler.processSpecial("point 2, 100, 100"); handler.processSpecial("line 1h, 2h, 10bp"); // cut line ends horizontally - EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='2.93,10 17.07,10 107.07,100 92.93,100'/>\n</g>"); + EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='2.93 10 17.07 10 107.07 100 92.93 100'/>\n</g>"); } @@ -168,14 +168,14 @@ TEST_F(EmSpecialTest, hvline) { handler.processSpecial("point 1, 10, 10"); handler.processSpecial("point 2, 100, 100"); handler.processSpecial("line 1h, 2v, 10bp"); // cut line ends horizontally - EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='2.93,10 17.07,10 100,92.93 100,107.07'/>\n</g>"); + EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='2.93 10 17.07 10 100 92.93 100 107.07'/>\n</g>"); recorder.clear(); recorder.setColor(Color(0.0, 0.0, 1.0)); handler.processSpecial("point 1, 10, 10"); handler.processSpecial("point 2, 100, 100"); handler.processSpecial("line 1v, 2h, 10bp"); // cut line ends horizontally - EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='10,17.07 10,2.93 107.07,100 92.93,100' fill='#00f'/>\n</g>"); + EXPECT_EQ(recorder.getPageXML(), "<g id='page1'>\n<polygon points='10 17.07 10 2.93 107.07 100 92.93 100' fill='#00f'/>\n</g>"); } diff --git a/dviware/dvisvgm/tests/FileFinderTest.cpp b/dviware/dvisvgm/tests/FileFinderTest.cpp index 7ea9bce627..a19bbb3341 100644 --- a/dviware/dvisvgm/tests/FileFinderTest.cpp +++ b/dviware/dvisvgm/tests/FileFinderTest.cpp @@ -2,7 +2,7 @@ ** FileFinderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/FilePathTest.cpp b/dviware/dvisvgm/tests/FilePathTest.cpp index d5b6f67d4b..c985e55945 100644 --- a/dviware/dvisvgm/tests/FilePathTest.cpp +++ b/dviware/dvisvgm/tests/FilePathTest.cpp @@ -2,7 +2,7 @@ ** FilePathTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -90,16 +90,27 @@ TEST(FilePathTest, file2) { } +TEST(FilePathTest, file3) { + FilePath fp("/f.ext", true, "/x/y"); + ASSERT_EQ(fp.absolute(), "/f.ext"); + ASSERT_EQ(fp.relative("/a/b"), "../../f.ext"); +} + + TEST(FilePathTest, autodetect) { FileSystem::chdir(SRCDIR); FilePath fp1("FilePathTest.cpp"); ASSERT_TRUE(fp1.isFile()); ASSERT_FALSE(fp1.empty()); string cwd = FileSystem::getcwd(); +#ifdef _WIN32 + if (cwd.length() >=2 && isalpha(cwd[0]) && cwd[1] == ':') + cwd[0] = tolower(cwd[0]); +#endif ASSERT_EQ(fp1.absolute(), cwd + "/FilePathTest.cpp") << "fp1=" << fp1.absolute(); FilePath fp2(""); ASSERT_FALSE(fp2.isFile()); ASSERT_FALSE(fp2.empty()); - ASSERT_EQ(fp2.absolute(), FileSystem::getcwd()); + ASSERT_EQ(fp2.absolute(), cwd); } diff --git a/dviware/dvisvgm/tests/FileSystemTest.cpp b/dviware/dvisvgm/tests/FileSystemTest.cpp index e5acd22b73..93fa58c292 100644 --- a/dviware/dvisvgm/tests/FileSystemTest.cpp +++ b/dviware/dvisvgm/tests/FileSystemTest.cpp @@ -2,7 +2,7 @@ ** FileSystemTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/FontCacheTest.cpp b/dviware/dvisvgm/tests/FontCacheTest.cpp index d0e05be49a..ab7d20ad97 100644 --- a/dviware/dvisvgm/tests/FontCacheTest.cpp +++ b/dviware/dvisvgm/tests/FontCacheTest.cpp @@ -2,7 +2,7 @@ ** FontCacheTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/FontManagerTest.cpp b/dviware/dvisvgm/tests/FontManagerTest.cpp index 2ddb5b1064..e5263d3e51 100644 --- a/dviware/dvisvgm/tests/FontManagerTest.cpp +++ b/dviware/dvisvgm/tests/FontManagerTest.cpp @@ -2,7 +2,7 @@ ** FontManagerTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -23,16 +23,23 @@ #include "Font.hpp" #include "FontManager.hpp" +#ifndef SRCDIR +#define SRCDIR "." +#endif + + class FontManagerTest : public ::testing::Test { public: FontManagerTest () : fm(FontManager::instance()) { fm.registerFont(10, "cmr10", 1274110073, 10, 10); fm.registerFont(11, "cmr10", 1274110073, 10, 12); fm.registerFont( 9, "cmr10", 1274110073, 10, 14); + fm.registerFont(12, SRCDIR"/data/lmmono12-regular.otf", 0, 12, _fontStyle, Color(.0, .0, 1.0)); } protected: FontManager &fm; + FontStyle _fontStyle; }; @@ -40,11 +47,12 @@ TEST_F(FontManagerTest, fontID1) { EXPECT_EQ(fm.fontID(10), 0); EXPECT_EQ(fm.fontID(11), 1); EXPECT_EQ(fm.fontID(9), 2); + EXPECT_EQ(fm.fontID(12), 3); EXPECT_EQ(fm.fontID(1), -1); } -TEST_F(FontManagerTest, font_ID2) { +TEST_F(FontManagerTest, fontID2) { EXPECT_EQ(fm.fontID("cmr10"), 0); } @@ -54,6 +62,7 @@ TEST_F(FontManagerTest, getFont) { EXPECT_TRUE(f1); EXPECT_EQ(f1->name(), "cmr10"); EXPECT_TRUE(dynamic_cast<const PhysicalFontImpl*>(f1)); + EXPECT_EQ(f1->color(), Color::BLACK); const Font *f2 = fm.getFont(11); EXPECT_TRUE(f2); @@ -61,11 +70,42 @@ TEST_F(FontManagerTest, getFont) { EXPECT_EQ(f2->name(), "cmr10"); EXPECT_TRUE(dynamic_cast<const PhysicalFontProxy*>(f2)); EXPECT_EQ(f2->uniqueFont(), f1); + EXPECT_EQ(f2->color(), Color::BLACK); + + const Font *f3 = fm.getFont(12); + EXPECT_TRUE(f3); + EXPECT_NE(f2, f3); + EXPECT_EQ(f3->name(), "nf0"); + EXPECT_TRUE(dynamic_cast<const NativeFontImpl*>(f3)); + EXPECT_TRUE(dynamic_cast<const PhysicalFont*>(f3)); + EXPECT_EQ(f3->uniqueFont(), f3); + EXPECT_EQ(f3->color(), Color(.0, .0, 1.0)); +} + + +TEST_F(FontManagerTest, font_cast) { + const Font *f1 = fm.getFont(10); + EXPECT_TRUE(f1); + EXPECT_EQ(font_cast<const PhysicalFont*>(f1), f1); + EXPECT_EQ(font_cast<const NativeFont*>(f1), nullptr); + EXPECT_EQ(font_cast<const VirtualFont*>(f1), nullptr); + + const Font *f2 = fm.getFont(11); + EXPECT_TRUE(f2); + EXPECT_EQ(font_cast<const PhysicalFont*>(f2), f2); + EXPECT_EQ(font_cast<const NativeFont*>(f1), nullptr); + EXPECT_EQ(font_cast<const VirtualFont*>(f1), nullptr); + + const Font *f3 = fm.getFont(12); + EXPECT_TRUE(f3); + EXPECT_EQ(font_cast<const PhysicalFont*>(f3), f3); + EXPECT_EQ(font_cast<const NativeFont*>(f3), f3); + EXPECT_EQ(font_cast<const VirtualFont*>(f3), nullptr); } TEST_F(FontManagerTest, getFontById) { EXPECT_EQ(fm.getFont(10), fm.getFontById(0)); EXPECT_EQ(fm.getFont("cmr10"), fm.getFontById(0)); + EXPECT_EQ(fm.getFont(12), fm.getFontById(3)); } - diff --git a/dviware/dvisvgm/tests/FontMapTest.cpp b/dviware/dvisvgm/tests/FontMapTest.cpp index f73dfe39bd..8f3e512fea 100644 --- a/dviware/dvisvgm/tests/FontMapTest.cpp +++ b/dviware/dvisvgm/tests/FontMapTest.cpp @@ -2,7 +2,7 @@ ** FontMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/GFGlyphTracerTest.cpp b/dviware/dvisvgm/tests/GFGlyphTracerTest.cpp index 71c08ee8e5..071bccf5c6 100644 --- a/dviware/dvisvgm/tests/GFGlyphTracerTest.cpp +++ b/dviware/dvisvgm/tests/GFGlyphTracerTest.cpp @@ -2,7 +2,7 @@ ** GFGlyphTracerTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/GFReaderTest.cpp b/dviware/dvisvgm/tests/GFReaderTest.cpp index ac582dcb29..82c11e9eec 100644 --- a/dviware/dvisvgm/tests/GFReaderTest.cpp +++ b/dviware/dvisvgm/tests/GFReaderTest.cpp @@ -2,7 +2,7 @@ ** GFReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/GhostscriptTest.cpp b/dviware/dvisvgm/tests/GhostscriptTest.cpp index 909fc80f6a..359d99a8bf 100644 --- a/dviware/dvisvgm/tests/GhostscriptTest.cpp +++ b/dviware/dvisvgm/tests/GhostscriptTest.cpp @@ -2,7 +2,7 @@ ** GhostscriptTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/GraphicsPathTest.cpp b/dviware/dvisvgm/tests/GraphicsPathTest.cpp index a6af6cdc77..625314c08d 100644 --- a/dviware/dvisvgm/tests/GraphicsPathTest.cpp +++ b/dviware/dvisvgm/tests/GraphicsPathTest.cpp @@ -2,7 +2,7 @@ ** GraphicsPathTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/HashFunctionTest.cpp b/dviware/dvisvgm/tests/HashFunctionTest.cpp index 0d5b7bc1b4..bf56ebda2d 100644 --- a/dviware/dvisvgm/tests/HashFunctionTest.cpp +++ b/dviware/dvisvgm/tests/HashFunctionTest.cpp @@ -2,7 +2,7 @@ ** HashFunctionTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/JFMReaderTest.cpp b/dviware/dvisvgm/tests/JFMReaderTest.cpp index b82d00febf..db6cb012f4 100644 --- a/dviware/dvisvgm/tests/JFMReaderTest.cpp +++ b/dviware/dvisvgm/tests/JFMReaderTest.cpp @@ -2,7 +2,7 @@ ** JFMReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/LengthTest.cpp b/dviware/dvisvgm/tests/LengthTest.cpp index f6a5bca573..4db8fe15d9 100644 --- a/dviware/dvisvgm/tests/LengthTest.cpp +++ b/dviware/dvisvgm/tests/LengthTest.cpp @@ -2,7 +2,7 @@ ** LengthTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/Makefile.am b/dviware/dvisvgm/tests/Makefile.am index 438a06b02b..ac841563f3 100644 --- a/dviware/dvisvgm/tests/Makefile.am +++ b/dviware/dvisvgm/tests/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. diff --git a/dviware/dvisvgm/tests/Makefile.in b/dviware/dvisvgm/tests/Makefile.in index 61c6b3458e..d6007f031b 100644 --- a/dviware/dvisvgm/tests/Makefile.in +++ b/dviware/dvisvgm/tests/Makefile.in @@ -999,6 +999,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/dviware/dvisvgm/tests/MapLineTest.cpp b/dviware/dvisvgm/tests/MapLineTest.cpp index 2d25c914f6..155d133e45 100644 --- a/dviware/dvisvgm/tests/MapLineTest.cpp +++ b/dviware/dvisvgm/tests/MapLineTest.cpp @@ -2,7 +2,7 @@ ** MapLineTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/MatrixTest.cpp b/dviware/dvisvgm/tests/MatrixTest.cpp index 2858c66aa6..587501343c 100644 --- a/dviware/dvisvgm/tests/MatrixTest.cpp +++ b/dviware/dvisvgm/tests/MatrixTest.cpp @@ -2,7 +2,7 @@ ** MatrixTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -48,12 +48,12 @@ TEST(MatrixTest, construct1) { TEST(MatrixTest, construct2) { - Matrix m1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + Matrix m1{1, 2, 3, 4, 5, 6, 7, 8, 9}; for (int row=0; row < 3; row++) for (int col=0; col < 3; col++) ASSERT_EQ(m1.get(row, col), 3*row+col+1) << "row=" << row << ", col=" << col; - Matrix m2 = {1, 2, 3, 4, 5, 6}; + Matrix m2{1, 2, 3, 4, 5, 6}; for (int row=0; row < 2; row++) for (int col=0; col < 3; col++) ASSERT_EQ(m2.get(row, col), 3*row+col+1) << "row=" << row << ", col=" << col; diff --git a/dviware/dvisvgm/tests/MessageExceptionTest.cpp b/dviware/dvisvgm/tests/MessageExceptionTest.cpp index 706921c223..396af63ad7 100644 --- a/dviware/dvisvgm/tests/MessageExceptionTest.cpp +++ b/dviware/dvisvgm/tests/MessageExceptionTest.cpp @@ -2,7 +2,7 @@ ** MessageExceptionTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/PDFParserTest.cpp b/dviware/dvisvgm/tests/PDFParserTest.cpp index 868b04de97..39ca9ca27a 100644 --- a/dviware/dvisvgm/tests/PDFParserTest.cpp +++ b/dviware/dvisvgm/tests/PDFParserTest.cpp @@ -2,7 +2,7 @@ ** PDFParserTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/PSInterpreterTest.cpp b/dviware/dvisvgm/tests/PSInterpreterTest.cpp index b40a210314..f396976de8 100644 --- a/dviware/dvisvgm/tests/PSInterpreterTest.cpp +++ b/dviware/dvisvgm/tests/PSInterpreterTest.cpp @@ -2,7 +2,7 @@ ** PSInterpreterTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -52,6 +52,7 @@ class PSTestActions : public PSActions { void rotate (vector<double> &p) override {print("rotate", p);} void save(std::vector<double> &p) override {print("save", p);} void scale (vector<double> &p) override {print("scale", p);} + void setalphaisshape (vector<double> &p) override {print("setalphaisshape", p);} void setblendmode (vector<double> &p) override {print("setblendmode", p);} void setcolorspace (vector<double> &p) override {print("setcolorspace", p);} void setcmykcolor (vector<double> &p) override {print("setcmykcolor", p);} @@ -59,7 +60,6 @@ class PSTestActions : public PSActions { void setfillconstantalpha (vector<double> &p) override {print("setfillconstantalpha", p);} void setgray (vector<double> &p) override {print("setgray", p);} void sethsbcolor (vector<double> &p) override {print("sethsbcolor", p);} - void setisshapealpha (vector<double> &p) override {print("setisshapealpha", p);} void setlinecap (vector<double> &p) override {print("setlinecap", p);} void setlinejoin (vector<double> &p) override {print("setlinejoin", p);} void setlinewidth (vector<double> &p) override {print("setlinewidth", p);} @@ -105,7 +105,10 @@ TEST(PSInterpreterTest, gsave_grestore) { actions.clear(); psi.execute("grestore "); - EXPECT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setcolorspace 0;setrgbcolor 0 0 0;setdash 0;grestore;"); + if (psi.hasFullOpacitySupport()) + EXPECT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setblendmode 0;setalphaisshape 0;setstrokeconstantalpha 1;setfillconstantalpha 1;setcolorspace 0;setrgbcolor 0 0 0;setdash 0;grestore;"); + else + EXPECT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setcolorspace 0;setrgbcolor 0 0 0;setdash 0;grestore;"); actions.clear(); psi.execute("1 setlinecap 5 setmiterlimit 0 1 0 setrgbcolor gsave 0 setlinecap 10 setmiterlimit "); @@ -113,7 +116,10 @@ TEST(PSInterpreterTest, gsave_grestore) { actions.clear(); psi.execute("grestore "); - EXPECT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setcolorspace 0;setrgbcolor 0 1 0;setdash 0;grestore;"); + if (psi.hasFullOpacitySupport()) + EXPECT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setblendmode 0;setalphaisshape 0;setstrokeconstantalpha 1;setfillconstantalpha 1;setcolorspace 0;setrgbcolor 0 1 0;setdash 0;grestore;"); + else + EXPECT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setcolorspace 0;setrgbcolor 0 1 0;setdash 0;grestore;"); } diff --git a/dviware/dvisvgm/tests/PageRagesTest.cpp b/dviware/dvisvgm/tests/PageRagesTest.cpp index 60b6eb77ab..8f7effc9f8 100644 --- a/dviware/dvisvgm/tests/PageRagesTest.cpp +++ b/dviware/dvisvgm/tests/PageRagesTest.cpp @@ -2,7 +2,7 @@ ** PageRagesTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/PageSizeTest.cpp b/dviware/dvisvgm/tests/PageSizeTest.cpp index be9a25ec16..ed997951b7 100644 --- a/dviware/dvisvgm/tests/PageSizeTest.cpp +++ b/dviware/dvisvgm/tests/PageSizeTest.cpp @@ -2,7 +2,7 @@ ** PageSizeTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/PairTest.cpp b/dviware/dvisvgm/tests/PairTest.cpp index bbff66b2f7..e5f502cdbc 100644 --- a/dviware/dvisvgm/tests/PairTest.cpp +++ b/dviware/dvisvgm/tests/PairTest.cpp @@ -2,7 +2,7 @@ ** PairTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/PapersizeSpecialTest.cpp b/dviware/dvisvgm/tests/PapersizeSpecialTest.cpp index a4a155e8bc..7cba1c1864 100644 --- a/dviware/dvisvgm/tests/PapersizeSpecialTest.cpp +++ b/dviware/dvisvgm/tests/PapersizeSpecialTest.cpp @@ -2,7 +2,7 @@ ** PapersizeSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/RangeMapTest.cpp b/dviware/dvisvgm/tests/RangeMapTest.cpp index 1d9f46b82f..e9ca516d9c 100644 --- a/dviware/dvisvgm/tests/RangeMapTest.cpp +++ b/dviware/dvisvgm/tests/RangeMapTest.cpp @@ -2,7 +2,7 @@ ** RangeMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/SVGOutputTest.cpp b/dviware/dvisvgm/tests/SVGOutputTest.cpp index a20dfd63cb..79f89728e1 100644 --- a/dviware/dvisvgm/tests/SVGOutputTest.cpp +++ b/dviware/dvisvgm/tests/SVGOutputTest.cpp @@ -2,7 +2,7 @@ ** SVGOutputTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/ShadingPatchTest.cpp b/dviware/dvisvgm/tests/ShadingPatchTest.cpp index 3cf6b1096b..15e643f977 100644 --- a/dviware/dvisvgm/tests/ShadingPatchTest.cpp +++ b/dviware/dvisvgm/tests/ShadingPatchTest.cpp @@ -2,7 +2,7 @@ ** ShadingPatchTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/SpecialManagerTest.cpp b/dviware/dvisvgm/tests/SpecialManagerTest.cpp index 156dd14f2f..0ccaf5a172 100644 --- a/dviware/dvisvgm/tests/SpecialManagerTest.cpp +++ b/dviware/dvisvgm/tests/SpecialManagerTest.cpp @@ -2,7 +2,7 @@ ** SpecialManagerTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/SplittedCharInputBufferTest.cpp b/dviware/dvisvgm/tests/SplittedCharInputBufferTest.cpp index 6ca61d53ed..093b4c652e 100644 --- a/dviware/dvisvgm/tests/SplittedCharInputBufferTest.cpp +++ b/dviware/dvisvgm/tests/SplittedCharInputBufferTest.cpp @@ -2,7 +2,7 @@ ** SplittedCharInputBufferTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/StreamInputBufferTest.cpp b/dviware/dvisvgm/tests/StreamInputBufferTest.cpp index 10124341e8..845c5f22ba 100644 --- a/dviware/dvisvgm/tests/StreamInputBufferTest.cpp +++ b/dviware/dvisvgm/tests/StreamInputBufferTest.cpp @@ -2,7 +2,7 @@ ** StreamInputBufferTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/StreamReaderTest.cpp b/dviware/dvisvgm/tests/StreamReaderTest.cpp index 864efab3b4..8a517be03c 100644 --- a/dviware/dvisvgm/tests/StreamReaderTest.cpp +++ b/dviware/dvisvgm/tests/StreamReaderTest.cpp @@ -2,7 +2,7 @@ ** StreamReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/StreamWriterTest.cpp b/dviware/dvisvgm/tests/StreamWriterTest.cpp index 05d5da2e3f..afddcfdfc2 100644 --- a/dviware/dvisvgm/tests/StreamWriterTest.cpp +++ b/dviware/dvisvgm/tests/StreamWriterTest.cpp @@ -2,7 +2,7 @@ ** StreamWriterTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/StringMatcherTest.cpp b/dviware/dvisvgm/tests/StringMatcherTest.cpp index 89ee78fa8b..ca3072c7d3 100644 --- a/dviware/dvisvgm/tests/StringMatcherTest.cpp +++ b/dviware/dvisvgm/tests/StringMatcherTest.cpp @@ -2,7 +2,7 @@ ** StringMatcherTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/SubfontTest.cpp b/dviware/dvisvgm/tests/SubfontTest.cpp index 939fef81c9..95a4476ef7 100644 --- a/dviware/dvisvgm/tests/SubfontTest.cpp +++ b/dviware/dvisvgm/tests/SubfontTest.cpp @@ -2,7 +2,7 @@ ** SubfontTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/TFMReaderTest.cpp b/dviware/dvisvgm/tests/TFMReaderTest.cpp index fa701f036d..8f8da092cb 100644 --- a/dviware/dvisvgm/tests/TFMReaderTest.cpp +++ b/dviware/dvisvgm/tests/TFMReaderTest.cpp @@ -2,7 +2,7 @@ ** TFMReaderTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/TensorProductPatchTest.cpp b/dviware/dvisvgm/tests/TensorProductPatchTest.cpp index 576ce581a8..c31ab1a025 100644 --- a/dviware/dvisvgm/tests/TensorProductPatchTest.cpp +++ b/dviware/dvisvgm/tests/TensorProductPatchTest.cpp @@ -2,7 +2,7 @@ ** TensorProductPatchTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/ToUnicodeMapTest.cpp b/dviware/dvisvgm/tests/ToUnicodeMapTest.cpp index a0a5ee9868..97ae10c07e 100644 --- a/dviware/dvisvgm/tests/ToUnicodeMapTest.cpp +++ b/dviware/dvisvgm/tests/ToUnicodeMapTest.cpp @@ -2,7 +2,7 @@ ** ToUnicodeMapTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/TpicSpecialTest.cpp b/dviware/dvisvgm/tests/TpicSpecialTest.cpp index 9f88b13412..795347842c 100644 --- a/dviware/dvisvgm/tests/TpicSpecialTest.cpp +++ b/dviware/dvisvgm/tests/TpicSpecialTest.cpp @@ -2,7 +2,7 @@ ** TpicSpecialTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -154,7 +154,7 @@ TEST_F(TpicSpecialTest, stroke_polyline) { handler.processSpecial("pa", "1000 0"); handler.processSpecial("fp"); EXPECT_EQ(recorder.getXMLSnippet(), - "<polyline fill='none' stroke-linecap='round' points='0,0 72,72 72,0' stroke='#000' stroke-width='1'/>" + "<polyline fill='none' stroke-linecap='round' points='0 0 72 72 72 0' stroke='#000'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -169,7 +169,7 @@ TEST_F(TpicSpecialTest, stroke_polygon) { handler.processSpecial("pa", "0 0"); handler.processSpecial("fp"); EXPECT_EQ(recorder.getXMLSnippet(), - "<polygon fill='none' points='0,0 72,72 72,0' stroke='#000' stroke-width='1'/>" + "<polygon fill='none' points='0 0 72 72 72 0' stroke='#000'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -184,7 +184,7 @@ TEST_F(TpicSpecialTest, fill_polygon) { handler.processSpecial("wh"); handler.processSpecial("fp"); EXPECT_EQ(recorder.getXMLSnippet(), - "<polygon fill='#fff' points='0,0 72,72 72,0' stroke='#000' stroke-width='1'/>" + "<polygon fill='#fff' points='0 0 72 72 72 0' stroke='#000'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -196,7 +196,7 @@ TEST_F(TpicSpecialTest, fill_polygon) { handler.processSpecial("wh"); handler.processSpecial("ip"); EXPECT_EQ(recorder.getXMLSnippet(), - "<polygon fill='#fff' points='0,0 72,72 72,0'/>" + "<polygon fill='#fff' points='0 0 72 72 72 0'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -211,7 +211,7 @@ TEST_F(TpicSpecialTest, fill_dashed_polygon) { handler.processSpecial("wh"); handler.processSpecial("da", "2"); EXPECT_EQ(recorder.getXMLSnippet(), - "<polygon fill='#fff' points='0,0 72,72 72,0' stroke='#000' stroke-width='1' stroke-dasharray='144'/>" + "<polygon fill='#fff' points='0 0 72 72 72 0' stroke='#000' stroke-dasharray='144'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -227,7 +227,7 @@ TEST_F(TpicSpecialTest, fill_dotted_polygon) { handler.processSpecial("wh"); handler.processSpecial("dt", "2 2"); EXPECT_EQ(recorder.getXMLSnippet(), - "<polygon fill='#fff' points='0,0 72,72 72,0' stroke='#000' stroke-width='36' stroke-dasharray='36 144'/>" + "<polygon fill='#fff' points='0 0 72 72 72 0' stroke='#000' stroke-width='36' stroke-dasharray='36 144'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -239,7 +239,7 @@ TEST_F(TpicSpecialTest, stroke_spline) { handler.processSpecial("pa", "1000 1000"); handler.processSpecial("sp"); EXPECT_EQ(recorder.getXMLSnippet(), - "<polyline fill='none' stroke-linecap='round' points='0,0 72,72' stroke='#000' stroke-width='1'/>" + "<polyline fill='none' stroke-linecap='round' points='0 0 72 72' stroke='#000'/>" ); recorder.clear(); handler.processSpecial("pa", "0 0"); @@ -250,7 +250,7 @@ TEST_F(TpicSpecialTest, stroke_spline) { handler.processSpecial("pa", "1000 500"); handler.processSpecial("sp"); EXPECT_EQ(recorder.getXMLSnippet(), - "<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T144 90L72 36' stroke='#000' stroke-width='1'/>" + "<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T144 90L72 36' stroke='#000'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -266,7 +266,7 @@ TEST_F(TpicSpecialTest, stroke_dashed_spline) { handler.processSpecial("pa", "0 0"); handler.processSpecial("sp", "1"); EXPECT_EQ(recorder.getXMLSnippet(), - "<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T108 72Z' stroke='#000' stroke-width='1' stroke-dasharray='72'/>" + "<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T108 72Z' stroke='#000' stroke-dasharray='72'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -282,7 +282,7 @@ TEST_F(TpicSpecialTest, stroke_dotted_spline) { handler.processSpecial("pa", "1000 500"); handler.processSpecial("sp", "-1"); EXPECT_EQ(recorder.getXMLSnippet(), - "<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T144 90L72 36' stroke='#000' stroke-width='1' stroke-dasharray='1 72'/>" + "<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T144 90L72 36' stroke='#000' stroke-dasharray='1 72'/>" ); EXPECT_DOUBLE_EQ(handler.penwidth(), 1.0); EXPECT_LT(handler.grayLevel(), 0); @@ -292,12 +292,12 @@ TEST_F(TpicSpecialTest, stroke_dotted_spline) { TEST_F(TpicSpecialTest, stroke_ellipse) { handler.processSpecial("ar", "0 0 500 500 0 7"); EXPECT_EQ(recorder.getXMLSnippet(), - "<circle cx='0' cy='0' r='36' stroke-width='1' stroke='#000' fill='none'/>" + "<circle cx='0' cy='0' r='36' stroke='#000' fill='none'/>" ); recorder.clear(); handler.processSpecial("ar", "0 0 1000 500 0 7"); EXPECT_EQ(recorder.getXMLSnippet(), - "<ellipse cx='0' cy='0' rx='72' ry='36' stroke-width='1' stroke='#000' fill='none'/>" + "<ellipse cx='0' cy='0' rx='72' ry='36' stroke='#000' fill='none'/>" ); recorder.clear(); handler.processSpecial("pn", "100"); @@ -312,13 +312,13 @@ TEST_F(TpicSpecialTest, fill_ellipse) { handler.processSpecial("bk"); handler.processSpecial("ia", "0 0 500 500 0 7"); EXPECT_EQ(recorder.getXMLSnippet(), - "<circle cx='0' cy='0' r='36' fill='#000'/>" + "<circle cx='0' cy='0' r='36'/>" ); recorder.clear(); handler.processSpecial("bk"); handler.processSpecial("ia", "0 0 1000 500 0 7"); EXPECT_EQ(recorder.getXMLSnippet(), - "<ellipse cx='0' cy='0' rx='72' ry='36' fill='#000'/>" + "<ellipse cx='0' cy='0' rx='72' ry='36'/>" ); recorder.clear(); handler.processSpecial("pn", "100"); @@ -333,37 +333,37 @@ TEST_F(TpicSpecialTest, fill_ellipse) { TEST_F(TpicSpecialTest, stroke_arc) { handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(math::PI/4)); EXPECT_EQ(recorder.getXMLSnippet(), - "<path d='M72 0A72 36 0 0 1 50.91 25.46' stroke-width='1' stroke='#000' stroke-linecap='round' fill='none'/>" + "<path d='M72 0A72 36 0 0 1 50.91 25.46' stroke='#000' stroke-linecap='round' fill='none'/>" ); recorder.clear(); handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(math::PI/2)); EXPECT_EQ(recorder.getXMLSnippet(), - "<path d='M72 0A72 36 0 0 1 0 36' stroke-width='1' stroke='#000' stroke-linecap='round' fill='none'/>" + "<path d='M72 0A72 36 0 0 1 0 36' stroke='#000' stroke-linecap='round' fill='none'/>" ); recorder.clear(); handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(3*math::PI/4)); EXPECT_EQ(recorder.getXMLSnippet(), - "<path d='M72 0A72 36 0 0 1-50.91 25.46' stroke-width='1' stroke='#000' stroke-linecap='round' fill='none'/>" + "<path d='M72 0A72 36 0 0 1-50.91 25.46' stroke='#000' stroke-linecap='round' fill='none'/>" ); recorder.clear(); handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(math::PI)); EXPECT_EQ(recorder.getXMLSnippet(), - "<path d='M72 0A72 36 0 1 1-72 0' stroke-width='1' stroke='#000' stroke-linecap='round' fill='none'/>" + "<path d='M72 0A72 36 0 1 1-72 0' stroke='#000' stroke-linecap='round' fill='none'/>" ); recorder.clear(); handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(5*math::PI/4)); EXPECT_EQ(recorder.getXMLSnippet(), - "<path d='M72 0A72 36 0 1 1-50.91-25.46' stroke-width='1' stroke='#000' stroke-linecap='round' fill='none'/>" + "<path d='M72 0A72 36 0 1 1-50.91-25.46' stroke='#000' stroke-linecap='round' fill='none'/>" ); recorder.clear(); handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(3*math::PI/2)); EXPECT_EQ(recorder.getXMLSnippet(), - "<path d='M72 0A72 36 0 1 1 0-36' stroke-width='1' stroke='#000' stroke-linecap='round' fill='none'/>" + "<path d='M72 0A72 36 0 1 1 0-36' stroke='#000' stroke-linecap='round' fill='none'/>" ); recorder.clear(); handler.processSpecial("ar", "0 0 1000 500 0 "+to_string(-3*math::PI/2)); EXPECT_EQ(recorder.getXMLSnippet(), - "<path d='M72 0A72 36 0 0 1 0 36' stroke-width='1' stroke='#000' stroke-linecap='round' fill='none'/>" + "<path d='M72 0A72 36 0 0 1 0 36' stroke='#000' stroke-linecap='round' fill='none'/>" ); } diff --git a/dviware/dvisvgm/tests/TriangularPatchTest.cpp b/dviware/dvisvgm/tests/TriangularPatchTest.cpp index 86ef13fb36..29fa437ad2 100644 --- a/dviware/dvisvgm/tests/TriangularPatchTest.cpp +++ b/dviware/dvisvgm/tests/TriangularPatchTest.cpp @@ -2,7 +2,7 @@ ** TriangularPatchTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/UnicodeTest.cpp b/dviware/dvisvgm/tests/UnicodeTest.cpp index 109b63f1ec..4b39ec2bce 100644 --- a/dviware/dvisvgm/tests/UnicodeTest.cpp +++ b/dviware/dvisvgm/tests/UnicodeTest.cpp @@ -2,7 +2,7 @@ ** UnicodeTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/UtilityTest.cpp b/dviware/dvisvgm/tests/UtilityTest.cpp index 4ca490379f..2e8ae696b7 100644 --- a/dviware/dvisvgm/tests/UtilityTest.cpp +++ b/dviware/dvisvgm/tests/UtilityTest.cpp @@ -2,7 +2,7 @@ ** UtilityTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/VectorIteratorTest.cpp b/dviware/dvisvgm/tests/VectorIteratorTest.cpp index 905a6fa743..8476c9a9cc 100644 --- a/dviware/dvisvgm/tests/VectorIteratorTest.cpp +++ b/dviware/dvisvgm/tests/VectorIteratorTest.cpp @@ -2,7 +2,7 @@ ** VectorIteratorTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/VectorStreamTest.cpp b/dviware/dvisvgm/tests/VectorStreamTest.cpp index 022b1c1fdc..4d767bb425 100644 --- a/dviware/dvisvgm/tests/VectorStreamTest.cpp +++ b/dviware/dvisvgm/tests/VectorStreamTest.cpp @@ -2,7 +2,7 @@ ** VectorStreamTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/XMLNodeTest.cpp b/dviware/dvisvgm/tests/XMLNodeTest.cpp index 8108d88db8..d7d4159970 100644 --- a/dviware/dvisvgm/tests/XMLNodeTest.cpp +++ b/dviware/dvisvgm/tests/XMLNodeTest.cpp @@ -2,7 +2,7 @@ ** XMLNodeTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/XMLStringTest.cpp b/dviware/dvisvgm/tests/XMLStringTest.cpp index 18c129c4cc..2ebe8cb0f8 100644 --- a/dviware/dvisvgm/tests/XMLStringTest.cpp +++ b/dviware/dvisvgm/tests/XMLStringTest.cpp @@ -2,7 +2,7 @@ ** XMLStringTest.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/check-conv b/dviware/dvisvgm/tests/check-conv index f87496762c..a68e88e888 100755 --- a/dviware/dvisvgm/tests/check-conv +++ b/dviware/dvisvgm/tests/check-conv @@ -2,7 +2,7 @@ # 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. -# Copyright (C) 2009-2020 Martin Gieseking <martin.gieseking@uos.de> +# Copyright (C) 2009-2021 Martin Gieseking <martin.gieseking@uos.de> files=(sample frktest) diff --git a/dviware/dvisvgm/tests/data/Makefile.am b/dviware/dvisvgm/tests/data/Makefile.am index 55818cc0c6..af73d01f01 100644 --- a/dviware/dvisvgm/tests/data/Makefile.am +++ b/dviware/dvisvgm/tests/data/Makefile.am @@ -1,5 +1,5 @@ ## This file is part of dvisvgm -## Copyright (C) 2016-2020 Martin Gieseking <martin.gieseking@uos.de> +## Copyright (C) 2016-2021 Martin Gieseking <martin.gieseking@uos.de> ## ## Process this file with automake. @@ -13,6 +13,7 @@ EXTRA_DIST = \ frktest.dvi \ frktest-nf-cmp.svg \ frktest-wf-cmp.svg \ + lmmono12-regular.otf \ sample.dvi \ sample-nf-cmp.svg \ sample.sfd \ diff --git a/dviware/dvisvgm/tests/data/Makefile.in b/dviware/dvisvgm/tests/data/Makefile.in index 78c73d04c7..3b44c55df0 100644 --- a/dviware/dvisvgm/tests/data/Makefile.in +++ b/dviware/dvisvgm/tests/data/Makefile.in @@ -271,6 +271,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -293,6 +294,7 @@ EXTRA_DIST = \ frktest.dvi \ frktest-nf-cmp.svg \ frktest-wf-cmp.svg \ + lmmono12-regular.otf \ sample.dvi \ sample-nf-cmp.svg \ sample.sfd \ diff --git a/dviware/dvisvgm/tests/data/lmmono12-regular.otf b/dviware/dvisvgm/tests/data/lmmono12-regular.otf Binary files differnew file mode 100644 index 0000000000..dc59181c10 --- /dev/null +++ b/dviware/dvisvgm/tests/data/lmmono12-regular.otf diff --git a/dviware/dvisvgm/tests/genhashcheck.py b/dviware/dvisvgm/tests/genhashcheck.py index 5f3495128c..88a08ab671 100755 --- a/dviware/dvisvgm/tests/genhashcheck.py +++ b/dviware/dvisvgm/tests/genhashcheck.py @@ -2,7 +2,7 @@ # 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. -# Copyright (C) 2016-2020 Martin Gieseking <martin.gieseking@uos.de> +# Copyright (C) 2016-2021 Martin Gieseking <martin.gieseking@uos.de> import re import sys diff --git a/dviware/dvisvgm/tests/normalize.xsl b/dviware/dvisvgm/tests/normalize.xsl index 2b39eba9f7..d231511835 100644 --- a/dviware/dvisvgm/tests/normalize.xsl +++ b/dviware/dvisvgm/tests/normalize.xsl @@ -2,7 +2,7 @@ <!-- ********************************************************************* ** Stylesheet to rearrange font-/path-elements in an SVG file. ** ** It's part of the dvisvgm package. ** -** Copyright (C) 2009-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2009-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/dviware/dvisvgm/tests/testmain.cpp b/dviware/dvisvgm/tests/testmain.cpp index ce75cb5664..323b6c3915 100644 --- a/dviware/dvisvgm/tests/testmain.cpp +++ b/dviware/dvisvgm/tests/testmain.cpp @@ -2,7 +2,7 @@ ** testmain.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** diff --git a/graphics/pstricks/base/Changes b/graphics/pstricks/base/Changes index 598c51f0c2..b6989bc9a0 100644 --- a/graphics/pstricks/base/Changes +++ b/graphics/pstricks/base/Changes @@ -1,4 +1,4 @@ -% $Id: Changes 155 2021-08-23 17:27:13Z herbert $ +% $Id: Changes 164 2021-08-25 19:26:42Z herbert $ Changelog for @@ -25,6 +25,10 @@ pstricks.tex -------- versions like 2.47a have only changes in other files, but not in this main package. +3.05 2021-08-25 - bug fix for Penros fill style + - put tbasic arrows code into new pstricks-arrow.tex +3.04 2021-08-24 - moved complete arrow stuff into pst-arrow. Its hardcore macros + are loaded by default by pstricks.tex 3.03 2021-08-23 - LaTeX option gsfonts=false (default) now uses URW font Symbol instead of GhostScript's StandardSymL->s050000l.pfb 3.02 2021-05-31 - added arrow type T<->T, similar to TikZ @@ -316,6 +320,7 @@ vtex.con ------ pstricks-doc ----------- +2021-08-25 - updated news2021 2021-08-21 - added news2021 2015-11-11 - updated news2015 2015-07-25 - updated news2015 @@ -348,6 +353,7 @@ pstricks-doc ----------- ---- pstricks.pro +1.36 2021-08-25 - fix for function Penrose and PenroseA 1.35 2021-08-21 - fix for new version > 9.53 1.34 2021-03-30 - fix bug for intro to Ghostscript >9.52 1.33 2020-09-21 - suppress Ghostscript warning diff --git a/graphics/pstricks/base/doc/PSTricks.bib b/graphics/pstricks/base/doc/PSTricks.bib index daaa78d445..d49525facf 100644 --- a/graphics/pstricks/base/doc/PSTricks.bib +++ b/graphics/pstricks/base/doc/PSTricks.bib @@ -1,4 +1,21 @@ @STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} } +@STRING{beiprogramm = {{\TeX}-Beiprogramm}} +@STRING{bretter = {Bretter, die die Welt bedeuten}} +@STRING{dtk = {DTK}} +@STRING{editorial = {Editorial}} +@STRING{fremdebuehne = {Von fremden Bühnen}} +@STRING{fundus = {Aus dem Fundus}} +@STRING{grusswort = {Grußwort}} +@STRING{hinterbuehne = {Hinter der Bühne}} +@STRING{komascript = {\KOMAScript}} +@STRING{leserbriefe = {Leserbriefe}} +@STRING{magazin = {Magazin}} +@STRING{rezensionen = {Bücher und Rezensionen}} +@STRING{schonimmer = {Was Sie schon immer über {\TeX} wissen wollten, \dots}} +@STRING{spielplan = {Spielplan}} +@STRING{theaterkasse = {Von der Theaterkasse}} +@STRING{theatertage = {{\TeX}-Theatertage}} +@STRING{tippstricks = {Tipps und Tricks}} @Book{PostScript, Author = {Kollock, Nikolai G.}, diff --git a/graphics/pstricks/base/doc/pst-doc.cls b/graphics/pstricks/base/doc/pst-doc.cls index fb5d75fb45..e54d5e9893 100644 --- a/graphics/pstricks/base/doc/pst-doc.cls +++ b/graphics/pstricks/base/doc/pst-doc.cls @@ -16,13 +16,13 @@ % \listfiles \ProvidesClass{pst-doc}[2017/04/18 v 0.20 PSTricks documentation class (hv)] -\DeclareOption*{\PassOptionsToClass{\CurrentOption,usegeometry}{scrartcl}} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}} \ProcessOptions\relax % \LoadClass{scrartcl} % \RequirePackage[dvipsnames,x11names,svgnames,table]{xcolor} -\RequirePackage{ifxetex} +\RequirePackage{iftex} \RequirePackage{amsmath, amssymb} \ifxetex \usepackage{unicode-math} @@ -115,7 +115,6 @@ \gdef\index@vals{#1}% \def\FancyVerbFormatLine##1{\FV@ObeyTabs{##1}\use@index@vals}} -\RequirePackage{filecontents} %\singlespace \RequirePackage{showexpl} \renewcommand*\SX@Info{}% @@ -451,64 +450,62 @@ xleftmargin=0pt,xrightmargin=0pt, \providecommand\bgTitle{} \providecommand\LenToUnit[1]{#1\@gobble} -\iffalse -\renewcommand\maketitle{% -\thispagestyle{empty}% -\begin{titlepage} -\ifpdf - \AddToShipoutPicture*{\includegraphics{pst-doc.pdf}} - \vspace*{0.3\textheight} - \parbox{17cm}{\sffamily\RaggedRight\bfseries\huge\@title}\\[5pt] - \parbox{15cm}{\sffamily\Large\@subtitle} +\def\settitle{% + \thispagestyle{empty}% + \begin{titlepage} + \ifpdf + \AddToShipoutPicture*{\includegraphics{pst-doc.pdf}} + \vspace*{0.3\textheight} + \parbox{17cm}{\sffamily\RaggedRight\bfseries\huge\@title}\\[5pt] + \parbox{15cm}{\sffamily\Large\@subtitle} - \vspace{5cm} - \parbox{10cm}{\sffamily\@date} + \vspace{5cm} + \parbox{10cm}{\sffamily\@date} - \vfill - ~\\ - \makebox[.5\textwidth]{\put(0,0){\bgImage}}\\ - ~ + \vfill + ~\\ + \makebox[.5\textwidth]{\put(0,0){\bgImage}}\\ + ~ - \vfill - \parbox[b]{19cm}{\sffamily\RaggedRight - \ifx\@docauthor\empty~\else Documentation by\fi\hfill\makebox[7cm][l]{Package author(s):}\\ - \ifx\@docauthor\empty~\else{\bfseries\tabular[t]{@{}l@{}}\@docauthor\endtabular}\fi\hfill\makebox[7cm][l]{% - \bfseries\tabular[t]{@{}l@{}}\@author\endtabular}} -\else - \psset{unit=1cm} - \begin{pspicture}(1.6in,0)(23cm,21.7cm) - \psframe[fillstyle=solid,linecolor=lightgray,fillcolor=lightgray,linestyle=solid](0,-5.75)(23,10) - \psframe[fillstyle=solid,linecolor=Orange!85!Red,fillcolor=Orange!85!Red,linestyle=solid](0,10)(23,10.5) - \psframe[fillstyle=solid,linecolor=Orange!85!Red,fillcolor=Orange!85!Red,linestyle=solid](0,21.1)(23,21.2) - \rput[lb](3,22){\Huge\sffamily\color{Orange!65!Red}\psscalebox{2}{\textbf{PSTricks}}} - \rput[lb](3,14.1){\parbox{17cm}{\sffamily\RaggedRight\bfseries\huge\@title}} - \rput[lb](3,12.6){\parbox{15cm}{\sffamily\Large\@subtitle}} - \rput[lb](3,7.6){\parbox{15cm}{\sffamily\@date}} - \rput[lb](3,-2.6){\parbox[b]{19cm}{\sffamily\RaggedRight + \vfill + \parbox[b]{19cm}{\sffamily\RaggedRight \ifx\@docauthor\empty~\else Documentation by\fi\hfill\makebox[7cm][l]{Package author(s):}\\ \ifx\@docauthor\empty~\else{\bfseries\tabular[t]{@{}l@{}}\@docauthor\endtabular}\fi\hfill\makebox[7cm][l]{% - \bfseries\shortstack[l]{\@author} - %\begin{tabular}[t]{@{}l@{}} \@author\end{tabular}% -}}} - \rput[C](11,4){\bgImage}% - \end{pspicture}% -\fi -\end{titlepage} -\setcounter{footnote}{0}% -\global\let\thanks\relax% -\global\let\maketitle\relax% -\global\let\@thanks\@empty% -\global\let\@author\@empty% -\global\let\@docauthor\@empty% -\global\let\@date\@empty% -\global\let\@title\@empty% -\global\let\@subtitle\@empty% -\global\let\title\relax% -\global\let\author\relax% -\global\let\date\relax% -\global\let\and\relax% + \bfseries\tabular[t]{@{}l@{}}\@author\endtabular}} + \else + \psset{unit=1cm} + \begin{pspicture}(1.6in,0)(23cm,21.7cm) + \psframe[fillstyle=solid,linecolor=lightgray,fillcolor=lightgray,linestyle=solid](0,-5.75)(23,10) + \psframe[fillstyle=solid,linecolor=Orange!85!Red,fillcolor=Orange!85!Red,linestyle=solid](0,10)(23,10.5) + \psframe[fillstyle=solid,linecolor=Orange!85!Red,fillcolor=Orange!85!Red,linestyle=solid](0,21.1)(23,21.2) + \rput[lb](3,22){\Huge\sffamily\color{Orange!65!Red}\psscalebox{2}{\textbf{PSTricks}}} + \rput[lb](3,14.1){\parbox{17cm}{\sffamily\RaggedRight\bfseries\huge\@title}} + \rput[lb](3,12.6){\parbox{15cm}{\sffamily\Large\@subtitle}} + \rput[lb](3,7.6){\parbox{15cm}{\sffamily\@date}} + \rput[lb](3,-2.6){\parbox[b]{19cm}{\sffamily\RaggedRight + \ifx\@docauthor\empty~\else Documentation by\fi\hfill\makebox[7cm][l]{Package author(s):}\\ + \ifx\@docauthor\empty~\else{\bfseries\tabular[t]{@{}l@{}}\@docauthor\endtabular}\fi\hfill\makebox[7cm][l]{% + \bfseries\shortstack[l]{\@author} + %\begin{tabular}[t]{@{}l@{}} \@author\end{tabular}% + }}} + \rput[C](11,4){\bgImage}% + \end{pspicture}% + \fi + \end{titlepage} + \setcounter{footnote}{0}% + \global\let\thanks\relax% + \global\let\maketitle\relax% + \global\let\@thanks\@empty% + \global\let\@author\@empty% + \global\let\@docauthor\@empty% + \global\let\@date\@empty% + \global\let\@title\@empty% + \global\let\@subtitle\@empty% + \global\let\title\relax% + \global\let\author\relax% + \global\let\date\relax% + \global\let\and\relax% } -\fi \newdimen\fullWidth \fullWidth=\linewidth diff --git a/graphics/pstricks/base/doc/pst-news21.pdf b/graphics/pstricks/base/doc/pst-news21.pdf Binary files differindex 89442fefa8..dc4cada65b 100644 --- a/graphics/pstricks/base/doc/pst-news21.pdf +++ b/graphics/pstricks/base/doc/pst-news21.pdf diff --git a/graphics/pstricks/base/doc/pst-news21.tex b/graphics/pstricks/base/doc/pst-news21.tex index 9fbe4e2f34..facad54b55 100644 --- a/graphics/pstricks/base/doc/pst-news21.tex +++ b/graphics/pstricks/base/doc/pst-news21.tex @@ -1,18 +1,13 @@ -%% $Id: pst-news21.tex 157 2021-08-23 18:21:41Z herbert $ +%% $Id: pst-news21.tex 164 2021-08-25 19:26:42Z herbert $ \documentclass[11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small, - headinclude=false,footinclude=false,twoside]{scrartcl} + headinclude=false,footinclude=false,twoside]{pst-doc} + +\usepackage{libertinus} \listfiles -\usepackage[T1]{fontenc} -\usepackage{listings} -\lstset{basicstyle=\ttfamily\small} -\usepackage{libertinus} -\usepackage[scaled=0.88]{beramono} -\usepackage{babel} -\usepackage[svgnames,dvipsnames,x11names,pspdf=-dALLOWPSTRANSPARENCY]{pstricks-pdf} -\usepackage{pstricks-add} -\usepackage{showexpl} -\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={}}, +%\usepackage[svgnames,dvipsnames,x11names,pspdf=-dALLOWPSTRANSPARENCY]{pstricks-pdf} +\usepackage{showexpl,pst-arrow} +\lstset{explpreset={pos=l,width=-99pt,overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,rframe={},extendedchars}, escapechar=?} \usepackage{biblatex} @@ -24,7 +19,7 @@ \author{Herbert Voß} \date{\today} -\maketitle +\settitle \tableofcontents @@ -44,7 +39,8 @@ Otherwise the one from URW or the system is used, which is the default. \subsection{Arrows} -There are new arrow tyoes and a new optional argument \texttt{tipcolor}: + +There are new arrow types and a new optional argument \texttt{tipcolor}: \begin{LTXexample}[width=5cm] @@ -55,12 +51,60 @@ There are new arrow tyoes and a new optional argument \texttt{tipcolor}: \end{pspicture} \end{LTXexample} + + +\LPack{pstricks} defines the following "`arrows"': + + \def\myline#1{\psline[linecolor=red,linewidth=0.5pt,arrowscale=1.5]{#1}(0,1ex)(1.3,1ex)}% + \def\mylineA#1{\psline[linecolor=red,linewidth=0.5pt,arrowscale=4.5]{#1}(0,1ex)(2,1ex)}% + \psset{arrowscale=1.5} + \begin{longtable}{@{} c @{\qquad} p{3cm} l @{}}% + Value & Example & Name \\[2pt]\hline + \Lnotation{-} & \myline{-} & None\\ + \Lnotation{<->} & \myline{<->} & Arrowheads.\\ + \Lnotation{>-<} & \myline{>-<} & Reverse arrowheads.\\ + \Lnotation{<{<}-{>}>} & \myline{<<->>} & Double arrowheads.\\ + \Lnotation{{>}>-{<}<} & \myline{>>-<<} & Double reverse arrowheads.\\ + \Lnotation{{|}-{|}} & \myline{|-|} & T-bars, flush to endpoints.\\ + \Lnotation{{|}*-{|}*} & \myline{|*-|*} & T-bars, centered on endpoints.\\ + \Lnotation{[-]} & \myline{[-]} & Square brackets.\\ + \Lnotation{]-[} & \myline{]-[} & Reversed square brackets.\\ + \Lnotation{(-)} & \myline{(-)} & Rounded brackets.\\ + \Lnotation{)-(} & \myline{)-(} & Reversed rounded brackets.\\ + \Lnotation{o-o} & \myline{o-o} & Circles, centered on endpoints.\\ + \Lnotation{*-*} & \myline{*-*} & Disks, centered on endpoints.\\ + \Lnotation{oo-oo} & \myline{oo-oo} & Circles, flush to endpoints.\\ + \Lnotation{**-**} & \myline{**-**} & Disks, flush to endpoints.\\ + \Lnotation{{|}<->{|}} & \myline{|<->|} & T-bars and arrows.\\ + \Lnotation{{|}>-<{|}} & \myline{|>-<|} & T-bars and reverse arrows.\\ + \Lnotation{h-h{}} & \myline{h-h} & left/right hook arrows.\\ + \Lnotation{H-H{}} & \myline{H-H} & left/right hook arrows.\\ + \Lnotation{v-v} & \myline{v-v} & left/right inside vee arrows.\\ + \Lnotation{V-V} & \myline{V-V} & left/right outside vee arrows.\\ + \Lnotation{f-f} & \myline{f-f} & left/right inside filled arrows.\\ + \Lnotation{F-F} & \myline{F-F} & left/right outside filled arrows.\\ + \Lnotation{t-t} & \myline{t-t} & left/right inside slash arrows.\\[5pt] + \Lnotation{T-T} & \myline{T-T} & left/right outside slash arrows.\\ +% + \Lnotation{<D-D>} & \mylineA{<D-D>} & curved arrows.\\ + \Lnotation{<D<D-D>D>} & \mylineA{<D<D-D>D>} & curved doubled arrows.\\ + \Lnotation{D>-<D} & \mylineA{D>-<D} & curved arrows, tip inside.\\ + \Lnotation{<T-T>} & \myline{<T-T>} & curved lines.\\ +% \Lnotation{>T-T<} & \mylineA{>T-T<} & \TikZ\ like arrows.\\ + \hline + \end{longtable} + + + + %\@namedef{psas@T>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowT }% hv 20210531 %\@namedef{psas@<T}{ % hv 20071211 % true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowT %} +With version 3.04 all arrow specific base code is moved to the file \LPack{pstricks-arrows}, which +is not of interest for the default user.. \subsection{Symbolfont} @@ -83,6 +127,68 @@ the optional argument \texttt{gsfonts}: \end{verbatim} +\subsection{Fillstyle \texttt{penrose}} + +There was a bug if this fillstyle was used together with a line sequence. + + +\psset{unit=1cm} +\centering\vspace{5cm} +\pspicture[showgrid=false](-0.5\linewidth,-4.5)(0.5\linewidth,5) +\rput(0,0){\parbox{4.5cm}{% + \psclip{\psccurve[linestyle=none,fillstyle=penrose,psscale=.2](-3,-2) + (0.3,-1.5)(2.3,-2)(4.3,-1.5)(6.3,-2)(8,-1.5)(8,2)(-3,2)} + ``One of the best new plays I have seen all year: cool, poetic, + ironic \ldots'' proclaimed \emph{The Guardian} upon the London + premiere of this extraordinary play about a Czech director and + his actress wife, confronting exile in America. + \endpsclip}}% + \psline[linearc=0.5cm,showpoints=true,dotstyle=|]{<<->>}(-1,-2)(0,-4)(1,-2) +\endpspicture + + +\begin{lstlisting} +\pspicture[showgrid=false](-0.5\linewidth,-4.5)(0.5\linewidth,5) +\rput(0,0){\parbox{4.5cm}{% + \psclip{\psccurve[linestyle=none,fillstyle=penrose,psscale=.2](-3,-2) + (0.3,-1.5)(2.3,-2)(4.3,-1.5)(6.3,-2)(8,-1.5)(8,2)(-3,2)} + ``One of the best new plays I have seen all year: cool, poetic, + ironic \ldots'' proclaimed \emph{The Guardian} upon the London + premiere of this extraordinary play about a Czech director and + his actress wife, confronting exile in America. + \endpsclip}}% + \psline[linearc=0.5cm,showpoints=true,dotstyle=|]{<<->>}(-1,-2)(0,-4)(1,-2) +\endpspicture +\end{lstlisting} + + +\pspicture[showgrid=false](-0.5\linewidth,-4.5)(0.5\linewidth,5) +\rput(0,0){\parbox{4.5cm}{% + \psclip{\psccurve[linestyle=none,fillstyle=penroseA,psscale=.2](-3,-2) + (0.3,-1.5)(2.3,-2)(4.3,-1.5)(6.3,-2)(8,-1.5)(8,2)(-3,2)}\color{white} + ``One of the best new plays I have seen all year: cool, poetic, + ironic \ldots'' proclaimed \emph{The Guardian} upon the London + premiere of this extraordinary play about a Czech director and + his actress wife, confronting exile in America. + \endpsclip}}% + \psline[linearc=0.5cm,showpoints=true,dotstyle=|]{<<->>}(-1,-2)(0,-4)(1,-2) +\endpspicture + +\begin{lstlisting} +\pspicture[showgrid=false](-0.5\linewidth,-4.5)(0.5\linewidth,5) +\rput(0,0){\parbox{4.5cm}{% + \psclip{\psccurve[linestyle=none,fillstyle=penrose,psscale=.2](-3,-2) + (0.3,-1.5)(2.3,-2)(4.3,-1.5)(6.3,-2)(8,-1.5)(8,2)(-3,2)}\color{white} + ``One of the best new plays I have seen all year: cool, poetic, + ironic \ldots'' proclaimed \emph{The Guardian} upon the London + premiere of this extraordinary play about a Czech director and + his actress wife, confronting exile in America. + \endpsclip}}% + \psline[linearc=0.5cm,showpoints=true,dotstyle=|]{<<->>}(-1,-2)(0,-4)(1,-2) +\endpspicture\end{lstlisting} + + + \nocite{*} \printbibliography diff --git a/graphics/pstricks/base/dvips/pstricks.pro b/graphics/pstricks/base/dvips/pstricks.pro index c351841e8c..26e64b4e33 100644 --- a/graphics/pstricks/base/dvips/pstricks.pro +++ b/graphics/pstricks/base/dvips/pstricks.pro @@ -1,7 +1,7 @@ -% $Id: pstricks.pro 152 2021-08-19 11:24:26Z herbert $ +% $Id: pstricks.pro 164 2021-08-25 19:26:42Z herbert $ % %% PostScript prologue for pstricks.tex. -%% Version 1.35, 2021/05/21 +%% Version 1.36, 2021/08/25 %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives @@ -306,6 +306,7 @@ tx@Dict begin } def % /PenroseFill {% on stack: scaling factor + 20 dict begin /Scale ED % 1 exch div round /penroseFactor ED % a 0 dtransform round exch round exch @@ -318,20 +319,22 @@ tx@Dict begin % a Div cvi /x1 ED /y2 y2 y1 sub def clip newpath -gsave + gsave 220 150 translate Scale dup scale systemdict /setstrokeadjust known { true setstrokeadjust } if /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul} - { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall + { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25 mul j l + S rmoveto}F i L j L stroke }F}F}F}F grestore % pop pop + end % userdict } def % /PenroseFillA {% on stack: scaling factor, border color, kite color, dart color + 30 dict begin /Scale ED Scale dup scale /border_colour ED @@ -367,6 +370,7 @@ gsave dup f exch neg exp dup scale 5 {kite 72 rotate } repeat stroke grestore + end % userdict } def % % diff --git a/graphics/pstricks/base/generic/pstricks-arrows.tex b/graphics/pstricks/base/generic/pstricks-arrows.tex new file mode 100644 index 0000000000..5684f3d792 --- /dev/null +++ b/graphics/pstricks/base/generic/pstricks-arrows.tex @@ -0,0 +1,572 @@ +%% $Id: pstricks-arrows.tex 164 2021-08-25 19:26:42Z herbert $ +%% +%% This is file `pstricks-arrows.tex', +%% +%% IMPORTANT NOTICE: +%% +%% Herbert Voss <hvoss@tug.org> +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% DESCRIPTION: +%% `pstricks-arrows' base code for arrows +%% +%% fileversion and filedate see main file pstricks.tex +%% +\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} +% ------------------------- hv 1.10 beg ------------------------ +%\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} +\def\pst@@getarrows#1#2{% + \def\pst@tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...) + \ifx\pst@tempa\@empty + \addto@par{arrows=-}% + \else + \addto@par{arrows=#2}% + \fi + #1% +} +% ------------------------- hv 1.10 end ------------------------ +\def\pst@arrowtype{% + \ifx\psk@arrowB\@empty 0 \else -2 \fi + \ifx\psk@arrowA\@empty 0 \else -1 \fi + add } +% +\def\pst@addarrowdef{% + \addto@pscode{% + /ArrowA { + \ifx\psk@arrowA\@empty + \pst@oplineto + \else + \pst@arrowdef{A} + moveto + \fi + } def + /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def +}} +% +\def\pst@arrowdef#1{% + \ifnum\pst@repeatarrowsflag>\z@ + /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c + \fi + \tx@BeginArrow + \psk@arrowscale + \@nameuse{psas@\@nameuse{psk@arrow#1}} + \tx@EndArrow +} +% +\def\pst@repeatarrows{% + \addto@pscode{% + gsave + \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi + \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi + grestore +}} + +\define@key[psset]{pstricks}{tipcolor}[black]{\def\pst@tipcolor{#1}} +\psset[pstricks]{tipcolor=} + +\def\ps@check@tipcolor{% + \expandafter\if\expandafter$\pst@tipcolor$ + \pst@usecolor\pslinecolor + \else + \pst@usecolor\pst@tipcolor + \fi +} +% +\def\tx@EndDot{ \ps@check@tipcolor\space EndDot } +% +% v : Vee arrow (inside) v,V,f and F by Christophe FOUREY +% V : Vee arrow (outside) +% f : Filled vee arrow (inside) +% F : Filled vee arrow (outside) + +\def\psk@arrowA{} +\def\psk@arrowB{} +\def\pst@arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,% + <D-D>,D>-<D,<D<D-D>D>,<T-T>,|<*->|*,|<->|,v-v,V-V,f-f,F-F,t-t,T-T} +\begingroup + \catcode`\<=13 + \catcode`\>=13 + \catcode`\|=13 + \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} +\endgroup +\def\tx@BeginArrow{BeginArrow } +\def\tx@EndArrow{EndArrow } +% +\def\tx@Arrow{ \tx@setStrokeTransparency Arrow }% hv 2008-01-13 +\def\tx@ArrowD{ \tx@setStrokeTransparency ArrowD }% hv 2008-01-13 +\def\tx@ArrowT{ \tx@setStrokeTransparency ArrowT }% hv 2021-05-31 +% +\@namedef{psas@<|}{ + \psk@tbarsize\space \tx@Tbar + 0 CLW 2 div T + newpath + true + \psk@arrowinset + \psk@arrowlength + \psk@arrowsize + \tx@Arrow +} +% ]-[ arrow +\def\tx@BracketOut{BracketOut } +\@namedef{psas@[}{% + /BracketOut {% + CLW mul add dup CLW sub 2 div +%/x ED mul CLW add + /x ED mul neg + /y ED + /z CLW 2 div def + x neg y moveto + x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def + \psk@bracketlength\space \psk@tbarsize\space \tx@BracketOut +} +% )-( arrow +\def\tx@RoundBracketOut{ \tx@setStrokeTransparency RoundBracketOut }% hv 2008-01-13 +\@namedef{psas@(}{% + /RoundBracketOut {% + CLW mul add dup 2 div +%/x ED mul + /x ED mul neg + /y ED + /mtrx CM def + 0 CLW + 2 div T x y mul 0 ne { x y scale } if + 1 1 moveto + .85 .5 .35 0 0 0 curveto + -.35 0 -.85 .5 -1 1 curveto + mtrx setmatrix stroke 0 CLW moveto } def + \psk@rbracketlength\space \psk@tbarsize\space \tx@RoundBracketOut +} +% end of new definitions of the missing arrows ---- hv 1.12 +\@namedef{psas@>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } +\@namedef{psas@>>}{% + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + 0 h T gsave newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + CP grestore CP newpath moveto 2 copy + CLW \pst@arrowscale\space div SLW % set the original line width + L stroke moveto +} +\@namedef{psas@<}{true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} +\@namedef{psas@<<}{ + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + CP newpath moveto 0 a neg + gsave + CLW \pst@arrowscale\space div SLW % set the original line width + L stroke + grestore + 0 h neg T + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +\@namedef{psas@D>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD }% hv 20071211 +\@namedef{psas@D>D>}{ % hv 20071211 + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + 0 h Inset sub T gsave newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + CP grestore moveto +} +\@namedef{psas@<D}{ % hv 20071211 + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD +} +\@namedef{psas@<D<D}{ % hv 20071211 + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD + CP newpath moveto 0 a neg L stroke 0 h neg T + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD +} +\@namedef{psas@T>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowT }% hv 20210531 +\@namedef{psas@<T}{ % hv 20071211 + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowT +} + +\define@key[psset]{pstricks}{tbarsize}[2pt 5]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil + \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}} +\psset[pstricks]{tbarsize=2pt 5} +% +\def\tx@Tbar{Tbar } +\@namedef{psas@|}{\psk@tbarsize \tx@Tbar} +\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar} +\@namedef{psas@>|}{% + \psk@tbarsize \tx@Tbar + 0 CLW 2 div T + newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +\@namedef{psas@>|*}{% + 0 CLW -2 div T + \psk@tbarsize \tx@Tbar + 0 CLW 2 div T + newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow +} +% +\define@key[psset]{pstricks}{bracketlength}[0.15]{\pst@checknum{#1}\psk@bracketlength} +\psset[pstricks]{bracketlength=.15} +\def\tx@Bracket{Bracket } +\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} +\define@key[psset]{pstricks}{rbracketlength}[0.15]{\pst@checknum{#1}\psk@rbracketlength} +\psset[pstricks]{rbracketlength=.15} +\def\tx@RoundBracket{RoundBracket } +\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} +% +\def\psas@c{1 \psas@@c} +\def\psas@cc{0 CLW 2 div T 1 \psas@@c} +\def\psas@C{2 \psas@@c} +\def\psas@@c{% + setlinecap + 0 0 moveto + 0 0.1 L % changed value from 0.5 to 0.1 + stroke + 0 0 moveto } +% +\def\psas@{} +% +\define@key[psset]{pstricks}{arrowLW}{\pst@getlength{#1}\psk@arrowLW} +\psset[pstricks]{arrowLW=0} +% arrowLW as LineWidth for the circled line ends +% +\def\psas@o{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot } +\def\psas@oo{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot } +\@namedef{psas@*}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {false} false \psk@dotsize \tx@EndDot } +\@namedef{psas@**}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse + {false} true \psk@dotsize \tx@EndDot } +% +\define@key[psset]{pstricks}{arrows}[-]{% + \begingroup + \pst@activearrows + \xdef\pst@tempg{#1}% + \endgroup + \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil + \if@pst\else\@pstrickserr{Bad arrows specification: #1}\@ehpa\fi} +\def\psset@@arrows#1-#2\@empty#3\@nil{% + \@psttrue + \def\ps@next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% + \expandafter\ps@next\pst@arrowtable,#1-#1,\@nil + \@ifundefined{psas@\pst@tempg}{\@pstfalse\def\psk@arrowA{}}{\let\psk@arrowA\pst@tempg}% + \@ifundefined{psas@#2}{\@pstfalse\def\psk@arrowB{}}{\def\psk@arrowB{#2}}} +\psset[pstricks]{arrows=-} +% +\define@key[psset]{pstricks}{arrowscale}[1]{% hv --1.12 + \pst@getscale{#1}\psk@arrowscale + \pst@@arrowscale@i#1 \@nil}% hv --1.12 +\def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12 +\psset[pstricks]{arrowscale=1} +% +\define@key[psset]{pstricks}{arrowsize}[1.5pt 2]{% + \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil + \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}% +} +\psset[pstricks]{arrowsize=1.5pt 2} +\define@key[psset]{pstricks}{arrowlength}[1.4]{\pst@checknum{#1}\psk@arrowlength} +\psset[pstricks]{arrowlength=1.4} +\define@key[psset]{pstricks}{arrowinset}[0.4]{\pst@checknum{#1}\psk@arrowinset}% +\psset[pstricks]{arrowinset=0.4} +% Vee arrow +\define@key[psset]{pstricks}{veearrowlength}[3mm]{\pst@getlength{#1}\psk@veearrowlength} +\psset[pstricks]{veearrowlength=3mm} % default projected length +\define@key[psset]{pstricks}{veearrowangle}[30]{\pst@getangle{#1}\psk@veearrowangle} +\psset[pstricks]{veearrowangle=30} % default angle +\define@key[psset]{pstricks}{veearrowlinewidth}[0.35mm]{\pst@getlength{#1}\psk@veearrowlinewidth} +\psset[pstricks]{veearrowlinewidth=0.35mm} % default vee arrow line width + +% Filled vee arrow +\define@key[psset]{pstricks}{filledveearrowlength}[3mm]{\pst@getlength{#1}\psk@filledveearrowlength} +\psset[pstricks]{filledveearrowlength=3mm} % default projected length +\define@key[psset]{pstricks}{filledveearrowangle}[15]{\pst@getangle{#1}\psk@filledveearrowangle} +\psset[pstricks]{filledveearrowangle=15} % default angle +\define@key[psset]{pstricks}{filledveearrowlinewidth}[0.35mm]{\pst@getlength{#1}\psk@filledveearrowlinewidth} +\psset[pstricks]{filledveearrowlinewidth=0.35mm} % default vee arrow line width +\define@key[psset]{pstricks}{arrowlinestyle}[solid]{% + \@ifundefined{psls@#1}% + {\@pstrickserr{Line style `#1' not defined}\@eha}% + {\def\psarrowlinestyle{#1}}} +\psset[pstricks]{arrowlinestyle=solid} % default +\pst@def{VeeArrow}<% + 1 setlinecap % round caps + 1 setlinejoin % round join + setlinewidth % vee arrow line width + /y ED % projected length + 2 div /a ED % angle (divide by 2) + /t ED % false = inside, true = outside + a sin a cos div y mul /x ED % perpendicular length : x=tan(a).y + t { 1 -1 scale } if % if outside : symmetry + x neg y moveto % point #1 + 0 0 L % point #2 + x y L % point #3 + { closepath gsave fill grestore } if % if filled : close and fill + \@nameuse{psls@\psarrowlinestyle} + \ps@check@tipcolor + stroke % draw line + 0 t { y 2 mul } { 0 } ifelse moveto> % if outside : twice longer line + +% VeeArrow : filled? outside? (total) angle (projected) length (arrow) line width + +\@namedef{psas@|}{\ps@check@tipcolor \psk@tbarsize \tx@Tbar} + +\@namedef{psas@v}{% + \ps@check@tipcolor + false false \psk@veearrowangle \psk@veearrowlength \psk@veearrowlinewidth \tx@VeeArrow} +\@namedef{psas@V}{% + \ps@check@tipcolor + false true \psk@veearrowangle \psk@veearrowlength \psk@veearrowlinewidth \tx@VeeArrow} +\@namedef{psas@f}{% + \ps@check@tipcolor + true false \psk@filledveearrowangle \psk@filledveearrowlength \psk@filledveearrowlinewidth \tx@VeeArrow} +\@namedef{psas@F}{% + \ps@check@tipcolor + true true \psk@filledveearrowangle \psk@filledveearrowlength \psk@filledveearrowlinewidth \tx@VeeArrow} + +% And An another arrowhead +% architectural tick / oblique arrow + +% Tick arrow +\define@key[psset]{pstricks}{tickarrowlength}[1.5mm]{\pst@getlength{#1}\psk@tickarrowlength} +\psset[pstricks]{tickarrowlength=1.5mm} % default projected length +\define@key[psset]{pstricks}{tickarrowlinewidth}[0.35mm]{\pst@getlength{#1}\psk@tickarrowlinewidth} +\psset[pstricks]{tickarrowlinewidth=0.35mm} % default tick arrow line width + +\pst@def{TickArrow}<% + 1 setlinecap % round caps + 1 setlinejoin % round join + setlinewidth % tick line width + /y ED % projected length + /t ED % false = normal, true = reversed + t { 1 -1 scale } if % if reversed : symmetry + y neg y moveto % point #1 + y y neg L % point #2 + \@nameuse{psls@\psarrowlinestyle} + \ps@check@tipcolor + stroke % draw line + 0 0 moveto> % origin + + +\@namedef{psas@t}{ \ps@check@tipcolor\space false \psk@tickarrowlength \psk@tickarrowlinewidth \tx@TickArrow } +\@namedef{psas@T}{ \ps@check@tipcolor\space true \psk@tickarrowlength \psk@tickarrowlinewidth \tx@TickArrow } + +\pst@def{ArrowD}< % the sides are drawn as curves (hv 20071211) + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /Inset ED + { 0 h T 1 -1 scale } if % changes the direction +% we use y=w/h^2 * x^2 as equation for the control points +% for the coordinates the arrow is seen from top to bottom +% the bottom (tip) is (0;0) + w neg h moveto % lower left of > + w 9 div 4 mul neg h 3 div 2 mul + w 9 div neg h 3 div + 0 0 curveto % tip of > + w 9 div h 3 div + w 9 div 4 mul h 3 div 2 mul + w h curveto % upper left of > + w neg Inset neg rlineto % move to x=0 and inset + gsave + \ps@check@tipcolor + fill grestore > +% +\pst@def{ArrowT}< % like tikz + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /Inset ED + { 0 h T 1 -1 scale } if % changes the direction + w 2 mul /w exch def + w neg h moveto % lower left of > + w 9 div 4 mul neg h 3 div 2 mul + w 9 div neg h 3 div + 0 0 curveto % tip of > + w 9 div h 3 div + w 9 div 4 mul h 3 div 2 mul + w h curveto % upper left of > +% w neg Inset neg rlineto % move to x=0 and inset +% CLW SLW +% 1 0 0 setrgbcolor + 2 setlinejoin + \ps@check@tipcolor + stroke + 0 0 moveto > +% +% +% HookLeft/RightArrow +\newdimen\pshooklength +\newdimen\pshookwidth +\define@key[psset]{pstricks}{hooklength}[3mm]{\pssetlength\pshooklength{#1}} +\define@key[psset]{pstricks}{hookwidth}[1mm]{\pssetlength\pshookwidth{#1}} +%\psset{hooklength=3mm,hookwidth=1mm} +% +\edef\pst@arrowtable{\pst@arrowtable,H-H,h-h} % add new arrow +\def\tx@RHook{RHook } % PostScript name +\def\tx@Rhook{Rhook } % PostScript name + +\@namedef{psas@H}{% + /RHook { + /x ED % hook width + /y ED % hook length + /z CLW 2 div def % save it + x y moveto % goto first point + x 0 0 0 0 y + curveto % draw Bezier + stroke + 0 y moveto % define current point + } def + \ps@check@tipcolor + \pst@number\pshooklength + \pst@number\pshookwidth + \tx@RHook +} +\@namedef{psas@h}{% + /Rhook { + CLW mul % size * CLW + add dup % +length size*CLW+length size*CLW+length + 2 div /w ED % (size*CLW+length)/2 -> w + mul dup /h ED mul % (size*CLW+length) + /a ED + w neg h abs moveto 0 0 L + gsave + \ps@check@tipcolor + stroke grestore + } def + 0 \psk@arrowlength \psk@arrowsize \tx@Rhook +} +% New parameter "arrowfill", with default as "true" +\define@boolkey[psset]{pstricks}[ps]{ArrowFill}[true]{} +% +% Modification of the PostScript macro Arrow to choose to fill or not the arrow +% (it require to restore the current linewidth, despite of the scaling) +\pst@def{Arrow}<{% + CLW mul add dup 2 div + /w ED mul dup + /h ED mul + /a ED { 0 h T 1 -1 scale } if + gsave + \ifpsArrowFill\else\pst@number\pslinewidth \pst@arrowscale\space div SLW \fi + \ps@check@tipcolor + w neg h moveto + 0 0 L w h L w neg a neg rlineto + \ifpsArrowFill gsave + \tx@setStrokeTransparency + fill + grestore \else gsave closepath + \ps@check@tipcolor + stroke grestore \fi + grestore + 0 h a sub moveto +}> +% +\define@key[psset]{pstricks}{nArrowsA}[2]{\def\psk@nArrowsA{#1}} +\define@key[psset]{pstricks}{nArrowsB}[2]{\def\psk@nArrowsB{#1}} +\define@key[psset]{pstricks}{nArrows}[2]{\def\psk@nArrowsA{#1}\def\psk@nArrowsB{#1}} +\psset{nArrows=2} +% +\@namedef{psas@>>}{% + \psk@nArrowsA\space 1 sub { + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + 0 h a sub T + } repeat + gsave + newpath + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + CP + grestore + moveto +} +% +\@namedef{psas@<<}{% + true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + 0 h neg a add T + \psk@nArrowsB\space 2 sub { + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + 0 h neg a add T + } repeat + false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow + 0 h a 5 mul 2 div sub moveto +} +% +% DG addition begin - Dec. 18/19, 1997 and Oct. 11, 2002 +% Adapted from \psset@arrows +\define@key[psset]{pstricks}{ArrowInside}{% + \def\pst@tempArrow{#1}% + \ifx\pst@tempArrow\@empty \def\psk@ArrowInside{} % + \else% + \begingroup% + \pst@activearrows% + \xdef\pst@tempg{<#1}% + \endgroup% + \expandafter\psset@@ArrowInside\pst@tempg\@empty-\@empty\@nil% + \if@pst\else\@pstrickserr{Bad intermediate arrow specification: #1}\@ehpa\fi% + \fi% +} +% Adapted from \psset@@arrows +\def\psset@@ArrowInside#1-#2\@empty#3\@nil{% + \@psttrue + \def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% + \expandafter\next\pst@arrowtable,#1-#1,\@nil + \@ifundefined{psas@#2}% + {\@pstfalse\def\psk@ArrowInside{}}% + {\def\psk@ArrowInside{#2}}% +} +% Default value empty +\psset{ArrowInside={}} +% Modified version of \pst@addarrowdef +\def\pst@addarrowdef{% + \addto@pscode{% + /ArrowA { + \ifx\psk@arrowA\@empty + \pst@oplineto + \else + \pst@arrowdef{A} + moveto + \fi + } def + /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def +% DG addition + /ArrowInside { + \ifx\psk@ArrowInside\@empty \else \pst@arrowdefA{Inside} \fi + } def + }% +} +% Adapted from \pst@arrowdef +\def\pst@arrowdefA#1{% + \ifnum\pst@repeatarrowsflag>\z@ /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c\fi + \tx@BeginArrow + \psk@arrowscale + \@nameuse{psas@\@nameuse{psk@Arrow#1}} + \tx@EndArrow% +} +% ArrowInsidePos parameter (default value 0.5) +\define@key[psset]{pstricks}{ArrowInsidePos}[0.5]{\pst@checknum{#1}\psk@ArrowInsidePos}% +%\psset{ArrowInsidePos=0.5} + +\def\pst@repeatarrowsflag{\z@} +\def\pst@setrepeatarrowsflag{% + \edef\pst@repeatarrowsflag{% + \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else + \ifpsshadow 1\else \z@\fi\fi\fi}}% +% +% Redefinition of the PostScript /Line macro to print the intermediate +% arrow on each segment of the line +% +\define@key[psset]{pstricks}{ArrowInsideNo}[1]{\pst@checknum{#1}\psk@ArrowInsideNo}% hv 20031001 +\define@key[psset]{pstricks}{ArrowInsideOffset}[0]{\pst@checknum{#1}\psk@ArrowInsideOffset}% hv 20031001 +%\psset{ArrowInsideNo=1,ArrowInsideOffset=0} +% +\def\arrowType@H{H} + +\def\resetArrowOptions{% + \def\pst@linetype{0}% + \psset[pstricks]{% + hooklength=3mm, hookwidth=1mm, + ArrowFill=true, + ArrowInside={}, ArrowInsidePos=0.5, + ArrowInsideNo=1, ArrowInsideOffset=0, +}} +% +\resetArrowOptions +% +%% END: pstricks-arrows.tex +\endinput diff --git a/graphics/pstricks/base/generic/pstricks.tex b/graphics/pstricks/base/generic/pstricks.tex index 8b1edd58e0..10cd89eba5 100644 --- a/graphics/pstricks/base/generic/pstricks.tex +++ b/graphics/pstricks/base/generic/pstricks.tex @@ -18,10 +18,11 @@ \csname PSTricksLoaded\endcsname \let\PSTricksLoaded\endinput %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% !! loading additional TeX packages see line 38,39 and 72ff -%% !! loading config file pstricks.con line 439 -%% !! loading pro files line 452ff -%% !! fileversion and date see line 83 +%% !! loading additional TeX packages see line 43,44 and 77ff +%% !! loading config file pstricks.con line 445 +%% !! loading pro files line 458ff +%% !! fileversion and date see line 84f +%% !! loaded arrow stuff line 1482 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \edef\PstAtCode{\the\catcode`\@} @@ -80,8 +81,8 @@ \fi \let\pgfforeach\foreach % -\def\fileversion{3.03} -\def\filedate{2021/08/23} +\def\fileversion{3.05} +\def\filedate{2021/08/25} \pst@addfams{pstricks} % %\define@boolkey[psset]{pstricks}[Pst@]{useURWfonts}[true]{} @@ -1103,6 +1104,8 @@ \psset[pstricks]{doublesep=1.25\pslinewidth} \define@key[psset]{pstricks}{doublecolor}[white]{\pst@getcolor{#1}\psdoublecolor} \psset[pstricks]{doublecolor=white} + +\let\pst@setrepeatarrowsflag\relax % \define@boolkey[psset]{pstricks}[ps]{shadow}[true]{\pst@setrepeatarrowsflag} \psset[pstricks]{shadow=false} @@ -1113,12 +1116,6 @@ \define@key[psset]{pstricks}{shadowcolor}[darkgrey]{\pst@getcolor{#1}\psshadowcolor} \psset[pstricks]{shadowcolor=darkgray} % -\def\pst@repeatarrowsflag{\z@} -\def\pst@setrepeatarrowsflag{% - \edef\pst@repeatarrowsflag{% - \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else - \ifpsshadow 1\else \z@\fi\fi\fi}} -% \def\psls@none{} \def\psls@solid{ \psk@linejoin\space setlinejoin \psk@linecap\space setlinecap stroke } \def\psls@coloreddashed{ \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \psls@dashed } @@ -1482,192 +1479,9 @@ % %--------------------------- A R R O W S --------------------------- -% -\def\psk@arrowA{} -\def\psk@arrowB{} -\def\pst@arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,<D-D>,D>-<D,<D<D-D>D>,<T-T>} % hv --1.16 -\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|} -\begingroup - \catcode`\<=13 - \catcode`\>=13 - \catcode`\|=13 - \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} -\endgroup -\def\tx@BeginArrow{BeginArrow } -\def\tx@EndArrow{EndArrow } -% -\def\tx@Arrow{ \tx@setStrokeTransparency Arrow }% hv 2008-01-13 -\def\tx@ArrowD{ \tx@setStrokeTransparency ArrowD }% hv 2008-01-13 -\def\tx@ArrowT{ \tx@setStrokeTransparency ArrowT }% hv 2021-05-31 -% -\@namedef{psas@<|}{ - \psk@tbarsize\space \tx@Tbar - 0 CLW 2 div T - newpath - true - \psk@arrowinset - \psk@arrowlength - \psk@arrowsize - \tx@Arrow -} -% ]-[ arrow -\def\tx@BracketOut{BracketOut } -\@namedef{psas@[}{% - /BracketOut {% - CLW mul add dup CLW sub 2 div -%/x ED mul CLW add - /x ED mul neg - /y ED - /z CLW 2 div def - x neg y moveto - x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def - \psk@bracketlength\space \psk@tbarsize\space \tx@BracketOut -} -% )-( arrow -\def\tx@RoundBracketOut{ \tx@setStrokeTransparency RoundBracketOut }% hv 2008-01-13 -\@namedef{psas@(}{% - /RoundBracketOut {% - CLW mul add dup 2 div -%/x ED mul - /x ED mul neg - /y ED - /mtrx CM def - 0 CLW - 2 div T x y mul 0 ne { x y scale } if - 1 1 moveto - .85 .5 .35 0 0 0 curveto - -.35 0 -.85 .5 -1 1 curveto - mtrx setmatrix stroke 0 CLW moveto } def - \psk@rbracketlength\space \psk@tbarsize\space \tx@RoundBracketOut -} -% end of new definitions of the missing arrows ---- hv 1.12 -\@namedef{psas@>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } -\@namedef{psas@>>}{% - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - 0 h T gsave newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - CP grestore CP newpath moveto 2 copy - CLW \pst@arrowscale\space div SLW % set the original line width - L stroke moveto -} -\@namedef{psas@<}{true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} -\@namedef{psas@<<}{ - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - CP newpath moveto 0 a neg - gsave - CLW \pst@arrowscale\space div SLW % set the original line width - L stroke - grestore - 0 h neg T - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow -} -\@namedef{psas@D>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD }% hv 20071211 -\@namedef{psas@D>D>}{ % hv 20071211 - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD - 0 h Inset sub T gsave newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD - CP grestore moveto -} -\@namedef{psas@<D}{ % hv 20071211 - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD -} -\@namedef{psas@<D<D}{ % hv 20071211 - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD - CP newpath moveto 0 a neg L stroke 0 h neg T - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD -} -\@namedef{psas@T>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowT }% hv 20210531 -\@namedef{psas@<T}{ % hv 20071211 - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowT -} -\define@key[psset]{pstricks}{tbarsize}[2pt 5]{% - \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil - \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}} -\psset[pstricks]{tbarsize=2pt 5} -% -\def\tx@Tbar{Tbar } -\@namedef{psas@|}{\psk@tbarsize \tx@Tbar} -\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar} -\@namedef{psas@>|}{% - \psk@tbarsize \tx@Tbar - 0 CLW 2 div T - newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow -} -\@namedef{psas@>|*}{% - 0 CLW -2 div T - \psk@tbarsize \tx@Tbar - 0 CLW 2 div T - newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow -} -% -\define@key[psset]{pstricks}{bracketlength}[0.15]{\pst@checknum{#1}\psk@bracketlength} -\psset[pstricks]{bracketlength=.15} -\def\tx@Bracket{Bracket } -\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} -\define@key[psset]{pstricks}{rbracketlength}[0.15]{\pst@checknum{#1}\psk@rbracketlength} -\psset[pstricks]{rbracketlength=.15} -\def\tx@RoundBracket{RoundBracket } -\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} -% -\def\psas@c{1 \psas@@c} -\def\psas@cc{0 CLW 2 div T 1 \psas@@c} -\def\psas@C{2 \psas@@c} -\def\psas@@c{% - setlinecap - 0 0 moveto - 0 0.1 L % changed value from 0.5 to 0.1 - stroke - 0 0 moveto } -% -\def\psas@{} -% -\define@key[psset]{pstricks}{arrowLW}{\pst@getlength{#1}\psk@arrowLW} -\psset[pstricks]{arrowLW=0} -% arrowLW as LineWidth for the circled line ends -% -\def\psas@o{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot } -\def\psas@oo{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot } -\@namedef{psas@*}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {false} false \psk@dotsize \tx@EndDot } -\@namedef{psas@**}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {false} true \psk@dotsize \tx@EndDot } -% -\define@key[psset]{pstricks}{arrows}[-]{% - \begingroup - \pst@activearrows - \xdef\pst@tempg{#1}% - \endgroup - \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil - \if@pst\else\@pstrickserr{Bad arrows specification: #1}\@ehpa\fi} -\def\psset@@arrows#1-#2\@empty#3\@nil{% - \@psttrue - \def\ps@next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% - \expandafter\ps@next\pst@arrowtable,#1-#1,\@nil - \@ifundefined{psas@\pst@tempg}{\@pstfalse\def\psk@arrowA{}}{\let\psk@arrowA\pst@tempg}% - \@ifundefined{psas@#2}{\@pstfalse\def\psk@arrowB{}}{\def\psk@arrowB{#2}}} -\psset[pstricks]{arrows=-} -% -\define@key[psset]{pstricks}{arrowscale}[1]{% hv --1.12 - \pst@getscale{#1}\psk@arrowscale - \pst@@arrowscale@i#1 \@nil}% hv --1.12 -\def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12 -\psset[pstricks]{arrowscale=1} -% -\define@key[psset]{pstricks}{arrowsize}[1.5pt 2]{% - \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil - \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}% -} -\psset[pstricks]{arrowsize=1.5pt 2} -\define@key[psset]{pstricks}{arrowlength}[1.4]{\pst@checknum{#1}\psk@arrowlength} -\psset[pstricks]{arrowlength=1.4} -\define@key[psset]{pstricks}{arrowinset}[0.4]{\pst@checknum{#1}\psk@arrowinset}% -\psset[pstricks]{arrowinset=0.4} -% +\input pstricks-arrows + %% ---------------------- end arrow part ---------------------- % \def\tx@SD{ \tx@setTransparency SD } @@ -1718,20 +1532,6 @@ \@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}% \ignorespaces} % -\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} -% ------------------------- hv 1.10 beg ------------------------ -%\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} -\def\pst@@getarrows#1#2{% - \def\pst@tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...) - \ifx\pst@tempa\@empty - \addto@par{arrows=-}% - \else - \addto@par{arrows=#2}% - \fi - #1% -} -% ------------------------- hv 1.10 end ------------------------ -% \def\begin@ClosedObj{% \leavevmode \pst@killglue @@ -1913,42 +1713,6 @@ grestore }} % -\def\pst@arrowtype{% - \ifx\psk@arrowB\@empty 0 \else -2 \fi - \ifx\psk@arrowA\@empty 0 \else -1 \fi - add } -% -\def\pst@addarrowdef{% - \addto@pscode{% - /ArrowA { - \ifx\psk@arrowA\@empty - \pst@oplineto - \else - \pst@arrowdef{A} - moveto - \fi - } def - /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def -}} -% -\def\pst@arrowdef#1{% - \ifnum\pst@repeatarrowsflag>\z@ - /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c - \fi - \tx@BeginArrow - \psk@arrowscale - \@nameuse{psas@\@nameuse{psk@arrow#1}} - \tx@EndArrow -} -% -\def\pst@repeatarrows{% - \addto@pscode{% - gsave - \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi - \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi - grestore -}} -% \def\pst@OpenShowPoints{% \addto@pscode{% gsave diff --git a/graphics/pstricks/base/generic/pstricks.tex.neu b/graphics/pstricks/base/generic/pstricks.tex.neu deleted file mode 100644 index d28b2f529a..0000000000 --- a/graphics/pstricks/base/generic/pstricks.tex.neu +++ /dev/null @@ -1,4595 +0,0 @@ -%% pstricks.tex -%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt -%% COPYRIGHT 2000-2003 by Denis Girou. -%% Copyright 2004-2019 Herbert Voss <hvoss@tug.org> -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2003/12/01 or later. -% -% This work has the LPPL maintenance status "maintained". -% -% This Current Maintainer of this work is Herbert Voss -% -\csname PSTricksLoaded\endcsname -\let\PSTricksLoaded\endinput -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% !! loading additional TeX packages see line 38,39 and 72ff -%% !! loading config file pstricks.con line 439 -%% !! loading pro files line 452ff -%% !! fileversion and date see line 83 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -\edef\PstAtCode{\the\catcode`\@} -\catcode`\@=11\relax -% -%\if@check@engine - \ifx\c@lor@to@ps\@undefined - \def\c@lor@to@ps{\PSTricks_Not_Configured_For_This_Format}% message for a pdflatex run - \fi -%\fi -\expandafter\ifx\csname @latexerr\endcsname\relax % do we have TeX? then @latexerr isn't defined - \input pstricks-tex.def -\fi - -\let\ifpstUndefined\@ifundefined - -%\catcode`\@=\PstAtCode\relax -\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex \fi -\ifx\PSTFPloaded\endinput\else\input pst-fp.tex\fi -% -%\catcode`\@=11\relax -\def\XKV@ch@ckch@ice#1#2#3{% bugfix for xkeyval - \def\XKV@tempa{#1}% - \ifx\XKV@tempa\@nnil\let\XKV@tempa\@empty\else - \def\XKV@tempa{\def#1{#2}}% - \fi -% \in@{,#2,}{,#3,}% -\begingroup\edef\x{\endgroup\noexpand\in@{,#2,}}\x{,#3,}% -%\expandafter\in@\expandafter{\expandafter,#2,}{,#3,}% --- hv 2012-04-27 - \ifin@ - \ifXKV@pl - \XKV@addtomacro@n\XKV@tempa\@firstoftwo - \else - \XKV@addtomacro@n\XKV@tempa\@firstofone - \fi - \else - \ifXKV@pl - \XKV@addtomacro@n\XKV@tempa\@secondoftwo - \else - \XKV@toks{#2}% - \XKV@err{value `\the\XKV@toks' is not allowed}% - \XKV@addtomacro@n\XKV@tempa\@gobble - \fi - \fi - \XKV@tempa -} -% -\def\ProvidesPackageRCS#1{\typeout{Loading #1}}% -%\@ifnextchar[\ProvidesPackageRCS@i{\ProvidesPackageRCS@i[] }}%$ -%\def\ProvidesPackageRCS@i[#1]#2{} - -\ifx\pgfkeysloaded\relax\else - \input pgfutil-common.tex - \input pgfkeys.code.tex - \input pgffor.code.tex -\fi -\let\pgfforeach\foreach -% -\def\fileversion{3.0} -\def\filedate{2020/04/01} -\pst@addfams{pstricks} -% -%\define@boolkey[psset]{pstricks}[Pst@]{useURWfonts}[true]{} -%\psset{useURWfonts} -% -% stolen from latex.ltx to make it TeX compatible -\newcount\psLoopIndex -\long\def\@fornoop#1\@@#2#3{} -\long\def\@for#1:=#2\do#3{% - \pst@cntm=0 - \expandafter\def\expandafter\@fortmp\expandafter{#2}% - \ifx\@fortmp\@empty \else - \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi} -% -\long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx#4\@nnil \else - #5\def#4{#2}\ifx#4\@nnil \else\global\advance\psLoopIndex by \@ne\relax - #5\@iforloop #3\@@#4{#5}\fi\fi} -% -\long\def\@iforloop#1,#2\@@#3#4{\global\advance\psLoopIndex by \@ne\relax% - \def#3{#1}\ifx #3\@nnil - \expandafter\@fornoop \else - #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}} -% -\long\def\psforeach#1#2#3{% - \global\psLoopIndex=0\relax - \if$\ifnum9<1#2$\else\fi\psforeach@ii{#1}{#2}{#3}% - \else \expandafter\psforeach@i#2,..,,..,\@nil{#1}{#3}\fi} -\long\def\psforeach@i#1,#2,..,#3,..,#4\@nil#5#6{% - \ifx\relax#3\relax\psforeach@ii{#5}{#1,#2}{#6}% - \else\psforeach@iii{#5}{#1}{#2}{#3}{#6}\fi} -\long\def\psforeach@ii#1#2#3{% - \begingroup - \edef\reserved@a{#2}% - \@for#1:=\reserved@a\do{#3}% - \endgroup} -\long\def\psforeach@iii#1#2#3#4#5{% - \pstFPsub\pst@tempA{#3}{#2}% - \pst@dimm=\pst@tempA pt% - \pstFPstripZeros{\pst@tempA}\pst@tempB% - \def\pst@tempA{#2}% - \def\pst@tempa{#2}% - \pst@dimn=#4pt% - \loop - \pst@dimm=\pst@tempA pt - \ifdim\pst@dimm<\pst@dimn - \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}% - \pstFPstripZeros{\pst@tempA}\pst@tempA% - \edef\pst@tempa{\pst@tempa,\pst@tempA}% - \repeat% - \psforeach@ii{#1}{\pst@tempa}{#5}} -% -\long\def\psForeach#1#2#3{% without grouping the contents - \global\psLoopIndex=0\relax% - \if$\ifnum9<1#2$\else\fi\psforeach@ii{#1}{#2}{#3}% - \else \expandafter\psForeach@i#2,..,,..,\@nil{#1}{#3}\fi} -\long\def\psForeach@i#1,#2,..,#3,..,#4\@nil#5#6{% - \ifx\relax#3\relax\psForeach@ii{#5}{#1,#2}{#6}% - \else\psForeach@iii{#5}{#1}{#2}{#3}{#6}\fi% -} -\long\def\psForeach@ii#1#2#3{% - \edef\reserved@a{#2}% - \@for#1:=\reserved@a\do{#3}} -\long\def\psForeach@iii#1#2#3#4#5{% - \pstFPsub\pst@tempA{#3}{#2}% - \pst@dimm=\pst@tempA pt% - \pstFPstripZeros{\pst@tempA}\pst@tempB% - \def\pst@tempA{#2}% - \def\pst@tempa{#2}% - \pst@dimn=#4pt% - \loop% - \pst@dimm=\pst@tempA pt% - \ifdim\pst@dimm<\pst@dimn% - \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}% - \pstFPstripZeros{\pst@tempA}\pst@tempA - \edef\pst@tempa{\pst@tempa,\pst@tempA}% - \repeat% - \psForeach@ii{#1}{\pst@tempa}{#5} -} - -\def\psrecur@i#1{\csname ps@rn#1\psrecur@i} -\long\def\ps@rnm#1{\endcsname{#1}#1\global\advance\psLoopIndex by \@ne} -\long\def\ps@rn#1{} -\def\psLoop#1{\global\psLoopIndex=0\relax% - \csname ps@rn\expandafter\psrecur@i - \romannumeral\number\number#1 000\endcsname\endcsname} - -% -% hv 2007-10-16 to fix the bug in pst-node with \\[name=...] -% hv fix bug with empty fnodes in psmatrix -\def\ps@ifnextchar#1#2#3{% - \let\reserved@d= #1% - \def\reserved@a{#2}\def\reserved@b{#3}% - \futurelet\@let@token\ps@ifnch} -\def\ps@ifnch{% - \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi - \reserved@b -} -\def\pshskip#1{\vrule \@width\z@\nobreak \hskip #1\hskip \z@skip} -% end bugfix -\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz,hv)} -\def\@pstrickserr#1#2{% - \begingroup - \newlinechar`\^^J - \edef\pst@tempc{#2}% - \expandafter\errhelp\expandafter{\pst@tempc}% - \typeout{% - PSTricks error. \space See User's Guide for further information.^^J - \@spaces\@spaces\@spaces\@spaces - Type \space H <return> \space for immediate help.}% - \errmessage{#1}% - \endgroup} -\def\@ehpa{% - Your command was ignored. Default value substituted.^^J - Type \space <return> \space to procede.} -\def\@ehpb{% - Your command was ignored. Will recover best I can.^^J - Type \space <return> \space to procede.} -\def\@ehpc{% - You better fix this before proceding.^^J - See the PSTricks User's Guide or ask your system administrator for help.^^J - Type \space X <return> \space to quit.} -\def\@ehpd{% - Not allowed optional argument.^^J - Will proceed with the default setting.^^J - Type \space X <return> \space to quit.} -\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb} -\newdimen\pst@dima -\newdimen\pst@dimb -\newdimen\pst@dimc -\newdimen\pst@dimd -\newdimen\pst@dimg -\newdimen\pst@dimh -\newdimen\pst@dimm -\newdimen\pst@dimn -\newdimen\pst@dimo -\newdimen\pst@dimp -\chardef\f@ur=4 -% -\newbox\pst@hbox -\newbox\pst@ibox -\newbox\pst@boxg -\newcount\pst@cnta -\newcount\pst@cntb -\newcount\pst@cntc -\newcount\pst@cntd -\newcount\pst@cntg -\newcount\pst@cnth -\newcount\pst@cntm -\newcount\pst@cntn -\newcount\pst@cnto -\newcount\pst@cntp -\newcount\@zero\@zero=0\relax -% -\newif\ifPst@SpecialLength -\Pst@SpecialLengthfalse -% -\newif\if@pst -\newtoks\pst@toks -\newif\if@star -\def\pst@ifstar#1{% - \@ifnextchar*{\@startrue\def\ps@next*{#1}\ps@next}{\@starfalse#1}} -% -\def\pst@expandafter#1#2{% - \def\ps@next{#1}% - \edef\@tempa{#2}% - \ifx\@tempa\@empty - \@pstrickserr{Unexpected empty argument!}\@ehpb - \def\@tempa{\@empty}% - \fi - \expandafter\ps@next\@tempa} -% -\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}} -\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1} -{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}} -% -\def\pst@getdimdim#1 #2 #3\@nil{% - \def\pst@tempA{#2}% - \ifx\pst@tempA\@empty - \pssetlength\pst@dimn{#1}% - \pst@dimm=\z@% - \else% - \pssetlength\pst@dimm{#1}% - \pssetlength\pst@dimn{#2}% - \fi% -} -\def\pst@getxdimdim#1 #2 #3\@nil{% - \def\pst@tempA{#2}% - \ifx\pst@tempA\@empty - \pssetxlength\pst@dimn{#1}% - \pst@dimm=\z@ - \else% - \pssetxlength\pst@dimm{#1}% - \pssetxlength\pst@dimn{#2}% - \fi% -} -\def\pst@getydimdim#1 #2 #3\@nil{% - \def\pst@tempA{#2}% - \ifx\pst@tempA\@empty - \pssetylength\pst@dimn{#1}% - \pst@dimm=\z@% - \else - \pssetylength\pst@dimm{#1}% - \pssetylength\pst@dimn{#2}% - \fi} -% -% A modulo macro for integer values -% \pst@mod{34}{6}\value ==> \value is 4 -% -\def\pst@mod#1#2#3{% - \begingroup% - \pst@cntm=#1\pst@cntn=#2\relax% - \pst@cnto=\pst@cntm% - \divide\pst@cntm by \pst@cntn% - \multiply\pst@cntn by \pst@cntm% - \advance\pst@cnto by -\pst@cntn% - \edef\value{\endgroup\def\noexpand#3{\number\pst@cnto}}\value% -} -\def\pst@max#1#2#3{% - \begingroup% - \pst@cntm=#1\pst@cntn=#2\relax% - \ifnum\pst@cntm<\pst@cntn\pst@cntm=\pst@cntn\fi - \global#3=\the\pst@cntm% - \endgroup% -} -\def\pst@maxdim#1#2#3{% - \begingroup% - \pst@dimm=#1\pst@dimn=#2\relax% - \ifdim\pst@dimm<\pst@dimn\pst@dimm=\pst@dimn\fi - \global#3=\the\pst@dimm% - \endgroup% -} -\def\pst@mindim#1#2#3{% - \begingroup% - \pst@dimm=#1\pst@dimn=#2\relax% - \ifdim\pst@dimm>\pst@dimn\pst@dimm=\pst@dimn\fi - \global#3=\the\pst@dimm% - \endgroup% -} -\def\pst@abs#1#2{% - \begingroup% - \pst@cntm=#1\relax% - \ifnum\pst@cntm<\z@\pst@cntm=-\pst@cntm\fi% - \global#2=\the\pst@cntm - \endgroup% -} -\def\pst@absdim#1#2{% - \begingroup% - \pst@dimm=#1\relax% - \ifdim\pst@dimm<\z@\pst@dimm=-\pst@dimm\fi% - \global#2=\the\pst@dimm% - \endgroup% -} -% -\def\pst@pyth#1#2#3{% from pst-3d - \begingroup% - \pst@dima=#1\relax% - \ifnum\pst@dima<\z@\pst@dima=-\pst@dima\fi% dima=abs(x) - \pst@dimb=#2\relax% - \ifnum\pst@dimb<\z@\pst@dimb=-\pst@dimb\fi% dimb=abs(y) - \advance\pst@dimb\pst@dima % dimb=s=abs(x)+abs(y) - \ifnum\pst@dimb=\z@ - \global\pst@dimg=\z@ % dimg=z=sqrt(x^2+y^2) - \else - \multiply\pst@dima 8\relax % dima= 8abs(x) - \pst@@divide\pst@dima\pst@dimb % dimg =8t=8abs(x)/s - \advance\pst@dimg -4pt % dimg = 4tau = (8t-4) - \multiply\pst@dimg 2 - \pst@dimtonum\pst@dimg\pst@tempa - \pst@dima=\pst@tempa\pst@dimg % dima=(8tau)^2 - \advance\pst@dima 64pt % dima=u=[64+(8tau)^2]/2 - \divide\pst@dima 2\relax % =(8f)^2 - \pst@dimd=7pt % initial guess at sqrt(u) - \pst@@pyth\pst@@pyth\pst@@pyth % dimd=sqrt(u) - \pst@dimtonum\pst@dimd\pst@tempa - \pst@dimg=\pst@tempa\pst@dimb - \global\divide\pst@dimg 8 % dimg=z=(8f)*s/8 - \fi - \endgroup - #3=\pst@dimg} -% -\def\pst@@pyth{% dimd = g <-- (g + u/g)/2 - \pst@@divide\pst@dima\pst@dimd - \advance\pst@dimd\pst@dimg - \divide\pst@dimd 2\relax} -% -% ----- the old pst@pyth begin ----- did not use dimens -\def\pst@Pyth#1#2#3{\ifdim#1>#2\pst@@Pyth#1#2#3\else\pst@@Pyth#2#1#3\fi} -\def\pst@@Pyth#1#2#3{% - \ifdim4#1>9#2\relax - #3=#1\advance#3 .2122#2% - \else - #3=.8384#1\advance#3 .5758#2% - \fi% -} -% ----- the old pst@pyth end ----- -% -%------ new version \pst@divide ̣-------- by Michael Sharpe -\def\pst@divide#1#2#3{% - \pst@@divide{#1}{#2}% - \advance\pst@dimg \pst@cnta pt% - \pst@dimtonum\pst@dimg{#3}% -} -\def\pst@@divide#1#2{% - \pst@dimg=#1\relax% - \pst@dimh=#2\relax% - \pst@cnth=\pst@dimh% - \pst@cntg=\pst@dimg% - \pst@cnta=\pst@cntg% - \divide\pst@cnta\pst@cnth% - \advance\pst@dimg -\pst@cnta\pst@dimh% - \pst@cntm=67108863\relax %2^26 -1 - \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide% - \divide\pst@dimg\pst@cnth% -}% -\def\pst@@@divide{% - \ifnum% - \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cntm% - \multiply\pst@dimg\sixt@@n% - \else% - \divide\pst@cnth\sixt@@n% - \fi% -}% -% -%-------------- the old version ---------- -\iffalse -\def\pst@divide#1#2#3{% - \pst@@divide{#1}{#2}% - \pst@dimtonum\pst@dimg{#3}% -} -\def\pst@@divide#1#2{% - \pst@dimg=#1\relax - \pst@dimh=#2\relax - \pst@cntg=\pst@dimh - \pst@cnth=67108863 - \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide - \divide\pst@dimg\pst@cntg% -} -\def\pst@@@divide{% - \ifnum - \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth - \multiply\pst@dimg\sixt@@n - \else - \divide\pst@cntg\sixt@@n - \fi% -} -\fi -%-------------- end old vesrion --------------- -% -\def\pst@configerr#1{\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc} -% -\def\pstVerb#1{\pst@configerr\pstVerb} -\def\pstverb#1{\pst@configerr\pstverb} -\def\pstverbscale{\pst@configerr\pstverbscale} -\def\pstrotate{\pst@configerr\pstrotate} -\def\pstheader#1{\pst@configerr\pstheader} -\def\pstdriver{\pst@configerr\pstdriver} -\@ifundefined{pstcustomize}% - {\def\pstcustomize{\endinput\let\pstcustomize\relax}}{} -% -\input pstricks.con % local config file -% -\newif\ifPSTricks -\PSTrickstrue -\def\PSTricksOff{% - \def\pstheader##1{}% - \def\pstverb##1{}% - \def\pstVerb##1{}% - \PSTricksfalse% -} -\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{} -\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{} -% -\pstheader{pstricks.pro} -%\pstheader{pstricks-fonts.pro} -\pstheader{pst-algparser.pro} -\pstheader{pst-tools.pro} -% -\def\pst@dict{tx@Dict begin } -\def\pst@theheaders{pstricks.pro, pst-algparser.pro} -\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}} -\def\tx@Atan{Atan } -\def\tx@Div{Div } -\def\tx@NET{NET } -\def\tx@Pyth{Pyth } -\def\tx@PtoC{PtoC } -\def\tx@PathLength@{PathLength@ } -\def\tx@PathLength{PathLength } -\pst@dimg=\pstunit\relax -\ifdim\pst@dimg=1bp -\def\pst@stp{.996264 dup scale} -\else -\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale} -\fi -\def\tx@STP{STP } -\def\tx@STV{STV } -% -%--------------------------------------- PS stuff --------------------------------- -% on stack x y -\pst@def{UserCoor}< \pst@number\psyunit div exch \pst@number\psxunit div exch > -\pst@def{ScreenCoor}< \pst@number\psyunit mul exch \pst@number\psxunit mul exch > -%--------------------------------------- PS stuff end ----------------------------- -% -\def\pst@number#1{\pst@@dimtonum#1\space} -% -%-----------------------% hv 20100413 -\def\pst@strip@dot#1{\expandafter\pst@strip@dot@i#1..\@nil} -\def\pst@strip@dot@i#1.#2.#3\@nil{% - \ifnum1#2>10\relax #1.#2\else#1\fi} -%-----------------------% hv 20100413 -\def\pst@checknum#1#2{% - \edef\ps@next{#1}% - \ifx\ps@next\@empty - \let\pst@num\z@ - \else - \expandafter\pst@@checknum\ps@next..\@nil - \fi - \ifcase\pst@num\relax - \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa - \def#2{0 }% - \or% 1 - \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% - \expandafter\@gobble\the\pst@cnth\space}% - \or% 2 - \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% - \expandafter\@gobble\the\pst@cnth\space}% - \or% 3 - \edef#2{\pst@tempA\space}% - \fi} -\def\pst@@checknum{% - \@ifnextchar-% - {\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}% - {\@ifnextchar !% - {\def\pst@num{3}\pst@@@@@checknum} - {\let\pst@num\@ne\pst@@@checknum}}% -} -\def\pst@@@checknum#1.#2.#3\@nil{% -\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil% -\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil} -\def\pst@@@@checknum#1\relax\@nil{\ifx\@nil#1\@nil\else\let\pst@num\z@\fi} -% -\def\pst@@@@@checknum#1#2.#3\@nil{\def\pst@tempA{#2}}% PostScript Notation with !<code> -% -\def\pst@getnumii#1 #2 #3\@nil{% - \pst@checknum{#1}\pst@tempg% - \ifx\relax#2\relax\let\pst@temph\pst@tempg\else\pst@checknum{#2}\pst@temph\fi} -\def\pst@getnumiii#1 #2 #3 #4\@nil{% -\pst@checknum{#1}\pst@tempg% -\pst@checknum{#2}\pst@temph% -\pst@checknum{#3}\pst@tempi} -\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{% -\pst@checknum{#1}\pst@tempg% -\pst@checknum{#2}\pst@temph% -\pst@checknum{#3}\pst@tempi% -\pst@checknum{#4}\pst@tempj} -% -\def\pst@getdimnum#1 #2 #3\@nil{% - \pssetlength\pst@dimg{#1}% - \pst@checknum{#2}\pst@tempg% -} -\def\pst@getscale#1#2{% read and check a scale input x [y] - \edef\pst@tempg{#1}% - \ifx\pst@tempg\@none - \def#2{}% - \else - \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil - \ifdim\pst@tempg\p@=\z@ - \@pstrickserr{Bad scaling argument `#1'}\@ehpa - \def#2{}% - \else - \ifdim\pst@temph\p@=\z@ - \@pstrickserr{Bad scaling argument `#1'}\@ehpa - \def#2{}% - \else - \edef#2{\pst@tempg\space \pst@temph\space scale }% - \fi - \fi - \fi% -} -\def\pst@getint#1#2{% read and check an integer - \pst@cntg=#1\relax - \edef#2{\the\pst@cntg\space}% -} -\begingroup -\catcode`\{=12 -\catcode`\}=12 -\catcode`\[=1 -\catcode`\]=2 -\gdef\pslbrace[{ ] -\gdef\psrbrace[} ] -\endgroup -% -\pstVerb{ - /pssetRGBcolor /setrgbcolor load def - /pssetCMYKcolor /setcmykcolor load def - /pssetGraycolor /setgray load def -} -\def\@newcolor#1#2{% - \expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}% - %\expandafter\edef\csname color@#1\endcsname{#2}% - \expandafter\edef\csname\string\color@#1\endcsname{#2}% hv 1.14 2005-12-17 - \ignorespaces} -% -\def\pst@color#1{\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}% -\def\pst@endcolor{\pstVerb{\pst@currentcolor}} -\def\pst@currentcolor{0 setgray} -\def\altcolormode{% -\def\pst@color##1{% - \pstVerb{gsave ##1}\aftergroup\pst@endcolor}% -\def\pst@endcolor{\pstVerb{\pst@grestore}}} -\def\pssetMonochrome{% - \pstVerb{ - /setrgbcolor { add add 0 gt {0}{1} ifelse setgray } def - /setcmykcolor{ 4 dict begin - /k ED /y ED /m ED /c ED - 1 1 k sub c mul k add sub 0.29 mul - 1 1 k sub m mul k add sub 0.587 mul add - 1 1 k sub y mul k add sub 0.114 mul add - end 0 gt {0}{1} ifelse setgray } def }} -\def\pssetGrayscale{% - \pstVerb{ - /setrgbcolor { 0.07 mul exch 0.71 mul add exch 0.21 mul add setgray } def - /setcmykcolor{ 4 dict begin - /k ED /y ED /m ED /c ED - 1 1 k sub c mul k add sub 0.29 mul - 1 1 k sub m mul k add sub 0.587 mul add - 1 1 k sub y mul k add sub 0.114 mul add - end setgray } def }} -\def\psresetColor{\pstVerb{ - /setrgbcolor tx@Dict begin /pssetRGBcolor load end def - /setcmykcolor tx@Dict begin /pssetCMYKcolor load end def }} - -\def\pst@grestore{ - currentpoint - matrix currentmatrix - currentfont - grestore - setfont - setmatrix - moveto -} -%\def\pst@usecolor#1{\csname color@#1\endcsname\space}% hv 1.14 2005--12-17 -\def\pst@usecolor#1{\csname\string\color@#1\endcsname\space} -% -\def\newgray#1#2{% - \pst@checknum{#2}\pst@tempg - \@newcolor{#1}{\pst@tempg setgray}}% -\def\newrgbcolor#1#2{% - \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil - \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}} -\def\newhsbcolor#1#2{% - \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil - \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}} -\def\newcmykcolor#1#2{% - \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil - \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}} -\newgray{black}{0} -\newgray{darkgray}{.25} -\newgray{gray}{.5} -\newgray{lightgray}{.75} -\newgray{white}{1} -\newrgbcolor{red}{1 0 0} -\newrgbcolor{green}{0 1 0} -\newrgbcolor{blue}{0 0 1} -\newrgbcolor{yellow}{1 1 0} -\newrgbcolor{cyan}{0 1 1} -\newrgbcolor{magenta}{1 0 1} - -\@ifundefined{xglobal}% do we have xcolor loaded? - {\@newcolor{randomgray}{tx@Dict begin Rand setgray end}% - \@newcolor{randomrgb}{tx@Dict begin Rand Rand Rand setrgbcolor end}% - \@newcolor{randomcmyk}{tx@Dict begin Rand Rand Rand Rand setcmykcolor end}% - \@newcolor{randomhsb}{tx@Dict begin Rand Rand Rand sethsbcolor end}% - }{% - \definecolor[ps]{randomgray}{gray}{tx@Dict begin Rand end}% - \definecolor[ps]{randomrgb}{rgb}{tx@Dict begin Rand Rand Rand end}% - \definecolor[ps]{randomcmyk}{cmyk}{tx@Dict begin Rand Rand Rand Rand end}% - \definecolor[ps]{randomhsb}{hsb}{tx@Dict begin Rand Rand Rand end}% - } -% -\define@boolkey[psset]{pstricks}[Pst@]{draft}[true]{} -\define@key[psset]{pstricks}{bgcolor}{\def\pst@bgcolor{#1}}% background for pspicture -\psset[pstricks]{bgcolor={},draft=false}% \pst@bgcolor is \@empty - -\define@key[psset]{pstricks}{style}{% - \@ifundefined{pscs@#1}% - {\@pstrickserr{Custom style `#1' undefined}\@ehpa}% - {\@nameuse{pscs@#1}}% -} -\def\newpsstyle{\@ifnextchar[\newpsstyle@ii{\newpsstyle@ii[]}}%% hv 2016-12-23 -% -%\def\newpsstyle@i#1#2{\@namedef{pscs@#1}{% -% \def\pst@tempA{#2}% -% \ifx\pst@tempA\@empty\else\psset{#2}\fi}} -% -\def\newpsstyle@ii[#1]#2#3{% - \@namedef{pscs@#2}{\if$#1$\psset{#3}\else\psset[#1]{#3}\fi}}%% end -% -\def\addto@psstyle#1#2{% - \pst@toks=\expandafter{#1#2}% - \edef#1{\the\pst@toks}} -\def\addtopsstyle#1#2{% - \def\pst@tempA{#2}% - \ifx\pst@tempA\@empty\else - \@ifundefined{pscs@#1}% - {\newpsstyle{#1}{#2}}% - {\expandafter\addto@psstyle\csname pscs@#1\endcsname{\psset{#2}}}% - \fi\ignorespaces} -%------------ hv 1.16 end ------------------- -% -\def\@none{none} -\def\pst@getcolor#1#2{% -% \@ifundefined{color@#1}% hv 1.14 2005-12-17 - \@ifundefined{\string\color@#1}% - {\@pstrickserr{Color `#1' not defined}\@eha}% - {\edef#2{#1}}% -} -\newdimen\psunit \psunit 1cm -\newdimen\psxunit \psxunit 1cm -\newdimen\psyunit \psyunit 1cm -\let\psrunit\psunit -% -\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces} -% -\def\pssetlength#1#2{% - \let\@psunit\psunit - \afterassignment\pstunit@off - #1 #2\@psunit% -} -\def\psaddtolength#1#2{% - \let\@psunit\psunit - \afterassignment\pstunit@off - \advance#1 #2\@psunit% -} -\def\pssetxlength#1#2{% - \let\@psunit\psxunit -% \ifpst@useCalc -% \edef\@@temp{\pscalculate{#2}}% -% \afterassignment\pstunit@off -% #1 \@@temp\@psunit -% \else - \afterassignment\pstunit@off - #1 #2\@psunit -% \fi -} -\def\pssetylength#1#2{% - \let\@psunit\psyunit -% \ifpst@useCalc -% \edef\@@temp{\pscalculate{#2}}% -% \afterassignment\pstunit@off -% #1 \@@temp\@psunit -% \else - \afterassignment\pstunit@off - #1 #2\@psunit -% \fi -} -\define@key[psset]{pstricks}{unit}[1cm]{% - \pssetlength\psunit{#1}% - \psxunit=\psunit% - \psyunit=\psunit% -} -\define@key[psset]{pstricks}{runit}[1cm]{\pssetlength\psrunit{#1}} -\define@key[psset]{pstricks}{xunit}[1cm]{\pssetxlength\psxunit{#1}} -\define@key[psset]{pstricks}{yunit}[1cm]{\pssetylength\psyunit{#1}} -% -\define@key[psset]{pstricks}{PstDebug}[0]{\pst@getint{#1}\Pst@Debug}% hv 2004-06-22 -\psset[pstricks]{PstDebug=0} -\def\psDEBUG{\@ifnextchar[\psDEBUG@i{\psDEBUG@i[PSTricks]}}% -\def\psDEBUG@i[#1]#2{\ifnum\Pst@Debug>0 \expandafter\typeout{<#1>: #2}\fi}% -% -\def\pst@getlength#1#2{% - \pssetlength\pst@dimg{#1}% - \edef#2{\pst@number\pst@dimg}% -} -\def\pst@@getlength#1#2{% - \pssetlength\pst@dimg{#1}% - \edef#2{\number\pst@dimg sp}% -} -\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor} -\def\pst@coor{0 0 } -% -\def\pst@getcoors#1#2{% - \def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}% - \def\pst@coors{}% - \pst@@getcoors -} -\def\pst@@getcoors(#1){% - \pst@@getcoor{#1}% - \edef\pst@coors{\pst@coor\pst@coors}% - \@ifnextchar({\pst@@getcoors}{\pst@aftercoors}% -} -% -\newcount\pst@C@@rType% 0: default cartesian coordinates and angles -% -\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle} -\def\pst@angle{0 } -% -\def\cartesian@coor#1,#2,#3\@nil{% - \pssetxlength\pst@dimg{#1}% - \pssetylength\pst@dimh{#2}% - \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% -} -\def\NormalCoor{% - \def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}% - \def\pstCheckCoorType##1{\global\pst@C@@rType=0}% - \Pst@SpecialLengthfalse - \def\pssetlength##1##2{% - \let\@psunit\psunit - \afterassignment\pstunit@off - ##1 ##2\@psunit% - }% - \def\pst@@getangle##1{% - \pst@checknum{##1}\pst@angle% - \edef\pst@angle{\pst@angle \pst@angleunit}% - }% - \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% -} -%\NormalCoor% set to normal read of coors, angles and lengths -% -\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}} -\def\@degrees[#1]{% - \pst@checknum{#1}\pst@tempg - \edef\pst@angleunit{360 \pst@tempg div mul }% - \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}% - \ignorespaces} -% -\def\radians{\def\pst@angleunit{57.2956 mul }% - \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}}% -\def\pst@angleunit{}% - -% -\def\SpecialCoor{% - \def\pst@@getcoor##1{% - \begingroup% - \pst@activecoor - \xdef\pst@tempg{##1}% - \endgroup - \expandafter\special@coor\pst@tempg||\@nil}% - \def\pstCheckCoorType##1{% - \begingroup - \pst@activecoor - \xdef\pst@tempg{##1}% - \endgroup - \psDEBUG[pstCheckCoorType]{:Checking coor \pst@tempg:}% - \expandafter\pst@CheckCoorType\pst@tempg||\@nil% - \psDEBUG[pstCheckCoorType]{::Coor type=\the\pst@C@@rType::}% - }% - \def\pssetlength##1##2{% - \begingroup% - \pst@activecoor% - \xdef\pst@tempg{##2}% - \endgroup% - \expandafter\special@length\pst@tempg\@nil{##1}% - \ignorespaces}% - \def\pst@@getangle##1{% - \begingroup% - \pst@activecoor% - \xdef\pst@tempg{##1}% - \endgroup% - \expandafter\special@angle\pst@tempg\@empty)\@nil% - }% - \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}% -} -\SpecialCoor% set to special read of coors, angles and lengths -% -\define@key[psset]{}{precode}{\def\pst@prepscode{#1 }} -\define@key[psset]{}{postcode}{\def\pst@postpscode{#1 }} -\psset{precode={},postcode={}}% For use in other packages -% -% -\begingroup -\catcode`\|=13 -\catcode`\;=13 -\catcode`\!=13 -\catcode`\*=13 -\catcode`\>=13 -\catcode`\+=13 -\gdef\pst@activecoor{% - \def|{\string|}% - \def;{\string;}% - \def!{\string!}% - \def*{\string*}% algebraic expression hv 2007-11-17 - \def>{\string>}% - \def+{\string+}% pure algebaric 2013-04-23 -} -\endgroup -% \pst@C@@rType = 0 cartesian (x,y) -% = 1 polar (r;phi) -% = 2 PS (! x y) -% = 3 mixed ((x,y)|(x,y)) -% = 4 algebraic (*x f(x)) x in PostScript notation -% = 5 node (A) -% = 6 special node ([...]A) -% = 7 node (>A) -% = 8 algebraic (+x,f(x)) _both_ algebraic -\def\pst@CheckCoorType#1|#2|#3\@nil{% - \ifx#3|\relax - \global\pst@C@@rType=3\relax - \else - \expandafter\pst@@CheckCoorType#1;;\@nil% - \fi} -% -\def\pst@@CheckCoorType#1#2;#3;#4\@nil{% -%\typeout{====1:#1}% -%\typeout{====2:#2}% -%\typeout{====3:#3}% -%\typeout{====4:#4}% - \ifx#1>\relax% node with special rotation for \uput - \global\pst@C@@rType=7 - \else - \ifcat#1a\relax% node names should start with a letter - \global\pst@C@@rType=5 - \else - \ifx#1[\relax% special node coor: [..]A - \global\pst@C@@rType=6 - \else - \ifx#1!\relax% PostScript code: x y - \global\pst@C@@rType=2 - \else - \ifx#1*\relax% algebraic PostScript code: x f(x) - \global\pst@C@@rType=4 - \else - \ifx#1+\relax% algebraic algebraic: x, f(x) - \global\pst@C@@rType=8 - \else - \ifx#4;\relax% polar coordinates - \global\pst@C@@rType=1 - \else - \global\pst@C@@rType=0 - \fi - \fi - \fi - \fi - \fi - \fi - \fi - \psDEBUG[pstCheckCoorType]{::\the\pst@C@@rType::}% - }% -% -% -\def\special@coor#1|#2|#3\@nil{% - \ifx#3|\relax - \mixed@coor{#1}{#2}% - \else - \special@@coor#1;;\@nil% - \fi} -% -\def\special@@coor#1{% - \ifcat#1a\relax% node names should start with a letter - \def\ps@next{\node@coor#1}% - \else - \ifx#1[\relax% special node coor: [..]A - \def\ps@next{\Node@coor[}% - \else - \ifx#1>\relax% PostScript code: x y - \def\ps@next{\special@@@@coor}% - \else - \ifx#1!\relax% PostScript code: x y - \def\ps@next{\raw@coor}% - \else - \ifx#1*\relax% PostScript/algebraic code: x f(x) - \def\ps@next{\alg@coor}% - \else - \ifx#1+\relax% algebraic code: x,f(x) - \def\ps@next{\algalg@coor}% - \else% - \def\ps@next{\special@@@coor#1}% - \fi% - \fi% - \fi% - \fi\fi% - \fi% - \ps@next% -} -\def\special@@@coor#1;#2;#3\@nil{% - \ifx#3;\relax - \polar@coor{#1}{#2}% - \else - \cartesian@coor#1,\relax,\@nil - \fi% -} -\def\special@@@@coor#1#2;#3;#4\@nil{% - \def\ps@A{A}\def\ps@B{#1}% - \ifcat\ps@A\ps@B\relax% - \node@coor#1#2;;\@nil% - \else% - \cartesian@coor#1#2,\relax,\@nil - \fi% -} -\def\mixed@coor#1#2{% - \begingroup% -% DG/SR modification begin - Oct. 27, 1997 - Patch 6 -%\specialcoor@ii#1;;\@nil -%\let\pst@tempa\pst@coor -%\specialcoor@ii#2;;\@nil - \special@@coor#1;;\@nil% - \let\pst@tempa\pst@coor% - \special@@coor#2;;\@nil% -% DG/SR modification end - \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% - \endgroup% - \let\pst@coor\pst@tempg% -} -% -\def\polar@coor#1#2{% -% \pssetlength\pst@dimg{#1}% - \pssetlength\pst@dimb{#1}% hv 2007-10-16 g is already used in get@@angle - \pst@@getangle{#2}% -% \edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}% dito - \edef\pst@coor{\pst@number\pst@dimb \pst@angle \tx@PtoC }% -} -% -\def\raw@coor{\@ifnextchar !\raw@@coor\raw@@@coor} -\def\raw@@coor!#1;#2\@nil{% PostScript code without using \tx@ScreenCoor - \edef\pst@coor{#1 }} -\def\raw@@@coor#1;#2\@nil{% PostScript code - \edef\pst@coor{ #1 \tx@ScreenCoor }} -% -\def\alg@coor{\@ifnextchar*{\alg@@coor}{\alg@@@@coor}} -\def\alg@@coor*#1;#2\@nil{\expandafter\alg@@@coor#1\@nil} -\def\alg@@@coor#1 #2\@nil{% algebraic PostScript code -%\typeout{Nummer1: #1}% -%\typeout{Nummer2: #2}% - \edef\pst@coor{% - /Func (#1) AlgParser cvx def - /y #2 def - y Func exch \tx@ScreenCoor }} -% -\def\alg@@@@coor#1;#2\@nil{\expandafter\alg@@@@@coor#1\@nil} -\def\alg@@@@@coor#1 #2\@nil{% algebraic PostScript code - \edef\pst@coor{% - /x #1 def - /Func (#2) AlgParser cvx def - x Func \tx@ScreenCoor }} -% -\define@boolkey[psset]{}[Pst@]{exchange}[true]{} -\psset{exchange=false} -% -\def\algalg@coor#1;#2\@nil{\expandafter\algalg@@@coor#1\@nil} -\def\algalg@@@coor#1,#2\@nil{% algebraic algebraic code - \edef\pst@coor{% - /x (#1) AlgParser cvx def - /Func (#2) AlgParser cvx def - x Func \tx@ScreenCoor }} -% -\def\node@coor#1\@nil{% - \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps - \def\pst@coor{0 0 }% -} -\def\Node@coor{\node@coor} -% -\def\special@angle#1#2)#3\@nil{% - \ifx !#1\relax - \edef\pst@angle{#2\space \pst@angleunit}% - \else\ifx(#1\relax - \pst@@getcoor{#2}% - \edef\pst@angle{\pst@coor exch \tx@Atan}% - \else - \pst@checknum{#1#2}\pst@angle - \edef\pst@angle{\pst@angle \pst@angleunit}% - \fi\fi} -% -\def\special@length#1#2\@nil#3{% - \ifx !#1\relax - \edef\pst@SpecialLength{ #2 \pst@number\psunit mul }% - \Pst@SpecialLengthtrue - \else - \let\@psunit\psunit - \afterassignment\pstunit@off - #3 #1#2\@psunit - \Pst@SpecialLengthfalse - \fi -} -% -\def\Cartesian{% - \def\cartesian@coor##1,##2,##3\@nil{% - \pssetxlength\pst@dimg{##1}% - \pssetylength\pst@dimh{##2}% - \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% - }% - \@ifnextchar({\Cartesian@}{}% -} -\def\Cartesian@(#1,#2){% - \pssetxlength\psxunit{#1}% - \pssetylength\psyunit{#2}% - \ignorespaces -} -\def\Polar{% - \def\psput@cartesian{\psput@special}% - \def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}% -}% -\define@key[psset]{pstricks}{origin}[]{% - \pst@@getcoor{#1}% - \edef\psk@origin{\pst@coor T }} -\def\psk@origin{} -% -\define@boolkey[psset]{pstricks}[Pst@]{algebraic}[true]{} -\psset{algebraic=false} -% -\define@boolkey[psset]{pstricks}[]{swapaxes}[true]{% \if@pst - \@nameuse{@pst#1}% - \if@pst\def\psk@swapaxes{-90 rotate -1 1 scale }% - \else\def\psk@swapaxes{}% - \fi -} -\psset[pstricks]{swapaxes=false} -% -\define@boolkey[psset]{pstricks}[]{showpoints}[true]{} -\psset[pstricks]{showpoints=false} -% -\let\pst@setrepeatarrowsflag\relax -% -\define@key[psset]{pstricks}{border}[0pt]{\pst@getlength{#1}\psk@border \pst@setrepeatarrowsflag} -\psset[pstricks]{border=0pt} -\define@key[psset]{pstricks}{bordercolor}[white]{\pst@getcolor{#1}\psbordercolor} -\psset[pstricks]{bordercolor=white} -\define@boolkey[psset]{pstricks}[ps]{doubleline}[true]{\pst@setrepeatarrowsflag} -\psset[pstricks]{doubleline=false} -\define@key[psset]{pstricks}{doublesep}[1.25\pslinewidth]{\def\psdoublesep{#1}} -\psset[pstricks]{doublesep=1.25\pslinewidth} -\define@key[psset]{pstricks}{doublecolor}[white]{\pst@getcolor{#1}\psdoublecolor} -\psset[pstricks]{doublecolor=white} -% -\define@boolkey[psset]{pstricks}[ps]{shadow}[true]{\pst@setrepeatarrowsflag} -\psset[pstricks]{shadow=false} -\define@key[psset]{pstricks}{shadowsize}[3pt]{\pst@getlength{#1}\psk@shadowsize} -\psset[pstricks]{shadowsize=3pt} -\define@key[psset]{pstricks}{shadowangle}[-45]{\pst@getangle{#1}\psk@shadowangle} -\psset[pstricks]{shadowangle=-45} -\define@key[psset]{pstricks}{shadowcolor}[darkgrey]{\pst@getcolor{#1}\psshadowcolor} -\psset[pstricks]{shadowcolor=darkgray} -% -\def\pst@repeatarrowsflag{\z@} -\def\pst@setrepeatarrowsflag{% - \edef\pst@repeatarrowsflag{% - \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else - \ifpsshadow 1\else \z@\fi\fi\fi}} -% -\def\psls@none{} -\def\psls@solid{ \psk@linejoin\space setlinejoin \psk@linecap\space setlinecap stroke } -\def\psls@coloreddashed{ \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \psls@dashed } -% -\newdimen\pslinewidth -\define@key[psset]{pstricks}{linewidth}[0.8pt]{\pssetlength\pslinewidth{#1}} -\psset[pstricks]{linewidth=.8pt} -\define@key[psset]{pstricks}{linecolor}[black]{\pst@getcolor{#1}\pslinecolor} -\psset[pstricks]{linecolor=black} -\define@key[psset]{pstricks}{kitecolor}[red]{\pst@getcolor{#1}\ps@kitecolor} -\define@key[psset]{pstricks}{dartcolor}[blue]{\pst@getcolor{#1}\ps@dartcolor} -\psset[pstricks]{kitecolor,dartcolor} -% -\newif\ifPst@coloreddashed -\define@key[psset]{pstricks}{dashcolor}[white]{% - \ifx\relax#1\relax\Pst@coloreddashedfalse% - \else\Pst@coloreddashedtrue\pst@getcolor{#1}\psdashcolor - \fi} -\psset{dashcolor=\relax} -%\define@key[psset]{pstricks}{linecap}[0]{\pst@getint{#1}\psk@linecap}% hv 2007-12-01 -%\psset[pstricks]{linecap=0} >>>>>>>>>>>>> siehe unten -\define@key[psset]{pstricks}{linejoin}[0]{\pst@getint{#1}\psk@linejoin}% hv 2007-10-13 -\psset[pstricks]{linejoin=0} -\def\tx@setlinejoin{\psk@linejoin\space setlinejoin }% hv 2007-10-13 -% -\def\pst@missing{% - \z@ - \@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa} -% -%%------------------- begin patch 15 HV 2004-05-15 ------------- -\def\pst@empty{\z@} - -\define@key[psset]{pstricks}{dash}[5pt 3pt 0pt 0pt]{% defined in pstricks.tex - \pst@expandafter\psset@@dash{#1}\@nil}% Error handling for empty argument. -\define@key[psset]{pstricks}{maxdashes}[11]{\def\psk@maxdashes{#1}} -\psset[pstricks]{maxdashes=11} -% -\def\psset@@dash#1\@nil{% - \def\psk@dash{}% - \pst@cntm0 - \def\next##1 ##2\relax{% - \expandafter\ifnum\psk@maxdashes>\pst@cntm\relax % 04-08-07 - \edef\@tempa{##1}% - \ifx\@tempa\@empty\else% gobble leading spaces - \pssetlength\pst@dimc{##1}% - \advance\pst@cntm by 1 - \edef\psk@dash{\psk@dash\space\pst@number\pst@dimc}% - \fi% - \edef\@tempa{##2}% - \ifx\@tempa\@empty\else% detect end - \ifx\@tempa\space\else% gobble trailing spaces - \next##2\relax% - \fi\fi% - \else% 04-08-07 - \@pstrickserr{Number of dashes > \psk@maxdashes. Increasing - 'maxdashes' might work.}\@ehpa% 04-08-07 - \fi% 04-08-07 - }% - \expandafter\next#1 \relax} -\psset[pstricks]{dash=5pt 3pt 0pt 0pt}% black white black white -%%------------------- end patch 15 HV 2004-05-15 ------------- -\define@boolkey[psset]{pstricks}[ps]{dashadjust}[true]{} -\psset[pstricks]{dashadjust} -\def\tx@DashLine{DashLine } -% -\def\psls@dashed{ - \ifPst@coloreddashed \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \fi - \psk@linecap\space setlinecap - \ifpsdashadjust - [ \psk@dash ] \pst@linetype\space \tx@DashLine - \else - [ \psk@dash ] 0 setdash stroke - \fi} -%% End patch TN; Date (YY-MM-DD): 04-07-17; 2nd part -% -\define@key[psset]{pstricks}{dotsep}[3pt]{\pst@getlength{#1}\psk@dotsep} -\psset[pstricks]{dotsep=3pt} -\def\tx@DotLine{DotLine } -\def\psls@dotted{ - \ifpsdashadjust - \psk@dotsep \pst@linetype\space \tx@DotLine - \else - [ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke - \fi -} -% -\define@key[psset]{pstricks}{linestyle}[solid]{% - \@ifundefined{psls@#1}% - {\@pstrickserr{Line style `#1' not defined}\@eha}% - {\def\pslinestyle{#1}}} -\psset[pstricks]{linestyle=solid} -% -\define@key[psset]{pstricks}{linecap}[0]{% - \def\psk@linecap{0}% - \ifnum#1>-1 - \ifnum#1<3 - \pst@getint{#1}\psk@linecap% - \fi\fi} -\psset{linecap=0} -%------------------------- Transparency modes ---------------------------- -\pst@def{setTransparency}< \psk@opacityalpha .setopacityalpha > -\pst@def{setStrokeTransparency}< \psk@strokeopacityalpha .setstrokeopacityalpha > -\pst@def{setBlendmode}< - \ifcase\psk@blendmode - /Normal \or - /Compatible \or - /Screen \or - /Multiply \or - /HardLight \or - /Darken \or - /Lighten \or - /Difference\or - /ColorDodge\or - /ColorBurn\or - /SoftLight\or - /Hue\or - /Saturation\or - /Luminosity\or - /Overlay\or - /Exclusion\or - /Color - \else - /Normal - \fi - .setblendmode \psk@shapealpha .setopacityalpha > -% -%--------------------------------- hv 2007-09-09 begin --------------------- -% transparency needs a run through latex -> dvips -> ps2pdf14(!) -% -\def\e@fill@inverse{oefill} -\define@key[psset]{pstricks}{fillcolor}[white]{% - \ifx\psk@fillstylename\e@fill@inverse - \pst@getcolor{#1}\psk@oefillcolor - \pst@getcolor{white}\psfillcolor - \else \pst@getcolor{white}\psk@oefillcolor - \pst@getcolor{#1}\psfillcolor - \fi} - -\psset[pstricks]{fillcolor=white} -\define@key[psset]{pstricks}{strokeopacity}[1]{\pst@checknum{#1}\psk@strokeopacityalpha }% for lines -\psset[pstricks]{strokeopacity=1} -\define@key[psset]{pstricks}{opacity}[1]{\pst@checknum{#1}\psk@opacityalpha }% for filled areas -\psset[pstricks]{opacity=1} -\define@key[psset]{pstricks}{shapealpha}[0.6]{\pst@checknum{#1}\psk@shapealpha } -\psset[pstricks]{shapealpha=0.6} -\define@key[psset]{pstricks}{blendmode}[0]{\pst@getint{#1}\psk@blendmode }% must be one of -% /Normal 0 -% /Compatible 1 -% /Screen 2 -% /Multiply 3 -% /HardLight 4 -\psset[pstricks]{blendmode=0} -\define@key[psset]{pstricks}{fsAngle}[137.50775]{\pst@getangle{#1}\pst@fsAngle } -\define@key[psset]{pstricks}{fsOrigin}[(0,0)]{% - \pst@@getcoor{#1}\edef\pst@fsOrigin{\pst@coor T }} -\psset[pstricks]{fsOrigin={0,0},fsAngle=137.50775} -% -\def\tx@LineFill{LineFill } -\def\tx@DotFill{DotFill } -\def\tx@PenroseFill{PenroseFill } -\def\tx@PenroseFillA{PenroseFillA } -\def\tx@TruchetFill{TruchetFill } -% -\def\psfs@none{} -\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency fill }} -\def\psfs@eofill{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency eofill}} -\def\psfs@oefill{\pst@fill{\pst@usecolor\psk@oefillcolor \tx@setTransparency fill }\psfs@eofill } -\def\psfs@shape{\pst@fill{\pst@usecolor\psfillcolor \tx@setBlendmode fill }} -\def\psfs@spiral{\pst@fill{\pst@fsOrigin \pst@usecolor\psfillcolor clip newpath - 0 .1 500 { dup dup sqrt 4 div 0 360 arc fill \pst@fsAngle rotate } for }} -% -\define@key[psset]{pstricks}{hatchwidth}[0.8pt]{\pst@getlength{#1}\psk@hatchwidth} -\psset[pstricks]{hatchwidth=.8pt} -\define@key[psset]{pstricks}{hatchsep}[4pt]{\pst@getlength{#1}\psk@hatchsep} -\psset[pstricks]{hatchsep=4pt} -\define@key[psset]{pstricks}{hatchcolor}[black]{\pst@getcolor{#1}\pshatchcolor} -\psset[pstricks]{hatchcolor=black} -\define@key[psset]{pstricks}{hatchangle}[45]{\pst@getangle{#1}\psk@hatchangle} -\psset[pstricks]{hatchangle=45} -\define@key[psset]{pstricks}{hatchsepinc}[0pt]{\pst@getlength{#1}\psk@hatchsepinc} -\define@key[psset]{pstricks}{hatchwidthinc}[0pt]{\pst@getlength{#1}\psk@hatchwidthinc} -\psset[pstricks]{hatchwidthinc=0pt,hatchsepinc=0pt} -% -\def\pst@linefill#1{ - /clipType { \ifx\relax#1\relax clip \else#1\fi} def - \psk@hatchangle rotate - \psk@hatchwidth SLW - \pst@usecolor\pshatchcolor - \psk@hatchsep - \psk@hatchsepinc - \psk@hatchwidthinc - \tx@LineFill } -% -\def\psfs@vlines{\pst@fill{\pst@linefill{}}} -\def\psfs@eovlines{\pst@fill{\pst@linefill{eoclip}}} -\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines} -\@namedef{psfs@eovlines*}{\psfs@eofill \psfs@eovlines} -\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill{}}} -\def\psfs@eohlines{\pst@fill{90 rotate \pst@linefill{eoclip}}} -\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines} -\@namedef{psfs@eohlines*}{\psfs@eofill \psfs@eohlines} -\def\psfs@crosshatch{\psfs@vlines \psfs@hlines} -\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines} -\@namedef{psfs@eocrosshatch*}{\psfs@eofill \psfs@eovlines \psfs@eohlines} -% -\define@key[psset]{pstricks}{psscale}[1]{% - \def\psk@@psscale{#1}% for use with \psscalebox - \pst@checknum{#1}\psk@psscale} -\psset[pstricks]{psscale=1} -% -\def\pst@dotFill[#1]{% - /clipType { \ifx\relax#1\relax clip \else #1 \fi } def - gsave - \pst@number\pslinewidth SLW - \pst@usecolor\pshatchcolor -% /DotLineColor { \pst@usecolor\pslinecolor } def - \psk@hatchsep - \psk@hatchwidth - \tx@DotFill } - -\def\psfs@dots{\pst@fill{ /SolidDot false def \pst@dotFill[] }} -\def\psfs@eodots{\pst@fill{ /SolidDot false def \pst@dotFill[eoclip] }} -\@namedef{psfs@dots*}{\pst@fill{ /SolidDot true def \pst@dotFill[] }} -\@namedef{psfs@eodots*}{\pst@fill{ /SolidDot true def \pst@dotFill[eoclip] }} -% -\def\pst@penroseFill{% -% gsave % restore in PenroseFill - \pst@number\pslinewidth SLW - \pst@usecolor\pshatchcolor - \psk@psscale - \tx@PenroseFill } -\def\psfs@penrose{\pst@fill\pst@penroseFill} -\@namedef{psfs@penrose*}{\psfs@solid \psfs@penrose} -% -\def\pst@penroseFillA{% -% gsave % restore in PenroseFillA - \pst@number\pslinewidth SLW -% \pst@usecolor\pshatchcolor -% on stack: scaling factor, border color, kite color, dart color -% dup dup scale -% /border_colour ED % -% /kite_colour ED % -% /dart_colour - { \pst@usecolor\ps@dartcolor } - { \pst@usecolor\ps@kitecolor } - { \pst@usecolor\pshatchcolor } - \psk@psscale - \tx@PenroseFillA } -\def\psfs@penroseA{\pst@fill\pst@penroseFillA} -\@namedef{psfs@penroseA*}{\psfs@solid \psfs@penroseA} -% -\def\pst@truchetFill{% - gsave % restore in PenroseFill - \pst@number\pslinewidth SLW - \pst@usecolor\pshatchcolor - \psk@psscale - \tx@TruchetFill } -\def\psfs@truchet{ \pst@fill\pst@truchetFill } -\@namedef{psfs@truchet*}{\psfs@solid \psfs@truchet} -% -\define@key[psset]{pstricks}{fillstyle}[none]{% - \def\psk@fillstylename{#1}% needed for inverse eofill - \edef\pst@tempg{#1}\def\pst@temph{none}% - \ifx\pst@tempg\pst@temph - \let\psk@fillstyle\relax - \else - \@ifundefined{psfs@#1}% - {\@pstrickserr{Undefined fill style: `#1'}\@eha}% - {\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}% - \fi% -} -\define@key[psset]{pstricks}{addfillstyle}[]{% - \@ifundefined{psfs@#1}% - {\@pstrickserr{Undefined fill style: `#1'}\@eha}% - {\edef\psk@fillstyle{% - \expandafter\noexpand\psk@fillstyle - \expandafter\noexpand\csname psfs@#1\endcsname}% - }} -\psset[pstricks]{fillstyle=none} -% -%--------------------------- continous linewidth ------------------- -\newdimen\psk@startLW -\newdimen\psk@endLW -\define@key[psset]{pstricks}{startLW}[\pslinewidth]{\pssetlength{\psk@startLW}{#1}}% -\define@key[psset]{pstricks}{endLW}[\pslinewidth]{\pssetlength{\psk@endLW}{#1}}% -\define@key[psset]{pstricks}{startWL}[380]{\pst@getint{#1}\psk@startWL}% -\define@key[psset]{pstricks}{endWL}[780]{\pst@getint{#1}\psk@endWL}% -\define@boolkey[psset]{pstricks}[Pst@]{variableLW}[true]{} -\define@boolkey[psset]{pstricks}[Pst@]{variableColor}[true]{} -\define@key[psset]{pstricks}{setflat}[0.1]{\pst@checknum{#1}\psk@setflat}% -\psset[pstricks]{startLW=\pslinewidth,endLW=\pslinewidth,variableColor=false, - variableLW=false,startWL=380,endWL=780,setflat=0.1} -% -\def\pst@flattenpath{ - /Coors [] def % the array of all points - /lambda \psk@startWL\space def - % - /add2Values { Coors aload length 2 add array astore /Coors exch def } def - /add6Values { Coors aload length 6 add array astore /Coors exch def } def -% - \psk@setflat\space setflat % the value for the line snippets - flattenpath % flatten the existing path into line segments -% - { add2Values } % what to do with moveto - { add2Values } % what to do with lineto - { add6Values } % what to do with curveto (not needed here) - { } % what to do with closepath - pathforall % do it for the existing path -% - \pst@number\psk@startLW setlinewidth - \tx@setlinejoin - \psk@linecap\space setlinecap - Coors aload length 2 sub 2 div cvi /N0 exch def % set number of points - /NN 0 def - /N N0 def - { N 3 gt { N 3 sub /N ED }{ N 1 sub /N ED } ifelse - NN 1 add /NN ED - N 0 eq { exit } if - } loop - /dLW \pst@number\psk@endLW \pst@number\psk@startLW sub NN div def % the step for the linewidth - \ifPst@variableColor - /dColor \psk@endWL\space \psk@startWL\space sub NN div def - lambda dColor add dup /lambda ED - tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor - \else - \pst@usecolor\pslinecolor - \fi - moveto % move to the first one - /N N0 def - { - N 3 gt { -% CP 6 2 roll - \psk@curvature\space /c ED /b ED /a ED - /ArrowA {} def - /ArrowB {} def - BOC NC EOC % curveto - N 3 sub /N ED }{ lineto N 1 sub /N ED } ifelse - currentlinewidth dLW add setlinewidth % increase line width - \ifPst@variableColor - lambda dColor add dup /lambda ED - tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor - \else - \pst@usecolor\pslinecolor - \fi - CP /Y ED /X ED % put coors of current point on the stack - stroke % draw the line segment - N 0 eq { exit }{ X Y moveto } ifelse - } loop -% N { % repeat for the other N coords -% lineto % line to next point -% currentlinewidth dLW add setlinewidth % increase line width -% lambda dColor add dup /lambda ED -% tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor -% currentpoint % put coors of current point on the stack -% 0.4 .setopacityalpha -% stroke % draw the line segment -% moveto -% } repeat -} - -% -%--------------------------- A R R O W S --------------------------- -% -\def\psk@arrowA{} -\def\psk@arrowB{} -\def\pst@arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,<D-D>,D>-<D,<D<D-D>D>} % hv --1.16 -\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|} -\begingroup - \catcode`\<=13 - \catcode`\>=13 - \catcode`\|=13 - \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} -\endgroup -\def\tx@BeginArrow{BeginArrow } -\def\tx@EndArrow{EndArrow } -% -\def\tx@Arrow{ \tx@setStrokeTransparency Arrow }% hv 2008-01-13 -\def\tx@ArrowD{ \tx@setStrokeTransparency ArrowD }% hv 2008-01-13 -% -\@namedef{psas@<|}{ - \psk@tbarsize\space \tx@Tbar - 0 CLW 2 div T - newpath - true - \psk@arrowinset - \psk@arrowlength - \psk@arrowsize - \tx@Arrow -} -% ]-[ arrow -\def\tx@BracketOut{BracketOut } -\@namedef{psas@[}{% - /BracketOut {% - CLW mul add dup CLW sub 2 div -%/x ED mul CLW add - /x ED mul neg - /y ED - /z CLW 2 div def - x neg y moveto - x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def - \psk@bracketlength\space \psk@tbarsize\space \tx@BracketOut -} -% )-( arrow -\def\tx@RoundBracketOut{ \tx@setStrokeTransparency RoundBracketOut }% hv 2008-01-13 -\@namedef{psas@(}{% - /RoundBracketOut {% - CLW mul add dup 2 div -%/x ED mul - /x ED mul neg - /y ED - /mtrx CM def - 0 CLW - 2 div T x y mul 0 ne { x y scale } if - 1 1 moveto - .85 .5 .35 0 0 0 curveto - -.35 0 -.85 .5 -1 1 curveto - mtrx setmatrix stroke 0 CLW moveto } def - \psk@rbracketlength\space \psk@tbarsize\space \tx@RoundBracketOut -} -% end of new definitions of the missing arrows ---- hv 1.12 -\@namedef{psas@>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } -\@namedef{psas@>>}{% - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - 0 h T gsave newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - CP grestore CP newpath moveto 2 copy - CLW \pst@arrowscale\space div SLW % set the original line width - L stroke moveto -} -\@namedef{psas@<}{true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} -\@namedef{psas@<<}{ - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - CP newpath moveto 0 a neg - gsave - CLW \pst@arrowscale\space div SLW % set the original line width - L stroke - grestore - 0 h neg T - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow -} -\@namedef{psas@D>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD }% hv 20071211 -\@namedef{psas@D>D>}{ % hv 20071211 - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD - 0 h Inset sub T gsave newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD - CP grestore moveto -} -\@namedef{psas@<D}{ % hv 20071211 - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD -} -\@namedef{psas@<D<D}{ % hv 20071211 - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD - CP newpath moveto 0 a neg L stroke 0 h neg T - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD -} -\define@key[psset]{pstricks}{tbarsize}[2pt 5]{% - \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil - \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}} -\psset[pstricks]{tbarsize=2pt 5} -% -\def\tx@Tbar{Tbar } -\@namedef{psas@|}{\psk@tbarsize \tx@Tbar} -\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar} -\@namedef{psas@>|}{% - \psk@tbarsize \tx@Tbar - 0 CLW 2 div T - newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow -} -\@namedef{psas@>|*}{% - 0 CLW -2 div T - \psk@tbarsize \tx@Tbar - 0 CLW 2 div T - newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow -} -% -\define@key[psset]{pstricks}{bracketlength}[0.15]{\pst@checknum{#1}\psk@bracketlength} -\psset[pstricks]{bracketlength=.15} -\def\tx@Bracket{Bracket } -\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} -\define@key[psset]{pstricks}{rbracketlength}[0.15]{\pst@checknum{#1}\psk@rbracketlength} -\psset[pstricks]{rbracketlength=.15} -\def\tx@RoundBracket{RoundBracket } -\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} -% -\def\psas@c{1 \psas@@c} -\def\psas@cc{0 CLW 2 div T 1 \psas@@c} -\def\psas@C{2 \psas@@c} -\def\psas@@c{% - setlinecap - 0 0 moveto - 0 0.1 L % changed value from 0.5 to 0.1 - stroke - 0 0 moveto } -% -\def\psas@{} -% -\define@key[psset]{pstricks}{arrowLW}{\pst@getlength{#1}\psk@arrowLW} -\psset[pstricks]{arrowLW=0} -% arrowLW as LineWidth for the circled line ends -% -\def\psas@o{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot } -\def\psas@oo{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot } -\@namedef{psas@*}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {false} false \psk@dotsize \tx@EndDot } -\@namedef{psas@**}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse - {false} true \psk@dotsize \tx@EndDot } -% -\define@key[psset]{pstricks}{arrows}[-]{% - \begingroup - \pst@activearrows - \xdef\pst@tempg{#1}% - \endgroup - \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil - \if@pst\else\@pstrickserr{Bad arrows specification: #1}\@ehpa\fi} -\def\psset@@arrows#1-#2\@empty#3\@nil{% - \@psttrue - \def\ps@next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% - \expandafter\ps@next\pst@arrowtable,#1-#1,\@nil - \@ifundefined{psas@\pst@tempg}{\@pstfalse\def\psk@arrowA{}}{\let\psk@arrowA\pst@tempg}% - \@ifundefined{psas@#2}{\@pstfalse\def\psk@arrowB{}}{\def\psk@arrowB{#2}}} -\psset[pstricks]{arrows=-} -% -\define@key[psset]{pstricks}{arrowscale}[1]{% hv --1.12 - \pst@getscale{#1}\psk@arrowscale - \pst@@arrowscale@i#1 \@nil}% hv --1.12 -\def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12 -\psset[pstricks]{arrowscale=1} -% -\define@key[psset]{pstricks}{arrowsize}[1.5pt 2]{% - \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil - \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}% -} -\psset[pstricks]{arrowsize=1.5pt 2} -\define@key[psset]{pstricks}{arrowlength}[1.4]{\pst@checknum{#1}\psk@arrowlength} -\psset[pstricks]{arrowlength=1.4} -\define@key[psset]{pstricks}{arrowinset}[0.4]{\pst@checknum{#1}\psk@arrowinset}% -\psset[pstricks]{arrowinset=0.4} -% -\def\tx@SD{ \tx@setTransparency SD } -\def\tx@EndDot{EndDot } -% -\def\pst@par{} -\def\addto@par#1{% - \ifx\pst@par\@empty - \def\pst@par{#1}% - \else - \expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}% - \fi% -} -\def\addbefore@par#1{% - \ifx\pst@par\@empty - \def\pst@par{#1}% - \else - \toks@{#1}% - \pst@toks\expandafter{\pst@par}% - \edef\pst@par{\the\toks@,\the\pst@toks}% - \fi% -} -\def\use@par{% - \ifx\pst@par\@empty\else - \expandafter\@psset\pst@par,\@nil - \def\pst@par{}% - \fi -} -\def\use@keep@par{% same as \use@par, but keeps the values - \ifx\pst@par\@empty\else - \expandafter\@psset\pst@par,\@nil -% \def\pst@par{}% - \fi} -% -\def\pst@object#1{% - \def\pst@par{}% - \pst@ifstar{% - \@ifnextchar[{\pst@@object{#1}}{\@nameuse{#1@i}}}% -} -\def\pst@@object#1[#2]{% - \def\pst@par{#2}% - \@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}% -} -\def\newpsobject#1#2#3{% -\@ifundefined{#2@i}% -{\@pstrickserr{Graphics object `#2' not defined}\@eha}{% -\@namedef{#1}{\pst@object{#1}}% -\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}% -\ignorespaces} -% -\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} -% ------------------------- hv 1.10 beg ------------------------ -%\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} -\def\pst@@getarrows#1#2{% - \def\pst@tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...) - \ifx\pst@tempa\@empty - \addto@par{arrows=-}% - \else - \addto@par{arrows=#2}% - \fi - #1% -} -% ------------------------- hv 1.10 end ------------------------ -% -\def\begin@ClosedObj{% - \leavevmode - \pst@killglue - \begingroup - \use@par - \solid@star - \ifpsdoubleline\pst@setdoublesep\fi - \pst@addarrowdef% DG addition - \init@pscode} -% -\def\end@ClosedObj{% - \ifpsshadow \pst@closedshadow \fi - \ifdim\psk@border\p@>\z@ \pst@addborder \fi - \psk@fillstyle - \pst@stroke - \ifpsdoubleline \pst@doublestroke \fi - \ifshowpoints -% DG modification begin - Mar. 4, 1995 -%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}% - \pst@OpenShowPoints -% DG modification end - \fi - \use@pscode - \endgroup - \ignorespaces% -} -\def\begin@OpenObj{% - \begin@ClosedObj% - \let\pst@linetype\pst@arrowtype% - \pst@addarrowdef% -} -\def\begin@AltOpenObj{% - \begin@ClosedObj - \def\pst@repeatarrowsflag{\z@}% - \def\pst@linetype{0}} -% -\def\end@OpenObj{% - \ifpsshadow \pst@openshadow \fi - \ifdim\psk@border\p@>\z@ \pst@addborder \fi - \psk@fillstyle - \pst@stroke - \ifpsdoubleline \pst@doublestroke \fi - \ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi - \ifshowpoints \pst@OpenShowPoints \fi - \use@pscode - \endgroup - \ignorespaces} -% -\def\begin@SpecialObj{% - \leavevmode - \pst@killglue - \begingroup - \use@par - \init@pscode} -% -\def\end@SpecialObj{% - \use@pscode - \endgroup - \ignorespaces} -% -\def\pst@code{}% -\def\init@pscode{% - \addto@pscode{% - \pst@number\pslinewidth SLW - \pst@usecolor\pslinecolor}% -} -\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}} -\def\use@pscode{% - \pstverb{ - \pst@dict - \tx@STP - \pst@newpath - \psk@origin - \psk@swapaxes - \pst@code - end - }% - \gdef\pst@code{}% -} -\def\use@psCode{% - \pstVerb{ - \pst@dict - \tx@STP - \pst@newpath - \psk@origin - \psk@swapaxes - \pst@code - end - }% - \gdef\pst@code{}% -} -\def\pst@newpath{newpath } -% -\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi} -\def\KillGlue{\let\pst@killglue\pst@@killglue} -\def\DontKillGlue{\let\pst@killglue\relax} -\DontKillGlue -% -\def\solid@star{% - \if@star - \pslinewidth=\z@ - \psdoublelinefalse - \def\pslinestyle{none}% - \def\psk@fillstyle{\psfs@solid}% - \let\psfillcolor\pslinecolor - \fi} -% -\def\pst@setdoublesep{% -\pst@getlength\psdoublesep\psdoublesep -\pslinewidth=2\pslinewidth -\advance\pslinewidth\psdoublesep\p@ -\let\pst@setdoublesep\relax} -\def\tx@Shadow{Shadow } -\def\pst@closedshadow{% - \addto@pscode{% - gsave - \psk@shadowsize \psk@shadowangle \tx@PtoC - \tx@Shadow - \pst@usecolor\psshadowcolor - gsave fill grestore - stroke - grestore - gsave - \pst@usecolor\psfillcolor - gsave fill grestore - stroke - grestore}} -% -\def\pst@openshadow{% - \addto@pscode{% - gsave - \psk@shadowsize \psk@shadowangle \tx@PtoC - \tx@Shadow - \pst@usecolor\psshadowcolor - \ifx\psk@fillstyle\relax\else - gsave fill grestore - \fi - stroke}% - \pst@repeatarrows% - \addto@pscode{grestore}% - \ifx\psk@fillstyle\relax\else - \addto@pscode{% - gsave - \pst@usecolor\psfillcolor - gsave fill grestore - stroke - grestore}% - \fi} -% -\def\pst@addborder{% - \addto@pscode{% - gsave - \psk@border 2 mul - CLW add SLW - \pst@usecolor\psbordercolor - stroke - grestore}} -% -\def\pst@stroke{% - \ifx\pslinestyle\@none\else - \addto@pscode{% - gsave - \pst@number\pslinewidth SLW - \pst@usecolor\pslinecolor - \tx@setStrokeTransparency % hv 2008-01-13 - \@nameuse{psls@\pslinestyle} - grestore}% - \fi} -% -\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}% -% -\def\pst@doublestroke{% - \addto@pscode{% - gsave - \psdoublesep SLW - \pst@usecolor\psdoublecolor - \tx@setStrokeTransparency % hv 2016-09-23 - stroke - grestore -}} -% -\def\pst@arrowtype{% - \ifx\psk@arrowB\@empty 0 \else -2 \fi - \ifx\psk@arrowA\@empty 0 \else -1 \fi - add } -% -\def\pst@addarrowdef{% - \addto@pscode{% - /ArrowA { - \ifx\psk@arrowA\@empty - \pst@oplineto - \else - \pst@arrowdef{A} - moveto - \fi - } def - /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def -}} -% -\def\pst@arrowdef#1{% - \ifnum\pst@repeatarrowsflag>\z@ - /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c - \fi - \tx@BeginArrow - \psk@arrowscale - \@nameuse{psas@\@nameuse{psk@arrow#1}} - \tx@EndArrow -} -% -\def\pst@repeatarrows{% - \addto@pscode{% - gsave - \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi - \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi - grestore -}} -% -\def\pst@OpenShowPoints{% - \addto@pscode{% - gsave - \psk@dotsize - \@nameuse{psds@\psk@dotstyle} - newpath - Points aload length 2 div 2 sub cvi /N ED - N 0 ge - { \ifx\psk@arrowA\@empty Dot \else pop pop \fi - N { Dot } repeat - \ifx\psk@arrowB\@empty Dot \else pop pop \fi } - { N 2 mul { pop } repeat } ifelse - grestore -}} -% -\newif\ifPst@custom\Pst@customfalse -\define@boolkey[psset]{pstricks}[Pst@]{noCurrentPoint}[true]{} -\psset[pstricks]{noCurrentPoint=false} -% -% -\def\pscustom{\pst@object{pscustom}} -\long\def\pscustom@i#1{% - \begin@SpecialObj% - \solid@star% - \let\pst@ifcustom\iftrue% - \Pst@customtrue% - \let\begin@ClosedObj\begin@CustomObj% - \let\end@ClosedObj\endgroup% - \def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}% - \let\end@OpenObj\endgroup% - \let\begin@AltOpenObj\begin@CustomObj% - \def\begin@SpecialObj{% - \begingroup% - \pst@misplaced{special graphics object}% - \def\addto@pscode####1{}% - \let\end@SpecialObj\endgroup}% - \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% - \def\psclip##1{\pst@misplaced\psclip}% - \def\pst@repeatarrowsflag{\z@}% - \let\pst@setrepeatarrowsflag\relax% - \showpointsfalse% - \def\pst@linetype{\pslinetype}% - \def\psk@liftpen{\z@}% -% \psset{liftpen=0}% - \def\pst@cp{/currentpoint load stopped pop }% - \def\pst@oplineto{/lineto load stopped { moveto } if }% - \def\pst@optcp##1##2{\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}% - \let\caddto@pscode\addto@pscode% - \def\cuse@par##1{{\use@par##1}}% - \the\pst@customdefs% - \setbox\pst@hbox=\hbox{#1}% - \psk@fillstyle - \pst@stroke - \end@SpecialObj - \let\pst@ifcustom\iffalse - \ignorespaces -} -% -\let\pst@ifcustom\iffalse -% -\def\begin@CustomObj{% - \begingroup% - \use@par% - \addto@pscode{ - \pst@number\pslinewidth SLW - \pst@usecolor\pslinecolor - }% -} -\def\pst@oplineto{moveto } -\def\pst@cp{} -\def\pst@optcp#1#2{} -\define@key[psset]{pstricks}{liftpen}[0]{% - \ifPst@custom% - \ifcase#1\relax% - \def\psk@liftpen{\z@}% - \def\pst@cp{/currentpoint load stopped pop }% - \def\pst@oplineto{/lineto load stopped { moveto } if }% - \or% - \def\psk@liftpen{1}% - \def\pst@cp{}% - \def\pst@oplineto{/lineto load stopped { moveto } if }% - \or% - \def\psk@liftpen{2}% - \def\pst@cp{}% - \def\pst@oplineto{moveto }% - \fi\fi% -} -\psset[pstricks]{liftpen=0} -\def\psk@liftpen{-1} -% -\define@key[psset]{pstricks}{linetype}[2]{% - \pst@getint{#1}\pslinetype - \ifnum\pst@cntg<-3 - \@pstrickserr{linetype must be greater than -3}\@ehpa - \def\pslinetype{2}% - \fi} -\psset[pstricks]{linetype=2}% otherwise there is a problem when using e.g. -% \psaxes[axesstyle=frame,linestyle=dashed]{->}(3,-2) -% -\def\caddto@pscode#1{% - \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa} -\let\cuse@par\caddto@pscode -% -\def\tx@MSave{% - /msavematrx - [ tx@Dict /msavematrx known % does msavematrix exists? - { msavematrx aload pop } if - CM % matrix currentmatrix - ] - def -%----------------- hv begin 2004-05-07 ------------- patch 15 - msavematrx -%----------------- hv end 2004-05-07 ------------- patch 15 -} -\def\tx@MRestore{% a typo in pstricks with msavematrx - tx@Dict /msavematrx known { length 0 gt } { false } ifelse - { msavematrx aload pop setmatrix } if -} -% -\newtoks\pst@customdefs -\pst@customdefs{% - \def\newpath{\addto@pscode{newpath}}% - \def\reversepath{\addto@pscode{ reversepath }}% 20131209 hv - \def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% - \def\rmoveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor rmoveto}}% - \def\closepath{\addto@pscode{closepath}}% - \def\gsave{\begingroup\addto@pscode{gsave}}% - \def\grestore{\endgroup\addto@pscode{grestore}}% - \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}% - \def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}% - \def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}% - \def\msave{\addto@pscode{\tx@MSave}}% - \def\mrestore{\addto@pscode{\tx@MRestore}}% - \def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}% - \def\stroke{\def\pst@par{}\pst@object{stroke}}% - \def\fill{\def\pst@par{}\pst@object{fill}}% - \def\openshadow{\def\pst@par{}\pst@object{openshadow}}% - \def\closedshadow{\def\pst@par{}\pst@object{closedshadow}}% - \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}% - \def\lineto{\pst@onecoor{lineto}}% - \def\rlineto{\pst@onecoor{rlineto}}% - \def\curveto{\pst@threecoor{curveto}}% - \def\rcurveto{\pst@threecoor{rcurveto}}% - \def\code#1{\addto@pscode{#1}}% - \def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}% - \def\rcoor{\pst@getcoors{}{}}% - \def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}% - \def\setcolor#1{% - \@ifundefined{\string\color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}% hv 1.14 2005-12-17 - \def\arrows#1{{\psset[pstricks]{arrows=#1}\pst@addarrowdef}}% - \let\file\pst@rawfile% -} % END \pst@customdefs -% -\def\closedshadow@i{\cuse@par\pst@closedshadow} -\def\openshadow@i{\cuse@par\pst@openshadow} -\def\stroke@i{\cuse@par\pst@stroke}% -\def\fill@i{\cuse@par\psk@fillstyle}% -\def\pst@onecoor#1(#2){% -\pst@@getcoor{#2}% -\addto@pscode{\pst@coor #1}} -\def\pst@threecoor#1(#2)#3(#4)#5(#6){% - \begingroup - \pst@getcoor{#2}\pst@tempa - \pst@getcoor{#4}\pst@tempb -% DG/SR modification begin - Aug. 4, 1999 - Patch 11 -%\pst@getcoor{#6}\pst@tembc - \pst@getcoor{#6}\pst@tempc -% DG/SR modification end - \addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}% - \endgroup} -% -\def\pst@rawfile#1{% - \begingroup - \def\do##1{\catcode`##1=12\relax}" - \dospecials - \catcode`\%=14 - \pst@@rawfile{#1}% - \endgroup} -% -\def\pst@@rawfile#1{% - \immediate\openin1 #1 - \ifeof1 - \@pstrickserr{File `#1' not found}\@ehpa - \else - \immediate\read1 to \pst@tempg - \loop - \ifeof1 \@pstfalse\else\@psttrue\fi - \if@pst - \addto@pscode\pst@tempg - \immediate\read1 to \pst@tempg - \repeat - \fi - \immediate\closein1\relax} -% -\def\tx@NArray{NArray } -\def\tx@Line{Line } -\def\tx@Arcto{Arcto } -\def\tx@CheckClosed{CheckClosed } -\def\tx@Polygon{Polygon } -\define@key[psset]{pstricks}{gangle}[0]{\pst@getangle{#1}\psk@gangle} -\define@boolkey[psset]{pstricks}[Pst@]{trueAngle}[true]{} -\psset[pstricks]{trueAngle=false,gangle=0} -% -\def\tx@Diamond{Diamond } -\def\psdiamond{\def\pst@par{}\pst@object{psdiamond}} -\def\psdiamond@i(#1){\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}} -\def\psdiamond@ii(#1)(#2){% - \begin@ClosedObj - \pst@getcoor{#1}\pst@tempa - \pst@getcoor{#2}\pst@tempb - \addto@pscode{% - \psline@iii - pop - \psk@dimen - \pst@tempb - \psk@gangle - \pst@tempa - \tx@Diamond - }% - \def\pst@linetype{4}% - \end@ClosedObj} -% -\def\tx@Triangle{Triangle } -\def\pstriangle{\def\pst@par{}\pst@object{pstriangle}} -\def\pstriangle@i(#1){\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}} -\def\pstriangle@ii(#1)(#2){% - \begin@ClosedObj - \pst@getcoor{#1}\pst@tempa% the center of the baseline - \pst@getcoor{#2}\pst@tempb% the height of the triangle - \addto@pscode{% - \psline@iii - pop % no showpoints option - \psk@dimen % outer/inner/middle - \pst@tempb - \psk@gangle % rotating angle - \pst@tempa - \tx@Triangle - }% - \def\pst@linetype{2}% - \end@ClosedObj} -% -\def\tx@CCA{CCA } -\def\tx@CCA{CCA } -\def\tx@CC{CC } -\def\tx@IC{IC } -\def\tx@BOC{BOC } -\def\tx@NC{NC } -\def\tx@EOC{EOC } -\def\tx@BAC{BAC } -\def\tx@NAC{NAC } -\def\tx@EAC{EAC } -\def\tx@OpenCurve{OpenCurve } -\def\tx@AltCurve{AltCurve } -\def\tx@ClosedCurve{ClosedCurve } -% -\define@key[psset]{pstricks}{curvature}[1 0.1 0]{% - \edef\pst@tempg{#1 }% - \expandafter\psset@@curvature\pst@tempg * * * \@nil} -\def\psset@@curvature#1 #2 #3 #4\@nil{% - \pst@checknum{#1}\pst@tempg - \pst@checknum{#2}\pst@temph - \pst@checknum{#3}\pst@tempi - \edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}} -% -\psset[pstricks]{curvature=1 .1 0} -% -\def\pscurve{\pst@object{pscurve}} -\def\pscurve@i{% - \pst@getarrows{% - \begin@OpenObj - \pst@getcoors[\pscurve@ii% - }% -} -\def\pscurve@ii{% - \addto@pscode{ - \ifPst@noCurrentPoint\else\pst@cp\fi % current point - \psk@curvature\space /c ED /b ED /a ED - \ifshowpoints true \else false \fi - \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolCurve \else \tx@OpenCurve \fi - \ifPst@variableLW \pst@flattenpath \fi - }% - \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% - \end@OpenObj% -} -\def\psecurve{\pst@object{psecurve}} -\def\psecurve@i{\pst@getarrows{\begin@OpenObj\pst@getcoors[\psecurve@ii}} -\def\psecurve@ii{% - \addto@pscode{ - \psk@curvature\space /c ED /b ED /a ED - \ifshowpoints true \else false \fi - \ifx\pslinestyle\psls@@symbol \psls@symbol AltOpenSymbolCurve \else \tx@AltCurve \fi - }% - \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% - \end@OpenObj} -% -\def\psccurve{\pst@object{psccurve}} -\def\psccurve@i{\begin@ClosedObj\pst@getcoors[\psccurve@ii} -\def\psccurve@ii{% - \addto@pscode{% - \psk@curvature\space /c ED /b ED /a ED - \ifshowpoints true \else false \fi - \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolCurve \else \tx@ClosedCurve \fi - }% - \def\pst@linetype{1}% - \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% - \end@ClosedObj} -% -\def\pscspline{\pst@object{pscspline}}% Christoph Bersch -\def\pscspline@i{% - \pst@getarrows{% - \begin@OpenObj - \pst@getcoors[\pscspline@ii - }% -} -\def\tx@Spline{Spline } -\def\pscspline@ii{% - \addto@pscode{ - \ifPst@noCurrentPoint\else\pst@cp\fi - \tx@setlinejoin - \ifshowpoints true \else false \fi - \ifx\pslinestyle\psls@@symbol - \psls@symbol OpenSymbolSpline - \else - \tx@Spline - \fi - }% - \end@OpenObj -} -% -\define@key[psset]{pstricks}{dotsize}[2pt 2]{% - \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil% - \edef\psk@@dotsize{\pst@number\pst@dimg}% - \let\psk@@@dotsize\pst@tempg% - \edef\psk@dotsize{ /DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }} -\psset[pstricks]{dotsize=2pt 2} -% -\define@key[psset]{pstricks}{dotscale}[1]{% - \pst@getscale{#1}\psk@dotscale - \ifx\psk@dotscale\@empty - \def\psk@xdotscale{1 }% - \def\psk@ydotscale{1 }% - \else - \let\psk@xdotscale\pst@tempg - \let\psk@ydotscale\pst@temph - \fi} -% -\def\pst@Getangle#1#2{% - \pst@getangle{#1}\pst@tempg - \def\pst@temph{0. }% - \ifx\pst@tempg\pst@temph\def#2{}\else\edef#2{\pst@tempg\space rotate }\fi} -% -\define@key[psset]{pstricks}{dotangle}[0]{% - \pst@getangle{#1}\psk@@dotangle - \ifdim\psk@@dotangle\p@=\z@ - \let\psk@dotangle\@empty - \else - \edef\psk@dotangle{\psk@@dotangle rotate }% - \fi} -\psset[pstricks]{dotangle=0} -% -\def\pst@getdotsize{% -\pst@dimg=\psk@@@dotsize\pslinewidth -\advance\pst@dimg\psk@@dotsize\p@ -\pst@dimh=\psk@ydotscale\pst@dimg -\pst@dimg=\psk@xdotscale\pst@dimg -\divide\pst@dimh 2 -\divide\pst@dimg 2\relax} -% -\psset[pstricks]{dotscale=1} -% -\def\psdot{\pst@object{psdot}} -\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}} -\def\psdot@ii(#1){% - \begin@SpecialObj% -% hv modification 1.13 2005-11-28 - \solid@star% -% hv modification end - \pst@@getcoor{#1}% - \addto@pscode{ - \psk@dotsize - \@nameuse{psds@\psk@dotstyle} - \tx@setStrokeTransparency - \pst@coor Dot}% - \end@SpecialObj} -% -\def\psdots{\pst@object{psdots}} -\def\psdots@i{% - \begin@SpecialObj% - \pst@getcoors[\psdots@ii} -\def\psdots@ii{% - \addto@pscode{ false \tx@NArray \psdots@iii }% - \end@SpecialObj} -\def\psdots@iii{% - \psk@dotsize - \@nameuse{psds@\psk@dotstyle} - \tx@setStrokeTransparency - newpath - n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat } -% -% DG: dead code (to suppress until \psset[pstricks]{dotstyle) ? - Aug. 4, 1997 -\def\tx@SQ{SQ } -\def\tx@ST{ST } -\def\tx@SP{SP } -% -\def\pst@gdot#1{ /Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def } -% -\@namedef{psds@*}{\pst@gdot{ 0 0 DS \tx@SD }} -\@namedef{psds@o}{% - /r2 DS CLW sub def - \pst@gdot{ 0 0 DS \tx@SD \pst@usecolor\psfillcolor SLW 0 0 r2 \tx@SD }} -\@namedef{psds@square*}{ /r1 DS .886 mul def \pst@gdot{r1 \tx@SQ }} -\@namedef{psds@square}{% - /r1 DS .886 mul def /r2 r1 CLW sub def - \pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}} -\@namedef{psds@triangle*}{% - /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def - \pst@gdot{x1 y1 \tx@ST}} -\@namedef{psds@triangle}{% - /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def - /y2 y1 CLW add def /x2 y2 1.732 mul neg def - \pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}} -\@namedef{psds@pentagon*}{% - /r1 DS 1.149 mul def - \pst@gdot{r1 \tx@SP}} -\@namedef{psds@pentagon}{% - DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED - \pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}} -\@namedef{psds@+}{% - /DS DS 1.253 mul def - \pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}} -\@namedef{psds@|}{% - \psk@tbarsize CLW mul add 2 div /DS ED - \pst@gdot{0 DS moveto 0 DS neg L stroke}} -% DG: end dead code? -% -\define@key[psset]{pstricks}{dotstyle}[*]{% - \@ifundefined{psds@#1}% - {\@pstrickserr{Dot style `#1' not defined}\@eha}% - {\edef\psk@dotstyle{#1}}} -\psset[pstricks]{dotstyle=*} -% -\def\tx@FontDot{FontDot } -\def\newpsfontdot#1[#2]#3#4{% - \@namedef{psds@#1}{% - /#3 \psk@@dotangle [#2] \tx@FontDot -% DG/SR modification begin - Dec. 12, 1999 - Patch 14 -%/Dot { moveto #4 show } bind def }} - /Dot { moveto gsave \psk@dotscale #4 show grestore } bind def -}} -% DG/SR modification end -\def\newpsfontdotH#1[#2]#3#4#5{% for filled objects - \@namedef{psds@#1}{% - /#3 \psk@@dotangle [#2] \tx@FontDot - /Dot { - moveto -% \iftrue -% DG/SR modification begin - Dec. 23, 1999 - Patch 14 -%gsave \pst@usecolor\psfillcolor #5 show grestore -%\fi -%#4 show - gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore % fill first -% \fi - gsave \psk@dotscale #4 show grestore % show the unfilled one -% DG/SR modification end - } bind def -}} -% -\pstheader{pst-dots.pro} -\newpsfontdot{*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)} -\newpsfontdotH{o}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)} -\newpsfontdotH{Bo}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)} -\newpsfontdotH{triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)} -\newpsfontdotH{Btriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)} -\newpsfontdot{triangle*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} -\newpsfontdotH{square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)} -\newpsfontdotH{Bsquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)} -\newpsfontdot{square*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)} -\newpsfontdotH{pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)} -\newpsfontdotH{Bpentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)} -\newpsfontdot{pentagon*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)} -% DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14 -%\newpsfontdot{diamond*}[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{StandardSymL}{<E0>} -%\newpsfontdot{diamond}[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{StandardSymL}{<A8>} -% D.G. modification begin - Jan. 17, 2000 -\newpsfontdotH{diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)} -\newpsfontdotH{Bdiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)} -\newpsfontdot{diamond*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)} -% DG/SR modification end -\newpsfontdot{oplus}[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{StandardSymL}{<C5>} -\newpsfontdot{otimes}[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{StandardSymL}{<C4>} -\newpsfontdot{x}[1.8 0.0 0.0 1.8 -0.495 -0.4788]{StandardSymL}{<B4>} -\newpsfontdot{+}[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{NimbusRomNo9L-Regu}{<2B>} -\newpsfontdot{asterisk}[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{NimbusRomNo9L-Regu}{<2A>} -\newpsfontdot{B+}[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{NimbusRomNo9L-Bold}{<2B>} -\newpsfontdot{Basterisk}[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{NimbusRomNo9L-Bold}{<2A>} -\newpsfontdot{|}[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{NimbusSanL-Regu}{(|)} -% DG/SR modification begin - Oct. 27, 1997 - Patch 7 -%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{NimbusSanL-Regu}{(|)} -% DG/SR modification end -\newpsfontdot{B|}[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{NimbusSanL-Bold}{(|)}% -% DG/SR modification begin - Oct. 27, 1997 - Patch 7 -%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{NimbusSanL-Bold}{(|)} - -% DG/SR modification end -\iffalse -\newpsfontdot{*}[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{StandardSymL}{<B7>} -\newpsfontdot{o}[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{StandardSymL}{<B0>} -\newpsfontdot{Bo}[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{NimbusRomNo9L-Bold}{<CA>} -\fi -% Etienne Riga -\newpsfontdot{Asterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(k)} -\newpsfontdot{BoldAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(K)} -\newpsfontdotH{SolidAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(J)}{(b)} -% -\newpsfontdotH{Pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)} -\newpsfontdotH{BoldPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)} -\newpsfontdot{SolidPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)} -\newpsfontdotH{Hexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(h)}{(G)} -\newpsfontdotH{BoldHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(H)}{(G)} -\newpsfontdot{SolidHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(G)} -\newpsfontdotH{Octogon}[1 0 0 1 0 0]{PSTricksDotFont}{(f)}{(g)} -\newpsfontdotH{BoldOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(F)}{(g)} -\newpsfontdot{SolidOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(g)} -% -\newpsfontdot{Bullet}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)} -\newpsfontdotH{Circle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)} -\newpsfontdotH{BoldCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)} -%\newpsfontdot{SolidCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} -\newpsfontdotH{Triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)} -\newpsfontdotH{BoldTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)} -\newpsfontdot{SolidTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} -\newpsfontdotH{Square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)} -\newpsfontdotH{BoldSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)} -\newpsfontdot{SolidSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)} -\newpsfontdot{Add}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(a)} -\newpsfontdot{BoldAdd}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(A)} -\newpsfontdot{Mul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(x)} -\newpsfontdot{BoldMul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(X)} -\newpsfontdotH{Oplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(m)}{(b)} -\newpsfontdotH{BoldOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(M)}{(b)} -\newpsfontdotH{SolidOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(e)}{(b)} -\newpsfontdotH{Otimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(n)}{(b)} -\newpsfontdotH{BoldOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(N)}{(b)} -\newpsfontdotH{SolidOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(E)}{(b)} -\newpsfontdot{Bar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(i)} -\newpsfontdot{BoldBar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(I)} -\newpsfontdotH{Diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)} -\newpsfontdotH{BoldDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)} -\newpsfontdot{SolidDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)} -% -\newdimen\pslinearc -\define@key[psset]{pstricks}{linearc}[0pt]{\pssetlength\pslinearc{#1}} -\psset[pstricks]{linearc=0pt} -% -\def\psline{\begingroup\pst@object{psline}} -\def\psline@i{% - \pst@getarrows{% - \begin@OpenObj - \pst@getcoors[\psline@ii - }% -} -\def\psline@ii{% - \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolLine }% - \else - \addto@pscode{ - \ifPst@noCurrentPoint\else\pst@cp\fi % current point? - \psline@iii % arc and lineto type - \tx@Line % .pro function - }% - \fi - \end@OpenObj - \endgroup -} -\def\psline@iii{% - \ifdim\pslinearc>\z@ - /r \pst@number\pslinearc def - /Lineto { \tx@Arcto } def - \else - /Lineto /lineto load def - \fi - \tx@setlinejoin % hv 2007-10-13 - \ifshowpoints true \else false \fi -} -% -\def\psLine{\pst@object{psLine}} -\def\psLine@i{% - \pst@getarrows{% - \begin@OpenObj - \psLine@ii}} -\def\psLine@ii(#1){\@ifnextchar({\psLine@iii(#1)}{\psLine@iii(0,0)(#1)}}% -\def\psLine@iii(#1)(#2){% - \pst@getcoor{#1}\pst@tempA - \pst@getcoor{#2}\pst@tempB - \addto@pscode{ - \ifPst@noCurrentPoint\else\pst@cp\fi % current point? - [ % start for coordinate array - \pst@tempB - \pst@tempA % order vice versa - 4 copy Pyth2 \psk@arrowlength ge - { \psline@iii \tx@Line } - { pop pop pop pop pop } ifelse - }% - \end@OpenObj - \ignorespaces -} -\def\psLineSegments{\leavevmode\pst@killglue\pst@object{psLineSegments}} -\def\psLineSegments@i{\pst@getarrows{\psLineSegments@ii}} -\def\psLineSegments@ii(#1)(#2){% - \begingroup - \use@keep@par - \solid@star - \ifpsdoubleline\pst@setdoublesep\fi - \init@pscode - \let\pst@linetype\pst@arrowtype - \pst@addarrowdef - \pst@getcoor{#1}\pst@tempA - \pst@getcoor{#2}\pst@tempB - \addto@pscode{ - \ifPst@noCurrentPoint\else\pst@cp\fi % current point? - [ % start for coordinate array - \pst@tempB - \pst@tempA % order vice versa - 4 copy Pyth2 \psk@arrowlength ge - { \psline@iii \tx@Line } - { pop pop pop pop pop } ifelse - }% - \end@OpenObj - \ignorespaces - \@ifnextchar(\psLineSegments@ii{}% -}% -\def\pst@isnum#1{\pst@isnum@i\zap@space#1 \@empty\@nil}% -\def\pst@isnum@i#1\@nil{% - \if!\ifnum9<1#1!\else_\fi% - \expandafter\@firstoftwo% - \else% - \expandafter\@secondoftwo% - \fi} -% -\def\psset@@symbol#1#2#3#4\@nil{% - \ifx\relax#4\relax\def\psk@symbol{(#1)}% - \else% - \pst@isnum{#1#2#3}{% - \pst@cnta='#1#2#3\relax% - \ifnum\pst@cnta>'377\relax% - \@pstrickserr{Number too large!}\@ehpb% - \else% - \def\psk@symbol{(\@backslashchar#1#2#3)}% - \fi% -}{\@pstrickserr{Not a number!}\@ehpb}% - \fi} -% -\define@key[psset]{pstricks}{symbol}[a]{\expandafter\psset@@symbol#1!!\@nil} -\psset[pstricks]{symbol=a} -% -\newdimen\pst@symbolStep -\define@key[psset]{pstricks}{symbolStep}[20pt]{\pst@expandafter\pst@@symbolStep#1\@nil} -\def\pst@@symbolStep#1#2\@nil{\if-#1\pssetlength\pst@symbolStep{-#2pt}\else\pssetlength\pst@symbolStep{#1#2}\fi} -\psset[pstricks]{symbolStep=20pt} - -\newdimen\pst@symbolWidth -\newdimen\pst@symbolLinewidth -\define@key[psset]{pstricks}{symbolWidth}[10pt]{\pssetlength\pst@symbolWidth{#1}} -\define@key[psset]{pstricks}{symbolLinewidth}[0.5pt]{\pssetlength\pst@symbolLinewidth{#1}} -\psset[pstricks]{symbolWidth=10pt,symbolLinewidth=0.5pt} - -\define@key[psset]{pstricks}{symbolFont}[Dingbats]{\def\psk@symbolFont{/#1 }} -\psset[pstricks]{symbolFont=Dingbats} -\define@boolkey[psset]{pstricks}[Pst@]{rotateSymbol}[true]{} -\psset[pstricks]{rotateSymbol=false} -\define@key[psset]{pstricks}{startAngle}[0]{\pst@getangle{#1}\psk@startAngle} -\define@key[psset]{pstricks}{tickAngle}[0]{\pst@getangle{#1}\psk@tickAngle} -\psset[pstricks]{startAngle=0,tickAngle=0} -\define@boolkey[psset]{pstricks}[Pst@]{curveticks}[true]{} -\psset[pstricks]{curveticks=false} - -% -\def\psls@symbol{ - /Symbol \psk@symbol def - /SymbolWidth \pst@number\pst@symbolWidth def - /SymbolLinewidth \pst@number\pst@symbolLinewidth def - /SymStep \pst@number\pst@symbolStep def - \psk@symbolFont findfont %0. [1.0 0.0 0.0 1.0 0.0 0.0] - \pst@number\pst@symbolWidth scalefont %dup - setfont - /rotateSymbol \ifPst@rotateSymbol true \else false \fi def - /tickAngle \psk@tickAngle\space def - /startAngle \psk@startAngle\space def - /CorrAngle \ifx\psk@rot\@empty 0 \else \psk@rot \fi def - /curveticks \ifPst@curveticks true \else false \fi def - \pst@number\pslinewidth SLW -} -\def\psls@@symbol{symbol} -% -\def\psPline{\def\pst@par{}\pst@object{psPline}}% perpendicular to another line B-C -\def\psPline@i{% - \pst@getarrows{% - \begin@OpenObj - \pst@getcoors[\psPline@ii}% \pst@coors on stack -} -\def\psPline@ii{% - \addto@pscode{ % [ pC pB pA is on stack - /yA ED /xA ED - /yB ED /xB ED - yB sub exch xB sub div /mBC ED % the slope - /mA 1 mBC neg div def % orthogonal - /xS yA yB sub mBC xB mul add mA xA mul sub mBC mA sub div def - /yS mBC xS xB sub mul yB add def - xS yS xA yA - \ifPst@noCurrentPoint\else\pst@cp\fi % current point - \psline@iii % arc and lineto type - \tx@Line % .pro function - }% - \end@OpenObj% - \ignorespaces% -} -% -\def\qline(#1)(#2){% - \def\pst@par{}% - \begin@SpecialObj - \def\pst@linetype{0}% - \pst@getcoor{#1}\pst@tempa - \pst@@getcoor{#2}% - \addto@pscode{% - \pst@tempa moveto \pst@coor L - \@nameuse{psls@\pslinestyle}% - }% - \end@SpecialObj} -% -\def\pspolygon{\pst@object{pspolygon}} -\def\pspolygon@i{% - \begin@ClosedObj% - \def\pst@cp{}% - \pst@getcoors[\pspolygon@ii% -} -\def\pspolygon@ii{% - \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolPolygon }% - \else \addto@pscode{\psline@iii \tx@Polygon}% - \fi% - \def\pst@linetype{1}% - \end@ClosedObj} -% -\define@key[psset]{pstricks}{framearc}[0]{\pst@checknum{#1}\psk@framearc} -\psset[pstricks]{framearc=0} -% -\define@key[psset]{pstricks}{cornersize}[relative]{\pst@expandafter\psset@@cornersize{#1}\@nil} -\def\psset@@cornersize#1#2\@nil{% - \if #1a\relax - \def\psk@cornersize{\pst@number\pslinearc false }% - \else\def\psk@cornersize{\psk@framearc true }% - \fi} -\psset[pstricks]{cornersize=relative} -% -\def\tx@Rect{Rect } -\def\tx@OvalFrame{OvalFrame } -\def\tx@Frame{Frame } -% -\define@key[psset]{pstricks}{dimen}[outer]{\pst@expandafter\psset@@dimen{#1}\@nil} -\def\psset@@dimen#1#2\@nil{% - \if #1o\relax% outer - \def\psk@dimen{.5 }% - \else - \if #1m\relax% middle - \def\psk@dimen{0 }% - \else - \if #1i\relax% inner - \def\psk@dimen{-.5 }% - \fi\fi\fi} -\psset[pstricks]{dimen=outer} -% -\def\psframe{\pst@object{psframe}} -\def\psframe@i(#1){% - \@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}} -\def\psframe@ii(#1)(#2){% - \begin@ClosedObj - \pst@getcoor{#1}\pst@tempa - \pst@@getcoor{#2}% - \addto@pscode{ \psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame }% - \def\pst@linetype{2}% - \showpointsfalse - \end@ClosedObj -} - -\iffalse -\def\psSquare{\pst@object{psSquare}} -\def\psSquare@i(#1)(#2){% - \begin@ClosedObj - \pst@getcoor{#1}\pst@tempa - \pst@getcoor{#2}\pst@tempb - \addto@pscode{ \psk@cornersize - \pst@tempa /yA ED /xA ED - \pst@tempb /yB ED /xB ED - xA yA moveto xB yB L - xA xB sub yA yB sub atan /Angle ED - xA yA xB yB Pyth2 dup xA add exch yA add - \psk@dimen - \tx@Frame -% grestore - }% - \def\pst@linetype{2}% - \showpointsfalse - \end@ClosedObj -} -\fi -% -\def\psTextFrame{\pst@object{psTextFrame}} -\def\psTextFrame@i(#1)(#2)#3{% - \addbefore@par{ref=c}% to prevent an empty value - \leavevmode% - \pst@killglue - \begingroup - \use@par - \ifx\psk@yref\relax \def\psk@yref{0}\fi% no Baseline possible - \SpecialCoor - \pst@getcoor{#1}\pst@tempA - \pst@getcoor{#2}\pst@tempB - \if@star\psframe*(#1)(#2)\else\psframe(#1)(#2)\fi - \rput(! \pst@tempA \pst@tempB % x1 y1 x2 y2 - exch 4 -1 roll % y1 y2 x2 x1 - dup /x1 ED % y1 y2 x2 x1 - sub /dx ED % y1 y2 - exch dup /y1 ED % y2 y1 - sub /dy ED - x1 dx \psk@xref\space mul add \pst@number\psxunit div - y1 dy \psk@yref\space mul add \pst@number\psyunit div ){#3} - \endgroup - \ignorespaces} -% -\def\tx@BezierNArray{ BezierNArray } -\def\tx@OpenBezier{ OpenBezier } -\def\tx@ClosedBezier{ ClosedBezier } -\def\tx@BezierShowPoints{ BezierShowPoints } -\def\tx@BezierCurve{ BezierCurve } -\def\pst@BezierType{2 } % the default -% -\def\psbezier{\pst@object{psbezier}} -\def\psbezier@i{% - \pst@getarrows{% - \begin@OpenObj - \pst@getcoors[\psbezier@ii% - }% -} -\def\psbezier@ii{% - \addto@pscode{ - \ifPst@noCurrentPoint\else\pst@cp\fi - \ifshowpoints true \else false \fi - \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolBezier - \else - \tx@OpenBezier - \ifshowpoints \tx@BezierShowPoints \fi - \fi - }% - \def\pst@linetype{1}% - \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% - \end@OpenObj} -% -\def\pscbezier{\def\pst@par{}\pst@object{pscbezier}} -\def\pscbezier@i{% - \begin@ClosedObj - \pst@getcoors[\pscbezier@ii} -% -\def\pscbezier@ii{% - \addto@pscode{% - \ifshowpoints true \else false \fi - \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolBezier - \else - \tx@ClosedBezier - \ifshowpoints \tx@BezierShowPoints \fi - \fi}% -% \chardef\pst@linetype=1 - \def\pst@linetype{1}% - \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi% - \end@ClosedObj} -% -\iffalse -\define@key[psset]{pstricks}{epsilon}[0.005]{\pst@checknum{#1}\psk@epsilon} -\psset[pstricks]{epsilon=0.005} % 200 steps for one curve -% -\def\psBezier#1{% % allowed order is 1 ... 9 - \ifnum#1>0 \ifnum#1<10 \def\pst@BezierType{#1 }\fi\fi% - \def\pst@par{}\pst@object{psBezier}} -\def\psBezier@i{% - \pst@getarrows{% - \begin@OpenObj - \pst@getcoors[\psBezier@ii% -}} -\def\psBezier@ii{% - \addto@pscode{% - \psk@epsilon % step for Bezier T=0,0+epsilon,0+i*epsilon,...,1 - \pst@BezierType % type of the Bezier curve 2,3,4,... - \tx@BezierCurve - \ifshowpoints \tx@BezierShowPoints \fi - }% - \end@OpenObj} -\fi -% -\define@key[psset]{pstricks}{pType}[0]{\pst@cntg=#1\relax\edef\psk@pType{\the\pst@cntg}} -\psset[pstricks]{pType=0} -\def\tx@Parab{Parab }% given by 1 point and the min/max -\def\tx@Parabo{Parab1 }% given by 2 points for y-a=(x-b)^2 -% -\def\psparabola{\pst@object{psparabola}}% 2009-05-19 (hv) -\def\psparabola@i{\pst@getarrows\psparabola@ii} -\def\psparabola@ii#1(#2)#3(#4){% #2 P #4 SP - \begin@OpenObj - \pst@getcoor{#2}\pst@tempa - \pst@@getcoor{#4}% - \addto@pscode{\pst@tempa \pst@coor - \ifcase\psk@pType - \tx@Parab \or - \tx@Parabo - \fi}% - \end@OpenObj} -\let\parabola\psparabola% compatibility (hv) -% -% -\define@key[psset]{pstricks}{gridwidth}[0.8pt]{\pst@getlength{#1}\psk@gridwidth} -\psset[pstricks]{gridwidth=.8pt} -\define@key[psset]{pstricks}{griddots}[0]{% - \pst@cntg=#1\relax - \edef\psk@griddots{\the\pst@cntg}} -\psset[pstricks]{griddots=0} -\define@key[psset]{pstricks}{gridcolor}[black]{\pst@getcolor{#1}\psgridcolor} -\psset[pstricks]{gridcolor=black} -\define@key[psset]{pstricks}{subgridwidth}[0.4pt]{\pst@getlength{#1}\psk@subgridwidth} -\psset[pstricks]{subgridwidth=0.4pt} -\define@key[psset]{pstricks}{subgridcolor}[gray]{\pst@getcolor{#1}\pssubgridcolor} -\psset[pstricks]{subgridcolor=gray} -\define@key[psset]{pstricks}{subgriddots}[0]{% - \pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}} -\psset[pstricks]{subgriddots=0} -\define@key[psset]{pstricks}{subgriddiv}[5]{% - \pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}} -\psset[pstricks]{subgriddiv=5} -% -\define@key[psset]{pstricks}{gridfont}[NimbusSanL-Regu]{\def\psk@gridfont{/#1 }}% hv 2007-11-13 -\ifpst@psfonts - \psset[pstricks]{gridfont=Helvetica}% -\else - \psset[pstricks]{gridfont=NimbusSanL-Regu}% -\fi -% -\define@key[psset]{pstricks}{gridlabels}[10pt]{\pst@getlength{#1}\psk@gridlabels} -\psset[pstricks]{gridlabels=10pt} -\define@key[psset]{pstricks}{gridlabelcolor}[black]{\pst@getcolor{#1}\psgridlabelcolor} -\psset[pstricks]{gridlabelcolor=black} -\define@key[psset]{pstricks}{xgridoffset}[0]{\pst@getlength{#1}\psk@xgridoffset} -\define@key[psset]{pstricks}{ygridoffset}[0]{\pst@getlength{#1}\psk@ygridoffset} -\psset[pstricks]{xgridoffset=0,ygridoffset=0} - -\def\tx@Grid{Grid } - -\def\psgrid{\pst@object{psgrid}} -\def\psgrid@i{\@ifnextchar({\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}} -\def\psgrid@ii(#1){\@ifnextchar({\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}} -\def\psgrid@iii(#1)(#2){\@ifnextchar({\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}} -\def\psgrid@iv(#1)(#2)(#3){% - \begin@SpecialObj% - \pst@getcoor{#1}\pst@tempA% hv 1.11 - \pst@getcoor{#2}\pst@tempB% hv 1.11 - \pst@@getcoor{#3}% - \ifnum\psk@subgriddiv>1\relax - \addto@pscode{ - /xGridOffset \psk@xgridoffset\space def - /yGridOffset \psk@ygridoffset\space def - gsave - \tx@setStrokeTransparency - \psk@subgridwidth SLW - \pst@usecolor\pssubgridcolor - \pst@tempB \pst@coor \pst@tempA % hv 1.11 -% \pst@number\psxunit \pst@number\psyunit % hv 1.11 - \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 - \psk@subgriddiv\space \psk@subgriddots\space - {} 0 - \psk@gridfont findfont 0 scalefont setfont % hv 1.16 - \tx@Grid - grestore - }% - \fi% - \addto@pscode{ - gsave - /xGridOffset \psk@xgridoffset def - /yGridOffset \psk@ygridoffset def - \tx@setStrokeTransparency - \psk@gridwidth SLW - \pst@usecolor\psgridcolor - \pst@tempB \pst@coor \pst@tempA % hv 1.11 - \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 -% \pst@number\psxunit \pst@number\psyunit % hv 1.11 - 1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor } - \psk@gridlabels - \psk@gridfont findfont \psk@gridlabels scalefont setfont % hv 1.16 - \tx@Grid - grestore - }% - \end@SpecialObj} -% -\newif\ifpsmathbox -\psmathboxtrue -\def\pst@mathflag{\z@} -\newtoks\everypsbox -\let\pst@thisbox\relax -% -\long\def\pst@makenotverbbox#1#2{% - \edef\pst@mathflag{% - \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else\z@\fi\else\z@\fi}% - \setbox\pst@hbox=\hbox{% - \ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi% - {\pst@thisbox\the\everypsbox#2}% - \ifnum\pst@mathflag>\z@$\fi% $ - }% - #1} -% -\def\pst@makeverbbox#1{% - \def\pst@afterbox{#1}% - \edef\pst@mathflag{\ifpsmathbox\ifmmode\ifinner1\else2\fi\else\z@\fi\else\z@\fi}% - \afterassignment\pst@beginbox% - \setbox\pst@hbox\hbox% -} -\def\pst@beginbox{% - \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi% - \bgroup\aftergroup\pst@endbox% - \pst@thisbox% - \the\everypsbox% -} -\def\pst@endbox{% - \ifnum\pst@mathflag>\z@\relax$\fi% $ - \egroup% - \pst@afterbox% -} -\def\pst@makebox{\pst@@makebox} -\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}} -\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}} -\psverbboxfalse -\def\pst@longbox{% - \def\pst@makebox{% - \gdef\pst@makebox{\pst@@makebox}% - \pst@makelongbox% - }% -} -\def\pst@makelongbox#1{% - \def\pst@afterbox{#1}% - \edef\pst@mathflag{% - \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi% - }% - \setbox\pst@hbox\hbox\bgroup - \aftergroup\pst@afterbox - \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi - \begingroup - \pst@thisbox - \the\everypsbox% -} -\def\pst@endlongbox{% - \endgroup - \ifnum\pst@mathflag>\z@$\fi %$ - \egroup% -} -\def\pslongbox#1#2{% - \@namedef{#1}{\pst@longbox#2}% - \@namedef{end#1}{\pst@endlongbox}} -% -\newdimen\psframesep -\define@key[psset]{pstricks}{framesep}[3pt]{\pssetlength\psframesep{#1}} -\psset[pstricks]{framesep=3pt} -% -\define@boolkey[psset]{pstricks}[ps]{boxsep}[true]{} -\psset[pstricks]{boxsep} -% -\def\pst@useboxpar{% - \use@par - \if@star - \let\pslinecolor\psfillcolor - \solid@star - \let\solid@star\relax - \fi - \ifpsdoubleline \pst@setdoublesep \fi} -% -\def\psframebox{\def\pst@par{}\pst@object{psframebox}} -\def\psframebox@i{\pst@makebox\psframebox@ii} -\def\psframebox@ii{% - \begingroup - \pst@useboxpar - \pst@dima=\pslinewidth - \advance\pst@dima by \psframesep - \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima - \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima - \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima - \setbox\pst@hbox=\hbox{% - \ifpsboxsep\kern\pst@dima\fi - \begin@ClosedObj - \addto@pscode{% - \psk@cornersize % arcradius boolean - \pst@number\pst@dima neg - \pst@number\pst@dimb neg - \pst@number\pst@dimc - \pst@number\pst@dimd - .5 - \tx@Frame% - }% - \def\pst@linetype{2}% - \showpointsfalse - \end@ClosedObj - \box\pst@hbox - \ifpsboxsep\kern\pst@dima\fi% - }% - \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi - \leavevmode\box\pst@hbox - \endgroup} -% -\def\psdblframebox{\def\pst@par{}\pst@object{psdblframebox}} -\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i} -% -\define@key[psset]{pstricks}{clipcommand}[clip]{\def\pst@clipcommand{#1 }} -\psset[pstricks]{clipcommand=clip}% alternative is eoclip -% -\def\psclip{\@ifnextchar[\psclip@i{\psclip@i[]}}% -\def\psclip@i[#1]#2{% - \leavevmode% - \begingroup% - \ifx\relax#1\relax\else\psset{#1}\fi% - \begin@psclip% - \begingroup% - \def\use@pscode{% - \pstVerb{ - \pst@dict - /mtrxc CM def - CP CP T - \tx@STV - \psk@origin - \psk@swapaxes - newpath - \pst@code - \pst@clipcommand - newpath - mtrxc setmatrix - moveto - 0 setgray - end - }% - \gdef\pst@code{}}% - \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% - \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% - \hbox to\z@{#2}% - \endgroup% - \def\endpsclip{% - \end@psclip% - \endgroup}% - \ignorespaces} -% -\def\endpsclip{\pst@misplaced\endpsclip} -\let\begin@psclip\relax -\def\end@psclip{\pstVerb{currentpoint initclip moveto}} -% -\def\AltClipMode{% - \def\end@psclip{\pstVerb{\pst@grestore}}% - \def\begin@psclip{\pstVerb{gsave}}} - \def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}} -% DG modification begin - Apr. 3, 1997 -% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus) -%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} -\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}} -% DG modification end -\def\clipbox@@#1{% - \pssetlength\pst@dimg{#1}% - \leavevmode\hbox{% - \begin@psclip% - \pst@Verb{ - CM \tx@STV CP T newpath - /a \pst@number\pst@dimg def - /w \pst@number{\wd\pst@hbox}a add def - /d \pst@number{\dp\pst@hbox}a add neg def - /h \pst@number{\ht\pst@hbox}a add def - a neg d moveto - a neg h L - w h L - w d L - closepath - \pst@clipcommand - newpath - 0 0 moveto - setmatrix}% - \unhbox\pst@hbox% - \end@psclip}} -% -\def\psshadowbox{\def\pst@par{}\pst@object{psshadowbox}} -\def\psshadowbox@i{\pst@makebox\psshadowbox@ii} -\def\psshadowbox@ii{% -\begingroup -\pst@useboxpar -\psshadowtrue -\psboxseptrue -\def\psk@shadowangle{-45 }% -\setbox\pst@hbox=\hbox{\psframebox@ii}% -\pst@dimh=\psk@shadowsize\p@ -\pst@dimh=.7071\pst@dimh -\pst@dimg=\dp\pst@hbox -\advance\pst@dimg\pst@dimh -\dp\pst@hbox=\pst@dimg -\pst@dimg=\wd\pst@hbox -\advance\pst@dimg\pst@dimh -\wd\pst@hbox=\pst@dimg -\leavevmode -\box\pst@hbox -\endgroup} -% -\def\pscirclebox{\pst@object{pscirclebox}} -\def\pscirclebox@i{\pst@makebox\pscirclebox@ii} -\def\pscirclebox@ii{% - \begingroup - \pst@useboxpar - \setbox\pst@hbox=\hbox{% - \pst@nodehook - \pscirclebox@iii - \box\pst@hbox}% - \ifpsboxsep\pscirclebox@sep\fi - \leavevmode - \box\pst@hbox - \endgroup - \ignorespaces -} -\def\pscirclebox@iii{% -\if@star - \pslinewidth\z@ - \pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor - newpath \pscirclebox@iv \tx@SD end}% -\else - \begin@ClosedObj - \def\pst@linetype{4}\showpointsfalse - \addto@pscode{ \pscirclebox@iv\space CLW 2 div add 0 360 arc closepath}% - \end@ClosedObj -\fi -} -% -\def\pscirclebox@iv{ - \pst@number{\wd\pst@hbox} 2 div - \pst@number{\ht\pst@hbox} \pst@number{\dp\pst@hbox} add 2 div - 2 copy \pst@number{\dp\pst@hbox} sub 4 2 roll - \tx@Pyth \pst@number\psframesep add } -% -\def\pscirclebox@sep{% - \pst@dimn=\ht\pst@hbox% % the height of the box - \advance\pst@dimn by \dp\pst@hbox% % the depth of the box added to \pst@dimn - \divide\pst@dimn by 2% % \pst@dimn/2 - \pst@dimm=0.5\wd\pst@hbox% % the half of the width - \pst@Pyth\pst@dimm\pst@dimn\pst@dimo% % the diameter - \advance\pst@dimo by \pslinewidth% - \advance\pst@dimo by \psframesep% - \advance\pst@dimn by -\pst@dimo% - \setbox\pst@hbox=\hbox to 2\pst@dimo{\hss\vbox{\kern-\pst@dimn\box\pst@hbox}\hss}% - \advance\pst@dimn by -\dp\pst@hbox% - \dp\pst@hbox=-\pst@dimn} -% -\let\pst@nodehook\relax -% -\def\psCirclebox{\def\pst@par{}\pst@object{psCirclebox}} -\def\psCirclebox@i{\pst@makebox\psCirclebox@ii} -\def\psCirclebox@ii{% - \begingroup - \pst@useboxpar - \pst@dima=\ht\pst@hbox - \advance\pst@dima by -\dp\pst@hbox - \divide\pst@dima\tw@ - \pssetlength\pst@dimb\psk@radius - \setbox\pst@hbox=\hbox{% - \pst@nodehook - \pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}% - \box\pst@hbox}% - \ifpsboxsep \psCirclebox@sep \fi - \leavevmode - \box\pst@hbox - \endgroup -} -% -\def\psCirclebox@sep{% - \pst@dimc=\pst@dimb - \advance\pst@dimb-\pst@dima - \advance\pst@dima\pst@dimc - \setbox\pst@hbox=\hbox to\tw@\pst@dimc{% - \hss\vrule width \z@ depth \pst@dimb height \pst@dima - \box\pst@hbox\hss}} -% -\def\psovalbox{\def\pst@par{}\pst@object{psovalbox}} -\def\psovalbox@i{\pst@makebox{\psovalbox@ii}} -\def\psovalbox@ii{% - \begingroup - \pst@useboxpar - \psovalbox@iii - \ifpsboxsep\psovalbox@sep\fi - \leavevmode - \box\pst@hbox - \endgroup} -% -\def\psovalbox@iii{% - \psovalbox@iv - \setbox\pst@hbox=\hbox{% - \begin@ClosedObj - \addto@pscode{% - 0 360 - \pst@number\pst@dimc CLW 2 div sub - \pst@number\pst@dimd CLW 2 div sub - \pst@number\pst@dima - \pst@number\pst@dimb - \tx@Ellipse - closepath }% - \def\pst@linetype{2}% - \end@ClosedObj - \unhbox\pst@hbox}} -% -\def\psovalbox@iv{% - \pst@dimc=\pslinewidth\advance\pst@dimc\psframesep - \pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox - \pst@dima=.5\wd\pst@hbox - \pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox - \pst@dimd=.707\pst@dimd - \advance\pst@dimd\pst@dimc - \advance\pst@dimc.707\wd\pst@hbox} -% -\def\psovalbox@sep{% - \setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}% - \pst@dimg=\pst@dimd - \advance\pst@dimg-\pst@dimb - \dp\pst@hbox=\pst@dimg - \advance\pst@dimd\pst@dimb - \ht\pst@hbox=\pst@dimd} -% -\def\psdiabox{\def\pst@par{}\pst@object{psdiabox}} -\def\psdiabox@i{\pst@makebox{\psdiabox@ii}} -\def\psdiabox@ii{% -\begingroup -\pst@useboxpar -\psdiabox@iii -\ifpsboxsep\psdiabox@sep\fi -\leavevmode -\box\pst@hbox -\endgroup} -\def\psdiabox@iv{% -\pst@dimg=.707\pslinewidth -\advance\pst@dimg.707\psframesep -\pst@dima=\wd\pst@hbox -\divide\pst@dima 2 -\pst@dimc=\pst@dima -\advance\pst@dimc\pst@dimg -\pst@dimd=\ht\pst@hbox -\advance\pst@dimd\dp\pst@hbox -\divide\pst@dimd 2 -\pst@dimb=\pst@dimd -\advance\pst@dimb-\dp\pst@hbox -\advance\pst@dimd\pst@dimg} -\def\psdiabox@iii{% -\psdiabox@iv -\setbox\pst@hbox=\hbox{% -\begin@ClosedObj -\addto@pscode{% -\psline@iii -pop -.5 -\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul -0 -\pst@number\pst@dima \pst@number\pst@dimb -\tx@Diamond}% -\def\pst@linetype{4}% -\end@ClosedObj -\box\pst@hbox}} -\def\psdiabox@sep{% -\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}% -\multiply\pst@dimd 2 -\advance\pst@dimd\pst@dimb -\ht\pst@hbox\pst@dimd -\advance\pst@dimd-2\pst@dimb -\dp\pst@hbox\pst@dimd} -% -\define@key[psset]{pstricks}{trimode}[U]{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil} -\def\psset@@trimode#1#2#3\@nil{% - \let\pst@tempg#1\relax - \ifx\pst@tempg* - \let\psk@@trimode\@empty - \let\pst@tempg#2\relax - \else - \let\psk@@trimode\relax - \fi - \edef\psk@trimode{% - \ifx R\pst@tempg 1 % Right - \else - \ifx D\pst@tempg 2 % Down - \else - \ifx L\pst@tempg 3 % Left - \else - \ifx l\pst@tempg 4 % |_ - \else - \ifx r\pst@tempg 5 % _| - \else 0 \fi % Up - \fi - \fi - \fi - \fi}% -} -\psset[pstricks]{trimode=U} -% -\def\pstribox{\pst@object{pstribox}} -\def\pstribox@i{\pst@makebox{\pstribox@ii}} -\def\pstribox@ii{% - \begingroup - \pst@useboxpar - \pstribox@iii - \ifpsboxsep\pstribox@sep\fi - \leavevmode - \box\pst@hbox - \endgroup} -% -\def\pstribox@iii{% - \pstribox@iv - \setbox\pst@hbox=\hbox{% - \begin@ClosedObj - \addto@pscode{ - \psline@iii - pop - 0.5 - \pst@number\pst@dimc % Width - \pst@number\pst@dimd % Height - \ifcase\psk@trimode - \or %% 0 - exch \or %% 1 - \or %% 2 - exch \or %% 3 - \or %% 4 - \or %% 5 - \fi - \psk@trimode -90 mul - \pst@number\pst@dima % x coor for text - \pst@number\pst@dimb % y coor for text - \tx@Triangle}% - \def\pst@linetype{2}% - \end@ClosedObj - \box\pst@hbox}% -} -% -\def\pstribox@iv{% - \pst@dimh=\pslinewidth - \advance\pst@dimh\psframesep - \pst@dimg=\ht\pst@hbox - \advance\pst@dimg-\dp\pst@hbox % totalheight - \divide\pst@dimg 2 % 0.5 totalheight - \edef\pst@tempa{\number\pst@dimg sp}% % For use by nodes. - \ifodd\psk@trimode % - \pst@dimb\pst@dimg - \else - \pst@dima=\wd\pst@hbox - \divide\pst@dima 2 - \fi - \ifcase\psk@trimode - \pst@dimb=-\dp\pst@hbox - \advance\pst@dimb-\pst@dimh - \or\pst@dima=-\pst@dimh - \or\pst@dimb=\ht\pst@hbox - \advance\pst@dimb\pst@dimh - \or\pst@dima=\wd\pst@hbox - \advance\pst@dima\pst@dimh - \fi - \pst@dimd=\dp\pst@hbox - \advance\pst@dimd\ht\pst@hbox - \ifx\psk@@trimode\relax% no star for trimode= - \pst@dimc=\wd\pst@hbox - \advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh - \multiply\pst@dimc 2 - \advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh - \multiply\pst@dimd 2 - \else% trimode=R*,L*,U*,D* - \ifodd\psk@trimode - \advance\pst@dimd 1.1547\wd\pst@hbox - \advance\pst@dimd 3.4641\pst@dimh - \pst@dimc=.866\pst@dimd - \else - \advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2) - \advance\pst@dimd 3\pst@dimh - \pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3)) - \fi - \fi} -% -\def\pstribox@sep{% -\ifodd\psk@trimode -\advance\pst@dimb.5\pst@dimd -\ht\pst@hbox=\pst@dimb -\advance\pst@dimd-\pst@dimb -\dp\pst@hbox=\pst@dimd -\else -\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}% -\global\pst@dimg=.5\pst@dimc -\fi -\ifcase\psk@trimode -\dp\pst@hbox-\pst@dimb -\advance\pst@dimd\pst@dimb -\ht\pst@hbox\pst@dimd -\or -\pst@dimg=.5\wd\pst@hbox -\global\advance\pst@dimg-\pst@dima -\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}% -\or -\ht\pst@hbox\pst@dimb -\advance\pst@dimd-\pst@dimb -\dp\pst@hbox\pst@dimd -\or -\pst@dimg=\pst@dimc -\advance\pst@dimg-\pst@dima -\global\advance\pst@dimg.5\wd\pst@hbox -\setbox\pst@hbox\hbox to \pst@dimc{% -\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}% -\fi} -% -\define@key[psset]{pstricks}{arcsepA}[0]{\pst@getlength{#1}\psk@arcsepA} -\define@key[psset]{pstricks}{arcsepB}[0]{\pst@getlength{#1}\psk@arcsepB} -\define@key[psset]{pstricks}{arcsep}[0]{% - \pst@getlength{#1}\psk@arcsepA\let\psk@arcsepB\psk@arcsepA} -\psset[pstricks]{arcsep=0} -\def\tx@ArcArrow{ArcArrow } -% -\def\psarc{\pst@object{psarc}} -\def\psarc@i{\@ifnextchar({\psarc@iii}{\psarc@ii}} -\def\psarc@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarc@iii{\psarc@iii(0,0)}} -\def\psarc@iii(#1)#2#3#4{% - \pst@getangle{#3}\pst@tempa - \pst@getangle{#4}\pst@tempb - \ifx\pst@tempa\pst@tempb - \else - \begin@OpenObj - \pst@@getcoor{#1}% - \pssetlength\pst@dima{#2}% - \addto@pscode{\psarc@iv \psarc@v - \ifPst@variableLW \pst@flattenpath \fi - }% - \gdef\psarc@type{0}% - \showpointsfalse - \end@OpenObj - \fi -} -% -\def\psarcOA{\pst@object{psarcOA}}% \psarcOA[..](O)(A){angle1}{angle2} -\def\psarcOA@i{\@ifnextchar({\psarcOA@iii}{\psarcOA@ii}} -\def\psarcOA@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarcOA@iii{\psarcOA@iii(0,0)}} -\def\psarcOA@iii(#1)(#2)#3#4{% - \pst@getangle{#3}\pst@tempa - \pst@getangle{#4}\pst@tempb - \ifx\pst@tempa\pst@tempb - \else - \begin@OpenObj - \pst@getcoor{#1}\pst@tempA - \pst@getcoor{#2}\pst@tempB - \addto@pscode{ - \pst@tempA 2 copy /y ED /x ED \pst@tempB Pyth2 /r ED - x y translate - /c 57.2957 r \tx@Div def - /angleA - \pst@tempa - \psk@arcsepA c mul 2 div - \ifcase\psarc@type add \or sub \fi def - /angleB - \pst@tempb - \psk@arcsepB c mul 2 div - \ifcase\psarc@type sub \or add \fi def - \ifshowpoints\psarc@showpoints\fi - \ifx\psk@arrowA\@empty - \ifnum\psk@liftpen=2 - r angleA \tx@PtoC moveto - \fi - \fi - /angleAtoB angleB angleA gt { true }{ false } ifelse def - 0 0 r - angleA - \ifx\psk@arrowA\@empty\else - { ArrowA CP } - r 0 gt \pslbrace - { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace - { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse -% { \ifcase\psarc@type add \or sub \fi } - \tx@ArcArrow -% dup AngleA gt AngleAtoB exor { neg } fi - \fi - angleB - \ifx\psk@arrowB\@empty\else - { ArrowB } - r 0 gt \pslbrace - { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace - { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse -% { \ifcase\psarc@type sub \or add \fi } - \tx@ArcArrow - dup angleA gt angleAtoB xor { pop angleA } if - \fi - \ifcase\psarc@type arc \or arcn \fi - \ifPst@variableLW \pst@flattenpath \fi - x neg y neg translate - }% - \gdef\psarc@type{0}% - \showpointsfalse - \end@OpenObj - \fi -} -\def\psarc@iv{% - \pst@coor /y ED /x ED - /r \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dima \fi def - /c 57.2957 r \tx@Div def - /angleA - \pst@tempa - \psk@arcsepA c mul 2 div - \ifcase\psarc@type add \or sub \fi - def - /angleB - \pst@tempb - \psk@arcsepB c mul 2 div - \ifcase\psarc@type sub \or add \fi - def - \ifshowpoints\psarc@showpoints\fi - \ifx\psk@arrowA\@empty - \ifnum\psk@liftpen=2 - r angleA \tx@PtoC - y add exch x add exch moveto - \fi - \fi} -% hv ---- 1.10 2005-05-05 ----------------------> hv begin -\def\psarc@v{% - /angleAtoB angleB angleA gt { true }{ false } ifelse def - x y r - angleA - \ifx\psk@arrowA\@empty\else - { ArrowA CP } - r 0 gt \pslbrace - { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace - { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse -% { \ifcase\psarc@type add \or sub \fi } - \tx@ArcArrow -% dup AngleA gt AngleAtoB exor { neg } fi - \fi - angleB - \ifx\psk@arrowB\@empty\else - { ArrowB } - r 0 gt \pslbrace - { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace - { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse -% { \ifcase\psarc@type sub \or add \fi } - \tx@ArcArrow - dup angleA gt angleAtoB xor { pop angleA } if - \fi - \ifcase\psarc@type arc \or arcn \fi -} -% hv ----- 1.10 2005-05-05 ------------------------> end -% -\def\psarc@type{0} -\def\psarc@showpoints{% - gsave - newpath - x y moveto - x y r \pst@tempa \pst@tempb - \ifcase\psarc@type arc \or arcn \fi - closepath - CLW 2 div SLW - [ \psk@dash\space ] 0 setdash stroke - grestore } -\def\psarcn{\def\pst@par{}\pst@object{psarcn}} -\def\psarcn@i{\def\psarc@type{1}\psarc@i} -% -\def\psarcAB{\pst@object{psarcAB}}% hv 2008-11-26 -\def\psarcAB@i{% - \addbefore@par{psscale=1}% be sure, that it is defined - \pst@getarrows{% - \begin@OpenObj% - \pst@getcoors{}% - \psarcAB@ii - }% -} -\def\psarcAB@ii{% - \addto@pscode{ - /y ED /x ED /yA ED /xA ED /yB ED /xB ED - /r xB yB x y Pyth2 \psk@psscale\space mul def - /c 57.2957 r \tx@Div def - /angleA - yA y sub xA x sub atan - \psk@arcsepA c mul 2 div - \ifcase\psarc@type add \else sub \fi - def - /angleB - yB y sub xB x sub atan - \psk@arcsepB c mul 2 div - \ifcase\psarc@type sub \else add \fi - def - \ifx\psk@arrowA\@empty - \ifnum\psk@liftpen=2 - r angleA \tx@PtoC - y add exch x add exch moveto - \fi - \fi - \psarc@v}% - \gdef\psarc@type{0}% - \showpointsfalse% - \end@OpenObj% -} -\def\psarcnAB{\def\pst@par{}\pst@object{psarcnAB}} -\def\psarcnAB@i{\def\psarc@type{1}\psarcAB@i} -% -%------------------ tvz/DG/hv (2004-05-10) begin -------------------%% -% from Denis Giroux: http://www.tug.org/pipermail/pstricks/2001/000507.html -% -% I - Definition of \psellipticwedge, a generalization of \pswedge for wedges -% of ellipses (from the code of \pswedge and \psellipse) -% -\def\psellipticwedge{\pst@object{psellipticwedge}} -\def\psellipticwedge@i(#1){% - \@ifnextchar({\psellipticwedge@ii(#1)}{\psellipticwedge@ii(0,0)(#1)}} -\def\psellipticwedge@ii(#1)(#2)#3#4{% - \begin@ClosedObj - \pst@getangle{#3}\pst@tempa - \pst@getangle{#4}\pst@tempb - \pst@getcoor{#1}\pst@tempc - \pst@@getcoor{#2}% - \def\pst@linetype{1}% - \addto@pscode{% - \pst@coor /ry ED /rx ED - \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi - \pst@tempa - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempa } - { rx abs ry abs sub cvi 0 eq { \pst@tempa }{ rx ry - \tx@UserCoor exch \pst@tempa tan mul exch atan - \pst@tempa 180 div 0.5 add floor - 180 mul sub } ifelse } ifelse - \fi - \pst@tempb - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempb } - { rx abs ry abs sub cvi 0 eq { \pst@tempb }{ rx ry - \tx@UserCoor exch \pst@tempb tan mul exch atan - \pst@tempb 180 div 0.5 add floor - 180 mul sub } ifelse } ifelse - \fi - rx ry - \pst@tempc moveto - \ifdim\psk@dimen\p@=\z@\else - \psk@dimen CLW mul dup 3 1 roll - sub 3 1 roll sub exch - \fi - \pst@tempc - \tx@Ellipse - closepath - }% - \showpointsfalse - \end@ClosedObj% -} -% -% Code mainly from "pstricks.tex'' 0.94 beta (TvZ) -% -\def\psellipticarcn{\pst@object{psellipticarcn}} -\def\psellipticarcn@i{\let\if@psarcn\iftrue\psellipticarc@ii} -% -\def\psellipticarc{\pst@object{psellipticarc}} -\def\psellipticarc@i{\let\if@psarcn\iffalse\psellipticarc@ii} - -\define@boolkey[psset]{pstricks}[Pst@]{correctAngle}[true]{} -\psset{correctAngle} - -\let\if@psarcn\iffalse - -\def\psellipticarc@ii{\pst@getarrows\psellipticarc@iii} -\def\psellipticarc@iii(#1){% - \@ifnextchar({\psellipticarc@iv(#1)}{\psellipticarc@iv(0,0)(#1)}} -\def\psellipticarc@iv(#1)(#2)#3#4{% -% \addbefore@par{correctAngle=false} - \pst@getangle{#3}\pst@tempc % start angle - \pst@getangle{#4}\pst@tempd % end angle - \ifx\pst@tempc\pst@tempd - \else % same angles? then do nothing - \begin@OpenObj - \pst@getcoor{#1}\pst@tempa % origin - \pst@getcoor{#2}\pst@tempb % a b - \addto@pscode{ - \psellipticarc@definearg \psellipticarc@draw - \ifPst@variableLW \pst@flattenpath \fi - \ifshowpoints{} - gsave - xOrig yOrig T % set origin to ellipse origin - \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi - rx ry scale % now we draw a circle :-) - 1 \pst@tempc % start angle - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempc } - { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry - \tx@UserCoor exch \pst@tempc tan mul exch atan - \pst@tempc 180 div 0.5 add floor - 180 mul sub } ifelse } ifelse - \fi - PtoC moveto - 0 0 lineto - 1 \pst@tempd % end angle - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempd } - { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan - \pst@tempd 180 div .5 add floor 180 mul sub } ifelse - \fi - PtoC lineto 0 0 lineto - closepath - % \ifcase\psarc@type arc \or arcn \fi - CLW 3 div \pst@number\psunit div SLW - [ 1 1 \tx@UserCoor 2 mul ] 0 setdash - stroke - grestore - \fi - }% - \showpointsfalse - \end@OpenObj - \fi -} -\def\psellipticarc@definearg{% -% \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi - \pst@tempa /yOrig ED /xOrig ED % Origin - \pst@tempb % radii. Now adjust: - \ifdim\psk@dimen\p@=\z@\else - \psk@dimen CLW mul dup 3 1 roll - sub 3 1 roll sub exch - \fi - /ry ED /rx ED % a b - /angleA - /d { \if@psarcn sub \else add \fi } def -% \pst@tempc -% the angle in the parameter equation is not proportional to the real angle! -% phi=atan(b*tan(angle)/a)+floor(angle/180+0.5)*180 - \pst@tempc - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempc } - { rx ry \tx@UserCoor exch \pst@tempc tan mul exch atan - \pst@tempc 180 div .5 add floor 180 mul sub } ifelse - \fi - \psk@arcsepA 2 div - ArcAdjust - def - /angleB - /d { \if@psarcn add \else sub \fi } def -% \pst@tempd - \pst@tempd - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempd } - { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan - \pst@tempd 180 div .5 add floor 180 mul sub } ifelse - \fi - \psk@arcsepB 2 div ArcAdjust def -% \ifshowpoints\psellipticarc@showpoints\fi - \ifx\psk@arrowA\@empty - \ifnum\psk@liftpen=2 - angleA cos rx mul xOrig add - angleA sin ry mul yOrig add - moveto - \fi% - \fi% -} -\def\psellipticarc@draw{% - 0 0 1 - angleA - \ifx\psk@arrowA\@empty\else - { ArrowA CP } - { \if@psarcn sub \else add \fi } - EllipticArcArrow - \fi - angleB - \ifx\psk@arrowB\@empty\else - { ArrowB } - { \if@psarcn add \else sub \fi } - EllipticArcArrow - \fi - /mtrx CM def - xOrig yOrig T - \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi - rx ry scale - \pst@ifcustom\else - 0 0 moveto - exch dup dup % end start start start - cos exch sin moveto % end start - exch % start end - \fi -%% \if@star 0 0 moveto \fi % for filling - \if@psarcn arcn \else arc \fi -%% \if@star 0 0 moveto \fi - mtrx setmatrix% -} -\def\psellipticarc@showpoints{% - gsave - /mtrx CM def - xOrig yOrig T - rx ry scale - 0 0 moveto - 0 0 1 - \pst@tempc % start angle - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempc } - { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry - \tx@UserCoor exch \pst@tempc tan mul exch atan - \pst@tempc 180 div 0.5 add floor - 180 mul sub } ifelse } ifelse - \fi - \pst@tempd % end angle - \ifPst@correctAngle - cvi 90 mod 0 eq { \pst@tempd } - { rx abs ry abs sub cvi 0 eq { \pst@tempd } { rx ry - \tx@UserCoor exch \pst@tempd tan mul exch atan - \pst@tempd 180 div 0.5 add floor - 180 mul sub } ifelse } ifelse - \fi - \ifcase\psarc@type arc \or arcn \fi - closepath - mtrx setmatrix - CLW 2 div SLW - [ \psk@dash\space ] 0 setdash - stroke - grestore % -} -\def\pscircle{\def\pst@par{}\pst@object{pscircle}} -\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}} -\def\pscircle@do(#1)#2{% - \if@star{\use@par\qdisk(#1){#2}}% qdisk does not allow - \else% to use opacity option - \addbefore@par{dimen=middle}% - \begin@ClosedObj - \pst@@getcoor{#1}% - \pssetlength\pst@dimc{#2}% - \def\pst@linetype{4}% - \addto@pscode{ - \pst@coor 2 copy moveto - \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi - \psk@dimen CLW mul round % prevent rounding errors - sub - dup 0 rmoveto - 0 360 arc - \ifPst@variableLW \pst@flattenpath \fi - closepath - }% - \showpointsfalse - \end@ClosedObj - \fi - \ignorespaces} -% -\def\pscircleOA{\def\pst@par{}\pst@object{pscircleOA}}% hv 2008-04-14 -\def\pscircleOA@i(#1)(#2){% - \addbefore@par{dimen=middle}% - \begin@ClosedObj - \pst@getcoor{#1}\pst@tempA - \pst@@getcoor{#2}% - \def\pst@linetype{4}% - \addto@pscode{ - \pst@tempA % x0 y0 - 2 copy % xO yO xO yO - \pst@coor % xO yO xO yO xA yA - Pyth2 % xO yO radius - \psk@dimen CLW mul sub - \if@star \tx@SD \else - 0 360 arc - closepath - \fi }% - \showpointsfalse - \end@ClosedObj - \ignorespaces} -% -\def\qdisk(#1)#2{% - \def\pst@par{}% - \begin@SpecialObj - \pst@@getcoor{#1}% - \pssetlength\pst@dimg{#2}% - \addto@pscode{ - \pst@coor - \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimg \fi -% \pst@number\pst@dimg - \tx@SD }% - \end@SpecialObj} -% -\define@key[psset]{pstricks}{radius}[0.25cm]{\pst@@getlength{#1}\psk@radius} -\psset[pstricks]{radius=.25cm} -% -\def\psCircle{\pst@object{psCircle}}% same as \pscircle, but uses \psk@radius -\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}} -\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}} -% -\def\psRing{\def\pst@par{}\pst@object{psRing}}%% hv 20130405 -\def\psRing@i{\@ifnextchar({\psRing@ii}{\psRing@ii(0,0)}} -\def\psRing@ii(#1){% - \pst@@getcoor{#1}% - \@ifnextchar[{\psRing@iii}{\psRing@iii[0,360]}} -\def\psRing@iii[#1,#2]#3#4{% origin, inner radius, outer radius - \begin@ClosedObj - \pssetlength\pst@dimc{#3}% - \edef\pst@tempA{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi}% - \pssetlength\pst@dimd{#4}% - \edef\pst@tempB{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimd \fi}% - \pst@getangle{#1}\pst@tempa - \pst@getangle{#2}\pst@tempb - \def\pst@linetype{4}% - \addto@pscode{ - \pst@coor translate -% \pst@number\pst@dimc \psk@dimen CLW mul sub /InnerRadius ED -% \pst@number\pst@dimd \psk@dimen CLW mul sub /OuterRadius ED - \pst@tempA\space \psk@dimen CLW mul sub /InnerRadius ED - \pst@tempB\space \psk@dimen CLW mul sub /OuterRadius ED - InnerRadius 0 moveto newpath - 0 0 InnerRadius \pst@tempa\space \pst@tempb\space arc - OuterRadius \pst@tempb\space PtoC - \pst@tempb\space \pst@tempa\space sub abs 360 eq { moveto }{ lineto } ifelse % whole circle or not?? - 0 0 OuterRadius \pst@tempb\space \pst@tempa\space arcn - closepath - }% - \showpointsfalse - \end@ClosedObj - \ignorespaces} -% -\def\pswedge{\def\pst@par{}\pst@object{pswedge}} -\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}} -\def\pswedge@ii(#1)#2#3#4{% - \begin@ClosedObj - \pssetlength\pst@dimc{#2}% - \pst@getangle{#3}\pst@tempa - \pst@getangle{#4}\pst@tempb - \pst@@getcoor{#1}% - \def\pst@linetype{1}% - \addto@pscode{ - \ifx\psk@rot\@empty 0 \else \psk@rot \fi rotate - \pst@coor - 2 copy - moveto - \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi - \psk@dimen CLW mul sub % Adjusted radius - \pst@tempa \pst@tempb - arc - closepath}% - \showpointsfalse - \end@ClosedObj -} -\def\tx@ellipse#1{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi #1 Ellipse } -\def\tx@Ellipse{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi Ellipse } -% -\def\psellipse{\def\pst@par{}\pst@object{psellipse}} -\def\psellipse@i(#1){\@ifnextchar({\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}} -\def\psellipse@ii(#1)(#2){% - \begin@ClosedObj - \pst@getcoor{#1}\pst@tempa - \pst@@getcoor{#2}% - \addto@pscode{ - 0 360 - \pst@coor - \ifdim\psk@dimen\p@=\z@\else - \psk@dimen CLW mul - dup 4 -1 roll sub neg 3 1 roll sub - \fi - \pst@tempa - \tx@ellipse{true} - \ifPst@variableLW \pst@flattenpath \fi - closepath - }% - \def\pst@linetype{2}% - \end@ClosedObj% -} -\def\psellipseAB{\def\pst@par{}\pst@object{psellipseAB}} -\def\psellipseAB@i(#1)(#2)#3{% - \begin@ClosedObj - \pst@getcoor{#1}\pst@tempa - \pst@getcoor{#2}\pst@tempb - \addto@pscode{ - 0 360 - #3 \pst@number\psxunit mul - \pst@tempa /yA ED /xA ED - \pst@tempb /yB ED /xB ED - xA xB sub dup mul - yA yB sub dup mul add sqrt 2 div - \ifdim\psk@dimen\p@=\z@\else - \psk@dimen CLW mul - dup 4 -1 roll sub neg 3 1 roll sub - \fi - xA xB add 2 div yA yB add 2 div - translate 0 0 - xB xA sub yA yB sub atan - Ellipse % on stack is rotate coordinates - \ifPst@variableLW \pst@flattenpath \fi - closepath - }% - \def\pst@linetype{2}% - \end@ClosedObj -} -\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}} -\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii} -\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}} -\long\def\multips@iii(#1)(#2)#3#4{% - \begingroup -%----------------- hv 1.10 ------------------ - \pst@killglue -%----------------- hv 1.10 ------------------ - \use@par - \pst@getcoor{#1}\pst@tempa - \pst@@getcoor{#2}% - \pst@cnta=#3\relax - \init@pscode - \addto@pscode{% - \pst@tempa T \the\pst@cnta\space \pslbrace - gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}% - \hbox to\z@{% - \def\init@pscode{% - \addto@pscode{% - gsave - \pst@number\pslinewidth SLW - \pst@usecolor\pslinecolor}}% - \def\use@pscode{\addto@pscode{grestore}}% - \def\psclip##1{\pst@misplaced\psclip}% - \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% - #4% - }% - \addto@pscode{grestore \pst@coor T \psrbrace repeat}% - \leavevmode - \use@pscode - \endgroup - \ignorespaces} -\def\psscalebox#1{\pst@makebox{\ps@scalebox{#1}}} -\def\ps@scalebox#1{% - \begingroup% - \pst@getscale{#1}\pst@tempa% - \let\pst@tempc\pst@tempg% - \let\pst@tempd\pst@temph% - \ps@@scalebox% - \endgroup} -\def\ps@@scalebox{% - \leavevmode% - \hbox{% - \ifdim\pst@tempd\p@<\z@% - \pst@dimg=\pst@tempd\ht\pst@hbox% - \pst@dimh=\pst@tempd\dp\pst@hbox% - \dp\pst@hbox=-\pst@dimg% - \ht\pst@hbox=-\pst@dimh% - \else% - \ht\pst@hbox=\pst@tempd\ht\pst@hbox% - \dp\pst@hbox=\pst@tempd\dp\pst@hbox% - \fi% - \pst@dima=\pst@tempc\wd\pst@hbox% - \ifdim\pst@dima<\z@\kern-\pst@dima\fi% - \pst@Verb{CP CP translate \pst@tempa \tx@NET}% - \hbox to \z@{\box\pst@hbox\hss}% - \pst@Verb{ - CP CP translate - 1 \pst@tempc div 1 \pst@tempd div scale - \tx@NET}% - \ifdim\pst@dima>\z@\kern\pst@dima\fi% - }% -} -\pslongbox{Scalebox}{\psscalebox} -% -\def\psscaleboxto(#1,#2){\pst@makebox{\ps@scaleboxto(#1,#2)}} -\def\ps@scaleboxto(#1,#2){% - \begingroup - \pssetlength\pst@dima{#1}% - \pssetlength\pst@dimb{#2}% - \ifdim\pst@dima=\z@\else - \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc - \edef\pst@tempc{\pst@tempc\space}% - \fi - \ifdim\pst@dimb=\z@ - \ifdim\pst@dima=\z@ - \@pstrickserr{% - \string\psscaleboxto\space dimensions cannot both be zero}\@ehpa - \def\pst@tempa{}% - \def\pst@tempc{1 }% - \def\pst@tempd{1 }% - \else - \let\pst@tempd\pst@tempc - \fi - \else - \pst@dimc=\ht\pst@hbox - \advance\pst@dimc\dp\pst@hbox - \pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd - \edef\pst@tempd{\pst@tempd\space}% - \ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi - \fi - \edef\pst@tempa{\pst@tempc \pst@tempd scale }% - \ps@@scalebox - \endgroup} -\pslongbox{Scaleboxto}{\psscaleboxto} -% -\def\tx@Rot{Rot } -\def\psrotateleft{\pst@makebox{\ps@rotateleft\pst@hbox}} -\def\ps@rotateleft#1{% -\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% -\pst@Verb{90 \tx@Rot} -\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% -\pst@Verb{-90 \tx@Rot}}}} -\def\psrotateright{\pst@makebox{\ps@rotateright\pst@hbox}} -\def\ps@rotateright#1{% -% ----------- hv begin 2004-05-07 ----------- patch 15 -% \hbox{% - \leavevmode\hbox{% -% ----------- hv end 2004-05-07 ----------- patch 15 - \hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% - \pst@Verb{-90 \tx@Rot} - \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% - \pst@Verb{90 \tx@Rot}}}} -\def\psrotatedown{\pst@makebox{\ps@rotatedown\pst@hbox}} -\def\ps@rotatedown#1{% -\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1% -\pst@Verb{180 \tx@Rot}% -\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}% -\pst@Verb{-180 \tx@Rot}}}} -\pslongbox{Rotateleft}{\psrotateleft} -\pslongbox{Rotateright}{\psrotateright} -\pslongbox{Rotatedown}{\psrotatedown} -% ----------- hv begin 2004-09-23 ----------- 1.11 -% compatibility stuff -\let\rotateleft\psrotateleft -\let\rotateright\psrotateright -\let\rotatedown\psrotatedown -% ----------- hv end 2005-09-23 ----------- 1.11 -\def\pst@starbox{% -\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}} -\def\pst@@makesmall#1{% -\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}} -\def\pst@@@makesmall#1{% -\pst@dimh=\psk@xref\wd#1% -\ifx\psk@yref\relax -\pst@dimg=\dp#1% -\else -\pst@dimg=\psk@yref\ht#1% -\advance\pst@dimg\psk@yref\dp#1% -\fi -\setbox#1=\hbox to\z@{% -\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}} -% -\define@key[psset]{pstricks}{ref}[c]{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil} -\def\psset@@ref#1#2,#3,#4\@nil{% - \def\psk@xref{.5}% - \def\psk@yref{.5}% - \let\pst@makesmall\pst@@@makesmall - \ifx\@empty#3\@empty - \@nameuse{getref@#1}% - \@nameuse{getref@#2}% - \else - \pst@checknum{#1#2}\psk@xref - \pst@checknum{#3}\psk@yref - \fi} -% -\def\getref@c{\let\pst@makesmall\pst@@makesmall} -\def\getref@t{\def\psk@yref{1}} -\def\getref@b{\def\psk@yref{0}} -\def\getref@B{\let\psk@yref\relax} -\def\getref@l{\def\psk@xref{0}} -\def\getref@r{\def\psk@xref{1}} -\psset[pstricks]{ref=c} -% -\def\pst@rotlist{ mark RAngle /ps@a ED cleartomark ps@a neg } -\def\pst@rottable{% -@0=% -@U=% -@L=90 % -@D=180 % -@R=-90 % -@N=\pst@rotlist -@W=\pst@rotlist 90 add % -@S=\pst@rotlist 180 add % -@E=\pst@rotlist 90 sub } -% -\define@key[psset]{pstricks}{rot}[0]{% - \pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil} -\def\psset@@rot#1\@nil{% - \def\next##1@#1=##2@##3\@nil{% - \ifx##2\relax\pst@getangle{#1}\psk@rot \else\def\psk@rot{##2}\fi% - \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }% (MJS) - }% - \expandafter\next\pst@rottable @#1=\relax @\@nil} -% -\def\psset@@@rot#1#2\@nil{% - \psset@@rot#2\@nil% - \edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\space ps@rot add \fi}% - \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }}% (MJS) -% -%\def\psset@@rot#1\@nil{% -%\def\ps@next##1@#1=##2@##3\@nil{% -%\ifx\relax##2\pst@getangle{#1}\psk@rot\else\def\psk@rot{##2}\fi}% -%\expandafter\ps@next\pst@rottable @#1=\relax @\@nil} -% -%\def\psset@@@rot#1#2\@nil{% -%\psset@@rot#2\@nil -%\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}} -\psset[pstricks]{rot=0} -% -\def\tx@RotBegin{RotBegin } -\def\tx@RotEnd{RotEnd } -\def\pst@rotate#1#2{% - \ifx#1\@empty\else - \setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}% - \fi% -} -\def\psput@cartesian#1{% -\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}% -} -\def\psput@special#1{% - \hbox{% - \pst@Verb{{ \pst@coor \pstnodescale } \tx@PutCoor \tx@PutBegin }% 20150911 hv - \box#1% - \pst@Verb{ \tx@PutEnd }% - }% -} -\def\tx@PutCoor{PutCoor } -\def\tx@PutBegin{PutBegin } -\def\tx@PutEnd{PutEnd } -\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}} -\def\rput@i[#1]{% - \test@for@options#1=\@nil - \ifnum\the\pst@cntm=\z@ - \addto@par{ref={#1}}% - \else - \expandafter\addto@par\expandafter{#1}% - \fi - \rput@ii -} -\def\test@for@options#1=#2\@nil{% - \if$#2$% #2 is empty -> old syntax - \pst@cntm=\z@ - \else % something like foo=bar - \pst@cntm=\@ne - \fi -} - -\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}} -\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}} -\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}} -\def\rput@v#1{% - \begingroup - \use@par - \if@star\pst@starbox\fi - \pst@makesmall\pst@hbox - \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) -% \pst@rotate\psk@rot\pst@hbox% - \psput@{#1}\pst@hbox% - \endgroup - \ignorespaces} -% -\def\multirput{% - \def\pst@par{}% - \pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}} -\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii} -\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}} -\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv} -\def\multirput@iv(#1){% - \@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}} -\def\multirput@v(#1,#2)(#3,#4)#5{% - \pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}} -\def\multirput@vi(#1,#2)(#3,#4)#5{% - \pst@killglue% - \global\psLoopIndex=\@ne\relax - \begingroup - \use@par - \if@star\pst@starbox\fi - \pst@makesmall\pst@hbox - \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) -% \pst@rotate\psk@rot\pst@hbox - \pssetxlength\pst@dima{#1}% - \pssetylength\pst@dimb{#2}% - \pssetxlength\pst@dimc{#3}% - \pssetylength\pst@dimd{#4}% - \pst@cntg=#5\relax - \leavevmode - \loop - \vbox to \z@{% - \vss - \hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}% - \vskip\pst@dimb% - }% - \ifnum\pst@cntg>\psLoopIndex - \advance\pst@dima\pst@dimc - \advance\pst@dimb\pst@dimd - \global\advance\psLoopIndex by \@ne - \repeat - \endgroup - \ignorespaces% -} -% -\newif\if@fixedradius -\def\cput{\def\pst@par{}\pst@object{cput}} -\def\cput@i{\@fixedradiusfalse\cput@ii} -\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}} -\def\cput@iii#1{% - \addto@par{rot={#1}}% - \@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}% -} -\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}} -\def\cput@v#1{% - \begingroup - \use@par - \setbox\pst@hbox=\hbox{% - \psboxsepfalse - \if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi% - }% - \pst@@makesmall\pst@hbox - \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) -% \pst@rotate\psk@rot\pst@hbox - \psput@{#1}\pst@hbox - \endgroup - \ignorespaces% -} -% -\def\Cput{\def\pst@par{}\pst@object{Cput}} -\def\Cput@i{\@fixedradiustrue\cput@ii} -\newdimen\pslabelsep -\define@key[psset]{pstricks}{labelsep}[5pt]{% - \pssetlength\pslabelsep{#1}% - \ifx\PSTplotLoaded\endinput% Set labels for pst-plot, if laoded - \let\psxlabelsep\pslabelsep% - \let\psylabelsep\pslabelsep% - \fi} -\psset[pstricks]{labelsep=5pt} -% -\define@key[psset]{pstricks}{refangle}[0]{\pst@expandafter\psset@@refangle{#1}\@nil} -\def\psset@@refangle#1\@nil{% - \def\next##1@#1=##2"##3@##4\@nil{% - \ifx\relax##2% - \pst@getangle{#1}\psk@refangle - \def\psk@uputref{}% - \else - \def\psk@refangle{##2 }% - \def\psk@uputref{##3}% - \fi}% - \expandafter\next\pst@refangletable @#1=\relax"@\@nil% - \pst@Verb{ gsave STV CP T /ps@refangle \psk@refangle\space def grestore }%ADDED (MJS) -} -% -\def\pst@refangletable{% -@r=0"20% -@u=90"02% -@l=180"10% -@d=-90"01% -@ur=45"22% -@ul=135"12% -@dr=-135"21% -@dl=-45"11} -\psset[pstricks]{refangle=0} - -% DG/SR modification begin - Mar. 24, 1999 - Patch 10 -%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}} -\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} -% DG/SR modification end -\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii} -% -\def\uput@ii[#1]{% - \addto@par{refangle={#1}}% - \@ifnextchar({\uput@iv}{\uput@iii}} -% -\def\uput@iii#1{% - \addto@par{rot={#1}}% - \@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}} -% -\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}} -% -\def\uput@v#1{% - \begingroup - \use@par - \if@star\pst@starbox\fi - \pstCheckCoorType{#1}% needed for \uput@vii - \uput@vi - \psput@{#1}\pst@hbox - \endgroup - \ignorespaces} -% -\def\uput@vi{% - \ifx\psk@uputref\@empty\uput@vii\tx@UUput{}% - \else - \ifx\psk@rot\@empty\expandafter\uput@viii\psk@uputref - \else\uput@vii\tx@UUput{}\fi - \fi} -% -\def\uput@vii#1#2{% - \edef\pst@coor{% - \ifPst@SpecialLength\pst@SpecialLength\else\pst@number\pslabelsep\fi -% \pst@number\pslabelsep % \ifdim\pslabelsep<\z@ neg \fi - #2% - \pst@number{\wd\pst@hbox}% - \pst@number{\ht\pst@hbox}% - \pst@number{\dp\pst@hbox}% - \ifnum\pst@C@@rType=7 - ps@refangle % CHANGED (MJS) FROM \psk@refangle\space - \ifx\psk@rot\@empty\else ps@rot\space sub \fi - \else - \psk@refangle\space - \ifx\psk@rot\@empty\else \psk@rot\space sub \fi - \fi - \tx@Uput #1}% - %\show\pst@coor - \setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}% - \setbox\pst@hbox=\psput@special\pst@hbox - \ifnum\pst@C@@rType=7 - \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% CHANGED FROM \psk@rot (MJS) - \else - \ifx\psk@rot\@empty\else\pst@rotate{\psk@rot}\pst@hbox\fi% - \fi} -% -% -\def\uput@viii#1#2{% - \ifnum#1>\z@\relax\ifnum#2>\z@\relax\pslabelsep=.707\pslabelsep\fi\fi - \setbox\pst@hbox=\vbox to\z@{% - \ifnum#2=1\relax\vskip\pslabelsep\else\vss\fi - \hbox to\z@{% - \ifnum#1=2\relax\hskip\pslabelsep \else\hss\fi - \box\pst@hbox% - \ifnum#1=1\relax\hskip\pslabelsep\else\hss\fi}% - \ifnum#2=2\relax\vskip\pslabelsep\else\vss\fi}} -% -\def\tx@Uput{Uput } -\def\tx@UUput{UUput } -% -\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}} -\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii} -\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}} -\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}} -\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}} -\def\Rput@v#1{% - \begingroup - \use@par - \if@star\pst@starbox\fi - \Rput@vi - \pst@makesmall\pst@hbox - \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS) -% \pst@rotate\psk@rot\pst@hbox - \psput@{#1}\pst@hbox - \endgroup - \ignorespaces} -% -\def\Rput@vi{% - \pst@dimg=\dp\pst@hbox - \advance\pst@dimg\pslabelsep - \dp\pst@hbox=\pst@dimg - \pst@dimg=\ht\pst@hbox - \advance\pst@dimg\pslabelsep - \ht\pst@hbox=\pst@dimg - \setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}% -% -\def\oldpsput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}} -\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii} -\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}} -\def\oldpsput@iii<#1>{\rput@iii{#1}} -\def\OldPsput{\let\psput\oldpsput} -\def\NewPsput{\let\psput\rput} -% -% ----------- hv 20120219 ------------------- -\newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt} -\newpsstyle{gridstyleA}{subgriddiv=5,gridcolor=red!30,subgridcolor=green!20!black!10,gridlabels=0pt} -\newif\ifshowgrid -\newdimen\sh@wgridXunit -\newdimen\sh@wgridYunit - -\define@key[psset]{pstricks}{showgrid}[b]{\expandafter\pst@@showgrid#1!!\@nil} -\def\pst@@showgrid#1#2#3\@nil{% hv 20130403 - \def\showgridp@s{0}% - \ifx#1b\showgridtrue\else% bottom - \ifx#1f\showgridfalse\else - \ifx#1t - \ifx#2r \showgridtrue\else% true->bottom - \showgridtrue\def\showgridp@s{1}\fi% top - \fi\fi\fi - \ifnum\showgridp@s>0\relax - \sh@wgridXunit=\psxunit - \sh@wgridYunit=\psyunit - \fi - -} -\psset[pstricks]{showgrid=f} -\define@boolkey[psset]{pstricks}[Pst@]{pgffunctions}[true]{} -\psset[pstricks]{pgffunctions=false} -% -\newdimen\pst@shift -\newif\ifPst@shift@star -\define@key[psset]{pstricks}{shift}[0]{% - \ifx#1* - \global\Pst@shift@startrue - \pst@shift=\p@ - \else - \global\Pst@shift@starfalse - \pssetlength\pst@dimg{#1} - \global\pst@shift\pst@dimg% only the outer pspicture env can have a shift - \fi} -\psset[pstricks]{shift=0} -% -%------------------------------- pspicture ------------------------------ -% -\def\pspicture{\begingroup\pst@ifstar\pst@picture} -\def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}} -\def\pst@@picture[#1]{\@ifnextchar({\pst@@picture@i[#1]}{\pst@@picture@i[#1](10,10)}}% -\def\pst@@picture@i[#1]#2(#3,#4){\@ifnextchar(% ignore anything between [] and () - {\pst@@@picture[#1](#3,#4)}% - {\pst@@@picture[#1](0,0)(#3,#4)}} -% -\def\pst@@@picture[#1](#2,#3)(#4,#5){% - \pssetxlength\pst@dima{#2}% - \pssetylength\pst@dimb{#3}% - \pssetxlength\pst@dimc{#4}% - \pssetylength\pst@dimd{#5}% - \ifdim\pst@dima>\pst@dimc% - \pst@dimg=\pst@dima% - \pst@dima=\pst@dimc% - \pst@dimc=\pst@dimg% - \fi% - \ifdim\pst@dimb>\pst@dimd% - \pst@dimg=\pst@dimb% - \pst@dimb=\pst@dimd% - \pst@dimd=\pst@dimg% - \fi% - \setbox\pst@hbox=\hbox\bgroup - \begingroup\KillGlue - \@ifundefined{@latexerr}{}{\let\unitlength\psunit}% - \edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}% -% ----------- 1.10/12 beg hv ------------------- - \psset{showgrid=false}% % for nested pspicture environemnets - \def\pst@tempA{#1}% - \ifx\pst@tempA\@empty\else\psset{#1}\fi% sets the shift and grid option - \ifx\pst@bgcolor\@empty\else\psframe*[linecolor=\pst@bgcolor](#2,#3)(#4,#5)\fi - \ifshowgrid\ifnum\showgridp@s=0\psgrid[style=gridstyle]\fi\fi -% ----------- 1.10/12 end hv ------------------- - \ignorespaces% % 2008-12-07 - \ifPst@pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17 -} -\def\pic@coor{(0,0)(0,0)(10,10)} -\def\endpspicture{% - \ifshowgrid\ifnum\showgridp@s>0 - \psgrid[xunit=\sh@wgridXunit,yunit=\sh@wgridYunit,style=gridstyle]\fi\fi - \pst@killglue - \endgroup - \egroup - \ht\pst@hbox=\pst@dimd - \dp\pst@hbox=-\pst@dimb - \setbox\pst@hbox=\hbox{% - \kern-\pst@dima - \ifPst@shift@star%\typeout{==pstricks== old behaviour of the shift option}% shift=* - \advance\pst@dimd-\pst@dimb - \pst@dimd=0.5\pst@dimd - \else\pst@dimd-\pst@shift\fi - \advance\pst@dimd\pst@dimb - \lower\pst@dimd\box\pst@hbox - \kern\pst@dimc}% - \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi - \leavevmode - \ifPst@draft - \expandafter\ifx\csname @latexerr\endcsname\relax - \box\pst@hbox - \else% do we have LaTeX? - \fboxsep=0pt - \fbox{\rule[-\pst@shift]{0pt}{\ht\pst@hbox}\rule{\wd\pst@hbox}{0pt}}% - \fi - \else - \box\pst@hbox - \fi - \endgroup - \psset[pstricks]{shift=0}% reset value -} -% -\@namedef{pspicture*}{\pspicture*} -\@namedef{endpspicture*}{\endpspicture} -% -\ifx\pstcustomize\relax \input pstricks.con \fi -\catcode`\@=\PstAtCode\relax -% -\endinput -%% -%% END: pstricks.tex diff --git a/graphics/pstricks/contrib/pst-arrow/Changes b/graphics/pstricks/contrib/pst-arrow/Changes index bfb9b33776..c1d761a987 100644 --- a/graphics/pstricks/contrib/pst-arrow/Changes +++ b/graphics/pstricks/contrib/pst-arrow/Changes @@ -1,11 +1,15 @@ -%% $Id: Changes 136 2021-07-28 09:39:03Z herbert $ +%% $Id: Changes 164 2021-08-25 19:26:42Z herbert $ %% pst-arrow.sty ----------- v. 0.01 2016-09-09 initial version pst-arrow.tex ----------- (hv) + v. 0.04 2021-04-25 - moved the basic arrow code into pstricks-arrows.tex + which is in the pstricks-base dir + - updated documentation v. 0.03 2021-07-28 - fix introduced bug for linecolor which schould not be affected by tipcolor v. 0.02 2021-07-23 - added tipcolor option v. 0.01 2016-09-09 initial version + diff --git a/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.pdf b/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.pdf Binary files differindex 1992882247..065e35f305 100644 --- a/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.pdf +++ b/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.pdf diff --git a/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.tex b/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.tex index 79ac2d4085..39a8201975 100644 --- a/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.tex +++ b/graphics/pstricks/contrib/pst-arrow/doc/pst-arrow-doc.tex @@ -1,13 +1,13 @@ -%% $Id: pst-arrow-doc.tex 136 2021-07-28 09:39:03Z herbert $ -\documentclass[11pt,english,BCOR10mm,DIV14,bibliography=totoc,parskip=false,smallheadings +%% $Id: pst-arrow-doc.tex 164 2021-08-25 19:26:42Z herbert $ +\errorcontextlines=100 +\documentclass[11pt,english,BCOR10mm,DIV=14,bibliography=totoc,parskip=false,smallheadings, headexclude,footexclude,twoside]{pst-doc} -\usepackage[utf8]{inputenc} -\usepackage{pst-node,pst-arrow} +\usepackage{pst-node,hvlogos,pst-arrow} \let\pstArrowFV\fileversion \lstset{preset=\centering,pos=l,wide=false,vsep=5mm,language=PSTricks,%width=0.5\linewidth, morekeywords={multidipole,parallel},basicstyle=\footnotesize\ttfamily} % -\def\bgImage{\begin{pspicture}(5,6) +\renewcommand\bgImage{\begin{pspicture}(5,6) \psset{arrowscale=2} \pnode(3,4){A}\pnode(5,6){B}\pnode(5,0){C} \psbezier[ArrowInside=->,% @@ -31,7 +31,8 @@ \author{Herbert Voß} %\docauthor{Herbert Vo\ss} \date{\today} -\maketitle + +\settitle \tableofcontents @@ -47,9 +48,10 @@ The \LPack{pstricks} related package provides more arrow types. %-------------------------------------------------------------------------------------- \section{Arrows} %-------------------------------------------------------------------------------------- -\LPack{pst-arrow} defines the following "`arrows"': +\LPack{pstricks} defines the following "`arrows"': \def\myline#1{\psline[linecolor=red,linewidth=0.5pt,arrowscale=1.5]{#1}(0,1ex)(1.3,1ex)}% + \def\mylineA#1{\psline[linecolor=red,linewidth=0.5pt,arrowscale=4.5]{#1}(0,1ex)(2,1ex)}% \psset{arrowscale=1.5} \begin{longtable}{@{} c @{\qquad} p{3cm} l @{}}% Value & Example & Name \\[2pt]\hline @@ -70,17 +72,26 @@ The \LPack{pstricks} related package provides more arrow types. \Lnotation{**-**} & \myline{**-**} & Disks, flush to endpoints.\\ \Lnotation{{|}<->{|}} & \myline{|<->|} & T-bars and arrows.\\ \Lnotation{{|}>-<{|}} & \myline{|>-<|} & T-bars and reverse arrows.\\ - \Lnotation{h-h{|}} & \myline{h-h} & left/right hook arrows.\\ - \Lnotation{H-H{|}} & \myline{H-H} & left/right hook arrows.\\ - \Lnotation{v-v|} & \myline{v-v} & left/right inside vee arrows.\\ - \Lnotation{V-V|} & \myline{V-V} & left/right outside vee arrows.\\ - \Lnotation{f-f|} & \myline{f-f} & left/right inside filled arrows.\\ - \Lnotation{F-F|} & \myline{F-F} & left/right outside filled arrows.\\ - \Lnotation{t-t|} & \myline{t-t} & left/right inside slash arrows.\\[5pt] - \Lnotation{T-T|} & \myline{T-T} & left/right outside slash arrows.\\ + \Lnotation{h-h{}} & \myline{h-h} & left/right hook arrows.\\ + \Lnotation{H-H{}} & \myline{H-H} & left/right hook arrows.\\ + \Lnotation{v-v} & \myline{v-v} & left/right inside vee arrows.\\ + \Lnotation{V-V} & \myline{V-V} & left/right outside vee arrows.\\ + \Lnotation{f-f} & \myline{f-f} & left/right inside filled arrows.\\ + \Lnotation{F-F} & \myline{F-F} & left/right outside filled arrows.\\ + \Lnotation{t-t} & \myline{t-t} & left/right inside slash arrows.\\[5pt] + \Lnotation{T-T} & \myline{T-T} & left/right outside slash arrows.\\ +% + \Lnotation{<D-D>} & \mylineA{<D-D>} & curved arrows.\\ + \Lnotation{<D<D-D>D>} & \mylineA{<D<D-D>D>} & curved doubled arrows.\\ + \Lnotation{D>-<D} & \mylineA{D>-<D} & curved arrows, tip inside.\\ + \Lnotation{<T-T>} & \myline{<T-T>} & curved lines.\\ +% \Lnotation{>T-T<} & \mylineA{>T-T<} & \TikZ\ like arrows.\\ \hline \end{longtable} +%\def\pst@arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,% +% <D-D>,D>-<D,<D<D-D>D>,<T-T>,|<*->|*,|<->|,v-v,V-V,f-f,F-F,t-t,T-T} + \psset{arrowscale=1} @@ -93,7 +104,8 @@ of the \Lkeyword{arrows} parameter. The parameter can be set with \noindent or for some macros with a special option, like\\[5pt] \noindent\verb|\psline[<general options>]{<arrow type>}(A)(B)|\\ -\noindent\verb/\psline[linecolor=red,linewidth=2pt]{|->}(0,0)(0,2)/ \ \psline[linecolor=red,linewidth=2pt]{|->}(0,0)(0,2) +\noindent\verb/\psline[linecolor=red,tipcolor=blue,linewidth=2pt]{|->}(0,0)(0,2)/ \ +\psline[linecolor=red,tipcolor=blue,linewidth=2pt]{|->}(0,0)(0,2) \subsection{Multiple arrows} There are two new options which are only valid for the arrow type \verb+<<+ or \verb+>>+. diff --git a/graphics/pstricks/contrib/pst-arrow/tex/pst-arrow.tex b/graphics/pstricks/contrib/pst-arrow/tex/pst-arrow.tex index d5bd965bba..3dee550dfd 100644 --- a/graphics/pstricks/contrib/pst-arrow/tex/pst-arrow.tex +++ b/graphics/pstricks/contrib/pst-arrow/tex/pst-arrow.tex @@ -1,4 +1,4 @@ -%% $Id: pst-arrow.tex 136 2021-07-28 09:39:03Z herbert $ +%% $Id: pst-arrow.tex 164 2021-08-25 19:26:42Z herbert $ %% %% This is file `pst-arrow.tex', %% @@ -6,7 +6,7 @@ %% %% Package `pst-arrow.tex' %% -%% Herbert Voss <hvoss@tug.org> +%% Copyright 2021 Herbert Voss <hvoss@tug.org> %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives @@ -22,26 +22,14 @@ \ifx\PSTricksLoaded\endinput\else\input pstricks \fi \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi % -\def\fileversion{0.03} -\def\filedate{2021/07/28} +\def\fileversion{0.04} +\def\filedate{2021/08/25} \message{`pst-arrow' v\fileversion, \filedate\space (dr,hv)} % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax -\pst@addfams{pst-arrow} -% -\define@key[psset]{pst-arrow}{tipcolor}[black]{\def\pst@tipcolor{#1}} -\psset[pst-arrow]{tipcolor=} -\def\ps@check@tipcolor{% - \expandafter\if\expandafter$\pst@tipcolor$ - \pst@usecolor\pslinecolor - \else - \pst@usecolor\pst@tipcolor - \fi -} +\pst@addfams{pst-arrow} % -\def\tx@EndDot{ \ps@check@tipcolor\space EndDot } - \def\psBigArrow{\pst@object{psBigArrow}} \def\psBigArrow@i(#1)(#2){% \addbefore@par{doublesep=1cm} @@ -75,300 +63,9 @@ }% \end@ClosedObj } -% the original table -% \def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|} -% -% v : Vee arrow (inside) v,V,f and F by Christophe FOUREY -% V : Vee arrow (outside) -% f : Filled vee arrow (inside) -% F : Filled vee arrow (outside) -\edef\pst@arrowtable{\pst@arrowtable,v-v,V-V,f-f,F-F,t-t,T-T} - -% Vee arrow -\define@key[psset]{pst-arrow}{veearrowlength}[3mm]{\pst@getlength{#1}\psk@veearrowlength} -\psset[pst-arrow]{veearrowlength=3mm} % default projected length -\define@key[psset]{pst-arrow}{veearrowangle}[30]{\pst@getangle{#1}\psk@veearrowangle} -\psset[pst-arrow]{veearrowangle=30} % default angle -\define@key[psset]{pst-arrow}{veearrowlinewidth}[0.35mm]{\pst@getlength{#1}\psk@veearrowlinewidth} -\psset[pst-arrow]{veearrowlinewidth=0.35mm} % default vee arrow line width - -% Filled vee arrow -\define@key[psset]{pst-arrow}{filledveearrowlength}[3mm]{\pst@getlength{#1}\psk@filledveearrowlength} -\psset[pst-arrow]{filledveearrowlength=3mm} % default projected length -\define@key[psset]{pst-arrow}{filledveearrowangle}[15]{\pst@getangle{#1}\psk@filledveearrowangle} -\psset[pst-arrow]{filledveearrowangle=15} % default angle -\define@key[psset]{pst-arrow}{filledveearrowlinewidth}[0.35mm]{\pst@getlength{#1}\psk@filledveearrowlinewidth} -\psset[pst-arrow]{filledveearrowlinewidth=0.35mm} % default vee arrow line width -\define@key[psset]{pst-arrow}{arrowlinestyle}[solid]{% - \@ifundefined{psls@#1}% - {\@pstrickserr{Line style `#1' not defined}\@eha}% - {\def\psarrowlinestyle{#1}}} -\psset[pst-arrow]{arrowlinestyle=solid} % default -\pst@def{VeeArrow}<% - 1 setlinecap % round caps - 1 setlinejoin % round join - setlinewidth % vee arrow line width - /y ED % projected length - 2 div /a ED % angle (divide by 2) - /t ED % false = inside, true = outside - a sin a cos div y mul /x ED % perpendicular length : x=tan(a).y - t { 1 -1 scale } if % if outside : symmetry - x neg y moveto % point #1 - 0 0 L % point #2 - x y L % point #3 - { closepath gsave fill grestore } if % if filled : close and fill - \@nameuse{psls@\psarrowlinestyle} - \ps@check@tipcolor - stroke % draw line - 0 t { y 2 mul } { 0 } ifelse moveto> % if outside : twice longer line - -% VeeArrow : filled? outside? (total) angle (projected) length (arrow) line width - -\@namedef{psas@|}{\ps@check@tipcolor \psk@tbarsize \tx@Tbar} - -\@namedef{psas@v}{% - \ps@check@tipcolor - false false \psk@veearrowangle \psk@veearrowlength \psk@veearrowlinewidth \tx@VeeArrow} -\@namedef{psas@V}{% - \ps@check@tipcolor - false true \psk@veearrowangle \psk@veearrowlength \psk@veearrowlinewidth \tx@VeeArrow} -\@namedef{psas@f}{% - \ps@check@tipcolor - true false \psk@filledveearrowangle \psk@filledveearrowlength \psk@filledveearrowlinewidth \tx@VeeArrow} -\@namedef{psas@F}{% - \ps@check@tipcolor - true true \psk@filledveearrowangle \psk@filledveearrowlength \psk@filledveearrowlinewidth \tx@VeeArrow} - -% And An another arrowhead -% architectural tick / oblique arrow - -% Tick arrow -\define@key[psset]{pst-arrow}{tickarrowlength}[1.5mm]{\pst@getlength{#1}\psk@tickarrowlength} -\psset[pst-arrow]{tickarrowlength=1.5mm} % default projected length -\define@key[psset]{pst-arrow}{tickarrowlinewidth}[0.35mm]{\pst@getlength{#1}\psk@tickarrowlinewidth} -\psset[pst-arrow]{tickarrowlinewidth=0.35mm} % default tick arrow line width - -\pst@def{TickArrow}<% - 1 setlinecap % round caps - 1 setlinejoin % round join - setlinewidth % tick line width - /y ED % projected length - /t ED % false = normal, true = reversed - t { 1 -1 scale } if % if reversed : symmetry - y neg y moveto % point #1 - y y neg L % point #2 - \@nameuse{psls@\psarrowlinestyle} - \ps@check@tipcolor - stroke % draw line - 0 0 moveto> % origin - - -\@namedef{psas@t}{ \ps@check@tipcolor\space false \psk@tickarrowlength \psk@tickarrowlinewidth \tx@TickArrow } -\@namedef{psas@T}{ \ps@check@tipcolor\space true \psk@tickarrowlength \psk@tickarrowlinewidth \tx@TickArrow } - -\pst@def{ArrowD}< % the sides are drawn as curves (hv 20071211) - CLW mul add dup - 2 div /w ED - mul dup /h ED - mul /Inset ED - { 0 h T 1 -1 scale } if % changes the direction -% we use y=w/h^2 * x^2 as equation for the control points -% for the coordinates the arrow is seen from top to bottom -% the bottom (tip) is (0;0) - w neg h moveto % lower left of > - w 9 div 4 mul neg h 3 div 2 mul - w 9 div neg h 3 div - 0 0 curveto % tip of > - w 9 div h 3 div - w 9 div 4 mul h 3 div 2 mul - w h curveto % upper left of > - w neg Inset neg rlineto % move to x=0 and inset - gsave - \ps@check@tipcolor - fill grestore > -% -\pst@def{ArrowT}< % like tikz - CLW mul add dup - 2 div /w ED - mul dup /h ED - mul /Inset ED - { 0 h T 1 -1 scale } if % changes the direction - w 2 mul /w exch def - w neg h moveto % lower left of > - w 9 div 4 mul neg h 3 div 2 mul - w 9 div neg h 3 div - 0 0 curveto % tip of > - w 9 div h 3 div - w 9 div 4 mul h 3 div 2 mul - w h curveto % upper left of > -% w neg Inset neg rlineto % move to x=0 and inset -% CLW SLW -% 1 0 0 setrgbcolor - 2 setlinejoin - \ps@check@tipcolor - stroke - 0 0 moveto > -% -% -% HookLeft/RightArrow -\newdimen\pshooklength -\newdimen\pshookwidth -\define@key[psset]{pst-arrow}{hooklength}[3mm]{\pssetlength\pshooklength{#1}} -\define@key[psset]{pst-arrow}{hookwidth}[1mm]{\pssetlength\pshookwidth{#1}} -%\psset{hooklength=3mm,hookwidth=1mm} -% -\edef\pst@arrowtable{\pst@arrowtable,H-H,h-h} % add new arrow -\def\tx@RHook{RHook } % PostScript name -\def\tx@Rhook{Rhook } % PostScript name - -\@namedef{psas@H}{% - /RHook { - /x ED % hook width - /y ED % hook length - /z CLW 2 div def % save it - x y moveto % goto first point - x 0 0 0 0 y - curveto % draw Bezier - stroke - 0 y moveto % define current point - } def - \ps@check@tipcolor - \pst@number\pshooklength - \pst@number\pshookwidth - \tx@RHook -} -\@namedef{psas@h}{% - /Rhook { - CLW mul % size * CLW - add dup % +length size*CLW+length size*CLW+length - 2 div /w ED % (size*CLW+length)/2 -> w - mul dup /h ED mul % (size*CLW+length) - /a ED - w neg h abs moveto 0 0 L - gsave - \ps@check@tipcolor - stroke grestore - } def - 0 \psk@arrowlength \psk@arrowsize \tx@Rhook -} -% New parameter "arrowfill", with default as "true" -\define@boolkey[psset]{pst-arrow}[ps]{ArrowFill}[true]{} -% -% Modification of the PostScript macro Arrow to choose to fill or not the arrow -% (it require to restore the current linewidth, despite of the scaling) -\pst@def{Arrow}<{% - CLW mul add dup 2 div - /w ED mul dup - /h ED mul - /a ED { 0 h T 1 -1 scale } if - gsave - \ifpsArrowFill\else\pst@number\pslinewidth \pst@arrowscale\space div SLW \fi - \ps@check@tipcolor - w neg h moveto - 0 0 L w h L w neg a neg rlineto - \ifpsArrowFill gsave - \tx@setStrokeTransparency - fill - grestore \else gsave closepath - \ps@check@tipcolor - stroke grestore \fi - grestore - 0 h a sub moveto -}> -% -\define@key[psset]{pst-arrow}{nArrowsA}[2]{\def\psk@nArrowsA{#1}} -\define@key[psset]{pst-arrow}{nArrowsB}[2]{\def\psk@nArrowsB{#1}} -\define@key[psset]{pst-arrow}{nArrows}[2]{\def\psk@nArrowsA{#1}\def\psk@nArrowsB{#1}} -\psset{nArrows=2} -% -\@namedef{psas@>>}{% - \psk@nArrowsA\space 1 sub { - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - 0 h a sub T - } repeat - gsave - newpath - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - CP - grestore - moveto -} -% -\@namedef{psas@<<}{% - true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - 0 h neg a add T - \psk@nArrowsB\space 2 sub { - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - 0 h neg a add T - } repeat - false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow - 0 h a 5 mul 2 div sub moveto -} -% -% DG addition begin - Dec. 18/19, 1997 and Oct. 11, 2002 -% Adapted from \psset@arrows -\define@key[psset]{pst-arrow}{ArrowInside}{% - \def\pst@tempArrow{#1}% - \ifx\pst@tempArrow\@empty \def\psk@ArrowInside{} % - \else% - \begingroup% - \pst@activearrows% - \xdef\pst@tempg{<#1}% - \endgroup% - \expandafter\psset@@ArrowInside\pst@tempg\@empty-\@empty\@nil% - \if@pst\else\@pstrickserr{Bad intermediate arrow specification: #1}\@ehpa\fi% - \fi% -} -% Adapted from \psset@@arrows -\def\psset@@ArrowInside#1-#2\@empty#3\@nil{% - \@psttrue - \def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% - \expandafter\next\pst@arrowtable,#1-#1,\@nil - \@ifundefined{psas@#2}% - {\@pstfalse\def\psk@ArrowInside{}}% - {\def\psk@ArrowInside{#2}}% -} -% Default value empty -\psset{ArrowInside={}} -% Modified version of \pst@addarrowdef -\def\pst@addarrowdef{% - \addto@pscode{% - /ArrowA { - \ifx\psk@arrowA\@empty - \pst@oplineto - \else - \pst@arrowdef{A} - moveto - \fi - } def - /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def -% DG addition - /ArrowInside { - \ifx\psk@ArrowInside\@empty \else \pst@arrowdefA{Inside} \fi - } def - }% -} -% Adapted from \pst@arrowdef -\def\pst@arrowdefA#1{% - \ifnum\pst@repeatarrowsflag>\z@ /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c\fi - \tx@BeginArrow - \psk@arrowscale - \@nameuse{psas@\@nameuse{psk@Arrow#1}} - \tx@EndArrow% -} -% ArrowInsidePos parameter (default value 0.5) -\define@key[psset]{pst-arrow}{ArrowInsidePos}[0.5]{\pst@checknum{#1}\psk@ArrowInsidePos}% -%\psset{ArrowInsidePos=0.5} -% -% -% Redefinition of the PostScript /Line macro to print the intermediate -% arrow on each segment of the line -% -\define@key[psset]{pst-arrow}{ArrowInsideNo}[1]{\pst@checknum{#1}\psk@ArrowInsideNo}% hv 20031001 -\define@key[psset]{pst-arrow}{ArrowInsideOffset}[0]{\pst@checknum{#1}\psk@ArrowInsideOffset}% hv 20031001 -%\psset{ArrowInsideNo=1,ArrowInsideOffset=0} -% -\def\arrowType@H{H} +%% +%% Reqrite most of the existing macros +%% \pst@def{Line}< NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if (\psk@ArrowInside) length 0 gt { @@ -421,6 +118,7 @@ }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } if > % + % Redefinition of the PostScript /Polygon macro to print the intermediate % arrow on each segment of the line \pst@def{Polygon}<{% @@ -678,18 +376,6 @@ /VPutPos { { VPutLines } HPutCurve } def }> % - -\def\resetArrowOptions{% - \def\pst@linetype{0}% - \psset[pst-arrow]{% - hooklength=3mm, hookwidth=1mm, - ArrowFill=true, - ArrowInside={}, ArrowInsidePos=0.5, - ArrowInsideNo=1, ArrowInsideOffset=0, -}} -% -\resetArrowOptions -% \catcode`\@=\PstAtCode\relax % %% END: pst-arrow.tex diff --git a/macros/context/contrib/context-filter/VERSION b/macros/context/contrib/context-filter/VERSION index ee81786fef..407a8336f2 100644 --- a/macros/context/contrib/context-filter/VERSION +++ b/macros/context/contrib/context-filter/VERSION @@ -1 +1 @@ -2020.06.29 +2021.08.24 diff --git a/macros/context/contrib/context-filter/doc/context/third/filter/filter.txt b/macros/context/contrib/context-filter/doc/context/third/filter/filter.txt index 17cfb9f172..d2a2464c12 100644 --- a/macros/context/contrib/context-filter/doc/context/third/filter/filter.txt +++ b/macros/context/contrib/context-filter/doc/context/third/filter/filter.txt @@ -68,25 +68,41 @@ This module works with both MkII and MkIV. Installation ------------ -Writing installation instructions is always boring. If you are using ConTeXt -standalone, you can install the module using +The method to install the module depends on your installation. + +### ConTeXt standalone + +If you are using [ConTeXt standalone](https://wiki.contextgarden.net/ConTeXt_Standalone) installed with `first-setup.sh`, you can install the module using first-setup.sh --modules="t-filter" -Depending on your TeX distribution, you may already have the module. -To verify, check if +### ConTeXt LMTX + +[ConteXt LMTX](https://wiki.contextgarden.net/Installation), which uses the +new `luametatex` engine does not yet provide a built-in way to install and +manage modules. See [the ConTeXt +Wiki](https://wiki.contextgarden.net/Modules#ConTeXt_LMTX) for a workaround. + +### TexLive + +TexLive comes with its own manager `tlmgr` to install modules. The module is +listed there as `context-fiter`. + +### Manual installation +Depending on your setup, it might already be installed on your system. To verify wether you already have the module, check if luatools t-filter.mkiv returns a meaningful path. If not, you have to manually install the module. + Download the latest version of the module from [http://modules.contextgarden.net/filter](http://modules.contextgarden.net/filter) and unzip it either `$TEXMFHOME` or `$TEXMFLOCAL`. Run mtxrun --generate -and +and (if you are using MkII) mktexlsr @@ -104,7 +120,7 @@ disabled by default on most TeX distributions. To enable this feature in MkII, s shell_escape=t in your `texmf.cnf` file. See this page -[http://wiki.contextgarden.net/write18](http://wiki.contextgarden.net/write18) +[http://wiki.contextgarden.net/Write18](http://wiki.contextgarden.net/Write18) on the ConTeXt wiki for detailed instructions. Basic Usage diff --git a/macros/context/contrib/context-filter/tex/context/third/filter/t-filter.mkxl b/macros/context/contrib/context-filter/tex/context/third/filter/t-filter.mkxl new file mode 100644 index 0000000000..0b58be9c7d --- /dev/null +++ b/macros/context/contrib/context-filter/tex/context/third/filter/t-filter.mkxl @@ -0,0 +1,553 @@ +%D \module +%D [ file=t-filter, +%D version=2021.08.24, +%D title=\CONTEXT\ User Module, +%D subtitle=Filter, +%D author=Aditya Mahajan, +%D date=\currentdate, +%D copyright=Aditya Mahajan, +%D email=adityam <at> ieee <dot> org, +%D license=Simplified BSD License] + +\writestatus{loading}{Filter (ver: 2021.08.24)} + +\startmodule [filter] +\usemodule [module-catcodes] +\unprotect + +% \f!temporaryextension was removed from the core in July 2012. +\ifx\f!temporaryextension\undefined \def\f!temporaryextension{tmp} \fi + +%D \subject {Interface} +%D +%D Using interface constants allows one to use \type{\c!filter} etc. in +%D the module definition, and thereby reduces the risk of a typo. +%D Currently, only English names are provided. If someone wants a +%D multi-lingual interface, let me know and I will add other language +%D names as well, + +\startinterface all + \setinterfaceconstant {filter} {filter} + \setinterfaceconstant {filtercommand} {filtercommand} + \setinterfaceconstant {output} {output} + \setinterfaceconstant {purge} {purge} + \setinterfaceconstant {read} {read} + \setinterfaceconstant {write} {write} + \setinterfaceconstant {readcommand} {readcommand} + \setinterfaceconstant {taglabel} {taglabel} + \setinterfaceconstant {tagdetail} {tagdetail} +\stopinterface + + +%D \subject {Name space} +%D +%D We use logical names to easily catch typos. + +\def\externalfilter@id {externalfilter} + +\def\externalfilter@temp_prefix {temp} +\def\externalfilter@count {\????externalfilter-\currentexternalfilter-counter} + +\definenamespace + [externalfilter] + [\c!type=module, + \c!name=externalfilter, + \c!command=\v!yes, + setup=\v!list, + \c!style=\v!yes, + \s!parent=externalfilter] + +\appendtoks + \externalfilter@show_status{defining filter : \currentexternalfilter}% + \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force} + {\ifcsname\externalfilter@count\endcsname \else + \expandafter\newcounter\csname\externalfilter@count\endcsname\fi}% + \setuevalue{\e!start\currentexternalfilter}{\externalfilter@start[\currentexternalfilter]}% + \setuvalue {\e!stop\currentexternalfilter}{}% + \setuevalue{process\currentexternalfilter file}{\externalfilter@process_file[\currentexternalfilter]}% + \setuevalue{process\currentexternalfilter buffer}{\externalfilter@process_buffer[\currentexternalfilter]}% + \setuevalue{inline\currentexternalfilter}{\externalfilter@inline[\currentexternalfilter]}% + \setelementbackendtag[\externalfilterparameter\c!taglabel] + \setelementnature [\externalfilterparameter\c!taglabel][display] + \setelementbackendtag[inline\externalfilterparameter\c!taglabel] + \setelementnature [inline\externalfilterparameter\c!taglabel][inline] +\to \everydefineexternalfilter + +% For backward compatibility +\let\setupexternalfilters \setupexternalfilter + +%D \subject {Messages} + +\def\m!externalfilter{t-filter} + +\setinterfacemessage\m!externalfilter{title} {\m!externalfilter} +\setinterfacemessage\m!externalfilter{notfound} {file -- cannot be found} +\setinterfacemessage\m!externalfilter{missing} {output file missing} +\setinterfacemessage\m!externalfilter{missing_cache} {cached output file -- missing. Rerunning filter} +\setinterfacemessage\m!externalfilter{forbidden} {Fatal Error: Cannot use absolute path -- as directory} +\setinterfacemessage\m!externalfilter{unwriteable} {Fatal Error: Cannot write to file --} +\setinterfacemessage\m!externalfilter{slash} {Appending / to directory -- } +\setinterfacemessage\m!externalfilter{reuse} {\c!state=\v!stop : Not running filter on file --} +\setinterfacemessage\m!externalfilter{writedisabled} {\c!write=\v!no : Not writing output for filter --} + + +%D \subject {Tracing Macros} + +\newif\iftraceexternalfilters + +\unexpanded\def\traceexternalfilters + {\traceexternalfilterstrue + \enabletrackers[graphic.runfile]} + +\starttexdefinition externalfilter@show_filenames + \writestatus\m!externalfilter{current filter : \currentexternalfilter} + \writestatus\m!externalfilter{base file : \externalfilter@base_file} + \writestatus\m!externalfilter{input file : \externalfilter@input_file} + \writestatus\m!externalfilter{output file : \externalfilter@output_file} +\stoptexdefinition + +\starttexdefinition externalfilter@show_status #1 + \iftraceexternalfilters + \writestatus\m!externalfilter{#1} + \fi +\stoptexdefinition + +\starttexdefinition externalfilter@show_filtercommand + \writestatus\m!externalfilter{command : \externalfilterparameter\c!filtercommand} + \writestatus\m!externalfilter{state : \externalfilterparameter\c!state} +\stoptexdefinition + +%D \section {The main user macros} + +\unexpanded\def\externalfilter@start + {\bgroup\obeylines\dodoubleargument\externalfilter@start_indeed} + +\starttexdefinition externalfilter@start_indeed [#1][#2] + % #1 = filter + % #2 = options + \egroup %\bgroup in \externalfilter@start + + \begingroup % to keep assignments local + \edef\currentexternalfilter{#1} + + \setupexternalfilter[#1][\c!name=,#2] + + \externalfilter@set_filenames + + % Capture the contents of the buffer + \edef\p_strip{\getvalue{\externalfilter@id-\c!strip-\externalfilterparameter\c!strip}} + \buff_pickup{\externalfilter@buffer_name}{\e!start#1}{\e!stop#1}{}{\externalfilter@process_filter}{\p_strip} +\stoptexdefinition + +\setvalue{\externalfilter@id-\c!strip-}{\zerocount} +\setvalue{\externalfilter@id-\c!strip-\v!off}{\zerocount} +\setvalue{\externalfilter@id-\c!strip-\v!on}{\plusone} + +\setvalue{\externalfilter@id-\c!strip-\v!no}{\zerocount} +\setvalue{\externalfilter@id-\c!strip-\v!yes}{\plusone} + +\unexpanded\def\externalfilter@process_file + {\dodoubleargument\externalfilter@process_file_indeed} + +\starttexdefinition externalfilter@process_file_indeed [#1][#2]#3 + % #1 = filter + % #2 = options + % #3 = filename + \begingroup + + \edef\currentexternalfilter{#1} + \setupexternalfilter[#1][\c!name=,#2] + + \processcommacommand[\externalfilterparameter{\c!filter\c!setups}]\directsetup + \externalfilter@set_directory + + \edef\externalfilter@input_file{\externalfilter@any_filename{#3}} + \splitfilename{#3} + %NOTE: \edef doesn not work because \splitoffname is not expandable + \def\externalfilter@base_file {\splitoffname} + + % The output is always in the directory specified by + % \c!directory; even if the input is from some other directory + \def\externalfilter@output_file{\externalfilter@get_directory\externalfilterparameter\c!output} + + \iftraceexternalfilters \externalfilter@show_filenames \fi + \externalfilter@execute_filter + \externalfilter@read_processed_file + + \endgroup +\stoptexdefinition + +\unexpanded\def\externalfilter@process_buffer + {\dotripleargument\externalfilter@process_buffer_indeed} + +\starttexdefinition externalfilter@process_buffer_indeed [#1][#2][#3] + % #1 = filter + % #2 = options + % #3 = buffer + \begingroup + + \edef\currentexternalfilter{#1} + \ifthirdargument + \setupexternalfilter[#1][\c!name=,#2] + \fi + + \processcommacommand[\externalfilterparameter{\c!filter\c!setups}]\directsetup + \externalfilter@set_directory + + \ifthirdargument + \edef\externalfilter@buffer_name{#3} + \else + \edef\externalfilter@buffer_name{#2} + \fi + + \externalfilter@set_filenames_extras + + \iftraceexternalfilters \externalfilter@show_filenames \fi + + \externalfilter@process_filter + +\stoptexdefinition + +\unexpanded\def\externalfilter@inline + {\dodoubleargument\externalfilter@inline_indeed} + +\starttexdefinition externalfilter@inline_indeed [#1][#2] + \begingroup % to keep assignments local + \edef\currentexternalfilter{#1} + + \setupexternalfilter[#1][\c!escape=\v!off,\c!numbering=,\c!name=,\c!location=\v!text,#2] + + \externalfilter@set_filenames + \doifelse{\externalfilterparameter\c!write}\v!no + \externalfilter@inline_write_disabled + \externalfilter@inline_write_enabled +\stoptexdefinition + +\starttexdefinition externalfilter@inline_write_disabled + \iftraceexternalfilters \showmessage\m!externalfilter{writedisabled} \currentexternalfilter \fi + + \externalfilter@execute_filter + \endlinechar\minusone %to prevent line break after reading file + \externalfilter@read_processed_file + + % Finalization + \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force} + {\doglobal\incrementvalue\externalfilter@count} + \endgroup +\stoptexdefinition + +\starttexdefinition externalfilter@inline_write_enabled + \pushcatcodetable + \futurelet\next\externalfilter@inline_grabcontent +\stoptexdefinition + +%D \subsubject {Write argument to file verbatim} +%D +%D Surprisingly, there is nothing in the core to define a function that write its +%D argument to a file verbatim. I basically copied the \type{\type} macro. + +\starttexdefinition externalfilter@inline_grabcontent + \ifx\next\bgroup + \expandafter\externalfilter@inline_group + \else + \expandafter\externalfilter@inline_other + \fi +\stoptexdefinition + +\starttexdefinition externalfilter@inline_group + \setcatcodetable \externalfilter@read_catcodes + \externalfilter@process_inline +\stoptexdefinition + +\starttexdefinition externalfilter@inline_other #1 + \setcatcodetable \externalfilter@verb_catcodes + + \def\next##1#1{\externalfilter@process_inline{##1}} + \next +\stoptexdefinition + +\newwrite\externalfilter@write + +\starttexdefinition externalfilter@process_inline #1 + \immediate\openout \externalfilter@write\externalfilter@input_file + \immediate\write \externalfilter@write{\detokenize{#1}} + \immediate\closeout\externalfilter@write + + \popcatcodetable + + \externalfilter@execute_filter + \endlinechar\minusone %to prevent line break after reading file + \externalfilter@read_processed_file + + \iftraceexternalfilters \else + \doif{\externalfilterparameter\c!purge}\v!yes + {\ctxlua{os.remove(\!!bs\externalfilter@input_file\!!es)}} + \fi + % Finalization + \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force} + {\doglobal\incrementvalue\externalfilter@count} + \endgroup +\stoptexdefinition + + +%D \section {Helper Functions} +%D +%D \subsubject {First and last character of a string} + +\def\externalfilter@get_first_character#1% + {\externalfilter@get_first_character_indeed#1\relax} + +\def\externalfilter@get_first_character_indeed#1#2\relax{#1} + +\def\externalfilter@get_last_character#1% + {\expandafter\externalfilter@get_last_character_indeed#1\relax} + +\def\externalfilter@get_last_character_indeed#1#2% + {\ifx#2\relax#1\else\expandafter\externalfilter@get_last_character_indeed\expandafter#2\fi} + +%D \subsubject {Setting font and color attributes} +%D I want to use the same interface for MkII and MkIV + +\starttexdefinition externalfilter@attributes_start #1#2#3 + % id style color + \getvalue{use#1styleandcolor}{#2}{#3} +\stoptexdefinition + +\def\externalfilter@attributes_stop{} + +%D \subsubject {Set the name of output directory} + +\starttexdefinition externalfilter@set_directory + \edef\externalfilter@get_directory{\externalfilterparameter\c!directory} + \doifsomething{\externalfilter@get_directory}\externalfilter@set_directory_indeed +\stoptexdefinition + +\starttexdefinition externalfilter@set_directory_indeed + \doif{\externalfilter@get_first_character\externalfilter@get_directory}{/} + {\writeline + \showmessage\m!externalfilter{forbidden}\externalfilter@get_directory + \batchmode + \errmessage{} + \normalend} + + \doifnot{\externalfilter@get_last_character\externalfilter@get_directory}{/} + {\iftraceexternalfilters \showmessage\m!externalfilter{slash}\externalfilter@get_directory \fi + \edef\externalfilter@get_directory{\externalfilter@get_directory/}} +\stoptexdefinition + +%D \subsubject {Check if file is writeable} + +\starttexdefinition externalfilter@check_writable #1 + + \ctxcommand{doifnot(file.is_writable("#1"))} + {\showmessage\m!externalfilter{unwriteable}{#1} + \batchmode + \errmessage{} + \normalend} +\stoptexdefinition + +%D \subsubject {Find file name (with search in \usepath)} +%D +%D The `\locfilename` macro does not search in the path specified by `\usepath`. +%D So, we define a macro that is based on `\readfile`. + +\def\externalfilter@any_filename#1% + {\clf_getreadfilename{any}{.}{#1}} + +%D \subsubject {Set file names} +%D +%D \type{\externalfilter@base_file} is the name of the temporary file without +%D extension. Its actual value depends on the state of \type{cache} key as +%D well as the value of \type{name} key. + +\starttexdefinition externalfilter@set_filenames + \processcommacommand[\externalfilterparameter{\c!filter\c!setups}]\directsetup + \externalfilter@set_directory + + % Set the name of temp file for the filter + \doifinsetelse{\externalfilterparameter\c!cache}{\v!yes,\v!force} + {\edef\externalfilter@buffer_name{\externalfilter@temp_prefix-\currentexternalfilter-\csname\externalfilter@count\endcsname}} + {\edef\externalfilter@buffer_name{\externalfilter@temp_prefix-\currentexternalfilter}} + \doifsomething{\externalfilterparameter\c!name} + {\edef\externalfilter@buffer_name{\externalfilter@temp_prefix-\currentexternalfilter-\externalfilterparameter\c!name}} + \doif{\externalfilterparameter\c!write}\v!no + {\edef\externalfilter@buffer_name{\externalfilter@temp_prefix-\currentexternalfilter-\externalfilterparameter{\c!cache\c!option}}} + + \externalfilter@set_filenames_extras + + \iftraceexternalfilters \externalfilter@show_filenames \fi +\stoptexdefinition + +\starttexdefinition externalfilter@set_filenames_extras + % The following macros are useful for filter= and filtercommand= options + % The basename of the external file + \edef\externalfilter@base_file {\jobname-\externalfilter@buffer_name} + + % Append directory name to the name of the input file + \edef\externalfilter@input_file {\externalfilter@get_directory\externalfilter@base_file.\f!temporaryextension} + + % Append directory name to the name of the output file + \edef\externalfilter@output_file{\externalfilter@get_directory\externalfilterparameter\c!output} +\stoptexdefinition + + + +%D \subsubject {Process Filter} +%D +%D Execute filter, read the output and do book-keeping if needed. + +\starttexdefinition externalfilter@process_filter + % By defualt, buffers are in memory in MkIV. So, we save them to disk + % + % \savebuffer[\externalfilter@buffer_name][\externalfilter@input_file] + % + % We can also save a list of buffers to a file. The empty + % elements of the list are ignored. So, instead we use the following + % + % \savebuffer[\externalfilterparameter{\c!buffer\c!before}, + % \externalfilter@buffer_name, + % \externalfilterparameter{\c!buffer\c!after}] + % [\externalfilter@input_file]} + % + % but using this method we cannot save the file in another directory. + % So, we use the key-value interface for \savebuffer. + \externalfilter@check_writable \externalfilter@input_file + \savebuffer + [ + \c!list={\externalfilterparameter{\c!buffer\c!before}, + \externalfilter@buffer_name, + \externalfilterparameter{\c!buffer\c!after}}, + \c!file={\externalfilter@input_file}, + \c!prefix=\v!no, + ] + \externalfilter@execute_filter + \externalfilter@read_processed_file + \iftraceexternalfilters \else + \doif{\externalfilterparameter\c!purge}\v!yes + {\ctxlua{os.remove(\!!bs\externalfilter@input_file\!!es)}} + \fi + + % Finalization + \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force} + {\doglobal\incrementvalue\externalfilter@count} + + \doif{\externalfilterparameter\c!location}\v!paragraph + {\useindentnextparameter\externalfilterparameter + \aftergroup\dorechecknextindentation} + \endgroup +\stoptexdefinition + +%D \subsubject {Execute Filter} + +% In MkIV, we use job.files.run to check if a file has changed. This function +% writes the md5 sum to the tuc file rather than to an external file. So, we +% must not check for the \type{*first} mode (otherwise the md5 sum is overridden +% in the next run. +\starttexdefinition externalfilter@execute_filter + + \externalfilter@check_writable \externalfilter@output_file + \iftraceexternalfilters \externalfilter@show_filtercommand \fi + + \doifelsenothing{\externalfilter@input_file} + {\showmessage\m!externalfilter{missing}\externalfilter@input_file} + {\doifelse{\externalfilterparameter\c!cache}\v!yes + {\doifelse{\externalfilterparameter\c!state}\v!stop + {\showmessage\m!externalfilter{reuse}\externalfilter@input_file} + {\doiffileelse{\externalfilter@output_file} + {\doifnot{\externalfilterparameter\c!write}\v!no + % When write=no is selected, % base_name=....-cacheoption... + % Since there is no input, caching is simply achieved + % using the filename. + {\ctxlua{job.files.run{ + filename = \!!bs\externalfilter@input_file\!!es, + result = \!!bs\externalfilter@output_file\!!es, + runner = \!!bs\externalfilterparameter\c!filtercommand\!!es, + }}}} + {\showmessage\m!externalfilter{missing_cache}\externalfilter@output_file + \executesystemcommand + {\externalfilterparameter\c!filtercommand}}}} + {\executesystemcommand + {\externalfilterparameter\c!filtercommand}}} +\stoptexdefinition + +%D \subsubject {Read output} + +\starttexdefinition externalfilter@read_processed_file + \doif{\externalfilterparameter\c!read}\v!yes + {\doiffileelse{\externalfilter@output_file} + {\externalfilter@read_processed_file_indeed} + {\showmessage\m!externalfilter{notfound}\externalfilter@output_file + \externalfilter@show_filenames + \blank + {\tttf [[\getmessage\m!externalfilter{missing}]]} + \blank}} +\stoptexdefinition + +\starttexdefinition externalfilter@read_processed_file_indeed + \doifelse{\externalfilterparameter\c!location}\v!paragraph + {\blank[\externalfilterparameter\c!spacebefore] + \usealignparameter\externalfilterparameter + \externalfilterparameter\c!before + \dostarttagged{\externalfilterparameter\c!taglabel}{\externalfilterparameter\c!tagdetail}} + {\externalfilterparameter\c!left + \dostarttagged{inline\externalfilterparameter\c!taglabel}{\externalfilterparameter\c!tagdetail}} + + \begingroup + \useexternalfilterstyleandcolor\c!style\c!color + \processcommacommand[\externalfilterparameter\c!setups]\directsetup + \externalfilterparameter\c!readcommand\externalfilter@output_file + \endgroup + \dostoptagged + + \doifelse{\externalfilterparameter\c!location}\v!paragraph + {\externalfilterparameter\c!after + \par\blank[\externalfilterparameter\c!spaceafter]} + {\externalfilterparameter\c!right} +\stoptexdefinition + +%D \section {Default Values} + +\setupexternalfilters + [ + \c!location=\v!paragraph, + \c!before=, + \c!after=, + \c!left=, + \c!right=, + \c!spacebefore=, + \c!spaceafter=, + \c!style=, + \c!color=, + \c!indentnext=\v!auto, + \c!align=, + \c!setups=, + \c!continue=\v!no, + \c!cache=\externalfilterparameter\c!continue, % for backward compatibility + \c!cache\c!option=, + \c!read=\v!yes, + \c!strip=\v!yes, + \c!readcommand=\ReadFile, + \c!directory=, + \c!purge=\v!yes, + \c!output=\externalfilterbasefile.tex, + \c!filter=, + \c!filtercommand={\externalfilterparameter\c!filter\space \externalfilter@input_file}, + \c!buffer\c!before=, + \c!buffer\c!after=, + \c!taglabel=\externalfilter@id, + \c!tagdetail=\currentexternalfilter, + ] + +\def\externalfilterbasefile {\externalfilter@base_file} +\def\externalfilterinputfile {\externalfilter@input_file} +\def\externalfilteroutputfile{\externalfilter@output_file} + +% t-syntax-groups still uses this. +\def\externalfilter@name {\currentexternalfilter} + +% Default value +\def\externalfilter@input_file {} +\def\externalfilter@output_file{} + +\protect +\stopmodule diff --git a/macros/generic/tokcycle/tokcycle-doc.pdf b/macros/generic/tokcycle/tokcycle-doc.pdf Binary files differindex 14f1169969..7085af2002 100644 --- a/macros/generic/tokcycle/tokcycle-doc.pdf +++ b/macros/generic/tokcycle/tokcycle-doc.pdf diff --git a/macros/generic/tokcycle/tokcycle-examples.pdf b/macros/generic/tokcycle/tokcycle-examples.pdf Binary files differindex c9652ee142..557f771a52 100644 --- a/macros/generic/tokcycle/tokcycle-examples.pdf +++ b/macros/generic/tokcycle/tokcycle-examples.pdf diff --git a/macros/generic/tokcycle/tokcycle.tex b/macros/generic/tokcycle/tokcycle.tex index 0db55bd49c..ef499db416 100644 --- a/macros/generic/tokcycle/tokcycle.tex +++ b/macros/generic/tokcycle/tokcycle.tex @@ -1,7 +1,7 @@ \def\tcname {tokcycle} -\def\tcver {1.41} +\def\tcver {1.42} % -\def\tcdate {2021/06/25} +\def\tcdate {2021/08/25} % % Author : Steven B Segletes, Christian Tellechea (contributor) % Maintainer : Steven B Segletes @@ -112,7 +112,7 @@ \the\tc@tok} \long\def\can@absorb@#1{\tctestifnum{\count@stringtoks{#1}>1}% {\tctestifx{\endtokcycraw#1}{#1}{\backslashcmds#1\@tokcycle}}% - {\trapactives#1\tc@trapescape#1{\tc@escapecytoks}{\can@absorb@@#1}}} + {\trapactives#1\tc@trapescape#1{\tc@escapecytoks\empty}{\can@absorb@@#1}}} \long\def\can@absorb@@#1{\let\@tmp=#1\test@ifmacro\@tmp{\implicittokfalse \@macT#1}{\trapimplicitegrp#1\implicitgrpfork#1}\@tokcycle} %CONVERT NEXT (SPACE OR BEGIN-GROUP) TOKEN TO STRING @@ -151,7 +151,7 @@ \@implicitgroupingcase\or\addcytoks{#1}\or\@chrT{#1}\fi}{\@chrT#1}} % SET UP ESCAPE MECHANISM \def\settcEscapechar#1{\let\@tcEscapeptr#1% - \def\tc@escapecytoks##1#1{\addcytoks{##1}\@tokcycle}} + \def\tc@escapecytoks##1#1{\addcytoks[1]{##1}\@tokcycle}} \def\tc@trapescape#1{\tctestifx{\@tcEscapeptr#1}} % TRAP CAT-6 \long\def\trapcatSIX#1{\tctestifcatnx#1\relax{}{\trapcatSIXb#1}} @@ -337,3 +337,7 @@ v1.41 2021/06/25 - Bug fix in \tcpopliteralappto (\@tmp interfered with itself). Altered, substituting \@@tmp. +v1.42 2021/08/25 + - Bug fix in \tc@escapecytoks (if escaped text was a single brace group, the + braces were lost) + diff --git a/macros/latex/contrib/huawei/huawei.cls b/macros/latex/contrib/huawei/huawei.cls index 9dabf913a4..5a8442e6f0 100644 --- a/macros/latex/contrib/huawei/huawei.cls +++ b/macros/latex/contrib/huawei/huawei.cls @@ -21,7 +21,7 @@ % SOFTWARE. \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{huawei}[2021/08/06 0.9.0 Template for Huawei Documents] +\ProvidesClass{huawei}[2021/08/25 0.9.1 Template for Huawei Documents] \newif\ifXL \DeclareOption{XL}{\XLtrue} @@ -194,8 +194,8 @@ \headers{% \ifanonymous\else% \theauthor% - \ifnosecurity\else, - \theid + \ifnosecurity\else% + \ifx\theid\empty\else,\theid\fi \fi% \ifnobrand\else% \newline diff --git a/macros/latex/contrib/huawei/huawei.pdf b/macros/latex/contrib/huawei/huawei.pdf Binary files differindex ce0d26f55b..8fa0f47c80 100644 --- a/macros/latex/contrib/huawei/huawei.pdf +++ b/macros/latex/contrib/huawei/huawei.pdf diff --git a/macros/latex/contrib/huawei/huawei.tex b/macros/latex/contrib/huawei/huawei.tex index 226f2980e0..15a3b9bddc 100644 --- a/macros/latex/contrib/huawei/huawei.tex +++ b/macros/latex/contrib/huawei/huawei.tex @@ -29,9 +29,9 @@ \begin{document} \maketitle -\ff{Version: 0.9.0} +\ff{Version: 0.9.1} \newline -\ff{Date: 2021/08/06} +\ff{Date: 2021/08/25} \section{Overview} @@ -59,7 +59,6 @@ of your project here): story\ .latexmkrc .gitignore - Makefile story.tex \end{minted} @@ -74,16 +73,6 @@ by \ff{pdflatex} during the compilation. You don't need to commit them to your repository, since they are temporary and will be generated again when you compile your document. -The recommended content of the \ff{Makefile} would be this: - -\begin{minted}{text} -TEXS=$(wildcard *.tex) -PDFS=$(TEXS:.tex=.pdf) -all: $(PDFS) -%.pdf: %.tex - latexmk -pdf $< -\end{minted} - In order to compile the document, just say \ff{make} on the command line. \section{Layout Options} @@ -139,7 +128,7 @@ such as its title or author's name, here is how: \begin{minted}{text} \documentclass{huawei} -\renewcommand*\thetitle{Making Compression 15% Faster} +\renewcommand*\thetitle{Making Compression 15\% Faster} \renewcommand*\thesubtitle{Technical Report} \renewcommand*\theauthor{Yegor Bugayenko} \begin{document} @@ -249,25 +238,4 @@ we recommend you to use ``crumbs'': A more complete example is in the \ff{samples/huawei-charter.tex}. -\subsection{Code Blocks} - -When you need to show some source code, we recommend to use -\ff{minted} environment, for example: - -\begin{minted}{text} -\begin{minted}{text} -void foo() { - return "Hello, world!"; -} -\ end{minted} -\end{minted} - -This is what you will see: - -\begin{minted}{text} -void foo() { - return "Hello, world!"; -} -\end{minted} - \end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/polski/README b/macros/latex/contrib/polski/README index c9321f0ad1..4ef83bd026 100644 --- a/macros/latex/contrib/polski/README +++ b/macros/latex/contrib/polski/README @@ -1,13 +1,13 @@ Copyright © 1994 by Mariusz Olko. Copyright © 1997, 1998 by Mariusz Olko and Marcin Woliński. -Copyright © 2000, 2002, 2003, 2007, 2017 by Marcin Woliński. +Copyright © 2000, 2002, 2003, 2007, 2017, 2021 by Marcin Woliński. Tools to typeset monolingual Polish documents in LaTeX2ε without babel -or polyglossia. The package +or polyglossia. The package: • loads Polish hyphenation patterns, • ensures a font encoding suitable for Polish is used; in particular it enables Polish adaptation of Computer Modern fonts (the so-called - PL fonts), + PL fonts in OT4 encoding), • provides translations of \today and the names such as Bibliography or Chapter, • redefines math symbols according to Polish typographical tradition, diff --git a/macros/latex/contrib/polski/conowego.txt b/macros/latex/contrib/polski/conowego.txt index 74d3bd7608..c66e09cf82 100644 --- a/macros/latex/contrib/polski/conowego.txt +++ b/macros/latex/contrib/polski/conowego.txt @@ -1,6 +1,15 @@ Zmiany w pakiecie Polski ======================== +Wersja 1.3.6 (2021/08/25): +========================== +* Drobne poprawki w dokumentacji + +Wersja 1.3.5 (2021/08/22): +========================== +* Poprawiony błąd, powodujący, że polecenia \pauza i \ppauza użyte na + początku akapitu zaburzały odstępy międzywierszowe + Wersja 1.3.4 (2017/05/04): ========================== diff --git a/macros/latex/contrib/polski/czytaj.txt b/macros/latex/contrib/polski/czytaj.txt index e04af5148c..88048359bb 100644 --- a/macros/latex/contrib/polski/czytaj.txt +++ b/macros/latex/contrib/polski/czytaj.txt @@ -6,157 +6,152 @@ * * * Copyright (C) 1994 by Mariusz Olko. * * Copyright (C) 1997 by Mariusz Olko and Marcin Woli\'nski. * -* Copyright (C) 2000,2002,2003,2007 by Marcin Woli\'nski. * +* Copyright (C) 2000,2002,2003,2007,2017,2021 by Marcin Woli\'nski. * * * ********************************************************************** ---- Informacje oglne +——— Informacje ogólne -Pakiet 'Polski' dostarcza narzdzi potrzebnych do skadu dokumentw -w jzyku polskim LaTeXem 2e. Gwne cechy pakietu +Pakiet ‹Polski› dostarcza narzędzi potrzebnych do składu dokumentów +w języku polskim LaTeXem 2e. Główne cechy pakietu -* umoliwia skad czcionkami `PL' pochodzcymi z pakietu MeX -* umoliwia skad czcionkami w ukladzie T1 znanymi jako czcionki EC -* umoliwia skad czcionkami w ukladzie QX, w szczeglnoci krojami - TeX Gyre (dawniej 'Quasi') tworzonymi przez JNS Team -* umoliwia skompilowanie dokumentu nawet wtedy, gdy dostpne s - jedynie czcionki `CM' -* wykorzystuje polskie wzorce przenoszenia -* dziaa z _formatem_ Babel z polskimi wzorcami przenoszenia -* wspomaga prace z rnymi wejciowymi stronami kodowymi -* wspomaga `notacj ciachow' polskich znakw -* posiada tryb 99.99% zgodnoci z LaMeXem (polsk adaptacj LaTeXa 2.09) +• umożliwia skład „czcionkami PL” pochodzącymi z pakietu MeX +• umożliwia skład czcionkami w ukladzie T1 (europejskim) +• umożliwia skład czcionkami w ukladzie QX, w szczególności krojami + TeX Gyre (dawniej Quasi) tworzonymi przez JNS Team +• umożliwia skompilowanie dokumentu nawet wtedy, gdy dostępne są + jedynie oryginalne czcionki Computer Modern +• wykorzystuje polskie wzorce przenoszenia +• działa z _formatem_ Babel z polskimi wzorcami przenoszenia +• wspomaga prace z różnymi wejściowymi stronami kodowymi +• wspomaga „notację ciachową” polskich znaków +• posiada tryb 99.99% zgodności z LaMeXem (polską adaptacją LaTeXa 2.09) -Dodatkowo doczone s dwa pakiety, ktre pozwol posuy si +Dodatkowo dołączone są dwa pakiety, które pozwolą posłużyć się LaTeXem 2e w najbardziej nawet nieprzyjaznym otoczeniu: -* pakiet plprefix pozwala na uzyskanie polskich liter przy pomocy +• pakiet plprefix pozwala na uzyskanie polskich liter przy pomocy notacji prefiksowej z dowolnie wybranym prefiksem (pomocny np. do robienia wydrukow z CWEBa). -* pakiet OT1patch dorabia ogonki wg najlepszych znanych standardw do +• pakiet OT1patch dorabia ogonki wg najlepszych znanych standardów do oryginalnych czcionek CM (kod Leszka Holenderskiego). -Nie zachcamy do stosowania tych pakietow, poza szczeglnymi -przypadkami. Sdzimy, e powody do ich stosowania zniky w -wikszoci systemw komputerowych co najmniej 10 lat temu. +Nie zachęcamy do stosowania tych pakietow, poza szczególnymi +przypadkami. Sądzimy, że powody do ich stosowania znikły w +większości systemów komputerowych co najmniej 10 lat temu. - Obecnie nie ma powodw ze strony samego TeXa eby nie uywa dla -polskich znakw naturalnej notacji omiobitowej. Notacja prefiksowa -jest w dzisiejszych czasach nienaturalnym dziwactwem. Wyjtek -stanowi jeszcze pewne nieprzyjazne rodowiska obliczeniowe, w ktrych -nie sposb wywietli polskich znakw. Na t okoliczno polski.sty -oferuje notacj ciachow (polecenie \prefixing). + Obecnie nie ma powodów ze strony samego TeXa żeby nie używać dla +polskich znaków naturalnej notacji ośmiobitowej. Notacja prefiksowa +jest w dzisiejszych czasach nienaturalnym dziwactwem. Wyjątek +stanowią jeszcze pewne nieprzyjazne środowiska obliczeniowe, w których +nie sposób wyświetlić polskich znaków. Na tę okoliczność polski.sty +oferuje notację ciachową (polecenie \prefixing). - Polskie znaki obecne w fontach zawsze bd dawa lepsze efekty ni -stosowanie protez zawartych w OT1patch. Poza tym uywanie OT1patch -nie pozwala na pene zastosowanie polskich wzorcw przenoszenia. + Polskie znaki obecne w fontach zawsze będą dawać lepsze efekty niż +stosowanie protez zawartych w OT1patch. Poza tym używanie OT1patch +nie pozwala na pełne zastosowanie polskich wzorców przenoszenia. ---- Licencja +——— Licencja -'Polski' stanowi oprogramowanie swobodne, moe by dystrybuowany w -zgodzie z licencj LaTeX Project Public License (zob. plik lppl.txt w +‹Polski› stanowi oprogramowanie swobodne, może być dystrybuowany w +zgodzie z licencją LaTeX Project Public License (zob. plik lppl.txt w dystrybucji LaTeXa; CTAN:macros/latex/base/lppl.txt). ---- Pliki wchodzace w skad pakietu +——— Pliki wchodzace w skład pakietu -W skad pakietu wchodzi kilka plikw zawierajcych udokumentowane -(w wikszosci :-) rda makr. +W skład pakietu wchodzi kilka plików zawierających udokumentowane +(w większosci :-) źródła makr. -* polski.dtx - zawiera rda pakietu polski -* polski.ins - gwny skrypt instalacyjny -* strony.dtx - plik z wejciowymi stronami kodowymi dla LaTeXa oraz - definicj ukadu czcionek OT4 -* plfonts.fdd - definicje czcionek `PL' do wykorzystania w LaTeXu -* plprefix.dtx - zawiera rda pakietu pozwalajcego na uzyskiwanie - polskich liter za pomoc `notacji prefiksowej' -* plprefix.ins - skrypt instalacyjny dla plprefix.sty -* ot1patch.dtx - zawiera rda pakietu dorabiajcego ogonki +• polski.dtx — zawiera źródła pakietu polski +• polski.ins — główny skrypt instalacyjny +• strony.dtx — plik z wejściowymi stronami kodowymi dla LaTeXa oraz + definicją układu czcionek OT4 +• plfonts.fdd — definicje czcionek PL do wykorzystania w LaTeXu +• plprefix.dtx — zawiera źródła pakietu pozwalającego na uzyskiwanie + polskich liter za pomocą „notacji prefiksowej” +• plprefix.ins — skrypt instalacyjny dla plprefix.sty +• ot1patch.dtx — zawiera źródła pakietu dorabiającego ogonki do oryginalnych czcionek Computer Modern -* ot1patch.ins - skrypt instalacyjny dla ot1patch.sty -* czytaj.txt - ten plik -* readme.txt - opis instalacji po angielsku -* conowego.txt - lista zmian w pakiecie -* sample-polski.tex - przykadowy dokument -* sample-rysunek{.mp,1.mps} - rysunek do przykadowego dokumentu +• ot1patch.ins — skrypt instalacyjny dla ot1patch.sty +• czytaj.txt — ten plik +• readme.txt — opis instalacji po angielsku +• conowego.txt — lista zmian w pakiecie +• sample-polski.tex — przykładowy dokument +• sample-rysunek{.mp,1.mps} — rysunek do przykładowego dokumentu ---- Instalacja pakietu +——— Instalacja pakietu -Po rozpakowaniu archiwum naley wygenerowa wszystkie potrzebne pliki -uruchamiajc skrypt polski.ins +Po rozpakowaniu archiwum należy wygenerować wszystkie potrzebne pliki +uruchamiając skrypt polski.ins tex polski.ins -Skrypt wygeneruje na pocztek podstawowe pliki, tzn. pakiet polski.sty -oraz opisy wejsciowych stron kodowych. Nastpnie uytkownik jest -pytany czy ma zainstalowane czcionki `PL' pochodzce z instalacji -MeXa. Jeli czcionki sa zainstalowane, generowane s pliki -definiujce polskie czcionki dla LaTeXa. Jeli czcionki nie s -zainstalowane w systemie, naley zadba, aby nie byo te pliku -ot4cmr.fd na ciece LaTeXa, aby nie wprowadzic w bd procedury -rozpoznajcej rodowisko w pakiecie polski.sty. Na zakoczenie naley -skopiowa pliki *.fd *.sty *.def *.cfg do katalogu czytanego przez -TeXa. - -Do poprawnego skadu po polsku konieczna jest obecno polskich -wzorcw przenoszenia wyrazw w tzw. formacie LaTeXa. Zestaw wzorcw -przenoszenia wbudowany w format zaley od zawartoci pliku -language.dat (zob. dokumentacj LaTeXa). Wspczesne implementacje -TeXa zawieraj pomocnicze narzdzia automatyzujce generowanie -formatw. Zwykle wic wystarczy w narzdziu konfiguracyjnym wybra -cz zatytuowan 'Jzyki' i zaznaczy odpowiednie wzorce +Skrypt wygeneruje na początek podstawowe pliki, tzn. pakiet polski.sty +oraz opisy wejsciowych stron kodowych. Następnie generowane są pliki +opisujące fonty Computer Modern w polskim układzie OT4 (tzw. „fonty +PL”). Na zakończenie należy skopiować pliki *.fd *.sty *.def *.cfg do +katalogu czytanego przez TeXa. + +Do poprawnego składu po polsku konieczna jest obecność polskich +wzorców przenoszenia wyrazów w tzw. formacie LaTeXa. Zestaw wzorców +przenoszenia wbudowany w format zależy od zawartości pliku +language.dat (zob. dokumentację LaTeXa). Współczesne implementacje +TeXa zawierają pomocnicze narzędzia automatyzujące generowanie +formatów. Zwykle więc wystarczy w narzędziu konfiguracyjnym wybrać +część zatytułowaną „Języki” i zaznaczyć odpowiednie wzorce przenoszenia. -W systemie emTeX (pod MS DOS-em) do generowania formatu naleao uy +W systemie emTeX (pod MS DOS-em) do generowania formatu należało użyć polecenia: tex386 /i/o/r/8 /mt13000 latex.ltx ---- Dokumentacja +——— Dokumentacja -Pliki dtx zawieraj teksty makr wraz z dokumentacj. S one gotowe -do wydruku po przetworzeniu przez LaTeXa. Instrukcj posugiwania si -pakietem polski mona uzyska uruchamiajc +Pliki dtx zawierają teksty makr wraz z dokumentacją. Są one gotowe +do wydruku po przetworzeniu przez LaTeXa. Instrukcję posługiwania się +pakietem polski można uzyskać uruchamiając latex polski.dtx -a dalej uywajc swojego ulubionego programu do podgldu. +a dalej używając swojego ulubionego programu do podglądu. ---- Osmiobitowe wprowadzanie polskich liter +——— Osmiobitowe wprowadzanie polskich liter -Aby zoy w TeXu dokument zapisany w tzw. stronie kodowej trzeba -wskaza TeXowi, w jakiej stronie dokument jest zapisany. Moliwe s +Aby złożyć w TeXu dokument zapisany w tzw. stronie kodowej trzeba +wskazać TeXowi, w jakiej stronie dokument jest zapisany. Możliwe są dwa sposoby: -* Posuenie si mechanizmem przekodowywania znakw na posta -wewntrzn przez samego TeXa. W chwili obecnej stosowne wsparcie jest +• Posłużenie się mechanizmem przekodowywania znaków na postać +wewnętrzną przez samego TeXa. W chwili obecnej stosowne wsparcie jest obecne co najmniej w web2c, teTeXu, TeXlive, fpTeXu, mikTeXu i emTeXu. -* Zastosowanie standardowego pakietu inputenc. +• Zastosowanie standardowego pakietu inputenc. -Przekodowywanie nie pozwala na prac z kilkoma wejciowymi stronami -kodowymi w jednym dokumencie ani fontami o rnych ukadach polskich -znakw. Jest za to bardziej bezpieczne ze wzgledu na wspprac z -programami zewntrznymi (np. MakeIndex). Naley rwnie zwrci -uwag, e przekodowanie na poziomie implementacji jest zalene od -ukadu stosowanych fontw. Definicje przekodowania przygotowane dla -fontw PL z koniecznoci mapuj tylko ,,polskie znaki''. Dla +Przekodowywanie nie pozwala na pracę z kilkoma wejściowymi stronami +kodowymi w jednym dokumencie ani fontami o różnych układach polskich +znaków. Jest za to bardziej bezpieczne ze wzgledu na współpracę z +programami zewnętrznymi (np. MakeIndex). Należy również zwrócić +uwagę, że przekodowanie na poziomie implementacji jest zależne od +układu stosowanych fontów. Definicje przekodowania przygotowane dla +fontów PL z konieczności mapują tylko „polskie znaki”. Dla kontrastu definicje stron kodowych pakietu inputenc (np. cp1250 czy -cp852) obejmuj wszystkie znaki strony kodowej (wcznie ze znakami -nieliterowymi). Pakiet inputenc pozwala rwnie przetwarza dokumenty +cp852) obejmują wszystkie znaki strony kodowej (włącznie ze znakami +nieliterowymi). Pakiet inputenc pozwala również przetwarzać dokumenty zakodowane w Unikodzie zapisanym w formie UTF-8 (opcja utf8). -Oto szczegy specyficzne dla implementacji: +Oto szczegóły specyficzne dla implementacji: ------- web2c, teTeX, TeXlive, fpTeX, mikTeX +—————— web2c, teTeX, TeXlive, fpTeX, mikTeX -W tych implementacjach kodowanie dokumentu zadaje si za pomoc opcji ---translate-file wskazujcej plik definiujcy przekodowanie. Na -przykad +W tych implementacjach kodowanie dokumentu zadaje się za pomocą opcji +--translate-file wskazującej plik definiujący przekodowanie. Na +przykład latex --translate-file=il2-pl dokument.tex przetwarza dokument z polskimi znakami zapisanymi w kodzie ISO -Latin-2. Mona rwnie, i jest to rozwizanie zalecane, zada kod w -pierwszej linii dokumentu za pomoc nastpujcego ,,magicznego'' +Latin-2. Można również, i jest to rozwiązanie zalecane, zadać kod w +pierwszej linii dokumentu za pomocą następującego „magicznego” komentarza: %&latex --translate-file=il2-pl @@ -165,66 +160,64 @@ W tym przypadku do przetwarzania dokumentu wystarczy latex dokument.tex -W standardowej dystrybucji zawarta jest spora gar plikw -definiujcych przekodowanie. Pliki te maj rozszerzenie .tcx i -rezyduj w podkatalogu texmf/web2c korzenia instalacji. S to pliki -tekstowe, o realizowanym przekodowaniu mona dowiedzie si z +W standardowej dystrybucji zawarta jest spora garść plików +definiujących przekodowanie. Pliki te mają rozszerzenie .tcx i +rezydują w podkatalogu texmf/web2c korzenia instalacji. Są to pliki +tekstowe, o realizowanym przekodowaniu można dowiedzieć się z komentarza w pierwszych liniach pliku. ------- emTeX +—————— emTeX -W przypadku pracy z emTeXem przekodowanie musi zosta ,,zaszyte'' w -plik formatu. Jeeli ma si do czynienia z dokumentami w rnych -stronach kodowych, konieczny jest oddzielny plik formatu dla kadej -strony. +W przypadku pracy z emTeXem przekodowanie musi zostać „zaszyte” w plik +formatu. Jeżeli ma się do czynienia z dokumentami w różnych stronach +kodowych, konieczny jest oddzielny plik formatu dla każdej strony. -Pliki przekodowa dla polskich znakw dla emTeXa dostarczane s z -MeXem. Na przykad ponisze polecenie generuje format LaTeX z +Pliki przekodowań dla polskich znaków dla emTeXa dostarczane są z +MeXem. Na przykład poniższe polecenie generuje format LaTeX z kodowaniem Mazovii: tex386 /i/o/r /cmaz2pl /mt13000 latex.ltx ------- implementacje nie zapewniajce przekodowania +—————— implementacje nie zapewniające przekodowania -W przypadku korzystania z takiej implementacji (lub chci uycia w -jednym dokumencie rnie zakodowanych fragmentw) naley do preambuy -dokumentu doda wywoanie pakietu inputenc z opcj wskazujc stron -kodow, np. +W przypadku korzystania z takiej implementacji (lub chęci użycia w +jednym dokumencie różnie zakodowanych fragmentów) należy do preambuły +dokumentu dodać wywołanie pakietu inputenc z opcją wskazującą stronę +kodową, np. \documentclass{article} \usepackage{polski} \usepackage[mazovia]{inputenc} Podczas instalacji pakietu Polski tworzone sa pliki ze stronami kodowymi: -mazovia - dla popularnej (kiedy) strony kodowej na PCetach. -amigapl - dla polskiej strony kodowej uywanej na Amidze +mazovia — dla popularnej (kiedyś) strony kodowej na PCetach. +amigapl — dla polskiej strony kodowej używanej na Amidze -Ponadto w dystrybucji LaTeXa zawarte s nastpujce strony -interesujce dla polskiego uytkownika: +Ponadto w dystrybucji LaTeXa zawarte są następujące strony +interesujące dla polskiego użytkownika: -cp1250 - dla Windowsowej strony centralnoeuropejskiej CP1250 -latin2 - kodowanie ISO 8859-2 (Latin-2) -cp852 - dla DOS-owej strony CP852 (tzw. IBM Latin-2) -macce - dla strony centralnoeuropejskiej na komputerach Macintosh -utf8 - kodowanie UTF-8 (Unikod; to w zasadzie nie jest `strona - kodowa', ale zasada uycia jest ta sama) +cp1250 — dla Windowsowej strony centralnoeuropejskiej CP1250 +latin2 — kodowanie ISO 8859-2 (Latin-2) +cp852 — dla DOS-owej strony CP852 (tzw. IBM Latin-2) +macce — dla strony centralnoeuropejskiej na komputerach Macintosh +utf8 — kodowanie UTF-8 (Unikod; to w zasadzie nie jest strona + kodowa, ale zasada użycia jest ta sama) -Wikszo instalacji TeXowych czyta osmiobitowe znaki zawarte w -dokumentach. Niektre starsze implementacje wymagaj uycia do tego +Większość instalacji TeXowych czyta osmiobitowe znaki zawarte w +dokumentach. Niektóre starsze implementacje wymagają użycia do tego specjalnej opcji podczas generowania formatu. ---- Podzikowania +——— Podziękowania -* Marek Ryko i Bogusaw Jackowski stworzyli MeXa i LaMeXa -* Robert Ramiega przysa tablic kodow uywan na Amidze -* Staszek Wawrykiewicz napisa dokument przykadowy i, co waniejsze, - zanurzy cao w kontekst TeXlive +• Marek Ryćko i Bogusław Jackowski stworzyli MeXa i LaMeXa +• Robert Ramiega przysłał tablicę kodową używaną na Amidze +• Staszek Wawrykiewicz napisał dokument przykładowy i, co ważniejsze, + zanurzył całość w kontekst TeXlive ********************************************************************** Marcin Woli\'nski mailto:wolinski@gust.org.pl - http://www.mimuw.edu.pl/~wolinski ********************************************************************** diff --git a/macros/latex/contrib/polski/polski.dtx b/macros/latex/contrib/polski/polski.dtx index dd0dcaeb28..18a4233a50 100644 --- a/macros/latex/contrib/polski/polski.dtx +++ b/macros/latex/contrib/polski/polski.dtx @@ -23,7 +23,7 @@ %<driver>% Comment next line if you want to print the code %<driver>%\OnlyDescription \def\parsedate#1/#2/#3.{\day=#3 \month=#2 \year=#1 } -\parsedate 2021/08/22. +\parsedate 2021/08/25. \author{\begin{tabular}[t]{c} Mariusz Olko\\[4pt] (inactive) @@ -36,7 +36,7 @@ }%\\[4pt] \title{Pakiet \textsc{Polski}\\ - wersja 1.3.5} + wersja 1.3.6} \begin{document} \maketitle @@ -280,7 +280,7 @@ % \end{macrocode} % Announce the name of the package to the world % \begin{macrocode} -\ProvidesPackage{polski}[2021/08/22 v1.3.5 Polish language package] +\ProvidesPackage{polski}[2021/08/25 v1.3.6 Polish language package] % \end{macrocode} % % \subsection{Category codes and all that} @@ -1252,7 +1252,7 @@ lub w ostatecznosci uzyj pakietu ot1patch.}{}}% % % \begin{macrocode} %<*encoding> -\ProvidesFile{ot4enc.def}[2021/08/22 v1.3.5 Output encoding for polish fonts] +\ProvidesFile{ot4enc.def}[2021/08/25 v1.3.6 Output encoding for polish fonts] % \end{macrocode} % Declare the encoding. % \begin{macrocode} diff --git a/macros/latex/contrib/polski/polski.ins b/macros/latex/contrib/polski/polski.ins index 96a3046bcc..d3fb2a24fd 100644 --- a/macros/latex/contrib/polski/polski.ins +++ b/macros/latex/contrib/polski/polski.ins @@ -33,7 +33,7 @@ This is a generated file. Copyright (C) 1994 by Mariusz Olko. All rights reserved. Copyright (C) 1997, 1998 by Mariusz Olko and Marcin Woli\string\'nski. -Copyright (C) 2000, 2002, 2003, 2007, 2017 by Marcin Woli\string\'nski. +Copyright (C) 2000, 2002, 2003, 2007, 2017, 2021 by Marcin Woli\string\'nski. This file is part of the package `Polski' @@ -56,7 +56,7 @@ package. This is a generated file. -Copyright (C) 2000, 2002, 2003, 2007, 2017 by Marcin Woli\string\'nski. +Copyright (C) 2000, 2002, 2003, 2007, 2017, 2021 by Marcin Woli\string\'nski. This file is part of the package `Polski' ----------------------------------------- diff --git a/macros/latex/contrib/polski/polski.pdf b/macros/latex/contrib/polski/polski.pdf Binary files differindex 96ed5e3916..0344346ae1 100644 --- a/macros/latex/contrib/polski/polski.pdf +++ b/macros/latex/contrib/polski/polski.pdf diff --git a/macros/latex/contrib/polski/sample-polski.pdf b/macros/latex/contrib/polski/sample-polski.pdf Binary files differindex 3de1ace546..0aca098704 100644 --- a/macros/latex/contrib/polski/sample-polski.pdf +++ b/macros/latex/contrib/polski/sample-polski.pdf diff --git a/macros/latex/contrib/polski/strony.dtx b/macros/latex/contrib/polski/strony.dtx index c7be43187b..0d5b28e3b3 100644 --- a/macros/latex/contrib/polski/strony.dtx +++ b/macros/latex/contrib/polski/strony.dtx @@ -1,26 +1,15 @@ % \iffalse meta-comment -*- doctex -*- -% $Id: strony.dtx,v 0.6 2007/12/18 14:58:21 marcin Exp $ +% $Id: strony.dtx,v 0.7 2021/08/25 15:11:44 marcin Exp $ % % Copyright (C) 1994 by Mariusz Olko. All rights reserved. % -% This file is part of the package `Polski' +% This file is part of the package 'Polski' % ------------------------------------------------------------------ % -% This system is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% -% -% IMPORTANT NOTICE: -% -% You are not allowed to change this file. -% -% If you receive only some of these files from someone, complain! -% -% You are NOT ALLOWED to distribute this file alone. You are NOT -% ALLOWED to take money for the distribution or use of either this -% file or a changed version, except for a nominal charge for copying -% etc. +% The file may be distributed under the terms of the LaTeX Project +% Public License, as described in lppl.txt in the base LaTeX +% distribution. Either version 1.2 or, at your option, any later +% version. % % \fi % \iffalse diff --git a/support/TeX4ht/source/ChangeLog b/support/TeX4ht/source/ChangeLog index 669da6deb7..5b94888e6e 100644 --- a/support/TeX4ht/source/ChangeLog +++ b/support/TeX4ht/source/ChangeLog @@ -1,3 +1,11 @@ +2021-08-24 Michal Hoftich <michal.h21@gmail.com> + + * tex4ht-4ht.tex (usepackage.4ht, hyperxmp.4ht, + hyperxmp-hooks.4ht): fixes for the Hyperxmp package. + * tex4ht-4ht.tex (usepackage.4ht, + datetime2-hooks.4ht): undefine \pdffeedback command to prevent + compilation error. + 2021-08-22 Michal Hoftich <michal.h21@gmail.com> * tex4ht-4ht.tex (siunitx.4ht), diff --git a/support/TeX4ht/source/tex4ht-4ht.tex b/support/TeX4ht/source/tex4ht-4ht.tex index f4481f9798..0eb73250a3 100644 --- a/support/TeX4ht/source/tex4ht-4ht.tex +++ b/support/TeX4ht/source/tex4ht-4ht.tex @@ -1,4 +1,4 @@ -% $Id: tex4ht-4ht.tex 974 2021-08-22 16:06:00Z michal_h21 $ +% $Id: tex4ht-4ht.tex 976 2021-08-24 14:28:48Z michal_h21 $ % tex tex4ht-4ht or ht tex tex4ht-4ht % % Copyright 2009-2021 TeX Users Group @@ -31710,7 +31710,68 @@ We must fix some exerquiz issues before we load the package itself. % \AtEndOfPackage{\AtBeginDocument{\let\a:form\origa:Form}} >>>\AddFile{9}{exerquiz-hooks} +\Section{hyperxmp.sty} + + +We want to prevent execution of PDF related commands from +Hyperxmp. + +\<hyperxmp.4ht\><<< +% hyperxmp.4ht (|version), generated from |jobname.tex +% Copyright 2021 TeX Users Group +|<TeX4ht copywrite|> +\renewcommand*{\hyxmp@use@first@valid}[3]{} +\let\hyxmp@embed@packet\relax +\Hinput{hyperxmp} +\endinput +>>>\AddFile{9}{hyperxmp} + + + +\<add to usepackage\><<< +\Configure{PackageHooks}{hyperxmp.sty}{hyperxmp-hooks.4ht} +>>> + +It seems that pdfffedback primitive is defined in the DVI mode +in LuaTeX. This results in package loading error with the +Hyperxmp package. We make it temporarily undefined, in order +to prevent execution of the failing code. + +\<hyperxmp-hooks.4ht\><<< +% hyperxmp-hooks.4ht (|version), generated from |jobname.tex +% Copyright 2021 TeX Users Group +|<TeX4ht copywrite|> +% package redefinitions +\let\orig:pdffeedback\pdffeedback +\let\pdffeedback\@undefined +\:AtEndOfPackage{ +\let\pdffeedback\orig:pdffeedback +} + +>>>\AddFile{9}{hyperxmp-hooks} + +\Section{datetime2.sty} +\<add to usepackage\><<< +\Configure{PackageHooks}{datetime2.sty}{datetime2-hooks.4ht} +>>> + +It seems that pdfffedback primitive is defined in the DVI mode +in LuaTeX. This results in package loading error with the +Datetime2 package. We make it temporarily undefined, in order +to prevent execution of the failing code. + +\<datetime2-hooks.4ht\><<< +% datetime2-hooks.4ht (|version), generated from |jobname.tex +% Copyright 2021 TeX Users Group +|<TeX4ht copywrite|> +% package redefinitions +\let\orig:pdffeedback\pdffeedback +\let\pdffeedback\@undefined +\:AtEndOfPackage{ +\let\pdffeedback\orig:pdffeedback +} +>>>\AddFile{9}{datetime2-hooks} \Section{nicefrac.sty} diff --git a/systems/mac/mactex/ExtrasFolder.pdf b/systems/mac/mactex/ExtrasFolder.pdf Binary files differindex 5d88293d91..99fb41c405 100644 --- a/systems/mac/mactex/ExtrasFolder.pdf +++ b/systems/mac/mactex/ExtrasFolder.pdf diff --git a/systems/mac/mactex/Licenses.txt b/systems/mac/mactex/Licenses.txt index d1b56ac8b3..c965ee2f48 100644 --- a/systems/mac/mactex/Licenses.txt +++ b/systems/mac/mactex/Licenses.txt @@ -1,6 +1,6 @@ $Id: Licenses.txt,v 1.14 2007/02/28 14:23:19 herbs Exp $ -Brief summary of the licensing of the various applications included as of 2021/08/20 +Brief summary of the licensing of the various applications included as of 2021/08/25 Aquamacs Emacs (Intel) - 3.5 - gpl - http://aquamacs.org/ Aquatkbibtex - 1.3 - gpl - http://aquatkbibtex.sourceforge.net/ @@ -18,4 +18,4 @@ Symbols Widget - 1.4.3 - gpl - http://vocaro.com/trevor/so TeX FoG (10.4+) - 1.3.2 - gpl - http://homepage.mac.com/marco_coisson/TeXFoG/ TeX Live Utility (10.9+) - 1.49 - bsd - https://github.com/amaxwell/tlutility/releases TexMaker (10.12+) - 5.1.1 - gpl - http://www.xm1math.net/texmaker/ -TeXShop (10.12+) - 4.66 - gpl - http://www.uoregon.edu/~koch/texshop/texshop.html +TeXShop (10.12+) - 4.67 - gpl - http://www.uoregon.edu/~koch/texshop/texshop.html diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb index 313a760651..87ee862992 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb @@ -26,7 +26,7 @@ depend container_split_src_files/1 depend frozen/0 depend minrelease/2016 depend release/2021 -depend revision/60315 +depend revision/60323 name 00texlive.image category TLCore @@ -126106,7 +126106,7 @@ catalogue-version 1.0 name gamebooklib category Package -revision 60276 +revision 60318 shortdesc Macros for setting numbered entries in shuffled order relocated 1 longdesc This package provides macros and environments to allow the user @@ -126120,19 +126120,19 @@ longdesc page, whichever is closest to the footnote mark. This is longdesc unrelated to the gamebook package which is more concerned with longdesc the formatting of entries rather than their order. The two longdesc packages can be used together or separately. -containersize 3164 -containerchecksum 0934fd8f627a7c66d8179f98c0494bfe67985f101846c80dc143c8fa8a9fec118fa8cb28ae3611378b2659b27e0fd04cfcb81ed5d80631547f35e4ec2eb9c747 -doccontainersize 382964 -doccontainerchecksum 177823b5d53666615722cbf9e44d6a29b128dd18abb89206678409a87be7b07d8e301ef4a0f9829f9f9401849f33ffc2bca4b7048f3d78f788a2820f26359f0e +containersize 3204 +containerchecksum 229c7f89f9e0a8111a9191a40820ad3c2c560428e07234d176fda2718d9394652f28f382c2bac908f6272e1a58c81ebc2efa63c7ba5c522d32e8f22019c80f7e +doccontainersize 380608 +doccontainerchecksum 5cdc51138e162d91c280ce400d8f162f34b1975e6bf9b3f23a27dfcae23ffaacd78e950a22e34a5eb7880e71eec55087fbe901fc10a4ad76d17d7dac16996166 docfiles size=97 RELOC/doc/latex/gamebooklib/README details="Readme" RELOC/doc/latex/gamebooklib/gamebooklib.pdf details="Package documentation" RELOC/doc/latex/gamebooklib/gamebooklib_countpagesperseed.sh RELOC/doc/latex/gamebooklib/gamebooklib_test.pdf details="Example of use" RELOC/doc/latex/gamebooklib/gamebooklib_test.tex -srccontainersize 12844 -srccontainerchecksum 656053bad0b462d01808c3cd3ecbec567a95a47c85faa0828b1646e62d3240d19c5e6715b6c60673732128f8e6121a8fce9b5a73a78ab28025f14aa4878a3ca9 -srcfiles size=12 +srccontainersize 13556 +srccontainerchecksum f457bd442aaff8402f793e90556a367a1fe0a82e82af6e9cb01f6270a771c35cde0bd69cc77eed07f04d30fa2aebf9b04b40dafb0ef7569b2c8b429ecc5fb269 +srcfiles size=13 RELOC/source/latex/gamebooklib/Makefile RELOC/source/latex/gamebooklib/gamebooklib.dtx RELOC/source/latex/gamebooklib/gamebooklib.ins @@ -126141,7 +126141,7 @@ runfiles size=3 catalogue-ctan /macros/latex/contrib/gamebooklib catalogue-license lppl1.3 catalogue-topics games random -catalogue-version 1.0 +catalogue-version 1.1 name gammas category Package @@ -138114,7 +138114,7 @@ catalogue-version 1.1.1 name huawei category Package -revision 60177 +revision 60321 shortdesc Template for Huawei documents relocated 1 longdesc This unofficial package provides a class for creating documents @@ -138146,11 +138146,11 @@ depend tools depend ulem depend wrapfig depend xcolor -containersize 259736 -containerchecksum 29d111d9d838aa5d741fe1356a86b205ebdcba7efecbbe078d5a7d2d51b58c9b2bb8d21696506074db416077e16e2a2d13fd5f433ffd61a027e6ae2b0b65a2b1 -doccontainersize 342620 -doccontainerchecksum 2e499f9bf51bd398194dc4f396b4d3728f9da205a26df09dbb3b622a850f8503004f825ca64c7a90bf52182ac73177eae4b1e2ecd94c2e18eceb92bce8409e3d -docfiles size=90 +containersize 259740 +containerchecksum a6a64a5f3a7e44b04fd8240bea848f850b06252a1b13a656a05d96f826851f9118be3f0f186e877ae2c6c55c8aa94c3d267920268da2efb80b666d1dac54ec2c +doccontainersize 338704 +doccontainerchecksum eb6c9b8f7d617caad1d5f12fa54762e0ecfe5ca157ff3d04387bff66d4218017bbc334fe22f9f2c1b40a1384d296fa8740fe655e828c82cbfe1287b1e0cf179d +docfiles size=89 RELOC/doc/latex/huawei/DEPENDS.txt RELOC/doc/latex/huawei/README.md details="Readme" RELOC/doc/latex/huawei/huawei.pdf details="Package documentation" @@ -138166,7 +138166,7 @@ catalogue-contact-repository http://github.com/yegor256/huawei.cls catalogue-ctan /macros/latex/contrib/huawei catalogue-license mit catalogue-topics class misc-paper -catalogue-version 0.9.0 +catalogue-version 0.9.1 name hulipsum category Package @@ -249685,7 +249685,7 @@ catalogue-version 0.8.3 name polski category Package -revision 60313 +revision 60322 shortdesc Typeset Polish documents with LaTeX and Polish fonts relocated 1 longdesc Tools to typeset monolingual Polish documents in LaTeX2e @@ -249703,9 +249703,9 @@ longdesc platex, but has been renamed to resolve a name clash.) depend hyphen-polish depend pl containersize 9296 -containerchecksum 3fa7d083b6b823c636bd2873c36d548331697e2f1fa5bad6793bcb153927a2e560a0430701d190aace61fadf5cd84586d86d2ea417bccfc182b15c6a54a300f9 -doccontainersize 284564 -doccontainerchecksum d92ed7fbdb1e33a5438b0581f1ade3543209979737b14751ba00bf4f1b018417f8522d0f011385ea5af625983106cbb2b21182b5c38d6c1803755ee84bae9152 +containerchecksum 24bdb98990f66e89085056e6ad3e0930dd16d0f4bbd07a2c9a49931796e143505276d2025fee21b2b52d927c3b2992d31f4edae4668cdb549f6f00ef43dc1c69 +doccontainersize 284808 +doccontainerchecksum 755e7625d5ee1e4457e7ee518469d585c9c1e566c57bf147c62195555ae91dadb68f469127cb18a7c30cda1468129db09cb09b1974f5273d41c9491a6e1d5ffc docfiles size=79 RELOC/doc/latex/polski/README details="Readme (English)" RELOC/doc/latex/polski/conowego.txt @@ -249715,8 +249715,8 @@ docfiles size=79 RELOC/doc/latex/polski/sample-polski.tex RELOC/doc/latex/polski/sample-rysunek.mp RELOC/doc/latex/polski/sample-rysunek1.mps -srccontainersize 30828 -srccontainerchecksum 0291eb07992fcdf62d266cb0bba395a300017243b2781be27a587147e44b462f28200a18921363a7dc2676792e2a4bc72750be736dc32a37aef23bcc357861bb +srccontainersize 30572 +srccontainerchecksum 8e216956a95df02134cf411d170a75309c3f167a5bf7d78f77c4e47950c8a5da52e523e367f5ce60492fc0ab7cb205e9b57835b883225752731ca094d7c507b8 srcfiles size=35 RELOC/source/latex/polski/ot1patch.dtx RELOC/source/latex/polski/ot1patch.ins @@ -249747,7 +249747,7 @@ runfiles size=24 catalogue-ctan /macros/latex/contrib/polski catalogue-license lppl1.2 catalogue-topics polish -catalogue-version 1.3.5 +catalogue-version 1.3.6 name poltawski category Package @@ -257374,7 +257374,7 @@ catalogue-version 1.5e name pstricks category Package -revision 59402 +revision 60317 catalogue pstricks-base shortdesc PostScript macros for TeX relocated 1 @@ -257394,11 +257394,11 @@ longdesc pdftricks package, to generate a PDF inclusion from a PSTricks longdesc diagram. PSTricks macros can also generate PDF output when the longdesc document is processed XeTeX, without the need for other longdesc supporting packages. -containersize 76152 -containerchecksum 6de574466e92051bed3128b9579da1e96148ca8ff186240ce2a69c2af4ee233793f4245cdfa9e4c8b34d010a5645e1db1c7dedc5cc0d8382dfe9b3c46d372701 -doccontainersize 7451364 -doccontainerchecksum 96fb196707977f7449884bfa6b2b1380cbd107b7728dc04697b575adb02ff4f3ded92bbb851022c4b95938555f2df1960589630ab5db68a5531fd0372b513ef3 -docfiles size=2269 +containersize 76324 +containerchecksum 072175d52e3e024a5f07c6dd31c7a764c293e68afd9f711af39283d698042b350db640abc48c62368f31cb9288f56c82c503497eed2d9643854f74cb878826fa +doccontainersize 7486476 +doccontainerchecksum 755e96c5b4d59fb3f468af20efbfdebabf0781be0ad851f7bfba49640fe609f54db8be17d289c1c9bcef018dbd17fd8a280e345a2dd06a3390a0f7d18d0d4b56 +docfiles size=2281 RELOC/doc/generic/pstricks/PSTricks.bib RELOC/doc/generic/pstricks/README details="Readme" RELOC/doc/generic/pstricks/ctandir.sty @@ -257438,8 +257438,10 @@ docfiles size=2269 RELOC/doc/generic/pstricks/pst-news18.tex RELOC/doc/generic/pstricks/pst-news19.pdf RELOC/doc/generic/pstricks/pst-news19.tex - RELOC/doc/generic/pstricks/pst-news20.pdf details="Latest news bulletin" + RELOC/doc/generic/pstricks/pst-news20.pdf RELOC/doc/generic/pstricks/pst-news20.tex + RELOC/doc/generic/pstricks/pst-news21.pdf details="Latest news bulletin" + RELOC/doc/generic/pstricks/pst-news21.tex RELOC/doc/generic/pstricks/pst-user.pdf details="Package documentation" RELOC/doc/generic/pstricks/pst-user.tgz RELOC/doc/generic/pstricks/pstricks-bug.tex @@ -257482,7 +257484,7 @@ catalogue-contact-support http://tug.org/mailman/listinfo/pstricks catalogue-ctan /graphics/pstricks/base catalogue-license lppl1.3 catalogue-topics graphics-in-tex colour pstricks dvips-special xetex -catalogue-version 3.02 +catalogue-version 3.03 name pstricks-add category Package @@ -292501,7 +292503,7 @@ binfiles arch=x86_64-solaris size=1 name tex4ht category Package -revision 60305 +revision 60323 shortdesc Convert (La)TeX to HTML/XML longdesc A converter from TeX and LaTeX to SGML-based formats such as longdesc (X)HTML, MathML, OpenDocument, and Docbook, providing a @@ -292514,10 +292516,10 @@ longdesc helper DVI file that it can then process. This technique allows longdesc TeX4ht to approach the robustness characteristic of longdesc restricted-syntax systems such as gellmu. depend tex4ht.ARCH -containersize 908096 -containerchecksum 09660f429ab542c1f0407c4c084a69651edf9fc9aac5cd245c94e2e2143dab71a3b8da51ebe440ced19e2ef06d2d1a80f55d71519fe271f0bf62c7e457e580e1 +containersize 908164 +containerchecksum d1519fc7d2742c79bbce17fc8292b030078c4b3c40268833de52b6769892f97c450fbc9b53e60a53b63f6ebe619b526a93bbc15d21e9d267af5a57932c505f06 doccontainersize 136384 -doccontainerchecksum 9b538aa545ba910d4c98d179633581a2adf61f793c34f1ab8291ebc3e44fa18bc7ee1a202c8d3c1f5a9d3ac3cf25ecb6ebad766145b6ee052fc02983aa50b2e9 +doccontainerchecksum aee227833687f17f7ceac3f5107c0bdba3937a45a5d9185f08e55b4b065224b07924c3c9a47e705f5f6a031f1bb9100e52e875b90cbce85cef68949c11f659e4 docfiles size=260 texmf-dist/doc/generic/tex4ht/Makefile texmf-dist/doc/generic/tex4ht/README details="Readme" @@ -292589,9 +292591,9 @@ docfiles size=260 texmf-dist/doc/generic/tex4ht/mn56.html texmf-dist/doc/generic/tex4ht/mn5x.png texmf-dist/doc/generic/tex4ht/mn6x.png -srccontainersize 1214248 -srccontainerchecksum 951691817793914ae08cab8cfea84948e3cac31c4a463ecd291e2c5e9bb032634aea0798f7606c62f365f036e5653d18f4539b946e020e75a9cba106be4b5175 -srcfiles size=3626 +srccontainersize 1216016 +srccontainerchecksum 876ff7ad2da1bb6e9562c88191d0471bfba8f94767a18a479a379bf92e02fcb87fc24f28920536358b2a7e9a0d5edbdf6a66b951f811b711f26aafb561952efd +srcfiles size=3627 texmf-dist/source/generic/tex4ht/ChangeLog texmf-dist/source/generic/tex4ht/Makefile texmf-dist/source/generic/tex4ht/README @@ -292663,7 +292665,7 @@ srcfiles size=3626 texmf-dist/source/generic/tex4ht/tex4ht-xhtmml-xtpipes.tex texmf-dist/source/generic/tex4ht/wripro.tex texmf-dist/source/generic/tex4ht/xtpipes.tex -runfiles size=9796 +runfiles size=9799 texmf-dist/scripts/tex4ht/ht.sh texmf-dist/scripts/tex4ht/htcontext.sh texmf-dist/scripts/tex4ht/htcopy.pl @@ -292776,6 +292778,7 @@ runfiles size=9796 texmf-dist/tex/generic/tex4ht/curve.4ht texmf-dist/tex/generic/tex4ht/czech.4ht texmf-dist/tex/generic/tex4ht/danish.4ht + texmf-dist/tex/generic/tex4ht/datetime2-hooks.4ht texmf-dist/tex/generic/tex4ht/dcolumn.4ht texmf-dist/tex/generic/tex4ht/debug.4ht texmf-dist/tex/generic/tex4ht/diagram.4ht @@ -292886,6 +292889,8 @@ runfiles size=9796 texmf-dist/tex/generic/tex4ht/hypcap.4ht texmf-dist/tex/generic/tex4ht/hyperref-hooks.4ht texmf-dist/tex/generic/tex4ht/hyperref.4ht + texmf-dist/tex/generic/tex4ht/hyperxmp-hooks.4ht + texmf-dist/tex/generic/tex4ht/hyperxmp.4ht texmf-dist/tex/generic/tex4ht/idxmake.4ht texmf-dist/tex/generic/tex4ht/ifthen.4ht texmf-dist/tex/generic/tex4ht/imakeidx-hooks.4ht @@ -315316,7 +315321,7 @@ catalogue-version 1.1.5 name tokcycle category Package -revision 59707 +revision 60320 shortdesc Build tools to process tokens from an input stream relocated 1 longdesc The tokcycle package helps one to build tools to process tokens @@ -315331,11 +315336,11 @@ longdesc with a unique directive, to bring about the desired effect of longdesc the token cycle. If condition flags are provided to identify longdesc active, implicit, and catcode-6 tokens as they are digested. longdesc The package provides a number of options for handling groups. -containersize 6340 -containerchecksum 3463bf4ad65454f09c8c1b930e01fbc821c1767175099fdbf95e61d0f0c51029161f0d582c15b11c90bb3fdbe1cf0c1555d2162643d630666e6fa775f97517ee -doccontainersize 1151380 -doccontainerchecksum 225420acf05c1136839aa48de371cd43feb06b395bfe385d7859297c555ad94a76228c72daa213e79cf61c461d6337005c450e9acc8f936f1f15c3832a8c4a7f -docfiles size=329 +containersize 6384 +containerchecksum fa7beb7d6dd1ee5a6caaa968d425143f946426e98a164d1f1b44288105a6c8f57d94931782616c3926493f0af9709c5836bece10aa7ed6c2f1623f8301ff9bae +doccontainersize 1168688 +doccontainerchecksum dcae2b95cad3150dc8879061d8c546074116af04a970a7c2ad9a91292597f3c859927ebf56ffd58aecb995a9968fc8221b6250efddbdce80edce96fc9c906b48 +docfiles size=342 RELOC/doc/generic/tokcycle/README details="Readme" RELOC/doc/generic/tokcycle/tokcycle-doc.pdf details="Package documentation" RELOC/doc/generic/tokcycle/tokcycle-doc.tex @@ -315347,7 +315352,7 @@ runfiles size=6 catalogue-ctan /macros/generic/tokcycle catalogue-license lppl1.3c catalogue-topics macro-supp parser macro-iterate misc-support macro-gen -catalogue-version 1.41 +catalogue-version 1.42 name tokenizer category Package diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 index dd0184b737..311b0bf1b7 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 @@ -1 +1 @@ -f5a8b789e4088508d61f7595ebaa168a texlive.tlpdb +f656db6c5a3d6cd6c3bdf29317357b16 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 index 391dfe8aa1..76b85978c7 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 @@ -1 +1 @@ -31eee556d1fc08406c13716c8008b3dbd20ff92d1d86772689436742a4817f1cdaa84b534a4505cb0f7ad498609eef07ef20e1268817fa6cfc707a9609573f75 texlive.tlpdb +48aa3ffb606d5a2981ca28f760961d7e90462a5a7a1d1a9ea8905168cf91e3468dcafaf15a6bf21b91d241311c2484895e0f97dfe764868f2c59bd74954966b3 texlive.tlpdb diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc index 2359e0120e..52c7962819 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc @@ -1,10 +1,10 @@ -----BEGIN PGP SIGNATURE----- -iQEcBAEBCgAGBQJhJYZcAAoJEEzhh34ZQ4xw+30H+gJ1FDv/7W3lCciLKkTYJP+a -JV2/lijD1YScGvm7jR4sQFfCMfem+1zfvoDe71zdpjSkbHo2HkPZ6VtRq9IG/Blk -l7UkbiM6MRmtCHDee3gqDTHJvNnAy/bVIfylXP58r4DopiD63UOIaUFJWImWHn0z -zEZBIfQv7wUJ2D/tL+qzBmMmpDrmB2f7ZQayem7w2fA2ilkKMm9BpzRMbnXh+yuX -2u1bpqDzp76N/EY8+VdFN7YbKPZ2wtdEqWIMMD6dSeUi8Be+yP8iF79uUAb4srt8 -jqAqmx646lxR4ktx0d3F7YrZgQ6jn2wrTeYRUoU3hwT/FLEB4SXeiCWTpKT7j5Q= -=PtYb +iQEcBAEBCgAGBQJhJtfnAAoJEEzhh34ZQ4xw/WkH/RXr6jGdnh6dPDSPrwxsw7Qt +hKwMeQb8c1NSwans/iCKEl/QsRiTFLDHCzOMhmtJ696CMGaVeTdWL6hRH9SMixmG +e+C81sM+gp6sczb9KBxPXb765qsDvRYkB4OCcPSZBxKpdRzNk2cLNLgRyqW1+6Dx +hGaM9JGpqhOu2/yemgs5ezVTfG6K4Zc2cmiDtfOBmzK+PEVgtw+IyngvUy58QTb4 +AspSN8GNgbbaGz/5/r5WVwxwNcXkHxuMjWfg6Fvidr07vjBfk44wCxs+Cy8i+L/H +HZ2ZD+Lx7m4qF9GZG8Q9RZr8YVsyhBeIhkfJTlxqwVOjURX/oTFrh/sO/1A7W08= +=L4Ry -----END PGP SIGNATURE----- diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz Binary files differindex 1ca299cc96..deb66a12af 100644 --- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini index 253f8d58c1..c55ccf026b 100644 --- a/systems/win32/miktex/tm/packages/next/pr.ini +++ b/systems/win32/miktex/tm/packages/next/pr.ini @@ -1,13 +1,13 @@ [repository]
-date=1629836080
+date=1629922472
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=6f7817e6ff397c4637316a50df0f91d3
+lstdigest=f772e9c5d75d83e3c9f8cc12b0b2eb77
numpkg=4689
relstate=next
-version=7906
+version=7907
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: hVoU5d8I9Z+zRFMT1E2lYzc7620OuCeWpv2TaGL2q34OlSX5lDzw1NxnXJCwQo1p0UwQE5qChrQd8QmN3ssKRHKN9i6cbfmILdnHeSb/GwVCK5bqj/4if5n6GcDDfaMyBJSOVu+fjZLC0Oc9XrnAEhBJ+j1Bl14qAxA0U15shknK9Xzipx8jwGI5YEM8BVBKIAWf+UdTJ0TrPDztUCzyE+Wy7lHJWqDpCy5H99MDUcJ1t7EGsRj4FMUR22TIvUms5mVrPpKMVzFLuzi8UUjwWVYpluopTQQPapY8HKecLvyOvIE50r+qcnGsSMEuSy6eCKeG+YHNVBK9EO2OEtt7Xw==
+;;;; signature/miktex: QSXFtwQyBmRH5KWISGfFbbDTDxWzdEDlPa3C5hUFTyVpanh13TWkEWm77Yp9nhX6pNVMswMMHfSzh0/lQFfYCKfEznrs78Q9D1UPvfXFL7KiPe2IxxQXJBH4GNyoBLkCh9UiaKA9vDgFdT6qNHa8y1s1c/uYxSqHb1AK8/jKNwGBehVG+Sc6lwqQ/AOCJvfdPOOzfCgP2OFKFf+nPQmzzwij9xApmLT8+YPX4eo0W0w/eZHtMMYm44ppY4GXJ6r80bfBefgM96fVAMzi5TSuQIEG0xZ5TmfAQXFgI7gYVlMAAOmAGrT5ucNCVVKtuE1ZYm/EhrfpKG1OnZcBqSEalg==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini index c721bdf749..89c59f9bda 100644 --- a/systems/win32/miktex/tm/packages/pr.ini +++ b/systems/win32/miktex/tm/packages/pr.ini @@ -1,13 +1,13 @@ [repository]
-date=1629835872
+date=1629922265
lastupd=beamer-rl beamer-rl__doc beaulivre beaulivre__doc beaulivre__source bytefield bytefield__doc bytefield__source colorist colorist__doc colorist__source cryptocode cryptocode__doc cryptocode__source easybook easybook__doc easybook__source einfart einfart__doc einfart__source
-lstdigest=ff6f1c82acea65e2747b02a1dca7846e
+lstdigest=983f606e9397fd2b73f17ddcfdf115f6
numpkg=4689
relstate=stable
-version=7906
+version=7907
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: YTYpPFl768fKmHdTQPcv3Gt7//eY9t2j7O92KpXxSY48wmL988P0Rg6xazfBlTR2NbhajKo/019SRdwe4GS8b+bwQJPVUXCJiQ1xrtHdBJf8nxP6gfFKcP6T3Ak2ybWypkIjfGU1OTTAVx+7xVpwIptlKDiMon6V615zVis+/49ehtR6Oq4xWe6cnVCa74u6bwmNtvOylKMuhaEiQ+1AayzEiKGfqhrfoP8Ik4MpmOYaD2RXGa6iJUD8DxIdw+cYHJ3xJ6MLWmwWuTKXqVwJsXjYJgEAk34wlwgJ0RNKK5ZV0qo98v0hGTJJpbROWcUfA+dyPme+/DuCWTLdOHv/GA==
+;;;; signature/miktex: DBqV5qJDbALhogGPe+IJpok0tf0WnQYQzUAfFD564wNnGy/1s9VKmhm2IIbJPCC9H2ygDwpWuNkjUhSzUH+neDyuN+7JEVB+LBqCQANhRnTCPaWJiLtJbZhlEGQY/XtD5o1iGRvIfrtmQ5c1EjNqlgyLbs7Rgx9iKNWJVYdicDJ/zr1Gf9uwimmKTBVfvg1oTg7XWedIQuFgQby1E17ROvWAoPLKR8/Ela8IwLcmRhVQ7fp+TesQH/hF6ZYpeJ8nP5N4FE2PpWEMFRNzgT6I1pk2TuDddx7V0PuAnTaChr2BDz/4g/K8voJFpWR+lEwxq+eqz+3f2/YaxIk/qP7URQ==
;;;;-----END MIKTEX SIGNATURE-----
@@ -2,4 +2,4 @@ # The source CTAN of this site's material: dante.ctan.org # The year-month-day-hour-minute of this site's material: -2021-08-25-02-02 +2021-08-26-02-02 diff --git a/usergrps/usergrps/bg.html b/usergrps/usergrps/bg.html index 7bc5212b37..f2921b8021 100644 --- a/usergrps/usergrps/bg.html +++ b/usergrps/usergrps/bg.html @@ -293,7 +293,7 @@ Bulgaria <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/br.html b/usergrps/usergrps/br.html index 1b61cd75cd..89d7adaf89 100644 --- a/usergrps/usergrps/br.html +++ b/usergrps/usergrps/br.html @@ -94,7 +94,7 @@ <td><input class="lug" value="" name="eemail"> <tr> <td class="r">members - <td><input class="lug" value="386" name="members"> + <td><input class="lug" value="1427" name="members"> <td> <td> <tr> @@ -285,7 +285,7 @@ <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/cn.html b/usergrps/usergrps/cn.html index 1524cbb283..7b40f645b6 100644 --- a/usergrps/usergrps/cn.html +++ b/usergrps/usergrps/cn.html @@ -299,7 +299,7 @@ China <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/cz.html b/usergrps/usergrps/cz.html index ce2c11238a..e7e7889076 100644 --- a/usergrps/usergrps/cz.html +++ b/usergrps/usergrps/cz.html @@ -295,7 +295,7 @@ Czech Republic <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/de.html b/usergrps/usergrps/de.html index e997c83282..e3812d059e 100644 --- a/usergrps/usergrps/de.html +++ b/usergrps/usergrps/de.html @@ -298,7 +298,7 @@ Germany <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/dk.html b/usergrps/usergrps/dk.html index 67d35f1f60..56a7a0f4cc 100644 --- a/usergrps/usergrps/dk.html +++ b/usergrps/usergrps/dk.html @@ -291,7 +291,7 @@ Denmark <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/ee.html b/usergrps/usergrps/ee.html index c9a7e6619a..5e106dcf78 100644 --- a/usergrps/usergrps/ee.html +++ b/usergrps/usergrps/ee.html @@ -287,7 +287,7 @@ EE 2444 Estonia <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/es.html b/usergrps/usergrps/es.html index b112b3b57c..ad6c71d045 100644 --- a/usergrps/usergrps/es.html +++ b/usergrps/usergrps/es.html @@ -287,7 +287,7 @@ Spain <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/esc.html b/usergrps/usergrps/esc.html index b9c4150427..263c415cb2 100644 --- a/usergrps/usergrps/esc.html +++ b/usergrps/usergrps/esc.html @@ -288,7 +288,7 @@ Spain <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/fr.html b/usergrps/usergrps/fr.html index a784e3aa00..d3448ed98c 100644 --- a/usergrps/usergrps/fr.html +++ b/usergrps/usergrps/fr.html @@ -293,7 +293,7 @@ FRANCE <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/gb.html b/usergrps/usergrps/gb.html index 56732e8e4a..5303b6ee6e 100644 --- a/usergrps/usergrps/gb.html +++ b/usergrps/usergrps/gb.html @@ -292,7 +292,7 @@ NN6 0NH <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/gr.html b/usergrps/usergrps/gr.html index cc9e99c03a..dbc8e02f0f 100644 --- a/usergrps/usergrps/gr.html +++ b/usergrps/usergrps/gr.html @@ -287,7 +287,7 @@ Greece <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/hu.html b/usergrps/usergrps/hu.html index 06e3b07d93..d33b3e735c 100644 --- a/usergrps/usergrps/hu.html +++ b/usergrps/usergrps/hu.html @@ -301,7 +301,7 @@ Hungary <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/ie.html b/usergrps/usergrps/ie.html index 3334b39ca7..ce3456d7b0 100644 --- a/usergrps/usergrps/ie.html +++ b/usergrps/usergrps/ie.html @@ -287,7 +287,7 @@ Ireland <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/index.html b/usergrps/usergrps/index.html index ae9a2f27ae..2a2c040c8c 100644 --- a/usergrps/usergrps/index.html +++ b/usergrps/usergrps/index.html @@ -163,7 +163,7 @@ the cell. <p id="copyright">© NTG - last changed on -2021-08-24 10:13:18 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/is.html b/usergrps/usergrps/is.html index 47455e4d1b..19bde31e77 100644 --- a/usergrps/usergrps/is.html +++ b/usergrps/usergrps/is.html @@ -287,7 +287,7 @@ Iceland <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/it.html b/usergrps/usergrps/it.html index aebbf8b280..042ba6d512 100644 --- a/usergrps/usergrps/it.html +++ b/usergrps/usergrps/it.html @@ -288,7 +288,7 @@ Via Claudio 21 <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/kh.html b/usergrps/usergrps/kh.html index 1272b7386a..b99b698440 100644 --- a/usergrps/usergrps/kh.html +++ b/usergrps/usergrps/kh.html @@ -287,7 +287,7 @@ Cambodia <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/kr.html b/usergrps/usergrps/kr.html index 5f3d4b5292..6d639e4da9 100644 --- a/usergrps/usergrps/kr.html +++ b/usergrps/usergrps/kr.html @@ -299,7 +299,7 @@ Republic of Korea <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/labels.pdf b/usergrps/usergrps/labels.pdf Binary files differindex 07002e4adb..f5dd35baa7 100644 --- a/usergrps/usergrps/labels.pdf +++ b/usergrps/usergrps/labels.pdf diff --git a/usergrps/usergrps/lt.html b/usergrps/usergrps/lt.html index 1b03964ef9..b0a7e3c21f 100644 --- a/usergrps/usergrps/lt.html +++ b/usergrps/usergrps/lt.html @@ -287,7 +287,7 @@ Lithuania <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/lugs.html b/usergrps/usergrps/lugs.html index c15aabd8ce..6c40ea4cfc 100644 --- a/usergrps/usergrps/lugs.html +++ b/usergrps/usergrps/lugs.html @@ -100,7 +100,7 @@ in this document. <tr><td class="r">short name: <td>latex-br <tr><td class="r">full name: <td>Grupo de Usuários latex-br <tr><td class="r">language: <td>pt -<tr><td class="r">members: <td>386 +<tr><td class="r">members: <td>1427 <tr><td class="r">web site: <td><a href="http://www.abntex.net.br">www.abntex.net.br</a> <tr><td class="r">discussion list:<td>latex-br@googlegroups.com <tr><td class="r">subscribe at: <td>latex-br+subscribe@googlegroups.com @@ -577,7 +577,7 @@ in this document. <p id="copyright">© NTG - last changed on -2021-08-24 10:13:18 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/lugs.pdf b/usergrps/usergrps/lugs.pdf Binary files differindex c89c27832d..50bd508e60 100644 --- a/usergrps/usergrps/lugs.pdf +++ b/usergrps/usergrps/lugs.pdf diff --git a/usergrps/usergrps/lugs.tex b/usergrps/usergrps/lugs.tex index 7433b9eed2..423698daea 100644 --- a/usergrps/usergrps/lugs.tex +++ b/usergrps/usergrps/lugs.tex @@ -37,7 +37,7 @@ \item[short name] latex-br \item[full name] Grupo de Usuários latex-br \item[language] pt -\item[members] 386 +\item[members] 1427 \item[web site] \url{www.abntex.net.br} \item[discussion list]latex-br@googlegroups.com \item[subscribe at] latex-br+subscribe@googlegroups.com diff --git a/usergrps/usergrps/mx.html b/usergrps/usergrps/mx.html index 9ab56e52a6..d1f4f3b9a5 100644 --- a/usergrps/usergrps/mx.html +++ b/usergrps/usergrps/mx.html @@ -288,7 +288,7 @@ Mexico <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/nl.html b/usergrps/usergrps/nl.html index 7535f770fc..cc6bf33e88 100644 --- a/usergrps/usergrps/nl.html +++ b/usergrps/usergrps/nl.html @@ -292,7 +292,7 @@ The Netherlands <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:42 CEST </div></body></html> diff --git a/usergrps/usergrps/no.html b/usergrps/usergrps/no.html index f6c4d69bc5..1f6f6ec3cd 100644 --- a/usergrps/usergrps/no.html +++ b/usergrps/usergrps/no.html @@ -288,7 +288,7 @@ Norway <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/pl.html b/usergrps/usergrps/pl.html index c160a14066..534da38bed 100644 --- a/usergrps/usergrps/pl.html +++ b/usergrps/usergrps/pl.html @@ -295,7 +295,7 @@ Poland <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/pt.html b/usergrps/usergrps/pt.html index b583d7120d..fc27ca0b7d 100644 --- a/usergrps/usergrps/pt.html +++ b/usergrps/usergrps/pt.html @@ -289,7 +289,7 @@ Portugal <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/us.html b/usergrps/usergrps/us.html index af23e8a6b8..42b52e4a27 100644 --- a/usergrps/usergrps/us.html +++ b/usergrps/usergrps/us.html @@ -287,7 +287,7 @@ USA <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/uy.html b/usergrps/usergrps/uy.html index 425691b1f9..f81590e00a 100644 --- a/usergrps/usergrps/uy.html +++ b/usergrps/usergrps/uy.html @@ -285,7 +285,7 @@ <p id="copyright">© NTG - last changed on -2021-08-24 10:13:17 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/vn.html b/usergrps/usergrps/vn.html index 7b6e296280..1df0be42e8 100644 --- a/usergrps/usergrps/vn.html +++ b/usergrps/usergrps/vn.html @@ -293,7 +293,7 @@ Việt Nam <p id="copyright">© NTG - last changed on -2021-08-24 10:13:18 CEST +2021-08-25 10:18:43 CEST </div></body></html> diff --git a/usergrps/usergrps/za.html b/usergrps/usergrps/za.html index 4083b72ea5..d94e346559 100644 --- a/usergrps/usergrps/za.html +++ b/usergrps/usergrps/za.html @@ -288,7 +288,7 @@ South Africa <p id="copyright">© NTG - last changed on -2021-08-24 10:13:18 CEST +2021-08-25 10:18:43 CEST </div></body></html> |