summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-09-25 03:00:53 +0000
committerNorbert Preining <norbert@preining.info>2022-09-25 03:00:53 +0000
commitce8083552e0d948bf495e72d5c4d2680b505c90b (patch)
tree6c741e76b2a9e41d5c1b57a15ffa28d74c5317d8
parent41d1be12f4963b0f5bf9903116883f1458b58960 (diff)
CTAN sync 202209250300
-rw-r--r--FILES.byname546
-rw-r--r--FILES.byname.gzbin2454205 -> 2455846 bytes
-rw-r--r--FILES.last07days2462
-rw-r--r--graphics/pgf/contrib/tikz-ext/README.md27
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex6
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex19
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex14
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex28
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex96
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex2
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex8
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex2
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex20
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex70
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex42
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex93
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex53
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex83
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex58
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex105
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex7
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib299
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdfbin356908 -> 525958 bytes
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex1
-rw-r--r--graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex66
-rw-r--r--graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex292
-rw-r--r--graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex181
-rw-r--r--graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex318
-rw-r--r--graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex198
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex6
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex26
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex102
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex38
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex372
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex25
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex32
-rw-r--r--graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex136
-rw-r--r--language/sanskrit/README.md1
-rw-r--r--language/sanskrit/README.pdfbin87595 -> 91420 bytes
-rwxr-xr-xlanguage/sanskrit/build-ctan-dist.sh5
l---------language/sanskrit/ps-type11
-rw-r--r--language/sanskrit/ps-type1/README152
-rw-r--r--language/sanskrit/ps-type1/skt.map8
-rw-r--r--language/sanskrit/ps-type1/skt10.pfbbin0 -> 61373 bytes
-rw-r--r--language/sanskrit/ps-type1/skt8.pfbbin0 -> 62314 bytes
-rw-r--r--language/sanskrit/ps-type1/skt9.pfbbin0 -> 62803 bytes
-rw-r--r--language/sanskrit/ps-type1/sktb10.pfbbin0 -> 62635 bytes
-rw-r--r--language/sanskrit/ps-type1/sktbs10.pfbbin0 -> 64697 bytes
-rw-r--r--language/sanskrit/ps-type1/sktdoc.pdfbin0 -> 439023 bytes
-rw-r--r--language/sanskrit/ps-type1/sktf10.pfbbin0 -> 59844 bytes
-rw-r--r--language/sanskrit/ps-type1/sktfs10.pfbbin0 -> 62537 bytes
-rw-r--r--language/sanskrit/ps-type1/skts10.pfbbin0 -> 63930 bytes
-rw-r--r--language/sanskrit/skt.c217
-rw-r--r--language/sanskrit/sktdoc.pdfbin418299 -> 439023 bytes
-rw-r--r--language/sanskrit/sktdoc.ps740
-rw-r--r--language/sanskrit/sktdoc.skt3
-rw-r--r--macros/latex/contrib/crefthe/crefthe-doc.pdfbin53358 -> 53458 bytes
-rw-r--r--macros/latex/contrib/crefthe/crefthe-doc.tex2
-rw-r--r--macros/latex/contrib/crefthe/crefthe.sty4
-rw-r--r--macros/latex/contrib/udes-genie-these/README.md21
-rw-r--r--macros/latex/contrib/udes-genie-these/analyse.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conception.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conclusion-francaise.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/document.tex61
-rw-r--r--macros/latex/contrib/udes-genie-these/donnees.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/introduction.tex33
-rw-r--r--macros/latex/contrib/udes-genie-these/realisation.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/revue.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/tests.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.dtx120
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.pdfbin113355 -> 124734 bytes
-rw-r--r--macros/latex/contrib/wargame/README.md270
-rw-r--r--macros/latex/contrib/wargame/doc/README.md270
-rw-r--r--macros/latex/contrib/wargame/doc/compat.pdfbin0 -> 432846 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/symbols.pdfbin0 -> 184526 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/Makefile51
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/README.md41
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/export.tex385
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.pdfbin0 -> 583710 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.sty2042
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.tex200
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/patch.py31
-rw-r--r--macros/latex/contrib/wargame/doc/wargame.pdfbin0 -> 1305909 bytes
-rw-r--r--macros/latex/contrib/wargame/source/Makefile334
-rw-r--r--macros/latex/contrib/wargame/source/chit/core.dtx47
-rw-r--r--macros/latex/contrib/wargame/source/chit/elements.dtx105
-rw-r--r--macros/latex/contrib/wargame/source/chit/misc.dtx460
-rw-r--r--macros/latex/contrib/wargame/source/chit/shape.dtx544
-rw-r--r--macros/latex/contrib/wargame/source/hex/board.dtx253
-rw-r--r--macros/latex/contrib/wargame/source/hex/coord.dtx350
-rw-r--r--macros/latex/contrib/wargame/source/hex/core.dtx94
-rw-r--r--macros/latex/contrib/wargame/source/hex/extra.dtx83
-rw-r--r--macros/latex/contrib/wargame/source/hex/labels.dtx160
-rw-r--r--macros/latex/contrib/wargame/source/hex/paths.dtx416
-rw-r--r--macros/latex/contrib/wargame/source/hex/ridges.dtx139
-rw-r--r--macros/latex/contrib/wargame/source/hex/shape.dtx368
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain.dtx248
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/beach.dtx698
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/city.dtx5138
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx848
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx26
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx695
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/rough.dtx1570
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx317
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/town.dtx1061
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/tree.dtx31
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/village.dtx352
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/woods.dtx1011
-rw-r--r--macros/latex/contrib/wargame/source/hex/tile.dtx25
-rw-r--r--macros/latex/contrib/wargame/source/hex/towns.dtx96
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx39
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx87
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx99
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx43
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx266
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx14
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx18
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx131
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx51
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx67
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/core.dtx226
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx82
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx70
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx427
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx453
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx405
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx483
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/list.dtx266
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/shape.dtx647
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx3165
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/text.dtx57
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/util.dtx60
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx88
-rw-r--r--macros/latex/contrib/wargame/source/package.dtx48
-rw-r--r--macros/latex/contrib/wargame/source/tests/chits.dtx74
-rw-r--r--macros/latex/contrib/wargame/source/tests/map.dtx57
-rw-r--r--macros/latex/contrib/wargame/source/tests/test.tex172
-rw-r--r--macros/latex/contrib/wargame/source/util/core.dtx1299
-rwxr-xr-xmacros/latex/contrib/wargame/source/utils/export.py3562
-rwxr-xr-xmacros/latex/contrib/wargame/source/utils/svg2tikz.py365
-rw-r--r--macros/latex/contrib/wargame/source/wargame.dtx2455
-rw-r--r--macros/latex/contrib/wargame/source/wargame.ins176
-rw-r--r--support/texfot/texfot.pdfbin32559 -> 32363 bytes
-rwxr-xr-xsupport/texfot/texfot.pl131
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--timestamp2
148 files changed, 38355 insertions, 3214 deletions
diff --git a/FILES.byname b/FILES.byname
index 5918bd915e..cc3af08517 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5409,7 +5409,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
-2022/09/23 | 234058 | FILES.last07days
+2022/09/24 | 251282 | 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
@@ -159380,39 +159380,51 @@
2020/06/30 | 590 | graphics/pgf/contrib/tikzducks/tikzlibraryducks.code.tex
2020/06/30 | 1603 | graphics/pgf/contrib/tikzducks/t-tikzducks.mkiv
2020/06/30 | 469453 | graphics/pgf/contrib/tikzducks.zip
-2022/08/21 | 3084 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
-2022/08/20 | 995 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
-2022/08/21 | 2394 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex
-2022/08/21 | 8561 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
-2022/08/21 | 4873 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex
+2022/09/24 | 11644 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
+2022/09/24 | 3179 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
+2022/09/24 | 1053 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
+2022/09/24 | 2962 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex
+2022/09/24 | 8719 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
+2022/09/24 | 5784 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex
2022/08/21 | 3948 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.arcto.tex
-2022/08/21 | 8419 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.ortho.tex
-2022/08/21 | 3458 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
-2022/08/21 | 1631 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex
-2022/08/21 | 8722 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex
+2022/09/24 | 8419 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.ortho.tex
+2022/09/24 | 3526 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
+2022/09/24 | 1689 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex
+2022/09/24 | 8730 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex
2022/08/21 | 2265 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-topaths.arcthrough.tex
-2022/08/21 | 5332 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex
-2022/08/21 | 6455 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
-2022/08/21 | 11384 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
-2022/08/21 | 5434 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex
-2022/08/21 | 356908 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
-2022/08/21 | 893 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
+2022/09/18 | 5464 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex
+2022/09/24 | 7169 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
+2022/09/24 | 12400 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
+2022/09/24 | 3661 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex
+2022/09/24 | 2593 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex
+2022/09/24 | 3389 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex
+2022/09/11 | 2673 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex
+2022/09/24 | 4047 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex
+2022/09/24 | 5465 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex
+2022/09/24 | 525958 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
+2022/09/24 | 852 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
2022/08/19 | 12932 | graphics/pgf/contrib/tikz-ext/pgfcalendar-ext.code.tex
2022/08/21 | 257 | graphics/pgf/contrib/tikz-ext/pgfcalendar-ext.sty
2022/08/21 | 297 | graphics/pgf/contrib/tikz-ext/pgfcalendar-ext.tex
+2022/09/11 | 3395 | graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex
+2022/09/10 | 8698 | graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex
+2022/09/18 | 6480 | graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex
+2022/08/27 | 11354 | graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex
+2022/08/27 | 7901 | graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex
2022/08/14 | 3357 | graphics/pgf/contrib/tikz-ext/pgflibraryext.transformations.mirror.code.tex
-2022/08/21 | 726 | graphics/pgf/contrib/tikz-ext/README.md
-2022/08/19 | 2669 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex
-2022/08/16 | 9476 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex
-2022/08/21 | 11185 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex
+2022/09/24 | 933 | graphics/pgf/contrib/tikz-ext/README.md
+2022/09/24 | 2672 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex
+2022/09/18 | 9536 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex
+2022/09/24 | 13003 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex
+2022/09/24 | 1535 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex
2022/08/16 | 4668 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.arcto.code.tex
-2022/08/20 | 27816 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex
+2022/09/18 | 28639 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex
2022/08/14 | 8121 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.timer.code.tex
-2022/08/14 | 2217 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex
-2022/08/18 | 10156 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex
+2022/09/18 | 2442 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex
+2022/09/18 | 10180 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex
2022/08/16 | 2497 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.topaths.arcthrough.code.tex
-2022/08/20 | 3136 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex
-2022/08/21 | 378489 | graphics/pgf/contrib/tikz-ext.zip
+2022/09/18 | 4722 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex
+2022/09/24 | 557856 | graphics/pgf/contrib/tikz-ext.zip
2019/08/19 | 2649 | graphics/pgf/contrib/tikz-feynhand/changes.txt
2019/08/19 | 1924 | graphics/pgf/contrib/tikz-feynhand/README.md
2016/08/12 | 48826 | graphics/pgf/contrib/tikz-feynhand/shell_escape.jpg
@@ -189326,7 +189338,7 @@
2015/06/21 | 1065698 | install/macros/latex/contrib/tufte-latex.tds.zip
2022/08/22 | 13254857 | install/macros/latex/contrib/uantwerpendocs.tds.zip
2019/07/20 | 179217 | install/macros/latex/contrib/ucbthesis.tds.zip
-2022/09/15 | 142163 | install/macros/latex/contrib/udes-genie-these.tds.zip
+2022/09/24 | 151888 | install/macros/latex/contrib/udes-genie-these.tds.zip
2021/02/23 | 659103 | install/macros/latex/contrib/udesoftec.tds.zip
2015/03/29 | 371816 | install/macros/latex/contrib/undolabl.tds.zip
2019/12/15 | 297300 | install/macros/latex/contrib/uniquecounter.tds.zip
@@ -195252,10 +195264,21 @@
1996/11/12 | 62828 | language/romanian/RomanianTeX/romanian.dtx
1996/11/11 | 5004 | language/romanian/RomanianTeX/romanian.ins
2006/03/06 | 26963 | language/romanian/RomanianTeX.zip
-2017/01/11 | 1175 | language/sanskrit/build-ctan-dist.sh
+2022/09/24 | 1160 | language/sanskrit/build-ctan-dist.sh
2016/09/01 | 1271 | language/sanskrit/ot1skt.fd
-2016/09/02 | 4359 | language/sanskrit/README.md
-2017/01/11 | 87595 | language/sanskrit/README.pdf
+2016/09/01 | 4409 | language/sanskrit/ps-type1/README
+2016/09/01 | 61373 | language/sanskrit/ps-type1/skt10.pfb
+2016/09/01 | 62314 | language/sanskrit/ps-type1/skt8.pfb
+2016/09/01 | 62803 | language/sanskrit/ps-type1/skt9.pfb
+2016/09/01 | 62635 | language/sanskrit/ps-type1/sktb10.pfb
+2016/09/01 | 64697 | language/sanskrit/ps-type1/sktbs10.pfb
+2022/09/24 | 439023 | language/sanskrit/ps-type1/sktdoc.pdf
+2016/09/01 | 59844 | language/sanskrit/ps-type1/sktf10.pfb
+2016/09/01 | 62537 | language/sanskrit/ps-type1/sktfs10.pfb
+2016/09/01 | 397 | language/sanskrit/ps-type1/skt.map
+2016/09/01 | 63930 | language/sanskrit/ps-type1/skts10.pfb
+2017/02/22 | 4424 | language/sanskrit/README.md
+2022/09/24 | 91420 | language/sanskrit/README.pdf
2016/09/01 | 1004 | language/sanskrit/skt10.mf
2016/10/27 | 1936 | language/sanskrit/skt10.tfm
2016/09/01 | 1000 | language/sanskrit/skt8.mf
@@ -195266,12 +195289,12 @@
2016/10/27 | 1936 | language/sanskrit/sktb10.tfm
2016/09/01 | 1013 | language/sanskrit/sktbs10.mf
2016/10/27 | 1936 | language/sanskrit/sktbs10.tfm
-2016/09/01 | 112385 | language/sanskrit/skt.c
+2022/09/24 | 113122 | language/sanskrit/skt.c
2016/09/01 | 51675 | language/sanskrit/sktchars.mf
2016/09/01 | 6140 | language/sanskrit/sktdefs.mf
-2017/01/11 | 418299 | language/sanskrit/sktdoc.pdf
-2017/01/11 | 912036 | language/sanskrit/sktdoc.ps
-2017/01/11 | 112724 | language/sanskrit/sktdoc.skt
+2022/09/24 | 439023 | language/sanskrit/sktdoc.pdf
+2022/09/24 | 921574 | language/sanskrit/sktdoc.ps
+2017/05/01 | 112745 | language/sanskrit/sktdoc.skt
2016/09/01 | 1007 | language/sanskrit/sktf10.mf
2016/10/27 | 1936 | language/sanskrit/sktf10.tfm
2016/09/01 | 1011 | language/sanskrit/sktfs10.mf
@@ -195280,7 +195303,7 @@
2016/09/01 | 1008 | language/sanskrit/skts10.mf
2016/10/27 | 1936 | language/sanskrit/skts10.tfm
2016/09/01 | 23931 | language/sanskrit/skt.sty
-2017/01/11 | 1783148 | language/sanskrit.zip
+2022/09/24 | 1936970 | language/sanskrit.zip
2010/11/22 | 69766 | language/serbian/filipovic/he-le-na/he-le-na.sty
2010/11/14 | 200030 | language/serbian/filipovic/he-le-na/pravopis_sh.pdf
2010/11/15 | 7153 | language/serbian/filipovic/he-le-na/pravopis_sh.tex
@@ -212513,12 +212536,12 @@
2022/08/11 | 19106 | macros/latex/contrib/create-theorem/LICENSE
2022/08/11 | 676 | macros/latex/contrib/create-theorem/README.md
2022/08/11 | 108622 | macros/latex/contrib/create-theorem.zip
-2022/09/03 | 53358 | macros/latex/contrib/crefthe/crefthe-doc.pdf
-2022/09/03 | 12883 | macros/latex/contrib/crefthe/crefthe-doc.tex
-2022/09/03 | 12571 | macros/latex/contrib/crefthe/crefthe.sty
-2022/09/03 | 19106 | macros/latex/contrib/crefthe/LICENSE
-2022/09/03 | 2796 | macros/latex/contrib/crefthe/README.md
-2022/09/03 | 66197 | macros/latex/contrib/crefthe.zip
+2022/09/24 | 53458 | macros/latex/contrib/crefthe/crefthe-doc.pdf
+2022/09/24 | 12883 | macros/latex/contrib/crefthe/crefthe-doc.tex
+2022/09/24 | 12605 | macros/latex/contrib/crefthe/crefthe.sty
+2022/09/24 | 19106 | macros/latex/contrib/crefthe/LICENSE
+2022/09/24 | 2796 | macros/latex/contrib/crefthe/README.md
+2022/09/24 | 66426 | macros/latex/contrib/crefthe.zip
2020/06/05 | 67341 | macros/latex/contrib/crop/crop.dtx
2020/06/05 | 260 | macros/latex/contrib/crop/crop.ins
2020/06/05 | 327371 | macros/latex/contrib/crop/crop.pdf
@@ -234139,28 +234162,19 @@
2004/12/19 | 2922 | macros/latex/contrib/ucthesis/uctest.tex
2004/12/19 | 45780 | macros/latex/contrib/ucthesis/ucthesis.cls
2005/04/27 | 39529 | macros/latex/contrib/ucthesis.zip
-2022/09/15 | 284 | macros/latex/contrib/udes-genie-these/acronymes.tex
-2022/09/15 | 18 | macros/latex/contrib/udes-genie-these/analyse.tex
-2022/09/15 | 21 | macros/latex/contrib/udes-genie-these/conception.tex
-2022/09/15 | 28 | macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex
-2022/09/15 | 31 | macros/latex/contrib/udes-genie-these/conclusion-francaise.tex
-2022/09/15 | 1349 | macros/latex/contrib/udes-genie-these/document.tex
-2022/09/15 | 18 | macros/latex/contrib/udes-genie-these/donnees.tex
-2022/09/15 | 1587 | macros/latex/contrib/udes-genie-these/introduction.tex
-2022/09/15 | 337 | macros/latex/contrib/udes-genie-these/lexique.tex
-2022/09/15 | 192 | macros/latex/contrib/udes-genie-these/merci.tex
-2022/09/15 | 908 | macros/latex/contrib/udes-genie-these/README.md
-2022/09/15 | 22 | macros/latex/contrib/udes-genie-these/realisation.tex
-2022/09/15 | 6716 | macros/latex/contrib/udes-genie-these/references.bib
-2022/09/15 | 165 | macros/latex/contrib/udes-genie-these/resume-anglais.tex
-2022/09/15 | 186 | macros/latex/contrib/udes-genie-these/resume-francais.tex
-2022/09/15 | 34 | macros/latex/contrib/udes-genie-these/revue.tex
-2022/09/15 | 397 | macros/latex/contrib/udes-genie-these/symboles.tex
-2022/09/15 | 15 | macros/latex/contrib/udes-genie-these/tests.tex
-2022/09/15 | 62118 | macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
-2022/09/15 | 1962 | macros/latex/contrib/udes-genie-these/udes-genie-these.ins
-2022/09/15 | 113355 | macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
-2022/09/15 | 134261 | macros/latex/contrib/udes-genie-these.zip
+2022/09/24 | 284 | macros/latex/contrib/udes-genie-these/acronymes.tex
+2022/09/24 | 2904 | macros/latex/contrib/udes-genie-these/document.tex
+2022/09/24 | 337 | macros/latex/contrib/udes-genie-these/lexique.tex
+2022/09/24 | 192 | macros/latex/contrib/udes-genie-these/merci.tex
+2022/09/24 | 1408 | macros/latex/contrib/udes-genie-these/README.md
+2022/09/24 | 6716 | macros/latex/contrib/udes-genie-these/references.bib
+2022/09/24 | 165 | macros/latex/contrib/udes-genie-these/resume-anglais.tex
+2022/09/24 | 186 | macros/latex/contrib/udes-genie-these/resume-francais.tex
+2022/09/24 | 397 | macros/latex/contrib/udes-genie-these/symboles.tex
+2022/09/24 | 65997 | macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
+2022/09/24 | 1962 | macros/latex/contrib/udes-genie-these/udes-genie-these.ins
+2022/09/24 | 124734 | macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
+2022/09/24 | 144090 | macros/latex/contrib/udes-genie-these.zip
2021/02/23 | 11461 | macros/latex/contrib/udesoftec/CHANGELOG
2021/02/23 | 1794 | macros/latex/contrib/udesoftec/README
2021/02/23 | 9799 | macros/latex/contrib/udesoftec/udesoftec-bibcommon.sty
@@ -235002,6 +235016,78 @@
2006/04/21 | 15221 | macros/latex/contrib/wallpaper/wallpapermanual.pdf
2006/04/21 | 6919 | macros/latex/contrib/wallpaper/wallpaper.sty
2006/04/21 | 1278934 | macros/latex/contrib/wallpaper.zip
+2022/09/23 | 432846 | macros/latex/contrib/wargame/doc/compat.pdf
+2022/09/23 | 10097 | macros/latex/contrib/wargame/doc/README.md
+2022/09/23 | 184526 | macros/latex/contrib/wargame/doc/symbols.pdf
+2022/09/23 | 14095 | macros/latex/contrib/wargame/doc/tutorial/export.tex
+2022/09/23 | 583710 | macros/latex/contrib/wargame/doc/tutorial/game.pdf
+2022/09/23 | 66295 | macros/latex/contrib/wargame/doc/tutorial/game.sty
+2022/09/23 | 5683 | macros/latex/contrib/wargame/doc/tutorial/game.tex
+2022/09/23 | 1054 | macros/latex/contrib/wargame/doc/tutorial/Makefile
+2022/09/23 | 853 | macros/latex/contrib/wargame/doc/tutorial/patch.py
+2022/09/23 | 1254 | macros/latex/contrib/wargame/doc/tutorial/README.md
+2022/09/23 | 1305909 | macros/latex/contrib/wargame/doc/wargame.pdf
+2022/09/23 | 10097 | macros/latex/contrib/wargame/README.md
+2022/09/23 | 1191 | macros/latex/contrib/wargame/source/chit/core.dtx
+2022/09/23 | 3022 | macros/latex/contrib/wargame/source/chit/elements.dtx
+2022/09/23 | 12639 | macros/latex/contrib/wargame/source/chit/misc.dtx
+2022/09/23 | 18121 | macros/latex/contrib/wargame/source/chit/shape.dtx
+2022/09/23 | 7889 | macros/latex/contrib/wargame/source/hex/board.dtx
+2022/09/23 | 11607 | macros/latex/contrib/wargame/source/hex/coord.dtx
+2022/09/23 | 2290 | macros/latex/contrib/wargame/source/hex/core.dtx
+2022/09/23 | 2278 | macros/latex/contrib/wargame/source/hex/extra.dtx
+2022/09/23 | 4514 | macros/latex/contrib/wargame/source/hex/labels.dtx
+2022/09/23 | 10124 | macros/latex/contrib/wargame/source/hex/paths.dtx
+2022/09/23 | 3658 | macros/latex/contrib/wargame/source/hex/ridges.dtx
+2022/09/23 | 11934 | macros/latex/contrib/wargame/source/hex/shape.dtx
+2022/09/23 | 37441 | macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
+2022/09/23 | 119307 | macros/latex/contrib/wargame/source/hex/terrain/city.dtx
+2022/09/23 | 8133 | macros/latex/contrib/wargame/source/hex/terrain.dtx
+2022/09/23 | 39588 | macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
+2022/09/23 | 618 | macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
+2022/09/23 | 37340 | macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
+2022/09/23 | 61943 | macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
+2022/09/23 | 9853 | macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
+2022/09/23 | 24914 | macros/latex/contrib/wargame/source/hex/terrain/town.dtx
+2022/09/23 | 642 | macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
+2022/09/23 | 8296 | macros/latex/contrib/wargame/source/hex/terrain/village.dtx
+2022/09/23 | 46705 | macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
+2022/09/23 | 462 | macros/latex/contrib/wargame/source/hex/tile.dtx
+2022/09/23 | 2450 | macros/latex/contrib/wargame/source/hex/towns.dtx
+2022/09/23 | 8527 | macros/latex/contrib/wargame/source/Makefile
+2022/09/23 | 1359 | macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
+2022/09/23 | 3209 | macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
+2022/09/23 | 4715 | macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
+2022/09/23 | 1653 | macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
+2022/09/23 | 11120 | macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
+2022/09/23 | 413 | macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
+2022/09/23 | 742 | macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
+2022/09/23 | 5228 | macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
+2022/09/23 | 2274 | macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
+2022/09/23 | 2888 | macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
+2022/09/23 | 6573 | macros/latex/contrib/wargame/source/natoapp6c/core.dtx
+2022/09/23 | 2846 | macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
+2022/09/23 | 2267 | macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
+2022/09/23 | 15054 | macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
+2022/09/23 | 15937 | macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
+2022/09/23 | 15175 | macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
+2022/09/23 | 18195 | macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
+2022/09/23 | 4491 | macros/latex/contrib/wargame/source/natoapp6c/list.dtx
+2022/09/23 | 20779 | macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
+2022/09/23 | 89859 | macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
+2022/09/23 | 1807 | macros/latex/contrib/wargame/source/natoapp6c/text.dtx
+2022/09/23 | 1911 | macros/latex/contrib/wargame/source/natoapp6c/util.dtx
+2022/09/23 | 3210 | macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
+2022/09/23 | 932 | macros/latex/contrib/wargame/source/package.dtx
+2022/09/23 | 2009 | macros/latex/contrib/wargame/source/tests/chits.dtx
+2022/09/23 | 1944 | macros/latex/contrib/wargame/source/tests/map.dtx
+2022/09/23 | 4405 | macros/latex/contrib/wargame/source/tests/test.tex
+2022/09/23 | 39372 | macros/latex/contrib/wargame/source/util/core.dtx
+2022/09/23 | 124805 | macros/latex/contrib/wargame/source/utils/export.py
+2022/09/23 | 10300 | macros/latex/contrib/wargame/source/utils/svg2tikz.py
+2022/09/23 | 84635 | macros/latex/contrib/wargame/source/wargame.dtx
+2022/09/23 | 6966 | macros/latex/contrib/wargame/source/wargame.ins
+2022/09/24 | 2650456 | macros/latex/contrib/wargame.zip
2011/04/08 | 254870 | macros/latex/contrib/warning/warning-doc.pdf
2011/04/08 | 2368 | macros/latex/contrib/warning/warning-doc.tex
2001/08/17 | 2425 | macros/latex/contrib/warning/warning.sty
@@ -277249,9 +277335,9 @@
1994/03/14 | 129065 | support/texfilt/texfilt3.zip
1994/07/01 | 3776 | support/texfind
2017/08/08 | 739 | support/texfot/README
-2022/02/17 | 32559 | support/texfot/texfot.pdf
-2022/02/17 | 14719 | support/texfot/texfot.pl
-2022/02/17 | 35293 | support/texfot.zip
+2022/09/24 | 32363 | support/texfot/texfot.pdf
+2022/09/24 | 15696 | support/texfot/texfot.pl
+2022/09/24 | 35457 | support/texfot.zip
2005/07/14 | 14748 | support/texi2html/NEWS.1.76
2005/07/14 | 65 | support/texi2html/NEWS.1.76.sig
2005/07/14 | 20 | support/texi2html/texi2html-1.74-1.76.diff.gz
@@ -281484,7 +281570,7 @@
2022/03/15 | 1034648 | systems/texlive/tlnet/archive/asymptote.armhf-linux.r62706.tar.xz
2019/02/28 | 526632 | systems/texlive/tlnet/archive/asymptote-by-example-zh-cn.doc.r15878.tar.xz
2019/02/28 | 388 | systems/texlive/tlnet/archive/asymptote-by-example-zh-cn.r15878.tar.xz
-2022/08/08 | 2383372 | systems/texlive/tlnet/archive/asymptote.doc.r64072.tar.xz
+2022/09/24 | 2383368 | systems/texlive/tlnet/archive/asymptote.doc.r64491.tar.xz
2019/02/28 | 373604 | systems/texlive/tlnet/archive/asymptote-faq-zh-cn.doc.r15878.tar.xz
2019/02/28 | 380 | systems/texlive/tlnet/archive/asymptote-faq-zh-cn.r15878.tar.xz
2022/03/10 | 1174236 | systems/texlive/tlnet/archive/asymptote.i386-cygwin.r62546.tar.xz
@@ -281493,7 +281579,7 @@
2022/03/21 | 1428832 | systems/texlive/tlnet/archive/asymptote.i386-solaris.r62823.tar.xz
2019/02/28 | 898452 | systems/texlive/tlnet/archive/asymptote-manual-zh-cn.doc.r15878.tar.xz
2019/02/28 | 400 | systems/texlive/tlnet/archive/asymptote-manual-zh-cn.r15878.tar.xz
-2022/08/08 | 360716 | systems/texlive/tlnet/archive/asymptote.r64072.tar.xz
+2022/09/24 | 360716 | systems/texlive/tlnet/archive/asymptote.r64491.tar.xz
2022/03/11 | 5460840 | systems/texlive/tlnet/archive/asymptote.universal-darwin.r62610.tar.xz
2022/03/09 | 7536576 | systems/texlive/tlnet/archive/asymptote.win32.r62530.tar.xz
2022/03/10 | 1163024 | systems/texlive/tlnet/archive/asymptote.x86_64-cygwin.r62545.tar.xz
@@ -281979,7 +282065,7 @@
2020/04/22 | 5992 | systems/texlive/tlnet/archive/bearwear.source.r54826.tar.xz
2022/09/04 | 476940 | systems/texlive/tlnet/archive/beaulivre.doc.r64280.tar.xz
2022/09/04 | 4628 | systems/texlive/tlnet/archive/beaulivre.r64280.tar.xz
-2022/09/22 | 892072 | systems/texlive/tlnet/archive/beebe.r64457.tar.xz
+2022/09/24 | 892256 | systems/texlive/tlnet/archive/beebe.r64481.tar.xz
2022/05/08 | 785552 | systems/texlive/tlnet/archive/begingreek.doc.r63255.tar.xz
2022/05/08 | 1808 | systems/texlive/tlnet/archive/begingreek.r63255.tar.xz
2022/05/08 | 7856 | systems/texlive/tlnet/archive/begingreek.source.r63255.tar.xz
@@ -282219,8 +282305,8 @@
2021/12/30 | 6024 | systems/texlive/tlnet/archive/biblatex-spbasic.r61439.tar.xz
2019/02/28 | 70196 | systems/texlive/tlnet/archive/biblatex-subseries.doc.r43330.tar.xz
2019/02/28 | 1384 | systems/texlive/tlnet/archive/biblatex-subseries.r43330.tar.xz
-2022/09/08 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r64314.tar.xz
-2022/09/08 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r64314.tar.xz
+2022/09/24 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r64491.tar.xz
+2022/09/24 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r64491.tar.xz
2021/03/07 | 469432 | systems/texlive/tlnet/archive/biblatex-trad.doc.r58169.tar.xz
2021/03/07 | 4192 | systems/texlive/tlnet/archive/biblatex-trad.r58169.tar.xz
2019/02/28 | 70876 | systems/texlive/tlnet/archive/biblatex-true-citepages-omit.doc.r44653.tar.xz
@@ -282253,13 +282339,13 @@
2022/02/27 | 86352 | systems/texlive/tlnet/archive/bibtex8.amd64-freebsd.r62206.tar.xz
2022/02/27 | 78032 | systems/texlive/tlnet/archive/bibtex8.amd64-netbsd.r62220.tar.xz
2022/04/21 | 66864 | systems/texlive/tlnet/archive/bibtex8.armhf-linux.r63092.tar.xz
-2019/11/19 | 33164 | systems/texlive/tlnet/archive/bibtex8.doc.r52851.tar.xz
+2022/09/24 | 33168 | systems/texlive/tlnet/archive/bibtex8.doc.r64491.tar.xz
2022/03/01 | 53844 | systems/texlive/tlnet/archive/bibtex8.i386-cygwin.r62282.tar.xz
2022/02/27 | 71196 | systems/texlive/tlnet/archive/bibtex8.i386-freebsd.r62206.tar.xz
2022/02/27 | 79916 | systems/texlive/tlnet/archive/bibtex8.i386-linux.r62210.tar.xz
2022/02/27 | 62244 | systems/texlive/tlnet/archive/bibtex8.i386-netbsd.r62220.tar.xz
2022/02/27 | 76868 | systems/texlive/tlnet/archive/bibtex8.i386-solaris.r62206.tar.xz
-2019/11/19 | 9216 | systems/texlive/tlnet/archive/bibtex8.r52851.tar.xz
+2022/09/24 | 9328 | systems/texlive/tlnet/archive/bibtex8.r64491.tar.xz
2022/02/28 | 164916 | systems/texlive/tlnet/archive/bibtex8.universal-darwin.r62258.tar.xz
2022/02/27 | 146940 | systems/texlive/tlnet/archive/bibtex8.win32.r62199.tar.xz
2022/03/01 | 52996 | systems/texlive/tlnet/archive/bibtex8.x86_64-cygwin.r62279.tar.xz
@@ -282271,7 +282357,7 @@
2022/02/27 | 94836 | systems/texlive/tlnet/archive/bibtex.amd64-freebsd.r62206.tar.xz
2022/02/27 | 69536 | systems/texlive/tlnet/archive/bibtex.amd64-netbsd.r62220.tar.xz
2022/04/21 | 60232 | systems/texlive/tlnet/archive/bibtex.armhf-linux.r63092.tar.xz
-2022/03/05 | 399600 | systems/texlive/tlnet/archive/bibtex.doc.r62387.tar.xz
+2022/09/24 | 399604 | systems/texlive/tlnet/archive/bibtex.doc.r64491.tar.xz
2022/03/10 | 47352 | systems/texlive/tlnet/archive/bibtex.i386-cygwin.r62546.tar.xz
2022/02/27 | 71980 | systems/texlive/tlnet/archive/bibtex.i386-freebsd.r62206.tar.xz
2022/03/09 | 73160 | systems/texlive/tlnet/archive/bibtex.i386-linux.r62534.tar.xz
@@ -282279,19 +282365,19 @@
2022/02/27 | 71396 | systems/texlive/tlnet/archive/bibtex.i386-solaris.r62206.tar.xz
2020/12/15 | 12284 | systems/texlive/tlnet/archive/bibtexperllibs.r57137.tar.xz
2020/12/15 | 144152 | systems/texlive/tlnet/archive/bibtexperllibs.source.r57137.tar.xz
-2022/03/05 | 14904 | systems/texlive/tlnet/archive/bibtex.r62387.tar.xz
+2022/09/24 | 14880 | systems/texlive/tlnet/archive/bibtex.r64491.tar.xz
2022/03/01 | 5744720 | systems/texlive/tlnet/archive/bibtexu.aarch64-linux.r62280.tar.xz
2022/02/27 | 5734380 | systems/texlive/tlnet/archive/bibtexu.amd64-freebsd.r62206.tar.xz
2022/02/27 | 5725496 | systems/texlive/tlnet/archive/bibtexu.amd64-netbsd.r62220.tar.xz
2022/04/21 | 5660784 | systems/texlive/tlnet/archive/bibtexu.armhf-linux.r63092.tar.xz
-2022/09/13 | 67504 | systems/texlive/tlnet/archive/bibtexu.doc.r64339.tar.xz
+2022/09/24 | 67504 | systems/texlive/tlnet/archive/bibtexu.doc.r64491.tar.xz
2022/03/01 | 5731264 | systems/texlive/tlnet/archive/bibtexu.i386-cygwin.r62282.tar.xz
2022/02/27 | 5696904 | systems/texlive/tlnet/archive/bibtexu.i386-freebsd.r62206.tar.xz
2022/02/27 | 5958876 | systems/texlive/tlnet/archive/bibtexu.i386-linux.r62210.tar.xz
2022/02/27 | 5681652 | systems/texlive/tlnet/archive/bibtexu.i386-netbsd.r62220.tar.xz
2022/02/27 | 6045440 | systems/texlive/tlnet/archive/bibtexu.i386-solaris.r62206.tar.xz
2022/02/28 | 178560 | systems/texlive/tlnet/archive/bibtex.universal-darwin.r62258.tar.xz
-2022/09/13 | 300 | systems/texlive/tlnet/archive/bibtexu.r64339.tar.xz
+2022/09/24 | 624 | systems/texlive/tlnet/archive/bibtexu.r64491.tar.xz
2022/02/28 | 11758296 | systems/texlive/tlnet/archive/bibtexu.universal-darwin.r62258.tar.xz
2022/03/01 | 5711812 | systems/texlive/tlnet/archive/bibtexu.x86_64-cygwin.r62279.tar.xz
2022/02/27 | 5699056 | systems/texlive/tlnet/archive/bibtexu.x86_64-darwinlegacy.r62206.tar.xz
@@ -282977,13 +283063,13 @@
2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.amd64-freebsd.r64151.tar.xz
2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.amd64-netbsd.r64151.tar.xz
2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.armhf-linux.r64151.tar.xz
-2022/09/19 | 244112 | systems/texlive/tlnet/archive/citation-style-language.doc.r64429.tar.xz
+2022/09/24 | 244224 | systems/texlive/tlnet/archive/citation-style-language.doc.r64491.tar.xz
2022/08/20 | 360 | systems/texlive/tlnet/archive/citation-style-language.i386-cygwin.r64151.tar.xz
2022/08/20 | 360 | systems/texlive/tlnet/archive/citation-style-language.i386-freebsd.r64151.tar.xz
2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.i386-linux.r64151.tar.xz
2022/08/20 | 360 | systems/texlive/tlnet/archive/citation-style-language.i386-netbsd.r64151.tar.xz
2022/08/20 | 360 | systems/texlive/tlnet/archive/citation-style-language.i386-solaris.r64151.tar.xz
-2022/09/19 | 129352 | systems/texlive/tlnet/archive/citation-style-language.r64429.tar.xz
+2022/09/24 | 129716 | systems/texlive/tlnet/archive/citation-style-language.r64491.tar.xz
2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.universal-darwin.r64151.tar.xz
2022/08/20 | 704 | systems/texlive/tlnet/archive/citation-style-language.win32.r64151.tar.xz
2022/08/20 | 364 | systems/texlive/tlnet/archive/citation-style-language.x86_64-cygwin.r64151.tar.xz
@@ -283260,8 +283346,8 @@
2020/10/20 | 231020 | systems/texlive/tlnet/archive/color-edits.doc.r56707.tar.xz
2020/10/20 | 1920 | systems/texlive/tlnet/archive/color-edits.r56707.tar.xz
2020/10/20 | 7604 | systems/texlive/tlnet/archive/color-edits.source.r56707.tar.xz
-2022/09/23 | 21712 | systems/texlive/tlnet/archive/colorframed.doc.r64467.tar.xz
-2022/09/23 | 2416 | systems/texlive/tlnet/archive/colorframed.r64467.tar.xz
+2022/09/24 | 23704 | systems/texlive/tlnet/archive/colorframed.doc.r64491.tar.xz
+2022/09/24 | 2692 | systems/texlive/tlnet/archive/colorframed.r64491.tar.xz
2019/02/28 | 784 | systems/texlive/tlnet/archive/colorinfo.doc.r15878.tar.xz
2019/02/28 | 2020 | systems/texlive/tlnet/archive/colorinfo.r15878.tar.xz
2019/02/28 | 25984 | systems/texlive/tlnet/archive/coloring.doc.r41042.tar.xz
@@ -286071,8 +286157,8 @@
2021/08/04 | 6620 | systems/texlive/tlnet/archive/graphicscache.source.r60150.tar.xz
2019/02/28 | 876 | systems/texlive/tlnet/archive/graphics-cfg.doc.r41448.tar.xz
2019/02/28 | 1160 | systems/texlive/tlnet/archive/graphics-cfg.r41448.tar.xz
-2022/04/17 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r63042.tar.xz
-2022/04/17 | 10736 | systems/texlive/tlnet/archive/graphics-def.r63042.tar.xz
+2022/09/24 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r64487.tar.xz
+2022/09/24 | 10740 | systems/texlive/tlnet/archive/graphics-def.r64487.tar.xz
2022/06/10 | 2504628 | systems/texlive/tlnet/archive/graphics.doc.r63514.tar.xz
2022/06/14 | 2236 | systems/texlive/tlnet/archive/graphics-pln.doc.r63579.tar.xz
2022/06/14 | 8912 | systems/texlive/tlnet/archive/graphics-pln.r63579.tar.xz
@@ -286470,9 +286556,9 @@
2019/02/28 | 186676 | systems/texlive/tlnet/archive/hypernat.doc.r17358.tar.xz
2019/02/28 | 1916 | systems/texlive/tlnet/archive/hypernat.r17358.tar.xz
2019/02/28 | 15680 | systems/texlive/tlnet/archive/hyper.r17357.tar.xz
-2022/06/21 | 3681880 | systems/texlive/tlnet/archive/hyperref.doc.r63665.tar.xz
-2022/06/21 | 91032 | systems/texlive/tlnet/archive/hyperref.r63665.tar.xz
-2022/06/21 | 415140 | systems/texlive/tlnet/archive/hyperref.source.r63665.tar.xz
+2022/09/24 | 3680204 | systems/texlive/tlnet/archive/hyperref.doc.r64491.tar.xz
+2022/09/24 | 91056 | systems/texlive/tlnet/archive/hyperref.r64491.tar.xz
+2022/09/24 | 415160 | systems/texlive/tlnet/archive/hyperref.source.r64491.tar.xz
2019/02/28 | 32960 | systems/texlive/tlnet/archive/hyper.source.r17357.tar.xz
2020/11/23 | 356 | systems/texlive/tlnet/archive/hyperxmp.aarch64-linux.r56984.tar.xz
2020/11/23 | 356 | systems/texlive/tlnet/archive/hyperxmp.amd64-freebsd.r56984.tar.xz
@@ -288507,8 +288593,8 @@
2019/02/28 | 104804 | systems/texlive/tlnet/archive/mdwtools.source.r15878.tar.xz
2021/08/29 | 221844 | systems/texlive/tlnet/archive/mecaso.doc.r60346.tar.xz
2021/08/29 | 2832 | systems/texlive/tlnet/archive/mecaso.r60346.tar.xz
-2022/09/14 | 128748 | systems/texlive/tlnet/archive/media4svg.doc.r64377.tar.xz
-2022/09/14 | 8432 | systems/texlive/tlnet/archive/media4svg.r64377.tar.xz
+2022/09/24 | 170472 | systems/texlive/tlnet/archive/media4svg.doc.r64491.tar.xz
+2022/09/24 | 8588 | systems/texlive/tlnet/archive/media4svg.r64491.tar.xz
2022/08/05 | 3637360 | systems/texlive/tlnet/archive/media9.doc.r64047.tar.xz
2022/08/05 | 1895928 | systems/texlive/tlnet/archive/media9.r64047.tar.xz
2022/08/05 | 1776700 | systems/texlive/tlnet/archive/media9.source.r64047.tar.xz
@@ -289612,8 +289698,8 @@
2021/05/24 | 2392 | systems/texlive/tlnet/archive/ot-tableau.r59318.tar.xz
2019/02/28 | 60352 | systems/texlive/tlnet/archive/oubraces.doc.r21833.tar.xz
2019/02/28 | 1660 | systems/texlive/tlnet/archive/oubraces.r21833.tar.xz
-2022/09/08 | 322096 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r64314.tar.xz
-2022/09/08 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r64314.tar.xz
+2022/09/24 | 322096 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r64491.tar.xz
+2022/09/24 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r64491.tar.xz
2020/03/13 | 1596 | systems/texlive/tlnet/archive/outerhbox.r54254.tar.xz
2019/02/28 | 234580 | systems/texlive/tlnet/archive/outline.doc.r18360.tar.xz
2019/02/28 | 1528 | systems/texlive/tlnet/archive/outline.r18360.tar.xz
@@ -291671,8 +291757,8 @@
2019/02/28 | 292656 | systems/texlive/tlnet/archive/simplecv.doc.r35537.tar.xz
2019/02/28 | 2112 | systems/texlive/tlnet/archive/simplecv.r35537.tar.xz
2019/02/28 | 5844 | systems/texlive/tlnet/archive/simplecv.source.r35537.tar.xz
-2022/09/17 | 1933616 | systems/texlive/tlnet/archive/simpleicons.doc.r64413.tar.xz
-2022/09/17 | 2630556 | systems/texlive/tlnet/archive/simpleicons.r64413.tar.xz
+2022/09/24 | 1938380 | systems/texlive/tlnet/archive/simpleicons.doc.r64491.tar.xz
+2022/09/24 | 2637940 | systems/texlive/tlnet/archive/simpleicons.r64491.tar.xz
2019/02/28 | 224844 | systems/texlive/tlnet/archive/simpleinvoice.doc.r45673.tar.xz
2019/02/28 | 2420 | systems/texlive/tlnet/archive/simpleinvoice.r45673.tar.xz
2020/04/28 | 332620 | systems/texlive/tlnet/archive/simplekv.doc.r54915.tar.xz
@@ -292547,7 +292633,7 @@
2022/03/05 | 164864 | systems/texlive/tlnet/archive/tex.i386-solaris.r62391.tar.xz
2019/02/28 | 1956 | systems/texlive/tlnet/archive/texilikechaps.r28553.tar.xz
2019/02/28 | 956 | systems/texlive/tlnet/archive/texilikecover.r15878.tar.xz
-2022/09/20 | 96748 | systems/texlive/tlnet/archive/texinfo.r64438.tar.xz
+2022/09/24 | 96848 | systems/texlive/tlnet/archive/texinfo.r64481.tar.xz
2019/02/28 | 1336 | systems/texlive/tlnet/archive/tex-ini-files.doc.r40533.tar.xz
2019/02/28 | 3264 | systems/texlive/tlnet/archive/tex-ini-files.r40533.tar.xz
2019/02/28 | 36596 | systems/texlive/tlnet/archive/tex-label.doc.r16372.tar.xz
@@ -292614,7 +292700,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2022/09/23 | 421328 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64460.tar.xz
+2022/09/24 | 421296 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64481.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
@@ -292638,7 +292724,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2022/09/23 | 113632 | systems/texlive/tlnet/archive/texlive-scripts.r64460.tar.xz
+2022/09/24 | 113652 | systems/texlive/tlnet/archive/texlive-scripts.r64481.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2022/04/19 | 36296 | systems/texlive/tlnet/archive/texlive-scripts.win32.r63068.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -293136,8 +293222,8 @@
2021/01/22 | 8444 | systems/texlive/tlnet/archive/tkz-berge.r57485.tar.xz
2022/07/16 | 40180 | systems/texlive/tlnet/archive/tkz-doc.doc.r63902.tar.xz
2022/07/16 | 536 | systems/texlive/tlnet/archive/tkz-doc.r63902.tar.xz
-2022/09/23 | 1165128 | systems/texlive/tlnet/archive/tkz-euclide.doc.r64473.tar.xz
-2022/09/23 | 39200 | systems/texlive/tlnet/archive/tkz-euclide.r64473.tar.xz
+2022/09/24 | 1165688 | systems/texlive/tlnet/archive/tkz-euclide.doc.r64491.tar.xz
+2022/09/24 | 39184 | systems/texlive/tlnet/archive/tkz-euclide.r64491.tar.xz
2022/07/16 | 96832 | systems/texlive/tlnet/archive/tkzexample.doc.r63908.tar.xz
2022/07/16 | 3872 | systems/texlive/tlnet/archive/tkzexample.r63908.tar.xz
2022/02/09 | 749696 | systems/texlive/tlnet/archive/tkz-fct.doc.r61949.tar.xz
@@ -293171,7 +293257,7 @@
2019/02/28 | 348 | systems/texlive/tlnet/archive/tlcockpit.x86_64-linuxmusl.r47036.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/tlcockpit.x86_64-linux.r46798.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/tlcockpit.x86_64-solaris.r46798.tar.xz
-2022/09/23 | 12448000 | systems/texlive/tlnet/archive/tlgs.win32.r64478.tar.xz
+2022/09/24 | 12448600 | systems/texlive/tlnet/archive/tlgs.win32.r64483.tar.xz
2021/09/24 | 171580 | systems/texlive/tlnet/archive/tlmgrbasics.doc.r60588.tar.xz
2021/09/24 | 428 | systems/texlive/tlnet/archive/tlmgrbasics.r60588.tar.xz
2021/05/07 | 444724 | systems/texlive/tlnet/archive/tlmgr-intro-zh-cn.doc.r59100.tar.xz
@@ -293470,9 +293556,9 @@
2022/08/14 | 40864 | systems/texlive/tlnet/archive/ucs.source.r64114.tar.xz
2019/02/28 | 6280 | systems/texlive/tlnet/archive/ucthesis.doc.r15878.tar.xz
2019/02/28 | 19284 | systems/texlive/tlnet/archive/ucthesis.r15878.tar.xz
-2022/09/17 | 116944 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64416.tar.xz
-2022/09/17 | 6748 | systems/texlive/tlnet/archive/udes-genie-these.r64416.tar.xz
-2022/09/17 | 13716 | systems/texlive/tlnet/archive/udes-genie-these.source.r64416.tar.xz
+2022/09/24 | 116944 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64491.tar.xz
+2022/09/24 | 7048 | systems/texlive/tlnet/archive/udes-genie-these.r64491.tar.xz
+2022/09/24 | 13716 | systems/texlive/tlnet/archive/udes-genie-these.source.r64491.tar.xz
2021/02/24 | 477784 | systems/texlive/tlnet/archive/udesoftec.doc.r57866.tar.xz
2021/02/24 | 108164 | systems/texlive/tlnet/archive/udesoftec.r57866.tar.xz
2021/02/24 | 44528 | systems/texlive/tlnet/archive/udesoftec.source.r57866.tar.xz
@@ -293724,21 +293810,21 @@
2022/04/19 | 1889696 | systems/texlive/tlnet/archive/utfsym.r63076.tar.xz
2019/02/28 | 2820 | systems/texlive/tlnet/archive/utopia.doc.r15878.tar.xz
2019/02/28 | 205556 | systems/texlive/tlnet/archive/utopia.r15878.tar.xz
-2022/09/08 | 138448 | systems/texlive/tlnet/archive/ut-thesis.doc.r64314.tar.xz
-2022/09/08 | 2632 | systems/texlive/tlnet/archive/ut-thesis.r64314.tar.xz
-2022/09/08 | 6716 | systems/texlive/tlnet/archive/ut-thesis.source.r64314.tar.xz
+2022/09/24 | 138448 | systems/texlive/tlnet/archive/ut-thesis.doc.r64491.tar.xz
+2022/09/24 | 2632 | systems/texlive/tlnet/archive/ut-thesis.r64491.tar.xz
+2022/09/24 | 6712 | systems/texlive/tlnet/archive/ut-thesis.source.r64491.tar.xz
2021/09/07 | 127872 | systems/texlive/tlnet/archive/uwa-colours.doc.r60443.tar.xz
2021/09/07 | 1228 | systems/texlive/tlnet/archive/uwa-colours.r60443.tar.xz
2021/09/07 | 3016 | systems/texlive/tlnet/archive/uwa-colours.source.r60443.tar.xz
-2022/09/08 | 57656 | systems/texlive/tlnet/archive/uwa-letterhead.doc.r64314.tar.xz
-2022/09/08 | 3348 | systems/texlive/tlnet/archive/uwa-letterhead.r64314.tar.xz
-2022/09/08 | 6568 | systems/texlive/tlnet/archive/uwa-letterhead.source.r64314.tar.xz
-2022/09/08 | 52740 | systems/texlive/tlnet/archive/uwa-pcf.doc.r64314.tar.xz
-2022/09/08 | 2924 | systems/texlive/tlnet/archive/uwa-pcf.r64314.tar.xz
-2022/09/08 | 6060 | systems/texlive/tlnet/archive/uwa-pcf.source.r64314.tar.xz
-2022/09/08 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r64314.tar.xz
-2022/09/08 | 2588 | systems/texlive/tlnet/archive/uwa-pif.r64314.tar.xz
-2022/09/08 | 5692 | systems/texlive/tlnet/archive/uwa-pif.source.r64314.tar.xz
+2022/09/24 | 57656 | systems/texlive/tlnet/archive/uwa-letterhead.doc.r64491.tar.xz
+2022/09/24 | 3348 | systems/texlive/tlnet/archive/uwa-letterhead.r64491.tar.xz
+2022/09/24 | 6568 | systems/texlive/tlnet/archive/uwa-letterhead.source.r64491.tar.xz
+2022/09/24 | 52740 | systems/texlive/tlnet/archive/uwa-pcf.doc.r64491.tar.xz
+2022/09/24 | 2924 | systems/texlive/tlnet/archive/uwa-pcf.r64491.tar.xz
+2022/09/24 | 6060 | systems/texlive/tlnet/archive/uwa-pcf.source.r64491.tar.xz
+2022/09/24 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r64491.tar.xz
+2022/09/24 | 2592 | systems/texlive/tlnet/archive/uwa-pif.r64491.tar.xz
+2022/09/24 | 5696 | systems/texlive/tlnet/archive/uwa-pif.source.r64491.tar.xz
2019/02/28 | 11764 | systems/texlive/tlnet/archive/uwmslide.doc.r27354.tar.xz
2019/02/28 | 3916 | systems/texlive/tlnet/archive/uwmslide.r27354.tar.xz
2019/02/28 | 137544 | systems/texlive/tlnet/archive/uwthesis.doc.r15878.tar.xz
@@ -294477,16 +294563,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
2022/07/17 | 124404 | systems/texlive/tlnet/install-tl
-2022/09/23 | 5831663 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/09/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/09/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/09/24 | 5831656 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/09/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/09/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2022/09/23 | 20439001 | systems/texlive/tlnet/install-tl-windows.exe
-2022/09/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/09/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/09/23 | 25516574 | systems/texlive/tlnet/install-tl.zip
-2022/09/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/09/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/09/24 | 20437483 | systems/texlive/tlnet/install-tl-windows.exe
+2022/09/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/09/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/09/24 | 25516589 | systems/texlive/tlnet/install-tl.zip
+2022/09/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/09/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2022/04/03 | 1229 | systems/texlive/tlnet/README.md
2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022
2022/02/28 | 7791 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -294496,7 +294582,7 @@
2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2022/09/12 | 49769 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2022/09/22 | 7084 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/09/23 | 7157 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/07/21 | 222477 | 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
@@ -294539,12 +294625,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2022/09/23 | 17654875 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/09/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/09/24 | 17656758 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/09/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2022/09/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/09/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/09/23 | 2411576 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/09/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/09/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/09/24 | 2411336 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2022/09/14 | 58922 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2022/08/01 | 42206 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -299904,7 +299990,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
-2022/09/23 | 665028 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/09/24 | 665028 | 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
@@ -301613,9 +301699,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2022/07/26 | 39695 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2022/08/27 | 43640 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/09/23 | 295662 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/09/23 | 1496962 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/09/23 | 1376125 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/09/24 | 295610 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/09/24 | 1498681 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/09/24 | 1375670 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2022/07/26 | 13519 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2022/08/27 | 14450 | 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
@@ -301861,102 +301947,102 @@
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
-2022/09/23 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/09/23 | 57318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/09/23 | 1161750 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/09/23 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/09/23 | 35264 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/09/23 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/09/23 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/09/23 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/09/23 | 31562 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/09/23 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/09/23 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/09/23 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/09/23 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/09/23 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2022/09/23 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2022/09/23 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/09/23 | 481895 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/09/23 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2022/09/23 | 325981 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/09/23 | 45796 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/09/23 | 135466 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2022/09/23 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/09/23 | 112980 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/09/23 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/09/23 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/09/23 | 63242 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/09/23 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/09/23 | 79065 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/09/23 | 81449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2022/09/23 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/09/23 | 25118 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/09/23 | 112878 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/09/23 | 73265 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/09/23 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/09/23 | 43888 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/09/23 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/09/23 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/09/23 | 169677 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/09/23 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2022/09/23 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2022/09/23 | 30570 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2022/09/23 | 682215 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/09/23 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/09/23 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/09/23 | 103598 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/09/23 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/09/23 | 74100 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/09/23 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/09/23 | 8824 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2022/09/23 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2022/09/23 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/09/23 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2022/09/23 | 140013 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/09/23 | 325484 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2022/09/23 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/09/23 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/09/23 | 35231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/09/23 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/09/23 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/09/23 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/09/23 | 213847 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/09/23 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2022/09/23 | 824997 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/09/23 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/09/23 | 245151 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/09/23 | 88485 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/09/23 | 1323743 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2022/09/23 | 23951 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2022/09/23 | 37507 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/09/23 | 72978 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/09/23 | 58632 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/09/23 | 769653 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/09/23 | 1503054 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/09/23 | 52628 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/09/23 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/09/23 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/09/23 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/09/23 | 70940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2022/09/23 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/09/23 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/09/23 | 107439 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2022/09/23 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/09/23 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/09/23 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/09/23 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2022/09/23 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/09/23 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/09/23 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/09/23 | 630433 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/09/23 | 43526 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/09/23 | 295593 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/09/23 | 1495708 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/09/23 | 1375818 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/09/23 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/09/24 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/09/24 | 57317 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/09/24 | 1161750 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/09/24 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/09/24 | 35264 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/09/24 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/09/24 | 95468 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/09/24 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/09/24 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/09/24 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/09/24 | 37050 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/09/24 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/09/24 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/09/24 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/09/24 | 103247 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/09/24 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/09/24 | 481893 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/09/24 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/09/24 | 325981 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/09/24 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/09/24 | 135466 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/09/24 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/09/24 | 112979 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/09/24 | 48851 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/09/24 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/09/24 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/09/24 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/09/24 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/09/24 | 81446 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/09/24 | 295946 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/09/24 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/09/24 | 112880 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/09/24 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/09/24 | 115580 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/09/24 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/09/24 | 565081 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/09/24 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/09/24 | 169677 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/09/24 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/09/24 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/09/24 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/09/24 | 682213 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/09/24 | 599106 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/09/24 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/09/24 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/09/24 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/09/24 | 74100 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/09/24 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/09/24 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/09/24 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/09/24 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/09/24 | 104923 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/09/24 | 140014 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/09/24 | 325483 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/09/24 | 181724 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/09/24 | 55318 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/09/24 | 35231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/09/24 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/09/24 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/09/24 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/09/24 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/09/24 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/09/24 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/09/24 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/09/24 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/09/24 | 88483 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/09/24 | 1323744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/09/24 | 23950 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/09/24 | 37506 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/09/24 | 72979 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/09/24 | 58633 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/09/24 | 769649 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/09/24 | 1503055 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/09/24 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/09/24 | 63802 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/09/24 | 27463 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/09/24 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/09/24 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/09/24 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/09/24 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/09/24 | 107437 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/09/24 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/09/24 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/09/24 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/09/24 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/09/24 | 73685 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/09/24 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/09/24 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/09/24 | 630434 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/09/24 | 43528 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/09/24 | 295585 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/09/24 | 1495520 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/09/24 | 1376393 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/09/24 | 14434 | 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
-2022/09/23 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/09/24 | 1172 | 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
@@ -302463,7 +302549,7 @@
2022/02/22 | 6917 | 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
-2022/09/23 | 931 | systems/win32/miktex/tm/packages/pr.ini
+2022/09/24 | 931 | 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
@@ -304205,8 +304291,8 @@
2007/02/12 | 217429 | systems/win32/texshell32/WinTeXShell32src.zip
2007/02/12 | 6896 | systems/win32/texshell32/WinTeXShell32.txt
2007/02/12 | 395234 | systems/win32/texshell32/WinTeXShell32.zip
-2022/09/20 | 2895 | systems/win32/TLW64/00README.TLW64
-2022/04/15 | 60219251 | systems/win32/TLW64/gs9561w64full-gpl.exe
+2022/09/23 | 2895 | systems/win32/TLW64/00README.TLW64
+2022/09/22 | 60444303 | systems/win32/TLW64/gs1000w64full-gpl.exe
2022/09/06 | 124711815 | systems/win32/TLW64/tl-win64.zip
1996/11/26 | 1822 | systems/win32/tsconfig/readme
1996/11/26 | 30343 | systems/win32/tsconfig/tsconfig.zip
@@ -304426,7 +304512,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2022/09/24 | 186 | timestamp
+2022/09/25 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2022/02/28 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 4239233b92..0183a66580 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 2491d8e8d0..ef8c206c04 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,9 +1,225 @@
+2022/09/24 | 96848 | systems/texlive/tlnet/archive/texinfo.r64481.tar.xz
+2022/09/24 | 95468 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/09/24 | 933 | graphics/pgf/contrib/tikz-ext/README.md
+2022/09/24 | 9328 | systems/texlive/tlnet/archive/bibtex8.r64491.tar.xz
+2022/09/24 | 931 | systems/win32/miktex/tm/packages/pr.ini
+2022/09/24 | 921574 | language/sanskrit/sktdoc.ps
+2022/09/24 | 91420 | language/sanskrit/README.pdf
+2022/09/24 | 91056 | systems/texlive/tlnet/archive/hyperref.r64491.tar.xz
+2022/09/24 | 892256 | systems/texlive/tlnet/archive/beebe.r64481.tar.xz
+2022/09/24 | 88483 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/09/24 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/09/24 | 8730 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex
+2022/09/24 | 8719 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
+2022/09/24 | 8588 | systems/texlive/tlnet/archive/media4svg.r64491.tar.xz
+2022/09/24 | 852 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
+2022/09/24 | 8419 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.ortho.tex
+2022/09/24 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/09/24 | 81446 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/09/24 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/09/24 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/09/24 | 769649 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/09/24 | 74100 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/09/24 | 73685 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/09/24 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/09/24 | 72979 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/09/24 | 7169 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
+2022/09/24 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/09/24 | 7048 | systems/texlive/tlnet/archive/udes-genie-these.r64491.tar.xz
+2022/09/24 | 682213 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/09/24 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/09/24 | 67504 | systems/texlive/tlnet/archive/bibtexu.doc.r64491.tar.xz
+2022/09/24 | 6716 | macros/latex/contrib/udes-genie-these/references.bib
+2022/09/24 | 6712 | systems/texlive/tlnet/archive/ut-thesis.source.r64491.tar.xz
+2022/09/24 | 665028 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/09/24 | 66426 | macros/latex/contrib/crefthe.zip
+2022/09/24 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/09/24 | 65997 | macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
+2022/09/24 | 6568 | systems/texlive/tlnet/archive/uwa-letterhead.source.r64491.tar.xz
+2022/09/24 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/09/24 | 63802 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/09/24 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/09/24 | 630434 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/09/24 | 624 | systems/texlive/tlnet/archive/bibtexu.r64491.tar.xz
+2022/09/24 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/09/24 | 6060 | systems/texlive/tlnet/archive/uwa-pcf.source.r64491.tar.xz
+2022/09/24 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r64487.tar.xz
+2022/09/24 | 599106 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/09/24 | 58633 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/09/24 | 5831656 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/09/24 | 5784 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex
+2022/09/24 | 57656 | systems/texlive/tlnet/archive/uwa-letterhead.doc.r64491.tar.xz
+2022/09/24 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/09/24 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/09/24 | 57317 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/09/24 | 5696 | systems/texlive/tlnet/archive/uwa-pif.source.r64491.tar.xz
+2022/09/24 | 565081 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/09/24 | 557856 | graphics/pgf/contrib/tikz-ext.zip
+2022/09/24 | 55318 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/09/24 | 5465 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex
+2022/09/24 | 53458 | macros/latex/contrib/crefthe/crefthe-doc.pdf
+2022/09/24 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/09/24 | 52740 | systems/texlive/tlnet/archive/uwa-pcf.doc.r64491.tar.xz
+2022/09/24 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/09/24 | 525958 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
+2022/09/24 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/09/24 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/09/24 | 513436 | systems/texlive/tlnet/archive/biblatex-swiss-legal.doc.r64491.tar.xz
+2022/09/24 | 50500 | systems/texlive/tlnet/archive/uwa-pif.doc.r64491.tar.xz
+2022/09/24 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/09/24 | 48851 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/09/24 | 481893 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/09/24 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/09/24 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/09/24 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/09/24 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/09/24 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/09/24 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/09/24 | 439023 | language/sanskrit/sktdoc.pdf
+2022/09/24 | 439023 | language/sanskrit/ps-type1/sktdoc.pdf
+2022/09/24 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/09/24 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/09/24 | 43528 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/09/24 | 421296 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64481.tar.xz
+2022/09/24 | 415160 | systems/texlive/tlnet/archive/hyperref.source.r64491.tar.xz
+2022/09/24 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/09/24 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/09/24 | 4047 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex
+2022/09/24 | 399604 | systems/texlive/tlnet/archive/bibtex.doc.r64491.tar.xz
+2022/09/24 | 397 | macros/latex/contrib/udes-genie-these/symboles.tex
+2022/09/24 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/09/24 | 39184 | systems/texlive/tlnet/archive/tkz-euclide.r64491.tar.xz
+2022/09/24 | 37506 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/09/24 | 37050 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/09/24 | 3680204 | systems/texlive/tlnet/archive/hyperref.doc.r64491.tar.xz
+2022/09/24 | 3661 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex
+2022/09/24 | 360716 | systems/texlive/tlnet/archive/asymptote.r64491.tar.xz
+2022/09/24 | 35457 | support/texfot.zip
+2022/09/24 | 3526 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
+2022/09/24 | 35264 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/09/24 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/09/24 | 35231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/09/24 | 3389 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex
+2022/09/24 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/09/24 | 337 | macros/latex/contrib/udes-genie-these/lexique.tex
+2022/09/24 | 3348 | systems/texlive/tlnet/archive/uwa-letterhead.r64491.tar.xz
+2022/09/24 | 33168 | systems/texlive/tlnet/archive/bibtex8.doc.r64491.tar.xz
+2022/09/24 | 325981 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/09/24 | 325483 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/09/24 | 32363 | support/texfot/texfot.pdf
+2022/09/24 | 322096 | systems/texlive/tlnet/archive/oup-authoring-template.doc.r64491.tar.xz
+2022/09/24 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/09/24 | 3179 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
+2022/09/24 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/09/24 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/09/24 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/09/24 | 2962 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex
+2022/09/24 | 295946 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/09/24 | 295610 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/09/24 | 295585 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/09/24 | 2924 | systems/texlive/tlnet/archive/uwa-pcf.r64491.tar.xz
+2022/09/24 | 2904 | macros/latex/contrib/udes-genie-these/document.tex
+2022/09/24 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/09/24 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/09/24 | 284 | macros/latex/contrib/udes-genie-these/acronymes.tex
+2022/09/24 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/09/24 | 2796 | macros/latex/contrib/crefthe/README.md
+2022/09/24 | 27463 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/09/24 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/09/24 | 2692 | systems/texlive/tlnet/archive/colorframed.r64491.tar.xz
+2022/09/24 | 2672 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex
+2022/09/24 | 2650456 | macros/latex/contrib/wargame.zip
+2022/09/24 | 2637940 | systems/texlive/tlnet/archive/simpleicons.r64491.tar.xz
+2022/09/24 | 2632 | systems/texlive/tlnet/archive/ut-thesis.r64491.tar.xz
+2022/09/24 | 2593 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex
+2022/09/24 | 2592 | systems/texlive/tlnet/archive/uwa-pif.r64491.tar.xz
+2022/09/24 | 25516589 | systems/texlive/tlnet/install-tl.zip
+2022/09/24 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/09/24 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/09/24 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/09/24 | 244224 | systems/texlive/tlnet/archive/citation-style-language.doc.r64491.tar.xz
+2022/09/24 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/09/24 | 2411336 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/09/24 | 23950 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/09/24 | 2383368 | systems/texlive/tlnet/archive/asymptote.doc.r64491.tar.xz
+2022/09/24 | 23704 | systems/texlive/tlnet/archive/colorframed.doc.r64491.tar.xz
+2022/09/24 | 213849 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/09/24 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/09/24 | 20437483 | systems/texlive/tlnet/install-tl-windows.exe
+2022/09/24 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/09/24 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/09/24 | 1962 | macros/latex/contrib/udes-genie-these/udes-genie-these.ins
+2022/09/24 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/09/24 | 1938380 | systems/texlive/tlnet/archive/simpleicons.doc.r64491.tar.xz
+2022/09/24 | 1936970 | language/sanskrit.zip
+2022/09/24 | 192 | macros/latex/contrib/udes-genie-these/merci.tex
+2022/09/24 | 19106 | macros/latex/contrib/crefthe/LICENSE
+2022/09/24 | 186 | macros/latex/contrib/udes-genie-these/resume-francais.tex
+2022/09/24 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/09/24 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/09/24 | 181724 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/09/24 | 18148 | systems/texlive/tlnet/archive/biblatex-swiss-legal.r64491.tar.xz
+2022/09/24 | 17656758 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/09/24 | 17492 | systems/texlive/tlnet/archive/oup-authoring-template.r64491.tar.xz
+2022/09/24 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/09/24 | 170472 | systems/texlive/tlnet/archive/media4svg.doc.r64491.tar.xz
+2022/09/24 | 169677 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/09/24 | 1689 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex
+2022/09/24 | 165 | macros/latex/contrib/udes-genie-these/resume-anglais.tex
+2022/09/24 | 15696 | support/texfot/texfot.pl
+2022/09/24 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/09/24 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/09/24 | 1535 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex
+2022/09/24 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/09/24 | 151888 | install/macros/latex/contrib/udes-genie-these.tds.zip
+2022/09/24 | 1503055 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/09/24 | 1498681 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/09/24 | 1495520 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/09/24 | 14880 | systems/texlive/tlnet/archive/bibtex.r64491.tar.xz
+2022/09/24 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/09/24 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/09/24 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/09/24 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/09/24 | 144090 | macros/latex/contrib/udes-genie-these.zip
+2022/09/24 | 1408 | macros/latex/contrib/udes-genie-these/README.md
+2022/09/24 | 140014 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/09/24 | 138448 | systems/texlive/tlnet/archive/ut-thesis.doc.r64491.tar.xz
+2022/09/24 | 1376393 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/09/24 | 1375670 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/09/24 | 13716 | systems/texlive/tlnet/archive/udes-genie-these.source.r64491.tar.xz
+2022/09/24 | 135466 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/09/24 | 1323744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/09/24 | 13003 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex
+2022/09/24 | 129716 | systems/texlive/tlnet/archive/citation-style-language.r64491.tar.xz
+2022/09/24 | 12883 | macros/latex/contrib/crefthe/crefthe-doc.tex
+2022/09/24 | 12605 | macros/latex/contrib/crefthe/crefthe.sty
+2022/09/24 | 124734 | macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
+2022/09/24 | 12448600 | systems/texlive/tlnet/archive/tlgs.win32.r64483.tar.xz
+2022/09/24 | 12400 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
+2022/09/24 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/09/24 | 116944 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64491.tar.xz
+2022/09/24 | 1165688 | systems/texlive/tlnet/archive/tkz-euclide.doc.r64491.tar.xz
+2022/09/24 | 11644 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
+2022/09/24 | 1161750 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/09/24 | 1160 | language/sanskrit/build-ctan-dist.sh
+2022/09/24 | 115580 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/09/24 | 113652 | systems/texlive/tlnet/archive/texlive-scripts.r64481.tar.xz
+2022/09/24 | 113122 | language/sanskrit/skt.c
+2022/09/24 | 112979 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/09/24 | 112880 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/09/24 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/09/24 | 107437 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/09/24 | 10740 | systems/texlive/tlnet/archive/graphics-def.r64487.tar.xz
+2022/09/24 | 1053 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
+2022/09/24 | 104923 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/09/24 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/09/24 | 103247 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/09/23 | 9853 | macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
2022/09/23 | 982712 | systems/texlive/tlnet/archive/eplain.doc.r64476.tar.xz
2022/09/23 | 96842 | systems/win32/miktex/tm/packages/chemobabel__source.tar.lzma
-2022/09/23 | 95469 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
2022/09/23 | 953092 | systems/texlive/tlnet/archive/tex4ht.r64479.tar.xz
2022/09/23 | 9389 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex
-2022/09/23 | 931 | systems/win32/miktex/tm/packages/pr.ini
+2022/09/23 | 932 | macros/latex/contrib/wargame/source/package.dtx
2022/09/23 | 92646 | systems/win32/miktex/tm/packages/luatruthtable__doc.tar.lzma
2022/09/23 | 9201 | macros/latex/contrib/graphics-def/dvisvgm.def
2022/09/23 | 913 | macros/latex/contrib/media4svg/ChangeLog
@@ -12,25 +228,27 @@
2022/09/23 | 9049 | systems/win32/miktex/tm/packages/qrbill.tar.lzma
2022/09/23 | 903644 | systems/texlive/tlnet/archive/proflycee.doc.r64471.tar.xz
2022/09/23 | 9031 | systems/win32/miktex/tm/packages/newpax.tar.lzma
+2022/09/23 | 89859 | macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
2022/09/23 | 894756 | install/fonts/overlock.tds.zip
2022/09/23 | 8903 | macros/latex/contrib/media4svg/example/beamer-example.tex
-2022/09/23 | 88485 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/09/23 | 8824 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2022/09/23 | 87698 | systems/win32/miktex/tm/packages/proflycee__source.tar.lzma
2022/09/23 | 872966 | systems/win32/miktex/tm/packages/babel__doc.tar.lzma
2022/09/23 | 872954 | fonts/overlock.zip
2022/09/23 | 871510 | systems/win32/miktex/tm/packages/verifiche__doc.tar.lzma
2022/09/23 | 85558 | systems/win32/miktex/tm/packages/garamond-libre__doc.tar.lzma
+2022/09/23 | 853 | macros/latex/contrib/wargame/doc/tutorial/patch.py
+2022/09/23 | 8527 | macros/latex/contrib/wargame/source/Makefile
2022/09/23 | 85106 | systems/win32/miktex/tm/packages/qrbill__doc.tar.lzma
+2022/09/23 | 84635 | macros/latex/contrib/wargame/source/wargame.dtx
2022/09/23 | 8425 | biblio/citation-style-language/citeproc-context.lua
2022/09/23 | 841686 | systems/win32/miktex/tm/packages/bithesis__doc.tar.lzma
2022/09/23 | 8297 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex
-2022/09/23 | 824997 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/09/23 | 8296 | macros/latex/contrib/wargame/source/hex/terrain/village.dtx
2022/09/23 | 8210524 | systems/texlive/tlnet/archive/oberdiek.doc.r64463.tar.xz
2022/09/23 | 819051 | systems/win32/miktex/tm/packages/proflycee__doc.tar.lzma
2022/09/23 | 8165296 | systems/win32/miktex/tm/packages/oberdiek__doc.tar.lzma
2022/09/23 | 8154 | systems/win32/miktex/tm/packages/photobook__source.tar.lzma
-2022/09/23 | 81449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/09/23 | 8133 | macros/latex/contrib/wargame/source/hex/terrain.dtx
2022/09/23 | 8128 | biblio/citation-style-language/elsevier-harvard.csl
2022/09/23 | 8123 | biblio/citation-style-language/citeproc-latex-core.lua
2022/09/23 | 81140 | systems/win32/miktex/tm/packages/tkz-euclide__source.tar.lzma
@@ -39,75 +257,61 @@
2022/09/23 | 7999 | systems/win32/miktex/tm/packages/abspos__source.tar.lzma
2022/09/23 | 799705 | systems/win32/miktex/tm/packages/chemobabel__doc.tar.lzma
2022/09/23 | 7934 | macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
-2022/09/23 | 79065 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/09/23 | 7889 | macros/latex/contrib/wargame/source/hex/board.dtx
2022/09/23 | 7783 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex
2022/09/23 | 7749 | systems/win32/miktex/tm/packages/pagegrid__source.tar.lzma
-2022/09/23 | 77211 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/09/23 | 769653 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
2022/09/23 | 7433 | systems/win32/miktex/tm/packages/hereapplies__source.tar.lzma
-2022/09/23 | 74100 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/09/23 | 742 | macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
2022/09/23 | 7368 | systems/texlive/tlnet/archive/pagegrid.source.r64470.tar.xz
-2022/09/23 | 73686 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2022/09/23 | 735522 | systems/win32/miktex/tm/packages/l3build__doc.tar.lzma
-2022/09/23 | 73265 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
2022/09/23 | 7321 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex
2022/09/23 | 7308 | biblio/citation-style-language/citeproc-node-choose.lua
-2022/09/23 | 72978 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
2022/09/23 | 7287 | systems/win32/miktex/tm/packages/udes-genie-these.tar.lzma
2022/09/23 | 728796 | systems/win32/miktex/tm/packages/quattrocento.tar.lzma
2022/09/23 | 7195682 | systems/win32/miktex/tm/packages/garamond-libre.tar.lzma
2022/09/23 | 7180 | systems/texlive/tlnet/archive/abspos.source.r64465.tar.xz
+2022/09/23 | 7157 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/09/23 | 713937 | systems/win32/miktex/tm/packages/babel__source.tar.lzma
-2022/09/23 | 70940 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
2022/09/23 | 69907 | biblio/citation-style-language/apa.csl
+2022/09/23 | 6966 | macros/latex/contrib/wargame/source/wargame.ins
2022/09/23 | 695025 | systems/win32/miktex/tm/packages/librecaslon.tar.lzma
2022/09/23 | 6837 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex
-2022/09/23 | 682215 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/09/23 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
2022/09/23 | 679580 | systems/texlive/tlnet/archive/fontname.doc.r64477.tar.xz
2022/09/23 | 6790 | systems/win32/miktex/tm/packages/pdfcol__source.tar.lzma
2022/09/23 | 6765 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex
2022/09/23 | 6760 | systems/texlive/tlnet/archive/collection-latexextra.r64469.tar.xz
2022/09/23 | 665 | fonts/simpleicons/README.md
-2022/09/23 | 665028 | systems/win32/miktex/tm/packages/files.csv.lzma
2022/09/23 | 6648 | systems/win32/miktex/tm/packages/langnames__source.tar.lzma
-2022/09/23 | 662835 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/09/23 | 66295 | macros/latex/contrib/wargame/doc/tutorial/game.sty
2022/09/23 | 6591 | fonts/plex/latex/plex-sans.sty
2022/09/23 | 6576 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex
-2022/09/23 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/09/23 | 6573 | macros/latex/contrib/wargame/source/natoapp6c/core.dtx
2022/09/23 | 6448 | systems/texlive/tlnet/archive/pdfcol.source.r64469.tar.xz
-2022/09/23 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/09/23 | 642 | macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
2022/09/23 | 6357 | macros/latex/contrib/colorframed/colorframed.sty
2022/09/23 | 634128 | systems/win32/miktex/tm/packages/atkinson__doc.tar.lzma
-2022/09/23 | 63242 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/09/23 | 630433 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
2022/09/23 | 6283 | biblio/citation-style-language/citeproc-node-sort.lua
2022/09/23 | 6282 | macros/latex/contrib/graphics-def/dvips.def
-2022/09/23 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/09/23 | 61943 | macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
+2022/09/23 | 618 | macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
2022/09/23 | 61818 | biblio/citation-style-language/citeproc-engine.lua
2022/09/23 | 617 | biblio/citation-style-language/citeproc-lua.1
2022/09/23 | 6100 | biblio/citation-style-language/citeproc-node-locale.lua
2022/09/23 | 6047 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
2022/09/23 | 601452 | systems/win32/miktex/tm/packages/exam-zh__source.tar.lzma
-2022/09/23 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
2022/09/23 | 5982 | macros/latex/contrib/media4svg/README.md
2022/09/23 | 594403 | install/biblio/citation-style-language.tds.zip
2022/09/23 | 591448 | biblio/citation-style-language.zip
-2022/09/23 | 58632 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/09/23 | 5831663 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/09/23 | 583710 | macros/latex/contrib/wargame/doc/tutorial/game.pdf
2022/09/23 | 58109 | systems/win32/miktex/tm/packages/newpax__doc.tar.lzma
2022/09/23 | 577125 | systems/win32/miktex/tm/packages/librebaskerville.tar.lzma
-2022/09/23 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/09/23 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/09/23 | 57318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
2022/09/23 | 57289 | systems/win32/miktex/tm/packages/jsclasses__source.tar.lzma
2022/09/23 | 569988 | systems/win32/miktex/tm/packages/calculator__doc.tar.lzma
2022/09/23 | 5696 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex
+2022/09/23 | 5683 | macros/latex/contrib/wargame/doc/tutorial/game.tex
2022/09/23 | 566213 | systems/win32/miktex/tm/packages/asmeconf__doc.tar.lzma
2022/09/23 | 5657 | systems/win32/miktex/tm/packages/blowup__source.tar.lzma
-2022/09/23 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
2022/09/23 | 5593947 | systems/win32/miktex/tm/packages/cormorantgaramond.tar.lzma
-2022/09/23 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
2022/09/23 | 5502 | systems/win32/miktex/tm/packages/hereapplies.tar.lzma
2022/09/23 | 5498 | biblio/citation-style-language/citeproc-node-text.lua
2022/09/23 | 549204 | systems/win32/miktex/tm/packages/librebodoni.tar.lzma
@@ -117,52 +321,42 @@
2022/09/23 | 5343 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex
2022/09/23 | 5308 | systems/texlive/tlnet/archive/blowup.source.r64466.tar.xz
2022/09/23 | 5288 | biblio/citation-style-language/nature.csl
-2022/09/23 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/09/23 | 52628 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
2022/09/23 | 52387 | systems/win32/miktex/tm/packages/kpfonts__source.tar.lzma
-2022/09/23 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/09/23 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/09/23 | 5228 | macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
2022/09/23 | 515058 | systems/win32/miktex/tm/packages/lobster2.tar.lzma
2022/09/23 | 5029 | biblio/citation-style-language/citeproc-cli.lua
2022/09/23 | 50119 | systems/win32/miktex/tm/packages/nwejm__source.tar.lzma
2022/09/23 | 49840 | systems/texlive/tlnet/archive/nwejm.source.r64462.tar.xz
-2022/09/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/09/23 | 489 | macros/latex/contrib/graphics-def/README.md
-2022/09/23 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
2022/09/23 | 4835 | systems/win32/miktex/tm/packages/luatruthtable__source.tar.lzma
-2022/09/23 | 481895 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
2022/09/23 | 4810795 | fonts/simpleicons.zip
-2022/09/23 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
2022/09/23 | 47520 | biblio/citation-style-language/chicago-fullnote-bibliography.csl
+2022/09/23 | 4715 | macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
2022/09/23 | 46907 | biblio/citation-style-language/citeproc-bibtex-data.lua
2022/09/23 | 468 | systems/texlive/tlnet/archive/tds.r64477.tar.xz
+2022/09/23 | 46705 | macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
2022/09/23 | 466283 | systems/win32/miktex/tm/packages/charissil__doc.tar.lzma
+2022/09/23 | 462 | macros/latex/contrib/wargame/source/hex/tile.dtx
2022/09/23 | 4601 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex
2022/09/23 | 45970 | biblio/citation-style-language/chicago-note-bibliography.csl
-2022/09/23 | 45796 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/09/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/09/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2022/09/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/09/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/09/23 | 4514 | macros/latex/contrib/wargame/source/hex/labels.dtx
+2022/09/23 | 4491 | macros/latex/contrib/wargame/source/natoapp6c/list.dtx
2022/09/23 | 44606 | biblio/citation-style-language/citeproc-output.lua
2022/09/23 | 444642 | systems/win32/miktex/tm/packages/abspos__doc.tar.lzma
2022/09/23 | 4436 | systems/win32/miktex/tm/packages/unicode-data__doc.tar.lzma
2022/09/23 | 443576 | systems/texlive/tlnet/archive/abspos.doc.r64465.tar.xz
-2022/09/23 | 43888 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/09/23 | 4405 | macros/latex/contrib/wargame/source/tests/test.tex
2022/09/23 | 4379 | systems/win32/miktex/tm/packages/crossword.tar.lzma
2022/09/23 | 4375 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex
-2022/09/23 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/09/23 | 43526 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/09/23 | 432846 | macros/latex/contrib/wargame/doc/compat.pdf
2022/09/23 | 43131 | macros/latex/contrib/media4svg/example/beamer-example-4.svg
2022/09/23 | 42280 | systems/texlive/tlnet/archive/eplain.r64476.tar.xz
-2022/09/23 | 421328 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64460.tar.xz
2022/09/23 | 417656 | systems/win32/miktex/tm/packages/hereapplies__doc.tar.lzma
2022/09/23 | 416827 | systems/win32/miktex/tm/packages/hyperref__source.tar.lzma
2022/09/23 | 416462 | systems/win32/miktex/tm/packages/merriweather__doc.tar.lzma
+2022/09/23 | 413 | macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
2022/09/23 | 4124 | systems/win32/miktex/tm/packages/ppt-slides.tar.lzma
2022/09/23 | 412240 | systems/texlive/tlnet/archive/semantex.doc.r64472.tar.xz
-2022/09/23 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/09/23 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
2022/09/23 | 4098823 | systems/win32/miktex/tm/packages/nwejm.tar.lzma
2022/09/23 | 40987 | systems/win32/miktex/tm/packages/stex.tar.lzma
2022/09/23 | 4089760 | systems/texlive/tlnet/archive/nwejm.r64462.tar.xz
@@ -176,29 +370,27 @@
2022/09/23 | 3978 | fonts/plex/latex/plex-serif.sty
2022/09/23 | 3975 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex
2022/09/23 | 396576 | systems/texlive/tlnet/archive/eplain.source.r64476.tar.xz
+2022/09/23 | 39588 | macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
2022/09/23 | 3948 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex
-2022/09/23 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/09/23 | 39200 | systems/texlive/tlnet/archive/tkz-euclide.r64473.tar.xz
+2022/09/23 | 39372 | macros/latex/contrib/wargame/source/util/core.dtx
2022/09/23 | 38823 | systems/win32/miktex/tm/packages/tkz-euclide.tar.lzma
2022/09/23 | 384 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOneZero.tfm
2022/09/23 | 38103 | systems/win32/miktex/tm/packages/nicematrix.tar.lzma
2022/09/23 | 3803 | fonts/plex/latex/plex-mono.sty
2022/09/23 | 380209 | systems/win32/miktex/tm/packages/semantex__doc.tar.lzma
2022/09/23 | 37682 | systems/win32/miktex/tm/packages/exam-zh.tar.lzma
-2022/09/23 | 37507 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/09/23 | 37441 | macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
+2022/09/23 | 37340 | macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
2022/09/23 | 3723 | systems/win32/miktex/tm/packages/pagegrid.tar.lzma
-2022/09/23 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2022/09/23 | 369332 | systems/texlive/tlnet/archive/latex2man.doc.r64477.tar.xz
2022/09/23 | 3677108 | systems/win32/miktex/tm/packages/hyperref__doc.tar.lzma
2022/09/23 | 3659 | systems/win32/miktex/tm/packages/ppt-slides__source.tar.lzma
+2022/09/23 | 3658 | macros/latex/contrib/wargame/source/hex/ridges.dtx
2022/09/23 | 3647 | systems/win32/miktex/tm/packages/beamertheme-tcolorbox__source.tar.lzma
2022/09/23 | 35995 | systems/win32/miktex/tm/packages/l3build.tar.lzma
2022/09/23 | 35744 | systems/win32/miktex/tm/packages/semantex__source.tar.lzma
2022/09/23 | 356375 | systems/win32/miktex/tm/packages/crumbs__doc.tar.lzma
2022/09/23 | 35321 | systems/win32/miktex/tm/packages/bithesis__source.tar.lzma
-2022/09/23 | 35264 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/09/23 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/09/23 | 35231 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
2022/09/23 | 3515 | systems/win32/miktex/tm/packages/chemobabel.tar.lzma
2022/09/23 | 34997 | systems/win32/miktex/tm/packages/xindex.tar.lzma
2022/09/23 | 3484 | systems/texlive/tlnet/archive/pagegrid.r64470.tar.xz
@@ -209,7 +401,6 @@
2022/09/23 | 344 | biblio/citation-style-language/citeproc.lua
2022/09/23 | 340482 | systems/win32/miktex/tm/packages/umtypewriter.tar.lzma
2022/09/23 | 339113 | systems/win32/miktex/tm/packages/crossword__doc.tar.lzma
-2022/09/23 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
2022/09/23 | 337202 | systems/win32/miktex/tm/packages/atkinson.tar.lzma
2022/09/23 | 33702 | biblio/citation-style-language/citeproc-node-names.lua
2022/09/23 | 33552 | systems/win32/miktex/tm/packages/librebaskerville__doc.tar.lzma
@@ -217,17 +408,14 @@
2022/09/23 | 328427 | systems/win32/miktex/tm/packages/pagegrid__doc.tar.lzma
2022/09/23 | 327708 | systems/texlive/tlnet/archive/pagegrid.doc.r64470.tar.xz
2022/09/23 | 326522 | systems/win32/miktex/tm/packages/csquotes__doc.tar.lzma
-2022/09/23 | 325981 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2022/09/23 | 32558 | biblio/citation-style-language/citation-style-language.sty
-2022/09/23 | 325484 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
2022/09/23 | 32476 | systems/texlive/tlnet/archive/kpathsea.r64475.tar.xz
2022/09/23 | 3212997 | systems/win32/miktex/tm/packages/charissil.tar.lzma
-2022/09/23 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/09/23 | 3210 | macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
+2022/09/23 | 3209 | macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
2022/09/23 | 31893 | systems/win32/miktex/tm/packages/librefranklin__doc.tar.lzma
2022/09/23 | 317834 | systems/win32/miktex/tm/packages/pdfcol__doc.tar.lzma
2022/09/23 | 317332 | systems/texlive/tlnet/archive/pdfcol.doc.r64469.tar.xz
-2022/09/23 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/09/23 | 31562 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2022/09/23 | 3145287 | systems/win32/miktex/tm/packages/animate__doc.tar.lzma
2022/09/23 | 31366 | systems/win32/miktex/tm/packages/l3build__source.tar.lzma
2022/09/23 | 3111 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex
@@ -235,37 +423,32 @@
2022/09/23 | 309030 | systems/win32/miktex/tm/packages/unicode-data.tar.lzma
2022/09/23 | 308639 | systems/win32/miktex/tm/packages/mintspirit__doc.tar.lzma
2022/09/23 | 308412 | systems/texlive/tlnet/archive/mintspirit.doc.r64461.tar.xz
-2022/09/23 | 30570 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
2022/09/23 | 303504 | systems/win32/miktex/tm/packages/oldstandard__doc.tar.lzma
2022/09/23 | 30276 | systems/win32/miktex/tm/packages/calculator__source.tar.lzma
+2022/09/23 | 3022 | macros/latex/contrib/wargame/source/chit/elements.dtx
2022/09/23 | 302028 | systems/texlive/tlnet/archive/oldstandard.doc.r64464.tar.xz
2022/09/23 | 3013 | systems/win32/miktex/tm/packages/pdfcol.tar.lzma
2022/09/23 | 3008405 | systems/win32/miktex/tm/packages/librefranklin.tar.lzma
2022/09/23 | 2993 | biblio/citation-style-language/citeproc-ir-node.lua
2022/09/23 | 2987 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex
2022/09/23 | 29856 | macros/latex/contrib/media4svg/media4svg.sty
-2022/09/23 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/09/23 | 295662 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/09/23 | 295593 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
2022/09/23 | 294793 | systems/win32/miktex/tm/packages/blowup__doc.tar.lzma
2022/09/23 | 294208 | systems/texlive/tlnet/archive/blowup.doc.r64466.tar.xz
2022/09/23 | 29374 | systems/win32/miktex/tm/packages/asmeconf.tar.lzma
2022/09/23 | 2929181 | systems/win32/miktex/tm/packages/beamer__doc.tar.lzma
2022/09/23 | 2917 | systems/win32/miktex/tm/packages/blowup.tar.lzma
2022/09/23 | 2901549 | systems/win32/miktex/tm/packages/cabin.tar.lzma
+2022/09/23 | 2895 | systems/win32/TLW64/00README.TLW64
2022/09/23 | 28946 | systems/win32/miktex/tm/packages/photobook.tar.lzma
-2022/09/23 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/09/23 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/09/23 | 2888 | macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
+2022/09/23 | 2846 | macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
2022/09/23 | 2841 | fonts/simpleicons/enc/simpleiconsOne.enc
-2022/09/23 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
2022/09/23 | 2802 | systems/win32/miktex/tm/packages/crumbs__source.tar.lzma
2022/09/23 | 2781 | biblio/citation-style-language/CHANGELOG.md
2022/09/23 | 2780 | systems/texlive/tlnet/archive/pdfcol.r64469.tar.xz
2022/09/23 | 274 | fonts/simpleicons/tex/usimpleiconsOneZero.fd
2022/09/23 | 2749 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex
-2022/09/23 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
2022/09/23 | 2726 | fonts/simpleicons/enc/simpleiconsEight.enc
-2022/09/23 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
2022/09/23 | 2692 | systems/texlive/tlnet/archive/blowup.r64466.tar.xz
2022/09/23 | 2682 | fonts/simpleicons/enc/simpleiconsFour.enc
2022/09/23 | 2681 | systems/win32/miktex/tm/packages/abspos.tar.lzma
@@ -290,28 +473,22 @@
2022/09/23 | 25715 | biblio/citation-style-language/csl-locales-ru-RU.xml
2022/09/23 | 256293 | systems/win32/miktex/tm/packages/fixdif__doc.tar.lzma
2022/09/23 | 256227 | systems/win32/miktex/tm/packages/piton__doc.tar.lzma
-2022/09/23 | 25516574 | systems/texlive/tlnet/install-tl.zip
2022/09/23 | 254 | fonts/simpleicons/tex/usimpleiconsTwo.fd
2022/09/23 | 254 | fonts/simpleicons/tex/usimpleiconsSix.fd
2022/09/23 | 254 | fonts/simpleicons/tex/usimpleiconsOne.fd
2022/09/23 | 2544 | fonts/simpleicons/enc/simpleiconsThree.enc
2022/09/23 | 2521 | fonts/simpleicons/enc/simpleiconsSix.enc
-2022/09/23 | 25118 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
2022/09/23 | 2501 | fonts/simpleicons/enc/simpleiconsNine.enc
2022/09/23 | 2492594 | systems/win32/miktex/tm/packages/asmeconf__source.tar.lzma
+2022/09/23 | 24914 | macros/latex/contrib/wargame/source/hex/terrain/town.dtx
2022/09/23 | 24803 | macros/latex/contrib/graphics-def.zip
-2022/09/23 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
2022/09/23 | 2452 | systems/texlive/tlnet/archive/abspos.r64465.tar.xz
-2022/09/23 | 245151 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/09/23 | 2450 | macros/latex/contrib/wargame/source/hex/towns.dtx
2022/09/23 | 24466 | biblio/citation-style-language/csl-locales-bg-BG.xml
2022/09/23 | 243624 | systems/texlive/tlnet/archive/texdraw.doc.r64477.tar.xz
2022/09/23 | 24345 | biblio/citation-style-language/csl-locales-hi-IN.xml
-2022/09/23 | 24211 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/09/23 | 2416 | systems/texlive/tlnet/archive/colorframed.r64467.tar.xz
2022/09/23 | 24118 | systems/win32/miktex/tm/packages/animate.tar.lzma
-2022/09/23 | 2411576 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2022/09/23 | 240 | biblio/citation-style-language/citeproc-lua.lua
-2022/09/23 | 23951 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
2022/09/23 | 2393 | systems/win32/miktex/tm/packages/garamond-libre__source.tar.lzma
2022/09/23 | 2384 | systems/win32/miktex/tm/packages/crumbs.tar.lzma
2022/09/23 | 23682 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex
@@ -329,9 +506,13 @@
2022/09/23 | 230581 | systems/win32/miktex/tm/packages/cabin__doc.tar.lzma
2022/09/23 | 23024 | biblio/citation-style-language/csl-locales-el-GR.xml
2022/09/23 | 22953 | systems/win32/miktex/tm/packages/miktex-misc.tar.lzma
+2022/09/23 | 2290 | macros/latex/contrib/wargame/source/hex/core.dtx
+2022/09/23 | 2278 | macros/latex/contrib/wargame/source/hex/extra.dtx
2022/09/23 | 227617 | biblio/citation-style-language/citation-style-language-doc.pdf
2022/09/23 | 22752 | biblio/citation-style-language/csl-locales-lt-LT.xml
+2022/09/23 | 2274 | macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
2022/09/23 | 2268 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex
+2022/09/23 | 2267 | macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
2022/09/23 | 22627 | biblio/citation-style-language/csl-locales-en-US.xml
2022/09/23 | 22542 | biblio/citation-style-language/csl-locales-pt-BR.xml
2022/09/23 | 22472 | biblio/citation-style-language/csl-locales-en-GB.xml
@@ -356,7 +537,6 @@
2022/09/23 | 21822 | biblio/citation-style-language/csl-locales-he-IL.xml
2022/09/23 | 21812 | biblio/citation-style-language/csl-locales-vi-VN.xml
2022/09/23 | 21715 | biblio/citation-style-language/csl-locales-sv-SE.xml
-2022/09/23 | 21712 | systems/texlive/tlnet/archive/colorframed.doc.r64467.tar.xz
2022/09/23 | 21681 | biblio/citation-style-language/csl-locales-de-CH.xml
2022/09/23 | 21654 | biblio/citation-style-language/csl-locales-id-ID.xml
2022/09/23 | 21635 | biblio/citation-style-language/csl-locales-tr-TR.xml
@@ -376,7 +556,6 @@
2022/09/23 | 21433 | biblio/citation-style-language/csl-locales-af-ZA.xml
2022/09/23 | 21414 | biblio/citation-style-language/csl-locales-ko-KR.xml
2022/09/23 | 21406 | biblio/citation-style-language/csl-locales-es-CL.xml
-2022/09/23 | 213847 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
2022/09/23 | 21363 | biblio/citation-style-language/csl-locales-hr-HR.xml
2022/09/23 | 21330 | biblio/citation-style-language/csl-locales-sl-SI.xml
2022/09/23 | 21327 | biblio/citation-style-language/csl-locales-es-ES.xml
@@ -390,52 +569,49 @@
2022/09/23 | 211089 | install/macros/latex/contrib/media4svg.tds.zip
2022/09/23 | 210888 | fonts/simpleicons/tex/simpleiconsglyphs-pdftex.tex
2022/09/23 | 209550 | macros/latex/contrib/media4svg.zip
-2022/09/23 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/09/23 | 20779 | macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
2022/09/23 | 20747 | biblio/citation-style-language/csl-locales-uk-UA.xml
2022/09/23 | 207100 | fonts/simpleicons/tex/simpleiconsglyphs-xeluatex.tex
2022/09/23 | 20503 | systems/win32/miktex/tm/packages/librebodoni__doc.tar.lzma
-2022/09/23 | 20439001 | systems/texlive/tlnet/install-tl-windows.exe
-2022/09/23 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/09/23 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
2022/09/23 | 20206 | macros/latex/contrib/media4svg/example/random.mp4
2022/09/23 | 20185 | systems/win32/miktex/tm/packages/marcellus__doc.tar.lzma
+2022/09/23 | 2009 | macros/latex/contrib/wargame/source/tests/chits.dtx
2022/09/23 | 2005 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex
2022/09/23 | 1992 | systems/win32/miktex/tm/packages/fixdif.tar.lzma
2022/09/23 | 199155 | systems/win32/miktex/tm/packages/opencolor__doc.tar.lzma
2022/09/23 | 199047 | systems/win32/miktex/tm/packages/clearsans__doc.tar.lzma
2022/09/23 | 19817 | biblio/citation-style-language/csl-locales-ar.xml
-2022/09/23 | 196212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
2022/09/23 | 19478 | macros/latex/contrib/graphics-def/luatex.def
+2022/09/23 | 1944 | macros/latex/contrib/wargame/source/tests/map.dtx
2022/09/23 | 19448 | macros/latex/contrib/graphics-def/pdftex.def
2022/09/23 | 19423 | biblio/citation-style-language/csl-locales-zh-TW.xml
2022/09/23 | 1939734 | systems/win32/miktex/tm/packages/simpleicons__doc.tar.lzma
2022/09/23 | 1928929 | fonts/simpleicons/doc/simpleicons.pdf
2022/09/23 | 192405 | systems/win32/miktex/tm/packages/babel.tar.lzma
+2022/09/23 | 1911 | macros/latex/contrib/wargame/source/natoapp6c/util.dtx
2022/09/23 | 19056 | biblio/citation-style-language/csl-locales-zh-CN.xml
2022/09/23 | 18830 | macros/latex/contrib/colorframed/colorframed-doc.pdf
2022/09/23 | 18583 | systems/win32/miktex/tm/packages/verifiche__source.tar.lzma
2022/09/23 | 18568 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex
-2022/09/23 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
2022/09/23 | 18460 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex
+2022/09/23 | 184526 | macros/latex/contrib/wargame/doc/symbols.pdf
2022/09/23 | 1844 | fonts/simpleicons/doc/simpleicons.tex
-2022/09/23 | 18381 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2022/09/23 | 18366 | systems/win32/miktex/tm/packages/csquotes.tar.lzma
2022/09/23 | 1825064 | fonts/simpleicons/opentype/SimpleIcons.otf
-2022/09/23 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/09/23 | 18195 | macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
+2022/09/23 | 18121 | macros/latex/contrib/wargame/source/chit/shape.dtx
+2022/09/23 | 1807 | macros/latex/contrib/wargame/source/natoapp6c/text.dtx
2022/09/23 | 1791 | systems/win32/miktex/tm/packages/opencolor.tar.lzma
2022/09/23 | 1791 | systems/win32/miktex/tm/packages/clicks.tar.lzma
2022/09/23 | 178312 | systems/win32/miktex/tm/packages/marcellus.tar.lzma
2022/09/23 | 17804 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex
2022/09/23 | 1778643 | systems/win32/miktex/tm/packages/nicematrix__doc.tar.lzma
-2022/09/23 | 17654875 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2022/09/23 | 17499 | systems/win32/miktex/tm/packages/simpleicons__source.tar.lzma
2022/09/23 | 17335 | macros/latex/contrib/media4svg/example/beamer-example-3.svg
-2022/09/23 | 173178 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
2022/09/23 | 1712797 | systems/win32/miktex/tm/packages/oldstandard.tar.lzma
2022/09/23 | 1702 | biblio/citation-style-language/citeproc-node-layout.lua
2022/09/23 | 1702308 | systems/texlive/tlnet/archive/oldstandard.r64464.tar.xz
2022/09/23 | 1700386 | fonts/simpleicons/type1/SimpleIcons.pfb
-2022/09/23 | 169677 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2022/09/23 | 169048 | systems/win32/miktex/tm/packages/xindex__source.tar.lzma
2022/09/23 | 168046 | systems/win32/miktex/tm/packages/beamertheme-tcolorbox__doc.tar.lzma
2022/09/23 | 16802 | systems/win32/miktex/tm/packages/crossword__source.tar.lzma
@@ -443,28 +619,26 @@
2022/09/23 | 1673 | biblio/citation-style-language/README.md
2022/09/23 | 166850 | systems/win32/miktex/tm/packages/beamer.tar.lzma
2022/09/23 | 1657334 | systems/win32/miktex/tm/packages/csvsimple__doc.tar.lzma
+2022/09/23 | 1653 | macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
2022/09/23 | 16533 | systems/win32/miktex/tm/packages/proflycee.tar.lzma
2022/09/23 | 16400 | systems/texlive/tlnet/archive/proflycee.r64471.tar.xz
2022/09/23 | 1612001 | systems/win32/miktex/tm/packages/kpfonts__doc.tar.lzma
2022/09/23 | 1609188 | systems/win32/miktex/tm/packages/nwejm__doc.tar.lzma
2022/09/23 | 1608828 | systems/texlive/tlnet/archive/nwejm.doc.r64462.tar.xz
2022/09/23 | 16054 | biblio/citation-style-language/modern-humanities-research-association.csl
+2022/09/23 | 15937 | macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
2022/09/23 | 158788 | systems/win32/miktex/tm/packages/cormorantgaramond__doc.tar.lzma
2022/09/23 | 15617 | biblio/citation-style-language/citeproc-node-style.lua
2022/09/23 | 1559 | fonts/simpleicons/tex/simpleicons.sty
-2022/09/23 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2022/09/23 | 15528 | systems/texlive/tlnet/archive/texdraw.r64477.tar.xz
2022/09/23 | 15472187 | systems/win32/miktex/tm/packages/fira.tar.lzma
2022/09/23 | 15470 | systems/win32/miktex/tm/packages/qrbill__source.tar.lzma
2022/09/23 | 15427 | systems/win32/miktex/tm/packages/piton__source.tar.lzma
2022/09/23 | 15413 | biblio/citation-style-language/ieee.csl
-2022/09/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
2022/09/23 | 153951 | systems/win32/miktex/tm/packages/nicematrix__source.tar.lzma
-2022/09/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2022/09/23 | 1521 | macros/latex/contrib/colorframed/README.md
-2022/09/23 | 1503054 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/09/23 | 1496962 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/09/23 | 1495708 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/09/23 | 15175 | macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
+2022/09/23 | 15054 | macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
2022/09/23 | 148579 | systems/win32/miktex/tm/packages/quattrocento__doc.tar.lzma
2022/09/23 | 14847 | systems/win32/miktex/tm/packages/newpax__source.tar.lzma
2022/09/23 | 14833 | biblio/citation-style-language/citeproc-element.lua
@@ -472,36 +646,32 @@
2022/09/23 | 148015 | systems/win32/miktex/tm/packages/bidi__source.tar.lzma
2022/09/23 | 14788 | macros/latex/contrib/graphics-def/xetex.def
2022/09/23 | 1476 | biblio/citation-style-language/citeproc-nodes.lua
-2022/09/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/09/23 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
2022/09/23 | 14556 | biblio/citation-style-language/citation-style-language-doc.tex
-2022/09/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2022/09/23 | 14443 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex
-2022/09/23 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2022/09/23 | 14360021 | install/fonts/plex.tds.zip
2022/09/23 | 14251303 | fonts/plex.zip
2022/09/23 | 14223 | systems/win32/miktex/tm/packages/udes-genie-these__source.tar.lzma
+2022/09/23 | 14095 | macros/latex/contrib/wargame/doc/tutorial/export.tex
2022/09/23 | 14072 | systems/texlive/tlnet/archive/latex2man.r64477.tar.xz
2022/09/23 | 1401924 | systems/win32/miktex/tm/packages/exam-zh__doc.tar.lzma
-2022/09/23 | 140013 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
2022/09/23 | 138077 | systems/win32/miktex/tm/packages/langnames.tar.lzma
-2022/09/23 | 1376125 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2022/09/23 | 1375818 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
2022/09/23 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r64479.tar.xz
+2022/09/23 | 1359 | macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
2022/09/23 | 13585 | biblio/citation-style-language/citeproc-node-date.lua
-2022/09/23 | 135466 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2022/09/23 | 13272 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex
2022/09/23 | 1327019 | systems/win32/miktex/tm/packages/clearsans.tar.lzma
-2022/09/23 | 1323743 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2022/09/23 | 131655 | systems/win32/miktex/tm/packages/photobook__doc.tar.lzma
2022/09/23 | 131460 | systems/texlive/tlnet/archive/bidi.r64474.tar.xz
2022/09/23 | 131082 | systems/win32/miktex/tm/packages/bidi.tar.lzma
+2022/09/23 | 1305909 | macros/latex/contrib/wargame/doc/wargame.pdf
2022/09/23 | 12997 | systems/win32/miktex/tm/packages/biblatex-philosophy.tar.lzma
2022/09/23 | 1275916 | systems/texlive/tlnet/archive/tex4ht.source.r64479.tar.xz
2022/09/23 | 1272265 | macros/latex/contrib/tkz/tkz-euclide.zip
2022/09/23 | 127051 | systems/win32/miktex/tm/packages/citation-style-language.tar.lzma
+2022/09/23 | 12639 | macros/latex/contrib/wargame/source/chit/misc.dtx
+2022/09/23 | 1254 | macros/latex/contrib/wargame/doc/tutorial/README.md
2022/09/23 | 125303 | fonts/simpleicons/doc/bindings.tex
-2022/09/23 | 12448000 | systems/texlive/tlnet/archive/tlgs.win32.r64478.tar.xz
+2022/09/23 | 124805 | macros/latex/contrib/wargame/source/utils/export.py
2022/09/23 | 12427 | systems/win32/miktex/tm/packages/fixdif__source.tar.lzma
2022/09/23 | 1236 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsSeven.tfm
2022/09/23 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsTwo.tfm
@@ -515,51 +685,48 @@
2022/09/23 | 1228 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOne.tfm
2022/09/23 | 1224 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex
2022/09/23 | 11958 | biblio/citation-style-language/vancouver.csl
+2022/09/23 | 11934 | macros/latex/contrib/wargame/source/hex/shape.dtx
+2022/09/23 | 119307 | macros/latex/contrib/wargame/source/hex/terrain/city.dtx
+2022/09/23 | 1191 | macros/latex/contrib/wargame/source/chit/core.dtx
2022/09/23 | 117309 | systems/win32/miktex/tm/packages/udes-genie-these__doc.tar.lzma
-2022/09/23 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
-2022/09/23 | 1165128 | systems/texlive/tlnet/archive/tkz-euclide.doc.r64473.tar.xz
-2022/09/23 | 1161750 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/09/23 | 115579 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/09/23 | 11607 | macros/latex/contrib/wargame/source/hex/coord.dtx
2022/09/23 | 11550 | systems/win32/miktex/tm/packages/csvsimple.tar.lzma
2022/09/23 | 11538 | macros/latex/contrib/tkz/tkz-euclide/README.md
2022/09/23 | 1152 | systems/win32/miktex/tm/packages/umtypewriter__doc.tar.lzma
2022/09/23 | 115122 | systems/win32/miktex/tm/packages/langnames__doc.tar.lzma
-2022/09/23 | 113632 | systems/texlive/tlnet/archive/texlive-scripts.r64460.tar.xz
-2022/09/23 | 112980 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/09/23 | 112878 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
2022/09/23 | 11224 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
2022/09/23 | 11209 | biblio/citation-style-language/modern-language-association.csl
2022/09/23 | 1119 | fonts/simpleicons/map/simpleicons.map
2022/09/23 | 1115627 | systems/win32/miktex/tm/packages/alegreya__doc.tar.lzma
+2022/09/23 | 11120 | macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
2022/09/23 | 1109639 | macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
2022/09/23 | 1109277 | systems/win32/miktex/tm/packages/mintspirit.tar.lzma
2022/09/23 | 11060 | biblio/citation-style-language/american-sociological-association.csl
2022/09/23 | 1105472 | systems/texlive/tlnet/archive/mintspirit.r64461.tar.xz
2022/09/23 | 11034 | biblio/citation-style-language/american-medical-association.csl
-2022/09/23 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
2022/09/23 | 108694 | systems/win32/miktex/tm/packages/oberdiek__source.tar.lzma
2022/09/23 | 1086908 | systems/win32/miktex/tm/packages/tkz-euclide__doc.tar.lzma
2022/09/23 | 108532 | systems/texlive/tlnet/archive/fontname.r64477.tar.xz
2022/09/23 | 108452 | systems/texlive/tlnet/archive/oberdiek.source.r64463.tar.xz
2022/09/23 | 108184 | systems/win32/miktex/tm/packages/librecaslon__doc.tar.lzma
-2022/09/23 | 107439 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
2022/09/23 | 10723 | biblio/citation-style-language/harvard-cite-them-right.csl
2022/09/23 | 10687 | macros/latex/contrib/colorframed/colorframed-doc.tex
2022/09/23 | 10652 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex
2022/09/23 | 1061956 | systems/texlive/tlnet/archive/kpathsea.doc.r64475.tar.xz
-2022/09/23 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/09/23 | 1054 | macros/latex/contrib/wargame/doc/tutorial/Makefile
2022/09/23 | 104889 | systems/win32/miktex/tm/packages/lobster2__doc.tar.lzma
2022/09/23 | 10463 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex
2022/09/23 | 10401 | systems/win32/miktex/tm/packages/calculator.tar.lzma
-2022/09/23 | 103598 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/09/23 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/09/23 | 10300 | macros/latex/contrib/wargame/source/utils/svg2tikz.py
2022/09/23 | 10203 | macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex
+2022/09/23 | 10124 | macros/latex/contrib/wargame/source/hex/paths.dtx
+2022/09/23 | 10097 | macros/latex/contrib/wargame/README.md
+2022/09/23 | 10097 | macros/latex/contrib/wargame/doc/README.md
2022/09/23 | 10019 | biblio/citation-style-language/american-chemical-society.csl
2022/09/22 | 968 | macros/latex/contrib/proflycee/doc/cap.csv
2022/09/22 | 938 | macros/latex/contrib/oberdiek/oberdiek-source.bib
2022/09/22 | 924290 | macros/latex/contrib/proflycee.zip
2022/09/22 | 908 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html
-2022/09/22 | 892072 | systems/texlive/tlnet/archive/beebe.r64457.tar.xz
2022/09/22 | 879564 | macros/latex/contrib/hyperref/hyperref.dtx
2022/09/22 | 858 | macros/latex/contrib/hyperref/doc/hyperref-doc5.html
2022/09/22 | 834268 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
@@ -571,11 +738,11 @@
2022/09/22 | 7536 | macros/latex/contrib/hyperref/hyperref-patches.dtx
2022/09/22 | 736 | macros/latex/contrib/proflycee/doc/perroquet.csv
2022/09/22 | 73094 | macros/latex/contrib/proflycee/tex/ProfLycee.sty
-2022/09/22 | 7084 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/09/22 | 6527 | macros/latex/contrib/oberdiek/oberdiek-bundle.bib
2022/09/22 | 617773 | support/TeX4ht/source/tex4ht-html4.tex
2022/09/22 | 611 | macros/latex/contrib/abspos/README.md
2022/09/22 | 6101 | macros/xetex/latex/bidi/bidi-doc-latex-pkgsupport.ltx
+2022/09/22 | 60444303 | systems/win32/TLW64/gs1000w64full-gpl.exe
2022/09/22 | 5823 | macros/xetex/latex/bidi/bidi-doc-plain-basics.ltx
2022/09/22 | 5736 | macros/latex/contrib/hyperref/xr-hyper.sty
2022/09/22 | 543577 | macros/latex/contrib/oberdiek/resizegather.pdf
@@ -788,7 +955,6 @@
2022/09/21 | 11344 | systems/texlive/tlnet/archive/csvsimple.r64450.tar.xz
2022/09/21 | 108033 | macros/latex/contrib/nwejm/doc/examples/sample.pdf
2022/09/20 | 9976 | indexing/xindex/scripts/xindex.lua
-2022/09/20 | 96748 | systems/texlive/tlnet/archive/texinfo.r64438.tar.xz
2022/09/20 | 964 | systems/texlive/tlnet/archive/collection-binextra.r64447.tar.xz
2022/09/20 | 9609 | macros/latex/contrib/csvsimple/CHANGES.md
2022/09/20 | 9367094 | install/fonts/merriweather.tds.zip
@@ -845,7 +1011,6 @@
2022/09/20 | 3028 | indexing/xindex/CHANGELOG
2022/09/20 | 2995400 | systems/texlive/tlnet/archive/librefranklin.r64441.tar.xz
2022/09/20 | 2908 | macros/latex/contrib/csvsimple/README.md
-2022/09/20 | 2895 | systems/win32/TLW64/00README.TLW64
2022/09/20 | 288 | macros/latex/contrib/csvsimple/gradesort.xml
2022/09/20 | 2854 | info/biblio/typeset.ltx
2022/09/20 | 2830 | fonts/merriweather/README
@@ -956,7 +1121,6 @@
2022/09/19 | 29172 | systems/texlive/tlnet/archive/asmeconf.r64435.tar.xz
2022/09/19 | 27166 | macros/luatex/latex/piton/piton.dtx
2022/09/19 | 2655724 | systems/texlive/tlnet/archive/asmeconf.doc.r64435.tar.xz
-2022/09/19 | 244112 | systems/texlive/tlnet/archive/citation-style-language.doc.r64429.tar.xz
2022/09/19 | 24368 | systems/texlive/tlnet/archive/dviasm.doc.r64430.tar.xz
2022/09/19 | 229579 | macros/latex/contrib/ppt-slides/ppt-slides.pdf
2022/09/19 | 227733 | macros/luatex/latex/piton/piton.pdf
@@ -999,7 +1163,6 @@
2022/09/19 | 1338 | graphics/chemobabel/LICENSE
2022/09/19 | 132001 | graphics/chemobabel/example-en.pdf
2022/09/19 | 13080 | fonts/kpfonts/fonts/afm/jkpsskmsc.afm
-2022/09/19 | 129352 | systems/texlive/tlnet/archive/citation-style-language.r64429.tar.xz
2022/09/19 | 1276 | macros/latex/contrib/blowup/blowup-ex4.tex
2022/09/19 | 1263 | macros/latex/contrib/blowup/blowup-ex2.tex
2022/09/19 | 1257630 | graphics/chemobabel.zip
@@ -1017,13 +1180,16 @@
2022/09/18 | 713824 | systems/texlive/tlnet/archive/babel.source.r64426.tar.xz
2022/09/18 | 70178 | macros/xetex/latex/exam-zh/tex/exam-zh.cls
2022/09/18 | 681 | fonts/umtypewriter/README
+2022/09/18 | 6480 | graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex
2022/09/18 | 575508 | systems/texlive/tlnet/archive/librebaskerville.r64421.tar.xz
2022/09/18 | 569004 | systems/texlive/tlnet/archive/calculator.doc.r64424.tar.xz
2022/09/18 | 56585 | macros/xetex/latex/exam-zh/tex/exam-zh-question.sty
+2022/09/18 | 5464 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex
2022/09/18 | 53116 | macros/xetex/latex/exam-zh/tex/exam-zh-symbols.sty
2022/09/18 | 5132 | systems/texlive/tlnet/archive/verifiche.r64425.tar.xz
2022/09/18 | 504088 | fonts/umtypewriter.zip
2022/09/18 | 4768 | fonts/librecaslon/latex/librecaslon.sty
+2022/09/18 | 4722 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex
2022/09/18 | 44580 | dviware/dviasm/dviasm.py
2022/09/18 | 4347 | dviware/dviasm/dviasm.1
2022/09/18 | 3844 | systems/texlive/tlnet/archive/unicode-data.doc.r64423.tar.xz
@@ -1059,2045 +1225,5 @@
2022/09/18 | 1149933 | macros/xetex/latex/exam-zh/doc/exam-zh-doc.pdf
2022/09/18 | 11482 | macros/xetex/latex/exam-zh/README.md
2022/09/18 | 11464 | macros/xetex/latex/exam-zh/examples/example-single.tex
+2022/09/18 | 10180 | graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex
2022/09/18 | 10164 | systems/texlive/tlnet/archive/calculator.r64424.tar.xz
-2022/09/17 | 99 | graphics/asymptote/base/asy_filetype.vim
-2022/09/17 | 99993 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/utilityclass.png
-2022/09/17 | 9923 | graphics/asymptote/profiler.h
-2022/09/17 | 990 | graphics/asymptote/examples/RiemannSphere.asy
-2022/09/17 | 989121 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/Glew/CustomGL/glew.h
-2022/09/17 | 988 | graphics/asymptote/GUI/res/icons/eye.svg
-2022/09/17 | 986 | graphics/asymptote/predicates.h
-2022/09/17 | 986 | graphics/asymptote/GUI/res/icons/brush.svg
-2022/09/17 | 9867 | graphics/asymptote/runstring.in
-2022/09/17 | 985 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
-2022/09/17 | 9856 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-filepath.h
-2022/09/17 | 98539 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/readertest.cpp
-2022/09/17 | 983 | graphics/asymptote/LspCpp/third_party/rapidjson/RapidJSONConfig.cmake.in
-2022/09/17 | 982 | graphics/asymptote/LspCpp/third_party/rapidjson/example/CMakeLists.txt
-2022/09/17 | 9826 | graphics/asymptote/base/rationalSimplex.asy
-2022/09/17 | 9822 | graphics/asymptote/doc/FAQ/m-html.pl
-2022/09/17 | 980 | graphics/asymptote/examples/filesurface.asy
-2022/09/17 | 98015 | graphics/asymptote/GUI/Window1.py
-2022/09/17 | 978 | graphics/asymptote/examples/worksheet.asy
-2022/09/17 | 9784 | graphics/asymptote/triple.h
-2022/09/17 | 9772 | graphics/asymptote/fundec.cc
-2022/09/17 | 9765 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/schema.zh-cn.md
-2022/09/17 | 9755 | graphics/asymptote/v3dfile.cc
-2022/09/17 | 974 | graphics/asymptote/prc/Makefile
-2022/09/17 | 9740 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/error/error.h
-2022/09/17 | 973 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/executeCommand.h
-2022/09/17 | 973 | graphics/asymptote/examples/fequlogo.asy
-2022/09/17 | 972 | graphics/asymptote/examples/triads.asy
-2022/09/17 | 971 | graphics/asymptote/LspCpp/third_party/rapidjson/test/perftest/perftest.cpp
-2022/09/17 | 969 | graphics/asymptote/runfile.h
-2022/09/17 | 96863 | macros/generic/unicode-data/GraphemeBreakProperty.txt
-2022/09/17 | 968193 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/Glew/glew.c
-2022/09/17 | 966 | graphics/asymptote/tests/array/solve.asy
-2022/09/17 | 964 | graphics/asymptote/LspCpp/src/jsonrpc/Context.cpp
-2022/09/17 | 9641 | graphics/asymptote/LspCpp/src/jsonrpc/TcpServer.cpp
-2022/09/17 | 9640 | support/texaccents/texaccents.tex
-2022/09/17 | 95 | graphics/asymptote/prc/test.asy
-2022/09/17 | 95 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/depend.make
-2022/09/17 | 9562 | graphics/asymptote/base/bezulate.asy
-2022/09/17 | 954 | graphics/asymptote/examples/poster.asy
-2022/09/17 | 952118 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/nuklear.h
-2022/09/17 | 951 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
-2022/09/17 | 9502 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_list_output_unittest.py
-2022/09/17 | 94 | graphics/asymptote/LspCpp/third_party/rapidjson/include_dirs.js
-2022/09/17 | 946 | graphics/asymptote/examples/animations/cube.asy
-2022/09/17 | 94336 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/reader.h
-2022/09/17 | 942 | graphics/asymptote/statistics.h
-2022/09/17 | 942 | graphics/asymptote/LspCpp/third_party/rapidjson/example/traverseaspointer.cpp
-2022/09/17 | 941 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsRange.h
-2022/09/17 | 9375 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/msinttypes/stdint.h
-2022/09/17 | 936 | graphics/asymptote/tests/array/array.asy
-2022/09/17 | 935 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/move1.dot
-2022/09/17 | 9352 | fonts/fira/latex/FiraSans.sty
-2022/09/17 | 934 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/declaration_definition.h
-2022/09/17 | 9349 | graphics/asymptote/LspCpp/third_party/rapidjson/example/lookaheadparser/lookaheadparser.cpp
-2022/09/17 | 9334 | graphics/asymptote/base/plain_paths.asy
-2022/09/17 | 9333 | macros/generic/unicode-data/README.md
-2022/09/17 | 9328 | graphics/asymptote/doc/FAQ/bfnnconv.pl
-2022/09/17 | 9327 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_xml_test_utils.py
-2022/09/17 | 931 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_open.h
-2022/09/17 | 9319 | graphics/asymptote/glrender.h
-2022/09/17 | 9318 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_stress_test.cc
-2022/09/17 | 930 | graphics/asymptote/examples/polararea.asy
-2022/09/17 | 929 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/platforms.md
-2022/09/17 | 9298 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/type.json
-2022/09/17 | 9267 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/src/gmock-internal-utils.cc
-2022/09/17 | 9251 | graphics/asymptote/errors
-2022/09/17 | 923 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/required.json
-2022/09/17 | 92378 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/iterative-parser-states-diagram.png
-2022/09/17 | 9231 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/biginteger.h
-2022/09/17 | 922 | graphics/asymptote/doc/imagecontour.asy
-2022/09/17 | 920 | graphics/asymptote/makeUnique.h
-2022/09/17 | 916 | graphics/asymptote/opcodes.h
-2022/09/17 | 912 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/architecture.dot
-2022/09/17 | 912 | graphics/asymptote/doc/errorbars.asy
-2022/09/17 | 9114 | graphics/asymptote/doc/asy.1
-2022/09/17 | 9104 | graphics/asymptote/symbol.cc
-2022/09/17 | 908 | graphics/asymptote/modifier.h
-2022/09/17 | 908 | graphics/asymptote/coenv.h
-2022/09/17 | 908 | graphics/asymptote/base/map.asy
-2022/09/17 | 9088 | graphics/asymptote/application.h
-2022/09/17 | 9059 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/bin/jsonschema_suite
-2022/09/17 | 9040 | systems/texlive/tlnet/archive/newpax.source.r64415.tar.xz
-2022/09/17 | 9036 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/allocatorstest.cpp
-2022/09/17 | 9032 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/strtod.h
-2022/09/17 | 9022 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/nfd_gtk.c
-2022/09/17 | 9021 | graphics/asymptote/psfile.h
-2022/09/17 | 901 | graphics/asymptote/virtualfieldaccess.cc
-2022/09/17 | 900 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/range_formatting.h
-2022/09/17 | 8 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail16.json
-2022/09/17 | 897 | graphics/asymptote/doc/flowchartdemo.asy
-2022/09/17 | 896 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/maxLength.json
-2022/09/17 | 896592 | macros/latex/contrib/verifiche.zip
-2022/09/17 | 895 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/maxLength.json
-2022/09/17 | 8950 | macros/generic/unicode-data/BidiBrackets.txt
-2022/09/17 | 891 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkConstructorsStatus.h
-2022/09/17 | 88 | graphics/asymptote/cudareflect/tinyexr/examples/exrfilter/README.md
-2022/09/17 | 8894 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/README.md
-2022/09/17 | 8883 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/pointer.md
-2022/09/17 | 886 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/minLength.json
-2022/09/17 | 886 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/minLength.json
-2022/09/17 | 886 | graphics/asymptote/angle.h
-2022/09/17 | 8861 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample6_unittest.cc
-2022/09/17 | 885746 | macros/latex/required/babel/base/babel.pdf
-2022/09/17 | 883 | graphics/asymptote/cudareflect/helper.cuh
-2022/09/17 | 88387 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest.h
-2022/09/17 | 8836 | systems/texlive/tlnet/archive/newpax.r64415.tar.xz
-2022/09/17 | 881 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsDocumentUri.h
-2022/09/17 | 8815 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/error/en.h
-2022/09/17 | 880 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveTypeHierarchy.h
-2022/09/17 | 880 | graphics/asymptote/doc/xasy.1x
-2022/09/17 | 8804 | graphics/asymptote/runmath.in
-2022/09/17 | 879 | graphics/asymptote/examples/markregular.asy
-2022/09/17 | 8795 | graphics/asymptote/LspCpp/third_party/rapidjson/readme.zh-cn.md
-2022/09/17 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
-2022/09/17 | 8789 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-pp-string_test.cc
-2022/09/17 | 877 | graphics/asymptote/GUI/Widg_addPolyOpt.py
-2022/09/17 | 877 | graphics/asymptote/doc/markers2.asy
-2022/09/17 | 8767 | graphics/asymptote/LspCpp/third_party/uri/test/uri_normalization_test.cpp
-2022/09/17 | 872 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/data/menu.json
-2022/09/17 | 8711 | graphics/asymptote/base/plain_pens.asy
-2022/09/17 | 870 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateDelegateMethods.h
-2022/09/17 | 8701 | graphics/asymptote/LspCpp/third_party/rapidjson/example/schemavalidator/schemavalidator.cpp
-2022/09/17 | 86 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/readme.txt
-2022/09/17 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
-2022/09/17 | 869 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkDelegateMethodsStatus.h
-2022/09/17 | 869940 | install/fonts/librebaskerville.tds.zip
-2022/09/17 | 868 | graphics/asymptote/examples/twistedtubes.asy
-2022/09/17 | 867 | graphics/asymptote/cudareflect/tinyexr/test/unit/config-msvc.py
-2022/09/17 | 866 | graphics/asymptote/examples/xxsq01x-1.asy
-2022/09/17 | 8668 | graphics/asymptote/xstream.h
-2022/09/17 | 86552 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/advanced.md
-2022/09/17 | 863 | graphics/asymptote/GUI/res/icons/edit.svg
-2022/09/17 | 86012 | systems/texlive/tlnet/archive/garamond-libre.doc.r64412.tar.xz
-2022/09/17 | 85 | graphics/asymptote/cudareflect/tinyexr/vcsetup2019.bat
-2022/09/17 | 85989 | graphics/asymptote/base/three.asy
-2022/09/17 | 858 | graphics/asymptote/GUI/res/icons/center.svg
-2022/09/17 | 858874 | fonts/librebaskerville.zip
-2022/09/17 | 857 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/pattern.json
-2022/09/17 | 857 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/pattern.json
-2022/09/17 | 856 | graphics/asymptote/examples/animations/sphere.asy
-2022/09/17 | 8561 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_output_test_.cc
-2022/09/17 | 854 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/definitions.json
-2022/09/17 | 85342 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-port.h
-2022/09/17 | 8532 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/pointer.zh-cn.md
-2022/09/17 | 8528 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/src/gmock.cc
-2022/09/17 | 8519 | graphics/asymptote/cudareflect/ReflectanceMapper.cu
-2022/09/17 | 84 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/unittestschema/oneOf_address.json
-2022/09/17 | 84 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/unittestschema/anyOf_address.json
-2022/09/17 | 84 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/unittestschema/allOf_address.json
-2022/09/17 | 849 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/booleans.json
-2022/09/17 | 848 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/formatting.h
-2022/09/17 | 848 | graphics/asymptote/base/shaders/sum2.glsl
-2022/09/17 | 846 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/resolveUnimplementedAccessors.h
-2022/09/17 | 84690 | macros/generic/unicode-data/CaseFolding.txt
-2022/09/17 | 845 | graphics/asymptote/envcompleter.h
-2022/09/17 | 8456 | graphics/asymptote/cudareflect/tinyexr/examples/deepview/trackball.cc
-2022/09/17 | 843 | graphics/asymptote/tests/arith/integer.asy
-2022/09/17 | 8439 | graphics/asymptote/runpath.in
-2022/09/17 | 8436736 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
-2022/09/17 | 842 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentEdit.h
-2022/09/17 | 8429 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/dtoa.h
-2022/09/17 | 8429 | graphics/asymptote/examples/thermodynamics.asy
-2022/09/17 | 840 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
-2022/09/17 | 8407 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_test_utils.py
-2022/09/17 | 839 | graphics/asymptote/examples/venn3.asy
-2022/09/17 | 8386 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-catch-exceptions-test_.cc
-2022/09/17 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
-2022/09/17 | 837091 | macros/latex/required/babel/base/locale.zip
-2022/09/17 | 8361 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/msinttypes/inttypes.h
-2022/09/17 | 834 | graphics/asymptote/LspCpp/third_party/rapidjson/test/perftest/CMakeLists.txt
-2022/09/17 | 83449 | graphics/asymptote/lex.yy.cc
-2022/09/17 | 8342 | graphics/asymptote/base/simplex.asy
-2022/09/17 | 832 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-255456016cca60ddb5c5ed6898182e13739bf687b17d1411e97bb60ad95e7a84_min
-2022/09/17 | 831 | graphics/asymptote/runbacktrace.in
-2022/09/17 | 831 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
-2022/09/17 | 831 | graphics/asymptote/cudareflect/tinyexr/test/fuzzer/fuzz.cc
-2022/09/17 | 8318976 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
-2022/09/17 | 830 | graphics/asymptote/shaders.h
-2022/09/17 | 8307 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-assertion-result.h
-2022/09/17 | 829 | graphics/asymptote/GUI/res/icons/close-round.svg
-2022/09/17 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
-2022/09/17 | 828 | graphics/asymptote/LspCpp/third_party/rapidjson/CMakeModules/FindGTestSrc.cmake
-2022/09/17 | 825 | graphics/asymptote/examples/xxsq01y.asy
-2022/09/17 | 8240 | graphics/asymptote/base/asy-kate.sh
-2022/09/17 | 822 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateHashCodeEquals.h
-2022/09/17 | 821 | graphics/asymptote/v3dtypes.py
-2022/09/17 | 821 | graphics/asymptote/examples/SierpinskiGasket.asy
-2022/09/17 | 820 | graphics/asymptote/webgl/license
-2022/09/17 | 820 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/LICENSE
-2022/09/17 | 81 | graphics/asymptote/doc/bezier.asy
-2022/09/17 | 818 | graphics/asymptote/GLTextures.cc
-2022/09/17 | 815 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_save.h
-2022/09/17 | 814 | graphics/asymptote/camperror.h
-2022/09/17 | 81447 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
-2022/09/17 | 8130 | macros/latex/contrib/verifiche/verifiche-example.tex
-2022/09/17 | 8129 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/CMakeLists.txt
-2022/09/17 | 8120 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-message.h
-2022/09/17 | 8112 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-test-part-test.cc
-2022/09/17 | 810 | graphics/asymptote/GUI/res/icons/android-expand.svg
-2022/09/17 | 810 | graphics/asymptote/examples/orthocenter.asy
-2022/09/17 | 8096 | graphics/asymptote/runhistory.cc
-2022/09/17 | 8092 | graphics/asymptote/LspCpp/examples/WebsocketExample.cpp
-2022/09/17 | 8037 | graphics/asymptote/name.cc
-2022/09/17 | 802 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/nulls.json
-2022/09/17 | 802 | graphics/asymptote/examples/vertexshading.asy
-2022/09/17 | 802 | graphics/asymptote/examples/controlsystem.asy
-2022/09/17 | 8014 | graphics/asymptote/base/stats.asy
-2022/09/17 | 800 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_close.h
-2022/09/17 | 8008 | graphics/asymptote/runpath3d.in
-2022/09/17 | 7 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail31.json
-2022/09/17 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
-2022/09/17 | 795 | graphics/asymptote/GUI/res/icons/android-refresh.svg
-2022/09/17 | 7957 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-options-test.cc
-2022/09/17 | 794 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/execute_command.h
-2022/09/17 | 793 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-eedff3a9e99eb1c0fd3a3b0989e7c44c0a69f04f10b23e5264f362a4773f4397_min
-2022/09/17 | 792 | graphics/asymptote/doc/secondaryaxis.asy
-2022/09/17 | 79178 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.make
-2022/09/17 | 790 | graphics/asymptote/LspCpp/include/LibLsp/lsp/AbsolutePath.h
-2022/09/17 | 790 | graphics/asymptote/GUI/res/icons/android-camera.svg
-2022/09/17 | 79003 | graphics/asymptote/GUI/windows/window1.ui
-2022/09/17 | 78 | graphics/asymptote/examples/randompath3.asy
-2022/09/17 | 7869 | macros/latex/required/babel/base/babel.ins
-2022/09/17 | 784 | graphics/asymptote/LspCpp/third_party/uri/deps/CMakeLists.txt
-2022/09/17 | 781 | graphics/asymptote/LspCpp/third_party/uri/deps/WORKSPACE
-2022/09/17 | 77 | graphics/asymptote/tests/gc/string.asy
-2022/09/17 | 7790 | graphics/asymptote/coder.cc
-2022/09/17 | 7780 | graphics/asymptote/cudareflect/main.cc
-2022/09/17 | 77498 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_pred_impl_unittest.cc
-2022/09/17 | 7731 | graphics/asymptote/LspCpp/third_party/uri/include/network/string_view.hpp
-2022/09/17 | 771 | graphics/asymptote/GUI/res/icons/check.svg
-2022/09/17 | 770 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/publishDiagnostics.h
-2022/09/17 | 770 | graphics/asymptote/asy.rc
-2022/09/17 | 76 | graphics/asymptote/examples/grid.asy
-2022/09/17 | 7684 | graphics/asymptote/cudareflect/tinyexr/cmake/sanitizers/sanitize-helpers.cmake
-2022/09/17 | 76801 | graphics/asymptote/gl-matrix-2.4.0-pruned/dist/gl-matrix.js
-2022/09/17 | 7671 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Context.h
-2022/09/17 | 7670 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsWorkspaceClientCapabilites.h
-2022/09/17 | 766 | graphics/asymptote/vm.h
-2022/09/17 | 76445 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-spec-builders.h
-2022/09/17 | 7639 | graphics/asymptote/LICENSE.LESSER
-2022/09/17 | 7634 | graphics/asymptote/base/plain.asy
-2022/09/17 | 76339 | graphics/asymptote/runarray.cc
-2022/09/17 | 762 | graphics/asymptote/examples/clockarray.asy
-2022/09/17 | 759 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json
-2022/09/17 | 755773 | macros/latex/contrib/nicematrix/nicematrix.dtx
-2022/09/17 | 754 | graphics/asymptote/doc/graphmarkers.asy
-2022/09/17 | 752 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
-2022/09/17 | 751 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/message.h
-2022/09/17 | 750 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/searchSymbols.h
-2022/09/17 | 750 | graphics/asymptote/GUI/res/icons/plus-round.svg
-2022/09/17 | 74 | graphics/asymptote/LspCpp/include/LibLsp/lsp/method_type.h
-2022/09/17 | 748828 | macros/latex/required/babel/base/babel.dtx
-2022/09/17 | 747 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentItem.h
-2022/09/17 | 747 | graphics/asymptote/examples/pseudosphere.asy
-2022/09/17 | 74749 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-spec-builders_test.cc
-2022/09/17 | 746 | graphics/asymptote/tests/array/sort.asy
-2022/09/17 | 743 | graphics/asymptote/GUI/res/icons/circle.svg
-2022/09/17 | 743 | graphics/asymptote/examples/xxsq01.asy
-2022/09/17 | 741 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/test/test_opendialogmultiple.c
-2022/09/17 | 74120 | graphics/asymptote/LspCpp/third_party/uri/Doxyfile
-2022/09/17 | 740 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf32lebom.json
-2022/09/17 | 740 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf32bebom.json
-2022/09/17 | 7407 | graphics/asymptote/base/graph_splinetype.asy
-2022/09/17 | 74016 | graphics/asymptote/LspCpp/third_party/uri/Doxyfile.in
-2022/09/17 | 739 | graphics/asymptote/examples/condor.asy
-2022/09/17 | 737 | graphics/asymptote/tests/array/determinant.asy
-2022/09/17 | 736 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf32le.json
-2022/09/17 | 736 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf32be.json
-2022/09/17 | 7364 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/gmock_cheat_sheet.md
-2022/09/17 | 734 | graphics/asymptote/examples/quilt.asy
-2022/09/17 | 73435 | graphics/asymptote/GL/glxew.h
-2022/09/17 | 733 | graphics/asymptote/GUI/xasySvg.py
-2022/09/17 | 7331 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_completion.h
-2022/09/17 | 7322 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-break-on-failure-unittest.py
-2022/09/17 | 730 | graphics/asymptote/base/shaders/sum1.glsl
-2022/09/17 | 7304 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-string.h
-2022/09/17 | 7302 | graphics/asymptote/base/markers.asy
-2022/09/17 | 72 | graphics/asymptote/tests/gc/pen.asy
-2022/09/17 | 729 | graphics/asymptote/base/labelpath.asy
-2022/09/17 | 72887 | graphics/asymptote/base/three_surface.asy
-2022/09/17 | 7287 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_stress_test.cc
-2022/09/17 | 727 | graphics/asymptote/examples/fermi.asy
-2022/09/17 | 7274 | graphics/asymptote/runtime.pl
-2022/09/17 | 7260 | graphics/asymptote/config.h.in
-2022/09/17 | 725 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/minProperties.json
-2022/09/17 | 722 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkToStringStatus.h
-2022/09/17 | 7222 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
-2022/09/17 | 721 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentPositionParams.h
-2022/09/17 | 7218 | graphics/asymptote/LspCpp/third_party/rapidjson/test/perftest/schematest.cpp
-2022/09/17 | 72068 | macros/latex/contrib/verifiche/verifiche.dtx
-2022/09/17 | 71994 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/Glew/CustomGL/glxew.h
-2022/09/17 | 7180 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_repeat_test.cc
-2022/09/17 | 7157 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/stack.h
-2022/09/17 | 714 | graphics/asymptote/mod.h
-2022/09/17 | 714 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
-2022/09/17 | 714 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/progress.h
-2022/09/17 | 714 | graphics/asymptote/examples/unitoctantx.asy
-2022/09/17 | 7141676 | systems/texlive/tlnet/archive/garamond-libre.r64412.tar.xz
-2022/09/17 | 713 | graphics/asymptote/examples/gamma3.asy
-2022/09/17 | 7139 | macros/generic/unicode-data/load-unicode-xetex-classes.tex
-2022/09/17 | 71368 | graphics/asymptote/base/asy-mode.el
-2022/09/17 | 7133 | graphics/asymptote/LspCpp/src/jsonrpc/StreamMessageProducer.cpp
-2022/09/17 | 7125 | graphics/asymptote/LspCpp/third_party/rapidjson/example/archiver/archiver.cpp
-2022/09/17 | 71201 | graphics/asymptote/prc/oPRCFile.cc
-2022/09/17 | 711 | graphics/asymptote/examples/partialsurface.asy
-2022/09/17 | 710 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
-2022/09/17 | 710 | graphics/asymptote/examples/fjortoft.asy
-2022/09/17 | 70 | graphics/asymptote/tests/gc/transform.asy
-2022/09/17 | 709 | graphics/asymptote/cudareflect/tinyexr/test/fuzzer/Makefile
-2022/09/17 | 706 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/maxItems.json
-2022/09/17 | 706 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/maxItems.json
-2022/09/17 | 705 | graphics/asymptote/GUI/res/icons/arrow-move.svg
-2022/09/17 | 7054 | macros/generic/unicode-data/load-unicode-data.tex
-2022/09/17 | 7049 | graphics/asymptote/LspCpp/third_party/uri/Makefile
-2022/09/17 | 703 | graphics/asymptote/examples/NURBScurve.asy
-2022/09/17 | 7016 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/simdtest.cpp
-2022/09/17 | 70145 | graphics/asymptote/base/graph3.asy
-2022/09/17 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
-2022/09/17 | 6964 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageIssue.h
-2022/09/17 | 6944 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-test-part.h
-2022/09/17 | 69441 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/miniz.h
-2022/09/17 | 693 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/minItems.json
-2022/09/17 | 693 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/minItems.json
-2022/09/17 | 6917 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
-2022/09/17 | 6915 | graphics/asymptote/LspCpp/examples/TcpServerExample.cpp
-2022/09/17 | 6911 | graphics/asymptote/errortest.asy
-2022/09/17 | 690 | graphics/asymptote/examples/layers.asy
-2022/09/17 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
-2022/09/17 | 688 | graphics/asymptote/examples/centroidfg.asy
-2022/09/17 | 687 | graphics/asymptote/cudareflect/tinyexr/examples/exr2fptiff/Makefile
-2022/09/17 | 687491 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/data/sample.json
-2022/09/17 | 6872 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/reference/actions.md
-2022/09/17 | 6860 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/encoding.zh-cn.md
-2022/09/17 | 685 | graphics/asymptote/LspCpp/third_party/rapidjson/example/simpledom/simpledom.cpp
-2022/09/17 | 6849 | graphics/asymptote/LspCpp/third_party/rapidjson/example/archiver/archivertest.cpp
-2022/09/17 | 683 | graphics/asymptote/GUI/res/icons/android-close.svg
-2022/09/17 | 683 | graphics/asymptote/examples/fractaltree.asy
-2022/09/17 | 6818 | graphics/asymptote/LspCpp/third_party/rapidjson/CHANGELOG.md
-2022/09/17 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
-2022/09/17 | 680 | graphics/asymptote/tests/array/delete.asy
-2022/09/17 | 679 | graphics/asymptote/examples/genusthree.asy
-2022/09/17 | 678 | graphics/asymptote/LspCpp/third_party/rapidjson/contrib/natvis/README.md
-2022/09/17 | 678 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-5b66774a7498c635334ad386be0c3b359951738ac47f14878a3346d1c6ea0fe5_min
-2022/09/17 | 6787 | graphics/asymptote/drawlabel.cc
-2022/09/17 | 677 | graphics/asymptote/doc/Bode.asy
-2022/09/17 | 677 | graphics/asymptote/base/shaders/vertex.glsl
-2022/09/17 | 6772 | graphics/asymptote/cudareflect/tinyexr/examples/nornalmap/main.cc
-2022/09/17 | 6751 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/optional/format.json
-2022/09/17 | 674 | graphics/asymptote/examples/sqrtx01.asy
-2022/09/17 | 6748 | systems/texlive/tlnet/archive/udes-genie-these.r64416.tar.xz
-2022/09/17 | 6732 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/stream.h
-2022/09/17 | 67309 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal
-2022/09/17 | 6726 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/examples/example3.c
-2022/09/17 | 6725 | graphics/asymptote/guide.h
-2022/09/17 | 6717 | graphics/asymptote/GUI/xasyOptions.py
-2022/09/17 | 6714 | graphics/asymptote/base/shaders/fragment.glsl
-2022/09/17 | 67146 | graphics/asymptote/GUI/xasy2asy.py
-2022/09/17 | 670 | graphics/asymptote/base/v3dtypes.asy
-2022/09/17 | 6708 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/encoding.md
-2022/09/17 | 66 | graphics/asymptote/examples/shade.asy
-2022/09/17 | 669 | graphics/asymptote/drawpath.h
-2022/09/17 | 667 | graphics/asymptote/tinyexr.cc
-2022/09/17 | 667 | graphics/asymptote/examples/spring.asy
-2022/09/17 | 66751 | graphics/asymptote/prc/writePRC.cc
-2022/09/17 | 6673 | graphics/asymptote/main.cc
-2022/09/17 | 6650 | graphics/asymptote/getopt.h
-2022/09/17 | 664 | graphics/asymptote/GUI/res/icons/android-delete.svg
-2022/09/17 | 66482 | graphics/asymptote/base/webgl/asygl.js
-2022/09/17 | 66414 | graphics/asymptote/glrender.cc
-2022/09/17 | 663 | graphics/asymptote/LspCpp/include/LibLsp/lsp/ExecuteCommandParams.h
-2022/09/17 | 663 | graphics/asymptote/GUI/res/icons/save.svg
-2022/09/17 | 6634 | graphics/asymptote/simpson.cc
-2022/09/17 | 6623 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/threaded_queue.h
-2022/09/17 | 6616 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/meta.h
-2022/09/17 | 65 | graphics/asymptote/tests/gc/guide.asy
-2022/09/17 | 6593 | graphics/asymptote/LspCpp/examples/StdIOClientExample.cpp
-2022/09/17 | 6585 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample5_unittest.cc
-2022/09/17 | 657 | graphics/asymptote/examples/lowupint.asy
-2022/09/17 | 657 | graphics/asymptote/examples/100d.views
-2022/09/17 | 657 | graphics/asymptote/base/reload.js
-2022/09/17 | 6572 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/misc/doxygenextra.css
-2022/09/17 | 6553 | graphics/asymptote/cudareflect/tinyexr/examples/deepview/main.cc
-2022/09/17 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
-2022/09/17 | 6551 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/examples/example2.c
-2022/09/17 | 654 | graphics/asymptote/fpu.h
-2022/09/17 | 654 | graphics/asymptote/examples/limit.asy
-2022/09/17 | 6543 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-list-tests-unittest.py
-2022/09/17 | 6528 | graphics/asymptote/lspserv.h
-2022/09/17 | 6525 | graphics/asymptote/drawfill.h
-2022/09/17 | 650 | graphics/asymptote/prcfile.h
-2022/09/17 | 6503 | graphics/asymptote/tests/types/constructor.asy
-2022/09/17 | 64 | graphics/asymptote/cudareflect/tinyexr/test/fuzzer/issue-62-tinyexr_memcpy_heap-buffer-overflow
-2022/09/17 | 648 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake
-2022/09/17 | 648 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake
-2022/09/17 | 646 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/addOverridableMethods.h
-2022/09/17 | 645 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateConstructors.h
-2022/09/17 | 6425 | graphics/asymptote/mathop.h
-2022/09/17 | 641 | graphics/asymptote/examples/pOrbital.asy
-2022/09/17 | 6418 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_environment_test.cc
-2022/09/17 | 6412 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_test.cc
-2022/09/17 | 64114 | graphics/asymptote/base/graph.asy
-2022/09/17 | 639 | graphics/asymptote/tests/arith/transform.asy
-2022/09/17 | 639 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
-2022/09/17 | 638888 | macros/latex/contrib/verifiche/verifiche.pdf
-2022/09/17 | 63844 | systems/texlive/tlnet/archive/newpax.doc.r64415.tar.xz
-2022/09/17 | 63842 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-printers-test.cc
-2022/09/17 | 6376 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_xml_output_unittest_.cc
-2022/09/17 | 6370 | graphics/asymptote/asymptote.nsi
-2022/09/17 | 6369 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/traits.h
-2022/09/17 | 63680 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/pointer.h
-2022/09/17 | 63314 | graphics/asymptote/GL/wglew.h
-2022/09/17 | 632 | graphics/asymptote/examples/label3zoom.asy
-2022/09/17 | 631 | graphics/asymptote/locate.h
-2022/09/17 | 631 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
-2022/09/17 | 63193 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/screens/open_gtk3.png
-2022/09/17 | 6318 | graphics/asymptote/doc/leastsquares.dat
-2022/09/17 | 63136 | graphics/asymptote/doc/FAQ/asy-faq.info
-2022/09/17 | 630 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-24322747c47e87a10e4407528b779a1a763a48135384909b3d1010bbba1d4c28_min
-2022/09/17 | 62 | graphics/asymptote/tests/gc/array.asy
-2022/09/17 | 62 | graphics/asymptote/revision.cc
-2022/09/17 | 628 | graphics/asymptote/examples/wedge.asy
-2022/09/17 | 628 | graphics/asymptote/examples/polarcircle.asy
-2022/09/17 | 6288 | graphics/asymptote/transform.h
-2022/09/17 | 6287 | graphics/asymptote/base/plain_prethree.asy
-2022/09/17 | 6278 | graphics/asymptote/base/plain_filldraw.asy
-2022/09/17 | 62767 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/pointertest.cpp
-2022/09/17 | 6275 | graphics/asymptote/generate_enums.py
-2022/09/17 | 626 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
-2022/09/17 | 626 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
-2022/09/17 | 626 | graphics/asymptote/examples/venn.asy
-2022/09/17 | 6253 | graphics/asymptote/LspCpp/third_party/rapidjson/example/tutorial/tutorial.cpp
-2022/09/17 | 6252 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-type-util.h
-2022/09/17 | 6247 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
-2022/09/17 | 62413 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-death-test.cc
-2022/09/17 | 62206 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/Glew/CustomGL/wglew.h
-2022/09/17 | 620 | graphics/asymptote/GUI/res/icons/android-done.svg
-2022/09/17 | 61 | graphics/asymptote/examples/axialshade.asy
-2022/09/17 | 61 | graphics/asymptote/cudareflect/tinyexr/test/issues/160/README.md
-2022/09/17 | 6194 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample8_unittest.cc
-2022/09/17 | 6190 | graphics/asymptote/camp.tab.h
-2022/09/17 | 617 | graphics/asymptote/doc/logo.asy
-2022/09/17 | 6175 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_output_test.py
-2022/09/17 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
-2022/09/17 | 61699 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-internal.h
-2022/09/17 | 61667 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-actions.h
-2022/09/17 | 61659 | graphics/asymptote/runtime.cc
-2022/09/17 | 615 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_configuration.h
-2022/09/17 | 615 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/nfd_common.h
-2022/09/17 | 6159 | graphics/asymptote/base/plain_strings.asy
-2022/09/17 | 612 | graphics/asymptote/cudareflect/tinyexr/experimental/js/README.md
-2022/09/17 | 612 | graphics/asymptote/cudareflect/tinyexr/examples/exr2rgbe/exr2rgbe.cc
-2022/09/17 | 611 | graphics/asymptote/GUI/xasy.py
-2022/09/17 | 6117 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/nfd_cocoa.m
-2022/09/17 | 610 | graphics/asymptote/examples/impact.asy
-2022/09/17 | 6104 | graphics/asymptote/LspCpp/third_party/uri/deps/BUILD.bazel
-2022/09/17 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
-2022/09/17 | 60 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail1.json
-2022/09/17 | 609 | graphics/asymptote/keywords.cc
-2022/09/17 | 6097 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-cardinalities.h
-2022/09/17 | 6090 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/misc/DoxygenLayout.xml
-2022/09/17 | 608 | graphics/asymptote/examples/spline.asy
-2022/09/17 | 608 | graphics/asymptote/base/size10.asy
-2022/09/17 | 606 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/findLinks.h
-2022/09/17 | 604 | graphics/asymptote/doc/flow.asy
-2022/09/17 | 6037 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_help_test.py
-2022/09/17 | 602 | graphics/asymptote/examples/treetest.asy
-2022/09/17 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
-2022/09/17 | 601 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/data/widget.json
-2022/09/17 | 600 | graphics/asymptote/base/size11.asy
-2022/09/17 | 5 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail30.json
-2022/09/17 | 5 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/data/abcde.txt
-2022/09/17 | 59 | graphics/asymptote/examples/stroke3.asy
-2022/09/17 | 599823 | macros/latex/contrib/calculator.zip
-2022/09/17 | 5996 | graphics/asymptote/LspCpp/third_party/rapidjson/example/jsonx/jsonx.cpp
-2022/09/17 | 598 | graphics/asymptote/examples/integraltest.asy
-2022/09/17 | 5987 | graphics/asymptote/runfile.in
-2022/09/17 | 5975 | graphics/asymptote/base/three_tube.asy
-2022/09/17 | 5964 | support/texaccents/texaccents.md
-2022/09/17 | 59583 | graphics/asymptote/GUI/pyUIClass/window1.py
-2022/09/17 | 594 | support/texaccents/texaccents.1
-2022/09/17 | 594 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
-2022/09/17 | 594 | graphics/asymptote/LspCpp/include/LibLsp/lsp/out_list.h
-2022/09/17 | 593 | graphics/asymptote/GUI/res/icons/bucket.asy
-2022/09/17 | 5933 | graphics/asymptote/LspCpp/third_party/rapidjson/example/filterkeydom/filterkeydom.cpp
-2022/09/17 | 5925 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample9_unittest.cc
-2022/09/17 | 591 | graphics/asymptote/examples/sinc.asy
-2022/09/17 | 591672 | macros/generic/unicode-data.zip
-2022/09/17 | 591247 | install/macros/generic/unicode-data.tds.zip
-2022/09/17 | 58 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail10.json
-2022/09/17 | 58 | graphics/asymptote/examples/progrid.asy
-2022/09/17 | 589 | graphics/asymptote/examples/trefoilknot.asy
-2022/09/17 | 5883 | graphics/asymptote/Delaunay.cc
-2022/09/17 | 586 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateAccessors.h
-2022/09/17 | 586 | graphics/asymptote/GUI/xasyStrings.py
-2022/09/17 | 5832 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/fwdtest.cpp
-2022/09/17 | 582 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/data/glossary.json
-2022/09/17 | 582 | graphics/asymptote/examples/cos3.asy
-2022/09/17 | 5820 | graphics/asymptote/cudareflect/IrradianceGenerator.vcxproj
-2022/09/17 | 581 | graphics/asymptote/examples/BezierSaddle.asy
-2022/09/17 | 5818 | graphics/asymptote/LspCpp/include/LibLsp/lsp/IProgressMonitor.h
-2022/09/17 | 580 | graphics/asymptote/examples/xsin1x.asy
-2022/09/17 | 58024 | graphics/asymptote/runpicture.cc
-2022/09/17 | 57 | graphics/asymptote/GUI/requirements.txt
-2022/09/17 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
-2022/09/17 | 579 | graphics/asymptote/examples/sin3.asy
-2022/09/17 | 579 | graphics/asymptote/examples/exp3.asy
-2022/09/17 | 578 | graphics/asymptote/base/annotate.asy
-2022/09/17 | 5789 | graphics/asymptote/base/trembling.asy
-2022/09/17 | 576 | graphics/asymptote/examples/threeviews.asy
-2022/09/17 | 576 | graphics/asymptote/examples/circles.asy
-2022/09/17 | 5767 | graphics/asymptote/drawpath3.h
-2022/09/17 | 57598 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/valuetest.cpp
-2022/09/17 | 5752 | graphics/asymptote/LspCpp/third_party/rapidjson/test/perftest/perftest.h
-2022/09/17 | 573 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/highlight.h
-2022/09/17 | 5735 | graphics/asymptote/base/plain_scaling.asy
-2022/09/17 | 5733 | graphics/asymptote/item.h
-2022/09/17 | 572 | graphics/asymptote/LspCpp/third_party/uri/test/invalid_urls.txt
-2022/09/17 | 572 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/config.hpp
-2022/09/17 | 572 | graphics/asymptote/examples/curvedlabel3.asy
-2022/09/17 | 572138 | macros/latex/contrib/calculator/calculator.pdf
-2022/09/17 | 5712 | graphics/asymptote/bezierpatch.h
-2022/09/17 | 5711 | graphics/asymptote/LspCpp/third_party/uri/test/uri_encoding_test.cpp
-2022/09/17 | 5705 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-json-outfiles-test.py
-2022/09/17 | 569 | graphics/asymptote/cudareflect/tinyexr/examples/cube2longlat/Makefile
-2022/09/17 | 5691 | graphics/asymptote/name.h
-2022/09/17 | 5689 | graphics/asymptote/interact.cc
-2022/09/17 | 5683 | graphics/asymptote/LspCpp/third_party/uri/deps/CONTRIBUTING.md
-2022/09/17 | 5658 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-throw-on-failure-test.py
-2022/09/17 | 563 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_parse.hpp
-2022/09/17 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
-2022/09/17 | 5621 | graphics/asymptote/errormsg.h
-2022/09/17 | 561 | graphics/asymptote/LspCpp/third_party/rapidjson/package.json
-2022/09/17 | 55991 | graphics/asymptote/base/smoothcontour3.asy
-2022/09/17 | 5595 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-failfast-unittest_.cc
-2022/09/17 | 558 | graphics/asymptote/examples/floatingdisk.asy
-2022/09/17 | 557 | graphics/asymptote/examples/Pythagoras.asy
-2022/09/17 | 5578 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/test_checked_api.cpp
-2022/09/17 | 55726 | graphics/asymptote/LspCpp/third_party/utfcpp/README.md
-2022/09/17 | 5571976 | systems/texlive/tlnet/archive/cormorantgaramond.r64411.tar.xz
-2022/09/17 | 5542 | graphics/asymptote/drawpath3.cc
-2022/09/17 | 5540 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/stringbuffertest.cpp
-2022/09/17 | 5537 | graphics/asymptote/examples/cpkcolors.asy
-2022/09/17 | 5531 | graphics/asymptote/examples/filesurface.dat
-2022/09/17 | 5521 | graphics/asymptote/base/rational.asy
-2022/09/17 | 54 | graphics/asymptote/tests/gc/funcall.asy
-2022/09/17 | 54963 | graphics/asymptote/settings.cc
-2022/09/17 | 548 | graphics/asymptote/v3dtypes.h
-2022/09/17 | 548 | graphics/asymptote/examples/equilchord.asy
-2022/09/17 | 548 | graphics/asymptote/cudareflect/Makefile
-2022/09/17 | 547 | graphics/asymptote/examples/tetra.asy
-2022/09/17 | 5441 | graphics/asymptote/env.cc
-2022/09/17 | 542616 | systems/texlive/tlnet/archive/biblatex-philosophy.doc.r64414.tar.xz
-2022/09/17 | 5415 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_xml_outfiles_test.py
-2022/09/17 | 5415 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/istreamwrappertest.cpp
-2022/09/17 | 54109 | graphics/asymptote/optional.hpp
-2022/09/17 | 5375 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample3-inl.h
-2022/09/17 | 5366 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/stream.h
-2022/09/17 | 5360 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample3_unittest.cc
-2022/09/17 | 535 | graphics/asymptote/cudareflect/tinyexr/Makefile.llvm-mingw
-2022/09/17 | 5358 | graphics/asymptote/LspCpp/src/lsp/working_files.cpp
-2022/09/17 | 533 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/generateToString.h
-2022/09/17 | 533 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/test/test_savedialog.c
-2022/09/17 | 53373 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-more-actions_test.cc
-2022/09/17 | 5323 | graphics/asymptote/cudareflect/tinyexr/examples/exr2fptiff/exr2fptiff.cc
-2022/09/17 | 5319 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/sonarlint/protocol.h
-2022/09/17 | 530 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/test/test_opendialog.c
-2022/09/17 | 5308 | graphics/asymptote/pair.h
-2022/09/17 | 52 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/pass2.json
-2022/09/17 | 52 | graphics/asymptote/doc/square.asy
-2022/09/17 | 5279 | graphics/asymptote/base/bsp.asy
-2022/09/17 | 52750 | graphics/asymptote/cudareflect/tinyexr/test/unit/tester.cc
-2022/09/17 | 5272 | graphics/asymptote/GUI/labelEditor.py
-2022/09/17 | 5265 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-message-test.cc
-2022/09/17 | 5262 | graphics/asymptote/patches/bison.patch
-2022/09/17 | 5262 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/src/gmock-cardinalities.cc
-2022/09/17 | 525 | graphics/asymptote/examples/vectorfield3.asy
-2022/09/17 | 5259 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/logo/rapidjson.png
-2022/09/17 | 5254 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-global-environment-unittest.py
-2022/09/17 | 5250 | graphics/asymptote/pipestream.cc
-2022/09/17 | 524 | graphics/asymptote/doc/brokenaxis.asy
-2022/09/17 | 5242 | graphics/asymptote/LspCpp/src/jsonrpc/serializer.cpp
-2022/09/17 | 5238 | graphics/asymptote/base/animation.asy
-2022/09/17 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
-2022/09/17 | 5216 | graphics/asymptote/examples/mosaic.asy
-2022/09/17 | 520 | graphics/asymptote/examples/smoothelevation.asy
-2022/09/17 | 5204 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/quickstart-bazel.md
-2022/09/17 | 519 | graphics/asymptote/examples/extrudedcontour.asy
-2022/09/17 | 518 | graphics/asymptote/doc/CDlabel.asy
-2022/09/17 | 5183 | graphics/asymptote/stm.h
-2022/09/17 | 51671 | graphics/asymptote/prc/oPRCFile.h
-2022/09/17 | 5152 | graphics/asymptote/LspCpp/third_party/rapidjson/license.txt
-2022/09/17 | 513 | graphics/asymptote/examples/buildcycle.asy
-2022/09/17 | 51302 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-actions_test.cc
-2022/09/17 | 5129 | graphics/asymptote/LspCpp/third_party/rapidjson/example/parsebyparts/parsebyparts.cpp
-2022/09/17 | 5115 | graphics/asymptote/memory.h
-2022/09/17 | 5114 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/future.h
-2022/09/17 | 511473 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2022/09/17 | 5111 | graphics/asymptote/runsystem.in
-2022/09/17 | 5111 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample1_unittest.cc
-2022/09/17 | 510 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/internal/custom/README.md
-2022/09/17 | 50 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail18.json
-2022/09/17 | 50 | graphics/asymptote/cudareflect/tinyexr/test/unit/win32-filelist-utf16le.inc
-2022/09/17 | 50 | graphics/asymptote/base/babel.asy
-2022/09/17 | 509 | graphics/asymptote/examples/dimension.asy
-2022/09/17 | 509 | graphics/asymptote/cudareflect/tinyexr/Makefile
-2022/09/17 | 50934 | graphics/asymptote/runarray.in
-2022/09/17 | 506 | graphics/asymptote/examples/delu.asy
-2022/09/17 | 5064 | graphics/asymptote/runhistory.in
-2022/09/17 | 506313 | graphics/asymptote/libatomic_ops-7.6.12.tar.gz
-2022/09/17 | 5062 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/pkgconfig.md
-2022/09/17 | 5054 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/quickstart-cmake.md
-2022/09/17 | 504 | graphics/asymptote/absyn.cc
-2022/09/17 | 50437 | graphics/asymptote/gsl.cc
-2022/09/17 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
-2022/09/17 | 503 | graphics/asymptote/cudareflect/tinyexr/test/fuzzer/issue-63-tinyexr_signed-integer-overflow
-2022/09/17 | 500 | graphics/asymptote/examples/floor.asy
-2022/09/17 | 500 | graphics/asymptote/doc/Hobbydir.asy
-2022/09/17 | 5005 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/features.md
-2022/09/17 | 50028 | support/texaccents/texaccents.pdf
-2022/09/17 | 4 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail29.json
-2022/09/17 | 49 | graphics/asymptote/doc/quartercircle.asy
-2022/09/17 | 49 | graphics/asymptote/doc/dots.asy
-2022/09/17 | 49 | graphics/asymptote/doc/colons.asy
-2022/09/17 | 499 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/cmake/libgtest.la.in
-2022/09/17 | 499 | graphics/asymptote/examples/galleon.asy
-2022/09/17 | 4992 | graphics/asymptote/base/tube.asy
-2022/09/17 | 498 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/type_definition.h
-2022/09/17 | 498 | graphics/asymptote/examples/fano.asy
-2022/09/17 | 498 | graphics/asymptote/doc/penfunctionimage.asy
-2022/09/17 | 4985 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample10_unittest.cc
-2022/09/17 | 496 | graphics/asymptote/examples/bars3.asy
-2022/09/17 | 4963 | graphics/asymptote/LspCpp/third_party/rapidjson/example/filterkey/filterkey.cpp
-2022/09/17 | 495 | graphics/asymptote/examples/cones.asy
-2022/09/17 | 495 | graphics/asymptote/cudareflect/tinyexr/experimental/js/test.js
-2022/09/17 | 494 | graphics/asymptote/drawgrestore.h
-2022/09/17 | 494 | graphics/asymptote/cudareflect/tinyexr/experimental/js/compile_to_js.sh
-2022/09/17 | 4942 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
-2022/09/17 | 492 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Cancellation.h
-2022/09/17 | 491 | graphics/asymptote/LspCpp/third_party/rapidjson/test/CMakeLists.txt
-2022/09/17 | 4919 | graphics/asymptote/process.h
-2022/09/17 | 4904 | graphics/asymptote/LspCpp/examples/StdIOServerExample.cpp
-2022/09/17 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
-2022/09/17 | 489 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCompletionItem.h
-2022/09/17 | 4898 | graphics/asymptote/LspCpp/include/LibLsp/lsp/utils.h
-2022/09/17 | 4896 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-color-test.py
-2022/09/17 | 4895 | graphics/asymptote/fundec.h
-2022/09/17 | 488 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/implementation.h
-2022/09/17 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
-2022/09/17 | 487 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/shutdown.h
-2022/09/17 | 4873 | graphics/asymptote/parser.cc
-2022/09/17 | 4866 | graphics/asymptote/fileio.cc
-2022/09/17 | 4862 | graphics/asymptote/drawpath.cc
-2022/09/17 | 485 | graphics/asymptote/examples/cards.asy
-2022/09/17 | 48481 | graphics/asymptote/prc/writePRC.h
-2022/09/17 | 48441 | graphics/asymptote/config.guess
-2022/09/17 | 4841 | graphics/asymptote/tests/array/slice.asy
-2022/09/17 | 483 | graphics/asymptote/LspCpp/third_party/uri/test/string_utility.hpp
-2022/09/17 | 482 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialized.h
-2022/09/17 | 4811 | graphics/asymptote/base/x11colors.asy
-2022/09/17 | 480 | graphics/asymptote/doc/logimage.asy
-2022/09/17 | 4809 | graphics/asymptote/examples/interpolate1.asy
-2022/09/17 | 4807 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/internal/gmock-port.h
-2022/09/17 | 4805 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/features.zh-cn.md
-2022/09/17 | 479 | graphics/asymptote/examples/magnetic.asy
-2022/09/17 | 47993 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-death-test-test.cc
-2022/09/17 | 4789 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsAny.h
-2022/09/17 | 4787 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/README.md
-2022/09/17 | 476 | graphics/asymptote/GUI/configs/xasykeymap.cson
-2022/09/17 | 4766 | graphics/asymptote/GUI/xasyFile.py
-2022/09/17 | 4761 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
-2022/09/17 | 4760 | graphics/asymptote/LspCpp/include/LibLsp/lsp/symbol.h
-2022/09/17 | 47582 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-port.cc
-2022/09/17 | 475783 | graphics/asymptote/doc/png/asymptote.info
-2022/09/17 | 4738 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-360c3b0555cb979ca108f2d178cf8a80959cfeabaa4ec1d310d062fa653a8c6b_min
-2022/09/17 | 473703 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-1383755b301e5f505b2198dc0508918b537fdf48bbfc6deeffe268822e6f6cd6
-2022/09/17 | 473695 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-e7fa6404daa861369d2172fe68e08f9d38c0989f57da7bcfb510bab67e19ca9f
-2022/09/17 | 4735 | graphics/asymptote/array.cc
-2022/09/17 | 4733 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/jsoncheckertest.cpp
-2022/09/17 | 4731 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/flaga.exr
-2022/09/17 | 4730 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/typeHierarchy.h
-2022/09/17 | 472 | graphics/asymptote/examples/colorplanes.asy
-2022/09/17 | 4727 | graphics/asymptote/doc/westnile.csv
-2022/09/17 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
-2022/09/17 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
-2022/09/17 | 469 | graphics/asymptote/LspCpp/third_party/rapidjson/RapidJSONConfigVersion.cmake.in
-2022/09/17 | 46854 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-internal-inl.h
-2022/09/17 | 4668 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-list-tests-unittest_.cc
-2022/09/17 | 465 | graphics/asymptote/LspCpp/src/jsonrpc/threaded_queue.cpp
-2022/09/17 | 46531 | graphics/asymptote/base/plain_picture.asy
-2022/09/17 | 464 | graphics/asymptote/drawgsave.h
-2022/09/17 | 464 | graphics/asymptote/doc/GaussianSurface.asy
-2022/09/17 | 463 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json
-2022/09/17 | 4635 | graphics/asymptote/cudareflect/tinyexr/examples/exrfilter/exrfilter.cc
-2022/09/17 | 4634 | macros/latex/contrib/calculator/README.md
-2022/09/17 | 4629 | graphics/asymptote/castop.h
-2022/09/17 | 4626 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/test_unchecked_api.cpp
-2022/09/17 | 4620 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample7_unittest.cc
-2022/09/17 | 4613 | graphics/asymptote/LspCpp/third_party/uri/deps/README.md
-2022/09/17 | 460 | graphics/asymptote/examples/lever.asy
-2022/09/17 | 460 | graphics/asymptote/examples/cosaddition.asy
-2022/09/17 | 4608 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/optional/format.json
-2022/09/17 | 4602 | graphics/asymptote/util.h
-2022/09/17 | 4602 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/README.md
-2022/09/17 | 459 | graphics/asymptote/examples/hierarchy.asy
-2022/09/17 | 4597 | graphics/asymptote/drawfill.cc
-2022/09/17 | 458 | graphics/asymptote/doc/multicontour.asy
-2022/09/17 | 4581 | graphics/asymptote/LspCpp/third_party/rapidjson/example/serialize/serialize.cpp
-2022/09/17 | 457 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/link.txt
-2022/09/17 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
-2022/09/17 | 4570 | graphics/asymptote/env.h
-2022/09/17 | 454 | graphics/asymptote/EXRFiles.h
-2022/09/17 | 45411 | graphics/asymptote/fftw++.h
-2022/09/17 | 453 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextDocumentIdentifier.h
-2022/09/17 | 4531 | graphics/asymptote/webgl/fragment.glsl
-2022/09/17 | 45222 | graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/string_ref.h
-2022/09/17 | 4520 | graphics/asymptote/getopt1.c
-2022/09/17 | 4514 | graphics/asymptote/bbox.h
-2022/09/17 | 449 | graphics/asymptote/tests/arith/pair.asy
-2022/09/17 | 4487 | graphics/asymptote/base/plain_shipout.asy
-2022/09/17 | 4481 | graphics/asymptote/v3dfile.h
-2022/09/17 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
-2022/09/17 | 4471 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-3f1f642c3356fd8e8d2a0787613ec09a56572b3a1e38c9629b6db9e8dead1117_min
-2022/09/17 | 44634 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/tutorial.png
-2022/09/17 | 445 | graphics/asymptote/examples/sacone.asy
-2022/09/17 | 445 | graphics/asymptote/cudareflect/kernel.h
-2022/09/17 | 443 | graphics/asymptote/cudareflect/ReflectanceMapper.cuh
-2022/09/17 | 4438 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
-2022/09/17 | 4438 | graphics/asymptote/LspCpp/third_party/rapidjson/test/perftest/platformtest.cpp
-2022/09/17 | 442 | graphics/asymptote/doc/join3.asy
-2022/09/17 | 441 | graphics/asymptote/examples/triangles.asy
-2022/09/17 | 441 | graphics/asymptote/doc/histogram.asy
-2022/09/17 | 4416 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/bigintegertest.cpp
-2022/09/17 | 43 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/cmake_clean_target.cmake
-2022/09/17 | 43 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail13.json
-2022/09/17 | 43 | graphics/asymptote/examples/spring2.asy
-2022/09/17 | 439 | graphics/asymptote/examples/gamma.asy
-2022/09/17 | 4385 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/ref.json
-2022/09/17 | 4384 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/Win32OpenGLWindow.cpp
-2022/09/17 | 43830 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/reference/testing.md
-2022/09/17 | 4381 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/filestreamtest.cpp
-2022/09/17 | 437 | graphics/asymptote/cudareflect/tinyexr/Makefile.gcc-mingw
-2022/09/17 | 4375 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/draft-04/schema
-2022/09/17 | 4371 | graphics/asymptote/cudareflect/kernel.cu
-2022/09/17 | 436 | graphics/asymptote/examples/colorpatch.asy
-2022/09/17 | 43670 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/simpledom.png
-2022/09/17 | 4366 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/ref.json
-2022/09/17 | 4362 | graphics/asymptote/LspCpp/third_party/uri/test/optional_test.cpp
-2022/09/17 | 4357 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_leak_test.py
-2022/09/17 | 4348 | graphics/asymptote/doc/colo-asy.tex
-2022/09/17 | 433 | graphics/asymptote/examples/twoSpheres.asy
-2022/09/17 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
-2022/09/17 | 43335 | graphics/asymptote/examples/100d.pdb1
-2022/09/17 | 4313 | fonts/fira/latex/FiraMono.sty
-2022/09/17 | 430 | graphics/asymptote/examples/unitoctant.asy
-2022/09/17 | 42 | graphics/asymptote/base/animate.asy
-2022/09/17 | 428 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/symbol.h
-2022/09/17 | 4286 | graphics/asymptote/asy.ico
-2022/09/17 | 4285 | graphics/asymptote/newexp.cc
-2022/09/17 | 4283 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_premature_exit_test.cc
-2022/09/17 | 42828 | graphics/asymptote/picture.cc
-2022/09/17 | 427 | graphics/asymptote/examples/projectrevolution.asy
-2022/09/17 | 42714 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-output-test-golden-lin.txt
-2022/09/17 | 426 | graphics/asymptote/examples/pathintersectsurface.asy
-2022/09/17 | 426 | graphics/asymptote/doc/grid3xyz.asy
-2022/09/17 | 4269 | graphics/asymptote/LspCpp/src/lsp/ParentProcessWatcher.cpp
-2022/09/17 | 4254 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/readme.md
-2022/09/17 | 424 | graphics/asymptote/examples/spiral3.asy
-2022/09/17 | 4248 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/strtodtest.cpp
-2022/09/17 | 4247 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/prime_tables.h
-2022/09/17 | 4244 | graphics/asymptote/examples/fin.asy
-2022/09/17 | 4242 | graphics/asymptote/tests/types/keyword.asy
-2022/09/17 | 423 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake
-2022/09/17 | 423 | graphics/asymptote/doc/log2graph.asy
-2022/09/17 | 423 | graphics/asymptote/doc/helix.asy
-2022/09/17 | 4230 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/logo/rapidjson.svg
-2022/09/17 | 422 | graphics/asymptote/v3dtypes.csv
-2022/09/17 | 4227 | graphics/asymptote/LspCpp/third_party/uri/src/uri_builder.cpp
-2022/09/17 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
-2022/09/17 | 4209 | graphics/asymptote/flatguide.h
-2022/09/17 | 4207 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-port-arch.h
-2022/09/17 | 4202 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/guids.json
-2022/09/17 | 41 | graphics/asymptote/doc/bigdiagonal.asy
-2022/09/17 | 41 | graphics/asymptote/cudareflect/tinyexr/jni/Application.mk
-2022/09/17 | 419 | graphics/asymptote/examples/torus.asy
-2022/09/17 | 419 | graphics/asymptote/base/shaders/compress.glsl
-2022/09/17 | 418 | graphics/asymptote/examples/planeproject.asy
-2022/09/17 | 417 | graphics/asymptote/doc/knots.asy
-2022/09/17 | 4173 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-env-var-test.py
-2022/09/17 | 4172 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/examples/example6.c
-2022/09/17 | 416 | graphics/asymptote/doc/bezier2.asy
-2022/09/17 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
-2022/09/17 | 4160 | graphics/asymptote/LspCpp/third_party/uri/deps/ci/linux-presubmit.sh
-2022/09/17 | 415 | graphics/asymptote/doc/linetype.asy
-2022/09/17 | 4158 | graphics/asymptote/examples/advection.asy
-2022/09/17 | 4156 | graphics/asymptote/runpair.in
-2022/09/17 | 41517 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/move2.png
-2022/09/17 | 414 | graphics/asymptote/examples/animations/glmovie.asy
-2022/09/17 | 413 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
-2022/09/17 | 4131 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/callHierarchy.h
-2022/09/17 | 4126 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-test-part.cc
-2022/09/17 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
-2022/09/17 | 4118 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lru_cache.h
-2022/09/17 | 4116 | graphics/asymptote/cudareflect/tinyexr/test/exrwrite/exrwritetest.cpp
-2022/09/17 | 410 | graphics/asymptote/examples/Sierpinski.asy
-2022/09/17 | 40 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail32.json
-2022/09/17 | 40998 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-param-test-test.cc
-2022/09/17 | 40899 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
-2022/09/17 | 4088 | graphics/asymptote/base/plain_boxes.asy
-2022/09/17 | 40876 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-port-test.cc
-2022/09/17 | 407 | graphics/asymptote/examples/parametricsurface.asy
-2022/09/17 | 407 | graphics/asymptote/examples/BezierPatch.asy
-2022/09/17 | 407 | graphics/asymptote/cudareflect/tinyexr/Makefile.gcc-mingw-msys
-2022/09/17 | 4072 | graphics/asymptote/tests/types/order.asy
-2022/09/17 | 4067 | graphics/asymptote/doc/diatom.csv
-2022/09/17 | 40665 | graphics/asymptote/examples/tvgen.asy
-2022/09/17 | 4051 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/istreamwrapper.h
-2022/09/17 | 4021 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_diagnostic.h
-2022/09/17 | 40200 | systems/texlive/tlnet/archive/biblatex-philosophy.source.r64414.tar.xz
-2022/09/17 | 401 | graphics/asymptote/doc/image.asy
-2022/09/17 | 401 | graphics/asymptote/cudareflect/tinyexr/test/unit/README.md
-2022/09/17 | 400 | graphics/asymptote/examples/sacylinder.asy
-2022/09/17 | 400 | graphics/asymptote/cudareflect/tinyexr/test/unit/Makefile
-2022/09/17 | 4007 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/fwd.h
-2022/09/17 | 39 | graphics/asymptote/base/nopapersize.ps
-2022/09/17 | 398 | graphics/asymptote/examples/epix.asy
-2022/09/17 | 396 | graphics/asymptote/doc/triangulate.asy
-2022/09/17 | 396 | graphics/asymptote/doc/legend.asy
-2022/09/17 | 3968 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/stringbuffer.h
-2022/09/17 | 3967 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/unittest.h
-2022/09/17 | 395 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/2by2.exr
-2022/09/17 | 395983 | graphics/asymptote/doc/asymptote.texi
-2022/09/17 | 3956 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/itoatest.cpp
-2022/09/17 | 39458 | graphics/asymptote/cudareflect/tinyexr/examples/common/cxxopts.hpp
-2022/09/17 | 393 | graphics/asymptote/GUI/setup.py
-2022/09/17 | 3936 | graphics/asymptote/base/interpolate.asy
-2022/09/17 | 3917 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample2_unittest.cc
-2022/09/17 | 3915 | graphics/asymptote/LspCpp/include/LibLsp/lsp/Markup/Markup.h
-2022/09/17 | 3912 | graphics/asymptote/tr.h
-2022/09/17 | 390 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/buildWorkspace.h
-2022/09/17 | 390 | graphics/asymptote/doc/tile.asy
-2022/09/17 | 38 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail26.json
-2022/09/17 | 38 | graphics/asymptote/examples/spring0.asy
-2022/09/17 | 388 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/common.h
-2022/09/17 | 3870 | graphics/asymptote/LspCpp/third_party/uri/test/uri_parse_path_test.cpp
-2022/09/17 | 3857 | graphics/asymptote/examples/pipes.asy
-2022/09/17 | 384 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json
-2022/09/17 | 384 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json
-2022/09/17 | 384 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
-2022/09/17 | 384 | graphics/asymptote/Delaunay.h
-2022/09/17 | 3842 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_assert_by_exception_test.cc
-2022/09/17 | 383 | graphics/asymptote/tests/arith/real.asy
-2022/09/17 | 383 | graphics/asymptote/examples/Gouraud.asy
-2022/09/17 | 382 | graphics/asymptote/doc/loggrid.asy
-2022/09/17 | 37 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail3.json
-2022/09/17 | 37991 | graphics/asymptote/path3.cc
-2022/09/17 | 3790199 | graphics/asymptote/cudareflect/tinyexr/examples/deepview/deepview_screencast.gif
-2022/09/17 | 378 | graphics/asymptote/examples/sinxlex.asy
-2022/09/17 | 378 | graphics/asymptote/doc/icon.asy
-2022/09/17 | 37889 | graphics/asymptote/exp.cc
-2022/09/17 | 3780 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-typed-test.cc
-2022/09/17 | 376 | graphics/asymptote/LspCpp/include/LibLsp/lsp/ParentProcessWatcher.h
-2022/09/17 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
-2022/09/17 | 376 | graphics/asymptote/doc/generalaxis3.asy
-2022/09/17 | 376913 | graphics/asymptote/cudareflect/tinyexr/test/unit/catch.hpp
-2022/09/17 | 37685 | graphics/asymptote/cudareflect/tinyexr/examples/common/stb_image_write.h
-2022/09/17 | 3767 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_test_macro_stack_footprint_test.cc
-2022/09/17 | 3765 | graphics/asymptote/prc/PRCdouble.h
-2022/09/17 | 375 | graphics/asymptote/examples/AiryDisk.asy
-2022/09/17 | 3750 | macros/generic/unicode-data/load-unicode-math-classes.tex
-2022/09/17 | 374 | graphics/asymptote/doc/monthaxis.asy
-2022/09/17 | 373 | graphics/asymptote/examples/projectelevation.asy
-2022/09/17 | 373 | graphics/asymptote/doc/lineargraph.asy
-2022/09/17 | 3739 | graphics/asymptote/examples/xstitch.asy
-2022/09/17 | 3737 | graphics/asymptote/cudareflect/tinyexr/cmake/sanitizers/FindSanitizers.cmake
-2022/09/17 | 3733 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/cursorstreamwrappertest.cpp
-2022/09/17 | 37281 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/insituparsing.png
-2022/09/17 | 3723 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-matchers.cc
-2022/09/17 | 3723 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock.h
-2022/09/17 | 3719 | graphics/asymptote/base/three_light.asy
-2022/09/17 | 37135 | graphics/asymptote/cudareflect/tinyexr/examples/exr2fptiff/tiny_dng_writer.h
-2022/09/17 | 370 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf16lebom.json
-2022/09/17 | 370 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf16bebom.json
-2022/09/17 | 3706 | graphics/asymptote/base/plain_constants.asy
-2022/09/17 | 3704 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-env-var-test_.cc
-2022/09/17 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
-2022/09/17 | 368 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf16le.json
-2022/09/17 | 368 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf16be.json
-2022/09/17 | 3676 | graphics/asymptote/constructor.cc
-2022/09/17 | 366 | graphics/asymptote/doc/lineargraph0.asy
-2022/09/17 | 366 | graphics/asymptote/cudareflect/tinyexr.cc
-2022/09/17 | 36540 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-printers.h
-2022/09/17 | 36526 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/X11OpenGLWindow.cpp
-2022/09/17 | 3640 | graphics/asymptote/bbox3.h
-2022/09/17 | 363 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/npm.md
-2022/09/17 | 3637 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsResponseError.h
-2022/09/17 | 36371 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/move3.png
-2022/09/17 | 3634 | graphics/asymptote/GLTextures.h
-2022/09/17 | 362 | graphics/asymptote/examples/pipeintersection.asy
-2022/09/17 | 36243 | graphics/asymptote/prc/test.cc
-2022/09/17 | 361 | graphics/asymptote/GUI/res/icons/anchor.svg
-2022/09/17 | 361 | graphics/asymptote/examples/phase.asy
-2022/09/17 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
-2022/09/17 | 36152 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-output-test_.cc
-2022/09/17 | 360 | graphics/asymptote/examples/washer.asy
-2022/09/17 | 3601 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-death-test_ex_test.cc
-2022/09/17 | 3601 | graphics/asymptote/cudareflect/tinyexr/test/exrcat/exrcat.cpp
-2022/09/17 | 35 | graphics/asymptote/base/fontsize.asy
-2022/09/17 | 3592 | graphics/asymptote/GUI/CustMatTransform.py
-2022/09/17 | 357 | graphics/asymptote/doc/irregularcontour.asy
-2022/09/17 | 3567 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/pow10.h
-2022/09/17 | 3563 | graphics/asymptote/LspCpp/third_party/rapidjson/example/archiver/archiver.h
-2022/09/17 | 355 | graphics/asymptote/LspCpp/third_party/rapidjson/library.json
-2022/09/17 | 355 | graphics/asymptote/doc/scaledgraph.asy
-2022/09/17 | 3553 | graphics/asymptote/shaders.cc
-2022/09/17 | 354 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/cmake/gtest_main.pc.in
-2022/09/17 | 354 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/cmake/gmock_main.pc.in
-2022/09/17 | 354 | graphics/asymptote/doc/reloadpdf.tex
-2022/09/17 | 354 | graphics/asymptote/doc/planes.asy
-2022/09/17 | 354 | graphics/asymptote/base/pstoedit.asy
-2022/09/17 | 35461 | graphics/asymptote/LspCpp/third_party/rapidjson/test/perftest/misctest.cpp
-2022/09/17 | 3533 | graphics/asymptote/LspCpp/include/LibLsp/lsp/language/language.h
-2022/09/17 | 352 | graphics/asymptote/examples/cylinder.asy
-2022/09/17 | 3526 | macros/latex/required/babel/base/bbidxglo.dtx
-2022/09/17 | 35217 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-param-util.h
-2022/09/17 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
-2022/09/17 | 3517 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-pp_test.cc
-2022/09/17 | 35147 | graphics/asymptote/LICENSE
-2022/09/17 | 34 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail17.json
-2022/09/17 | 34 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail15.json
-2022/09/17 | 34 | graphics/asymptote/examples/teapotIBL.asy
-2022/09/17 | 34 | graphics/asymptote/autogen.sh
-2022/09/17 | 349 | graphics/asymptote/examples/logdown.asy
-2022/09/17 | 348 | graphics/asymptote/examples/RiemannSurface.asy
-2022/09/17 | 3480 | graphics/asymptote/build-scripts/build-asymptote.dos
-2022/09/17 | 347 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/cmake/gmock.pc.in
-2022/09/17 | 3477 | graphics/asymptote/LspCpp/include/LibLsp/lsp/CodeActionParams.h
-2022/09/17 | 3472 | graphics/asymptote/picture.h
-2022/09/17 | 3467 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/data/webapp.json
-2022/09/17 | 3466 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-filter-unittest_.cc
-2022/09/17 | 345 | graphics/asymptote/examples/rainbow.asy
-2022/09/17 | 3453 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/InitializeParams.h
-2022/09/17 | 3441 | graphics/asymptote/rounding.h
-2022/09/17 | 343 | graphics/asymptote/doc/externalprc.tex
-2022/09/17 | 3437 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/dtoatest.cpp
-2022/09/17 | 34316 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/MacOpenGLWindow.mm
-2022/09/17 | 342 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/community_created_documentation.md
-2022/09/17 | 342 | graphics/asymptote/lexical.h
-2022/09/17 | 341 | graphics/asymptote/examples/slidedemo_.bbl
-2022/09/17 | 341 | graphics/asymptote/examples/sacylinder3D.asy
-2022/09/17 | 341 | graphics/asymptote/doc/subpictures.asy
-2022/09/17 | 3419 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-more-matchers.h
-2022/09/17 | 3419 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/signature_help.h
-2022/09/17 | 3407 | graphics/asymptote/LspCpp/third_party/rapidjson/rapidjson.autopkg
-2022/09/17 | 33 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail22.json
-2022/09/17 | 339 | graphics/asymptote/cudareflect/tinyexr/test/CMakeLists.txt
-2022/09/17 | 3392 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_throw_on_failure_ex_test.cc
-2022/09/17 | 33764 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/paragraphs.json
-2022/09/17 | 3375 | graphics/asymptote/tests/types/guide.asy
-2022/09/17 | 3374 | graphics/asymptote/base/roundedpath.asy
-2022/09/17 | 33741 | graphics/asymptote/LspCpp/src/lsp/Markup.cpp
-2022/09/17 | 33667 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-function-mocker_test.cc
-2022/09/17 | 3365 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json
-2022/09/17 | 3365 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json
-2022/09/17 | 335 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/tiled_half_1x1_alpha.exr
-2022/09/17 | 3358 | graphics/asymptote/examples/slidedemo.asy
-2022/09/17 | 33482 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/src/gmock-spec-builders.cc
-2022/09/17 | 3346 | graphics/asymptote/base/shaders/blend.glsl
-2022/09/17 | 33417 | graphics/asymptote/path.cc
-2022/09/17 | 333 | graphics/asymptote/doc/asy.1.end
-2022/09/17 | 3335 | graphics/asymptote/examples/pdb.asy
-2022/09/17 | 33296 | graphics/asymptote/LspCpp/third_party/uri/test/uri_test.cpp
-2022/09/17 | 33240 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-matchers.h
-2022/09/17 | 3305 | graphics/asymptote/LspCpp/third_party/utfcpp/source/utf8/cpp11.h
-2022/09/17 | 32 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail21.json
-2022/09/17 | 3297 | graphics/asymptote/LspCpp/third_party/utfcpp/source/utf8/cpp17.h
-2022/09/17 | 3297 | graphics/asymptote/access.cc
-2022/09/17 | 3295 | graphics/asymptote/stack.h
-2022/09/17 | 3294 | graphics/asymptote/LspCpp/third_party/rapidjson/travis-doxygen.sh
-2022/09/17 | 32887 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/normalparsing.png
-2022/09/17 | 3284 | graphics/asymptote/cudareflect/tinyexr/examples/deepview/trackball.h
-2022/09/17 | 3282 | graphics/asymptote/LspCpp/third_party/uri/CMakeLists.txt
-2022/09/17 | 3280 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_ex_test.cc
-2022/09/17 | 327 | graphics/asymptote/examples/sin1x.asy
-2022/09/17 | 327 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/piz-bug-issue-100.exr
-2022/09/17 | 3278 | graphics/asymptote/base/obj.asy
-2022/09/17 | 326 | graphics/asymptote/examples/polardatagraph.asy
-2022/09/17 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
-2022/09/17 | 3267 | graphics/asymptote/GUI/Widg_addLabel.py
-2022/09/17 | 3266 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/BUILD.bazel
-2022/09/17 | 3265 | graphics/asymptote/program.cc
-2022/09/17 | 325 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/listOverridableMethods.h
-2022/09/17 | 325 | graphics/asymptote/examples/elevation.asy
-2022/09/17 | 324 | graphics/asymptote/doc/HermiteSpline.asy
-2022/09/17 | 3240 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-break-on-failure-unittest_.cc
-2022/09/17 | 323 | graphics/asymptote/cudareflect/tinyexr/examples/nornalmap/README.md
-2022/09/17 | 3230 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_leak_test_.cc
-2022/09/17 | 322 | graphics/asymptote/examples/unitcircle.asy
-2022/09/17 | 322 | graphics/asymptote/examples/cheese.asy
-2022/09/17 | 3219 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-shuffle-test_.cc
-2022/09/17 | 3218 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_test_utils.py
-2022/09/17 | 321820 | graphics/asymptote/base/geometry.asy
-2022/09/17 | 320 | graphics/asymptote/runtriple.h
-2022/09/17 | 320 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/Move.h
-2022/09/17 | 3204 | graphics/asymptote/asymptote.spec
-2022/09/17 | 31 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail14.json
-2022/09/17 | 31 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail12.json
-2022/09/17 | 31 | graphics/asymptote/cudareflect/tinyexr/test/unit/win32-filelist-utf8.inc
-2022/09/17 | 319 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf8bom.json
-2022/09/17 | 319839 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/miniz.c
-2022/09/17 | 3197 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_list_output_unittest_.cc
-2022/09/17 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
-2022/09/17 | 317 | graphics/asymptote/cudareflect/tinyexr/vcbuild.bat
-2022/09/17 | 316 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/encodings/utf8.json
-2022/09/17 | 31609 | graphics/asymptote/config.sub
-2022/09/17 | 315 | graphics/asymptote/examples/hyperboloid.asy
-2022/09/17 | 3157 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/unittestschema/address.json
-2022/09/17 | 3153 | graphics/asymptote/genv.cc
-2022/09/17 | 3151 | fonts/fira/README
-2022/09/17 | 314 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/internal/custom/gmock-generated-actions.h
-2022/09/17 | 314 | graphics/asymptote/doc/logticks.asy
-2022/09/17 | 314 | graphics/asymptote/base/graph_settings.asy
-2022/09/17 | 3141 | graphics/asymptote/LspCpp/include/LibLsp/lsp/ResourceOperation.h
-2022/09/17 | 3139 | graphics/asymptote/LspCpp/third_party/uri/test/uri_comparison_test.cpp
-2022/09/17 | 3139 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/dependencies.json
-2022/09/17 | 3135 | graphics/asymptote/cudareflect/tinyexr/examples/exr2ldr/exr2ldr.cc
-2022/09/17 | 31342 | graphics/asymptote/builtin.cc
-2022/09/17 | 312 | graphics/asymptote/examples/textpath.asy
-2022/09/17 | 3125 | graphics/asymptote/doc/latexusage.tex
-2022/09/17 | 311 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/cmake/gtest.pc.in
-2022/09/17 | 3119 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/filewritestream.h
-2022/09/17 | 3109 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/examples/example1.c
-2022/09/17 | 309 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/projectConfigurationUpdate.h
-2022/09/17 | 30920 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-more-actions.h
-2022/09/17 | 308 | graphics/asymptote/tests/types/shadow.asy
-2022/09/17 | 308 | graphics/asymptote/tests/Makefile
-2022/09/17 | 308 | graphics/asymptote/examples/oneoverx.asy
-2022/09/17 | 3075 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json
-2022/09/17 | 3075 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json
-2022/09/17 | 30730 | graphics/asymptote/LspCpp/src/lsp/lsp.cpp
-2022/09/17 | 306 | graphics/asymptote/doc/binarytreetest.asy
-2022/09/17 | 3069 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-throw-on-failure-test_.cc
-2022/09/17 | 3063 | graphics/asymptote/LspCpp/third_party/uri/src/detail/grammar.hpp
-2022/09/17 | 30638 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/macro_map.h
-2022/09/17 | 3060 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/CMakeLists.txt
-2022/09/17 | 303 | graphics/asymptote/examples/tensor.asy
-2022/09/17 | 3036 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/test_cpp11.cpp
-2022/09/17 | 3036 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make
-2022/09/17 | 30307 | graphics/asymptote/exp.h
-2022/09/17 | 3025 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-assertion-result.cc
-2022/09/17 | 3025 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/allOf.json
-2022/09/17 | 3024 | graphics/asymptote/drawimage.h
-2022/09/17 | 3023 | graphics/asymptote/doc/Makefile.in
-2022/09/17 | 30208 | graphics/asymptote/prc/PRC.h
-2022/09/17 | 301 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/organizeImports.h
-2022/09/17 | 301 | graphics/asymptote/base/shaders/count.glsl
-2022/09/17 | 30147 | graphics/asymptote/getopt.c
-2022/09/17 | 3014186 | install/macros/latex/required/babel-base.tds.zip
-2022/09/17 | 3011 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/src/gmock_main.cc
-2022/09/17 | 300 | graphics/asymptote/examples/strokepath.asy
-2022/09/17 | 30003 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/alotofkeys.json
-2022/09/17 | 2 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/progress.marks
-2022/09/17 | 2 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/progress.marks
-2022/09/17 | 29 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail25.json
-2022/09/17 | 29 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail11.json
-2022/09/17 | 299 | graphics/asymptote/runpair.h
-2022/09/17 | 2996 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
-2022/09/17 | 29900 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/faq.md
-2022/09/17 | 298 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-5ace655ef080932dcc7e4abc9eab1d4f82c845453464993dfa3eb6c5822a1621
-2022/09/17 | 2989 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/dependencies.json
-2022/09/17 | 2982 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample2.h
-2022/09/17 | 297 | graphics/asymptote/build-scripts/README-binaries
-2022/09/17 | 2979 | graphics/asymptote/doc/diatom.asy
-2022/09/17 | 2974 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/filereadstream.h
-2022/09/17 | 2969 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/ieee754.h
-2022/09/17 | 2964 | graphics/asymptote/access.h
-2022/09/17 | 2960 | graphics/asymptote/material.h
-2022/09/17 | 2960 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
-2022/09/17 | 294 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/classFileContents.h
-2022/09/17 | 294 | graphics/asymptote/guideflags.h
-2022/09/17 | 2948 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
-2022/09/17 | 2941 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
-2022/09/17 | 293 | graphics/asymptote/doc/makepen.asy
-2022/09/17 | 2939 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/CommonWindowInterface.h
-2022/09/17 | 293655 | graphics/asymptote/configure
-2022/09/17 | 29242 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/encodings.h
-2022/09/17 | 29203 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/gmock_for_dummies.md
-2022/09/17 | 291 | graphics/asymptote/examples/trumpet.asy
-2022/09/17 | 29193 | graphics/asymptote/LspCpp/src/lsp/ProtocolJsonHandler.cpp
-2022/09/17 | 2915 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/_sass/main.scss
-2022/09/17 | 2901 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/json.h
-2022/09/17 | 28 | graphics/asymptote/cudareflect/tinyexr/test/issues/160/requirements.txt
-2022/09/17 | 289 | graphics/asymptote/examples/jump.asy
-2022/09/17 | 289 | graphics/asymptote/cudareflect/tinyexr/examples/testmapgen/README.md
-2022/09/17 | 289 | graphics/asymptote/base/res/notes.txt
-2022/09/17 | 288 | graphics/asymptote/examples/sacone3D.asy
-2022/09/17 | 288 | graphics/asymptote/doc/mexicanhat.asy
-2022/09/17 | 2881 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/properties.json
-2022/09/17 | 2881 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/properties.json
-2022/09/17 | 2880 | graphics/asymptote/drawgroup.h
-2022/09/17 | 287695 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-matchers_test.cc
-2022/09/17 | 2868 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/semanticHighlighting.h
-2022/09/17 | 284 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/cmake/Config.cmake.in
-2022/09/17 | 284 | graphics/asymptote/GUI/res/icons/text.svg
-2022/09/17 | 283 | graphics/asymptote/cudareflect/tinyexr/test/c-binding/test.c
-2022/09/17 | 28328 | graphics/asymptote/symbolmaps.h
-2022/09/17 | 2830 | graphics/asymptote/examples/alignedaxis.asy
-2022/09/17 | 28158 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/uritest.cpp
-2022/09/17 | 2814 | graphics/asymptote/LspCpp/third_party/rapidjson/example/messagereader/messagereader.cpp
-2022/09/17 | 2813 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-param-test2-test.cc
-2022/09/17 | 28114 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-internal-utils_test.cc
-2022/09/17 | 2804 | graphics/asymptote/LspCpp/src/jsonrpc/message.cpp
-2022/09/17 | 2800 | graphics/asymptote/doc/asycolors.sty
-2022/09/17 | 279 | graphics/asymptote/doc/hatch.asy
-2022/09/17 | 27958 | graphics/asymptote/pen.h
-2022/09/17 | 2787 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_action.h
-2022/09/17 | 277 | graphics/asymptote/LspCpp/src/jsonrpc/GCThreadContext.cpp
-2022/09/17 | 277 | graphics/asymptote/doc/generalaxis.asy
-2022/09/17 | 2776 | graphics/asymptote/symbol.h
-2022/09/17 | 2772 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/nfd_common.c
-2022/09/17 | 2771 | graphics/asymptote/doc/pixel.pdf
-2022/09/17 | 276 | graphics/asymptote/tests/bench/6000circles.asy
-2022/09/17 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
-2022/09/17 | 2745 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json
-2022/09/17 | 2745 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json
-2022/09/17 | 2741 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/findOpenGLGlewGlut.lua
-2022/09/17 | 2732 | graphics/asymptote/record.h
-2022/09/17 | 2731 | graphics/asymptote/tests/types/resolve.asy
-2022/09/17 | 2721 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/strfunc.h
-2022/09/17 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
-2022/09/17 | 2709 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsTextEdit.h
-2022/09/17 | 2707 | graphics/asymptote/settings.h
-2022/09/17 | 2707 | graphics/asymptote/runtriple.in
-2022/09/17 | 270497 | graphics/asymptote/cudareflect/tinyexr/tinyexr.h
-2022/09/17 | 26 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail7.json
-2022/09/17 | 26 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail6.json
-2022/09/17 | 26 | graphics/asymptote/doc/filegraph.dat
-2022/09/17 | 26 | graphics/asymptote/_config.yml
-2022/09/17 | 269 | graphics/asymptote/runmath.h
-2022/09/17 | 26982931 | install/fonts/fira.tds.zip
-2022/09/17 | 2697 | graphics/asymptote/table.h
-2022/09/17 | 268 | graphics/asymptote/base/asy-init.el
-2022/09/17 | 26844 | graphics/asymptote/runpath.cc
-2022/09/17 | 2682 | graphics/asymptote/LspCpp/third_party/uri/test/uri_reference_test.cpp
-2022/09/17 | 26817 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/writer.h
-2022/09/17 | 26811105 | fonts/fira.zip
-2022/09/17 | 2680 | graphics/asymptote/examples/soccerball.asy
-2022/09/17 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
-2022/09/17 | 2675 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/examples/example4.c
-2022/09/17 | 2674 | graphics/asymptote/doc/markers1.asy
-2022/09/17 | 26693 | graphics/asymptote/dec.cc
-2022/09/17 | 26690 | macros/generic/unicode-data/BidiMirroring.txt
-2022/09/17 | 26640414 | graphics/asymptote.zip
-2022/09/17 | 2662 | graphics/asymptote/LspCpp/third_party/rapidjson/appveyor.yml
-2022/09/17 | 2661 | graphics/asymptote/runbacktrace.cc
-2022/09/17 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
-2022/09/17 | 2650 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsWorkspaceEdit.h
-2022/09/17 | 264 | graphics/asymptote/LspCpp/include/LibLsp/lsp/Directory.h
-2022/09/17 | 264 | graphics/asymptote/examples/labelbox.asy
-2022/09/17 | 264 | graphics/asymptote/examples/coag.asy
-2022/09/17 | 2649 | graphics/asymptote/base/patterns.asy
-2022/09/17 | 264306 | macros/latex/contrib/verifiche/verifiche-example.pdf
-2022/09/17 | 2642 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/memorystream.h
-2022/09/17 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
-2022/09/17 | 2630556 | systems/texlive/tlnet/archive/simpleicons.r64413.tar.xz
-2022/09/17 | 262 | graphics/asymptote/doc/loggraph.asy
-2022/09/17 | 2626 | graphics/asymptote/examples/worldmap.asy
-2022/09/17 | 2623 | graphics/asymptote/jsfile.h
-2022/09/17 | 261 | graphics/asymptote/doc/join.asy
-2022/09/17 | 261756 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_unittest.cc
-2022/09/17 | 2614 | graphics/asymptote/pipestream.h
-2022/09/17 | 2613 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json
-2022/09/17 | 2613 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json
-2022/09/17 | 2611 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/test_cpp17.cpp
-2022/09/17 | 26102 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/regex.h
-2022/09/17 | 260 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageProducer.h
-2022/09/17 | 2608 | graphics/asymptote/LspCpp/third_party/uri/deps/ci/macos-presubmit.sh
-2022/09/17 | 2605 | macros/latex/required/babel/base/README.md
-2022/09/17 | 2605 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/premake4.lua
-2022/09/17 | 2603 | graphics/asymptote/LspCpp/third_party/rapidjson/contrib/natvis/rapidjson.natvis
-2022/09/17 | 260289 | graphics/asymptote/cudareflect/tinyexr/examples/common/stb_image.h
-2022/09/17 | 25 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/remotes/integer.json
-2022/09/17 | 25 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json
-2022/09/17 | 25 | graphics/asymptote/cudareflect/tinyexr/experimental/js/Makefile
-2022/09/17 | 2598 | graphics/asymptote/cudareflect/simpson.cuh
-2022/09/17 | 2591 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/extends.json
-2022/09/17 | 2578 | graphics/asymptote/LspCpp/third_party/uri/test/uri_parse_scheme_test.cpp
-2022/09/17 | 2576 | graphics/asymptote/LspCpp/third_party/rapidjson/example/capitalize/capitalize.cpp
-2022/09/17 | 25701 | graphics/asymptote/runpath3d.cc
-2022/09/17 | 256 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/misc/footer.html
-2022/09/17 | 256 | graphics/asymptote/doc/shadedtiling.asy
-2022/09/17 | 25651 | graphics/asymptote/bezierpatch.cc
-2022/09/17 | 2561 | graphics/asymptote/program.h
-2022/09/17 | 25589 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/rapidjson.h
-2022/09/17 | 2555 | graphics/asymptote/cudareflect/tinyexr/cmake/sanitizers/FindTSan.cmake
-2022/09/17 | 2554 | graphics/asymptote/cudareflect/tinyexr/examples/ldr2exr/ldr2exr.cc
-2022/09/17 | 25503 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-function-mocker.h
-2022/09/17 | 254 | graphics/asymptote/examples/parametricelevation.asy
-2022/09/17 | 254 | graphics/asymptote/examples/contextfonts.asy
-2022/09/17 | 2543 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/Win32Window.h
-2022/09/17 | 2542 | graphics/asymptote/policy.h
-2022/09/17 | 25357 | graphics/asymptote/base/lmfit.asy
-2022/09/17 | 2534 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/memorybuffer.h
-2022/09/17 | 2527 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/completion.h
-2022/09/17 | 2526 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
-2022/09/17 | 252536 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest.cc
-2022/09/17 | 251 | graphics/asymptote/examples/triceratops.asy
-2022/09/17 | 251 | graphics/asymptote/base/metapost.asy
-2022/09/17 | 2518 | graphics/asymptote/prc/PRCbitStream.h
-2022/09/17 | 25154 | graphics/asymptote/doc/extra/intro.asy
-2022/09/17 | 2514 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/MacOpenGLWindow.h
-2022/09/17 | 2514 | graphics/asymptote/cudareflect/EXRFiles.cc
-2022/09/17 | 250 | graphics/asymptote/examples/transparentCubes.asy
-2022/09/17 | 2505 | graphics/asymptote/README
-2022/09/17 | 2505 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-color-test_.cc
-2022/09/17 | 2505 | graphics/asymptote/binaries/x86_64-windows/README
-2022/09/17 | 2505 | graphics/asymptote/binaries/i386-windows/README
-2022/09/17 | 2504 | graphics/asymptote/examples/mosquito.asy
-2022/09/17 | 24 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail5.json
-2022/09/17 | 24 | graphics/asymptote/doc/diagonal.asy
-2022/09/17 | 2499 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest_prod.h
-2022/09/17 | 2496 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_testbridge_test.py
-2022/09/17 | 2495 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-uninitialized-test.py
-2022/09/17 | 2492 | graphics/asymptote/base/three_margins.asy
-2022/09/17 | 24924 | graphics/asymptote/examples/uhrturm.obj
-2022/09/17 | 248 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/exr-io.h
-2022/09/17 | 2481 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/ostreamwrappertest.cpp
-2022/09/17 | 248086 | macros/generic/unicode-data/LineBreak.txt
-2022/09/17 | 2479 | graphics/asymptote/cudareflect/tinyexr/CMakeLists.txt
-2022/09/17 | 24784 | graphics/asymptote/symbolmaps.cc
-2022/09/17 | 2477 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/SConstruct
-2022/09/17 | 2471 | graphics/asymptote/build-scripts/build-asymptote
-2022/09/17 | 24712 | graphics/asymptote/drawsurface.cc
-2022/09/17 | 2470 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample1.cc
-2022/09/17 | 246 | graphics/asymptote/doc/axis3.asy
-2022/09/17 | 245 | graphics/asymptote/examples/alignbox.asy
-2022/09/17 | 2459 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
-2022/09/17 | 24589 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsTextDocumentClientCapabilities.h
-2022/09/17 | 2451 | graphics/asymptote/base/labelpath3.asy
-2022/09/17 | 244 | graphics/asymptote/tests/arith/triple.asy
-2022/09/17 | 24483 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-json-output-unittest.py
-2022/09/17 | 24474 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-listener-test.cc
-2022/09/17 | 2445 | graphics/asymptote/GUI/PrimitiveShape.py
-2022/09/17 | 243 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/WorkspaceSymbolParams.h
-2022/09/17 | 243 | graphics/asymptote/doc/cube.asy
-2022/09/17 | 242 | graphics/asymptote/LspCpp/third_party/rapidjson/test/valgrind.supp
-2022/09/17 | 242 | graphics/asymptote/examples/equilateral.asy
-2022/09/17 | 242 | graphics/asymptote/cudareflect/tinyexr/appveyor.yml
-2022/09/17 | 242 | graphics/asymptote/BUGS
-2022/09/17 | 2424 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/WebSocketServer.h
-2022/09/17 | 241 | graphics/asymptote/cudareflect/common.h
-2022/09/17 | 2418 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/MessageJsonHandler.h
-2022/09/17 | 2411 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_skip_check_output_test.py
-2022/09/17 | 2411 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_json_test_utils.py
-2022/09/17 | 240 | graphics/asymptote/doc/parametricgraph.asy
-2022/09/17 | 24091 | graphics/asymptote/LspCpp/src/jsonrpc/RemoteEndPoint.cpp
-2022/09/17 | 2407 | graphics/asymptote/LspCpp/include/LibLsp/lsp/windows/MessageNotify.h
-2022/09/17 | 2403 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_no_test_unittest.cc
-2022/09/17 | 2400 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-param-test-invalid-name1-test.py
-2022/09/17 | 24004 | macros/generic/unicode-data/BidiMirroring-5-1-0.txt
-2022/09/17 | 23 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail20.json
-2022/09/17 | 23 | graphics/asymptote/GUI/__init__.py
-2022/09/17 | 2398 | graphics/asymptote/examples/SierpinskiSponge.asy
-2022/09/17 | 2396 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest-typed-test_test.h
-2022/09/17 | 2396 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/namespacetest.cpp
-2022/09/17 | 23904 | graphics/asymptote/process.cc
-2022/09/17 | 238 | graphics/asymptote/tests/TestLib.asy
-2022/09/17 | 238 | graphics/asymptote/GUI/xasyValidator.py
-2022/09/17 | 238 | graphics/asymptote/doc/filegraph.asy
-2022/09/17 | 2378 | graphics/asymptote/profile.py
-2022/09/17 | 2374 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getRefactorEdit.h
-2022/09/17 | 23717 | graphics/asymptote/base/three_arrows.asy
-2022/09/17 | 236 | graphics/asymptote/tests/string/erase.asy
-2022/09/17 | 236 | graphics/asymptote/examples/annotation.asy
-2022/09/17 | 2362 | graphics/asymptote/examples/spectrum.asy
-2022/09/17 | 235 | graphics/asymptote/examples/cos2theta.asy
-2022/09/17 | 235 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/shader.frag
-2022/09/17 | 23567 | graphics/asymptote/drawsurface.h
-2022/09/17 | 2355 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-param-test-invalid-name2-test.py
-2022/09/17 | 234 | graphics/asymptote/doc/beziercurve.asy
-2022/09/17 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
-2022/09/17 | 233 | graphics/asymptote/examples/cardioid.asy
-2022/09/17 | 2335 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_all_test.cc
-2022/09/17 | 2328 | graphics/asymptote/virtualfieldaccess.h
-2022/09/17 | 2328 | graphics/asymptote/LspCpp/third_party/uri/README.rst
-2022/09/17 | 2319 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/_layouts/default.html
-2022/09/17 | 2313 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
-2022/09/17 | 2310 | graphics/asymptote/base/plain_margins.asy
-2022/09/17 | 2303 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/ostreamwrapper.h
-2022/09/17 | 22 | graphics/asymptote/tests/output/line.asy
-2022/09/17 | 22 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/progress.make
-2022/09/17 | 22 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail9.json
-2022/09/17 | 22 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail19.json
-2022/09/17 | 22 | graphics/asymptote/GUI/configs/__init__.py
-2022/09/17 | 229 | graphics/asymptote/LspCpp/third_party/rapidjson/RapidJSON.pc.in
-2022/09/17 | 229 | graphics/asymptote/LspCpp/third_party/rapidjson/docker/debian/Dockerfile
-2022/09/17 | 2295 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake
-2022/09/17 | 22946 | graphics/asymptote/base/syzygy.asy
-2022/09/17 | 2292 | graphics/asymptote/cudareflect/tinyexr/cmake/sanitizers/FindMSan.cmake
-2022/09/17 | 228 | graphics/asymptote/examples/circumcircle.asy
-2022/09/17 | 2289 | graphics/asymptote/LspCpp/src/lsp/lsp_diagnostic.cpp
-2022/09/17 | 22873 | graphics/asymptote/examples/piicon.png
-2022/09/17 | 2286 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-global-environment-unittest_.cc
-2022/09/17 | 2282 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-param-test-test.h
-2022/09/17 | 2282 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json
-2022/09/17 | 2281 | graphics/asymptote/LspCpp/third_party/uri/src/detail/algorithm_split.hpp
-2022/09/17 | 2279 | graphics/asymptote/errormsg.cc
-2022/09/17 | 2277 | graphics/asymptote/base/texcolors.asy
-2022/09/17 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
-2022/09/17 | 2272 | graphics/asymptote/cudareflect/tinyexr/examples/rgbe2exr/rgbe2exr.cc
-2022/09/17 | 2266 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/not.json
-2022/09/17 | 2266 | graphics/asymptote/align.h
-2022/09/17 | 22663 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-param-test.h
-2022/09/17 | 2265 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-setuptestsuite-test.py
-2022/09/17 | 22642 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-filepath-test.cc
-2022/09/17 | 2260 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample2.cc
-2022/09/17 | 2260 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/cursorstreamwrapper.h
-2022/09/17 | 2257 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json
-2022/09/17 | 2255 | graphics/asymptote/LspCpp/third_party/rapidjson/example/simplepullreader/simplepullreader.cpp
-2022/09/17 | 22526 | graphics/asymptote/LspCpp/third_party/uri/test/uri_builder_test.cpp
-2022/09/17 | 22506 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/allocators.h
-2022/09/17 | 224 | graphics/asymptote/tests/types/init.asy
-2022/09/17 | 2245 | graphics/asymptote/LspCpp/third_party/rapidjson/example/prettyauto/prettyauto.cpp
-2022/09/17 | 22426 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/internals.md
-2022/09/17 | 223 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/resolveCodeLens.h
-2022/09/17 | 223 | graphics/asymptote/cudareflect/tinyexr/jni/Android.mk
-2022/09/17 | 2239 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_all_test.cc
-2022/09/17 | 2239 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/insituparsing.dot
-2022/09/17 | 2239 | graphics/asymptote/build-scripts/HOWTO-MSWindows
-2022/09/17 | 22345 | graphics/asymptote/knot.cc
-2022/09/17 | 2230 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_skip_environment_check_output_test.py
-2022/09/17 | 222 | graphics/asymptote/wce
-2022/09/17 | 222 | graphics/asymptote/examples/yingyang.asy
-2022/09/17 | 2223 | graphics/asymptote/LspCpp/third_party/uri/deps/CONTRIBUTORS
-2022/09/17 | 2222 | graphics/asymptote/tests/frames/loop.asy
-2022/09/17 | 22121 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/tutorial.md
-2022/09/17 | 2205 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RequestInMessage.h
-2022/09/17 | 2201 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-all.cc
-2022/09/17 | 219 | graphics/asymptote/doc/penimage.asy
-2022/09/17 | 219 | graphics/asymptote/doc/graphwithderiv.asy
-2022/09/17 | 21998 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/uri.hpp
-2022/09/17 | 21996 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsServerCapabilities.h
-2022/09/17 | 21971 | macros/generic/unicode-data/ScriptExtensions.txt
-2022/09/17 | 21956 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/internals.zh-cn.md
-2022/09/17 | 2194 | graphics/asymptote/locate.cc
-2022/09/17 | 2191 | graphics/asymptote/examples/splitpatch.asy
-2022/09/17 | 218 | graphics/asymptote/LspCpp/include/LibLsp/lsp/ProtocolJsonHandler.h
-2022/09/17 | 218 | graphics/asymptote/doc/datagraph.asy
-2022/09/17 | 2189 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/willSave.h
-2022/09/17 | 21890 | macros/latex/required/babel/base/bbcompat.dtx
-2022/09/17 | 2187 | graphics/asymptote/common.h
-2022/09/17 | 2187 | graphics/asymptote/base/plain_debugger.asy
-2022/09/17 | 21874 | graphics/asymptote/runmath.cc
-2022/09/17 | 2182 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/documentColor.h
-2022/09/17 | 217 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/GCThreadContext.h
-2022/09/17 | 2175 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_sole_header_test.cc
-2022/09/17 | 2175 | graphics/asymptote/LspCpp/third_party/rapidjson/contrib/natvis/LICENSE
-2022/09/17 | 2164 | graphics/asymptote/frame.h
-2022/09/17 | 2161 | graphics/asymptote/LspCpp/include/LibLsp/lsp/working_files.h
-2022/09/17 | 21546 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/tutorial.zh-cn.md
-2022/09/17 | 21535 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/reference/assertions.md
-2022/09/17 | 2151 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
-2022/09/17 | 21507 | graphics/asymptote/lspserv.cc
-2022/09/17 | 2147 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_prod_test.cc
-2022/09/17 | 2146 | graphics/asymptote/abs3doutfile.h
-2022/09/17 | 21466 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-filter-unittest.py
-2022/09/17 | 2144 | graphics/asymptote/cudareflect/tinyexr/cmake/sanitizers/FindASan.cmake
-2022/09/17 | 21448 | graphics/asymptote/base/feynman.asy
-2022/09/17 | 2142 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/negative.cpp
-2022/09/17 | 2138 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-param-test-invalid-name2-test_.cc
-2022/09/17 | 2136 | graphics/asymptote/seconds.h
-2022/09/17 | 21360 | graphics/asymptote/fileio.h
-2022/09/17 | 2134 | graphics/asymptote/drawlabel.h
-2022/09/17 | 2132 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample4.h
-2022/09/17 | 2130 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/production.h
-2022/09/17 | 21276 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/sax.md
-2022/09/17 | 21271 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/documenttest.cpp
-2022/09/17 | 2115 | graphics/asymptote/LspCpp/third_party/uri/src/detail/algorithm_find.hpp
-2022/09/17 | 2113 | graphics/asymptote/LspCpp/third_party/utfcpp/samples/docsample.cpp
-2022/09/17 | 2110 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample4.cc
-2022/09/17 | 210 | graphics/asymptote/examples/spiral.asy
-2022/09/17 | 210 | graphics/asymptote/build-scripts/asy-indent.el
-2022/09/17 | 2109 | graphics/asymptote/base/drawtree.asy
-2022/09/17 | 2107 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/src/gmock-all.cc
-2022/09/17 | 2101 | graphics/asymptote/examples/truncatedIcosahedron.asy
-2022/09/17 | 2100 | graphics/asymptote/LspCpp/third_party/uri/src/detail/algorithm.hpp
-2022/09/17 | 20 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail23.json
-2022/09/17 | 20989 | graphics/asymptote/base/plain_bounds.asy
-2022/09/17 | 20974 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/reference/mocking.md
-2022/09/17 | 2094 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/custom/gtest-printers.h
-2022/09/17 | 20942 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make
-2022/09/17 | 209259 | graphics/asymptote/asy.list
-2022/09/17 | 208908 | graphics/asymptote/doc/asy-latex.pdf
-2022/09/17 | 2088 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_help_test_.cc
-2022/09/17 | 20829 | graphics/asymptote/cudareflect/tinyexr/test/fuzzer/issue-77-heap-buffer-overflow
-2022/09/17 | 207 | graphics/asymptote/examples/triangle.asy
-2022/09/17 | 20796 | graphics/asymptote/runtime.in
-2022/09/17 | 207686 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-matchers.h
-2022/09/17 | 2073 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
-2022/09/17 | 206 | graphics/asymptote/examples/log.asy
-2022/09/17 | 2069 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_skip_in_environment_setup_test.cc
-2022/09/17 | 20639 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_xml_output_unittest.py
-2022/09/17 | 205495 | graphics/asymptote/base/colormap.asy
-2022/09/17 | 2053 | graphics/asymptote/LspCpp/third_party/uri/test/test_uri.hpp
-2022/09/17 | 2045 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/clzll.h
-2022/09/17 | 2040 | graphics/asymptote/LspCpp/include/LibLsp/lsp/location_type.h
-2022/09/17 | 2040 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/X11OpenGLWindow.h
-2022/09/17 | 203 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/exit.h
-2022/09/17 | 2035 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
-2022/09/17 | 2034 | graphics/asymptote/doc/elliptic.asy
-2022/09/17 | 202 | graphics/asymptote/tests/frames/stat2.asy
-2022/09/17 | 202 | graphics/asymptote/glew.c
-2022/09/17 | 202 | graphics/asymptote/doc/exp.asy
-2022/09/17 | 202 | graphics/asymptote/build-scripts/run-in-indent.el
-2022/09/17 | 202947 | graphics/asymptote/cudareflect/tinyexr/asakusa.png
-2022/09/17 | 20277 | graphics/asymptote/base/contour.asy
-2022/09/17 | 2023 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-param-test-invalid-name1-test_.cc
-2022/09/17 | 2023 | graphics/asymptote/examples/slope.asy
-2022/09/17 | 20170 | graphics/asymptote/runpicture.in
-2022/09/17 | 2016 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/getMoveDestinations.h
-2022/09/17 | 2013 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsResponseMessage.h
-2022/09/17 | 2012 | graphics/asymptote/varinit.h
-2022/09/17 | 20123 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/reference/matchers.md
-2022/09/17 | 2011 | graphics/asymptote/cudareflect/tinyexr/cmake/sanitizers/asan-wrapper
-2022/09/17 | 2005 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_skip_test.cc
-2022/09/17 | 20051 | graphics/asymptote/doc/asyRefCard.tex
-2022/09/17 | 2004 | graphics/asymptote/varinit.cc
-2022/09/17 | 20029 | graphics/asymptote/camp.y
-2022/09/17 | 20010 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/test_data/utf8_invalid.txt
-2022/09/17 | 199 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/progress.make
-2022/09/17 | 199 | graphics/asymptote/examples/upint.asy
-2022/09/17 | 199 | graphics/asymptote/examples/BezierTriangle.asy
-2022/09/17 | 19967 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/sax.zh-cn.md
-2022/09/17 | 1995 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample4_unittest.cc
-2022/09/17 | 1993053 | macros/latex/contrib/nicematrix.zip
-2022/09/17 | 198 | graphics/asymptote/examples/tanh.asy
-2022/09/17 | 198487 | graphics/asymptote/doc/CAD.pdf
-2022/09/17 | 198433 | macros/latex/contrib/nicematrix/nicematrix-french.tex
-2022/09/17 | 1982 | graphics/asymptote/inst.h
-2022/09/17 | 1977 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-port_test.cc
-2022/09/17 | 1975 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/enum.json
-2022/09/17 | 1975 | graphics/asymptote/array.h
-2022/09/17 | 19752 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/uri.h
-2022/09/17 | 19729 | graphics/asymptote/base/plain_arrows.asy
-2022/09/17 | 1971 | graphics/asymptote/base/slopefield.asy
-2022/09/17 | 196 | graphics/asymptote/examples/lowint.asy
-2022/09/17 | 196 | graphics/asymptote/examples/label3ribbon.asy
-2022/09/17 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
-2022/09/17 | 1968 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest_main.cc
-2022/09/17 | 1968 | graphics/asymptote/examples/mergeExample.asy
-2022/09/17 | 1964 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/enum.json
-2022/09/17 | 1961 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/refRemote.json
-2022/09/17 | 1961 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/refRemote.json
-2022/09/17 | 19604 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_link_test.h
-2022/09/17 | 19597 | graphics/asymptote/doc/external-proposal.html
-2022/09/17 | 1955 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_xml_outfile2_test_.cc
-2022/09/17 | 1955 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_xml_outfile1_test_.cc
-2022/09/17 | 1955 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest-typed-test2_test.cc
-2022/09/17 | 1955 | graphics/asymptote/cudareflect/tinyexr/experimental/js/binding.cc
-2022/09/17 | 1953 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/internal/custom/gmock-port.h
-2022/09/17 | 19511 | graphics/asymptote/psfile.cc
-2022/09/17 | 1950 | graphics/asymptote/cudareflect/utils.cuh
-2022/09/17 | 1950 | graphics/asymptote/cudareflect/tinyexr/examples/testmapgen/testmapgen.cc
-2022/09/17 | 1949 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-setuptestsuite-test_.cc
-2022/09/17 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
-2022/09/17 | 193 | graphics/asymptote/tests/gc/shipout.asy
-2022/09/17 | 193 | graphics/asymptote/tests/arith/random.asy
-2022/09/17 | 1936 | graphics/asymptote/refaccess.h
-2022/09/17 | 1936 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/disallow.json
-2022/09/17 | 1933616 | systems/texlive/tlnet/archive/simpleicons.doc.r64413.tar.xz
-2022/09/17 | 19321 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/encodingstest.cpp
-2022/09/17 | 192 | graphics/asymptote/base/shaders/zero.glsl
-2022/09/17 | 1927 | graphics/asymptote/tests/array/fields.asy
-2022/09/17 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
-2022/09/17 | 1923 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_testbridge_test_.cc
-2022/09/17 | 1921122 | macros/latex/required/babel/base.zip
-2022/09/17 | 191 | graphics/asymptote/runpicture.h
-2022/09/17 | 1919 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/samples/sample1.h
-2022/09/17 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
-2022/09/17 | 1918 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/internal/custom/gmock-matchers.h
-2022/09/17 | 1916 | graphics/asymptote/LspCpp/third_party/uri/src/uri_errors.cpp
-2022/09/17 | 1915 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/iterative-parser-states-diagram.dot
-2022/09/17 | 1913704 | macros/generic/unicode-data/UnicodeData.txt
-2022/09/17 | 19136 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/primer.md
-2022/09/17 | 191228 | fonts/umtypewriter/UMTypewriter-BoldItalic.otf
-2022/09/17 | 1910 | graphics/asymptote/examples/linearregression.asy
-2022/09/17 | 1905 | fonts/librebaskerville/latex/librebaskerville.sty
-2022/09/17 | 190044 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/DroidSans.ttf
-2022/09/17 | 18 | graphics/asymptote/tests/output/circle.asy
-2022/09/17 | 18 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/_config.yml
-2022/09/17 | 189 | graphics/asymptote/cudareflect/tinyexr/examples/exr2ldr/Makefile
-2022/09/17 | 1899 | graphics/asymptote/GUI/res/icons/social-python.svg
-2022/09/17 | 18991 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/Win32Window.cpp
-2022/09/17 | 1898 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
-2022/09/17 | 1896 | graphics/asymptote/cudareflect/tinyexr/config-msvc.py
-2022/09/17 | 188 | graphics/asymptote/runstring.h
-2022/09/17 | 188 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/cmake_clean.cmake
-2022/09/17 | 188 | graphics/asymptote/examples/transparency.asy
-2022/09/17 | 188 | graphics/asymptote/cudareflect/tinyexr/examples/resize/Makefile
-2022/09/17 | 18867 | graphics/asymptote/LspCpp/src/lsp/utils.cpp
-2022/09/17 | 1884 | graphics/asymptote/GUI/res/icons/filledbucket.svg
-2022/09/17 | 187 | graphics/asymptote/tests/string/rfind.asy
-2022/09/17 | 187 | graphics/asymptote/examples/label3solid.asy
-2022/09/17 | 1878 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-uninitialized-test_.cc
-2022/09/17 | 1876 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_link_test.cc
-2022/09/17 | 1876 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_link2_test.cc
-2022/09/17 | 1876 | graphics/asymptote/cc-mode2.el
-2022/09/17 | 1875 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/foldingRange.h
-2022/09/17 | 1873 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/custom/gtest-port.h
-2022/09/17 | 18739 | graphics/asymptote/runstring.cc
-2022/09/17 | 186 | graphics/asymptote/runpath3d.h
-2022/09/17 | 186 | graphics/asymptote/doc/unitcircle3.asy
-2022/09/17 | 186 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/shader.vert
-2022/09/17 | 1866 | graphics/asymptote/LspCpp/third_party/rapidjson/example/simplereader/simplereader.cpp
-2022/09/17 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
-2022/09/17 | 186337 | macros/generic/unicode-data/EastAsianWidth.txt
-2022/09/17 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
-2022/09/17 | 185 | graphics/asymptote/cudareflect/tinyexr/test/fuzzer/README.md
-2022/09/17 | 1858 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/custom/gtest.h
-2022/09/17 | 18578 | graphics/asymptote/application.cc
-2022/09/17 | 1852 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/hover.h
-2022/09/17 | 1851 | graphics/asymptote/drawclipbegin.h
-2022/09/17 | 184 | graphics/asymptote/examples/roll.asy
-2022/09/17 | 18474 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-printers.cc
-2022/09/17 | 18448 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/internal/gmock-internal-utils.h
-2022/09/17 | 1843 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_symbol.h
-2022/09/17 | 1841 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest_main_unittest.cc
-2022/09/17 | 184112 | macros/generic/unicode-data/Scripts.txt
-2022/09/17 | 183 | graphics/asymptote/build-scripts/cc-indent.el
-2022/09/17 | 18382 | graphics/asymptote/LspCpp/third_party/uri/src/uri.cpp
-2022/09/17 | 1835 | graphics/asymptote/examples/cyclohexane.asy
-2022/09/17 | 1832 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/NotificationInMessage.h
-2022/09/17 | 18327 | graphics/asymptote/LspCpp/third_party/uri/test/uri_parse_test.cpp
-2022/09/17 | 1831 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Endpoint.h
-2022/09/17 | 1830 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
-2022/09/17 | 182 | graphics/asymptote/tests/string/find.asy
-2022/09/17 | 182 | graphics/asymptote/examples/label3.asy
-2022/09/17 | 1828 | graphics/asymptote/beziercurve.cc
-2022/09/17 | 182476 | macros/latex/contrib/calculator/calculator.dtx
-2022/09/17 | 1819 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/colorPresentation.h
-2022/09/17 | 1813 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/OpenGLInclude.h
-2022/09/17 | 18095 | graphics/asymptote/doc/asy-latex.dtx
-2022/09/17 | 1808 | graphics/asymptote/GUI/res/icons.qrc
-2022/09/17 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
-2022/09/17 | 17 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail2.json
-2022/09/17 | 17993 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/schema.md
-2022/09/17 | 17987 | graphics/asymptote/entry.cc
-2022/09/17 | 17958 | graphics/asymptote/asy-keywords.el
-2022/09/17 | 17951 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/src/gmock-matchers.cc
-2022/09/17 | 17907 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/writertest.cpp
-2022/09/17 | 178 | graphics/asymptote/fftw++asy.cc
-2022/09/17 | 177 | graphics/asymptote/runpath.h
-2022/09/17 | 177 | graphics/asymptote/examples/curvedlabel.asy
-2022/09/17 | 17798 | graphics/asymptote/runfile.cc
-2022/09/17 | 1778 | graphics/asymptote/examples/conicurv.asy
-2022/09/17 | 1775 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/utilityclass.dot
-2022/09/17 | 17734 | graphics/asymptote/dec.h
-2022/09/17 | 177246 | graphics/asymptote/prc/PRCdouble.cc
-2022/09/17 | 176 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/makefile
-2022/09/17 | 1765 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/ScopeExit.h
-2022/09/17 | 17614 | graphics/asymptote/cudareflect/tinyexr/README.md
-2022/09/17 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
-2022/09/17 | 175 | graphics/asymptote/examples/strokeshade.asy
-2022/09/17 | 17540 | graphics/asymptote/texfile.cc
-2022/09/17 | 1753 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/custom/README.md
-2022/09/17 | 1753 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/Win32OpenGLWindow.h
-2022/09/17 | 1752 | graphics/asymptote/base/shaders/sum3.glsl
-2022/09/17 | 1751 | graphics/asymptote/GUI/GuidesManager.py
-2022/09/17 | 174 | graphics/asymptote/cudareflect/tinyexr/examples/testmapgen/Makefile
-2022/09/17 | 1746 | graphics/asymptote/doc/westnile.asy
-2022/09/17 | 17405 | graphics/asymptote/configure.ac
-2022/09/17 | 173 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/readme.txt
-2022/09/17 | 173 | graphics/asymptote/cudareflect/tinyexr/test/c-binding/Makefile
-2022/09/17 | 173 | graphics/asymptote/cudareflect/tinyexr/examples/exrfilter/Makefile
-2022/09/17 | 1734 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/CMakeLists.txt
-2022/09/17 | 17346 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/nfd_win.cpp
-2022/09/17 | 1733 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/src/include/nfd.h
-2022/09/17 | 1732 | graphics/asymptote/GUI/res/icons/grid.svg
-2022/09/17 | 1728 | graphics/asymptote/webgl/vertex.glsl
-2022/09/17 | 17258 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/regextest.cpp
-2022/09/17 | 1710 | graphics/asymptote/tests/arith/roots.asy
-2022/09/17 | 1710 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri/uri_io.hpp
-2022/09/17 | 1703 | graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake
-2022/09/17 | 16 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail8.json
-2022/09/17 | 16 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail4.json
-2022/09/17 | 16 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail24.json
-2022/09/17 | 169 | graphics/asymptote/runbacktrace.h
-2022/09/17 | 1698 | graphics/asymptote/record.cc
-2022/09/17 | 1698 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/floats.json
-2022/09/17 | 1696 | graphics/asymptote/cudareflect/tinyexr/cmake/sanitizers/FindUBSan.cmake
-2022/09/17 | 1694 | graphics/asymptote/fftw++.cc
-2022/09/17 | 168 | graphics/asymptote/examples/lines.asy
-2022/09/17 | 1688 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/test/SConstruct
-2022/09/17 | 16832 | macros/generic/unicode-data/SpecialCasing.txt
-2022/09/17 | 167 | graphics/asymptote/cudareflect/tinyexr/examples/nornalmap/Makefile
-2022/09/17 | 1675 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/production.cc
-2022/09/17 | 167384 | fonts/umtypewriter/UMTypewriter-Italic.otf
-2022/09/17 | 16705 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/ChangeLog.md
-2022/09/17 | 16661 | graphics/asymptote/LspCpp/third_party/uri/src/Makefile
-2022/09/17 | 1659 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/did_change.h
-2022/09/17 | 1659636 | graphics/asymptote/ChangeLog
-2022/09/17 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
-2022/09/17 | 1658 | graphics/asymptote/LspCpp/include/LibLsp/lsp/client/registerCapability.h
-2022/09/17 | 1658 | graphics/asymptote/GUI/Widg_editBezier.py
-2022/09/17 | 16569 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/architecture.png
-2022/09/17 | 16552 | graphics/asymptote/LspCpp/third_party/uri/include/network/optional.hpp
-2022/09/17 | 1652 | fonts/librebaskerville/README
-2022/09/17 | 16492 | graphics/asymptote/base/plain_Label.asy
-2022/09/17 | 1648 | systems/texlive/tlnet/archive/collection-publishers.r64416.tar.xz
-2022/09/17 | 1648 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/OpenGL2Include.h
-2022/09/17 | 16483 | graphics/asymptote/runpair.cc
-2022/09/17 | 1640 | graphics/asymptote/callable.h
-2022/09/17 | 163 | graphics/asymptote/examples/1overx.asy
-2022/09/17 | 1630 | graphics/asymptote/builtin.h
-2022/09/17 | 162 | graphics/asymptote/examples/stereoscopic.asy
-2022/09/17 | 162 | graphics/asymptote/examples/sphereskeleton.asy
-2022/09/17 | 16298 | graphics/asymptote/LspCpp/third_party/rapidjson/test/perftest/rapidjsontest.cpp
-2022/09/17 | 1626 | graphics/asymptote/genv.h
-2022/09/17 | 1620 | graphics/asymptote/doc/colors.asy
-2022/09/17 | 161 | graphics/asymptote/runhistory.h
-2022/09/17 | 161 | graphics/asymptote/cudareflect/tinyexr/examples/exr2rgbe/Makefile
-2022/09/17 | 16188 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/screens/open_win8.png
-2022/09/17 | 1612 | graphics/asymptote/asy-list.pl
-2022/09/17 | 1611 | graphics/asymptote/v3dheadertypes.py
-2022/09/17 | 1610 | graphics/asymptote/LspCpp/third_party/rapidjson/example/sortkeys/sortkeys.cpp
-2022/09/17 | 160 | graphics/asymptote/cudareflect/tinyexr/jni/Makefile
-2022/09/17 | 160976 | fonts/umtypewriter/UMTypewriter-Regular.otf
-2022/09/17 | 1608 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/anyOf.json
-2022/09/17 | 16089 | graphics/asymptote/base/slide.asy
-2022/09/17 | 16081 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/move1.png
-2022/09/17 | 1607 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/oneOf.json
-2022/09/17 | 160672 | graphics/asymptote/examples/animations/dice.u3d
-2022/09/17 | 15 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail28.json
-2022/09/17 | 15 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-efe9007bfdcbbe8a1569bf01fa9acadb8261ead49cb83f6e91fcdc4dae2e99a3_min
-2022/09/17 | 15 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-df76d1f27adb8927a1446a603028272140905c168a336128465a1162ec7af270.mini
-2022/09/17 | 159 | graphics/asymptote/tests/types/cast.asy
-2022/09/17 | 159 | graphics/asymptote/cudareflect/tinyexr/examples/rgbe2exr/Makefile
-2022/09/17 | 1598 | graphics/asymptote/examples/NURBSsurface.asy
-2022/09/17 | 15959 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-typed-test.h
-2022/09/17 | 1594 | graphics/asymptote/pen.cc
-2022/09/17 | 158 | graphics/asymptote/tests/frames/stat.asy
-2022/09/17 | 15895 | graphics/asymptote/GUI/InplaceAddObj.py
-2022/09/17 | 1588 | graphics/asymptote/build-scripts/asy-format.el
-2022/09/17 | 158032 | systems/texlive/tlnet/archive/cormorantgaramond.doc.r64411.tar.xz
-2022/09/17 | 157 | graphics/asymptote/runsystem.h
-2022/09/17 | 157 | graphics/asymptote/doc/saddle.asy
-2022/09/17 | 157 | graphics/asymptote/cudareflect/tinyexr/examples/ldr2exr/Makefile
-2022/09/17 | 1579 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsp_code_action.h
-2022/09/17 | 1578 | graphics/asymptote/build-scripts/cc-format.el
-2022/09/17 | 1566 | graphics/asymptote/examples/near_earth.asy
-2022/09/17 | 1564 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/selectionRange.h
-2022/09/17 | 15645 | graphics/asymptote/install-sh
-2022/09/17 | 156194 | support/texaccents/texaccents.exe
-2022/09/17 | 15617 | graphics/asymptote/cudareflect/tinyexr/test_tinyexr.cc
-2022/09/17 | 15601 | graphics/asymptote/base/ode.asy
-2022/09/17 | 155 | graphics/asymptote/tests/types/ecast.asy
-2022/09/17 | 15529 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-nice-strict_test.cc
-2022/09/17 | 155069 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/issue-160-piz-decode.exr
-2022/09/17 | 154 | graphics/asymptote/examples/billboard.asy
-2022/09/17 | 1548 | graphics/asymptote/examples/BezierSurface.asy
-2022/09/17 | 1548 | graphics/asymptote/cudareflect/tinyexr/test/issues/160/main.py
-2022/09/17 | 15464 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/dom.md
-2022/09/17 | 1545 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/lsRequestId.h
-2022/09/17 | 15451 | graphics/asymptote/types.h
-2022/09/17 | 1544 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json
-2022/09/17 | 1542 | graphics/asymptote/GUI/xasyUtils.py
-2022/09/17 | 1540 | graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake
-2022/09/17 | 153 | graphics/asymptote/runlabel.h
-2022/09/17 | 15393 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/dom.zh-cn.md
-2022/09/17 | 1538 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/README.md
-2022/09/17 | 15382 | graphics/asymptote/base/palette.asy
-2022/09/17 | 1537 | graphics/asymptote/examples/refs.bib
-2022/09/17 | 15364 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/faq.md
-2022/09/17 | 1532 | graphics/asymptote/LspCpp/src/jsonrpc/MessageJsonHandler.cpp
-2022/09/17 | 15318 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/BUILD.bazel
-2022/09/17 | 15277 | graphics/asymptote/base/flowchart.asy
-2022/09/17 | 1525 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json
-2022/09/17 | 15253 | graphics/asymptote/runlabel.cc
-2022/09/17 | 1524 | graphics/asymptote/patches/flex.patch
-2022/09/17 | 1523 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/unittest.cpp
-2022/09/17 | 1521 | graphics/asymptote/LspCpp/third_party/utfcpp/source/utf8.h
-2022/09/17 | 15142 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/mixed.json
-2022/09/17 | 150 | graphics/asymptote/examples/spheresilhouette.asy
-2022/09/17 | 150 | graphics/asymptote/doc/latexmkrc_asydir
-2022/09/17 | 15043 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest_pred_impl.h
-2022/09/17 | 15030 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/faq.zh-cn.md
-2022/09/17 | 1502 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/move2.dot
-2022/09/17 | 15018 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/main.cc
-2022/09/17 | 15004 | graphics/asymptote/base/v3d.asy
-2022/09/17 | 14 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail27.json
-2022/09/17 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
-2022/09/17 | 14980 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/gmock_faq.md
-2022/09/17 | 1492 | graphics/asymptote/runarray.h
-2022/09/17 | 14915 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-failfast-unittest.py
-2022/09/17 | 148 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/pass3.json
-2022/09/17 | 1482 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCommand.h
-2022/09/17 | 1480 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/Condition.h
-2022/09/17 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
-2022/09/17 | 14795 | graphics/asymptote/stm.cc
-2022/09/17 | 1475 | graphics/asymptote/LspCpp/third_party/uri/deps/LICENSE
-2022/09/17 | 14749 | graphics/asymptote/base/contour3.asy
-2022/09/17 | 146 | graphics/asymptote/doc/slopefield1.asy
-2022/09/17 | 146 | graphics/asymptote/cudareflect/tinyexr/examples/deepview/Makefile
-2022/09/17 | 1469 | graphics/asymptote/doc/png/Makefile.in
-2022/09/17 | 1467 | graphics/asymptote/GUI/res/icons/android-hand.svg
-2022/09/17 | 14651 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-death-test.h
-2022/09/17 | 1461 | graphics/asymptote/examples/logo3.asy
-2022/09/17 | 145 | graphics/asymptote/examples/star.asy
-2022/09/17 | 14575 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/cmake/internal_utils.cmake
-2022/09/17 | 1456 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/tutorial.dot
-2022/09/17 | 1454 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/move3.dot
-2022/09/17 | 14532 | graphics/asymptote/stack.cc
-2022/09/17 | 14531 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/stream.md
-2022/09/17 | 1452 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/platformtest.cpp
-2022/09/17 | 145014 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/gmock_cook_book.md
-2022/09/17 | 144 | graphics/asymptote/doc/latexmkrc
-2022/09/17 | 1449 | graphics/asymptote/GUI/SetCustomAnchor.py
-2022/09/17 | 1441 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/pass1.json
-2022/09/17 | 143 | graphics/asymptote/tests/gc/label.asy
-2022/09/17 | 1438 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsFormattingOptions.h
-2022/09/17 | 14378 | graphics/asymptote/examples/teapot.asy
-2022/09/17 | 1436 | graphics/asymptote/GUI/res/icons/bucket.svg
-2022/09/17 | 1435 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/simpledom.dot
-2022/09/17 | 1435 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/linkedEditingRange.h
-2022/09/17 | 14325 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/stream.zh-cn.md
-2022/09/17 | 14283 | graphics/asymptote/testv3d.asy
-2022/09/17 | 1427 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/diagram/normalparsing.dot
-2022/09/17 | 1423 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/didChangeWorkspaceFolders.h
-2022/09/17 | 141 | graphics/asymptote/examples/sphere.asy
-2022/09/17 | 141 | graphics/asymptote/examples/ring.asy
-2022/09/17 | 1419 | graphics/asymptote/LspCpp/third_party/uri/test/uri_stream_test.cpp
-2022/09/17 | 14139 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/RemoteEndPoint.h
-2022/09/17 | 140 | graphics/asymptote/doc/vectorfield.asy
-2022/09/17 | 14089 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest-typed-test_test.cc
-2022/09/17 | 14081 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/src/gtest-filepath.cc
-2022/09/17 | 14072 | graphics/asymptote/types.cc
-2022/09/17 | 1406 | graphics/asymptote/cudareflect/EXRFiles.h
-2022/09/17 | 139 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/docs/README.md
-2022/09/17 | 139 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/docs/README.md
-2022/09/17 | 1398 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/swap.h
-2022/09/17 | 13980 | graphics/asymptote/arrayop.h
-2022/09/17 | 1396 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsCodeAction.h
-2022/09/17 | 13944 | graphics/asymptote/runtriple.cc
-2022/09/17 | 1391 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/initialize.h
-2022/09/17 | 1391 | graphics/asymptote/doc/CAD1.asy
-2022/09/17 | 1390 | graphics/asymptote/LspCpp/src/lsp/initialize.cpp
-2022/09/17 | 138 | graphics/asymptote/Pipfile
-2022/09/17 | 1388 | graphics/asymptote/LspCpp/src/jsonrpc/Endpoint.cpp
-2022/09/17 | 13867 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/nuklear_btgui_gl2.h
-2022/09/17 | 1384 | graphics/asymptote/tests/pic/trans.asy
-2022/09/17 | 13816 | graphics/asymptote/GUI/xasyBezierInterface.py
-2022/09/17 | 13804 | graphics/asymptote/LspCpp/src/lsp/textDocument.cpp
-2022/09/17 | 13764 | graphics/asymptote/GUI/ContextWindow.py
-2022/09/17 | 1375 | graphics/asymptote/base/tree.asy
-2022/09/17 | 13716 | systems/texlive/tlnet/archive/udes-genie-these.source.r64416.tar.xz
-2022/09/17 | 136 | graphics/asymptote/examples/latticeshading.asy
-2022/09/17 | 13663 | graphics/asymptote/doc/install-sh
-2022/09/17 | 13663 | graphics/asymptote/doc/FAQ/install-sh
-2022/09/17 | 13615 | graphics/asymptote/entry.h
-2022/09/17 | 13612 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock_output_test_golden.txt
-2022/09/17 | 13605 | graphics/asymptote/base/grid3.asy
-2022/09/17 | 13569 | macros/generic/unicode-data/MathClass-15.txt
-2022/09/17 | 1352 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/did_change_watched_files.h
-2022/09/17 | 1352 | graphics/asymptote/examples/Klein.asy
-2022/09/17 | 134 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tox.ini
-2022/09/17 | 13491 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/internal/gmock-pp.h
-2022/09/17 | 1347 | graphics/asymptote/cudareflect/tinyexr/test/unit/config-posix.py
-2022/09/17 | 13477 | graphics/asymptote/base/asy.vim
-2022/09/17 | 1345 | graphics/asymptote/interact.h
-2022/09/17 | 13440 | graphics/asymptote/texfile.h
-2022/09/17 | 1341 | graphics/asymptote/runtimebase.in
-2022/09/17 | 133 | graphics/asymptote/cudareflect/tinyexr/test/unit/vcbuild.bat
-2022/09/17 | 1338 | graphics/asymptote/LspCpp/third_party/utfcpp/LICENSE
-2022/09/17 | 1338 | graphics/asymptote/LspCpp/third_party/uri/LICENSE_1_0.txt
-2022/09/17 | 1337 | graphics/asymptote/base/v3dheadertypes.asy
-2022/09/17 | 13366 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/internal/gtest-death-test-internal.h
-2022/09/17 | 13357 | graphics/asymptote/camp.l
-2022/09/17 | 1331 | graphics/asymptote/tests/types/spec.asy
-2022/09/17 | 132 | graphics/asymptote/tests/string/length.asy
-2022/09/17 | 132 | graphics/asymptote/cudareflect/tinyexr/test/unit/regression/poc-d5c9c893e559277a3320c196523095b94db93985620ac338d037487e0e613047_min
-2022/09/17 | 132742 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/document.h
-2022/09/17 | 1325255 | macros/latex/contrib/nicematrix/nicematrix.pdf
-2022/09/17 | 132360 | macros/generic/unicode-data/PropList.txt
-2022/09/17 | 13217 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/type.json
-2022/09/17 | 1318 | graphics/asymptote/LspCpp/include/LibLsp/lsp/ProcessIoService.h
-2022/09/17 | 1318 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/OpenGLWindow/Win32InternalWindowData.h
-2022/09/17 | 1316 | graphics/asymptote/base/shaders/sum2fast.glsl
-2022/09/17 | 1315 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/unittestschema/idandref.json
-2022/09/17 | 1312 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/strfunctest.cpp
-2022/09/17 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
-2022/09/17 | 1309 | graphics/asymptote/examples/roundpath.asy
-2022/09/17 | 13060 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/gtest-unittest-api_test.cc
-2022/09/17 | 13045 | support/texaccents/texaccents.sno
-2022/09/17 | 130356 | graphics/asymptote/ReleaseNotes
-2022/09/17 | 1302 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
-2022/09/17 | 130266 | graphics/asymptote/camp.tab.cc
-2022/09/17 | 12 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonchecker/fail33.json
-2022/09/17 | 129 | graphics/asymptote/tests/gc/struct.asy
-2022/09/17 | 129 | graphics/asymptote/base/shaders/screen.glsl
-2022/09/17 | 1299 | graphics/asymptote/patches/dvipdf
-2022/09/17 | 1299 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/StreamMessageProducer.h
-2022/09/17 | 1298 | graphics/asymptote/examples/electromagnetic.asy
-2022/09/17 | 1293 | graphics/asymptote/TODO
-2022/09/17 | 1291 | graphics/asymptote/LspCpp/third_party/utfcpp/CMakeLists.txt
-2022/09/17 | 1291 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsPosition.h
-2022/09/17 | 12907 | graphics/asymptote/Makefile.in
-2022/09/17 | 1288702 | graphics/asymptote/doc/asymptote.pdf
-2022/09/17 | 1287 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/README.md
-2022/09/17 | 1284 | graphics/asymptote/tests/output/Makefile
-2022/09/17 | 12840 | systems/texlive/tlnet/archive/biblatex-philosophy.r64414.tar.xz
-2022/09/17 | 1282 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/required.json
-2022/09/17 | 12823 | graphics/asymptote/impdatum.cc
-2022/09/17 | 1280 | graphics/asymptote/beziercurve.h
-2022/09/17 | 127 | graphics/asymptote/index.html
-2022/09/17 | 1276 | graphics/asymptote/base/asymptote.py
-2022/09/17 | 1274 | graphics/asymptote/newexp.h
-2022/09/17 | 1273 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/default.json
-2022/09/17 | 1273 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/default.json
-2022/09/17 | 1268 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/performance.md
-2022/09/17 | 1266 | graphics/asymptote/drawverbatim.h
-2022/09/17 | 12648 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-output-test.py
-2022/09/17 | 12630 | graphics/asymptote/cudareflect/tinyexr/examples/cube2longlat/cube2longlat.cc
-2022/09/17 | 1261761 | graphics/asymptote/examples/worldmap.dat
-2022/09/17 | 12604 | graphics/asymptote/runsystem.cc
-2022/09/17 | 125 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/docker/Dockerfile
-2022/09/17 | 1253 | graphics/asymptote/keywords.pl
-2022/09/17 | 12539 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-shuffle-test.py
-2022/09/17 | 12534 | graphics/asymptote/ax_pthread.m4
-2022/09/17 | 1251 | graphics/asymptote/examples/odetest.asy
-2022/09/17 | 1250 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/references.h
-2022/09/17 | 124 | graphics/asymptote/tests/gc/path.asy
-2022/09/17 | 124 | graphics/asymptote/GUI/res/icons/centerorigin.asy
-2022/09/17 | 1249 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/document_link.h
-2022/09/17 | 124978 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/schematest.cpp
-2022/09/17 | 1247 | graphics/asymptote/examples/animations/slidemovies.asy
-2022/09/17 | 12474 | graphics/asymptote/LspCpp/third_party/utfcpp/source/utf8/checked.h
-2022/09/17 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
-2022/09/17 | 1245 | graphics/asymptote/findsym.pl
-2022/09/17 | 1240 | graphics/asymptote/examples/arrows3.asy
-2022/09/17 | 123 | graphics/asymptote/examples/Coons.asy
-2022/09/17 | 123 | graphics/asymptote/doc/superpath.asy
-2022/09/17 | 1239 | graphics/asymptote/v3dheadertypes.h
-2022/09/17 | 1239 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/configuration.h
-2022/09/17 | 1236 | graphics/asymptote/primitives.h
-2022/09/17 | 1236 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/performance.zh-cn.md
-2022/09/17 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
-2022/09/17 | 1235777 | graphics/asymptote/GL/glew.c
-2022/09/17 | 1232 | graphics/asymptote/build-scripts/build-asygl
-2022/09/17 | 12321 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/test/gmock-cardinalities_test.cc
-2022/09/17 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
-2022/09/17 | 12259 | graphics/asymptote/knot.h
-2022/09/17 | 121 | graphics/asymptote/doc/labelsquare.asy
-2022/09/17 | 121 | graphics/asymptote/cudareflect/tinyexr/tinyexr.cc
-2022/09/17 | 1219 | graphics/asymptote/LspCpp/include/LibLsp/lsp/general/lsClientCapabilities.h
-2022/09/17 | 1216 | graphics/asymptote/LspCpp/third_party/uri/CHANGELOG.md
-2022/09/17 | 1216 | graphics/asymptote/examples/dragon.asy
-2022/09/17 | 1215 | graphics/asymptote/GUI/configs/xasyconfig.cson
-2022/09/17 | 1213 | graphics/asymptote/base/plain_arcs.asy
-2022/09/17 | 121145 | graphics/asymptote/doc/asyRefCard.pdf
-2022/09/17 | 121098 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/schema.h
-2022/09/17 | 1209 | graphics/asymptote/tests/imp/unravel.asy
-2022/09/17 | 1203 | graphics/asymptote/LspCpp/README.md
-2022/09/17 | 12012 | graphics/asymptote/base/solids.asy
-2022/09/17 | 12011 | graphics/asymptote/LspCpp/CMakeLists.txt
-2022/09/17 | 1200 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/_data/navigation.yml
-2022/09/17 | 11 | macros/context/contrib/context-simplefonts/VERSION
-2022/09/17 | 11996 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/encodedstreamtest.cpp
-2022/09/17 | 1198 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/exr-io.cc
-2022/09/17 | 1197 | graphics/asymptote/drawclipend.h
-2022/09/17 | 11937 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/CMakeLists.txt
-2022/09/17 | 1192 | graphics/asymptote/LspCpp/include/LibLsp/lsp/SimpleTimer.h
-2022/09/17 | 1190 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsVersionedTextDocumentIdentifier.h
-2022/09/17 | 1190 | graphics/asymptote/camperror.cc
-2022/09/17 | 11907 | graphics/asymptote/tests/gsl/random.asy
-2022/09/17 | 118 | graphics/asymptote/tests/string/substr.asy
-2022/09/17 | 118 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
-2022/09/17 | 1189 | graphics/asymptote/tests/types/var.asy
-2022/09/17 | 1189 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/didRenameFiles.h
-2022/09/17 | 1188 | graphics/asymptote/EXRFiles.cc
-2022/09/17 | 1187 | graphics/asymptote/GUI/res/icons/closedcurve.svg
-2022/09/17 | 1186601 | graphics/asymptote/GL/glew.h
-2022/09/17 | 1185 | graphics/asymptote/examples/functionshading.asy
-2022/09/17 | 1184 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/code_lens.h
-2022/09/17 | 1183 | graphics/asymptote/GUI/xasyArgs.py
-2022/09/17 | 1183225 | graphics/asymptote/gc-8.2.0.tar.gz
-2022/09/17 | 1182 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/TcpServer.h
-2022/09/17 | 1181 | graphics/asymptote/LspCpp/include/LibLsp/lsp/lsMarkedString.h
-2022/09/17 | 1180 | graphics/asymptote/GUI/res/icons/code.svg
-2022/09/17 | 11801 | graphics/asymptote/LspCpp/include/LibLsp/lsp/ClientPreferences.h
-2022/09/17 | 117 | graphics/asymptote/cudareflect/tinyexr/examples/exr2fptiff/README.md
-2022/09/17 | 1178 | graphics/asymptote/base/embed.asy
-2022/09/17 | 1175 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/applyEdit.h
-2022/09/17 | 1171 | graphics/asymptote/parser.h
-2022/09/17 | 116944 | systems/texlive/tlnet/archive/udes-genie-these.doc.r64416.tar.xz
-2022/09/17 | 11663 | graphics/asymptote/path.h
-2022/09/17 | 11656 | graphics/asymptote/LspCpp/include/LibLsp/JsonRpc/serializer.h
-2022/09/17 | 11656 | graphics/asymptote/base/binarytree.asy
-2022/09/17 | 1164 | graphics/asymptote/examples/genustwo.asy
-2022/09/17 | 11642 | graphics/asymptote/coder.h
-2022/09/17 | 1163 | graphics/asymptote/runtime.h
-2022/09/17 | 1162 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/LICENSE
-2022/09/17 | 116010 | graphics/asymptote/predicates.cc
-2022/09/17 | 115 | graphics/asymptote/doc/onecontour.asy
-2022/09/17 | 1158 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/codeActionResult.h
-2022/09/17 | 1156 | graphics/asymptote/cudareflect/tinyexr/premake4.lua
-2022/09/17 | 11559 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/diyfp.h
-2022/09/17 | 11541 | graphics/asymptote/aspy.py
-2022/09/17 | 1151 | graphics/asymptote/callable.cc
-2022/09/17 | 11513 | graphics/asymptote/runlabel.in
-2022/09/17 | 1149 | graphics/asymptote/guide.cc
-2022/09/17 | 1147 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/rename.h
-2022/09/17 | 11468 | graphics/asymptote/drawelement.h
-2022/09/17 | 1142 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/checkHashCodeEqualsStatus.h
-2022/09/17 | 1142 | graphics/asymptote/envcompleter.cc
-2022/09/17 | 1140 | graphics/asymptote/absyn.h
-2022/09/17 | 113 | graphics/asymptote/patches/fixmem.reg
-2022/09/17 | 113 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/compiler_depend.make
-2022/09/17 | 1139 | graphics/asymptote/GUI/res/icons/opencurve.svg
-2022/09/17 | 1138 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/onTypeFormatting.h
-2022/09/17 | 1137 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/misc/header.html
-2022/09/17 | 11373 | graphics/asymptote/base/plain_markers.asy
-2022/09/17 | 1136 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/items.json
-2022/09/17 | 1136 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/items.json
-2022/09/17 | 113565 | graphics/asymptote/cudareflect/tinyexr/examples/common/stb_image_resize.h
-2022/09/17 | 1131 | graphics/asymptote/gl-matrix-2.4.0-pruned/LICENSE.js
-2022/09/17 | 1131 | graphics/asymptote/cudareflect/tinyexr/experimental/js/index.html
-2022/09/17 | 1127425 | graphics/asymptote/cudareflect/tinyexr/asakusa.exr
-2022/09/17 | 1126 | graphics/asymptote/coenv.cc
-2022/09/17 | 11269 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/SemanticTokens.h
-2022/09/17 | 11221 | graphics/asymptote/jsfile.cc
-2022/09/17 | 1120 | graphics/asymptote/examples/animations/wheel.asy
-2022/09/17 | 1120 | graphics/asymptote/base/external.asy
-2022/09/17 | 111 | graphics/asymptote/GUI/res/icons/center.asy
-2022/09/17 | 111 | graphics/asymptote/examples/shadestroke.asy
-2022/09/17 | 1118 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/samples.md
-2022/09/17 | 1116 | graphics/asymptote/LspCpp/third_party/uri/test/valid_urls.txt
-2022/09/17 | 111505 | macros/generic/unicode-data/emoji-data.txt
-2022/09/17 | 1114 | graphics/asymptote/examples/laserlattice.asy
-2022/09/17 | 11146 | graphics/asymptote/LspCpp/third_party/rapidjson/readme.md
-2022/09/17 | 11122 | graphics/asymptote/base/math.asy
-2022/09/17 | 1111 | graphics/asymptote/examples/imagehistogram.asy
-2022/09/17 | 110 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/remotes/subSchemas.json
-2022/09/17 | 1108 | graphics/asymptote/GUI/res/icons/android-locate.svg
-2022/09/17 | 1104 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/cmake_clean.cmake
-2022/09/17 | 1103 | graphics/asymptote/LspCpp/include/LibLsp/lsp/client/unregisterCapability.h
-2022/09/17 | 110328 | fonts/umtypewriter/UMTypewriter-Oblique.otf
-2022/09/17 | 1101 | graphics/asymptote/cudareflect/tinyexr/examples/resize/resize.cc
-2022/09/17 | 109 | graphics/asymptote/tests/string/insert.asy
-2022/09/17 | 109 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
-2022/09/17 | 109 | graphics/asymptote/GUI/res/icons/closedcurve.asy
-2022/09/17 | 1098 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/types/integers.json
-2022/09/17 | 1096 | graphics/asymptote/tests/array/transpose.asy
-2022/09/17 | 1096 | graphics/asymptote/refaccess.cc
-2022/09/17 | 1096 | graphics/asymptote/drawlayer.h
-2022/09/17 | 10964 | graphics/asymptote/LspCpp/third_party/utfcpp/source/utf8/unchecked.h
-2022/09/17 | 109110 | macros/generic/unicode-data/WordBreakProperty.txt
-2022/09/17 | 1090 | graphics/asymptote/GUI/res/icons/redo.svg
-2022/09/17 | 10906 | graphics/asymptote/LspCpp/third_party/utfcpp/source/utf8/core.h
-2022/09/17 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
-2022/09/17 | 108 | graphics/asymptote/cudareflect/tinyexr/jni/README.md
-2022/09/17 | 1088 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/clzlltest.cpp
-2022/09/17 | 1088 | graphics/asymptote/examples/NURBSsphere.asy
-2022/09/17 | 10840 | graphics/asymptote/base/CAD.asy
-2022/09/17 | 1082 | graphics/asymptote/patches/README
-2022/09/17 | 107 | graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/compiler_depend.ts
-2022/09/17 | 1079 | graphics/asymptote/LspCpp/include/LibLsp/lsp/textDocument/prepareRename.h
-2022/09/17 | 1075 | graphics/asymptote/v3dheadertypes.csv
-2022/09/17 | 1075 | graphics/asymptote/LspCpp/include/LibLsp/lsp/extention/jdtls/OverridableMethod.h
-2022/09/17 | 1072 | graphics/asymptote/cudareflect/tinyexr/examples/cube2longlat/README.md
-2022/09/17 | 1070 | graphics/asymptote/cudareflect/IrradianceGenerator.sln
-2022/09/17 | 1066 | graphics/asymptote/LspCpp/LICENSE
-2022/09/17 | 1065 | graphics/asymptote/examples/shellmethod.asy
-2022/09/17 | 10641 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/encodedstream.h
-2022/09/17 | 1063 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/minimum.json
-2022/09/17 | 1063 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft4/maximum.json
-2022/09/17 | 1063 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/minimum.json
-2022/09/17 | 1063 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/tests/draft3/maximum.json
-2022/09/17 | 10632 | graphics/asymptote/LspCpp/src/jsonrpc/WebSocketServer.cpp
-2022/09/17 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
-2022/09/17 | 1058 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
-2022/09/17 | 10585 | graphics/asymptote/path3.h
-2022/09/17 | 1057 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/jsonschema/LICENSE
-2022/09/17 | 10571 | graphics/asymptote/cudareflect/tinyexr/deps/miniz/examples/example5.c
-2022/09/17 | 10563 | graphics/asymptote/cudareflect/tinyexr/test/unit/kuroga.py
-2022/09/17 | 10561 | graphics/asymptote/cudareflect/tinyexr/kuroga.py
-2022/09/17 | 1055 | graphics/asymptote/examples/partitionExample.asy
-2022/09/17 | 1053 | graphics/asymptote/doc/fillcontour.asy
-2022/09/17 | 1052 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/CMakeLists.txt
-2022/09/17 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
-2022/09/17 | 1051 | graphics/asymptote/doc/eetomumu.asy
-2022/09/17 | 1050 | graphics/asymptote/opsymbols.pl
-2022/09/17 | 10504 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/prettywriter.h
-2022/09/17 | 104 | graphics/asymptote/examples/tiling.asy
-2022/09/17 | 1047 | graphics/asymptote/GUI/res/icons/undo.svg
-2022/09/17 | 10476 | graphics/asymptote/LspCpp/third_party/uri/deps/googlemock/include/gmock/gmock-nice-strict.h
-2022/09/17 | 1044671 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/screenshots/exrview.png
-2022/09/17 | 10445 | graphics/asymptote/INSTALL
-2022/09/17 | 1043 | graphics/asymptote/GUI/res/icons/openpolygon.svg
-2022/09/17 | 10414 | graphics/asymptote/LspCpp/third_party/uri/src/detail/uri_parse.cpp
-2022/09/17 | 1040 | graphics/asymptote/examples/lmfit1.asy
-2022/09/17 | 103 | graphics/asymptote/LspCpp/third_party/rapidjson/bin/data/readme.txt
-2022/09/17 | 1039 | graphics/asymptote/LspCpp/third_party/uri/test/CMakeLists.txt
-2022/09/17 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
-2022/09/17 | 1034 | graphics/asymptote/LspCpp/third_party/uri/deps/docs/index.md
-2022/09/17 | 103478 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/Doxyfile.zh-cn.in
-2022/09/17 | 1033 | graphics/asymptote/examples/basealign.asy
-2022/09/17 | 103393 | graphics/asymptote/LspCpp/third_party/rapidjson/doc/Doxyfile.in
-2022/09/17 | 1032 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/test_checked_iterator.cpp
-2022/09/17 | 1031 | graphics/asymptote/LspCpp/third_party/uri/include/network/uri.hpp
-2022/09/17 | 10312 | graphics/asymptote/LspCpp/third_party/rapidjson/CMakeLists.txt
-2022/09/17 | 10310 | graphics/asymptote/LspCpp/third_party/rapidjson/test/unittest/prettywritertest.cpp
-2022/09/17 | 1030 | graphics/asymptote/examples/workcone.asy
-2022/09/17 | 102 | graphics/asymptote/tests/gc/file.asy
-2022/09/17 | 102 | graphics/asymptote/GUI/res/icons/openpolygon.asy
-2022/09/17 | 102 | graphics/asymptote/GUI/res/icons/opencurve.asy
-2022/09/17 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
-2022/09/17 | 1026 | graphics/asymptote/LspCpp/third_party/rapidjson/example/simplewriter/simplewriter.cpp
-2022/09/17 | 1022 | graphics/asymptote/LspCpp/include/LibLsp/lsp/workspace/workspaceFolders.h
-2022/09/17 | 1022 | graphics/asymptote/GUI/res/icons/centerorigin.svg
-2022/09/17 | 10224 | graphics/asymptote/tr.cc
-2022/09/17 | 1020 | graphics/asymptote/flatguide.cc
-2022/09/17 | 1019 | graphics/asymptote/LspCpp/third_party/rapidjson/example/pretty/pretty.cpp
-2022/09/17 | 10196 | graphics/asymptote/doc/CAD.tex
-2022/09/17 | 10168 | graphics/asymptote/LspCpp/third_party/uri/test/uri_resolve_test.cpp
-2022/09/17 | 1015 | graphics/asymptote/GUI/xasyTransform.py
-2022/09/17 | 1014 | graphics/asymptote/LspCpp/third_party/rapidjson/example/condense/condense.cpp
-2022/09/17 | 101347 | graphics/asymptote/webgl/gl.js
-2022/09/17 | 10131 | graphics/asymptote/util.cc
-2022/09/17 | 10110 | graphics/asymptote/LspCpp/third_party/rapidjson/include/rapidjson/internal/itoa.h
-2022/09/17 | 1010 | graphics/asymptote/examples/washermethod.asy
-2022/09/17 | 100 | graphics/asymptote/GUI/DebugFlags.py
-2022/09/17 | 1008 | graphics/asymptote/LspCpp/third_party/uri/src/CMakeLists.txt
-2022/09/17 | 1008 | graphics/asymptote/doc/leastsquares.asy
-2022/09/17 | 10073 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/include/gtest/gtest-spi.h
-2022/09/17 | 1005 | graphics/asymptote/doc/asy.1.begin
-2022/09/17 | 10038 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
-2022/09/17 | 1002 | graphics/asymptote/LspCpp/third_party/utfcpp/tests/test_unchecked_iterator.cpp
-2022/09/17 | 10023 | graphics/asymptote/LspCpp/third_party/uri/deps/googletest/test/googletest-catch-exceptions-test.py
-2022/09/17 | 1000 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
-2022/09/17 | 1000 | graphics/asymptote/doc/FAQ/Makefile
-2022/09/17 | 100007 | graphics/asymptote/cudareflect/tinyexr/examples/exrview/ThirdPartyLibs/nativefiledialog/screens/open_cocoa.png
diff --git a/graphics/pgf/contrib/tikz-ext/README.md b/graphics/pgf/contrib/tikz-ext/README.md
index b0e84a76de..bee9e3512a 100644
--- a/graphics/pgf/contrib/tikz-ext/README.md
+++ b/graphics/pgf/contrib/tikz-ext/README.md
@@ -14,16 +14,23 @@ This is not a LaTeX package but a collection of libraries for PGF and TikZ.
These are
- * `ext.calendar-plus`,
- * `ext.node-familes`,
- * `ext.transformations.mirror`,
- * `ext.paths.arcto`,
- * `ext.paths.ortho`,
- * `ext.paths.timer`,
- * `ext.patterns.images`,
- * `ext.positioning-plus`,
- * `ext.topaths.arcthrough` and
- * `ext.misc`.
+ * `ext.calendar-plus`
+ * `ext.node-families`
+ * `ext.node-families.shapes.geometric`
+ * `ext.paths.arcto`
+ * `ext.paths.ortho`
+ * `ext.paths.timer`
+ * `ext.patterns.images`
+ * `ext.positioning-plus`
+ * `ext.topaths.arcthrough`
+ * `ext.transformations.mirror`
+ * `ext.misc`
+ * Shapes:
+ * `ext.shapes.circlearrow`
+ * `ext.shapes.circlecrosssplit`
+ * `ext.shapes.heatmark`
+ * `ext.shapes.rectangleroundedcorners`
+ * `ext.shapes.superellopse`
These were developed in response to questions on tex.stackexchange.com.
Some of these can be find by searching for my [user id](https://tex.stackexchange.com/search?q=user%3A16595+%22my+library%22). \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
index 88a3567c1a..4f2300a458 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
@@ -9,9 +9,11 @@
%
\section{Calendar: Weeknumbers and more conditionals}
+\label{sec:calendar}
\begin{package}{calendar-ext}
- This package adds week numbers and more conditionals to the PGF package |pgfcalendar|.
+ This package adds week numbers and more conditionals to the \pgfname\space package |pgfcalendar|.
(Despite the code example above, this package is not set up to work with Con\TeX t.)
+ \inspiration{WeekNum-Q,CalCond-Q}{WeekNum-A,CalCond-A}
\end{package}
%This package extends the |pgfcalendar| package.
@@ -48,7 +50,7 @@ The following tests are added.
\end{itemize}
The shorthands for |d-| and |m-| are slightly changed so that they are
-expandable. This makes it possible to use these shorthands inside of PGFmath.
+expandable. This makes it possible to use these shorthands inside of \pgfname math.
The shorthands for the week (see section~\ref{calendar:weeknumbering})
are added. These are
\begin{itemize}
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
index ac5811ac6e..f9468175cb 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
@@ -10,19 +10,22 @@
\part{Introduction}
\begin{multicols}{2}
\section{Usage}
-This package is called |tikz-ext|, however, one can't load it via |\usepackage|.
-Instead, this package consists of multiple PGF and \tikzname\space libraries
+This package is called |tikz-ext|, however,
+one can't load it via |\usepackage|.%
+\footnote{Except for \texttt{calendar-ext} of section~\ref{sec:calendar}.}
+Instead, this package consists of multiple
+\pgfname\space and \tikzname\space libraries
which are loaded by either |\usepgflibrary| or |\usetikzlibrary|.
\section{Why do we need it?}
-Since I have been answering questions on \hyperlink{https://tex.stackexchange.com}{TeX.sx}
+Since I have been answering questions on
+\hyperlink{https://tex.stackexchange.com}{TeX.sx}
I've noticed that some questions come up again and again,
every time with a slightly different approach on how to solve them.
-I don't like reinventing the wheel which is why I've gathered the code of my answers in this package.
+I don't like reinventing the wheel which is why I've gathered
+the solutions of my answers in this package.
-And, yes, I am using them myself, too.
-
-\section{Should these libraries be part of \tikzname?}
-I guess.
+\section{Having problems?}
+Don't hesitate to open an issue on GitHub.
\end{multicols} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex
index 14c78e9be0..bdfd225f3c 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex
@@ -10,7 +10,8 @@
\section{Calendar}
\begin{tikzlibrary}{ext.calendar-plus}
- This library extends the \tikzname\space library |calendar|\indexLibraryO{calendar}.
+ This library extends the \tikzname\space library \referenceLibraryandIndexO{calendar}.
+ \inspiration{WeekNum-Q,CalCond-Q,CalMath-Q}{WeekNum-A,CalCond-A,CalMath-A}
\end{tikzlibrary}
\begin{multicols}{2}
@@ -34,6 +35,17 @@ It is now also possible to nest |/tikz/if| occurrences.
\begin{key}{/tikz/if=|(|\meta{conditions}|)|\meta{code or options}\opt{|else|\meta{else code or options}}}
\end{key}
+\subsection{\pgfname math functions}
+\begin{math-function}{weeksinmonthofyear(\mvar{first weekday}, \mvar{month}, \mvar{year})}
+\mathcommand
+ Returns the number of (partial) weeks in the month \mvar{month} of year \mvar{year}
+ when this month begins on a \mvar{first weekday}.
+\end{math-function}
+\begin{math-function}{lastdayinmonthofyear(\mvar{month}, \mvar{year})}
+\mathcommand
+ Returns the last day (28, 29, 30 or 31) of month \mvar{month} of year \mvar{year}.
+\end{math-function}
+
\subsection{Week numbering (ISO~8601)}
The actual week number algorithm is implemented by the |pgfcalendar-ext| package/module in section~\ref{calendar:weeknumbering}.
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
index 79cc9c21c3..163097e6a1 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
@@ -10,10 +10,11 @@
\section{And a little bit more}
\begin{tikzlibrary}{ext.misc}
- This library adds miscellaneous utilities to PGFmath, PGF or \tikzname.
+ This library adds miscellaneous utilities to \pgfname math, \pgfname\space or \tikzname.
+ \inspiration{FullArc-Q,ForeachUse-Q}{FullArc-A,ForeachUse-A}
\end{tikzlibrary}
-\subsection{PGFmath}
+\subsection{\pgfname math}
\begin{multicols}{2}
\pgfkeys{/codeexample/every codeexample/.append style={width=3cm}}
@@ -101,7 +102,7 @@ The |R| operator can then be used.
\end{math-function}
\subsubsection{Functions: using coordinates}
-The following functions can only be used with PGF and/or \tikzname.
+The following functions can only be used with \pgfname\space and/or \tikzname.
Since the arguments are usually plain text (and not numbers) one has to wrap
them in |"|.
\begin{math-function}{anglebetween("\mvar{p1}", "\mvar{p2}")}\mathcommand
@@ -135,18 +136,19 @@ them in |"|.
(intersection of @--[shift=(vecB)]@ and B--A) coordinate (A);}
\end{tikzpicture}
\end{codeexample}
-\subsection{PGFkeys}
-
+\pagebreak
+\subsection{\pgfname keys}
+%
\begin{multicols}{2}
-
+%
\subsubsection{Conditionals}
\begin{key}{/utils/if=\meta{cond}\meta{true}\opt{\meta{false}}}
This key checks the conditional \meta{cond} and applies the styles \meta{true}
if \meta{cond} is true, otherwise \meta{false}.
- \meta{cond} can be anything that PGFmath understands.
+ \meta{cond} can be anything that \pgfname math understands.
- As a side effect on how PGFkeys parses argument, the \meta{false} argument is
+ As a side effect on how \pgfname keys parses argument, the \meta{false} argument is
actually optional.
\end{key}
@@ -157,7 +159,7 @@ executions.
This key checks via |\if| if \meta{token A} matches \meta{token B}
and applies the styles \meta{true} if it does, otherwise \meta{false}.
- As a side effect on how PGFkeys parses argument, the \meta{false} argument is
+ As a side effect on how \pgfname keys parses argument, the \meta{false} argument is
actually optional.
\end{key}
@@ -170,7 +172,7 @@ executions.
and applies the styles \meta{true} if true, otherwise \meta{false}.
A delimiting |\relax| will be inserted after \meta{num cond}.
- As a side effect on how PGFkeys parses argument, the \meta{false} argument is
+ As a side effect on how \pgfname keys parses argument, the \meta{false} argument is
actually optional.
\end{key}
@@ -186,7 +188,7 @@ executions.
\subsubsection{Handlers}
-While already a lot of values given to keys are evaluated by PGFmath at some point,
+While already a lot of values given to keys are evaluated by \pgfname math at some point,
not all of them are.
\begin{handler}{{.pgfmath}|=|\meta{eval}}
@@ -226,13 +228,13 @@ not all of them are.
\end{tikzpicture}
\end{codeexample}
-\subsection{PGFfor}
+\subsection{\pgfname for}
Instead of |\foreach \var in {start, start + delta, ..., end}| one can use
|\foreach \var[use int=start to end step delta]|.
\begin{key}{/pgf/foreach/use int=\meta{start}|to|\meta{end}\opt{|step|\meta{delta}}}
-The values \meta{start}, \meta{end} and \meta{delta} are evaluates by PGFmath at initialization.
+The values \meta{start}, \meta{end} and \meta{delta} are evaluates by \pgfname math at initialization.
The part |step |\meta{delta} is optional (\meta{delta} = 1).
\end{key}
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex
index 04ebb7c7a0..d4b274511c 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex
@@ -15,47 +15,35 @@
measurements to the \filetype{aux} file.
Unfortunately, this does not work with the |external| library.\indexLibraryO{external}%
- \footnote{Not only would the \texttt{external} library not notice the change of the value between compilations runs,
- it also changes the way \texttt{\textbackslash pgfutil@writeout} works which suddenly writes to the \textsc{log} file instead.}
+ \footnote{First of all, I can't figure out how to use the \textsc{aux} file during externalization since it gets written to the \textsc{log} instead.
+ And then there's the question about how \texttt{external} would notice the need to export the picture again until it's stable \dots}
+
+ \inspiration{NodeFam-Q}{NodeFam-A}
+
\end{tikzlibrary}
-This library introduces two new shapes called |Circle| and |Rectangle|
-that are basically copies of the original shapes |circle|\indexShapeO{circle} and |rectangle|\indexShapeO{rectangle}.
-However, their dimension will be set to the same maximum |minimum width| and |minimum height|
-when one of the following \meta{name}s are declared.
-\begin{key}{/tikz/node family/width=\meta{name} (initially |\{\}|)}
-Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum width}.
-An empty \meta{name} disables the evaluation by the library.
-\begin{codeexample}[preamble=\usetikzlibrary{positioning,ext.node-families},/tikz/node distance=.5cm]
-\tikzexternaldisable % ext.node-families does not work with active externalization
-\begin{tikzpicture}[nodes={Rectangle, draw, node family/width=manual}]
-\node (a) {Foo};
-\node[below=of a] (b) {Foobar};
-\end{tikzpicture}
-\end{codeexample}
-\end{key}
-\begin{key}{/tikz/node family/height=\meta{name} (initially |\{\}|)}
-Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum height}.
-An empty \meta{name} disables the evaluation by the library.
-\end{key}
-\begin{key}{/tikz/node family/size=\meta{name}}
-Sets both |height| and |width|.
+Before we get to the interesting keys, a common prefix can be set for the families' names.
+Initially this is |\pgfpictureid-| so that families of different pictures don't interact.
+\begin{key}{/tikz/node family/prefix=\meta{prefix}(initially \string\pgfpictureid-)}
+The family names are prefixed with the value of |/tikz/node family/prefix|.
\end{key}
-While |node family/width| and |node family/height| only work for the new shapes |Circle| and |Rectangle|,
-the following keys~-- when setup, see below~-- work with every shape with one single node part.
-Initially though, only |circle|, |rectangle|, |Circle| and |Rectangle| are set up that way.
-\begin{key}{/tikz/node family/text height=\meta{name} (initially |\{\}|)}
+\subsection{Text Box}
+\label{ssec:nf-text}
+The following keys~-- when setup, see below~-- work with every shape with one single node part.%
+\footnote{Technically, it will also work with shapes with multiple node parts but it will only affect the main node part.}
+Initially though, only \referenceShapeandIndexO{circle} and \referenceShapeandIndexO{rectangle} are set up that way.
+\begin{key}{/tikz/node family/text height=\meta{name} (initially \{\})}
Nodes with the same \meta{name} will have the same text height.
An empty \meta{name} disables the evaluation by the library.
\end{key}
-\begin{key}{/tikz/node family/text depth=\meta{name} (initially |\{\}|)}
+\begin{key}{/tikz/node family/text depth=\meta{name} (initially \{\})}
Nodes with the same \meta{name} will have the same text depth.
An empty \meta{name} disables the evaluation by the library.
\end{key}
-\begin{key}{/tikz/node family/text width=\meta{name} (initially |\{\}|)}
+\begin{key}{/tikz/node family/text width=\meta{name} (initially \{\})}
Nodes with the same \meta{name} will have the same text width.
An empty \meta{name} disables the evaluation by the library.
\end{key}
@@ -68,31 +56,65 @@ Since the width of the node's content's box is setup much earlier,
the previous key only extends the width of that box which would make the text
seem as if it where aligned to the left.
With |text width family align| this can changed.
-\begin{key}{/tikz/node family/text width align=\meta{alignment}(initially |center|)}
+\begin{key}{/tikz/node family/text width align=\meta{alignment}(initially center)}
\meta{alignment} is one of |left|, |center| or |right|.
\begin{codeexample}[preamble=\usetikzlibrary{positioning,ext.node-families},/tikz/node distance=.5cm]
\tikzexternaldisable % ext.node-families does not work with active externalization
-\begin{tikzpicture}[nodes={Rectangle, draw, node family={text width=manual, text width align=right}}]
+\begin{tikzpicture}[nodes={rectangle, draw, node family={text width=manual, text width align=right}}]
\node (a) {Foo};
\node[below=of a] (b) {Foobar};
\end{tikzpicture}
\end{codeexample}
\end{key}
-\begin{key}{/tikz/node family/prefix=\meta{prefix}(initially \expandafter|\string\pgfpictureid-|)}
-The family names are prefixed with the value of |/tikz/node family/prefix|.
-\end{key}
-
\begin{key}{/tikz/node family/setup shape=\meta{shape}}
This adds instructions to the \meta{shape}'s definition which
adjust the text box's dimensions according to the family.
This should be only used once per shape.
\end{key}
-\begin{codeexample}[width=9cm,preamble=\usetikzlibrary{ext.node-families,shapes.geometric}]
+
+\subsection{Minimum Width/Height}
+While the keys of the previous subsection work well enough for nodes of the same shape
+(and the same |inner sep|s), for different node shapes the text box dimensions will be used
+differently for the node's total dimension.
+
+For this, the following keys are necessary.
+When one of the keys are used the values of |minimum width| and/or |minimum height| are set to |nf_width| or |nf_height| respectively.
+\begin{key}{/tikz/node family/width=\meta{name} (initially \{\})}
+Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum width}.
+An empty \meta{name} disables the evaluation by the library.
+\begin{codeexample}[preamble=\usetikzlibrary{positioning,ext.node-families},/tikz/node distance=.5cm]
+\tikzexternaldisable % ext.node-families does not work with active externalization
+\begin{tikzpicture}[nodes={rectangle, draw, node family/width=manual}]
+\node (a) {Foo};
+\node[below=of a] (b) {Foobar};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+\begin{key}{/tikz/node family/height=\meta{name} (initially \{\})}
+Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum height}.
+An empty \meta{name} disables the evaluation by the library.
+\end{key}
+\begin{key}{/tikz/node family/size=\meta{name}}
+Sets both |height| and |width|.
+\end{key}
+
+\clearpage
+\subsection{More shapes that support the keys \texttt{width} and \texttt{height}}
+\begin{tikzlibrary}{ext.node-families.shapes.geometric}
+ This library adds support for the keys \referenceKeyandIndex[/tikz/node family/]{width} and
+ \referenceKeyandIndex[/tikz/node family/]{height} for the shapes of
+ the \pgfname\space library \referenceLibraryandIndexO{shapes.geometric}.
+
+ \inspirationQ{NodeFam-Ellipse}
+\end{tikzlibrary}
+The shapes are also setup for the keys from subsection~\ref{ssec:nf-text}.
+
+\begin{codeexample}[width=9cm,preamble=\usetikzlibrary{ext.node-families.shapes.geometric}]
\tikzexternaldisable % ext.node-families does not work with active externalization
-\begin{tikzpicture}[node family/setup shape=diamond]
+\begin{tikzpicture}
\foreach \cnt[count=\Cnt] in {a,...,h}
\node[draw, diamond, node family/text=aTOh] (\cnt)
at (right:\Cnt) {\cnt};
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
index 09049bf829..595a647917 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
@@ -13,6 +13,8 @@
\begin{tikzlibrary}{ext.paths.timer}
This library adds timers to the path specifications |rectangle|, |parabola|, |sin| and |cos|.
+
+ \inspiration{TimerRect-Q,TimerPara-Q}{TimerRect-A,TimerPara-A}
\end{tikzlibrary}
In \tikzname, the path specification |rectangle|, |parabola|, |sin| and |cos| do not provide
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex
index 10fa3aca6d..c3c38a8517 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex
@@ -13,6 +13,8 @@
\begin{tikzlibrary}{ext.patterns.images}
This library allows to use an image to be used as a repeating pattern for a path.
+
+ \inspiration{Pattern-Q}{Pattern-A}
\end{tikzlibrary}
With this library arbitrary images (or indeed PDF documents) can be used as
@@ -27,9 +29,9 @@ This is a two-step process:
\begin{command}{\pgfsetupimageaspattern\oarg{options}\marg{name}\marg{image}}
\end{command}
-\begin{key}{/tikz/image as pattern=\meta{options} (default |\{\}|)}
+\begin{key}{/tikz/image as pattern=\meta{options} (default \{\})}
-\begin{codeexample}[preamble=\usetikzlibrary{ext.patterns.images}]
+\begin{codeexample}[preamble=\usetikzlibrary{ext.patterns.images,shapes.geometric}]
\pgfsetupimageaspattern[width=.5cm]{grid}{example-image-1x1}
\tikz \node[star, minimum size=3cm, draw,
image as pattern={name=grid,options={left, bottom, y=-.5cm, rotate=45}}] {};
@@ -41,7 +43,7 @@ Specifies the name of the ``image-pattern'' to be used.
\end{key}
\begin{stylekey}{/tikz/image as pattern/option}
-Options that's be used by the internal |\pgftext|,\indexCommandO{\pgftext}
+Options that will be used by the internal |\pgftext|,\indexCommandO{\pgftext}
only keys from |/pgf/text| should be used.\indexKeyO[/pgf/]{text}
\end{stylekey}
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex
index a0451a8fd7..56c81376aa 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex
@@ -12,7 +12,7 @@
\label{library:positioning-plus}
\tikzsetnextfilename{posplus}
\begin{tikzlibrary}{ext.positioning-plus}
- With the help of the |positioning|\indexLibrary{positioning} and the |fit|\indexLibrary{fit} library this extends the placement of nodes.
+ With the help of the \referenceLibraryandIndexO{positioning} and the \referenceLibraryandIndexO{fit} library this extends the placement of nodes.
\end{tikzlibrary}
\subsection{Useful corner anchors}
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex
index b2aa0f8f7f..97011bc4d0 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex
@@ -17,7 +17,7 @@
\end{tikzlibrary}
As explained in section~\ref{pgflibrary:transformations}, there are two approaches to setting a mirror transformation.
-As with the commands in PGF, we'll be using a lowercase |m| for the reflection matrix and an uppercase |M| for the built-in approach.
+As with the commands in \pgfname, we'll be using a lowercase |m| for the reflection matrix and an uppercase |M| for the built-in approach.
\subsection{Using the reflection matrix}
@@ -31,7 +31,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m
\end{tikzpicture}
\end{codeexample}
-\begin{key}{/tikz/xmirror=\meta{value or coordinate}}
+\begin{key}{/tikz/xmirror=\meta{value or coordinate} (default 0pt)}
Sets up a transformation that mirrors along a horizontal line that goes through point $(\text{\meta{value}}, 0)$ or \meta{coordinate}.
\begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}]
@@ -45,12 +45,12 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m
\end{codeexample}
\end{key}
-\begin{key}{/tikz/ymirror=\meta{value or coordinate}}
+\begin{key}{/tikz/ymirror=\meta{value or coordinate} (default 0pt)}
Sets up a transformation that mirrors along a vertical line that goes through point $(0, \text{\meta{value}})$ or \meta{coordinate}.
\end{key}
-\begin{key}{/tikz/mirror x=\meta{coordinate}}
+\begin{key}{/tikz/mirror x=\meta{coordinate} (default {(0,0)})}
Similar to |/tikz/xmirror|, this however uses the |xyz| coordinate system instead of the |canvas| system.
\begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}]
\begin{tikzpicture}[x=.5cm, y=(45:1cm)]
@@ -65,7 +65,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m
\end{codeexample}
\end{key}
-\begin{key}{/tikz/mirror y=\meta{coordinate}}
+\begin{key}{/tikz/mirror y=\meta{coordinate} (default {(0,0)})}
Similar to |/tikz/ymirror|, this however uses the |xyz| coordinate system instead of the |canvas| system.
\end{key}
@@ -88,7 +88,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m
\end{tikzpicture}
\end{codeexample}
-\begin{key}{/tikz/xMirror=\meta{value or coordinate}}
+\begin{key}{/tikz/xMirror=\meta{value or coordinate} (default 0pt)}
Sets up a transformation that mirrors along a horizontal line that goes through point $(\text{\meta{value}}, 0)$ or \meta{coordinate}.
\begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}]
@@ -102,12 +102,12 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m
\end{codeexample}
\end{key}
-\begin{key}{/tikz/yMirror=\meta{value or coordinate}}
+\begin{key}{/tikz/yMirror=\meta{value or coordinate} (default 0pt)}
Sets up a transformation that mirrors along a vertical line that goes through point $(0, \text{\meta{value}})$ or \meta{coordinate}.
\end{key}
-\begin{key}{/tikz/Mirror x=\meta{coordinate}}
+\begin{key}{/tikz/Mirror x=\meta{coordinate} (default {(0,0)})}
Similar to |/tikz/xMirror|, this however uses the |xyz| coordinate system instead of the |canvas| system.
\begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}]
\begin{tikzpicture}[x=.5cm, y=(45:1cm)]
@@ -122,7 +122,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m
\end{codeexample}
\end{key}
-\begin{key}{/tikz/Mirror y=\meta{coordinate}}
+\begin{key}{/tikz/Mirror y=\meta{coordinate} (default {(0,0)})}
Similar to |/tikz/yMirror|, this however uses the |xyz| coordinate system instead of the |canvas| system.
\end{key}
@@ -133,4 +133,4 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m
When only \meta{point A} is given that line goes through \meta{point A} and the origin.
\end{key}
-\endinput
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
index e4445d392b..1185cdb6d7 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
@@ -8,31 +8,20 @@
% 2. under the GNU Free Documentation License.
%
\newcommand*\tikzextname{Ti\textit kZ-Extensions}
-\newcommand*\tikzextversion{0.2}
-
-%\includeonly{
-% tikz-ext-manual-en-library-paths.arcto,
-% tikz-ext-manual-en-library-paths.ortho,
-% tikz-ext-manual-en-library-paths.timer,
-% tikz-ext-manual-en-library-patterns.images,
-% tikz-ext-manual-en-library-topaths.arcthrough,
-% tikz-ext-manual-en-library-trans,
-% tikz-ext-manual-en-pgf-trans,
-% tikz-ext-manual-en-library-misc,
-%}
+\newcommand*\tikzextversion{0.3}
\begin{document}
-
+{\colorlet{blue}{black}% links shall be black
\title{\bfseries The \tikzextname\space Package\\
\large Manual for version \tikzextversion\\[1mm]
-\large\href{https://github.com/Qrrbrbirlbel/tikz-extensions}{\texttt{https://github.com/Qrrbrbirlbel/tikz-extensions}}
+\large\href{https://github.com/Qrrbrbirlbel/tikz-extensions}
+ {\texttt{https://github.com/Qrrbrbirlbel/tikz-extensions}}
\author{Qrrbrbirlbel}}
\maketitle
\label{table-of-contents}
\tableofcontents
-
-
+}
\include{tikz-ext-manual-en-intro}
\part{\tikzname\space Libraries}
@@ -80,16 +69,20 @@ These libraries only work with \tikzname.
\tikzsetfigurename{paths.ortho} \include{tikz-ext-manual-en-library-paths.ortho}
\tikzsetfigurename{paths.timer} \include{tikz-ext-manual-en-library-paths.timer}
\tikzsetfigurename{patterns.images} \include{tikz-ext-manual-en-library-patterns.images}
-\tikzsetfigurename{positioning-plus}\include{tikz-ext-manual-en-library-positioning-plus}
-\tikzsetfigurename{topaths.arcthrough}\include{tikz-ext-manual-en-library-topaths.arcthrough}
-\tikzsetfigurename{trans} \include{tikz-ext-manual-en-library-trans}
-
-\part{PGF Libraries}
+\tikzsetfigurename{positioning-plus}
+\include{tikz-ext-manual-en-library-positioning-plus}
+\tikzsetfigurename{topaths.arcthrough}
+\include{tikz-ext-manual-en-library-topaths.arcthrough}
+\tikzsetfigurename{trans}
+\include{tikz-ext-manual-en-library-trans}
+
+\part{\pgfname\space Libraries}
\label{part:pgf}
-These libraries (should) work with both PGF and \tikzname.
+These libraries (should) work with both \pgfname\space and \tikzname.
\begin{center}\tikzsetnextfilename{main-graph}
-\begin{codeexample}[width=10cm,preamble=\usetikzlibrary{graphs,graphdrawing,ext.misc} \usegdlibrary{force}]
+\begin{codeexample}[width=10cm,preamble=%
+ \usetikzlibrary{graphs,graphdrawing,ext.misc} \usegdlibrary{force}]
\tikzset{
mynode/.style={
circle, minimum size=10mm, draw, densely dashdotted, thick,
@@ -126,7 +119,12 @@ These libraries (should) work with both PGF and \tikzname.
\end{center}
\tikzsetfigurename{PGF.trans}\include{tikz-ext-manual-en-pgf-trans}
-
+\tikzsetfigurename{PGF.shapes}%
+\include{tikz-ext-manual-en-pgf-shapes-circlearrow}
+\include{tikz-ext-manual-en-pgf-shapes-circlecrosssplit}
+\include{tikz-ext-manual-en-pgf-shapes-heatmark}
+\include{tikz-ext-manual-en-pgf-shapes-rectround}
+\include{tikz-ext-manual-en-pgf-shapes-superellipse}
\part{Utilities}
\label{part:misc}
@@ -163,16 +161,29 @@ These libraries (should) work with both PGF and \tikzname.
%%% END
\newcommand*{\addTikz}[1]{Added \tikzname\space library \texttt{ext.#1}.}
-\newcommand*{\addPGF}[1]{Added PGF library \texttt{ext.#1}.}
-\part{Changelog \& Index}
-\section*{Changelog}
-\begin{multicols}{2}
+\newcommand*{\addPGF}[1]{Added \pgfname\space library \texttt{ext.#1}.}
+\newcommand*{\addShape}[2][]{Added shape \texttt{\ifx\\#1\\#2\else#1\fi}\\(\pgfname\space library \texttt{ext.shapes.#2}).}
+\part{Changelog, Index \& References}
+\section*{Changelog}\addcontentsline{toc}{section}{Changelog}
+\begin{multicols}{2}\raggedright
+\noindent
+Version 0.3
+\begin{itemize}
+\item \addShape[circle arrow]{circlearrow}
+\item \addShape[circle cross split]{circlecrosssplit}
+\item \addShape{heatmark}
+\item \addShape[rectangle with rounded corners]{rectangleroundedcorners}
+\item \addShape{superellipse}
+\item \addTikz{node-families.shapes.geometric}
+\item Fixed |ext.node-families|' key |size|.
+\item Renamed internal macros to use custom namespace starting with |\tikzext@|.
+\item Added some references.
+\end{itemize}
Version 0.2
\begin{itemize}
\item \addTikz{positioning-plus}
\item \addTikz{node-families}
\end{itemize}
-
Version 0.1
\begin{itemize}
\item \addTikz{calendar-plus}
@@ -188,5 +199,6 @@ Version 0.1
\end{multicols}
\printindex
+\printbibliography[heading=bibintoc]
%\typeout{Examples: \the\codeexamplecount}%
\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
index 238c10172f..494d63e012 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
@@ -14,9 +14,15 @@
\usepackage{imakeidx}
\makeindex
+
+%%% Bibliography
+\usepackage{csquotes}
+\usepackage[backend=biber,style=numeric,backref]{biblatex}
+\addbibresource{tikz-ext-manual.bib}
+
\usepackage{hyperref}
\hypersetup{%
- colorlinks=false, % use true to enable colors below:
+ colorlinks=true, % use true to enable colors below:
linkcolor=blue,%red,
filecolor=blue,%magenta,
urlcolor=blue,%cyan,
@@ -88,16 +94,23 @@
ext.calendar-plus,
ext.misc,
ext.node-families,
+ ext.node-families.shapes.geometric,
ext.paths.arcto,
ext.paths.ortho,
ext.paths.timer,
ext.patterns.images,
ext.positioning-plus,
+ ext.shapes.heatmark,
+ ext.shapes.circlearrow,
+ ext.shapes.circlecrosssplit,
+ ext.shapes.rectangleroundedcorners,
+ ext.shapes.superellipse,
ext.topaths.arcthrough,
ext.transformations.mirror,
%
calc,
fit,
+ matrix,
shapes.geometric,
through,
trees,
@@ -262,10 +275,13 @@
\index{Key handlers!#1@\protect\texttt{#1}}
}
\newcommand*{\indexKey}[2][/tikz/]{%
+\begingroup
\def\mykey{#1#2}%
\def\mypath{}%
\gdef\myname{}%
+ \firsttimetrue
\decompose#1#2/\nil
+\endgroup
}
\newcommand*{\indexPathOperation}[1]{%
\index{#1@\protect\texttt{#1} path operation}%
@@ -345,7 +361,11 @@
\index{\strippedat @\originalprefix\protect\texttt{\original{\protect\string\protect#1}}\originalsuffix}%
}
-\newcommand*{\referenceKeyandIndexO}[2][/tikz/]{\texttt{#1#2}\indexKeyO[#1]{#2}}%
+\newcommand*{\referenceKeyandIndexO}[2][/tikz/]{\texttt{#1#2}\indexKeyO[#1]{#2}}
+\newcommand*{\referenceKeyandIndex}[2][/tikz/]{\texttt{#1#2}\indexKey[#1]{#2}}
+\newcommand*{\referenceShapeandIndex}[1]{\texttt{#1}\indexShape{#1}}
+\newcommand*{\referenceShapeandIndexO}[1]{\texttt{#1}\indexShapeO{#1}}
+\newcommand*{\referenceLibraryandIndexO}[1]{\texttt{#1}\indexLibraryO{#1}}
\colorlet{originalindex}{gray}
\newcommand*{\original}[1]{\textcolor{originalindex}{#1}}
@@ -362,7 +382,21 @@
\makeatletter
\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index}
This index contains automatically generated entries as well as {\originalprefix\original{references}\originalsuffix} to
- original functionalities of PGF/\tikzname.
+ original functionalities of \pgfname/\tikzname.
\bigskip
}
-\makeatother \ No newline at end of file
+\makeatother
+
+\DeclareMathOperator{\sgn}{sgn}
+
+\newenvironment{implementation}{%
+ \noindent\rule[.5ex]{\linewidth}{.4pt}\par
+ \paragraph*{Notes on Implementation:}\par%
+ \small
+ \begin{quotation}%
+}{\end{quotation}}
+
+\newcommand*{\inspiration}[2]{%
+ \par\textbf{Q\,\&\,A:} \cite{#1} \& \cite{#2}\par
+}
+\newcommand*\inspirationQ[1]{\par\textbf{Q:} \cite{#1}} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex
new file mode 100644
index 0000000000..e26711bb35
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex
@@ -0,0 +1,93 @@
+% !TeX spellcheck = en_US
+% !TeX root = tikz-ext-manual.tex
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\section{Shape: Circle Arrow}
+\begin{pgflibrary}{ext.shapes.circlearrow}
+ A circular shape named |circle arrow| that has an arc as its background path that can have an arrow tip.
+ \inspiration{ShapeCircleArrow-Q}{ShapeCircleArrow-A}
+\end{pgflibrary}
+\begin{shape}{circle arrow}
+ This shape is an arrow whose path is an arc -- defined very similar to the |arc|%
+ \indexPathOperationO{arc} path operation -- that can possibly be customized with
+ arrow tips.
+
+ \begin{key}{/pgf/circle arrow start angle=\meta{start angle} (initially \{\})}
+ Sets the start angle.
+ \end{key}
+ \begin{key}{/pgf/circle arrow end angle=\meta{end angle} (initially \{\})}
+ Sets the end angle.
+ \end{key}
+ \begin{key}{/pgf/circle arrow delta angle=\meta{delta angle} (initially \{\})}
+ Sets the delta angle.
+ \end{key}
+ \begin{key}{/pgf/circle arrow arrows=%
+ \meta{start arrow tip specification}-\meta{end arrow tip specification} (initially -)}
+ The specification will be forwarded to |\pgfsetarrows|\indexCommandO{\pgfsetarrows}.
+ \end{key}
+
+ A few handful styles are pre-defined.
+ \begin{key}{/pgf/circle arrow turn left north}
+ Sets |circle arrow start angle = 100|, |circle arrow delta angle = 340|
+ and |circle arrow arrows = ->|.
+ \end{key}
+ \begin{key}{/pgf/circle arrow turn left east}
+ As above but |circle arrow start angle = 10|.
+ \end{key}
+ \begin{key}{/pgf/circle arrow turn left west}
+ As above but |circle arrow start angle = 280|.
+ \end{key}
+ \begin{key}{/pgf/circle arrow turn left south}
+ As above but |circle arrow start angle = 190|.
+ \end{key}
+ \begin{key}{/pgf/circle arrow turn right north}
+ Sets |circle arrow start angle = 100|, |circle arrow delta angle = 340|
+ and |circle arrow arrows = <-|.
+ \end{key}
+ \begin{key}{/pgf/circle arrow turn right east}
+ As above but |circle arrow start angle = 10|.
+ \end{key}
+ \begin{key}{/pgf/circle arrow turn right west}
+ As above but |circle arrow start angle = 280|.
+ \end{key}
+ \begin{key}{/pgf/circle arrow turn right south}
+ As above but |circle arrow start angle = 190|.
+ \end{key}
+
+{\catcode`\|=12
+\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.circlearrow,matrix}]
+\begin{tikzpicture}
+\matrix[matrix of nodes, draw=none, row sep=1em, column sep=1em,
+ every node/.style={draw=gray, shape=circle arrow, ultra thick, inner sep=1em}
+] (m) {
+ |[circle arrow turn left north]| & |[circle arrow turn left east]| \\
+ |[circle arrow turn left west]| & |[circle arrow turn left south]| \\
+ |[circle arrow turn right north]| & |[circle arrow turn right east]| \\
+ |[circle arrow turn right west]| & |[circle arrow turn right south]| \\
+};
+\end{tikzpicture}
+\end{codeexample}
+}
+\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.circlearrow},width=16cm]
+\begin{tikzpicture}\Huge
+\node[name=s, shape=circle arrow,
+ circle arrow turn left west, shape example]
+ {Circle Arrow\vrule width 1pt height 2cm};
+\foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/right, mid/above, mid east/left,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/left, 10/right, 130/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+\end{shape}
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex
new file mode 100644
index 0000000000..e7b2b9ba5a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex
@@ -0,0 +1,53 @@
+% !TeX spellcheck = en_US
+% !TeX root = tikz-ext-manual.tex
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\section{Shape: Circle Cross Split}
+\begin{pgflibrary}{ext.shapes.circlecrosssplit}
+ A circular shape with four parts that can be individually filled.
+ \inspiration{ShapeSplitCircle-Q}{ShapeSplitCircle-A}
+\end{pgflibrary}
+\begin{shape}{circle cross split}
+This shape has four node parts that are placed near the center of a circle.
+
+\begin{key}{/pgf/circle cross split part fill=\marg{list} (initially none)}
+Sets the custom fill color for each node part shape.
+The items in \meta{list} should be separated by commas
+(so if there is more than one item in \meta{list}, it must be surrounded by braces).
+If \meta{list} has less entries than node parts,
+then the remaining node parts use the color from the last entry in the list.
+This key will automatically set |/pgf/circle cross split uses custom fill|.
+\end{key}
+\begin{key}{/pgf/circle cross split uses custom fill=\opt{\meta{boolean}} (default true)}
+This enables the use of a custom fill for each of the node parts
+(including the area covered by the |inner sep|).
+The background path for the shape should not be filled (e.\,g., in \tikzname,
+the |fill| option for the node must be implicitly or explicitly set to |none|).
+Internally, this key sets the \TeX-if |\ifpgfcirclecrosssplitcustomfill| appropriately.
+\end{key}
+\begin{codeexample}[preamble=\usepgflibrary{ext.shapes.circlecrosssplit}]
+\begin{tikzpicture}\Huge
+\node[name=s, shape=circle cross split, shape example, inner xsep=1.5cm, fill=none,
+ circle cross split part fill={green,blue,red,yellow!90!black}]
+ {\nodepart{text}text\nodepart{two}two
+ \nodepart{three}three\nodepart{four}four};
+\foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/left, east/right,
+ mid west/right, mid/left, mid east/left,
+ base west/left, base/left, base east/right,
+lower base west/left, lower base/below, lower base east/right,
+ lower mid west/left, lower mid/above, lower mid east/right,
+ south west/below left, south/below, south east/below right,
+ text/below, 10/right, 130/above, two/left, three/left, four/left}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+\end{shape}
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex
new file mode 100644
index 0000000000..fa13cb0000
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex
@@ -0,0 +1,83 @@
+% !TeX spellcheck = en_US
+% !TeX root = tikz-ext-manual.tex
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\section{Shape: Heatmark}
+\begin{pgflibrary}{ext.shapes.heatmark}
+ A circular shape that has customizable rings around it.
+ \inspiration{ShapeHeat-Q}{ShapeHeat-A}
+\end{pgflibrary}
+
+\begin{shape}{heatmark}
+ \begin{key}{/pgf/heatmark arcs=\meta{arcs num} (initially 3)}
+ Sets the number of arc around the circle to \meta{arcs num}.
+ \end{key}
+ \begin{key}{/pgf/heatmark arc width=\meta{arc width} (initially 4pt)}
+ Sets the width of the rings around the circle to \meta{arc width}.
+ \end{key}
+ \begin{key}{/pgf/heatmark arc sep=\meta{sep length} (initially 1pt)}
+ Sets the whitespace between the rings to \meta{sep length}.
+ \end{key}
+ \begin{key}{/pgf/heatmark arc rings=\meta{rings num} (initially 3)}
+ Sets the number of rings around the circle to \meta{rings num}
+ \end{key}
+ \begin{key}{/pgf/heatmark arc sep angle=\meta{sep angle} (initially 20)}
+ Sets the whitespace angle between the arcs in one ring to \meta{sep angle}.
+ \end{key}
+ \begin{key}{/pgf/heatmark inner opacity=\meta{inner opacity} (initially 0.8)}
+ Sets the opacity of the inner ring to \meta{inner opacity}.
+ \end{key}
+ \begin{key}{/pgf/heatmark outer opacity=\meta{low opacity} (initially 0.2)}
+ Sets the opacity of the outer ring to \meta{outer opacity}.
+
+ The opacity of the rings between the outer and the inner ring will be interpolated by these two opacities.
+ \end{key}
+
+This shape takes the value of |/pgf/shape border rotate|%
+\indexKeyO[/pgf/]{shape border rotate} into consideration.
+
+For every ring and for every arc the following styke keys are tried.
+\begin{stylekey}{/pgf/heatmark ring \meta{ring number}}
+\end{stylekey}
+\begin{stylekey}{/pgf/heatmark arc \meta{arc number}}
+\end{stylekey}
+\begin{stylekey}{/pgf/heatmark ring \meta{ring number} arc \meta{arc number}}
+\end{stylekey}
+
+The \pgfname shape is setup in a way that even \tikzname\space
+styles can be used with a little bit work:
+\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.heatmark}]
+\tikz[
+ shape border rotate=90,
+ /pgf/heatmark ring 1/.append style={/tikz/fill=green},
+ /pgf/heatmark arc 1/.append style={/tikz/fill=blue},
+ /pgf/heatmark ring 2 arc 2/.append style={/tikz/fill=yellow!70!black}
+] \node[heatmark, fill=red] (n) {100};
+\end{codeexample}
+
+It is best to use this shape with no actual border (|draw = none|) and the |outer sep| set to zero.
+\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.heatmark},width=16cm]
+\begin{tikzpicture}\Huge
+\node[name=s, shape=heatmark, shape example,
+ fill=blue!25, draw=none, outer sep=0pt]
+ {Heatmark\vrule width 1pt height 2cm};
+\foreach \anchor/\placement in
+ {north west/above left, north/above,
+ north east/above right,
+ west/left, center/above, east/right,
+ mid west/right, mid/above, mid east/left,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below,
+ south east/below right,
+ text/left, 10/right, 130/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+\end{shape}
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex
new file mode 100644
index 0000000000..78bab76925
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex
@@ -0,0 +1,58 @@
+% !TeX spellcheck = en_US
+% !TeX root = tikz-ext-manual.tex
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+
+\section{Shape: Rectangle with Rounded Corners}
+\begin{pgflibrary}{ext.shapes.rectangleroundedcorners}
+ A rectangle with rounded corners.
+\end{pgflibrary}
+
+\begin{shape}{rectangle with rounded corners}
+This library provides a |rectangle with rounded corners| where every corner can have a different radius.
+
+\begin{key}{/pgf/rectangle with rounded corners north west radius=\meta{dimen} (initially .5\string\pgflinewidth)}
+ Sets the north west radius to \meta{dimen}.
+\end{key}
+\begin{key}{/pgf/rectangle with rounded corners north east radius=\meta{dimen} (initially .5\string\pgflinewidth)}
+ Sets the north east radius to \meta{dimen}.
+\end{key}
+\begin{key}{/pgf/rectangle with rounded corners south west radius=\meta{dimen} (initially .5\string\pgflinewidth)}
+ Sets the south west radius to \meta{dimen}.
+\end{key}
+\begin{key}{/pgf/rectangle with rounded corners south east radius=\meta{dimen} (initially .5\string\pgflinewidth)}
+ Sets the south east radius to \meta{dimen}.
+\end{key}
+\begin{key}{/pgf/rectangle with rounded corners radius=\meta{dimen}}
+ Sets all radii to \meta{dimen}.
+\end{key}
+
+\begin{codeexample}[preamble=\usepgflibrary{ext.shapes.rectangleroundedcorners}]
+\begin{tikzpicture}\Huge
+\node[name=s, shape=rectangle with rounded corners, shape example,
+ rectangle with rounded corners north west radius=10pt,
+ rectangle with rounded corners north east radius=20pt,
+ rectangle with rounded corners south west radius=30pt,
+ rectangle with rounded corners south east radius=40pt] {Rectangle with rounded corners\vrule width 1pt height 2cm};
+\foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/right, mid/above, mid east/left,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/below, 10/right, 130/above,
+ north west center/below right, north east center/left,
+ south west center/above right, south east center/left,
+ below north west/left, above south west/left, above south east/right, below north east/right,
+ right north west/above, right south west/below, left south east/below, left north east/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+\end{shape}
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex
new file mode 100644
index 0000000000..580ef0d93f
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex
@@ -0,0 +1,105 @@
+% !TeX spellcheck = en_US
+% !TeX root = tikz-ext-manual.tex
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+
+\section{Shape: Superellipse}
+\begin{pgflibrary}{ext.shapes.superellipse}
+ Shape in the form of a ``superellipse''.
+ \inspiration{ShapeSuperEllipse-Q}{ShapeSuperEllipse-A}
+\end{pgflibrary}
+
+\begin{shape}{superellipse}
+This shape is defined by formula
+\begin{equation*}
+ \biggl|\frac x{r_x}\biggr|^m + \biggl|\frac y{r_y}\biggr|^n = 1
+\end{equation*}
+and will be plotted by
+\begin{align*}
+ x(t) &= |\cos t|^{\frac 2m} \cdot r_x \sgn(\cos t) \\
+ y(t) &= |\sin t|^{\frac 2n} \cdot r_y \sgn(\sin t) \\
+\end{align*}
+where $r_x$ is half the node's width and $r_y$ is half the node's height.
+
+\begin{key}{/pgf/superellipse x exponent=\meta{x exponent}(initially 2.5)}
+This sets $m$.
+\end{key}
+\begin{key}{/pgf/superellipse y exponent=\meta{y exponent}(initially 2.5)}
+This sets $n$.
+\end{key}
+\begin{key}{/pgf/superellipse step=\meta{step}(initially 5)}
+This specifies the step of the underlying plot handler.
+The smaller \meta{step} is, the slower computation will be.
+
+Sensible values for \meta{step} are integer dividers of 90, i.\,e.
+2, 3, 5, 6, 9, 10, 15, 18, 30 and 45.
+\end{key}
+\begin{key}{/pgf/superellipse exponent=\meta{exponent}}
+ Sets both |superellipse x exponent| and |superellipse y exponent| to \meta{exponent}.
+\end{key}
+
+\paragraph{Notes on Implementation}
+For implementing this shape, additional mathematical functions were declared.
+\begin{math-function}{superellipsex(\mvar{t}, \mvar{2/m}, \mvar{$r_x$})}
+\mathcommand
+Returns the $x$ value on a point of the superellipse with its center on the origin following
+\begin{equation*}
+ x = r_x\cos^{2/m} t
+\end{equation*}
+for values of $0 \leq t \leq 90$.
+\end{math-function}
+\begin{math-function}{superellipsey(\mvar{t}, \mvar{2/n}, \mvar{$r_y$})}
+\mathcommand
+Returns the $y$ value on a point of the superellipse with its center on the origin following
+\begin{equation*}
+ y = r_y\cos^{2/n} t
+\end{equation*}
+for values of $0 \leq t \leq 90$.
+\end{math-function}
+
+Both \pgfname math functions can be used at once with the following macro.
+\begin{command}{\pgfmathsuperellipseXY\marg{t}\marg{2/m}\marg{2/n}\marg{a}\marg{b}}
+Returns the $x$ value (in |\pgfmathresultX|) and the $y$ value (in |\pgfmathresultY|) of the superellipse with its center on the origin following
+\begin{align*}
+ x & = a\cos^{2/m} t \\
+ y & = b\cos^{2/n} t
+\end{align*}
+for values of $0 \leq t \leq 90$.
+
+Note: all arguments must be a valid number since they will not be parsed by \pgfname math.
+\end{command}
+
+And additional internal macro was defined following the original naming scheme.
+\def\temp{\begin{command}}%
+\expandafter\temp\expandafter{\csname pgfutil@prefix@macrotomacro\endcsname\marg{macro 1}\marg{macro 2}}
+Adds the once-expansion of \meta{macro 2} in front of \meta{macro 1}.
+\end{command}
+
+\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.superellipse}]
+\begin{tikzpicture}[superellipse step=1]\Huge
+\node[name=s,shape=superellipse,shape example] {Superellipse\vrule width 1pt height 2cm};
+\foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/right, mid/above, mid east/left,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/left, 10/right, 130/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+%
+\begin{codeexample}[width=8cm,preamble=\usetikzlibrary{ext.shapes.superellipse}]
+\begin{tikzpicture}[minimum width=1cm, minimum height=3cm]
+\foreach \xe/\ye[count=\i] in {.5/.5, 1/1, 2/2, 3/3, .5/5}
+ \node[draw, superellipse, superellipse x exponent=\xe, superellipse y exponent=\ye] at (1.5*\i,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{shape}
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex
index b0f0f2906d..ccd378a6e7 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex
@@ -12,7 +12,7 @@
\label{pgflibrary:transformations}
\begin{purepgflibrary}{ext.transformations.mirror}
- This library adds mirror transformations to PGF.
+ This library adds mirror transformations to \pgfname.
\end{purepgflibrary}
Two approaches to mirror transformation exist:
@@ -20,11 +20,12 @@ Two approaches to mirror transformation exist:
\item Using the reflection matrix (see left column).
This depends on |\pgfpointnormalised|\indexCommandO\pgfpointnormalised which involves
- the sine\indexMathFunctionO{sin} and the cosine\indexMathFunctionO{cos} functions of PGFmath.
+ the sine\indexMathFunctionO{sin} and the cosine\indexMathFunctionO{cos} functions of \pgfname math.
\item Using built-in transformations (see right column).
- This depends on |\pgfmathanglebetween|\indexCommandO\pgfmathanglebetween which involves the arctangent (|atan2|\indexMathFunctionO{atan2}) function of PGFmath.
+ This depends on |\pgfmathanglebetweenpoints|\indexCommandO\pgfmathanglebetweenpoints which
+ involves the arctangent (|atan2|\indexMathFunctionO{atan2}) function of \pgfname math.
\end{enumerate}
Which one is better? I don't know.
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
new file mode 100644
index 0000000000..7bb85bf7b2
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
@@ -0,0 +1,299 @@
+'
+@Misc{NodeFam-Q,
+ author = {Holene},
+ month = apr,
+ title = {Dependent node size in {TikZ}},
+ year = {2017},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/107227/dependent-node-size-in-tikz/121054#121054:text/html},
+ url = {https://tex.stackexchange.com/q/107227/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{NodeFam-A,
+ author = {Qrrbrbirlbel},
+ month = jun,
+ title = {Answer to \enquote{{Dependent} node size in {TikZ}}},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/107227/dependent-node-size-in-tikz/121054#121054:text/html},
+ url = {https://tex.stackexchange.com/a/121054/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{TimerRect-Q,
+ author = {CrazyArm},
+ month = apr,
+ title = {Is {It} {Possible} to {Combine} {TikZ} {Distance} and {Line}-{To} {Operations}?},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/106558/is-it-possible-to-combine-tikz-distance-and-line-to-operations/106571#106571:text/html},
+ url = {https://tex.stackexchange.com/q/106558/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{TimerRect-A,
+ author = {Qrrbrbirlbel},
+ month = apr,
+ title = {Answer to \enquote{{Is} {It} {Possible} to {Combine} {TikZ} {Distance} and {Line}-{To} {Operations}?}},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/106558/is-it-possible-to-combine-tikz-distance-and-line-to-operations/106571#106571:text/html},
+ shorttitle = {Answer to "{Is} {It} {Possible} to {Combine} {TikZ} {Distance} and {Line}-{To} {Operations}?},
+ url = {https://tex.stackexchange.com/a/106571/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{TimerPara-Q,
+ author = {cis},
+ month = may,
+ title = {{TikZ}: {How} to place a coordinate at parabola-path-position?},
+ year = {2020},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/543251/tikz-how-to-place-a-coordinate-at-parabola-path-position/621012#621012:text/html},
+ shorttitle = {{TikZ}},
+ url = {https://tex.stackexchange.com/q/543251/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{TimerPara-A,
+ author = {Qrrbrbirlbel},
+ month = nov,
+ title = {Answer to \enquote{{TikZ}: {How} to place a coordinate at parabola-path-position?}},
+ year = {2021},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/543251/tikz-how-to-place-a-coordinate-at-parabola-path-position/621012#621012:text/html},
+ shorttitle = {Answer to "{TikZ}},
+ url = {https://tex.stackexchange.com/a/621012/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{Pattern-Q,
+ author = {knut},
+ month = mar,
+ title = {{TikZ}: {Define} pattern with reference to external picture},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/103980/tikz-define-pattern-with-reference-to-external-picture/107144#107144:text/html},
+ shorttitle = {{TikZ}},
+ url = {https://tex.stackexchange.com/q/103980/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{Pattern-A,
+ author = {Qrrbrbirlbel},
+ month = apr,
+ title = {Answer to \enquote{{TikZ}: {Define} pattern with reference to external picture}},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/103980/tikz-define-pattern-with-reference-to-external-picture/107144#107144:text/html},
+ shorttitle = {Answer to "{TikZ}},
+ url = {https://tex.stackexchange.com/a/107144/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{WeekNum-Q,
+ author = {Fence},
+ month = nov,
+ title = {Add week day to calendar},
+ year = {2019},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/517338/add-week-day-to-calendar/651888#651888:text/html},
+ url = {https://tex.stackexchange.com/q/517338/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{WeekNum-A,
+ author = {Qrrbrbirlbel},
+ month = jul,
+ title = {Answer to \enquote{{Add} week day to calendar}},
+ year = {2022},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/517338/add-week-day-to-calendar/651888#651888:text/html},
+ url = {https://tex.stackexchange.com/a/651888/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{CalCond-Q,
+ author = {healyp},
+ month = oct,
+ title = {{TikZ} calendar and conditional tests},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/140948/tikz-calendar-and-conditional-tests/141027#141027:text/html},
+ url = {https://tex.stackexchange.com/q/140948/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{CalCond-A,
+ author = {Qrrbrbirlbel},
+ month = oct,
+ title = {Answer to \enquote{{TikZ} calendar and conditional tests}},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/140948/tikz-calendar-and-conditional-tests/141027#141027:text/html},
+ url = {https://tex.stackexchange.com/a/141027/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{CalMath-Q,
+ author = {cis},
+ month = dec,
+ title = {{TikZ} / calendar: {Set} the height of a monthly calendar},
+ year = {2018},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/464589/tikz-calendar-set-the-height-of-a-monthly-calendar/653146#653146:text/html},
+ shorttitle = {{TikZ} / calendar},
+ url = {https://tex.stackexchange.com/q/464589/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{CalMath-A,
+ author = {Qrrbrbirlbel},
+ month = aug,
+ title = {Answer to \enquote{{TikZ} / calendar: {Set} the height of a monthly calendar}},
+ year = {2022},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/464589/tikz-calendar-set-the-height-of-a-monthly-calendar/653146#653146:text/html},
+ shorttitle = {Answer to "{TikZ} / calendar},
+ url = {https://tex.stackexchange.com/a/653146/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{FullArc-Q,
+ author = {Peter, Anthony},
+ month = apr,
+ title = {A rather difficult ring like picture to be drawn},
+ year = {2017},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/144293/a-rather-difficult-ring-like-picture-to-be-drawn/144297#144297:text/html},
+ url = {https://tex.stackexchange.com/q/144293/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{FullArc-A,
+ author = {Qrrbrbirlbel},
+ month = nov,
+ title = {Answer to "{A} rather difficult ring like picture to be drawn"},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/144293/a-rather-difficult-ring-like-picture-to-be-drawn/144297#144297:text/html},
+ url = {https://tex.stackexchange.com/a/144297/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{NodeFam-Ellipse,
+ author = {nkk},
+ month = jun,
+ title = {How to prevent tikz custom node fill from covering the text when using node-families library},
+ year = {2019},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/494862/how-to-prevent-tikz-custom-node-fill-from-covering-the-text-when-using-node-fami:text/html},
+ url = {https://tex.stackexchange.com/q/494862/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{ShapeHeat-Q,
+ author = {boje},
+ month = may,
+ title = {Heatmap over country like {Google} {Map}},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/112929/heatmap-over-country-like-google-map/113004#113004:text/html},
+ url = {https://tex.stackexchange.com/q/112929/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{ShapeHeat-A,
+ author = {Qrrbrbirlbel},
+ month = may,
+ title = {Answer to \enquote{{Heatmap} over country like {Google} {Map}}},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/112929/heatmap-over-country-like-google-map/113004#113004:text/html},
+ url = {https://tex.stackexchange.com/a/113004/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Misc{ShapeSplitCircle-Q,
+ author = {Marco},
+ month = apr,
+ title = {{TikZ} - {Four} {Colored} {Circle} {Split}},
+ year = {2017},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/121686/tikz-four-colored-circle-split/121767#121767:text/html},
+ url = {https://tex.stackexchange.com/q/121686/16595},
+ urldate = {2022-09-24},
+}
+
+@Misc{ShapeSplitCircle-A,
+ author = {Qrrbrbirlbel},
+ month = jun,
+ title = {Answer to \enquote{{TikZ} - {Four} {Colored} {Circle} {Split}}},
+ year = {2013},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/121686/tikz-four-colored-circle-split/121767#121767:text/html},
+ url = {https://tex.stackexchange.com/a/121767/16595},
+ urldate = {2022-09-24},
+}
+
+'
+@Online{ShapeSuperEllipse-Q,
+ author = {somenxavier},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/649144/an-oval-surrounded-a-long-text-inside-in-tikz-equivalent-cover-background-of/654759#654759:text/html},
+ month = aug,
+ title = {An oval surrounded a *long text* inside in {TikZ} [equivalent cover background of {METAFUN}]},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/649144/16595},
+ urldate = {2022-09-24},
+ year = {2022},
+}
+
+@Online{ShapeSuperEllipse-A,
+ author = {Qrrbrbirlbel},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/649144/an-oval-surrounded-a-long-text-inside-in-tikz-equivalent-cover-background-of/654759#654759:text/html},
+ month = aug,
+ title = {Answer to \enquote{An oval surrounded a *long text* inside in {TikZ} [equivalent cover background of {METAFUN}]}},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/a/654759/16595},
+ urldate = {2022-09-24},
+ year = {2022},
+}
+
+'
+@Online{ShapeCircleArrow-Q,
+ author = {projetmbc},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/95221/tikz-circled-arrow/95263#95263:text/html},
+ month = jan,
+ title = {{TikZ} - \enquote{Circled} arrow},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/95221/16595},
+ urldate = {2022-09-24},
+ year = {2013},
+}
+
+@Online{ShapeCircleArrow-A,
+ author = {Qrrbrbirlbel},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/95221/tikz-circled-arrow/95263#95263:text/html},
+ month = jan,
+ title = {Answer to \enquote{{TikZ} - \enquote{Circled} arrow}},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/a/95263/16595},
+ urldate = {2022-09-24},
+ year = {2013},
+}
+
+'
+@Online{ForeachUse-Q,
+ author = {Bar, Foo},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/110962/how-to-use-declared-tikz-functions-in-foreach-condition/110996#110996:text/html},
+ month = apr,
+ title = {How to use declared {TikZ} functions in {\textbackslash}foreach condition?},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/110962/16595},
+ urldate = {2022-09-24},
+ year = {2013},
+}
+
+@Online{ForeachUse-A,
+ author = {Qrrbrbirlbel},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/110962/how-to-use-declared-tikz-functions-in-foreach-condition/110996#110996:text/html},
+ month = apr,
+ shorttitle = {Answer to "How to use declared {TikZ} functions in {\textbackslash}foreach condition?},
+ title = {Answer to \enquote{How to use declared {TikZ} functions in {\textbackslash}foreach condition?}},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/a/110996/16595},
+ urldate = {2022-09-24},
+ year = {2013},
+}
+
+@Comment{jabref-meta: databaseType:bibtex;}
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
index 7879c7cd9b..afeef21a22 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
index 2375904d80..1f2400847a 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
@@ -19,7 +19,6 @@
%\iftikzextmanualexternalize
\tikzexternalize[
prefix=tikz/,
-% prefix=../../tikz-extensions-tikz/,
% mode=convert with system call,
%mode=list and make,
%mode=list only,export=true,% simply skips EVERY picture -> good for debugging the text.
diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex
new file mode 100644
index 0000000000..9eb1c6ab09
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex
@@ -0,0 +1,66 @@
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\pgfset{
+ circle arrow start angle/.initial=,
+ circle arrow end angle/.initial=,
+ circle arrow delta angle/.initial=,
+ circle arrow arrows/.initial=-,
+ circle arrow/@turn left/.style={/pgf/circle arrow arrows=->,/pgf/circle arrow delta angle=340},
+ circle arrow/@turn right/.style={/pgf/circle arrow arrows=<-,/pgf/circle arrow delta angle=340},
+ circle arrow turn left north/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=100},
+ circle arrow turn left east/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=10},
+ circle arrow turn left south/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=280},
+ circle arrow turn left west/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=190},
+ circle arrow turn right north/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=100},
+ circle arrow turn right east/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=10},
+ circle arrow turn right south/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=280},
+ circle arrow turn right west/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=190},
+}
+\pgfdeclareshape{circle arrow}{
+ \inheritsavedanchors[from=circle]
+ \inheritanchorborder[from=circle]
+ \inheritanchor[from=circle]{north}
+ \inheritanchor[from=circle]{north west}
+ \inheritanchor[from=circle]{north east}
+ \inheritanchor[from=circle]{center}
+ \inheritanchor[from=circle]{west}
+ \inheritanchor[from=circle]{east}
+ \inheritanchor[from=circle]{mid}
+ \inheritanchor[from=circle]{mid west}
+ \inheritanchor[from=circle]{mid east}
+ \inheritanchor[from=circle]{base}
+ \inheritanchor[from=circle]{base west}
+ \inheritanchor[from=circle]{base east}
+ \inheritanchor[from=circle]{south}
+ \inheritanchor[from=circle]{south west}
+ \inheritanchor[from=circle]{south east}
+ \backgroundpath{
+ \pgfkeysgetvalue{/pgf/circle arrow start angle}\pgf@sh@circlearrow@s
+ \pgfkeysgetvalue{/pgf/circle arrow end angle}\pgf@sh@circlearrow@e
+ \pgfkeysgetvalue{/pgf/circle arrow delta angle}\pgf@sh@circlearrow@d
+ \ifx\pgf@sh@circlearrow@s\pgfutil@empty%
+ \pgfmathsetmacro\pgf@sh@circlearrow@s{\pgf@sh@circlearrow@e-\pgf@sh@circlearrow@d}%
+ \else
+ \ifx\pgf@sh@circlearrow@e\pgfutil@empty%
+ \pgfmathsetmacro\pgf@sh@circlearrow@e{\pgf@sh@circlearrow@s+\pgf@sh@circlearrow@d}%
+ \fi%
+ \fi
+ \pgfutil@tempdima=\radius
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb
+ \advance\pgfutil@tempdima by-\pgf@yb
+ \else
+ \advance\pgfutil@tempdima by-\pgf@xb
+ \fi
+ \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfpointpolar{\pgf@sh@circlearrow@s}{\pgfutil@tempdima}}}%
+ \pgfpatharc{\pgf@sh@circlearrow@s}{\pgf@sh@circlearrow@e}{\pgfutil@tempdima}%
+ \pgfkeysgetvalue{/pgf/circle arrow arrows}\pgf@temp
+ \expandafter\pgfsetarrows\expandafter{\pgf@temp}%
+ }
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex
new file mode 100644
index 0000000000..7bc2761fb4
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex
@@ -0,0 +1,292 @@
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\usepgflibrary{shapes.multipart}
+\let\pgfnodeparttrbox\pgfnodeparttwobox
+\let\pgfnodepartblbox\pgfnodepartthreebox
+\let\pgfnodepartbrbox\pgfnodepartfourbox
+\newif\ifpgfcirclecrosssplitcustomfill
+\pgfset{%
+ circle cross split part fill/.code=%
+ \def\pgf@lib@sh@ccs@list@fill{#1}%
+ \pgfcirclecrosssplitcustomfilltrue,%
+ circle cross split uses custom fill/.is if=pgfcirclecrosssplitcustomfill
+}
+\def\pgf@lib@sh@ccs@list@fill{none}%
+\pgfdeclareshape{circle cross split}{%
+ \nodeparts{text,two,three,four}%
+ \savedanchor\centerpoint{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \pgf@x =\wd\pgfnodeparttextbox
+ \pgf@yb=\dp\pgfnodeparttextbox
+ \pgf@y=\dp\pgfnodeparttwobox
+ \ifdim\pgf@yb>\pgf@y
+ \pgf@y=\pgf@yb
+ \fi
+ \advance\pgf@x\pgf@xa
+ \advance\pgf@y-\pgf@ya
+ \advance\pgf@x.5\pgflinewidth
+ \advance\pgf@y-.5\pgflinewidth
+ }%
+ \savedanchor\twoanchor{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@x.5\pgflinewidth
+ \advance\pgf@x\pgf@xa
+ \advance\pgf@y.5\pgflinewidth
+ \advance\pgf@y\pgf@ya
+ \pgf@yb\dp\pgfnodeparttextbox
+ \pgf@yc\dp\pgfnodeparttwobox
+ \ifdim\pgf@yb>\pgf@yc
+ \pgf@yc\pgf@yb
+ \fi
+ \advance\pgf@y\pgf@yc
+ }%
+ \savedanchor\threeanchor{%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \pgf@x\wd\pgfnodeparttextbox
+ \pgf@yb\dp\pgfnodeparttextbox
+ \pgf@yc\dp\pgfnodeparttwobox
+ \ifdim\pgf@yb>\pgf@yc
+ \pgf@yc\pgf@yb
+ \fi
+ \advance\pgf@y-\pgf@yc
+ \advance\pgf@y-2\pgf@ya
+ \advance\pgf@y-\pgflinewidth
+ \pgf@yb\ht\pgfnodepartthreebox
+ \pgf@yc\ht\pgfnodepartfourbox
+ \ifdim\pgf@yb>\pgf@yc
+ \pgf@yc\pgf@yb
+ \fi
+ \advance\pgf@y-\pgf@yc
+ \advance\pgf@x-\wd\pgfnodepartthreebox
+ }%
+ \saveddimen\radius{%
+ % height (upper):
+ \pgf@y=\ht\pgfnodeparttextbox
+ \ifdim\pgf@y<\ht\pgfnodeparttwobox
+ \pgf@y=\ht\pgfnodeparttwobox
+ \fi
+ \ifdim\dp\pgfnodeparttextbox>\dp\pgfnodeparttwobox
+ \advance\pgf@y by\dp\pgfnodeparttextbox
+ \else
+ \advance\pgf@y by\dp\pgfnodeparttwobox
+ \fi
+ % height (lower):
+ \pgf@yb\ht\pgfnodepartthreebox
+ \ifdim\pgf@yb<\ht\pgfnodepartfourbox
+ \pgf@yb=\ht\pgfnodepartfourbox
+ \fi
+ \pgf@yc=\dp\pgfnodepartthreebox
+ \ifdim\pgf@yc<\dp\pgfnodepartfourbox
+ \advance\pgf@yb by\dp\pgfnodepartfourbox
+ \else
+ \advance\pgf@yb by\pgf@yc
+ \fi
+ \ifdim\pgf@yc>\pgf@y
+ \pgf@y=\pgf@yc
+ \fi
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y2\pgf@ya
+ %
+ \pgf@x\wd\pgfnodeparttextbox
+ \pgf@xa\wd\pgfnodepartthreebox
+ \pgf@xb\wd\pgfnodeparttwobox
+ \pgf@xc\wd\pgfnodepartfourbox
+ \ifdim\pgf@xa>\pgf@x
+ \pgf@x\pgf@xa
+ \fi
+ \ifdim\pgf@xb>\pgf@x
+ \pgf@x\pgf@xb
+ \fi
+ \ifdim\pgf@xc>\pgf@x
+ \pgf@x\pgf@xc
+ \fi
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x by 2\pgf@xa
+ \ifdim\pgf@y>\pgf@x
+ \pgf@x=\pgf@y
+ \fi
+ \advance\pgf@x by\pgflinewidth
+ %
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ % from circle:
+ \pgf@process{\pgfpointnormalised{}}%
+ \ifdim\pgf@x>\pgf@y%
+ \c@pgf@counta=\pgf@x%
+ \ifnum\c@pgf@counta=0\relax%
+ \else%
+ \divide\c@pgf@counta by 255\relax%
+ \pgf@xa=16\pgf@xa\relax%
+ \divide\pgf@xa by\c@pgf@counta%
+ \pgf@xa=16\pgf@xa\relax%
+ \fi%
+ \else%
+ \c@pgf@counta=\pgf@y%
+ \ifnum\c@pgf@counta=0\relax%
+ \else%
+ \divide\c@pgf@counta by 255\relax%
+ \pgf@ya=16\pgf@ya\relax%
+ \divide\pgf@ya by\c@pgf@counta%
+ \pgf@xa=16\pgf@ya\relax%
+ \fi%
+ \fi%
+ \pgf@x=\pgf@xa%
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@x<.5\pgf@xb
+ \pgf@x=.5\pgf@xb
+ \fi
+ \ifdim\pgf@x<.5\pgf@yb
+ \pgf@x=.5\pgf@yb
+ \fi
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb
+ \advance\pgf@x\pgf@yb
+ \else
+ \advance\pgf@x\pgf@xb
+ \fi
+ }%
+ \inheritanchorborder[from=circle]%
+ \inheritanchor[from=circle]{north}%
+ \inheritanchor[from=circle]{north west}%
+ \inheritanchor[from=circle]{north east}%
+ \inheritanchor[from=circle]{center}%
+ \inheritanchor[from=circle]{west}%
+ \inheritanchor[from=circle]{east}%
+ \inheritanchor[from=circle]{mid}%
+ \inheritanchor[from=circle]{mid west}%
+ \inheritanchor[from=circle]{mid east}%
+ \inheritanchor[from=circle]{base}%
+ \inheritanchor[from=circle]{base west}%
+ \inheritanchor[from=circle]{base east}%
+ \inheritanchor[from=circle]{south}%
+ \inheritanchor[from=circle]{south west}%
+ \inheritanchor[from=circle]{south east}%
+ \anchor{two}{\twoanchor}%
+ \anchor{three}{\threeanchor}%
+ \anchor{four}{
+ \threeanchor
+ \pgf@ya=\pgf@y
+ \twoanchor
+ \pgf@y=\pgf@ya
+ }%
+ \anchor{lower base}{%
+ \threeanchor
+ \pgf@ya=\pgf@y
+ \centerpoint
+ \pgf@y=\pgf@ya
+ }
+ \anchor{lower base west}{%
+ \threeanchor
+ \pgf@ya=\pgf@y
+ \centerpoint
+ \pgf@y=\pgf@ya
+ \advance\pgf@x by-\radius
+ }
+ \anchor{lower base east}{%
+ \threeanchor
+ \pgf@ya=\pgf@y
+ \centerpoint
+ \pgf@y=\pgf@ya
+ \advance\pgf@x by\radius
+ }
+ \anchor{lower mid}{%
+ \threeanchor
+ \pgf@ya=\pgf@y
+ \centerpoint
+ \pgf@y=\pgf@ya
+ \pgfmathsetlength\pgf@ya{+.5ex}%
+ \advance\pgf@y by\pgf@ya
+ }
+ \anchor{lower mid west}{%
+ \threeanchor
+ \pgf@ya=\pgf@y
+ \centerpoint
+ \pgf@y=\pgf@ya
+ \advance\pgf@x by-\radius
+ \pgfmathsetlength\pgf@ya{+.5ex}%
+ \advance\pgf@y by\pgf@ya
+ }
+ \anchor{lower mid east}{%
+ \threeanchor
+ \pgf@ya=\pgf@y
+ \centerpoint
+ \pgf@y=\pgf@ya
+ \advance\pgf@x by\radius
+ \pgfmathsetlength\pgf@ya{+.5ex}%
+ \advance\pgf@y by\pgf@ya
+ }
+ \inheritbackgroundpath[from=circle]
+ \beforebackgroundpath{%
+ \pgfutil@tempdima=\radius
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb
+ \advance\pgfutil@tempdima by-\pgf@yb
+ \else
+ \advance\pgfutil@tempdima by-\pgf@xb
+ \fi
+ \advance\pgfutil@tempdima by-.5\pgflinewidth%
+ \pgfsetshortenstart{0pt}%
+ \pgfsetshortenend{0pt}%
+ \pgfsetarrows{-}%
+ \pgfpathmoveto
+ {\pgfpointadd{\centerpoint}{\pgfqpoint{-\pgfutil@tempdima}{0pt}}}%
+ \pgfpathlineto
+ {\pgfpointadd{\centerpoint}{\pgfqpoint{\pgfutil@tempdima}{0pt}}}%
+ \pgfpathmoveto
+ {\pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{-\pgfutil@tempdima}}}%
+ \pgfpathlineto
+ {\pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{\pgfutil@tempdima}}}%
+ \pgfusepathqstroke
+ }%
+ \behindbackgroundpath{%
+ \pgfutil@tempdima=\radius
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb
+ \advance\pgfutil@tempdima by-\pgf@yb
+ \else
+ \advance\pgfutil@tempdima by-\pgf@xb
+ \fi
+ \advance\pgfutil@tempdima by-.5\pgflinewidth%
+ \ifpgfcirclecrosssplitcustomfill%
+ \pgf@lib@sh@rs@process@list{\pgf@lib@sh@ccs@list@fill}{4}%
+ {%
+ \pgfmathloop
+ \ifnum\pgfmathcounter>4%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ \edef\pgf@tempa
+ {\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}%
+ \ifx\pgf@tempa\pgf@lib@sh@rs@nonetext\else
+ \pgfsetfillcolor{\pgf@tempa}%
+ \ifcase\pgfmathcounter\or
+ \def\pgf@lib@sh@ccs@angle{90}\or
+ \def\pgf@lib@sh@ccs@angle{0}\or
+ \def\pgf@lib@sh@ccs@angle{180}\else
+ \def\pgf@lib@sh@ccs@angle{270}%
+ \fi
+ \pgfpathmoveto{\centerpoint}%
+ \pgfpathlineto{\pgfpointadd{\centerpoint}
+ {\pgfqpointpolar{\pgf@lib@sh@ccs@angle}{\pgfutil@tempdima}}}%
+ \pgfpatharc{+\pgf@lib@sh@ccs@angle}{\pgf@lib@sh@ccs@angle+90}
+ {+\pgfutil@tempdima}%
+ \pgfpathclose
+ \pgfusepathqfill
+ \fi
+ \repeatpgfmathloop
+ }%
+ \fi
+ }%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex
new file mode 100644
index 0000000000..477d0442da
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex
@@ -0,0 +1,181 @@
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\pgfset{
+ heatmark arc width/.initial=+4pt,
+ heatmark arc sep/.initial=+1pt,
+ heatmark arc rings/.initial=3,
+ heatmark arcs/.initial=3,
+ heatmark arc sep angle/.initial=20,
+ heatmark inner opacity/.initial=.8,
+ heatmark outer opacity/.initial=.2
+}
+\pgfdeclareshape{heatmark}
+%
+% Draws a circle around the text
+%
+{
+ \savedanchor\centerpoint{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by-.5\dp\pgfnodeparttextbox%
+ }
+
+ \saveddimen\innerradius{%
+ %
+ % Caculate ``height radius''
+ %
+ \pgf@ya=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@ya by.5\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@ya by\pgf@yb%
+ %
+ % Caculate ``width radius''
+ %
+ \pgf@xa=.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@xa by\pgf@xb%
+ %
+ % Calculate length of radius vector:
+ %
+ \pgf@process{\pgfpointnormalised{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
+ \ifdim\pgf@x>\pgf@y%
+ \c@pgf@counta=\pgf@x%
+ \ifnum\c@pgf@counta=0\relax%
+ \else%
+ \divide\c@pgf@counta by 255\relax%
+ \pgf@xa=16\pgf@xa\relax%
+ \divide\pgf@xa by\c@pgf@counta%
+ \pgf@xa=16\pgf@xa\relax%
+ \fi%
+ \else%
+ \c@pgf@counta=\pgf@y%
+ \ifnum\c@pgf@counta=0\relax%
+ \else%
+ \divide\c@pgf@counta by 255\relax%
+ \pgf@ya=16\pgf@ya\relax%
+ \divide\pgf@ya by\c@pgf@counta%
+ \pgf@xa=16\pgf@ya\relax%
+ \fi%
+ \fi%
+ \pgf@x=\pgf@xa%
+ %
+ % If necessary, adjust radius so that the size requirements are
+ % met:
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@x<.5\pgf@xb%
+ \pgf@x=.5\pgf@xb%
+ \fi%
+ \ifdim\pgf@x<.5\pgf@yb%
+ \pgf@x=.5\pgf@yb%
+ \fi%
+ }%
+
+ \saveddimen\radius{%
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb%
+ \advance\pgf@x by\pgf@yb%
+ \else%
+ \advance\pgf@x by\pgf@xb%
+ \fi%
+ \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/heatmark arc rings}}%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/heatmark arc width}+\pgfkeysvalueof{/pgf/heatmark arc sep}}%
+ \multiply\pgf@xa\c@pgf@counta
+ \advance\pgf@x\pgf@xa
+ }%
+ %
+ % Anchors
+ %
+ \inheritanchor[from=circle]{north}
+ \inheritanchor[from=circle]{north west}
+ \inheritanchor[from=circle]{north east}
+ \inheritanchor[from=circle]{center}
+ \inheritanchor[from=circle]{west}
+ \inheritanchor[from=circle]{east}
+ \inheritanchor[from=circle]{mid}
+ \inheritanchor[from=circle]{mid west}
+ \inheritanchor[from=circle]{mid east}
+ \inheritanchor[from=circle]{base}
+ \inheritanchor[from=circle]{base west}
+ \inheritanchor[from=circle]{base east}
+ \inheritanchor[from=circle]{south}
+ \inheritanchor[from=circle]{south west}
+ \inheritanchor[from=circle]{south east}
+ \inheritanchorborder[from=circle]
+ %
+ % Background path
+ %
+ \backgroundpath{
+ \pgfutil@tempdima=\innerradius%
+ \pgfpathcircle{\centerpoint}{\pgfutil@tempdima}%
+ }%
+ %
+ %
+ %
+ \behindbackgroundpath{%
+ \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/heatmark arc rings}}% heat arc rings
+ \pgfmathsetcount\c@pgf@countb{\pgfkeysvalueof{/pgf/heatmark arcs}}% heat arcs
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/heatmark arc width}}% heat arc width
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/heatmark arc sep}}% heat arc sep
+ %\pgfmathsetmacro\pgf@tempa{\pgfkeysvalueof{/pgf/heat arc sep angle}}% heat arc sep angle
+ \pgfmathsetmacro\pgf@tempb{360/\c@pgf@countb-(\pgfkeysvalueof{/pgf/heatmark arc sep angle})}% heat arc
+ \pgfmathsetmacro\pgf@tempc{\pgfkeysvalueof{/pgf/shape border rotate}}% heat rotate
+ %
+ \pgfmathsetmacro\pgf@tempd{\pgfkeysvalueof{/pgf/heatmark inner opacity}}% heat opacity high
+ \ifnum\c@pgf@counta=1
+ \def\tikzext@heatmark@opacity@seps{0}%
+ \else
+ \pgfmathsetmacro\tikzext@heatmark@opacity@seps
+ {(\pgf@tempd-(\pgfkeysvalueof{/pgf/heatmark outer opacity}))%
+ /(\c@pgf@counta-1)}%
+ \fi
+ \pgfutil@tempcnta=0
+ \pgfutil@tempcntb=0
+ \pgf@ya\innerradius\relax
+ \pgftransformshift{\centerpoint}
+ \pgfutil@loop % ring loop
+ \advance\pgf@ya\pgf@xb % current radius + heat arc sep
+ \pgf@yb\pgf@ya
+ \advance\pgf@yb\pgf@xa % current radius + heat arc sep + heat arc width
+ \pgfsetfillopacity{\pgf@tempd}%
+ \begingroup
+ \edef\pgf@marshal{\noexpand\pgfset{heatmark ring \the\numexpr\pgfutil@tempcnta+1\relax/.try}}%
+ \pgf@marshal
+ \csname tikz@options\endcsname
+ {%
+ \pgfutil@loop
+ \pgfmathsetmacro\tikzext@heatmark@start@angle{\pgf@tempc-.5*\pgf@tempb+\pgfutil@tempcntb*(360/\c@pgf@countb)}%
+ % path
+ \begingroup
+ \edef\pgf@marshal{\noexpand\pgfset{heatmark arc \the\numexpr\pgfutil@tempcntb+1\relax/.try}%
+ \noexpand\pgfset{heatmark ring \the\numexpr\pgfutil@tempcnta+1\relax\space arc \the\numexpr\pgfutil@tempcntb+1\relax/.try}}%
+ \pgf@marshal
+ \csname tikz@options\endcsname
+ \pgfpathmoveto{\pgfpointpolar{\tikzext@heatmark@start@angle}{\pgf@ya}}%
+ \pgfpatharc{\tikzext@heatmark@start@angle}{\tikzext@heatmark@start@angle+\pgf@tempb}{\pgf@ya}%
+ \pgfpathlineto{\pgfpointpolar{\tikzext@heatmark@start@angle+\pgf@tempb}{\pgf@yb}}%
+ \pgfpatharc{\tikzext@heatmark@start@angle+\pgf@tempb}{\tikzext@heatmark@start@angle}{\pgf@yb}%
+ \pgfpathclose
+ \pgfusepathqfill
+ \endgroup
+ \advance\pgfutil@tempcntb\@ne
+ \ifnum\pgfutil@tempcntb<\c@pgf@countb
+ \pgfutil@repeat
+ }%
+ \endgroup
+ \advance\pgfutil@tempcnta\@ne
+ \ifnum\pgfutil@tempcnta<\c@pgf@counta
+ \pgf@ya\pgf@yb
+ \pgfmathsetmacro\pgf@tempd{\pgf@tempd-\tikzext@heatmark@opacity@seps}%
+ \pgfutil@repeat
+ \pgftransformshift{\pgfqpointscale{-1}{\centerpoint}}%
+ }
+}
+\endinput
diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex
new file mode 100644
index 0000000000..37baf7abbf
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex
@@ -0,0 +1,318 @@
+\pgfset{
+ rectangle with rounded corners north west radius/.initial=.5\pgflinewidth,
+ rectangle with rounded corners north east radius/.initial=.5\pgflinewidth,
+ rectangle with rounded corners south west radius/.initial=.5\pgflinewidth,
+ rectangle with rounded corners south east radius/.initial=.5\pgflinewidth,
+ rectangle with rounded corners radius/.style={
+ /pgf/rectangle with rounded corners north west radius={#1},
+ /pgf/rectangle with rounded corners north east radius={#1},
+ /pgf/rectangle with rounded corners south west radius={#1},
+ /pgf/rectangle with rounded corners south east radius={#1}}
+}%
+\pgfdeclareshape{rectangle with rounded corners}{%
+ \savedmacro\rectanglewithroundedcornersparameter{%
+ %
+ % width = max(text width + 2 * inner xseps, minimum width) + 2 * outer xseps
+ \pgf@x=\wd\pgfnodeparttextbox
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x by 2\pgf@xc
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@x<\pgf@xc
+ \pgf@x=\pgf@xc
+ \fi
+ %
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \edef\outerxsep{\the\pgf@xc}%
+ \addtosavedmacro\outerxsep
+ \advance\pgf@x by 2\pgf@xc
+ \pgf@x=.5\pgf@x
+ \edef\halfwidth{\the\pgf@x}%
+ \addtosavedmacro\halfwidth
+ %
+ % height = max(text height + text depth + 2 * inner yseps, minimum height) + 2 * outer yseps
+ \pgf@y=\ht\pgfnodeparttextbox
+ \advance\pgf@y by \dp\pgfnodeparttextbox
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y by 2\pgf@yc
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<\pgf@yc
+ \pgf@y=\pgf@yc
+ \fi
+ %
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \edef\outerysep{\the\pgf@yc}%
+ \addtosavedmacro\outerysep
+ \advance\pgf@y by 2\pgf@yc
+ \pgf@y=.5\pgf@y
+ \edef\halfheight{\the\pgf@y}%
+ \addtosavedmacro\halfheight
+ %
+ % \centerpoint
+ \pgf@x=.5\wd\pgfnodeparttextbox
+ \pgf@y=.5\ht\pgfnodeparttextbox
+ \advance\pgf@y by -.5\dp\pgfnodeparttextbox
+ \pgfextract@process\centerpoint{}%
+ \addtosavedmacro\centerpoint
+ %
+ \pgfmathsetlengthmacro\northwestradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners north west radius}}
+ \pgfmathsetlengthmacro\northeastradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners north east radius}}
+ \pgfmathsetlengthmacro\southwestradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners south west radius}}
+ \pgfmathsetlengthmacro\southeastradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners south east radius}}
+ \addtosavedmacro\northwestradius
+ \addtosavedmacro\northeastradius
+ \addtosavedmacro\southwestradius
+ \addtosavedmacro\southeastradius
+ }%
+ \anchor{center}{%
+ \rectanglewithroundedcornersparameter
+ \centerpoint
+ }
+ \anchor{west}{%
+ \rectanglewithroundedcornersparameter
+ \centerpoint
+ \advance\pgf@x by -\halfwidth
+ }
+ \anchor{east}{%
+ \rectanglewithroundedcornersparameter
+ \centerpoint
+ \advance\pgf@x by \halfwidth
+ }
+ \anchor{north}{%
+ \rectanglewithroundedcornersparameter
+ \centerpoint
+ \advance\pgf@y by \halfheight
+ }
+ \anchor{south}{%
+ \rectanglewithroundedcornersparameter
+ \centerpoint
+ \advance\pgf@y by -\halfheight
+ }
+ \anchor{mid}{%
+ \rectanglewithroundedcornersparameter
+ \centerpoint
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }
+ \anchor{mid west}{%
+ \csname pgf@anchor@rectangle with rounded corners@west\endcsname
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }
+ \anchor{mid east}{%
+ \csname pgf@anchor@rectangle with rounded corners@east\endcsname
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }
+ \anchor{base}{%
+ \rectanglewithroundedcornersparameter
+ \centerpoint
+ \pgf@y=0pt
+ }
+ \anchor{base west}{%
+ \csname pgf@anchor@rectangle with rounded corners@west\endcsname
+ \pgf@y=0pt
+ }
+ \anchor{base east}{%
+ \csname pgf@anchor@rectangle with rounded corners@east\endcsname
+ \pgf@y=0pt
+ }
+ \anchor{north west}{%
+ \csname pgf@anchor@rectangle with rounded corners@north west center\endcsname
+ \ifdim\northwestradius=0pt
+ \else
+ \pgf@process{\pgfpointadd{}{\pgfpointpolar{135}{\northwestradius+\outerxsep and \northwestradius+\outerysep}}}%
+ \fi
+ }
+ \anchor{north west center}{%
+ \rectanglewithroundedcornersparameter
+ \pgf@x=-\halfwidth
+ \pgf@y=\halfheight
+ \ifdim\northwestradius=0pt
+ \else
+ \advance\pgf@x by \outerxsep
+ \advance\pgf@x by \northwestradius
+ \advance\pgf@y by -\outerysep
+ \advance\pgf@y by -\northwestradius
+ \fi
+ \pgf@process{\pgfpointadd{}{\centerpoint}}%
+ }
+ \anchor{north east}{%
+ \csname pgf@anchor@rectangle with rounded corners@north east center\endcsname
+ \ifdim\northeastradius=0pt
+ \else
+ \pgf@process{\pgfpointadd{}{\pgfpointpolar{45}{\northeastradius+\outerxsep and \northeastradius+\outerysep}}}%
+ \fi
+ }
+ \anchor{north east center}{%
+ \rectanglewithroundedcornersparameter
+ \pgf@x=\halfwidth
+ \pgf@y=\halfheight
+ \ifdim\northeastradius=0pt
+ \else
+ \advance\pgf@x by -\outerxsep
+ \advance\pgf@x by -\northeastradius
+ \advance\pgf@y by -\outerysep
+ \advance\pgf@y by -\northeastradius
+ \fi
+ \pgf@process{\pgfpointadd{}{\centerpoint}}%
+ }
+ \anchor{south west}{%
+ \csname pgf@anchor@rectangle with rounded corners@south west center\endcsname
+ \ifdim\southwestradius=0pt
+ \else
+ \pgf@process{\pgfpointadd{}{\pgfpointpolar{225}{\southwestradius+\outerxsep and \southwestradius+\outerysep}}}%
+ \fi
+ }
+ \anchor{south west center}{%
+ \rectanglewithroundedcornersparameter
+ \pgf@x=-\halfwidth
+ \pgf@y=-\halfheight
+ \ifdim\southwestradius=0pt
+ \else
+ \advance\pgf@x by \outerxsep
+ \advance\pgf@x by \southwestradius
+ \advance\pgf@y by \outerysep
+ \advance\pgf@y by \southwestradius
+ \fi
+ \pgf@process{\pgfpointadd{}{\centerpoint}}%
+ }
+ \anchor{south east}{%
+ \csname pgf@anchor@rectangle with rounded corners@south east center\endcsname
+ \ifdim\southeastradius=0pt
+ \else
+ \pgf@process{\pgfpointadd{}{\pgfpointpolar{315}{\southeastradius+\outerxsep and \southeastradius+\outerysep}}}%
+ \fi
+ }
+ \anchor{south east center}{%
+ \rectanglewithroundedcornersparameter
+ \pgf@x=\halfwidth
+ \pgf@y=-\halfheight
+ \ifdim\southeastradius=0pt
+ \else
+ \advance\pgf@x by -\outerxsep
+ \advance\pgf@x by -\southeastradius
+ \advance\pgf@y by \outerysep
+ \advance\pgf@y by \southeastradius
+ \fi
+ \pgf@process{\pgfpointadd{}{\centerpoint}}%
+ }
+ \anchor{below north west}{%
+ \csname pgf@anchor@rectangle with rounded corners@north west center\endcsname
+ \advance\pgf@x by -\northwestradius
+ \advance\pgf@x by -\outerxsep
+ }
+ \anchor{above south west}{%
+ \csname pgf@anchor@rectangle with rounded corners@south west center\endcsname
+ \advance\pgf@x by -\southwestradius
+ \advance\pgf@x by -\outerxsep
+ }
+ \anchor{below north east}{%
+ \csname pgf@anchor@rectangle with rounded corners@north east center\endcsname
+ \advance\pgf@x by \northeastradius
+ \advance\pgf@x by \outerxsep
+ }
+ \anchor{above south east}{%
+ \csname pgf@anchor@rectangle with rounded corners@south east center\endcsname
+ \advance\pgf@x by \southeastradius
+ \advance\pgf@x by \outerxsep
+ }
+ \anchor{right north west}{%
+ \csname pgf@anchor@rectangle with rounded corners@north west center\endcsname
+ \advance\pgf@y by \northwestradius
+ \advance\pgf@y by \outerysep
+ }
+ \anchor{right south west}{%
+ \csname pgf@anchor@rectangle with rounded corners@south west center\endcsname
+ \advance\pgf@y by -\southwestradius
+ \advance\pgf@y by -\outerysep
+ }
+ \anchor{left north east}{%
+ \csname pgf@anchor@rectangle with rounded corners@north east center\endcsname
+ \advance\pgf@y by \northeastradius
+ \advance\pgf@y by \outerysep
+ }
+ \anchor{left south east}{%
+ \csname pgf@anchor@rectangle with rounded corners@south east center\endcsname
+ \advance\pgf@y by -\southeastradius
+ \advance\pgf@y by -\outerysep
+ }
+ \backgroundpath{%
+ \rectanglewithroundedcornersparameter
+ %
+ \pgf@xa=\halfwidth
+ \advance\pgf@xa by -\outerxsep
+ \edef\HalfWidth{\the\pgf@xa}%
+ %
+ \pgf@ya=\halfheight
+ \advance\pgf@ya by -\outerysep
+ \edef\HalfHeight{\the\pgf@ya}%
+ %
+ \pgftransformshift{\centerpoint}%
+ %
+ \pgfpathmoveto{\pgfqpoint{\HalfWidth}{0pt}}%
+ \pgfpathlineto{\pgfpoint {+\HalfWidth}{\HalfHeight-\northeastradius}}%
+ \pgfpatharc{0}{90}{\northeastradius}%
+ \pgfpathlineto{\pgfpoint{-\HalfWidth+\northwestradius}{+\HalfHeight}}
+ \pgfpatharc{90}{180}{\northwestradius}%
+ \pgfpathlineto{\pgfpoint{+-\HalfWidth}{-\HalfHeight+\southwestradius}}%
+ \pgfpatharc{180}{270}{\southwestradius}%
+ \pgfpathlineto{\pgfpoint{\HalfWidth-\southeastradius}{+-\HalfHeight}}%
+ \pgfpatharc{270}{360}{\southeastradius}%
+ \pgfpathclose
+ \pgftransformshift{\pgfqpointscale{-1}{\centerpoint}}%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \ifdim\pgf@x=0pt
+ \ifdim\pgf@y<0pt
+ \csname pgf@anchor@rectangle with rounded corners@south\endcsname
+ \else
+ \csname pgf@anchor@rectangle with rounded corners@north\endcsname
+ \fi
+ \else
+ \ifdim\pgf@y=0pt
+ \ifdim\pgf@x<0pt
+ \csname pgf@anchor@rectangle with rounded corners@west\endcsname
+ \else
+ \csname pgf@anchor@rectangle with rounded corners@east\endcsname
+ \fi
+ \else
+ \rectanglewithroundedcornersparameter
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\externalpoint}%
+ \let\angle\pgfmathresult
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfextract@process\externalPoint{\pgfpointadd{}{\centerpoint}}%
+ \ifdim\pgf@xa<0pt
+ \ifdim\pgf@ya<0pt
+ % south west
+ \pgf@sh@rwrc@anchorborder{above south west}{right south west}{south west}{180}{270}{\southwestradius}%
+ \else
+ % north west
+ \pgf@sh@rwrc@anchorborder{right north west}{below north west}{north west}{90}{180}{\northwestradius}%
+ \fi
+ \else
+ \ifdim\pgf@ya<0pt
+ % south east
+ \pgf@sh@rwrc@anchorborder{left south east}{above south east}{south east}{270}{360}{\southeastradius}%
+ \else
+ % north east
+ \pgf@sh@rwrc@anchorborder{below north east}{left north east}{north east}{0}{90}{\northeastradius}%
+ \fi
+ \fi
+ \fi
+ \fi
+ }
+}
+\def\pgf@sh@rwrc@anchorborder#1#2#3#4#5#6{%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rectangle with rounded corners@#1\endcsname}%
+ \let\angleA\pgfmathresult
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rectangle with rounded corners@#2\endcsname}%
+ \let\angleB\pgfmathresult
+ \if\ifdim\angle pt>\angleA pt 0\else1\fi\ifdim\angle pt<\angleB pt 0\else 2\fi
+ \pgfmathpointintersectionoflineandarc{\externalPoint}{\centerpoint}
+ {\csname pgf@anchor@rectangle with rounded corners@#3 center\endcsname}
+ {#4}{#5}{#6+\outerxsep and #6+\outerysep}%
+ \else
+ \pgf@process{\pgfpointadd{\pgfpointborderrectangle{\externalpoint}{\pgfqpoint{\halfwidth}{\halfheight}}}{\centerpoint}}%
+ \fi
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex
new file mode 100644
index 0000000000..9a89b5a8a6
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex
@@ -0,0 +1,198 @@
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\usepgflibrary{shapes.geometric,intersections}
+\pgfset{
+ superellipse x exponent/.initial=2.5,
+ superellipse y exponent/.initial=2.5,
+ superellipse step/.initial=4,
+ superellipse exponent/.style={/pgf/superellipse x exponent={#1},/pgf/superellipse y exponent={#1}}}
+
+% Evaluates the x-value of a superellipse around the center
+% #1 = t (0≤t≤90)
+% #2 = 2/m (x-exp)
+% #3 = a (x-rad)
+\pgfmathdeclarefunction{superellipsex}{3}{%
+ \pgfmathcos@{#1}%
+ \pgfmathpow@{\pgfmathresult}{#2}%
+ \pgfmathmultiply@{\pgfmathresult}{#3}}
+
+% Evaluates the y-value of a superellipse around the center
+% #1 = t (0≤t≤90)
+% #2 = 2/n (y-exp)
+% #3 = a (y-rad)
+\pgfmathdeclarefunction{superellipsey}{3}{%
+ \pgfmathsin@{#1}%
+ \pgfmathpow@{\pgfmathresult}{#2}%
+ \pgfmathmultiply@{\pgfmathresult}{#3}}
+
+% Evaluates the x- and y- value of superellipse around the center
+% #1 = t (0≤t≤90)
+% #2 = 2/m (x-exp)
+% #3 = 2/n (y-exp)
+% #4 = a (x-rad)
+% #5 = b (y-rad)
+\def\pgfmathsuperellipseXY#1#2#3#4#5{%
+ \begingroup
+ \pgfmathsuperellipsex@{#1}{#2}{#4}%
+ \let\pgfmath@temp\pgfmathresult
+ \pgfmathsuperellipsey@{#1}{#3}{#5}%
+ \edef\pgfmath@temp{\def\noexpand\pgfmathresultX{\pgfmath@temp}%
+ \def\noexpand\pgfmathresultY{\pgfmathresult}}%
+ \expandafter
+ \endgroup\pgfmath@temp}
+
+\pgfdeclareshape{superellipse}{%
+ \inheritsavedanchors[from=ellipse]
+ \inheritanchor[from=ellipse]{text}\inheritanchor[from=ellipse]{center}
+ \inheritanchor[from=ellipse]{mid}\inheritanchor[from=ellipse]{base}
+ \inheritanchor[from=ellipse]{north}\inheritanchor[from=ellipse]{south}
+ \inheritanchor[from=ellipse]{west}\inheritanchor[from=ellipse]{east}
+ \inheritanchor[from=ellipse]{mid west}\inheritanchor[from=ellipse]{base west}
+ \inheritanchor[from=ellipse]{mid east}\inheritanchor[from=ellipse]{base east}
+ \anchor{north east}{%
+ \pgf@process{\radius}%
+ \pgfmathpow@{.70710678118}{\xexponent}%
+ \pgf@x=\pgfmathresult\pgf@x
+ \pgfmathpow@{.70710678118}{\yexponent}%
+ \pgf@y=\pgfmathresult\pgf@y
+ \pgfpointadd{}{\centerpoint}%
+ }
+ \anchor{north west}{%
+ \pgf@process{\radius}%
+ \pgfmathpow@{.70710678118}{\xexponent}%
+ \pgf@x=-\pgfmathresult\pgf@x
+ \pgfmathpow@{.70710678118}{\yexponent}%
+ \pgf@y=\pgfmathresult\pgf@y
+ \pgfpointadd{}{\centerpoint}%
+ }
+ \anchor{south west}{%
+ \pgf@process{\radius}%
+ \pgfmathpow@{.70710678118}{\xexponent}%
+ \pgf@x=-\pgfmathresult\pgf@x
+ \pgfmathpow@{.70710678118}{\yexponent}%
+ \pgf@y=-\pgfmathresult\pgf@y
+ \pgfpointadd{}{\centerpoint}%
+ }
+ \anchor{south east}{%
+ \pgf@process{\radius}%
+ \pgfmathpow@{.70710678118}{\xexponent}%
+ \pgf@x=\pgfmathresult\pgf@x
+ \pgfmathpow@{.70710678118}{\yexponent}%
+ \pgf@y=-\pgfmathresult\pgf@y
+ \pgfpointadd{}{\centerpoint}%
+ }
+ \savedmacro\xexponent{%
+ \pgfmathreciprocal{\pgfkeysvalueof{/pgf/superellipse x exponent}}%
+ \pgfmathmultiply@{\pgfmathresult}{2}%
+ \let\xexponent\pgfmathresult
+ }
+ \savedmacro\yexponent{%
+ \pgfmathreciprocal{\pgfkeysvalueof{/pgf/superellipse y exponent}}%
+ \pgfmathmultiply@{\pgfmathresult}{2}%
+ \let\yexponent\pgfmathresult
+ }
+ \savedmacro\step{%
+ \pgfmathtruncatemacro\step{\pgfkeysvalueof{/pgf/superellipse step}}%
+ }
+ \backgroundpath{%
+ \pgf@process{\radius}%
+ \pgfmathsetmacro\xradius{\pgf@x-(\pgfkeysvalueof{/pgf/outer xsep})}%
+ \pgfmathsetmacro\yradius{\pgf@y-(\pgfkeysvalueof{/pgf/outer ysep})}%
+ \let\pgf@tempa\pgfutil@empty\let\pgf@tempb\pgfutil@empty
+ \let\pgf@tempc\pgfutil@empty\let\pgf@tempd\pgfutil@empty
+ \c@pgf@counta=\step
+ \pgfutil@loop
+ \ifnum\c@pgf@counta<90
+ \pgfmathsuperellipseXY{\the\c@pgf@counta}{\xexponent}{\yexponent}{\xradius}{\yradius}%
+ \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{\pgfmathresultX pt}{\pgfmathresultY pt}}}%
+ \pgfutil@append@macrotomacro\pgf@tempa\pgf@temp
+ \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{-\pgfmathresultX pt}{\pgfmathresultY pt}}}%
+ \pgfutil@prefix@macrotomacro\pgf@tempb\pgf@temp
+ \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{-\pgfmathresultX pt}{-\pgfmathresultY pt}}}%
+ \pgfutil@append@macrotomacro\pgf@tempc\pgf@temp
+ \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{\pgfmathresultX pt}{-\pgfmathresultY pt}}}%
+ \pgfutil@prefix@macrotomacro\pgf@tempd\pgf@temp
+ \advance\c@pgf@counta by\step
+ \pgfutil@repeat
+ \pgftransformshift{\centerpoint}%
+ \pgfplothandlerclosedcurve
+ \pgfplotstreamstart
+ \pgfplotstreampoint{\pgfqpoint{\xradius pt}{0pt}}% east
+ \pgf@tempa
+ \pgfplotstreampoint{\pgfqpoint{0pt}{\yradius pt}}% north
+ \pgf@tempb
+ \pgfplotstreampoint{\pgfqpoint{-\xradius pt}{0pt}}% west
+ \pgf@tempc
+ \pgfplotstreampoint{\pgfqpoint{0pt}{-\yradius pt}}% south
+ \pgf@tempd
+ \pgfplotstreamend
+ \pgftransformshift{\centerpoint\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ }
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \ifdim\pgf@x=0pt % catch special case x = 0
+ \ifdim\pgf@y<0pt \pgf@anchor@superellipse@south\else\pgf@anchor@superellipse@north\fi
+ \else
+ \ifdim\pgf@y=0pt % catch special case y = 0
+ \ifdim\pgf@x<0pt \pgf@anchor@superellipse@west\else\pgf@anchor@superellipse@east\fi
+ \else % both are not zero
+ % save original direction
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ % make both positive, we're not looking at one quadrant
+ \ifdim\pgf@xa<0pt \pgf@x=-\pgf@x\fi
+ \ifdim\pgf@ya<0pt \pgf@y=-\pgf@y\fi
+ % save that point again
+ \pgfextract@process\externalpoint{}%
+ % we need to do the calculations without any transformations
+ % since we're using plots and \pgfpointborderrectangle
+ \pgftransformreset
+ \pgfintersectionofpaths{%
+ % from center to point on rectangle that encompasses superellipse
+ \pgf@relevantforpicturesizefalse
+ \pgfpathmoveto{\pgfpointorigin}%
+ \pgfpathlineto{\pgfpointborderrectangle{\externalpoint}{\radius}}%
+ }{%
+ \pgf@relevantforpicturesizefalse
+ \pgf@process{\radius}
+ \edef\xradius{\pgf@sys@tonumber\pgf@x}%
+ \edef\yradius{\pgf@sys@tonumber\pgf@y}%
+ \let\pgf@tempa\pgfutil@empty
+ \c@pgf@counta=\step
+ \pgfutil@loop
+ \ifnum\c@pgf@counta<90
+ \pgfmathsuperellipseXY{\the\c@pgf@counta}{\xexponent}{\yexponent}{\xradius}{\yradius}%
+ \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{\pgfmathresultX pt}{\pgfmathresultY pt}}}%
+ \pgfutil@append@macrotomacro\pgf@tempa\pgf@temp
+ \advance\c@pgf@counta by\step
+ \pgfutil@repeat
+ % we're only using curveto since closedcurve
+ % messes with our other path
+ \pgfplothandlercurveto
+ \pgfplotstreamstart
+ \pgfplotstreampoint{\pgfqpoint{\xradius pt}{0pt}}% east
+ \pgf@tempa
+ \pgfplotstreampoint{\pgfqpoint{0pt}{\yradius pt}}% north
+ \pgfplotstreamend
+ }%
+ \ifnum\pgfintersectionsolutions>0 % only if a solution was found
+ \pgf@process{\pgfpointintersectionsolution{1}}%
+ \else % otherwise take the border on the rectangle (close enough?)
+ \pgf@process{\pgfpointborderrectangle{\externalpoint}{\radius}}%
+ \fi
+ \ifdim\pgf@xa<0pt \pgf@x=-\pgf@x\fi
+ \ifdim\pgf@ya<0pt \pgf@y=-\pgf@y\fi
+ \pgf@process{\pgfpointadd{}{\centerpoint}}%
+ \fi
+ \fi
+ }
+}
+\def\pgfutil@prefix@macrotomacro#1#2{%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter%
+ #1\expandafter\expandafter\expandafter{\expandafter#2#1}}
+\endinput
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex
index d1300ed290..195ecf9414 100644
--- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex
@@ -48,7 +48,7 @@
% Overwriting original \tikz@lib@cal@if@else@code
%
\def\tikz@lib@cal@if@else@code#1#2#3{%
- \tikzcalendar@addto\tikz@lib@cal@ifs{\ifdate{#1}{#2}{#3}}%
+ \pgfutil@addto@macro\tikz@lib@cal@ifs{\ifdate{#1}{#2}{#3}}%
\tikz@lib@cal@scanner%
}
@@ -62,7 +62,7 @@
\tikz@before@day%
\scope%
\tikz@atbegin@day%
- \let\tikzcalendar@addto\pgfutil@secondoftwo
+ \let\pgfutil@addto@macro\pgfutil@secondoftwo
\tikz@lib@cal@ifs%
\tikzdaycode%
\tikz@atend@day%
@@ -72,7 +72,7 @@
\endgroup%
}
-\def\tikzcalendar@addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+\def\pgfutil@addto@macro#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\pgfmathdeclarefunction{weeksinmonthofyear}{3}{% #1 = first weekday, #2 = month, #3 = year
\begingroup
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex
index b68520081c..830b3513e5 100644
--- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex
@@ -39,28 +39,28 @@
%% this allows to use \foreach[use int={start to end step delta}] without(!) a list in {}
%% the values start, end and delta are evaluated by PGFmath at the start of the loop.
%% In addition to use int, there's also use float.
-\newif\ifqrr@pgf@foreach@no@list
+\newif\iftikzext@pgf@foreach@no@list
\pgfqkeys{/pgf/foreach}{
use int/.code={%
- \qrr@pgf@foreach@no@list@parse@to\pgfmathtruncatemacro#1\pgffor@stop
+ \tikzext@pgf@foreach@no@list@parse@to\pgfmathtruncatemacro#1\pgffor@stop
},
use float/.code={%
- \qrr@pgf@foreach@no@list@parse@to\pgfmathsetmacro#1\pgffor@stop
+ \tikzext@pgf@foreach@no@list@parse@to\pgfmathsetmacro#1\pgffor@stop
}
}
-\def\qrr@pgf@foreach@no@list@parse@to#1#2to#3\pgffor@stop{%
- \qrr@pgf@foreach@no@listtrue
+\def\tikzext@pgf@foreach@no@list@parse@to#1#2to#3\pgffor@stop{%
+ \tikzext@pgf@foreach@no@listtrue
#1\foreachStart{#2}%
\pgfutil@in@{step}{#3}
\ifpgfutil@in@
- \qrr@pgf@foreach@no@list@parse@step{#1}#3\pgffor@stop
+ \tikzext@pgf@foreach@no@list@parse@step{#1}#3\pgffor@stop
\else
- \qrr@pgf@foreach@no@list@parse@step{#1}#3step1\pgffor@stop
+ \tikzext@pgf@foreach@no@list@parse@step{#1}#3step1\pgffor@stop
\fi
- \edef\qrr@pgf@foreach@no@list@list{\foreachStart,\foreachSecond,...,\foreachEnd}%
+ \edef\tikzext@pgf@foreach@no@list@list{\foreachStart,\foreachSecond,...,\foreachEnd}%
}
-\def\qrr@pgf@foreach@no@list@parse@step#1#2step#3\pgffor@stop{%
+\def\tikzext@pgf@foreach@no@list@parse@step#1#2step#3\pgffor@stop{%
#1\foreachEnd{#2}%
#1\foreachSecond{\foreachStart+#3}%
}
@@ -68,9 +68,9 @@
\pgfutil@ifnextchar i{\pgffor@@vars@end}{%
\pgfutil@ifnextchar[{\pgffor@@vars@opt}{%]
\pgfutil@ifnextchar/{\pgffor@@vars@slash@gobble}{%
- \ifqrr@pgf@foreach@no@list\expandafter\pgfutil@firstoftwo\else
+ \iftikzext@pgf@foreach@no@list\expandafter\pgfutil@firstoftwo\else
\expandafter\pgfutil@secondoftwo\fi
- {\qrr@pgf@foreach@no@listfalse\pgffor@macro@list\qrr@pgf@foreach@no@list@list}
+ {\tikzext@pgf@foreach@no@listfalse\pgffor@macro@list\tikzext@pgf@foreach@no@list@list}
{\pgffor@@vars}}}}}%
%% Handlers
@@ -198,7 +198,7 @@
\else
\expandafter\pgfutil@secondoftwo
\fi
- {\qrr@misc@handle@else#2\pgf@stop}{\qrr@misc@handle@else#2else\pgf@stop}%
+ {\tikzext@misc@handle@else#2\pgf@stop}{\tikzext@misc@handle@else#2else\pgf@stop}%
},
TeX/if/.code n args={4}{%
\if#1#2\expandafter\pgfutil@firstoftwo\else\expandafter\pgfutil@secondoftwo\fi
@@ -222,7 +222,7 @@
},
tex/.search also=/utils/TeX,
}
-\def\qrr@misc@handle@else#1else#2\pgf@stop{%
+\def\tikzext@misc@handle@else#1else#2\pgf@stop{%
\ifdim\pgfmathresult pt=0pt
\expandafter\pgfutil@firstoftwo
\else
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex
index 9cee62be90..699170d178 100644
--- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex
@@ -6,20 +6,22 @@
% 2. under the GNU Free Documentation License.
%
-\def\tikz@nf@align@left#1{}
-\def\tikz@nf@align@center#1{\kern.5#1}
-\def\tikz@nf@align@right#1{\kern#1}
+\def\tikzext@nf@align@left#1{}
+\def\tikzext@nf@align@center#1{\kern.5#1}
+\def\tikzext@nf@align@right#1{\kern#1}
\pgfqkeys{/tikz/node family}{
width/.initial=,
+ width/.append style={/pgf/minimum width=nf_width},
height/.initial=,
- size/.style=\pgfqkeys{/tikz/node family}{width={#1},height={#1}},
+ height/.append style={/pgf/minimum height=nf_height},
+ size/.code=\pgfqkeys{/tikz/node family}{width={#1},height={#1}},
text depth/.initial=,
text height/.initial=,
text width align/.is choice,
- text width align/left/.code=\let\tikz@nf@align@action\tikz@nf@align@left,
- text width align/center/.code=\let\tikz@nf@align@action\tikz@nf@align@center,
- text width align/right/.code=\let\tikz@nf@align@action\tikz@nf@align@right,
+ text width align/left/.code=\let\tikzext@nf@align@action\tikzext@nf@align@left,
+ text width align/center/.code=\let\tikzext@nf@align@action\tikzext@nf@align@center,
+ text width align/right/.code=\let\tikzext@nf@align@action\tikzext@nf@align@right,
text width align=center,
text width/.initial=,
text/.code=\pgfqkeys{/tikz/node family}{text depth={#1},text height={#1},text width={#1}},
@@ -28,40 +30,39 @@
\tikzset{node family/.code=\pgfqkeys{/tikz/node family}{#1}}
% #1 = family type + name
-\def\tikz@nf@save#1{%
+\def\tikzext@nf@save#1{%
%\errmessage{#1}%
\immediate\write\pgfutil@auxout{%
- \noexpand\expandafter\noexpand\gdef\noexpand\csname tikz@nf@#1@previous\endcsname
- {\csname tikz@nf@#1@next\endcsname}%
+ \noexpand\expandafter\noexpand\gdef\noexpand\csname tikzext@nf@#1@previous\endcsname
+ {\csname tikzext@nf@#1@next\endcsname}%
}%
- %\expandafter\global\expandafter\let\csname tikz@nf@#1@next\endcsname\relax
}
% #1 = value to set
% #2 = family type
% #3 = return dimen
-\def\tikz@nf@getandset#1#2#3{%
+\def\tikzext@nf@getandset#1#2#3{%
% what's our family's name?
#3=0pt\relax
- \pgfkeysgetvalue{/tikz/node family/#2}\tikz@nf@familyname
- \pgfutil@ifxempty\tikz@nf@familyname{% no family to deal with
+ \pgfkeysgetvalue{/tikz/node family/#2}\tikzext@nf@familyname
+ \pgfutil@ifxempty\tikzext@nf@familyname{% no family to deal with
}{%
- \edef\tikz@nf@familyname{\pgfkeysvalueof{/tikz/node family/prefix}\tikz@nf@familyname}%
+ \edef\tikzext@nf@familyname{\pgfkeysvalueof{/tikz/node family/prefix}\tikzext@nf@familyname}%
% we need to save the value for the next run
- \pgfutil@IfUndefined{tikz@nf@#2@\tikz@nf@familyname @next}{%
+ \pgfutil@IfUndefined{tikzext@nf@#2@\tikzext@nf@familyname @next}{%
% first time: define first value and install hook at end of picture
- \expandafter\xdef\csname tikz@nf@#2@\tikz@nf@familyname @next\endcsname{#1}%
- \edef\tikz@temp{\noexpand\tikz@nf@save{#2@\tikz@nf@familyname}}%
+ \expandafter\xdef\csname tikzext@nf@#2@\tikzext@nf@familyname @next\endcsname{#1}%
+ \edef\tikz@temp{\noexpand\tikzext@nf@save{#2@\tikzext@nf@familyname}}%
%\expandafter\AtVeryEndDocument\expandafter{\tikz@temp}%
\expandafter\pgfutil@g@addto@macro\expandafter\tikz@atend@picture\expandafter{\tikz@temp}%
}{%
- \ifdim\csname tikz@nf@#2@\tikz@nf@familyname @next\endcsname<#1\relax
- \expandafter\xdef\csname tikz@nf@#2@\tikz@nf@familyname @next\endcsname{#1}%
+ \ifdim\csname tikzext@nf@#2@\tikzext@nf@familyname @next\endcsname<#1\relax
+ \expandafter\xdef\csname tikzext@nf@#2@\tikzext@nf@familyname @next\endcsname{#1}%
\fi
}%
- \pgfutil@IfUndefined{tikz@nf@#2@\tikz@nf@familyname @previous}{% first run, ignore
+ \pgfutil@IfUndefined{tikzext@nf@#2@\tikzext@nf@familyname @previous}{% first run, ignore
}{% set previous value
- #3=\csname tikz@nf@#2@\tikz@nf@familyname @previous\endcsname\relax
+ #3=\csname tikzext@nf@#2@\tikzext@nf@familyname @previous\endcsname\relax
}%
}%
}
@@ -75,7 +76,7 @@
\pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@x by 2\pgf@xc%
% Qrr: family width
- \tikz@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}%
\ifdim\pgf@x<\pgfutil@tempdima
\pgf@x=\pgfutil@tempdima
\fi
@@ -98,9 +99,9 @@
\pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@y by 2\pgf@yc%
% Qrr: family height
- \tikz@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}%
\ifdim\pgf@y<\pgfutil@tempdima
- \pgf@y=\pgfutil@tempa
+ \pgf@y=\pgfutil@tempdima
\fi
%
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
@@ -116,7 +117,7 @@
\advance\pgf@y by\pgf@ya%
}%
-\savedanchor\southwest{%
+ \savedanchor\southwest{%
% Calculate x
%
% First, is width < minimum width?
@@ -124,7 +125,7 @@
\pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@x by 2\pgf@xc%
% Qrr: family width
- \tikz@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}%
\ifdim\pgf@x<\pgfutil@tempdima
\pgf@x=\pgfutil@tempdima
\fi
@@ -147,7 +148,7 @@
\pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@y by 2\pgf@yc%
% Qrr: family height
- \tikz@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}%
\ifdim\pgf@y<\pgfutil@tempdima
\pgf@y=\pgfutil@tempdima
\fi
@@ -226,8 +227,8 @@
\fi
\pgf@x=\pgf@xa%
% Qrr: check for families
- \tikz@nf@getandset{\the\dimexpr2\pgf@x\relax}{width}{\pgfutil@tempdima}%
- \tikz@nf@getandset{\the\dimexpr2\pgf@x\relax}{height}{\pgfutil@tempdimb}%
+ \tikzext@nf@getandset{\the\dimexpr2\pgf@x\relax}{width}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\dimexpr2\pgf@x\relax}{height}{\pgfutil@tempdimb}%
% Qrr: and adjust like minimum width and minimum height
\ifdim\pgf@x<.5\pgfutil@tempdima
\pgf@x=.5\pgfutil@tempdima
@@ -285,17 +286,17 @@
\pgfqkeys{/tikz/node family}{
setup shape/.code={%
\expandafter\pgfutil@prefixto@macro\csname pgf@sh@s@#1\endcsname{%
- \tikz@nf@getandset{\the\wd\pgfnodeparttextbox}{text width}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\wd\pgfnodeparttextbox}{text width}{\pgfutil@tempdima}%
\ifdim\wd\pgfnodeparttextbox<\pgfutil@tempdima
\pgfutil@tempdimb=\pgfutil@tempdima
\advance\pgfutil@tempdimb-\wd\pgfnodeparttextbox
- \setbox\pgfnodeparttextbox=\hbox to \pgfutil@tempdima{\tikz@nf@align@action\pgfutil@tempdimb\box\pgfnodeparttextbox}%
+ \setbox\pgfnodeparttextbox=\hbox to \pgfutil@tempdima{\tikzext@nf@align@action\pgfutil@tempdimb\box\pgfnodeparttextbox}%
\fi
- \tikz@nf@getandset{\the\dp\pgfnodeparttextbox}{text depth}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\dp\pgfnodeparttextbox}{text depth}{\pgfutil@tempdima}%
\ifdim\dp\pgfnodeparttextbox<\pgfutil@tempdima
\dp\pgfnodeparttextbox=\pgfutil@tempdima
\fi
- \tikz@nf@getandset{\the\ht\pgfnodeparttextbox}{text height}{\pgfutil@tempdima}%
+ \tikzext@nf@getandset{\the\ht\pgfnodeparttextbox}{text height}{\pgfutil@tempdima}%
\ifdim\ht\pgfnodeparttextbox<\pgfutil@tempdima
\ht\pgfnodeparttextbox=\pgfutil@tempdima
\fi
@@ -303,3 +304,36 @@
},
setup shape/.list={rectangle,circle,Rectangle,Circle}
}
+
+%% nf functions
+\def\tikzext@nf@function@default{{\the\pgf@x}{\the\pgf@y}}
+\def\tikzext@nf@function@default@double{{\the\dimexpr2\pgf@x\relax}{\the\dimexpr2\pgf@y\relax}}
+\def\tikzext@nf@function@circle{{\the\pgf@x}{\the\pgf@x}}
+\def\tikzext@nf@function@circle@double{{\the\dimexpr2\pgf@x\relax}{\the\dimexpr2\pgf@x\relax}}
+
+\pgfmathdeclarefunction{nf_width}{0}{%
+ \begingroup
+ \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name}{%
+ \let\tikzext@nf@function\tikzext@nf@function@default
+ }{%
+ \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name @extra}{}{\csname tikzext@nf@function@\pgf@sm@shape@name @extra\endcsname}%
+ \expandafter\let\expandafter\tikzext@nf@function\csname tikzext@nf@function@\pgf@sm@shape@name\endcsname
+ }%
+ \tikzext@nf@getandset{\expandafter\pgfutil@firstoftwo\tikzext@nf@function}{width}{\pgfutil@tempdima}%
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgfutil@tempdima}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+\pgfmathdeclarefunction{nf_height}{0}{%
+ \begingroup
+ \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name}{%
+ \let\tikzext@nf@function\tikzext@nf@function@default
+ }{%
+ \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name @extra}{}{\csname tikzext@nf@function@\pgf@sm@shape@name @extra\endcsname}%
+ \expandafter\let\expandafter\tikzext@nf@function\csname tikzext@nf@function@\pgf@sm@shape@name\endcsname
+ }%
+ \tikzext@nf@getandset{\expandafter\pgfutil@secondoftwo\tikzext@nf@function}{height}{\pgfutil@tempdima}%
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgfutil@tempdima}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex
new file mode 100644
index 0000000000..58384960a8
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex
@@ -0,0 +1,38 @@
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+
+\usetikzlibrary{ext.node-families,shapes.geometric}
+
+\let\tikzext@nf@function@ellipse \tikzext@nf@function@default@double
+\let\tikzext@nf@function@star \tikzext@nf@function@circle
+\let\tikzext@nf@function@diamond \tikzext@nf@function@default@double
+\let\tikzext@nf@function@star \tikzext@nf@function@circle@double
+\expandafter\let\csname tikzext@nf@function@regular polygon\endcsname
+ \tikzext@nf@function@circle@double
+\let\tikzext@nf@function@trapezium\tikzext@nf@function@default@double
+\def\tikzext@nf@function@semicircle {{\the\dimexpr2\pgf@x\relax}{\the\pgf@x}}
+\expandafter\def\csname tikzext@nf@function@isosceles triangle\endcsname
+ {{\the\dimexpr2\pgf@ya\relax}{\the\pgf@xa}}
+\def\tikzext@nf@function@kite {{\the\dimexpr2\pgf@xa\relax}{\the\dimexpr\pgf@ya+\pgf@yb\relax}}
+\def\tikzext@nf@function@dart {{\the\dimexpr2\pgf@ya\relax}{\the\pgf@xb}}
+\expandafter\def\csname tikzext@nf@function@circular sector\endcsname{{\the\pgf@xc}{\the\pgf@xa}}
+\def\tikzext@nf@function@cylinder{{\the\dimexpr2\pgfutil@tempdimb\relax}{\the\pgf@x}}
+
+\tikzset{node family/setup shape/.list={
+ ellipse,
+ star,
+ diamond,
+ regular polygon,
+ trapezium,
+ semicircle,
+ isosceles triangle,
+ kite,
+ dart,
+ circular sector,
+ cylinder
+}} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex
index a84fae7150..e7a3b02ed7 100644
--- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex
@@ -8,12 +8,12 @@
%% For the operators r-lr, r-rl, r-ud and r-du we need to check after TikZ found r
\let\tikz@orig@rect\tikz@rect
-\def\tikz@rect{\pgfutil@ifnextchar e\tikz@orig@rect\qrr@tikz@r}
-\def\qrr@tikz@r -{%
- \pgfutil@ifnextchar l\qrr@tikz@lr@lineto{%
- \pgfutil@ifnextchar r\qrr@tikz@rl@lineto{%
- \pgfutil@ifnextchar u\qrr@tikz@ud@lineto{%
- \pgfutil@ifnextchar d\qrr@tikz@du@lineto\tikz@expand
+\def\tikz@rect{\pgfutil@ifnextchar e\tikz@orig@rect\tikzext@tikz@r}
+\def\tikzext@tikz@r -{%
+ \pgfutil@ifnextchar l\tikzext@tikz@lr@lineto{%
+ \pgfutil@ifnextchar r\tikzext@tikz@rl@lineto{%
+ \pgfutil@ifnextchar u\tikzext@tikz@ud@lineto{%
+ \pgfutil@ifnextchar d\tikzext@tikz@du@lineto\tikz@expand
}%
}%
}%
@@ -21,34 +21,33 @@
%% For the operator |-| we need to check after TikZ found |-
\let\tikz@orig@vh@lineto@next\tikz@vh@lineto@next
\def\tikz@vh@lineto@next{%
- \pgfutil@ifnextchar|{\expandafter\qrr@tikz@vhv@lineto\pgfutil@gobble}%
- {\pgfutil@ifnextchar\tikz@activebar{\expandafter\qrr@tikz@vhv@lineto\pgfutil@gobble}%
+ \pgfutil@ifnextchar|{\expandafter\tikzext@tikz@vhv@lineto\pgfutil@gobble}%
+ {\pgfutil@ifnextchar\tikz@activebar{\expandafter\tikzext@tikz@vhv@lineto\pgfutil@gobble}%
{\tikz@orig@vh@lineto@next}}}
%% For the operator -|- we need to check after TikZ found -|
\let\tikz@orig@hv@lineto\tikz@hv@lineto
\def\tikz@hv@lineto{%
- \pgfutil@ifnextchar-{\expandafter\qrr@tikz@hvh@lineto\pgfutil@gobble}%
+ \pgfutil@ifnextchar-{\expandafter\tikzext@tikz@hvh@lineto\pgfutil@gobble}%
{\tikz@orig@hv@lineto}}
%% |-|[<opts>] and -|-[<opts>] are allowed
-\def\qrr@tikz@vhv@lineto{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@vhv@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@vhv@lineto@next[]}}
-\def\qrr@tikz@hvh@lineto{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@hvh@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@hvh@lineto@next[]}}
+\def\tikzext@tikz@vhv@lineto{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@vhv@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@vhv@lineto@next[]}}
+\def\tikzext@tikz@hvh@lineto{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@hvh@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@hvh@lineto@next[]}}
%% r-rl[<opts>], r-lr[<opts>], etc.
-\def\qrr@tikz@rl@lineto rl{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@rl@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@rl@lineto@next[]}}
-\def\qrr@tikz@lr@lineto lr{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@lr@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@lr@lineto@next[]}}
-\def\qrr@tikz@du@lineto du{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@du@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@du@lineto@next[]}}
-\def\qrr@tikz@ud@lineto ud{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@ud@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@ud@lineto@next[]}}
+\def\tikzext@tikz@rl@lineto rl{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@rl@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@rl@lineto@next[]}}
+\def\tikzext@tikz@lr@lineto lr{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@lr@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@lr@lineto@next[]}}
+\def\tikzext@tikz@du@lineto du{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@du@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@du@lineto@next[]}}
+\def\tikzext@tikz@ud@lineto ud{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@ud@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@ud@lineto@next[]}}
%% TikZ interjects are done, the rest is independent:
-\newlength\qrr@tikz@udlr@distance
-\newlength\qrr@tikz@hvvh@distance
-\newif\ifqrr@tikz@hvvh@middle % checks whether spacing = 0 was selected
-\newif\ifqrr@tikz@hvvh@fromcenter
-\newif\iftikz@ortho@preflush
-\tikz@ortho@preflushtrue
-\let\tikz@origtotarget\pgfutil@empty
+\newlength\tikzext@tikz@udlr@distance
+\newlength\tikzext@tikz@hvvh@distance
+\newif\iftikzext@tikz@hvvh@middle % checks whether spacing = 0 was selected
+\newif\iftikzext@tikz@hvvh@fromcenter
+\newif\iftikzext@ortho@preflush
+\tikzext@ortho@preflushtrue
%%% HVVH/UDLR
\tikzset{%
@@ -57,29 +56,29 @@
hvvh/.search also=/tikz,%
udlr/.search also=/tikz,%
hvvh/middle 0 to 1/.style={hvvh/spacing=0},%
- hvvh/from center/.is if=qrr@tikz@hvvh@fromcenter,%
+ hvvh/from center/.is if=tikzext@tikz@hvvh@fromcenter,%
udlr/from center/.style={/tikz/hvvh/from center={#1}},
hvvh/spacing/.code=% spacing = 0 means that the middle part are the pos-itions 0 to 1,
% the first part is -1 to 0, the last part is to 2
- \pgfmathint{#1}\let\qrr@tikz@hvvh@timing@parts\pgfmathresult% in case they are calculations to be done
- \ifcase\qrr@tikz@hvvh@timing@parts\relax
- \qrr@tikz@hvvh@middletrue
- \def\qrr@tikz@hvvh@timing@parts{1}%
- \def\qrr@tikz@hvvh@timing@first{0}%
- \def\qrr@tikz@hvvh@timing@last{1}%
- \def\qrr@tikz@hvvh@timing@subtr{0}%
- \def\qrr@tikz@hvvh@timing@factor{1}%
+ \pgfmathint{#1}\let\tikzext@tikz@hvvh@timing@parts\pgfmathresult% in case they are calculations to be done
+ \ifcase\tikzext@tikz@hvvh@timing@parts\relax
+ \tikzext@tikz@hvvh@middletrue
+ \def\tikzext@tikz@hvvh@timing@parts{1}%
+ \def\tikzext@tikz@hvvh@timing@first{0}%
+ \def\tikzext@tikz@hvvh@timing@last{1}%
+ \def\tikzext@tikz@hvvh@timing@subtr{0}%
+ \def\tikzext@tikz@hvvh@timing@factor{1}%
\else % in all other cases n > 0 the kinks are at pos = 1/n and (n - 1)/n
- \qrr@tikz@hvvh@middlefalse
- \pgfmathreciprocal{#1}\let\qrr@tikz@hvvh@timing@first\pgfmathresult
- \pgfmathsetmacro\qrr@tikz@hvvh@timing@last{1-\pgfmathresult}%
+ \tikzext@tikz@hvvh@middlefalse
+ \pgfmathreciprocal{#1}\let\tikzext@tikz@hvvh@timing@first\pgfmathresult
+ \pgfmathsetmacro\tikzext@tikz@hvvh@timing@last{1-\pgfmathresult}%
\pgfmathreciprocal{#1-2}%
- \let\qrr@tikz@hvvh@timing@subtr\pgfmathresult
- \pgfmathsetmacro\qrr@tikz@hvvh@timing@factor{1+2*\pgfmathresult}%
+ \let\tikzext@tikz@hvvh@timing@subtr\pgfmathresult
+ \pgfmathsetmacro\tikzext@tikz@hvvh@timing@factor{1+2*\pgfmathresult}%
\fi,%
- hvvh/ratio/.code=\pgfmathsetmacro\qrr@tikz@hvvh@ratio{#1},%
+ hvvh/ratio/.code=\pgfmathsetmacro\tikzext@tikz@hvvh@ratio{#1},%
% TODO: not possible to do distance in TikZ coordinate system
- hvvh/distance/.code=\pgfmathsetlength\qrr@tikz@hvvh@distance{#1}\let\qrr@tikz@hvvh@ratio\pgfutil@empty,%
+ hvvh/distance/.code=\pgfmathsetlength\tikzext@tikz@hvvh@distance{#1}\let\tikzext@tikz@hvvh@ratio\pgfutil@empty,%
udlr/distance/.style={%
/tikz/udlr/ud distance={#1},%
/tikz/udlr/du distance={#1},%
@@ -98,27 +97,27 @@
\pgf@process{\tikz@timer@start}\pgf@ya\pgf@y
\pgf@process{\tikz@timer@end}\pgf@yc\pgf@y
\pgf@process{\tikz@timer@middle}\pgf@xb\tikz@time pt%
- \ifdim\tikz@time pt<\qrr@tikz@hvvh@timing@first pt% first quarter
- \ifqrr@tikz@hvvh@middle
+ \ifdim\tikz@time pt<\tikzext@tikz@hvvh@timing@first pt% first quarter
+ \iftikzext@tikz@hvvh@middle
\advance\pgf@xb1pt%
\else
- \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb
+ \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb
\fi
\edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}{\noexpand\tikz@timer@start}{%
\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@ya}}}%
\else
- \ifdim\tikz@time pt>\qrr@tikz@hvvh@timing@last pt% last quarter
- \ifqrr@tikz@hvvh@middle
+ \ifdim\tikz@time pt>\tikzext@tikz@hvvh@timing@last pt% last quarter
+ \iftikzext@tikz@hvvh@middle
\advance\pgf@xb-1pt%
\else
- \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb
+ \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb
\fi
- \advance\pgf@xb\dimexpr-\qrr@tikz@hvvh@timing@parts pt+1pt\relax%
+ \advance\pgf@xb\dimexpr-\tikzext@tikz@hvvh@timing@parts pt+1pt\relax%
\edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}%
{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@yc}}{\noexpand\tikz@timer@end}}%
\else% middle half
- \pgf@xb\qrr@tikz@hvvh@timing@factor\pgf@xb%
- \advance\pgf@xb-\qrr@tikz@hvvh@timing@subtr pt%
+ \pgf@xb\tikzext@tikz@hvvh@timing@factor\pgf@xb%
+ \advance\pgf@xb-\tikzext@tikz@hvvh@timing@subtr pt%
\edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}%
{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@ya}}{\noexpand\tikz@timer@middle}}%
\fi\fi\tikz@marshal}
@@ -126,58 +125,58 @@
\pgf@process{\tikz@timer@start}\pgf@xa\pgf@x
\pgf@process{\tikz@timer@end}\pgf@xc\pgf@x
\pgf@process{\tikz@timer@middle}\pgf@xb\tikz@time pt%
- \ifdim\tikz@time pt<\qrr@tikz@hvvh@timing@first pt% first quarter
- \ifqrr@tikz@hvvh@middle
+ \ifdim\tikz@time pt<\tikzext@tikz@hvvh@timing@first pt% first quarter
+ \iftikzext@tikz@hvvh@middle
\advance\pgf@xb1pt%
\else
- \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb
+ \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb
\fi
\edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}{\noexpand\tikz@timer@start}{%
\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@y}}}%
\else
- \ifdim\tikz@time pt>\qrr@tikz@hvvh@timing@last pt% last quarter
- \ifqrr@tikz@hvvh@middle
+ \ifdim\tikz@time pt>\tikzext@tikz@hvvh@timing@last pt% last quarter
+ \iftikzext@tikz@hvvh@middle
\advance\pgf@xb-1pt%
\else
- \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb
+ \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb
\fi
- \advance\pgf@xb by\dimexpr-\qrr@tikz@hvvh@timing@parts pt+1pt\relax%
+ \advance\pgf@xb by\dimexpr-\tikzext@tikz@hvvh@timing@parts pt+1pt\relax%
\edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}%
{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@y}}{\noexpand\tikz@timer@end}}%
\else% middle half
- \pgf@xb=\qrr@tikz@hvvh@timing@factor\pgf@xb
- \advance\pgf@xb by-\qrr@tikz@hvvh@timing@subtr pt%
+ \pgf@xb=\tikzext@tikz@hvvh@timing@factor\pgf@xb
+ \advance\pgf@xb by-\tikzext@tikz@hvvh@timing@subtr pt%
\edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}%
{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@y}}{\noexpand\tikz@timer@middle}}%
\fi\fi\tikz@marshal}%
%% collect options and nodes, coordinates and pics onpath
\let\tikz@hvvh@currentoption\pgfutil@empty
-\def\qrr@tikz@collect@hvvh@options#1[#2]{\edef\tikz@hvvh@currentoption{#2}#1}
-\def\qrr@tikz@hvh@lineto@next{%
- \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@hvh@lineto@next}
- {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@hvh@lineto@next}%
- {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@hvh@lineto@next}{\tikz@scan@one@point\qrr@tikz@@hvh@lineto}}}}%
-\def\qrr@tikz@vhv@lineto@next{%
- \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@vhv@lineto@next}
- {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@vhv@lineto@next}%
- {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@vhv@lineto@next}{\tikz@scan@one@point\qrr@tikz@@vhv@lineto}}}}%
-\def\qrr@tikz@ud@lineto@next{%
- \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@ud@lineto@next}
- {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@ud@lineto@next}
- {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@ud@lineto@next}{\tikz@scan@one@point\qrr@tikz@@ud@lineto}}}}%
-\def\qrr@tikz@du@lineto@next{%
- \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@du@lineto@next}
- {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@du@lineto@next}
- {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@du@lineto@next}{\tikz@scan@one@point\qrr@tikz@@du@lineto}}}}%
-\def\qrr@tikz@lr@lineto@next{%
- \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@lr@lineto@next}
- {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@lr@lineto@next}
- {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@lr@lineto@next}{\tikz@scan@one@point\qrr@tikz@@lr@lineto}}}}%
-\def\qrr@tikz@rl@lineto@next{%
- \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@rl@lineto@next}
- {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@rl@lineto@next}
- {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@rl@lineto@next}{\tikz@scan@one@point\qrr@tikz@@rl@lineto}}}}%
+\def\tikzext@tikz@collect@hvvh@options#1[#2]{\edef\tikz@hvvh@currentoption{#2}#1}
+\def\tikzext@tikz@hvh@lineto@next{%
+ \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@hvh@lineto@next}
+ {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@hvh@lineto@next}%
+ {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@hvh@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@hvh@lineto}}}}%
+\def\tikzext@tikz@vhv@lineto@next{%
+ \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@vhv@lineto@next}
+ {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@vhv@lineto@next}%
+ {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@vhv@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@vhv@lineto}}}}%
+\def\tikzext@tikz@ud@lineto@next{%
+ \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@ud@lineto@next}
+ {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@ud@lineto@next}
+ {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@ud@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@ud@lineto}}}}%
+\def\tikzext@tikz@du@lineto@next{%
+ \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@du@lineto@next}
+ {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@du@lineto@next}
+ {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@du@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@du@lineto}}}}%
+\def\tikzext@tikz@lr@lineto@next{%
+ \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@lr@lineto@next}
+ {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@lr@lineto@next}
+ {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@lr@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@lr@lineto}}}}%
+\def\tikzext@tikz@rl@lineto@next{%
+ \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@rl@lineto@next}
+ {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@rl@lineto@next}
+ {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@rl@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@rl@lineto}}}}%
\def\tikz@do@hvvh#1#2#3#4#5{%
% #1 = first kink
@@ -200,7 +199,7 @@
\tikz@scan@next@command}%
%% -|- operator
-\def\qrr@tikz@@hvh@lineto#1{%
+\def\tikzext@tikz@@hvh@lineto#1{%
\edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\pgf@xb=\tikz@lastx
\pgf@xc=\tikz@lastx
@@ -211,51 +210,51 @@
\pgfqkeys{/tikz/hvvh}{/tikz/style/.expand once=\tikz@hvvh@currentoption}%
\iftikz@shapeborder
\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@xb}{\tikz@lasty}}}%
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@xc\pgf@xb
\fi
- \pgfutil@ifxempty\qrr@tikz@hvvh@ratio{%
- \ifdim\qrr@tikz@hvvh@distance<0pt\relax
- \ifqrr@tikz@hvvh@fromcenter
+ \pgfutil@ifxempty\tikzext@tikz@hvvh@ratio{%
+ \ifdim\tikzext@tikz@hvvh@distance<0pt\relax
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@xc\tikz@lastx
\else
\pgf@xc\pgf@x
\fi
\fi
\ifdim\pgf@xb>\tikz@lastx
- \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance
+ \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance
\fi
}{%
- \ifqrr@tikz@hvvh@fromcenter
- \qrr@tikz@hvvh@distance\tikz@lastx
+ \iftikzext@tikz@hvvh@fromcenter
+ \tikzext@tikz@hvvh@distance\tikz@lastx
\else
- \qrr@tikz@hvvh@distance\pgf@x
+ \tikzext@tikz@hvvh@distance\pgf@x
\fi
- \advance\qrr@tikz@hvvh@distance-\pgf@xc
- \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance
+ \advance\tikzext@tikz@hvvh@distance-\pgf@xc
+ \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance
}%
- \advance\pgf@xc\qrr@tikz@hvvh@distance
+ \advance\pgf@xc\tikzext@tikz@hvvh@distance
\edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
\edef\pgf@tempb{\noexpand\pgfqpoint{\the\pgf@xc}{\the\tikz@lasty}}%
\edef\pgf@temp{\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\else
\let\tikz@shapeborder@name\pgfutil@empty
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@xc\pgf@xb
\fi
- \pgfutil@ifxempty\qrr@tikz@hvvh@ratio{%
- \ifdim\qrr@tikz@hvvh@distance<0pt\relax
+ \pgfutil@ifxempty\tikzext@tikz@hvvh@ratio{%
+ \ifdim\tikzext@tikz@hvvh@distance<0pt\relax
\pgf@xc\tikz@lastx
\fi
\ifdim\pgf@xb>\tikz@lastx
- \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance
+ \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance
\fi
}{%
- \qrr@tikz@hvvh@distance\tikz@lastx
- \advance\qrr@tikz@hvvh@distance-\pgf@xc
- \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance
+ \tikzext@tikz@hvvh@distance\tikz@lastx
+ \advance\tikzext@tikz@hvvh@distance-\pgf@xc
+ \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance
}%
- \advance\pgf@xc\qrr@tikz@hvvh@distance
+ \advance\pgf@xc\tikzext@tikz@hvvh@distance
\edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
\edef\pgf@tempb{\noexpand\pgfqpoint{\the\pgf@xc}{\the\tikz@lasty}}%
\edef\pgf@temp{\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
@@ -270,7 +269,7 @@
\pgf@marshal}%
%% |-| operator
-\def\qrr@tikz@@vhv@lineto#1{%
+\def\tikzext@tikz@@vhv@lineto#1{%
\edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\pgf@xc=\tikz@lastx
\pgf@yb=\tikz@lasty
@@ -281,51 +280,51 @@
\pgfqkeys{/tikz/hvvh}{/tikz/style/.expand once=\tikz@hvvh@currentoption}%
\iftikz@shapeborder
\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\tikz@lastx}{\pgf@yb}}}%
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@yc\pgf@yb
\fi
- \ifx\qrr@tikz@hvvh@ratio\pgfutil@empty
- \ifdim\qrr@tikz@hvvh@distance<0pt\relax
- \ifqrr@tikz@hvvh@fromcenter
+ \ifx\tikzext@tikz@hvvh@ratio\pgfutil@empty
+ \ifdim\tikzext@tikz@hvvh@distance<0pt\relax
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@yc\tikz@lasty
\else
\pgf@yc\pgf@y
\fi
\fi
\ifdim\pgf@yb>\tikz@lasty
- \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance
+ \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance
\fi
\else
- \ifqrr@tikz@hvvh@fromcenter
- \qrr@tikz@hvvh@distance\tikz@lasty
+ \iftikzext@tikz@hvvh@fromcenter
+ \tikzext@tikz@hvvh@distance\tikz@lasty
\else
- \qrr@tikz@hvvh@distance\pgf@y
+ \tikzext@tikz@hvvh@distance\pgf@y
\fi
- \advance\qrr@tikz@hvvh@distance-\pgf@yc
- \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance
+ \advance\tikzext@tikz@hvvh@distance-\pgf@yc
+ \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance
\fi
- \advance\pgf@yc\qrr@tikz@hvvh@distance
+ \advance\pgf@yc\tikzext@tikz@hvvh@distance
\edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
\edef\pgf@tempb{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\pgf@yc}}%
\edef\pgf@temp{\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\else
\let\tikz@shapeborder@name\pgfutil@empty
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@yc\pgf@yb
\fi
- \ifx\qrr@tikz@hvvh@ratio\pgfutil@empty
- \ifdim\qrr@tikz@hvvh@distance<0pt\relax
+ \ifx\tikzext@tikz@hvvh@ratio\pgfutil@empty
+ \ifdim\tikzext@tikz@hvvh@distance<0pt\relax
\pgf@yc\tikz@lasty
\fi
\ifdim\pgf@yb>\tikz@lasty
- \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance
+ \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance
\fi
\else
- \qrr@tikz@hvvh@distance\tikz@lasty
- \advance\qrr@tikz@hvvh@distance-\pgf@yc
- \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance
+ \tikzext@tikz@hvvh@distance\tikz@lasty
+ \advance\tikzext@tikz@hvvh@distance-\pgf@yc
+ \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance
\fi
- \advance\pgf@yc\qrr@tikz@hvvh@distance
+ \advance\pgf@yc\tikzext@tikz@hvvh@distance
\edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
\edef\pgf@tempb{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\pgf@yc}}%
\edef\pgf@temp{\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
@@ -340,7 +339,7 @@
\pgf@marshal}%
%% r-ud operator
-\def\qrr@tikz@@ud@lineto#1{%
+\def\tikzext@tikz@@ud@lineto#1{%
\edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\pgf@xc\tikz@lastx
\pgf@yb\tikz@lasty
@@ -350,34 +349,34 @@
\tikz@make@last@position{#1}%
\begingroup
\pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}%
- \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/ud distance}}%
+ \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/ud distance}}%
\iftikz@shapeborder
\advance\pgf@y1pt%
\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}%
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@yc\pgf@yb
\else\ifx\pgf@temp\relax
\pgf@yc\pgf@yb
\fi
\fi
\ifdim\pgf@yc<\pgf@y
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@yc=\tikz@lasty
\else
\pgf@yc=\pgf@y
\fi
\fi
- \advance\pgf@yc\qrr@tikz@udlr@distance
+ \advance\pgf@yc\tikzext@tikz@udlr@distance
\edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\else
\let\tikz@shapeborder@name\pgfutil@empty
\ifx\pgf@temp\relax\else
- \ifqrr@tikz@hvvh@fromcenter\else
+ \iftikzext@tikz@hvvh@fromcenter\else
\pgf@yb\pgf@yc
\fi
\fi
\ifdim\pgf@yb<\tikz@lasty\pgf@yb\tikz@lasty\fi
- \advance\pgf@yb\qrr@tikz@udlr@distance
+ \advance\pgf@yb\tikzext@tikz@udlr@distance
\pgf@yc\pgf@yb
\edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\fi
@@ -391,7 +390,7 @@
\pgf@marshal}%
%% r-du operator
-\def\qrr@tikz@@du@lineto#1{%
+\def\tikzext@tikz@@du@lineto#1{%
\edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\pgf@xc\tikz@lastx
\pgf@yb\tikz@lasty
@@ -401,34 +400,34 @@
\tikz@make@last@position{#1}%
\begingroup
\pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}%
- \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/du distance}}%
+ \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/du distance}}%
\iftikz@shapeborder
\advance\pgf@y-1pt%
\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}%
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@yc\pgf@yb
\else\ifx\pgf@temp\relax
\pgf@yc\pgf@yb
\fi
\fi
\ifdim\pgf@yc>\pgf@y
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@yc=\tikz@lasty
\else
\pgf@yc=\pgf@y
\fi
\fi
- \advance\pgf@yc-\qrr@tikz@udlr@distance
+ \advance\pgf@yc-\tikzext@tikz@udlr@distance
\edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\else
\let\tikz@shapeborder@name\pgfutil@empty
\ifx\pgf@temp\relax\else
- \ifqrr@tikz@hvvh@fromcenter\else
+ \iftikzext@tikz@hvvh@fromcenter\else
\pgf@yb\pgf@yc
\fi
\fi
\ifdim\pgf@yb>\tikz@lasty\pgf@yb\tikz@lasty\fi
- \advance\pgf@yb-\qrr@tikz@udlr@distance
+ \advance\pgf@yb-\tikzext@tikz@udlr@distance
\pgf@yc\pgf@yb
\edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\fi
@@ -442,7 +441,7 @@
\pgf@marshal}%
%% r-lr operator
-\def\qrr@tikz@@lr@lineto#1{%
+\def\tikzext@tikz@@lr@lineto#1{%
\edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\pgf@xb\tikz@lastx
\pgf@yc\tikz@lasty
@@ -452,34 +451,34 @@
\tikz@make@last@position{#1}%
\begingroup
\pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}%
- \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/lr distance}}%
+ \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/lr distance}}%
\iftikz@shapeborder
\advance\pgf@x-1pt%
\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}%
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@xc\pgf@xb
\else\ifx\pgf@temp\relax
\pgf@xc\pgf@xb
\fi
\fi
\ifdim\pgf@xc>\pgf@x
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@xc=\tikz@lastx
\else
\pgf@xc=\pgf@x
\fi
\fi
- \advance\pgf@xc-\qrr@tikz@udlr@distance
+ \advance\pgf@xc-\tikzext@tikz@udlr@distance
\edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\else
\let\tikz@shapeborder@name\pgfutil@empty
\ifx\pgf@temp\relax\else
- \ifqrr@tikz@hvvh@fromcenter\else
+ \iftikzext@tikz@hvvh@fromcenter\else
\pgf@xb\pgf@xc
\fi
\fi
\ifdim\pgf@xb>\tikz@lastx\pgf@xb\tikz@lastx\fi
- \advance\pgf@xb-\qrr@tikz@udlr@distance
+ \advance\pgf@xb-\tikzext@tikz@udlr@distance
\pgf@xc\pgf@xb
\edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\fi
@@ -493,7 +492,7 @@
\pgf@marshal}%
%% r-rl operator
-\def\qrr@tikz@@rl@lineto#1{%
+\def\tikzext@tikz@@rl@lineto#1{%
\edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\pgf@xb\tikz@lastx
\pgf@yc\tikz@lasty
@@ -503,34 +502,34 @@
\tikz@make@last@position{#1}%
\begingroup
\pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}%
- \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/rl distance}}%
+ \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/rl distance}}%
\iftikz@shapeborder%
\advance\pgf@x1pt%
\pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}%
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@xc\pgf@xb
\else\ifx\pgf@temp\relax
\pgf@xc\pgf@xb
\fi
\fi
\ifdim\pgf@xc<\pgf@x
- \ifqrr@tikz@hvvh@fromcenter
+ \iftikzext@tikz@hvvh@fromcenter
\pgf@xc=\tikz@lastx
\else
\pgf@xc=\pgf@x
\fi
\fi
- \advance\pgf@xc\qrr@tikz@udlr@distance
+ \advance\pgf@xc\tikzext@tikz@udlr@distance
\edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\else
\let\tikz@shapeborder@name\pgfutil@empty%
\ifx\pgf@temp\relax\else
- \ifqrr@tikz@hvvh@fromcenter\else
+ \iftikzext@tikz@hvvh@fromcenter\else
\pgf@xb\pgf@xc
\fi
\fi
\ifdim\pgf@xb<\tikz@lastx\pgf@xb\tikz@lastx\fi
- \advance\pgf@xb\qrr@tikz@udlr@distance
+ \advance\pgf@xb\tikzext@tikz@udlr@distance
\pgf@xc\pgf@xb
\edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
\fi
@@ -544,9 +543,8 @@
\pgf@marshal}%
%% a few nice to haves, use with to or edge operator
-\let\tikz@origtotarget\pgfutil@empty
\tikzset{
- node as new start/.is if=tikz@ortho@preflush,
+ node as new start/.is if=tikzext@ortho@preflush,
node as new start,
horizontal vertical/.style={to path={-| (\tikztotarget) \tikztonodes}},
vertical horizontal/.style={to path={|- (\tikztotarget) \tikztonodes}},
@@ -554,79 +552,79 @@
vertical horizontal vertical/.style={to path={|-| (\tikztotarget) \tikztonodes}},
only vertical second/.style={to path={
\pgfextra
- \let\tikz@ortho@anchor\pgfutil@empty
- \let\tikz@origtotarget\pgfutil@empty
+ \let\tikzext@ortho@anchor\pgfutil@empty
+ \let\tikzext@origtotarget\pgfutil@empty
\tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
\iftikz@shapeborder
\tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
\ifdim\pgf@y>\tikz@lasty\relax
\edef\tikztostart{\tikztostart.north}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.south}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.south}\fi
\else
\edef\tikztostart{\tikztostart.south}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.north}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.north}\fi
\fi
\fi
\def\tikz@tempa{#1}%
\ifx\tikz@tempa\pgfutil@empty\else
- \let\tikz@origtotarget\tikztotarget
- \edef\tikztotarget{[xshift={#1}]\tikztotarget\tikz@ortho@anchor}%
+ \let\tikzext@origtotarget\tikztotarget
+ \edef\tikztotarget{[xshift={#1}]\tikztotarget\tikzext@ortho@anchor}%
\fi
\endpgfextra
[insert path/.expanded={
(perpendicular cs: horizontal line through={(\tikztostart)},
vertical line through={(\tikztotarget)}) -- (\tikztotarget)}] \tikztonodes
\pgfextra
- \ifx\tikz@origtotarget\pgfutil@empty\else
- \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}},
+ \ifx\tikzext@origtotarget\pgfutil@empty\else
+ \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}},
only vertical second/.default=,
only horizontal second/.style={to path={
\pgfextra
- \let\tikz@ortho@anchor\pgfutil@empty
- \let\tikz@origtotarget\pgfutil@empty
+ \let\tikzext@ortho@anchor\pgfutil@empty
+ \let\tikzext@origtotarget\pgfutil@empty
\tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
\iftikz@shapeborder
\tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
\ifdim\pgf@x>\tikz@lastx\relax
\edef\tikztostart{\tikztostart.east}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.west}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.west}\fi
\else
\edef\tikztostart{\tikztostart.west}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.east}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.east}\fi
\fi
\fi
\def\tikz@tempa{#1}%
\ifx\tikz@tempa\pgfutil@empty\else
- \let\tikz@origtotarget\tikztotarget
- \edef\tikztotarget{[yshift={#1}]\tikztotarget\tikz@ortho@anchor}%
+ \let\tikzext@origtotarget\tikztotarget
+ \edef\tikztotarget{[yshift={#1}]\tikztotarget\tikzext@ortho@anchor}%
\fi
\endpgfextra
[insert path/.expanded={
(perpendicular cs: vertical line through={(\tikztostart)},
horizontal line through={(\tikztotarget)}) -- (\tikztotarget)}] \tikztonodes
\pgfextra
- \ifx\tikz@origtotarget\pgfutil@empty\else
- \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}},
+ \ifx\tikzext@origtotarget\pgfutil@empty\else
+ \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}},
only horizontal second/.default=,
only vertical first/.style={to path={
\pgfextra
- \let\tikz@ortho@anchor\pgfutil@empty
- \let\tikz@origtotarget\pgfutil@empty
+ \let\tikzext@ortho@anchor\pgfutil@empty
+ \let\tikzext@origtotarget\pgfutil@empty
\tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
\iftikz@shapeborder
- \let\tikz@origtotarget\tikztotarget
+ \let\tikzext@origtotarget\tikztotarget
\tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
\ifdim\pgf@y>\tikz@lasty\relax
\edef\tikztotarget{\tikztotarget.south}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.north}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.north}\fi
\else
\edef\tikztotarget{\tikztotarget.north}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.south}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.south}\fi
\fi
\fi
\def\tikz@tempa{#1}%
\ifx\tikz@tempa\pgfutil@empty\else
- \edef\tikztostart{[xshift={#1}]\tikztostart\tikz@ortho@anchor}%
+ \edef\tikztostart{[xshift={#1}]\tikztostart\tikzext@ortho@anchor}%
\fi
\endpgfextra
[insert path/.expanded={(\tikztostart)}]
@@ -634,50 +632,50 @@
horizontal line through={(\tikztotarget)})
\tikztonodes
\pgfextra
- \ifx\tikz@origtotarget\pgfutil@empty\else
- \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}},
+ \ifx\tikzext@origtotarget\pgfutil@empty\else
+ \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}},
only vertical first/.default=,
only horizontal first/.style={to path={
\pgfextra
- \let\tikz@ortho@anchor\pgfutil@empty
- \let\tikz@origtotarget\pgfutil@empty
+ \let\tikzext@ortho@anchor\pgfutil@empty
+ \let\tikzext@origtotarget\pgfutil@empty
\tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
\iftikz@shapeborder
- \let\tikz@origtotarget\tikztotarget
+ \let\tikzext@origtotarget\tikztotarget
\tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
\ifdim\pgf@x>\tikz@lastx\relax
\edef\tikztotarget{\tikztotarget.west}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.east}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.east}\fi
\else
\edef\tikztotarget{\tikztotarget.east}%
- \iftikz@shapeborder\def\tikz@ortho@anchor{.west}\fi
+ \iftikz@shapeborder\def\tikzext@ortho@anchor{.west}\fi
\fi
\fi
\def\tikz@tempa{#1}%
\ifx\tikz@tempa\pgfutil@empty\else
- \edef\tikztostart{[yshift={#1}]\tikztostart\tikz@ortho@anchor}%
+ \edef\tikztostart{[yshift={#1}]\tikztostart\tikzext@ortho@anchor}%
\fi
\endpgfextra
[insert path/.expanded={(\tikztostart)}]
-- (perpendicular cs: horizontal line through/.expanded={(\tikztostart)},
vertical line through={(\tikztotarget)})
\tikztonodes \pgfextra
- \ifx\tikz@origtotarget\pgfutil@empty\else
- \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}},
+ \ifx\tikzext@origtotarget\pgfutil@empty\else
+ \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}},
only horizontal first/.default=,
only vertical first to center/.style={to path={
\pgfextra
- \let\tikz@origtotarget\tikztotarget
+ \let\tikzext@origtotarget\tikztotarget
\endpgfextra
(\tikztostart) -- (perpendicular cs: vertical line through={(\tikztostart)},
horizontal line through={(\tikztotarget)})
- \tikztonodes \ifx\tikz@origtotarget\pgfutil@empty\else\iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi}},
+ \tikztonodes \ifx\tikzext@origtotarget\pgfutil@empty\else\iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi}},
only horizontal first to center/.style={to path={
\pgfextra
- \let\tikz@origtotarget\tikztotarget
+ \let\tikzext@origtotarget\tikztotarget
\endpgfextra
(\tikztostart) -- (perpendicular cs: horizontal line through={(\tikztostart)},
vertical line through={(\tikztotarget)})
- \tikztonodes \ifx\tikz@origtotarget\pgfutil@empty\else\iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi}}%
+ \tikztonodes \ifx\tikzext@origtotarget\pgfutil@empty\else\iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi}}%
}
\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex
index 7cad25e42b..aa732ab835 100644
--- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex
@@ -1,3 +1,10 @@
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
% This is the TikZ library patterns.images
% Load with \usetikzlibrary{patterns.images}
%
@@ -8,13 +15,13 @@
% - use image as pattern=<name>
% - image as pattern=<opt arguments for \pgftext>
-\def\pgfsetupimageaspattern{\pgfutil@ifnextchar[\qrr@pgfsetupimageaspattern{\qrr@pgfsetupimageaspattern[]}}
-\def\qrr@pgfsetupimageaspattern[#1]#2#3{% #1 = options
+\def\pgfsetupimageaspattern{\pgfutil@ifnextchar[\tikzext@pgfsetupimageaspattern{\tikzext@pgfsetupimageaspattern[]}}
+\def\tikzext@pgfsetupimageaspattern[#1]#2#3{% #1 = options
% #2 = image name
% #3 = file name
- \pgfdeclareimage[#1]{qrr@pgf@iap@#2}{#3}%
- \sbox\pgfutil@tempboxa{\pgfuseimage{qrr@pgf@iap@#2}}%
- \expandafter\edef\csname qrr@pgf@iap@#2@\endcsname{{\the\wd\pgfutil@tempboxa}{\the\ht\pgfutil@tempboxa}}%
+ \pgfdeclareimage[#1]{tikzext@pgf@iap@#2}{#3}%
+ \sbox\pgfutil@tempboxa{\pgfuseimage{tikzext@pgf@iap@#2}}%
+ \expandafter\edef\csname tikzext@pgf@iap@#2@\endcsname{{\the\wd\pgfutil@tempboxa}{\the\ht\pgfutil@tempboxa}}%
}
\tikzset{
image as pattern/name/.initial=,
@@ -22,13 +29,13 @@
image as pattern/options/.style={/tikz/image as pattern/option/.append style={#1}},
image as pattern/.default=,
image as pattern/.code={
- \tikzset{image as pattern/.cd,#1}
+ \pgfqkeys{/tikz/image as pattern}{#1}%
\pgfkeysgetvalue{/tikz/image as pattern/name}\tikz@temp
\pgfutil@ifxempty\tikz@temp{%
\tikzerror{You need to specify a name for the ``image-pattern'' to be used.}%
}{%
- \edef\tikz@tempa{\expandafter\expandafter\expandafter\pgfutil@firstoftwo\csname qrr@pgf@iap@\tikz@temp @\endcsname}%
- \edef\tikz@tempb{\expandafter\expandafter\expandafter\pgfutil@secondoftwo\csname qrr@pgf@iap@\tikz@temp @\endcsname}%
+ \edef\tikz@tempa{\expandafter\expandafter\expandafter\pgfutil@firstoftwo\csname tikzext@pgf@iap@\tikz@temp @\endcsname}%
+ \edef\tikz@tempb{\expandafter\expandafter\expandafter\pgfutil@secondoftwo\csname tikzext@pgf@iap@\tikz@temp @\endcsname}%
\pgfkeysalso{/tikz/path picture={%
\pgf@process{\pgfpointanchor{path picture bounding box}{north east}}%
\pgf@xa\pgf@x\pgf@ya\pgf@y
@@ -37,7 +44,7 @@
\pgfutil@loop
{%
\pgfutil@loop
- \expandafter\pgftext\expandafter[/tikz/image as pattern/option,at=\pgfqpoint{\pgf@xb}{\pgf@yb}]{\pgfuseimage{qrr@pgf@iap@\tikz@temp}}%
+ \expandafter\pgftext\expandafter[/tikz/image as pattern/option,at=\pgfqpoint{\pgf@xb}{\pgf@yb}]{\pgfuseimage{tikzext@pgf@iap@\tikz@temp}}%
\ifdim\pgf@yb<\pgf@ya
\advance\pgf@yb\tikz@tempb
\pgfutil@repeat
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex
index a29d4ace64..98de181c27 100644
--- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex
@@ -66,7 +66,7 @@
\tikzset{east above/.code =\tikz@lib@place@handle@{#1}{south east}{0}{1}{north east}{1}}
\tikzset{east below/.code=\tikz@lib@place@handle@{#1}{north east}{0}{-1}{south east}{1}}
-\newif\ifqrr@tikz@lib@place@postransform
+\newif\iftikzext@tikz@lib@place@postransform
\tikzset{node distance transformation/.is if=qrr@tikz@lib@place@postransform}
\def\tikz@lib@place@handle@@#1#2#3#4{%
\pgfutil@in@{of }{#1}%
@@ -81,7 +81,7 @@
\expandafter\tikz@lib@place@parse@nums\expandafter{\tikz@lib@place@nums}%
\pgf@x=#2\pgf@x
\pgf@y=#3\pgf@y
- \ifqrr@tikz@lib@place@postransform
+ \iftikzext@tikz@lib@place@postransform
\pgf@pos@transform{\pgf@x}{\pgf@y}% change from original
\fi
\edef\tikz@lib@pos@call{\noexpand\pgftransformshift{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}%
@@ -91,7 +91,7 @@
\def\tikz@lib@place@handle@#1#2#3#4#5#6{%
\pgfutil@in@{:}{#1}%
\ifpgfutil@in@
- \tikz@lib@place@handle@qrr@#1\tikz@stop
+ \tikzext@lib@place@handle@#1\tikz@stop
\ifx\pgf@temp\pgfutil@empty
\let\pgf@temp\tikz@node@distance
\fi
@@ -107,24 +107,24 @@
\expandafter\tikz@lib@place@handle@@\expandafter{\tikz@temp}{#3}{#4}{#5}%
\fi
}
-\def\tikz@lib@place@handle@qrr@#1:#2\tikz@stop{%
+\def\tikzext@lib@place@handle@#1:#2\tikz@stop{%
\pgfutil@in@{and}{#1}%
\ifpgfutil@in@
- \tikz@lib@place@handle@qrr@@#1\tikz@stop
+ \tikzext@lib@place@handle@@#1\tikz@stop
\else
- \tikz@lib@place@handle@qrr@@#1and#1\tikz@stop
+ \tikzext@lib@place@handle@@#1and#1\tikz@stop
\fi
\def\pgf@temp{#2}%
}
-\def\tikz@lib@place@handle@qrr@@#1and#2\tikz@stop{%
+\def\tikzext@lib@place@handle@@#1and#2\tikz@stop{%
\def\pgf@tempa{#1}%
\def\pgf@tempb{#2}%
}
-\def\qrr@xyshift@starred#1#2#3{%
+\def\tikzext@xyshift@starred#1#2#3{%
\edef\tikz@marshal{\noexpand\pgfutil@in@{and}{\tikz@node@distance}}%
\tikz@marshal
\ifpgfutil@in@
- \expandafter\tikz@lib@place@handle@qrr@@\tikz@node@distance\tikz@stop
+ \expandafter\tikzext@lib@place@handle@@\tikz@node@distance\tikz@stop
\else
\let#3\tikz@node@distance
\fi
@@ -144,8 +144,8 @@
\pgftransformshift{\pgfqpoint{\pgf@x}{\pgf@y}}%
\fi}
\tikzset{
- xshift*/.code=\qrr@xyshift@starred{#1}x\pgf@tempb,
- yshift*/.code=\qrr@xyshift@starred{#1}y\pgf@tempa
+ xshift*/.code=\tikzext@xyshift@starred{#1}x\pgf@tempb,
+ yshift*/.code=\tikzext@xyshift@starred{#1}y\pgf@tempa
}
\def\pgfutil@firstofmany#1#2\pgf@stop{#1}
@@ -233,7 +233,7 @@
\begingroup
\edef\pgfmath@temp{\noexpand\pgfutil@in@{and}{\tikz@node@distance}}%
\pgfmath@temp\ifpgfutil@in@
- \expandafter\tikz@lib@place@handle@qrr@@\tikz@node@distance\tikz@stop
+ \expandafter\tikzext@lib@place@handle@@\tikz@node@distance\tikz@stop
\else
\let\pgf@tempb\tikz@node@distance
\fi
@@ -245,7 +245,7 @@
\begingroup
\edef\pgfmath@temp{\noexpand\pgfutil@in@{and}{\tikz@node@distance}}%
\pgfmath@temp\ifpgfutil@in@
- \expandafter\tikz@lib@place@handle@qrr@@\tikz@node@distance\tikz@stop
+ \expandafter\tikzext@lib@place@handle@@\tikz@node@distance\tikz@stop
\else
\let\pgf@tempa\tikz@node@distance
\fi
@@ -256,7 +256,7 @@
%\tikzdeclarecoordinatesystem{node distance}{%
% \tikz@cs@nd#1\tikz@stop}
%\def\tikz@cs@nd#1,#2\tikz@stop{%
-% \def\qrr@xyshift@starred@action##1{\pgftransformshift{##1}}%
-% \qrr@xyshift@starred{#1}x\pgf@tempb
-% \qrr@xyshift@starred{#2}y\pgf@tempa}
+% \def\tikzext@xyshift@starred@action##1{\pgftransformshift{##1}}%
+% \tikzext@xyshift@starred{#1}x\pgf@tempb
+% \tikzext@xyshift@starred{#2}y\pgf@tempa}
\endinput
diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex
index c235cd179c..026b39ab2f 100644
--- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex
@@ -10,61 +10,121 @@
mirror/.code={%
\pgfutil@in@{--}{#1}%
\ifpgfutil@in@
- \tikz@trans@mirror#1\@nil
+ \tikzext@trans@mirror#1\tikz@stop
\else
- \tikz@scan@one@point\pgfqtransformmirror#1\relax
+ \tikz@addtransform{\tikz@scan@one@point\pgfqtransformmirror#1\relax}%
\fi},
- ymirror/.code={\pgfutil@ifnextchar(\tikz@trans@ymirror@coordinate\tikz@trans@ymirror@simple#1\@nil},
- xmirror/.code={\pgfutil@ifnextchar(\tikz@trans@xmirror@coordinate\tikz@trans@xmirror@simple#1\@nil},
+ ymirror/.code={\pgfutil@ifnextchar(\tikzext@trans@ymirror@coordinate\tikzext@trans@ymirror@simple#1\tikz@stop},
+ xmirror/.code={\pgfutil@ifnextchar(\tikzext@trans@xmirror@coordinate\tikzext@trans@xmirror@simple#1\tikz@stop},
mirror x/.code={%
\pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}%
- \pgftransformmirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{0}{1}}}},
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformmirror
+ {\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfqpointxy{0}{1}}}}}%
+ \tikz@marshal
+ },
mirror y/.code={%
\pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}%
- \pgftransformmirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{1}{0}}}},
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformmirror
+ {\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfqpointxy{1}{0}}}}}%
+ \tikz@marshal
+ },
mirror/.value required,
- ymirror/.value required,
- xmirror/.value required,
- mirror x/.value required,
- mirror y/.value required}
-\def\tikz@trans@mirror#1--#2\@nil{%
- \pgftransformmirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax}
- {\tikz@scan@one@point\pgfutil@firstofone#2\relax}}
-\def\tikz@trans@xmirror@simple#1\@nil{\pgftransformxmirror{#1}}
-\def\tikz@trans@ymirror@simple#1\@nil{\pgftransformymirror{#1}}
-\def\tikz@trans@xmirror@coordinate#1\@nil{%
- \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformxmirror{+\the\pgf@x}}
-\def\tikz@trans@ymirror@coordinate#1\@nil{%
- \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformymirror{+\the\pgf@y}}
+ ymirror/.default=+0pt,
+ xmirror/.default=+0pt,
+ mirror x/.default={(0,0)},
+ mirror y/.default={(0,0)}%
+}
+\def\tikzext@trans@mirror#1--#2\tikz@stop{%
+ \tikz@addtransform{%
+ \pgftransformmirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax}
+ {\tikz@scan@one@point\pgfutil@firstofone#2\relax}}}
+\def\tikzext@trans@xmirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformxmirror{#1}}}
+\def\tikzext@trans@ymirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformymirror{#1}}}
+\def\tikzext@trans@xmirror@coordinate#1\tikz@stop{%
+ \tikz@scan@one@point\pgfutil@firstofone#1\relax
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformxmirror{+\the\pgf@x}%
+ }%
+ }%
+ \tikz@marshal
+}
+\def\tikzext@trans@ymirror@coordinate#1\tikz@stop{%
+ \tikz@scan@one@point\pgfutil@firstofone#1\relax
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformymirror{+\the\pgf@y}%
+ }%
+ }%
+ \tikz@marshal
+}
\tikzset{
Mirror/.code={%
\pgfutil@in@{--}{#1}%
\ifpgfutil@in@
- \tikz@trans@Mirror#1\@nil
+ \tikzext@trans@Mirror#1\tikz@stop
\else
- \tikz@scan@one@point\pgfqtransformMirror#1\relax
+ \tikz@addtransform{\tikz@scan@one@point\pgfqtransformMirror#1\relax}%
\fi},
- yMirror/.code={\pgfutil@ifnextchar(\tikz@trans@yMirror@coordinate\tikz@trans@yMirror@simple#1\@nil},
- xMirror/.code={\pgfutil@ifnextchar(\tikz@trans@xMirror@coordinate\tikz@trans@xMirror@simple#1\@nil},
+ yMirror/.code={\pgfutil@ifnextchar(\tikzext@trans@yMirror@coordinate\tikzext@trans@yMirror@simple#1\tikz@stop},
+ xMirror/.code={\pgfutil@ifnextchar(\tikzext@trans@xMirror@coordinate\tikzext@trans@xMirror@simple#1\tikz@stop},
Mirror x/.code={%
\pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}%
- \pgftransformMirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{0}{1}}}},
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformMirror
+ {\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfqpointxy{0}{1}}}}}%
+ \tikz@marshal
+ },
Mirror y/.code={%
\pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}%
- \pgftransformMirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{1}{0}}}},
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformMirror
+ {\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp}
+ {\noexpand\pgfqpointxy{1}{0}}}}}%
+ \tikz@marshal
+ },
Mirror/.value required,
- yMirror/.value required,
- xMirror/.value required,
- Mirror x/.value required,
- Mirror y/.value required}
-\def\tikz@trans@Mirror#1--#2\@nil{%
- \pgftransformMirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax}
- {\tikz@scan@one@point\pgfutil@firstofone#2\relax}}
-\def\tikz@trans@xMirror@simple#1\@nil{\pgftransformxMirror{#1}}
-\def\tikz@trans@yMirror@simple#1\@nil{\pgftransformyMirror{#1}}
-\def\tikz@trans@xMirror@coordinate#1\@nil{%
- \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformxMirror{+\the\pgf@x}}
-\def\tikz@trans@yMirror@coordinate#1\@nil{%
- \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformyMirror{+\the\pgf@y}}
+ yMirror/.default=+0pt,
+ xMirror/.default=+0pt,
+ Mirror x/.default={(0,0)},
+ Mirror y/.default={(0,0)}%
+}
+\def\tikzext@trans@Mirror#1--#2\tikz@stop{%
+ \tikz@addtransform{%
+ \pgftransformMirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax}
+ {\tikz@scan@one@point\pgfutil@firstofone#2\relax}}}
+\def\tikzext@trans@xMirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformxMirror{#1}}}
+\def\tikzext@trans@yMirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformyMirror{#1}}}
+\def\tikzext@trans@xMirror@coordinate#1\tikz@stop{%
+ \tikz@scan@one@point\pgfutil@firstofone#1\relax
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformxMirror{+\the\pgf@x}%
+ }%
+ }%
+ \tikz@marshal
+}
+\def\tikzext@trans@yMirror@coordinate#1\tikz@stop{%
+ \tikz@scan@one@point\pgfutil@firstofone#1\relax
+ \edef\tikz@marshal{%
+ \noexpand\tikz@addtransform{%
+ \noexpand\pgftransformyMirror{+\the\pgf@y}%
+ }%
+ }%
+ \tikz@marshal
+}
\endinput
diff --git a/language/sanskrit/README.md b/language/sanskrit/README.md
index 8e322822e0..ff98ffd9d0 100644
--- a/language/sanskrit/README.md
+++ b/language/sanskrit/README.md
@@ -134,6 +134,7 @@ History
- Revision 2.0 1996/11/27 Charles Wikner wikner@nacdh4.nac.ac.za
- Revision 2.2 2002/01/02 Charles Wikner wikner@nac.ac.za
- Revision 2.2.1 2016/09/01 Václav Haisman vhaisman@gmail.com
+- Revision 2.2.2 2017/02/22 Václav Haisman vhaisman@gmail.com
I, Václav Haisman, am only a maintainer pro tempore. If you are reading this
and you have patches to submit and actual interest in and knowledge of
diff --git a/language/sanskrit/README.pdf b/language/sanskrit/README.pdf
index b7f220d38a..f7184dc0fc 100644
--- a/language/sanskrit/README.pdf
+++ b/language/sanskrit/README.pdf
Binary files differ
diff --git a/language/sanskrit/build-ctan-dist.sh b/language/sanskrit/build-ctan-dist.sh
index b2ce5d400e..57dd958ab3 100755
--- a/language/sanskrit/build-ctan-dist.sh
+++ b/language/sanskrit/build-ctan-dist.sh
@@ -8,9 +8,8 @@ command_exists() {
}
if command_exists pandoc ; then
- pandoc --smart \
- --verbose \
- -f markdown-raw_tex \
+ pandoc --verbose \
+ -f markdown+smart-raw_tex \
-t latex \
-o README.pdf \
README.md
diff --git a/language/sanskrit/ps-type1 b/language/sanskrit/ps-type1
deleted file mode 120000
index 6d74ac0e27..0000000000
--- a/language/sanskrit/ps-type1
+++ /dev/null
@@ -1 +0,0 @@
-../../fonts/ps-type1/sanskrit \ No newline at end of file
diff --git a/language/sanskrit/ps-type1/README b/language/sanskrit/ps-type1/README
new file mode 100644
index 0000000000..ceb494f1df
--- /dev/null
+++ b/language/sanskrit/ps-type1/README
@@ -0,0 +1,152 @@
+%
+% README.TXT
+%
+% Revision 1.0 2004/08/24 Sergey Korop svk@lib.ru
+% Revision 1.1 2005/01/23 Sergey Korop svk@lib.ru
+%
+
+sanskrit-t1
+===========
+
+This package extends ``Sanskrit for LaTeX2e'' package with skt-series' fonts
+in Type 1 format.
+
+
+The ``Sanskrit for LaTeX2e'' package (referred as 'origin' in the text below)
+was created by Charles Wikner and it is available from the CTAN:
+
+ CTAN:language/sanskrit
+
+
+CONTENTS OF THIS README FILE
+============================
+
+1. License.
+
+2. Requirements.
+
+3. Revision History.
+
+4. Technical Issues.
+
+5. Installation.
+
+6. Feedback.
+
+
+
+
+LICENSE
+=======
+
+This package should be distributed and used together with it's origin
+under the terms specified for that origin by Charles Wikner. Currently
+(as for version 2.0 of the origin) it is LaTeX Project Public License.
+
+
+REQUIREMENTS
+============
+
+TeX system capable for producing PostScript/PDF files (e.g. system including
+dvips, pdfTeX or similar software).
+
+
+The files that you should have are:
+
+readme.txt This file.
+sktdoc.pdf Documentation of origin typesetted using Type 1 fonts.
+skt.map Configuration file for dvips and pdfTeX program.
+skt8.pfb PS Type 1 font file for skt font at 8pt upright.
+skt9.pfb PS Type 1 font file for skt font at 9pt upright.
+skt10.pfb PS Type 1 font file for skt font at 10pt upright.
+sktb10.pfb PS Type 1 font file for skt font at 10pt upright bold.
+sktf10.pfb PS Type 1 font file for skt font at 10pt upright feint.
+skts10.pfb PS Type 1 font file for skt font at 10pt slanted.
+sktbs10.pfb PS Type 1 font file for skt font at 10pt bold slanted.
+sktfs10.pfb PS Type 1 font file for skt font at 10pt feint slanted.
+
+
+REVISION HISTORY
+================
+ * Revision 1.0 2004/08/24 Sergey Korop svk@lib.ru
+
+ Initial release.
+
+ * Revision 1.1 2005/01/23 Sergey Korop svk@lib.ru
+
+ Fixed incompatibility with dvips: changed /FullName and /FontName
+ font properties to match PS Font names specified in the map file.
+ Thanks to Mr. Hartmut Henkel for bugreport and proposed solution.
+
+TECHNICAL ISSUES
+================
+
+ 1. There are no UniqueIDs for the fonts provided in this package.
+ According to Type 1 font specs, this is allowed feature, but
+ it may probably confuse some font processing software and/or
+ hardware. However, I think that using no UniqueID is better
+ than guessing one with risk of collision.
+
+ 2. Fonts were generated from METAFONT sources automagically using
+ textrace program. Due to the nature of this process, some
+ discrepancies with original fonts may appear.
+
+ 3. To ensure backward compatibility, always make sure that you are
+ using the same versions of *.pfb files and their *.mf origins.
+
+ 4. Names of PostScript fonts (i.e. /FullName, /FontName, etc) don't
+ match the names of original TeX fonts. I'm not sure this was the
+ best possible solution, but proposed names are:
+
+ -- self-explainatory (i.e one can always identify the origin);
+
+ -- preventing from possible name collision;
+
+ -- matching PostScript naming conventions, e.g. contain distinct
+ Font Family and Weight parts.
+
+
+INSTALLATION
+============
+
+Depends from TeX system you use. Users of pdfTeX distributed with
+teTeX or fpTeX may try following steps:
+
+ IMPORTANT: I can't predict the configuration of your system,
+ so use the commands below at your own risk.
+
+ 1. Put the files of this package into appropriate directories:
+
+ skt.map -> .../texmf/dvips/config/
+ *.pfb -> .../texmf/fonts/type1/sanskrit/
+
+ the name 'sanskrit' for font directory is not mandatory and may
+ be changed if you need.
+
+ 2. Run:
+
+ texhash
+
+ kpsewhich skt10.pfb
+
+ to make sure your TeX software has access to those files. The last
+ command should output the full path to appropriate font file,
+ if nothing appeared, consult your local TeXnicians.
+
+ NOTE: don't run kpsewhich directly in the font directory --- this won't
+ show you the real picture.
+
+ 3. Locate your pfdtex.cfg file (either global or private) and add following
+ line:
+
+ map +skt.map
+
+This should make outline skt fonts available for docs produced by pdfTeX.
+
+
+FEEDBACK
+========
+
+Suggestions and bug reports to: Sergey Korop, <svk@lib.ru>. Please note
+that since I'm neither professional font designer nor experienced TeXnician,
+I will probably be unable to fulfill your requests.
diff --git a/language/sanskrit/ps-type1/skt.map b/language/sanskrit/ps-type1/skt.map
new file mode 100644
index 0000000000..eb309ef70d
--- /dev/null
+++ b/language/sanskrit/ps-type1/skt.map
@@ -0,0 +1,8 @@
+skt10 WiknerSanskrit10-Upright <skt10.pfb
+sktb10 WiknerSanskrit10-BoldUpright <sktb10.pfb
+sktbs10 WiknerSanskrit10-BoldSlanted <sktbs10.pfb
+sktf10 WiknerSanskrit10-FeintUpright <sktf10.pfb
+sktfs10 WiknerSanskrit10-FeintSlanted <sktfs10.pfb
+skts10 WiknerSanskrit10-Slanted <skts10.pfb
+skt9 WiknerSanskrit9-Upright <skt9.pfb
+skt8 WiknerSanskrit8-Upright <skt8.pfb
diff --git a/language/sanskrit/ps-type1/skt10.pfb b/language/sanskrit/ps-type1/skt10.pfb
new file mode 100644
index 0000000000..2c86c5e03a
--- /dev/null
+++ b/language/sanskrit/ps-type1/skt10.pfb
Binary files differ
diff --git a/language/sanskrit/ps-type1/skt8.pfb b/language/sanskrit/ps-type1/skt8.pfb
new file mode 100644
index 0000000000..07e6ab86f6
--- /dev/null
+++ b/language/sanskrit/ps-type1/skt8.pfb
Binary files differ
diff --git a/language/sanskrit/ps-type1/skt9.pfb b/language/sanskrit/ps-type1/skt9.pfb
new file mode 100644
index 0000000000..1821c0f09f
--- /dev/null
+++ b/language/sanskrit/ps-type1/skt9.pfb
Binary files differ
diff --git a/language/sanskrit/ps-type1/sktb10.pfb b/language/sanskrit/ps-type1/sktb10.pfb
new file mode 100644
index 0000000000..bea443b2e1
--- /dev/null
+++ b/language/sanskrit/ps-type1/sktb10.pfb
Binary files differ
diff --git a/language/sanskrit/ps-type1/sktbs10.pfb b/language/sanskrit/ps-type1/sktbs10.pfb
new file mode 100644
index 0000000000..1077f2e15f
--- /dev/null
+++ b/language/sanskrit/ps-type1/sktbs10.pfb
Binary files differ
diff --git a/language/sanskrit/ps-type1/sktdoc.pdf b/language/sanskrit/ps-type1/sktdoc.pdf
new file mode 100644
index 0000000000..d07f80df8e
--- /dev/null
+++ b/language/sanskrit/ps-type1/sktdoc.pdf
Binary files differ
diff --git a/language/sanskrit/ps-type1/sktf10.pfb b/language/sanskrit/ps-type1/sktf10.pfb
new file mode 100644
index 0000000000..db7d418b7d
--- /dev/null
+++ b/language/sanskrit/ps-type1/sktf10.pfb
Binary files differ
diff --git a/language/sanskrit/ps-type1/sktfs10.pfb b/language/sanskrit/ps-type1/sktfs10.pfb
new file mode 100644
index 0000000000..29c55d6f0d
--- /dev/null
+++ b/language/sanskrit/ps-type1/sktfs10.pfb
Binary files differ
diff --git a/language/sanskrit/ps-type1/skts10.pfb b/language/sanskrit/ps-type1/skts10.pfb
new file mode 100644
index 0000000000..5a52b2f17c
--- /dev/null
+++ b/language/sanskrit/ps-type1/skts10.pfb
Binary files differ
diff --git a/language/sanskrit/skt.c b/language/sanskrit/skt.c
index 5e76a632c6..a545d48aa7 100644
--- a/language/sanskrit/skt.c
+++ b/language/sanskrit/skt.c
@@ -15,6 +15,9 @@
/* Revision 2.1 1997/02/11 minor corrections; add more accents */
/* Revision 2.2 2002/01/02 minor corrections; tidy */
/* Revision 2.2.1 2016-08-31 compilation and other fixes */
+/* Revision 2.2.2 2017-02-22 portability and other tweaks */
+/* Revision 2.2.3 2018-02-10 extend working buffers ten times */
+/* Revision 2.2.4 2022-09-24 fix abort on MacOS X */
/* */
/* Copyright 1996 & 2002 Charles Wikner */
/* This program can be redistributed and/or modified under the terms */
@@ -24,7 +27,9 @@
/* */
/******************************************************************************/
+#ifndef DEBUG
#define DEBUG 0
+#endif
/* Set DEBUG 0 for normal */
/* If non-zero, STDIO is used for input/output */
@@ -36,9 +41,9 @@
#include <stdio.h>
#include <ctype.h>
#include <string.h>
+#include <stdlib.h>
/* DECLARE FUNCTIONS */
-void exit (int);
void search (void);
void write_outbuf(void);
void write_line (char *);
@@ -60,10 +65,13 @@ void samyoga (void);
int aci (char *);
void translit (void);
-FILE *infile, *outfile, *fopen();
-char infilename[80];
-char outfilename[80];
-#define FILENAME_SCANF "%79s"
+FILE *infile, *outfile;
+#define FILENAME_LEN 4096
+char infilename[FILENAME_LEN+1];
+char outfilename[FILENAME_LEN+1];
+#define SKT_STRINGIFY2(X) #X
+#define SKT_STRINGIFY(X) SKT_STRINGIFY2(X)
+#define FILENAME_SCANF "%" SKT_STRINGIFY(FILENAME_LEN) "s"
#define TRUE 1
#define FALSE 0
@@ -86,9 +94,13 @@ int err_cnt; /* incremented by any error while in \skt.. */
#define err_max 10 /* after err_max errors, program aborts */
int line_cnt; /* line number of current input line */
-char inbuf[255]; /* input file line buffer of text being processed */
+#define BUFFER_LENGTH_MULTIPLIER 10
+
+/* input file line buffer of text being processed */
+char inbuf[255*BUFFER_LENGTH_MULTIPLIER];
char *i_ptr; /* general pointer to input buffer */
-char outbuf[2048]; /* output file line buffer of text processed */
+/* output file line buffer of text processed */
+char outbuf[2048*BUFFER_LENGTH_MULTIPLIER];
char *o_ptr; /* general pointer to output buffer */
unsigned char cont_end; /* flag TRUE when line ends with %-continuation */
@@ -99,12 +111,15 @@ unsigned char nasal; /* storage for working nasal character */
unsigned char ac_char; /* storage for working vowel character */
unsigned char pre_ra; /* storage/flag for 'r' at beginning of samyoga */
char ac_hook; /* vowel hook code */
-char sktbuf[255]; /* storage for sanskrit in internal code */
+/* storage for sanskrit in internal code */
+char sktbuf[255*BUFFER_LENGTH_MULTIPLIER];
char *s_ptr; /* general pointer to sanskrit buffer */
char *old_sptr; /* points to samyoga start; used by warning message */
-char work[256]; /* general scratchpad */
+/* general scratchpad */
+char work[256*BUFFER_LENGTH_MULTIPLIER];
char *w_ptr; /* general pointer to work buffer */
-char tmp[2048]; /* temporary buffer for previous syllable */
+/* temporary buffer for previous syllable */
+char tmp[2048*BUFFER_LENGTH_MULTIPLIER];
int wid; /* character print width */
int top; /* amount to backspace for top flags */
int bot; /* amount to backspace for bottom flags */
@@ -152,7 +167,7 @@ main(int argc,
o_ptr = outbuf; *o_ptr = '\0';
for (k=0; k<total_options+1; k++) option[k] = FALSE; /* disable everything */
- printf("SKT.C Version 2.2.1 2016-08-31\n");
+ printf("SKT.C Version 2.2.4 2022-09-24\n");
#if (DEBUG == 0)
@@ -177,11 +192,11 @@ main(int argc,
}
p = strchr(infilename,'.');
if (p == 0) strcat(infilename,".skt"); /* default input file extension */
- if ((infile=fopen(infilename,"r")) == NULL)
+ if ((infile=fopen(infilename,"rb")) == NULL)
{ printf("Cannot open file %s\n",infilename); exit(1); }
p = strchr(outfilename,'.');
if (p == 0) strcat(outfilename,".tex"); /* set default output file extension */
- if ((outfile=fopen(outfilename,"w")) == NULL)
+ if ((outfile=fopen(outfilename,"wb")) == NULL)
{ printf("Cannot open output file %s\n",outfilename); exit(1); }
#else
printf("Enter text (blank line terminates program) :\n");
@@ -287,7 +302,7 @@ char c, d, e;
write_line(outbuf);
*o_ptr = e;
if (c!='\0') { *--o_ptr = d; *--o_ptr = c; } /* restore displaced chars */
- strcpy(outbuf,o_ptr);
+ memmove(outbuf, o_ptr, strlen(o_ptr) + 1);
}
o_ptr = outbuf;
*o_ptr = '\0';
@@ -333,7 +348,6 @@ char * str_find(char *buf, char *str)
void get_line(void)
{
-char *p;
i_ptr = inbuf;
*i_ptr = '\0';
line_cnt++;
@@ -400,9 +414,10 @@ char * command(char *p)
/* of inbuf. */
void error(char *s, int n)
-{ char err_str[80]; int j;
+{ char err_str[80];
if (++err_cnt <= err_max)
- { if (n > 0) { for (j=0; j<n; j++) err_str[j] = *(i_ptr+j);
+ { if (n > 0) { int j;
+ for (j=0; j<n; j++) err_str[j] = *(i_ptr+j);
err_str[j] = '\0';
}
if (n == 0) { strcpy(err_str,"oct(");
@@ -423,15 +438,22 @@ void error(char *s, int n)
/* Function: process input text within {\skt.., converting to internal */
/* format in sktbuf */
-#define ISAC(c) (((strchr("aAiIuUwWxXeEoO",c) != 0) && c) ? TRUE : FALSE)
+#define ISAC(c) (((c) && (strchr("aAiIuUwWxXeEoO",(c)) != 0)) ? TRUE : FALSE)
+
+void
+cat(char * w, char const * x, int y, char const * z)
+{
+ strcat(w,x);
+ if((y)>9) chrcat(w,('0'+((y)/10)));
+ chrcat(w,('0'+((y)%10)));
+ strcat(w,z);
+}
-#define CAT(w,x,y,z) \
-strcat(w,x); if((y)>9)chrcat(w,('0'+((y)/10))); \
-chrcat(w,('0'+((y)%10))); strcat(w,z)
+#define CAT(w,x,y,z) cat((w),(x),(y),(z));
void process(void)
{ int j,k,cap_flag, underscore, nasal_vowel, n_flag, vedic;
-unsigned char *i, c,d;
+unsigned char c,d;
#define CF ac_flag=svara_flag=ylv_flag=underscore=cap_flag=roman_flag=nasal_vowel=n_flag=vedic=FALSE
#define CC CF; continue
#define CR ac_flag=svara_flag=ylv_flag=underscore=cap_flag=nasal_vowel=n_flag=vedic=FALSE;
@@ -446,7 +468,7 @@ unsigned char *i, c,d;
c = *i_ptr; d = *(i_ptr+1);
/* END OF LINE */
if ((c == '\0') || (c == '\n'))
- { sktword(); strcat (outbuf,i_ptr); write_outbuf(); get_line(); CC; }
+ { sktword(); strcat(outbuf,i_ptr); write_outbuf(); get_line(); CC; }
/* COMMENT DELIMITER */
if (c == '%')
{ if (*(i_ptr+1) == '\n') sktcont();
@@ -462,7 +484,7 @@ unsigned char *i, c,d;
if (c < ' ')
{ error("Illegal control character: ",0); CI; }
/* ADDED IMBEDDED ROMAN */
- if ( (strchr("[`']",c) && c==d) || ((c == '.') && (d == '!')) )
+ if ((c==d && strchr("[`']",c)) || ((c == '.') && (d == '!')) )
{ if (sktbuf[0]) sktword();
if (!xlit) { if (feint) strcat(outbuf,"\\ZF{");
if (bold) strcat(outbuf,"\\ZB{");
@@ -492,7 +514,7 @@ unsigned char *i, c,d;
{ if (*(i_ptr+1) != '.') break;
i_ptr++; continue;
}
- if ((strchr("()*+,-/:;=?",c) && c) == 0) break;
+ if ((c && strchr("()*+,-/:;=?",c)) == 0) break;
}
if (!xlit) strcat(outbuf,"}");
CR; continue;
@@ -734,7 +756,7 @@ unsigned char *i, c,d;
CR;
if (ISAC(c) || c=='\26') ac_flag = TRUE;
/**/
- if (strchr("!\"%()&:;<=>?`\'\27\30\31\32\33\34\35\36\37",c) && c)
+ if (c && strchr("!\"%()&:;<=>?`\'\27\30\31\32\33\34\35\36\37",c))
svara_flag = TRUE;
if ((c == 'y') || (c == 'l') || (c == 'v')) ylv_flag = TRUE;
if (c == 'n') n_flag = TRUE; /* allow accents on letter 'n' */
@@ -783,18 +805,48 @@ void sktcont(void)
/* Function: convert contents of sktbuf to output string in outbuf */
-static char hal_chars[] = "BCDFGJKLNPQRSTVZbcdfghjklmnpqrstvyz";
+static char const hal_chars[] = "BCDFGJKLNPQRSTVZbcdfghjklmnpqrstvyz";
/* internal code for consonants */
-#define ISHAL(c) (((strchr(hal_chars,c) != 0) && c) ? TRUE : FALSE)
+#define ISHAL(c) (((c) && (strchr(hal_chars,(c)) != 0)) ? TRUE : FALSE)
+
+void
+clr_vadata(void)
+{
+ wid=0;
+ top=0;
+ bot=0;
+ dep=0;
+ rldep=0;
+ fbar=0;
+ fwh=0;
+ bwh=0;
+ ra=0;
+ ya=0;
+ bs=0;
+ vaflg=0;
+}
+
+#define CLRVADATA clr_vadata()
-#define CLRVADATA wid=top=bot=dep=rldep=fbar=fwh=bwh=ra=ya=bs=vaflg=0
+void
+clr_flags(void)
+{
+ ac_hook=0;
+ post_ra=0;
+ pre_ra=0;
+ virama=0;
+ bindu=0;
+ candrabindu=0;
+ accent=0;
+ hal_flag=0;
+ post_ya=0;
+}
-#define CLRFLAGS \
-ac_hook=post_ra=pre_ra=virama=bindu=candrabindu=accent=hal_flag=post_ya=0
+#define CLRFLAGS clr_flags();
-#define VA(p,q,r,s,t,u,v,w,x,y,z) \
+#define VA(p,q,r,s,t,u,v,w,x,y,z) do { \
wid+=p; top=q; bot=r; dep=s; rldep=t; if(!vaflg){fbar=u; fwh=v;} bwh=w; \
-ra=x; ya=y; strcat(work,z); vaflg++;
+ra=x; ya=y; strcat(work,z); vaflg++; } while (0)
void sktword(void)
{ char c;
@@ -909,7 +961,7 @@ void fixed(char c)
{
switch(c)
{ case '0': VA(12,0,0, 0,0,0, 3,2,0,0,"0"); break;
- case '1': if (option[61]) { VA(12,0,0, 0,0,0, 2,3,0,0,"@1"); break;}
+ case '1': if (option[61]) { VA(12,0,0, 0,0,0, 2,3,0,0,"@1"); break; }
else { VA(12,0,0, 0,0,0, 3,2,0,0,"1"); break; }
case '2': VA(12,0,0, 0,0,0, 2,2,0,0,"2"); break;
case '3': VA(12,0,0, 0,0,0, 2,2,0,0,"3"); break;
@@ -920,12 +972,12 @@ void fixed(char c)
else { VA(12,0,0, 0,0,0, 3,2,0,0,"5"); break; }
case '6': if (option[66]) { VA(12,0,0, 0,0,0, 3,3,0,0,"@6"); break; }
else { VA(12,0,0, 0,0,0, 2,2,0,0,"6"); break; }
- case '7': VA(12,0,0, 0,0,0, 2,2,0,0,"7"); break;
+ case '7': { VA(12,0,0, 0,0,0, 2,2,0,0,"7"); break; }
case '8': if (option[68]) { VA(12,0,0, 0,0,0, 2,2,0,0,"@8"); break; }
- else VA(12,0,0, 0,0,0, 2,3,0,0,"8"); break;
+ else { VA(12,0,0, 0,0,0, 2,3,0,0,"8"); break; }
case '9': if (option[79]) { VA(12,0,5, 0,0,0, 2,3,0,0,"@2"); break; }
if (option[69]) { VA(12,0,5, 0,0,0, 2,3,0,0,"@9"); break; }
- else VA(12,0,5, 0,0,0, 2,3,0,0,"9"); break;
+ else { VA(12,0,5, 0,0,0, 2,3,0,0,"9"); break; }
case '-': if (option[10] == 0) break; /* discretionary hyphen */
switch (whiteness)
{ case 2: strcat(tmp,"."); break;
@@ -1012,7 +1064,7 @@ void single(void)
case 'H': VA( 7,0,0, 0,0,0, 3,6,0,0,"H"); /* visarga */
if (interspace==5) {strcat(work,"\\ZS{2}"); break;}
if (interspace>5) {strcat(work,"\\ZS{4}"); break;}
- case 'Y': VA(12,0,0, 0,0,0, 2,3,0,0,"Y"); break; /* avagraha */
+ case 'Y': VA(12,0,0, 0,0,0, 2,3,0,0,"Y"); /* avagraha */
if (whiteness < 3) { CAT(tmp,"\\ZS{",2*(3-whiteness),"}"); }
break;
case '$': if (option[61]) {
@@ -1036,7 +1088,7 @@ void single(void)
default: error("Lost in single()",-1);
}
if ( (ac_char != '\26' ) && ( whiteness < 7) )
- { if (strchr("iIuUxXwWeE",ac_char) && ac_char)
+ { if (ac_char && strchr("iIuUxXwWeE",ac_char))
{ switch (interspace - whiteness - fwh)
{ case 1: strcat(tmp,"."); break;
case 2: strcat(tmp,":"); break;
@@ -1125,7 +1177,7 @@ void sam_warning(void)
(ac_hook=='e' || ac_hook=='E' || pre_ra || bindu || candrabindu)
#define TOPACCENT \
-(strchr("!(\":;<=>?\27",accent) && accent)
+(accent && strchr("!(\":;<=>?\27",accent))
#define BOTHOOKS \
(virama || c=='U' || c=='X' || c=='W')
@@ -1135,7 +1187,7 @@ void addhooks(void)
accent = bindu = candrabindu = 0;
c = *s_ptr;
if (c == '#') { candrabindu = TRUE; c = *++s_ptr; }
- if (strchr("!(\"&:;<=>?\27\30\31\32\33\34\35\36",c) && c)
+ if (c && strchr("!(\"&:;<=>?\27\30\31\32\33\34\35\36",c))
{ accent = c; c = *++s_ptr; }
if (c == '#') { candrabindu = TRUE; c = *++s_ptr; }
if ( (c == 'M') || (c == 'R') ) { bindu = TRUE; c = *++s_ptr; }
@@ -1183,8 +1235,8 @@ void addhooks(void)
{ t = 0; if (option[4]) t = 8; if (option[5]) t = 12;
if (option[4] && option[5]) t = 16;
if (t < v) t = v;
- if ( (strchr("eioEIO",ac_char) && ac_char)
- && (strchr("=>?\"\27",accent) && accent) )
+ if ( (ac_char && strchr("eioEIO",ac_char) )
+ && (accent && strchr("=>?\"\27",accent) ) )
{ v=8; if ((accent=='\"') || (accent=='\27')) v=3; }
if (t < v) t = v;
if (t) { CAT(work,"\\ZV{",t,"}{"); }
@@ -1294,7 +1346,7 @@ void addhooks(void)
if (v) strcat(work,"}");
if (bot) strcat(work,"}");
}
- if ( (strchr("&\30\31\32\33\34\35\36",accent) && accent) || (*s_ptr=='%') )
+ if ( (accent && strchr("&\30\31\32\33\34\35\36",accent)) || (*s_ptr=='%') )
{ if (dep > 2) { if (v<0) v=dep-2-v;
else v=dep-2; }
else v=dep;
@@ -1406,7 +1458,7 @@ void backac(void)
/* now set ac_flag according to vowel */
if (c == 'o') ac_hook = 'e';
if (c == 'O') ac_hook = 'E';
- if (strchr("uUeExXwW",c) && c) ac_hook = ac_char;
+ if (c && strchr("uUeExXwW",c)) ac_hook = ac_char;
/* finally add all flags, accents, nasals, and final vertical as necessary */
j=low_right; k=high_right; /* save interference from previous syllable */
addhooks();
@@ -1473,7 +1525,6 @@ void backac(void)
void autohyphen(void)
{
-char *p;
if (option[11] && *s_ptr!='\0' && ac_char
&& !(*s_ptr=='-' && option[10]))
{
@@ -1513,14 +1564,14 @@ switch (bwh)
/* LS : if (string_match && option[a]) VA; */
/* LT : if (string_match && option[a]) { if (option[b]) VA#1 else VA#2 } */
-#define LS(t,u,v,w) n=strlen(t); \
- if((option[u]==0) && (strncmp(p,t,n)==0)) \
- { w; p+=n; v;}
+#define LS(t,u,v,w) { size_t n; \
+ if((option[u]==0) && (strncmp(p,t,n=strlen(t))==0)) \
+ { w; p+=n; v;} }
-#define LT(t,u,v,w,x,y,z) n=strlen(t); \
- if((option[u]==0) && (strncmp(p,t,n)==0)) \
- { if(option[x]==0) { w; p+=n; v; } \
- else { z; p+=n; y; } }
+#define LT(t,u,v,w,x,y,z) { size_t n; \
+ if((option[u]==0) && (strncmp(p,t,n=strlen(t))==0)) \
+ { if(option[x]==0) { w; p+=n; v; } \
+ else { z; p+=n; y; } } }
#define NX sam_flag = 'X'; break;
#define NR sam_flag = 'R'; break;
@@ -1534,7 +1585,7 @@ switch (bwh)
void samyoga(void)
{
-char *p, sam_flag; int j,k,n;
+ char *p, sam_flag;
option[0] = 0;
sam_flag = 0;
p = s_ptr;
@@ -1710,7 +1761,9 @@ char *p, sam_flag; int j,k,n;
LS("jy", 119,NC,VA(20,0,0, 0,2,0, 1,0,6,2,"\\ZM{0Jj0djRdA}*.ay1"));
if(*p=='j') { if (ISHAL(*(p+1)) || option[119]) {
VA(18,0,0, 0,0,0, 1,0,2,1,"j2"); IC; }
- else VA(12,3,3, 2,0,0, 1,3,3,2,"\\ZM{0Jj0djRdA}*.a"); IR; }
+ else {
+ VA(12,3,3, 2,0,0, 1,3,3,2,"\\ZM{0Jj0djRdA}*.a"); IR; }
+ }
LT("J", 0,NR,VA(23,0,0, 0,0,0, 0,3,2,1,"jJ"),
42,NR,VA(25,4,4, 0,2,0, 0,1,1,2,"j1`J"));
LT("V", 0,NC,VA( 8,0,0, 0,0,0, 1,0,3,1,":]"),
@@ -2007,9 +2060,9 @@ char *p, sam_flag; int j,k,n;
LS("n", 157,NR,VA(14,3,3, 0,0,0, 0,3,2,2,"m1\\ZM{hFnaLe}:a"));
LT("l", 158,NR,VA(13,2,1, 2,0,0, 0,1,2,6,"m1\\ZM{aLeDPEDFIhBl}+"),
46,NR,VA(14,3,3, 5,1,0, 0,3,2,2,"m1\\ZM{aLeDdElbL}:a"));
- if (strchr("mr",*p) && *p)
+ if (*p && strchr("mr",*p))
{ VA(10,0,0, 0,1,0, 0,0,4,1,"m"); NC; }
- if (strchr("lbByv",*p) && *p)
+ if (*p && strchr("lbByv",*p))
{ VA( 9,0,0, 0,0,0, 0,0,1,1,"m1"); NC; }
if (ISHAL(*p)) { VA(10,0,0, 0,3,0, 0,0,4,1,"m1\\ZM{cLe}."); NC; }
VA(10,0,0, 0,1,0, 0,0,4,1,"m"); NC;
@@ -2032,10 +2085,10 @@ case 'y':
strcat(work,"\\ZH{-6}{<}");IC;}
NC;
-case 'r':
- j=0;
+case 'r': {
+ int j=0;
if (ra)
- { k=dep;
+ { int k=dep;
if (ra==5) k-=3;
if (bot) j++; if (k) j+=2;
switch (j)
@@ -2060,6 +2113,7 @@ case 'r':
if(*p=='u') { VA( 8,5,4, 0,0,1, 0,0,0,0,"r8"); *p='a'; NX; }
if(*p=='U') { VA(10,7,6, 0,0,1, 0,1,0,0,"r9"); *p='a'; NX; }
VA( 6,3,1, 0,0,1, 0,2,0,0,"="); NX; }
+}
case 'l':
if (option[160]==0) {
@@ -2143,9 +2197,9 @@ case 'v':
LS("nv", 170,NR,VA(19,3,3, 0,2,1, 0,3,6,2,"=\\ZM{fMo0HnHMu}*:a"));
LS("n", 170,NR,VA(12,0,0, 0,1,1, 0,0,2,1,"=+:\\ZM{rMolHneHegMi}"));
LS("r", 0,NC,VA(11,0,0, 0,0,1, 0,0,2,1,"s1\\ZM{aLeDDr}:"));
- if (strchr("sm",*p) && *p) {
+ if (*p && strchr("sm",*p)) {
VA(10,0,0, 0,0,1, 0,0,2,1,"s"); NC; }
- if (strchr("GZCJqNdDpPBrZSh",*p) && *p) {
+ if (*p && strchr("GZCJqNdDpPBrZSh",*p)) {
VA(10,0,0, 0,0,1, 0,0,2,1,"s1\\ZM{cLe}."); NC; }
if (ISHAL(*p)) { VA( 9,0,0, 0,0,1, 0,0,2,1,"s1"); NC; }
VA(10,0,0, 0,0,1, 0,0,2,1,"s"); NC;
@@ -2173,7 +2227,7 @@ case 'h':
VA(10,0,0, 0,2,0, 0,0,2,1,"L2"); NC; }
if(ISHAL(*p)) {
VA(11,0,0, 0,0,0, 0,0,2,1,"L2."); NC; }
- else VA(10,0,0, 0,2,0, 0,0,2,1,"L2"); NC; }
+ else { VA(10,0,0, 0,2,0, 0,0,2,1,"L2"); NC; } }
if(ISHAL(*p)) { VA(10,3,3, 0,0,0, 0,0,3,1,"L1"); NC; }
VA(10,3,3, 0,3,0, 0,0,3,1,"L" ); NX;
@@ -2207,19 +2261,26 @@ int aci(char *p)
/* Function: transliterate contents of sktbuf, output result in outbuf */
-#define SWITCHFLAG(Y,Z) switch(flag) \
- { case 0: strcat(outbuf,Y); break; \
- case 1: if (tech) strcat(outbuf,"\\ZX{"); strcat(outbuf,Z); \
- if (tech) strcat(outbuf,"}"); break; \
- case 2: strcat(outbuf,"\\ZW{"); strcat(outbuf,Y); \
- strcat(outbuf,"}"); break; \
- case 3: strcat(outbuf,"\\ZY{"); strcat(outbuf,Z); \
- strcat(outbuf,"}"); break; \
- } flag=0
+void
+switch_flag(char const * Y, char const * Z, int * flag) {
+ switch (*flag) {
+ case 0: strcat(outbuf,Y); break;
+ case 1: if (tech) strcat(outbuf,"\\ZX{"); strcat(outbuf,Z);
+ if (tech) strcat(outbuf,"}"); break;
+ case 2: strcat(outbuf,"\\ZW{"); strcat(outbuf,Y);
+ strcat(outbuf,"}"); break;
+ case 3: strcat(outbuf,"\\ZY{"); strcat(outbuf,Z);
+ strcat(outbuf,"}"); break;
+ }
+ *flag=0;
+}
+
+#define SWITCHFLAG(Y,Z) switch_flag((Y), (Z), &flag)
+
#define XLIT(X,Y,Z) case X: SWITCHFLAG(Y,Z); break
-#define STACK(X,Y,Z) case X: ISTACK(X,Y,Z)
+#define STACK(X,Y,Z) case X: ISTACK(X,Y,Z); break
#define ISTACK(X,Y,Z) c=0; if(*p=='#'){c+=30; if(option[38]) c+=30; p++;} \
switch(*p) \
@@ -2240,7 +2301,7 @@ int aci(char *p)
else { if(option[11] && (*p!='\0') && !(*p=='-' && option[10])) \
strcat(outbuf,"\\-"); } \
} \
- break
+
#define NASAL(X,Y,Z) case X: if (*p == '#') strcat(outbuf,"\\~{"); \
SWITCHFLAG(Y,Z); \
@@ -2330,9 +2391,9 @@ char c, *p;
/* now for the vowels with stacked nasal and accent */
- case 'i': if (strchr("!`'\"(#\27",*p) && *p) { ISTACK('i',"{\\i}","I"); }
+ case 'i': if (*p && strchr("!`'\"(#\27",*p)) { ISTACK('i',"{\\i}","I"); }
else { ISTACK('i',"i","I"); } break;
- case 'E': if (strchr("!`'\"(#\27",*p) && *p) { ISTACK('E',"{a\\i}","AI"); }
+ case 'E': if (*p && strchr("!`'\"(#\27",*p)) { ISTACK('E',"{a\\i}","AI"); }
else { ISTACK('E',"ai","AI"); } break;
@@ -2346,7 +2407,7 @@ char c, *p;
case 'w': if (option[26])
{ save = flag; SWITCHFLAG("lr\\llap{\\d{\\kern.51em}}","L\\d R");
- flag = save; if ( strchr("!\"#$%&'():;<=>?`",*p) && *p)
+ flag = save; if ( *p && strchr("!\"#$%&'():;<=>?`",*p))
{ ISTACK('w',"{\\i}","I"); break; }
ISTACK('w',"i","I"); break; }
ISTACK('w',"\\d l","\\d L"); break;
@@ -2358,7 +2419,7 @@ char c, *p;
case 'x': if (option[25])
{ save = flag; SWITCHFLAG("r\\llap{\\d{\\kern.51em}}","\\d R");
- flag = save; if (strchr("!\"#$%&'():;<=>?`",*p) && *p)
+ flag = save; if (*p && strchr("!\"#$%&'():;<=>?`",*p))
{ ISTACK('x',"{\\i}","I"); break; }
ISTACK('x',"i","I"); break; }
ISTACK('x',"r\\llap{\\d{\\kern.51em}}","\\d R"); break;
diff --git a/language/sanskrit/sktdoc.pdf b/language/sanskrit/sktdoc.pdf
index de5e14ce77..d07f80df8e 100644
--- a/language/sanskrit/sktdoc.pdf
+++ b/language/sanskrit/sktdoc.pdf
Binary files differ
diff --git a/language/sanskrit/sktdoc.ps b/language/sanskrit/sktdoc.ps
index 3718ca2e75..38c9f3bfb8 100644
--- a/language/sanskrit/sktdoc.ps
+++ b/language/sanskrit/sktdoc.ps
@@ -1,7 +1,7 @@
%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.996 Copyright 2016 Radical Eye Software
+%%Creator: dvips(k) 2022.1 (TeX Live 2022) Copyright 2022 Radical Eye Software
%%Title: sktdoc.dvi
-%%CreationDate: Wed Jan 11 18:40:00 2017
+%%CreationDate: Sat Sep 24 15:28:29 2022
%%Pages: 38
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 792
@@ -16,7 +16,7 @@
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -o sktdoc.ps sktdoc.dvi
%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2017.01.11:1839
+%DVIPSSource: TeX output 2022.09.24:1728
%%BeginProcSet: tex.pro 0 0
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -65,6 +65,414 @@ B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p
0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
%%EndProcSet
+%%BeginProcSet: l3backend-dvips.pro 0 0
+%%
+%% This is file `l3backend-dvips.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3backend-header.dtx (with options: `header,dvips')
+%%
+%% Copyright (C) 2019-2022 The LaTeX Project
+%%
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version. The latest
+%% version of this license is in the file:
+%%
+%% https://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3backend bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% File: l3backend-header.dtx
+/color.sc { } def
+TeXDict begin
+/TeXcolorseparation { setcolor } def
+end
+true setglobal
+/pdf.globaldict 4 dict def
+false setglobal
+/pdf.cvs { 65534 string cvs } def
+/pdf.dvi.pt { 72.27 mul Resolution div } def
+/pdf.pt.dvi { 72.27 div Resolution mul } def
+/pdf.rect.ht { dup 1 get neg exch 3 get add } def
+/pdf.linkmargin { 1 pdf.pt.dvi } def
+/pdf.linkdp.pad { 0 } def
+/pdf.linkht.pad { 0 } def
+/pdf.rect
+ { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def
+/pdf.save.ll
+ {
+ currentpoint
+ /pdf.lly exch def
+ /pdf.llx exch def
+ }
+ def
+/pdf.save.ur
+ {
+ currentpoint
+ /pdf.ury exch def
+ /pdf.urx exch def
+ }
+ def
+/pdf.save.linkll
+ {
+ currentpoint
+ pdf.linkmargin add
+ pdf.linkdp.pad add
+ /pdf.lly exch def
+ pdf.linkmargin sub
+ /pdf.llx exch def
+ }
+ def
+/pdf.save.linkur
+ {
+ currentpoint
+ pdf.linkmargin sub
+ pdf.linkht.pad sub
+ /pdf.ury exch def
+ pdf.linkmargin add
+ /pdf.urx exch def
+ }
+ def
+/pdf.dest.anchor
+ {
+ currentpoint exch
+ pdf.dvi.pt 72 add
+ /pdf.dest.x exch def
+ pdf.dvi.pt
+ vsize 72 sub exch sub
+ /pdf.dest.y exch def
+ }
+ def
+/pdf.dest.point
+ { pdf.dest.x pdf.dest.y } def
+/pdf.dest2device
+ {
+ /pdf.dest.y exch def
+ /pdf.dest.x exch def
+ matrix currentmatrix
+ matrix defaultmatrix
+ matrix invertmatrix
+ matrix concatmatrix
+ cvx exec
+ /pdf.dev.y exch def
+ /pdf.dev.x exch def
+ /pdf.tmpd exch def
+ /pdf.tmpc exch def
+ /pdf.tmpb exch def
+ /pdf.tmpa exch def
+ pdf.dest.x pdf.tmpa mul
+ pdf.dest.y pdf.tmpc mul add
+ pdf.dev.x add
+ pdf.dest.x pdf.tmpb mul
+ pdf.dest.y pdf.tmpd mul add
+ pdf.dev.y add
+ }
+ def
+/pdf.bordertracking false def
+/pdf.bordertracking.begin
+ {
+ SDict /pdf.bordertracking true put
+ SDict /pdf.leftboundary undef
+ SDict /pdf.rightboundary undef
+ /a where
+ {
+ /a
+ {
+ currentpoint pop
+ SDict /pdf.rightboundary known dup
+ {
+ SDict /pdf.rightboundary get 2 index lt
+ { not }
+ if
+ }
+ if
+ { pop }
+ { SDict exch /pdf.rightboundary exch put }
+ ifelse
+ moveto
+ currentpoint pop
+ SDict /pdf.leftboundary known dup
+ {
+ SDict /pdf.leftboundary get 2 index gt
+ { not }
+ if
+ }
+ if
+ { pop }
+ { SDict exch /pdf.leftboundary exch put }
+ ifelse
+ }
+ put
+ }
+ if
+ }
+ def
+/pdf.bordertracking.end
+ {
+ /a where { /a { moveto } put } if
+ /x where { /x { 0 exch rmoveto } put } if
+ SDict /pdf.leftboundary known
+ { pdf.outerbox 0 pdf.leftboundary put }
+ if
+ SDict /pdf.rightboundary known
+ { pdf.outerbox 2 pdf.rightboundary put }
+ if
+ SDict /pdf.bordertracking false put
+ }
+ def
+ /pdf.bordertracking.endpage
+{
+ pdf.bordertracking
+ {
+ pdf.bordertracking.end
+ true setglobal
+ pdf.globaldict
+ /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put
+ pdf.globaldict
+ /pdf.brokenlink.skip pdf.baselineskip put
+ pdf.globaldict
+ /pdf.brokenlink.dict
+ pdf.link.dict pdf.cvs put
+ false setglobal
+ mark pdf.link.dict cvx exec /Rect
+ [
+ pdf.llx
+ pdf.lly
+ pdf.outerbox 2 get pdf.linkmargin add
+ currentpoint exch pop
+ pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub
+ ]
+ /ANN pdf.pdfmark
+ }
+ if
+}
+ def
+/pdf.bordertracking.continue
+ {
+ /pdf.link.dict pdf.globaldict
+ /pdf.brokenlink.dict get def
+ /pdf.outerbox pdf.globaldict
+ /pdf.brokenlink.rect get def
+ /pdf.baselineskip pdf.globaldict
+ /pdf.brokenlink.skip get def
+ pdf.globaldict dup dup
+ /pdf.brokenlink.dict undef
+ /pdf.brokenlink.skip undef
+ /pdf.brokenlink.rect undef
+ currentpoint
+ /pdf.originy exch def
+ /pdf.originx exch def
+ /a where
+ {
+ /a
+ {
+ moveto
+ SDict
+ begin
+ currentpoint pdf.originy ne exch
+ pdf.originx ne or
+ {
+ pdf.save.linkll
+ /pdf.lly
+ pdf.lly pdf.outerbox 1 get sub def
+ pdf.bordertracking.begin
+ }
+ if
+ end
+ }
+ put
+ }
+ if
+ /x where
+ {
+ /x
+ {
+ 0 exch rmoveto
+ SDict
+ begin
+ currentpoint
+ pdf.originy ne exch pdf.originx ne or
+ {
+ pdf.save.linkll
+ /pdf.lly
+ pdf.lly pdf.outerbox 1 get sub def
+ pdf.bordertracking.begin
+ }
+ if
+ end
+ }
+ put
+ }
+ if
+ }
+ def
+/pdf.breaklink
+ {
+ pop
+ counttomark 2 mod 0 eq
+ {
+ counttomark /pdf.count exch def
+ {
+ pdf.count 0 eq { exit } if
+ counttomark 2 roll
+ 1 index /Rect eq
+ {
+ dup 4 array copy
+ dup dup
+ 1 get
+ pdf.outerbox pdf.rect.ht
+ pdf.linkmargin 2 mul add sub
+ 3 exch put
+ dup
+ pdf.outerbox 2 get
+ pdf.linkmargin add
+ 2 exch put
+ dup dup
+ 3 get
+ pdf.outerbox pdf.rect.ht
+ pdf.linkmargin 2 mul add add
+ 1 exch put
+ /pdf.currentrect exch def
+ pdf.breaklink.write
+ {
+ pdf.currentrect
+ dup
+ pdf.outerbox 0 get
+ pdf.linkmargin sub
+ 0 exch put
+ dup
+ pdf.outerbox 2 get
+ pdf.linkmargin add
+ 2 exch put
+ dup dup
+ 1 get
+ pdf.baselineskip add
+ 1 exch put
+ dup dup
+ 3 get
+ pdf.baselineskip add
+ 3 exch put
+ /pdf.currentrect exch def
+ pdf.breaklink.write
+ }
+ 1 index 3 get
+ pdf.linkmargin 2 mul add
+ pdf.outerbox pdf.rect.ht add
+ 2 index 1 get sub
+ pdf.baselineskip div round cvi 1 sub
+ exch
+ repeat
+ pdf.currentrect
+ dup
+ pdf.outerbox 0 get
+ pdf.linkmargin sub
+ 0 exch put
+ dup dup
+ 1 get
+ pdf.baselineskip add
+ 1 exch put
+ dup dup
+ 3 get
+ pdf.baselineskip add
+ 3 exch put
+ dup 2 index 2 get 2 exch put
+ /pdf.currentrect exch def
+ pdf.breaklink.write
+ SDict /pdf.pdfmark.good false put
+ exit
+ }
+ { pdf.count 2 sub /pdf.count exch def }
+ ifelse
+ }
+ loop
+ }
+ if
+ /ANN
+}
+ def
+/pdf.breaklink.write
+ {
+ counttomark 1 sub
+ index /_objdef eq
+ {
+ counttomark -2 roll
+ dup wcheck
+ {
+ readonly
+ counttomark 2 roll
+ }
+ { pop pop }
+ ifelse
+ }
+ if
+ counttomark 1 add copy
+ pop pdf.currentrect
+ /ANN pdfmark
+ }
+ def
+/pdf.pdfmark
+ {
+ SDict /pdf.pdfmark.good true put
+ dup /ANN eq
+ {
+ pdf.pdfmark.store
+ pdf.pdfmark.dict
+ begin
+ Subtype /Link eq
+ currentdict /Rect known and
+ SDict /pdf.outerbox known and
+ SDict /pdf.baselineskip known and
+ {
+ Rect 3 get
+ pdf.linkmargin 2 mul add
+ pdf.outerbox pdf.rect.ht add
+ Rect 1 get sub
+ pdf.baselineskip div round cvi 0 gt
+ { pdf.breaklink }
+ if
+ }
+ if
+ end
+ SDict /pdf.outerbox undef
+ SDict /pdf.baselineskip undef
+ currentdict /pdf.pdfmark.dict undef
+ }
+ if
+ pdf.pdfmark.good
+ { pdfmark }
+ { cleartomark }
+ ifelse
+ }
+ def
+/pdf.pdfmark.store
+ {
+ /pdf.pdfmark.dict 65534 dict def
+ counttomark 1 add copy
+ pop
+ {
+ dup mark eq
+ {
+ pop
+ exit
+ }
+ {
+ pdf.pdfmark.dict
+ begin def end
+ }
+ ifelse
+ }
+ loop
+}
+ def
+%%
+%%
+%% End of file `l3backend-dvips.pro'.
+
+%%EndProcSet
%%BeginProcSet: texps.pro 0 0
%!
TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
@@ -11201,30 +11609,30 @@ TeXcolorgray 144 297 a FG(Con)l(ten)l(ts)144 660 y FF(In)m(tro)s
(duction)2786 b FH(3)144 926 y FF(Upgrading)39 b(from)f(V)-9
b(ersion)37 b(1)2123 b FH(3)144 1191 y FF(Illustrations)38
b(of)g(Input)f(and)i(Dev)-6 b(an)o(\026)-55 b(agar)-12
-b(\026)-44 b(\020)39 b(Output)1180 b FH(4)144 1456 y
-FF(Illustrations)38 b(of)g(Basic)f(T)-9 b(ransliteration)1629
+b(\026)-44 b(\020)39 b(Output)1176 b FH(4)144 1456 y
+FF(Illustrations)38 b(of)g(Basic)f(T)-9 b(ransliteration)1625
b FH(4)144 1721 y FF(Illustrations)38 b(of)g(T)-9 b(ec)m(hnical)38
b(T)-9 b(ransliteration)1426 b FH(5)144 1986 y FF(V)-9
b(edic)37 b(Accen)m(t)g(Marking)2306 b FH(6)144 2252
-y FF(Dynamic)39 b(Option)e(Selection)2119 b FH(7)144
+y FF(Dynamic)39 b(Option)e(Selection)2115 b FH(7)144
2517 y FF(Con)m(trol)37 b(Options)h(\(0{11\))2260 b FH(8)144
2782 y FF(T)-9 b(ransliteration)38 b(Options)g(\(20{38\))1782
b FH(10)144 3047 y FF(Dev)-6 b(an)o(\026)-55 b(agar)-12
-b(\026)-44 b(\020)39 b(Character)f(Options)g(\(40{79\))1437
+b(\026)-44 b(\020)39 b(Character)f(Options)g(\(40{79\))1433
b FH(11)144 3312 y FF(Dev)-6 b(an)o(\026)-55 b(agar)-12
b(\026)-44 b(\020)39 b(Sam)878 3338 y(.)940 3312 y(y)m(oga)f(Options)g
-(\(100{199\))1381 b FH(11)144 3577 y FF(The)38 b(Pre-pro)s(cessor:)50
-b(skt.c)2131 b FH(14)144 3843 y FF(The)38 b(skt)f(pac)m(k)-6
+(\(100{199\))1377 b FH(11)144 3577 y FF(The)38 b(Pre-pro)s(cessor:)50
+b(skt.c)2127 b FH(14)144 3843 y FF(The)38 b(skt)f(pac)m(k)-6
b(age:)51 b(skt.st)m(y)2140 b FH(15)144 4108 y FF(Supplemen)m(tary)39
-b(Notes)2276 b FH(15)144 4373 y FF(Installation)2783
+b(Notes)2276 b FH(15)144 4373 y FF(Installation)2779
b FH(17)144 4638 y FF(Sample)39 b(T)-9 b(ext)37 b(from)h(R)1089
4663 y(.)1146 4638 y(gv)m(eda)h(10.125.)1672 b FH(20)p
0 TeXcolorgray 1846 5061 a(1)p 0 TeXcolorgray eop end
%%Page: 2 3
TeXDict begin 2 2 bop 0 TeXcolorgray 0 TeXcolorgray 0
TeXcolorgray 144 292 a FF(Sample)39 b(T)-9 b(ext)37 b(from)h(S)o(\026)
--55 b(ama)m(v)m(eda)1936 b FH(21)144 557 y FF(Sam)292
-582 y(.)354 557 y(y)m(oga)38 b(T)-9 b(able)2601 b FH(24)p
+-55 b(ama)m(v)m(eda)1932 b FH(21)144 557 y FF(Sam)292
+582 y(.)354 557 y(y)m(oga)38 b(T)-9 b(able)2597 b FH(24)p
0 TeXcolorgray 1846 5061 a(2)p 0 TeXcolorgray eop end
%%Page: 3 4
TeXDict begin 3 3 bop 0 TeXcolorgray 0 TeXcolorgray 0
@@ -11685,63 +12093,63 @@ TeXcolorgray 144 297 a FG(Con)l(trol)46 b(Options)f(\(0{11\))141
563 y FE(The)34 b(con)m(trol)g(options)f(are)h(all)f(those)h(that)f(do)
g(not)h(a\013ect)f(c)m(haracter)h(shap)s(es)h(in)f(transliter-)144
683 y(ation)e(or)h FD(devan\026)-50 b(agar)-10 b(\026)-40
-b(\020)p FE(.)404 964 y FF(Option)38 b(0:)43 b FE(Set)33
-b(all)g(options)g(to)f(kno)m(wn)i(state.)p 144 870 3473
-4 v 144 1010 4 142 v 3613 1010 V 144 1012 3473 4 v 144
-1132 a(In)43 b(do)s(cumen)m(ts)h(suc)m(h)g(as)f(this)g(one,)i(where)f
+b(\020)p FE(.)404 971 y FF(Option)38 b(0:)43 b FE(Set)33
+b(all)g(options)g(to)f(kno)m(wn)i(state.)p 144 877 3473
+4 v 144 1017 4 142 v 3613 1017 V 144 1019 3473 4 v 144
+1138 a(In)43 b(do)s(cumen)m(ts)h(suc)m(h)g(as)f(this)g(one,)i(where)f
(the)f(options)g(are)g(c)m(hanged)g(v)m(ery)h(often,)h(it)e(is)144
-1252 y(useful)37 b(from)f(time)h(to)e(time)i(to)f(reset)h(all)f
+1259 y(useful)37 b(from)f(time)h(to)e(time)i(to)f(reset)h(all)f
(options)g(to)g(the)g(default)h(state.)54 b(Option)36
-b FB(0+)h FE(will)144 1373 y(select)d(all)f(options,)g(and)f(option)h
-FB(0-)g FE(will)g(deselect)i(them)e(all.)404 1658 y FF(Option)38
+b FB(0+)h FE(will)144 1379 y(select)d(all)f(options,)g(and)f(option)h
+FB(0-)g FE(will)g(deselect)i(them)e(all.)404 1671 y FF(Option)38
b(1:)43 b FE(Set)33 b(in)m(traspace)h(less)g(than)f(in)m(terspace.)404
-1779 y FF(Option)38 b(2:)43 b FE(Reduce)34 b(in)m(terspace.)404
-1899 y FF(Option)k(3:)43 b FE(Minim)m(um)35 b(in)m(terspace.)p
-144 1564 V 144 1945 4 383 v 3613 1945 V 144 1947 3473
-4 v 141 2071 a(These)27 b(three)f(in)m(teract)g(to)f(set)h(the)g
+1792 y FF(Option)38 b(2:)43 b FE(Reduce)34 b(in)m(terspace.)404
+1912 y FF(Option)k(3:)43 b FE(Minim)m(um)35 b(in)m(terspace.)p
+144 1577 V 144 1958 4 383 v 3613 1958 V 144 1960 3473
+4 v 141 2084 a(These)27 b(three)f(in)m(teract)g(to)f(set)h(the)g
(horizon)m(tal)g(space)g(within)g FD(devan\026)-50 b(agar)-10
b(\026)-40 b(\020)31 b FE(w)m(ords:)41 b(options)26 b(2)144
-2192 y(and)d(3)g(pro)m(vide)i(three)f(lev)m(els)h(of)e(in)m(terspace)i
+2205 y(and)d(3)g(pro)m(vide)i(three)f(lev)m(els)h(of)e(in)m(terspace)i
(\(the)f(space)g(b)s(et)m(w)m(een)i(syllables\),)h(while)d(option)g(1)
-144 2312 y(selects)31 b(the)e(in)m(traspace)h(\(space)f(within)h(a)e
+144 2325 y(selects)31 b(the)e(in)m(traspace)h(\(space)f(within)h(a)e
(syllable,)j(i.e.)e(when)h(the)f(syllable)h(v)m(o)m(w)m(el)g(adds)g(an)
-144 2433 y(extra)j(v)m(ertical)h(bar\).)p 1189 2516 527
-4 v 194 2648 a(Illustration:)p 1187 2706 4 193 v 557
-w(1)p 1362 2706 V 126 w(2)p 1538 2706 V 127 w(3)p 1713
-2706 V 1189 2709 1856 4 v 1187 2898 4 193 v 1252 2841
-a({)p 1362 2898 V 126 w({)p 1538 2898 V 127 w({)p 1713
-2898 V 113 w FH(A;ea;\016a;ma;tyea;ta;d;[a:=+\016a;ma;d)s(>)55
-b(.sa;vRa;m,a)p 3043 2898 V 194 3033 a FE(Option)33 b(selection:)p
-1187 3091 V 324 w(+)p 1362 3091 V 113 w({)p 1538 3091
-V 127 w({)p 1713 3091 V 113 w FH
+144 2446 y(extra)j(v)m(ertical)h(bar\).)p 1189 2529 527
+4 v 194 2661 a(Illustration:)p 1187 2719 4 193 v 557
+w(1)p 1362 2719 V 126 w(2)p 1538 2719 V 127 w(3)p 1713
+2719 V 1189 2722 1856 4 v 1187 2911 4 193 v 1252 2853
+a({)p 1362 2911 V 126 w({)p 1538 2911 V 127 w({)p 1713
+2911 V 113 w FH(A;ea;\016a;ma;tyea;ta;d;[a:=+\016a;ma;d)s(>)55
+b(.sa;vRa;m,a)p 3043 2911 V 194 3046 a FE(Option)33 b(selection:)p
+1187 3104 V 324 w(+)p 1362 3104 V 113 w({)p 1538 3104
+V 127 w({)p 1713 3104 V 113 w FH
(A:ea;\015a:ma;tyea;ta;d;[a:=+\015a:ma;d)s(>)52 b(.sa;vRa;m,a)p
-3043 3091 V 215 3226 a FE(+)i(=)32 b(selected;)p 1187
-3284 V 443 w({)p 1362 3284 V 113 w(+)p 1538 3284 V 113
-w({)p 1713 3284 V 113 w FH(A:ea:\015a:ma:tyea:ta:d:[a.=;\015a:ma:d>)49
-b(.sa:vRa:m,a)p 3043 3284 V 229 3418 a FE({)67 b(=)32
-b(deselected;)p 1187 3476 V 332 w(+)p 1362 3476 V 100
-w(+)p 1538 3476 V 113 w({)p 1713 3476 V 113 w FH
+3043 3104 V 215 3239 a FE(+)i(=)32 b(selected;)p 1187
+3296 V 443 w({)p 1362 3296 V 113 w(+)p 1538 3296 V 113
+w({)p 1713 3296 V 113 w FH(A:ea:\015a:ma:tyea:ta:d:[a.=;\015a:ma:d>)49
+b(.sa:vRa:m,a)p 3043 3296 V 229 3431 a FE({)67 b(=)32
+b(deselected;)p 1187 3489 V 332 w(+)p 1362 3489 V 100
+w(+)p 1538 3489 V 113 w({)p 1713 3489 V 113 w FH
(A.ea:\014a.ma:tyea:ta:d:[a.=;\014a.ma:d>)49 b(.sa:vRa:m,a)p
-3043 3476 V 227 3611 a FE(x)67 b(=)32 b(don't)h(care.)p
-1187 3669 V 344 w({)p 1362 3669 V 125 w(x)p 1538 3669
-V 112 w(+)p 1713 3669 V 100 w FH
+3043 3489 V 227 3624 a FE(x)67 b(=)32 b(don't)h(care.)p
+1187 3682 V 344 w({)p 1362 3682 V 125 w(x)p 1538 3682
+V 112 w(+)p 1713 3682 V 100 w FH
(A.ea:\014a.ma.tyea.ta.d.[a=:\014a.ma.d>)50 b(.sa.vRa.m,a)p
-3043 3669 V 1187 3861 V 1238 3804 a FE(+)p 1362 3861
-V 112 w(x)p 1538 3861 V 112 w(+)p 1713 3861 V 100 w FH
+3043 3682 V 1187 3874 V 1238 3816 a FE(+)p 1362 3874
+V 112 w(x)p 1538 3874 V 112 w(+)p 1713 3874 V 100 w FH
(Aea:\013ama.tyea.ta.d.[a=:\013ama.d>)h(.sa.vRa.m,a)p
-3043 3861 V 1189 3865 1856 4 v 404 4133 a FF(Option)38
+3043 3874 V 1189 3878 1856 4 v 404 4153 a FF(Option)38
b(4:)43 b FE(Raise)33 b(accen)m(ts)i(\(less)e(signi\014can)m(t)h
-(bit\).)404 4254 y FF(Option)k(5:)43 b FE(Raise)33 b(accen)m(ts)i
-(\(more)d(signi\014can)m(t)i(bit\).)p 144 4034 3473 4
-v 144 4305 4 274 v 3613 4305 V 144 4307 3473 4 v 141
-4431 a(These)25 b(t)m(w)m(o)g(adjust)f(the)g(minim)m(um)i(spacing)e(of)
+(bit\).)404 4273 y FF(Option)k(5:)43 b FE(Raise)33 b(accen)m(ts)i
+(\(more)d(signi\014can)m(t)i(bit\).)p 144 4053 3473 4
+v 144 4324 4 274 v 3613 4324 V 144 4326 3473 4 v 141
+4451 a(These)25 b(t)m(w)m(o)g(adjust)f(the)g(minim)m(um)i(spacing)e(of)
g FD(devan\026)-50 b(agar)-10 b(\026)-40 b(\020)30 b
FE(accen)m(ts)25 b(ab)s(o)m(v)m(e)g(the)f(hortizon)m(tal)144
-4552 y(line,)j(and)d(ma)m(y)h(b)s(e)g(used)g(to)f(minimize)j(or)d
+4571 y(line,)j(and)d(ma)m(y)h(b)s(e)g(used)g(to)f(minimize)j(or)d
(eliminate)h(the)g(v)-5 b(ariation)24 b(in)g(the)h(accen)m(t's)h(v)m
-(ertical)144 4672 y(p)s(osition)46 b(that)f(arises)h(due)g(to)f(v)m(o)m
+(ertical)144 4692 y(p)s(osition)46 b(that)f(arises)h(due)g(to)f(v)m(o)m
(w)m(el)i(ho)s(oks)f(etc.)g(ab)s(o)m(v)m(e)g(the)g(horizon)m(tal)f
-(line)16 b(|)g(this)47 b(is)144 4793 y(particularly)33
+(line)16 b(|)g(this)47 b(is)144 4812 y(particularly)33
b(imp)s(ortan)m(t)g(for)f(the)h FD(S\026)-50 b(amave)-5
b(da)31 b FE(accen)m(ts.)p 0 TeXcolorgray 1846 5061 a
FH(8)p 0 TeXcolorgray eop end
@@ -11784,41 +12192,41 @@ y(a;h;e)2399 1101 y(\022)2399 1147 y(a)g(\272)2514 1101
y(\026)2549 1147 y(;Bye)2658 1101 y(\024)2670 1147 y(a;\013a;t)2778
1101 y(\023)2778 1147 y(a)59 b(:=)-17 b(e)2884 1101 y(\021)2901
1147 y(+B)2982 1101 y(\022)2982 1147 y(a;n,a)34 b(\301)17
-b(\301)p 3178 1190 V 1189 1193 1992 4 v 404 1348 a FF(Option)38
-b(6:)43 b FE(Enable)34 b FD(R)1253 1369 y(.)1309 1348
-y(g/T)-7 b(ait)1579 1312 y Fh(\016)1650 1348 y FE(accen)m(ts)34
-b(in)f(basic)g(transliteration)g(mo)s(de.)p 144 1249
-3473 4 v 144 1400 4 153 v 3613 1400 V 144 1402 3473 4
-v 141 1526 a(The)e(pre-pro)s(cessor)g(treats)f(the)h(use)g(of)f(these)h
+b(\301)p 3178 1190 V 1189 1193 1992 4 v 404 1388 a FF(Option)38
+b(6:)43 b FE(Enable)34 b FD(R)1253 1408 y(.)1309 1388
+y(g/T)-7 b(ait)1579 1352 y Fh(\016)1650 1388 y FE(accen)m(ts)34
+b(in)f(basic)g(transliteration)g(mo)s(de.)p 144 1288
+3473 4 v 144 1439 4 153 v 3613 1439 V 144 1441 3473 4
+v 141 1566 a(The)e(pre-pro)s(cessor)g(treats)f(the)h(use)g(of)f(these)h
(accen)m(ts)h(in)e(the)h(basic)g(transliteration)f(mo)s(de)144
-1647 y(as)g(as)f(an)h(error)f(unless)i(this)f(option)g(is)g(selected.)
+1686 y(as)g(as)f(an)h(error)f(unless)i(this)f(option)g(is)g(selected.)
44 b(The)31 b(form)e(of)g(the)h(accen)m(ts)h(appro)m(ximates)144
-1767 y(those)i(of)f(the)h FD(devan\026)-50 b(agar)-10
-b(\026)-40 b(\020)p FE(.)144 1979 y(Illustration:)581
+1806 y(those)i(of)f(the)h FD(devan\026)-50 b(agar)-10
+b(\026)-40 b(\020)p FE(.)144 2018 y(Illustration:)581
b FH(;Da;a;t!a:=+a;y\027a;ntua)55 b(.s!a;vRa;t!aH)65
b(.~va;a;h;)-17 b(\027)17 b(\027a)35 b(\301)52 b
(:pr!a;\013a;t!a;ve!a;Za;e\027a;\016a;s!a)37 b(\301)52
-b(:pra)f(ma;\027a)h(:pa;d)3381 1973 y(\371)3415 1979
-y(\305)-17 b(;a;~ya)35 b(\301)17 b(\301)1001 2128 y FD(dh\026)-50
-b(at)p 0 TeXcolorgray 1189 2145 30 5 v 0 TeXcolorgray
+b(:pra)f(ma;\027a)h(:pa;d)3381 2012 y(\371)3415 2018
+y(\305)-17 b(;a;~ya)35 b(\301)17 b(\301)1001 2167 y FD(dh\026)-50
+b(at)p 0 TeXcolorgray 1189 2184 30 5 v 0 TeXcolorgray
0 TeXcolorgray(a)p 0 TeXcolorgray(r\026)g(ay)p 0 TeXcolorgray
-1403 2076 a Ft(\020)p 0 TeXcolorgray 0 TeXcolorgray 1371
-2128 a FD(a)p 0 TeXcolorgray(ntu)35 b(s)p 0 TeXcolorgray
-1641 2145 V 0 TeXcolorgray 0 TeXcolorgray(a)p 0 TeXcolorgray(rvat)p
-0 TeXcolorgray 1859 2145 V 0 TeXcolorgray 0 TeXcolorgray(a)p
-0 TeXcolorgray(h)1907 2148 y(.)1988 2128 y(sv\026)-50
-b(ah)p 0 TeXcolorgray 2200 2063 a Ft(\020\020)p 0 TeXcolorgray
-0 TeXcolorgray 2173 2128 a FD(\026)g(a)p 0 TeXcolorgray
-15 w FC(j)34 b FD(pr)p 0 TeXcolorgray 2397 2145 V 0 TeXcolorgray
+1403 2116 a Ft(\020)p 0 TeXcolorgray 0 TeXcolorgray 1371
+2167 a FD(a)p 0 TeXcolorgray(ntu)35 b(s)p 0 TeXcolorgray
+1641 2184 V 0 TeXcolorgray 0 TeXcolorgray(a)p 0 TeXcolorgray(rvat)p
+0 TeXcolorgray 1859 2184 V 0 TeXcolorgray 0 TeXcolorgray(a)p
+0 TeXcolorgray(h)1907 2188 y(.)1988 2167 y(sv\026)-50
+b(ah)p 0 TeXcolorgray 2200 2103 a Ft(\020\020)p 0 TeXcolorgray
+0 TeXcolorgray 2173 2167 a FD(\026)g(a)p 0 TeXcolorgray
+15 w FC(j)34 b FD(pr)p 0 TeXcolorgray 2397 2184 V 0 TeXcolorgray
0 TeXcolorgray(a)p 0 TeXcolorgray(t)p 0 TeXcolorgray
-2469 2145 V 0 TeXcolorgray 0 TeXcolorgray(i)p 0 TeXcolorgray(v)p
-0 TeXcolorgray 2551 2145 V 0 TeXcolorgray 0 TeXcolorgray(e)p
+2469 2184 V 0 TeXcolorgray 0 TeXcolorgray(i)p 0 TeXcolorgray(v)p
+0 TeXcolorgray 2551 2184 V 0 TeXcolorgray 0 TeXcolorgray(e)p
0 TeXcolorgray -5 w(\023)-45 b(s)p 0 TeXcolorgray 2664
-2076 a Ft(\020)p 0 TeXcolorgray 0 TeXcolorgray 2633 2128
-a FD(o)p 0 TeXcolorgray(s)p 0 TeXcolorgray 2719 2145
+2116 a Ft(\020)p 0 TeXcolorgray 0 TeXcolorgray 2633 2167
+a FD(o)p 0 TeXcolorgray(s)p 0 TeXcolorgray 2719 2184
V 0 TeXcolorgray 0 TeXcolorgray(i)p 0 TeXcolorgray 16
w FC(j)34 b FD(pr)-5 b(a)35 b(m)p 0 TeXcolorgray 3116
-2063 a Ft(\020)p 0 TeXcolorgray 0 TeXcolorgray 3082 2128
+2103 a Ft(\020)p 0 TeXcolorgray 0 TeXcolorgray 3082 2167
a FD(\026)-50 b(a)p 0 TeXcolorgray 34 w(p)-5 b(adyasya)16
b FC(jj)404 2385 y FF(Option)38 b(7:)43 b FE(Enable)34
b FD(S\026)-50 b(amave)-5 b(da)31 b FE(etc.)i(accen)m(ts)h(in)f(basic)g
@@ -11875,17 +12283,17 @@ a Ft(3k)p 0 TeXcolorgray 0 TeXcolorgray 2926 3209 a FD(a)p
3328 3136 a Ft(1)p 0 TeXcolorgray 0 TeXcolorgray 3301
3209 a FD(e)p 0 TeXcolorgray(bh)p 0 TeXcolorgray 3470
3136 a Ft(2)p 0 TeXcolorgray 0 TeXcolorgray 3441 3209
-a FD(a)p 0 TeXcolorgray -1 w(n)16 b FC(jj)404 3465 y
-FF(Option)38 b(8:)43 b FE(Enable)34 b FD(sam)1347 3486
-y(.)1407 3465 y(yo)-5 b(ga)32 b FE(w)m(arnings.)p 144
-3372 V 144 3513 4 143 v 3613 3513 V 144 3515 3473 4 v
-141 3634 a(This)j(enables)h(the)e(prin)m(ting)h(of)f(w)m(arning)h
+a FD(a)p 0 TeXcolorgray -1 w(n)16 b FC(jj)404 3426 y
+FF(Option)38 b(8:)43 b FE(Enable)34 b FD(sam)1347 3447
+y(.)1407 3426 y(yo)-5 b(ga)32 b FE(w)m(arnings.)p 144
+3332 V 144 3474 4 143 v 3613 3474 V 144 3476 3473 4 v
+141 3595 a(This)j(enables)h(the)e(prin)m(ting)h(of)f(w)m(arning)h
(messages)h(b)m(y)f(the)f(pre-pro)s(cessor)i(when)f(using)g(a)138
-3754 y FD(vir\026)-50 b(ama)32 b FE(in)i(forming)f(a)g
-FD(sam)1133 3775 y(.)1193 3754 y(yo)-5 b(ga)p FE(.)45
-b(Giv)m(en)34 b(the)g(range)f(of)g FD(sam)2391 3775 y(.)2451
-3754 y(yo)-5 b(ga)33 b FE(supp)s(orted)h(b)m(y)g(the)g(fon)m(t,)144
-3875 y(this)f(w)m(arning)h(should)f(only)g(o)s(ccur)g(with)g(v)m(ery)h
+3715 y FD(vir\026)-50 b(ama)32 b FE(in)i(forming)f(a)g
+FD(sam)1133 3735 y(.)1193 3715 y(yo)-5 b(ga)p FE(.)45
+b(Giv)m(en)34 b(the)g(range)f(of)g FD(sam)2391 3735 y(.)2451
+3715 y(yo)-5 b(ga)33 b FE(supp)s(orted)h(b)m(y)g(the)g(fon)m(t,)144
+3835 y(this)f(w)m(arning)h(should)f(only)g(o)s(ccur)g(with)g(v)m(ery)h
(exotic)g(syllables.)404 4042 y FF(Option)k(9:)43 b FE(Enable)34
b(ob)s(ey-lines.)p 144 3948 V 144 4088 4 142 v 3613 4088
V 144 4090 3473 4 v 144 4210 a(Long)f(lines)i(to)e(the)h(output)g
@@ -11910,101 +12318,101 @@ b(discretionary)g(h)m(yphens.)p 144 198 3473 4 v 144
338 4 142 v 3613 338 V 144 340 3473 4 v 139 459 a(Without)54
b(this)g(option)f(enabled,)59 b(the)54 b(pre-pro)s(cessor)g(will)g
(discard)h(an)m(y)f(discretionary)144 580 y(h)m(yphens,)35
-b FB(\\-)p FE(,)e(in)g(the)g(input)g(text.)404 747 y
+b FB(\\-)p FE(,)e(in)g(the)g(input)g(text.)404 841 y
FF(Option)38 b(11:)43 b FE(Enable)34 b(auto-h)m(yphenation.)p
-144 653 V 144 793 4 142 v 3613 793 V 144 795 3473 4 v
-141 949 a(The)45 b(auto-h)m(yphenation)g(is)f(extremely)j(crude)e(\(it)
-f(adds)h(a)f(discretionary)i(h)m(yphen)g(after)144 1069
-y(ev)m(ery)35 b(v)m(o)m(w)m(el!\),)f(and)f(should)g(only)g(b)s(e)g
-(used)h(for)e(drafts.)144 1416 y FG(T)-11 b(ransliteration)47
-b(Options)e(\(20{38\))141 1682 y FE(The)33 b(follo)m(wing)g(table)g
+144 747 V 144 887 4 142 v 3613 887 V 144 889 3473 4 v
+141 1043 a(The)45 b(auto-h)m(yphenation)g(is)f(extremely)j(crude)e
+(\(it)f(adds)h(a)f(discretionary)i(h)m(yphen)g(after)144
+1163 y(ev)m(ery)35 b(v)m(o)m(w)m(el!\),)f(and)f(should)g(only)g(b)s(e)g
+(used)h(for)e(drafts.)144 1510 y FG(T)-11 b(ransliteration)47
+b(Options)e(\(20{38\))141 1776 y FE(The)33 b(follo)m(wing)g(table)g
(illustrates)h(the)f(transliteration)g(options)g(a)m(v)-5
-b(ailable:)p 144 1760 1595 4 v 142 1878 4 121 v 194 1841
-a(option)p 513 1878 V 165 w(input)p 972 1878 V 166 w(default)p
-1367 1878 V 100 w(option)p 1737 1878 V 144 1881 1595
-4 v 142 1998 4 121 v 281 1962 a(20)p 513 1998 V 288 w
-FB(a~m)p 972 1998 V 286 w FD(a)15 b(~)-65 b(m)1175 1982
-y(.)p 1367 1998 V 1489 1962 a(am)1558 1982 y(.)p 1737
-1998 V 142 2118 V 281 2082 a FE(21)p 513 2118 V 288 w
-FB(a~m)p 972 2118 V 286 w FD(a)15 b(~)-65 b(m)1175 2103
-y(.)p 1367 2118 V 1489 2082 a(a)24 b(_)-55 b(m)p 1737
-2118 V 142 2239 V 281 2203 a FE(22)p 513 2239 V 288 w
-FB(a.m)p 972 2239 V 286 w FD(am)1175 2223 y(.)p 1367
-2239 V 1489 2203 a(a)24 b(_)-55 b(m)p 1737 2239 V 142
-2359 V 281 2323 a FE(23)p 513 2359 V 288 w FB(a"m)p 972
-2359 V 286 w FD(a)25 b(_)-55 b(m)p 1367 2359 V 253 w(am)1558
-2343 y(.)p 1737 2359 V 144 2362 2985 4 v 142 2483 4 121
-v 281 2447 a FE(24)p 513 2483 V 288 w FB(a"m)p 972 2483
-V 286 w FD(a)25 b(_)-55 b(m)p 1367 2483 V 265 w(an)1537
-2514 y(\026)p 1737 2483 V 3127 2483 V 142 2603 V 281
-2567 a FE(25)p 513 2603 V 186 w FB(.r/.r.r)p 972 2603
-V 183 w FD(r)1100 2587 y(.)1146 2567 y(/)l(\026)-45 b(r)1192
-2587 y(.)p 1367 2603 V 1458 2567 a(r)1453 2587 y(.)1499
-2567 y(i/r)1574 2587 y(.)1610 2567 y(\026)-40 b(\020)p
-1737 2603 V 429 w FE(Monier-Williams)p 3127 2603 V 142
-2724 V 281 2687 a(26)p 513 2724 V 186 w FB(.l/.l.l)p
-972 2724 V 191 w FD(l)1105 2708 y(.)1137 2687 y(/)1198
-2661 y(\026)1204 2687 y(l)1196 2708 y(.)p 1367 2724 V
-1424 2687 a(lr)1444 2708 y(.)1490 2687 y(i/)17 b(lr)1607
-2708 y(.)1643 2687 y(\026)-40 b(\020)p 1737 2724 V 3127
-2724 V 142 2844 V 281 2808 a FE(27)p 513 2844 V 314 w
-FB("s)p 972 2844 V 351 w FD(\023)-45 b(s)p 1367 2844
-V 348 w(_)-35 b(s)p 1737 2844 V 556 w FE(transliteration)p
-3127 2844 V 142 2964 V 281 2928 a(28)p 513 2964 V 314
-w FB(.s)p 972 2964 V 356 w FD(s)1150 2949 y(.)p 1367
-2964 V 1509 2928 a(sh)p 1737 2964 V 684 w FE(sc)m(heme)p
-3127 2964 V 142 3085 V 281 3049 a(29)p 513 3085 V 314
-w FB("d)p 972 3085 V 0 TeXcolorgray 1140 3070 a FD(.)-7
-b(.)p 0 TeXcolorgray 1146 3049 a(d)p 1367 3085 V 345
-w(l)1533 3069 y(.)p 1737 3085 V 3127 3085 V 144 3088
-2985 4 v 142 3208 4 121 v 281 3172 a FE(30)p 513 3208
-V 314 w FB("d)p 972 3208 V 0 TeXcolorgray 1140 3194 a
-FD(.)g(.)p 0 TeXcolorgray 1146 3172 a(d)p 1367 3208 V
-345 w(l)1512 3239 y(\026)p 1737 3208 V 142 3329 V 281
-3293 a FE(31)p 513 3329 V 314 w FB("d)p 972 3329 V 0
-TeXcolorgray 1140 3314 a FD(.)g(.)p 0 TeXcolorgray 1146
-3293 a(d)p 1367 3329 V 333 w(d)1512 3360 y(\026)p 1737
-3329 V 142 3449 V 281 3413 a FE(32)p 513 3449 V 314 w
-FB("h)p 972 3449 V 0 TeXcolorgray 1140 3434 a FD(.)g(.)p
-0 TeXcolorgray 1146 3413 a(h)p 1367 3449 V 333 w(h)1512
-3480 y(\026)p 1737 3449 V 142 3570 V 281 3533 a FE(33)p
-513 3570 V 314 w FB(.o)p 972 3570 V 298 w FD(O)15 b(~)-65
-b(m)p 1367 3570 V 228 w(Om)p 1737 3570 V 167 w FE(Where)34
-b(m)m(ultiple)g(options)f(apply)p 142 3690 V 281 3654
-a(34)p 513 3690 V 314 w FB(.o)p 972 3690 V 298 w FD(O)15
-b(~)-65 b(m)p 1367 3690 V 242 w(O)p Fm(M)p 1737 3690
+b(ailable:)p 144 1854 1595 4 v 142 1971 4 121 v 194 1935
+a(option)p 513 1971 V 165 w(input)p 972 1971 V 166 w(default)p
+1367 1971 V 100 w(option)p 1737 1971 V 144 1975 1595
+4 v 142 2092 4 121 v 281 2056 a(20)p 513 2092 V 288 w
+FB(a~m)p 972 2092 V 286 w FD(a)15 b(~)-65 b(m)1175 2076
+y(.)p 1367 2092 V 1489 2056 a(am)1558 2076 y(.)p 1737
+2092 V 142 2212 V 281 2176 a FE(21)p 513 2212 V 288 w
+FB(a~m)p 972 2212 V 286 w FD(a)15 b(~)-65 b(m)1175 2197
+y(.)p 1367 2212 V 1489 2176 a(a)24 b(_)-55 b(m)p 1737
+2212 V 142 2333 V 281 2296 a FE(22)p 513 2333 V 288 w
+FB(a.m)p 972 2333 V 286 w FD(am)1175 2317 y(.)p 1367
+2333 V 1489 2296 a(a)24 b(_)-55 b(m)p 1737 2333 V 142
+2453 V 281 2417 a FE(23)p 513 2453 V 288 w FB(a"m)p 972
+2453 V 286 w FD(a)25 b(_)-55 b(m)p 1367 2453 V 253 w(am)1558
+2437 y(.)p 1737 2453 V 144 2456 2985 4 v 142 2577 4 121
+v 281 2541 a FE(24)p 513 2577 V 288 w FB(a"m)p 972 2577
+V 286 w FD(a)25 b(_)-55 b(m)p 1367 2577 V 265 w(an)1537
+2607 y(\026)p 1737 2577 V 3127 2577 V 142 2697 V 281
+2661 a FE(25)p 513 2697 V 186 w FB(.r/.r.r)p 972 2697
+V 183 w FD(r)1100 2681 y(.)1146 2661 y(/)l(\026)-45 b(r)1192
+2681 y(.)p 1367 2697 V 1458 2661 a(r)1453 2681 y(.)1499
+2661 y(i/r)1574 2681 y(.)1610 2661 y(\026)-40 b(\020)p
+1737 2697 V 429 w FE(Monier-Williams)p 3127 2697 V 142
+2817 V 281 2781 a(26)p 513 2817 V 186 w FB(.l/.l.l)p
+972 2817 V 191 w FD(l)1105 2802 y(.)1137 2781 y(/)1198
+2755 y(\026)1204 2781 y(l)1196 2802 y(.)p 1367 2817 V
+1424 2781 a(lr)1444 2802 y(.)1490 2781 y(i/)17 b(lr)1607
+2802 y(.)1643 2781 y(\026)-40 b(\020)p 1737 2817 V 3127
+2817 V 142 2938 V 281 2902 a FE(27)p 513 2938 V 314 w
+FB("s)p 972 2938 V 351 w FD(\023)-45 b(s)p 1367 2938
+V 348 w(_)-35 b(s)p 1737 2938 V 556 w FE(transliteration)p
+3127 2938 V 142 3058 V 281 3022 a(28)p 513 3058 V 314
+w FB(.s)p 972 3058 V 356 w FD(s)1150 3043 y(.)p 1367
+3058 V 1509 3022 a(sh)p 1737 3058 V 684 w FE(sc)m(heme)p
+3127 3058 V 142 3179 V 281 3142 a(29)p 513 3179 V 314
+w FB("d)p 972 3179 V 0 TeXcolorgray 1140 3164 a FD(.)-7
+b(.)p 0 TeXcolorgray 1146 3142 a(d)p 1367 3179 V 345
+w(l)1533 3163 y(.)p 1737 3179 V 3127 3179 V 144 3182
+2985 4 v 142 3302 4 121 v 281 3266 a FE(30)p 513 3302
+V 314 w FB("d)p 972 3302 V 0 TeXcolorgray 1140 3288 a
+FD(.)g(.)p 0 TeXcolorgray 1146 3266 a(d)p 1367 3302 V
+345 w(l)1512 3333 y(\026)p 1737 3302 V 142 3423 V 281
+3387 a FE(31)p 513 3423 V 314 w FB("d)p 972 3423 V 0
+TeXcolorgray 1140 3408 a FD(.)g(.)p 0 TeXcolorgray 1146
+3387 a(d)p 1367 3423 V 333 w(d)1512 3453 y(\026)p 1737
+3423 V 142 3543 V 281 3507 a FE(32)p 513 3543 V 314 w
+FB("h)p 972 3543 V 0 TeXcolorgray 1140 3528 a FD(.)g(.)p
+0 TeXcolorgray 1146 3507 a(h)p 1367 3543 V 333 w(h)1512
+3574 y(\026)p 1737 3543 V 142 3663 V 281 3627 a FE(33)p
+513 3663 V 314 w FB(.o)p 972 3663 V 298 w FD(O)15 b(~)-65
+b(m)p 1367 3663 V 228 w(Om)p 1737 3663 V 167 w FE(Where)34
+b(m)m(ultiple)g(options)f(apply)p 142 3784 V 281 3748
+a(34)p 513 3784 V 314 w FB(.o)p 972 3784 V 298 w FD(O)15
+b(~)-65 b(m)p 1367 3784 V 242 w(O)p Fm(M)p 1737 3784
V 172 w FE(to)32 b(the)h(same)g(input)g(\(e.g.)g(33{37\))p
-142 3810 V 281 3774 a(35)p 513 3810 V 314 w FB(.o)p 972
-3810 V 298 w FD(O)15 b(~)-65 b(m)p 1367 3810 V 224 w(OM)p
-1737 3810 V 200 w FE(the)33 b(highest)h(v)-5 b(alue)33
-b(of)f(selected)p 142 3931 V 281 3895 a(36)p 513 3931
-V 314 w FB(.o)p 972 3931 V 298 w FD(O)15 b(~)-65 b(m)p
-1367 3931 V 222 w(A)p Fm(UM)p 1737 3931 V 426 w FE(option)32
-b(will)h(apply)-8 b(.)p 142 4051 V 281 4015 a(37)p 513
-4051 V 314 w FB(.o)p 972 4051 V 298 w FD(O)15 b(~)-65
-b(m)p 1367 4051 V 191 w(A)n(UM)p 1737 4051 V 142 4173
-4 122 v 281 4137 a FE(38)p 513 4173 V 314 w FB(a#)p 972
-4173 V 0 TeXcolorgray 351 w FD(~)p 0 TeXcolorgray 0 TeXcolorgray
+142 3904 V 281 3868 a(35)p 513 3904 V 314 w FB(.o)p 972
+3904 V 298 w FD(O)15 b(~)-65 b(m)p 1367 3904 V 224 w(OM)p
+1737 3904 V 200 w FE(the)33 b(highest)h(v)-5 b(alue)33
+b(of)f(selected)p 142 4025 V 281 3988 a(36)p 513 4025
+V 314 w FB(.o)p 972 4025 V 298 w FD(O)15 b(~)-65 b(m)p
+1367 4025 V 222 w(A)p Fm(UM)p 1737 4025 V 426 w FE(option)32
+b(will)h(apply)-8 b(.)p 142 4145 V 281 4109 a(37)p 513
+4145 V 314 w FB(.o)p 972 4145 V 298 w FD(O)15 b(~)-65
+b(m)p 1367 4145 V 191 w(A)n(UM)p 1737 4145 V 142 4267
+4 122 v 281 4231 a FE(38)p 513 4267 V 314 w FB(a#)p 972
+4267 V 0 TeXcolorgray 351 w FD(~)p 0 TeXcolorgray 0 TeXcolorgray
0 TeXcolorgray 0 TeXcolorgray -50 w(a)p 0 TeXcolorgray
-1367 4173 V 0 TeXcolorgray 333 w(\025)p 0 TeXcolorgray
+1367 4267 V 0 TeXcolorgray 333 w(\025)p 0 TeXcolorgray
0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray -50 w(a)p
-0 TeXcolorgray 1737 4173 V 144 4176 1595 4 v 141 4345
+0 TeXcolorgray 1737 4267 V 144 4270 1595 4 v 141 4439
a FE(The)35 b(last)g(option)g(has)g(a)g(t)m(w)m(ofold)g(application:)49
b(\014rstly)-8 b(,)36 b(dep)s(ending)g(on)f(the)g(fon)m(t)g(and)g(size)
-144 4465 y(used,)c(it)e(ma)m(y)g(b)s(e)g(used)h(to)f(o)m(v)m(ercome)i
+144 4559 y(used,)c(it)e(ma)m(y)g(b)s(e)g(used)h(to)f(o)m(v)m(ercome)i
(the)e(di\016cult)m(y)h(distinguishing)h(b)s(et)m(w)m(een)g(the)e
-(macron)144 4586 y(and)38 b(the)g(tilde)h(\(i.e.)f FD(\026)-50
+(macron)144 4680 y(and)38 b(the)g(tilde)h(\(i.e.)f FD(\026)-50
b(a)p 0 TeXcolorgray 40 w(~)p 0 TeXcolorgray 0 TeXcolorgray
0 TeXcolorgray 0 TeXcolorgray -50 w(a)p 0 TeXcolorgray
0 TeXcolorgray 39 w(\025)p 0 TeXcolorgray 0 TeXcolorgray
0 TeXcolorgray 0 TeXcolorgray -50 w(a)p 0 TeXcolorgray
FE(\);)40 b(and)e(secondly)-8 b(,)41 b(it)d(ma)m(y)h(b)s(e)f(used)h(in)
-f(tec)m(hnical)h(grammar)f(to)144 4718 y(indicate)c(an)e(explicit)i
+f(tec)m(hnical)h(grammar)f(to)144 4812 y(indicate)c(an)e(explicit)i
(short)f(v)m(o)m(w)m(el)i(\()p 0 TeXcolorgray(\025)p
0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray
-49 w(a)p 0 TeXcolorgray -1 w(\))e(or)f(long)g(or)h(short)f(\()p
0 TeXcolorgray -13 x(\025)p 0 TeXcolorgray 0 TeXcolorgray
-0 TeXcolorgray 0 TeXcolorgray 2402 4718 a(\026)-49 b(a)p
+0 TeXcolorgray 0 TeXcolorgray 2402 4812 a(\026)-49 b(a)p
0 TeXcolorgray(\))p 0 TeXcolorgray 1811 5061 a FH(10)p
0 TeXcolorgray eop end
%%Page: 11 12
diff --git a/language/sanskrit/sktdoc.skt b/language/sanskrit/sktdoc.skt
index e6c79f33aa..41659ed06a 100644
--- a/language/sanskrit/sktdoc.skt
+++ b/language/sanskrit/sktdoc.skt
@@ -452,6 +452,7 @@ Option selection: & + & -- & {\skt [4+ 5-]
% ha<3k>vyadaa<2>taye ni<2r> hotaa<2r> satsi va<3>hi<1>si<2>}\\
\cline{2-4}
\end{tabular}{\skt [40- 4- 5-]}
+\vfill
\framebox[\textwidth]{\hspace*{5mm}\begin{minipage}{130mm}
{\bf Option 6:} Enable {\skti .Rg/Tait@} accents in basic transliteration mode.
@@ -498,6 +499,7 @@ This enables the printing of warning messages by the pre-processor when using
a {\skti viraama} in forming a {\skti sa.myoga}. Given the range of
{\skti sa.myoga} supported by the font, this warning should only occur
with very exotic syllables.
+\vfill
\framebox[\textwidth]{\hspace*{5mm}\begin{minipage}{130mm}
{\bf Option 9:} Enable obey-lines.
@@ -519,6 +521,7 @@ the \verb+.skt+ file.
Without this option enabled, the pre-processor will discard any discretionary
hyphens, \verb+\-+, in the input text.
+\vfill
\framebox[\textwidth]{\hspace*{5mm}\begin{minipage}{130mm}
{\bf Option 11:} Enable auto-hyphenation.
diff --git a/macros/latex/contrib/crefthe/crefthe-doc.pdf b/macros/latex/contrib/crefthe/crefthe-doc.pdf
index d6a42c38e7..a91ff44b53 100644
--- a/macros/latex/contrib/crefthe/crefthe-doc.pdf
+++ b/macros/latex/contrib/crefthe/crefthe-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/crefthe/crefthe-doc.tex b/macros/latex/contrib/crefthe/crefthe-doc.tex
index af156ef65d..44cd81fd5e 100644
--- a/macros/latex/contrib/crefthe/crefthe-doc.tex
+++ b/macros/latex/contrib/crefthe/crefthe-doc.tex
@@ -116,7 +116,7 @@
\begin{document}
-\def\PackageVersion{2022/09/03}
+\def\PackageVersion{2022/09/24}
\title{\crefthepackage{}\\\smallskip\itshape Cross referencing with proper definite articles}
\author{Jinwen XU}
diff --git a/macros/latex/contrib/crefthe/crefthe.sty b/macros/latex/contrib/crefthe/crefthe.sty
index 40456ebd51..a561c4e1de 100644
--- a/macros/latex/contrib/crefthe/crefthe.sty
+++ b/macros/latex/contrib/crefthe/crefthe.sty
@@ -12,7 +12,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{crefthe}
- {2022/09/03} {}
+ {2022/09/24} {}
{Cross referencing with proper definite articles}
\keys_define:nn { crefthe }
@@ -112,9 +112,11 @@
}
}
}
+ \group_begin:
\bool_if:NTF #1
{ #6 * { #5 } } % here #6 is \crefthe_cref_original:w or \crefthe_Cref_original:w
{ #6 { #5 } }
+ \group_end:
\tl_gclear:N \l__crefthe_prep_each_tl
}
diff --git a/macros/latex/contrib/udes-genie-these/README.md b/macros/latex/contrib/udes-genie-these/README.md
index 173096c7fb..b0caad3982 100644
--- a/macros/latex/contrib/udes-genie-these/README.md
+++ b/macros/latex/contrib/udes-genie-these/README.md
@@ -8,10 +8,29 @@ The class file documentation is in French, the language of the typical user at t
Copyright (C) 2017-2022 Charles-Antoine Brunet
## Authors and maintainers
-Charles-Antoine Brunet (<Charles-Antoine.Brunet@USherbrooke.ca>)
+Charles-Antoine Brunet (Charles-Antoine.Brunet@USherbrooke.ca)
## License
The contents are distributed under the LaTeX Project Public License, version 1.3c or later.
## History
See the change log in the documentation.
+
+## Distribution
+CTAN: [udes-genie-these](https://www.ctan.org/pkg/udes-genie-these)
+
+TDS archive: [udes-genie-these.tds.zip](https://mirrors.ctan.org/install/macros/latex/contrib/udes-genie-these.tds.zip)
+
+### File description
+
+#### Documentation
+- udes-genie-these.pdf: package documentation
+- README.md: this file
+
+#### Source files
+- udes-genie-these.dtx: source file
+- udes-genie-these.ins: installation file
+
+#### Usage example
+- document.tex: main file
+- \*.tex, \*.bib: files used by main file
diff --git a/macros/latex/contrib/udes-genie-these/analyse.tex b/macros/latex/contrib/udes-genie-these/analyse.tex
deleted file mode 100644
index 6ef4a0f95a..0000000000
--- a/macros/latex/contrib/udes-genie-these/analyse.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{ANALYSE}
diff --git a/macros/latex/contrib/udes-genie-these/conception.tex b/macros/latex/contrib/udes-genie-these/conception.tex
deleted file mode 100644
index 83b56eb755..0000000000
--- a/macros/latex/contrib/udes-genie-these/conception.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{CONCEPTION}
diff --git a/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex b/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex
deleted file mode 100644
index d8a234314f..0000000000
--- a/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{ENGLISH CONCLUSION} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex b/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex
deleted file mode 100644
index e1b06616bd..0000000000
--- a/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{CONCLUSION FRANÇAISE} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/document.tex b/macros/latex/contrib/udes-genie-these/document.tex
index 9b82193ecf..88b1c28de5 100644
--- a/macros/latex/contrib/udes-genie-these/document.tex
+++ b/macros/latex/contrib/udes-genie-these/document.tex
@@ -12,7 +12,7 @@
liste-figures,
liste-tableaux,
fichier-resume-francais = {resume-francais},
- fichier-resume-anglais = {resume-anglais},
+ %fichier-resume-anglais = {resume-anglais},
fichier-remerciements = {merci},
fichier-lexique = {lexique},
fichier-symboles = {symboles},
@@ -21,12 +21,12 @@
}
\TitreFrancais{CECI EST LE TITRE FRANÇAIS\\DU DOCUMENT}
-\TitreAnglais{DOCUMENT ENGLISH TITLE}
+%\TitreAnglais{DOCUMENT ENGLISH TITLE}
\Auteur{Prénom}{NOM}
\Date{Septembre}{2022}
\Dedicace{À mon chien préféré, Pitou, et à mon chat préféré, Minou.}
\MotsClesFrancais{3 à 8 mots-clés français}
-\MotsClesAnglais{3 to 8 english keywords}
+%\MotsClesAnglais{3 to 8 english keywords}
\Directeur{Prénom1}{NOM1}
\Codirectrice{Prénom2}{NOM1}
@@ -36,20 +36,57 @@
% Le contenu du document doit respecter le protocole de rédaction.
% Le contenu fourni ici n'est qu'un exemple afin d'illustre l'utilisation de la classe.
-\bibliographystyle{plain}
\begin{document}
-\include{introduction}
-\include{conception}
-\include{realisation}
-\include{tests}
-\include{analyse}
-\include{conclusion-francaise}
-\include{conclusion-anglaise}
+\chapter{INTRODUCTION}
+
+Ce document est uniquement un exemple d'utilisation de la classe \LaTeX\ pour la rédaction de documents conforme au \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke. Le contenu de cet exemple n'est pas représentatif de ce que devrait contenir un vrai document. Pour connaître le contenu éventuel d'un vrai document, il faut se référer au protocole.
+
+Les références bibliographiques qui suivent ne sont que des exemples. Il faut se référer au protocole pour plus de détails à ce sujet afin de s'assurer que les références sont complètes et qu'elles sont conformes aux exigences.
+
+\begin{description}
+ \item[Article de périodique:]
+ il y a quatre exemples \cite{burke1995,pattamatta2009,roy2009,vasu2009}.
+
+ \item[Articles d'actes de conférence:]
+ il y a un exemple court~\cite{prevenslik2009}
+ et deux exemples longs~\cite{coronado2005,yeung2006}.
+
+ \item[Livre:]
+ il y a un exemple court~\cite{russell2003}
+ et trois exemples longs~\cite{kececioglu1991,knuth1998-num,meriam2010}.
+
+ \item[Livre, une partie:]
+ il y a deux exemples courts~\cite{cormen2001,gaddis2009}
+ et trois exemples longs~\cite{kececioglu1991-partie,knuth1998-sort,meriam2010-dist}.
+
+ \item[Essai, mémoire et thèse:]
+ il y a un exemple de chacun \cite{belanger2009,chafei2009,francoeur2009}.
+
+ \item[Rapport technique:]
+ il y a un exemple court~\cite{belley2008}
+ et un exemple long~\cite{kernighan1991}.
+
+\end{description}
+
+\chapter{CONCEPTION}
+Le texte de la conception.
+
+\chapter{RÉALISATION}
+Le texte de la réalisation.
+
+\chapter{TESTS}
+Le texte des tests.
+
+\chapter{ANALYSE}
+Le texte de l'analyse.
+
+\chapter{CONCLUSION}
+Le texte de la conclusion.
\appendix
-\include{donnees}
+\chapter{DONNÉES}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/donnees.tex b/macros/latex/contrib/udes-genie-these/donnees.tex
deleted file mode 100644
index 18e57d0601..0000000000
--- a/macros/latex/contrib/udes-genie-these/donnees.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{DONNÉES} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/introduction.tex b/macros/latex/contrib/udes-genie-these/introduction.tex
deleted file mode 100644
index 8e1a76e9fa..0000000000
--- a/macros/latex/contrib/udes-genie-these/introduction.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-
-\chapter{INTRODUCTION}
-
-Ce document est uniquement un exemple d'utilisation de la classe \LaTeX\ pour la rédaction de documents conforme au \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke. Le contenu de cet exemple n'est pas représentatif de ce que devrait contenir un vrai document. Pour connaître le contenu éventuel d'un vrai document, il faut se référer au protocole.
-
-Les références bibliographiques qui suivent ne sont que des exemples. Il faut se référer au protocole pour plus de détails à ce sujet afin de s'assurer que les références sont complètes et qu'elles sont conformes aux exigences.
-
-\begin{description}
- \item[Article de périodique:]
- il y a quatre exemples \cite{burke1995,pattamatta2009,roy2009,vasu2009}.
-
- \item[Articles d'actes de conférence:]
- il y a un exemple court~\cite{prevenslik2009}
- et deux exemples longs~\cite{coronado2005,yeung2006}.
-
- \item[Livre:]
- il y a un exemple court~\cite{russell2003}
- et trois exemples longs~\cite{kececioglu1991,knuth1998-num,meriam2010}.
-
- \item[Livre, une partie:]
- il y a deux exemples courts~\cite{cormen2001,gaddis2009}
- et trois exemples longs~\cite{kececioglu1991-partie,knuth1998-sort,meriam2010-dist}.
-
- \item[Essai, mémoire et thèse:]
- il y a un exemple de chacun \cite{belanger2009,chafei2009,francoeur2009}.
-
- \item[Rapport technique:]
- il y a un exemple court~\cite{belley2008}
- et un exemple long~\cite{kernighan1991}.
-
-\end{description}
-
-
diff --git a/macros/latex/contrib/udes-genie-these/realisation.tex b/macros/latex/contrib/udes-genie-these/realisation.tex
deleted file mode 100644
index 191e529570..0000000000
--- a/macros/latex/contrib/udes-genie-these/realisation.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{RÉALISATION} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/revue.tex b/macros/latex/contrib/udes-genie-these/revue.tex
deleted file mode 100644
index 356175d490..0000000000
--- a/macros/latex/contrib/udes-genie-these/revue.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{REVUE DE LA LITTÉRATURE} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/tests.tex b/macros/latex/contrib/udes-genie-these/tests.tex
deleted file mode 100644
index 065e9d103d..0000000000
--- a/macros/latex/contrib/udes-genie-these/tests.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{TESTS} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
index ccdaae0838..9b8282eb1b 100644
--- a/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
@@ -26,18 +26,18 @@
%<these|protocole>%%--- IDENTIFICATION ------------------------------------------------------
%<these|protocole>%%-----------------------------------------------------------------------------
%<these|protocole>
-%<these>\ProvidesExplClass{udes-genie-these}{2022/09/15}{2.0.1}
-%<these> {Universite de Sherbrooke, Faculte de genie: classe de document pour theses, memoires, DPR et essais}
-%<protocole>\ProvidesExplClass{udes-genie-protocole}{2022/09/15}{2.0.1}
-%<protocole> {Universite de Sherbrooke, Faculte de genie: classe de document pour le protocole de redaction}
+%<these>\ProvidesExplClass{udes-genie-these}{2022/09/19}{3.0}
+%<these> {Université de Sherbrooke, Faculté de génie: classe de document pour thèses, mémoires, DPR et essais}
+%<protocole>\ProvidesExplClass{udes-genie-protocole}{2022/09/19}{3.0}
+%<protocole> {Université de Sherbrooke, Faculté de génie: classe de document pour le protocole de rédaction}
%<these|protocole>
%<*driver>
\documentclass[12pt,letterpaper,french]{l3doc}
\usepackage[T1]{fontenc}
-\usepackage[notextcomp]{kpfonts}
+\usepackage{kpfonts}
\usepackage[scaled=0.7881]{DejaVuSansMono}
\usepackage[french]{babel}
-\usepackage{hologo,setspace,parskip,microtype,xspace,tabularx,xcolor,pifont}
+\usepackage{hologo,setspace,parskip,microtype,xspace,tabularx,xcolor,pifont,bookmark}
\hypersetup{colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue,linktocpage=true}
\setlength{\parskip}{1ex plus0.25ex minus0ex}
\setlength{\parindent}{0em}
@@ -128,10 +128,11 @@
% \changes{v2.0}{2018/09/26}{Adaptations pour respecter la nouvelle version du protocole de rédaction.}
% \changes{v2.0.1}{2020/04/17}{(Aussi connue comme v2.0a) Correction de bugs. Changements internes. Changements à la documentation.}
% \changes{v2.0.2}{2022/09/15}{Maintenance (LaTeX2e 2020-02-02 à 2022-06-01). Distribution sur CTAN. Adaptations à la documentation.}
+% \changes{v3.0}{2022/09/19}{Support pour \pkg{biblatex}. Ajustements à la documentation.}
%
% \GetFileInfo{udes-genie-these.dtx}
%
-% \title{CLASSE DE DOCUMENT \latex POUR LA RÉDACTION AUX ÉTUDES SUPÉRIEURES À LA FACULTÉ DE GÉNIE DE L'UNIVERSITÉ DE SHERBROOKE\\{\large \laclassetitre, version 2.0.2}}
+% \title{CLASSE DE DOCUMENT \latex POUR LA RÉDACTION AUX ÉTUDES SUPÉRIEURES À LA FACULTÉ DE GÉNIE DE L'UNIVERSITÉ DE SHERBROOKE\\{\large \laclassetitre, version 3.0}}
% \author{Charles-Antoine Brunet}
% \date{\today}
% \maketitle
@@ -147,8 +148,14 @@
%
% Ce document détaille l'utilisation de \laclasse afin de faciliter son utilisation. Un exemple complet est distribué avec \laclasse. Le but de ce document n'est pas d'expliquer l'utilisation générale de \latex ou de \bibtex. Pour cela, il faut consulter d'autres ouvrages. D'ailleurs, ce document assume une connaissance préalable fonctionnelle de \latex et de \bibtex.
%
+% \subsection*{De la version~2 à la version~3}
+%
+% La version 3 contient un changement incompatible avec la version~2. Le changement répond à des demandes faites à plusieurs reprises au cours des années: supporter le \package |biblatex|. Heureusement, si vous utilisiez la version~2, la transition devrait vous prendre moins de deux minutes. Le paragraphe qui suit vous donne tous les détails.
+%
+% Le style de références est maintenant spécifié par le nouveau champ de configuration |style-references| et non plus dans le préambule avec la macro |\bibliographystyle|. Il faut donc retirer une macro du style |\bibliographystyle{AAA}| et la remplacer par un champ de configuration du genre |style-references = AAA|. C'est tout!
+%
%\section{Installation et vérification}\label{sec:inst}
-% La classe \laclasse peut être installée comme tout autre \package \latex avec le gestionnaire de \packages de votre distribution, comme avec la console de \miktex ou le \tlmgr. Du même coup, il faut s'assurer d'avoir une version à jour de la distribution \latex, car \laclasse utilise des fonctionnalités qui sont relativement récentes. Si vous optez pour une installation manuelle, la classe \laclasse est disponible sur \ctan et s'installe en accord avec les procédures spécifiées dans la documentation de votre distribution \latex.
+% La classe \laclasse peut être installée comme tout autre \package \latex avec le gestionnaire de \packages de votre distribution, comme avec la console de \miktex ou le \tlmgr. Du même coup, il faut s'assurer d'avoir une version à jour de la distribution \latex, car \laclasse utilise des fonctionnalités qui sont relativement récentes. Si vous optez pour une installation manuelle, la classe \laclasse est disponible sur \href{https://www.ctan.org/pkg/udes-genie-these/}{\ctan} et s'installe en accord avec les procédures spécifiées dans la documentation de votre distribution \latex.
%
% Afin de vérifier que l'installation s'est bien passée, il vous est suggéré de compiler l'exemple distribué avec \laclasse. C'est le meilleur moyen de savoir si votre installation \latex a tout ce qu'il faut pour utiliser \laclasse. L'exemple se trouve dans le même répertoire que la documentation.
%
@@ -199,6 +206,7 @@
\bool_new:N \g_@@_listeDesTableaux_bool
\clist_new:N \g_@@_dedicace_cl
+\clist_new:N \g_@@_fichiers_references_cl
\clist_new:N \g_@@_jury_codirecteurs_cl
\clist_new:N \g_@@_jury_evaluateurs_cl
\clist_new:N \g_@@_pas_jury_cl
@@ -231,7 +239,6 @@
\tl_new:N \g_@@_fichier_resume_anglais_tl
\tl_new:N \g_@@_fichier_resume_francais_tl
\tl_new:N \g_@@_fichier_symboles_tl
-\tl_new:N \g_@@_fichiers_references_tl
\tl_new:N \g_@@_format_tl
\tl_new:N \g_@@_juryname_tl
\tl_new:N \g_@@_jury_codirname_tl
@@ -250,8 +257,10 @@
\tl_new:N \g_@@_mots_cles_francais_tl
\tl_new:N \g_@@_motsclesname_tl
\tl_new:N \g_@@_programme_tl
+\tl_new:N \g_@@_references_engin_tl
\tl_new:N \g_@@_specialite_tl
\tl_new:N \g_@@_specialityname_tl
+\tl_new:N \g_@@_style_references_tl
\tl_new:N \g_@@_these_tl
\tl_new:N \g_@@_titre_anglais_tl
\tl_new:N \g_@@_titre_francais_tl
@@ -281,6 +290,8 @@
\tl_const:Nn \c_@@_programme_meca_tl {mecanique}
%<protocole>\tl_const:Nn \c_@@_protocole_droits_tl {Tous~droits~réservés.\ Faculté~de~génie,~Université~de~Sherbrooke.}
%<protocole>\tl_const:Nn \c_@@_protocole_notice_tl {Document~adopté~à~la~Faculté~de~génie~de~l'Université~de~Sherbrooke~par~le~Comité~de~la~recherche~et~des~études~supérieures~(\g_@@_date_cres_tl)~et~le~Comité~des~études~de~la~faculté~de~génie~(\g_@@_date_cefg_tl).}
+\tl_const:Nn \c_@@_references_biblatex_tl {biblatex}
+\tl_const:Nn \c_@@_references_bibtex_tl {bibtex}
\tl_const:Nn \c_@@_type_dprdoctorat_tl {dprdoctorat}
\tl_const:Nn \c_@@_type_dprmaitrise_tl {dprmaitrise}
\tl_const:Nn \c_@@_type_essai_tl {essai}
@@ -291,6 +302,9 @@
%%-----------------------------------------------------------------------------
%%--- INITIALISATION DE VARIABLES -----------------------------------------
%%-----------------------------------------------------------------------------
+\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_bibtex_tl
+\tl_gset:Nn \g_@@_style_references_tl {plain}
+
%% Identifie les types de documents avec dedicace (optionnelle)
\clist_gput_right:Nx \g_@@_dedicace_cl
{\c_@@_type_essai_tl, \c_@@_type_memoire_tl, \c_@@_type_these_tl}
@@ -306,34 +320,50 @@
%\end{implementation}
%
-% \subsection{Options}
-% Pour utiliser \laclasse, il faut spécifier son utilisation avec la macro \cs{documentclass} de \latex. La classe \laclasse a deux options qui permettent de spécifier le style du document, tel que spécifié par le \protocole. Le style choisi est spécifié dans le paramètre optionnel de \cs{documentclass}.
+% \subsection{Options} \label{class-options}
+% Pour utiliser \laclasse, il faut spécifier son utilisation avec la macro \cs{documentclass} de \latex. La classe \laclasse a deux types d'options qui sont spécifiées dans le paramètre optionnel de \cs{documentclass}.
%
%\begin{variable}{livre,simple}
%\begin{syntax}
% |\documentclass| \oarg{style} \{\laclassename\}
%\end{syntax}
-% La valeur de \meta{style} est |livre| ou |simple|. Si le paramètre est absent, le style |livre| est utilisé par défaut.
+% La valeur de \meta{style} est |livre| ou |simple|, tel que spécifié dans le \protocole. Si le paramètre est absent, le style |livre| est utilisé par défaut.
+%
%\end{variable}
%
+%\begin{variable}[added=2022-09-19]{bibtex,biblatex}
+%\begin{syntax}
+% |\documentclass| \oarg{engin-bib} \{\laclassename\}
+%\end{syntax}
+% La valeur de \meta{engin-bib} est |bibtex| ou |biblatex|, selon ce que vous voulez utiliser. Si rien n'est spécifié, |bibtex| est utilisé par défaut.
+%
+% Si le choix est |bibtex|, le style bibliographique est spécifié avec le champ de configuration |style-references| et les fichiers de références utilisés par |bibtex| sont ceux spécifiés avec le champ |references| (voir la section~\ref{sec:config}). La liste des références est générée automatiquement par \laclasse avec la macro |\bibliography|.
+%
+% Si le choix est de |biblatex|, la personne qui rédige le document est responsable de charger le \package |biblatex| avec la macro |\usepackage| dans le préambule, car trop de cas de figures peuvent survenir afin d'assurer un chargement correct. La liste des références est gérérée automatiquement par \laclasse avec la macro |\printbibliography| et les fichiers de références sont spécifiés avec le champs de configuration |references| (voir la section~\ref{sec:config}). Les fichiers de références sont fournis automatiquement par \laclasse avec la macro |\addbibresource|. Le champ de configuration |references-style| est ignoré, car le style est géré par la personne qui rédige avec avec l'aide de |biblatex|.
+%
+%\end{variable}
%\begin{implementation}
%%-----------------------------------------------------------------------------
%%--- OPTIONS DE CLASSE ---------------------------------------------------
%%-----------------------------------------------------------------------------
\DeclareKeys {
- livre.code:n = {
+ biblatex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_biblatex_tl},
+ biblatex .usage:n = load,
+ bibtex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_bibtex_tl},
+ bibtex .usage:n = load,
+ livre .code:n = {
\PassOptionsToClass{twoside,openright}{book}
\PassOptionsToPackage{twoside=true}{geometry}
\tl_gset_eq:NN \g_@@_format_tl \c_@@_format_livre_tl
},
- livre.usage:n = load,
- simple.code:n = {
+ livre .usage:n = load,
+ simple .code:n = {
\PassOptionsToClass{oneside,openany}{book}
\PassOptionsToPackage{twoside=false}{geometry}
\tl_gset_eq:NN \g_@@_format_tl \c_@@_format_simple_tl
},
- simple.usage:n = load,
- unknown.code:n = {\PassOptionsToClass{\CurrentOption}{book}},
+ simple .usage:n = load,
+ unknown .code:n = {\PassOptionsToClass{\CurrentOption}{book}},
}
\SetKeys{livre}
@@ -444,7 +474,14 @@
%\begin{syntax}
% |fichiers-references =| \marg{valeur}
%\end{syntax}
-% Ce champ spécifie les fichiers de bibliographie \bibtex à être inclus pour la construction de la liste des références par \bibtex ou un autre utilitaire équivalent. \meta{valeur} est une liste de noms de fichiers et l'extension |.bib| est assumé pour chacun. Chaque nom de fichier est séparé par une virgule. Ce champ ne doit pas contenir d'espaces superflus. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:bibtex}.
+% Ce champ spécifie les fichiers de bibliographie \bibtex à être inclus pour la construction de la liste des références par \bibtex ou un autre utilitaire équivalent. La liste des fichiers à utiliser est spécifiée par \meta{valeur}, une liste de noms de fichiers. Chaque nom de fichier est séparé par une virgule. Ce champ ne doit pas contenir d'espaces superflus. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:refbib}.
+%\end{variable}
+%
+%\begin{variable}[added=2022-09-19]{style-references}
+%\begin{syntax}
+% |style-references =| \marg{valeur}
+%\end{syntax}
+% Ce champ spécifie le style bibliographique à utiliser pour la construction de la liste des références, tel que requis par \bibtex ou un autres engins bibliographiques équivalents. Comme ce champ spécifie le style à utiliser, il n'est pas nécessaire de mettre la macro |\bibliographystyle| dans le préambule, car la classe \laclasse automatise cette étape. Ce champ est ignoré, si l'option de classe |biblatex| a été spécifié (voir la section~\ref{class-options}). Consultez le protocole au sujet des styles bibliographiques. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:refbib}.
%\end{variable}
%
%\begin{implementation}
@@ -481,8 +518,10 @@
fichier-symboles .value_required:n = true,
fichier-acronymes .tl_gset:N = \g_@@_fichier_acronymes_tl,
fichier-acronymes .value_required:n = true,
- fichiers-references .tl_gset:N = \g_@@_fichiers_references_tl,
+ fichiers-references .clist_gset:N = \g_@@_fichiers_references_cl,
fichiers-references .value_required:n = true,
+ style-references .tl_gset:N = \g_@@_style_references_tl,
+ style-references .value_required:n = true,
}
%\end{implementation}
@@ -644,8 +683,10 @@
%
% La gestion du passage d'une langue à une autre dans les parties principales est laissée à la personne qui rédige le document. Cependant, la classe \laclasse est basée, entre autres, sur le \package \babel qui permet de gérer des documents multilingues. Pour plus de détail sur le passage d'une langue à une autre dans un document, la lecture de la documentation de \babel est suggérée. Avec un bon usage des macros de \babel, la typographie sera ajustée en accord avec la langue de ces différentes parties du document.
%
-%\subsection{Références bibliographiques et \bibtex}\label{sec:bibtex}
-% L'utilisation de \bibtex, ou autre utilitaire semblable, avec \laclasse se fait de la même manière que tout autre document \latex. Le style bibliographique est spécifié dans le document avec la commande |\bibliographystyle|, comme il est usuel de le faire. Il est important de noter que le style bibliographique choisi doit respecter les exigences du \protocole. Les fichiers de bibliographie (fichiers |.bib|) sont spécifiés avec le champ |fichiers-references| de la configuration du document, comme mentionné dans la section~\ref{sec:config}. Ils ne sont pas spécifiés avec la commande |\bibliography|, comme cela est fait habituellement, car le placement de la liste des références dans le document est géré par \laclasse.
+%\subsection{Références bibliographiques}\label{sec:refbib}
+% L'utilisation de \bibtex, ou autre utilitaires similaires, avec \laclasse est évidemment possible.
+%
+% Le style bibliographique est spécifié dans le document avec le champ |style-references| de la configuration du document et les fichiers de références (fichiers |.bib|) sont spécifiés avec le champ |fichiers-references|. Il est important de noter que le style bibliographique choisi doit respecter les exigences du \protocole. La section~\ref{sec:config} discute de ces champs et la section~\ref{class-options} discute aussi des options pour \bibtex et |biblatex|.
%
%\begin{implementation}
%<*protocole>
@@ -905,9 +946,6 @@
\tl_if_blank:VT \g_@@_fichier_acronymes_tl
{ \tl_gclear:N \g_@@_fichier_acronymes_tl }
- \tl_if_blank:VT \g_@@_fichiers_references_tl
- { \tl_gclear:N \g_@@_fichiers_references_tl }
-
\tl_if_blank:VT \g_@@_titre_francais_tl
{ \tl_gclear:N \g_@@_titre_francais_tl }
@@ -947,7 +985,7 @@
%<these> \tl_if_empty:NT \g_@@_programme_tl
%<these> { \msg_error:nn {udesgeniethese}{config_programme_vide}{type} }
%<these>
- \tl_if_empty:NT \g_@@_fichiers_references_tl
+ \clist_if_empty:NT \g_@@_fichiers_references_cl
{ \msg_error:nnnn {udesgeniethese}{config_fichiers_vides}{la~bibliographie}{fichiersReferences} }
\tl_if_empty:NT \g_@@_auteur_nom_tl
@@ -1302,7 +1340,7 @@
{
\chapter*{\g_@@_acknowledgementsname_tl}
\int_set:Nn \l_@@_tmp_int {\value{page}}
- \input{\g_@@_fichier_remerciements_tl}
+ \input{\g_@@_fichier_remerciements_tl}\par
\thispagestyle{empty}\clearpage
\int_sub:Nn \l_@@_tmp_int {\value{page}}
\int_compare:nNnT {\l_@@_tmp_int} < {-1}
@@ -1359,7 +1397,7 @@
{
\chapter*{\glossaryname}
\markboth{\glossaryname}{\glossaryname}
- \input{\g_@@_fichier_lexique_tl}
+ \input{\g_@@_fichier_lexique_tl}\par
\if@openright\cleardoublepage\else\clearpage\fi
}
@@ -1367,7 +1405,7 @@
{
\chapter*{\g_@@_listsymbolsname_tl}
\markboth{\g_@@_listsymbolsname_tl}{\g_@@_listsymbolsname_tl}
- \input{\g_@@_fichier_symboles_tl}
+ \input{\g_@@_fichier_symboles_tl}\par
\if@openright\cleardoublepage\else\clearpage\fi
}
@@ -1375,7 +1413,7 @@
{
\chapter*{\g_@@_listacronymsname_tl}
\markboth{\g_@@_listacronymsname_tl}{\g_@@_listacronymsname_tl}
- \input{\g_@@_fichier_acronymes_tl}
+ \input{\g_@@_fichier_acronymes_tl}\par
\if@openright\cleardoublepage\else\clearpage\fi
}
%</these>
@@ -1385,13 +1423,35 @@
{
\refstepcounter{chapter}
\addcontentsline{toc}{chapter}{\bibname}
- \bibliography{\g_@@_fichiers_references_tl}
+
+ \tl_case:Nn \g_@@_references_engin_tl
+ {
+ \c_@@_references_bibtex_tl
+ { \bibliography{\g_@@_fichiers_references_cl} }
+ \c_@@_references_biblatex_tl
+ { \printbibliography }
+ }
+
\if@openright\cleardoublepage\else\clearpage\fi
}
%%-----------------------------------------------------------------------------
%%--- GESTION AUTOMATISEE -------------------------------------------------
%%-----------------------------------------------------------------------------
+\AtEndPreamble
+{
+ \tl_case:Nn \g_@@_references_engin_tl
+ {
+ \c_@@_references_bibtex_tl
+ { \bibliographystyle{\g_@@_style_references_tl} }
+ \c_@@_references_biblatex_tl
+ {
+ \clist_map_inline:Nn \g_@@_fichiers_references_cl
+ {\addbibresource{#1}}
+ }
+ }
+}
+
\AfterEndPreamble{
\@@_validation
\@@_setup
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
index ecd7d6287d..2e39e9516a 100644
--- a/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/README.md b/macros/latex/contrib/wargame/README.md
new file mode 100644
index 0000000000..e5fd92458c
--- /dev/null
+++ b/macros/latex/contrib/wargame/README.md
@@ -0,0 +1,270 @@
+# A package to make Hex'n'Counter wargames in LaTeX
+## Version 0.2
+
+This package can help make classic [Hex'n'Counter wargames][1] using
+LaTeX. The package provide tools for generating
+
+- Hex maps and boards
+- Counters (called _chits_ since TeX have already taken _counters_)
+ for units, markers, and so on
+- Counter sheets
+- Order of Battle charts
+- Illustrations in the rules using the defined maps and counters
+
+The result will often be a PDF (or set of PDFs) that contain
+everything one will need for a game (rules, charts, boards, counter
+sheets).
+
+- The package uses [NATO App6](#NATO-App6) symbology for units.
+- The package uses [TikZ][2] for most things.
+- The package support exporting the game to a
+ [VASSAL](#VASSAL-support) module
+
+## Sources
+
+The sources of the package are kept at [GitLab][3]
+
+## CTAN
+
+The package is available from [CTAN][4] in the directory
+`/macros/latex/contrib/wargame`. As of this writing, the package has
+not hit any of the major distributions (e.g., [TeXLive][5]).
+
+If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files,
+then to install do
+
+ latex wargame.ins
+ pdflatex beach
+ pdflatex city
+ pdflatex light_woods
+ pdflatex mountains
+ pdflatex rough
+ pdflatex swamp
+ pdflatex town
+ pdflatex village
+ pdflatex woods
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+Then copy the relevant files to your TeX tree (e.g., `~/texmf/`)
+as
+
+ mkdir ~/texmf/tex/latex/wargame
+ cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/
+ cp wargame.sty ~/texmf/tex/latex/wargame/
+ cp wgexpor.sty ~/texmf/tex/latex/wargame/
+ cp city.pdf ~/texmf/tex/latex/wargame/
+ cp light_woods.pdf ~/texmf/tex/latex/wargame/
+ cp mountains.pdf ~/texmf/tex/latex/wargame/
+ cp rough.pdf ~/texmf/tex/latex/wargame/
+ cp swamp.pdf ~/texmf/tex/latex/wargame/
+ cp town.pdf ~/texmf/tex/latex/wargame/
+ cp village.pdf ~/texmf/tex/latex/wargame/
+ cp woods.pdf ~/texmf/tex/latex/wargame/
+ cp export.py ~/texmf/tex/latex/wargame/
+ cp svg2tikz.py ~/texmf/tex/latex/wargame/
+
+To generate the documentation, after having done the above, do
+
+ pdflatex wargame.dtx
+ makeindex -s gind -o wargame.ind wargame.idx
+ pdflatex wargame.dtx
+ pdflatex wargame.dtx
+ pdflatex symbols.tex
+ pdflatex compat.tex
+ pdflatex compat.tex
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+You can install these into your TeX tree with (e.g., `~/texmf/`)
+
+ mkdir -p ~/texmf/doc/latex/wargame/
+ cp wargame.pdf ~/texmf/doc/latex/wargame/
+ cp symbols.py ~/texmf/doc/latex/wargame/
+ cp compat.py ~/texmf/doc/latex/wargame/
+
+If you want to generate the tutorial document, do
+
+ cd tutorial
+ pdflatex game
+ pdflatex game
+
+If you also want to make the tutorial VASSAL module, do (also in
+`tutorial`), do
+
+ pdflatex export.tex
+ ../export.py export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
+
+
+## Download from GitLab
+
+- [Zip file of package and support files][artifacts.zip]
+- [Browse content of package][browse]
+- [Documentation][wargame.pdf]
+- [Tutorial][tutorial.pdf] (and associated VASSAL [module][Game.vmod])
+- [Table of symbols][symbols.pdf]
+- [Compatibility][compat.pdf]
+
+To install, get the ([zip file][artifacts.zip]) and unzip into your
+TeX tree, for example
+
+ mkdir -p ~/texmf
+ (cd ~/texmf && unzip ../artifacts.zip)
+
+on Un*x like systems.
+
+## Tutorial
+
+See the [tutorial](tutorial/README.md) page for more.
+
+## Examples
+
+Below are some print'n'play board wargames made with this package.
+These are not original games but rather revamps of existing games.
+All credits goes to the original authors of these games.
+
+- WWII
+ - Eastern Front
+ - [Battle for Moscow][bfm_tex]
+ - [Hell's Gate][hellsgate_tex] (private)
+ - [Unternehmung 25][unternehmung_tex] (private)
+ - Western Front
+ - [D-Day][dday_tex] (Avalon Hill classic)
+ - [Paul Koenig's Market Garden][pkmg_tex]
+ - [Paul Koenig's D-Day][pkdday_tex]
+ - Pacific theatre
+ - [First Blood][firstblood_tex] (Avalon Hill International
+ Kriegspiel Association classic)
+ - [Malaya][malaya_tex] (private)
+ - Africa
+ - [Afrika Korps][afrikakorps_tex] (Avalon Hill classic)
+ - [Battles of El Alamein][boel_tex] (private)
+- Modern/Speculative
+ - [Strike Force One][sfo_tex]
+ - [Kriegspiel][kriegspiel_tex] (Avalon Hill classic)
+
+## VASSAL support
+
+The packages has the script [`export.py`](utils/export.py) to
+generate a draft [VASSAL][5] module from the defined charts, boards,
+counters, OOBs, and so on. More about this is given in the
+documentation.
+
+The script will generate a first draft of a module, which then can be
+edited in the VASSAL editor for the final thing.
+
+Alternatively, one can provide a Python script to do more on the
+generated module, such as defining starting positions, fixing grid
+layouts, and so on. Using such a patch script, one can get an
+(almost) final module. This means, that even if one makes changes to
+the original content, it is easy to remake the module without much
+need for the VASSAL editor.
+
+An example of this is given in the [Battle for Moscow][bfm_tex]
+project, and of course in the [tutorial](tutorial/)
+
+## NATO App6
+
+The package supports
+
+- All air, equipment, installation, land, sea surface, sub surface,
+ and space command symbols, including amplifiers and modifiers
+- All friendly, hostile, neutral, and unknown faction frame.
+ Undecided faction frames can be made by specifying `dashed` line
+ styles.
+- Some, but very few, other kinds of symbology.
+
+Here are some references for more information on the NATO App6
+symbology standard.
+
+- The [Wikipedia page][6] on NATO Joint Military Symbology
+- The [NATO page][7]. If this does not work for you, then try to go
+ to the [standards page][8] and put in and write in `SYMBOLOGY` in
+ the _Document Title Contains Words_ field and press _Start_.
+- Other LaTeX package for making NATO symbology [XMilSymb][9]
+
+## Copyright and license
+
+(c) 2022 Christian Holm Christensen
+
+This work is licensed under the Creative Commons
+Attribution-ShareAlike 4.0 International License (CC-BY-SA-4.0). To
+view a copy of this license, visit [CC][10] or send a letter to
+Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+### Some comments on copyright
+
+_Caveat_: I am not a lawyer.
+
+Note that this license applies to the `wargame` package as such. What
+you generate using the package is _not_ required to be licensed
+according to the _ShareAlike_ clause of CC-BY-SA-4.0. That is, you
+can license your materials _any way you want_.
+
+However, that copyright rights on games is not as prohibitive as you
+may think (see [this thread on BGG][11]). What you _can_ copyright is
+original, artistic expression. That is, the copyrighted work must not
+be a copy of something else (originality) and must be some form of
+expression. One _cannot_ copyright ideas, only their expression in so
+far as it is _artistic_ (i.e., not a trivial expression that anyone
+knowledgeable within the field can do with rudimentary effort).
+
+So you _can not_ copyright your game mechanics, for example, only how
+you described them. You _can not_ copyright a title (but you may be
+able to claim trademark on it). You _can_ copyright the wording of
+the rules, the graphics that you use, and so on.
+
+This also means, that you are essentially free to make your own
+version of previously published game, _as long as_
+
+- you do not copy existing text
+- you do not copy existing graphics
+- you respect any kind of trademark claims
+
+However, it is advisable to contact the copyright holders of the
+previously published game to avoid [SNAFU][12]. If in doubt, seek
+professional help.
+
+[1]: https://en.wikipedia.org/wiki/Wargame
+[2]: https://github.com/pgf-tikz/pgf
+[3]: https://gitlab.com/wargames_tex/wargame_tex
+[4]: https://ctan.org/tex-archive/macros/latex/contrib/wargame
+[5]: https://tug.org/texlive/index.html
+[6]: https://vassalengine.org
+[7]: https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology
+[8]: https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN
+[9]: https://nso.nato.int/nso/nsdd/main/standards
+[10]: https://github.com/ralphieraccoon/MilSymb
+[11]: http://creativecommons.org/licenses/by-sa/4.0/
+[12]: https://boardgamegeek.com/thread/493249/
+[13]: https://en.wikipedia.org/wiki/SNAFU
+
+
+[artifacts.zip]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist
+[browse]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist
+[wargame.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist
+[tutorial.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist
+[Game.vmod]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist
+[symbols.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist
+[compat.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist
+
+[bfm_tex]: https://gitlab.com/wargames_tex/bfm_tex
+[hellsgate_tex]: https://gitlab.com/wargames_tex/hellsgate_tex
+[unternehmung_tex]: https://gitlab.com/wargames_tex/unternehmung_tex
+[dday_tex]: https://gitlab.com/wargames_tex/dday_tex
+[pkmg_tex]: https://gitlab.com/wargames_tex/pkmg_tex
+[pkdday_tex]: https://gitlab.com/wargames_tex/pkdday_tex
+[firstblood_tex]: https://gitlab.com/wargames_tex/firstblood_tex
+[malaya_tex]: https://gitlab.com/wargames_tex/malaya_tex
+[afrikakorps_tex]: https://gitlab.com/wargames_tex/afrikakorps_tex
+[boel_tex]: https://gitlab.com/wargames_tex/boel_tex
+[sfo_tex]: https://gitlab.com/wargames_tex/sfo_tex
+[kriegspiel_tex]: https://gitlab.com/wargames_tex/kriegspiel_tex
+
diff --git a/macros/latex/contrib/wargame/doc/README.md b/macros/latex/contrib/wargame/doc/README.md
new file mode 100644
index 0000000000..e5fd92458c
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/README.md
@@ -0,0 +1,270 @@
+# A package to make Hex'n'Counter wargames in LaTeX
+## Version 0.2
+
+This package can help make classic [Hex'n'Counter wargames][1] using
+LaTeX. The package provide tools for generating
+
+- Hex maps and boards
+- Counters (called _chits_ since TeX have already taken _counters_)
+ for units, markers, and so on
+- Counter sheets
+- Order of Battle charts
+- Illustrations in the rules using the defined maps and counters
+
+The result will often be a PDF (or set of PDFs) that contain
+everything one will need for a game (rules, charts, boards, counter
+sheets).
+
+- The package uses [NATO App6](#NATO-App6) symbology for units.
+- The package uses [TikZ][2] for most things.
+- The package support exporting the game to a
+ [VASSAL](#VASSAL-support) module
+
+## Sources
+
+The sources of the package are kept at [GitLab][3]
+
+## CTAN
+
+The package is available from [CTAN][4] in the directory
+`/macros/latex/contrib/wargame`. As of this writing, the package has
+not hit any of the major distributions (e.g., [TeXLive][5]).
+
+If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files,
+then to install do
+
+ latex wargame.ins
+ pdflatex beach
+ pdflatex city
+ pdflatex light_woods
+ pdflatex mountains
+ pdflatex rough
+ pdflatex swamp
+ pdflatex town
+ pdflatex village
+ pdflatex woods
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+Then copy the relevant files to your TeX tree (e.g., `~/texmf/`)
+as
+
+ mkdir ~/texmf/tex/latex/wargame
+ cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/
+ cp wargame.sty ~/texmf/tex/latex/wargame/
+ cp wgexpor.sty ~/texmf/tex/latex/wargame/
+ cp city.pdf ~/texmf/tex/latex/wargame/
+ cp light_woods.pdf ~/texmf/tex/latex/wargame/
+ cp mountains.pdf ~/texmf/tex/latex/wargame/
+ cp rough.pdf ~/texmf/tex/latex/wargame/
+ cp swamp.pdf ~/texmf/tex/latex/wargame/
+ cp town.pdf ~/texmf/tex/latex/wargame/
+ cp village.pdf ~/texmf/tex/latex/wargame/
+ cp woods.pdf ~/texmf/tex/latex/wargame/
+ cp export.py ~/texmf/tex/latex/wargame/
+ cp svg2tikz.py ~/texmf/tex/latex/wargame/
+
+To generate the documentation, after having done the above, do
+
+ pdflatex wargame.dtx
+ makeindex -s gind -o wargame.ind wargame.idx
+ pdflatex wargame.dtx
+ pdflatex wargame.dtx
+ pdflatex symbols.tex
+ pdflatex compat.tex
+ pdflatex compat.tex
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+You can install these into your TeX tree with (e.g., `~/texmf/`)
+
+ mkdir -p ~/texmf/doc/latex/wargame/
+ cp wargame.pdf ~/texmf/doc/latex/wargame/
+ cp symbols.py ~/texmf/doc/latex/wargame/
+ cp compat.py ~/texmf/doc/latex/wargame/
+
+If you want to generate the tutorial document, do
+
+ cd tutorial
+ pdflatex game
+ pdflatex game
+
+If you also want to make the tutorial VASSAL module, do (also in
+`tutorial`), do
+
+ pdflatex export.tex
+ ../export.py export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
+
+
+## Download from GitLab
+
+- [Zip file of package and support files][artifacts.zip]
+- [Browse content of package][browse]
+- [Documentation][wargame.pdf]
+- [Tutorial][tutorial.pdf] (and associated VASSAL [module][Game.vmod])
+- [Table of symbols][symbols.pdf]
+- [Compatibility][compat.pdf]
+
+To install, get the ([zip file][artifacts.zip]) and unzip into your
+TeX tree, for example
+
+ mkdir -p ~/texmf
+ (cd ~/texmf && unzip ../artifacts.zip)
+
+on Un*x like systems.
+
+## Tutorial
+
+See the [tutorial](tutorial/README.md) page for more.
+
+## Examples
+
+Below are some print'n'play board wargames made with this package.
+These are not original games but rather revamps of existing games.
+All credits goes to the original authors of these games.
+
+- WWII
+ - Eastern Front
+ - [Battle for Moscow][bfm_tex]
+ - [Hell's Gate][hellsgate_tex] (private)
+ - [Unternehmung 25][unternehmung_tex] (private)
+ - Western Front
+ - [D-Day][dday_tex] (Avalon Hill classic)
+ - [Paul Koenig's Market Garden][pkmg_tex]
+ - [Paul Koenig's D-Day][pkdday_tex]
+ - Pacific theatre
+ - [First Blood][firstblood_tex] (Avalon Hill International
+ Kriegspiel Association classic)
+ - [Malaya][malaya_tex] (private)
+ - Africa
+ - [Afrika Korps][afrikakorps_tex] (Avalon Hill classic)
+ - [Battles of El Alamein][boel_tex] (private)
+- Modern/Speculative
+ - [Strike Force One][sfo_tex]
+ - [Kriegspiel][kriegspiel_tex] (Avalon Hill classic)
+
+## VASSAL support
+
+The packages has the script [`export.py`](utils/export.py) to
+generate a draft [VASSAL][5] module from the defined charts, boards,
+counters, OOBs, and so on. More about this is given in the
+documentation.
+
+The script will generate a first draft of a module, which then can be
+edited in the VASSAL editor for the final thing.
+
+Alternatively, one can provide a Python script to do more on the
+generated module, such as defining starting positions, fixing grid
+layouts, and so on. Using such a patch script, one can get an
+(almost) final module. This means, that even if one makes changes to
+the original content, it is easy to remake the module without much
+need for the VASSAL editor.
+
+An example of this is given in the [Battle for Moscow][bfm_tex]
+project, and of course in the [tutorial](tutorial/)
+
+## NATO App6
+
+The package supports
+
+- All air, equipment, installation, land, sea surface, sub surface,
+ and space command symbols, including amplifiers and modifiers
+- All friendly, hostile, neutral, and unknown faction frame.
+ Undecided faction frames can be made by specifying `dashed` line
+ styles.
+- Some, but very few, other kinds of symbology.
+
+Here are some references for more information on the NATO App6
+symbology standard.
+
+- The [Wikipedia page][6] on NATO Joint Military Symbology
+- The [NATO page][7]. If this does not work for you, then try to go
+ to the [standards page][8] and put in and write in `SYMBOLOGY` in
+ the _Document Title Contains Words_ field and press _Start_.
+- Other LaTeX package for making NATO symbology [XMilSymb][9]
+
+## Copyright and license
+
+(c) 2022 Christian Holm Christensen
+
+This work is licensed under the Creative Commons
+Attribution-ShareAlike 4.0 International License (CC-BY-SA-4.0). To
+view a copy of this license, visit [CC][10] or send a letter to
+Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+### Some comments on copyright
+
+_Caveat_: I am not a lawyer.
+
+Note that this license applies to the `wargame` package as such. What
+you generate using the package is _not_ required to be licensed
+according to the _ShareAlike_ clause of CC-BY-SA-4.0. That is, you
+can license your materials _any way you want_.
+
+However, that copyright rights on games is not as prohibitive as you
+may think (see [this thread on BGG][11]). What you _can_ copyright is
+original, artistic expression. That is, the copyrighted work must not
+be a copy of something else (originality) and must be some form of
+expression. One _cannot_ copyright ideas, only their expression in so
+far as it is _artistic_ (i.e., not a trivial expression that anyone
+knowledgeable within the field can do with rudimentary effort).
+
+So you _can not_ copyright your game mechanics, for example, only how
+you described them. You _can not_ copyright a title (but you may be
+able to claim trademark on it). You _can_ copyright the wording of
+the rules, the graphics that you use, and so on.
+
+This also means, that you are essentially free to make your own
+version of previously published game, _as long as_
+
+- you do not copy existing text
+- you do not copy existing graphics
+- you respect any kind of trademark claims
+
+However, it is advisable to contact the copyright holders of the
+previously published game to avoid [SNAFU][12]. If in doubt, seek
+professional help.
+
+[1]: https://en.wikipedia.org/wiki/Wargame
+[2]: https://github.com/pgf-tikz/pgf
+[3]: https://gitlab.com/wargames_tex/wargame_tex
+[4]: https://ctan.org/tex-archive/macros/latex/contrib/wargame
+[5]: https://tug.org/texlive/index.html
+[6]: https://vassalengine.org
+[7]: https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology
+[8]: https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN
+[9]: https://nso.nato.int/nso/nsdd/main/standards
+[10]: https://github.com/ralphieraccoon/MilSymb
+[11]: http://creativecommons.org/licenses/by-sa/4.0/
+[12]: https://boardgamegeek.com/thread/493249/
+[13]: https://en.wikipedia.org/wiki/SNAFU
+
+
+[artifacts.zip]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist
+[browse]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist
+[wargame.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist
+[tutorial.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist
+[Game.vmod]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist
+[symbols.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist
+[compat.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist
+
+[bfm_tex]: https://gitlab.com/wargames_tex/bfm_tex
+[hellsgate_tex]: https://gitlab.com/wargames_tex/hellsgate_tex
+[unternehmung_tex]: https://gitlab.com/wargames_tex/unternehmung_tex
+[dday_tex]: https://gitlab.com/wargames_tex/dday_tex
+[pkmg_tex]: https://gitlab.com/wargames_tex/pkmg_tex
+[pkdday_tex]: https://gitlab.com/wargames_tex/pkdday_tex
+[firstblood_tex]: https://gitlab.com/wargames_tex/firstblood_tex
+[malaya_tex]: https://gitlab.com/wargames_tex/malaya_tex
+[afrikakorps_tex]: https://gitlab.com/wargames_tex/afrikakorps_tex
+[boel_tex]: https://gitlab.com/wargames_tex/boel_tex
+[sfo_tex]: https://gitlab.com/wargames_tex/sfo_tex
+[kriegspiel_tex]: https://gitlab.com/wargames_tex/kriegspiel_tex
+
diff --git a/macros/latex/contrib/wargame/doc/compat.pdf b/macros/latex/contrib/wargame/doc/compat.pdf
new file mode 100644
index 0000000000..02dbab19cd
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/compat.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/symbols.pdf b/macros/latex/contrib/wargame/doc/symbols.pdf
new file mode 100644
index 0000000000..0f0ace1efb
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/symbols.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/tutorial/Makefile b/macros/latex/contrib/wargame/doc/tutorial/Makefile
new file mode 100644
index 0000000000..5d4061c347
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/Makefile
@@ -0,0 +1,51 @@
+#
+#
+#
+LATEX := pdflatex
+LATEX_FLAGS := -interaction=nonstopmode \
+ -file-line-error \
+ --synctex=15 \
+ -shell-escape
+EXPORT := ../utils/export.py
+EXPORT_FLAGS :=
+
+ifdef VERBOSE
+MUTE :=
+REDIR :=
+LATEX_FLAGS :=
+EXPORT_FLAGS := -V
+else
+MUTE := @
+REDIR := > /dev/null 2>&1
+endif
+
+
+%.aux:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.pdf:%.aux
+ @echo "LATEX $*.tex -> $@ (via $*.aux)"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $*.tex $(REDIR)
+
+%.pdf:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.json:%.pdf
+
+all: game.pdf Game.vmod
+
+game.aux:game.tex game.sty export.tex
+export.pdf:export.tex game.sty
+
+Game.vmod:export.pdf export.json patch.py game.pdf
+ @echo "$(EXPORT) $< -> $@"
+ $(MUTE)$(EXPORT) export.pdf export.json -p patch.py -r game.pdf \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 -o $@
+
+clean:
+ rm -f *~ *.log *.out *.aux *.pdf *.vmod *.json
+ rm -f *.synctex* *.hd
+ rm -rf __pycache__
diff --git a/macros/latex/contrib/wargame/doc/tutorial/README.md b/macros/latex/contrib/wargame/doc/tutorial/README.md
new file mode 100644
index 0000000000..92c884f6ef
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/README.md
@@ -0,0 +1,41 @@
+# Tutorial on how to use the `wargame` package
+
+This directory contains a tutorial on how to use the `wargame` package
+to make a hex'n'counter (Print'n'Play) wargame.
+
+It also contains information on how to make a VASSAL module from a
+game.
+
+## The PDF and VASSAL module
+-
+ [PDF](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist)
+- [VASSAL
+ module](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist)
+
+## Content
+
+- [`game.tex`](game.tex) The tutorial and game
+- [`game.sty`](game.sty) Package defining most stuff for the game
+- [`export.tex`](export.tex) Export graphics to VASSAL
+- [`patch.py`](patch.py) Patch VASSAL module
+
+## How to build
+
+To build the tutorial, simple do
+
+ pdflatex game
+ pdflatex game
+
+Alternatively, if you use some sort of LaTeX Integrated Development
+Environment (IDE), load [`game.tex`](game.tex) into your IDE and run
+LaTeX from there.
+
+To build the VASSAL module, simply do
+
+ pdflatex export.tex
+ `kpsewhich export.py` export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
diff --git a/macros/latex/contrib/wargame/doc/tutorial/export.tex b/macros/latex/contrib/wargame/doc/tutorial/export.tex
new file mode 100644
index 0000000000..adbb65ba6e
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/export.tex
@@ -0,0 +1,385 @@
+% \section{VASSAL module}
+% \label{sec:vassal}
+%
+% As already mentioned several times in this tutorial, we can use the
+% definitions of maps, counters, and charts to generate a VASSAL
+% module.
+%
+% \begin{quote}
+% VASSAL\footnote{\url{https://vassalengine.org}} is a
+% cross-platform\footnote{It is written in Java, meaning it runs
+% almost everywhere, except on iOS and Android} tool for playing
+% wargames against other humans or solitaire. One can do
+% Play-By-E-Mail (PBEM) or online.
+% \end{quote}
+%
+% The trick is to prepare a separate \LaTeX{} document, say
+% \texttt{export.tex} as in this tutorial, which exports the images as
+% single pages. Then, the Python script \texttt{export.py}
+% distributed with the \textsf{wargame} package picks up this output
+% (\texttt{export.pdf} and \texttt{export.json}) and generates a draft
+% VASSAL module.
+%
+% In addition, you can supply a Python script, say \texttt{patch.py},
+% which will be run on the draft module so that you fix things up in
+% the VASSAL module. In this way, your VASSAL module will likely need
+% very little hand editing (if at all), and will be robust against
+% changes in the \LaTeX{} code\footnote{Assuming you keep your Python
+% \texttt{patch.py} script up to date.}. This of course requires a
+% bit of familiarity with Python, which is time well spent.
+%
+% Let us get into it.
+%
+% \subsection{The \texttt{export.tex} file}.
+% \label{sec:export:tex}
+%
+% This file will output all the images to a PDF,
+% \meta{export}\texttt{.pdf} along with meta information to a
+% JSON\footnote{JavaScript Object Notation} file
+% \meta{export}\texttt{.json}. This is relatively simple to do.
+%
+% We need to use the document class \texttt{wgexport}, so lets go a
+% head and load that.
+%
+% \begin{macrocode}
+\documentclass[11pt]{wgexport}
+% \end{macrocode}
+%
+% Make sure you give the right font size as argument.
+%
+% This is where it pays off that we put all our definitions of
+% counters, board, charts, etc. into a separate package. To import
+% these, we simply use that package here\footnote{If we hadn't made
+% that package, we would have to repeat the definitions in some
+% way. Very error prone}. So we load the package and start our
+% document.
+%
+% \begin{macrocode}
+\usepackage{game}
+\begin{document}
+% \end{macrocode}
+%
+% Now the body of the document will simply consist of a list of
+% images, one for each side of each counter, the board, charts, and so
+% on. We need to put everything into the environment
+% \texttt{imagelist} which will keep track of our meta data.
+%
+% \begin{macrocode}
+\begin{imagelist}
+% \end{macrocode}
+%
+% So far so good. The first thing we will output are the counters.
+% For that we will use the macro \verb+\doublechitimages+ (if we had
+% single sided counters, we would use \verb+\chitimages+). This macro
+% takes two arguments: The list of counter definitions and the faction
+% of the chits. So lets go ahead and make those for factions A and B,
+% and the special faction ``Markers'' which will only be the game turn
+% counter.
+%
+% \begin{macrocode}
+\doublechitimages[A]{\alla}
+\doublechitimages[B]{\allb}
+\doublechitimages[Markers]{{game turn}}
+% \end{macrocode}
+%
+% Again, the macros we made for the counters comes in handy. Note
+% that we have used it twice so far: For the OOBs and here for the
+% VASSAL module. We will, in fact, use them one more time to create
+% the counter sheet.
+%
+% Right, so that made our counter images and the associated meta
+% data. Next thing is to add our board. For that, we use the
+% environment \texttt{boardimage}. Inside that environment we must
+% draw the board. The environment takes one optional argument which
+% classifies the board. Meaningful classifications are \texttt{board}
+% (default) and \texttt{oob} for OOBs. The first mandatory argument
+% is the name of the board (more or less free form text, except any of
+% ``\texttt{./\textbackslash '"}'' should not be used. The second
+% mandatory argument is a sub-category, and is mainly reserved for
+% future use.
+%
+% \begin{macrocode}
+\begin{boardimage}{Board}{}
+ \begin{board}
+ \end{board}
+\end{boardimage}
+% \end{macrocode}
+%
+% We will make another board image for our OOB, since that component
+% should hold counters in VASSAL. We pass the optional argument
+% \texttt{oob} in this case.
+%
+% \begin{macrocode}
+\begin{boardimage}[oob]{OOB}{}%
+ \fulloob
+\end{boardimage}
+% \end{macrocode}
+%
+% We have two charts that we would also like to be put in: The CRT and
+% the TE. These \emph{must} be put into \Tikz{} pictures, and we
+% precede those with the macro \verb+\info+. This macro takes three
+% arguments: The name of the next image, the category, and
+% sub-category. Again, the name is more or less free form, and the
+% category in some sense dictates how it will present in the VASSAL
+% module. For charts we should use the category \texttt{chart}. The
+% sub-category isn't really used at this point.
+%
+% \begin{macrocode}
+\info{CRT}{chart}{}
+\begin{tikzpicture}
+ \node{\crt};
+\end{tikzpicture}
+%
+\info{TEC}{chart}{}
+\begin{tikzpicture}
+ \node{\tec};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We also want background images for our pools of eliminated units in
+% VASSAL. This will be enlarged version of main headquarter unit of
+% each faction, overlayed with a white semi-transparent background.
+%
+% \begin{macrocode}
+\info{A}{pool}{}
+\begin{tikzpicture}[scale=7]
+ \chit[a hq];
+ \fill[white,opacity=.5](-.6,-.6)rectangle++(1.2,1.2);
+\end{tikzpicture}
+\info{B}{pool}{}
+\begin{tikzpicture}[scale=7]
+ \chit[b hq];
+ \fill[white,opacity=.5](-.6,-.6)rectangle++(1.2,1.2);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We can a splash page image. We have not defined such an image in
+% the \texttt{game} package, but we could have, so we will make it
+% here. Again, it should be a \Tikz{} picture. For this, we need to
+% use the category \texttt{front}.
+%
+% \begin{macrocode}
+\info{Splash}{front}{}
+\begin{tikzpicture}
+ \node[board frame,title,
+ minimum width=5cm,minimum height=5cm]
+ {A Game};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We could continue to add more if we wanted to. Basically anything
+% can be added. For example, one might want custom button icons or
+% the like. We will add a few such icons here, mainly to show how
+% the \texttt{patch.py} script works.
+%
+% First, a button icon for the pool window.
+%
+% \begin{macrocode}
+\info{pool-icon}{icon}{}
+\begin{tikzpicture}[scale=.15]
+ \draw[scale line widths,line width=4mm]
+ (0,1)--(0,-1) (-.7,.2)--(.7,.2);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% The category \texttt{icon} has no special meaning. The icon will
+% look like \tikz[scale=.3]{\draw[scale line widths,line width=4mm]
+% (0,1)--(0,-1) (-.7,.2)--(.7,.2);}
+%
+% We also want to add a custom icon for the OOB button. VASSAL has a
+% button icon for the piece inventory which is really quite
+% appropriate, but alas it is already in use, so we will make our own
+% (albeit similar).
+%
+% \begin{macrocode}
+\info{oob-icon}{icon}{}
+\begin{tikzpicture}[scale=.6]
+ \draw[fill=friendly] (.1,0) rectangle(.5,-.1);
+ \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25);
+ \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4);
+ \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% This looks like
+% \tikz{\draw[fill=friendly] (.1,0) rectangle(.5,-.1);
+% \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25);
+% \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4);
+% \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);}
+%
+% Normally the \texttt{export.py} script used the \emph{undo} image
+% for the flip button. However, that may be a bit confusing, so we
+% will use a large ``F'' instead. \tikz{\node[color=blue!75!black,font=\sffamily\bfseries\LARGE]{F}}
+%
+% And similarly for the ``Eliminate''\tikz{\node[color=red!75!black,font=\sffamily\bfseries\LARGE]{E}}
+%
+% and ``Restore'' buttons. \tikz{\node[color=green!75!black,font=\sffamily\bfseries\LARGE]{R}}
+%
+% \begin{macrocode}
+\info{flip-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=blue!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{F};
+\end{tikzpicture}
+%
+\info{eliminate-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=red!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{E};
+\end{tikzpicture}
+%
+\info{restore-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=green!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{R};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{imagelist}
+\end{document}
+% \end{macrocode}
+%
+% \subsection{Make the draft module}
+%
+% We run \LaTeX{} on the above \texttt{export.tex} file (the source of
+% this section) to generate \texttt{export.pdf} and
+% \texttt{export.json}. We then process these with the
+% \texttt{export.py} Python script to get the draft VASSAL module
+% \texttt{Draft.vmod}.
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json
+% \end{verbatim}
+%
+% The utility \texttt{kpsewhich}\footnotemark{\TeX{}Live and similar
+% \TeX{} distributions.} will report the location of a file in the
+% \TeX{} installation tree(s). Note that the \texttt{`} above are
+% what is typically called `back-ticks' (i.e., what you typically put
+% as the leading character of scare-crows in \LaTeX{}). This is of
+% course Un*x-like syntax. For other OSs, consult your \TeX{}
+% distribution's documentation for how to find files in the \TeX{}
+% installation.
+
+% You can open the module in the VASSAL editor and see what was
+% generated. On the board, all areas marked with the \texttt{zone
+% scope} (or \texttt{zone path}) should be defined as zones. In the
+% OOB, we should have two zones, one for the A faction and one for the
+% B faction. We should also have three groups of counters --- one
+% for each faction and one for ``Markers''. Finally, we should have a
+% window with tabs, one for each defined chart.
+%
+% We can add the rules to the module. So suppose the rules are in
+% \texttt{game.pdf}, then we can do
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod
+% \end{verbatim}
+%
+% to add the rules to the ``Help'' menu. Other information is added
+% to that menu too, such as key-bindings and a short note on how the
+% module was generated. Of course, you should also see the splash
+% image that we defined. The option \texttt{-o}~\meta{filename}
+% writes the module to \meta{filename} rather than the default
+% \texttt{Draft.vmod}.
+%
+% We define the version of the module by passing the option
+% \texttt{-v}~\meta{version} to the Python script. By default, the
+% version is set to \texttt{draft}, and a note on the draft is added
+% to the module and the grids are drawn. Any other version string
+% will suppress these.
+%
+% Also, the default module name is \texttt{Draft} and a similar
+% description is likewise the default. We can change this by passing
+% the options \texttt{-t}~\meta{title} and
+% \texttt{-d}~\meta{description}. Note, you may want to quote the
+% arguments if they contain spaces or the like. Thus, to make a more
+% complete module, we would do something like
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod \
+% -t "LaTeX Wargame tutorial" \
+% -d "Example of using wargame to make a module" \
+% -v 0.1
+% \end{verbatim}
+%
+% Note that you typically need to quote (\texttt{"}) longer strings
+% that contain spaces and other special characters.
+%
+% \subsection{Going the extra mile}
+% \label{sec:vassal:patch}
+%
+% We will take one more step on the VASSAL module, and then we will
+% get back to the Print'n'Play version of the game. We can provide
+% the \texttt{export.py} script with an additional Python script that
+% can tweak the VASSAL module any way we like. We can for example
+% move counters into their starting positions, to the OOB, adjust
+% grids, add more materials, and so on. It is only your imagination,
+% and Python programming skills, that sets the limits on what you can
+% do.
+%
+% Here we will make a simple \texttt{patch.py} Python script which
+% does very little. The \textsf{wargame} package,
+% \textsf{wgexport} class, and \texttt{export.py} script has already
+% done the heavy work for us. Not least be because we have taken care
+% to add in \texttt{zone} styles where needed.
+%
+% We will
+% put all the counters on the OOB chart, and adjust some grids - most
+% notably the OOB and turn track grids. Other than that, we will not
+% do much.
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod
+% -t "LaTeX Wargame tutorial" \
+% -d "Example of using wargame to make a module" \
+% -v 0.1 -p patch.py
+% \end{verbatim}
+%
+% Now for the script:
+%
+% \begin{verbatim}
+% def patch(build,data,vmod,verbose=False):
+% # We need to import the export module :-)
+% import export
+%
+% # Get the game and last free GPID
+% game = export.get_game(build)
+% gpid = int(game.getAttribute('nextPieceSlotId'))
+%
+% # Get all boards
+% maps = export.get_maps(build)
+% board = maps['Board']
+%
+% mkeys = export.get_masskey(board,'name')
+% export.set_node_attr(mkeys['Eliminate'],
+% icon='eliminate-icon.png')
+% export.set_node_attr(mkeys['Flip'],
+% icon='flip-icon.png')
+%
+% # Get main map
+% pool = maps['DeadMap']
+% export.set_node_attr(pool,icon='pool-icon.png')
+%
+% mkeys = export.get_masskey(pool,'name')
+% export.set_node_attr(mkeys['Restore'],
+% icon='restore-icon.png')
+%
+% # Get the OOB map
+% oob = export.get_chartwindows(game)['OOBs']
+% export.set_node_attr(oob,icon='oob-icon.png')
+% \end{verbatim}
+%
+% In the \texttt{patch.py} script we can use all the functionality
+% provided by \texttt{export.py}. Elements are XML elements that we
+% apply \texttt{xml.dom.minidom} operations on.
+%
+% \iffalse
+% Local Variables:
+% mode: docTeX
+% TeX-master: "game.tex"
+% End:
+% \fi
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.pdf b/macros/latex/contrib/wargame/doc/tutorial/game.pdf
new file mode 100644
index 0000000000..875523b4d4
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.sty b/macros/latex/contrib/wargame/doc/tutorial/game.sty
new file mode 100644
index 0000000000..0c8fcc0165
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.sty
@@ -0,0 +1,2042 @@
+% \section{The \texttt{game} package}
+% \label{sec:package}
+%
+% To make our game components re-usable (in particular when we want to
+% make a VASSAL module), we will put our definitions of counters,
+% board, and charts into a package file called
+% \texttt{game.sty}\footnote{In fact, most of this document is in that
+% file, because it allows us to document the code using \LaTeX{}'s
+% \texttt{ltxdoc} class.}
+%
+% Code shown below is in the package.
+%
+% The first thing we do in the package is to identify the package and
+% load the \textsf{wargame} package.
+%
+% \begin{macrocode}
+\ProvidesPackage{game}
+\RequirePackage{wargame}
+\RequirePackage{colortbl}
+% \end{macrocode}
+% \section{The units}
+% \label{sec:units}
+%
+% We will set-up our units for the game. As noted above, we will make
+% two factions which we will call \emph{A} and \emph{B}.
+%
+% \begin{quote}
+% The NATO
+% App6(d)\footnote{\url{https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN}}
+% symbology defines that friendly and hostile units should have
+% different symbol frames, but as we will make a game for two
+% players, and it seems unfair to label one as \emph{hostile} and
+% the other \emph{friendly}, we will stick with the
+% \texttt{friendly} base frames.
+%
+% Of course, if we were to make a solitaire or cooperative game, we
+% might want to use the \texttt{hostile} base frame for the opponent
+% units.
+% \end{quote}
+%
+% \subsection{Faction styles}
+% \label{sec:package:factions}
+%
+% We will start by defining two \Tikz{}\footnote{The \textsf{wargame}
+% package relies heavily on \Tikz{}. It is highly recommended that you
+% acquaint yourself with \Tikz{}. The manual, including tutorials, is
+% available from \url{https://ctan.org/pkg/pgf}.} styles for our two
+% factions. We will call these \texttt{a} and \texttt{b} (obviously).
+% These will define the colours of all counters of those sides.
+%
+% \begin{macrocode}
+\colorlet{a-bg}{hostile}
+\colorlet{b-bg}{friendly}
+\tikzset{%
+ a/.style={fill=a-bg,draw=black},
+ b/.style={fill=b-bg,draw=black}}
+% \end{macrocode}
+% Note that we made the colours \texttt{a-bg} and \texttt{b-bg}.
+% Since we will use these colours a few times, it makes sense to make
+% a single definition which we can then freely change at any point and
+% then automatically have that change propagate everywhere.
+%
+% These styles are shown in \figurename~\ref{fig:faction-colors}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \draw[a] (0,0) rectangle ++(1,1) node[above]{\texttt{a}};%
+% \draw[b] (3,0) rectangle ++(1,1) node[above]{\texttt{b}};%
+% \end{tikzpicture}
+% \caption{Faction colours}
+% \label{fig:faction-colors}
+% \end{figure}
+%
+% Here we have used the colours \texttt{friendly} and \texttt{hostile}
+% defined by the \textsf{wargame} package, even though we said we
+% would not use the corresponding \texttt{hostile} base frame.
+% However, we can use any colours we can define in \LaTeX{} with the
+% \textsf{xcolor}\footnote{\url{https://ctan.org/pkg/xcolor}} package,
+% for example,
+%
+% \begin{verbatim}
+% \definecolor{a-bg}{HTML}{3333ff}
+% \end{verbatim}
+%
+% which will make a light blue colour.
+%
+% Since we intent to make \emph{double-sided} counters, so that units
+% will have two steps (front and back), we also define styles for the
+% back side. These will have lighter backgrounds than the front
+% side.
+%
+% \begin{macrocode}
+\tikzset{%
+ a flipped/.style={a,fill=pgffillcolor!50!white},
+ b flipped/.style={b,fill=pgffillcolor!50!white}}
+% \end{macrocode}
+% Note that we use the styles \texttt{a} and \texttt{b} as bases for
+% these styles. Thus, if we make changes to the base styles, they
+% automatically propagate to our flipped styles.
+%
+% \begin{quote}
+% By convention, it is best to name your back-sides of counters and
+% so on the same as the front side, but with `\texttt{ flipped}'
+% appended. It is therefore also a good idea to use that convention
+% for styles and such.
+% \end{quote}
+%
+% The colour \texttt{pgffillcolor} is what ever the current fill
+% colour is (i.e., set by the \texttt{a} and \texttt{b} styles).
+%
+% These styles are shown in
+% \figurename~\ref{fig:faction-colors-flipped}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \draw[a flipped] (0,0) rectangle ++(1,1) node[above]{\texttt{a flippped}};%
+% \draw[b flipped] (3,0) rectangle ++(1,1) node[above]{\texttt{b flipped}};%
+% \end{tikzpicture}
+% \caption{Faction flipped colours}
+% \label{fig:faction-colors-flipped}
+% \end{figure}
+%
+% \subsection{Unit templates}
+% \label{sec:units:templates}
+%
+% In our game we will have two kinds of units: land, and air.
+%
+% Land units represent ground types of different kinds (infantry,
+% armoured, etc.) and have two \emph{factors}: A combat factor (CF)
+% and a movement factor (MF). In addition, for artillery units, we
+% will also specify a range. Each unit will also have a unique
+% identifier, and possibly parent organisational identifier, starting
+% hex, and turn of appearance.
+%
+% Air units provide different kinds of support for the ground units.
+% Since we will make a game on an \emph{operational} level (armies,
+% divisions, brigades), we will give air units a single factor --- the
+% odds column shift (see the combat resolution table later on).
+%
+% Let us first define a template for the ground units. We will call
+% this \texttt{gu} (for ground unit), and it will take 8\footnote{Yes,
+% that's a lot, but we may leave some of them blank. Don't worry,
+% we'll make more short-hands.} arguments:
+% \begin{enumerate}\tightlist
+% \item The unit type
+% \item The lower unit type (e.g., airborne)
+% \item The unit size (echelon)
+% \item The unit identifier
+% \item The parent unit identifier
+% \item The factors (more on this later)
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+%
+% \begin{macrocode}
+\tikzset{
+ gu/.style args={#1,#2,#3,#4,#5,#6,#7,#8}{%
+ chit={%
+ symbol={% Defines the NATO symbol
+ faction=friendly, % See note
+ command=land, % Ground units
+ main={#1},% Unit type(s) (e.g., infantry)
+ lower=#2,% Lower type
+ echelon=#3,% Size (e.g., division)
+ scale line widths,
+ line width=1pt,
+ },
+ unique={chit/small identifier=#4}, % Unit ID
+ parent={chit/small identifier=#5}, % Parent ID
+ factors={#6}, % The unit factors
+ upper left={chit/small identifier=#7}, % Hex
+ upper right={gu turn=#8} % Turn
+ } % end of chit
+ } % end of gu
+}
+% \end{macrocode}
+%
+% Note the \texttt{unique}, \texttt{parent}, and \texttt{upper left}
+% keys of \texttt{chit} are set to contain a \texttt{chit/identifier}
+% (or \texttt{chit/small identifier}) picture. In general, all the
+% keys of a \texttt{chit} and (and \texttt{natoapp6c}) \Tikz{} node
+% need to be \texttt{pic}\footnote{A small re-usable picture. See the
+% \Tikz{} manual, Chapter~18.} objects. The \texttt{chit/identifier}
+% picture outputs the text (the argument after the \texttt{=}).
+%
+% Note that for \texttt{upper left}, we used the \texttt{pic}
+% \texttt{gu~turn}, which we have not defined yet. Let us define that
+% now. This will be a picture that puts in the turn number when a
+% unit appears. Turn number ``0'' is the ``At-start'' turn, and so we
+% will deal with that specifically. Other turns should just be done
+% normally --- that is, we use another \texttt{chit/small identifier} picture
+%
+% \begin{macrocode}
+\tikzset{
+ gu turn/.pic={%
+ \ifx#1\empty\else
+ \ifnum0=#1\else%
+ \pic{chit/small identifier={#1}};\fi\fi},
+ pics/gu turn/.default=0
+}
+% \end{macrocode}
+% Note that we set the default value in case we get no turn number.
+%
+% We have put the keys \texttt{scale~line~widths} and
+% \texttt{line~width=1pt} into the \texttt{symbol} (the NATO symbol)
+% part. The latter sets the line width to be a little thicker than
+% usual. This is to make the counters more easily read. The former
+% ensures that if we scale our counters up or done, then the line
+% width will likewise scale\footnote{Other elements scale
+% automatically because of \Tikz{}'s \texttt{transform shape} key}.
+%
+% For the factors, we will use two different \texttt{pic}:
+% \texttt{chit/2 factors} for regular ground units, and \texttt{chit/2
+% factors artillery} for artillery units.
+%
+% The template is shown in \figurename~\ref{fig:ground-unit}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[gu={infantry,,division,23,2,
+% {chit/2 factors={2,4}},D3,2}];%
+% \end{tikzpicture}
+% \caption{Ground unit template}
+% \label{fig:ground-unit}
+% \end{figure}
+%
+% The image above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[gu={infantry,,division,23,2,
+% {chit/2 factors={2,4}},D3,2}];
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% As said above, we will have artillery ground units and other kinds
+% of ground units. Let us make two templates --- one for
+% field-artillery ground units (\texttt{fu}), which has a range, and
+% regular combat units (\texttt{cu}).
+%
+% First the artillery unit type: \texttt{fu}. This takes 8 arguments
+%
+% \begin{enumerate}\tightlist
+% \item The echelon
+% \item The identifier
+% \item The parent identifier
+% \item The combat factor (CF)
+% \item The movement factor (MF)
+% \item The range
+% \item The starting hex
+% \item The turn of appearance
+%
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ fu/.style args={#1,#2,#3,#4,#5,#6,#7,#8}{
+ gu={%
+ {{[fill=pgfstrokecolor]artillery}}, % Type
+ ,%lower
+ #1, % echelon
+ #2, % ID
+ #3, % Parent ID
+ {chit/2 factors artillery={#4,#5,#6}},
+ #7, % Hex
+ #8 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% Note that we pass the options \texttt{[fill=pgfstrokecolor]} to the
+% \texttt{pic} \texttt{artillery}\footnote{To be explicit
+% \texttt{natoapp6c/s/artillery}.} to fill in the artillery symbol.
+% Note that we need to protect this by putting in curly brackets (2 in
+% this case). Similarly, we protect the
+% \texttt{chit/2~factors~artillery} call.
+%
+% \begin{quote}
+% In general, we may pass options (or keys) to a \texttt{pic} by
+% preceeding its name with \oarg{keys}. However, we then
+% \emph{must} protect the it as in
+% \texttt{\{\oarg{keys}\meta{pic}\}}. Further, if \oarg{keys}
+% contains a list of keys, separated by commas, then we need to
+% protect \meta{keys} too, as in
+% \texttt{\{[\{\oarg{keys}\}]\meta{pic}\}}. A little clunky, but
+% that's how \TeX{} works sometimes.
+% \end{quote}
+%
+% And now the combat unit template: \texttt{cu}. This takes 9
+% arguments.
+%
+% \begin{enumerate}\tightlist
+% \item The type
+% \item The lower type
+% \item The echelon
+% \item The identifier
+% \item The parent identifier
+% \item The combat factor (CF)
+% \item The movement factor (MF)
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ cu/.style args={#1,#2,#3,#4,#5,#6,#7,#8,#9}{
+ gu={%
+ {#1}, % Type
+ #2, % lower
+ #3, % echelon
+ #4, % ID
+ #5, % Parent
+ {chit/2 factors={#6,#7}},
+ #8, % Hex
+ #9 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% Again, let us see what that looks like (\figurename~\ref{fig:fu-cu}).
+
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[cu={infantry,airborne,regiment,
+% 21,2,6,4,E2,}](0,0);%
+% \chit[fu={battalion,23,21,1,3,4,E2,}](2,0);%
+% \end{tikzpicture}
+% \caption{Combat and field artillery templates}
+% \label{fig:fu-cu}
+% \end{figure}
+%
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[fu={battalion,23,21,1,3,4,E2,}](0,0);
+% \chit[cu={infantry,airborne,regiment,21,2,6,4,E2,}]
+% (2,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Finally, we make a template for air units. We will have
+% Close-combat Air Support (CAS \texttt{cas}) and strategic bombers
+% (\texttt{sb}). To make things a little easier for us, we first
+% define a template for all air units. This takes 7 arguments:
+% \begin{enumerate}\tightlist
+% \item The unit type (e.g., \texttt{fixed wing}, \texttt{rotary
+% wing}).
+% \item The upper modifier (e.g., \texttt{F} for fighter)
+% \item The lower modifier (e.g., \texttt{H} for `heavy')
+% \item The unit identifier
+% \item The parent unit identifier
+% \item The factor (column shift)
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ au/.style args={#1,#2,#3,#4,#5,#6,#7}{%
+ chit={%
+ symbol={% Defines the NATO symbol
+ faction=friendly, % See note
+ command=air, % Air units
+ main=#1,% Unit type
+ upper={text=#2},
+ lower={text=#3},
+ scale line widths,
+ line width=1pt,
+ },
+ unique={chit/identifier=#4}, % Unit ID
+ parent={chit/identifier=#5}, % Parent ID
+ factors={#6}, % The unit factors
+ upper right={gu turn=#7} % Turn
+ } % end of chit
+ } % end of gu
+}
+% \end{macrocode}
+% Here, \texttt{text}\footnote{really \texttt{/natoapp6c/s/text}.} for
+% \texttt{lower} and \texttt{upper} is a picture that puts the text
+% given as the argument after the \texttt{=}. The template is shown in
+% \figurename~\ref{fig:au}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[au={fixed wing,B,,A,1,%
+% {chit/1 factor=+2},3}](0,0);%
+% \end{tikzpicture}
+% \caption{Air unit template}
+% \label{fig:au}
+% \end{figure}
+% %
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[au={fixed wing,B,,A,1,
+% {chit/1 factor=+2},3}](0,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% As we said, we will have CAS and strategic bomber wings in this
+% game, so we make templates for these. Our CAS will be helicopters
+% (\texttt{rotery wing}) while the strategic bombers are planes. CAS
+% gives a 1 CF, while strategic bombers gives 1 column shift.
+% Arguments are
+%
+% \begin{enumerate}\tightlist
+% \item The identifier
+% \item The parent identifier
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ cas/.style args={#1,#2,#3}{ % Close air support
+ au={% Air unit
+ rotary wing, % Helicopter
+ ,, % No lower, upper
+ #1, % ID
+ #2, % Parent ID
+ {chit/2 factors={1,0}},
+ #3 %Turn
+ }
+ },
+ sb/.style args={#1,#2,#3}{% strategic bomber
+ au={% Air unit
+ fixed wing, %Planes
+ B, % Bomber
+ M, % Medium
+ #1, % ID
+ #2, % Parent
+ {chit/1 factor={+1}},
+ #3 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% The templates are shown in \figurename~\ref{fig:cas-sb}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[cas={1,2,10}](0,0);%
+% \chit[sb={3,4,}](2,0);%
+% \end{tikzpicture}
+% \caption{CAS and SB templates}
+% \label{fig:cas-sb}
+% \end{figure}
+%
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[cas={1,2,10}(0,0);
+% \chit[sb={3,4,}(2,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Specialisations}
+% \label{sec:units:specialisations}
+%
+% We will now make some specialisations of the \texttt{gu} style.
+% These represent headquarters \texttt{hq}, mechanised infantry
+% \texttt{mi}, infantry \texttt{in}, and so
+% on. We do this because we want units of the same kind to have
+% similar factors and so on. Since almost all of our units are
+% battalions, we also code that in.
+%
+%
+% All of these, except \texttt{ff} for field artillery units, take 4
+% arguments
+% \begin{enumerate}\tightlist
+% \item The identifier
+% \item The parent identifier
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+%
+% The style \texttt{ff} precedes these arguments with a single
+% argument for the unit size (echelon).
+%
+% \begin{macrocode}
+\tikzset{
+ in/.style args={#1,#2,#3,#4}{%
+ cu={infantry,,battalion,#1,#2,2,3,#3,#4}},
+ mi/.style args={#1,#2,#3,#4}{%
+ cu={{armoured,infantry},,battalion,#1,#2,4,4,#3,#4}},
+ ab/.style args={#1,#2,#3,#4}{%
+ cu={infantry,airborne,battalion,#1,#2,1,3,#3,#4}},
+ ca/.style args={#1,#2,#3,#4}{%
+ cu={combined arms,,battalion,#1,#2,3,3,#3,#4}},
+ ar/.style args={#1,#2,#3,#4}{%
+ cu={armoured,,battalion,#1,#2,6,4,#3,#4}},
+ re/.style args={#1,#2,#3,#4}{%
+ cu={reconnaissance,,battalion,#1,#2,6,5,#3,#4}},
+ ff/.style args={#1,#2,#3,#4,#5}{%
+ fu={#1,#2,#3,2,5,3,#4,#5}},
+ hq/.style args={#1,#2,#3,#4,#5}{
+ cu={headquarters,,#1,#2,#3,0,1,#4,#5}},%
+ hqbg/.style args={#1,#2,#3,#4}{
+ hq={brigade,#1,#2,#3,#4}},
+ hqregt/.style args={#1,#2,#3,#4}{
+ hq={regiment,#1,#2,#3,#4}},
+}
+
+% \end{macrocode}
+% \subsection{The actual units}
+% \label{sec:units:actual}
+%
+% Above we defined templates for the various units. These templates
+% saves us a lot of trouble when defining the \emph{actual} units.
+% Below we will make the units for each faction in the game. We will
+% define them as \Tikz{} styles, just like we did for the templates.
+%
+% \begin{quote}
+% Above we said we want to make double sided counters. We will get
+% back to the back-side (flipped) versions of the counters in a
+% moment.
+% \end{quote}
+%
+% \subsubsection{Side A}
+%
+% Below we will define the units without much commentary. Note that
+% we use the style \texttt{a} for all our units so that they get the
+% right style. Note that we pass the single argument \texttt{\#1} as
+% the turn of appearance to all units. This will be used when
+% generating an \emph{Order of Battle} later on.
+%
+% \begin{macrocode}
+\tikzset{
+ a hq/.style ={a,hq={corps,,,A2,#1}},
+ a 1 hqbg/.style ={a,hqbg={1,,A2,#1}},
+ a 1 1lg ibn/.style={a,mi={I-LG,1,D3,#1}},
+ a 1 1gh ibn/.style={a,mi={I-GH,1,C2,#1}},
+ a 1 2jd ibn/.style={a,mi={II-JD,1,A2,#1}},
+ a 1 1 abn/.style ={a,ff={battalion,1,1,A1,#1}},
+ a 2 hqbg/.style ={a,hqbg={2,,C2,#1}},%
+ a 2 1jd abn/.style={a,ar={I-JD,2,A2,#1}},%
+ a 2 3gh rbn/.style={a,re={I-JD,2,D2,#1}},%
+ a aregt/.style={a,ff={regiment,,,A1,#1}},%
+ a f/.style={a,cas={,,#1}},%VR
+ a b/.style={a,sb={,,#1}}%SK
+}
+% \end{macrocode}
+% \iffalse
+% KA: A2 Karup
+% HO: A2 Holsterbro
+% HV: D3 Høvelte
+% SL: C2 Slagelse
+% OK: A1 Oksbøl
+% RO: D2 Rønne
+% VR: D3 Værløse
+% SK: B2 Skydstrup
+% \fi
+% Let us draw these units in what looks like an organisational
+% diagram (\figurename~\ref{fig:a-org}).
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \node[a hq] (a hq) {};
+% \node[a aregt, below right=10mm and 10mm of a hq] (a aregt) {};
+% \node[a 1 hqbg, below left=10mm and 10mm of a hq] (a 1 hqbg) {};
+% \node[a 1 1lg ibn,below right=5mm and -8mm of a 1 hqbg] (a 1 1lg ibn){};
+% \node[a 1 1gh ibn,below=5mm of a 1 1lg ibn] (a 1 1gh ibn){};
+% \node[a 1 2jd ibn,below=5mm of a 1 1gh ibn] (a 1 2jd ibn){};
+% \node[a 1 1 abn, below=5mm of a 1 2jd ibn] (a 1 1 abn) {};
+% \node[a 2 hqbg, below=10mm of a hq] (a 2 hqbg) {};
+% \node[a 2 1jd abn,below right=5mm and -8mm of a 2 hqbg] (a 2 1jd abn){};
+% \node[a 2 3gh rbn,below=5mm of a 2 1jd abn] (a 2 3gh rbn){};
+% \node[a f, right=10mm of a aregt] (a f) {};
+% \node[a b, below=5mm of a f] (a b) {};
+% \draw(a 1 hqbg.south west) |- (a 1 1lg ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 1gh ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 2jd ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 1 abn.west);
+% \draw(a 2 hqbg.south west) |- (a 2 1jd abn.west);
+% \draw(a 2 hqbg.south west) |- (a 2 3gh rbn.west);
+% \coordinate (mid) at ($(a hq.south)+(0,-.5)$) {};
+% \coordinate (off) at ($(mid)+(1.5,0)$) {};
+% \draw(a hq.south) -- (mid);
+% \draw(mid) -| (a 1 hqbg.north);
+% \draw(mid) -- (a 2 hqbg.north);
+% \draw(mid) -| (a aregt.north);
+% \end{tikzpicture}
+% \caption{Faction A organisational chart}
+% \label{fig:a-org}
+% \end{figure}
+%
+% Before we go on to side B, we will make a macro that contains a list
+% of all our A side counters.
+%
+% \begin{macrocode}
+\def\alla{{%
+ a hq,
+ a 1 hqbg,
+ a 1 1lg ibn,
+ a 1 1gh ibn,
+ a 1 2jd ibn,
+ a 1 1 abn,
+ a 2 hqbg,
+ a 2 1jd abn,
+ a 2 3gh rbn,
+ a aregt,
+ a f,
+ a b}}
+% \end{macrocode}
+%
+% \subsubsection{Side B}
+%
+% Below we will define the units without much commentary. Note that
+% we use the style \texttt{b} for all our units so that they get the
+% right style. Note that we pass the single argument \texttt{\#1} as
+% the turn of appearance to all units. This will be used when
+% generating an \emph{Order of Battle} later on.
+%`
+% \begin{macrocode}
+\tikzset{
+ b hq/.style= {b,hq= {corps,,,F6,#1}},
+ b lg hqregt/.style= {b,hqregt={LG,,F6,#1}},
+ b lg ibn/.style= {b,in= {LG,,F6,#1}},
+ b k3 hqregt/.style= {b,hqregt={K3,,E7,#1}},
+ b k3 31 abibn/.style= {b,ab= {31,K3,E7,#1}},
+ b k4 hqregt/.style= {b,hqregt={K4,,F10,#1}},
+ b k4 abibn/.style= {b,ab= {NL,K4,F10,#1}},
+ b p4 hqregt/.style= {b,hqregt={P4,,D7,#1}},
+ b p4 41 cabn/.style= {b,ca= {41,P4,D7,#1}},
+ b p4 42 cabn/.style= {b,ca= {42,P4,D7,#1}},
+ b p7 hqregt/.style= {b,hqregt={P7,,D4,#1}},
+ b p7 71 ibn/.style= {b,mi= {71,P7,D4,#1}},
+ b p7 72 cabn/.style= {b,ca= {72,P7,D4,#1}},
+ b i13 hqregt/.style= {b,hqregt={I13,,D8,#1}},
+ b i13 131 ibn/.style= {b,in= {131,I13,D8,#1}},
+ b i13 132 ibn/.style= {b,in= {132,I13,D8,#1}},
+ b p18 hqregt/.style= {b,hqregt={P18,,F5,#1}},
+ b p18 181 cabn/.style={b,ca= {181,P18,F5,#1}},
+ b i19 hqregt/.style= {b,hqregt={I19,,F10,#1}},
+ b i19 191 cabn/.style={b,ca= {191,I19,F10,#1}},
+ b i19 192 cabn/.style={b,ca= {192,I19,F10,#1}},
+ b i21 hqregt/.style= {b,hqregt={I21,,D10,#1}},
+ b i21 211 ibn/.style= {b,in= {211,I21,D10,#1}},
+ b i21 212 ibn/.style= {b,in= {212,I21,D10,#1}},
+ b f/.style= {b,cas= {F17,BL,#1}},
+ b b/.style= {b,sb= {F7,SA,#1}}
+}
+% \end{macrocode}
+% \iffalse
+% SH: F6 Stockholm
+% KU: F6 Kungsängen near stockholm F6
+% KA: E7 Karlsborg
+% AR: Off Arvisjaur (top of baltic)
+% SK: D7 Skövde
+% RE: D3 Revingehed
+% FA: D8 Falun
+% VI: F5 Visby (delay from island)
+% BO: Off Boden (top of baltic)
+% SO: Off (D10) Sollefteå
+% \fi
+% Let us draw these units in what looks like an organisational
+% diagram (\figurename~\ref{fig:b-org}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \node[b hq] (b hq) {};
+% \node[b lg hqregt, below left=10mm and 20mm of b hq] (b lg hqregt){};
+% \node[b lg ibn, below right=5mm and -8mm of b lg hqregt] (b lg ibn){};
+% \node[b k3 hqregt, below left=10mm and -1mm of b hq] (b k3 hqregt){};
+% \node[b k3 31 abibn, below right=5mm and -8mm of b k3 hqregt] (b k3 31 abibn){};
+% \node[b k4 hqregt, below right=10mm and -1mm of b hq] (b k4 hqregt){};
+% \node[b k4 abibn, below right=5mm and -8mm of b k4 hqregt] (b k4 abibn){};
+% \node[b p4 hqregt, below right=10mm and 20mm of b hq] (b p4 hqregt){};
+% \node[b p4 41 cabn, below right=5mm and -8mm of b p4 hqregt] (b p4 41 cabn){};
+% \node[b p4 42 cabn, below=5mm of b p4 41 cabn] (b p4 42 cabn){};
+% \node[b p7 hqregt, below left=65mm and 20mm of b hq] (b p7 hqregt){};
+% \node[b p7 71 ibn, below right=5mm and -8mm of b p7 hqregt] (b p7 71 ibn){};
+% \node[b p7 72 cabn, below=5mm of b p7 71 ibn] (b p7 72 cabn){};
+% \node[b i13 hqregt, below left=65mm and -1mm of b hq] (b i13 hqregt){};
+% \node[b i13 131 ibn, below right=5mm and -8mm of b i13 hqregt](b i13 131 ibn){};
+% \node[b i13 132 ibn, below=5mm of b i13 131 ibn] (b i13 132 ibn){};
+% \node[b p18 hqregt, below right=65mm and -1mm of b hq] (b p18 hqregt){};
+% \node[b p18 181 cabn,below right=5mm and -8mm of b p18 hqregt](b p18 181 cabn){};
+% \node[b i19 hqregt, below right=65mm and -1mm of b hq] (b i19 hqregt){};
+% \node[b i19 191 cabn,below right=5mm and -8mm of b i19 hqregt](b i19 191 cabn){};
+% \node[b i19 192 cabn,below=5mm of b i19 191 cabn] (b i19 192 cabn){};
+% \node[b i21 hqregt, below right=65mm and 20mm of b hq] (b i21 hqregt){};
+% \node[b i21 211 ibn, below right=5mm and -8mm of b i21 hqregt] (b i21 211 ibn){};
+% \node[b i21 212 ibn, below=5mm of b i21 211 ibn] (b i21 212 ibn){};
+% \node[b f, right=15mm of b hq] (b f){};
+% \node[b b, right=5mm of b f] (b b){};
+%
+% \draw(b lg hqregt.south west) |- (b lg ibn.west);
+% \draw(b k3 hqregt.south west) |- (b k3 31 abibn.west);
+% \draw(b k4 hqregt.south west) |- (b k4 abibn.west);
+% \draw(b p4 hqregt.south west) |- (b p4 41 cabn.west);
+% \draw(b p4 hqregt.south west) |- (b p4 42 cabn.west);
+% \draw(b p7 hqregt.south west) |- (b p7 71 ibn.west);
+% \draw(b p7 hqregt.south west) |- (b p7 72 cabn.west);
+% \draw(b p18 hqregt.south west) |- (b p18 181 cabn.west);
+% \draw(b i19 hqregt.south west) |- (b i19 191 cabn.west);
+% \draw(b i19 hqregt.south west) |- (b i19 192 cabn.west);
+% \draw(b i13 hqregt.south west) |- (b i13 131 ibn.west);
+% \draw(b i13 hqregt.south west) |- (b i13 132 ibn.west);
+% \draw(b i21 hqregt.south west) |- (b i21 211 ibn.west);
+% \draw(b i21 hqregt.south west) |- (b i21 212 ibn.west);
+%
+% \coordinate (mid) at ($(b hq.south)+(0,.-.5)$);
+%
+% \draw(b hq.south) -- (mid);
+% \draw(mid) -| (b lg hqregt.north);
+% \draw(mid) -| (b k3 hqregt.north);
+% \draw(mid) -| (b k4 hqregt.north);
+% \draw(mid) -| (b p4 hqregt.north);
+%
+% \coordinate (mid2) at ($(b hq.south)+(0,.-6)$);
+% \draw(mid) -- (mid2);
+% \draw(mid2) -| (b p7 hqregt.north);
+% \draw(mid2) -| (b i13 hqregt.north);
+% \draw(mid2) -| (b i19 hqregt.north);
+% \draw(mid2) -| (b i21 hqregt.north);
+%
+% \end{tikzpicture}
+% \caption{Faction B organisational chart}
+% \label{fig:b-org}
+% \end{figure}
+%
+% As before, we will make a macro that contains all B counters.
+%
+% \begin{macrocode}
+\def\allb{{
+ b hq, b lg hqregt, b lg ibn,
+ b k3 hqregt, b k3 31 abibn,
+ b p4 hqregt, b p4 41 cabn, b p4 42 cabn,
+ b p7 hqregt, b p7 71 ibn, b p7 72 cabn,
+ b i13 hqregt, b i13 131 ibn,b i13 132 ibn,%
+ b f, b b%
+ },{},{},{% Empty turns
+ b p18 hqregt, b p18 181 cabn%
+ },{
+ b i21 hqregt, b i21 211 ibn, b i21 212 ibn%
+ },{},{
+ b k4 hqregt, b k4 abibn%
+ },{
+ b i19 hqregt, b i19 191 cabn, b i19 192 cabn%
+ }}
+% \end{macrocode}
+%
+% Note that this is defined as a list of lists, and some of the lists
+% are a little special. This is because we will reuse this list over
+% and over again, and in particular for the Order of Battle charts.
+% The point is that each element of the outer most list correspond to
+% a turn, starting with turn ``0'', or ``At start''. Empty elements
+% are thus turns where there will be no reinforcements for the faction.
+%
+% \subsection{The \texttt{flipped} side of things}
+% \label{sec:units:flipped}
+%
+% Well, really the \texttt{flipped} definitions of the units. The
+% flipped side of our unit counters will represent a ``spent'' state,
+% i.e., a state where the unit cannot attack and only do limited
+% manoeuvres. In this state, all units will have a combat factor or
+% zero and movement factor of 1. Thus, we define a simple style that
+% sets the factors
+%
+% \begin{macrocode}
+\tikzset{
+ flipped/.style={%
+ /chit/factors={chit/2 factors={0,1}},
+ /chit/upper left={},
+ /chit/upper right={}
+ }
+}
+% \end{macrocode}
+% Note that we give the \emph{explicit full} path to the chits factors
+% key. This is because we want to \emph{monkey patch} our units to
+% have these new factors. We also clear the upper left and right
+% corners on the flip side.
+%
+% Now, we'll do a little hack. Previously, we defined the
+% \texttt{a~flipped} and \texttt{b~flipped} styles, but if you look
+% closely, we can see how we can automatically define the flipped fill
+% colours. Thus we make another style that does this.
+%
+% \begin{macrocode}
+\tikzset{%
+ f/.style={%
+ flipped,fill=pgffillcolor!50!white}}
+% \end{macrocode}
+%
+% With this, we can define the \texttt{flipped} state of all A
+% counters.
+%
+% \begin{macrocode}
+\tikzset{%
+ a hq flipped/.style= {a hq ,f},
+ a 1 hqbg flipped/.style= {a 1 hqbg ,f},
+ a 1 1lg ibn flipped/.style= {a 1 1lg ibn,f},
+ a 1 1gh ibn flipped/.style= {a 1 1gh ibn,f},
+ a 1 2jd ibn flipped/.style= {a 1 2jd ibn,f},
+ a 1 1 abn flipped/.style= {a 1 1 abn ,f},
+ a 2 hqbg flipped/.style= {a 2 hqbg ,f},
+ a 2 1jd abn flipped/.style= {a 2 1jd abn,f},
+ a 2 3gh rbn flipped/.style= {a 2 3gh rbn,f},
+ a aregt flipped/.style= {a aregt ,f},
+ a f flipped/.style= {a,f},
+ a b flipped/.style= {a,f},
+}
+% \end{macrocode}
+%
+% Let us draw the A side counters, front and back, using the macro
+% \verb+doublechits+ (\figurename~\ref{fig:a-all}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{\alla}{3}{1.24}
+% \end{tikzpicture}
+% \caption{All faction A counters, front and back}
+% \label{fig:a-all}
+% \end{figure}
+%
+% The above was produced by
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \doublechits{\alla}{3}{1.24}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% We will use the macro \verb+\doublechits+ later on to make our chit
+% sheets. This works \emph{only} because we define the back sides of
+% our chits to have the style `\meta{front} \texttt{flipped}', which
+% is why it is \emph{highly} recommended to follow this convention.
+%
+% We do the same thing for the faction B counters.
+%
+%
+% \begin{macrocode}
+\tikzset{%
+ b hq flipped/.style= {b hq, f},
+ b lg hqregt flipped/.style= {b lg hqregt, f},
+ b lg ibn flipped/.style= {b lg ibn, f},
+ b k3 hqregt flipped/.style= {b k3 hqregt, f},
+ b k3 31 abibn flipped/.style= {b k3 31 abibn, f},
+ b k4 hqregt flipped/.style= {b k4 hqregt, f},
+ b k4 abibn flipped/.style= {b k4 abibn, f},
+ b p4 hqregt flipped/.style= {b p4 hqregt, f},
+ b p4 41 cabn flipped/.style= {b p4 41 cabn, f},
+ b p4 42 cabn flipped/.style= {b p4 42 cabn, f},
+ b p7 hqregt flipped/.style= {b p7 hqregt, f},
+ b p7 71 ibn flipped/.style= {b p7 71 ibn, f},
+ b p7 72 cabn flipped/.style= {b p7 72 cabn, f},
+ b i13 hqregt flipped/.style= {b i13 hqregt, f},
+ b i13 131 ibn flipped/.style= {b i13 131 ibn, f},
+ b i13 132 ibn flipped/.style= {b i13 132 ibn, f},
+ b p18 hqregt flipped/.style= {b p18 hqregt, f},
+ b p18 181 cabn flipped/.style={b p18 181 cabn,f},
+ b i19 hqregt flipped/.style= {b i19 hqregt, f},
+ b i19 191 cabn flipped/.style={b i19 191 cabn,f},
+ b i19 192 cabn flipped/.style={b i19 192 cabn,f},
+ b i21 hqregt flipped/.style= {b i21 hqregt, f},
+ b i21 211 ibn flipped/.style= {b i21 211 ibn, f},
+ b i21 212 ibn flipped/.style= {b i21 212 ibn, f},
+ b f flipped/.style= {b,f},
+ b b flipped/.style= {b,f}}
+% \end{macrocode}
+%
+% Let us draw the faction B counters, front and back, using the macro
+% \verb+doublechits+ (\figurename~\ref{fig:b-all}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{\allb}{3}{1.24}
+% \end{tikzpicture}
+% \caption{All faction B counters, front and back}
+% \label{fig:b-all}
+% \end{figure}
+%
+% The above was produced by
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \doublechits{\allb}{3}{1.24}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Other counters}
+% \label{sec:units:other}
+%
+% In principle one can make as many and different counters and markers
+% as needed. Here, we will keep things simple and only define a game
+% turn marker. The package \textsf{wargame} already defines one as
+% shown in \figurename~\ref{fig:plain-game-turn}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[game turn]
+% \end{tikzpicture}
+% \caption{The \textsf{wargame} game turn counter}
+% \label{fig:plain-game-turn}
+% \end{figure}
+%
+% However, this has no flip side and we would like the side to reflect
+% the faction currently in turn
+%
+% \begin{macrocode}
+\tikzset{
+ game turn/.append style={a},
+ game turn flipped/.style={game turn,b}
+}
+% \end{macrocode}
+%
+% This modified game turn is shown in \figurename~\ref{fig:game-turn}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{{game turn}}{1}{1.24}
+% \end{tikzpicture}
+% \caption{Modified game turn, front and back}
+% \label{fig:game-turn}
+% \end{figure}
+%
+% \section{The board}
+% \label{sec:board}
+%
+% Designing the board is probably where one will spend the most time.
+% The \textsf{wargame} package is not omnipotent, but tries to make it
+% as simple as possible. However, some artistic streak is a good
+% thing, and familiarity with \Tikz{} is highly recommended.
+%
+% The simplest thing one can do is to import an image and superimpose
+% hexes on top of that image. While often a good solution, it does
+% not always give the most pleasing board.
+%
+% The \textsf{wargame} package does not, in and of it self, provide
+% fancy ``modern'' graphics (though it can be done). Rather, off the
+% shelf, it mimics classic wargames of yore (Afrika Korps, D-Day,
+% Russian Campaign, and so on). That is, it uses rather simplified
+% graphics.
+%
+% For our game, we will have three kinds of terrain: Clear, woods, and
+% mountains. The map will have a lot of coastline, but the scale of
+% the game is such that naval units are not really called for.
+% Indeed, the game focuses on land combat with abstracted aerial
+% support.
+%
+% The first thing we do, is to decide a few things about the map. We
+% want to have the hexes automatically label with alphabetic columns
+% and numerical rows. We want to start our rows and columns at 1 (the
+% default is starting at 0). By default, we want the hexes to be white
+% (for clear terrain). To set this up, we define some more
+% keys.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/short bottom columns=even,
+ hex/short top columns=odd,
+ hex/label is name,
+ hex/first row and column are=1,
+ every hex/.style={
+ /hex/label={auto=alpha column},
+ fill=white},
+}%
+% \end{macrocode}
+%
+% Note how we used the \emph{full} path for the \texttt{/hex/label}
+% key. This will be important when we generate a VASSAL module later
+% on.
+%
+% The key \texttt{hex/label is name} makes it so that every hex on the
+% board will be a named \texttt{node}. This means we can refer to a
+% hex in \Tikz{} simply by its label. In fact, we can use various
+% anchors of the hex if we want to --- it is a \texttt{node} like any
+% other node in \Tikz{}.
+%
+% The keys \texttt{hex/short bottom column=even} and
+% \texttt{hex/short~top~column=odd} is mainly used by the
+% \verb+\boardframe+ macro to generate a proper frame.
+%
+% Having defined the settings, we can move on to the board itself. We
+% will do this in parts. This makes it easier to get an overview of,
+% and helps us in this tutorial to explain what is going on.
+%
+% The first thing we do, is define a macro that defines the coast line
+% of our map. We use the hexagonal coordinate system provided by the
+% \textsf{wargame} package, but we could also have used general
+% Cartesian coordinates.
+%
+% \begin{quote}
+% Defining the coastline of a map can be quite tedious. You may
+% want to use some vector graphics editor, say Inkscape, to do
+% this. In the \textsf{wargame} package you will find a Python
+% script to convert an SVG to \Tikz{} paths.
+% \end{quote}
+%
+% Alright, let's make our macro to define the coastline.
+%
+% \begin{macrocode}
+\newcommand\coastline{%
+ (hex cs:c=1,r=1,v=SE)
+ --(hex cs:c=1,r=1,e=SE)
+ --(hex cs:c=1,r=1,e=NE,o=.5)
+ --(hex cs:c=1,r=1,v=NW,o=.7)
+ --(hex cs:c=1,r=2,v=W,o=.6)
+ --(hex cs:c=1,r=2,v=NW,o=.7)
+ --(hex cs:c=1,r=3,v=SE,o=.9)
+ --(hex cs:c=1,r=3,e=SE,o=.9)
+ --(hex cs:c=2,r=4,e=S,o=.7)
+ --(hex cs:c=2,r=3,v=NE,o=.4)
+ --(hex cs:c=2,r=3,e=S,o=.1)
+ --(hex cs:c=2,r=3,v=E,o=.8)
+ --(hex cs:c=2,r=3,e=SE,o=.8)
+ --(hex cs:c=2,r=3,v=SE,o=.6)
+ --(hex cs:c=2,r=2,v=NW,o=.2)
+ --(hex cs:c=2,r=2,e=SE)
+ --(hex cs:c=3,r=1,e=NE)
+ --(hex cs:c=4,r=2,e=N,o=.3)
+ --(hex cs:c=5,r=2,e=S,o=.6)
+ --(hex cs:c=5,r=2,v=SE,o=.9)
+ --(hex cs:c=7,r=3,v=E)
+ --(hex cs:c=7,r=1,v=E)
+ --(hex cs:c=6,r=1,v=E,o=2.5)
+ --cycle
+ (hex cs:c=3,r=2,v=W,o=.5)
+ --(hex cs:c=4,r=3,e=NW,o=.75)
+ --(hex cs:c=4,r=3,e=SW,o=.3)
+ --(hex cs:c=4,r=2,e=NW,o=.7)
+ --(hex cs:c=3,r=2,v=SW,o=.4)
+ --cycle
+ (hex cs:c=2,r=4,e=N,o=.8)
+ --(hex cs:c=2,r=4,v=E,o=.7)
+ --(hex cs:c=3,r=3,v=E,o=.8)
+ --(hex cs:c=4,r=3,v=NW,o=.6)
+ --(hex cs:c=4,r=3,e=NW,o=.1)
+ --(hex cs:c=4,r=3,v=SE,o=.4)
+ --(hex cs:c=5,r=3,v=SW,o=.6)
+ --(hex cs:c=5,r=3,v=NE,o=.2)
+ --(hex cs:c=5,r=3,e=NE)
+ --(hex cs:c=6,r=4,v=SW,o=.3)
+ --(hex cs:c=5,r=4,v=E,o=1.7)
+ --(hex cs:c=6,r=5,e=N)
+ --(hex cs:c=6,r=6,v=E)
+ --(hex cs:c=7,r=6,v=NW,o=.4)
+ --(hex cs:c=6,r=7,e=S,o=.2)
+ --(hex cs:c=6,r=7,e=NW)
+ --(hex cs:c=6,r=8,e=NW,o=.7)
+ --(hex cs:c=7,r=9,e=NE)
+ --(hex cs:c=6,r=10,v=E,o=2.5)
+ --(hex cs:c=7,r=10,v=E)
+ --(hex cs:c=1,r=10,v=W)
+ --(hex cs:c=2,r=4,v=W,o=2.5)
+ --(hex cs:c=2,r=5,v=SW)
+ --cycle
+ ;
+}
+% \end{macrocode}
+%
+% The coast line is shown in \figurename~\ref{fig:coast}\footnote{Any
+% resemblance to any actual location is, erhm, accidental?}
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[scale=.7]
+% \draw[fill=gray] \coastline;
+% \end{tikzpicture}
+% \caption{The coast line}
+% \label{fig:coast}
+% \end{figure}
+%
+% As you can see, it is pretty simple. Not too many details about the
+% nooks and crannies. Now we want to define some colours that we will
+% use on the map. As mentioned above, we will have some sea, and we
+% will have some surrounding neutral countries. Let us define some
+% colours for these things.
+%
+% \begin{macrocode}
+\definecolor{sea}{HTML}{18b5db}
+\colorlet{neutral}{gray!25!white}
+\colorlet{coast}{black}
+% \end{macrocode}
+%
+% OK, with that out of the way, we start on the hexes in earnest. We
+% define the macro \verb+\hexes+ to produce our hexes within our map.
+%
+% \begin{macrocode}
+\newcommand\hexes[1][]{
+% \end{macrocode}
+%
+% We have defined this macro to take a single optional argument. We
+% wont use that here, but it might come in handy at some later point.
+%
+% The first thing we do, is to fill the entire map with \texttt{sea}.
+%
+% \begin{macrocode}
+ \fill[sea](-1.000,-0.866) rectangle(10.,15.580);
+% \end{macrocode}
+%
+% Then we use the macro \verb+\coastline+ to define a path that we may
+% use over and over again.
+%
+% \begin{macrocode}
+ \path[save path=\coast]\coastline;
+% \end{macrocode}
+%
+% Next up, we want to draw hexes that are on the coast line but also
+% has land parts in it. This is so that the hexes are complete and
+% get a proper label on it. We define the fill to be the sea
+% colour, and the lines labels to be white
+%
+% \begin{macrocode}
+ \begin{scope}[
+ every hex/.append style={white,fill=sea},
+ hex/label/.append style={color=white}]
+ \hex(c=1,r=1); \hex(c=1,r=2);
+ \hex(c=1,r=3);
+ \hex(c=2,r=2); \hex(c=2,r=3);
+ \hex(c=2,r=4);
+ \hex(c=3,r=2); \hex(c=3,r=3);
+ \hex(c=4,r=2); \hex(c=4,r=3);
+ \hex(c=5,r=3); \hex(c=5,r=7);
+ \hex(c=6,r=4); \hex(c=6,r=5);
+ \hex(c=6,r=6); \hex(c=6,r=7);
+ \hex(c=6,r=8); \hex(c=6,r=9);
+ \hex(c=7,r=6); \hex(c=7,r=9);
+ \end{scope}
+% \end{macrocode}
+% Note that we use the \texttt{.append style} handler so that we get
+% the setting from above here too (labels, among other things). These
+% amended styles only have effect inside the \texttt{scope}. Once we
+% leave the scope, then the old settings are restored.
+%
+% We draw a compass needle.
+%
+% \begin{macrocode}
+ \draw[white,-{Stealth[]},
+ scale line widths,
+ line width=1mm]
+ (hex cs:c=7,r=4,v=SE) -- ++(110:2)
+ node[midway,
+ font=\sffamily\bfseries\LARGE,
+ transform shape,
+ rotate=-90,sloped]{N};
+% \end{macrocode}
+%
+% Since the areas where we do not add hexes are considered neutral
+% countries in this game, we fill the whole coast line with the
+% previously defined \texttt{neutral} colour.
+%
+% \begin{macrocode}
+ \settosave{\coast}
+ \fill[neutral];
+% \end{macrocode}
+%
+% Here we have the first use of the saved path \verb+\coast+. We make
+% that the current path by calling \verb+\setosave+ --- a small
+% utility in the \textsf{wargame} package.
+%
+% We can now add the actual hexes. Some of the hexes will represent
+% different terrain, and that will be clear from the definitions. We
+% will put our definitions inside a scope, and the first thing we do
+% in that scope is to clip everything to our coast line. This will be
+% the second use of \verb+\coast+.
+%
+% \begin{macrocode}
+ \begin{scope}
+ \settosave{\coast}
+ \clip;
+
+ \hex(c=1,r=1);\hex(c=1,r=2);\hex(c=1,r=3);
+% \end{macrocode}
+%
+% Note that we use the \texttt{hex cs} coordinate system. We specify
+% the column (\texttt{c}) and the row (\texttt{r}) of each hex. We can
+% use longer forms, of the keys if we want.
+%
+% The southern border of A factions country needs a little special
+% attention. We clip the drawn hex, and draw the border. In fact, we
+% draw the hex twice, first time with a white outline and the neutral
+% fill colour. This is so that the full hex will be drawn, even it is
+% only partially within the map area.
+%
+% \begin{macrocode}
+ \hex[white,fill=neutral,label=](c=2,r=2);
+ \begin{scope}
+ \clip(hex cs:c=2,r=2,v=SW)
+ --(hex cs:c=2,r=2,v=E)
+ --(hex cs:c=2,r=2,v=NE)
+ --(hex cs:c=2,r=2,v=NW)
+ --(hex cs:c=2,r=2,v=W)
+ --cycle;
+ \hex(c=2,r=2);
+ \end{scope}
+ \draw[coast] (hex cs:c=2,r=2,v=SW)
+ --(hex cs:c=2,r=2,v=E);
+% \end{macrocode}
+% Note that our clipping path is defined in the \texttt{hex cs}
+% coordinate system, and how we have retrieved vertex coordinates via
+% the key \texttt{v}.
+%
+% Now we come to some other terrain: woods and mountains.
+%
+% \begin{macrocode}
+ \hex(c=2,r=3);\hex(c=2,r=4);\hex(c=2,r=5);
+ \hex[terrain=mountains](c=2,r=6);
+ \hex[terrain=mountains](c=2,r=7);
+ \hex[terrain=mountains](c=2,r=8);
+% \end{macrocode}
+%
+% Again, we do not want to draw the hex in the neutral country to
+% the south, so we clip this hex too.
+%
+%
+%
+%
+% \begin{macrocode}
+ \hex[white,fill=neutral,label=](c=4,r=2);
+ \begin{scope}
+ \clip(hex cs:c=4,r=2,v=W)
+ --(hex cs:c=4,r=2,v=NE)
+ --(hex cs:c=4,r=2,v=NW)
+ --cycle;
+ \hex(c=4,r=2);
+ \end{scope}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \hex(c=3,r=2); \hex(c=3,r=3);
+ \hex[terrain=woods](c=3,r=4);
+ \hex(c=3,r=5);
+ \hex[terrain=woods](c=3,r=6);
+ \hex[terrain=woods](c=3,r=7);
+ \hex[terrain=mountains](c=3,r=8);
+ \hex[terrain=mountains](c=3,r=9);
+% \end{macrocode}
+%
+% In the next step, we will add a town to the map.
+%
+% \begin{macrocode}
+ \hex[town={
+ place={(hex cs:c=1,r=1,e=SW,o=.5)}}]
+ (c=4,r=3);
+ \hex[terrain=woods](c=4,r=4);
+ \hex(c=4,r=5);
+ \hex[terrain=woods](c=4,r=6);
+ \hex[terrain=woods](c=4,r=7);
+ \hex[terrain=woods](c=4,r=8);
+ \hex[terrain=woods](c=4,r=9);
+ \hex(c=4,r=10);
+% \end{macrocode}
+% The \texttt{place} key specifies the placement of the town relative
+% to the hex centre.
+%
+% For the rest of the map, there isn't much new.
+%
+% \begin{macrocode}
+ \hex(c=5,r=3);
+ \hex[terrain=woods](c=5,r=4);
+ \hex[](c=5,r=5);
+ \hex[terrain=woods](c=5,r=6);
+ \hex[terrain=woods](c=5,r=7);
+ \hex[terrain=woods](c=5,r=8);
+ \hex[terrain=woods](c=5,r=9);
+
+ \hex[terrain=woods](c=6,r=4);
+ \hex[terrain=woods](c=6,r=5);
+ \hex[town={
+ place={(hex cs:c=1,r=1,v=E,o=.3)}}]
+ (c=6,r=6);
+ \hex(c=6,r=7); \hex(c=6,r=8);
+ \hex[terrain=woods](c=6,r=9);
+ \hex[terrain=woods](c=6,r=10);
+
+ \hex(c=7,r=4); \hex(c=7,r=5);
+ \hex(c=7,r=6); \hex(c=7,r=7);
+ \hex(c=7,r=8); \hex(c=7,r=9);
+ \end{scope}
+}
+% \end{macrocode}
+%
+% That concludes our hexes. Let us draw it (\figurename~\ref{fig:hexes}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[scale=.7]
+% \hexes
+% \end{tikzpicture}
+% \caption{Our hexes}
+% \label{fig:hexes}
+% \end{figure}
+%
+% This only defines the map. Now we would like to make the full
+% board. Typically one want to add a turn track and some other stuff.
+% Here, we will keep it fairly simple and just add a turn track.
+%
+% \begin{quote}
+% This is where we need to start to consider VASSAL. Essentially,
+% VASSAL can split a board into \emph{zones}. These zones can be
+% different game specific places, e.g., a place to keep eliminated
+% units, a place for the turn track, and so on. We will take
+% advantage of this in our board definition by applying some
+% specific styles.
+% \end{quote}
+%
+% Below we customise the board frame, and some other things on the
+% board.
+%
+% \begin{macrocode}
+\colorlet{framebg}{gray!50!white}
+\colorlet{titlefg}{gray!50!black}
+\tikzset{
+ hex/board frame/.style={
+ scale line widths,
+ line width=.5pt,
+ draw=black},
+ board frame/.style={%
+ anchor=south west,
+ transform shape,
+ scale line widths,
+ line width=1pt,
+ draw=black,
+ fill=framebg,
+ minimum width=14cm,%
+ minimum height=19cm
+ },
+ turn/.style={
+ scale line widths,
+ line width=.5pt,
+ fill=white,
+ draw=black,
+ text=gray,
+ minimum width=1.4cm,
+ minimum height=1.4cm,
+ text width=1.2cm,
+ align=center,
+ font=\sffamily\bfseries\huge,
+ transform shape,
+ anchor=north east
+ },
+ title/.style={
+ text=titlefg,
+ font=\sffamily\bfseries\Huge,
+ scale=1.5,
+ transform shape,
+ },
+ sub title/.style={
+ text=titlefg!75!white,
+ font=\sffamily\bfseries\normalsize,
+ scale=1.5,
+ transform shape,
+ text width=5cm,
+ align=right
+ }
+}
+% \end{macrocode}
+%
+% Let us start the board. The \textsf{wargame} package has a tool
+% \verb+\boardrame+ which will put a frame around the map as defined
+% by hex coordinates. It also output the map bounding box to the
+% standard log file. So running \LaTeX{} once with this macro in
+% effect will give us some useful information.
+%
+% We will define the board in two steps. First we define an
+% \emph{environment} which holds the map, turn track, and title of the
+% game, and after that we will add an environment that wraps it in a
+% \Tikz{} picture.
+%
+% We define the board as an environment, so that we may put
+% things on the board in our explanations of the rules.
+%
+% \begin{macrocode}
+\newenvironment{innerboard}[1][]{%
+ \node[board frame] (frame) {};
+% \end{macrocode}
+%
+% This adds in our frame of the whole map as defined by the style
+% above.
+%
+% Also note that we made our outer frame a \texttt{node}. This is so
+% that we can refer to its anchors without too much knowledge of its
+% size.
+%
+% We have made our frame a little bigger than the hex, so that we may
+% add a turn track. We will at it at the top, and we will add 10
+% turns. Here, we make use of \Tikz{} loops, and they do the trick for
+% us.
+%
+% We will make use the style \texttt{zone scope} with the name
+% \texttt{Turns}. This will be made into a VASSAL zone that has a
+% coordinate system that identifies it (at least by convention) as
+% turn track. We will in fact deploy a little trick here to make the
+% module even more complete. This is because we add the style
+% \texttt{zone~point} to the turn number nodes below, and the first
+% one will have the name of the game turn marker. This means that the
+% game turn marker will \emph{automatically} be placed there. If the
+% below is a little complicated for you, take a look at the
+% alternative below the code
+%
+% \begin{macrocode}
+ \begin{scope}[
+ shift={($(frame.south east)+(-0.5,.5)$)}]
+ \begin{scope}[zone scope=Turns]
+ \foreach \i in {1,...,10}{%
+ \pgfmathparse{\i*1.65-.225-.7}
+ \edef\y{\pgfmathresult}
+ \ifnum1=\i
+ \def\tname{game turn}
+ \else
+ \def\tname{T\i}
+ \fi
+ \node[turn,zone point={\tname}{-.7}{\y}]
+ at (0,\y+.7) {\i};
+ }
+ \end{scope}
+ \end{scope}
+% \end{macrocode}
+%
+% A simpler alternative would be
+%
+% \begin{verbatim}
+% \begin{scope}[
+% shift={($(frame.south east)+(-0.5,.5)$)}]
+% \begin{scope}[zone scope=Turns]
+% \foreach \i in {1,...,10}{%
+% \node[turn] at (0,\i*1.65-.225) {\i};
+% }
+% \end{scope}
+% \end{scope}
+% \end{verbatim}
+% We also add a title using the styles we defined above. Note,
+% consistent use of \Tikz{} styles makes it very easy to change things
+% consistently throughout the game.
+%
+% \begin{macrocode}
+ \node[below right=5mm and 5mm of
+ frame.north west,title]{A Game};
+ \node[below left=5mm and 5mm of
+ frame.north east,sub title]{A tutorial in the\\
+ {\color{white}wargame} package};
+% \end{macrocode}
+%
+% With this, we are left with adding in the map.
+%
+% \begin{macrocode}
+ \scope[shift={(.5,.5)}]
+ \scope[shift={(1,0.86603)},
+ zone scope=Hex]
+ \hexes
+ \boardframe(c=1,r=1)(c=7,r=10)
+ % Reported by the above
+ % Board Frame:
+ % BBox: (-1.0,-0.86603)x(10.0,15.5885)
+ % WxH: (11.0x16.45453)
+ % NCxNR (1,1)x(7,10)
+% \end{macrocode}
+%
+% Above, we see the output from \verb+\boardframe+. This in turn
+% informs us how to set the offset of the inner most scope. We also
+% see that the map is $11\times 16.45453\,\textrm{cm}$ big, which means
+% our board will easily fit on standard paper (A4 or, less standard,
+% Letter).
+%
+% \begin{quote}
+% The offset of $(-1,0.86603)$ is not surprising when you know that
+% the radius $r$ of the circumscribed circle of the hexes is 1\,cm,
+% and that the first hex centre is placed in $(0,0)$. The horizontal
+% offset of -1 is just that radius $r$, and the vertical offset is
+% $r\sin60^{\circ}=\sqrt{3}/2=0.86603$.
+% \end{quote}
+%
+% The outer most scope translates the hex 5mm in from both edges so
+% that we may draw a nice frame around the map.
+%
+% The style \texttt{zone scope=Hex} will make this area a zone in
+% VASSAL and it will have a hex grid (because its argument contains
+% the sub string \texttt{hex}) attached to it.
+%
+% This end the start of the environment. Next, we define the end of
+% it. This simply closes the scopes and the \Tikz{} picture.
+%
+% \begin{macrocode}
+}{
+ \endscope%
+ \endscope%
+}
+% \end{macrocode}
+%
+% This ends the environment that defines the board proper. Now we
+% wrap it in another environment that will put the map inside a
+% \Tikz{} picture.
+%
+% \begin{macrocode}
+\newenvironment{board}[1][]{%
+ \tikzpicture[#1,zoned]
+ \innerboard}{%
+ \endinnerboard%
+ \endtikzpicture}
+% \end{macrocode}
+%
+% The style \texttt{zoned} on the \Tikz{} picture ensures that we will
+% get a zoned map when generating the VASSAL module. Note that we
+% used the \TeX{}-like form of the environment \verb+\tikzpicture+,
+% rather than \verb+\begin{tikzpicture}+, so that the various
+% \verb+\end+s does not mess up things.
+%
+%
+% We can draw the final board (\figurename~\ref{fig:board}).
+% \begin{figure}
+% \centering
+% \begin{board}[scale=.5]
+% \end{board}
+% \caption{The final board}
+% \label{fig:board}
+% \end{figure}
+%
+% \subsection{Adding units to the board}
+% \label{sec:board:units}
+%
+% We have defined our board as a environment so we can add units to it
+% without much hassle. Let us add the starting units at the starting
+% positions. Since we will be \emph{stacking} chits, we will use the
+% \verb+\chitstack+ macro for this. Note that this macro expects code
+% to produce the chits (rather than the unit styles). Therefore we
+% must add in some \verb+\noexpand+ in front of the \verb+\chit+
+% command.
+%
+% \begin{figure}
+% \centering
+% \begin{board}[scale=.5]%
+% \stackchits(A2)(.2,.2){%%
+% \noexpand\chit[a hq],%
+% \noexpand\chit[a 1 hqbg],%
+% \noexpand\chit[a 1 2jd ibn],%
+% \noexpand\chit[a 2 1jd abn]}%
+% \chit[a 1 1lg ibn](D3);%
+% \stackchits(C2)(.2,.2){%%
+% \noexpand\chit[a 2 hqbg],%
+% \noexpand\chit[a 1 1gh ibn]}%
+% \stackchits(A1)(.2,.2){%%
+% \noexpand\chit[a aregt],%
+% \noexpand\chit[a 1 1 abn]}%
+% \chit[a 2 3gh rbn](D2);%
+%
+% \stackchits(F6)(.2,.2){%%
+% \noexpand\chit[b hq],%
+% \noexpand\chit[b lg hqregt],%
+% \noexpand\chit[b lg ibn]}%
+% \stackchits(E7)(.2,.2){%%
+% \noexpand\chit[b k3 hqregt],%
+% \noexpand\chit[b k3 31 abibn]}%
+% \stackchits(D7)(.2,.2){%%
+% \noexpand\chit[b p4 hqregt],%
+% \noexpand\chit[b p4 41 cabn],%
+% \noexpand\chit[b p4 42 cabn]}%
+% \stackchits(E3)(.2,.2){%%
+% \noexpand\chit[b p7 hqregt],%
+% \noexpand\chit[b p7 71 ibn],%
+% \noexpand\chit[b p7 72 cabn]}%
+% \stackchits(D4)(.2,.2){%%
+% \noexpand\chit[b i13 hqregt],%
+% \noexpand\chit[b i13 131 ibn],%
+% \noexpand\chit[b i13 132 ibn]}%
+% \end{board}
+% \caption{The board with units at their starting positions}
+% \label{fig:board-start}
+% \end{figure}
+%
+% The board with the ``At-start'' units in place are shown in
+% \figurename~\ref{fig:board-start}. The first part of this was made
+% with
+%
+% \begin{verbatim}
+% \begin{board}
+% \stackchits(A2)(.2,.2){%
+% \noexpand\chit[a hq],
+% \noexpand\chit[a 1 hqbg],
+% \noexpand\chit[a 1 2jd ibn],
+% \noexpand\chit[a 2 1jd abn]}
+% \chit[a 1 1lg ibn](D3);
+% \end{verbatim}
+%
+% The first argument to \verb+\stackchits+ is where to put the
+% stack. The second is the offset applied to each stack unit in
+% succession (obviously the first offset is $(0,0)$). The third
+% argument is the list of chits to add to the stack.
+%
+% Note that we use the hex labels, rather than the hex coordinates, to
+% place the units and stacks of units, thanks to \texttt{hex/label is
+% name}.
+%
+% We have made the counters and board for the game. What remains is
+% the various tables (and or of course the rules).
+%
+% \subsection{Clipped boards}
+% \label{sec:board:clipped}
+%
+% We are not quite done with the board just yet. We want to make
+% \emph{another} environment which will clip to a specified area of
+% the map. We will reuse our \texttt{innerboard} environment so that
+% everything is consistent. Let us go ahead and define the
+% environment, and then see later how it is used. We define our
+% environment as two macros \verb+\clipped+ and \verb+\endclipped+ so
+% that we can use parenthesis for our arguments.
+%
+% \begin{macrocode}
+\tikzset{
+ clip board/.style={gray,line width=.5pt}}
+\newcommand\clipped[1][]{\doclipped[#1]}
+\def\doclipped[#1](#2)(#3){
+ \def\tmp@clip@a{#2}
+ \def\tmp@clip@b{#3}
+ \tikzpicture[#1]
+ \scope
+ \clip (#2) rectangle (#3);
+ \scope[shift={(-.5-1,-.5-0.86603)}]
+ \innerboard}
+\def\endclipped{%
+ \endinnerboard
+ \endscope
+ \endscope
+ \draw[clip board](\tmp@clip@a)
+ rectangle (\tmp@clip@b);
+ \endtikzpicture}
+% \end{macrocode}
+%
+% Our environment \texttt{clipped} takes 3 arguments. One is optional
+% and is keys to pass to the \Tikz{} picture environment. The two
+% others are the coordinates (relative to the hexes) of our clipping
+% rectangle. Let us illustrate this with an example --- see
+% \figurename~\ref{fig:clipped}.
+%
+% \begin{figure}
+% \centering
+% \begin{clipped}(hex cs:c=2,r=2)(hex cs:c=5,r=5)
+% \end{clipped}
+% \caption{Example of using \texttt{clipped}.}
+% \label{fig:clipped}
+% \end{figure}
+%
+% The figure was produced by the code
+%
+% \begin{verbatim}
+% \begin{clipped}(hex cs:c=2,r=2)(hex cs:c=5,r=5)
+% \end{clipped}
+% \end{verbatim}
+%
+% Note that we \emph{must} use the hex coordinate system. When we
+% make the clipping path, the nodes of the hex map has not yet been
+% defined. We can use this to illustrate things on the map. For
+% example, \figurename~\ref{fig:clipped-attack} show that B P7/72 CABN
+% attacks A 2/1JD ABN with the code
+%
+% \begin{verbatim}
+% \begin{clipped}(hex cs:c=2,r=3)(hex cs:c=5,r=5)
+% \chit[b p7 72 cabn](D5);
+% \chit[a 2 1jd abn](C4);
+% \draw[hex/attack] (D5)--(C4);
+% \end{clipped}
+% \end{verbatim}
+%
+% \begin{figure}
+% \centering
+% \begin{clipped}(hex cs:c=2,r=3)(hex cs:c=5,r=5)
+% \chit[b p7 72 cabn](D5);
+% \chit[a 2 1jd abn](C4);
+% \draw[hex/attack] (D5)--(C4);
+% \end{clipped}
+% \caption{Example of using \texttt{clipped}.}
+% \label{fig:clipped-attack}
+% \end{figure}
+%
+% Note that \emph{inside} the environment we \emph{can} use hex
+% labels as coordinates.
+%
+% \section{The charts}
+% \label{sec:charts}
+%
+% We will not go into details about how to make tables in
+% \LaTeX{}. There are plenty of excellent resources out there for that
+% purpose. Here we will make three tables: The combat resolution
+% table (CRT), the terrain effects chart (TEC), and the Order of Battle
+% (OOB) chart\footnote{In some games this is called the Order of
+% Appearance (OOA) chart.} --- all of which in some respect uses
+% elements of the
+% \textsf{wargame} package.
+%
+% For all the tables, we would like to use the \textsf{colortbl}
+% package to colour the rows. Here, we make some short hands for
+% doing just that.
+%
+% \begin{macrocode}
+\colorlet{headbg}{gray!50!white}
+\colorlet{altbg}{gray!15!white}
+\newcommand\headrow{\rowcolor{headbg}}
+\newcommand\defrow{\rowcolor{white}}
+\newcommand\altrow{\rowcolor{altbg}}
+% \end{macrocode}
+%
+% \subsection{The CRT}
+% \label{sec:charts:crt}
+%
+% The combat resolution table is in some sense a straight forward
+% \LaTeX{} table. Here's the definition
+%
+% \begin{macrocode}
+\newcommand\crt{%
+ \begin{tabular}{|c|cccccc|}
+ \hline
+ \headrow
+ \textbf{Die}
+ & \multicolumn{6}{c|}{\textbf{Odds}}
+ \\
+ \headrow
+ \textbf{roll}
+ & \textbf{1:3}
+ & \textbf{1:2}
+ & \textbf{1:1}
+ & \textbf{2:1}
+ & \textbf{3:1}
+ & \textbf{4:1}
+ \\
+ \hline
+ \defrow
+ 1 & AE & AR & AR & EX & DR & DR \\
+ \altrow
+ 2 & AE & AR & EX & EX & DR & DR \\
+ \defrow
+ 3 & AR & EX & EX & DR & DR & DE \\
+ \altrow
+ 4 & AR & EX & EX & DR & DR & DE \\
+ \defrow
+ 5 & EX & EX & DR & DR & DE & DE \\
+ \altrow
+ 5 & EX & DR & DR & DE & DE & DE \\
+ \hline
+ \end{tabular}}
+% \end{macrocode}
+%
+% And what it looks like is shown in \tablename~\ref{tab:crt}
+%
+% \begin{table}
+% \centering
+% \crt{}
+% \caption{The combat resolution table}
+% \label{tab:crt}
+% \end{table}
+%
+% \subsection{The TEC}
+% \label{sec:charts:te}
+%
+% In this table we will use small version of hexes to make a nice
+% table. The definition is as follows.
+%
+% \begin{macrocode}
+\newcommand\tec{%
+ \begin{tabular}{|cl|cc|}
+ \hline
+ \headrow
+ \multicolumn{2}{|c|}{\textbf{Terrain}}
+ & MF
+ & CF\textsuperscript{\dag}
+ \\
+ \hline
+ \defrow
+ \tikz[scale=.5]{\hex[label=]}
+ & Clear
+ & 1
+ & ---
+ \\
+ \altrow
+ \tikz[scale=.5]{\hex[label=,terrain=woods]}
+ & Woods
+ & 2
+ & \texttimes 2\textsuperscript{*}
+ \\
+ \defrow
+ \tikz[scale=.5]{\hex[label=,terrain=mountains]}
+ & Mountains
+ & Stop
+ & \texttimes 2\textsuperscript{*}
+ \\
+ \altrow
+ \tikz[scale=.5]{
+ \hex[label=,fill=sea](c=1,r=1);
+ \begin{scope}
+ \clip
+ (hex cs:c=1,r=1,v=NW)
+ --(hex cs:c=1,r=1,v=W)
+ --(hex cs:c=1,r=1,v=SW)
+ --(hex cs:c=1,r=1,e=S)
+ --(hex cs:c=1,r=1,v=W,o=.5)
+ --cycle
+ (hex cs:c=1,r=1,e=N)
+ --(hex cs:c=1,r=1,v=NE)
+ --(hex cs:c=1,r=1,v=E)
+ --(hex cs:c=1,r=1,e=SE)
+ --(hex cs:c=1,r=1,v=E,o=.4)
+ --cycle
+ ;
+ \hex[label=](c=1,r=1);
+ \end{scope}
+ }
+ & Coastal
+ & 2
+ & \texttimes2\phantom{\textsuperscript{*}}
+ \\
+ \hline
+ \multicolumn{4}{l}{\textsuperscript{\dag}
+ \emph{Defender} modifier}\\
+ \multicolumn{4}{l}{\textsuperscript{*}
+ \infantrymark{}\,\pgmark{} \emph{only},
+ unless \artillerymark}
+ \\
+ \end{tabular}
+}
+% \end{macrocode}
+%
+% The result is in \tablename~\ref{tab:te}. Note the use of
+% \verb+\infantrymark+ to put in \infantrymark{} in the table. The
+% \textsf{wargame} package defines a number of macros like this.
+%
+% \begin{table}
+% \centering
+% \tec
+% \caption{The terrain effects table}
+% \label{tab:te}
+% \end{table}
+%
+% \subsection{The OOB}
+% \label{sec:charts:oob}
+%
+% We like to make an OOB chart that we can place our unit counter on
+% so we can keep track of which units are available when. In our
+% game, all A faction units start already on the board. The B faction,
+% however, has most of its reinforcement troops way up north, and will
+% therefore bring them on the map piecemeal.
+%
+% We will use the \textsf{wargame} macro \verb+\oob+ to make our
+% OOBs. This macro uses the \texttt{pic} \texttt{chits/oob~turn} to
+% make the turns. The default setting is not what we want, so we
+% redefine that picture. In particular, we want turn ``0'' to say
+% ``At start''.
+%
+% We also want to reuse the style \texttt{turn} we used
+% to make the turn track on the board, but modify it a bit to fit our
+% purposes here. We therefore define the style \texttt{oob~turn}
+% which derives from \texttt{turn}, but scale it down 70\%, change the
+% anchor, and add some extra space outside of it
+% (\texttt{outer~sep}).
+%
+% \begin{macrocode}
+\tikzset{
+ oob turn/.style={
+ turn,
+ transform shape,
+ anchor=east,
+ outer sep=5mm,
+ scale=.7},
+}
+% \end{macrocode}
+%
+% Our modified \texttt{chit/oob~turn} picture will check if we get an
+% empty turn number, or the special ``0'' turn, and then put in a node
+% with the appropriate contents. Note that we define two pictures,
+% one which actually puts in the turn, and one that puts in nothing,
+% so when we make the combined OOB we only output the turns once. We
+% then default \texttt{chit/oob~turn} to the first picture
+%
+% \begin{macrocode}
+\tikzset{
+ oob turn real/.pic={%
+ \def\tmp{{\Large At start}}
+ \ifx|#1|\else%
+ \ifnum0=#1\else%
+ \def\tmp{#1}%
+ \fi%
+ \fi%
+ \node[oob turn,transform shape]{\tmp};
+ },
+ oob turn empty/.pic={},
+}
+\newcommand\oobrealturn{%
+ \tikzset{
+ pics/chit/oob turn/.style=%
+ {oob turn real=##1}}}
+\newcommand\oobemptyturn{%
+ \tikzset{
+ pics/chit/oob turn/.style=%
+ {oob turn empty=##1}}}
+\oobrealturn
+% \end{macrocode}
+%
+% Let us see how this looks for both factions. Factions A and B are
+% shown in \figurename~\ref{fig:a-oob} and \ref{fig:b-oob},
+% respectively.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[oob turn/.append style={anchor=west}]
+% \oob*{\alla}{4}{1.24}{0}
+% \end{tikzpicture}
+% \caption{Faction A OOB}
+% \label{fig:a-oob}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \oob{\allb}{4}{1.24}{0}
+% \end{tikzpicture}
+% \caption{Faction B OOB}
+% \label{fig:b-oob}
+% \end{figure}
+%
+% These were done with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}[oob turn/.append style={anchor=west}]
+% \oob{\alla}{4}{1.24}{0}
+% \end{tikzpicture}
+% \begin{tikzpicture}
+% \oob{\allb}{4}{1.24}{0}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Note that the stared version \verb+\oob*+ puts out the counters
+% right aligned. This is also why we append the style
+% \texttt{oob~turn} to be anchored to the west.
+%
+% The first argument to \verb+\oob+ is the list of lists of counters.
+% This is why we defined \verb+\alla+ and \verb+\allb+ in the way we
+% did. The second argument is the distance between each counter.
+% Since the counters are 1.2\,cm wide, we gave them a little extra
+% space between them by setting the second argument to 1.24\,(cm).
+% The third argument is the spacing between turn rows. Above we have
+% set that to 0\,(cm), but that we will change in the real OOB chart.
+%
+% And that's what we will do next. This will be rather wide, so we
+% when we show it in a minute, we will do so in a wide table (leaving
+% the two-column layout for a minute).
+%
+% \begin{macrocode}
+\newcommand\inneroob[1][]{%
+ \node[board frame,anchor=north] (oob frame)
+ at (0,2.5) {};%
+ % Game title
+ \node[%
+ below right=5mm and 5mm of oob frame.north west,
+ title,scale=.8]{A Game};
+ % Chart title
+ \node[%
+ below left=5mm and 5mm of oob frame.north east,
+ sub title,scale=1.2,transform shape]{%
+ Order of Battle};
+ % Turn title
+ \node[font=\sffamily\bfseries\Large,
+ white,transform shape]
+ at (0,1) {Turn};
+ %
+ \begin{scope}[%
+ transform shape,
+ oob turn/.append style={anchor=west},%
+ shift={(-1.35,0)},
+ zone scope=A OOB]%
+ \oobemptyturn%
+ \oob*{\alla}{4}{1.4}{.2}%
+ \end{scope}%
+ %
+ \begin{scope}[%
+ transform shape,
+ shift={(1.35,0)},
+ zone scope=B OOB]%
+ \oobrealturn%
+ \oob{\allb}{4}{1.4}{.2}%
+ \end{scope}%
+ %
+}
+\newcommand\fulloob[1][]{%
+ \begin{tikzpicture}[#1,zoned]%
+ \inneroob
+ \end{tikzpicture}}
+% \end{macrocode}
+% A couple of things to note.
+%
+% We put everything inside a \Tikz{} picture with the option
+% \texttt{zoned} so that we will get a zoned
+% map in VASSAL. We also add the zones \texttt{A OOB} and \texttt{B
+% OOB} via the key \texttt{zone scope}. We will need to adjust the
+% grids of the zones later on. Another side effect of using
+% \verb+\oob+ is that each turn will be marked as a ``region'' of a
+% ``region grid'' in in VASSAL, so that the each counter will be
+% automatically placed in its place on the OOB in the VASSAL module.
+%
+% Secondly, we reuse our \texttt{board frame}, \texttt{title}, and
+% \texttt{sub~title} styles to make the OOB come out in similar manner
+% as the board. We do adjust the font sizes a bit though. We have
+% also made the OOB the same size as the board so that they stack
+% nicely.
+%
+% Finally, when we make the faction A oob, we turn off generation of
+% the turn numbers. This is so we do note produce those twice.
+%
+%
+% The final OOB is shown in \figurename~\ref{fig:oob}. This was
+% produced with
+%
+% \begin{verbatim}
+% \fulloob
+% \end{verbatim}
+%
+% \begin{figure}
+% \centering
+% \fulloob[scale=.5]
+% \caption{The OOB}
+% \label{fig:oob}
+% \end{figure}
+%
+% \section{Ending the package}
+% \label{sec:end:package}
+%
+% At the end of the package we should end with the marker
+% \verb+\endinput+.
+%
+% \begin{macrocode}
+\endinput
+% \end{macrocode}
+%
+% This is the end of the package. We will do a little more in the
+% main document.
+%
+%
+% \iffalse
+% Local Variables:
+% mode: docTeX
+% TeX-master: "game.tex"
+% End:
+% \fi \ No newline at end of file
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.tex b/macros/latex/contrib/wargame/doc/tutorial/game.tex
new file mode 100644
index 0000000000..6db72bff27
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.tex
@@ -0,0 +1,200 @@
+\documentclass[11pt,twoside]{ltxdoc}
+
+\usepackage{game}
+\usepackage[margin=1cm,bottom=2cm,top=2cm,a4paper]{geometry}
+\newcommand\Tikz{Ti{\itshape k}Z/PGF}
+\setlength{\parskip}{.5ex}
+\setlength{\parindent}{0em}
+\newcommand\tightlist{\setlength{\itemsep}{3pt}
+ \setlength{\parskip}{0pt}}
+\newcommand\copyleftnotice{{%
+ \footnotesize \copyright{} 2022, Christian Holm Christensen,
+ licensed under the CC-BY-SA 4.0}}
+\makeatletter
+\def\ps@game{%
+ \def\@oddfoot{\hfill\copyleftnotice\hfill}%
+ \def\@evenfoot{\hfill\copyleftnotice\hfill}%
+ \def\@oddhead{The \textsf{wargame} tutorial\hfill\thepage}%
+ \def\@evenhead{\thepage\hfill\rightmark}
+ \def\sectionmark##1{%
+ \markright{\ifnum\c@secnumdepth>\z@%
+ \thesection. \ \fi##1}}}
+\makeatother
+\pagestyle{game}
+
+\title{The \LaTeX{} \textsf{wargame} package\\
+ {\large A tutorial}}
+\author{Christian Holm Christensen}
+\date{\today}
+
+\def\MacroFont{%
+ \fontencoding{\encodingdefault}%
+ \fontfamily{\ttdefault}%
+ \fontseries{\mddefault}%
+ \fontshape{\shapedefault}%
+ \footnotesize}
+\let\theCodelineNo\empty
+\begin{document}
+\thispagestyle{plain}
+\twocolumn
+\maketitle
+
+\section{Introduction}
+
+This is a short tutorial on how to use the \LaTeX{} \textsf{wargame}
+package. We will walk through the definition materials for a game.
+We will \emph{not} give actual rules for the game. That is a whole
+different topic and I refer you to the literature, for example
+
+\begin{description}\tightlist
+\item[\href{https://www.bloomsbury.com/uk/simulating-war-9781472533913/}{\textit{Simulating war}}] by P.Sabin
+\item[\href{https://www.professionalwargaming.co.uk/Complete-Wargames-Handbook-Dunnigan.pdf}{\textit{The
+ Complete Wargames Handbook}}] by J.F.Dunnigan
+\item[\href{https://www.scribd.com/book/220336866/Designing-Wargames-Introduction}{Designing
+ Wargames: Introduction}] by G.Phillies (and associated
+ \href{https://www.youtube.com/playlist?list=PLjnA1DE9KX645eBC2gDWHkSlCPvpb4JAQ}{Youtube
+ lecture series})
+
+\end{description}
+
+\section{The game}
+
+The game we will create is a small game with two factions (sides, or
+players). The game is \emph{not} supposed to be play-able, and we'll
+leave out a lot of details which we would need in a full game.
+
+\DocInput{game.sty}
+
+\section{Rules}
+
+We will not write any rules for this demonstration game. The focus of
+this tutorial is how to use the \textsf{wargame} package, not how to
+design a game.
+
+The \textsf{wargame} package does however have a number of tools that
+helps the developer write the rules. We've already seen some of them
+in action. For example, we saw how to add stacks of units to a board
+in Section~\ref{sec:board:units} or how to make board clippings to
+show a zoom of the map (Section~\ref{sec:board:clipped}).
+
+Figure~\ref{fig:clipped-attack} showed how we can illustrate an attack,
+for example. The package also provides means to indicate eliminated
+units, movement, retreats, advances, and much more. The manual gives
+a lot more information about this.
+
+\DocInput{export.tex}
+
+\section{The materials}
+
+Next, we will make some materials for printing. The next few pages
+will contain only the materials and no text, so we will summarise what
+we do here.
+
+The first thing we put out is the map. That is pretty simple. We do
+
+\begin{verbatim}
+ \begin{board}
+ \end{board}
+\end{verbatim}
+
+Then comes the OOB. We simply use the \verb+\fulloob+ macro.
+
+After that are the two tables put into one page.
+
+\begin{verbatim}
+ \crt \tec
+\end{verbatim}
+
+And the final part are the counter sheets. We will take advantage of
+the macros \verb+\alla+ and \verb+\allb+ yet again.
+
+\begin{verbatim}
+ \doublechits{\allb}{4}{1.24}
+\end{verbatim}
+
+As a final bonus, we also make a board that includes our three charts:
+The OOB, CRT, and TE. We will not demonstrate the code here, but take
+a look in the sources if you are curious.
+
+\newcommand\fullboard[1][]{%
+ \begin{tikzpicture}[#1,rotate=90]%
+ \begin{scope}
+ \begin{innerboard}
+ \end{innerboard}
+ \end{scope}
+ \begin{scope}[shift={($(frame.north east)+(7,-2.5)$)}]
+ \inneroob
+ \end{scope}
+ %
+ \node[anchor=south west,minimum width=6.2cm,minimum height=10cm,
+ line width=1pt,sub title,scale=.66,draw,align=center,
+ text depth=9.7cm,fill=neutral,transform shape]
+ at (oob frame.south west)
+ {{\LARGE Charts}};
+ %
+ \node[above right=5mm and 4mm of oob frame.south west,
+ inner sep=0pt,
+ transform shape,scale=.75,anchor=south west] (crt) {\crt};
+ %
+ \node[above=5mm of crt.north west,anchor=south west,inner sep=0pt,
+ transform shape,scale=.9] (tec) {\tec};
+ %
+ % \end{scope}
+ \node[below=1mm of frame.south west,anchor=north west,
+ transform shape]{%
+ \copyleftnotice};
+ \end{tikzpicture}}
+
+We put in \verb+\cleardoublepage+ between all this so that we can
+print directly on a duplex printer.
+
+\section{Epilogue}
+
+I hope that this short tutorial has helped you. Suggestions,
+corrections, and so on are very welcomed.
+
+\begin{flushright}
+ \textit{Christian}
+\end{flushright}
+\onecolumn
+\cleardoublepage
+
+\begin{center}
+ \begin{board}
+ \end{board}
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \fulloob
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \crt\space\space\tec
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \begin{tikzpicture}
+ \doublechits{\allb}{7}{1.24}
+ \end{tikzpicture}
+
+ \begin{tikzpicture}
+ \doublechits{\alla}{6}{1.24}
+ \end{tikzpicture}
+
+ \begin{tikzpicture}
+ \doublechits{{game turn}}{1}{1.24}
+ \end{tikzpicture}
+\end{center}
+
+\cleardoublepage
+\newgeometry{margin=7mm}
+\pagestyle{empty}
+\fullboard
+
+\end{document}
+%% Local Variables:
+%% mode: LaTeX
+%% End:
diff --git a/macros/latex/contrib/wargame/doc/tutorial/patch.py b/macros/latex/contrib/wargame/doc/tutorial/patch.py
new file mode 100644
index 0000000000..71785252bb
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/patch.py
@@ -0,0 +1,31 @@
+def patch(build,data,vmod,verbose=False):
+ # We need to import the export module :-)
+ import export
+
+ # Get the game and last free GPID
+ game = export.get_game(build)
+ gpid = int(game.getAttribute('nextPieceSlotId'))
+
+ # Get all boards
+ maps = export.get_maps(build)
+ board = maps['Board']
+
+ mkeys = export.get_masskey(board,'name')
+ export.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png')
+ export.set_node_attr(mkeys['Flip'],icon='flip-icon.png')
+
+ # Get main map
+ pool = maps['DeadMap']
+ export.set_node_attr(pool,icon='pool-icon.png')
+
+ mkeys = export.get_masskey(pool,'name')
+ export.set_node_attr(mkeys['Restore'],icon='restore-icon.png')
+
+ # Get the OOB map
+ oob = export.get_chartwindows(game)['OOBs']
+ export.set_node_attr(oob,icon='oob-icon.png')
+
+
+
+
+
diff --git a/macros/latex/contrib/wargame/doc/wargame.pdf b/macros/latex/contrib/wargame/doc/wargame.pdf
new file mode 100644
index 0000000000..aeb06a386d
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/wargame.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/source/Makefile b/macros/latex/contrib/wargame/source/Makefile
new file mode 100644
index 0000000000..656439e408
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/Makefile
@@ -0,0 +1,334 @@
+#
+#
+#
+NAME := wargame
+VERSION := 0.2
+LATEX_FLAGS := -interaction=nonstopmode \
+ -file-line-error \
+ --synctex=15 \
+ -shell-escape
+LATEX := pdflatex
+MAKEINDEX := makeindex
+SED := sed
+CTANOMAT := ctan-o-mat
+CTANOMAT_FLAGS := -n
+SOURCES := wargame.ins \
+ wargame.dtx \
+ package.dtx \
+ util/core.dtx \
+ chit/shape.dtx \
+ chit/misc.dtx \
+ chit/elements.dtx \
+ chit/core.dtx \
+ hex/shape.dtx \
+ hex/tile.dtx \
+ hex/ridges.dtx \
+ hex/towns.dtx \
+ hex/terrain.dtx \
+ hex/paths.dtx \
+ hex/core.dtx \
+ hex/labels.dtx \
+ hex/extra.dtx \
+ hex/terrain/woods.dtx \
+ hex/terrain/town.dtx \
+ hex/terrain/tree.dtx \
+ hex/terrain/beach.dtx \
+ hex/terrain/mountain.dtx \
+ hex/terrain/light_woods.dtx \
+ hex/terrain/mountains.dtx \
+ hex/terrain/village.dtx \
+ hex/terrain/city.dtx \
+ hex/terrain/swamp.dtx \
+ hex/terrain/rough.dtx \
+ hex/board.dtx \
+ hex/coord.dtx \
+ natoapp6c/shape.dtx \
+ natoapp6c/symbols.dtx \
+ natoapp6c/list.dtx \
+ natoapp6c/compat/seasurface.dtx \
+ natoapp6c/compat/activity.dtx \
+ natoapp6c/compat/subsurface.dtx \
+ natoapp6c/compat/missile.dtx \
+ natoapp6c/compat/air.dtx \
+ natoapp6c/compat/seamine.dtx \
+ natoapp6c/compat/land.dtx \
+ natoapp6c/compat/equipment.dtx \
+ natoapp6c/compat/installation.dtx \
+ natoapp6c/compat/space.dtx \
+ natoapp6c/frames/hostile.dtx \
+ natoapp6c/frames/base.dtx \
+ natoapp6c/frames/friendly.dtx \
+ natoapp6c/frames/neutral.dtx \
+ natoapp6c/frames/unknown.dtx \
+ natoapp6c/weaponry.dtx \
+ natoapp6c/core.dtx \
+ natoapp6c/text.dtx \
+ natoapp6c/echelon.dtx \
+ natoapp6c/util.dtx \
+ tests/map.dtx \
+ tests/chits.dtx
+SCRIPTS := utils/svg2tikz.py utils/export.py
+
+DESTDIR := $(HOME)/texmf/
+instdir := tex/latex/$(NAME)
+docdir := doc/latex/$(NAME)
+srcdir := source/latex/$(NAME)
+ctandir := ctan
+distsdir := $(NAME)-$(VERSION)
+
+TILES := beach \
+ city \
+ light_woods \
+ mountains \
+ rough \
+ swamp \
+ town \
+ village \
+ woods
+TABLES := air \
+ missile \
+ land \
+ equipment \
+ installation \
+ seasurface \
+ subsurface \
+ seamine \
+ space \
+ activity
+PKG_FILES := wargame.sty \
+ tikzlibrarywargame.util.code.tex \
+ tikzlibrarywargame.hex.code.tex \
+ tikzlibrarywargame.natoapp6c.code.tex \
+ tikzlibrarywargame.chit.code.tex \
+ wgexport.cls \
+ $(TILES:%=%.pdf)
+
+# beach.png \
+# city.png \
+# mountains.png \
+# sea.png \
+# woods.png \
+# light_woods.png \
+# rough.png \
+# swamp.png \
+# town.png
+DOC_FILES := wargame.pdf symbols.pdf compat.pdf
+
+ifdef VERBOSE
+MUTE :=
+REDIR :=
+LATEX_FLAGS :=
+else
+MUTE := @
+REDIR := > /dev/null 2>&1
+endif
+ifdef CI_COMMIT_REF_NAME
+VERSION := $(CI_COMMIT_REF_NAME)
+else
+ifdef := $(CI_JOB_ID)
+endif
+
+%.aux:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.idx:%.dtx
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.aux:%.idx
+ @echo "LATEX $*.dtx -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.dtx $(REDIR)
+ $(MUTE)touch $< $@
+
+%.pdf:%.aux %.ind
+ @echo "LATEX $*.dtx -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.dtx $(REDIR)
+ $(MUTE)touch $^ $@
+
+%.pdf:%.aux %.tex
+ @echo "LATEX $*.tex -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.tex $(REDIR)
+
+%.pdf:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+
+%.ind:%.idx
+ @echo "INDEX $< -> $@ $<"
+ $(MUTE)$(MAKEINDEX) -s gind -o $@ $< $(REDIR)
+ $(MUTE)touch $^ $@
+
+%.gls:%.glo
+ @echo "GLOSSAY $< -> $@"
+ $(MUTE)$(MAKEINDEX) -s gglo -o $@ $< $(REDIR)
+ $(MUTE)touch $^ $@
+
+all: wargame.pdf
+
+package: $(PKG_FILES)
+
+everything: all symbols.pdf compat.pdf tests/test.pdf
+
+tutorial: tutorial/game.pdf
+tutorial/game.pdf: all
+ $(MUTE)$(MAKE) -C tutorial Game.vmod $(REDIR)
+
+clean:
+ @echo "CLEAN"
+ $(MUTE)rm -f *~ *.log* *.aux *.toc *.lof *.lot *.out *.ilg *.idx *.ind
+ $(MUTE)rm -f cmp_*.tex *.synctex* *.hd
+ $(MUTE)rm -f symbols.tex compat.tex testmap.tex testchits.tex
+ $(MUTE)rm -f wargame.sty wgdoc.sty logo.png logo.pdf
+ $(MUTE)rm -f symbols.pdf compat.pdf test.pdf wargame.pdf
+ $(MUTE)rm -f tikzlibrarywargame.util.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.hex.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.natoapp6c.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.chit.code.tex
+ $(MUTE)rm -f wgexport.cls mksvg.pdf README.md.version
+ $(MUTE)rm -f $(TILES:%=%.tex) $(TILES:%=%.pdf)
+ $(MUTE)rm -rf public texmf
+ $(MUTE)rm -rf $(distsdir)
+ $(MUTE)rm -f $(distsdir).tar.gz
+ $(MUTE)rm -f $(distsdir).zip
+ $(MUTE)rm -f $(NAME).tar.gz
+ $(MUTE)rm -rf __pycache__
+ $(MUTE)rm -rf $(ctandir) tmp
+ $(MUTE)rm -f ctan.tex $(NAME).ctan.tar.gz
+
+
+
+wargame.sty \
+testmap.tex \
+testchits.tex \
+wgdoc.sty \
+compat.tex \
+symbols.tex \
+tikzlibrarywargame.hex.code.tex \
+tikzlibrarywargame.natoapp6c.code.tex \
+tikzlibrarywargame.chit.code.tex \
+wgexport.cls \
+$(TILES:%=%.tex) \
+$(TABLES:%=cmp_%.tex): $(SOURCES)
+ @echo "DOCSTRIP $<"
+ $(MUTE)$(LATEX) $< $(REDIR)
+
+wargame.idx: wargame.dtx wargame.sty $(TILES:%=%.pdf)
+wargame.pdf: wargame.aux wargame.ind
+fast: wargame.idx
+symbols.aux: symbols.tex wargame.sty
+compat.aux: compat.tex $(TABLES:%=cmp_%.tex) wargame.sty
+test.aux: test.tex wargame.sty
+
+beach.pdf: beach.tex
+city.pdf: city.tex
+light_woods.pdf:light_woods.tex
+mountains.pdf: mountains.tex
+rough.pdf: rough.tex
+swamp.pdf: swamp.tex
+town.pdf: town.tex
+village.pdf: village.tex
+woods.pdf: woods.tex
+
+install-devel: all
+ (cd $(dir $(DESTDIR)/$(instdir)) && \
+ rm -f $(notdir $(instdir)) && \
+ ln -fs $(PWD) $(notdir $(instdir)))
+
+install:$(PKG_FILES) $(DOC_FILES) $(SCRIPTS)
+ @echo "Installing DESTDIR=$(DESTDIR)"
+ $(MUTE)mkdir -p $(DESTDIR)$(instdir)
+ $(MUTE)mkdir -p $(DESTDIR)$(docdir)
+ $(MUTE)cp $(PKG_FILES) $(DESTDIR)$(instdir)
+ $(MUTE)cp $(DOC_FILES) $(DESTDIR)$(docdir)
+ $(MUTE)cp $(SCRIPTS) $(DESTDIR)$(instdir)
+
+uninstall:
+ rm -rf $(DESTDIR)$(instdir)
+ rm -rf $(DESTDIR)$(docdir)
+
+distdir:$(SOURCES) $(SCRIPTS) Makefile tests/test.tex
+ $(MUTE)rm -rf $(distsdir)
+ $(MUTE)mkdir -p $(distsdir)
+ $(foreach s, $^, \
+ mkdir -p $(distsdir)/$(shell dirname $(s)); \
+ cp $(s) $(distsdir)/$(s);)
+
+distcheck:distdir
+ $(MAKE) $(MAKEFLAGS) -C $(distsdir) everything
+
+dist:distdir
+ zip -r $(distsdir).zip $(distsdir)
+
+bindist: DESTDIR:=$(distsdir)/
+bindist:install
+ zip -r $(distsdir).zip $(distsdir)
+
+
+logo.png:logo.pdf
+ pdftocairo -png $<
+ mv logo-1.png logo.png
+
+README.md.version:README.md
+ @echo "Versioned README.md"
+ $(MUTE)$(SED) 's/^# \(.*\)/# \1\n## Version $(VERSION)/' \
+ < $< > $@
+
+ctandir: all tutorial/game.pdf README.md.version
+ @echo "Preparing CTAN directory"
+ $(MUTE)$(MAKE) install DESTDIR:=tmp/
+ $(MUTE)mkdir -p tmp/$(docdir)/tutorial
+ $(MUTE)cp $(foreach i, game.tex game.sty export.tex patch.py \
+ README.md Makefile game.pdf,\
+ tutorial/$(i)) tmp/$(docdir)/tutorial
+ $(MUTE)cp README.md.version tmp/$(docdir)/README.md
+ $(MUTE)$(MAKE) distdir distsdir:=tmp/$(srcdir) $(REDIR)
+ $(MUTE)mkdir -p $(ctandir)/$(NAME)
+ $(MUTE)cp tmp/$(docdir)/README.md $(ctandir)/$(NAME)/
+ #$(MUTE)(cd tmp && zip -q -r ../$(ctandir)/$(NAME).tds.zip *)
+ $(MUTE)(cd tmp && cp -a $(docdir) ../$(ctandir)/$(NAME)/doc)
+ $(MUTE)(cd tmp && cp -a $(srcdir) ../$(ctandir)/$(NAME)/source)
+ $(MUTE) rm -rf tmp
+
+ctan.tex:ctan.tex.in
+ @echo "SED $< -> $@"
+ $(MUTE)$(SED) -e 's/@NAME@/$(NAME)/g' \
+ -e 's/@VERSION@/$(VERSION)/' \
+ < $< > $@
+
+ctandist: $(NAME).ctan.tar.gz
+$(NAME).ctan.tar.gz: ctandir
+ @echo "TAR $@"
+ $(MUTE)rm -f $@
+ $(MUTE)(cd $(ctandir) && tar -czf ../$(NAME).ctan.tar.gz *)
+ $(MUTE)rm -rf $(ctandir) tmp
+
+
+ctan-upload:ctan.tex $(NAME).ctan.tar.gz
+ @echo "CTAN $< -> CTAN ($(CTANOMAT_FLAGS))"
+ $(MUTE)$(CTANOMAT) $(CTANOMAT_FLAGS) -c $<
+
+
+docker:
+ docker run --user root --group-add users -e GRANT_SUDO=yes -it --rm \
+ -v $(PWD):/root/$(notdir $(PWD)) texlive/texlive \
+ /bin/bash
+
+docker-prep:
+ apt update
+ apt install -y poppler-utils python3-pil \
+ libwww-mechanize-perl libfile-copy-recursive-perl
+ pwd
+ ls
+ make clean
+
+docker-artifacts: DESTDIR=$(PWD)/public/
+docker-artifacts: install tutorial/game.pdf
+ cp tutorial/game.pdf $(DESTDIR)$(docdir)/tutorial.pdf
+ cp tutorial/Game.vmod $(DESTDIR)$(docdir)/Game.vmod
+
+
+#
+# EOF
+#
diff --git a/macros/latex/contrib/wargame/source/chit/core.dtx b/macros/latex/contrib/wargame/source/chit/core.dtx
new file mode 100644
index 0000000000..7a0189074e
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/core.dtx
@@ -0,0 +1,47 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.chit} \TikZ{} library}
+% \label{sec:impl:natoapp6c}
+%
+% We define the library for making chits. We load the hex \TikZ{}
+% \spec{wargame.natoapp6c} library and the \textsf{amsmath} and
+% \textsf{amstext} packages as we need those.
+%
+% \iffalse
+%<*chit>
+% \fi
+%
+% \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{amstext}
+\usetikzlibrary{wargame.util,wargame.natoapp6c,math}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Debugging}
+%
+% \begin{Macro}{\chitdbglvl,\chit@dbg}
+%
+% Some macros for debugging. Similar to what we have in
+% \spec{wargame.hex} (see \sectionname~\ref{sec:impl:hex}.
+%
+% \begin{macrocode}
+\newcount\chitdbglvl\chitdbglvl=\wargamedbglvl
+\def\chit@dbg#1#2{%
+ \ifnum#1>\chitdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \input{chit/shape.dtx}
+% \input{chit/elements.dtx}
+% \input{chit/misc.dtx}
+%
+% \iffalse
+%</chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/elements.dtx b/macros/latex/contrib/wargame/source/chit/elements.dtx
new file mode 100644
index 0000000000..8708ca2a15
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/elements.dtx
@@ -0,0 +1,105 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*chit>
+% \fi
+%
+% \subsubsection{Predefined \texttt{chit} element pictures}
+%
+% \begin{TikzKey}{/tikz/pics/chit/1 factor,
+% /tikz/pics/chit/2 factors,
+% /tikz/pics/chit/2 factors artillery,
+% /tikz/pics/chit/3 factors,
+% /tikz/pics/chit/4 factors,
+% /tikz/pics/chit/identifier,
+% /tikz/pics/chit/small identifier,
+% /tikz/pics/chit/identifier macro}
+%
+% These pictures can be used as the value of \texttt{chit} keys.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/1 factor/.pic={
+ \chit@dbg{4}{ Chit 1 factor: #1}%
+ \node[chit/factor,chit/1 factor,pic actions]{#1};},
+ pics/chit/2 factors/.style args={#1,#2}{%
+ code={%
+ \chit@dbg{4}{ Chit 2 factors: #1 and #2}%
+ \node[chit/factor,chit/2 factors,pic actions]{#1--#2};}},
+ pics/chit/2 factors artillery/.style args={#1,#2,#3}{%
+ code={
+ \chit@dbg{4}{ Chit 2 factors w/artillery: `#1' `#2' `#3'}%
+ \node[chit/factor,chit/2 factors,pic actions]{%
+ #1$\overset{\text{\scriptsize #3}}{\text{--}}$#2};}},
+ pics/chit/3 factors/.style args={#1,#2,#3}{%
+ code={
+ \chit@dbg{4}{ Chit 3 factors: `#1' `#2' `#3'}%
+ \node[chit/factor,chit/3 factors,pic actions]{#1-#2-#3};}},
+ pics/chit/4 factors/.style args={#1,#2,#3,#4}{%
+ code={
+ \chit@dbg{4}{ Chit 3 factors: `#1' `#2' `#3' `#4'}%
+ \node[chit/factor,chit/4 factors,pic actions]{#1-#2-#3-#4};}},
+ chit/identifier/.pic={
+ \chit@dbg{4}{ Chit identifier: `#1'}%
+ \node[chit/identifier,pic actions]{#1};
+ },
+ chit/small identifier/.pic={
+ \chit@dbg{4}{ Chit small identifier: `#1'}%
+ \node[chit/small identifier,pic actions]{#1};
+ },
+ chit/identifier macro/.pic={%
+ \chit@dbg{4}{ Chit identifier macro: \meaning#1}
+ \edef\chit@i@tmp{#1}
+ \node[chit/identifier,pic actions]{\chit@i@tmp};},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{/tikz/chit/factor,
+% /tikz/chit/1 factor,
+% /tikz/chit/2 factors,
+% /tikz/chit/3 factors,
+% /tikz/chit/4 factors,
+% /tikz/chit/identifier,
+% /tikz/chit/small identifier}
+%
+% Styles used by the above pictures. Users can change these as they
+% see fit.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/factor/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\large,
+ anchor=base,
+ inner sep=0,
+ %text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+ chit/1 factor/.style={},
+ chit/2 factors/.style={},
+ chit/3 factors/.style={},
+ chit/4 factors/.style={text/.append style=\small},
+ chit/identifier/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\scriptsize,
+ inner sep=0,
+ % text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+ chit/small identifier/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\tiny,
+ inner sep=0,
+ % text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/misc.dtx b/macros/latex/contrib/wargame/source/chit/misc.dtx
new file mode 100644
index 0000000000..6c406af3f8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/misc.dtx
@@ -0,0 +1,460 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*chit>
+% \fi
+% \subsubsection{Other pictures}
+% Pictures for frame, factors, left, right, and below.
+% \begin{macrocode}
+\tikzset{
+ pics/chit/shade/.style={
+ code={%
+ \path[fill=white,opacity=#1,pic actions] (-.6,-.6) rectangle(.6,.6);}},
+ pics/chit/eliminate/.style={
+ code={%
+ \path[fill=red,opacity=#1,pic actions] (-.6,-.6) rectangle(.6,.6);}},
+ pics/chit/shade/.default=0.5,
+ pics/chit/eliminate/.default=0.25,
+}
+\def\shadechit(#1){%
+ \pic at (#1) {chit/shade};}
+\def\eliminatechit(#1){%
+ \pic at (#1) {chit/eliminate};}
+% \end{macrocode}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Stacking of chits}
+%
+% Stacking of chits. The key \spec{chit/stack direction} sets the
+% default direction to make the stack in.
+%
+% \begin{macrocode}
+% offset, location, direction, list
+\tikzset{%
+ chit/stack direction/.store in=\chit@stack@dir,
+ chit/stack direction/.initial={(.3,.3)},
+}
+% \end{macrocode}
+%
+% Now the code
+%
+% \begin{macrocode}
+\def\chit@stack@dir{(.3,.3)}
+\def\stackchits(#1){%
+ \@ifnextchar({\st@ckchits{#1}}{\st@ckchits{#1}(.3,.3)}%)
+}
+\def\st@ckchits#1(#2)#3{
+ \chit@dbg{2}{Stacking chits `#1', `#2', `#3'}
+ \edef\xy{#1}
+ \chit@dbg{4}{Stack start at \xy}
+ \foreach[count=\i from 0] \c/\o in {#3} {%
+ \ifx\c\empty\else%
+ \edef\ccc{\c}
+ \chit@dbg{2}{Adding \meaning\ccc\space to stack at (\xy)' `\o'}
+ \expandafter\ccc(\xy)
+ %%
+ \ifx\c\o\else
+ %\chit@dbg{0}{Option: \o}
+ \edef\ccc{\o}
+ \expandafter\ccc(\xy)
+ \fi
+ \expandafter\ccc(\xy)
+ \tikzmath{%
+ coordinate \cc;
+ \cc = (\xy) + (#2);}
+ \xdef\xy{\cc}
+ \fi
+ }
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Making order of battle charts}
+%
+%
+% Macros for making OOBs
+%
+% Style for turns
+%
+% \begin{macrocode}
+\tikzset{
+ chit/oob turn/.pic={\node[pic actions]{#1};}}
+% \end{macrocode}
+%
+%
+% current c, current r, n-columns, cell size, y
+%
+% \begin{macrocode}
+\def\chit@oob@cellupdate(#1,#2)#3#4#5{%
+ \edef\f{\ifwg@oob@inv-1\else1\fi}%
+ \chit@dbg{1}{ \space Cell update `c=|#1|' vs `#4'*(`#3'-1)}
+ \pgfmathparse{int(ifthenelse(abs(#1)>=#4*(#3-1),#5-1,#5))}%
+ \xdef#5{\pgfmathresult}
+ \pgfmathparse{ifthenelse(abs(#1)>=#4*(#3-1),#2-#4,#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(abs(#1)>=#4*(#3-1),0,#1+\f*#4)}%
+ \xdef#1{\pgfmathresult}%
+ \chit@dbg{1}{ \space\space-> `\string#5'=#5 `\string#2'=#2 `\string#1'=#1}
+}
+% \end{macrocode}
+%
+% current c, current r, cell size, extra vertical spacing
+%
+% \begin{macrocode}
+\def\chit@oob@rowupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{ Row update c=`#1',r=`#2',s=`#3',e=`#4'}
+ %\pgfmathparse{ifthenelse(#1>0,#2-#3,#2)}%
+ \pgfmathparse{#2-#3)}%
+ \xdef#2{\pgfmathresult}%
+ %\xdef#1{0}
+ \chit@dbg{2}{ \space\space-> update `\string#2'=#2}
+}
+% \end{macrocode}
+% current c, current r, cell size, extra spacing
+%
+% \begin{macrocode}
+\def\chit@oob@turnupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{ Turn update c=`#1',r=`#2',s=`#3',e=`#4'}
+ % \pgfmathparse{#2-ifthenelse(#1>0,#3,0)-#4}%
+ \pgfmathparse{#2-#4-ifthenelse(abs(#1)>0.0001,#3,0)}
+ \xdef#2{\pgfmathresult}%
+ \xdef#1{0}%
+ \chit@dbg{2}{ \space\space-> update `\string#1'=#1,`\string#2'=#2}
+}
+% \end{macrocode}
+% chit list, n-colls, cell size, extra vertical spacing
+%
+% This expects a list of lists of chits, one list per turn; the
+% maximum number of columns; the size of cells, extra spacing between
+% turns.
+%
+% Note, the list of lists leaf elements should be styles for the
+% chits.
+%
+% This depends on the Tikz pic \texttt{chit/oob~turn} which takes the
+% number as argument.
+%
+%
+% \begin{macrocode}
+\newif\ifwg@oob@inv\wg@oob@invfalse
+\def\wg@star@oob{\wg@oob@invtrue\wg@oob}
+\def\wg@nostar@oob{\wg@oob@invfalse\wg@oob}
+\def\oob{%
+ \@ifstar{\wg@star@oob%
+ }{\wg@nostar@oob%
+ }%
+}
+\def\wg@oob#1#2#3#4{
+ \def\r{0}
+ \chit@dbg{1}{OOB: `#1'}
+ \foreach[count=\ti from 0] \t/\y in #1{
+ \xdef\o{\r}
+ \def\c{0}
+ \ifx\t\y\def\y{0}\fi
+ \chit@dbg{1}{Turn \ti\space(\r,\t,y=\y):'}
+ \ifwg@oob@inv%
+ \pic at ( .5,\r) {chit/oob turn=\ti};%
+ \else
+ \pic at (-.5,\r) {chit/oob turn=\ti};%
+ \fi%
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{
+ %% \chit@dbg{2}{ `\u'=`\m'}
+ \ifx\u\empty\else
+ \ifx\m\@empty\def\m{1}\fi
+ \ifx\u\m\def\m{1}\fi
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank\else
+ \chit[\u=\ti,zone point={\u}{\c}{\r}](\c,\r)
+ \fi
+ \chit@oob@cellupdate(\c,\r){#2}{#3}{\y}
+ }
+ \fi
+ }
+ \fi
+ \chit@dbg{1}{ End of chits in turn
+ \ti\space(c=`\c',r=`\r',o='\o',y='\y')}
+ % IF no units where given, then we force \c to be non-zero so that
+ % \chit@oob@turnupdate increments the row
+ \ifx\t\@empty
+ \def\c{#3}
+ \chit@dbg{2}{ Turn is empty, set c=`\c'}
+ \fi
+ %\ifnum\y<0% No explicit number of rows given
+ % \def\c{#3}
+ % \chit@dbg{2}{ No explicit number of rows given, set c=`\c'}
+ %\fi
+ % In case the user gave and explicit number of rows, add the rows
+ % that are missing. \y is initially set to the number of
+ % requested rows, and then decremented every time we go down one
+ % row. So if the number of rows we did so far is N, and the
+ % requested number of rows is M, then the loop below adds M-N
+ % rows.
+ \ifnum\y>0%
+ \chit@dbg{2}{ Looping rows from 2 to \y, break when row > \y}%
+ \foreach \rr in {2,...,\y}{
+ %\ifnum\rr>\y% A little funny, but \y can be negative!
+ % \chit@dbg{2}{ \space Breaking loop \rr\space > \y}%
+ % \breakforeach%
+ %\else%
+ \chit@oob@rowupdate(\c,\r){#3}{#4}
+ %\fi
+ }
+ \fi
+ % This will zero \c. However, if on entry |\c|>0, then we also
+ % increment the row
+ \chit@oob@turnupdate(\c,\r){#3}{#4}
+ \chit@dbg{1}{End of turn \ti\space(c=`\c',r=`\r',o='\o',y='\y')}
+ }
+ \chit@dbg{2}{End of OOB (c=`\c',r=`\r',y=`\y')}
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Table of chits}
+%
+% \begin{macrocode}
+\tikzset{
+ chit/cell background/.style={fill=black},
+ blank chit/.style={/chit/frame={draw=none,fill=none}},
+}
+% \end{macrocode}
+%
+% These macros are used when we set tables of chits. This allows us
+% to define blank spaces in the table by giving the element
+% \texttt{blank~chit}.
+%
+% \begin{macrocode}
+\def\chit@blank{blank chit}
+\def\chit@cellbg(#1,#2)#3{%
+ \draw[chit/cell background](#1-#3/2,#2-#3/2) rectangle++(#3,#3);
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\ifchits@reset}
+%
+% This `if' controls whether to reset the coordinates to the origin
+% when \cs{chits} is called. If true, then reset for a new table.
+%
+% \begin{macrocode}
+\newif\ifchits@reset\chits@resettrue
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\chits,\@chits,\chit@sng@cellupdate}
+% \begin{macrocode}
+\def\chit@sng@cellupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{Current `#1' vs `#4'*(`#3'+1)}
+ \pgfmathparse{ifthenelse(#1>=#4*(#3-1),#2-#4,#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(#1>=#4*(#3-1),0,#1+#4)}%
+ \xdef#1{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% The stared version (\cs{chits*}) of this macro continues the
+% previously set chit table.
+%
+% \begin{macrocode}
+\def\chits{%
+ \@ifstar{\chits@resetfalse\@chits}{\chits@resettrue\@chits}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@chits#1#2#3{
+ \ifchits@reset
+ \def\r{0}%
+ \def\c{0}%
+ \fi
+ \chit@dbg{1}{Chits to make: #1}%
+ \foreach[count=\ti from 0] \t/\x in #1{%
+ \chit@dbg{2}{Turn `\t' with option `\x'}
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else%
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi%
+ \ifx\u\m\def\m{1}\fi%
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank%
+ \chit@dbg{3}{Ignoring blank chit:\u}%
+ \else%
+ \chit@cellbg(\c,\r){#3}%
+ \chit[\u=\ti](\c,\r)%
+ \chit@sng@cellupdate(\c,\r){#2}{#3}%
+ \fi%
+ }%
+ \fi%
+ }%
+ \fi%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\doublechits,
+% \@doublechits,
+% \chit@dbl@cellupdate,
+% \chit@dbl@flip}
+% \begin{enumerate}
+% \item coordinates
+% \item coordinates
+% \item cell-size
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\chit@dbl@flip(#1,#2)#3{%
+ \pgfmathparse{-#1}%
+ \xdef\mc{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item coordinates
+% \item coordinates
+% \item Number of columns
+% \item cell-size
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\chit@dbl@cellupdate(#1,#2)#3#4{%
+ \pgfmathparse{ifthenelse(#1<-#4/2,#2,#4+#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(#1<-#4/2,#4+#1,-(#3-.5)*#4)}%
+ \xdef#1{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item List of list of keys
+% \item Number of columns
+% \item size of each cell
+% \end{enumerate}
+%
+% The stared version (\cs{doublechits*}) of this macro continues the
+% previously set chit table.
+%
+% \begin{macrocode}
+\def\doublechits{%
+ \@ifstar{\chits@resetfalse\@doublechits}{\chits@resettrue\@doublechits}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@doublechits#1#2#3{%
+ \chit@dbg{1}{Setting double-sided chits: #1}
+ \ifchits@reset
+ \pgfmathparse{-(#2-.5)*#3}
+ \xdef\c{\pgfmathresult}
+ \def\r{0}
+ \fi
+
+ \foreach[count=\ti from 0] \t/\x in #1{
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{
+ \ifx\u\empty\else
+ \ifx\m\@empty\def\m{1}\else%
+ \ifx\u\m\def\m{1}\fi\fi
+ \chit@dbg{2}{`\u'=`\m' (\c,\r)}
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank
+ \chit@dbg{3}{Ignoring blank chit:\u}
+ \else
+ \chit@cellbg(\c,\r){#3}
+ \chit[\u=\ti](\c,\r)
+ \chit@dbl@flip(\c,\r){#3}
+ \chit@cellbg(\mc,\r){#3}
+ \chit[\u\space flipped=\ti,zone turn=\t,zone mult=\n](\mc,\r)
+ \chit@dbl@cellupdate(\c,\r){#2}{#3}
+ \fi
+ }
+ \fi
+ }
+ \fi
+ }
+ \draw[dashed](0,-3*#3/4)--(0,\r-#3/4);
+ \draw[dashed,<-] (#3/5,-2*#3/3)--(#3/2,-2*#3/3) node[anchor=west]{Back};
+ \draw[dashed,<-] (-#3/5,-2*#3/3)--(-#3/2,-2*#3/3) node[anchor=east]{Front};
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some utilities}
+%
+%
+% Game turn marker
+%
+% \begin{macrocode}
+\tikzset{
+ number chit/.pic={
+ \node[shape=rectangle,font=\sffamily\bfseries\LARGE]{%
+ \begin{tabular}{c} #1\end{tabular}};},
+ game turn/.pic={
+ \node[shape=rectangle,font=\sffamily\bfseries]{%
+ \begin{tabular}{c} Game\\Turn\end{tabular}};},
+ game turn/.style={
+ /chit/full={game turn},
+ color=black,
+ fill=white},
+ game turn flipped/.style={game turn},
+ dummy chit/.style={fill=white},
+}
+% \end{macrocode}
+%
+% Marks of chits
+%
+% \begin{macrocode}
+\providecommand\chitmark[2][]{\tikz[scale=.25,#1]{\chit[#2]}}
+% \end{macrocode}
+%
+% Stacking mark
+%
+% \begin{macrocode}
+\tikzset{
+ wg stacking/.style={fill=white,
+ /chit/symbol={[faction=friendly,command=land]}},
+}
+\DeclareRobustCommand\stackmark[1][]{%
+ \tikz[baseline=(current bounding box.center),scale=.3,#1]{
+ \stackchits(0,0)(.3,-.3){%
+ \noexpand\chit[wg stacking],
+ \noexpand\chit[wg stacking],
+ \noexpand\chit[wg stacking]}}}
+% \end{macrocode}
+%
+% ZOC mark
+%
+% \begin{macrocode}
+\DeclareRobustCommand\zocmark[1][]{%
+ \tikz[baseline=(current bounding box.center),scale=.1,#1]{%
+ \begin{scope}[hex/first row and column are=0,
+ hex/row direction is=normal,
+ hex/column direction is=normal,
+ hex/short columns=none]
+ \hex[label=,fill=gray](c=1,r=1)%
+ \hex[label=,fill=white](c=1,r=2)%
+ \hex[label=,fill=white](c=1,r=0)%
+ \hex[label=,fill=white](c=0,r=0)%
+ \hex[label=,fill=white](c=0,r=1)%
+ \hex[label=,fill=white](c=2,r=1)%
+ \hex[label=,fill=white](c=2,r=0)
+ \end{scope}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tikzset{
+ zone point/.code n args={3}{}}
+% \end{macrocode}
+%
+% \iffalse
+%</chit>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/shape.dtx b/macros/latex/contrib/wargame/source/chit/shape.dtx
new file mode 100644
index 0000000000..8ad0614cb8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/shape.dtx
@@ -0,0 +1,544 @@
+% \iffalse
+% --------------------------------------------------------------------
+% <*chit>
+% \fi
+%
+% \subsubsection{The \texttt{chit} key namespace}
+% \begin{TikzKey}{/chit/full,
+% /chit/symbol,
+% /chit/left,
+% /chit/right,
+% /chit/upper left,
+% /chit/upper right,
+% /chit/lower left,
+% /chit/lower right,
+% /chit/factors,
+% /chit/setup,
+% /chit/id}
+%
+% The parts of a chit
+%
+% \begin{macrocode}
+\tikzset{%
+ /chit/.search also={/tikz},
+ /chit/.cd,
+ full/.store in=\chit@full, full/.initial=,%
+ symbol/.store in=\chit@symbol, symbol/.initial=,%
+ left/.store in=\chit@left, left/.initial=,%
+ unique/.style={/chit/left={#1}},%
+ right/.store in=\chit@right, right/.initial=,%
+ parent/.style={/chit/right={#1}},%
+ upper left/.store in=\chit@upper@left, upper left/.initial=,%
+ upper right/.store in=\chit@upper@right, upper right/.initial=,%
+ lower left/.store in=\chit@lower@left, lower left/.initial=,%
+ lower right/.store in=\chit@lower@right, lower right/.initial=,%
+ factors/.store in=\chit@factors, factors/.initial=,%
+ setup/.store in=\chit@setup, setup/.initial=,%
+ id/.store in=\chit@id, id/.initial=,%
+ frame/.store in=\chit@frame, frame/.initial=,%
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{/tikz/chit/full,
+% /tikz/chit/symbol,
+% /tikz/chit/left,
+% /tikz/chit/right,
+% /tikz/chit/upper left,
+% /tikz/chit/upper right,
+% /tikz/chit/lower left,
+% /tikz/chit/lower right,
+% /tikz/chit/factors,
+% /tikz/chit/setup,
+% /tikz/chit/id}
+%
+% Styles of each element in a chit. Users may override these at their
+% own peril. That is, it is OK to override them, but the user should
+% be careful.
+%
+% \begin{macrocode}
+\tikzset{
+ chit/symbol/.style={scale=.4,transform shape},
+ chit/parts/.style={shape=rectangle,transform shape},
+ chit/factors/.style={chit/parts,anchor=south},
+ chit/left/.style={chit/parts,anchor=south,rotate=90},
+ chit/right/.style={chit/parts,anchor=north,rotate=90},
+ chit/upper left/.style={chit/parts,anchor=north west},
+ chit/upper right/.style={chit/parts,anchor=north east},
+ chit/lower left/.style={chit/parts,anchor=south west},
+ chit/lower right/.style={chit/parts,anchor=south east},
+ chit/setup/.style={chit/parts},
+ chit/full/.style={chit/parts},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{The \texttt{chit} styles}
+%
+% \begin{TikzKey}{/tikz/chit}
+% This key sets up a node to make a chit. The key takes a single
+% argument which in turn must contain key--value pairs in the
+% \texttt{/chit} (or \texttt{/tikz}) namespace(s). We set the
+% \texttt{shape} parameter of the node, and calls the passed keys in
+% the \texttt{/chit} namespace to set-up elements of the chit.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/.code={%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=chit}
+ \pgfkeys{/chit/.cd,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% We define a counter to set-up unique names for chit nodes.
+%
+% \begin{macrocode}
+\newcounter{chit@id}\setcounter{chit@id}{0}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{chit} shape}
+%
+% \begin{Macro}{\chit@n@to,\@chit@n@to,\@@chit@n@to,\@chit@n@to@}
+%
+% These macros puts the NATO App6(c) symbol into a chit. The first
+% macro takes the identifier and position of the symbol, and then
+% scans for options. If no options are given, then we go directly
+% to the rendering (\cs{@chit@n@to@}). Otherwise, we may also need
+% to scan for an offset given as \parg{delta-x,delta-y}.
+%
+% \begin{macrocode}
+\def\chit@n@to#1#2{%
+ %% Without a following start square bracket '[' by-pass to final
+ \chit@dbg{4}{Chit NATO App6(c) first step `#1' `#2'}
+ \@ifnextchar[{%
+ %\message{^^JStart square bracket}%
+ \@chit@n@to{#1}{#2}}{%
+ %\message{^^JNo start square bracket}%
+ \@chit@n@to@{#1}{#2}}%]]
+}
+% \end{macrocode}
+%
+% The following macro is called if we had no options.
+%
+% \begin{macrocode}
+\def\@chit@n@to@#1#2#3\@end@chit@n@to{%
+ \chit@dbg{4}{Chit NATO App6(c) w/o offset:
+ ^^J Options: #3
+ ^^J ID: #1
+ ^^J Position: #2}
+ \node[chit/symbol,natoapp6c={#3,id=#1}] (#1) at (#2) {};
+ \chit@dbg{4}{Chit NATO App6(c) ended}%
+}
+% \end{macrocode}
+%
+% This is called if we had an option-like argument. Check if we have
+% an offset
+%
+% \begin{macrocode}
+\def\@chit@n@to#1#2[#3]{%
+ \chit@dbg{4}{Chit NATO App6(c) second step `#1' `#2' `#3'}
+ \@ifnextchar({\@@chit@n@to{#1}{#2}{#3}}{\@@chit@n@to{#1}{#2}{#3}(0,0)}%)
+}
+% \end{macrocode}
+%
+% This called if we had option-like argument.
+%
+% \begin{macrocode}
+\def\@@chit@n@to#1#2#3(#4)\@end@chit@n@to{%
+ \chit@dbg{4}{Chit NATO App6(c) w/offset:
+ ^^J Options: #3
+ ^^J ID: #1
+ ^^J Position: #2
+ ^^J Offset: #4}
+ \node[chit/symbol,natoapp6c={#3,id=#1}] (#1) at ($(#2)+(#4)$) {};}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\chit@tr@ns@nchor,\chit@nchor}
+%
+% Get anchor of sub-symbol element in chit. We need to do this,
+% because the symbol is translated and scaled.
+%
+% \begin{macrocode}
+\def\chit@tr@ns@nchor#1{%
+ \pgf@x=0.4\pgf@x%
+ \pgf@y=0.4\pgf@y\advance\pgf@y#1}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\chit@nchor#1#2#3{%
+ \wg@sub@nchor{#1}{#2}
+ \chit@tr@ns@nchor{#3}}
+\def\chit@report{}
+\tikzset{
+ zone turn/.style={},
+ zone mult/.style={}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% Now follows the actual \text{chit} shape. This is rather long, so
+% we will break it up a bit
+%
+%
+% The first thing is we declare some saved anchors. These are
+% computed (and defined as internal macros) when the shape is
+% instantised. The anchors give the centre and north east corner of
+% the node, the place to put the NATO App6(c) symbol and factors. We
+% also set a dimension for the margins (corner and factors elements).
+%
+% \begin{macrocode}
+\pgfdeclareshape{chit}{
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedanchor\northeast{\pgf@x=0.6cm\pgf@y=0.6cm}
+ \savedanchor\symbol{\pgf@x=0cm\pgf@y=0.2cm}
+ \savedanchor\factors{\pgf@x=0cm\pgf@y=-0.5cm}
+ \saveddimen\margin{\pgf@x=0.04cm}
+% \end{macrocode}
+%
+% Next, we define some saved macros. These are called (and declares
+% internal macros) when the shape is instantised. We define macros
+% for the identifier,
+%
+%
+% \begin{macrocode}
+ \savedmacro\id{%
+ \chit@dbg{4}{Chit ID: \meaning\chit@id}%
+ \@ifundefined{chit@id}{\let\chit@id\pgfutil@empty}{}%
+ \ifx\chit@id\pgfutil@empty%
+ \wg@r@ndom@id%
+ \edef\id{chit\wg@uuid}%
+ \else%
+ \edef\id{\chit@id}%
+ \fi%
+ \chit@dbg{4}{Chit ID stored: \meaning\chit@id}
+ }
+ \savedmacro\chitframeopt{%
+ \let\chitframeopt\pgfutil@empty%
+ \@ifundefined{chit@frame}{}{%
+ \edef\chitframeopt{\chit@frame}}
+ \n@to@pp@dbg{3}{Chit Frame options: \meaning\chitframeopt}%
+ }
+% \end{macrocode}
+%
+% We define the regular anchors of the shape. That is, the centre,
+% corners, and edges.
+%
+% \begin{macrocode}
+ \anchor{center}{\center}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{north} {\northeast\pgf@x=0cm}
+ \anchor{south} {\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east} {\northeast\pgf@y=0cm}
+ \anchor{west} {\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+% \end{macrocode}
+%
+% Next, we want to be able to reference the symbol anchors too. So we
+% define these anchors from the embedded node anchors. Note, these
+% anchors will not exist if the chit is made with
+% \texttt{full=}\meta{args}.
+%
+% \begin{macrocode}
+ \anchor{symbol north east}{\chit@nchor{M\id symbol}{north east}{0.2cm}}
+ \anchor{symbol north west}{\chit@nchor{M\id symbol}{north west}{0.2cm}}
+ \anchor{symbol south east}{\chit@nchor{M\id symbol}{south east}{0.2cm}}
+ \anchor{symbol south west}{\chit@nchor{M\id symbol}{south west}{0.2cm}}
+ \anchor{symbol north} {\chit@nchor{M\id symbol}{north}{0.2cm}}
+ \anchor{symbol west} {\chit@nchor{M\id symbol}{west}{0.2cm}}
+ \anchor{symbol south} {\chit@nchor{M\id symbol}{south}{0.2cm}}
+ \anchor{symbol east} {\chit@nchor{M\id symbol}{east}{0.2cm}}
+ \anchor{symbol upper} {\chit@nchor{M\id symbol}{upper}{0.2cm}}
+ \anchor{symbol lower} {\chit@nchor{M\id symbol}{lower}{0.2cm}}
+ \anchor{symbol left} {\chit@nchor{M\id symbol}{left}{0.2cm}}
+ \anchor{symbol right} {\chit@nchor{M\id symbol}{right}{0.2cm}}
+ \anchor{symbol echelon} {\chit@nchor{M\id symbol}{north}{0.2cm}}
+ \anchor{symbol below} {\chit@nchor{M\id symbol}{south}{0.1cm}}
+% \end{macrocode}
+%
+% Some anchors to sub-elements. Some of them only exists if we have
+% NATO App6(c) symbol in the chit.
+%
+% \begin{macrocode}
+ \anchor{symbol} {\symbol}
+ \anchor{factors} {\factors}
+ \anchor{left} {\chit@nchor{M\id symbol}{west}{.2cm}\advance\pgf@x-\margin}
+ \anchor{right}{\chit@nchor{M\id symbol}{east}{.2cm}\advance\pgf@x+\margin}
+ \anchor{upper right} {%
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin%
+ }
+ \anchor{upper left}{
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin \pgf@x=-\pgf@x%
+ }
+ \anchor{lower right} {%
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin \pgf@y=-\pgf@y%
+ }
+ \anchor{lower left}{
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin%
+ \pgf@x=-\pgf@x \pgf@y=-\pgf@y%
+ }
+% \end{macrocode}
+%
+% Now for the actual path. For the background path, we simply specify
+% the frame. This is so that this will get drawn (and possibly
+% filled) using the appropriate options.
+%
+% \begin{macrocode}
+ \backgroundpath{%
+ %% This is the outline of the chit only. The rest of the chit is
+ %% made on the foreground "path".
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ }
+% \end{macrocode}
+%
+% Finally, we make the foreground rendered path. This is where we do
+% the most stuff. We do it in the \emph{behind} foreground path so
+% that we can ensure things are drawn the way we want it.
+%
+% The first thing is to set-up the clipping to the chit frame.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \chit@dbg{4}{%
+ Chit foreground: \meaning\id
+ ^^J ID (set): \meaning\chit@id
+ ^^J Symbol: \meaning\chit@symbol
+ ^^J Full: \meaning\chit@full
+ ^^J Factors: \meaning\chit@factors
+ ^^J Left: \meaning\chit@left
+ ^^J Right: \meaning\chit@right
+ ^^J Upper left: \meaning\chit@upper@left
+ ^^J Lower left: \meaning\chit@lower@left
+ ^^J Upper right: \meaning\chit@upper@right
+ ^^J Lower right: \meaning\chit@lower@right}
+ \chit@report{}
+ \pgfscope
+ %
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{clip}
+% \end{macrocode}
+%
+% If we do not have the \texttt{symbol} key set, then we set the
+% \texttt{full} key as a picture.
+%
+% \begin{macrocode}
+ \@ifundefined{chit@symbol}{%
+ %% Draw full stuff
+ \@ifundefined{chit@full}{}{%
+ \center\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@full}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/full}}%
+ }{%
+% \end{macrocode}
+%
+% Otherwise, we put in a node with shape \texttt{natoapp6c} and pass
+% the \texttt{symbol} key--value pairs as options.
+%
+% \begin{macrocode}
+ \edef\symid{\id symbol}%
+ \symbol%
+ \edef\args{{\symid}{\the\pgf@x,\the\pgf@y}\chit@symbol}%
+ \chit@dbg{6}{Arguments to chit NATO symbol: \meaning\args}%
+ \expandafter\chit@n@to\args\@end@chit@n@to%
+ \chit@dbg{6}{After making NATO symbol in chit}%
+% \end{macrocode}
+%
+% Having made the NATO App6(c) symbol, which we gave the node name
+% \meta{id}\texttt{symbol} where \meta{id} is the ID of this chit, we
+% can make the rest of the chit elements. These are the left and
+% right elements, which are set west and east of the symbol,
+% respectively; the factors; and the four corner elements.
+%
+% If the respective elements have not been specified, we do not make
+% them.
+%
+% First the left and right elements. Note that these uses the anchors
+% of the embedded \texttt{natoapp6c} node for placement.
+%
+% \begin{macrocode}
+ % Put in left of symbol
+ \@ifundefined{chit@left}{}{%
+ \begin{scope}[]
+ \pgfpointanchor{\symid}{west}%
+ \wg@tmpa=\pgf@x\advance\wg@tmpa-\margin%
+ \wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@left}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/left}%
+ \end{scope}}%
+ % Put in right of symbol
+ \@ifundefined{chit@right}{}{%
+ \begin{scope}[]
+ \pgfpointanchor{\symid}{east}%
+ \wg@tmpa=\pgf@x\advance\wg@tmpa+\margin%
+ \wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@right}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/right}%
+ \end{scope}}%
+% \end{macrocode}
+%
+% Next, we want to put in the corner elements. But before we do
+% that, we use our saved anchors and dimensions to calculate the
+% coordinates. Note that the corner elements are anchored to the
+% corners (plus margin) of the chit frame.
+%
+% \begin{macrocode}
+ % Get coordinates
+ \northeast%
+ \wg@tmpa=\pgf@x%
+ \wg@tmpb=\pgf@y%
+ \advance\wg@tmpa-\margin%
+ \advance\wg@tmpb-\margin%
+% \end{macrocode}
+%
+% With the coordinates extracted, we set the four corner
+% elements. Note, for the anchoring to work, we should specify
+% pictures that have anchors (e.g., nodes). If not, we must take care
+% to give offsets or the like.
+%
+% \begin{macrocode}
+ % Put in upper left corner
+ \@ifundefined{chit@upper@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@upper@left}{}{-\the\wg@tmpa,\the\wg@tmpb}{%
+ chit/upper left}%
+ \end{scope}}
+ % Put in upper right corner
+ \@ifundefined{chit@upper@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@upper@right}{}{\the\wg@tmpa,\the\wg@tmpb}{%
+ chit/upper right}%
+ \end{scope}}
+ % Put in lower left corner
+ \@ifundefined{chit@lower@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@lower@left}{}{-\the\wg@tmpa,-\the\wg@tmpb}{%
+ chit/lower left}%
+ \end{scope}}
+ % Put in lower right corner
+ \@ifundefined{chit@lower@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@lower@right}{}{\the\wg@tmpa,-\the\wg@tmpb}{%
+ chit/lower right}%
+ \end{scope}}
+% \end{macrocode}
+%
+% Finally, we put in the unit factors. They are put at the bottom of
+% the chit frame (plus margin) and are typically anchored to the south
+% anchor of the element. Note, we can put in several factors if need
+% be.
+%
+% \begin{macrocode}
+ % Put in factors
+ \@ifundefined{chit@factors}{}{%
+ \advance\wg@tmpb-\margin%
+ \begin{scope}[]
+ \wg@pic@all{\chit@factors}{}{0,-\the\wg@tmpb}{chit/factors}%
+ \end{scope}}%
+ }%
+ \endpgfscope%
+ % Draw frame?
+ \edef\tmp@opt{[\chitframeopt]}
+ \expandafter\scope\tmp@opt
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ \endscope
+ }
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{chit} wrapper macro}
+%
+% \begin{Macro}{\chit,\chit@,\chit@@}
+%
+% The macro to make the chits. This is a wrapper around a
+% \texttt{node} with shape \texttt{chit}. The syntax of this macro
+% is
+%
+% \begin{Syntax}
+% \cs{chit}\oarg{chit options}\parg{position}\parg{identifier};
+% \end{Syntax}
+%
+% Note that the trailing semi-colon is optional. Here \meta{chit
+% options} are any key-value pairs in the \texttt{/chit} (and
+% \texttt{/tikz}) namespace.
+%
+% The first macro parses for options.
+%
+% \begin{macrocode}
+\def\chit{%
+ \chit@dbg{5}{Chit}
+ \@ifnextchar[{\chit@}{\chit@[]}%]
+}
+% \end{macrocode}
+%
+% Parse for coordinates.
+%
+% \begin{macrocode}
+\def\chit@[#1]{%
+ \chit@dbg{5}{Chit second: `#1'}
+ \@ifnextchar({\chit@@{#1}}{\chit@@{#1}(0,0)}%)
+}
+% \end{macrocode}
+%
+% Parse for name.
+%
+% \begin{macrocode}
+\def\chit@@#1(#2){%
+ \@ifnextchar({\chit@@@{#1}{#2}}{\chit@@@{#1}{#2}()}%)
+}
+% \end{macrocode}
+%
+% The work horse. This simply makes a \cs{node} with the shape
+% \texttt{chit}. Note, we allow for a trailing semi-colon
+% (\texttt{;}) to have a similar feel to other \TikZ{} macros.
+%
+% \begin{macrocode}
+\def\chit@@@#1#2(#3){%
+ \chit@dbg{5}{Chit final:
+ ^^J Options: #1
+ ^^J Position: #2
+ ^^J Name: `#3'}
+ \let\name\pgfutil@empty%
+ \chit@dbg{1}{=== Before chit node}%
+ \node[draw,chit={every chit/.try,id=#3,#1}] (tmp) at (#2) {};
+ \chit@dbg{2}{=== After chit node}%
+ \ifx|#3|\relax%
+ \else%
+ \chit@dbg{3}{=== Renaming chit to user defined name `#3'}%
+ \pgfnoderename{#3}{tmp}%
+ \fi%
+ \@ifnextchar;{\@gobble}{}%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+% </chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/board.dtx b/macros/latex/contrib/wargame/source/hex/board.dtx
new file mode 100644
index 0000000000..fd0af295fb
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/board.dtx
@@ -0,0 +1,253 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Board clipping and frame}
+%
+% \begin{Macro}{\boardframe}
+%
+% Define the bounding box around the board
+%
+% \begin{Syntax}
+% \cs{boardframe}\oarg{margin}\parg{lower=left}\parg{upper-right}\marg{margin}
+% \end{Syntax}
+%
+% where \meta{lower-left} and \meta{upper-right} specifies the lower
+% left and upper right hexes (inclusive) of the board.
+%
+%
+% \begin{macrocode}
+\tikzset{
+ hex/board frame/.style={draw}
+}
+\def\boardframe{%
+ \@ifnextchar[{\bo@rdframe}{\bo@rdframe[0]}%}
+}
+\def\bo@rdframe[#1](#2)(#3){%
+ \hex@coords@conv{#2}
+ \edef\llx{\hex@x}
+ \edef\lly{\hex@y}
+ \edef\llc{\hex@col}
+ \edef\llr{\hex@row}
+ \edef\ellc{\hex@eff@col}
+ \edef\ellr{\hex@eff@row}
+ %
+ \hex@coords@conv{#3}
+ \edef\urx{\hex@x}
+ \edef\ury{\hex@y}
+ \edef\urc{\hex@col}
+ \edef\urr{\hex@row}
+ \edef\eurc{\hex@eff@col}
+ \edef\eurr{\hex@eff@row}
+ %
+ \def\margin{#1}
+ %
+ \hex@dbg{2}{%
+ Board Hex range: (\llc,\llr)x(\urc,\urr)
+ ^^JEffective range: (\ellc,\ellr)x(\eurc,\eurr)
+ ^^JBB: (\llx,\lly)x(\urx,\ury)}%
+ \ifnum\hexdbglvl>1
+ %\draw[red,very thick](hex cs:c=\llc,r=\llr) rectangle(hex cs:c=\urc,r=\urr);
+ \draw[red,ultra thick,dashed](\llx,\lly) rectangle(\urx,\ury);
+ \draw[->,very thick,blue] (0,0) -- (0,1) (0,0) -- (1,0);
+ \fi
+ % Calculate how many half hex hides to add to the "bottom"
+ %
+ \def\oddeven{isodd}
+ \ifnum\hex@coords@row@fac<0\def\oddeven{iseven}\fi%
+ \pgfmathparse{
+ ifthenelse(\hex@got@bot@short(\ellc),
+ ifthenelse(\hex@bot@short@col(\llc)*not(\oddeven(\ellc)),2,
+ ifthenelse(\hex@bot@short@col(\llc),0,1)),
+ ifthenelse(\oddeven(\ellc),1,2))}
+ \edef\olly{\pgfmathresult}%
+ \hex@dbg{2}{Delta lly: \olly half heights}
+ % Calculate how many half hex heights to add to the "top"
+ \def\oddeven{iseven}
+ \ifnum\hex@coords@row@fac<0\def\oddeven{isodd}\fi%
+ %
+ \pgfmathparse{
+ ifthenelse(\hex@got@top@short(\urc),
+ ifthenelse(\hex@top@short@col(\urc)*\oddeven(\eurc),0,
+ ifthenelse(\hex@top@short@col(\urc),2,1)),
+ ifthenelse(\oddeven(\eurc),1,2))}
+ \edef\oury{\pgfmathresult}%
+ \hex@dbg{2}{Delta ury: \oury half heights}
+ % Calculate new LLY and URY
+ \pgfmathparse{\lly-\hex@coords@row@fac*(\olly*\hex@yy+\margin)}
+ \edef\lly{\pgfmathresult}
+ \pgfmathparse{\ury+\hex@coords@row@fac*(\oury*\hex@yy+\margin)}
+ \edef\ury{\pgfmathresult}
+ % Calculate new LLX and URX
+ \pgfmathparse{\llx-1-\margin}\edef\llx{\pgfmathresult}
+ \pgfmathparse{\urx+1+\margin}\edef\urx{\pgfmathresult}
+ % Calculate width and height
+ \pgfmathparse{\urx-\llx}\edef\w{\pgfmathresult}
+ \pgfmathparse{\ury-\lly}\edef\h{\pgfmathresult}
+ \hex@dbg{0}{Board Frame: (\llx,\lly)x(\urx,\ury) (\w x\h) (\llc,\llr)x(\urc,\urr)}
+ \draw[hex/board frame/.try](\llx,\lly) rectangle(\urx,\ury);
+ \xdef\boardXmin{\llx}%
+ \xdef\boardYmin{\lly}%
+ \xdef\boardXmax{\urx}%
+ \xdef\boardYmax{\ury}%
+}
+
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\boardclip}
+%
+% Clip the board to not show incomplete hexes
+%
+% \begin{Syntax}
+% \cs{boardclip}\marg{nx}\marg{ny}\marg{preaction}
+% \end{Syntax}
+% \begin{macrocode}
+\def\boardpath(#1)(#2){%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #1}
+ \edef\llx{\hex@col}
+ \edef\lly{\hex@row}
+ %%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #2}
+ \edef\urx{\hex@col}
+ \edef\ury{\hex@row}
+ \let\board@odd\@undefined%
+ \hex@dbg{1}{Board BB in hex: (\llx,\lly)x(\urx,\ury)}
+ %%
+ \def\fv{south}
+ \def\sv{north}
+ \ifnum\hex@coords@row@fac<0
+ \def\fv{north}
+ \def\sv{south}
+ \fi
+
+ \edef\hex@board@path{(hex cs:c=\llx,r=\lly,v=\fv\space west)}
+ %% First the left side
+ \foreach \r in {\lly,...,\ury} {%
+ \edef\t{
+ --(hex cs:c=\llx,r=\r,v=west)
+ --(hex cs:c=\llx,r=\r,v=\sv\space west)}
+ \wg@addto@macro{\hex@board@path}{\t}}
+ %% Then for top of board
+ \foreach \c in {\llx,...,\urx} {%
+ % To be done
+ %\pgfmathparse{int(ifthenelse(\hex@bot@short@col(\c),1,0))}
+ %\edef\tmp{\pgfmathresult}
+ %\ifnum\tmp>0
+ %\edef\t{
+ % --(hex cs:c=\c,r=\ury,v=\sv\space west)
+ % --(hex cs:c=\c,r=\ury,v=\sv\space east)}
+ %\else
+ \edef\t{
+ --(hex cs:c=\c,r=\ury,v=\fv\space east)
+ --(hex cs:c=\c,r=\ury,v=\fv\space west)}
+ %\fi
+ \wg@addto@macro{\hex@board@path}{\t}}
+ %% Then for right of board
+ \foreach \r in {\ury,...,\lly} {%
+ \edef\t{
+ --(hex cs:c=\urx,r=\r,v=east)
+ --(hex cs:c=\urx,r=\r,v=\fv\space east)}
+ \wg@addto@macro{\hex@board@path}{\t}}
+
+ %% Then for bottom of board
+ \edef\t{--(hex cs:r=\lly,c=\urx,v=\fv\space west)}
+ \wg@addto@macro{\hex@board@path}{\t}
+ \foreach \c in {\urx,...,\llx} {%
+ \pgfmathparse{int(ifthenelse(\hex@bot@short@col(\c),1,0))}
+ \edef\tmp{\pgfmathresult}
+ \ifnum\tmp>0
+ \edef\t{
+ --(hex cs:c=\c,r=\lly,v=\sv\space east)
+ --(hex cs:c=\c,r=\lly,v=\sv\space west)}
+ \else
+ \edef\t{
+ --(hex cs:c=\c,r=\lly,v=\fv\space east)
+ --(hex cs:c=\c,r=\lly,v=\fv\space west)}
+ \fi
+ \wg@addto@macro{\hex@board@path}{\t}}
+
+ \def\t{--cycle}
+ \wg@addto@macro{\hex@board@path}{\t}
+ \global\let\hexboardpath\hex@board@path
+}
+%\def\boardclip#1#2#3{%
+% \pgfmathparse{int(#1-1)}\xdef\board@range{\pgfmathresult,...,0}%
+% %% \show\board@range
+% \draw \ifx|#3|\else[preaction={#3}]\fi%
+% [clip]
+% % [decorate,decoration={show path construction,
+% % moveto code={\fill[red](\tikzinputsegmentfirst) circle(2pt)
+% % node [fill=none,below]{moveto};},
+% % lineto code={\draw[thick,blue,->](\tikzinputsegmentfirst)--
+% % (\tikzinputsegmentlast) node [above] {lineto};},
+% % curveto code={\draw[thick,green,->](\tikzinputsegmentfirst)..
+% % controls(\tikzinputsegmentsupporta) and
+% % (\tikzinputsegmentsupportb)
+% % ..(\tikzinputsegmentlast) node[above]{curveto};},
+% % closepath code={\draw[thick,orange,->](\tikzinputsegmentfirst)--
+% % (\tikzinputsegmentlast) node [above] {closepath};}
+% % }]
+% (hex cs:r=0,c=0,v=south west)
+% %% First the left side
+% \foreach \r in {0,1,...,#2} {%
+% --(hex cs:c=0,r=\r,v=west)--(hex cs:c=0,r=\r,v=north west)}
+% %% Then for top of board
+% \foreach \c in {0,1,...,#1} {%
+% --(hex cs:r=#2,c=\c,v=north west)--(hex cs:c=\c,r=#2,v=north east)}
+% %% Then for right of board
+% \foreach \r in {#2,...,0} {%
+% --(hex cs:c=#1,r=\r,v=east)--(hex cs:c=#1,r=\r,v=south east)}
+% %% Then for bottom of board
+% --(hex cs:r=0,c=#1,v=south west) \foreach \c in \board@range {%
+% --(hex cs:r=0,c=\c,v=south east) --(hex cs:c=\c,r=0,v=south west) }
+% --cycle; }
+%% New definition - much simpler
+\def\boardclip(#1)(#2)#3{%
+ \boardpath(#1)(#2)
+ \draw \ifx|#3|\else[preaction={#3}]\fi%
+ [clip] \hexboardpath;
+}
+
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\debuggrid}
+%
+% Show a debug grid. This requires \cs{boardframe}.
+%
+% \begin{macrocode}
+\def\debuggrid{%
+ \foreach \i in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} {%
+ \pgfmathparse{\i*\boardW+\boardXmin}%
+ \edef\debug@x{\pgfmathresult}%
+ \draw [very thin,gray](\debug@x,\boardYmin) --
+ (\debug@x,\boardYmax) node [below,rotate=90] at
+ (\debug@x,\boardYmin) {$\i$}; }%
+ \foreach \i in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} {%
+ \pgfmathparse{\i*\boardH+\boardYmin}%
+ \edef\debug@x{\pgfmathresult}%
+ \draw [very thin,gray] (\boardXmin,\debug@x) --
+ (\boardXmax,\debug@x) node [left,rotate=90] at
+ (\boardXmin,\debug@x) {$\i$}; } }
+% \end{macrocode}
+% \end{Macro}
+%
+% Some dummy styles. These will be defined by the export class to
+% facilitate getting information from the board.
+%
+% \begin{macrocode}
+\tikzset{%
+ zoned/.style={},
+ zone scope/.style={},
+ zone path/.style={}
+}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/coord.dtx b/macros/latex/contrib/wargame/source/hex/coord.dtx
new file mode 100644
index 0000000000..b996ffa3c2
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/coord.dtx
@@ -0,0 +1,350 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Hex coordinate system}
+%
+% \begin{Macro}{\hex@xx,\hex@yy}
+%
+% Some offsets along $x$ and $y$ due to offset of every second hex
+% column.
+%
+% \begin{align*}
+% \delta_x &= \cos60^{\circ}\\
+% \delta_y &= \sin60^{\circ}\\
+% \end{align*}
+%
+% These numbers are calculated once here and then used several times
+% in the following code.
+%
+% \begin{macrocode}
+\pgfmathparse{cos(60)} \xdef\hex@xx{\pgfmathresult}
+\pgfmathparse{sin(60)} \xdef\hex@yy{\pgfmathresult}
+\pgfmathparse{\hex@yy*cos(30)}\xdef\hex@e@xx{\pgfmathresult}
+\pgfmathparse{\hex@yy*sin(30)}\xdef\hex@e@yy{\pgfmathresult}
+\newdimen\hex@radius\hex@radius=1cm
+\newdimen\hex@dx \expandafter\hex@dx=\hex@xx cm
+\newdimen\hex@dy \expandafter\hex@dy=\hex@yy cm
+\newdimen\hex@e@dx \expandafter\hex@e@dx=\hex@e@xx cm
+\newdimen\hex@e@dy \expandafter\hex@e@dy=\hex@e@yy cm
+
+% \end{macrocode}
+% \end{Macro}
+%
+% Some code we need for some options
+%
+% \begin{macrocode}
+\newif\ifhex@label@is@name\hex@label@is@namefalse
+\def\hex@short@col{isfalse}
+\def\hex@got@short{isfalse}
+\pgfmathdeclarefunction{isfalse}{1}{%
+ \begingroup
+ \def\pgfmathresult{0}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+\pgfmathdeclarefunction{istrue}{1}{%
+ \begingroup
+ \def\pgfmathresult{1}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+% \end{macrocode}
+%
+% What follows is a way to configure the hex coordinate system. For
+% example, if the rows goes down, then we can flag that, but still add
+% hexes straightforwardly. Similar for columns. We can also specify
+% that the first row or column has number 1 (instead of 0). Since
+% this is dealt with a the coordinate level, it means most of the rest
+% of the code is agnostic to these choices.
+%
+% Which is the first coordinate (0 or 1)
+%
+% \begin{macrocode}
+\tikzset{
+ hex/first row is/.is choice,
+ hex/first row is/0/.code={\def\hex@coords@row@off{0}},
+ hex/first row is/1/.code={\def\hex@coords@row@off{-1}},
+ hex/first row is=0,
+ hex/first column is/.is choice,
+ hex/first column is/0/.code={\def\hex@coords@col@off{0}},
+ hex/first column is/1/.code={\def\hex@coords@col@off{-1}},
+ hex/first column is=0,
+ hex/first row and column are/.is choice,
+ hex/first row and column are/0/.style={
+ hex/first row is=0,%
+ hex/first column is=0},
+ hex/first row and column are/1/.style={
+ hex/first row is=1,%
+ hex/first column is=1},
+% \end{macrocode}
+%
+% Which way does the column and row numbers go
+%
+% \begin{macrocode}
+ hex/row direction is/.is choice,
+ hex/row direction is/normal/.code={\def\hex@coords@row@fac{1}},
+ hex/row direction is/reversed/.code={\def\hex@coords@row@fac{-1}},
+ hex/row direction is/up/.style={hex/row direction is=normal},
+ hex/row direction is/down/.style={hex/row direction is=reversed},
+ hex/row direction is/positive/.style={hex/row direction is=normal},
+ hex/row direction is/negative/.style={hex/row direction is=reversed},
+ hex/row direction is=normal,
+ hex/column direction is/.is choice,
+ hex/column direction is/normal/.code={\def\hex@coords@col@fac{1}},
+ hex/column direction is/reversed/.code={\def\hex@coords@col@fac{-1}},
+ hex/column direction is/right/.style={hex/column direction is=normal},
+ hex/column direction is/left/.style={hex/column direction is=reversed},
+ hex/column direction is/positive/.style={hex/column direction is=normal},
+ hex/column direction is/negative/.style={hex/column direction is=reversed},
+ hex/column direction is=normal,
+% \end{macrocode}
+%
+% Make labels names of shapes of the hexes so we can use labels to
+% place stuff
+%
+% \begin{macrocode}
+ hex/label is name/.is if=hex@label@is@name,
+% \end{macrocode}
+%
+% If we have uneven number of rows in some columns.
+%
+% \begin{macrocode}
+ hex/short bottom columns/.is choice,
+ hex/short bottom columns/odd/.code={%
+ \def\hex@bot@short@col{isodd}
+ \def\hex@got@bot@short{istrue}
+ \hex@dbg{4}{Short columns (odd): \meaning\hex@bot@short@col}},
+ hex/short bottom columns/even/.code={
+ \def\hex@bot@short@col{iseven}
+ \def\hex@got@bot@short{istrue}
+ \hex@dbg{4}{Short column (even): \meaning\hex@bot@short@col}},
+ hex/short bottom columns/none/.code={
+ \def\hex@bot@short@col{isfalse}
+ \def\hex@got@bot@short{isfalse}
+ \hex@dbg{4}{Short columns (none): \meaning\hex@bot@short@col}},
+ hex/short bottom columns=none,
+ hex/short columns/.forward to=hex/short bottom columns,
+ hex/short top columns/.is choice,
+ hex/short top columns/odd/.code={%
+ \def\hex@top@short@col{isodd}
+ \def\hex@got@top@short{istrue}
+ \hex@dbg{4}{Short columns (odd): \meaning\hex@top@short@col}},
+ hex/short top columns/even/.code={
+ \def\hex@top@short@col{iseven}
+ \def\hex@got@top@short{istrue}
+ \hex@dbg{4}{Short column (even): \meaning\hex@top@short@col}},
+ hex/short top columns/none/.code={
+ \def\hex@top@short@col{isfalse}
+ \def\hex@got@top@short{isfalse}
+ \hex@dbg{4}{Short columns (none): \meaning\hex@top@short@col}},
+ hex/short top columns=none,
+}
+\message{^^JInitial hex coordinate setup:
+ Rows: factor=\hex@coords@row@fac, offset=\hex@coords@row@off
+ Columns: factor=\hex@coords@col@fac, offset=\hex@coords@col@off}
+% \end{macrocode}
+%
+% \begin{HexKey*}{
+% hex/coords/column,
+% hex/coords/row,
+% hex/coords/vertex,
+% hex/coords/edge,
+% hex/coords/offset}
+%
+% We define the keys for hexagon coordinates. These are the
+% \spec{row}, \spec{column}, possible \spec{vertex} or
+% \spec{edge}. Vertexes and edges are defined as
+% multiple-choice. \spec{offset} specifies the offset from the
+% centre in the direction of a vertex or edge. By default, the
+% offset is one, meaning all the way to the vertex or edge.
+%
+% The key \spec{inverse row} specifies that the rows are given from
+% the top down, but coordinates should be calculated as if the row
+% was negative. This (should) allow us to design boards where rows
+% increase downward, while still keeping the interface and remaining
+% code somewhat reasonable and agnostic.
+%
+% Similarly, the key \spec{column 1}, will allow us to start the
+% columns with 1.
+%
+%
+%
+% \begin{macrocode}
+\tikzset{
+ /hex/coords/.cd,
+ column/.store in=\hex@col,
+ c/.store in=\hex@col,
+ row/.store in=\hex@row,
+ r/.store in=\hex@row,
+ offset/.store in=\hex@off,
+ o/.store in=\hex@off,
+ vertex/.is choice,
+ vertex/none/.code={\global\let\hex@vtx\@empty},
+ vertex/east/.code={\def\hex@vtx{0}},
+ vertex/north east/.code={\def\hex@vtx{60}},
+ vertex/north west/.code={\def\hex@vtx{120}},
+ vertex/west/.code={\def\hex@vtx{180}},
+ vertex/south west/.code={\def\hex@vtx{240}},
+ vertex/south east/.code={\def\hex@vtx{300}},
+ vertex/E/.code={\def\hex@vtx{0}},
+ vertex/NE/.code={\def\hex@vtx{60}},
+ vertex/NW/.code={\def\hex@vtx{120}},
+ vertex/W/.code={\def\hex@vtx{180}},
+ vertex/SW/.code={\def\hex@vtx{240}},
+ vertex/SE/.code={\def\hex@vtx{300}},
+ vertex/.default=none,
+ v/.forward to=/hex/coords/vertex=#1,
+ edge/.is choice,
+ edge/none/.code={\global\let\hex@edg\@empty},
+ edge/north east/.code={\def\hex@edg{30}},
+ edge/north/.code={\def\hex@edg{90}},
+ edge/north west/.code={\def\hex@edg{150}},
+ edge/south west/.code={\def\hex@edg{210}},
+ edge/south/.code={\def\hex@edg{270}},
+ edge/south east/.code={\def\hex@edg{330}},
+ edge/NE/.code={\def\hex@edg{30}},
+ edge/N/.code={\def\hex@edg{90}},
+ edge/NW/.code={\def\hex@edg{150}},
+ edge/SW/.code={\def\hex@edg{210}},
+ edge/S/.code={\def\hex@edg{270}},
+ edge/SE/.code={\def\hex@edg{330}},
+ edge/.default=none,
+ e/.forward to=/hex/coords/edge,
+}
+% \end{macrocode}
+% \end{HexKey*}
+%
+% \begin{Macro}{\hex@coords@reset}
+%
+% This macro resets the hex coordinates to default values. That is
+% row and column 0, no vertex or edge.
+%
+% \begin{macrocode}
+\def\hex@coords@reset{%
+ \tikzset{%
+ /hex/coords/.cd,
+ column=0,
+ row=0,
+ edge=none,
+ vertex=none,
+ offset=1}}
+% \end{macrocode}
+% \end{Macro}
+%
+% The following calculates the Cartesian coordinates from Hex
+% coordinates
+%
+% \begin{Syntax}
+% (cs:hex column=\meta{C},row=\meta{R},vertex=\meta{V},edge=\meta{E})
+% \end{Syntax}
+%
+% Given the hexagon column $C$ and row $R$ with hexagon radius $r$,
+% the centre of the hexagon is at
+%
+% \begin{eqnarray*}
+% x &=& 2C\frac{3}{4}r\\
+% y &=& r(R - (C \% 2)\sin60^{\circ})
+% \end{eqnarray*}
+%
+% If \meta{V} or \meta{E} are given, then these are added to the
+% centre point.
+%
+% Note, $C$ and $R$ may be fractional numbers, which will specify a
+% point inside a hex.
+%
+% We set-up the translation to Cartesian coordinates. First
+% thing is to reset keys in \spec{/hex/coords}, and then parse out the
+% keys given.
+%
+% \begin{macrocode}
+\def\hex@coords@conv#1{%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #1}%
+% \end{macrocode}
+%
+% Then we calculate the $x$ coordinate and set the dimension
+% \cs{pgf@x}. We do this by
+%
+% $$x=c_e \frac{3}{2}\quad,$$
+%
+% where
+%
+% $$c_e = f_c (c+o_c)\quad,$$
+%
+% is the effective column (stored in \cs{hex@eff@col}) calculated from
+% is the direction factor $f_c$ (set by \spec{hex/column direction
+% is}) and the offset $o_c$ (set by \spec{hex/first column is}).
+%
+% \begin{macrocode}
+ \pgfmathparse{int(\hex@coords@col@fac*(\hex@col+\hex@coords@col@off))}%
+ \xdef\hex@eff@col{\pgfmathresult}%
+ \hex@dbg{2}{Effective column: \hex@coords@col@fac * (\hex@col -
+ \hex@coords@col@off) -> \hex@eff@col}%
+ \pgfmathparse{\hex@eff@col*1.5}%
+ \xdef\hex@x{\pgfmathresult}%
+ \expandafter\pgf@x=\hex@x cm%
+% \end{macrocode}
+%
+% And then for the $y$ coordinate and set the dimension \cs{pgf@y}.
+%
+% $$y = 2\left(r_e - c_e \operatorname{mod} 2\right) \cos60^{\circ}\quad,$$
+%
+% where
+%
+% $$r_e= 2 f_r (r+o_r) - (c+o_c) \operatorname{mod} 2\quad,$$
+%
+% is the effective row (stored as \cs{hex@eff@row}) calculated from
+% the the direction factor $f_r$ (set by \spec{hex/row
+% direction is}) and the offset $o_r$ (set by \spec{hex/first
+% row is}).
+%
+% \begin{macrocode}
+ \pgfmathparse{int(\hex@coords@row@fac*(\hex@row+\hex@coords@row@off))}%
+ \xdef\hex@eff@row{\pgfmathresult}%
+ \hex@dbg{2}{Effective row: \hex@coords@row@fac * (\hex@row +
+ \hex@coords@row@off) -> \hex@eff@row}%
+ \pgfmathparse{(2*\hex@eff@row-mod(round((\hex@col+\hex@coords@col@off)),2))*\hex@yy}%
+ \xdef\hex@y{\pgfmathresult}%
+ \expandafter\pgf@x=\hex@y cm%
+% \end{macrocode}
+%
+% If we have a vertex specification add that location to the current
+% coordinates. If not, set the point.
+%
+% \begin{macrocode}
+ \ifx\hex@vtx\@empty\pgfpointxy{\hex@x}{\hex@y}\else%
+ \pgfpointadd{\pgfpointxy{\hex@x}{\hex@y}}{%
+ \pgfpointscale{\hex@off}{\pgfpointpolarxy{\hex@vtx}{1}}}\fi%
+% \end{macrocode}
+%
+% If we have an edge specification add that location to the current
+% coordinates.
+%
+% \begin{macrocode}
+ \ifx\hex@edg\@empty\else%
+ \pgfpointadd{\pgfpointxy{\hex@x}{\hex@y}}{%
+ \pgfpointscale{\hex@off}{\pgfpointpolarxy{\hex@edg}{\hex@yy}}}\fi
+% \end{macrocode}
+%
+% For debugging, we can print out stuff.
+%
+% \begin{macrocode}
+ \hex@dbg{2}{Hex coordinates: #1
+ ^^J c=\hex@col
+ ^^J r=\hex@row
+ ^^J v=\hex@vtx
+ ^^J e=\hex@edg
+ ^^J x=\hex@x
+ ^^J y=\hex@y}%
+ \global\let\hex@x\hex@x%
+ \global\let\hex@y\hex@y%
+ \global\let\hex@row\hex@row%
+ \global\let\hex@col\hex@col%
+}
+\tikzdeclarecoordinatesystem{hex}{%
+ \hex@coords@conv{#1}}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/core.dtx b/macros/latex/contrib/wargame/source/hex/core.dtx
new file mode 100644
index 0000000000..1847ad42c8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/core.dtx
@@ -0,0 +1,94 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.hex} \TikZ{} library}
+% \label{sec:impl:hex}
+%
+% \iffalse
+%<*hex>
+% \fi
+%
+% Used \TikZ{} libraries
+%
+% \begin{macrocode}
+\RequirePackage{alphalph}
+\usetikzlibrary{calc}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{arrows}
+\usetikzlibrary{shapes.geometric}
+\usetikzlibrary{shapes.symbols}
+\usetikzlibrary{shapes.arrows}
+\usetikzlibrary{decorations}
+\usetikzlibrary{decorations.pathmorphing}
+\usetikzlibrary{decorations.pathreplacing}
+\usetikzlibrary{decorations.markings}
+\usetikzlibrary{wargame.util}
+% \end{macrocode}
+%
+%
+% \begin{Macro}{\@ifempty}
+%
+% This is a utility macro we will use below.
+%
+% \begin{macrocode}
+\def\@ifempty#1{\def\temp{#1}\ifx\temp\@empty}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Debugging}
+%
+% The counter \cs{hexdbglvl} sets the debug level, and the macro
+% \cs{hex@dbg} prints out (conditionally) debug messages.
+%
+% \begin{Macro}{\hexdbglvl,\hex@dbg}
+% \begin{macrocode}
+\newcount\hexdbglvl\hexdbglvl=\wargamedbglvl
+\def\hex@dbg#1#2{%
+ \ifnum#1>\hexdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Suppress terrain pictures}
+%
+% \begin{macrocode}
+\@ifundefined{ifhex@terrain@pic}{%
+ \newif\ifhex@terrain@pic
+ \hex@terrain@pictrue}{}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \input{hex/coord.dtx}
+% \input{hex/shape.dtx}
+% \input{hex/terrain.dtx}
+% \input{hex/terrain/beach.dtx}
+% \input{hex/terrain/light_woods.dtx}
+% \input{hex/terrain/woods.dtx}
+% \input{hex/terrain/swamp.dtx}
+% \input{hex/terrain/rough.dtx}
+% \input{hex/terrain/mountains.dtx}
+% \input{hex/terrain/village.dtx}
+% \input{hex/terrain/town.dtx}
+% \input{hex/terrain/city.dtx}
+% \input{hex/terrain/mountain.dtx}
+% \input{hex/terrain/tree.dtx}
+% \input{hex/ridges.dtx}
+% \input{hex/towns.dtx}
+% \input{hex/labels.dtx}
+% \input{hex/extra.dtx}
+% \input{hex/paths.dtx}
+% \input{hex/board.dtx}
+% \iffalse
+%</hex>
+% \fi
+% \ No newline at end of file
diff --git a/macros/latex/contrib/wargame/source/hex/extra.dtx b/macros/latex/contrib/wargame/source/hex/extra.dtx
new file mode 100644
index 0000000000..05f7215297
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/extra.dtx
@@ -0,0 +1,83 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Extra graphics}
+% \label{sec:impl:hex:extra}
+%
+% To make the interface a bit more flexible we allow for adding
+% arbitrary stuff to the hexes.
+%
+% Some examples of \spec{pic}tures to add in the \spec{extra} stuff.
+%
+% \begin{HexKey}{hex/fortress}
+%
+% Draw a fortress. An example of a extra graphics entity.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/fortress/.pic={
+ \path[draw,pic actions]
+ (0: .9) --
+ (0: .7) --
+ (60: .7) -- ( 60:.9) -- ( 60:.7) --
+ (120:.7) -- (120:.9) -- (120:.7) --
+ (180:.7) -- (180:.9) -- (180:.7) --
+ (240:.7) -- (240:.9) -- (240:.7) --
+ (300:.7) -- (300:.9) -- (300:.7) --
+ (0: .7) -- cycle;}}
+% \end{macrocode}
+% \end{HexKey}
+%
+% \begin{HexKey}{hex/fortress 2}
+%
+% Draw a fortress. An example of a extra graphics entity.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/fortress 2/.pic={%
+ \draw[pic actions,transform shape] (0:0.64)
+ foreach \a in {15,45,...,345}{
+ --(\a:0.64)
+ --(\a:0.80)
+ --(\a+15:0.80)
+ --(\a+15:0.64)}
+ --cycle;
+ },
+}
+% \end{macrocode}
+% \end{HexKey}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Some macros}
+%
+%
+% \begin{macrocode}
+\DeclareRobustCommand\fortmark[1][scale=.25]{\tikz[#1,transform shape]{%
+ \pic{hex/fortress 2}}}
+\providecommand\terrainmark[2][scale=.2]{%
+ \tikz[#1]{\hex[label=,terrain=#2]}}
+\providecommand\clearhex[1][scale=.2]{\tikz[#1]{\hex[label=]}}
+\providecommand\woodshex[1][scale=.2]{\terrainmark[#1]{woods}}
+\providecommand\mountainhex[1][scale=.2]{\terrainmark[#1]{mountains}}
+\providecommand\cityhex[1][scale=.2]{\terrainmark[#1]{city}}
+\providecommand\beachhex[1][scale=.2]{\terrainmark[#1]{beach}}
+\providecommand\seahex[1][scale=.2]{\tikz[#1]{\hex[label=,fill=sea]}}
+\providecommand\riverhex[1][scale=.2]{%
+ \tikz[#1]{%
+ \hex[label=](c=0,r=0)%
+ \river[](hex cs:e=SW)--(hex cs:e=NE);}}
+\providecommand\roadhex[1][scale=.2]{%
+ \tikz[#1]{%
+ \hex[label=](c=0,r=0)%
+ \road(hex cs:e=SW)--(hex cs:e=NE);}}
+% \end{macrocode}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/labels.dtx b/macros/latex/contrib/wargame/source/hex/labels.dtx
new file mode 100644
index 0000000000..7767dcc661
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/labels.dtx
@@ -0,0 +1,160 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Labels}
+% \label{sec:impl:hex:label}
+%
+% Like terrains, we will set up some macros for dealing with labels.
+%
+% To process coordinates and turn them into labels, we set up two
+% counters.
+%
+% \begin{macrocode}
+\newcounter{hex@l@c}
+\newcounter{hex@l@r}
+% \end{macrocode}
+%
+% In case we want to invert the row axis, we set-up a key to set the
+% maximum row number.
+%
+% \begin{macrocode}
+\def\hex@max@row{-1}
+\tikzset{
+ max hex row/.store in=\hex@max@row,
+}
+% \end{macrocode}
+%
+% Again, we will make a separate namespace/family for the handling
+% labels. We also define a counter which we will use to typeset
+% alphabetic column numbers.
+%
+% First a graphics style.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/label/.style={%
+ draw=none,%
+ shape=rectangle,%
+ anchor=north,%
+ color=gray,%
+ font=\sffamily\bfseries\scriptsize,%
+ inner sep=0},
+}
+% \end{macrocode}
+%
+% Next, the choices of how to make a label. These are put in the
+% \spec{/hex/label} family to make it easy to parse out only these
+% keys. This uses some macros defined below. Note, this uses the
+% macros \cs{hex@col} and \cs{hex@row} defined by the hex coordinate
+% system.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/label/.search also={/tikz},
+ /hex/label/.cd,
+ none/.code={\global\let\hex@l@text\@empty},
+ auto/.is choice,
+ auto/none/.code={\global\let\hex@l@text\@empty},
+ auto/numbers/.code={%
+ \hex@l@abs%
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\the\c@hex@l@c}%
+ \hex@l@n@pad{\the\c@hex@l@r}}},
+ auto/alpha column/.code={%
+ \xdef\hex@l@text{%
+ \ifnum0>\hex@col\AlphAlph{-\hex@col}\else\AlphAlph{\hex@col}\fi%
+ \hex@row}},
+ auto/alpha 2 column/.code={%
+ \hex@l@abs%
+ \advance\c@hex@l@c27\relax%
+ \xdef\hex@l@text{%
+ \AlphAlph{\value{hex@l@c}}%
+ \hex@l@n@pad{\hex@row}}},
+ auto/inv y x plus 1/.code={%
+ \hex@dbg{3}{Inverse row, add one to column with arg `#1'}
+ \let\hex@l@text\@empty%
+ \ifnum\hex@max@row>0%
+ \pgfmathtruncatemacro{\hex@l@row}{\hex@max@row-\hex@row}
+ \pgfmathtruncatemacro{\hex@l@col}{1+\hex@col}
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\hex@l@col}%
+ \hex@l@n@pad{\hex@l@row}}
+ \else\message{Max row number not set}\fi},
+ auto/x and y plus 1/.code={%
+ \hex@dbg{3}{Inverse row, add one to column with arg `#1'}
+ \pgfmathtruncatemacro{\hex@l@row}{1+\hex@row}
+ \pgfmathtruncatemacro{\hex@l@col}{1+\hex@col}
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\hex@l@col}%
+ \hex@l@n@pad{\hex@l@row}}},
+ auto/.default=numbers,
+ %text/.store in=\hex@l@text,
+ text/.code={\gdef\hex@l@text{#1}},
+ place/.store in=\hex@l@pos,
+ location/.forward to=/hex/label/place,
+ rotate/.store in=\hex@l@rot
+}
+% \end{macrocode}
+% \begin{Macro}{\hex@l@abs}
+%
+% This takes the absolute value of row and column numbers.
+%
+% \begin{macrocode}
+\def\hex@l@abs{
+ \setcounter{hex@l@c}{\hex@col}
+ \setcounter{hex@l@r}{\hex@row}
+ \expandafter\ifnum\value{hex@l@c}<0\multiply\c@hex@l@c by-1\fi%
+ \expandafter\ifnum\value{hex@l@r}<0\multiply\c@hex@l@r by-1\fi%
+ % \hex@dbg{0}{\hex@col->\the\c@hex@l@c\space\hex@row->\the\c@hex@l@r}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\hex@l@n@pad}
+% This will pad a number with a 0 if the number is smaller than 10.
+%
+% \begin{macrocode}
+\long\def\hex@l@n@pad#1{%
+ \ifnum#1<10 0\fi%
+ #1}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\hex@do@label}
+%
+% This macro puts in the label. First, we reset label keys, then we
+% read in the keys from the argument. If this results in the macro
+% \cs{hex@l@text} to be non-empty, then we set the label via a
+% \TikZ{} \spec{node}.
+%
+% \begin{macrocode}
+\def\hex@do@label{%
+ \hex@dbg{1}{Hex label: `\meaning\hex@label'}%
+ \edef\hex@l@tmp{[%
+ /hex/label/.cd,%
+ rotate=0,%
+ place={(90:.8)},%
+ /tikz/hex/label/.try,%
+ /tikz/every hex label/.try,%
+ \hex@label]}%
+ \expandafter\scope\hex@l@tmp%
+ \hex@dbg{1}{Label:
+ ^^J Text: `\meaning\hex@l@text'
+ ^^J Location: `\meaning\hex@l@pos'
+ ^^J Rotation: `\meaning\hex@l@rot'
+ }%
+ \@ifundefined{hex@l@text}{\let\hex@l@text\empty}{}%
+ \ifx\hex@l@text\empty\else%
+ \node[rotate=\hex@l@rot] at \hex@l@pos {\hex@l@text};%
+ \fi%
+ \endscope%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/paths.dtx b/macros/latex/contrib/wargame/source/hex/paths.dtx
new file mode 100644
index 0000000000..833a4a245a
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/paths.dtx
@@ -0,0 +1,416 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Edges, borders, roads, rivers, and so on}
+%
+% Styles of drawing edges, borders, rivers, roads, and railroads.
+%
+% \begin{macrocode}
+% A decoration to extract outline of a path
+\pgfdeclaredecoration{outline}{init}
+{%
+ \state{init}[next state=tick,width=0pt]{
+ \xdef\outlinerev{}}
+ \state{tick}[%
+ width=+\pgfdecorationsegmentlength]%
+ {
+ \pgfpathlineto{\pgfpointadd{\pgfpointorigin}{
+ \pgfpointpolar{\pgfdecorationsegmentangle}{
+ +\pgfdecorationsegmentamplitude}}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \message{^^J\the\pgf@x,\the\pgf@y}
+ \pgfpointadd{\pgfpointorigin}{
+ \pgfpointpolar{-\pgfdecorationsegmentangle}{
+ \pgfdecorationsegmentamplitude}}
+ \pgfpointtransformed{\pgfpoint{\pgf@x}{\pgf@y}}%
+ \message{^^J\the\pgf@x,\the\pgf@y}
+ \xdef\outlinerev{\the\pgf@x/\the\pgf@y,\outlinerev}
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@ya
+ }%
+ \state{final}
+ {
+ \pgfpathlineto{\pgfpointdecoratedpathlast}
+ \foreach \x/\y in \outlinerev{
+ \ifx\x\empty\else
+ \ifx\y\empty\else
+ \pgf@xa=\x
+ \pgf@ya=\y
+ \pgf@nlt@lineto{\pgf@xa}{\pgf@ya}
+ \fi
+ \fi
+ }
+ }%
+}%
+
+\tikzset{
+ hex/road/.style={
+ rounded corners=3\pgflinewidth,% .25cm,
+ color=black,
+ transform shape,
+ scale line widths,
+ thick},
+ hex/railroad/.style={
+ %scale line widths,
+ rounded corners=.25cm,
+ color=gray!50!black,
+ transform shape,
+ postaction={draw,decorate},
+ decoration={ticks,
+ segment length=9\pgflinewidth,
+ amplitude=3\pgflinewidth,%.1cm
+ }
+ },
+ hex/river/.style={
+ color=blue,
+ scale line widths,
+ line width=3pt,
+ transform shape,
+ decorate,
+ decoration={random steps,
+ segment length=.3cm,
+ amplitude=.15cm,
+ pre=lineto,
+ post=lineto,
+ pre length=.05cm,
+ post length=.05cm},
+ rounded corners=.08cm},
+ hex/border/.style={
+ color=gray,
+ rounded corners=3pt,
+ dashed,
+ transform shape,
+ scale line widths,
+ very thick
+ },
+ every river/.style={},
+ every road/.style={},
+ every railroad/.style={},
+ every border/.style={},
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\road,\railroad,\river,\border}
+%
+% \begin{macrocode}
+\def\road{%
+ \hex@dbg{3}{Road}
+ \@ifnextchar[{\road@}{\road@[]}%]
+}
+\def\road@[#1]{\draw[hex/road,every hex road/.try,#1]}
+\def\railroad{%
+ \hex@dbg{3}{Rail road}
+ \@ifnextchar[{\railroad@}{\railroad@[]}%]
+}
+\def\railroad@[#1]{\draw[hex/railroad,every hex railroad/.try,#1]}
+\def\river{%
+ \hex@dbg{3}{River}
+ \@ifnextchar[{\river@}{\river@[]}%]
+}
+\def\river@[#1]{\draw[hex/river,every hex river/.try,#1]}
+\def\border{%
+ \hex@dbg{3}{Border}
+ \@ifnextchar[{\border@}{\border@[]}%]
+}
+\def\border@[#1]{\draw[hex/border,every hex border/.try,#1]}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Other paths}
+%
+% \begin{Macro}{\shiftScalePath}
+% Shifts and scales a path and defines a macro to contain the path
+%
+% \begin{Syntax}
+% \cs{shiftScalePath}\marg{macro}\marg{relative-coordinates}
+% \end{Syntax}
+%
+% where \meta{relative-coordinates} is a comma separated list of
+% relative coordinates (to the lower-left and upper-right corners)
+%
+% \begin{Syntax}
+% \meta{x}/\meta{y}
+% \end{Syntax}
+%
+% Note, this requires that \cs{boardXmin},\cs{boardYmin} and
+% \cs{boardXmax},\cs{boardYmax} is defined. This can be done using
+% the \cs{boardframe} macro.
+%
+% \begin{macrocode}
+\def\shiftScalePath#1#2{%
+ \let\tmp@path\@undefined%
+ \foreach \x/\y in {#2}{%
+ \pgfmathparse{\x*\boardW+\boardXmin}\xdef\tmp@x{\pgfmathresult}%
+ \pgfmathparse{\y*\boardH+\boardYmin}\xdef\tmp@y{\pgfmathresult}%
+ \@ifundefined{tmp@path}{\def\tmp@path{}}{\xdef\tmp@path{\tmp@path--}}%
+ \xdef\tmp@path{\tmp@path(\tmp@x,\tmp@y)}}%
+ \expandafter\xdef\csname #1\endcsname{\tmp@path}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Move, attacks, retreats from hex to hex}
+%
+% \begin{Macro}{\hex@getscale}
+%
+% Get current scaling factor.
+%
+% \begin{macrocode}
+\def\hex@getscale#1{%
+ \begingroup
+ \pgfgettransformentries{%
+ \scaleA}{%
+ \scaleB}{%
+ \scaleC}{%
+ \scaleD}{%
+ \whatevs}{%
+ \whatevs}%
+ \pgfmathsetmacro{#1}{sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}%
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter#1\expandafter{#1}%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% Key to get the scale
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/get scale/.code={
+ \hex@getscale{\hex@scale}},
+}
+% \end{macrocode}
+%
+% Style for moves. Use like
+%
+% \begin{Syntax}
+% \cs{path}[move] \meta{coordinates};
+% \end{Syntax}
+%
+% \begin{macrocode}
+\tikzset{%
+ % Argument is colour
+ hex/move/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and 1 step 0.75*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ inner sep=\hex@scale*.5mm,
+ minimum width=\hex@scale*2mm,
+ minimum height=\hex@scale*\hex@dy/2,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[short move] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/short move/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and 1 step 0.5*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ inner sep=\hex@scale*.5mm,
+ minimum width=\hex@scale*2mm,
+ minimum height=\hex@scale*\hex@dy/3,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[long move] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/long move/.style={
+ hex/get scale,
+ transform shape,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and -.7*\hex@scale*\hex@dy
+ step 2*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ anchor=west,
+ inner sep=\hex@scale*.25mm,
+ outer sep=.3*\hex@scale*\hex@dy,
+ minimum width=\hex@scale*2mm,
+ minimum height=1.4*\hex@scale*\hex@dy,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[move with start] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/move with start/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=at position 0 with {
+ \node [inner sep=0,
+ circle,
+ minimum size=\hex@scale*5mm,
+ fill=#1,
+ transform shape] {};},
+ mark=between positions 0 and 1 step 0.75*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=\hex@scale*3pt,
+ fill=#1,
+ inner sep=\hex@scale*1mm,
+ minimum width=\hex@scale*3mm,
+ minimum height=\hex@scale*\hex@dy/2,
+ transform shape]{};
+ }
+ },
+ },
+ % Default fill colour is black
+ hex/move/.default=black,
+ hex/move with start/.default=black,
+ hex/short move/.default=black,
+ hex/long move/.default=black,
+ % Arguments are draw and fill color
+% \end{macrocode}
+%
+% A move cost style
+%
+% \begin{Syntax}
+% \cs{path}[move] ...(coordinate)node[hex/move cost]{} ...;
+% \end{Syntax}
+%
+% \begin{macrocode}
+ hex/move cost/.style 2 args={
+ minimum size=1mm,
+ inner sep=0.1mm,
+ circle,
+ fill=#2,
+ transform shape,
+ text=#1,
+ font=\sffamily\bfseries\Large},
+ hex/move cost/.default={black}{none},
+ % Argument is fill colour
+% \end{macrocode}
+%
+% A short line style for retreates, advances, and so on
+%
+% \begin{Syntax}
+% \cs{path}[short line] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ hex/short line/.style={%
+ hex/get scale,
+ inherit options/.code={\csname tikz@options\endcsname},
+ inherit options,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions \hex@scale*\hex@dy
+ and 1 step 2*\hex@scale*\hex@dy with {
+ \node [single arrow,draw=black,fill=#1,
+ single arrow head extend=\hex@scale*3pt,
+ inner sep=1mm,
+ minimum width=0.75*\hex@scale*\hex@dy,
+ minimum height=\hex@scale*\hex@dy,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% An attack indication style
+%
+% \begin{Syntax}
+% \cs{path}[attack] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ % Argument is fill color
+ hex/attack/.style={
+ hex/get scale,
+ inherit options/.code={\csname tikz@options\endcsname},
+ inherit options,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions \hex@scale*\hex@dy
+ and 1 step 2*\hex@scale*\hex@dy with {
+ \node [regular polygon,
+ fill=#1,
+ draw=#1,
+ regular polygon sides=3,
+ inner sep=0,
+ minimum size=0.75*\hex@scale*\hex@dy,
+ rotate=-90,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% Short hands
+%
+% \begin{Syntax}
+% \cs{path}[attack] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ % Default colour is red for attachs
+ hex/attack/.default=red!70!black,
+ %%
+ hex/retreat/.style={hex/short line=#1},
+ hex/retreat/.default=white,
+ %%
+ hex/advance/.style={hex/short line=#1},
+ hex/advance/.default={green!70!black},
+}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/ridges.dtx b/macros/latex/contrib/wargame/source/hex/ridges.dtx
new file mode 100644
index 0000000000..3914ff6ce5
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/ridges.dtx
@@ -0,0 +1,139 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Ridges}
+% \label{sec:impl:hex:ridges}
+%
+% A hex can be decorated with up to 6 ridges --- one for each edge of
+% the hexagon. The first thing is to set up the graphics style to use
+% for the ridges. We use the \spec{wave} decoration.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/ridges/.style={
+ line cap=round,
+ draw=pgfstrokecolor,
+ rounded corners=.25cm,
+ scale line widths,
+ decoration={
+ path has corners=true,
+ pre=waves,
+ post=waves,
+ pre length=-.1cm,
+ post length=0cm,
+ waves,
+ radius=.2cm,
+ segment length=.2cm},
+ decorate}}
+% \end{macrocode}
+%
+% To properly set up the ridges, we need to concatenate ridge paths in
+% order. To facilitate that, we define 6 \cs{if}s --- one for each
+% edge.
+%
+% \begin{macrocode}
+\newif\ifhex@r@ne
+\newif\ifhex@r@n
+\newif\ifhex@r@nw
+\newif\ifhex@r@sw
+\newif\ifhex@r@s
+\newif\ifhex@r@se
+% \end{macrocode}
+%
+% Next is the keys for each edge. These will set the above \cs{if}s
+% to \spec{true}. We put these into the family \spec{/hex/r} so that
+% we can parse them separately.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/ridges/.search also={/tikz},
+ /hex/ridges/.cd,
+ north east/.is if=hex@r@ne,
+ north/.is if=hex@r@n,
+ north west/.is if=hex@r@nw,
+ south west/.is if=hex@r@sw,
+ south/.is if=hex@r@s,
+ south east/.is if=hex@r@se,
+ radius/.store in=\hex@r@r,
+ NE/.is if=hex@r@ne,
+ N/.is if=hex@r@n,
+ NW/.is if=hex@r@nw,
+ SW/.is if=hex@r@sw,
+ S/.is if=hex@r@s,
+ SE/.is if=hex@r@se,
+ r/.store in=\hex@r@r,
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\hex@do@ridges}
+%
+% This is the macro that actually generates the ridge. We use the
+% same \textsc{pgf} filtered key parsing trick as above. Note that
+% the routine below is handcrafted since it is relatively simple.
+%
+% \begin{macrocode}
+\def\hex@do@ridges{%
+ \edef\hex@r@tmp{[
+ /hex/ridges/.cd,%
+ radius=0.8,%
+ /tikz/every hex ridges/.try,
+ \hex@ridges]}
+ \expandafter\scope\hex@r@tmp%
+ \hex@dbg{3}{Ridges: `\meaning\hex@ridges', `\meaning\hex@r@tmp'
+ ^^Jnorth east=\ifhex@r@ne yes\else no\fi
+ ^^Jnorth =\ifhex@r@n yes\else no\fi
+ ^^Jnorth west=\ifhex@r@nw yes\else no\fi
+ ^^Jsouth west=\ifhex@r@sw yes\else no\fi
+ ^^Jsouth =\ifhex@r@s yes\else no\fi
+ ^^Jsouth east=\ifhex@r@se yes\else no\fi
+ ^^Jradius =\hex@r@r
+ }
+ \def\hex@r@p{}
+ % Hand written algorithm
+ \ifhex@r@ne
+ \def\hex@r@p{(0:\hex@r@r)--(60:\hex@r@r)}
+ \fi
+ \ifhex@r@n
+ \hex@dbg{4}{Ridge along north edge: `\hex@r@p'}
+ \ifhex@r@ne\else
+ \xdef\hex@r@p{\hex@r@p ( 60:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(120:\hex@r@r)}
+ \fi
+ \ifhex@r@nw
+ \ifhex@r@n\else
+ \xdef\hex@r@p{\hex@r@p (120:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(180:\hex@r@r)}
+ \fi
+ \ifhex@r@sw
+ \ifhex@r@nw\else
+ \xdef\hex@r@p{\hex@r@p (180:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(240:\hex@r@r)}
+ \fi
+ \ifhex@r@s
+ \ifhex@r@sw\else
+ \xdef\hex@r@p{\hex@r@p (240:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(300:\hex@r@r)}
+ \fi
+ \ifhex@r@se
+ \ifhex@r@s\else
+ \xdef\hex@r@p{\hex@r@p (300:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(360:\hex@r@r)}
+ \fi
+ \hex@dbg{3}{ Ridges path: \hex@r@p}
+ \draw[hex/ridges] \hex@r@p;
+ \endscope% End of ridges scope
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/shape.dtx b/macros/latex/contrib/wargame/source/hex/shape.dtx
new file mode 100644
index 0000000000..0d31da837f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/shape.dtx
@@ -0,0 +1,368 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Hexes}
+% \label{sec:impl:hex:hex}
+%
+% In this part, we make macros etc. for the hexes.
+%
+% A hex shape. We make a node of this shape if we are to give a name
+% to the hex added. We add a bunch of anchors to it so we may easily
+% refer to it. This is also where we actual fill stuff into the hex,
+% such as terrain and so on.
+%
+% \begin{macrocode}
+\hex@dbg{5}{Base vertex: \hex@xx,\hex@yy}
+\hex@dbg{5}{Base edges: \hex@e@xx,\hex@e@yy}
+\pgfdeclareshape{hex/hex}{%
+ \saveddimen\radius{\pgf@x=\hex@radius}
+ \savedanchor{\east}{ \pgfqpoint{ \hex@radius}{0cm}}
+ \savedanchor{\west}{ \pgfqpoint{-\hex@radius}{0cm}}
+ \savedanchor{\northeast}{ \pgfqpoint{ \hex@dx}{ \hex@dy}}
+ \savedanchor{\northwest}{ \pgfqpoint{-\hex@dx}{ \hex@dy}}
+ \savedanchor{\southwest}{ \pgfqpoint{-\hex@dx}{-\hex@dy}}
+ \savedanchor{\southeast}{ \pgfqpoint{ \hex@dx}{-\hex@dy}}
+ \savedanchor{\northedge}{ \pgfqpoint{ 0cm}{ \hex@dy}}
+ \savedanchor{\southedge}{ \pgfqpoint{ 0cm}{-\hex@dy}}
+ \savedanchor{\northeastedge}{\pgfqpoint{ \hex@e@dx}{ \hex@e@dy}}
+ \savedanchor{\northwestedge}{\pgfqpoint{-\hex@e@dx}{ \hex@e@dy}}
+ \savedanchor{\southwestedge}{\pgfqpoint{-\hex@e@dx}{-\hex@e@dy}}
+ \savedanchor{\southeastedge}{\pgfqpoint{ \hex@e@dx}{-\hex@e@dy}}
+ \savedmacro\init{%
+ \def\hexpath{%
+ \pgfpathmoveto{\east}%
+ \pgfpathlineto{\northeast}%
+ \pgfpathlineto{\northwest}%
+ \pgfpathlineto{\west}%
+ \pgfpathlineto{\southwest}%
+ \pgfpathlineto{\southeast}%
+ \pgfpathclose}
+ }
+% \end{macrocode}
+%
+% These are the actual user callable anchors. We make anchors for
+% each vertex and mid points on each edge.
+%
+% \begin{macrocode}
+%%
+ \anchor{center}{ \pgfpointorigin}
+ \anchor{east}{ \east}
+ \anchor{west}{ \west}
+ \anchor{north east}{ \northeast}
+ \anchor{north west}{ \northwest}
+ \anchor{south west}{ \southwest}
+ \anchor{south east}{ \southeast}
+ \anchor{north edge}{ \northedge}
+ \anchor{south edge}{ \southedge}
+ \anchor{north east edge}{\northeastedge}
+ \anchor{north west edge}{\northwestedge}
+ \anchor{south west edge}{\southwestedge}
+ \anchor{south east edge}{\southeastedge}
+% \end{macrocode}
+%
+% Next we make some short hand aliases for each of these anchors.
+%
+% \begin{macrocode}
+ \anchor{E}{ \east}
+ \anchor{W}{ \west}
+ \anchor{NE}{ \northeast}
+ \anchor{NW}{ \northwest}
+ \anchor{SW}{ \southwest}
+ \anchor{SE}{ \southeast}
+ \anchor{N edge}{ \northedge}
+ \anchor{S edge}{ \southedge}
+ \anchor{NE edge}{\northeastedge}
+ \anchor{NW edge}{\northwestedge}
+ \anchor{SW edge}{\southwestedge}
+ \anchor{SE edge}{\southeastedge}
+% \end{macrocode}
+%
+% The next part is commented out because its not obvious we'll use
+% these.
+%
+% \begin{macrocode}
+ %%
+ \savedanchor{\chitnorth}{ \pgfqpoint{ 0cm}{ 0.6cm}}
+ \savedanchor{\chitsouth}{ \pgfqpoint{ 0cm}{ -0.6cm}}
+ \savedanchor{\chiteast}{ \pgfqpoint{ 0.6cm}{ 0cm}}
+ \savedanchor{\chitwest}{ \pgfqpoint{-0.6cm}{ 0cm}}
+ \savedanchor{\chitnortheast}{\pgfqpoint{ 0.6cm}{ 0.6cm}}
+ \savedanchor{\chitnorthwest}{\pgfqpoint{-0.6cm}{ 0.6cm}}
+ \savedanchor{\chitsouthwest}{\pgfqpoint{-0.6cm}{-0.6cm}}
+ \savedanchor{\chitsoutheast}{\pgfqpoint{ 0.6cm}{-0.6cm}}
+ %
+ \anchor{chit north}{\chitnorth}
+ \anchor{chit south}{\chitsouth}
+ \anchor{chit east}{\chiteast}
+ \anchor{chit west}{\chitwest}
+ \anchor{chit north east}{\chitnortheast}
+ \anchor{chit north west}{\chitnorthwest}
+ \anchor{chit south west}{\chitsouthwest}
+ \anchor{chit south east}{\chitsoutheast}
+ %
+ \anchor{chit N}{\chitnorth}
+ \anchor{chit S}{\chitsouth}
+ \anchor{chit E}{\chiteast}
+ \anchor{chit W}{\chitwest}
+ \anchor{chit NE}{\chitnortheast}
+ \anchor{chit NW}{\chitnorthwest}
+ \anchor{chit SW}{\chitsouthwest}
+ \anchor{chit SE}{\chitsoutheast}
+ %
+% \end{macrocode}
+%
+% The background path. This path may be drawn when the node is
+% drawn. However, we will do most of the work in the
+% \cs{behindbackgroundpath} which gets drawn \emph{after} this path.
+%
+% \begin{macrocode}
+ \backgroundpath{\init\hexpath}
+% \end{macrocode}
+%
+% The \emph{behind} background path, where we do most of the work.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \hex@dbg{2}{Hex behind foreground path:
+ ^^JTerrain: `\meaning\hex@terrain'
+ ^^JRidges: `\meaning\hex@ridges'
+ ^^JTown: `\meaning\hex@town'
+ ^^JExtra clipped: `\meaning\hex@extra@clip'
+ ^^JLabel: `\meaning\hex@label'
+ ^^JExtra: `\meaning\hex@extra'
+ ^^JLast node name:`\meaning\tikzlastnode'
+ ^^JHex row: `\meaning\hex@row'
+ ^^JHex col: `\meaning\hex@col'
+ }%
+ \init%
+% \end{macrocode}
+%
+% We start a scope and clip to the hex path first.
+%
+% \begin{macrocode}
+ \scope%
+ \hexpath%
+ \pgfusepath{clip}%
+% \end{macrocode}
+%
+% Anything inside this scope is clipped to the hex path. The next
+% step is to see if we have a specified terrain for the hex.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@terrain}{\let\hex@terrain\empty}{}%
+ \ifx\hex@terrain\empty\else\hex@do@terrain\fi%
+% \end{macrocode}
+%
+% This concludes the processing of the terrain of the hex. Next, we
+% must see if the user specified ridges.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@ridges}{\let\hex@ridges\empty}{}%
+ \ifx\hex@ridges\empty\else\hex@do@ridges\fi%
+% \end{macrocode}
+%
+% This concludes the processing of the ridges of the hex. Next, we
+% should process any extra (clipped) stuff specified. The user may
+% pass options to each \spec{pic}ture by preceding it with
+% \oarg{options}.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@extra@clip}{\let\hex@extra@clip\empty}{}
+ \ifx\hex@extra@clip\empty\else%
+ \hex@dbg{5}{Extra clipped: `\meaning\hex@extra'}
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@extra@clip}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi%
+% \end{macrocode}
+%
+% This concludes the extra stuff put in the hex. Next, we should
+% place the label is specified. Note, we may know the hex row and
+% column at this point, stored in \cs{hex@row} and \cs{hex@column},
+% respectively. We may want to name the generated node from these if
+% the user specified that option (perhaps use \cs{pgfnoderename} or
+% similar).
+%
+% \begin{macrocode}
+ \@ifundefined{hex@label}{\let\hex@label\empty}{}
+ \ifx\hex@label\empty\else\hex@do@label\fi%
+ \endscope%
+% \end{macrocode}
+%
+% This concludes the label processing, and stuff that should be
+% clipped to the hex shape. If the user specified a town, we can now
+% make that.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@town}{\let\hex@town\empty}{}
+ \@ifundefined{hex@c@pic}{\let\hex@c@pic\empty}{}
+ \ifx\hex@town\empty\else\hex@do@town\fi%
+% \end{macrocode}
+%
+% We can now add extra (non-clipped) stuff. We assume that extra
+% stuff is \spec{pic}tures. The user may pass options to each
+% \spec{pic}ture by preceding it with \oarg{options}.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@extra}{\let\hex@extra\empty}{}
+ \ifx\hex@extra\empty\else%
+ \hex@dbg{5}{Extra: `\meaning\hex@extra'}
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@extra}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi%
+ }
+}
+% \end{macrocode}
+%
+% \begin{HexKey*}{
+% /hex/terrain,
+% /hex/town,
+% /hex/label,
+% /hex/ridges,
+% /hex/extra,
+% /hex/extra clipped}
+%
+% Next, we set up the name space for hex keys. This is the top level
+% name space for hexes. Sub keys \spec{terrain}, \spec{ridges},
+% \spec{town}, \spec{extra}, \spec{label}, and \spec{extra clipped},
+% store their arguments in macros and we expand these later on. This
+% allows us to scope some of the keys given to those specific parts.
+%
+% Define keys for hexagon options. These are
+%
+% \begin{tabular}{|l|p{.7\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Description}}\\
+% \hline
+% \spec{terrain} & Terrain\\
+% \spec{label} & Label on hex\\
+% \spec{town} & Town in hex. Optionally with a name\\
+% \spec{ridges} & Ridge markings on hex\\
+% \spec{extra} & More \\
+% \spec{extra clipped} & More clipped to hex\\
+% \hline
+% \end{tabular}
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/.search also={/tikz},%
+ /hex/.cd,%
+ terrain/.store in=\hex@terrain,%
+ ridges/.store in=\hex@ridges,%
+ town/.store in=\hex@town,%
+ extra/.store in=\hex@extra,%
+ label/.store in=\hex@label,%
+ extra clipped/.store in=\hex@extra@clip%
+}
+% \end{macrocode}
+% \end{HexKey*}
+%
+% \begin{TikzKey}{hex}
+% The next key is the real work horse of the show. Specifying the
+% \spec{hex} key to a node effectively creates a hex for us. Now,
+% there are some things we cannot do outright in the node shape
+% code. For example, we cannot set the name of the node created
+% from the shape code. Therefore, the use of \cs{hex} is often the
+% right choice.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/hex/.style={
+ transform shape,
+ anchor=center,
+ draw=pgfstrokecolor,
+ fill=none,
+ thick,
+ solid},
+ hex/.code={%
+ \hex@dbg{1}{=== Hex with options: `#1'}%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=hex/hex}
+ \pgfkeys{/hex/.cd,/tikz/hex/hex,/tikz/every hex/.try,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% The first thing is to set the default graphics options. The key
+% \spec{every hex} can be set to hex options to be used for all hexes.
+% For example, if one want to label all hexes with an auto-generated
+% label, one can do
+%
+% \begin{Syntax}
+% \cs{tikzset}\{every hex/.style=\{label=\{auto=numbered\}\}\}
+% \end{Syntax}
+%
+% This, coupled with the \spec{hex/label is name} option allows us to
+% set up the board with really minimal effort. We can then use the
+% board coordinates when placing units, and other things.
+%
+%
+% Now we have set up these tools we can go on and define the user
+% facing macro.
+%
+% \begin{Macro}{\hex,\hex@,\hex@@}
+%
+% This will add a hex to the output graphics. Note, the macro
+% need not be followed by a semi-colon (\spec{;}).
+%
+% First argument is optional options.
+%
+% \begin{macrocode}
+\def\hex{%
+ \@ifnextchar[{\hex@}{\hex@[]}%]
+}
+% \end{macrocode}
+%
+% Second optional argument is the coordinates. These should be given
+% in the hex coordinate system.
+%
+% \begin{macrocode}
+\def\hex@[#1]{%
+ \@ifnextchar({\hex@@{#1}}{%
+ \hex@@{#1}(c=0,r=0)}%)
+}
+% \end{macrocode}
+%
+% Third argument is the name to be used.
+%
+% \begin{macrocode}
+\def\hex@@#1(#2){%
+ \@ifnextchar({\hex@@@{#1}{#2}}{\hex@@@{#1}{#2}()}%)
+}
+% \end{macrocode}
+%
+% Now for the real work-horse. First thing is to reset keys and parse
+% them out from the arguments.
+%
+% \begin{macrocode}
+% Third argument is name
+\def\hex@@@#1#2(#3){%
+ \node[hex={#1}] (tmp) at (hex cs:#2) {};%
+ \hex@dbg{8}{=== Label text: `\meaning\hex@l@text'}
+ \ifx|#3|\relax%
+ \@ifundefined{hex@l@text}{%
+ \hex@dbg{8}{=== Label text of hex (#2) not defined}%
+ \let\hex@l@text\empty%
+ }{}
+ \ifhex@label@is@name%
+ \hex@dbg{5}{=== Use label text of hex (#2) as name}%
+ \ifx\hex@l@text\@empty%
+ \hex@dbg{8}{=== Argh! Label text is empty! `\meaning\hex@l@text'}
+ \else%
+ \hex@dbg{3}{=== Renaming hex to label text `\hex@l@text'}
+ \pgfnoderename{\hex@l@text}{tmp}%
+ \fi%
+ \fi%
+ \else%
+ \hex@dbg{3}{=== Renaming hex to user defined name `#3'}%
+ \pgfnoderename{#3}{tmp}%
+ \fi%
+ \@ifnextchar;{\@gobble}{}%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain.dtx b/macros/latex/contrib/wargame/source/hex/terrain.dtx
new file mode 100644
index 0000000000..765b38e759
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain.dtx
@@ -0,0 +1,248 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Terrain}
+% \label{sec:impl:hex:terrain}
+%
+% With the above main routine for making hexes, we turn to decorating
+% a hex with a terrain.
+%
+% \begin{HexKey*}{hex/terrain/image,
+% hex/terrain/pic,
+% hex/terrain/code,
+% hex/terrain/clip}
+%
+% We make the namespace \spec{/hex/terrain} to hold the
+% specific terrain keys. Keys used by terrain identifiers are
+%
+% \begin{tabular}{|l|p{.7\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Description}}\\
+% \hline
+% \spec{image} & Terrain tile image\\
+% \spec{pic} & Terrain \TikZ{} \spec{pic}ture\\
+% \spec{code} & Arbitary \TikZ{} code\\
+% \spec{clip} & \TikZ{} path to clip terrain\\
+% \hline
+% \end{tabular}
+%
+% Now, we have the keys we'll need for selecting the terrain. These
+% live in the namespace \spec{/hex/terrain}, and we can select
+% between \spec{pic}tures or \spec{image}s (external graphics files)
+% for making the terrain. We define some short hands to easily
+% select the common terrains.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/terrain/.search also={/tikz},%
+ /hex/terrain/.cd,%
+ pic/.store in=\hex@t@pic,%
+ image/.store in=\hex@t@image,%
+ code/.store in=\hex@t@code,%
+ clip/.store in=\hex@t@clip,%
+ pic/.default=,
+ image/.default=,
+ code/.default=,
+ clip/.default,
+}
+\iffalse
+\tikzset{
+ /hex/terrain/.cd,%
+ beach/.style={pic=hex/terrain/beach},
+ light woods/.style={pic=hex/terrain/light woods},
+ woods/.style={pic=hex/terrain/woods},
+ swamp/.style={pic=hex/terrain/swamp},
+ rough/.style={pic=hex/terrain/rough},
+ mountains/.style={pic=hex/terrain/mountains},
+ village/.style={pic=hex/terrain/village},
+ town/.style={pic=hex/terrain/town},
+ city/.style={pic=hex/terrain/city},
+}
+\else
+\tikzset{
+ /hex/terrain/.cd,%
+ beach/.style={image=beach},
+ light woods/.style={image=light_woods},
+ woods/.style={image=woods},
+ swamp/.style={image=swamp},
+ rough/.style={image=rough},
+ mountains/.style={image=mountains},
+ village/.style={image=village},
+ town/.style={image=town},
+ city/.style={image=city},
+}
+\fi
+% \end{macrocode}
+% \end{HexKey*}
+%
+%
+% Before we go on, we define the macro that actually generates the
+% terrain of a hex.
+%
+% \begin{Macro}{\hex@do@terrain}
+% If we do have a terrain specified, we start a new scope, this time
+% to clip the terrain by the clipping path specified by
+% \spec{hex=\{terrain=\{clip=...\}\}}. The first thing into the new
+% scope is to process the keys specified in
+% \spec{hex=\{terrain=...\}}. This will set the terrain and the
+% clipping of the terrain.
+%
+% \begin{macrocode}
+\def\hex@do@terrain{%
+ \hex@dbg{5}{Terrain: \meaning\hex@terrain}%
+ \edef\hex@t@tmp{[/hex/terrain/.cd,\hex@terrain]}%
+ \expandafter\scope\hex@t@tmp% Scope for terrain clipping.
+ \hex@dbg{5}{Terrain:
+ ^^J pic: \meaning\hex@t@pic
+ ^^J image: \meaning\hex@t@image
+ ^^J code: \meaning\hex@t@code
+ ^^J clip: \meaning\hex@t@clip}
+% \end{macrocode}
+%
+% We check to see if we have any clipping \spec{pic}tures. If so, we
+% process these in turn and append the soft path to a macro. Once
+% this is done, we use the soft path as a clipping path for the rest
+% of the (terrain) scope.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@t@clip}{\let\hex@t@clip\empty}{}
+ \ifx\hex@t@clip\empty\else%
+ \def\hex@t@c{}
+ \foreach \c in \hex@t@clip{%
+ \hex@dbg{5}{Clipping to `\c'}
+ \expandafter\wg@pic\c\@endwg@pic {}{\wg@tmpa,\wg@tmpb}{%
+ save path=\hex@t@tmp}%
+ \wg@addto@macro\hex@t@c\hex@t@tmp % Append to clippping
+ }%
+ \pgfsyssoftpath@setcurrentpath{\hex@t@c}% Set path
+ \clip;% Clip to the path
+ \fi % End of clipping terrain
+% \end{macrocode}
+%
+% We're new ready to make the terrain. First, we check to see if the
+% relevant storage macros are undefined and if so, \cs{let} them to
+% \cs{empty} so that we can deal more easily with the various cases.
+%
+% \begin{macrocode}
+ %% Now switch between how to draw the terrain. If some of the
+ %% macros are undefined, define them to be empty
+ \@ifundefined{hex@t@pic}{\let\hex@t@pic\empty}{}
+ \@ifundefined{hex@t@image}{\let\hex@t@image\empty}{}
+% \end{macrocode}
+%
+% First we check if we have not got terrain images, but terrain
+% pictures. If we have that, we process these in turn. Note, the
+% user can give options to each terrain picture by preceding the
+% \spec{pic}ture name with \oarg{options}.
+%
+% \begin{macrocode}
+ % If we have no image, check if we have pictures.
+ \ifx\hex@t@image\empty%
+ \hex@dbg{8}{No terrain images}%
+ \ifx\hex@t@pic\empty\else%
+ % We have pictures
+ \hex@dbg{5}{Terrain pictures}%
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@t@pic}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi% We have pictures.
+% \end{macrocode}
+%
+%
+% If the user specified images rather than \spec{pic}tures, then we
+% process these in turn. Again, the user can specify options to each
+% terrain image by preceding the image file name with \oarg{options}.
+%
+% \begin{macrocode}
+ \else % We have images
+ \hex@dbg{5}{Terrain images}%
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \foreach \i in \hex@t@image{%
+ \hex@dbg{10}{Terrain image: `\meaning\i'}
+ \expandafter\wg@node{%
+ \includegraphics[width=2cm]{\i}}\@endwg@node %
+ {}{\wg@tmpa,\wg@tmpb}{%
+ shape=rectangle,%
+ anchor=center,%
+ transform shape,%
+ draw=none}%
+ }
+ \fi%
+ \endscope% End of terrain scope
+}% End of terrain
+% \end{macrocode}
+% \end{Macro}
+%
+%
+%
+%
+
+%
+% Next, we define some example clippings of the terrain images.
+% Specifcally, we make clippings to sextants. We do this by first
+% defining a macro.
+%
+% \begin{Macro}{\hex@make@sextants}
+%
+% When executed this macro will generate some paths that will clip
+% to sextants. The first argument is the inner radius of the
+% sextant and the second argument is the (possible empty) prefix to
+% put in front of the \spec{sextant} name.
+%
+% \begin{macrocode}
+\def\hex@x@r{.7}
+\def\hex@make@sextants#1#2{%
+ \tikzset{%
+ pics/hex/#2sextant/.is choice,
+ pics/hex/#2sextant/north east/.style={
+ code={
+ \path[pic actions]( 0:1)--( 60:1)--( 60:#1)--( 0:#1)--cycle;}},
+ pics/hex/#2sextant/north/.style={
+ code={
+ \path[pic actions]( 60:1)--(120:1)--(120:#1)--( 60:#1)--cycle;}},
+ pics/hex/#2sextant/north west/.style={
+ code={
+ \path[pic actions](120:1)--(180:1)--(180:#1)--(120:#1)--cycle;}},
+ pics/hex/#2sextant/south west/.style={
+ code={
+ \path[pic actions](180:1)--(240:1)--(240:#1)--(180:#1)--cycle;}},
+ pics/hex/#2sextant/south/.style={
+ code={
+ \path[pic actions](240:1)--(300:1)--(300:#1)--(240:#1)--cycle;}},
+ pics/hex/#2sextant/south east/.style={
+ code={
+ \path[pic actions](300:1)--(360:1)--(360:#1)--(300:#1)--cycle;}},
+ pics/hex/#2sextant/center/.style={
+ code={
+ \path[pic actions]
+ (0:#1)--
+ (60:#1)--
+ (120:#1)--
+ (180:#1)--
+ (240:#1)--
+ (300:#1)--cycle;}},
+ pics/hex/#2sextant/NE/.style=hex/#2sextant/north east,
+ pics/hex/#2sextant/NE/.style=hex/#2sextant/north east,
+ pics/hex/#2sextant/N/.style=hex/#2sextant/north,
+ pics/hex/#2sextant/NW/.style=hex/#2sextant/north west,
+ pics/hex/#2sextant/SW/.style=hex/#2sextant/south west,
+ pics/hex/#2sextant/S/.style=hex/#2sextant/south,
+ pics/hex/#2sextant/SE/.style=hex/#2sextant/south east,
+ pics/hex/#2sextant/C/.style=hex/#2sextant/center,
+ }
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{macrocode}
+\hex@make@sextants{.7}{}
+\hex@make@sextants{.3}{large }
+\hex@make@sextants{0}{full }
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx b/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
new file mode 100644
index 0000000000..98e990c15c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
@@ -0,0 +1,698 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% Next, we define some styles for styling the terrain pictures. Users
+% can change these styles (e.g., by appending to them) to change say
+% the colour of the terrain graphics.
+%
+%
+% \begin{TikzKey}{hex/terrain/beach}
+% The style for beach hexes. The pattern is filled with a yellowish
+% colour, and drawing of the outline is disabled.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/beach/.style={%
+ fill={rgb,100:red,93;green,73;blue,35},%
+ draw=none%
+ }%
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% Now for the actual patterns. We go in the same order as above ---
+% i.e, we start with the beach pattern. This is rather long.
+%
+% \begin{TikzKey}{hex/terrain/beach}
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/beach/.pic={
+ \path[hex/terrain/beach,pic actions,draw=none]
+ (-0.4931, 0.8848)
+ -- (-0.4998, 0.8734)
+ .. controls (-0.4908, 0.8731) and (-0.4813, 0.8762) .. (-0.4762, 0.8847)
+ --cycle
+ (-0.4032, 0.8841)
+ .. controls (-0.4004, 0.8804) and (-0.3988, 0.8794) .. (-0.3956, 0.8745)
+ .. controls (-0.3760, 0.8443) and (-0.3811, 0.8330) .. (-0.3456, 0.8112)
+ .. controls (-0.3250, 0.7986) and (-0.2712, 0.7770) .. (-0.2531, 0.8032)
+ .. controls (-0.2294, 0.8375) and (-0.2984, 0.8503) .. (-0.3193, 0.8690)
+ .. controls (-0.3243, 0.8735) and (-0.3281, 0.8785) .. (-0.3321, 0.8835)
+ --cycle
+ (-0.2462, 0.8828)
+ .. controls (-0.2425, 0.8681) and (-0.2383, 0.8546) .. (-0.2293, 0.8461)
+ .. controls (-0.2102, 0.8280) and (-0.1892, 0.8390) .. (-0.1859, 0.8669)
+ .. controls (-0.1854, 0.8711) and (-0.1871, 0.8772) .. (-0.1875, 0.8822)
+ --cycle
+ (-0.0997, 0.8815)
+ .. controls (-0.0971, 0.8706) and (-0.0941, 0.8597) .. (-0.0907, 0.8493)
+ -- (-0.0570, 0.8578)
+ .. controls (-0.0570, 0.8629) and (-0.0560, 0.8730) .. (-0.0553, 0.8812)
+ --cycle
+ ( 0.0213, 0.8805)
+ .. controls ( 0.0222, 0.8725) and ( 0.0235, 0.8650) .. ( 0.0262, 0.8587)
+ .. controls ( 0.0391, 0.8281) and ( 0.0706, 0.8199) .. ( 0.0917, 0.7894)
+ .. controls ( 0.1112, 0.7609) and ( 0.1058, 0.7286) .. ( 0.1050, 0.6961)
+ -- ( 0.1731, 0.7216)
+ -- ( 0.1203, 0.8649)
+ -- ( 0.1097, 0.8797)
+ --cycle
+ ( 0.2978, 0.8781)
+ .. controls ( 0.2985, 0.8773) and ( 0.3002, 0.8756) .. ( 0.3008, 0.8749)
+ .. controls ( 0.2854, 0.8687) and ( 0.2549, 0.8572) .. ( 0.2421, 0.8487)
+ .. controls ( 0.2026, 0.8224) and ( 0.1905, 0.7567) .. ( 0.2046, 0.7132)
+ .. controls ( 0.2146, 0.6819) and ( 0.2330, 0.6680) .. ( 0.2394, 0.6280)
+ .. controls ( 0.2413, 0.6160) and ( 0.2468, 0.5527) .. ( 0.2446, 0.5437)
+ .. controls ( 0.2396, 0.5232) and ( 0.2211, 0.5122) .. ( 0.2231, 0.4913)
+ .. controls ( 0.2261, 0.4603) and ( 0.2686, 0.4388) .. ( 0.2891, 0.4194)
+ .. controls ( 0.3020, 0.4071) and ( 0.3136, 0.3895) .. ( 0.3281, 0.3799)
+ .. controls ( 0.3688, 0.3533) and ( 0.3905, 0.3863) .. ( 0.4199, 0.3902)
+ .. controls ( 0.4350, 0.3921) and ( 0.4560, 0.3849) .. ( 0.4710, 0.3812)
+ -- ( 0.4795, 0.4067)
+ -- ( 0.4965, 0.4067)
+ .. controls ( 0.5008, 0.3961) and ( 0.5009, 0.3893) .. ( 0.5112, 0.3811)
+ .. controls ( 0.5112, 0.3811) and ( 0.6172, 0.3385) .. ( 0.6481, 0.3037)
+ .. controls ( 0.6729, 0.2758) and ( 0.6641, 0.2532) .. ( 0.6667, 0.2206)
+ -- ( 0.7004, 0.2206)
+ .. controls ( 0.7839, 0.2118) and ( 0.7047, 0.0740) .. ( 0.7057, 0.0568)
+ .. controls ( 0.7067, 0.0396) and ( 0.7865,-0.0424) .. ( 0.8032,-0.0520)
+ .. controls ( 0.8251,-0.0644) and ( 0.8703,-0.0686) .. ( 0.8572,-0.0293)
+ .. controls ( 0.8518,-0.0131) and ( 0.7996, 0.0474) .. ( 0.7843, 0.0564)
+ .. controls ( 0.7724, 0.0633) and ( 0.7645, 0.0636) .. ( 0.7518, 0.0664)
+ .. controls ( 0.7688, 0.1093) and ( 0.7993, 0.1905) .. ( 0.7930, 0.2362)
+ .. controls ( 0.7869, 0.2804) and ( 0.7252, 0.2982) .. ( 0.6946, 0.3268)
+ .. controls ( 0.6664, 0.3531) and ( 0.6746, 0.3662) .. ( 0.6323, 0.3966)
+ .. controls ( 0.5760, 0.4371) and ( 0.5386, 0.4324) .. ( 0.5250, 0.4601)
+ .. controls ( 0.5090, 0.4927) and ( 0.5578, 0.6035) .. ( 0.5969, 0.5911)
+ .. controls ( 0.6199, 0.5839) and ( 0.6224, 0.5471) .. ( 0.6341, 0.5291)
+ .. controls ( 0.6488, 0.5064) and ( 0.7020, 0.4614) .. ( 0.7263, 0.4493)
+ -- ( 0.7373, 0.4768)
+ -- ( 0.6866, 0.5671)
+ -- ( 0.6756, 0.5720)
+ -- ( 0.6766, 0.5850)
+ -- ( 0.6331, 0.6627)
+ .. controls ( 0.6280, 0.6613) and ( 0.6239, 0.6599) .. ( 0.6157, 0.6589)
+ -- ( 0.5646, 0.6589)
+ .. controls ( 0.5375, 0.6557) and ( 0.5277, 0.6432) .. ( 0.4965, 0.6489)
+ .. controls ( 0.4716, 0.6520) and ( 0.4306, 0.6774) .. ( 0.4104, 0.6489)
+ .. controls ( 0.3809, 0.6093) and ( 0.4627, 0.6240) .. ( 0.4837, 0.5772)
+ .. controls ( 0.4958, 0.5502) and ( 0.4652, 0.4811) .. ( 0.4429, 0.4648)
+ -- ( 0.3523, 0.4350)
+ .. controls ( 0.3178, 0.4372) and ( 0.3207, 0.4766) .. ( 0.3153, 0.5004)
+ .. controls ( 0.3090, 0.5282) and ( 0.2968, 0.5398) .. ( 0.2922, 0.5684)
+ .. controls ( 0.2896, 0.6035) and ( 0.3061, 0.6276) .. ( 0.2922, 0.6621)
+ .. controls ( 0.2756, 0.6961) and ( 0.2422, 0.7190) .. ( 0.2525, 0.7640)
+ .. controls ( 0.2650, 0.8188) and ( 0.3165, 0.7932) .. ( 0.3324, 0.8417)
+ .. controls ( 0.3359, 0.8522) and ( 0.3385, 0.8648) .. ( 0.3399, 0.8778)
+ --cycle
+ ( 0.4261, 0.8770)
+ -- ( 0.4333, 0.8493)
+ -- ( 0.4845, 0.7440)
+ .. controls ( 0.4963, 0.7304) and ( 0.5450, 0.6930) .. ( 0.5630, 0.6989)
+ .. controls ( 0.5735, 0.7024) and ( 0.5838, 0.7169) .. ( 0.5932, 0.7337)
+ -- ( 0.5612, 0.7909)
+ .. controls ( 0.5537, 0.7875) and ( 0.5468, 0.7852) .. ( 0.5403, 0.7864)
+ .. controls ( 0.5078, 0.7926) and ( 0.5191, 0.8406) .. ( 0.5145, 0.8567)
+ .. controls ( 0.5121, 0.8651) and ( 0.5076, 0.8710) .. ( 0.5025, 0.8764)
+ --cycle
+ ( 0.3773, 0.8153)
+ .. controls ( 0.3625, 0.7892) and ( 0.2993, 0.7161) .. ( 0.3316, 0.6877)
+ .. controls ( 0.3432, 0.6774) and ( 0.3866, 0.6728) .. ( 0.4029, 0.6706)
+ -- ( 0.3973, 0.7472)
+ -- ( 0.4029, 0.8153)
+ --cycle
+ (-0.4224, 0.8088)
+ .. controls (-0.4416, 0.8077) and (-0.4585, 0.7826) .. (-0.4275, 0.7562)
+ -- (-0.3971, 0.7387)
+ .. controls (-0.4780, 0.6942) and (-0.4752, 0.6640) .. (-0.4591, 0.5855)
+ .. controls (-0.4391, 0.4887) and (-0.4527, 0.5347) .. (-0.4103, 0.4493)
+ .. controls (-0.3870, 0.4026) and (-0.4070, 0.3747) .. (-0.3460, 0.3642)
+ -- (-0.3352, 0.4823)
+ .. controls (-0.3409, 0.5024) and (-0.3617, 0.5113) .. (-0.3739, 0.5281)
+ -- (-0.4164, 0.6287)
+ .. controls (-0.4188, 0.6375) and (-0.4186, 0.6444) .. (-0.4164, 0.6528)
+ .. controls (-0.4067, 0.6807) and (-0.3521, 0.7255) .. (-0.3274, 0.6931)
+ .. controls (-0.3070, 0.6694) and (-0.3336, 0.6432) .. (-0.3274, 0.6221)
+ .. controls (-0.3249, 0.6055) and (-0.3059, 0.6028) .. (-0.2950, 0.6162)
+ .. controls (-0.2867, 0.6265) and (-0.2838, 0.6558) .. (-0.2829, 0.6692)
+ .. controls (-0.2775, 0.7444) and (-0.3333, 0.7652) .. (-0.3955, 0.7472)
+ .. controls (-0.3950, 0.7586) and (-0.3916, 0.7684) .. (-0.3955, 0.7803)
+ .. controls (-0.3986, 0.8016) and (-0.4109, 0.8096) .. (-0.4224, 0.8088)
+ --cycle
+ (-0.1391, 0.8077)
+ .. controls (-0.1634, 0.8024) and (-0.1582, 0.7647) .. (-0.1487, 0.7492)
+ .. controls (-0.1306, 0.7190) and (-0.1004, 0.7270) .. (-0.0652, 0.7073)
+ -- (-0.0226, 0.6801)
+ -- ( 0.0282, 0.6560)
+ .. controls ( 0.0622, 0.6331) and ( 0.0955, 0.5639) .. ( 0.1219, 0.5259)
+ .. controls ( 0.2125, 0.5714) and ( 0.1427, 0.6114) .. ( 0.1219, 0.6453)
+ -- ( 0.1054, 0.6768)
+ .. controls ( 0.0862, 0.7028) and ( 0.0448, 0.7080) .. ( 0.0115, 0.7299)
+ .. controls (-0.0377, 0.7622) and (-0.0173, 0.7726) .. (-0.0822, 0.7918)
+ .. controls (-0.0961, 0.7958) and (-0.1270, 0.8103) .. (-0.1391, 0.8077)
+ --cycle
+ (-0.5460, 0.7940)
+ -- (-0.5911, 0.7166)
+ .. controls (-0.5649, 0.7015) and (-0.5397, 0.7188) .. (-0.5308, 0.7556)
+ .. controls (-0.5251, 0.7788) and (-0.5335, 0.7873) .. (-0.5460, 0.7940)
+ --cycle
+ (-0.2382, 0.7423)
+ .. controls (-0.2453, 0.7424) and (-0.2512, 0.7383) .. (-0.2550, 0.7274)
+ .. controls (-0.2635, 0.7026) and (-0.2353, 0.6726) .. (-0.2229, 0.6536)
+ .. controls (-0.2031, 0.6234) and (-0.2020, 0.6105) .. (-0.1928, 0.5770)
+ .. controls (-0.1763, 0.5803) and (-0.1499, 0.5890) .. (-0.1342, 0.5831)
+ .. controls (-0.1112, 0.5745) and (-0.1047, 0.5481) .. (-0.0866, 0.5338)
+ -- (-0.0397, 0.5102)
+ -- ( 0.0664, 0.4219)
+ .. controls ( 0.0874, 0.3954) and ( 0.0785, 0.3655) .. ( 0.1070, 0.3502)
+ .. controls ( 0.1367, 0.3343) and ( 0.1690, 0.3592) .. ( 0.1732, 0.3899)
+ .. controls ( 0.1755, 0.4075) and ( 0.1545, 0.4554) .. ( 0.1475, 0.4748)
+ .. controls ( 0.0838, 0.4666) and ( 0.0509, 0.4836) .. ( 0.0454, 0.5515)
+ .. controls (-0.0576, 0.5778) and (-0.0955, 0.6323) .. (-0.1754, 0.6949)
+ .. controls (-0.1861, 0.7034) and (-0.2171, 0.7418) .. (-0.2382, 0.7423)
+ --cycle
+ (-0.5068, 0.6706)
+ .. controls (-0.5119, 0.6724) and (-0.5194, 0.6726) .. (-0.5299, 0.6701)
+ .. controls (-0.5512, 0.6413) and (-0.5242, 0.6333) .. (-0.5102, 0.6400)
+ .. controls (-0.4981, 0.6457) and (-0.4916, 0.6653) .. (-0.5068, 0.6706)
+ --cycle
+ (-0.6356, 0.6402)
+ -- (-0.6681, 0.5845)
+ -- (-0.6588, 0.5684)
+ .. controls (-0.6473, 0.5521) and (-0.6323, 0.5371) .. (-0.6265, 0.5174)
+ .. controls (-0.6174, 0.4865) and (-0.6614, 0.4161) .. (-0.6950, 0.4206)
+ .. controls (-0.7111, 0.4226) and (-0.7174, 0.4376) .. (-0.7460, 0.4507)
+ -- (-0.7632, 0.4212)
+ .. controls (-0.7629, 0.4042) and (-0.7611, 0.3875) .. (-0.7546, 0.3789)
+ .. controls (-0.7424, 0.3626) and (-0.7129, 0.3612) .. (-0.6966, 0.3297)
+ .. controls (-0.6823, 0.3022) and (-0.6963, 0.2741) .. (-0.6808, 0.2598)
+ .. controls (-0.6602, 0.2410) and (-0.6495, 0.2720) .. (-0.6484, 0.2878)
+ .. controls (-0.6461, 0.3229) and (-0.6488, 0.4046) .. (-0.6080, 0.4204)
+ .. controls (-0.5750, 0.4330) and (-0.4980, 0.3514) .. (-0.4929, 0.3217)
+ .. controls (-0.4895, 0.3019) and (-0.5044, 0.2671) .. (-0.4860, 0.2550)
+ .. controls (-0.4691, 0.2439) and (-0.4582, 0.2679) .. (-0.4535, 0.2796)
+ .. controls (-0.4450, 0.3015) and (-0.4273, 0.3562) .. (-0.4401, 0.3771)
+ .. controls (-0.4495, 0.3922) and (-0.5019, 0.4172) .. (-0.5296, 0.4507)
+ .. controls (-0.5656, 0.4941) and (-0.5734, 0.5631) .. (-0.5973, 0.6021)
+ .. controls (-0.6099, 0.6226) and (-0.6226, 0.6316) .. (-0.6356, 0.6402)
+ --cycle
+ ( 0.2242, 0.6110)
+ -- ( 0.1816, 0.6025)
+ -- ( 0.1816, 0.5855)
+ .. controls ( 0.2117, 0.5815) and ( 0.2140, 0.5821) .. ( 0.2242, 0.6110)
+ --cycle
+ ( 0.3924, 0.6049)
+ .. controls ( 0.3895, 0.6048) and ( 0.3860, 0.6036) .. ( 0.3820, 0.6011)
+ .. controls ( 0.3535, 0.5835) and ( 0.3670, 0.5238) .. ( 0.3773, 0.5004)
+ -- ( 0.3944, 0.5004)
+ -- ( 0.4061, 0.5429)
+ .. controls ( 0.4082, 0.5540) and ( 0.4130, 0.6056) .. ( 0.3924, 0.6049)
+ --cycle
+ (-0.2864, 0.5940)
+ .. controls (-0.2904, 0.5793) and (-0.2950, 0.5676) .. (-0.2919, 0.5518)
+ .. controls (-0.2769, 0.4768) and (-0.1616, 0.5041) .. (-0.2162, 0.5623)
+ .. controls (-0.2236, 0.5702) and (-0.2346, 0.5747) .. (-0.2443, 0.5790)
+ --cycle
+ (-0.7010, 0.5280)
+ -- (-0.7269, 0.4835)
+ .. controls (-0.7207, 0.4876) and (-0.7144, 0.4952) .. (-0.7081, 0.5094)
+ --cycle
+ (-0.0992, 0.4748)
+ -- (-0.2099, 0.4556)
+ -- (-0.2888, 0.3790)
+ -- (-0.3460, 0.3557)
+ -- (-0.3389, 0.3218)
+ .. controls (-0.3310, 0.2959) and (-0.3026, 0.2636) .. (-0.2781, 0.2927)
+ .. controls (-0.2745, 0.2971) and (-0.2504, 0.3947) .. (-0.1948, 0.3764)
+ .. controls (-0.1607, 0.3651) and (-0.1697, 0.2984) .. (-0.1588, 0.2536)
+ -- (-0.1503, 0.2536)
+ -- (-0.1503, 0.2450)
+ -- (-0.1163, 0.2366)
+ .. controls (-0.0968, 0.3059) and (-0.1262, 0.3371) .. (-0.1239, 0.3982)
+ .. controls (-0.1229, 0.4261) and (-0.1067, 0.4484) .. (-0.0992, 0.4748)
+ --cycle
+ (-0.1503, 0.2450)
+ -- (-0.1588, 0.2536)
+ .. controls (-0.2292, 0.2544) and (-0.2730, 0.2893) .. (-0.2677, 0.2195)
+ -- (-0.2609, 0.1855)
+ .. controls (-0.2393, 0.1890) and (-0.2005, 0.2039) .. (-0.1909, 0.1753)
+ .. controls (-0.1709, 0.1163) and (-0.2582, 0.0953) .. (-0.2387, 0.0533)
+ .. controls (-0.2275, 0.0292) and (-0.1430, 0.0537) .. (-0.1361, 0.0692)
+ .. controls (-0.1250, 0.0859) and (-0.1359, 0.1083) .. (-0.1361, 0.1259)
+ .. controls (-0.1437, 0.1788) and (-0.1186, 0.1766) .. (-0.1503, 0.2450)
+ --cycle
+ ( 0.7348, 0.4408)
+ .. controls ( 0.7113, 0.3774) and ( 0.7569, 0.3513) .. ( 0.7901, 0.3824)
+ -- ( 0.7585, 0.4390)
+ --cycle
+ ( 0.2071, 0.4153)
+ .. controls ( 0.1984, 0.3706) and ( 0.2118, 0.3204) .. ( 0.2582, 0.3046)
+ .. controls ( 0.2685, 0.3631) and ( 0.2706, 0.3931) .. ( 0.2071, 0.4153)
+ --cycle
+ (-0.0567, 0.3982)
+ .. controls (-0.0558, 0.3230) and (-0.0460, 0.3456) .. (-0.0210, 0.2876)
+ -- ( 0.0067, 0.1940)
+ .. controls ( 0.0180, 0.1513) and ( 0.0026, 0.1332) .. ( 0.0454, 0.1089)
+ -- ( 0.0767, 0.1940)
+ -- ( 0.0546, 0.2621)
+ -- ( 0.0406, 0.3185)
+ -- (-0.0258, 0.3896)
+ --cycle
+ (-0.7969, 0.3634)
+ -- (-0.8570, 0.2602)
+ .. controls (-0.8515, 0.2550) and (-0.8469, 0.2514) .. (-0.8414, 0.2450)
+ .. controls (-0.8020, 0.1990) and (-0.8201, 0.1971) .. (-0.7629, 0.1540)
+ .. controls (-0.7462, 0.1414) and (-0.7054, 0.1023) .. (-0.6834, 0.1181)
+ .. controls (-0.6662, 0.1304) and (-0.6813, 0.1625) .. (-0.6882, 0.1768)
+ .. controls (-0.7213, 0.2456) and (-0.7865, 0.2417) .. (-0.8004, 0.2965)
+ .. controls (-0.8052, 0.3154) and (-0.7990, 0.3413) .. (-0.7969, 0.3634)
+ --cycle
+ ( 0.8244, 0.3214)
+ .. controls ( 0.8136, 0.3128) and ( 0.8080, 0.2984) .. ( 0.8114, 0.2706)
+ .. controls ( 0.8314, 0.2739) and ( 0.8424, 0.2735) .. ( 0.8526, 0.2710)
+ --cycle
+ ( 0.5015, 0.3207)
+ .. controls ( 0.4943, 0.3196) and ( 0.4861, 0.3171) .. ( 0.4766, 0.3130)
+ .. controls ( 0.4611, 0.2827) and ( 0.4839, 0.2747) .. ( 0.5028, 0.2521)
+ -- ( 0.5376, 0.1972)
+ .. controls ( 0.5529, 0.1772) and ( 0.5728, 0.1698) .. ( 0.5845, 0.1426)
+ .. controls ( 0.5979, 0.1115) and ( 0.5837, 0.0732) .. ( 0.5987, 0.0532)
+ .. controls ( 0.6095, 0.0384) and ( 0.6236, 0.0428) .. ( 0.6350, 0.0532)
+ .. controls ( 0.6681, 0.0842) and ( 0.6456, 0.1087) .. ( 0.6482, 0.1429)
+ .. controls ( 0.6481, 0.1614) and ( 0.6596, 0.1802) .. ( 0.6482, 0.1967)
+ .. controls ( 0.6390, 0.2131) and ( 0.5992, 0.2239) .. ( 0.5768, 0.2483)
+ .. controls ( 0.5547, 0.2722) and ( 0.5524, 0.3288) .. ( 0.5015, 0.3207)
+ --cycle
+ (-0.5678, 0.3115)
+ .. controls (-0.5832, 0.3118) and (-0.6140, 0.2810) .. (-0.6269, 0.2706)
+ .. controls (-0.6185, 0.2412) and (-0.5926, 0.1953) .. (-0.5973, 0.1685)
+ .. controls (-0.6029, 0.1373) and (-0.6320, 0.1239) .. (-0.6369, 0.0996)
+ .. controls (-0.6406, 0.0816) and (-0.6303, 0.0652) .. (-0.6237, 0.0493)
+ .. controls (-0.6147, 0.0275) and (-0.6000,-0.0443) .. (-0.5641,-0.0258)
+ .. controls (-0.5134,-0.0018) and (-0.5902, 0.0606) .. (-0.5641, 0.1074)
+ .. controls (-0.5332, 0.1697) and (-0.4913, 0.1444) .. (-0.4481, 0.1593)
+ .. controls (-0.3913, 0.1792) and (-0.3439, 0.2446) .. (-0.3545, 0.3046)
+ -- (-0.4568, 0.2201)
+ -- (-0.5588, 0.2201)
+ .. controls (-0.5549, 0.2390) and (-0.5305, 0.3109) .. (-0.5678, 0.3115)
+ --cycle
+ ( 0.2243, 0.2813)
+ -- ( 0.1631, 0.2450)
+ -- ( 0.0965, 0.2281)
+ -- ( 0.1689, 0.1131)
+ -- ( 0.2065, 0.0861)
+ .. controls ( 0.2453, 0.0564) and ( 0.2384, 0.0410) .. ( 0.2923, 0.0323)
+ -- ( 0.2988,-0.0188)
+ .. controls ( 0.2994,-0.0695) and ( 0.2657,-0.0796) .. ( 0.2249,-0.0579)
+ .. controls ( 0.1337,-0.0093) and ( 0.1545, 0.0219) .. ( 0.1102, 0.0744)
+ .. controls ( 0.0914, 0.0967) and ( 0.0807, 0.1010) .. ( 0.0539, 0.1089)
+ .. controls ( 0.0562, 0.0613) and ( 0.0756,-0.0434) .. ( 0.0403,-0.0825)
+ .. controls ( 0.0293,-0.0948) and (-0.0336,-0.1168) .. (-0.0567,-0.1294)
+ .. controls (-0.0615,-0.1087) and (-0.0777,-0.0729) .. (-0.0703,-0.0546)
+ .. controls (-0.0586,-0.0251) and ( 0.0562, 0.0040) .. (-0.0152, 0.0389)
+ -- (-0.0397, 0.0480)
+ -- (-0.0737, 0.0578)
+ .. controls (-0.0806, 0.0391) and (-0.0849, 0.0192) .. (-0.1018, 0.0068)
+ .. controls (-0.1154,-0.0032) and (-0.1352,-0.0018) .. (-0.1438,-0.0212)
+ .. controls (-0.1562,-0.0491) and (-0.1117,-0.1243) .. (-0.0874,-0.1373)
+ .. controls (-0.0745,-0.1434) and (-0.0687,-0.1394) .. (-0.0567,-0.1373)
+ .. controls (-0.0358,-0.2033) and (-0.0062,-0.1612) .. ( 0.0370,-0.1500)
+ -- ( 0.1050,-0.1379)
+ .. controls ( 0.0882,-0.0871) and ( 0.0808,-0.0999) .. ( 0.0965,-0.0443)
+ .. controls ( 0.1454,-0.0619) and ( 0.1336,-0.0743) .. ( 0.1664,-0.0940)
+ .. controls ( 0.1897,-0.1081) and ( 0.2226,-0.1052) .. ( 0.2361,-0.1388)
+ .. controls ( 0.2495,-0.1724) and ( 0.2245,-0.1963) .. ( 0.2412,-0.2584)
+ .. controls ( 0.2526,-0.2569) and ( 0.2622,-0.2548) .. ( 0.2735,-0.2584)
+ .. controls ( 0.2987,-0.2708) and ( 0.3225,-0.3241) .. ( 0.3212,-0.3506)
+ .. controls ( 0.3203,-0.3711) and ( 0.3053,-0.3950) .. ( 0.3008,-0.4443)
+ -- ( 0.2497,-0.4187)
+ .. controls ( 0.2599,-0.4479) and ( 0.2621,-0.4475) .. ( 0.2905,-0.4528)
+ .. controls ( 0.2877,-0.4715) and ( 0.2799,-0.4998) .. ( 0.2905,-0.5182)
+ .. controls ( 0.2991,-0.5392) and ( 0.3228,-0.5357) .. ( 0.3346,-0.5182)
+ .. controls ( 0.3506,-0.4943) and ( 0.3355,-0.4515) .. ( 0.3532,-0.4203)
+ .. controls ( 0.3716,-0.3881) and ( 0.4096,-0.3844) .. ( 0.4084,-0.3499)
+ .. controls ( 0.4074,-0.3241) and ( 0.3866,-0.3087) .. ( 0.3728,-0.2897)
+ -- ( 0.3426,-0.2337)
+ -- ( 0.2989,-0.1879)
+ .. controls ( 0.2810,-0.1587) and ( 0.2976,-0.1327) .. ( 0.3187,-0.1323)
+ .. controls ( 0.3342,-0.1319) and ( 0.3489,-0.1451) .. ( 0.3603,-0.1541)
+ .. controls ( 0.3817,-0.1712) and ( 0.4026,-0.1894) .. ( 0.4144,-0.2146)
+ .. controls ( 0.4299,-0.2477) and ( 0.4289,-0.2977) .. ( 0.4712,-0.3110)
+ .. controls ( 0.4957,-0.3188) and ( 0.5167,-0.3024) .. ( 0.5044,-0.2753)
+ .. controls ( 0.4967,-0.2585) and ( 0.4769,-0.2471) .. ( 0.4676,-0.2227)
+ .. controls ( 0.4582,-0.1981) and ( 0.4681,-0.1743) .. ( 0.4488,-0.1492)
+ .. controls ( 0.4286,-0.1227) and ( 0.3809,-0.1095) .. ( 0.3621,-0.0696)
+ .. controls ( 0.3402,-0.0230) and ( 0.3896, 0.0270) .. ( 0.3092, 0.0408)
+ -- ( 0.3532, 0.1933)
+ -- ( 0.3944, 0.2536)
+ -- ( 0.3433, 0.2765)
+ --cycle
+ ( 0.2497, 0.2450)
+ -- ( 0.2782, 0.2025)
+ .. controls ( 0.2843, 0.1911) and ( 0.2884, 0.1815) .. ( 0.2900, 0.1685)
+ .. controls ( 0.3021, 0.0654) and ( 0.1495, 0.1479) .. ( 0.2135, 0.2245)
+ .. controls ( 0.2246, 0.2378) and ( 0.2346, 0.2396) .. ( 0.2497, 0.2450)
+ --cycle
+ ( 0.8836, 0.2157)
+ .. controls ( 0.8688, 0.2061) and ( 0.8571, 0.1889) .. ( 0.8687, 0.1736)
+ .. controls ( 0.8785, 0.1608) and ( 0.8967, 0.1613) .. ( 0.9161, 0.1578)
+ --cycle
+ (-0.3035, 0.1940)
+ .. controls (-0.3340, 0.1390) and (-0.3508, 0.1491) .. (-0.3624, 0.1300)
+ .. controls (-0.3738, 0.1112) and (-0.3588, 0.0896) .. (-0.3288, 0.0972)
+ .. controls (-0.2842, 0.1084) and (-0.2392, 0.1714) .. (-0.3035, 0.1940)
+ --cycle
+ ( 0.4710, 0.1940)
+ .. controls ( 0.4330, 0.1525) and ( 0.3961, 0.1447) .. ( 0.4114, 0.0833)
+ .. controls ( 0.4294, 0.0897) and ( 0.4596, 0.1056) .. ( 0.4776, 0.0984)
+ .. controls ( 0.5010, 0.0888) and ( 0.5182, 0.0420) .. ( 0.4925, 0.0231)
+ .. controls ( 0.4698, 0.0064) and ( 0.4500, 0.0299) .. ( 0.3944, 0.0153)
+ .. controls ( 0.4243,-0.0189) and ( 0.4618,-0.0333) .. ( 0.4765,-0.0621)
+ .. controls ( 0.4928,-0.0939) and ( 0.4729,-0.1183) .. ( 0.4881,-0.1406)
+ .. controls ( 0.4977,-0.1549) and ( 0.5241,-0.1630) .. ( 0.5425,-0.1894)
+ .. controls ( 0.5557,-0.2085) and ( 0.5562,-0.2282) .. ( 0.5657,-0.2485)
+ -- ( 0.6122,-0.3251)
+ .. controls ( 0.6335,-0.3720) and ( 0.6160,-0.3973) .. ( 0.6323,-0.4443)
+ .. controls ( 0.6532,-0.5042) and ( 0.6754,-0.5231) .. ( 0.6973,-0.5440)
+ -- ( 0.7289,-0.4899)
+ .. controls ( 0.7138,-0.4739) and ( 0.6992,-0.4579) .. ( 0.6886,-0.4358)
+ -- ( 0.6489,-0.2690)
+ .. controls ( 0.6485,-0.2445) and ( 0.6654,-0.2180) .. ( 0.6598,-0.2002)
+ .. controls ( 0.6522,-0.1752) and ( 0.6202,-0.1899) .. ( 0.5938,-0.1612)
+ .. controls ( 0.5619,-0.1263) and ( 0.5907,-0.0980) .. ( 0.5797,-0.0720)
+ .. controls ( 0.5714,-0.0525) and ( 0.5434,-0.0441) .. ( 0.5374,-0.0184)
+ .. controls ( 0.5319, 0.0056) and ( 0.5522, 0.0300) .. ( 0.5533, 0.0578)
+ .. controls ( 0.5548, 0.0943) and ( 0.4981, 0.1701) .. ( 0.4710, 0.1940)
+ --cycle
+ (-0.9001, 0.1862)
+ -- (-0.9386, 0.1201)
+ .. controls (-0.9374, 0.1181) and (-0.9371, 0.1158) .. (-0.9356, 0.1139)
+ .. controls (-0.9242, 0.0996) and (-0.9046, 0.0893) .. (-0.8911, 0.0660)
+ .. controls (-0.8684, 0.0268) and (-0.8960, 0.0297) .. (-0.8592,-0.0296)
+ .. controls (-0.8262,-0.0830) and (-0.8655,-0.1092) .. (-0.7971,-0.1209)
+ -- (-0.7875, 0.0068)
+ -- (-0.8579, 0.1174)
+ --cycle
+ (-0.4453, 0.0979)
+ .. controls (-0.4922, 0.0916) and (-0.4988, 0.0347) .. (-0.4759, 0.0116)
+ .. controls (-0.4491,-0.0149) and (-0.4165, 0.0208) .. (-0.3900, 0.0116)
+ .. controls (-0.3555,-0.0011) and (-0.3800,-0.0410) .. (-0.3751,-0.0698)
+ -- (-0.3537,-0.1294)
+ .. controls (-0.3428,-0.1879) and (-0.4042,-0.1777) .. (-0.3801,-0.2656)
+ .. controls (-0.3617,-0.2531) and (-0.3352,-0.2292) .. (-0.3122,-0.2330)
+ .. controls (-0.2845,-0.2375) and (-0.2669,-0.2694) .. (-0.2543,-0.2911)
+ .. controls (-0.2183,-0.3533) and (-0.2004,-0.3613) .. (-0.2184,-0.4358)
+ .. controls (-0.3300,-0.4097) and (-0.2723,-0.5065) .. (-0.2483,-0.5549)
+ -- (-0.2129,-0.6314)
+ .. controls (-0.2017,-0.6508) and (-0.1900,-0.6661) .. (-0.1670,-0.6712)
+ .. controls (-0.1211,-0.6813) and (-0.1100,-0.6527) .. (-0.1163,-0.6145)
+ .. controls (-0.1327,-0.6119) and (-0.1427,-0.6118) .. (-0.1568,-0.6009)
+ .. controls (-0.1780,-0.5845) and (-0.2123,-0.5041) .. (-0.2042,-0.4783)
+ .. controls (-0.1947,-0.4484) and (-0.1575,-0.4121) .. (-0.1333,-0.3932)
+ -- (-0.1527,-0.3251)
+ -- (-0.1588,-0.2656)
+ .. controls (-0.2187,-0.2715) and (-0.2083,-0.2536) .. (-0.2457,-0.2163)
+ .. controls (-0.2684,-0.1935) and (-0.2911,-0.1886) .. (-0.2996,-0.1546)
+ -- (-0.2996,-0.1209)
+ -- (-0.3232,-0.0698)
+ .. controls (-0.3283,-0.0435) and (-0.3124,-0.0260) .. (-0.3175,-0.0041)
+ .. controls (-0.3251, 0.0283) and (-0.3891, 0.0917) .. (-0.4227, 0.0973)
+ .. controls (-0.4311, 0.0987) and (-0.4386, 0.0989) .. (-0.4453, 0.0979)
+ --cycle
+ (-0.1163,-0.6145)
+ -- (-0.0812,-0.6009)
+ -- (-0.0509,-0.4868)
+ -- (-0.0567,-0.4528)
+ .. controls (-0.1227,-0.4845) and (-0.1350,-0.5483) .. (-0.1163,-0.6145)
+ --cycle
+ ( 0.9165, 0.0573)
+ .. controls ( 0.8982, 0.0512) and ( 0.8800, 0.0260) .. ( 0.8880,-0.0013)
+ .. controls ( 0.8973,-0.0334) and ( 0.9330,-0.0408) .. ( 0.9466,-0.0703)
+ .. controls ( 0.9528,-0.0838) and ( 0.9514,-0.0964) .. ( 0.9506,-0.1091)
+ -- ( 1.0000,-0.0243)
+ .. controls ( 0.9816,-0.0179) and ( 0.9678,-0.0119) .. ( 0.9563, 0.0077)
+ .. controls ( 0.9465, 0.0244) and ( 0.9476, 0.0488) .. ( 0.9340, 0.0564)
+ .. controls ( 0.9288, 0.0593) and ( 0.9227, 0.0593) .. ( 0.9165, 0.0573)
+ --cycle
+ (-0.7064, 0.0069)
+ .. controls (-0.7128, 0.0077) and (-0.7187, 0.0075) .. (-0.7237, 0.0061)
+ .. controls (-0.7255, 0.0030) and (-0.7310, 0.0025) .. (-0.7316,-0.0115)
+ .. controls (-0.7321,-0.0230) and (-0.7071,-0.1058) .. (-0.6984,-0.1096)
+ .. controls (-0.6872,-0.1176) and (-0.6721,-0.1116) .. (-0.6609,-0.1096)
+ .. controls (-0.6502,-0.1046) and (-0.6316,-0.0986) .. (-0.6242,-0.0900)
+ .. controls (-0.5901,-0.0507) and (-0.6615, 0.0017) .. (-0.7064, 0.0069)
+ --cycle
+ (-1.0000, 0.0068)
+ -- (-1.0000, 0.0020)
+ -- (-0.9548,-0.0788)
+ .. controls (-0.9170,-0.0310) and (-0.9342,-0.0158) .. (-1.0000, 0.0068)
+ --cycle
+ (-0.2643, 0.0054)
+ .. controls (-0.2853,-0.0295) and (-0.2523,-0.0713) .. (-0.2182,-0.0843)
+ .. controls (-0.2024,-0.0902) and (-0.1781,-0.0944) .. (-0.1687,-0.0757)
+ .. controls (-0.1530,-0.0441) and (-0.2378, 0.0095) .. (-0.2643, 0.0054)
+ --cycle
+ ( 0.6299,-0.0102)
+ .. controls ( 0.6155,-0.0145) and ( 0.6071,-0.0342) .. ( 0.6128,-0.0510)
+ .. controls ( 0.6198,-0.0721) and ( 0.6440,-0.0790) .. ( 0.6606,-0.0986)
+ .. controls ( 0.6738,-0.1143) and ( 0.6761,-0.1328) .. ( 0.6948,-0.1437)
+ .. controls ( 0.7092,-0.1520) and ( 0.7311,-0.1484) .. ( 0.7401,-0.1664)
+ .. controls ( 0.7461,-0.1784) and ( 0.7351,-0.2363) .. ( 0.7348,-0.2570)
+ .. controls ( 0.7336,-0.3524) and ( 0.7289,-0.3324) .. ( 0.7620,-0.4187)
+ .. controls ( 0.7631,-0.4216) and ( 0.7642,-0.4246) .. ( 0.7652,-0.4275)
+ -- ( 0.8003,-0.3672)
+ .. controls ( 0.7976,-0.3636) and ( 0.7942,-0.3606) .. ( 0.7918,-0.3568)
+ .. controls ( 0.7778,-0.3349) and ( 0.7645,-0.2537) .. ( 0.7970,-0.2417)
+ .. controls ( 0.8206,-0.2330) and ( 0.8347,-0.2671) .. ( 0.8432,-0.2822)
+ -- ( 0.8469,-0.2872)
+ -- ( 0.8787,-0.2326)
+ -- ( 0.8594,-0.1993)
+ .. controls ( 0.8496,-0.1847) and ( 0.7996,-0.1314) .. ( 0.7847,-0.1281)
+ .. controls ( 0.7712,-0.1229) and ( 0.7642,-0.1268) .. ( 0.7518,-0.1281)
+ .. controls ( 0.7451,-0.1148) and ( 0.7397,-0.1014) .. ( 0.7293,-0.0886)
+ -- ( 0.6461,-0.0117)
+ .. controls ( 0.6402,-0.0090) and ( 0.6347,-0.0087) .. ( 0.6299,-0.0102)
+ --cycle
+ (-0.5178,-0.0844)
+ .. controls (-0.5451,-0.0820) and (-0.5852,-0.0947) .. (-0.5902,-0.1144)
+ .. controls (-0.6007,-0.1557) and (-0.5621,-0.1731) .. (-0.5414,-0.1997)
+ .. controls (-0.5274,-0.2177) and (-0.5229,-0.2355) .. (-0.5044,-0.2525)
+ .. controls (-0.4888,-0.2669) and (-0.4706,-0.2705) .. (-0.4543,-0.2923)
+ .. controls (-0.4420,-0.3087) and (-0.4220,-0.3707) .. (-0.4141,-0.3932)
+ .. controls (-0.3620,-0.3875) and (-0.3060,-0.4031) .. (-0.3060,-0.3592)
+ .. controls (-0.3060,-0.3272) and (-0.3358,-0.3272) .. (-0.3716,-0.3008)
+ .. controls (-0.4367,-0.2529) and (-0.4253,-0.2451) .. (-0.4621,-0.1914)
+ .. controls (-0.4700,-0.1800) and (-0.4814,-0.1685) .. (-0.4867,-0.1556)
+ .. controls (-0.4970,-0.1308) and (-0.4804,-0.1088) .. (-0.4966,-0.0923)
+ .. controls (-0.5011,-0.0877) and (-0.5087,-0.0853) .. (-0.5178,-0.0844)
+ --cycle
+ (-0.4165,-0.0846)
+ .. controls (-0.4357,-0.0807) and (-0.4622,-0.1075) .. (-0.4395,-0.1440)
+ .. controls (-0.4316,-0.1566) and (-0.4254,-0.1571) .. (-0.4141,-0.1634)
+ .. controls (-0.4094,-0.1522) and (-0.4042,-0.1415) .. (-0.4019,-0.1294)
+ .. controls (-0.3960,-0.1004) and (-0.4049,-0.0870) .. (-0.4165,-0.0846)
+ --cycle
+ (-0.9358,-0.1125)
+ -- (-0.8813,-0.2098)
+ .. controls (-0.8768,-0.1903) and (-0.8656,-0.1673) .. (-0.8723,-0.1485)
+ .. controls (-0.8801,-0.1269) and (-0.9022,-0.1274) .. (-0.9358,-0.1125)
+ --cycle
+ ( 0.1455,-0.1458)
+ .. controls ( 0.1402,-0.1449) and ( 0.1336,-0.1452) .. ( 0.1255,-0.1471)
+ .. controls ( 0.0901,-0.1850) and ( 0.1064,-0.2454) .. ( 0.1360,-0.2301)
+ .. controls ( 0.1569,-0.2194) and ( 0.1827,-0.1522) .. ( 0.1455,-0.1458)
+ --cycle
+ (-0.1477,-0.1474)
+ .. controls (-0.1646,-0.1458) and (-0.1813,-0.1543) .. (-0.1847,-0.1659)
+ .. controls (-0.1889,-0.1806) and (-0.1612,-0.2953) .. (-0.1163,-0.2315)
+ -- (-0.0420,-0.4418)
+ .. controls (-0.0291,-0.4661) and (-0.0068,-0.4600) .. ( 0.0136,-0.4880)
+ .. controls ( 0.0294,-0.5097) and ( 0.0259,-0.5331) .. ( 0.0419,-0.5487)
+ .. controls ( 0.0694,-0.5755) and ( 0.1462,-0.5710) .. ( 0.1798,-0.6001)
+ -- ( 0.2188,-0.6436)
+ .. controls ( 0.2392,-0.6605) and ( 0.2566,-0.6577) .. ( 0.2804,-0.6838)
+ .. controls ( 0.3122,-0.7186) and ( 0.3037,-0.7586) .. ( 0.3603,-0.7592)
+ .. controls ( 0.3537,-0.7217) and ( 0.3358,-0.6781) .. ( 0.3603,-0.6427)
+ .. controls ( 0.3743,-0.6222) and ( 0.3978,-0.6232) .. ( 0.4032,-0.6039)
+ .. controls ( 0.4084,-0.5852) and ( 0.3901,-0.5654) .. ( 0.3712,-0.5741)
+ .. controls ( 0.3573,-0.5804) and ( 0.3558,-0.5936) .. ( 0.3518,-0.6044)
+ .. controls ( 0.3319,-0.6046) and ( 0.2996,-0.6092) .. ( 0.2842,-0.6044)
+ .. controls ( 0.2568,-0.5917) and ( 0.2515,-0.5648) .. ( 0.2231,-0.5501)
+ .. controls ( 0.1960,-0.5359) and ( 0.1632,-0.5421) .. ( 0.1413,-0.5292)
+ -- ( 0.0626,-0.4601)
+ .. controls ( 0.0525,-0.4430) and ( 0.0547,-0.4207) .. ( 0.0440,-0.4065)
+ .. controls ( 0.0320,-0.3906) and ( 0.0076,-0.3898) .. (-0.0104,-0.3714)
+ .. controls (-0.0515,-0.3289) and ( 0.0146,-0.2721) .. (-0.0737,-0.2358)
+ .. controls (-0.0903,-0.2290) and (-0.0917,-0.2313) .. (-0.1098,-0.2315)
+ -- (-0.1098,-0.1892)
+ .. controls (-0.1137,-0.1607) and (-0.1308,-0.1491) .. (-0.1477,-0.1474)
+ --cycle
+ (-0.7679,-0.1481)
+ .. controls (-0.8119,-0.1523) and (-0.8157,-0.2051) .. (-0.8303,-0.2401)
+ -- (-0.8453,-0.2740)
+ -- (-0.8299,-0.3015)
+ .. controls (-0.7861,-0.2968) and (-0.8116,-0.2403) .. (-0.7732,-0.2278)
+ .. controls (-0.7561,-0.2223) and (-0.7349,-0.2415) .. (-0.7204,-0.2497)
+ .. controls (-0.6711,-0.2774) and (-0.6473,-0.2864) .. (-0.6524,-0.3506)
+ -- (-0.6787,-0.3422)
+ .. controls (-0.6786,-0.3475) and (-0.6826,-0.3544) .. (-0.6787,-0.3655)
+ .. controls (-0.6635,-0.4244) and (-0.5943,-0.3658) .. (-0.5763,-0.3760)
+ .. controls (-0.5586,-0.3861) and (-0.5497,-0.4251) .. (-0.5357,-0.4418)
+ .. controls (-0.5118,-0.4701) and (-0.4694,-0.4662) .. (-0.4504,-0.5047)
+ .. controls (-0.4231,-0.5599) and (-0.4535,-0.6772) .. (-0.4451,-0.7421)
+ .. controls (-0.4389,-0.7901) and (-0.4023,-0.8005) .. (-0.3912,-0.8443)
+ .. controls (-0.3883,-0.8558) and (-0.3874,-0.8667) .. (-0.3869,-0.8774)
+ -- (-0.3386,-0.8778)
+ .. controls (-0.3371,-0.8645) and (-0.3342,-0.8523) .. (-0.3394,-0.8358)
+ .. controls (-0.3448,-0.8167) and (-0.3914,-0.7567) .. (-0.3962,-0.6996)
+ .. controls (-0.4039,-0.6074) and (-0.3294,-0.5871) .. (-0.3545,-0.4954)
+ -- (-0.3886,-0.5039)
+ -- (-0.4196,-0.4442)
+ -- (-0.4864,-0.4090)
+ -- (-0.5345,-0.3241)
+ -- (-0.6106,-0.2802)
+ -- (-0.6106,-0.1975)
+ .. controls (-0.6301,-0.2027) and (-0.6486,-0.2101) .. (-0.6694,-0.2022)
+ .. controls (-0.7004,-0.1904) and (-0.7133,-0.1559) .. (-0.7464,-0.1495)
+ .. controls (-0.7544,-0.1479) and (-0.7616,-0.1475) .. (-0.7679,-0.1481)
+ --cycle
+ ( 0.0029,-0.2060)
+ .. controls (-0.0139,-0.2731) and ( 0.0196,-0.2608) .. ( 0.0476,-0.3014)
+ .. controls ( 0.0682,-0.3314) and ( 0.0511,-0.3569) .. ( 0.0750,-0.3784)
+ .. controls ( 0.0974,-0.3988) and ( 0.1304,-0.3876) .. ( 0.1549,-0.4019)
+ .. controls ( 0.1795,-0.4164) and ( 0.1878,-0.4529) .. ( 0.1987,-0.4783)
+ .. controls ( 0.2461,-0.4539) and ( 0.2519,-0.4021) .. ( 0.2180,-0.3618)
+ .. controls ( 0.1964,-0.3362) and ( 0.1652,-0.3426) .. ( 0.1414,-0.3257)
+ .. controls ( 0.1198,-0.3103) and ( 0.1183,-0.2881) .. ( 0.1007,-0.2689)
+ .. controls ( 0.0838,-0.2504) and ( 0.0265,-0.2166) .. ( 0.0029,-0.2060)
+ --cycle
+ ( 0.2327,-0.2826)
+ .. controls ( 0.1961,-0.2955) and ( 0.1961,-0.3123) .. ( 0.2327,-0.3251)
+ --cycle
+ (-0.7548,-0.3137)
+ .. controls (-0.7774,-0.3164) and (-0.7890,-0.3323) .. (-0.7986,-0.3573)
+ -- (-0.7759,-0.3979)
+ .. controls (-0.7735,-0.3968) and (-0.7711,-0.3964) .. (-0.7688,-0.3946)
+ -- (-0.7205,-0.3166)
+ .. controls (-0.7341,-0.3135) and (-0.7454,-0.3126) .. (-0.7548,-0.3137)
+ --cycle
+ ( 0.4114,-0.3847)
+ .. controls ( 0.4216,-0.4136) and ( 0.4238,-0.4142) .. ( 0.4540,-0.4102)
+ -- ( 0.4540,-0.3932)
+ --cycle
+ ( 0.5395,-0.3997)
+ .. controls ( 0.5263,-0.3990) and ( 0.5044,-0.4032) .. ( 0.4625,-0.4018)
+ -- ( 0.4780,-0.4954)
+ .. controls ( 0.4757,-0.5287) and ( 0.4518,-0.5542) .. ( 0.4648,-0.5776)
+ .. controls ( 0.4852,-0.6142) and ( 0.5202,-0.5603) .. ( 0.5614,-0.5929)
+ .. controls ( 0.5752,-0.6038) and ( 0.6063,-0.6359) .. ( 0.6275,-0.6638)
+ -- ( 0.6570,-0.6132)
+ .. controls ( 0.6460,-0.6042) and ( 0.6347,-0.5954) .. ( 0.6268,-0.5865)
+ -- ( 0.5937,-0.5346)
+ .. controls ( 0.5648,-0.5023) and ( 0.5031,-0.4880) .. ( 0.5646,-0.4273)
+ .. controls ( 0.5574,-0.4062) and ( 0.5528,-0.4005) .. ( 0.5395,-0.3997)
+ --cycle
+ (-0.6609,-0.4273)
+ .. controls (-0.7027,-0.4247) and (-0.7300,-0.4414) .. (-0.7397,-0.4624)
+ -- (-0.7047,-0.5249)
+ .. controls (-0.7013,-0.5263) and (-0.6989,-0.5282) .. (-0.6950,-0.5294)
+ .. controls (-0.6935,-0.4878) and (-0.6933,-0.4806) .. (-0.6609,-0.4528)
+ --cycle
+ (-0.5689,-0.4528)
+ .. controls (-0.6368,-0.4677) and (-0.6352,-0.5020) .. (-0.6354,-0.5634)
+ -- (-0.5757,-0.6071)
+ -- (-0.5162,-0.6826)
+ .. controls (-0.5073,-0.6508) and (-0.5037,-0.6125) .. (-0.5241,-0.5838)
+ .. controls (-0.5384,-0.5639) and (-0.5622,-0.5584) .. (-0.5689,-0.5361)
+ .. controls (-0.5775,-0.5167) and (-0.5648,-0.4918) .. (-0.5689,-0.4528)
+ --cycle
+ (-0.6354,-0.5634)
+ .. controls (-0.6583,-0.5576) and (-0.6713,-0.5579) .. (-0.6839,-0.5619)
+ -- (-0.6487,-0.6248)
+ .. controls (-0.6395,-0.6053) and (-0.6326,-0.5852) .. (-0.6354,-0.5634)
+ --cycle
+ (-0.0056,-0.5890)
+ .. controls (-0.0554,-0.6155) and (-0.0426,-0.6370) .. (-0.0606,-0.6818)
+ -- (-0.1199,-0.7847)
+ .. controls (-0.1298,-0.8015) and (-0.1531,-0.8317) .. (-0.1499,-0.8510)
+ .. controls (-0.1482,-0.8615) and (-0.1397,-0.8702) .. (-0.1295,-0.8795)
+ -- (-0.0507,-0.8802)
+ .. controls (-0.0629,-0.8583) and (-0.0745,-0.8380) .. (-0.0742,-0.8358)
+ .. controls (-0.0792,-0.8239) and (-0.0776,-0.8135) .. (-0.0742,-0.8027)
+ .. controls (-0.0460,-0.7520) and ( 0.0016,-0.7834) .. ( 0.0277,-0.7780)
+ .. controls ( 0.0760,-0.7679) and ( 0.1284,-0.6914) .. ( 0.1207,-0.6405)
+ .. controls ( 0.1150,-0.6017) and ( 0.0841,-0.6082) .. ( 0.0711,-0.6267)
+ .. controls ( 0.0620,-0.6397) and ( 0.0556,-0.7141) .. ( 0.0539,-0.7336)
+ .. controls (-0.0413,-0.7085) and ( 0.0139,-0.6637) .. (-0.0056,-0.5890)
+ --cycle
+ ( 0.4284,-0.6571)
+ .. controls ( 0.4285,-0.7307) and ( 0.4284,-0.7652) .. ( 0.5135,-0.7336)
+ .. controls ( 0.5170,-0.7469) and ( 0.5220,-0.7585) .. ( 0.5179,-0.7726)
+ .. controls ( 0.5091,-0.8019) and ( 0.4473,-0.8546) .. ( 0.4851,-0.8847)
+ -- ( 0.4987,-0.8848)
+ -- ( 0.5768,-0.7509)
+ .. controls ( 0.5767,-0.7509) and ( 0.5767,-0.7507) .. ( 0.5767,-0.7507)
+ .. controls ( 0.5412,-0.6652) and ( 0.5083,-0.6726) .. ( 0.4284,-0.6571)
+ --cycle
+ (-0.2914,-0.6672)
+ .. controls (-0.2998,-0.6666) and (-0.3106,-0.6686) .. (-0.3250,-0.6743)
+ .. controls (-0.3545,-0.7128) and (-0.3081,-0.7358) .. (-0.2850,-0.7678)
+ .. controls (-0.2710,-0.7873) and (-0.2601,-0.8137) .. (-0.2351,-0.8216)
+ .. controls (-0.2083,-0.8301) and (-0.1916,-0.8105) .. (-0.1960,-0.7845)
+ .. controls (-0.2008,-0.7566) and (-0.2232,-0.7418) .. (-0.2396,-0.7216)
+ .. controls (-0.2612,-0.6950) and (-0.2660,-0.6690) .. (-0.2914,-0.6672)
+ --cycle
+ (-0.5641,-0.6998)
+ .. controls (-0.5850,-0.6984) and (-0.5808,-0.7367) .. (-0.5766,-0.7507)
+ .. controls (-0.5748,-0.7566) and (-0.5723,-0.7598) .. (-0.5702,-0.7648)
+ -- (-0.5492,-0.8022)
+ .. controls (-0.5310,-0.8247) and (-0.5120,-0.8367) .. (-0.5052,-0.8613)
+ .. controls (-0.5044,-0.8642) and (-0.5062,-0.8717) .. (-0.5063,-0.8763)
+ -- (-0.4585,-0.8767)
+ .. controls (-0.4596,-0.7984) and (-0.5013,-0.7963) .. (-0.5234,-0.7583)
+ .. controls (-0.5344,-0.7394) and (-0.5352,-0.7120) .. (-0.5535,-0.7030)
+ .. controls (-0.5576,-0.7010) and (-0.5611,-0.7000) .. (-0.5641,-0.6998)
+ --cycle
+ ( 0.1990,-0.7341)
+ .. controls ( 0.1094,-0.7768) and ( 0.2330,-0.8330) .. ( 0.2586,-0.8828)
+ -- ( 0.3183,-0.8833)
+ .. controls ( 0.3165,-0.8684) and ( 0.3066,-0.8565) .. ( 0.2991,-0.8428)
+ .. controls ( 0.2762,-0.8010) and ( 0.2508,-0.7418) .. ( 0.1990,-0.7341)
+ --cycle
+ ( 0.3603,-0.7592)
+ -- ( 0.3859,-0.8188)
+ .. controls ( 0.4178,-0.7853) and ( 0.4108,-0.7527) .. ( 0.3603,-0.7592)
+ --cycle
+ ( 0.4369,-0.8443)
+ .. controls ( 0.4147,-0.8480) and ( 0.3837,-0.8661) .. ( 0.3628,-0.8837)
+ -- ( 0.4240,-0.8842)
+ .. controls ( 0.4307,-0.8690) and ( 0.4358,-0.8541) .. ( 0.4369,-0.8443)
+ --cycle
+ (-0.3205,-0.8528)
+ -- (-0.3266,-0.8779)
+ -- (-0.2773,-0.8783)
+ .. controls (-0.2800,-0.8719) and (-0.2850,-0.8655) .. (-0.2963,-0.8600)
+ --cycle
+ ( 0.1093,-0.8568)
+ .. controls ( 0.0964,-0.8568) and ( 0.0834,-0.8587) .. ( 0.0710,-0.8600)
+ .. controls ( 0.0605,-0.8611) and ( 0.0403,-0.8617) .. ( 0.0312,-0.8664)
+ .. controls ( 0.0240,-0.8701) and ( 0.0203,-0.8751) .. ( 0.0184,-0.8808)
+ -- ( 0.1002,-0.8815)
+ -- ( 0.1050,-0.8698)
+ -- ( 0.1085,-0.8815)
+ -- ( 0.1641,-0.8820)
+ .. controls ( 0.1606,-0.8757) and ( 0.1553,-0.8698) .. ( 0.1463,-0.8649)
+ .. controls ( 0.1347,-0.8586) and ( 0.1221,-0.8568) .. ( 0.1093,-0.8568)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/city.dtx b/macros/latex/contrib/wargame/source/hex/terrain/city.dtx
new file mode 100644
index 0000000000..1d373ea19d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/city.dtx
@@ -0,0 +1,5138 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/city}
+% And finally a city
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/city/.pic={
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.6475, 0.4068)
+ -- ( 0.7314,-0.0575)
+ -- ( 0.7314,-0.0575)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3200,-0.0497)
+ -- ( 0.7360,-0.0572)
+ -- ( 0.9222,-0.0903)
+ -- ( 0.7082,-0.4210)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3828, 0.1855)
+ -- ( 0.0279, 0.1945)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0433, 0.3473)
+ -- ( 0.0217, 0.1444)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1413, 0.1884)
+ -- ( 0.3369,-0.0066)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.1278, 0.7257)
+ -- (-0.2203, 0.4496)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1602, 0.6526)
+ -- ( 0.0382, 0.6110)
+ -- (-0.1527, 0.6534)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.1688, 0.6051)
+ -- (-0.4768, 0.7222)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3602,-0.4159)
+ .. controls ( 0.4139,-0.2355) and ( 0.4139,-0.2352) .. ( 0.4139,-0.2352)
+ -- ( 0.4838,-0.2184)
+ -- ( 0.5251,-0.0570)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.5443,-0.6880)
+ -- ( 0.5887,-0.5618)
+ -- ( 0.4781,-0.4650)
+ -- ( 0.4781,-0.4650)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0671,-0.6564)
+ -- ( 0.2799,-0.7025)
+ -- ( 0.4360,-0.4711)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.2023,-0.8374)
+ -- ( 0.2231,-0.6909)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0433,-0.3639)
+ -- (-0.0931,-0.5036)
+ -- (-0.3798,-0.4049)
+ -- (-0.4436,-0.4630)
+ -- (-0.5468,-0.5027)
+ -- (-0.6442,-0.3540)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3296,-0.7486)
+ -- (-0.3153,-0.6107)
+ -- (-0.4388,-0.4598)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3247,-0.6883)
+ -- (-0.0201,-0.7169)
+ -- ( 0.0501,-0.7042)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0616,-0.6541)
+ -- (-0.0427,-0.6505)
+ -- (-0.0229,-0.5387)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0040,-0.2086)
+ -- (-0.1956,-0.1835)
+ -- (-0.2290,-0.2265)
+ -- (-0.5068,-0.1372)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3396, 0.0437)
+ -- (-0.2201, 0.4506)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0066, 0.8705)
+ -- ( 0.3952, 0.3367)
+ -- ( 0.3885, 0.2021)
+ -- ( 0.3555, 0.1368)
+ -- ( 0.3751, 0.0869)
+ -- ( 0.2511,-0.2014)
+ -- ( 0.1393,-0.4528)
+ -- ( 0.0636,-0.6538)
+ -- ( 0.0063,-0.8731)
+ -- ( 0.0063,-0.8731)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.1775, 0.6355)
+ -- ( 0.4288, 0.7459)
+ -- ( 0.5543, 0.5148)
+ -- ( 0.5543, 0.5148)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7584, 0.4363)
+ -- ( 0.3946, 0.3369)
+ -- ( 0.3946, 0.3369)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.1428,-0.4540)
+ -- (-0.0329,-0.2925)
+ -- ( 0.0739,-0.0364)
+ -- ( 0.1645,-0.0483)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0723,-0.0367)
+ -- (-0.5150, 0.0791)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1911,-0.0821)
+ -- (-0.0760, 0.3934)
+ -- (-0.0774, 0.3920)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0439, 0.3452)
+ -- (-0.3449, 0.4978)
+ -- (-0.4614, 0.2954)
+ -- (-0.4614, 0.2954)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.4152, 0.2683)
+ -- (-0.7626, 0.4390)
+ -- (-0.7626, 0.4390)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.5846, 0.3486)
+ -- (-0.8106,-0.1286)
+ -- (-0.7727,-0.2079)
+ -- (-0.7053,-0.1745)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.7161,-0.1542)
+ -- (-0.6166,-0.3381)
+ -- (-0.7630,-0.4349)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6697,-0.2422)
+ -- (-0.4615,-0.1081)
+ -- (-0.4615,-0.1081)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2080,-0.3022)
+ -- ( 0.4581,-0.4878)
+ -- ( 0.5919,-0.3695)
+ -- ( 0.7615,-0.4441)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1146, 0.0405)
+ -- ( 0.1598, 0.0323)
+ -- ( 0.1489,-0.0277)
+ -- ( 0.1036,-0.0196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1146, 0.0405)
+ -- ( 0.1598, 0.0323)
+ -- ( 0.1489,-0.0277)
+ -- ( 0.1036,-0.0196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0844, 0.4998)
+ -- (-0.0599, 0.4835)
+ -- (-0.0898, 0.4389)
+ -- (-0.1141, 0.4551)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0844, 0.4998)
+ -- (-0.0599, 0.4835)
+ -- (-0.0898, 0.4389)
+ -- (-0.1141, 0.4551)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6143,-0.0454)
+ -- (-0.6005,-0.0196)
+ -- (-0.5531,-0.0447)
+ -- (-0.5668,-0.0707)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6143,-0.0454)
+ -- (-0.6005,-0.0196)
+ -- (-0.5531,-0.0447)
+ -- (-0.5668,-0.0707)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3809,-0.0792)
+ -- (-0.3371,-0.0929)
+ -- (-0.3553,-0.1511)
+ -- (-0.3991,-0.1375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3809,-0.0792)
+ -- (-0.3371,-0.0929)
+ -- (-0.3553,-0.1511)
+ -- (-0.3991,-0.1375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5133, 0.1838)
+ -- (-0.4733, 0.1613)
+ -- (-0.5032, 0.1081)
+ -- (-0.5433, 0.1307)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5133, 0.1838)
+ -- (-0.4733, 0.1613)
+ -- (-0.5032, 0.1081)
+ -- (-0.5433, 0.1307)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3878, 0.1398)
+ -- (-0.3421, 0.1442)
+ -- (-0.3362, 0.0834)
+ -- (-0.3819, 0.0790)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3878, 0.1398)
+ -- (-0.3421, 0.1442)
+ -- (-0.3362, 0.0834)
+ -- (-0.3819, 0.0790)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5622, 0.0806)
+ -- (-0.5234, 0.0560)
+ -- (-0.5559, 0.0044)
+ -- (-0.5948, 0.0290)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5622, 0.0806)
+ -- (-0.5234, 0.0560)
+ -- (-0.5559, 0.0044)
+ -- (-0.5948, 0.0290)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6218, 0.1903)
+ -- (-0.6097, 0.2346)
+ -- (-0.5508, 0.2185)
+ -- (-0.5629, 0.1742)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6218, 0.1903)
+ -- (-0.6097, 0.2346)
+ -- (-0.5508, 0.2185)
+ -- (-0.5629, 0.1742)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2884, 0.7423)
+ -- (-0.2596, 0.7372)
+ -- (-0.2691, 0.6843)
+ -- (-0.2980, 0.6895)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2884, 0.7423)
+ -- (-0.2596, 0.7372)
+ -- (-0.2691, 0.6843)
+ -- (-0.2980, 0.6895)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1219, 0.8731)
+ -- ( 0.1475, 0.8350)
+ -- ( 0.0970, 0.8008)
+ -- ( 0.0712, 0.8389)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1219, 0.8731)
+ -- ( 0.1475, 0.8350)
+ -- ( 0.0970, 0.8008)
+ -- ( 0.0712, 0.8389)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3659, 0.5557)
+ -- ( 0.3913, 0.5175)
+ -- ( 0.3405, 0.4837)
+ -- ( 0.3150, 0.5219)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3659, 0.5557)
+ -- ( 0.3913, 0.5175)
+ -- ( 0.3405, 0.4837)
+ -- ( 0.3150, 0.5219)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0626, 0.4298)
+ -- ( 0.0896, 0.4184)
+ -- ( 0.0686, 0.3690)
+ -- ( 0.0416, 0.3804)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0626, 0.4298)
+ -- ( 0.0896, 0.4184)
+ -- ( 0.0686, 0.3690)
+ -- ( 0.0416, 0.3804)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4510,-0.3094)
+ -- (-0.4058,-0.2887)
+ -- (-0.3725,-0.3614)
+ -- (-0.4176,-0.3821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4510,-0.3094)
+ -- (-0.4058,-0.2887)
+ -- (-0.3725,-0.3614)
+ -- (-0.4176,-0.3821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5282,-0.1080)
+ -- (-0.5533,-0.0695)
+ -- (-0.5021,-0.0363)
+ -- (-0.4770,-0.0749)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5282,-0.1080)
+ -- (-0.5533,-0.0695)
+ -- (-0.5021,-0.0363)
+ -- (-0.4770,-0.0749)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0108,-0.2602)
+ -- ( 0.0173,-0.2316)
+ -- ( 0.0696,-0.2435)
+ -- ( 0.0632,-0.2721)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0108,-0.2602)
+ -- ( 0.0173,-0.2316)
+ -- ( 0.0696,-0.2435)
+ -- ( 0.0632,-0.2721)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1989, 0.1654)
+ -- (-0.1544, 0.1540)
+ -- (-0.1696, 0.0948)
+ -- (-0.2141, 0.1063)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1989, 0.1654)
+ -- (-0.1544, 0.1540)
+ -- (-0.1696, 0.0948)
+ -- (-0.2141, 0.1063)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0216,-0.0407)
+ -- ( 0.0230,-0.0521)
+ -- ( 0.0078,-0.1112)
+ -- (-0.0368,-0.0997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0216,-0.0407)
+ -- ( 0.0230,-0.0521)
+ -- ( 0.0078,-0.1112)
+ -- (-0.0368,-0.0997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1936, 0.5180)
+ -- ( 0.2045, 0.4909)
+ -- ( 0.1547, 0.4709)
+ -- ( 0.1437, 0.4981)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1936, 0.5180)
+ -- ( 0.2045, 0.4909)
+ -- ( 0.1547, 0.4709)
+ -- ( 0.1437, 0.4981)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1903, 0.4858)
+ -- (-0.1678, 0.5258)
+ -- (-0.1146, 0.4960)
+ -- (-0.1371, 0.4559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1903, 0.4858)
+ -- (-0.1678, 0.5258)
+ -- (-0.1146, 0.4960)
+ -- (-0.1371, 0.4559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1470, 0.3493)
+ -- ( 0.1689, 0.3567)
+ -- ( 0.1775, 0.3315)
+ -- ( 0.1555, 0.3241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1470, 0.3493)
+ -- ( 0.1689, 0.3567)
+ -- ( 0.1775, 0.3315)
+ -- ( 0.1555, 0.3241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1892, 0.2562)
+ -- ( 0.2118, 0.2510)
+ -- ( 0.2058, 0.2251)
+ -- ( 0.1833, 0.2303)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1892, 0.2562)
+ -- ( 0.2118, 0.2510)
+ -- ( 0.2058, 0.2251)
+ -- ( 0.1833, 0.2303)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8016, 0.0292)
+ -- ( 0.8235, 0.0367)
+ -- ( 0.8321, 0.0116)
+ -- ( 0.8103, 0.0040)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8016, 0.0292)
+ -- ( 0.8235, 0.0367)
+ -- ( 0.8321, 0.0116)
+ -- ( 0.8103, 0.0040)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7392, 0.1737)
+ -- ( 0.7609, 0.1816)
+ -- ( 0.7702, 0.1568)
+ -- ( 0.7485, 0.1487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7392, 0.1737)
+ -- ( 0.7609, 0.1816)
+ -- ( 0.7702, 0.1568)
+ -- ( 0.7485, 0.1487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3736, 0.7805)
+ -- ( 0.3937, 0.7921)
+ -- ( 0.4071, 0.7691)
+ -- ( 0.3870, 0.7575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3736, 0.7805)
+ -- ( 0.3937, 0.7921)
+ -- ( 0.4071, 0.7691)
+ -- ( 0.3870, 0.7575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4808,-0.6251)
+ -- (-0.4706,-0.6459)
+ -- (-0.4946,-0.6576)
+ -- (-0.5047,-0.6368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4808,-0.6251)
+ -- (-0.4706,-0.6459)
+ -- (-0.4946,-0.6576)
+ -- (-0.5047,-0.6368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4514,-0.6075)
+ -- (-0.4393,-0.6272)
+ -- (-0.4620,-0.6412)
+ -- (-0.4740,-0.6215)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4514,-0.6075)
+ -- (-0.4393,-0.6272)
+ -- (-0.4620,-0.6412)
+ -- (-0.4740,-0.6215)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2390,-0.7174)
+ -- (-0.2175,-0.7260)
+ -- (-0.2273,-0.7508)
+ -- (-0.2489,-0.7421)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2390,-0.7174)
+ -- (-0.2175,-0.7260)
+ -- (-0.2273,-0.7508)
+ -- (-0.2489,-0.7421)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2386,-0.5506)
+ -- (-0.2108,-0.5598)
+ -- (-0.2277,-0.6108)
+ -- (-0.2555,-0.6015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2386,-0.5506)
+ -- (-0.2108,-0.5598)
+ -- (-0.2277,-0.6108)
+ -- (-0.2555,-0.6015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3574, 0.2226)
+ -- (-0.3530, 0.2515)
+ -- (-0.2999, 0.2435)
+ -- (-0.3043, 0.2145)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3574, 0.2226)
+ -- (-0.3530, 0.2515)
+ -- (-0.2999, 0.2435)
+ -- (-0.3043, 0.2145)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3315, 0.3242)
+ -- (-0.3271, 0.3532)
+ -- (-0.2740, 0.3451)
+ -- (-0.2783, 0.3162)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3315, 0.3242)
+ -- (-0.3271, 0.3532)
+ -- (-0.2740, 0.3451)
+ -- (-0.2783, 0.3162)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2256, 0.4895)
+ -- ( 0.2451, 0.4676)
+ -- ( 0.2049, 0.4320)
+ -- ( 0.1854, 0.4539)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2256, 0.4895)
+ -- ( 0.2451, 0.4676)
+ -- ( 0.2049, 0.4320)
+ -- ( 0.1854, 0.4539)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1717, 0.5777)
+ -- ( 0.1903, 0.5551)
+ -- ( 0.1488, 0.5210)
+ -- ( 0.1302, 0.5436)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1717, 0.5777)
+ -- ( 0.1903, 0.5551)
+ -- ( 0.1488, 0.5210)
+ -- ( 0.1302, 0.5436)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0995, 0.2545)
+ -- (-0.0891, 0.2819)
+ -- (-0.0389, 0.2629)
+ -- (-0.0492, 0.2355)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0995, 0.2545)
+ -- (-0.0891, 0.2819)
+ -- (-0.0389, 0.2629)
+ -- (-0.0492, 0.2355)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0828, 0.2371)
+ -- ( 0.0883, 0.2659)
+ -- ( 0.1411, 0.2559)
+ -- ( 0.1357, 0.2271)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0828, 0.2371)
+ -- ( 0.0883, 0.2659)
+ -- ( 0.1411, 0.2559)
+ -- ( 0.1357, 0.2271)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1049, 0.1819)
+ -- (-0.0945, 0.2094)
+ -- (-0.0443, 0.1904)
+ -- (-0.0546, 0.1629)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1049, 0.1819)
+ -- (-0.0945, 0.2094)
+ -- (-0.0443, 0.1904)
+ -- (-0.0546, 0.1629)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0889,-0.0631)
+ -- (-0.0785,-0.0357)
+ -- (-0.0283,-0.0549)
+ -- (-0.0388,-0.0823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0889,-0.0631)
+ -- (-0.0785,-0.0357)
+ -- (-0.0283,-0.0549)
+ -- (-0.0388,-0.0823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2282,-0.7907)
+ -- (-0.1823,-0.7907)
+ -- (-0.1823,-0.8518)
+ -- (-0.2282,-0.8518)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2282,-0.7907)
+ -- (-0.1823,-0.7907)
+ -- (-0.1823,-0.8518)
+ -- (-0.2282,-0.8518)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2275,-0.7989)
+ -- ( 0.2734,-0.7989)
+ -- ( 0.2734,-0.8599)
+ -- ( 0.2275,-0.8599)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2275,-0.7989)
+ -- ( 0.2734,-0.7989)
+ -- ( 0.2734,-0.8599)
+ -- ( 0.2275,-0.8599)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2516,-0.7126)
+ -- ( 0.2808,-0.7126)
+ -- ( 0.2808,-0.7663)
+ -- ( 0.2516,-0.7663)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2516,-0.7126)
+ -- ( 0.2808,-0.7126)
+ -- ( 0.2808,-0.7663)
+ -- ( 0.2516,-0.7663)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1669,-0.7129)
+ -- ( 0.1954,-0.7199)
+ -- ( 0.1826,-0.7721)
+ -- ( 0.1542,-0.7650)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1669,-0.7129)
+ -- ( 0.1954,-0.7199)
+ -- ( 0.1826,-0.7721)
+ -- ( 0.1542,-0.7650)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1222,-0.7854)
+ -- ( 0.1514,-0.7854)
+ -- ( 0.1514,-0.8390)
+ -- ( 0.1222,-0.8390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1222,-0.7854)
+ -- ( 0.1514,-0.7854)
+ -- ( 0.1514,-0.8390)
+ -- ( 0.1222,-0.8390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3031,-0.7156)
+ -- ( 0.3325,-0.7156)
+ -- ( 0.3325,-0.7693)
+ -- ( 0.3031,-0.7693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3031,-0.7156)
+ -- ( 0.3325,-0.7156)
+ -- ( 0.3325,-0.7693)
+ -- ( 0.3031,-0.7693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3574,-0.7174)
+ -- ( 0.3867,-0.7174)
+ -- ( 0.3867,-0.7712)
+ -- ( 0.3574,-0.7712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3574,-0.7174)
+ -- ( 0.3867,-0.7174)
+ -- ( 0.3867,-0.7712)
+ -- ( 0.3574,-0.7712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3742,-0.8016)
+ -- ( 0.4036,-0.8016)
+ -- ( 0.4036,-0.8554)
+ -- ( 0.3742,-0.8554)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3742,-0.8016)
+ -- ( 0.4036,-0.8016)
+ -- ( 0.4036,-0.8554)
+ -- ( 0.3742,-0.8554)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4107,-0.8072)
+ -- ( 0.4400,-0.8072)
+ -- ( 0.4400,-0.8610)
+ -- ( 0.4107,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4107,-0.8072)
+ -- ( 0.4400,-0.8072)
+ -- ( 0.4400,-0.8610)
+ -- ( 0.4107,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612,-0.7886)
+ -- ( 0.4905,-0.7886)
+ -- ( 0.4905,-0.8423)
+ -- ( 0.4612,-0.8423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612,-0.7886)
+ -- ( 0.4905,-0.7886)
+ -- ( 0.4905,-0.8423)
+ -- ( 0.4612,-0.8423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5733,-0.6570)
+ -- ( 0.6007,-0.6675)
+ -- ( 0.5814,-0.7176)
+ -- ( 0.5540,-0.7071)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5733,-0.6570)
+ -- ( 0.6007,-0.6675)
+ -- ( 0.5814,-0.7176)
+ -- ( 0.5540,-0.7071)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6698,-0.4454)
+ -- ( 0.6958,-0.4589)
+ -- ( 0.6710,-0.5065)
+ -- ( 0.6450,-0.4930)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6698,-0.4454)
+ -- ( 0.6958,-0.4589)
+ -- ( 0.6710,-0.5065)
+ -- ( 0.6450,-0.4930)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5789,-0.4658)
+ -- ( 0.6009,-0.4851)
+ -- ( 0.5654,-0.5254)
+ -- ( 0.5434,-0.5061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5789,-0.4658)
+ -- ( 0.6009,-0.4851)
+ -- ( 0.5654,-0.5254)
+ -- ( 0.5434,-0.5061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6025,-0.4876)
+ -- ( 0.6259,-0.5054)
+ -- ( 0.5934,-0.5481)
+ -- ( 0.5701,-0.5304)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6025,-0.4876)
+ -- ( 0.6259,-0.5054)
+ -- ( 0.5934,-0.5481)
+ -- ( 0.5701,-0.5304)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6466,-0.5044)
+ -- ( 0.6729,-0.5172)
+ -- ( 0.6493,-0.5654)
+ -- ( 0.6230,-0.5526)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6466,-0.5044)
+ -- ( 0.6729,-0.5172)
+ -- ( 0.6493,-0.5654)
+ -- ( 0.6230,-0.5526)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4854,-0.5939)
+ -- ( 0.5002,-0.5686)
+ -- ( 0.5466,-0.5955)
+ -- ( 0.5320,-0.6208)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4854,-0.5939)
+ -- ( 0.5002,-0.5686)
+ -- ( 0.5466,-0.5955)
+ -- ( 0.5320,-0.6208)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4577,-0.6299)
+ -- ( 0.4750,-0.6063)
+ -- ( 0.5183,-0.6380)
+ -- ( 0.5010,-0.6617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4577,-0.6299)
+ -- ( 0.4750,-0.6063)
+ -- ( 0.5183,-0.6380)
+ -- ( 0.5010,-0.6617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4354,-0.6506)
+ -- ( 0.4568,-0.6305)
+ -- ( 0.4935,-0.6697)
+ -- ( 0.4721,-0.6898)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4354,-0.6506)
+ -- ( 0.4568,-0.6305)
+ -- ( 0.4935,-0.6697)
+ -- ( 0.4721,-0.6898)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4631)
+ -- ( 0.3837,-0.4771)
+ -- ( 0.3581,-0.5243)
+ -- ( 0.3323,-0.5103)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4631)
+ -- ( 0.3837,-0.4771)
+ -- ( 0.3581,-0.5243)
+ -- ( 0.3323,-0.5103)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5131,-0.3580)
+ -- ( 0.5345,-0.3780)
+ -- ( 0.4978,-0.4172)
+ -- ( 0.4763,-0.3972)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5131,-0.3580)
+ -- ( 0.5345,-0.3780)
+ -- ( 0.4978,-0.4172)
+ -- ( 0.4763,-0.3972)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2116,-0.3904)
+ -- ( 0.2243,-0.3641)
+ -- ( 0.2726,-0.3875)
+ -- ( 0.2598,-0.4139)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2116,-0.3904)
+ -- ( 0.2243,-0.3641)
+ -- ( 0.2726,-0.3875)
+ -- ( 0.2598,-0.4139)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1786,-0.4343)
+ -- ( 0.1889,-0.4069)
+ -- ( 0.2391,-0.4259)
+ -- ( 0.2289,-0.4532)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1786,-0.4343)
+ -- ( 0.1889,-0.4069)
+ -- ( 0.2391,-0.4259)
+ -- ( 0.2289,-0.4532)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1647,-0.4763)
+ -- ( 0.1772,-0.4497)
+ -- ( 0.2258,-0.4725)
+ -- ( 0.2134,-0.4990)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1647,-0.4763)
+ -- ( 0.1772,-0.4497)
+ -- ( 0.2258,-0.4725)
+ -- ( 0.2134,-0.4990)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2335,-0.5197)
+ -- ( 0.2460,-0.4932)
+ -- ( 0.2946,-0.5160)
+ -- ( 0.2821,-0.5425)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2335,-0.5197)
+ -- ( 0.2460,-0.4932)
+ -- ( 0.2946,-0.5160)
+ -- ( 0.2821,-0.5425)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2832,-0.4218)
+ -- ( 0.2956,-0.3952)
+ -- ( 0.3443,-0.4180)
+ -- ( 0.3318,-0.4445)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2832,-0.4218)
+ -- ( 0.2956,-0.3952)
+ -- ( 0.3443,-0.4180)
+ -- ( 0.3318,-0.4445)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2064,-0.6136)
+ -- ( 0.2189,-0.5871)
+ -- ( 0.2675,-0.6099)
+ -- ( 0.2551,-0.6364)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2064,-0.6136)
+ -- ( 0.2189,-0.5871)
+ -- ( 0.2675,-0.6099)
+ -- ( 0.2551,-0.6364)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1443,-0.5195)
+ -- ( 0.1550,-0.4922)
+ -- ( 0.2050,-0.5120)
+ -- ( 0.1942,-0.5392)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1443,-0.5195)
+ -- ( 0.1550,-0.4922)
+ -- ( 0.2050,-0.5120)
+ -- ( 0.1942,-0.5392)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3128,-0.5333)
+ -- ( 0.3394,-0.5455)
+ -- ( 0.3173,-0.5943)
+ -- ( 0.2906,-0.5823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3128,-0.5333)
+ -- ( 0.3394,-0.5455)
+ -- ( 0.3173,-0.5943)
+ -- ( 0.2906,-0.5823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1781,-0.6526)
+ -- ( 0.1883,-0.6250)
+ -- ( 0.2386,-0.6435)
+ -- ( 0.2286,-0.6710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1781,-0.6526)
+ -- ( 0.1883,-0.6250)
+ -- ( 0.2386,-0.6435)
+ -- ( 0.2286,-0.6710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0147,-0.5695)
+ -- ( 0.0238,-0.5417)
+ -- ( 0.0749,-0.5582)
+ -- ( 0.0658,-0.5861)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0147,-0.5695)
+ -- ( 0.0238,-0.5417)
+ -- ( 0.0749,-0.5582)
+ -- ( 0.0658,-0.5861)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0205,-0.5124)
+ -- ( 0.0287,-0.4843)
+ -- ( 0.0803,-0.4994)
+ -- ( 0.0720,-0.5275)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0205,-0.5124)
+ -- ( 0.0287,-0.4843)
+ -- ( 0.0803,-0.4994)
+ -- ( 0.0720,-0.5275)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.6560)
+ -- (-0.0678,-0.6849)
+ -- (-0.1209,-0.6925)
+ -- (-0.1250,-0.6635)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.6560)
+ -- (-0.0678,-0.6849)
+ -- (-0.1209,-0.6925)
+ -- (-0.1250,-0.6635)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.6411)
+ -- (-0.1375,-0.6700)
+ -- (-0.1906,-0.6618)
+ -- (-0.1861,-0.6329)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.6411)
+ -- (-0.1375,-0.6700)
+ -- (-0.1906,-0.6618)
+ -- (-0.1861,-0.6329)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0334,-0.7381)
+ -- (-0.0042,-0.7381)
+ -- (-0.0042,-0.7917)
+ -- (-0.0334,-0.7917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0334,-0.7381)
+ -- (-0.0042,-0.7381)
+ -- (-0.0042,-0.7917)
+ -- (-0.0334,-0.7917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0998,-0.7315)
+ -- (-0.0706,-0.7315)
+ -- (-0.0706,-0.7852)
+ -- (-0.0998,-0.7852)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0998,-0.7315)
+ -- (-0.0706,-0.7315)
+ -- (-0.0706,-0.7852)
+ -- (-0.0998,-0.7852)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2018,-0.7234)
+ -- (-0.1730,-0.7180)
+ -- (-0.1631,-0.7708)
+ -- (-0.1919,-0.7762)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2018,-0.7234)
+ -- (-0.1730,-0.7180)
+ -- (-0.1631,-0.7708)
+ -- (-0.1919,-0.7762)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2956,-0.7184)
+ -- (-0.2667,-0.7229)
+ -- (-0.2750,-0.7760)
+ -- (-0.3039,-0.7714)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2956,-0.7184)
+ -- (-0.2667,-0.7229)
+ -- (-0.2750,-0.7760)
+ -- (-0.3039,-0.7714)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1661,-0.8014)
+ -- (-0.1372,-0.8060)
+ -- (-0.1454,-0.8590)
+ -- (-0.1744,-0.8545)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1661,-0.8014)
+ -- (-0.1372,-0.8060)
+ -- (-0.1454,-0.8590)
+ -- (-0.1744,-0.8545)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269,-0.8074)
+ -- (-0.0977,-0.8054)
+ -- (-0.0940,-0.8590)
+ -- (-0.1232,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269,-0.8074)
+ -- (-0.0977,-0.8054)
+ -- (-0.0940,-0.8590)
+ -- (-0.1232,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2787,-0.7975)
+ -- (-0.2495,-0.7956)
+ -- (-0.2459,-0.8492)
+ -- (-0.2751,-0.8511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2787,-0.7975)
+ -- (-0.2495,-0.7956)
+ -- (-0.2459,-0.8492)
+ -- (-0.2751,-0.8511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3966,-0.5592)
+ -- (-0.3802,-0.5834)
+ -- (-0.4246,-0.6135)
+ -- (-0.4411,-0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3966,-0.5592)
+ -- (-0.3802,-0.5834)
+ -- (-0.4246,-0.6135)
+ -- (-0.4411,-0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4189,-0.5000)
+ -- (-0.4033,-0.5248)
+ -- (-0.4488,-0.5534)
+ -- (-0.4644,-0.5286)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4189,-0.5000)
+ -- (-0.4033,-0.5248)
+ -- (-0.4488,-0.5534)
+ -- (-0.4644,-0.5286)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3561,-0.4332)
+ -- (-0.3310,-0.4483)
+ -- (-0.3586,-0.4944)
+ -- (-0.3837,-0.4793)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3561,-0.4332)
+ -- (-0.3310,-0.4483)
+ -- (-0.3586,-0.4944)
+ -- (-0.3837,-0.4793)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3120,-0.4787)
+ -- (-0.2896,-0.4976)
+ -- (-0.3241,-0.5386)
+ -- (-0.3466,-0.5198)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3120,-0.4787)
+ -- (-0.2896,-0.4976)
+ -- (-0.3241,-0.5386)
+ -- (-0.3466,-0.5198)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2660,-0.5113)
+ -- (-0.2456,-0.5323)
+ -- (-0.2840,-0.5697)
+ -- (-0.3045,-0.5487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2660,-0.5113)
+ -- (-0.2456,-0.5323)
+ -- (-0.2840,-0.5697)
+ -- (-0.3045,-0.5487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3939,-0.2212)
+ -- (-0.3666,-0.2319)
+ -- (-0.3863,-0.2819)
+ -- (-0.4135,-0.2712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3939,-0.2212)
+ -- (-0.3666,-0.2319)
+ -- (-0.3863,-0.2819)
+ -- (-0.4135,-0.2712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3038,-0.2403)
+ -- (-0.2765,-0.2509)
+ -- (-0.2961,-0.3010)
+ -- (-0.3234,-0.2902)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3038,-0.2403)
+ -- (-0.2765,-0.2509)
+ -- (-0.2961,-0.3010)
+ -- (-0.3234,-0.2902)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3532,-0.2251)
+ -- (-0.3255,-0.2346)
+ -- (-0.3428,-0.2854)
+ -- (-0.3705,-0.2760)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3532,-0.2251)
+ -- (-0.3255,-0.2346)
+ -- (-0.3428,-0.2854)
+ -- (-0.3705,-0.2760)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3482,-0.3198)
+ -- (-0.3204,-0.3293)
+ -- (-0.3377,-0.3801)
+ -- (-0.3655,-0.3706)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3482,-0.3198)
+ -- (-0.3204,-0.3293)
+ -- (-0.3377,-0.3801)
+ -- (-0.3655,-0.3706)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5006,-0.1767)
+ -- (-0.4737,-0.1885)
+ -- (-0.4953,-0.2376)
+ -- (-0.5221,-0.2258)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5006,-0.1767)
+ -- (-0.4737,-0.1885)
+ -- (-0.4953,-0.2376)
+ -- (-0.5221,-0.2258)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739,-0.2312)
+ -- (-0.5595,-0.2568)
+ -- (-0.6065,-0.2830)
+ -- (-0.6207,-0.2575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739,-0.2312)
+ -- (-0.5595,-0.2568)
+ -- (-0.6065,-0.2830)
+ -- (-0.6207,-0.2575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5929,-0.3943)
+ -- (-0.5696,-0.3765)
+ -- (-0.5369,-0.4192)
+ -- (-0.5602,-0.4370)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5929,-0.3943)
+ -- (-0.5696,-0.3765)
+ -- (-0.5369,-0.4192)
+ -- (-0.5602,-0.4370)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5005,-0.3312)
+ -- (-0.4775,-0.3129)
+ -- (-0.4441,-0.3550)
+ -- (-0.4670,-0.3733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5005,-0.3312)
+ -- (-0.4775,-0.3129)
+ -- (-0.4441,-0.3550)
+ -- (-0.4670,-0.3733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5523,-0.3618)
+ -- (-0.5293,-0.3436)
+ -- (-0.4960,-0.3857)
+ -- (-0.5189,-0.4038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5523,-0.3618)
+ -- (-0.5293,-0.3436)
+ -- (-0.4960,-0.3857)
+ -- (-0.5189,-0.4038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4383,-0.3880)
+ -- (-0.4249,-0.4140)
+ -- (-0.4726,-0.4386)
+ -- (-0.4861,-0.4126)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4383,-0.3880)
+ -- (-0.4249,-0.4140)
+ -- (-0.4726,-0.4386)
+ -- (-0.4861,-0.4126)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6626,-0.4293)
+ -- (-0.6510,-0.4562)
+ -- (-0.7003,-0.4775)
+ -- (-0.7119,-0.4506)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6626,-0.4293)
+ -- (-0.6510,-0.4562)
+ -- (-0.7003,-0.4775)
+ -- (-0.7119,-0.4506)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6449,-0.4759)
+ -- (-0.6280,-0.4998)
+ -- (-0.6717,-0.5309)
+ -- (-0.6887,-0.5069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6449,-0.4759)
+ -- (-0.6280,-0.4998)
+ -- (-0.6717,-0.5309)
+ -- (-0.6887,-0.5069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5766,-0.5683)
+ -- (-0.5643,-0.5948)
+ -- (-0.6130,-0.6174)
+ -- (-0.6254,-0.5909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5766,-0.5683)
+ -- (-0.5643,-0.5948)
+ -- (-0.6130,-0.6174)
+ -- (-0.6254,-0.5909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4733,-0.5728)
+ -- (-0.4590,-0.5983)
+ -- (-0.5061,-0.6244)
+ -- (-0.5202,-0.5988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4733,-0.5728)
+ -- (-0.4590,-0.5983)
+ -- (-0.5061,-0.6244)
+ -- (-0.5202,-0.5988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4272,-0.6520)
+ -- (-0.4128,-0.6774)
+ -- (-0.4595,-0.7039)
+ -- (-0.4740,-0.6785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4272,-0.6520)
+ -- (-0.4128,-0.6774)
+ -- (-0.4595,-0.7039)
+ -- (-0.4740,-0.6785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5374,-0.6782)
+ -- (-0.5236,-0.7040)
+ -- (-0.5710,-0.7292)
+ -- (-0.5848,-0.7034)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5374,-0.6782)
+ -- (-0.5236,-0.7040)
+ -- (-0.5710,-0.7292)
+ -- (-0.5848,-0.7034)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5214,-0.7131)
+ -- (-0.5038,-0.7365)
+ -- (-0.5468,-0.7687)
+ -- (-0.5644,-0.7453)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5214,-0.7131)
+ -- (-0.5038,-0.7365)
+ -- (-0.5468,-0.7687)
+ -- (-0.5644,-0.7453)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2847,-0.1917)
+ -- ( 0.2954,-0.1644)
+ -- ( 0.3454,-0.1841)
+ -- ( 0.3347,-0.2114)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2847,-0.1917)
+ -- ( 0.2954,-0.1644)
+ -- ( 0.3454,-0.1841)
+ -- ( 0.3347,-0.2114)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2692,-0.2397)
+ -- ( 0.2775,-0.2116)
+ -- ( 0.3291,-0.2268)
+ -- ( 0.3208,-0.2548)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2692,-0.2397)
+ -- ( 0.2775,-0.2116)
+ -- ( 0.3291,-0.2268)
+ -- ( 0.3208,-0.2548)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2587,-0.2944)
+ -- ( 0.2585,-0.2651)
+ -- ( 0.3123,-0.2648)
+ -- ( 0.3125,-0.2941)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2587,-0.2944)
+ -- ( 0.2585,-0.2651)
+ -- ( 0.3123,-0.2648)
+ -- ( 0.3125,-0.2941)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1269,-0.2581)
+ -- ( 0.1359,-0.2303)
+ -- ( 0.1871,-0.2468)
+ -- ( 0.1780,-0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1269,-0.2581)
+ -- ( 0.1359,-0.2303)
+ -- ( 0.1871,-0.2468)
+ -- ( 0.1780,-0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1127,-0.3153)
+ -- ( 0.1232,-0.2880)
+ -- ( 0.1733,-0.3074)
+ -- ( 0.1626,-0.3348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1127,-0.3153)
+ -- ( 0.1232,-0.2880)
+ -- ( 0.1733,-0.3074)
+ -- ( 0.1626,-0.3348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1928,-0.0951)
+ -- ( 0.2055,-0.0687)
+ -- ( 0.2539,-0.0920)
+ -- ( 0.2412,-0.1184)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1928,-0.0951)
+ -- ( 0.2055,-0.0687)
+ -- ( 0.2539,-0.0920)
+ -- ( 0.2412,-0.1184)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2202,-0.0375)
+ -- ( 0.2335,-0.0113)
+ -- ( 0.2814,-0.0356)
+ -- ( 0.2682,-0.0617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2202,-0.0375)
+ -- ( 0.2335,-0.0113)
+ -- ( 0.2814,-0.0356)
+ -- ( 0.2682,-0.0617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2582, 0.0509)
+ -- ( 0.2736, 0.0259)
+ -- ( 0.2278,-0.0022)
+ -- ( 0.2125, 0.0227)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2582, 0.0509)
+ -- ( 0.2736, 0.0259)
+ -- ( 0.2278,-0.0022)
+ -- ( 0.2125, 0.0227)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2111, 0.0849)
+ -- ( 0.2307, 0.0632)
+ -- ( 0.1908, 0.0273)
+ -- ( 0.1712, 0.0490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2111, 0.0849)
+ -- ( 0.2307, 0.0632)
+ -- ( 0.1908, 0.0273)
+ -- ( 0.1712, 0.0490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1776, 0.1187)
+ -- ( 0.1982, 0.0978)
+ -- ( 0.1599, 0.0601)
+ -- ( 0.1394, 0.0810)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1776, 0.1187)
+ -- ( 0.1982, 0.0978)
+ -- ( 0.1599, 0.0601)
+ -- ( 0.1394, 0.0810)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2760, 0.3987)
+ -- ( 0.2946, 0.3760)
+ -- ( 0.2531, 0.3420)
+ -- ( 0.2345, 0.3646)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2760, 0.3987)
+ -- ( 0.2946, 0.3760)
+ -- ( 0.2531, 0.3420)
+ -- ( 0.2345, 0.3646)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3226, 0.3543)
+ -- ( 0.3420, 0.3323)
+ -- ( 0.3018, 0.2967)
+ -- ( 0.2824, 0.3185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3226, 0.3543)
+ -- ( 0.3420, 0.3323)
+ -- ( 0.3018, 0.2967)
+ -- ( 0.2824, 0.3185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2277, 0.3599)
+ -- (-0.2171, 0.3872)
+ -- (-0.1671, 0.3676)
+ -- (-0.1777, 0.3404)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2277, 0.3599)
+ -- (-0.2171, 0.3872)
+ -- (-0.1671, 0.3676)
+ -- (-0.1777, 0.3404)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1722, 0.5368)
+ -- (-0.1616, 0.5642)
+ -- (-0.1116, 0.5446)
+ -- (-0.1223, 0.5174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1722, 0.5368)
+ -- (-0.1616, 0.5642)
+ -- (-0.1116, 0.5446)
+ -- (-0.1223, 0.5174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2400, 0.3081)
+ -- (-0.2307, 0.3359)
+ -- (-0.1797, 0.3189)
+ -- (-0.1890, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2400, 0.3081)
+ -- (-0.2307, 0.3359)
+ -- (-0.1797, 0.3189)
+ -- (-0.1890, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2735, 0.1997)
+ -- (-0.2631, 0.2270)
+ -- (-0.2129, 0.2080)
+ -- (-0.2233, 0.1807)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2735, 0.1997)
+ -- (-0.2631, 0.2270)
+ -- (-0.2129, 0.2080)
+ -- (-0.2233, 0.1807)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3047, 0.1045)
+ -- (-0.2975, 0.1329)
+ -- (-0.2455, 0.1200)
+ -- (-0.2525, 0.0915)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3047, 0.1045)
+ -- (-0.2975, 0.1329)
+ -- (-0.2455, 0.1200)
+ -- (-0.2525, 0.0915)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1406, 0.3596)
+ -- (-0.1136, 0.3482)
+ -- (-0.1345, 0.2988)
+ -- (-0.1615, 0.3102)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1406, 0.3596)
+ -- (-0.1136, 0.3482)
+ -- (-0.1345, 0.2988)
+ -- (-0.1615, 0.3102)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0597, 0.5878)
+ -- (-0.0327, 0.5763)
+ -- (-0.0536, 0.5269)
+ -- (-0.0806, 0.5383)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0597, 0.5878)
+ -- (-0.0327, 0.5763)
+ -- (-0.0536, 0.5269)
+ -- (-0.0806, 0.5383)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0206, 0.5864)
+ -- ( 0.0064, 0.5749)
+ -- (-0.0146, 0.5255)
+ -- (-0.0416, 0.5369)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0206, 0.5864)
+ -- ( 0.0064, 0.5749)
+ -- (-0.0146, 0.5255)
+ -- (-0.0416, 0.5369)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1653, 0.2738)
+ -- (-0.1360, 0.2738)
+ -- (-0.1360, 0.2200)
+ -- (-0.1653, 0.2200)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1653, 0.2738)
+ -- (-0.1360, 0.2738)
+ -- (-0.1360, 0.2200)
+ -- (-0.1653, 0.2200)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1782, 0.2207)
+ -- (-0.1501, 0.2122)
+ -- (-0.1657, 0.1608)
+ -- (-0.1937, 0.1693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1782, 0.2207)
+ -- (-0.1501, 0.2122)
+ -- (-0.1657, 0.1608)
+ -- (-0.1937, 0.1693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2343, 0.0622)
+ -- (-0.2239, 0.0896)
+ -- (-0.1737, 0.0706)
+ -- (-0.1840, 0.0432)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2343, 0.0622)
+ -- (-0.2239, 0.0896)
+ -- (-0.1737, 0.0706)
+ -- (-0.1840, 0.0432)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1289, 0.0933)
+ -- (-0.1186, 0.1207)
+ -- (-0.0683, 0.1017)
+ -- (-0.0787, 0.0743)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1289, 0.0933)
+ -- (-0.1186, 0.1207)
+ -- (-0.0683, 0.1017)
+ -- (-0.0787, 0.0743)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2223, 0.7399)
+ -- ( 0.2483, 0.7532)
+ -- ( 0.2727, 0.7054)
+ -- ( 0.2467, 0.6920)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2223, 0.7399)
+ -- ( 0.2483, 0.7532)
+ -- ( 0.2727, 0.7054)
+ -- ( 0.2467, 0.6920)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5440, 0.7476)
+ -- ( 0.5576, 0.7217)
+ -- ( 0.5102, 0.6965)
+ -- ( 0.4965, 0.7224)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5440, 0.7476)
+ -- ( 0.5576, 0.7217)
+ -- ( 0.5102, 0.6965)
+ -- ( 0.4965, 0.7224)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5919, 0.6377)
+ -- ( 0.6068, 0.6125)
+ -- ( 0.5604, 0.5853)
+ -- ( 0.5456, 0.6106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5919, 0.6377)
+ -- ( 0.6068, 0.6125)
+ -- ( 0.5604, 0.5853)
+ -- ( 0.5456, 0.6106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6224, 0.5979)
+ -- ( 0.6382, 0.5732)
+ -- ( 0.5930, 0.5443)
+ -- ( 0.5772, 0.5690)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6224, 0.5979)
+ -- ( 0.6382, 0.5732)
+ -- ( 0.5930, 0.5443)
+ -- ( 0.5772, 0.5690)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4104, 0.6743)
+ -- ( 0.4255, 0.6491)
+ -- ( 0.3795, 0.6215)
+ -- ( 0.3644, 0.6466)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4104, 0.6743)
+ -- ( 0.4255, 0.6491)
+ -- ( 0.3795, 0.6215)
+ -- ( 0.3644, 0.6466)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4437, 0.6203)
+ -- ( 0.4592, 0.5954)
+ -- ( 0.4136, 0.5671)
+ -- ( 0.3981, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4437, 0.6203)
+ -- ( 0.4592, 0.5954)
+ -- ( 0.4136, 0.5671)
+ -- ( 0.3981, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5275, 0.4892)
+ -- ( 0.5449, 0.4656)
+ -- ( 0.5018, 0.4337)
+ -- ( 0.4844, 0.4571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5275, 0.4892)
+ -- ( 0.5449, 0.4656)
+ -- ( 0.5018, 0.4337)
+ -- ( 0.4844, 0.4571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2900, 0.6234)
+ -- ( 0.3087, 0.6008)
+ -- ( 0.2671, 0.5666)
+ -- ( 0.2485, 0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2900, 0.6234)
+ -- ( 0.3087, 0.6008)
+ -- ( 0.2671, 0.5666)
+ -- ( 0.2485, 0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3295, 0.5855)
+ -- ( 0.3477, 0.5626)
+ -- ( 0.3058, 0.5291)
+ -- ( 0.2875, 0.5519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3295, 0.5855)
+ -- ( 0.3477, 0.5626)
+ -- ( 0.3058, 0.5291)
+ -- ( 0.2875, 0.5519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3915, 0.5035)
+ -- ( 0.4098, 0.4807)
+ -- ( 0.3680, 0.4471)
+ -- ( 0.3497, 0.4699)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3915, 0.5035)
+ -- ( 0.4098, 0.4807)
+ -- ( 0.3680, 0.4471)
+ -- ( 0.3497, 0.4699)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4274, 0.4691)
+ -- ( 0.4472, 0.4474)
+ -- ( 0.4075, 0.4112)
+ -- ( 0.3878, 0.4327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4274, 0.4691)
+ -- ( 0.4472, 0.4474)
+ -- ( 0.4075, 0.4112)
+ -- ( 0.3878, 0.4327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0465, 0.7243)
+ -- ( 0.0751, 0.7305)
+ -- ( 0.0864, 0.6779)
+ -- ( 0.0578, 0.6717)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0465, 0.7243)
+ -- ( 0.0751, 0.7305)
+ -- ( 0.0864, 0.6779)
+ -- ( 0.0578, 0.6717)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0312, 0.7116)
+ -- (-0.0338, 0.7407)
+ -- ( 0.0197, 0.7456)
+ -- ( 0.0223, 0.7164)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0312, 0.7116)
+ -- (-0.0338, 0.7407)
+ -- ( 0.0197, 0.7456)
+ -- ( 0.0223, 0.7164)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1044, 0.7143)
+ -- (-0.1084, 0.7434)
+ -- (-0.0552, 0.7507)
+ -- (-0.0512, 0.7216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1044, 0.7143)
+ -- (-0.1084, 0.7434)
+ -- (-0.0552, 0.7507)
+ -- (-0.0512, 0.7216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1250, 0.6753)
+ -- (-0.1169, 0.7034)
+ -- (-0.0653, 0.6887)
+ -- (-0.0733, 0.6605)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1250, 0.6753)
+ -- (-0.1169, 0.7034)
+ -- (-0.0653, 0.6887)
+ -- (-0.0733, 0.6605)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2293, 0.7263)
+ -- (-0.2016, 0.7170)
+ -- (-0.2185, 0.6660)
+ -- (-0.2463, 0.6753)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2293, 0.7263)
+ -- (-0.2016, 0.7170)
+ -- (-0.2185, 0.6660)
+ -- (-0.2463, 0.6753)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4164, 0.8019)
+ -- (-0.3886, 0.7926)
+ -- (-0.4056, 0.7417)
+ -- (-0.4335, 0.7510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4164, 0.8019)
+ -- (-0.3886, 0.7926)
+ -- (-0.4056, 0.7417)
+ -- (-0.4335, 0.7510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3769, 0.7827)
+ -- (-0.3486, 0.7746)
+ -- (-0.3636, 0.7230)
+ -- (-0.3918, 0.7311)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3769, 0.7827)
+ -- (-0.3486, 0.7746)
+ -- (-0.3636, 0.7230)
+ -- (-0.3918, 0.7311)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2690, 0.8085)
+ -- (-0.2696, 0.8379)
+ -- (-0.2159, 0.8389)
+ -- (-0.2153, 0.8097)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2690, 0.8085)
+ -- (-0.2696, 0.8379)
+ -- (-0.2159, 0.8389)
+ -- (-0.2153, 0.8097)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0864, 0.8532)
+ -- (-0.0767, 0.8256)
+ -- (-0.1273, 0.8076)
+ -- (-0.1371, 0.8352)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0864, 0.8532)
+ -- (-0.0767, 0.8256)
+ -- (-0.1273, 0.8076)
+ -- (-0.1371, 0.8352)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3699, 0.6041)
+ -- (-0.3425, 0.5939)
+ -- (-0.3609, 0.5436)
+ -- (-0.3885, 0.5537)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3699, 0.6041)
+ -- (-0.3425, 0.5939)
+ -- (-0.3609, 0.5436)
+ -- (-0.3885, 0.5537)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4770, 0.6412)
+ -- (-0.4500, 0.6299)
+ -- (-0.4707, 0.5804)
+ -- (-0.4978, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4770, 0.6412)
+ -- (-0.4500, 0.6299)
+ -- (-0.4707, 0.5804)
+ -- (-0.4978, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4348, 0.4860)
+ -- (-0.4060, 0.4806)
+ -- (-0.4159, 0.4278)
+ -- (-0.4447, 0.4332)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4348, 0.4860)
+ -- (-0.4060, 0.4806)
+ -- (-0.4159, 0.4278)
+ -- (-0.4447, 0.4332)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4771, 0.4952)
+ -- (-0.4520, 0.4800)
+ -- (-0.4799, 0.4341)
+ -- (-0.5050, 0.4493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4771, 0.4952)
+ -- (-0.4520, 0.4800)
+ -- (-0.4799, 0.4341)
+ -- (-0.5050, 0.4493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5175, 0.4232)
+ -- (-0.4917, 0.4092)
+ -- (-0.5176, 0.3620)
+ -- (-0.5433, 0.3761)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5175, 0.4232)
+ -- (-0.4917, 0.4092)
+ -- (-0.5176, 0.3620)
+ -- (-0.5433, 0.3761)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739, 0.5614)
+ -- (-0.5487, 0.5464)
+ -- (-0.5762, 0.5003)
+ -- (-0.6013, 0.5152)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739, 0.5614)
+ -- (-0.5487, 0.5464)
+ -- (-0.5762, 0.5003)
+ -- (-0.6013, 0.5152)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6244, 0.4780)
+ -- (-0.5977, 0.4661)
+ -- (-0.6195, 0.4170)
+ -- (-0.6463, 0.4289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6244, 0.4780)
+ -- (-0.5977, 0.4661)
+ -- (-0.6195, 0.4170)
+ -- (-0.6463, 0.4289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6236, 0.1401)
+ -- (-0.6192, 0.1691)
+ -- (-0.5661, 0.1611)
+ -- (-0.5705, 0.1321)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6236, 0.1401)
+ -- (-0.6192, 0.1691)
+ -- (-0.5661, 0.1611)
+ -- (-0.5705, 0.1321)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3872, 0.3590)
+ -- (-0.3829, 0.3880)
+ -- (-0.3297, 0.3800)
+ -- (-0.3341, 0.3510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3872, 0.3590)
+ -- (-0.3829, 0.3880)
+ -- (-0.3297, 0.3800)
+ -- (-0.3341, 0.3510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6525, 0.1021)
+ -- (-0.6404, 0.1288)
+ -- (-0.5915, 0.1066)
+ -- (-0.6036, 0.0799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6525, 0.1021)
+ -- (-0.6404, 0.1288)
+ -- (-0.5915, 0.1066)
+ -- (-0.6036, 0.0799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4323, 0.3237)
+ -- (-0.4202, 0.3503)
+ -- (-0.3713, 0.3280)
+ -- (-0.3834, 0.3014)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4323, 0.3237)
+ -- (-0.4202, 0.3503)
+ -- (-0.3713, 0.3280)
+ -- (-0.3834, 0.3014)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3470, 0.2846)
+ -- (-0.3349, 0.3113)
+ -- (-0.2859, 0.2891)
+ -- (-0.2981, 0.2624)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3470, 0.2846)
+ -- (-0.3349, 0.3113)
+ -- (-0.2859, 0.2891)
+ -- (-0.2981, 0.2624)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3053, 0.3741)
+ -- (-0.2932, 0.4008)
+ -- (-0.2443, 0.3786)
+ -- (-0.2564, 0.3519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3053, 0.3741)
+ -- (-0.2932, 0.4008)
+ -- (-0.2443, 0.3786)
+ -- (-0.2564, 0.3519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6751, 0.0465)
+ -- (-0.6666, 0.0746)
+ -- (-0.6152, 0.0590)
+ -- (-0.6237, 0.0310)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6751, 0.0465)
+ -- (-0.6666, 0.0746)
+ -- (-0.6152, 0.0590)
+ -- (-0.6237, 0.0310)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7316,-0.0595)
+ -- (-0.7215,-0.0320)
+ -- (-0.6711,-0.0505)
+ -- (-0.6812,-0.0780)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7316,-0.0595)
+ -- (-0.7215,-0.0320)
+ -- (-0.6711,-0.0505)
+ -- (-0.6812,-0.0780)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7748,-0.1355)
+ -- (-0.7629,-0.1088)
+ -- (-0.7138,-0.1305)
+ -- (-0.7257,-0.1573)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7748,-0.1355)
+ -- (-0.7629,-0.1088)
+ -- (-0.7138,-0.1305)
+ -- (-0.7257,-0.1573)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6698,-0.1385)
+ -- (-0.6512,-0.1159)
+ -- (-0.6098,-0.1501)
+ -- (-0.6284,-0.1727)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6698,-0.1385)
+ -- (-0.6512,-0.1159)
+ -- (-0.6098,-0.1501)
+ -- (-0.6284,-0.1727)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3325,-0.1175)
+ -- (-0.3067,-0.1313)
+ -- (-0.3320,-0.1787)
+ -- (-0.3579,-0.1649)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3325,-0.1175)
+ -- (-0.3067,-0.1313)
+ -- (-0.3320,-0.1787)
+ -- (-0.3579,-0.1649)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4097,-0.0630)
+ -- (-0.3827,-0.0741)
+ -- (-0.4031,-0.1238)
+ -- (-0.4302,-0.1127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4097,-0.0630)
+ -- (-0.3827,-0.0741)
+ -- (-0.4031,-0.1238)
+ -- (-0.4302,-0.1127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3028, 0.0016)
+ -- (-0.2734, 0.0016)
+ -- (-0.2734,-0.0522)
+ -- (-0.3028,-0.0522)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3028, 0.0016)
+ -- (-0.2734, 0.0016)
+ -- (-0.2734,-0.0522)
+ -- (-0.3028,-0.0522)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2492,-0.0037)
+ -- (-0.2198,-0.0037)
+ -- (-0.2198,-0.0574)
+ -- (-0.2492,-0.0574)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2492,-0.0037)
+ -- (-0.2198,-0.0037)
+ -- (-0.2198,-0.0574)
+ -- (-0.2492,-0.0574)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4151, 0.0294)
+ -- (-0.3858, 0.0294)
+ -- (-0.3858,-0.0243)
+ -- (-0.4151,-0.0243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4151, 0.0294)
+ -- (-0.3858, 0.0294)
+ -- (-0.3858,-0.0243)
+ -- (-0.4151,-0.0243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4687, 0.0340)
+ -- (-0.4394, 0.0340)
+ -- (-0.4394,-0.0197)
+ -- (-0.4687,-0.0197)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4687, 0.0340)
+ -- (-0.4394, 0.0340)
+ -- (-0.4394,-0.0197)
+ -- (-0.4687,-0.0197)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5170, 0.0545)
+ -- (-0.4876, 0.0545)
+ -- (-0.4876, 0.0008)
+ -- (-0.5170, 0.0008)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5170, 0.0545)
+ -- (-0.4876, 0.0545)
+ -- (-0.4876, 0.0008)
+ -- (-0.5170, 0.0008)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4695, 0.1540)
+ -- (-0.4413, 0.1461)
+ -- (-0.4557, 0.0943)
+ -- (-0.4839, 0.1022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4695, 0.1540)
+ -- (-0.4413, 0.1461)
+ -- (-0.4557, 0.0943)
+ -- (-0.4839, 0.1022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4511, 0.2320)
+ -- (-0.4227, 0.2241)
+ -- (-0.4372, 0.1724)
+ -- (-0.4654, 0.1803)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4511, 0.2320)
+ -- (-0.4227, 0.2241)
+ -- (-0.4372, 0.1724)
+ -- (-0.4654, 0.1803)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4191, 0.1396)
+ -- (-0.3904, 0.1335)
+ -- (-0.4017, 0.0809)
+ -- (-0.4304, 0.0871)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4191, 0.1396)
+ -- (-0.3904, 0.1335)
+ -- (-0.4017, 0.0809)
+ -- (-0.4304, 0.0871)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0048,-0.2963)
+ -- ( 0.0056,-0.2689)
+ -- ( 0.0558,-0.2881)
+ -- ( 0.0453,-0.3155)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0048,-0.2963)
+ -- ( 0.0056,-0.2689)
+ -- ( 0.0558,-0.2881)
+ -- ( 0.0453,-0.3155)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0804,-0.1001)
+ -- ( 0.0908,-0.0728)
+ -- ( 0.1410,-0.0919)
+ -- ( 0.1305,-0.1192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0804,-0.1001)
+ -- ( 0.0908,-0.0728)
+ -- ( 0.1410,-0.0919)
+ -- ( 0.1305,-0.1192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1027,-0.2588)
+ -- (-0.0979,-0.2299)
+ -- (-0.0449,-0.2387)
+ -- (-0.0498,-0.2676)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1027,-0.2588)
+ -- (-0.0979,-0.2299)
+ -- (-0.0449,-0.2387)
+ -- (-0.0498,-0.2676)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1889,-0.2314)
+ -- (-0.1776,-0.2043)
+ -- (-0.1281,-0.2251)
+ -- (-0.1394,-0.2521)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1889,-0.2314)
+ -- (-0.1776,-0.2043)
+ -- (-0.1281,-0.2251)
+ -- (-0.1394,-0.2521)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1180,-0.3033)
+ -- (-0.1077,-0.2759)
+ -- (-0.0575,-0.2947)
+ -- (-0.0677,-0.3221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1180,-0.3033)
+ -- (-0.1077,-0.2759)
+ -- (-0.0575,-0.2947)
+ -- (-0.0677,-0.3221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2120,-0.2801)
+ -- (-0.2010,-0.2529)
+ -- (-0.1512,-0.2729)
+ -- (-0.1622,-0.3002)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2120,-0.2801)
+ -- (-0.2010,-0.2529)
+ -- (-0.1512,-0.2729)
+ -- (-0.1622,-0.3002)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2265,-0.3343)
+ -- (-0.2161,-0.3069)
+ -- (-0.1659,-0.3259)
+ -- (-0.1762,-0.3533)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2265,-0.3343)
+ -- (-0.2161,-0.3069)
+ -- (-0.1659,-0.3259)
+ -- (-0.1762,-0.3533)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0728,-0.3520)
+ -- (-0.0436,-0.3488)
+ -- (-0.0379,-0.4022)
+ -- (-0.0670,-0.4054)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0728,-0.3520)
+ -- (-0.0436,-0.3488)
+ -- (-0.0379,-0.4022)
+ -- (-0.0670,-0.4054)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3598,-0.6299)
+ -- ( 0.3752,-0.6051)
+ -- ( 0.4209,-0.6334)
+ -- ( 0.4054,-0.6583)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3598,-0.6299)
+ -- ( 0.3752,-0.6051)
+ -- ( 0.4209,-0.6334)
+ -- ( 0.4054,-0.6583)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3284,-0.6582)
+ -- ( 0.3482,-0.6365)
+ -- ( 0.3879,-0.6727)
+ -- ( 0.3681,-0.6944)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3284,-0.6582)
+ -- ( 0.3482,-0.6365)
+ -- ( 0.3879,-0.6727)
+ -- ( 0.3681,-0.6944)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8159,-0.3188)
+ -- (-0.7892,-0.3067)
+ -- (-0.7670,-0.3556)
+ -- (-0.7937,-0.3677)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8159,-0.3188)
+ -- (-0.7892,-0.3067)
+ -- (-0.7670,-0.3556)
+ -- (-0.7937,-0.3677)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8755, 0.1805)
+ -- (-0.8623, 0.2066)
+ -- (-0.8144, 0.1824)
+ -- (-0.8276, 0.1562)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8755, 0.1805)
+ -- (-0.8623, 0.2066)
+ -- (-0.8144, 0.1824)
+ -- (-0.8276, 0.1562)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9400, 0.0507)
+ -- (-0.9275, 0.0771)
+ -- (-0.8789, 0.0541)
+ -- (-0.8916, 0.0276)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9400, 0.0507)
+ -- (-0.9275, 0.0771)
+ -- (-0.8789, 0.0541)
+ -- (-0.8916, 0.0276)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9500,-0.0171)
+ -- (-0.9467, 0.0120)
+ -- (-0.8934, 0.0060)
+ -- (-0.8966,-0.0232)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9500,-0.0171)
+ -- (-0.9467, 0.0120)
+ -- (-0.8934, 0.0060)
+ -- (-0.8966,-0.0232)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0374, 0.6594)
+ -- (-0.0376, 0.6887)
+ -- ( 0.0161, 0.6890)
+ -- ( 0.0162, 0.6598)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0374, 0.6594)
+ -- (-0.0376, 0.6887)
+ -- ( 0.0161, 0.6890)
+ -- ( 0.0162, 0.6598)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1600, 0.8267)
+ -- ( 0.1793, 0.8046)
+ -- ( 0.1388, 0.7692)
+ -- ( 0.1195, 0.7913)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1600, 0.8267)
+ -- ( 0.1793, 0.8046)
+ -- ( 0.1388, 0.7692)
+ -- ( 0.1195, 0.7913)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4284, 0.3107)
+ -- ( 0.4572, 0.3163)
+ -- ( 0.4672, 0.2634)
+ -- ( 0.4384, 0.2580)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4284, 0.3107)
+ -- ( 0.4572, 0.3163)
+ -- ( 0.4672, 0.2634)
+ -- ( 0.4384, 0.2580)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4721, 0.3149)
+ -- ( 0.5003, 0.3230)
+ -- ( 0.5151, 0.2714)
+ -- ( 0.4870, 0.2633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4721, 0.3149)
+ -- ( 0.5003, 0.3230)
+ -- ( 0.5151, 0.2714)
+ -- ( 0.4870, 0.2633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5761, 0.3388)
+ -- ( 0.6049, 0.3443)
+ -- ( 0.6150, 0.2916)
+ -- ( 0.5862, 0.2860)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5761, 0.3388)
+ -- ( 0.6049, 0.3443)
+ -- ( 0.6150, 0.2916)
+ -- ( 0.5862, 0.2860)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6283, 0.3369)
+ -- ( 0.6567, 0.3296)
+ -- ( 0.6432, 0.2775)
+ -- ( 0.6148, 0.2849)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6283, 0.3369)
+ -- ( 0.6567, 0.3296)
+ -- ( 0.6432, 0.2775)
+ -- ( 0.6148, 0.2849)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5378, 0.2581)
+ -- ( 0.5670, 0.2616)
+ -- ( 0.5734, 0.2083)
+ -- ( 0.5443, 0.2047)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5378, 0.2581)
+ -- ( 0.5670, 0.2616)
+ -- ( 0.5734, 0.2083)
+ -- ( 0.5443, 0.2047)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4853, 0.2500)
+ -- ( 0.5140, 0.2555)
+ -- ( 0.5241, 0.2028)
+ -- ( 0.4953, 0.1973)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4853, 0.2500)
+ -- ( 0.5140, 0.2555)
+ -- ( 0.5241, 0.2028)
+ -- ( 0.4953, 0.1973)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4028, 0.0895)
+ -- ( 0.4321, 0.0895)
+ -- ( 0.4321, 0.0358)
+ -- ( 0.4028, 0.0358)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4028, 0.0895)
+ -- ( 0.4321, 0.0895)
+ -- ( 0.4321, 0.0358)
+ -- ( 0.4028, 0.0358)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612, 0.0957)
+ -- ( 0.4899, 0.0898)
+ -- ( 0.4793, 0.0371)
+ -- ( 0.4506, 0.0430)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612, 0.0957)
+ -- ( 0.4899, 0.0898)
+ -- ( 0.4793, 0.0371)
+ -- ( 0.4506, 0.0430)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5422,-0.0041)
+ -- ( 0.5437,-0.0333)
+ -- ( 0.4900,-0.0361)
+ -- ( 0.4885,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5422,-0.0041)
+ -- ( 0.5437,-0.0333)
+ -- ( 0.4900,-0.0361)
+ -- ( 0.4885,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6654,-0.0050)
+ -- ( 0.6664,-0.0343)
+ -- ( 0.6128,-0.0361)
+ -- ( 0.6117,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6654,-0.0050)
+ -- ( 0.6664,-0.0343)
+ -- ( 0.6128,-0.0361)
+ -- ( 0.6117,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7573, 0.2817)
+ -- ( 0.7646, 0.2533)
+ -- ( 0.7124, 0.2402)
+ -- ( 0.7053, 0.2686)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7573, 0.2817)
+ -- ( 0.7646, 0.2533)
+ -- ( 0.7124, 0.2402)
+ -- ( 0.7053, 0.2686)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7393, 0.3502)
+ -- ( 0.7456, 0.3216)
+ -- ( 0.6931, 0.3101)
+ -- ( 0.6868, 0.3387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7393, 0.3502)
+ -- ( 0.7456, 0.3216)
+ -- ( 0.6931, 0.3101)
+ -- ( 0.6868, 0.3387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8114, 0.0963)
+ -- ( 0.8188, 0.0679)
+ -- ( 0.7668, 0.0543)
+ -- ( 0.7594, 0.0826)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8114, 0.0963)
+ -- ( 0.8188, 0.0679)
+ -- ( 0.7668, 0.0543)
+ -- ( 0.7594, 0.0826)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8247,-0.0115)
+ -- ( 0.8312,-0.0401)
+ -- ( 0.7788,-0.0521)
+ -- ( 0.7723,-0.0235)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8247,-0.0115)
+ -- ( 0.8312,-0.0401)
+ -- ( 0.7788,-0.0521)
+ -- ( 0.7723,-0.0235)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9279, 0.0392)
+ -- ( 0.9358, 0.0110)
+ -- ( 0.8842,-0.0036)
+ -- ( 0.8762, 0.0245)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9279, 0.0392)
+ -- ( 0.9358, 0.0110)
+ -- ( 0.8842,-0.0036)
+ -- ( 0.8762, 0.0245)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9473,-0.0199)
+ -- ( 0.9500,-0.0490)
+ -- ( 0.8965,-0.0540)
+ -- ( 0.8939,-0.0248)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9473,-0.0199)
+ -- ( 0.9500,-0.0490)
+ -- ( 0.8965,-0.0540)
+ -- ( 0.8939,-0.0248)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8832, 0.1513)
+ -- ( 0.8949, 0.1245)
+ -- ( 0.8456, 0.1031)
+ -- ( 0.8339, 0.1300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8832, 0.1513)
+ -- ( 0.8949, 0.1245)
+ -- ( 0.8456, 0.1031)
+ -- ( 0.8339, 0.1300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8604, 0.2135)
+ -- ( 0.8734, 0.1872)
+ -- ( 0.8254, 0.1634)
+ -- ( 0.8123, 0.1896)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8604, 0.2135)
+ -- ( 0.8734, 0.1872)
+ -- ( 0.8254, 0.1634)
+ -- ( 0.8123, 0.1896)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7675, 0.2368)
+ -- ( 0.7736, 0.2082)
+ -- ( 0.7210, 0.1970)
+ -- ( 0.7150, 0.2257)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7675, 0.2368)
+ -- ( 0.7736, 0.2082)
+ -- ( 0.7210, 0.1970)
+ -- ( 0.7150, 0.2257)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7696,-0.1796)
+ -- ( 0.7978,-0.1875)
+ -- ( 0.7835,-0.2392)
+ -- ( 0.7552,-0.2314)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7696,-0.1796)
+ -- ( 0.7978,-0.1875)
+ -- ( 0.7835,-0.2392)
+ -- ( 0.7552,-0.2314)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7546,-0.0830)
+ -- ( 0.7838,-0.0830)
+ -- ( 0.7838,-0.1367)
+ -- ( 0.7546,-0.1367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7546,-0.0830)
+ -- ( 0.7838,-0.0830)
+ -- ( 0.7838,-0.1367)
+ -- ( 0.7546,-0.1367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7114,-0.1735)
+ -- ( 0.7402,-0.1784)
+ -- ( 0.7313,-0.2313)
+ -- ( 0.7024,-0.2265)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7114,-0.1735)
+ -- ( 0.7402,-0.1784)
+ -- ( 0.7313,-0.2313)
+ -- ( 0.7024,-0.2265)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6398,-0.0896)
+ -- ( 0.6691,-0.0896)
+ -- ( 0.6691,-0.1433)
+ -- ( 0.6398,-0.1433)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6398,-0.0896)
+ -- ( 0.6691,-0.0896)
+ -- ( 0.6691,-0.1433)
+ -- ( 0.6398,-0.1433)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5390,-0.1093)
+ -- ( 0.5377,-0.0801)
+ -- ( 0.5913,-0.0776)
+ -- ( 0.5927,-0.1069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5390,-0.1093)
+ -- ( 0.5377,-0.0801)
+ -- ( 0.5913,-0.0776)
+ -- ( 0.5927,-0.1069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5171,-0.2250)
+ -- ( 0.5252,-0.1968)
+ -- ( 0.5767,-0.2117)
+ -- ( 0.5687,-0.2399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5171,-0.2250)
+ -- ( 0.5252,-0.1968)
+ -- ( 0.5767,-0.2117)
+ -- ( 0.5687,-0.2399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5024,-0.2807)
+ -- ( 0.5066,-0.2517)
+ -- ( 0.5597,-0.2597)
+ -- ( 0.5555,-0.2887)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5024,-0.2807)
+ -- ( 0.5066,-0.2517)
+ -- ( 0.5597,-0.2597)
+ -- ( 0.5555,-0.2887)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6783,-0.2717)
+ -- ( 0.7056,-0.2824)
+ -- ( 0.6858,-0.3324)
+ -- ( 0.6585,-0.3216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6783,-0.2717)
+ -- ( 0.7056,-0.2824)
+ -- ( 0.6858,-0.3324)
+ -- ( 0.6585,-0.3216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4010,-0.3903)
+ -- ( 0.4019,-0.3609)
+ -- ( 0.4556,-0.3627)
+ -- ( 0.4547,-0.3921)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4010,-0.3903)
+ -- ( 0.4019,-0.3609)
+ -- ( 0.4556,-0.3627)
+ -- ( 0.4547,-0.3921)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6576,-0.1610)
+ -- ( 0.6852,-0.1708)
+ -- ( 0.6672,-0.2214)
+ -- ( 0.6396,-0.2116)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6576,-0.1610)
+ -- ( 0.6852,-0.1708)
+ -- ( 0.6672,-0.2214)
+ -- ( 0.6396,-0.2116)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4024,-0.7175)
+ -- ( 0.4484,-0.7175)
+ -- ( 0.4484,-0.7785)
+ -- ( 0.4024,-0.7785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4024,-0.7175)
+ -- ( 0.4484,-0.7175)
+ -- ( 0.4484,-0.7785)
+ -- ( 0.4024,-0.7785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3999,-0.7917)
+ -- (-0.3540,-0.7917)
+ -- (-0.3540,-0.8527)
+ -- (-0.3999,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3999,-0.7917)
+ -- (-0.3540,-0.7917)
+ -- (-0.3540,-0.8527)
+ -- (-0.3999,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7770,-0.2886)
+ -- (-0.7319,-0.2679)
+ -- (-0.6985,-0.3406)
+ -- (-0.7437,-0.3613)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7770,-0.2886)
+ -- (-0.7319,-0.2679)
+ -- (-0.6985,-0.3406)
+ -- (-0.7437,-0.3613)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1783,-0.5367)
+ -- (-0.1339,-0.5483)
+ -- (-0.1492,-0.6074)
+ -- (-0.1937,-0.5958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1783,-0.5367)
+ -- (-0.1339,-0.5483)
+ -- (-0.1492,-0.6074)
+ -- (-0.1937,-0.5958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3106,-0.7770)
+ -- ( 0.3564,-0.7770)
+ -- ( 0.3564,-0.8380)
+ -- ( 0.3106,-0.8380)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3106,-0.7770)
+ -- ( 0.3564,-0.7770)
+ -- ( 0.3564,-0.8380)
+ -- ( 0.3106,-0.8380)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0626,-0.7954)
+ -- (-0.0196,-0.8113)
+ -- (-0.0406,-0.8686)
+ -- (-0.0837,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0626,-0.7954)
+ -- (-0.0196,-0.8113)
+ -- (-0.0406,-0.8686)
+ -- (-0.0837,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0570,-0.7843)
+ -- ( 0.1025,-0.7910)
+ -- ( 0.0936,-0.8514)
+ -- ( 0.0481,-0.8446)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0570,-0.7843)
+ -- ( 0.1025,-0.7910)
+ -- ( 0.0936,-0.8514)
+ -- ( 0.0481,-0.8446)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0906,-0.6908)
+ -- ( 0.1345,-0.7046)
+ -- ( 0.1161,-0.7629)
+ -- ( 0.0723,-0.7490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0906,-0.6908)
+ -- ( 0.1345,-0.7046)
+ -- ( 0.1161,-0.7629)
+ -- ( 0.0723,-0.7490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4731,-0.7998)
+ -- (-0.4283,-0.7899)
+ -- (-0.4151,-0.8496)
+ -- (-0.4600,-0.8595)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4731,-0.7998)
+ -- (-0.4283,-0.7899)
+ -- (-0.4151,-0.8496)
+ -- (-0.4600,-0.8595)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4125,-0.0879)
+ -- ( 0.4578,-0.0951)
+ -- ( 0.4483,-0.1553)
+ -- ( 0.4029,-0.1481)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4125,-0.0879)
+ -- ( 0.4578,-0.0951)
+ -- ( 0.4483,-0.1553)
+ -- ( 0.4029,-0.1481)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2078, 0.8568)
+ -- ( 0.2536, 0.8583)
+ -- ( 0.2555, 0.7973)
+ -- ( 0.2097, 0.7958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2078, 0.8568)
+ -- ( 0.2536, 0.8583)
+ -- ( 0.2555, 0.7973)
+ -- ( 0.2097, 0.7958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5829,-0.2493)
+ -- ( 0.6289,-0.2493)
+ -- ( 0.6289,-0.3104)
+ -- ( 0.5829,-0.3104)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5829,-0.2493)
+ -- ( 0.6289,-0.2493)
+ -- ( 0.6289,-0.3104)
+ -- ( 0.5829,-0.3104)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2923,-0.1390)
+ -- ( 0.3109,-0.0970)
+ -- ( 0.3667,-0.1218)
+ -- ( 0.3481,-0.1638)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2923,-0.1390)
+ -- ( 0.3109,-0.0970)
+ -- ( 0.3667,-0.1218)
+ -- ( 0.3481,-0.1638)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6866,-0.0789)
+ -- ( 0.7324,-0.0789)
+ -- ( 0.7324,-0.1400)
+ -- ( 0.6866,-0.1400)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6866,-0.0789)
+ -- ( 0.7324,-0.0789)
+ -- ( 0.7324,-0.1400)
+ -- ( 0.6866,-0.1400)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8206,-0.0922)
+ -- ( 0.8649,-0.1044)
+ -- ( 0.8487,-0.1632)
+ -- ( 0.8045,-0.1511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8206,-0.0922)
+ -- ( 0.8649,-0.1044)
+ -- ( 0.8487,-0.1632)
+ -- ( 0.8045,-0.1511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3075, 0.5809)
+ -- (-0.2648, 0.5640)
+ -- (-0.2872, 0.5072)
+ -- (-0.3299, 0.5241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3075, 0.5809)
+ -- (-0.2648, 0.5640)
+ -- (-0.2872, 0.5072)
+ -- (-0.3299, 0.5241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7746, 0.3900)
+ -- (-0.7312, 0.3750)
+ -- (-0.7511, 0.3173)
+ -- (-0.7945, 0.3322)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7746, 0.3900)
+ -- (-0.7312, 0.3750)
+ -- (-0.7511, 0.3173)
+ -- (-0.7945, 0.3322)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8224, 0.3024)
+ -- (-0.7807, 0.2831)
+ -- (-0.8064, 0.2277)
+ -- (-0.8481, 0.2470)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8224, 0.3024)
+ -- (-0.7807, 0.2831)
+ -- (-0.8064, 0.2277)
+ -- (-0.8481, 0.2470)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7172, 0.2999)
+ -- (-0.6959, 0.3406)
+ -- (-0.6418, 0.3122)
+ -- (-0.6632, 0.2715)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7172, 0.2999)
+ -- (-0.6959, 0.3406)
+ -- (-0.6418, 0.3122)
+ -- (-0.6632, 0.2715)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7505, 0.2368)
+ -- (-0.7273, 0.2764)
+ -- (-0.6746, 0.2456)
+ -- (-0.6979, 0.2060)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7505, 0.2368)
+ -- (-0.7273, 0.2764)
+ -- (-0.6746, 0.2456)
+ -- (-0.6979, 0.2060)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7726, 0.1668)
+ -- (-0.7521, 0.2080)
+ -- (-0.6975, 0.1808)
+ -- (-0.7180, 0.1396)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7726, 0.1668)
+ -- (-0.7521, 0.2080)
+ -- (-0.6975, 0.1808)
+ -- (-0.7180, 0.1396)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8067, 0.1033)
+ -- (-0.7877, 0.1452)
+ -- (-0.7322, 0.1199)
+ -- (-0.7512, 0.0781)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8067, 0.1033)
+ -- (-0.7877, 0.1452)
+ -- (-0.7322, 0.1199)
+ -- (-0.7512, 0.0781)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8292, 0.0434)
+ -- (-0.8106, 0.0854)
+ -- (-0.7548, 0.0608)
+ -- (-0.7733, 0.0188)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8292, 0.0434)
+ -- (-0.8106, 0.0854)
+ -- (-0.7548, 0.0608)
+ -- (-0.7733, 0.0188)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8479,-0.0238)
+ -- (-0.8336, 0.0199)
+ -- (-0.7757, 0.0009)
+ -- (-0.7899,-0.0427)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8479,-0.0238)
+ -- (-0.8336, 0.0199)
+ -- (-0.7757, 0.0009)
+ -- (-0.7899,-0.0427)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9015,-0.0795)
+ -- (-0.8746,-0.0423)
+ -- (-0.8252,-0.0782)
+ -- (-0.8521,-0.1153)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9015,-0.0795)
+ -- (-0.8746,-0.0423)
+ -- (-0.8252,-0.0782)
+ -- (-0.8521,-0.1153)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5616,-0.6142)
+ -- (-0.5431,-0.6563)
+ -- (-0.5990,-0.6808)
+ -- (-0.6175,-0.6387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5616,-0.6142)
+ -- (-0.5431,-0.6563)
+ -- (-0.5990,-0.6808)
+ -- (-0.6175,-0.6387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0094,-0.6230)
+ -- ( 0.0047,-0.5793)
+ -- ( 0.0627,-0.5978)
+ -- ( 0.0487,-0.6416)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0094,-0.6230)
+ -- ( 0.0047,-0.5793)
+ -- ( 0.0627,-0.5978)
+ -- ( 0.0487,-0.6416)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0303,-0.4683)
+ -- ( 0.0443,-0.4246)
+ -- ( 0.1024,-0.4432)
+ -- ( 0.0884,-0.4869)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0303,-0.4683)
+ -- ( 0.0443,-0.4246)
+ -- ( 0.1024,-0.4432)
+ -- ( 0.0884,-0.4869)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2507,-0.3956)
+ -- (-0.2367,-0.3518)
+ -- (-0.1786,-0.3704)
+ -- (-0.1926,-0.4142)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2507,-0.3956)
+ -- (-0.2367,-0.3518)
+ -- (-0.1786,-0.3704)
+ -- (-0.1926,-0.4142)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3208,-0.3936)
+ -- (-0.3069,-0.3498)
+ -- (-0.2487,-0.3684)
+ -- (-0.2627,-0.4122)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3208,-0.3936)
+ -- (-0.3069,-0.3498)
+ -- (-0.2487,-0.3684)
+ -- (-0.2627,-0.4122)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1634,-0.1430)
+ -- ( 0.1790,-0.0997)
+ -- ( 0.2365,-0.1205)
+ -- ( 0.2209,-0.1637)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1634,-0.1430)
+ -- ( 0.1790,-0.0997)
+ -- ( 0.2365,-0.1205)
+ -- ( 0.2209,-0.1637)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1520,-0.2030)
+ -- ( 0.1715,-0.1614)
+ -- ( 0.2268,-0.1873)
+ -- ( 0.2072,-0.2289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1520,-0.2030)
+ -- ( 0.1715,-0.1614)
+ -- ( 0.2268,-0.1873)
+ -- ( 0.2072,-0.2289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0852,-0.3696)
+ -- ( 0.1047,-0.3280)
+ -- ( 0.1600,-0.3540)
+ -- ( 0.1404,-0.3956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0852,-0.3696)
+ -- ( 0.1047,-0.3280)
+ -- ( 0.1600,-0.3540)
+ -- ( 0.1404,-0.3956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0197,-0.2063)
+ -- ( 0.0392,-0.1647)
+ -- ( 0.0944,-0.1907)
+ -- ( 0.0750,-0.2323)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0197,-0.2063)
+ -- ( 0.0392,-0.1647)
+ -- ( 0.0944,-0.1907)
+ -- ( 0.0750,-0.2323)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3100, 0.7769)
+ -- ( 0.3513, 0.7971)
+ -- ( 0.3781, 0.7423)
+ -- ( 0.3369, 0.7221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3100, 0.7769)
+ -- ( 0.3513, 0.7971)
+ -- ( 0.3781, 0.7423)
+ -- ( 0.3369, 0.7221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5097, 0.3286)
+ -- ( 0.5510, 0.3488)
+ -- ( 0.5778, 0.2940)
+ -- ( 0.5366, 0.2738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5097, 0.3286)
+ -- ( 0.5510, 0.3488)
+ -- ( 0.5778, 0.2940)
+ -- ( 0.5366, 0.2738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4014, 0.8173)
+ -- ( 0.4429, 0.8369)
+ -- ( 0.4689, 0.7817)
+ -- ( 0.4274, 0.7621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4014, 0.8173)
+ -- ( 0.4429, 0.8369)
+ -- ( 0.4689, 0.7817)
+ -- ( 0.4274, 0.7621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2627, 0.7599)
+ -- ( 0.3055, 0.7765)
+ -- ( 0.3276, 0.7196)
+ -- ( 0.2848, 0.7030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2627, 0.7599)
+ -- ( 0.3055, 0.7765)
+ -- ( 0.3276, 0.7196)
+ -- ( 0.2848, 0.7030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1763, 0.7193)
+ -- ( 0.2174, 0.7400)
+ -- ( 0.2448, 0.6855)
+ -- ( 0.2038, 0.6648)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1763, 0.7193)
+ -- ( 0.2174, 0.7400)
+ -- ( 0.2448, 0.6855)
+ -- ( 0.2038, 0.6648)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0655, 0.4707)
+ -- (-0.0222, 0.4555)
+ -- (-0.0424, 0.3979)
+ -- (-0.0858, 0.4131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0655, 0.4707)
+ -- (-0.0222, 0.4555)
+ -- (-0.0424, 0.3979)
+ -- (-0.0858, 0.4131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0019, 0.5606)
+ -- ( 0.0452, 0.5454)
+ -- ( 0.0251, 0.4878)
+ -- (-0.0183, 0.5030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0019, 0.5606)
+ -- ( 0.0452, 0.5454)
+ -- ( 0.0251, 0.4878)
+ -- (-0.0183, 0.5030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0634, 0.0555)
+ -- ( 0.1067, 0.0403)
+ -- ( 0.0865,-0.0174)
+ -- ( 0.0432,-0.0022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0634, 0.0555)
+ -- ( 0.1067, 0.0403)
+ -- ( 0.0865,-0.0174)
+ -- ( 0.0432,-0.0022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0445, 0.0687)
+ -- (-0.0010, 0.0535)
+ -- (-0.0213,-0.0041)
+ -- (-0.0646, 0.0110)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0445, 0.0687)
+ -- (-0.0010, 0.0535)
+ -- (-0.0213,-0.0041)
+ -- (-0.0646, 0.0110)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0541, 0.5519)
+ -- ( 0.0966, 0.5344)
+ -- ( 0.0732, 0.4779)
+ -- ( 0.0308, 0.4956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0541, 0.5519)
+ -- ( 0.0966, 0.5344)
+ -- ( 0.0732, 0.4779)
+ -- ( 0.0308, 0.4956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0096, 0.8274)
+ -- ( 0.0163, 0.7820)
+ -- (-0.0441, 0.7731)
+ -- (-0.0508, 0.8185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0096, 0.8274)
+ -- ( 0.0163, 0.7820)
+ -- (-0.0441, 0.7731)
+ -- (-0.0508, 0.8185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0878, 0.6237)
+ -- (-0.0810, 0.5783)
+ -- (-0.1415, 0.5693)
+ -- (-0.1482, 0.6147)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0878, 0.6237)
+ -- (-0.0810, 0.5783)
+ -- (-0.1415, 0.5693)
+ -- (-0.1482, 0.6147)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0678, 0.8193)
+ -- (-0.0575, 0.7745)
+ -- (-0.1168, 0.7608)
+ -- (-0.1273, 0.8055)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0678, 0.8193)
+ -- (-0.0575, 0.7745)
+ -- (-0.1168, 0.7608)
+ -- (-0.1273, 0.8055)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1958, 0.8007)
+ -- (-0.1517, 0.7877)
+ -- (-0.1688, 0.7292)
+ -- (-0.2129, 0.7420)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1958, 0.8007)
+ -- (-0.1517, 0.7877)
+ -- (-0.1688, 0.7292)
+ -- (-0.2129, 0.7420)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6001, 0.0672)
+ -- ( 0.6452, 0.0758)
+ -- ( 0.6566, 0.0159)
+ -- ( 0.6115, 0.0072)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6001, 0.0672)
+ -- ( 0.6452, 0.0758)
+ -- ( 0.6566, 0.0159)
+ -- ( 0.6115, 0.0072)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8357, 0.2798)
+ -- ( 0.8514, 0.2365)
+ -- ( 0.7940, 0.2158)
+ -- ( 0.7783, 0.2591)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8357, 0.2798)
+ -- ( 0.8514, 0.2365)
+ -- ( 0.7940, 0.2158)
+ -- ( 0.7783, 0.2591)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4450, 0.0292)
+ -- ( 0.4606,-0.0141)
+ -- ( 0.4032,-0.0348)
+ -- ( 0.3876, 0.0085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4450, 0.0292)
+ -- ( 0.4606,-0.0141)
+ -- ( 0.4032,-0.0348)
+ -- ( 0.3876, 0.0085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9043, 0.1125)
+ -- ( 0.9184, 0.0687)
+ -- ( 0.8603, 0.0500)
+ -- ( 0.8462, 0.0937)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9043, 0.1125)
+ -- ( 0.9184, 0.0687)
+ -- ( 0.8603, 0.0500)
+ -- ( 0.8462, 0.0937)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7148,-0.2814)
+ -- ( 0.7591,-0.2935)
+ -- ( 0.7430,-0.3524)
+ -- ( 0.6987,-0.3402)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7148,-0.2814)
+ -- ( 0.7591,-0.2935)
+ -- ( 0.7430,-0.3524)
+ -- ( 0.6987,-0.3402)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5891,-0.1425)
+ -- ( 0.5806,-0.1876)
+ -- ( 0.5207,-0.1764)
+ -- ( 0.5291,-0.1313)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5891,-0.1425)
+ -- ( 0.5806,-0.1876)
+ -- ( 0.5207,-0.1764)
+ -- ( 0.5291,-0.1313)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5865, 0.0684)
+ -- ( 0.5782, 0.0233)
+ -- ( 0.5181, 0.0345)
+ -- ( 0.5266, 0.0796)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5865, 0.0684)
+ -- ( 0.5782, 0.0233)
+ -- ( 0.5181, 0.0345)
+ -- ( 0.5266, 0.0796)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4044,-0.3422)
+ -- ( 0.4189,-0.2987)
+ -- ( 0.4768,-0.3180)
+ -- ( 0.4623,-0.3616)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4044,-0.3422)
+ -- ( 0.4189,-0.2987)
+ -- ( 0.4768,-0.3180)
+ -- ( 0.4623,-0.3616)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665,-0.7188)
+ -- ( 0.5125,-0.7188)
+ -- ( 0.5125,-0.7799)
+ -- ( 0.4665,-0.7799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665,-0.7188)
+ -- ( 0.5125,-0.7188)
+ -- ( 0.5125,-0.7799)
+ -- ( 0.4665,-0.7799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1285,-0.5747)
+ -- (-0.0826,-0.5747)
+ -- (-0.0826,-0.6356)
+ -- (-0.1285,-0.6356)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1285,-0.5747)
+ -- (-0.0826,-0.5747)
+ -- (-0.0826,-0.6356)
+ -- (-0.1285,-0.6356)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2861,-0.6694)
+ -- (-0.2789,-0.6240)
+ -- (-0.2186,-0.6336)
+ -- (-0.2258,-0.6789)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2861,-0.6694)
+ -- (-0.2789,-0.6240)
+ -- (-0.2186,-0.6336)
+ -- (-0.2258,-0.6789)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1486,-0.3725)
+ -- (-0.1414,-0.3271)
+ -- (-0.0811,-0.3367)
+ -- (-0.0883,-0.3820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1486,-0.3725)
+ -- (-0.1414,-0.3271)
+ -- (-0.0811,-0.3367)
+ -- (-0.0883,-0.3820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3576,-0.5916)
+ -- (-0.3319,-0.6297)
+ -- (-0.3826,-0.6638)
+ -- (-0.4082,-0.6256)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3576,-0.5916)
+ -- (-0.3319,-0.6297)
+ -- (-0.3826,-0.6638)
+ -- (-0.4082,-0.6256)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5468,-0.2716)
+ -- (-0.5213,-0.3098)
+ -- (-0.5719,-0.3438)
+ -- (-0.5976,-0.3056)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5468,-0.2716)
+ -- (-0.5213,-0.3098)
+ -- (-0.5719,-0.3438)
+ -- (-0.5976,-0.3056)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4969,-0.5222)
+ -- (-0.4767,-0.5634)
+ -- (-0.5315,-0.5902)
+ -- (-0.5518,-0.5490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4969,-0.5222)
+ -- (-0.4767,-0.5634)
+ -- (-0.5315,-0.5902)
+ -- (-0.5518,-0.5490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3963,-0.6922)
+ -- (-0.3778,-0.7343)
+ -- (-0.4338,-0.7588)
+ -- (-0.4522,-0.7168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3963,-0.6922)
+ -- (-0.3778,-0.7343)
+ -- (-0.4338,-0.7588)
+ -- (-0.4522,-0.7168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6145,-0.5157)
+ -- (-0.5944,-0.5570)
+ -- (-0.6493,-0.5836)
+ -- (-0.6694,-0.5423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6145,-0.5157)
+ -- (-0.5944,-0.5570)
+ -- (-0.6493,-0.5836)
+ -- (-0.6694,-0.5423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8791,-0.2053)
+ -- (-0.8402,-0.1810)
+ -- (-0.8079,-0.2327)
+ -- (-0.8468,-0.2571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8791,-0.2053)
+ -- (-0.8402,-0.1810)
+ -- (-0.8079,-0.2327)
+ -- (-0.8468,-0.2571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9144, 0.1039)
+ -- (-0.8919, 0.1439)
+ -- (-0.8388, 0.1140)
+ -- (-0.8613, 0.0740)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9144, 0.1039)
+ -- (-0.8919, 0.1439)
+ -- (-0.8388, 0.1140)
+ -- (-0.8613, 0.0740)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4095, 0.2277)
+ -- (-0.3639, 0.2229)
+ -- (-0.3703, 0.1622)
+ -- (-0.4159, 0.1670)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4095, 0.2277)
+ -- (-0.3639, 0.2229)
+ -- (-0.3703, 0.1622)
+ -- (-0.4159, 0.1670)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3590, 0.4200)
+ -- (-0.3365, 0.4600)
+ -- (-0.2833, 0.4302)
+ -- (-0.3058, 0.3901)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3590, 0.4200)
+ -- (-0.3365, 0.4600)
+ -- (-0.2833, 0.4302)
+ -- (-0.3058, 0.3901)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0764, 0.3204)
+ -- (-0.0539, 0.3604)
+ -- (-0.0007, 0.3306)
+ -- (-0.0232, 0.2905)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0764, 0.3204)
+ -- (-0.0539, 0.3604)
+ -- (-0.0007, 0.3306)
+ -- (-0.0232, 0.2905)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1364, 0.0430)
+ -- (-0.1139, 0.0831)
+ -- (-0.0607, 0.0532)
+ -- (-0.0832, 0.0131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1364, 0.0430)
+ -- (-0.1139, 0.0831)
+ -- (-0.0607, 0.0532)
+ -- (-0.0832, 0.0131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269, 0.1239)
+ -- (-0.1149, 0.1681)
+ -- (-0.0560, 0.1521)
+ -- (-0.0681, 0.1078)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269, 0.1239)
+ -- (-0.1149, 0.1681)
+ -- (-0.0560, 0.1521)
+ -- (-0.0681, 0.1078)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6443,-0.1022)
+ -- (-0.6321,-0.0579)
+ -- (-0.5733,-0.0740)
+ -- (-0.5854,-0.1183)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6443,-0.1022)
+ -- (-0.6321,-0.0579)
+ -- (-0.5733,-0.0740)
+ -- (-0.5854,-0.1183)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6032, 0.2357)
+ -- (-0.5912, 0.2800)
+ -- (-0.5323, 0.2639)
+ -- (-0.5443, 0.2196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6032, 0.2357)
+ -- (-0.5912, 0.2800)
+ -- (-0.5323, 0.2639)
+ -- (-0.5443, 0.2196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7230, 0.0020)
+ -- (-0.7026, 0.0432)
+ -- (-0.6479, 0.0162)
+ -- (-0.6682,-0.0250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7230, 0.0020)
+ -- (-0.7026, 0.0432)
+ -- (-0.6479, 0.0162)
+ -- (-0.6682,-0.0250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5055, 0.2596)
+ -- (-0.4629, 0.2423)
+ -- (-0.4859, 0.1858)
+ -- (-0.5285, 0.2031)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5055, 0.2596)
+ -- (-0.4629, 0.2423)
+ -- (-0.4859, 0.1858)
+ -- (-0.5285, 0.2031)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1337, 0.3296)
+ -- ( 0.1283, 0.2840)
+ -- ( 0.0677, 0.2911)
+ -- ( 0.0731, 0.3367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1337, 0.3296)
+ -- ( 0.1283, 0.2840)
+ -- ( 0.0677, 0.2911)
+ -- ( 0.0731, 0.3367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1476, 0.4414)
+ -- ( 0.1506, 0.3955)
+ -- ( 0.0897, 0.3916)
+ -- ( 0.0867, 0.4375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1476, 0.4414)
+ -- ( 0.1506, 0.3955)
+ -- ( 0.0897, 0.3916)
+ -- ( 0.0867, 0.4375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0539,-0.1542)
+ -- ( 0.0687,-0.1107)
+ -- ( 0.1264,-0.1304)
+ -- ( 0.1116,-0.1738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0539,-0.1542)
+ -- ( 0.0687,-0.1107)
+ -- ( 0.1264,-0.1304)
+ -- ( 0.1116,-0.1738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0962,-0.1436)
+ -- (-0.0814,-0.1001)
+ -- (-0.0237,-0.1198)
+ -- (-0.0385,-0.1633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0962,-0.1436)
+ -- (-0.0814,-0.1001)
+ -- (-0.0237,-0.1198)
+ -- (-0.0385,-0.1633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1683,-0.0622)
+ -- (-0.1535,-0.0188)
+ -- (-0.0958,-0.0385)
+ -- (-0.1106,-0.0820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1683,-0.0622)
+ -- (-0.1535,-0.0188)
+ -- (-0.0958,-0.0385)
+ -- (-0.1106,-0.0820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1842,-0.1310)
+ -- (-0.1694,-0.0876)
+ -- (-0.1116,-0.1073)
+ -- (-0.1264,-0.1508)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1842,-0.1310)
+ -- (-0.1694,-0.0876)
+ -- (-0.1116,-0.1073)
+ -- (-0.1264,-0.1508)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1167,-0.5813)
+ -- ( 0.1315,-0.5379)
+ -- ( 0.1892,-0.5576)
+ -- ( 0.1744,-0.6011)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1167,-0.5813)
+ -- ( 0.1315,-0.5379)
+ -- ( 0.1892,-0.5576)
+ -- ( 0.1744,-0.6011)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0916,-0.6322)
+ -- ( 0.1064,-0.5888)
+ -- ( 0.1642,-0.6085)
+ -- ( 0.1493,-0.6520)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0916,-0.6322)
+ -- ( 0.1064,-0.5888)
+ -- ( 0.1642,-0.6085)
+ -- ( 0.1493,-0.6520)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3791,-0.5978)
+ -- ( 0.3941,-0.5544)
+ -- ( 0.4518,-0.5741)
+ -- ( 0.4369,-0.6176)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3791,-0.5978)
+ -- ( 0.3941,-0.5544)
+ -- ( 0.4518,-0.5741)
+ -- ( 0.4369,-0.6176)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4116,-0.5397)
+ -- ( 0.4392,-0.5029)
+ -- ( 0.4880,-0.5396)
+ -- ( 0.4604,-0.5764)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4116,-0.5397)
+ -- ( 0.4392,-0.5029)
+ -- ( 0.4880,-0.5396)
+ -- ( 0.4604,-0.5764)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2218,-0.5853)
+ -- ( 0.2366,-0.5418)
+ -- ( 0.2944,-0.5615)
+ -- ( 0.2796,-0.6051)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2218,-0.5853)
+ -- ( 0.2366,-0.5418)
+ -- ( 0.2944,-0.5615)
+ -- ( 0.2796,-0.6051)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3094, 0.1262)
+ -- ( 0.3519, 0.1085)
+ -- ( 0.3284, 0.0522)
+ -- ( 0.2860, 0.0698)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3094, 0.1262)
+ -- ( 0.3519, 0.1085)
+ -- ( 0.3284, 0.0522)
+ -- ( 0.2860, 0.0698)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2797, 0.1784)
+ -- ( 0.3041, 0.1395)
+ -- ( 0.2524, 0.1070)
+ -- ( 0.2280, 0.1459)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2797, 0.1784)
+ -- ( 0.3041, 0.1395)
+ -- ( 0.2524, 0.1070)
+ -- ( 0.2280, 0.1459)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7950, 0.1548)
+ -- ( 0.8065, 0.1103)
+ -- ( 0.7475, 0.0949)
+ -- ( 0.7359, 0.1394)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7950, 0.1548)
+ -- ( 0.8065, 0.1103)
+ -- ( 0.7475, 0.0949)
+ -- ( 0.7359, 0.1394)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5739, 0.6926)
+ -- ( 0.5961, 0.6525)
+ -- ( 0.5427, 0.6229)
+ -- ( 0.5205, 0.6632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5739, 0.6926)
+ -- ( 0.5961, 0.6525)
+ -- ( 0.5427, 0.6229)
+ -- ( 0.5205, 0.6632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6499, 0.5535)
+ -- ( 0.6714, 0.5129)
+ -- ( 0.6174, 0.4844)
+ -- ( 0.5959, 0.5250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6499, 0.5535)
+ -- ( 0.6714, 0.5129)
+ -- ( 0.6174, 0.4844)
+ -- ( 0.5959, 0.5250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4994, 0.7998)
+ -- (-0.4558, 0.8143)
+ -- (-0.4364, 0.7565)
+ -- (-0.4800, 0.7419)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4994, 0.7998)
+ -- (-0.4558, 0.8143)
+ -- (-0.4364, 0.7565)
+ -- (-0.4800, 0.7419)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3350, 0.7630)
+ -- (-0.2917, 0.7475)
+ -- (-0.3125, 0.6901)
+ -- (-0.3558, 0.7057)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3350, 0.7630)
+ -- (-0.2917, 0.7475)
+ -- (-0.3125, 0.6901)
+ -- (-0.3558, 0.7057)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4472, 0.6282)
+ -- (-0.4040, 0.6124)
+ -- (-0.4252, 0.5551)
+ -- (-0.4683, 0.5710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4472, 0.6282)
+ -- (-0.4040, 0.6124)
+ -- (-0.4252, 0.5551)
+ -- (-0.4683, 0.5710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5200, 0.6603)
+ -- (-0.4792, 0.6394)
+ -- (-0.5070, 0.5851)
+ -- (-0.5480, 0.6061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5200, 0.6603)
+ -- (-0.4792, 0.6394)
+ -- (-0.5070, 0.5851)
+ -- (-0.5480, 0.6061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5301, 0.5359)
+ -- (-0.4915, 0.5109)
+ -- (-0.5247, 0.4597)
+ -- (-0.5633, 0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5301, 0.5359)
+ -- (-0.4915, 0.5109)
+ -- (-0.5247, 0.4597)
+ -- (-0.5633, 0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6860, 0.5063)
+ -- (-0.6426, 0.4914)
+ -- (-0.6624, 0.4337)
+ -- (-0.7058, 0.4486)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6860, 0.5063)
+ -- (-0.6426, 0.4914)
+ -- (-0.6624, 0.4337)
+ -- (-0.7058, 0.4486)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5849, 0.4574)
+ -- (-0.5414, 0.4425)
+ -- (-0.5613, 0.3847)
+ -- (-0.6047, 0.3997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5849, 0.4574)
+ -- (-0.5414, 0.4425)
+ -- (-0.5613, 0.3847)
+ -- (-0.6047, 0.3997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4531,-0.1794)
+ -- (-0.4094,-0.1941)
+ -- (-0.4289,-0.2518)
+ -- (-0.4725,-0.2372)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4531,-0.1794)
+ -- (-0.4094,-0.1941)
+ -- (-0.4289,-0.2518)
+ -- (-0.4725,-0.2372)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3573, 0.0277)
+ -- (-0.3138, 0.0131)
+ -- (-0.3333,-0.0447)
+ -- (-0.3768,-0.0300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3573, 0.0277)
+ -- (-0.3138, 0.0131)
+ -- (-0.3333,-0.0447)
+ -- (-0.3768,-0.0300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3354,-0.4695)
+ -- ( 0.3141,-0.5101)
+ -- ( 0.2601,-0.4816)
+ -- ( 0.2815,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3354,-0.4695)
+ -- ( 0.3141,-0.5101)
+ -- ( 0.2601,-0.4816)
+ -- ( 0.2815,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6206,-0.4111)
+ -- ( 0.6599,-0.4350)
+ -- ( 0.6281,-0.4872)
+ -- ( 0.5889,-0.4632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6206,-0.4111)
+ -- ( 0.6599,-0.4350)
+ -- ( 0.6281,-0.4872)
+ -- ( 0.5889,-0.4632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6061,-0.5834)
+ -- ( 0.6495,-0.5984)
+ -- ( 0.6296,-0.6561)
+ -- ( 0.5861,-0.6411)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6061,-0.5834)
+ -- ( 0.6495,-0.5984)
+ -- ( 0.6296,-0.6561)
+ -- ( 0.5861,-0.6411)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2902, 0.2707)
+ -- ( 0.3361, 0.2673)
+ -- ( 0.3317, 0.2065)
+ -- ( 0.2859, 0.2098)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2902, 0.2707)
+ -- ( 0.3361, 0.2673)
+ -- ( 0.3317, 0.2065)
+ -- ( 0.2859, 0.2098)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2215, 0.2766)
+ -- ( 0.2673, 0.2733)
+ -- ( 0.2630, 0.2124)
+ -- ( 0.2172, 0.2157)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2215, 0.2766)
+ -- ( 0.2673, 0.2733)
+ -- ( 0.2630, 0.2124)
+ -- ( 0.2172, 0.2157)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0159, 0.4498)
+ -- ( 0.0299, 0.4466)
+ -- ( 0.0256, 0.3857)
+ -- (-0.0202, 0.3889)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0159, 0.4498)
+ -- ( 0.0299, 0.4466)
+ -- ( 0.0256, 0.3857)
+ -- (-0.0202, 0.3889)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0377, 0.1701)
+ -- ( 0.0835, 0.1668)
+ -- ( 0.0791, 0.1060)
+ -- ( 0.0333, 0.1092)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0377, 0.1701)
+ -- ( 0.0835, 0.1668)
+ -- ( 0.0791, 0.1060)
+ -- ( 0.0333, 0.1092)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0944, 0.1648)
+ -- ( 0.1403, 0.1657)
+ -- ( 0.1415, 0.1047)
+ -- ( 0.0955, 0.1038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0944, 0.1648)
+ -- ( 0.1403, 0.1657)
+ -- ( 0.1415, 0.1047)
+ -- ( 0.0955, 0.1038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2434, 0.4429)
+ -- ( 0.2698, 0.4054)
+ -- ( 0.2199, 0.3702)
+ -- ( 0.1935, 0.4077)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2434, 0.4429)
+ -- ( 0.2698, 0.4054)
+ -- ( 0.2199, 0.3702)
+ -- ( 0.1935, 0.4077)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4777, 0.5914)
+ -- ( 0.4980, 0.5501)
+ -- ( 0.4432, 0.5232)
+ -- ( 0.4229, 0.5644)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4777, 0.5914)
+ -- ( 0.4980, 0.5501)
+ -- ( 0.4432, 0.5232)
+ -- ( 0.4229, 0.5644)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4936, 0.5331)
+ -- ( 0.5191, 0.4949)
+ -- ( 0.4683, 0.4611)
+ -- ( 0.4428, 0.4993)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4936, 0.5331)
+ -- ( 0.5191, 0.4949)
+ -- ( 0.4683, 0.4611)
+ -- ( 0.4428, 0.4993)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4667, 0.4393)
+ -- ( 0.4871, 0.3980)
+ -- ( 0.4323, 0.3711)
+ -- ( 0.4120, 0.4123)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4667, 0.4393)
+ -- ( 0.4871, 0.3980)
+ -- ( 0.4323, 0.3711)
+ -- ( 0.4120, 0.4123)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2446,-0.1495)
+ -- (-0.2153,-0.1488)
+ -- (-0.2138,-0.2024)
+ -- (-0.2431,-0.2032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2446,-0.1495)
+ -- (-0.2153,-0.1488)
+ -- (-0.2138,-0.2024)
+ -- (-0.2431,-0.2032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1018, 0.2179)
+ -- (-0.0915, 0.2454)
+ -- (-0.0412, 0.2264)
+ -- (-0.0516, 0.1989)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1018, 0.2179)
+ -- (-0.0915, 0.2454)
+ -- (-0.0412, 0.2264)
+ -- (-0.0516, 0.1989)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4189, 0.2515)
+ -- ( 0.4645, 0.2567)
+ -- ( 0.4714, 0.1960)
+ -- ( 0.4257, 0.1909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4189, 0.2515)
+ -- ( 0.4645, 0.2567)
+ -- ( 0.4714, 0.1960)
+ -- ( 0.4257, 0.1909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5784, 0.2650)
+ -- ( 0.6240, 0.2702)
+ -- ( 0.6308, 0.2095)
+ -- ( 0.5852, 0.2043)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5784, 0.2650)
+ -- ( 0.6240, 0.2702)
+ -- ( 0.6308, 0.2095)
+ -- ( 0.5852, 0.2043)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5509, 0.4874)
+ -- ( 0.5966, 0.4925)
+ -- ( 0.6034, 0.4319)
+ -- ( 0.5577, 0.4267)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5509, 0.4874)
+ -- ( 0.5966, 0.4925)
+ -- ( 0.6034, 0.4319)
+ -- ( 0.5577, 0.4267)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1390, 0.6195)
+ -- ( 0.1654, 0.5820)
+ -- ( 0.1155, 0.5468)
+ -- ( 0.0890, 0.5843)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1390, 0.6195)
+ -- ( 0.1654, 0.5820)
+ -- ( 0.1155, 0.5468)
+ -- ( 0.0890, 0.5843)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1780,-0.4082)
+ -- (-0.1533,-0.3695)
+ -- (-0.1018,-0.4023)
+ -- (-0.1265,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1780,-0.4082)
+ -- (-0.1533,-0.3695)
+ -- (-0.1018,-0.4023)
+ -- (-0.1265,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2611,-0.2396)
+ -- (-0.2175,-0.2543)
+ -- (-0.2370,-0.3121)
+ -- (-0.2805,-0.2974)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2611,-0.2396)
+ -- (-0.2175,-0.2543)
+ -- (-0.2370,-0.3121)
+ -- (-0.2805,-0.2974)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1640,-0.8299)
+ -- ( 0.1872,-0.8299)
+ -- ( 0.1872,-0.8565)
+ -- ( 0.1640,-0.8565)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1640,-0.8299)
+ -- ( 0.1872,-0.8299)
+ -- ( 0.1872,-0.8565)
+ -- ( 0.1640,-0.8565)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.7413)
+ -- (-0.1099,-0.7413)
+ -- (-0.1099,-0.7679)
+ -- (-0.1330,-0.7679)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.7413)
+ -- (-0.1099,-0.7413)
+ -- (-0.1099,-0.7679)
+ -- (-0.1330,-0.7679)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3280,-0.8061)
+ -- (-0.3049,-0.8061)
+ -- (-0.3049,-0.8327)
+ -- (-0.3280,-0.8327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3280,-0.8061)
+ -- (-0.3049,-0.8061)
+ -- (-0.3049,-0.8327)
+ -- (-0.3280,-0.8327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7302,-0.0754)
+ -- (-0.7099,-0.0866)
+ -- (-0.7228,-0.1099)
+ -- (-0.7430,-0.0988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7302,-0.0754)
+ -- (-0.7099,-0.0866)
+ -- (-0.7228,-0.1099)
+ -- (-0.7430,-0.0988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0147, 0.1985)
+ -- ( 0.0078, 0.1934)
+ -- ( 0.0020, 0.1675)
+ -- (-0.0206, 0.1726)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0147, 0.1985)
+ -- ( 0.0078, 0.1934)
+ -- ( 0.0020, 0.1675)
+ -- (-0.0206, 0.1726)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7613, 0.0272)
+ -- ( 0.7841, 0.0313)
+ -- ( 0.7889, 0.0050)
+ -- ( 0.7661, 0.0009)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7613, 0.0272)
+ -- ( 0.7841, 0.0313)
+ -- ( 0.7889, 0.0050)
+ -- ( 0.7661, 0.0009)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0160, 0.0427)
+ -- ( 0.0379, 0.0352)
+ -- ( 0.0294, 0.0100)
+ -- ( 0.0075, 0.0174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0160, 0.0427)
+ -- ( 0.0379, 0.0352)
+ -- ( 0.0294, 0.0100)
+ -- ( 0.0075, 0.0174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3515,-0.2403)
+ -- ( 0.3743,-0.2442)
+ -- ( 0.3697,-0.2705)
+ -- ( 0.3469,-0.2665)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3515,-0.2403)
+ -- ( 0.3743,-0.2442)
+ -- ( 0.3697,-0.2705)
+ -- ( 0.3469,-0.2665)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0718, 0.3637)
+ -- ( 0.0933, 0.3723)
+ -- ( 0.1032, 0.3476)
+ -- ( 0.0817, 0.3390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0718, 0.3637)
+ -- ( 0.0933, 0.3723)
+ -- ( 0.1032, 0.3476)
+ -- ( 0.0817, 0.3390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2555, 0.2647)
+ -- (-0.2413, 0.2902)
+ -- (-0.1944, 0.2641)
+ -- (-0.2086, 0.2385)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2555, 0.2647)
+ -- (-0.2413, 0.2902)
+ -- (-0.1944, 0.2641)
+ -- (-0.2086, 0.2385)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2832, 0.1509)
+ -- (-0.2826, 0.1802)
+ -- (-0.2289, 0.1792)
+ -- (-0.2295, 0.1498)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2832, 0.1509)
+ -- (-0.2826, 0.1802)
+ -- (-0.2289, 0.1792)
+ -- (-0.2295, 0.1498)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5694, 0.6977)
+ -- (-0.5248, 0.6870)
+ -- (-0.5390, 0.6277)
+ -- (-0.5837, 0.6384)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5694, 0.6977)
+ -- (-0.5248, 0.6870)
+ -- (-0.5390, 0.6277)
+ -- (-0.5837, 0.6384)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6046, 0.6071)
+ -- (-0.5747, 0.5723)
+ -- (-0.6210, 0.5326)
+ -- (-0.6509, 0.5674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6046, 0.6071)
+ -- (-0.5747, 0.5723)
+ -- (-0.6210, 0.5326)
+ -- (-0.6509, 0.5674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2915,-0.1208)
+ -- (-0.2462,-0.1288)
+ -- (-0.2569,-0.1889)
+ -- (-0.3021,-0.1809)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2915,-0.1208)
+ -- (-0.2462,-0.1288)
+ -- (-0.2569,-0.1889)
+ -- (-0.3021,-0.1809)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1636, 0.0236)
+ -- ( 0.2095, 0.0215)
+ -- ( 0.2067,-0.0394)
+ -- ( 0.1608,-0.0374)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1636, 0.0236)
+ -- ( 0.2095, 0.0215)
+ -- ( 0.2067,-0.0394)
+ -- ( 0.1608,-0.0374)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0653,-0.5296)
+ -- (-0.0423,-0.5269)
+ -- (-0.0391,-0.5533)
+ -- (-0.0621,-0.5560)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0653,-0.5296)
+ -- (-0.0423,-0.5269)
+ -- (-0.0391,-0.5533)
+ -- (-0.0621,-0.5560)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3393, 0.1912)
+ -- (-0.3173, 0.1843)
+ -- (-0.3254, 0.1589)
+ -- (-0.3474, 0.1659)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3393, 0.1912)
+ -- (-0.3173, 0.1843)
+ -- (-0.3254, 0.1589)
+ -- (-0.3474, 0.1659)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2247, 0.5875)
+ -- (-0.2027, 0.5801)
+ -- (-0.2113, 0.5549)
+ -- (-0.2332, 0.5623)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2247, 0.5875)
+ -- (-0.2027, 0.5801)
+ -- (-0.2113, 0.5549)
+ -- (-0.2332, 0.5623)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3747, 0.1590)
+ -- ( 0.4022, 0.1690)
+ -- ( 0.4206, 0.1185)
+ -- ( 0.3930, 0.1085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3747, 0.1590)
+ -- ( 0.4022, 0.1690)
+ -- ( 0.4206, 0.1185)
+ -- ( 0.3930, 0.1085)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx b/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
new file mode 100644
index 0000000000..ee15f5ce78
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
@@ -0,0 +1,848 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/light woods}
+% The draw style for light woods. The pattern is filled with light
+% green, and outline is not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/light woods/.style={
+ draw=none,
+ fill={rgb,100:red,69;green,98;blue,69}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/light woods}
+% Next, we have light woods.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/light woods/.pic={
+ \path[hex/terrain/light woods,pic actions,draw=none]
+ (-0.4795, 0.8736)
+ -- (-0.5104, 0.8207)
+ .. controls (-0.5041, 0.8191) and (-0.4967, 0.8182) .. (-0.4854, 0.8192)
+ -- (-0.4770, 0.8108)
+ -- (-0.4854, 0.7856)
+ -- (-0.5190, 0.8023)
+ .. controls (-0.5219, 0.7975) and (-0.5245, 0.7958) .. (-0.5272, 0.7916)
+ -- (-0.5881, 0.6872)
+ .. controls (-0.5849, 0.6876) and (-0.5819, 0.6876) .. (-0.5782, 0.6885)
+ .. controls (-0.5524, 0.6946) and (-0.5387, 0.7153) .. (-0.5182, 0.7298)
+ .. controls (-0.4841, 0.7540) and (-0.4420, 0.7539) .. (-0.4346, 0.7864)
+ .. controls (-0.4295, 0.8088) and (-0.4470, 0.8265) .. (-0.4572, 0.8444)
+ .. controls (-0.4631, 0.8549) and (-0.4670, 0.8646) .. (-0.4707, 0.8736)
+ --cycle
+ (-0.3185, 0.8722)
+ .. controls (-0.3478, 0.8487) and (-0.3526, 0.8080) .. (-0.3290, 0.7808)
+ .. controls (-0.3140, 0.7633) and (-0.2394, 0.7433) .. (-0.2165, 0.7459)
+ .. controls (-0.1895, 0.7488) and (-0.1787, 0.7643) .. (-0.1561, 0.7725)
+ .. controls (-0.1380, 0.7791) and (-0.1179, 0.7766) .. (-0.1025, 0.7906)
+ .. controls (-0.0719, 0.8182) and (-0.0936, 0.8427) .. (-0.1240, 0.8528)
+ -- (-0.1323, 0.8192)
+ -- (-0.1912, 0.8359)
+ .. controls (-0.1985, 0.8023) and (-0.1999, 0.7965) .. (-0.2332, 0.7856)
+ .. controls (-0.2512, 0.8363) and (-0.2775, 0.8009) .. (-0.2909, 0.8240)
+ .. controls (-0.2975, 0.8355) and (-0.2884, 0.8535) .. (-0.2756, 0.8719)
+ --cycle
+ (-0.1660, 0.8709)
+ .. controls (-0.1609, 0.8538) and (-0.1460, 0.8596) .. (-0.1371, 0.8707)
+ --cycle
+ ( 0.0768, 0.8689)
+ .. controls ( 0.0767, 0.8688) and ( 0.0765, 0.8686) .. ( 0.0764, 0.8685)
+ .. controls ( 0.0704, 0.8503) and ( 0.0779, 0.7592) .. ( 0.1533, 0.7700)
+ .. controls ( 0.1955, 0.7761) and ( 0.1956, 0.8018) .. ( 0.1871, 0.8359)
+ -- ( 0.1366, 0.8108)
+ -- ( 0.1510, 0.8683)
+ --cycle
+ ( 0.1840, 0.8680)
+ .. controls ( 0.1910, 0.8650) and ( 0.1993, 0.8662) .. ( 0.2081, 0.8678)
+ --cycle
+ ( 0.2214, 0.8677)
+ -- ( 0.2459, 0.7939)
+ .. controls ( 0.1903, 0.7716) and ( 0.2267, 0.7399) .. ( 0.2534, 0.7490)
+ .. controls ( 0.2925, 0.7624) and ( 0.2842, 0.8066) .. ( 0.2735, 0.8359)
+ .. controls ( 0.2690, 0.8483) and ( 0.2655, 0.8586) .. ( 0.2619, 0.8674)
+ --cycle
+ ( 0.4057, 0.8661)
+ .. controls ( 0.4149, 0.8349) and ( 0.4483, 0.8068) .. ( 0.4873, 0.8349)
+ .. controls ( 0.4993, 0.8436) and ( 0.5001, 0.8496) .. ( 0.5065, 0.8612)
+ .. controls ( 0.5170, 0.8447) and ( 0.5269, 0.8297) .. ( 0.5405, 0.8189)
+ -- ( 0.5145, 0.8652)
+ --cycle
+ (-0.0288, 0.8391)
+ .. controls (-0.0335, 0.8388) and (-0.0390, 0.8377) .. (-0.0453, 0.8356)
+ .. controls (-0.0698, 0.8019) and (-0.0347, 0.7882) .. (-0.0173, 0.7966)
+ .. controls ( 0.0001, 0.8052) and ( 0.0042, 0.8413) .. (-0.0288, 0.8391)
+ --cycle
+ ( 0.3888, 0.7856)
+ -- ( 0.3719, 0.7687)
+ -- ( 0.3719, 0.7604)
+ -- ( 0.3888, 0.7435)
+ -- ( 0.3972, 0.7435)
+ -- ( 0.4140, 0.7604)
+ --cycle
+ (-0.0821, 0.7138)
+ .. controls (-0.0999, 0.7158) and (-0.1171, 0.7050) .. (-0.1211, 0.6922)
+ .. controls (-0.1297, 0.6650) and (-0.0695, 0.6250) .. (-0.0468, 0.6186)
+ .. controls (-0.0352, 0.6169) and (-0.0107, 0.6175) .. ( 0.0022, 0.6186)
+ .. controls (-0.0326, 0.5765) and (-0.0411, 0.5767) .. (-0.0909, 0.5922)
+ .. controls (-0.0924, 0.5799) and (-0.0959, 0.5731) .. (-0.0909, 0.5597)
+ .. controls (-0.0591, 0.4605) and ( 0.1221, 0.6255) .. ( 0.0020, 0.6581)
+ .. controls (-0.0090, 0.6597) and (-0.0281, 0.6592) .. (-0.0399, 0.6581)
+ .. controls (-0.0462, 0.6969) and (-0.0645, 0.7118) .. (-0.0821, 0.7138)
+ --cycle
+ ( 0.3704, 0.7106)
+ .. controls ( 0.3510, 0.7072) and ( 0.3332, 0.6943) .. ( 0.3224, 0.6679)
+ .. controls ( 0.3172, 0.6530) and ( 0.3220, 0.6121) .. ( 0.3224, 0.5922)
+ -- ( 0.3056, 0.6154)
+ .. controls ( 0.2531, 0.6742) and ( 0.2322, 0.5554) .. ( 0.2966, 0.5454)
+ .. controls ( 0.3239, 0.5412) and ( 0.3417, 0.5630) .. ( 0.3972, 0.5670)
+ .. controls ( 0.4005, 0.5473) and ( 0.4019, 0.5314) .. ( 0.4237, 0.5231)
+ .. controls ( 0.4541, 0.5116) and ( 0.4961, 0.5392) .. ( 0.4841, 0.5736)
+ .. controls ( 0.4794, 0.5870) and ( 0.4556, 0.5991) .. ( 0.4331, 0.6106)
+ .. controls ( 0.4972, 0.6497) and ( 0.4277, 0.7210) .. ( 0.3704, 0.7106)
+ --cycle
+ (-0.4679, 0.7004)
+ .. controls (-0.5116, 0.6983) and (-0.4629, 0.6153) .. (-0.4266, 0.6632)
+ .. controls (-0.4200, 0.6718) and (-0.4201, 0.6786) .. (-0.4182, 0.6846)
+ -- (-0.4434, 0.6958)
+ .. controls (-0.4536, 0.6993) and (-0.4618, 0.7007) .. (-0.4679, 0.7004)
+ --cycle
+ ( 0.5653, 0.7002)
+ .. controls ( 0.5661, 0.6911) and ( 0.5658, 0.6799) .. ( 0.5704, 0.6702)
+ .. controls ( 0.5856, 0.6381) and ( 0.6183, 0.6504) .. ( 0.6246, 0.6688)
+ -- ( 0.6102, 0.6944)
+ .. controls ( 0.6066, 0.6965) and ( 0.6036, 0.6986) .. ( 0.5984, 0.7002)
+ .. controls ( 0.5884, 0.7016) and ( 0.5757, 0.7012) .. ( 0.5653, 0.7002)
+ --cycle
+ ( 0.1310, 0.6925)
+ .. controls ( 0.1003, 0.6568) and ( 0.1392, 0.6414) .. ( 0.1582, 0.6530)
+ .. controls ( 0.1772, 0.6646) and ( 0.1778, 0.7030) .. ( 0.1310, 0.6925)
+ --cycle
+ (-0.3425, 0.6846)
+ .. controls (-0.3485, 0.6703) and (-0.3540, 0.6584) .. (-0.3564, 0.6427)
+ .. controls (-0.3714, 0.5438) and (-0.2673, 0.5839) .. (-0.3103, 0.6583)
+ .. controls (-0.3198, 0.6747) and (-0.3272, 0.6765) .. (-0.3425, 0.6846)
+ --cycle
+ (-0.1828, 0.6763)
+ .. controls (-0.2468, 0.6411) and (-0.2396, 0.5532) .. (-0.1659, 0.5602)
+ .. controls (-0.1273, 0.5639) and (-0.0946, 0.6066) .. (-0.1492, 0.6258)
+ -- (-0.1828, 0.6006)
+ --cycle
+ ( 0.3972, 0.6763)
+ -- ( 0.4287, 0.6131)
+ .. controls ( 0.4206, 0.6173) and ( 0.4113, 0.6217) .. ( 0.4056, 0.6258)
+ -- ( 0.3719, 0.6006)
+ .. controls ( 0.3635, 0.6415) and ( 0.3652, 0.6489) .. ( 0.3972, 0.6763)
+ --cycle
+ ( 0.5737, 0.6319)
+ -- ( 0.5485, 0.6258)
+ .. controls ( 0.5516, 0.6201) and ( 0.5520, 0.6138) .. ( 0.5614, 0.6043)
+ .. controls ( 0.6074, 0.5569) and ( 0.6453, 0.6371) .. ( 0.5737, 0.6319)
+ --cycle
+ (-0.6211, 0.6305)
+ -- (-0.6755, 0.5370)
+ -- (-0.6787, 0.5166)
+ .. controls (-0.6809, 0.5180) and (-0.6832, 0.5188) .. (-0.6854, 0.5203)
+ -- (-0.7191, 0.4623)
+ -- (-0.7291, 0.4073)
+ .. controls (-0.7367, 0.4126) and (-0.7403, 0.4136) .. (-0.7456, 0.4169)
+ -- (-0.7651, 0.3834)
+ .. controls (-0.7455, 0.3798) and (-0.7239, 0.3727) .. (-0.7052, 0.3845)
+ .. controls (-0.6739, 0.3993) and (-0.6763, 0.4662) .. (-0.6703, 0.4998)
+ .. controls (-0.6178, 0.4665) and (-0.6044, 0.4826) .. (-0.5611, 0.5204)
+ .. controls (-0.5440, 0.5353) and (-0.5267, 0.5491) .. (-0.5345, 0.5748)
+ .. controls (-0.5466, 0.6149) and (-0.5841, 0.6243) .. (-0.6211, 0.6305)
+ --cycle
+ (-0.6450, 0.5670)
+ -- (-0.5862, 0.5670)
+ .. controls (-0.6029, 0.5328) and (-0.6086, 0.5274) .. (-0.6450, 0.5166)
+ --cycle
+ ( 0.5940, 0.5141)
+ .. controls ( 0.5876, 0.5135) and ( 0.5814, 0.5119) .. ( 0.5737, 0.5105)
+ .. controls ( 0.5529, 0.5005) and ( 0.5203, 0.4878) .. ( 0.5123, 0.4644)
+ .. controls ( 0.5022, 0.4349) and ( 0.5312, 0.3332) .. ( 0.5982, 0.3551)
+ .. controls ( 0.6173, 0.3612) and ( 0.6614, 0.3963) .. ( 0.6651, 0.4168)
+ .. controls ( 0.6700, 0.4432) and ( 0.6406, 0.5019) .. ( 0.6149, 0.5105)
+ .. controls ( 0.6066, 0.5139) and ( 0.6003, 0.5146) .. ( 0.5940, 0.5141)
+ --cycle
+ ( 0.0525, 0.5036)
+ .. controls ( 0.0223, 0.5016) and ( 0.0014, 0.4715) .. (-0.0147, 0.4493)
+ .. controls (-0.0480, 0.4823) and (-0.1271, 0.5502) .. (-0.1240, 0.4493)
+ -- (-0.0819, 0.4661)
+ .. controls (-0.0631, 0.4289) and ( 0.0054, 0.3259) .. ( 0.0443, 0.3176)
+ .. controls ( 0.1031, 0.3051) and ( 0.1431, 0.3862) .. ( 0.0694, 0.3989)
+ .. controls ( 0.0551, 0.3118) and ( 0.0044, 0.4056) .. ( 0.0316, 0.4326)
+ .. controls ( 0.0741, 0.4748) and ( 0.1233, 0.3699) .. ( 0.1388, 0.4261)
+ .. controls ( 0.1477, 0.4584) and ( 0.0813, 0.5057) .. ( 0.0525, 0.5036)
+ --cycle
+ ( 0.6073, 0.4745)
+ -- ( 0.6242, 0.4241)
+ -- ( 0.5569, 0.3989)
+ -- ( 0.5569, 0.4493)
+ --cycle
+ (-0.3498, 0.4626)
+ .. controls (-0.3744, 0.4586) and (-0.3998, 0.4069) .. (-0.3941, 0.3847)
+ .. controls (-0.3893, 0.3661) and (-0.3650, 0.3651) .. (-0.3503, 0.3798)
+ -- (-0.3257, 0.4157)
+ .. controls (-0.3295, 0.3698) and (-0.2940, 0.3485) .. (-0.2697, 0.3592)
+ .. controls (-0.2492, 0.3684) and (-0.2611, 0.3898) .. (-0.2697, 0.4024)
+ .. controls (-0.2865, 0.4277) and (-0.3149, 0.4682) .. (-0.3498, 0.4626)
+ --cycle
+ ( 0.7488, 0.4472)
+ .. controls ( 0.7446, 0.4429) and ( 0.7413, 0.4378) .. ( 0.7395, 0.4315)
+ .. controls ( 0.7338, 0.4111) and ( 0.7612, 0.3277) .. ( 0.8087, 0.3352)
+ .. controls ( 0.8094, 0.3354) and ( 0.8102, 0.3361) .. ( 0.8109, 0.3364)
+ --cycle
+ (-0.1492, 0.4409)
+ .. controls (-0.1577, 0.3701) and (-0.1298, 0.3577) .. (-0.0651, 0.3568)
+ .. controls (-0.0461, 0.3027) and (-0.0025, 0.3462) .. (-0.0567, 0.3652)
+ -- (-0.0567, 0.3568)
+ -- (-0.0651, 0.3652)
+ -- (-0.0567, 0.3652)
+ -- (-0.0567, 0.3989)
+ -- (-0.0988, 0.3905)
+ .. controls (-0.1116, 0.4252) and (-0.1112, 0.4344) .. (-0.1492, 0.4409)
+ --cycle
+ ( 0.2869, 0.4351)
+ .. controls ( 0.2475, 0.4293) and ( 0.2234, 0.3681) .. ( 0.2795, 0.3485)
+ -- ( 0.3048, 0.3905)
+ .. controls ( 0.3028, 0.3760) and ( 0.3013, 0.3442) .. ( 0.3278, 0.3583)
+ .. controls ( 0.3557, 0.3731) and ( 0.3437, 0.4227) .. ( 0.3046, 0.4338)
+ .. controls ( 0.2985, 0.4356) and ( 0.2925, 0.4359) .. ( 0.2869, 0.4351)
+ --cycle
+ (-0.5352, 0.4038)
+ .. controls (-0.5519, 0.4042) and (-0.5689, 0.3932) .. (-0.5778, 0.3652)
+ -- (-0.5358, 0.3652)
+ -- (-0.5442, 0.3149)
+ -- (-0.6030, 0.3401)
+ .. controls (-0.6099, 0.3078) and (-0.5933, 0.2580) .. (-0.5523, 0.2636)
+ .. controls (-0.5251, 0.2673) and (-0.4980, 0.3070) .. (-0.4910, 0.3316)
+ .. controls (-0.4799, 0.3705) and (-0.5072, 0.4030) .. (-0.5352, 0.4038)
+ --cycle
+ ( 0.4056, 0.3989)
+ .. controls ( 0.4011, 0.3650) and ( 0.4064, 0.3627) .. ( 0.4392, 0.3568)
+ .. controls ( 0.4340, 0.3865) and ( 0.4336, 0.3876) .. ( 0.4056, 0.3989)
+ --cycle
+ (-0.2248, 0.3737)
+ -- (-0.2164, 0.3401)
+ -- (-0.1828, 0.3568)
+ --cycle
+ ( 0.4558, 0.3414)
+ .. controls ( 0.4424, 0.3419) and ( 0.4339, 0.3363) .. ( 0.4224, 0.3316)
+ -- ( 0.4340, 0.2885)
+ .. controls ( 0.4635, 0.2154) and ( 0.5405, 0.3381) .. ( 0.4558, 0.3414)
+ --cycle
+ (-0.3179, 0.3382)
+ .. controls (-0.3270, 0.3401) and (-0.3357, 0.3403) .. (-0.3425, 0.3381)
+ .. controls (-0.3762, 0.3275) and (-0.3957, 0.2970) .. (-0.4013, 0.2644)
+ -- (-0.3341, 0.2892)
+ .. controls (-0.3207, 0.2121) and (-0.2456, 0.2402) .. (-0.2545, 0.2892)
+ .. controls (-0.2586, 0.3110) and (-0.2906, 0.3324) .. (-0.3179, 0.3382)
+ --cycle
+ ( 0.3611, 0.3359)
+ .. controls ( 0.3110, 0.3372) and ( 0.2179, 0.3015) .. ( 0.2626, 0.2392)
+ -- ( 0.2207, 0.2056)
+ -- ( 0.2123, 0.2308)
+ -- ( 0.1955, 0.2308)
+ .. controls ( 0.1691, 0.1342) and ( 0.2461, 0.1660) .. ( 0.2711, 0.1678)
+ .. controls ( 0.3105, 0.1704) and ( 0.3525, 0.1635) .. ( 0.3836, 0.2013)
+ .. controls ( 0.4000, 0.2213) and ( 0.3935, 0.2469) .. ( 0.3552, 0.2434)
+ .. controls ( 0.3256, 0.2408) and ( 0.3193, 0.2282) .. ( 0.3048, 0.2056)
+ .. controls ( 0.2927, 0.2510) and ( 0.2970, 0.2476) .. ( 0.3131, 0.2897)
+ -- ( 0.3552, 0.2728)
+ -- ( 0.3636, 0.2980)
+ -- ( 0.3719, 0.2644)
+ .. controls ( 0.4287, 0.2825) and ( 0.4092, 0.3226) .. ( 0.3795, 0.3331)
+ .. controls ( 0.3746, 0.3349) and ( 0.3683, 0.3357) .. ( 0.3611, 0.3359)
+ --cycle
+ (-0.7326, 0.3304)
+ .. controls (-0.7558, 0.2996) and (-0.7303, 0.2839) .. (-0.7147, 0.2917)
+ .. controls (-0.6982, 0.3000) and (-0.6941, 0.3349) .. (-0.7326, 0.3304)
+ --cycle
+ ( 0.5316, 0.3064)
+ .. controls ( 0.5417, 0.2779) and ( 0.5439, 0.2772) .. ( 0.5737, 0.2813)
+ .. controls ( 0.5591, 0.3056) and ( 0.5600, 0.3049) .. ( 0.5316, 0.3064)
+ --cycle
+ ( 0.7063, 0.2870)
+ .. controls ( 0.6995, 0.2880) and ( 0.6923, 0.2874) .. ( 0.6840, 0.2844)
+ .. controls ( 0.6531, 0.2731) and ( 0.6307, 0.2270) .. ( 0.6242, 0.1972)
+ -- ( 0.6914, 0.2056)
+ -- ( 0.6914, 0.2475)
+ -- ( 0.7166, 0.2139)
+ -- ( 0.7670, 0.2224)
+ -- ( 0.7670, 0.1887)
+ -- ( 0.8091, 0.1804)
+ -- ( 0.7755, 0.1047)
+ -- ( 0.8343, 0.1131)
+ .. controls ( 0.8409, 0.1435) and ( 0.8409, 0.1473) .. ( 0.8679, 0.1636)
+ .. controls ( 0.8652, 0.1490) and ( 0.8470, 0.0581) .. ( 0.8896, 0.0809)
+ .. controls ( 0.9211, 0.0965) and ( 0.9103, 0.1720) .. ( 0.8896, 0.1909)
+ .. controls ( 0.8668, 0.2094) and ( 0.8421, 0.2029) .. ( 0.8174, 0.1972)
+ .. controls ( 0.8135, 0.2098) and ( 0.8137, 0.2162) .. ( 0.8041, 0.2272)
+ .. controls ( 0.7922, 0.2408) and ( 0.7748, 0.2458) .. ( 0.7601, 0.2552)
+ .. controls ( 0.7419, 0.2667) and ( 0.7266, 0.2841) .. ( 0.7063, 0.2870)
+ --cycle
+ ( 0.6242, 0.1972)
+ .. controls ( 0.6061, 0.1985) and ( 0.5845, 0.2023) .. ( 0.5690, 0.1902)
+ .. controls ( 0.5426, 0.1695) and ( 0.5550, 0.1248) .. ( 0.5909, 0.1110)
+ .. controls ( 0.6168, 0.1011) and ( 0.6421, 0.1125) .. ( 0.6679, 0.1215)
+ .. controls ( 0.6663, 0.1076) and ( 0.6658, 0.0850) .. ( 0.6679, 0.0720)
+ .. controls ( 0.6961,-0.0135) and ( 0.8163, 0.0895) .. ( 0.7250, 0.1215)
+ -- ( 0.6998, 0.0795)
+ -- ( 0.7166, 0.1299)
+ -- ( 0.6830, 0.1804)
+ -- ( 0.6578, 0.1636)
+ --cycle
+ ( 0.0950, 0.2671)
+ .. controls ( 0.0367, 0.2427) and ( 0.0851, 0.1985) .. ( 0.1112, 0.2040)
+ .. controls ( 0.1427, 0.2110) and ( 0.1597, 0.2672) .. ( 0.0950, 0.2671)
+ --cycle
+ (-0.0988, 0.2609)
+ .. controls (-0.1426, 0.2672) and (-0.2761, 0.1879) .. (-0.1828, 0.1551)
+ -- (-0.1743, 0.1972)
+ -- (-0.1240, 0.1804)
+ -- (-0.0904, 0.2308)
+ -- (-0.1071, 0.1720)
+ .. controls (-0.0221, 0.1543) and (-0.0435, 0.2528) .. (-0.0988, 0.2609)
+ --cycle
+ (-0.8142, 0.2071)
+ .. controls (-0.8258, 0.2070) and (-0.8375, 0.2012) .. (-0.8466, 0.1869)
+ .. controls (-0.8534, 0.1760) and (-0.8533, 0.1669) .. (-0.8551, 0.1551)
+ -- (-0.7963, 0.1636)
+ -- (-0.8132, 0.1215)
+ .. controls (-0.8020, 0.1234) and (-0.7923, 0.1232) .. (-0.7821, 0.1301)
+ .. controls (-0.7447, 0.1557) and (-0.7793, 0.2072) .. (-0.8142, 0.2071)
+ --cycle
+ (-0.2584, 0.2056)
+ -- (-0.2584, 0.1636)
+ .. controls (-0.2445, 0.1848) and (-0.2445, 0.1843) .. (-0.2584, 0.2056)
+ --cycle
+ (-0.7132, 0.1953)
+ .. controls (-0.7373, 0.1910) and (-0.7568, 0.1647) .. (-0.7459, 0.1215)
+ -- (-0.6955, 0.1551)
+ .. controls (-0.7015, 0.1043) and (-0.7057, 0.0835) .. (-0.6450, 0.0963)
+ -- (-0.6535, 0.0711)
+ .. controls (-0.5898, 0.0580) and (-0.5907, 0.1071) .. (-0.6081, 0.1249)
+ .. controls (-0.6203, 0.1374) and (-0.6375, 0.1370) .. (-0.6535, 0.1383)
+ .. controls (-0.6607, 0.1823) and (-0.6892, 0.1997) .. (-0.7132, 0.1953)
+ --cycle
+ (-0.4097, 0.1720)
+ -- (-0.3845, 0.1215)
+ -- (-0.4097, 0.0963)
+ -- (-0.4349, 0.1047)
+ .. controls (-0.4598,-0.0134) and (-0.2772, 0.1076) .. (-0.3690, 0.1621)
+ .. controls (-0.3821, 0.1699) and (-0.3951, 0.1703) .. (-0.4097, 0.1720)
+ --cycle
+ ( 0.4374, 0.1711)
+ .. controls ( 0.4200, 0.1682) and ( 0.4016, 0.1543) .. ( 0.3888, 0.1299)
+ -- ( 0.4477, 0.1299)
+ .. controls ( 0.4703, 0.1056) and ( 0.4891, 0.1252) .. ( 0.4798, 0.1463)
+ .. controls ( 0.4711, 0.1661) and ( 0.4548, 0.1741) .. ( 0.4374, 0.1711)
+ --cycle
+ (-0.4594, 0.1707)
+ .. controls (-0.4648, 0.1719) and (-0.4705, 0.1718) .. (-0.4752, 0.1698)
+ .. controls (-0.4878, 0.1646) and (-0.4954, 0.1508) .. (-0.4982, 0.1382)
+ .. controls (-0.5096, 0.0875) and (-0.4448, 0.0609) .. (-0.4602, 0.1299)
+ .. controls (-0.4304, 0.1504) and (-0.4433, 0.1669) .. (-0.4594, 0.1707)
+ --cycle
+ (-0.0230, 0.1592)
+ .. controls (-0.0727, 0.1609) and (-0.0799, 0.1002) .. (-0.1492, 0.0795)
+ -- (-0.1576, 0.0374)
+ .. controls (-0.1940, 0.0779) and (-0.1965, 0.0894) .. (-0.2500, 0.0711)
+ -- (-0.2584, 0.0795)
+ -- (-0.2332, 0.1383)
+ .. controls (-0.2779, 0.1347) and (-0.3158, 0.0997) .. (-0.2855, 0.0563)
+ .. controls (-0.2695, 0.0332) and (-0.2481, 0.0337) .. (-0.2256, 0.0248)
+ .. controls (-0.1803, 0.0069) and (-0.1541,-0.0311) .. (-0.1155, 0.0290)
+ .. controls (-0.0607, 0.0067) and (-0.0553,-0.0150) .. (-0.0307,-0.0232)
+ .. controls ( 0.0157,-0.0389) and ( 0.0524, 0.0035) .. ( 0.0442, 0.0543)
+ .. controls ( 0.0843, 0.0613) and ( 0.1010, 0.0937) .. ( 0.0727, 0.1263)
+ .. controls ( 0.0598, 0.1414) and (-0.0030, 0.1586) .. (-0.0230, 0.1592)
+ --cycle
+ (-0.0230, 0.1215)
+ -- ( 0.0442, 0.1131)
+ .. controls ( 0.0289, 0.0705) and ( 0.0228, 0.0356) .. (-0.0230, 0.0207)
+ .. controls (-0.0339, 0.0543) and (-0.0383, 0.0572) .. (-0.0735, 0.0543)
+ -- (-0.0819, 0.0627)
+ --cycle
+ (-0.8973, 0.1131)
+ .. controls (-0.9051, 0.0492) and (-0.8679, 0.0676) .. (-0.8321, 0.0457)
+ .. controls (-0.7996, 0.0258) and (-0.7906,-0.0272) .. (-0.7039,-0.0046)
+ .. controls (-0.6977,-0.0167) and (-0.6964,-0.0237) .. (-0.6846,-0.0331)
+ .. controls (-0.6146,-0.0891) and (-0.5741, 0.0485) .. (-0.6619, 0.0396)
+ .. controls (-0.6723, 0.0384) and (-0.6856, 0.0326) .. (-0.6955, 0.0290)
+ .. controls (-0.7145, 0.0487) and (-0.7442, 0.0435) .. (-0.7712, 0.0459)
+ -- (-0.7771, 0.0746)
+ --cycle
+ ( 0.7839, 0.0627)
+ .. controls ( 0.7798, 0.0513) and ( 0.7748, 0.0421) .. ( 0.7752, 0.0292)
+ .. controls ( 0.7776,-0.0409) and ( 0.8888, 0.0073) .. ( 0.8169, 0.0493)
+ .. controls ( 0.8064, 0.0555) and ( 0.7952, 0.0587) .. ( 0.7839, 0.0627)
+ --cycle
+ ( 0.6399, 0.0543)
+ .. controls ( 0.6341, 0.0555) and ( 0.6275, 0.0553) .. ( 0.6207, 0.0536)
+ .. controls ( 0.5899, 0.0092) and ( 0.6489,-0.0145) .. ( 0.6606, 0.0149)
+ .. controls ( 0.6690, 0.0359) and ( 0.6576, 0.0510) .. ( 0.6399, 0.0543)
+ --cycle
+ ( 0.2228, 0.0528)
+ .. controls ( 0.1887, 0.0319) and ( 0.2131,-0.0076) .. ( 0.2361,-0.0078)
+ .. controls ( 0.2619,-0.0080) and ( 0.2726, 0.0432) .. ( 0.2228, 0.0528)
+ --cycle
+ ( 0.4509, 0.0479)
+ .. controls ( 0.4394, 0.0460) and ( 0.4290, 0.0332) .. ( 0.4224, 0.0038)
+ .. controls ( 0.3826, 0.0304) and ( 0.3797, 0.0371) .. ( 0.3300, 0.0301)
+ .. controls ( 0.3175, 0.0283) and ( 0.3021, 0.0266) .. ( 0.2915, 0.0192)
+ .. controls ( 0.2691, 0.0036) and ( 0.2444,-0.0690) .. ( 0.3552,-0.0718)
+ -- ( 0.3131,-0.0046)
+ .. controls ( 0.3436,-0.0165) and ( 0.3418,-0.0171) .. ( 0.3719,-0.0046)
+ .. controls ( 0.3961,-0.0513) and ( 0.4113,-0.0431) .. ( 0.4560,-0.0298)
+ -- ( 0.4560, 0.0038)
+ -- ( 0.4812,-0.0466)
+ .. controls ( 0.4281,-0.0863) and ( 0.4953,-0.1091) .. ( 0.5137,-0.0706)
+ .. controls ( 0.5296,-0.0376) and ( 0.4853, 0.0538) .. ( 0.4509, 0.0479)
+ --cycle
+ (-0.9381, 0.0440)
+ .. controls (-0.9573, 0.0465) and (-0.9752, 0.0361) .. (-0.9800, 0.0016)
+ -- (-0.9774,-0.0032)
+ -- (-0.9308, 0.0123)
+ .. controls (-0.9260, 0.0012) and (-0.9218,-0.0135) .. (-0.9103,-0.0200)
+ .. controls (-0.8939,-0.0290) and (-0.8783,-0.0112) .. (-0.8895, 0.0115)
+ .. controls (-0.8962, 0.0252) and (-0.9176, 0.0414) .. (-0.9381, 0.0440)
+ --cycle
+ ( 0.9435, 0.0207)
+ -- ( 0.9184, 0.0123)
+ -- ( 0.9435,-0.0046)
+ --cycle
+ ( 0.8999,-0.0129)
+ .. controls ( 0.9000,-0.0216) and ( 0.8974,-0.0282) .. ( 0.8999,-0.0376)
+ .. controls ( 0.9043,-0.0955) and ( 0.9800,-0.0453) .. ( 0.9254,-0.0191)
+ .. controls ( 0.9173,-0.0151) and ( 0.9098,-0.0148) .. ( 0.8999,-0.0129)
+ --cycle
+ (-0.5187,-0.0249)
+ .. controls (-0.5448,-0.0284) and (-0.5586,-0.0592) .. (-0.5611,-0.0886)
+ -- (-0.5022,-0.0718)
+ .. controls (-0.5038,-0.1199) and (-0.4832,-0.1244) .. (-0.4434,-0.1054)
+ -- (-0.4349,-0.1139)
+ -- (-0.5106,-0.1811)
+ -- (-0.5442,-0.1475)
+ -- (-0.5274,-0.1139)
+ .. controls (-0.5482,-0.1103) and (-0.5717,-0.1068) .. (-0.5806,-0.1326)
+ .. controls (-0.5943,-0.1714) and (-0.5235,-0.2179) .. (-0.5014,-0.2194)
+ .. controls (-0.4612,-0.2223) and (-0.4187,-0.1658) .. (-0.4108,-0.1306)
+ .. controls (-0.4075,-0.1185) and (-0.4054,-0.1026) .. (-0.4108,-0.0911)
+ .. controls (-0.4193,-0.0753) and (-0.4422,-0.0688) .. (-0.4571,-0.0576)
+ -- (-0.4884,-0.0315)
+ .. controls (-0.4999,-0.0256) and (-0.5100,-0.0237) .. (-0.5187,-0.0249)
+ --cycle
+ ( 0.2098,-0.0382)
+ .. controls ( 0.1959,-0.0434) and ( 0.1851,-0.0663) .. ( 0.1925,-0.0882)
+ .. controls ( 0.2035,-0.1206) and ( 0.2830,-0.1639) .. ( 0.2964,-0.0882)
+ .. controls ( 0.2773,-0.0896) and ( 0.2586,-0.0934) .. ( 0.2447,-0.0768)
+ .. controls ( 0.2363,-0.0666) and ( 0.2352,-0.0463) .. ( 0.2242,-0.0396)
+ .. controls ( 0.2194,-0.0367) and ( 0.2145,-0.0365) .. ( 0.2098,-0.0382)
+ --cycle
+ (-0.2960,-0.0452)
+ .. controls (-0.3231,-0.0465) and (-0.3530,-0.0602) .. (-0.3592,-0.0683)
+ .. controls (-0.3758,-0.0903) and (-0.3560,-0.1221) .. (-0.3845,-0.1979)
+ -- (-0.4013,-0.1727)
+ -- (-0.4182,-0.1727)
+ .. controls (-0.4336,-0.2291) and (-0.4124,-0.2782) .. (-0.3803,-0.2577)
+ .. controls (-0.3601,-0.2446) and (-0.3538,-0.2099) .. (-0.3392,-0.1970)
+ .. controls (-0.3137,-0.1743) and (-0.2596,-0.2064) .. (-0.2752,-0.1306)
+ -- (-0.3257,-0.1558)
+ -- (-0.3341,-0.1475)
+ -- (-0.3341,-0.0970)
+ -- (-0.2500,-0.0970)
+ .. controls (-0.2447,-0.0551) and (-0.2689,-0.0439) .. (-0.2960,-0.0452)
+ --cycle
+ ( 0.6563,-0.0662)
+ .. controls ( 0.6458,-0.0662) and ( 0.6374,-0.0668) .. ( 0.6332,-0.0685)
+ .. controls ( 0.5970,-0.0835) and ( 0.6057,-0.1189) .. ( 0.6332,-0.1391)
+ -- ( 0.6493,-0.0970)
+ -- ( 0.6662,-0.0970)
+ .. controls ( 0.6850,-0.1248) and ( 0.6940,-0.1204) .. ( 0.7250,-0.1139)
+ -- ( 0.7081,-0.1475)
+ .. controls ( 0.7837,-0.1829) and ( 0.7876,-0.1033) .. ( 0.7490,-0.0804)
+ .. controls ( 0.7374,-0.0735) and ( 0.6877,-0.0664) .. ( 0.6563,-0.0662)
+ --cycle
+ ( 0.7081,-0.1475)
+ .. controls ( 0.6742,-0.1429) and ( 0.6720,-0.1483) .. ( 0.6662,-0.1811)
+ .. controls ( 0.6162,-0.1289) and ( 0.6115,-0.1833) .. ( 0.6244,-0.2044)
+ .. controls ( 0.6426,-0.2346) and ( 0.6823,-0.2320) .. ( 0.7016,-0.2044)
+ .. controls ( 0.7147,-0.1858) and ( 0.7107,-0.1681) .. ( 0.7081,-0.1475)
+ --cycle
+ ( 0.0544,-0.0769)
+ .. controls ( 0.0466,-0.0773) and ( 0.0382,-0.0797) .. ( 0.0297,-0.0845)
+ -- (-0.0147,-0.1139)
+ .. controls (-0.0057,-0.1396) and (-0.0069,-0.1385) .. ( 0.0189,-0.1475)
+ .. controls (-0.0074,-0.2147) and ( 0.0346,-0.2081) .. ( 0.0553,-0.1870)
+ .. controls ( 0.0667,-0.1752) and ( 0.0961,-0.1299) .. ( 0.0958,-0.1139)
+ .. controls ( 0.0955,-0.0925) and ( 0.0776,-0.0759) .. ( 0.0544,-0.0769)
+ --cycle
+ ( 0.3572,-0.0881)
+ .. controls ( 0.3447,-0.0867) and ( 0.3392,-0.1053) .. ( 0.3450,-0.1208)
+ .. controls ( 0.3587,-0.1579) and ( 0.4169,-0.1493) .. ( 0.4239,-0.1208)
+ .. controls ( 0.4287,-0.1010) and ( 0.4113,-0.0745) .. ( 0.3888,-0.0970)
+ -- ( 0.3719,-0.0970)
+ .. controls ( 0.3663,-0.0912) and ( 0.3613,-0.0886) .. ( 0.3572,-0.0881)
+ --cycle
+ ( 0.7250,-0.1054)
+ -- ( 0.7333,-0.1054)
+ -- ( 0.7333,-0.1139)
+ --cycle
+ (-0.7357,-0.1221)
+ .. controls (-0.7405,-0.1203) and (-0.7472,-0.1201) .. (-0.7562,-0.1227)
+ .. controls (-0.7721,-0.1527) and (-0.7463,-0.1606) .. (-0.7339,-0.1532)
+ .. controls (-0.7244,-0.1475) and (-0.7214,-0.1275) .. (-0.7357,-0.1221)
+ --cycle
+ (-0.8606,-0.1378)
+ .. controls (-0.8718,-0.1386) and (-0.8832,-0.1446) .. (-0.8941,-0.1518)
+ -- (-0.8728,-0.1897)
+ -- (-0.8468,-0.1811)
+ -- (-0.8613,-0.2102)
+ -- (-0.8317,-0.2631)
+ .. controls (-0.7953,-0.2270) and (-0.7967,-0.1536) .. (-0.8471,-0.1391)
+ .. controls (-0.8514,-0.1378) and (-0.8560,-0.1374) .. (-0.8606,-0.1378)
+ --cycle
+ ( 0.9187,-0.1555)
+ .. controls ( 0.9083,-0.1585) and ( 0.8971,-0.1627) .. ( 0.8847,-0.1675)
+ .. controls ( 0.8669,-0.1743) and ( 0.8469,-0.1785) .. ( 0.8399,-0.1989)
+ .. controls ( 0.8307,-0.2247) and ( 0.8481,-0.2329) .. ( 0.8679,-0.2399)
+ -- ( 0.8847,-0.2063)
+ .. controls ( 0.8863,-0.2068) and ( 0.8871,-0.2069) .. ( 0.8886,-0.2074)
+ --cycle
+ ( 0.8679,-0.2399)
+ .. controls ( 0.8663,-0.2432) and ( 0.8651,-0.2468) .. ( 0.8637,-0.2502)
+ -- ( 0.8693,-0.2405)
+ .. controls ( 0.8687,-0.2402) and ( 0.8685,-0.2401) .. ( 0.8679,-0.2399)
+ --cycle
+ ( 0.4392,-0.1558)
+ -- ( 0.4332,-0.1807)
+ .. controls ( 0.4281,-0.2431) and ( 0.5089,-0.2120) .. ( 0.4618,-0.1688)
+ .. controls ( 0.4519,-0.1597) and ( 0.4457,-0.1593) .. ( 0.4392,-0.1558)
+ --cycle
+ (-0.6846,-0.1952)
+ .. controls (-0.6966,-0.1951) and (-0.7082,-0.2013) .. (-0.7157,-0.2171)
+ .. controls (-0.7203,-0.2268) and (-0.7199,-0.2378) .. (-0.7207,-0.2483)
+ -- (-0.6787,-0.2399)
+ -- (-0.6703,-0.2735)
+ .. controls (-0.6096,-0.2523) and (-0.6488,-0.1955) .. (-0.6846,-0.1952)
+ --cycle
+ (-0.1120,-0.2035)
+ .. controls (-0.1188,-0.2048) and (-0.1255,-0.2071) .. (-0.1323,-0.2089)
+ .. controls (-0.1785,-0.2217) and (-0.2021,-0.2285) .. (-0.1912,-0.2819)
+ -- (-0.0988,-0.2483)
+ -- (-0.0651,-0.2740)
+ .. controls (-0.0333,-0.3228) and (-0.0165,-0.2917) .. (-0.0209,-0.2740)
+ .. controls (-0.0243,-0.2616) and (-0.0384,-0.2481) .. (-0.0474,-0.2386)
+ .. controls (-0.0590,-0.2264) and (-0.0744,-0.2085) .. (-0.0911,-0.2040)
+ .. controls (-0.0982,-0.2021) and (-0.1052,-0.2023) .. (-0.1120,-0.2035)
+ --cycle
+ ( 0.1647,-0.2053)
+ .. controls ( 0.1471,-0.2058) and ( 0.1297,-0.2092) .. ( 0.1164,-0.2148)
+ .. controls ( 0.0833,-0.2632) and ( 0.1207,-0.3872) .. ( 0.1933,-0.3346)
+ .. controls ( 0.2031,-0.3275) and ( 0.2109,-0.3165) .. ( 0.2178,-0.3068)
+ .. controls ( 0.2722,-0.2297) and ( 0.2177,-0.2039) .. ( 0.1647,-0.2053)
+ --cycle
+ ( 0.3262,-0.2328)
+ .. controls ( 0.3073,-0.2617) and ( 0.3314,-0.2707) .. ( 0.3420,-0.2638)
+ .. controls ( 0.3522,-0.2572) and ( 0.3585,-0.2285) .. ( 0.3262,-0.2328)
+ --cycle
+ ( 0.1534,-0.2399)
+ -- ( 0.2039,-0.2483)
+ -- ( 0.1534,-0.2987)
+ --cycle
+ ( 0.5217,-0.2636)
+ .. controls ( 0.5071,-0.2632) and ( 0.4918,-0.2708) .. ( 0.4798,-0.2909)
+ .. controls ( 0.4713,-0.3051) and ( 0.4736,-0.3094) .. ( 0.4728,-0.3240)
+ -- ( 0.4812,-0.3240)
+ -- ( 0.4812,-0.3324)
+ -- ( 0.5232,-0.2987)
+ -- ( 0.5232,-0.3492)
+ .. controls ( 0.6028,-0.3358) and ( 0.5655,-0.2645) .. ( 0.5217,-0.2636)
+ --cycle
+ ( 0.4812,-0.3324)
+ -- ( 0.4728,-0.3240)
+ .. controls ( 0.4525,-0.3209) and ( 0.4056,-0.3074) .. ( 0.3892,-0.3106)
+ .. controls ( 0.3596,-0.3163) and ( 0.3503,-0.3437) .. ( 0.3892,-0.3660)
+ -- ( 0.3972,-0.3407)
+ .. controls ( 0.4281,-0.3611) and ( 0.4279,-0.3612) .. ( 0.4644,-0.3576)
+ -- ( 0.4560,-0.4080)
+ .. controls ( 0.5104,-0.3986) and ( 0.5053,-0.3736) .. ( 0.4812,-0.3324)
+ --cycle
+ ( 0.7282,-0.2775)
+ .. controls ( 0.7176,-0.2768) and ( 0.7066,-0.2782) .. ( 0.6965,-0.2822)
+ .. controls ( 0.6458,-0.3532) and ( 0.7574,-0.3899) .. ( 0.7782,-0.3306)
+ .. controls ( 0.7887,-0.3013) and ( 0.7602,-0.2797) .. ( 0.7282,-0.2775)
+ --cycle
+ (-0.2465,-0.2903)
+ .. controls (-0.2987,-0.3042) and (-0.2344,-0.4071) .. (-0.2306,-0.4102)
+ .. controls (-0.1938,-0.4396) and (-0.1663,-0.4010) .. (-0.1299,-0.4027)
+ .. controls (-0.1140,-0.4034) and (-0.0666,-0.4182) .. (-0.0557,-0.3820)
+ .. controls (-0.0504,-0.3644) and (-0.0676,-0.3334) .. (-0.0988,-0.3744)
+ -- (-0.1181,-0.3407)
+ -- (-0.1308,-0.3168)
+ .. controls (-0.1675,-0.2582) and (-0.1759,-0.3435) .. (-0.1781,-0.3492)
+ .. controls (-0.1841,-0.3653) and (-0.1898,-0.3700) .. (-0.1996,-0.3828)
+ -- (-0.2164,-0.2903)
+ .. controls (-0.2291,-0.2881) and (-0.2389,-0.2883) .. (-0.2465,-0.2903)
+ --cycle
+ (-0.5947,-0.3156)
+ -- (-0.6030,-0.3407)
+ -- (-0.5778,-0.3240)
+ --cycle
+ (-0.0014,-0.3194)
+ .. controls (-0.0278,-0.3131) and (-0.0544,-0.3497) .. (-0.0058,-0.3694)
+ .. controls ( 0.0049,-0.3738) and ( 0.0162,-0.3735) .. ( 0.0273,-0.3744)
+ .. controls ( 0.0265,-0.3636) and ( 0.0269,-0.3522) .. ( 0.0223,-0.3420)
+ .. controls ( 0.0163,-0.3283) and ( 0.0074,-0.3214) .. (-0.0014,-0.3194)
+ --cycle
+ (-0.6508,-0.3284)
+ .. controls (-0.6656,-0.3290) and (-0.6816,-0.3373) .. (-0.6955,-0.3576)
+ .. controls (-0.7159,-0.3441) and (-0.7363,-0.3292) .. (-0.7624,-0.3378)
+ .. controls (-0.7705,-0.3405) and (-0.7771,-0.3450) .. (-0.7829,-0.3501)
+ -- (-0.7599,-0.3912)
+ -- (-0.7543,-0.3744)
+ -- (-0.6619,-0.4164)
+ -- (-0.6619,-0.3660)
+ -- (-0.6367,-0.4164)
+ .. controls (-0.5723,-0.3945) and (-0.6064,-0.3266) .. (-0.6508,-0.3284)
+ --cycle
+ (-0.5287,-0.3512)
+ .. controls (-0.5489,-0.3498) and (-0.5690,-0.3591) .. (-0.5764,-0.3751)
+ .. controls (-0.5966,-0.4192) and (-0.5398,-0.3912) .. (-0.5274,-0.3828)
+ -- (-0.5190,-0.4500)
+ -- (-0.5358,-0.4333)
+ -- (-0.5358,-0.4248)
+ -- (-0.5611,-0.4248)
+ .. controls (-0.5664,-0.4641) and (-0.5605,-0.4735) .. (-0.5442,-0.5088)
+ -- (-0.5274,-0.5088)
+ .. controls (-0.4972,-0.4701) and (-0.4647,-0.4466) .. (-0.4806,-0.3915)
+ .. controls (-0.4882,-0.3649) and (-0.5085,-0.3527) .. (-0.5287,-0.3512)
+ --cycle
+ ( 0.5485,-0.3594)
+ .. controls ( 0.5504,-0.3686) and ( 0.5513,-0.3797) .. ( 0.5560,-0.3899)
+ .. controls ( 0.5831,-0.4490) and ( 0.6446,-0.3809) .. ( 0.5811,-0.3594)
+ .. controls ( 0.5706,-0.3579) and ( 0.5594,-0.3583) .. ( 0.5485,-0.3594)
+ --cycle
+ ( 0.3311,-0.3646)
+ .. controls ( 0.3201,-0.3659) and ( 0.3103,-0.3791) .. ( 0.3084,-0.3917)
+ .. controls ( 0.3035,-0.4255) and ( 0.3481,-0.5315) .. ( 0.4140,-0.4669)
+ .. controls ( 0.4439,-0.4932) and ( 0.4962,-0.5278) .. ( 0.5388,-0.5107)
+ .. controls ( 0.5684,-0.4989) and ( 0.5806,-0.4516) .. ( 0.5232,-0.4333)
+ -- ( 0.5232,-0.4669)
+ .. controls ( 0.4932,-0.4550) and ( 0.4949,-0.4563) .. ( 0.4644,-0.4669)
+ -- ( 0.4560,-0.4248)
+ -- ( 0.4224,-0.4417)
+ -- ( 0.3888,-0.4080)
+ -- ( 0.3617,-0.4500)
+ -- ( 0.3617,-0.4080)
+ .. controls ( 0.3546,-0.3735) and ( 0.3422,-0.3632) .. ( 0.3311,-0.3646)
+ --cycle
+ ( 0.0862,-0.3828)
+ .. controls ( 0.0086,-0.4104) and ( 0.1258,-0.4856) .. ( 0.1453,-0.4236)
+ .. controls ( 0.1495,-0.4116) and ( 0.1465,-0.4028) .. ( 0.1453,-0.3912)
+ -- ( 0.0946,-0.4080)
+ --cycle
+ (-0.3761,-0.4056)
+ .. controls (-0.4460,-0.4310) and (-0.4022,-0.4833) .. (-0.3686,-0.4756)
+ .. controls (-0.3385,-0.4686) and (-0.3150,-0.4102) .. (-0.3761,-0.4056)
+ --cycle
+ (-0.1407,-0.4164)
+ .. controls (-0.1510,-0.4360) and (-0.1606,-0.4518) .. (-0.1524,-0.4748)
+ .. controls (-0.1401,-0.5093) and (-0.0958,-0.5218) .. (-0.0687,-0.4961)
+ .. controls (-0.0363,-0.4652) and (-0.0685,-0.4086) .. (-0.0988,-0.4753)
+ --cycle
+ (-0.7345,-0.4223)
+ .. controls (-0.7375,-0.4223) and (-0.7393,-0.4233) .. (-0.7417,-0.4237)
+ -- (-0.7259,-0.4519)
+ -- (-0.7123,-0.4248)
+ .. controls (-0.7212,-0.4230) and (-0.7284,-0.4222) .. (-0.7345,-0.4223)
+ --cycle
+ (-0.6450,-0.4333)
+ -- (-0.6283,-0.4753)
+ -- (-0.6959,-0.5053)
+ -- (-0.6728,-0.5467)
+ .. controls (-0.6597,-0.5415) and (-0.6464,-0.5310) .. (-0.6353,-0.5238)
+ .. controls (-0.6229,-0.5161) and (-0.6029,-0.5082) .. (-0.5949,-0.4962)
+ .. controls (-0.5673,-0.4552) and (-0.6118,-0.4359) .. (-0.6450,-0.4333)
+ --cycle
+ ( 0.7515,-0.4421)
+ .. controls ( 0.7404,-0.4518) and ( 0.7330,-0.4660) .. ( 0.7289,-0.4814)
+ -- ( 0.7518,-0.4421)
+ .. controls ( 0.7518,-0.4422) and ( 0.7516,-0.4421) .. ( 0.7515,-0.4421)
+ --cycle
+ (-0.7203,-0.4618)
+ -- (-0.7004,-0.4973)
+ .. controls (-0.6944,-0.4774) and (-0.6993,-0.4695) .. (-0.7203,-0.4618)
+ --cycle
+ ( 0.1694,-0.4873)
+ .. controls ( 0.1182,-0.4851) and ( 0.0606,-0.5165) .. ( 0.1114,-0.5509)
+ .. controls ( 0.1043,-0.5681) and ( 0.0968,-0.5809) .. ( 0.1030,-0.6004)
+ .. controls ( 0.1160,-0.6424) and ( 0.2092,-0.6560) .. ( 0.1955,-0.5761)
+ -- ( 0.1450,-0.6013)
+ -- ( 0.1199,-0.5425)
+ -- ( 0.1282,-0.5341)
+ .. controls ( 0.1602,-0.5459) and ( 0.1584,-0.5438) .. ( 0.1871,-0.5257)
+ .. controls ( 0.1977,-0.5856) and ( 0.2311,-0.5564) .. ( 0.2301,-0.5337)
+ .. controls ( 0.2287,-0.5019) and ( 0.2002,-0.4885) .. ( 0.1694,-0.4873)
+ --cycle
+ ( 0.3143,-0.5168)
+ .. controls ( 0.2653,-0.5233) and ( 0.3123,-0.5809) .. ( 0.3334,-0.5398)
+ .. controls ( 0.3375,-0.5319) and ( 0.3370,-0.5251) .. ( 0.3384,-0.5168)
+ --cycle
+ ( 0.5821,-0.5172)
+ -- ( 0.5905,-0.5425)
+ .. controls ( 0.5223,-0.5546) and ( 0.5461,-0.6299) .. ( 0.5965,-0.6187)
+ .. controls ( 0.6116,-0.6153) and ( 0.6642,-0.5952) .. ( 0.6693,-0.5808)
+ .. controls ( 0.6859,-0.5354) and ( 0.6147,-0.5138) .. ( 0.5821,-0.5172)
+ --cycle
+ (-0.2667,-0.5315)
+ .. controls (-0.3091,-0.5364) and (-0.3818,-0.5868) .. (-0.3173,-0.6098)
+ .. controls (-0.3409,-0.7049) and (-0.2257,-0.7182) .. (-0.2332,-0.6265)
+ -- (-0.2752,-0.6434)
+ -- (-0.3173,-0.6013)
+ .. controls (-0.2964,-0.5962) and (-0.2716,-0.5851) .. (-0.2511,-0.5945)
+ .. controls (-0.2356,-0.6015) and (-0.2239,-0.6203) .. (-0.2131,-0.6252)
+ .. controls (-0.1929,-0.6345) and (-0.1822,-0.6134) .. (-0.1883,-0.5942)
+ .. controls (-0.1944,-0.5749) and (-0.2315,-0.5384) .. (-0.2508,-0.5323)
+ .. controls (-0.2552,-0.5310) and (-0.2606,-0.5308) .. (-0.2667,-0.5315)
+ --cycle
+ ( 0.5989,-0.5509)
+ -- ( 0.6073,-0.5509)
+ -- ( 0.6073,-0.5593)
+ --cycle
+ (-0.0485,-0.5624)
+ .. controls (-0.0662,-0.5623) and (-0.0842,-0.5741) .. (-0.0904,-0.6098)
+ -- (-0.0483,-0.6013)
+ .. controls (-0.0229,-0.6296) and ( 0.0007,-0.6067) .. (-0.0083,-0.5860)
+ .. controls (-0.0134,-0.5744) and (-0.0308,-0.5625) .. (-0.0485,-0.5624)
+ --cycle
+ (-0.4918,-0.5707)
+ .. controls (-0.5107,-0.5708) and (-0.5309,-0.5802) .. (-0.5442,-0.6013)
+ -- (-0.5778,-0.5846)
+ -- (-0.5862,-0.6181)
+ .. controls (-0.5249,-0.6353) and (-0.5439,-0.6523) .. (-0.4854,-0.6098)
+ -- (-0.4937,-0.6770)
+ -- (-0.5442,-0.6854)
+ -- (-0.5442,-0.7022)
+ .. controls (-0.4313,-0.7520) and (-0.4409,-0.6069) .. (-0.4465,-0.5962)
+ .. controls (-0.4550,-0.5800) and (-0.4728,-0.5707) .. (-0.4918,-0.5707)
+ --cycle
+ ( 0.3300,-0.5846)
+ -- ( 0.3300,-0.6098)
+ -- ( 0.3552,-0.6098)
+ -- ( 0.3552,-0.5846)
+ --cycle
+ ( 0.3726,-0.6221)
+ .. controls ( 0.2948,-0.6226) and ( 0.2995,-0.7351) .. ( 0.3726,-0.7632)
+ .. controls ( 0.4265,-0.7841) and ( 0.4818,-0.7181) .. ( 0.4056,-0.6938)
+ -- ( 0.3719,-0.7275)
+ -- ( 0.3719,-0.7027)
+ .. controls ( 0.3796,-0.6524) and ( 0.4200,-0.6879) .. ( 0.4450,-0.6792)
+ .. controls ( 0.4638,-0.6728) and ( 0.4659,-0.6470) .. ( 0.4510,-0.6352)
+ .. controls ( 0.4434,-0.6293) and ( 0.3843,-0.6220) .. ( 0.3726,-0.6221)
+ --cycle
+ ( 0.0022,-0.6349)
+ -- ( 0.0189,-0.6686)
+ -- ( 0.0189,-0.6349)
+ --cycle
+ (-0.1244,-0.6794)
+ .. controls (-0.1314,-0.6810) and (-0.1382,-0.6846) .. (-0.1441,-0.6904)
+ .. controls (-0.1605,-0.7066) and (-0.1526,-0.7279) .. (-0.1607,-0.7464)
+ -- (-0.1786,-0.7721)
+ .. controls (-0.1852,-0.7840) and (-0.1929,-0.8079) .. (-0.1728,-0.8122)
+ .. controls (-0.1636,-0.8142) and (-0.1224,-0.7844) .. (-0.1071,-0.7778)
+ -- (-0.1155,-0.7106)
+ -- (-0.0735,-0.7275)
+ .. controls (-0.0800,-0.6898) and (-0.1033,-0.6748) .. (-0.1244,-0.6794)
+ --cycle
+ ( 0.1863,-0.6829)
+ .. controls ( 0.1792,-0.6828) and ( 0.1712,-0.6837) .. ( 0.1618,-0.6854)
+ -- ( 0.1618,-0.7022)
+ -- ( 0.2123,-0.7442)
+ -- ( 0.1282,-0.7190)
+ .. controls ( 0.1336,-0.7372) and ( 0.1344,-0.7442) .. ( 0.1476,-0.7594)
+ .. controls ( 0.1538,-0.7664) and ( 0.1626,-0.7738) .. ( 0.1704,-0.7788)
+ .. controls ( 0.2127,-0.8054) and ( 0.2462,-0.7806) .. ( 0.2481,-0.7530)
+ .. controls ( 0.2492,-0.7403) and ( 0.2417,-0.7279) .. ( 0.2353,-0.7175)
+ .. controls ( 0.2199,-0.6926) and ( 0.2075,-0.6832) .. ( 0.1863,-0.6829)
+ --cycle
+ ( 0.5905,-0.6889)
+ .. controls ( 0.5769,-0.6869) and ( 0.5692,-0.6908) .. ( 0.5569,-0.6938)
+ -- ( 0.5569,-0.7106)
+ -- ( 0.5821,-0.7190)
+ .. controls ( 0.5823,-0.7234) and ( 0.5836,-0.7260) .. ( 0.5844,-0.7296)
+ -- ( 0.6046,-0.6948)
+ .. controls ( 0.6001,-0.6927) and ( 0.5958,-0.6898) .. ( 0.5905,-0.6889)
+ --cycle
+ (-0.0391,-0.7245)
+ .. controls (-0.0667,-0.7229) and (-0.0839,-0.7453) .. (-0.0753,-0.7947)
+ .. controls (-0.0651,-0.8529) and (-0.0367,-0.8483) .. (-0.0106,-0.8698)
+ -- ( 0.0547,-0.8704)
+ .. controls ( 0.0548,-0.8616) and ( 0.0567,-0.8516) .. ( 0.0610,-0.8367)
+ -- ( 0.0189,-0.8367)
+ .. controls ( 0.0024,-0.8190) and ( 0.0000,-0.8231) .. (-0.0230,-0.8283)
+ .. controls (-0.0380,-0.7923) and (-0.0454,-0.7840) .. (-0.0399,-0.7442)
+ -- (-0.0230,-0.7442)
+ -- (-0.0147,-0.7778)
+ -- ( 0.0694,-0.7778)
+ -- ( 0.0525,-0.8199)
+ -- ( 0.1424,-0.8295)
+ .. controls ( 0.1612,-0.8227) and ( 0.1619,-0.8006) .. ( 0.1424,-0.7877)
+ .. controls ( 0.1265,-0.7801) and ( 0.1112,-0.7837) .. ( 0.0946,-0.7877)
+ .. controls ( 0.0866,-0.7388) and ( 0.0598,-0.7228) .. ( 0.0189,-0.7526)
+ .. controls (-0.0021,-0.7351) and (-0.0224,-0.7255) .. (-0.0391,-0.7245)
+ --cycle
+ (-0.5605,-0.7471)
+ -- (-0.5242,-0.8116)
+ .. controls (-0.5223,-0.8116) and (-0.5211,-0.8114) .. (-0.5190,-0.8115)
+ -- (-0.5201,-0.8191)
+ -- (-0.4998,-0.8552)
+ .. controls (-0.4770,-0.8370) and (-0.4696,-0.8098) .. (-0.4974,-0.7815)
+ --cycle
+ (-0.3761,-0.7611)
+ -- (-0.3845,-0.7694)
+ -- (-0.3845,-0.7863)
+ -- (-0.3761,-0.7947)
+ -- (-0.3593,-0.7947)
+ -- (-0.3508,-0.7863)
+ -- (-0.3508,-0.7694)
+ -- (-0.3593,-0.7611)
+ --cycle
+ ( 0.3384,-0.8347)
+ .. controls ( 0.3106,-0.8395) and ( 0.2888,-0.8533) .. ( 0.2775,-0.8723)
+ -- ( 0.3442,-0.8729)
+ -- ( 0.3467,-0.8702)
+ -- ( 0.3561,-0.8730)
+ -- ( 0.4348,-0.8736)
+ .. controls ( 0.4345,-0.8731) and ( 0.4345,-0.8727) .. ( 0.4341,-0.8721)
+ .. controls ( 0.4186,-0.8512) and ( 0.3640,-0.8304) .. ( 0.3384,-0.8347)
+ --cycle
+ (-0.0904,-0.8535)
+ .. controls (-0.1018,-0.8579) and (-0.1087,-0.8586) .. (-0.1185,-0.8680)
+ .. controls (-0.1188,-0.8683) and (-0.1189,-0.8687) .. (-0.1192,-0.8690)
+ -- (-0.0904,-0.8692)
+ --cycle
+ (-0.3081,-0.8645)
+ .. controls (-0.3140,-0.8641) and (-0.3192,-0.8651) .. (-0.3238,-0.8672)
+ -- (-0.2954,-0.8675)
+ .. controls (-0.2996,-0.8660) and (-0.3039,-0.8648) .. (-0.3081,-0.8645)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx b/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
new file mode 100644
index 0000000000..0ea308c2f8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
@@ -0,0 +1,26 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/mountain}
+% This is an example of a terrain \spec{pic}ture.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/mountain/.pic={%
+ \path[draw=black,fill=white] (0,0) -- (.3,.9)--(.45,0) -- cycle;
+ \path[draw=black,fill=lightgray,pic actions]
+ (-.6 ,- .9) --
+ (-.3 , .3) --
+ ( 0, 0) --
+ ( .45, 0) --
+ ( .6 , -.9) -- cycle;
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx b/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
new file mode 100644
index 0000000000..04f935bd92
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
@@ -0,0 +1,695 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/mountains}
+% The style for mountains. The pattern is filled with a darker
+% brown, and outlines are not drawn. Note that the mountain pattern
+% is the same as the beach pattern, just with a different colour.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/mountains/.style={
+ draw=none,
+ fill={rgb,100:red,49;green,35;blue,1}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/mountains}
+% And the mountains pattern. This is the same as the beach pattern,
+% only filled with a darker brown colour.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/mountains/.pic={
+ \path[hex/terrain/mountains,pic actions,draw=none]
+ (-0.4931, 0.8848)
+ -- (-0.4998, 0.8734)
+ .. controls (-0.4908, 0.8731) and (-0.4813, 0.8762) .. (-0.4762, 0.8847)
+ --cycle
+ (-0.4032, 0.8841)
+ .. controls (-0.4004, 0.8804) and (-0.3988, 0.8794) .. (-0.3956, 0.8745)
+ .. controls (-0.3760, 0.8443) and (-0.3811, 0.8330) .. (-0.3456, 0.8112)
+ .. controls (-0.3250, 0.7986) and (-0.2712, 0.7770) .. (-0.2531, 0.8032)
+ .. controls (-0.2294, 0.8375) and (-0.2984, 0.8503) .. (-0.3193, 0.8690)
+ .. controls (-0.3243, 0.8735) and (-0.3281, 0.8785) .. (-0.3321, 0.8835)
+ --cycle
+ (-0.2462, 0.8828)
+ .. controls (-0.2425, 0.8681) and (-0.2383, 0.8546) .. (-0.2293, 0.8461)
+ .. controls (-0.2102, 0.8280) and (-0.1892, 0.8390) .. (-0.1859, 0.8669)
+ .. controls (-0.1854, 0.8711) and (-0.1871, 0.8772) .. (-0.1875, 0.8822)
+ --cycle
+ (-0.0997, 0.8815)
+ .. controls (-0.0971, 0.8706) and (-0.0941, 0.8597) .. (-0.0907, 0.8493)
+ -- (-0.0570, 0.8578)
+ .. controls (-0.0570, 0.8629) and (-0.0560, 0.8730) .. (-0.0553, 0.8812)
+ --cycle
+ ( 0.0213, 0.8805)
+ .. controls ( 0.0222, 0.8725) and ( 0.0235, 0.8650) .. ( 0.0262, 0.8587)
+ .. controls ( 0.0391, 0.8281) and ( 0.0706, 0.8199) .. ( 0.0917, 0.7894)
+ .. controls ( 0.1112, 0.7609) and ( 0.1058, 0.7286) .. ( 0.1050, 0.6961)
+ -- ( 0.1731, 0.7216)
+ -- ( 0.1203, 0.8649)
+ -- ( 0.1097, 0.8797)
+ --cycle
+ ( 0.2978, 0.8781)
+ .. controls ( 0.2985, 0.8773) and ( 0.3002, 0.8756) .. ( 0.3008, 0.8749)
+ .. controls ( 0.2854, 0.8687) and ( 0.2549, 0.8572) .. ( 0.2421, 0.8487)
+ .. controls ( 0.2026, 0.8224) and ( 0.1905, 0.7567) .. ( 0.2046, 0.7132)
+ .. controls ( 0.2146, 0.6819) and ( 0.2330, 0.6680) .. ( 0.2394, 0.6280)
+ .. controls ( 0.2413, 0.6160) and ( 0.2468, 0.5527) .. ( 0.2446, 0.5437)
+ .. controls ( 0.2396, 0.5232) and ( 0.2211, 0.5122) .. ( 0.2231, 0.4913)
+ .. controls ( 0.2261, 0.4603) and ( 0.2686, 0.4388) .. ( 0.2891, 0.4194)
+ .. controls ( 0.3020, 0.4071) and ( 0.3136, 0.3895) .. ( 0.3281, 0.3799)
+ .. controls ( 0.3688, 0.3533) and ( 0.3905, 0.3863) .. ( 0.4199, 0.3902)
+ .. controls ( 0.4350, 0.3921) and ( 0.4560, 0.3849) .. ( 0.4710, 0.3812)
+ -- ( 0.4795, 0.4067)
+ -- ( 0.4965, 0.4067)
+ .. controls ( 0.5008, 0.3961) and ( 0.5009, 0.3893) .. ( 0.5112, 0.3811)
+ .. controls ( 0.5112, 0.3811) and ( 0.6172, 0.3385) .. ( 0.6481, 0.3037)
+ .. controls ( 0.6729, 0.2758) and ( 0.6641, 0.2532) .. ( 0.6667, 0.2206)
+ -- ( 0.7004, 0.2206)
+ .. controls ( 0.7839, 0.2118) and ( 0.7047, 0.0740) .. ( 0.7057, 0.0568)
+ .. controls ( 0.7067, 0.0396) and ( 0.7865,-0.0424) .. ( 0.8032,-0.0520)
+ .. controls ( 0.8251,-0.0644) and ( 0.8703,-0.0686) .. ( 0.8572,-0.0293)
+ .. controls ( 0.8518,-0.0131) and ( 0.7996, 0.0474) .. ( 0.7843, 0.0564)
+ .. controls ( 0.7724, 0.0633) and ( 0.7645, 0.0636) .. ( 0.7518, 0.0664)
+ .. controls ( 0.7688, 0.1093) and ( 0.7993, 0.1905) .. ( 0.7930, 0.2362)
+ .. controls ( 0.7869, 0.2804) and ( 0.7252, 0.2982) .. ( 0.6946, 0.3268)
+ .. controls ( 0.6664, 0.3531) and ( 0.6746, 0.3662) .. ( 0.6323, 0.3966)
+ .. controls ( 0.5760, 0.4371) and ( 0.5386, 0.4324) .. ( 0.5250, 0.4601)
+ .. controls ( 0.5090, 0.4927) and ( 0.5578, 0.6035) .. ( 0.5969, 0.5911)
+ .. controls ( 0.6199, 0.5839) and ( 0.6224, 0.5471) .. ( 0.6341, 0.5291)
+ .. controls ( 0.6488, 0.5064) and ( 0.7020, 0.4614) .. ( 0.7263, 0.4493)
+ -- ( 0.7373, 0.4768)
+ -- ( 0.6866, 0.5671)
+ -- ( 0.6756, 0.5720)
+ -- ( 0.6766, 0.5850)
+ -- ( 0.6331, 0.6627)
+ .. controls ( 0.6280, 0.6613) and ( 0.6239, 0.6599) .. ( 0.6157, 0.6589)
+ -- ( 0.5646, 0.6589)
+ .. controls ( 0.5375, 0.6557) and ( 0.5277, 0.6432) .. ( 0.4965, 0.6489)
+ .. controls ( 0.4716, 0.6520) and ( 0.4306, 0.6774) .. ( 0.4104, 0.6489)
+ .. controls ( 0.3809, 0.6093) and ( 0.4627, 0.6240) .. ( 0.4837, 0.5772)
+ .. controls ( 0.4958, 0.5502) and ( 0.4652, 0.4811) .. ( 0.4429, 0.4648)
+ -- ( 0.3523, 0.4350)
+ .. controls ( 0.3178, 0.4372) and ( 0.3207, 0.4766) .. ( 0.3153, 0.5004)
+ .. controls ( 0.3090, 0.5282) and ( 0.2968, 0.5398) .. ( 0.2922, 0.5684)
+ .. controls ( 0.2896, 0.6035) and ( 0.3061, 0.6276) .. ( 0.2922, 0.6621)
+ .. controls ( 0.2756, 0.6961) and ( 0.2422, 0.7190) .. ( 0.2525, 0.7640)
+ .. controls ( 0.2650, 0.8188) and ( 0.3165, 0.7932) .. ( 0.3324, 0.8417)
+ .. controls ( 0.3359, 0.8522) and ( 0.3385, 0.8648) .. ( 0.3399, 0.8778)
+ --cycle
+ ( 0.4261, 0.8770)
+ -- ( 0.4333, 0.8493)
+ -- ( 0.4845, 0.7440)
+ .. controls ( 0.4963, 0.7304) and ( 0.5450, 0.6930) .. ( 0.5630, 0.6989)
+ .. controls ( 0.5735, 0.7024) and ( 0.5838, 0.7169) .. ( 0.5932, 0.7337)
+ -- ( 0.5612, 0.7909)
+ .. controls ( 0.5537, 0.7875) and ( 0.5468, 0.7852) .. ( 0.5403, 0.7864)
+ .. controls ( 0.5078, 0.7926) and ( 0.5191, 0.8406) .. ( 0.5145, 0.8567)
+ .. controls ( 0.5121, 0.8651) and ( 0.5076, 0.8710) .. ( 0.5025, 0.8764)
+ --cycle
+ ( 0.3773, 0.8153)
+ .. controls ( 0.3625, 0.7892) and ( 0.2993, 0.7161) .. ( 0.3316, 0.6877)
+ .. controls ( 0.3432, 0.6774) and ( 0.3866, 0.6728) .. ( 0.4029, 0.6706)
+ -- ( 0.3973, 0.7472)
+ -- ( 0.4029, 0.8153)
+ --cycle
+ (-0.4224, 0.8088)
+ .. controls (-0.4416, 0.8077) and (-0.4585, 0.7826) .. (-0.4275, 0.7562)
+ -- (-0.3971, 0.7387)
+ .. controls (-0.4780, 0.6942) and (-0.4752, 0.6640) .. (-0.4591, 0.5855)
+ .. controls (-0.4391, 0.4887) and (-0.4527, 0.5347) .. (-0.4103, 0.4493)
+ .. controls (-0.3870, 0.4026) and (-0.4070, 0.3747) .. (-0.3460, 0.3642)
+ -- (-0.3352, 0.4823)
+ .. controls (-0.3409, 0.5024) and (-0.3617, 0.5113) .. (-0.3739, 0.5281)
+ -- (-0.4164, 0.6287)
+ .. controls (-0.4188, 0.6375) and (-0.4186, 0.6444) .. (-0.4164, 0.6528)
+ .. controls (-0.4067, 0.6807) and (-0.3521, 0.7255) .. (-0.3274, 0.6931)
+ .. controls (-0.3070, 0.6694) and (-0.3336, 0.6432) .. (-0.3274, 0.6221)
+ .. controls (-0.3249, 0.6055) and (-0.3059, 0.6028) .. (-0.2950, 0.6162)
+ .. controls (-0.2867, 0.6265) and (-0.2838, 0.6558) .. (-0.2829, 0.6692)
+ .. controls (-0.2775, 0.7444) and (-0.3333, 0.7652) .. (-0.3955, 0.7472)
+ .. controls (-0.3950, 0.7586) and (-0.3916, 0.7684) .. (-0.3955, 0.7803)
+ .. controls (-0.3986, 0.8016) and (-0.4109, 0.8096) .. (-0.4224, 0.8088)
+ --cycle
+ (-0.1391, 0.8077)
+ .. controls (-0.1634, 0.8024) and (-0.1582, 0.7647) .. (-0.1487, 0.7492)
+ .. controls (-0.1306, 0.7190) and (-0.1004, 0.7270) .. (-0.0652, 0.7073)
+ -- (-0.0226, 0.6801)
+ -- ( 0.0282, 0.6560)
+ .. controls ( 0.0622, 0.6331) and ( 0.0955, 0.5639) .. ( 0.1219, 0.5259)
+ .. controls ( 0.2125, 0.5714) and ( 0.1427, 0.6114) .. ( 0.1219, 0.6453)
+ -- ( 0.1054, 0.6768)
+ .. controls ( 0.0862, 0.7028) and ( 0.0448, 0.7080) .. ( 0.0115, 0.7299)
+ .. controls (-0.0377, 0.7622) and (-0.0173, 0.7726) .. (-0.0822, 0.7918)
+ .. controls (-0.0961, 0.7958) and (-0.1270, 0.8103) .. (-0.1391, 0.8077)
+ --cycle
+ (-0.5460, 0.7940)
+ -- (-0.5911, 0.7166)
+ .. controls (-0.5649, 0.7015) and (-0.5397, 0.7188) .. (-0.5308, 0.7556)
+ .. controls (-0.5251, 0.7788) and (-0.5335, 0.7873) .. (-0.5460, 0.7940)
+ --cycle
+ (-0.2382, 0.7423)
+ .. controls (-0.2453, 0.7424) and (-0.2512, 0.7383) .. (-0.2550, 0.7274)
+ .. controls (-0.2635, 0.7026) and (-0.2353, 0.6726) .. (-0.2229, 0.6536)
+ .. controls (-0.2031, 0.6234) and (-0.2020, 0.6105) .. (-0.1928, 0.5770)
+ .. controls (-0.1763, 0.5803) and (-0.1499, 0.5890) .. (-0.1342, 0.5831)
+ .. controls (-0.1112, 0.5745) and (-0.1047, 0.5481) .. (-0.0866, 0.5338)
+ -- (-0.0397, 0.5102)
+ -- ( 0.0664, 0.4219)
+ .. controls ( 0.0874, 0.3954) and ( 0.0785, 0.3655) .. ( 0.1070, 0.3502)
+ .. controls ( 0.1367, 0.3343) and ( 0.1690, 0.3592) .. ( 0.1732, 0.3899)
+ .. controls ( 0.1755, 0.4075) and ( 0.1545, 0.4554) .. ( 0.1475, 0.4748)
+ .. controls ( 0.0838, 0.4666) and ( 0.0509, 0.4836) .. ( 0.0454, 0.5515)
+ .. controls (-0.0576, 0.5778) and (-0.0955, 0.6323) .. (-0.1754, 0.6949)
+ .. controls (-0.1861, 0.7034) and (-0.2171, 0.7418) .. (-0.2382, 0.7423)
+ --cycle
+ (-0.5068, 0.6706)
+ .. controls (-0.5119, 0.6724) and (-0.5194, 0.6726) .. (-0.5299, 0.6701)
+ .. controls (-0.5512, 0.6413) and (-0.5242, 0.6333) .. (-0.5102, 0.6400)
+ .. controls (-0.4981, 0.6457) and (-0.4916, 0.6653) .. (-0.5068, 0.6706)
+ --cycle
+ (-0.6356, 0.6402)
+ -- (-0.6681, 0.5845)
+ -- (-0.6588, 0.5684)
+ .. controls (-0.6473, 0.5521) and (-0.6323, 0.5371) .. (-0.6265, 0.5174)
+ .. controls (-0.6174, 0.4865) and (-0.6614, 0.4161) .. (-0.6950, 0.4206)
+ .. controls (-0.7111, 0.4226) and (-0.7174, 0.4376) .. (-0.7460, 0.4507)
+ -- (-0.7632, 0.4212)
+ .. controls (-0.7629, 0.4042) and (-0.7611, 0.3875) .. (-0.7546, 0.3789)
+ .. controls (-0.7424, 0.3626) and (-0.7129, 0.3612) .. (-0.6966, 0.3297)
+ .. controls (-0.6823, 0.3022) and (-0.6963, 0.2741) .. (-0.6808, 0.2598)
+ .. controls (-0.6602, 0.2410) and (-0.6495, 0.2720) .. (-0.6484, 0.2878)
+ .. controls (-0.6461, 0.3229) and (-0.6488, 0.4046) .. (-0.6080, 0.4204)
+ .. controls (-0.5750, 0.4330) and (-0.4980, 0.3514) .. (-0.4929, 0.3217)
+ .. controls (-0.4895, 0.3019) and (-0.5044, 0.2671) .. (-0.4860, 0.2550)
+ .. controls (-0.4691, 0.2439) and (-0.4582, 0.2679) .. (-0.4535, 0.2796)
+ .. controls (-0.4450, 0.3015) and (-0.4273, 0.3562) .. (-0.4401, 0.3771)
+ .. controls (-0.4495, 0.3922) and (-0.5019, 0.4172) .. (-0.5296, 0.4507)
+ .. controls (-0.5656, 0.4941) and (-0.5734, 0.5631) .. (-0.5973, 0.6021)
+ .. controls (-0.6099, 0.6226) and (-0.6226, 0.6316) .. (-0.6356, 0.6402)
+ --cycle
+ ( 0.2242, 0.6110)
+ -- ( 0.1816, 0.6025)
+ -- ( 0.1816, 0.5855)
+ .. controls ( 0.2117, 0.5815) and ( 0.2140, 0.5821) .. ( 0.2242, 0.6110)
+ --cycle
+ ( 0.3924, 0.6049)
+ .. controls ( 0.3895, 0.6048) and ( 0.3860, 0.6036) .. ( 0.3820, 0.6011)
+ .. controls ( 0.3535, 0.5835) and ( 0.3670, 0.5238) .. ( 0.3773, 0.5004)
+ -- ( 0.3944, 0.5004)
+ -- ( 0.4061, 0.5429)
+ .. controls ( 0.4082, 0.5540) and ( 0.4130, 0.6056) .. ( 0.3924, 0.6049)
+ --cycle
+ (-0.2864, 0.5940)
+ .. controls (-0.2904, 0.5793) and (-0.2950, 0.5676) .. (-0.2919, 0.5518)
+ .. controls (-0.2769, 0.4768) and (-0.1616, 0.5041) .. (-0.2162, 0.5623)
+ .. controls (-0.2236, 0.5702) and (-0.2346, 0.5747) .. (-0.2443, 0.5790)
+ --cycle
+ (-0.7010, 0.5280)
+ -- (-0.7269, 0.4835)
+ .. controls (-0.7207, 0.4876) and (-0.7144, 0.4952) .. (-0.7081, 0.5094)
+ --cycle
+ (-0.0992, 0.4748)
+ -- (-0.2099, 0.4556)
+ -- (-0.2888, 0.3790)
+ -- (-0.3460, 0.3557)
+ -- (-0.3389, 0.3218)
+ .. controls (-0.3310, 0.2959) and (-0.3026, 0.2636) .. (-0.2781, 0.2927)
+ .. controls (-0.2745, 0.2971) and (-0.2504, 0.3947) .. (-0.1948, 0.3764)
+ .. controls (-0.1607, 0.3651) and (-0.1697, 0.2984) .. (-0.1588, 0.2536)
+ -- (-0.1503, 0.2536)
+ -- (-0.1503, 0.2450)
+ -- (-0.1163, 0.2366)
+ .. controls (-0.0968, 0.3059) and (-0.1262, 0.3371) .. (-0.1239, 0.3982)
+ .. controls (-0.1229, 0.4261) and (-0.1067, 0.4484) .. (-0.0992, 0.4748)
+ --cycle
+ (-0.1503, 0.2450)
+ -- (-0.1588, 0.2536)
+ .. controls (-0.2292, 0.2544) and (-0.2730, 0.2893) .. (-0.2677, 0.2195)
+ -- (-0.2609, 0.1855)
+ .. controls (-0.2393, 0.1890) and (-0.2005, 0.2039) .. (-0.1909, 0.1753)
+ .. controls (-0.1709, 0.1163) and (-0.2582, 0.0953) .. (-0.2387, 0.0533)
+ .. controls (-0.2275, 0.0292) and (-0.1430, 0.0537) .. (-0.1361, 0.0692)
+ .. controls (-0.1250, 0.0859) and (-0.1359, 0.1083) .. (-0.1361, 0.1259)
+ .. controls (-0.1437, 0.1788) and (-0.1186, 0.1766) .. (-0.1503, 0.2450)
+ --cycle
+ ( 0.7348, 0.4408)
+ .. controls ( 0.7113, 0.3774) and ( 0.7569, 0.3513) .. ( 0.7901, 0.3824)
+ -- ( 0.7585, 0.4390)
+ --cycle
+ ( 0.2071, 0.4153)
+ .. controls ( 0.1984, 0.3706) and ( 0.2118, 0.3204) .. ( 0.2582, 0.3046)
+ .. controls ( 0.2685, 0.3631) and ( 0.2706, 0.3931) .. ( 0.2071, 0.4153)
+ --cycle
+ (-0.0567, 0.3982)
+ .. controls (-0.0558, 0.3230) and (-0.0460, 0.3456) .. (-0.0210, 0.2876)
+ -- ( 0.0067, 0.1940)
+ .. controls ( 0.0180, 0.1513) and ( 0.0026, 0.1332) .. ( 0.0454, 0.1089)
+ -- ( 0.0767, 0.1940)
+ -- ( 0.0546, 0.2621)
+ -- ( 0.0406, 0.3185)
+ -- (-0.0258, 0.3896)
+ --cycle
+ (-0.7969, 0.3634)
+ -- (-0.8570, 0.2602)
+ .. controls (-0.8515, 0.2550) and (-0.8469, 0.2514) .. (-0.8414, 0.2450)
+ .. controls (-0.8020, 0.1990) and (-0.8201, 0.1971) .. (-0.7629, 0.1540)
+ .. controls (-0.7462, 0.1414) and (-0.7054, 0.1023) .. (-0.6834, 0.1181)
+ .. controls (-0.6662, 0.1304) and (-0.6813, 0.1625) .. (-0.6882, 0.1768)
+ .. controls (-0.7213, 0.2456) and (-0.7865, 0.2417) .. (-0.8004, 0.2965)
+ .. controls (-0.8052, 0.3154) and (-0.7990, 0.3413) .. (-0.7969, 0.3634)
+ --cycle
+ ( 0.8244, 0.3214)
+ .. controls ( 0.8136, 0.3128) and ( 0.8080, 0.2984) .. ( 0.8114, 0.2706)
+ .. controls ( 0.8314, 0.2739) and ( 0.8424, 0.2735) .. ( 0.8526, 0.2710)
+ --cycle
+ ( 0.5015, 0.3207)
+ .. controls ( 0.4943, 0.3196) and ( 0.4861, 0.3171) .. ( 0.4766, 0.3130)
+ .. controls ( 0.4611, 0.2827) and ( 0.4839, 0.2747) .. ( 0.5028, 0.2521)
+ -- ( 0.5376, 0.1972)
+ .. controls ( 0.5529, 0.1772) and ( 0.5728, 0.1698) .. ( 0.5845, 0.1426)
+ .. controls ( 0.5979, 0.1115) and ( 0.5837, 0.0732) .. ( 0.5987, 0.0532)
+ .. controls ( 0.6095, 0.0384) and ( 0.6236, 0.0428) .. ( 0.6350, 0.0532)
+ .. controls ( 0.6681, 0.0842) and ( 0.6456, 0.1087) .. ( 0.6482, 0.1429)
+ .. controls ( 0.6481, 0.1614) and ( 0.6596, 0.1802) .. ( 0.6482, 0.1967)
+ .. controls ( 0.6390, 0.2131) and ( 0.5992, 0.2239) .. ( 0.5768, 0.2483)
+ .. controls ( 0.5547, 0.2722) and ( 0.5524, 0.3288) .. ( 0.5015, 0.3207)
+ --cycle
+ (-0.5678, 0.3115)
+ .. controls (-0.5832, 0.3118) and (-0.6140, 0.2810) .. (-0.6269, 0.2706)
+ .. controls (-0.6185, 0.2412) and (-0.5926, 0.1953) .. (-0.5973, 0.1685)
+ .. controls (-0.6029, 0.1373) and (-0.6320, 0.1239) .. (-0.6369, 0.0996)
+ .. controls (-0.6406, 0.0816) and (-0.6303, 0.0652) .. (-0.6237, 0.0493)
+ .. controls (-0.6147, 0.0275) and (-0.6000,-0.0443) .. (-0.5641,-0.0258)
+ .. controls (-0.5134,-0.0018) and (-0.5902, 0.0606) .. (-0.5641, 0.1074)
+ .. controls (-0.5332, 0.1697) and (-0.4913, 0.1444) .. (-0.4481, 0.1593)
+ .. controls (-0.3913, 0.1792) and (-0.3439, 0.2446) .. (-0.3545, 0.3046)
+ -- (-0.4568, 0.2201)
+ -- (-0.5588, 0.2201)
+ .. controls (-0.5549, 0.2390) and (-0.5305, 0.3109) .. (-0.5678, 0.3115)
+ --cycle
+ ( 0.2243, 0.2813)
+ -- ( 0.1631, 0.2450)
+ -- ( 0.0965, 0.2281)
+ -- ( 0.1689, 0.1131)
+ -- ( 0.2065, 0.0861)
+ .. controls ( 0.2453, 0.0564) and ( 0.2384, 0.0410) .. ( 0.2923, 0.0323)
+ -- ( 0.2988,-0.0188)
+ .. controls ( 0.2994,-0.0695) and ( 0.2657,-0.0796) .. ( 0.2249,-0.0579)
+ .. controls ( 0.1337,-0.0093) and ( 0.1545, 0.0219) .. ( 0.1102, 0.0744)
+ .. controls ( 0.0914, 0.0967) and ( 0.0807, 0.1010) .. ( 0.0539, 0.1089)
+ .. controls ( 0.0562, 0.0613) and ( 0.0756,-0.0434) .. ( 0.0403,-0.0825)
+ .. controls ( 0.0293,-0.0948) and (-0.0336,-0.1168) .. (-0.0567,-0.1294)
+ .. controls (-0.0615,-0.1087) and (-0.0777,-0.0729) .. (-0.0703,-0.0546)
+ .. controls (-0.0586,-0.0251) and ( 0.0562, 0.0040) .. (-0.0152, 0.0389)
+ -- (-0.0397, 0.0480)
+ -- (-0.0737, 0.0578)
+ .. controls (-0.0806, 0.0391) and (-0.0849, 0.0192) .. (-0.1018, 0.0068)
+ .. controls (-0.1154,-0.0032) and (-0.1352,-0.0018) .. (-0.1438,-0.0212)
+ .. controls (-0.1562,-0.0491) and (-0.1117,-0.1243) .. (-0.0874,-0.1373)
+ .. controls (-0.0745,-0.1434) and (-0.0687,-0.1394) .. (-0.0567,-0.1373)
+ .. controls (-0.0358,-0.2033) and (-0.0062,-0.1612) .. ( 0.0370,-0.1500)
+ -- ( 0.1050,-0.1379)
+ .. controls ( 0.0882,-0.0871) and ( 0.0808,-0.0999) .. ( 0.0965,-0.0443)
+ .. controls ( 0.1454,-0.0619) and ( 0.1336,-0.0743) .. ( 0.1664,-0.0940)
+ .. controls ( 0.1897,-0.1081) and ( 0.2226,-0.1052) .. ( 0.2361,-0.1388)
+ .. controls ( 0.2495,-0.1724) and ( 0.2245,-0.1963) .. ( 0.2412,-0.2584)
+ .. controls ( 0.2526,-0.2569) and ( 0.2622,-0.2548) .. ( 0.2735,-0.2584)
+ .. controls ( 0.2987,-0.2708) and ( 0.3225,-0.3241) .. ( 0.3212,-0.3506)
+ .. controls ( 0.3203,-0.3711) and ( 0.3053,-0.3950) .. ( 0.3008,-0.4443)
+ -- ( 0.2497,-0.4187)
+ .. controls ( 0.2599,-0.4479) and ( 0.2621,-0.4475) .. ( 0.2905,-0.4528)
+ .. controls ( 0.2877,-0.4715) and ( 0.2799,-0.4998) .. ( 0.2905,-0.5182)
+ .. controls ( 0.2991,-0.5392) and ( 0.3228,-0.5357) .. ( 0.3346,-0.5182)
+ .. controls ( 0.3506,-0.4943) and ( 0.3355,-0.4515) .. ( 0.3532,-0.4203)
+ .. controls ( 0.3716,-0.3881) and ( 0.4096,-0.3844) .. ( 0.4084,-0.3499)
+ .. controls ( 0.4074,-0.3241) and ( 0.3866,-0.3087) .. ( 0.3728,-0.2897)
+ -- ( 0.3426,-0.2337)
+ -- ( 0.2989,-0.1879)
+ .. controls ( 0.2810,-0.1587) and ( 0.2976,-0.1327) .. ( 0.3187,-0.1323)
+ .. controls ( 0.3342,-0.1319) and ( 0.3489,-0.1451) .. ( 0.3603,-0.1541)
+ .. controls ( 0.3817,-0.1712) and ( 0.4026,-0.1894) .. ( 0.4144,-0.2146)
+ .. controls ( 0.4299,-0.2477) and ( 0.4289,-0.2977) .. ( 0.4712,-0.3110)
+ .. controls ( 0.4957,-0.3188) and ( 0.5167,-0.3024) .. ( 0.5044,-0.2753)
+ .. controls ( 0.4967,-0.2585) and ( 0.4769,-0.2471) .. ( 0.4676,-0.2227)
+ .. controls ( 0.4582,-0.1981) and ( 0.4681,-0.1743) .. ( 0.4488,-0.1492)
+ .. controls ( 0.4286,-0.1227) and ( 0.3809,-0.1095) .. ( 0.3621,-0.0696)
+ .. controls ( 0.3402,-0.0230) and ( 0.3896, 0.0270) .. ( 0.3092, 0.0408)
+ -- ( 0.3532, 0.1933)
+ -- ( 0.3944, 0.2536)
+ -- ( 0.3433, 0.2765)
+ --cycle
+ ( 0.2497, 0.2450)
+ -- ( 0.2782, 0.2025)
+ .. controls ( 0.2843, 0.1911) and ( 0.2884, 0.1815) .. ( 0.2900, 0.1685)
+ .. controls ( 0.3021, 0.0654) and ( 0.1495, 0.1479) .. ( 0.2135, 0.2245)
+ .. controls ( 0.2246, 0.2378) and ( 0.2346, 0.2396) .. ( 0.2497, 0.2450)
+ --cycle
+ ( 0.8836, 0.2157)
+ .. controls ( 0.8688, 0.2061) and ( 0.8571, 0.1889) .. ( 0.8687, 0.1736)
+ .. controls ( 0.8785, 0.1608) and ( 0.8967, 0.1613) .. ( 0.9161, 0.1578)
+ --cycle
+ (-0.3035, 0.1940)
+ .. controls (-0.3340, 0.1390) and (-0.3508, 0.1491) .. (-0.3624, 0.1300)
+ .. controls (-0.3738, 0.1112) and (-0.3588, 0.0896) .. (-0.3288, 0.0972)
+ .. controls (-0.2842, 0.1084) and (-0.2392, 0.1714) .. (-0.3035, 0.1940)
+ --cycle
+ ( 0.4710, 0.1940)
+ .. controls ( 0.4330, 0.1525) and ( 0.3961, 0.1447) .. ( 0.4114, 0.0833)
+ .. controls ( 0.4294, 0.0897) and ( 0.4596, 0.1056) .. ( 0.4776, 0.0984)
+ .. controls ( 0.5010, 0.0888) and ( 0.5182, 0.0420) .. ( 0.4925, 0.0231)
+ .. controls ( 0.4698, 0.0064) and ( 0.4500, 0.0299) .. ( 0.3944, 0.0153)
+ .. controls ( 0.4243,-0.0189) and ( 0.4618,-0.0333) .. ( 0.4765,-0.0621)
+ .. controls ( 0.4928,-0.0939) and ( 0.4729,-0.1183) .. ( 0.4881,-0.1406)
+ .. controls ( 0.4977,-0.1549) and ( 0.5241,-0.1630) .. ( 0.5425,-0.1894)
+ .. controls ( 0.5557,-0.2085) and ( 0.5562,-0.2282) .. ( 0.5657,-0.2485)
+ -- ( 0.6122,-0.3251)
+ .. controls ( 0.6335,-0.3720) and ( 0.6160,-0.3973) .. ( 0.6323,-0.4443)
+ .. controls ( 0.6532,-0.5042) and ( 0.6754,-0.5231) .. ( 0.6973,-0.5440)
+ -- ( 0.7289,-0.4899)
+ .. controls ( 0.7138,-0.4739) and ( 0.6992,-0.4579) .. ( 0.6886,-0.4358)
+ -- ( 0.6489,-0.2690)
+ .. controls ( 0.6485,-0.2445) and ( 0.6654,-0.2180) .. ( 0.6598,-0.2002)
+ .. controls ( 0.6522,-0.1752) and ( 0.6202,-0.1899) .. ( 0.5938,-0.1612)
+ .. controls ( 0.5619,-0.1263) and ( 0.5907,-0.0980) .. ( 0.5797,-0.0720)
+ .. controls ( 0.5714,-0.0525) and ( 0.5434,-0.0441) .. ( 0.5374,-0.0184)
+ .. controls ( 0.5319, 0.0056) and ( 0.5522, 0.0300) .. ( 0.5533, 0.0578)
+ .. controls ( 0.5548, 0.0943) and ( 0.4981, 0.1701) .. ( 0.4710, 0.1940)
+ --cycle
+ (-0.9001, 0.1862)
+ -- (-0.9386, 0.1201)
+ .. controls (-0.9374, 0.1181) and (-0.9371, 0.1158) .. (-0.9356, 0.1139)
+ .. controls (-0.9242, 0.0996) and (-0.9046, 0.0893) .. (-0.8911, 0.0660)
+ .. controls (-0.8684, 0.0268) and (-0.8960, 0.0297) .. (-0.8592,-0.0296)
+ .. controls (-0.8262,-0.0830) and (-0.8655,-0.1092) .. (-0.7971,-0.1209)
+ -- (-0.7875, 0.0068)
+ -- (-0.8579, 0.1174)
+ --cycle
+ (-0.4453, 0.0979)
+ .. controls (-0.4922, 0.0916) and (-0.4988, 0.0347) .. (-0.4759, 0.0116)
+ .. controls (-0.4491,-0.0149) and (-0.4165, 0.0208) .. (-0.3900, 0.0116)
+ .. controls (-0.3555,-0.0011) and (-0.3800,-0.0410) .. (-0.3751,-0.0698)
+ -- (-0.3537,-0.1294)
+ .. controls (-0.3428,-0.1879) and (-0.4042,-0.1777) .. (-0.3801,-0.2656)
+ .. controls (-0.3617,-0.2531) and (-0.3352,-0.2292) .. (-0.3122,-0.2330)
+ .. controls (-0.2845,-0.2375) and (-0.2669,-0.2694) .. (-0.2543,-0.2911)
+ .. controls (-0.2183,-0.3533) and (-0.2004,-0.3613) .. (-0.2184,-0.4358)
+ .. controls (-0.3300,-0.4097) and (-0.2723,-0.5065) .. (-0.2483,-0.5549)
+ -- (-0.2129,-0.6314)
+ .. controls (-0.2017,-0.6508) and (-0.1900,-0.6661) .. (-0.1670,-0.6712)
+ .. controls (-0.1211,-0.6813) and (-0.1100,-0.6527) .. (-0.1163,-0.6145)
+ .. controls (-0.1327,-0.6119) and (-0.1427,-0.6118) .. (-0.1568,-0.6009)
+ .. controls (-0.1780,-0.5845) and (-0.2123,-0.5041) .. (-0.2042,-0.4783)
+ .. controls (-0.1947,-0.4484) and (-0.1575,-0.4121) .. (-0.1333,-0.3932)
+ -- (-0.1527,-0.3251)
+ -- (-0.1588,-0.2656)
+ .. controls (-0.2187,-0.2715) and (-0.2083,-0.2536) .. (-0.2457,-0.2163)
+ .. controls (-0.2684,-0.1935) and (-0.2911,-0.1886) .. (-0.2996,-0.1546)
+ -- (-0.2996,-0.1209)
+ -- (-0.3232,-0.0698)
+ .. controls (-0.3283,-0.0435) and (-0.3124,-0.0260) .. (-0.3175,-0.0041)
+ .. controls (-0.3251, 0.0283) and (-0.3891, 0.0917) .. (-0.4227, 0.0973)
+ .. controls (-0.4311, 0.0987) and (-0.4386, 0.0989) .. (-0.4453, 0.0979)
+ --cycle
+ (-0.1163,-0.6145)
+ -- (-0.0812,-0.6009)
+ -- (-0.0509,-0.4868)
+ -- (-0.0567,-0.4528)
+ .. controls (-0.1227,-0.4845) and (-0.1350,-0.5483) .. (-0.1163,-0.6145)
+ --cycle
+ ( 0.9165, 0.0573)
+ .. controls ( 0.8982, 0.0512) and ( 0.8800, 0.0260) .. ( 0.8880,-0.0013)
+ .. controls ( 0.8973,-0.0334) and ( 0.9330,-0.0408) .. ( 0.9466,-0.0703)
+ .. controls ( 0.9528,-0.0838) and ( 0.9514,-0.0964) .. ( 0.9506,-0.1091)
+ -- ( 1.0000,-0.0243)
+ .. controls ( 0.9816,-0.0179) and ( 0.9678,-0.0119) .. ( 0.9563, 0.0077)
+ .. controls ( 0.9465, 0.0244) and ( 0.9476, 0.0488) .. ( 0.9340, 0.0564)
+ .. controls ( 0.9288, 0.0593) and ( 0.9227, 0.0593) .. ( 0.9165, 0.0573)
+ --cycle
+ (-0.7064, 0.0069)
+ .. controls (-0.7128, 0.0077) and (-0.7187, 0.0075) .. (-0.7237, 0.0061)
+ .. controls (-0.7255, 0.0030) and (-0.7310, 0.0025) .. (-0.7316,-0.0115)
+ .. controls (-0.7321,-0.0230) and (-0.7071,-0.1058) .. (-0.6984,-0.1096)
+ .. controls (-0.6872,-0.1176) and (-0.6721,-0.1116) .. (-0.6609,-0.1096)
+ .. controls (-0.6502,-0.1046) and (-0.6316,-0.0986) .. (-0.6242,-0.0900)
+ .. controls (-0.5901,-0.0507) and (-0.6615, 0.0017) .. (-0.7064, 0.0069)
+ --cycle
+ (-1.0000, 0.0068)
+ -- (-1.0000, 0.0020)
+ -- (-0.9548,-0.0788)
+ .. controls (-0.9170,-0.0310) and (-0.9342,-0.0158) .. (-1.0000, 0.0068)
+ --cycle
+ (-0.2643, 0.0054)
+ .. controls (-0.2853,-0.0295) and (-0.2523,-0.0713) .. (-0.2182,-0.0843)
+ .. controls (-0.2024,-0.0902) and (-0.1781,-0.0944) .. (-0.1687,-0.0757)
+ .. controls (-0.1530,-0.0441) and (-0.2378, 0.0095) .. (-0.2643, 0.0054)
+ --cycle
+ ( 0.6299,-0.0102)
+ .. controls ( 0.6155,-0.0145) and ( 0.6071,-0.0342) .. ( 0.6128,-0.0510)
+ .. controls ( 0.6198,-0.0721) and ( 0.6440,-0.0790) .. ( 0.6606,-0.0986)
+ .. controls ( 0.6738,-0.1143) and ( 0.6761,-0.1328) .. ( 0.6948,-0.1437)
+ .. controls ( 0.7092,-0.1520) and ( 0.7311,-0.1484) .. ( 0.7401,-0.1664)
+ .. controls ( 0.7461,-0.1784) and ( 0.7351,-0.2363) .. ( 0.7348,-0.2570)
+ .. controls ( 0.7336,-0.3524) and ( 0.7289,-0.3324) .. ( 0.7620,-0.4187)
+ .. controls ( 0.7631,-0.4216) and ( 0.7642,-0.4246) .. ( 0.7652,-0.4275)
+ -- ( 0.8003,-0.3672)
+ .. controls ( 0.7976,-0.3636) and ( 0.7942,-0.3606) .. ( 0.7918,-0.3568)
+ .. controls ( 0.7778,-0.3349) and ( 0.7645,-0.2537) .. ( 0.7970,-0.2417)
+ .. controls ( 0.8206,-0.2330) and ( 0.8347,-0.2671) .. ( 0.8432,-0.2822)
+ -- ( 0.8469,-0.2872)
+ -- ( 0.8787,-0.2326)
+ -- ( 0.8594,-0.1993)
+ .. controls ( 0.8496,-0.1847) and ( 0.7996,-0.1314) .. ( 0.7847,-0.1281)
+ .. controls ( 0.7712,-0.1229) and ( 0.7642,-0.1268) .. ( 0.7518,-0.1281)
+ .. controls ( 0.7451,-0.1148) and ( 0.7397,-0.1014) .. ( 0.7293,-0.0886)
+ -- ( 0.6461,-0.0117)
+ .. controls ( 0.6402,-0.0090) and ( 0.6347,-0.0087) .. ( 0.6299,-0.0102)
+ --cycle
+ (-0.5178,-0.0844)
+ .. controls (-0.5451,-0.0820) and (-0.5852,-0.0947) .. (-0.5902,-0.1144)
+ .. controls (-0.6007,-0.1557) and (-0.5621,-0.1731) .. (-0.5414,-0.1997)
+ .. controls (-0.5274,-0.2177) and (-0.5229,-0.2355) .. (-0.5044,-0.2525)
+ .. controls (-0.4888,-0.2669) and (-0.4706,-0.2705) .. (-0.4543,-0.2923)
+ .. controls (-0.4420,-0.3087) and (-0.4220,-0.3707) .. (-0.4141,-0.3932)
+ .. controls (-0.3620,-0.3875) and (-0.3060,-0.4031) .. (-0.3060,-0.3592)
+ .. controls (-0.3060,-0.3272) and (-0.3358,-0.3272) .. (-0.3716,-0.3008)
+ .. controls (-0.4367,-0.2529) and (-0.4253,-0.2451) .. (-0.4621,-0.1914)
+ .. controls (-0.4700,-0.1800) and (-0.4814,-0.1685) .. (-0.4867,-0.1556)
+ .. controls (-0.4970,-0.1308) and (-0.4804,-0.1088) .. (-0.4966,-0.0923)
+ .. controls (-0.5011,-0.0877) and (-0.5087,-0.0853) .. (-0.5178,-0.0844)
+ --cycle
+ (-0.4165,-0.0846)
+ .. controls (-0.4357,-0.0807) and (-0.4622,-0.1075) .. (-0.4395,-0.1440)
+ .. controls (-0.4316,-0.1566) and (-0.4254,-0.1571) .. (-0.4141,-0.1634)
+ .. controls (-0.4094,-0.1522) and (-0.4042,-0.1415) .. (-0.4019,-0.1294)
+ .. controls (-0.3960,-0.1004) and (-0.4049,-0.0870) .. (-0.4165,-0.0846)
+ --cycle
+ (-0.9358,-0.1125)
+ -- (-0.8813,-0.2098)
+ .. controls (-0.8768,-0.1903) and (-0.8656,-0.1673) .. (-0.8723,-0.1485)
+ .. controls (-0.8801,-0.1269) and (-0.9022,-0.1274) .. (-0.9358,-0.1125)
+ --cycle
+ ( 0.1455,-0.1458)
+ .. controls ( 0.1402,-0.1449) and ( 0.1336,-0.1452) .. ( 0.1255,-0.1471)
+ .. controls ( 0.0901,-0.1850) and ( 0.1064,-0.2454) .. ( 0.1360,-0.2301)
+ .. controls ( 0.1569,-0.2194) and ( 0.1827,-0.1522) .. ( 0.1455,-0.1458)
+ --cycle
+ (-0.1477,-0.1474)
+ .. controls (-0.1646,-0.1458) and (-0.1813,-0.1543) .. (-0.1847,-0.1659)
+ .. controls (-0.1889,-0.1806) and (-0.1612,-0.2953) .. (-0.1163,-0.2315)
+ -- (-0.0420,-0.4418)
+ .. controls (-0.0291,-0.4661) and (-0.0068,-0.4600) .. ( 0.0136,-0.4880)
+ .. controls ( 0.0294,-0.5097) and ( 0.0259,-0.5331) .. ( 0.0419,-0.5487)
+ .. controls ( 0.0694,-0.5755) and ( 0.1462,-0.5710) .. ( 0.1798,-0.6001)
+ -- ( 0.2188,-0.6436)
+ .. controls ( 0.2392,-0.6605) and ( 0.2566,-0.6577) .. ( 0.2804,-0.6838)
+ .. controls ( 0.3122,-0.7186) and ( 0.3037,-0.7586) .. ( 0.3603,-0.7592)
+ .. controls ( 0.3537,-0.7217) and ( 0.3358,-0.6781) .. ( 0.3603,-0.6427)
+ .. controls ( 0.3743,-0.6222) and ( 0.3978,-0.6232) .. ( 0.4032,-0.6039)
+ .. controls ( 0.4084,-0.5852) and ( 0.3901,-0.5654) .. ( 0.3712,-0.5741)
+ .. controls ( 0.3573,-0.5804) and ( 0.3558,-0.5936) .. ( 0.3518,-0.6044)
+ .. controls ( 0.3319,-0.6046) and ( 0.2996,-0.6092) .. ( 0.2842,-0.6044)
+ .. controls ( 0.2568,-0.5917) and ( 0.2515,-0.5648) .. ( 0.2231,-0.5501)
+ .. controls ( 0.1960,-0.5359) and ( 0.1632,-0.5421) .. ( 0.1413,-0.5292)
+ -- ( 0.0626,-0.4601)
+ .. controls ( 0.0525,-0.4430) and ( 0.0547,-0.4207) .. ( 0.0440,-0.4065)
+ .. controls ( 0.0320,-0.3906) and ( 0.0076,-0.3898) .. (-0.0104,-0.3714)
+ .. controls (-0.0515,-0.3289) and ( 0.0146,-0.2721) .. (-0.0737,-0.2358)
+ .. controls (-0.0903,-0.2290) and (-0.0917,-0.2313) .. (-0.1098,-0.2315)
+ -- (-0.1098,-0.1892)
+ .. controls (-0.1137,-0.1607) and (-0.1308,-0.1491) .. (-0.1477,-0.1474)
+ --cycle
+ (-0.7679,-0.1481)
+ .. controls (-0.8119,-0.1523) and (-0.8157,-0.2051) .. (-0.8303,-0.2401)
+ -- (-0.8453,-0.2740)
+ -- (-0.8299,-0.3015)
+ .. controls (-0.7861,-0.2968) and (-0.8116,-0.2403) .. (-0.7732,-0.2278)
+ .. controls (-0.7561,-0.2223) and (-0.7349,-0.2415) .. (-0.7204,-0.2497)
+ .. controls (-0.6711,-0.2774) and (-0.6473,-0.2864) .. (-0.6524,-0.3506)
+ -- (-0.6787,-0.3422)
+ .. controls (-0.6786,-0.3475) and (-0.6826,-0.3544) .. (-0.6787,-0.3655)
+ .. controls (-0.6635,-0.4244) and (-0.5943,-0.3658) .. (-0.5763,-0.3760)
+ .. controls (-0.5586,-0.3861) and (-0.5497,-0.4251) .. (-0.5357,-0.4418)
+ .. controls (-0.5118,-0.4701) and (-0.4694,-0.4662) .. (-0.4504,-0.5047)
+ .. controls (-0.4231,-0.5599) and (-0.4535,-0.6772) .. (-0.4451,-0.7421)
+ .. controls (-0.4389,-0.7901) and (-0.4023,-0.8005) .. (-0.3912,-0.8443)
+ .. controls (-0.3883,-0.8558) and (-0.3874,-0.8667) .. (-0.3869,-0.8774)
+ -- (-0.3386,-0.8778)
+ .. controls (-0.3371,-0.8645) and (-0.3342,-0.8523) .. (-0.3394,-0.8358)
+ .. controls (-0.3448,-0.8167) and (-0.3914,-0.7567) .. (-0.3962,-0.6996)
+ .. controls (-0.4039,-0.6074) and (-0.3294,-0.5871) .. (-0.3545,-0.4954)
+ -- (-0.3886,-0.5039)
+ -- (-0.4196,-0.4442)
+ -- (-0.4864,-0.4090)
+ -- (-0.5345,-0.3241)
+ -- (-0.6106,-0.2802)
+ -- (-0.6106,-0.1975)
+ .. controls (-0.6301,-0.2027) and (-0.6486,-0.2101) .. (-0.6694,-0.2022)
+ .. controls (-0.7004,-0.1904) and (-0.7133,-0.1559) .. (-0.7464,-0.1495)
+ .. controls (-0.7544,-0.1479) and (-0.7616,-0.1475) .. (-0.7679,-0.1481)
+ --cycle
+ ( 0.0029,-0.2060)
+ .. controls (-0.0139,-0.2731) and ( 0.0196,-0.2608) .. ( 0.0476,-0.3014)
+ .. controls ( 0.0682,-0.3314) and ( 0.0511,-0.3569) .. ( 0.0750,-0.3784)
+ .. controls ( 0.0974,-0.3988) and ( 0.1304,-0.3876) .. ( 0.1549,-0.4019)
+ .. controls ( 0.1795,-0.4164) and ( 0.1878,-0.4529) .. ( 0.1987,-0.4783)
+ .. controls ( 0.2461,-0.4539) and ( 0.2519,-0.4021) .. ( 0.2180,-0.3618)
+ .. controls ( 0.1964,-0.3362) and ( 0.1652,-0.3426) .. ( 0.1414,-0.3257)
+ .. controls ( 0.1198,-0.3103) and ( 0.1183,-0.2881) .. ( 0.1007,-0.2689)
+ .. controls ( 0.0838,-0.2504) and ( 0.0265,-0.2166) .. ( 0.0029,-0.2060)
+ --cycle
+ ( 0.2327,-0.2826)
+ .. controls ( 0.1961,-0.2955) and ( 0.1961,-0.3123) .. ( 0.2327,-0.3251)
+ --cycle
+ (-0.7548,-0.3137)
+ .. controls (-0.7774,-0.3164) and (-0.7890,-0.3323) .. (-0.7986,-0.3573)
+ -- (-0.7759,-0.3979)
+ .. controls (-0.7735,-0.3968) and (-0.7711,-0.3964) .. (-0.7688,-0.3946)
+ -- (-0.7205,-0.3166)
+ .. controls (-0.7341,-0.3135) and (-0.7454,-0.3126) .. (-0.7548,-0.3137)
+ --cycle
+ ( 0.4114,-0.3847)
+ .. controls ( 0.4216,-0.4136) and ( 0.4238,-0.4142) .. ( 0.4540,-0.4102)
+ -- ( 0.4540,-0.3932)
+ --cycle
+ ( 0.5395,-0.3997)
+ .. controls ( 0.5263,-0.3990) and ( 0.5044,-0.4032) .. ( 0.4625,-0.4018)
+ -- ( 0.4780,-0.4954)
+ .. controls ( 0.4757,-0.5287) and ( 0.4518,-0.5542) .. ( 0.4648,-0.5776)
+ .. controls ( 0.4852,-0.6142) and ( 0.5202,-0.5603) .. ( 0.5614,-0.5929)
+ .. controls ( 0.5752,-0.6038) and ( 0.6063,-0.6359) .. ( 0.6275,-0.6638)
+ -- ( 0.6570,-0.6132)
+ .. controls ( 0.6460,-0.6042) and ( 0.6347,-0.5954) .. ( 0.6268,-0.5865)
+ -- ( 0.5937,-0.5346)
+ .. controls ( 0.5648,-0.5023) and ( 0.5031,-0.4880) .. ( 0.5646,-0.4273)
+ .. controls ( 0.5574,-0.4062) and ( 0.5528,-0.4005) .. ( 0.5395,-0.3997)
+ --cycle
+ (-0.6609,-0.4273)
+ .. controls (-0.7027,-0.4247) and (-0.7300,-0.4414) .. (-0.7397,-0.4624)
+ -- (-0.7047,-0.5249)
+ .. controls (-0.7013,-0.5263) and (-0.6989,-0.5282) .. (-0.6950,-0.5294)
+ .. controls (-0.6935,-0.4878) and (-0.6933,-0.4806) .. (-0.6609,-0.4528)
+ --cycle
+ (-0.5689,-0.4528)
+ .. controls (-0.6368,-0.4677) and (-0.6352,-0.5020) .. (-0.6354,-0.5634)
+ -- (-0.5757,-0.6071)
+ -- (-0.5162,-0.6826)
+ .. controls (-0.5073,-0.6508) and (-0.5037,-0.6125) .. (-0.5241,-0.5838)
+ .. controls (-0.5384,-0.5639) and (-0.5622,-0.5584) .. (-0.5689,-0.5361)
+ .. controls (-0.5775,-0.5167) and (-0.5648,-0.4918) .. (-0.5689,-0.4528)
+ --cycle
+ (-0.6354,-0.5634)
+ .. controls (-0.6583,-0.5576) and (-0.6713,-0.5579) .. (-0.6839,-0.5619)
+ -- (-0.6487,-0.6248)
+ .. controls (-0.6395,-0.6053) and (-0.6326,-0.5852) .. (-0.6354,-0.5634)
+ --cycle
+ (-0.0056,-0.5890)
+ .. controls (-0.0554,-0.6155) and (-0.0426,-0.6370) .. (-0.0606,-0.6818)
+ -- (-0.1199,-0.7847)
+ .. controls (-0.1298,-0.8015) and (-0.1531,-0.8317) .. (-0.1499,-0.8510)
+ .. controls (-0.1482,-0.8615) and (-0.1397,-0.8702) .. (-0.1295,-0.8795)
+ -- (-0.0507,-0.8802)
+ .. controls (-0.0629,-0.8583) and (-0.0745,-0.8380) .. (-0.0742,-0.8358)
+ .. controls (-0.0792,-0.8239) and (-0.0776,-0.8135) .. (-0.0742,-0.8027)
+ .. controls (-0.0460,-0.7520) and ( 0.0016,-0.7834) .. ( 0.0277,-0.7780)
+ .. controls ( 0.0760,-0.7679) and ( 0.1284,-0.6914) .. ( 0.1207,-0.6405)
+ .. controls ( 0.1150,-0.6017) and ( 0.0841,-0.6082) .. ( 0.0711,-0.6267)
+ .. controls ( 0.0620,-0.6397) and ( 0.0556,-0.7141) .. ( 0.0539,-0.7336)
+ .. controls (-0.0413,-0.7085) and ( 0.0139,-0.6637) .. (-0.0056,-0.5890)
+ --cycle
+ ( 0.4284,-0.6571)
+ .. controls ( 0.4285,-0.7307) and ( 0.4284,-0.7652) .. ( 0.5135,-0.7336)
+ .. controls ( 0.5170,-0.7469) and ( 0.5220,-0.7585) .. ( 0.5179,-0.7726)
+ .. controls ( 0.5091,-0.8019) and ( 0.4473,-0.8546) .. ( 0.4851,-0.8847)
+ -- ( 0.4987,-0.8848)
+ -- ( 0.5768,-0.7509)
+ .. controls ( 0.5767,-0.7509) and ( 0.5767,-0.7507) .. ( 0.5767,-0.7507)
+ .. controls ( 0.5412,-0.6652) and ( 0.5083,-0.6726) .. ( 0.4284,-0.6571)
+ --cycle
+ (-0.2914,-0.6672)
+ .. controls (-0.2998,-0.6666) and (-0.3106,-0.6686) .. (-0.3250,-0.6743)
+ .. controls (-0.3545,-0.7128) and (-0.3081,-0.7358) .. (-0.2850,-0.7678)
+ .. controls (-0.2710,-0.7873) and (-0.2601,-0.8137) .. (-0.2351,-0.8216)
+ .. controls (-0.2083,-0.8301) and (-0.1916,-0.8105) .. (-0.1960,-0.7845)
+ .. controls (-0.2008,-0.7566) and (-0.2232,-0.7418) .. (-0.2396,-0.7216)
+ .. controls (-0.2612,-0.6950) and (-0.2660,-0.6690) .. (-0.2914,-0.6672)
+ --cycle
+ (-0.5641,-0.6998)
+ .. controls (-0.5850,-0.6984) and (-0.5808,-0.7367) .. (-0.5766,-0.7507)
+ .. controls (-0.5748,-0.7566) and (-0.5723,-0.7598) .. (-0.5702,-0.7648)
+ -- (-0.5492,-0.8022)
+ .. controls (-0.5310,-0.8247) and (-0.5120,-0.8367) .. (-0.5052,-0.8613)
+ .. controls (-0.5044,-0.8642) and (-0.5062,-0.8717) .. (-0.5063,-0.8763)
+ -- (-0.4585,-0.8767)
+ .. controls (-0.4596,-0.7984) and (-0.5013,-0.7963) .. (-0.5234,-0.7583)
+ .. controls (-0.5344,-0.7394) and (-0.5352,-0.7120) .. (-0.5535,-0.7030)
+ .. controls (-0.5576,-0.7010) and (-0.5611,-0.7000) .. (-0.5641,-0.6998)
+ --cycle
+ ( 0.1990,-0.7341)
+ .. controls ( 0.1094,-0.7768) and ( 0.2330,-0.8330) .. ( 0.2586,-0.8828)
+ -- ( 0.3183,-0.8833)
+ .. controls ( 0.3165,-0.8684) and ( 0.3066,-0.8565) .. ( 0.2991,-0.8428)
+ .. controls ( 0.2762,-0.8010) and ( 0.2508,-0.7418) .. ( 0.1990,-0.7341)
+ --cycle
+ ( 0.3603,-0.7592)
+ -- ( 0.3859,-0.8188)
+ .. controls ( 0.4178,-0.7853) and ( 0.4108,-0.7527) .. ( 0.3603,-0.7592)
+ --cycle
+ ( 0.4369,-0.8443)
+ .. controls ( 0.4147,-0.8480) and ( 0.3837,-0.8661) .. ( 0.3628,-0.8837)
+ -- ( 0.4240,-0.8842)
+ .. controls ( 0.4307,-0.8690) and ( 0.4358,-0.8541) .. ( 0.4369,-0.8443)
+ --cycle
+ (-0.3205,-0.8528)
+ -- (-0.3266,-0.8779)
+ -- (-0.2773,-0.8783)
+ .. controls (-0.2800,-0.8719) and (-0.2850,-0.8655) .. (-0.2963,-0.8600)
+ --cycle
+ ( 0.1093,-0.8568)
+ .. controls ( 0.0964,-0.8568) and ( 0.0834,-0.8587) .. ( 0.0710,-0.8600)
+ .. controls ( 0.0605,-0.8611) and ( 0.0403,-0.8617) .. ( 0.0312,-0.8664)
+ .. controls ( 0.0240,-0.8701) and ( 0.0203,-0.8751) .. ( 0.0184,-0.8808)
+ -- ( 0.1002,-0.8815)
+ -- ( 0.1050,-0.8698)
+ -- ( 0.1085,-0.8815)
+ -- ( 0.1641,-0.8820)
+ .. controls ( 0.1606,-0.8757) and ( 0.1553,-0.8698) .. ( 0.1463,-0.8649)
+ .. controls ( 0.1347,-0.8586) and ( 0.1221,-0.8568) .. ( 0.1093,-0.8568)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx b/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
new file mode 100644
index 0000000000..fe716add2f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
@@ -0,0 +1,1570 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/rough}
+% The style for rough hexes. The pattern is filled with a light
+% brown, and outlines are not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/rough/.style={
+ draw=none,
+ fill={rgb,100:red,79;green,68;blue,41}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/rough}
+% Roughs. Again, a bit long.
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/rough/.pic={
+ \path[hex/terrain/rough,pic actions,draw=none]
+ (-0.2701, 0.8873)
+ .. controls (-0.2982, 0.8927) and (-0.3250, 0.8675) .. (-0.3296, 0.8537)
+ .. controls (-0.3363, 0.8337) and (-0.3058, 0.8263) .. (-0.2820, 0.8610)
+ .. controls (-0.2717, 0.8450) and (-0.2591, 0.8228) .. (-0.2441, 0.8112)
+ .. controls (-0.2057, 0.7817) and (-0.1394, 0.7709) .. (-0.1208, 0.8270)
+ -- (-0.2226, 0.8355)
+ .. controls (-0.2359, 0.8698) and (-0.2532, 0.8840) .. (-0.2701, 0.8873)
+ --cycle
+ (-0.1081, 0.8792)
+ .. controls (-0.1371, 0.8680) and (-0.1265, 0.8900) .. (-0.1377, 0.8610)
+ .. controls (-0.1121, 0.8691) and (-0.1163, 0.8536) .. (-0.1081, 0.8792)
+ --cycle
+ ( 0.1762, 0.8752)
+ -- ( 0.1761, 0.8710)
+ .. controls ( 0.1746, 0.8556) and ( 0.1707, 0.8704) .. ( 0.1822, 0.8575)
+ .. controls ( 0.1958, 0.8423) and ( 0.2514, 0.8065) .. ( 0.2435, 0.8694)
+ --cycle
+ ( 0.3216, 0.8740)
+ .. controls ( 0.3061, 0.8744) and ( 0.2932, 0.8668) .. ( 0.2896, 0.8414)
+ .. controls ( 0.2869, 0.8222) and ( 0.3049, 0.8110) .. ( 0.3122, 0.7930)
+ -- ( 0.3292, 0.7930)
+ -- ( 0.3377, 0.8440)
+ -- ( 0.3874, 0.8438)
+ -- ( 0.3702, 0.8584)
+ .. controls ( 0.3556, 0.8652) and ( 0.3372, 0.8736) .. ( 0.3216, 0.8740)
+ --cycle
+ ( 0.4696, 0.8697)
+ .. controls ( 0.4362, 0.8687) and ( 0.4116, 0.8113) .. ( 0.4594, 0.7865)
+ -- ( 0.4565, 0.8238)
+ -- ( 0.5034, 0.8485)
+ .. controls ( 0.4927, 0.8641) and ( 0.4807, 0.8700) .. ( 0.4696, 0.8697)
+ --cycle
+ (-0.0783, 0.8695)
+ -- (-0.0698, 0.8185)
+ -- (-0.0528, 0.8185)
+ .. controls (-0.0488, 0.8507) and (-0.0499, 0.8533) .. (-0.0783, 0.8695)
+ --cycle
+ ( 0.0321, 0.8695)
+ .. controls (-0.0074, 0.8534) and (-0.0195, 0.8453) .. (-0.0104, 0.8015)
+ .. controls ( 0.0252, 0.8183) and ( 0.0356, 0.8295) .. ( 0.0321, 0.8695)
+ --cycle
+ (-0.4155, 0.8596)
+ .. controls (-0.4417, 0.8307) and (-0.4165, 0.8213) .. (-0.4032, 0.8284)
+ .. controls (-0.3903, 0.8353) and (-0.3789, 0.8639) .. (-0.4155, 0.8596)
+ --cycle
+ (-0.4857, 0.8525)
+ .. controls (-0.4972, 0.8321) and (-0.5172, 0.8207) .. (-0.5389, 0.8116)
+ -- (-0.5595, 0.7763)
+ .. controls (-0.5377, 0.7748) and (-0.5144, 0.7944) .. (-0.4942, 0.8100)
+ -- (-0.4857, 0.7845)
+ .. controls (-0.4503, 0.8051) and (-0.4552, 0.8169) .. (-0.4688, 0.8525)
+ --cycle
+ ( 0.1002, 0.8511)
+ .. controls ( 0.0869, 0.8528) and ( 0.0769, 0.8478) .. ( 0.0696, 0.8260)
+ -- ( 0.1509, 0.8185)
+ -- ( 0.1509, 0.8355)
+ .. controls ( 0.1302, 0.8408) and ( 0.1135, 0.8493) .. ( 0.1002, 0.8511)
+ --cycle
+ ( 0.2485, 0.8268)
+ .. controls ( 0.2378, 0.8296) and ( 0.2250, 0.8213) .. ( 0.2103, 0.7930)
+ .. controls ( 0.2410, 0.7676) and ( 0.2451, 0.7555) .. ( 0.2867, 0.7591)
+ .. controls ( 0.2791, 0.7861) and ( 0.2665, 0.8220) .. ( 0.2485, 0.8268)
+ --cycle
+ (-0.3754, 0.8100)
+ -- (-0.3754, 0.7930)
+ -- (-0.3330, 0.7930)
+ -- (-0.3330, 0.8100)
+ --cycle
+ ( 0.5066, 0.8010)
+ -- ( 0.5131, 0.7667)
+ -- ( 0.5443, 0.7538)
+ -- ( 0.5566, 0.7611)
+ -- ( 0.5392, 0.7958)
+ --cycle
+ (-0.4008, 0.7930)
+ -- (-0.4348, 0.7591)
+ --cycle
+ ( 0.1509, 0.7930)
+ -- ( 0.1254, 0.7676)
+ .. controls ( 0.1432, 0.7361) and ( 0.1497, 0.7365) .. ( 0.1849, 0.7336)
+ .. controls ( 0.1820, 0.7688) and ( 0.1824, 0.7753) .. ( 0.1509, 0.7930)
+ --cycle
+ ( 0.0301, 0.7854)
+ .. controls ( 0.0240, 0.7861) and ( 0.0162, 0.7858) .. ( 0.0066, 0.7845)
+ -- ( 0.0490, 0.7421)
+ .. controls ( 0.0527, 0.7709) and ( 0.0486, 0.7831) .. ( 0.0301, 0.7854)
+ --cycle
+ (-0.2757, 0.7847)
+ .. controls (-0.2819, 0.7857) and (-0.2896, 0.7857) .. (-0.2990, 0.7845)
+ -- (-0.2820, 0.7411)
+ .. controls (-0.3010, 0.7423) and (-0.3576, 0.7485) .. (-0.3704, 0.7411)
+ .. controls (-0.3832, 0.7314) and (-0.3819, 0.7137) .. (-0.3644, 0.7089)
+ .. controls (-0.3522, 0.7029) and (-0.3199, 0.7069) .. (-0.3075, 0.7089)
+ .. controls (-0.2647, 0.7227) and (-0.2326, 0.7776) .. (-0.2757, 0.7847)
+ --cycle
+ ( 0.3631, 0.7676)
+ -- ( 0.3122, 0.7479)
+ .. controls ( 0.3064, 0.6995) and ( 0.3021, 0.7030) .. ( 0.3546, 0.7166)
+ .. controls ( 0.3550, 0.6777) and ( 0.3499, 0.6644) .. ( 0.3886, 0.6488)
+ .. controls ( 0.3854, 0.7398) and ( 0.3467, 0.6989) .. ( 0.3631, 0.7676)
+ --cycle
+ ( 0.5753, 0.7676)
+ .. controls ( 0.5837, 0.7354) and ( 0.5927, 0.7219) .. ( 0.6097, 0.7131)
+ -- ( 0.5796, 0.7669)
+ .. controls ( 0.5781, 0.7670) and ( 0.5768, 0.7674) .. ( 0.5753, 0.7676)
+ --cycle
+ (-0.5536, 0.7591)
+ -- (-0.5706, 0.7082)
+ -- (-0.5621, 0.6997)
+ -- (-0.5027, 0.6997)
+ .. controls (-0.5136, 0.7365) and (-0.5192, 0.7422) .. (-0.5536, 0.7591)
+ --cycle
+ (-0.1361, 0.7534)
+ .. controls (-0.1512, 0.7509) and (-0.1612, 0.7304) .. (-0.1462, 0.6912)
+ -- (-0.0953, 0.7082)
+ .. controls (-0.1007, 0.7406) and (-0.1210, 0.7560) .. (-0.1361, 0.7534)
+ --cycle
+ (-0.4655, 0.7519)
+ .. controls (-0.4811, 0.7476) and (-0.4887, 0.7146) .. (-0.4551, 0.6911)
+ .. controls (-0.4447, 0.6838) and (-0.4376, 0.6846) .. (-0.4263, 0.6827)
+ -- (-0.4362, 0.7201)
+ .. controls (-0.4440, 0.7466) and (-0.4562, 0.7544) .. (-0.4655, 0.7519)
+ --cycle
+ (-0.2311, 0.7421)
+ -- (-0.2480, 0.7082)
+ -- (-0.1971, 0.6827)
+ -- (-0.2141, 0.7421)
+ --cycle
+ ( 0.4819, 0.7421)
+ -- ( 0.5244, 0.7082)
+ -- ( 0.5329, 0.7166)
+ -- ( 0.5329, 0.7336)
+ --cycle
+ ( 0.4140, 0.7336)
+ .. controls ( 0.4091, 0.6951) and ( 0.4180, 0.6863) .. ( 0.4565, 0.6912)
+ --cycle
+ ( 0.1000, 0.7166)
+ .. controls ( 0.0969, 0.7064) and ( 0.0893, 0.6845) .. ( 0.0896, 0.6747)
+ .. controls ( 0.0911, 0.6142) and ( 0.1603, 0.6571) .. ( 0.1849, 0.6658)
+ -- ( 0.2260, 0.6725)
+ .. controls ( 0.2381, 0.6766) and ( 0.2515, 0.6891) .. ( 0.2429, 0.7019)
+ .. controls ( 0.2330, 0.7185) and ( 0.1897, 0.7058) .. ( 0.1756, 0.7019)
+ -- ( 0.1339, 0.6827)
+ --cycle
+ ( 0.0321, 0.7082)
+ -- (-0.0019, 0.6318)
+ .. controls ( 0.0528, 0.6362) and ( 0.0992, 0.6731) .. ( 0.0321, 0.7082)
+ --cycle
+ ( 0.5074, 0.6997)
+ .. controls ( 0.5090, 0.6563) and ( 0.5107, 0.6351) .. ( 0.5584, 0.6572)
+ --cycle
+ (-0.6116, 0.6867)
+ -- (-0.6413, 0.6359)
+ .. controls (-0.6321, 0.6229) and (-0.6158, 0.6171) .. (-0.6009, 0.6289)
+ .. controls (-0.5820, 0.6437) and (-0.5846, 0.6623) .. (-0.5876, 0.6827)
+ --cycle
+ (-0.3414, 0.6742)
+ .. controls (-0.3515, 0.6371) and (-0.3559, 0.6083) .. (-0.3075, 0.6148)
+ -- (-0.3245, 0.6742)
+ --cycle
+ (-0.5112, 0.6657)
+ -- (-0.5112, 0.6318)
+ -- (-0.4772, 0.6233)
+ -- (-0.5027, 0.5893)
+ -- (-0.5027, 0.5808)
+ -- (-0.4857, 0.5638)
+ .. controls (-0.4400, 0.6074) and (-0.4373, 0.6597) .. (-0.5112, 0.6657)
+ --cycle
+ (-0.2905, 0.6657)
+ .. controls (-0.2682, 0.6064) and (-0.2058, 0.5997) .. (-0.2141, 0.6657)
+ --cycle
+ (-0.0953, 0.6488)
+ -- (-0.1547, 0.6403)
+ -- (-0.1377, 0.5553)
+ -- (-0.1208, 0.5553)
+ .. controls (-0.0926, 0.5982) and (-0.0954, 0.5977) .. (-0.0953, 0.6488)
+ --cycle
+ ( 0.0915, 0.6403)
+ .. controls ( 0.0497, 0.6269) and ( 0.0505, 0.6133) .. ( 0.0490, 0.5723)
+ .. controls ( 0.0796, 0.5913) and ( 0.0822, 0.6066) .. ( 0.0915, 0.6403)
+ --cycle
+ ( 0.4310, 0.6403)
+ .. controls ( 0.4211, 0.6043) and ( 0.4125, 0.5931) .. ( 0.4480, 0.5723)
+ -- ( 0.4819, 0.6148)
+ -- ( 0.4819, 0.6318)
+ --cycle
+ ( 0.5838, 0.6403)
+ .. controls ( 0.5923, 0.5846) and ( 0.5925, 0.5918) .. ( 0.6362, 0.5668)
+ -- ( 0.6521, 0.5663)
+ -- ( 0.6615, 0.5890)
+ .. controls ( 0.6340, 0.6304) and ( 0.6328, 0.6347) .. ( 0.5838, 0.6403)
+ --cycle
+ ( 0.2018, 0.6233)
+ -- ( 0.2018, 0.5808)
+ -- ( 0.2358, 0.5808)
+ .. controls ( 0.2306, 0.6108) and ( 0.2301, 0.6119) .. ( 0.2018, 0.6233)
+ --cycle
+ ( 0.3200, 0.6175)
+ .. controls ( 0.3147, 0.6171) and ( 0.3095, 0.6162) .. ( 0.3037, 0.6159)
+ -- ( 0.3144, 0.5906)
+ .. controls ( 0.3494, 0.5385) and ( 0.3913, 0.6066) .. ( 0.3367, 0.6159)
+ .. controls ( 0.3306, 0.6176) and ( 0.3252, 0.6178) .. ( 0.3200, 0.6175)
+ --cycle
+ ( 0.1254, 0.6148)
+ -- ( 0.1169, 0.5553)
+ -- ( 0.1339, 0.5553)
+ -- ( 0.1594, 0.5808)
+ --cycle
+ (-0.0188, 0.6063)
+ .. controls (-0.0629, 0.5361) and (-0.0925, 0.5785) .. (-0.1038, 0.5044)
+ -- (-0.0528, 0.4875)
+ .. controls (-0.0307, 0.5232) and (-0.0275, 0.5285) .. ( 0.0151, 0.5299)
+ .. controls ( 0.0257, 0.5724) and ( 0.0206, 0.5860) .. (-0.0188, 0.6063)
+ --cycle
+ (-0.2820, 0.5893)
+ .. controls (-0.2753, 0.5073) and (-0.2107, 0.5185) .. (-0.1801, 0.5808)
+ --cycle
+ ( 0.5244, 0.5893)
+ .. controls ( 0.5408, 0.5621) and ( 0.5447, 0.5620) .. ( 0.5753, 0.5553)
+ .. controls ( 0.5625, 0.5873) and ( 0.5579, 0.5867) .. ( 0.5244, 0.5893)
+ --cycle
+ (-0.4023, 0.5839)
+ .. controls (-0.4095, 0.5826) and (-0.4161, 0.5794) .. (-0.4210, 0.5751)
+ .. controls (-0.4340, 0.5638) and (-0.4334, 0.5376) .. (-0.4348, 0.5214)
+ .. controls (-0.3835, 0.5433) and (-0.4044, 0.5361) .. (-0.3499, 0.5299)
+ .. controls (-0.3537, 0.5756) and (-0.3808, 0.5879) .. (-0.4023, 0.5839)
+ --cycle
+ (-0.6717, 0.5836)
+ -- (-0.7007, 0.5338)
+ .. controls (-0.6810, 0.5286) and (-0.6639, 0.5441) .. (-0.6717, 0.5836)
+ --cycle
+ (-0.5683, 0.5760)
+ .. controls (-0.5775, 0.5769) and (-0.5875, 0.5722) .. (-0.6045, 0.5638)
+ -- (-0.5876, 0.5214)
+ -- (-0.5367, 0.5553)
+ .. controls (-0.5506, 0.5688) and (-0.5590, 0.5752) .. (-0.5683, 0.5760)
+ --cycle
+ ( 0.2527, 0.5638)
+ -- ( 0.2782, 0.5129)
+ -- ( 0.2867, 0.5129)
+ -- ( 0.3037, 0.5299)
+ .. controls ( 0.2852, 0.5566) and ( 0.2848, 0.5585) .. ( 0.2527, 0.5638)
+ --cycle
+ ( 0.6946, 0.5616)
+ .. controls ( 0.6944, 0.5600) and ( 0.6921, 0.5548) .. ( 0.6787, 0.5413)
+ -- ( 0.6878, 0.5061)
+ .. controls ( 0.6794, 0.4976) and ( 0.6747, 0.5161) .. ( 0.6694, 0.5045)
+ -- ( 0.6262, 0.5469)
+ .. controls ( 0.6001, 0.4510) and ( 0.6708, 0.4762) .. ( 0.6776, 0.4804)
+ .. controls ( 0.6913, 0.4889) and ( 0.7003, 0.4848) .. ( 0.7078, 0.4982)
+ -- ( 0.7283, 0.4862)
+ -- ( 0.7151, 0.5087)
+ -- ( 0.6995, 0.5381)
+ .. controls ( 0.6915, 0.5505) and ( 0.6933, 0.5583) .. ( 0.6948, 0.5614)
+ --cycle
+ ( 0.1764, 0.5469)
+ .. controls ( 0.1765, 0.5023) and ( 0.1718, 0.4964) .. ( 0.2018, 0.4620)
+ -- ( 0.2443, 0.4790)
+ .. controls ( 0.2287, 0.5015) and ( 0.2286, 0.4995) .. ( 0.2018, 0.4960)
+ -- ( 0.1934, 0.5044)
+ -- ( 0.1934, 0.5469)
+ --cycle
+ ( 0.3971, 0.5384)
+ -- ( 0.4056, 0.5044)
+ -- ( 0.4649, 0.4875)
+ -- ( 0.4904, 0.5384)
+ -- ( 0.4395, 0.5214)
+ --cycle
+ ( 0.5668, 0.5384)
+ .. controls ( 0.5368, 0.5332) and ( 0.5357, 0.5327) .. ( 0.5244, 0.5044)
+ -- ( 0.5329, 0.4960)
+ -- ( 0.5668, 0.5044)
+ -- ( 0.5499, 0.4620)
+ .. controls ( 0.5250, 0.4718) and ( 0.5240, 0.4756) .. ( 0.5074, 0.4535)
+ -- ( 0.5584, 0.4280)
+ .. controls ( 0.6164, 0.4608) and ( 0.5800, 0.4918) .. ( 0.5668, 0.5384)
+ --cycle
+ ( 0.0770, 0.5310)
+ .. controls ( 0.0682, 0.5304) and ( 0.0588, 0.5222) .. ( 0.0538, 0.5053)
+ .. controls ( 0.0343, 0.4401) and ( 0.0794, 0.3794) .. ( 0.1169, 0.4450)
+ -- ( 0.0830, 0.4535)
+ .. controls ( 0.0904, 0.4711) and ( 0.1010, 0.4920) .. ( 0.0968, 0.5117)
+ .. controls ( 0.0941, 0.5249) and ( 0.0858, 0.5317) .. ( 0.0770, 0.5310)
+ --cycle
+ (-0.3075, 0.5299)
+ -- (-0.3414, 0.4790)
+ -- (-0.3330, 0.4705)
+ .. controls (-0.2926, 0.4813) and (-0.2724, 0.4931) .. (-0.3075, 0.5299)
+ --cycle
+ (-0.6105, 0.5210)
+ .. controls (-0.6292, 0.5286) and (-0.6359, 0.5102) .. (-0.6385, 0.4790)
+ -- (-0.5876, 0.5044)
+ .. controls (-0.5967, 0.5132) and (-0.6043, 0.5185) .. (-0.6105, 0.5210)
+ --cycle
+ (-0.6810, 0.5129)
+ .. controls (-0.6924, 0.5121) and (-0.7036, 0.5121) .. (-0.7147, 0.5086)
+ .. controls (-0.7151, 0.5085) and (-0.7153, 0.5083) .. (-0.7157, 0.5081)
+ -- (-0.7430, 0.4612)
+ .. controls (-0.7297, 0.4478) and (-0.7007, 0.4457) .. (-0.6860, 0.4801)
+ .. controls (-0.6815, 0.4906) and (-0.6819, 0.5019) .. (-0.6810, 0.5129)
+ --cycle
+ (-0.1462, 0.5129)
+ .. controls (-0.1949, 0.5129) and (-0.2098, 0.5207) .. (-0.2480, 0.4875)
+ -- (-0.2480, 0.4790)
+ -- (-0.2311, 0.4620)
+ -- (-0.1801, 0.4790)
+ -- (-0.1801, 0.4535)
+ -- (-0.1462, 0.4535)
+ --cycle
+ ( 0.0066, 0.5044)
+ -- (-0.0019, 0.4620)
+ .. controls (-0.0908, 0.4424) and (-0.0252, 0.3738) .. ( 0.0185, 0.4370)
+ .. controls ( 0.0238, 0.4448) and ( 0.0272, 0.4527) .. ( 0.0290, 0.4620)
+ .. controls ( 0.0322, 0.4784) and ( 0.0277, 0.4893) .. ( 0.0236, 0.5044)
+ --cycle
+ (-0.5118, 0.4944)
+ .. controls (-0.5315, 0.4962) and (-0.5506, 0.4944) .. (-0.5676, 0.4798)
+ .. controls (-0.5973, 0.4546) and (-0.5662, 0.4306) .. (-0.5676, 0.4033)
+ .. controls (-0.5682, 0.3806) and (-0.5896, 0.3679) .. (-0.5934, 0.3509)
+ .. controls (-0.6001, 0.3209) and (-0.5656, 0.2986) .. (-0.5452, 0.2838)
+ -- (-0.5621, 0.2498)
+ -- (-0.5282, 0.2498)
+ .. controls (-0.5165, 0.2920) and (-0.5111, 0.3040) .. (-0.5536, 0.3262)
+ .. controls (-0.5263, 0.3959) and (-0.5223, 0.3799) .. (-0.5452, 0.4535)
+ -- (-0.4857, 0.4705)
+ -- (-0.4518, 0.4535)
+ -- (-0.4518, 0.4875)
+ .. controls (-0.4715, 0.4873) and (-0.4920, 0.4926) .. (-0.5118, 0.4944)
+ --cycle
+ ( 0.3588, 0.4802)
+ .. controls ( 0.3533, 0.4806) and ( 0.3465, 0.4801) .. ( 0.3377, 0.4790)
+ -- ( 0.3801, 0.4365)
+ -- ( 0.3886, 0.4450)
+ .. controls ( 0.3795, 0.4694) and ( 0.3752, 0.4789) .. ( 0.3588, 0.4802)
+ --cycle
+ (-0.3923, 0.4620)
+ .. controls (-0.3995, 0.4156) and (-0.3752, 0.3562) .. (-0.3330, 0.3347)
+ -- (-0.3245, 0.3431)
+ -- (-0.3172, 0.4229)
+ -- (-0.3754, 0.4620)
+ --cycle
+ ( 0.1254, 0.4620)
+ .. controls ( 0.1311, 0.4303) and ( 0.1371, 0.3466) .. ( 0.1909, 0.3657)
+ .. controls ( 0.2082, 0.3718) and ( 0.2132, 0.3929) .. ( 0.2274, 0.4041)
+ .. controls ( 0.2376, 0.4123) and ( 0.2569, 0.4158) .. ( 0.2697, 0.4196)
+ .. controls ( 0.2404, 0.4707) and ( 0.2211, 0.4375) .. ( 0.1594, 0.4196)
+ --cycle
+ ( 0.6347, 0.4620)
+ .. controls ( 0.5865, 0.3970) and ( 0.5594, 0.4145) .. ( 0.5753, 0.3516)
+ .. controls ( 0.6248, 0.3639) and ( 0.6190, 0.3659) .. ( 0.6687, 0.3516)
+ .. controls ( 0.6624, 0.3942) and ( 0.6392, 0.4050) .. ( 0.6772, 0.4280)
+ --cycle
+ (-0.2735, 0.4535)
+ .. controls (-0.2776, 0.4212) and (-0.2764, 0.4187) .. (-0.2480, 0.4026)
+ -- (-0.2565, 0.4535)
+ --cycle
+ ( 0.4565, 0.4535)
+ -- ( 0.4395, 0.4365)
+ -- ( 0.4395, 0.4280)
+ -- ( 0.4565, 0.4111)
+ -- ( 0.4649, 0.4111)
+ -- ( 0.4819, 0.4280)
+ --cycle
+ ( 0.7558, 0.4524)
+ .. controls ( 0.7494, 0.4473) and ( 0.7430, 0.4394) .. ( 0.7366, 0.4280)
+ .. controls ( 0.7552, 0.4225) and ( 0.7653, 0.4183) .. ( 0.7753, 0.4176)
+ --cycle
+ (-0.4518, 0.4450)
+ -- (-0.4772, 0.4365)
+ -- (-0.4518, 0.4196)
+ --cycle
+ (-0.6423, 0.4300)
+ .. controls (-0.6532, 0.4307) and (-0.6637, 0.4304) .. (-0.6690, 0.4274)
+ .. controls (-0.6866, 0.4158) and (-0.6850, 0.3910) .. (-0.6630, 0.3848)
+ -- (-0.6130, 0.3848)
+ -- (-0.6130, 0.4274)
+ .. controls (-0.6201, 0.4279) and (-0.6314, 0.4294) .. (-0.6423, 0.4300)
+ --cycle
+ ( 0.7111, 0.4196)
+ -- ( 0.7451, 0.3771)
+ .. controls ( 0.7399, 0.4071) and ( 0.7394, 0.4082) .. ( 0.7111, 0.4196)
+ --cycle
+ (-0.7404, 0.4111)
+ -- (-0.7574, 0.3347)
+ -- (-0.7065, 0.3262)
+ -- (-0.7234, 0.4111)
+ --cycle
+ (-0.1547, 0.4111)
+ -- (-0.1462, 0.3601)
+ -- (-0.1038, 0.3856)
+ .. controls (-0.0885, 0.3562) and (-0.0864, 0.3520) .. (-0.0528, 0.3516)
+ -- (-0.0783, 0.4026)
+ --cycle
+ ( 0.3886, 0.4111)
+ .. controls ( 0.3213, 0.4055) and ( 0.3289, 0.3610) .. ( 0.3801, 0.3347)
+ --cycle
+ ( 0.3801, 0.3347)
+ -- ( 0.3801, 0.3262)
+ -- ( 0.3631, 0.3092)
+ -- ( 0.3801, 0.2753)
+ -- ( 0.3971, 0.2753)
+ .. controls ( 0.4050, 0.3067) and ( 0.4083, 0.3157) .. ( 0.3801, 0.3347)
+ --cycle
+ ( 0.5074, 0.4026)
+ -- ( 0.4565, 0.3516)
+ .. controls ( 0.4935, 0.3518) and ( 0.5571, 0.3505) .. ( 0.5074, 0.4026)
+ --cycle
+ (-0.4348, 0.3941)
+ -- (-0.4433, 0.3856)
+ -- (-0.4348, 0.3516)
+ -- (-0.4008, 0.3856)
+ --cycle
+ (-0.5112, 0.3856)
+ -- (-0.5027, 0.3347)
+ -- (-0.4518, 0.3856)
+ --cycle
+ ( 0.0405, 0.3856)
+ .. controls ( 0.0481, 0.3444) and ( 0.0444, 0.3224) .. ( 0.0830, 0.3007)
+ -- ( 0.1169, 0.3686)
+ --cycle
+ ( 0.2586, 0.3821)
+ .. controls ( 0.2327, 0.3759) and ( 0.2165, 0.3319) .. ( 0.2699, 0.3440)
+ -- ( 0.2952, 0.3516)
+ .. controls ( 0.2928, 0.3578) and ( 0.2924, 0.3646) .. ( 0.2856, 0.3722)
+ .. controls ( 0.2770, 0.3820) and ( 0.2672, 0.3842) .. ( 0.2586, 0.3821)
+ --cycle
+ (-0.2650, 0.3686)
+ .. controls (-0.2695, 0.3349) and (-0.2648, 0.3302) .. (-0.2311, 0.3347)
+ --cycle
+ ( 0.8037, 0.3670)
+ .. controls ( 0.7958, 0.3549) and ( 0.8002, 0.3405) .. ( 0.8215, 0.3262)
+ -- ( 0.8225, 0.3334)
+ --cycle
+ (-0.0104, 0.3601)
+ -- (-0.0273, 0.3007)
+ -- (-0.0698, 0.3007)
+ .. controls (-0.0385, 0.2465) and ( 0.0057, 0.2824) .. ( 0.0066, 0.3601)
+ --cycle
+ (-0.4348, 0.3431)
+ -- (-0.4348, 0.3007)
+ .. controls (-0.4123, 0.3163) and (-0.4143, 0.3163) .. (-0.4178, 0.3431)
+ --cycle
+ (-0.8185, 0.3317)
+ -- (-0.8365, 0.3007)
+ -- (-0.7998, 0.3007)
+ -- (-0.7998, 0.3177)
+ --cycle
+ ( 0.4649, 0.3315)
+ .. controls ( 0.4219, 0.3238) and ( 0.4094, 0.2904) .. ( 0.4395, 0.2583)
+ -- ( 0.4565, 0.2922)
+ -- ( 0.5414, 0.2922)
+ -- ( 0.5414, 0.3092)
+ .. controls ( 0.5190, 0.3194) and ( 0.4902, 0.3361) .. ( 0.4649, 0.3315)
+ --cycle
+ (-0.6388, 0.3309)
+ .. controls (-0.6527, 0.3328) and (-0.6597, 0.3256) .. (-0.6674, 0.3156)
+ -- (-0.6895, 0.2838)
+ .. controls (-0.6839, 0.2742) and (-0.6820, 0.2649) .. (-0.6700, 0.2597)
+ .. controls (-0.6290, 0.2418) and (-0.5917, 0.3244) .. (-0.6388, 0.3309)
+ --cycle
+ (-0.1462, 0.3262)
+ .. controls (-0.1623, 0.2693) and (-0.1610, 0.2418) .. (-0.0953, 0.2498)
+ -- (-0.1292, 0.3262)
+ --cycle
+ ( 0.2103, 0.3262)
+ -- ( 0.1849, 0.2753)
+ .. controls ( 0.2243, 0.2757) and ( 0.2321, 0.2881) .. ( 0.2273, 0.3262)
+ --cycle
+ ( 0.3292, 0.3262)
+ -- ( 0.2782, 0.2668)
+ -- ( 0.2782, 0.2498)
+ -- ( 0.3390, 0.2109)
+ .. controls ( 0.3506, 0.1937) and ( 0.3360, 0.1683) .. ( 0.3513, 0.1579)
+ .. controls ( 0.3686, 0.1461) and ( 0.4096, 0.1877) .. ( 0.3631, 0.2073)
+ -- ( 0.3801, 0.2243)
+ -- ( 0.3377, 0.2583)
+ -- ( 0.3546, 0.3007)
+ --cycle
+ ( 0.6941, 0.3262)
+ -- ( 0.6941, 0.2838)
+ -- ( 0.7111, 0.2838)
+ -- ( 0.7111, 0.3262)
+ --cycle
+ ( 0.7706, 0.3177)
+ -- ( 0.7366, 0.3092)
+ -- ( 0.7366, 0.2922)
+ -- ( 0.7451, 0.2838)
+ -- ( 0.7621, 0.2838)
+ --cycle
+ (-0.7913, 0.3092)
+ -- (-0.7828, 0.2583)
+ -- (-0.7658, 0.2583)
+ -- (-0.7574, 0.2668)
+ -- (-0.7743, 0.3092)
+ --cycle
+ ( 0.6093, 0.3092)
+ -- ( 0.5838, 0.2413)
+ -- ( 0.6093, 0.2668)
+ -- ( 0.6347, 0.2583)
+ -- ( 0.6432, 0.3092)
+ --cycle
+ (-0.3494, 0.3079)
+ .. controls (-0.4142, 0.2885) and (-0.3452, 0.2195) .. (-0.3258, 0.2842)
+ -- (-0.3258, 0.3079)
+ --cycle
+ ( 0.1084, 0.3007)
+ .. controls ( 0.1005, 0.2885) and ( 0.0956, 0.2764) .. ( 0.0807, 0.2708)
+ .. controls ( 0.0663, 0.2653) and ( 0.0431, 0.2752) .. ( 0.0335, 0.2617)
+ .. controls ( 0.0200, 0.2427) and ( 0.0540, 0.2322) .. ( 0.0660, 0.2298)
+ .. controls ( 0.1034, 0.2226) and ( 0.1204, 0.2407) .. ( 0.1509, 0.2583)
+ --cycle
+ (-0.2201, 0.2946)
+ .. controls (-0.2487, 0.2922) and (-0.2701, 0.2767) .. (-0.2990, 0.2583)
+ -- (-0.2565, 0.2073)
+ -- (-0.1886, 0.2922)
+ .. controls (-0.2003, 0.2947) and (-0.2106, 0.2954) .. (-0.2201, 0.2946)
+ --cycle
+ (-0.4772, 0.2583)
+ .. controls (-0.5022, 0.2481) and (-0.5267, 0.2367) .. (-0.5427, 0.2138)
+ .. controls (-0.5681, 0.1773) and (-0.5547, 0.1549) .. (-0.5112, 0.1575)
+ .. controls (-0.4976, 0.1584) and (-0.4899, 0.1613) .. (-0.4772, 0.1649)
+ -- (-0.4688, 0.1564)
+ -- (-0.4688, 0.1225)
+ -- (-0.4518, 0.1225)
+ .. controls (-0.4302, 0.1774) and (-0.4489, 0.1866) .. (-0.5027, 0.1988)
+ --cycle
+ (-0.4433, 0.2583)
+ -- (-0.4348, 0.2073)
+ -- (-0.4263, 0.2073)
+ -- (-0.4093, 0.2243)
+ -- (-0.4263, 0.2583)
+ --cycle
+ (-0.8446, 0.2512)
+ .. controls (-0.8626, 0.2459) and (-0.8672, 0.2066) .. (-0.8677, 0.1903)
+ .. controls (-0.8362, 0.1909) and (-0.8333, 0.1924) .. (-0.8168, 0.1649)
+ -- (-0.7913, 0.1734)
+ .. controls (-0.7979, 0.1888) and (-0.8118, 0.2347) .. (-0.8218, 0.2431)
+ .. controls (-0.8311, 0.2510) and (-0.8386, 0.2530) .. (-0.8446, 0.2512)
+ --cycle
+ (-0.6130, 0.2498)
+ -- (-0.6385, 0.1988)
+ .. controls (-0.5969, 0.2023) and (-0.5781, 0.2132) .. (-0.6130, 0.2498)
+ --cycle
+ ( 0.7209, 0.2469)
+ .. controls ( 0.7057, 0.2498) and ( 0.6918, 0.2452) .. ( 0.6875, 0.2241)
+ .. controls ( 0.6832, 0.1844) and ( 0.7333, 0.1800) .. ( 0.6875, 0.1309)
+ .. controls ( 0.6935, 0.1147) and ( 0.6966, 0.1050) .. ( 0.7123, 0.0936)
+ .. controls ( 0.7287, 0.0815) and ( 0.7996, 0.0650) .. ( 0.8166, 0.0782)
+ .. controls ( 0.8441, 0.0997) and ( 0.8443, 0.1468) .. ( 0.7875, 0.1564)
+ -- ( 0.8130, 0.1055)
+ -- ( 0.7706, 0.0970)
+ .. controls ( 0.7537, 0.1222) and ( 0.7493, 0.1200) .. ( 0.7196, 0.1225)
+ -- ( 0.7621, 0.2241)
+ .. controls ( 0.7526, 0.2335) and ( 0.7361, 0.2440) .. ( 0.7209, 0.2469)
+ --cycle
+ ( 0.5029, 0.2452)
+ .. controls ( 0.4837, 0.2409) and ( 0.4663, 0.2223) .. ( 0.4749, 0.2012)
+ .. controls ( 0.4861, 0.1737) and ( 0.5371, 0.1377) .. ( 0.5668, 0.1819)
+ .. controls ( 0.5276, 0.2081) and ( 0.5495, 0.2337) .. ( 0.5218, 0.2442)
+ .. controls ( 0.5159, 0.2464) and ( 0.5093, 0.2466) .. ( 0.5029, 0.2452)
+ --cycle
+ (-0.7065, 0.2328)
+ .. controls (-0.7174, 0.2318) and (-0.7287, 0.2323) .. (-0.7391, 0.2277)
+ .. controls (-0.7803, 0.2096) and (-0.7474, 0.1632) .. (-0.7171, 0.2086)
+ --cycle
+ (-0.0188, 0.2328)
+ .. controls (-0.0280, 0.2283) and (-0.0341, 0.2273) .. (-0.0430, 0.2197)
+ .. controls (-0.1097, 0.1629) and ( 0.0304, 0.1216) .. (-0.0010, 0.2037)
+ --cycle
+ ( 0.2612, 0.2328)
+ -- ( 0.1849, 0.2073)
+ .. controls ( 0.2210, 0.1548) and ( 0.2532, 0.1800) .. ( 0.2612, 0.2328)
+ --cycle
+ (-0.3330, 0.2243)
+ -- (-0.3958, 0.1938)
+ .. controls (-0.4203, 0.1689) and (-0.3928, 0.1505) .. (-0.4518, 0.0970)
+ -- (-0.4518, 0.0800)
+ .. controls (-0.4010, 0.0738) and (-0.3851, 0.1024) .. (-0.3754, 0.1479)
+ .. controls (-0.3297, 0.1544) and (-0.3165, 0.1646) .. (-0.2990, 0.2073)
+ --cycle
+ (-0.1971, 0.2243)
+ -- (-0.2056, 0.1479)
+ -- (-0.1462, 0.1394)
+ -- (-0.1462, 0.1564)
+ -- (-0.1801, 0.2243)
+ --cycle
+ ( 0.8384, 0.2243)
+ .. controls ( 0.8324, 0.1770) and ( 0.8519, 0.1318) .. ( 0.8979, 0.1140)
+ -- ( 0.9064, 0.1225)
+ .. controls ( 0.8952, 0.1805) and ( 0.8898, 0.1922) .. ( 0.8384, 0.2243)
+ --cycle
+ ( 0.0151, 0.2073)
+ -- ( 0.0151, 0.1903)
+ -- ( 0.0405, 0.1819)
+ -- ( 0.0405, 0.1479)
+ -- ( 0.0575, 0.1479)
+ -- ( 0.0575, 0.1564)
+ -- ( 0.0745, 0.1734)
+ .. controls ( 0.0548, 0.2031) and ( 0.0517, 0.2101) .. ( 0.0151, 0.2073)
+ --cycle
+ ( 0.6262, 0.2073)
+ -- ( 0.6347, 0.1734)
+ -- ( 0.6517, 0.1734)
+ -- ( 0.6602, 0.1819)
+ -- ( 0.6602, 0.1988)
+ --cycle
+ ( 0.7621, 0.2073)
+ -- ( 0.7621, 0.1649)
+ .. controls ( 0.7903, 0.1763) and ( 0.7908, 0.1774) .. ( 0.7960, 0.2073)
+ --cycle
+ (-0.8988, 0.1938)
+ -- (-0.9014, 0.1893)
+ .. controls (-0.9006, 0.1906) and (-0.8994, 0.1914) .. (-0.8988, 0.1930)
+ .. controls (-0.8987, 0.1933) and (-0.8989, 0.1936) .. (-0.8988, 0.1938)
+ --cycle
+ (-0.1292, 0.1903)
+ -- (-0.1292, 0.1479)
+ -- (-0.0953, 0.1819)
+ --cycle
+ ( 0.2952, 0.1903)
+ .. controls ( 0.2890, 0.1611) and ( 0.2867, 0.1567) .. ( 0.3122, 0.1394)
+ -- ( 0.3122, 0.1903)
+ --cycle
+ (-0.6895, 0.1819)
+ -- (-0.6895, 0.1479)
+ -- (-0.6640, 0.1564)
+ -- (-0.6640, 0.1734)
+ -- (-0.6725, 0.1819)
+ --cycle
+ ( 0.1480, 0.1735)
+ .. controls ( 0.1310, 0.1697) and ( 0.1252, 0.1423) .. ( 0.1594, 0.1225)
+ -- ( 0.1849, 0.1479)
+ .. controls ( 0.1726, 0.1694) and ( 0.1583, 0.1757) .. ( 0.1480, 0.1735)
+ --cycle
+ (-0.6300, 0.1734)
+ .. controls (-0.6429, 0.1238) and (-0.6284, 0.1142) .. (-0.5876, 0.0885)
+ -- (-0.6215, 0.0461)
+ -- (-0.6640, 0.0800)
+ .. controls (-0.6670, 0.0697) and (-0.6746, 0.0478) .. (-0.6743, 0.0381)
+ .. controls (-0.6736, 0.0066) and (-0.6456, 0.0044) .. (-0.6219, 0.0135)
+ .. controls (-0.5925, 0.0247) and (-0.5281, 0.0777) .. (-0.5319, 0.1120)
+ .. controls (-0.5350, 0.1399) and (-0.5677, 0.1315) .. (-0.5853, 0.1410)
+ .. controls (-0.5998, 0.1487) and (-0.6048, 0.1603) .. (-0.6130, 0.1734)
+ --cycle
+ (-0.6640, 0.0800)
+ .. controls (-0.6595, 0.1137) and (-0.6643, 0.1185) .. (-0.6980, 0.1140)
+ --cycle
+ (-0.2565, 0.1734)
+ -- (-0.3584, 0.1309)
+ -- (-0.3330, 0.0800)
+ -- (-0.2990, 0.1140)
+ .. controls (-0.2519, 0.1142) and (-0.2453, 0.1302) .. (-0.2565, 0.1734)
+ --cycle
+ ( 0.2271, 0.1407)
+ .. controls ( 0.1925, 0.1328) and ( 0.1533, 0.0767) .. ( 0.2190, 0.0890)
+ -- ( 0.2612, 0.0970)
+ .. controls ( 0.2604, 0.1073) and ( 0.2611, 0.1186) .. ( 0.2562, 0.1281)
+ .. controls ( 0.2497, 0.1405) and ( 0.2386, 0.1433) .. ( 0.2271, 0.1407)
+ --cycle
+ (-0.0698, 0.1394)
+ .. controls (-0.0981, 0.1280) and (-0.0986, 0.1270) .. (-0.1038, 0.0970)
+ -- (-0.0698, 0.0970)
+ --cycle
+ ( 0.3971, 0.1394)
+ -- ( 0.3971, 0.1225)
+ -- ( 0.4056, 0.1140)
+ -- ( 0.4395, 0.1225)
+ -- ( 0.4395, 0.1394)
+ --cycle
+ ( 0.6090, 0.1316)
+ .. controls ( 0.5968, 0.1320) and ( 0.5847, 0.1313) .. ( 0.5753, 0.1309)
+ .. controls ( 0.5937, 0.1034) and ( 0.6031, 0.1066) .. ( 0.6347, 0.1055)
+ .. controls ( 0.5863, 0.0654) and ( 0.5849, 0.0269) .. ( 0.6432,-0.0049)
+ -- ( 0.6262, 0.0461)
+ -- ( 0.6488, 0.0715)
+ .. controls ( 0.6828, 0.1212) and ( 0.6456, 0.1307) .. ( 0.6090, 0.1316)
+ --cycle
+ (-0.9354, 0.1309)
+ -- (-0.9422, 0.1193)
+ -- (-0.9356, 0.0800)
+ -- (-0.8847, 0.0970)
+ -- (-0.8847, 0.1309)
+ --cycle
+ (-0.8507, 0.1309)
+ .. controls (-0.8417, 0.0965) and (-0.8401, 0.0890) .. (-0.8083, 0.0715)
+ .. controls (-0.8126, 0.1087) and (-0.8139, 0.1187) .. (-0.8507, 0.1309)
+ --cycle
+ ( 0.1084, 0.1309)
+ -- ( 0.0575, 0.1225)
+ .. controls ( 0.0537, 0.0923) and ( 0.0510, 0.0922) .. ( 0.0236, 0.0800)
+ .. controls ( 0.0578, 0.0292) and ( 0.1015, 0.0713) .. ( 0.1084, 0.1309)
+ --cycle
+ ( 0.4819, 0.1309)
+ -- ( 0.5028, 0.0739)
+ -- ( 0.4819,-0.0049)
+ .. controls ( 0.4993,-0.0102) and ( 0.5299,-0.0233) .. ( 0.5472,-0.0163)
+ .. controls ( 0.5677,-0.0081) and ( 0.5663, 0.0195) .. ( 0.5644, 0.0376)
+ .. controls ( 0.5592, 0.0860) and ( 0.5308, 0.1235) .. ( 0.4819, 0.1309)
+ --cycle
+ ( 0.3461, 0.1140)
+ .. controls ( 0.3108, 0.0951) and ( 0.3082, 0.0849) .. ( 0.3037, 0.0461)
+ .. controls ( 0.3481, 0.0535) and ( 0.3552, 0.0713) .. ( 0.3461, 0.1140)
+ --cycle
+ (-0.4857, 0.0970)
+ .. controls (-0.5241, 0.0326) and (-0.4983, 0.0214) .. (-0.4348, 0.0206)
+ .. controls (-0.4420,-0.0343) and (-0.4036,-0.0413) .. (-0.3728,-0.0186)
+ .. controls (-0.3557,-0.0061) and (-0.3442, 0.0265) .. (-0.3330, 0.0461)
+ .. controls (-0.3807, 0.0916) and (-0.3834, 0.0423) .. (-0.3839, 0.0036)
+ --cycle
+ (-0.2480, 0.0970)
+ -- (-0.2480, 0.0800)
+ -- (-0.2056, 0.0800)
+ -- (-0.2056, 0.0970)
+ --cycle
+ (-0.1292, 0.0970)
+ -- (-0.1462, 0.0800)
+ -- (-0.1462, 0.0715)
+ -- (-0.1292, 0.0546)
+ -- (-0.1208, 0.0546)
+ -- (-0.1038, 0.0715)
+ --cycle
+ ( 0.3801, 0.0800)
+ -- ( 0.3801, 0.0206)
+ -- ( 0.3971, 0.0206)
+ -- ( 0.4056, 0.0291)
+ -- ( 0.4140, 0.0800)
+ --cycle
+ ( 0.4225, 0.0800)
+ .. controls ( 0.4316, 0.0456) and ( 0.4332, 0.0381) .. ( 0.4649, 0.0206)
+ .. controls ( 0.4618, 0.0591) and ( 0.4606, 0.0679) .. ( 0.4225, 0.0800)
+ --cycle
+ ( 0.8809, 0.0759)
+ .. controls ( 0.8722, 0.0759) and ( 0.8634, 0.0659) .. ( 0.8554, 0.0461)
+ -- ( 0.9064, 0.0461)
+ .. controls ( 0.8984, 0.0659) and ( 0.8897, 0.0759) .. ( 0.8809, 0.0759)
+ --cycle
+ ( 0.1413, 0.0752)
+ .. controls ( 0.1324, 0.0761) and ( 0.1215, 0.0749) .. ( 0.1084, 0.0715)
+ .. controls ( 0.1253, 0.0362) and ( 0.1326, 0.0290) .. ( 0.1679, 0.0121)
+ .. controls ( 0.1762, 0.0511) and ( 0.1679, 0.0726) .. ( 0.1413, 0.0752)
+ --cycle
+ (-0.7409, 0.0649)
+ .. controls (-0.7448, 0.0648) and (-0.7485, 0.0639) .. (-0.7518, 0.0618)
+ .. controls (-0.7690, 0.0508) and (-0.7544,-0.0147) .. (-0.7438,-0.0279)
+ .. controls (-0.7341,-0.0398) and (-0.7273,-0.0409) .. (-0.7149,-0.0473)
+ -- (-0.7065, 0.0546)
+ .. controls (-0.7159, 0.0583) and (-0.7292, 0.0653) .. (-0.7409, 0.0649)
+ --cycle
+ ( 0.9762, 0.0591)
+ -- ( 0.9564, 0.0203)
+ .. controls ( 0.9517,-0.0013) and ( 0.9637,-0.0270) .. ( 0.9761,-0.0510)
+ -- ( 0.9997,-0.0105)
+ .. controls ( 1.0000,-0.0010) and ( 1.0000, 0.0075) .. ( 0.9998, 0.0171)
+ --cycle
+ (-0.1717, 0.0546)
+ .. controls (-0.2038, 0.0492) and (-0.2042, 0.0472) .. (-0.2226, 0.0206)
+ -- (-0.1717, 0.0206)
+ --cycle
+ ( 0.7281, 0.0546)
+ -- ( 0.6687, 0.0461)
+ -- ( 0.6687, 0.0291)
+ .. controls ( 0.7027, 0.0233) and ( 0.7100, 0.0245) .. ( 0.7281, 0.0546)
+ --cycle
+ (-0.9726, 0.0477)
+ .. controls (-0.9758, 0.0477) and (-0.9806, 0.0473) .. (-0.9843, 0.0471)
+ -- (-1.0000, 0.0201)
+ -- (-0.9912, 0.0044)
+ -- (-0.9696, 0.0206)
+ -- (-0.9448,-0.0784)
+ -- (-0.9432,-0.0812)
+ -- (-0.8422,-0.0728)
+ -- (-0.8677,-0.0982)
+ -- (-0.8677,-0.1322)
+ .. controls (-0.8159,-0.1280) and (-0.7904,-0.1016) .. (-0.8308,-0.0569)
+ .. controls (-0.8618,-0.0226) and (-0.8917,-0.0142) .. (-0.9356,-0.0049)
+ .. controls (-0.9393, 0.0402) and (-0.9477, 0.0479) .. (-0.9726, 0.0477)
+ --cycle
+ (-0.0273, 0.0430)
+ .. controls (-0.1037, 0.0283) and (-0.0659,-0.0617) .. (-0.0043, 0.0049)
+ .. controls ( 0.0066, 0.0167) and ( 0.0086, 0.0240) .. ( 0.0151, 0.0376)
+ .. controls ( 0.0001, 0.0416) and (-0.0110, 0.0461) .. (-0.0273, 0.0430)
+ --cycle
+ ( 0.2361, 0.0409)
+ .. controls ( 0.2189, 0.0454) and ( 0.2022, 0.0366) .. ( 0.2018, 0.0036)
+ .. controls ( 0.2379, 0.0017) and ( 0.2409,-0.0057) .. ( 0.2527,-0.0388)
+ .. controls ( 0.2946,-0.0103) and ( 0.2647, 0.0336) .. ( 0.2361, 0.0409)
+ --cycle
+ (-0.2852, 0.0389)
+ .. controls (-0.3005, 0.0379) and (-0.3023, 0.0289) .. (-0.2990, 0.0036)
+ -- (-0.2650, 0.0376)
+ .. controls (-0.2735, 0.0387) and (-0.2801, 0.0393) .. (-0.2852, 0.0389)
+ --cycle
+ ( 0.3037, 0.0291)
+ .. controls ( 0.3231,-0.0055) and ( 0.3338,-0.0035) .. ( 0.3716,-0.0049)
+ .. controls ( 0.3519, 0.0279) and ( 0.3402, 0.0269) .. ( 0.3037, 0.0291)
+ --cycle
+ (-0.8206, 0.0192)
+ .. controls (-0.8430,-0.0126) and (-0.8179,-0.0291) .. (-0.8045,-0.0204)
+ .. controls (-0.7923,-0.0127) and (-0.7854, 0.0239) .. (-0.8206, 0.0192)
+ --cycle
+ (-0.1371, 0.0134)
+ .. controls (-0.1438, 0.0114) and (-0.1493, 0.0019) .. (-0.1547,-0.0134)
+ -- (-0.1123,-0.0049)
+ .. controls (-0.1224, 0.0099) and (-0.1303, 0.0154) .. (-0.1371, 0.0134)
+ --cycle
+ ( 0.7536, 0.0121)
+ -- ( 0.7111, 0.0036)
+ -- ( 0.7111,-0.0304)
+ .. controls ( 0.7469,-0.0274) and ( 0.7588,-0.0268) .. ( 0.7536, 0.0121)
+ --cycle
+ ( 0.0750, 0.0106)
+ .. controls ( 0.0661, 0.0093) and ( 0.0570, 0.0067) .. ( 0.0490, 0.0036)
+ .. controls ( 0.0651,-0.0248) and ( 0.0680,-0.0250) .. ( 0.1000,-0.0304)
+ .. controls ( 0.0590,-0.0732) and ( 0.0241,-0.0913) .. ( 0.0745,-0.1492)
+ .. controls ( 0.1110,-0.1331) and ( 0.1272,-0.1362) .. ( 0.1424,-0.0982)
+ -- ( 0.1339,-0.0897)
+ -- ( 0.1000,-0.0982)
+ .. controls ( 0.1057,-0.0835) and ( 0.1261,-0.0416) .. ( 0.1266,-0.0304)
+ .. controls ( 0.1284, 0.0069) and ( 0.1019, 0.0144) .. ( 0.0750, 0.0106)
+ --cycle
+ (-0.2311, 0.0036)
+ -- (-0.2311,-0.0049)
+ -- (-0.2480,-0.0219)
+ .. controls (-0.2373,-0.0386) and (-0.2259,-0.0581) .. (-0.2054,-0.0643)
+ .. controls (-0.1781,-0.0725) and (-0.1665,-0.0457) .. (-0.1984,-0.0158)
+ .. controls (-0.2100,-0.0050) and (-0.2177,-0.0027) .. (-0.2311, 0.0036)
+ --cycle
+ ( 0.8469, 0.0036)
+ .. controls ( 0.8030,-0.0174) and ( 0.7970,-0.0343) .. ( 0.7706,-0.0728)
+ .. controls ( 0.7934,-0.1060) and ( 0.7994,-0.1083) .. ( 0.8384,-0.0982)
+ -- ( 0.8384,-0.0813)
+ -- ( 0.8130,-0.0728)
+ -- ( 0.8130,-0.0558)
+ .. controls ( 0.8448,-0.0370) and ( 0.8501,-0.0340) .. ( 0.8469, 0.0036)
+ --cycle
+ (-0.4603,-0.0049)
+ .. controls (-0.4831,-0.0157) and (-0.5088,-0.0301) .. (-0.5182,-0.0557)
+ .. controls (-0.5278,-0.0816) and (-0.5057,-0.0969) .. (-0.4907,-0.0883)
+ .. controls (-0.4763,-0.0802) and (-0.4829,-0.0617) .. (-0.4518,-0.0304)
+ -- (-0.4518,-0.0134)
+ --cycle
+ ( 0.4264,-0.0112)
+ .. controls ( 0.3999,-0.0108) and ( 0.3834,-0.0280) .. ( 0.4056,-0.0728)
+ -- ( 0.4565,-0.0558)
+ -- ( 0.4649,-0.1237)
+ -- ( 0.4819,-0.1237)
+ -- ( 0.5074,-0.0558)
+ .. controls ( 0.4895,-0.0297) and ( 0.4529,-0.0116) .. ( 0.4264,-0.0112)
+ --cycle
+ (-0.5706,-0.0134)
+ -- (-0.6045,-0.0388)
+ .. controls (-0.6509,-0.0147) and (-0.6809,-0.0236) .. (-0.6725,-0.0813)
+ -- (-0.6980,-0.0897)
+ .. controls (-0.6821,-0.1195) and (-0.6788,-0.1210) .. (-0.6470,-0.1322)
+ .. controls (-0.6222,-0.0713) and (-0.6544,-0.0848) .. (-0.6130,-0.0473)
+ .. controls (-0.5953,-0.0788) and (-0.5888,-0.0784) .. (-0.5536,-0.0813)
+ --cycle
+ ( 0.1679,-0.0219)
+ .. controls ( 0.1573,-0.0941) and ( 0.2349,-0.1063) .. ( 0.2526,-0.0847)
+ .. controls ( 0.2609,-0.0744) and ( 0.2602,-0.0596) .. ( 0.2612,-0.0473)
+ --cycle
+ (-0.3112,-0.0274)
+ .. controls (-0.3586,-0.0281) and (-0.4163,-0.0558) .. (-0.4212,-0.0609)
+ .. controls (-0.4295,-0.0692) and (-0.4319,-0.0787) .. (-0.4327,-0.0899)
+ -- (-0.4327,-0.1492)
+ -- (-0.4327,-0.2086)
+ .. controls (-0.3777,-0.1999) and (-0.3244,-0.1312) .. (-0.4008,-0.1067)
+ -- (-0.3823,-0.0879)
+ .. controls (-0.3347,-0.0526) and (-0.3277,-0.1099) .. (-0.2903,-0.1163)
+ .. controls (-0.2612,-0.1213) and (-0.2444,-0.0914) .. (-0.2507,-0.0659)
+ .. controls (-0.2581,-0.0362) and (-0.2828,-0.0269) .. (-0.3112,-0.0274)
+ --cycle
+ ( 0.9234,-0.0304)
+ -- ( 0.9149,-0.0643)
+ -- ( 0.9488,-0.0558)
+ -- ( 0.9488,-0.0388)
+ -- ( 0.9403,-0.0304)
+ --cycle
+ ( 0.6406,-0.0369)
+ .. controls ( 0.6333,-0.0375) and ( 0.6251,-0.0419) .. ( 0.6177,-0.0522)
+ .. controls ( 0.6105,-0.0620) and ( 0.6112,-0.0704) .. ( 0.6093,-0.0799)
+ -- ( 0.6342,-0.0799)
+ .. controls ( 0.6760,-0.0673) and ( 0.6625,-0.0350) .. ( 0.6406,-0.0369)
+ --cycle
+ (-0.0016,-0.0449)
+ .. controls (-0.0461,-0.0548) and (-0.0410,-0.0663) .. (-0.0297,-0.1043)
+ .. controls (-0.0250,-0.1199) and (-0.0232,-0.1440) .. (-0.0016,-0.1422)
+ .. controls ( 0.0349,-0.1392) and ( 0.0554,-0.0537) .. (-0.0016,-0.0449)
+ --cycle
+ (-0.1123,-0.0473)
+ -- (-0.1208,-0.1067)
+ .. controls (-0.0719,-0.1062) and (-0.0661,-0.0635) .. (-0.1123,-0.0473)
+ --cycle
+ ( 0.3037,-0.0473)
+ .. controls ( 0.3198,-0.0756) and ( 0.3223,-0.0769) .. ( 0.3546,-0.0728)
+ .. controls ( 0.3383,-0.0447) and ( 0.3358,-0.0446) .. ( 0.3037,-0.0473)
+ --cycle
+ ( 0.5329,-0.0473)
+ .. controls ( 0.5004,-0.0966) and ( 0.4981,-0.1266) .. ( 0.5668,-0.1322)
+ -- ( 0.5499,-0.0473)
+ --cycle
+ (-0.1632,-0.0728)
+ -- (-0.1462,-0.1067)
+ -- (-0.1462,-0.0728)
+ --cycle
+ ( 0.7090,-0.0817)
+ .. controls ( 0.6987,-0.0843) and ( 0.6911,-0.0952) .. ( 0.6894,-0.1068)
+ .. controls ( 0.6863,-0.1276) and ( 0.7043,-0.1387) .. ( 0.7111,-0.1831)
+ .. controls ( 0.7499,-0.1786) and ( 0.7602,-0.1760) .. ( 0.7791,-0.1407)
+ -- ( 0.7196,-0.1322)
+ -- ( 0.7451,-0.1068)
+ .. controls ( 0.7324,-0.0850) and ( 0.7193,-0.0791) .. ( 0.7090,-0.0817)
+ --cycle
+ ( 0.9485,-0.0984)
+ .. controls ( 0.9284,-0.1094) and ( 0.8781,-0.1542) .. ( 0.8706,-0.1754)
+ .. controls ( 0.8655,-0.1897) and ( 0.8704,-0.2051) .. ( 0.8817,-0.2131)
+ --cycle
+ (-0.9323,-0.1007)
+ -- (-0.9101,-0.1405)
+ .. controls (-0.9101,-0.1287) and (-0.9146,-0.1173) .. (-0.9187,-0.1067)
+ --cycle
+ (-0.0528,-0.1067)
+ .. controls (-0.0616,-0.1167) and (-0.0681,-0.1217) .. (-0.0735,-0.1348)
+ .. controls (-0.0802,-0.1513) and (-0.0835,-0.2032) .. (-0.0603,-0.2082)
+ .. controls (-0.0462,-0.2108) and (-0.0167,-0.1971) .. (-0.0603,-0.1577)
+ .. controls (-0.0459,-0.1339) and (-0.0396,-0.1326) .. (-0.0528,-0.1067)
+ --cycle
+ (-0.4876,-0.1114)
+ .. controls (-0.4992,-0.1127) and (-0.5150,-0.1170) .. (-0.5367,-0.1237)
+ -- (-0.5367,-0.1577)
+ -- (-0.4433,-0.1916)
+ .. controls (-0.4544,-0.1299) and (-0.4526,-0.1074) .. (-0.4876,-0.1114)
+ --cycle
+ (-0.7635,-0.1120)
+ .. controls (-0.7788,-0.1114) and (-0.7890,-0.1295) .. (-0.7913,-0.1577)
+ -- (-0.7574,-0.1577)
+ .. controls (-0.7442,-0.2093) and (-0.7301,-0.2080) .. (-0.6810,-0.2086)
+ -- (-0.6810,-0.1746)
+ -- (-0.7149,-0.1916)
+ .. controls (-0.7175,-0.1714) and (-0.7177,-0.1520) .. (-0.7311,-0.1350)
+ .. controls (-0.7433,-0.1194) and (-0.7544,-0.1124) .. (-0.7635,-0.1120)
+ --cycle
+ (-0.2082,-0.1145)
+ .. controls (-0.2215,-0.1126) and (-0.2378,-0.1199) .. (-0.2495,-0.1410)
+ .. controls (-0.2530,-0.1510) and (-0.2546,-0.1612) .. (-0.2495,-0.1721)
+ .. controls (-0.2475,-0.1840) and (-0.2388,-0.1913) .. (-0.2311,-0.2001)
+ .. controls (-0.2202,-0.1931) and (-0.2111,-0.1884) .. (-0.2020,-0.1785)
+ .. controls (-0.1722,-0.1464) and (-0.1860,-0.1177) .. (-0.2082,-0.1145)
+ --cycle
+ ( 0.4225,-0.1152)
+ -- ( 0.3631,-0.1492)
+ -- ( 0.3801,-0.1831)
+ .. controls ( 0.4160,-0.1656) and ( 0.4276,-0.1565) .. ( 0.4225,-0.1152)
+ --cycle
+ (-0.5925,-0.1174)
+ .. controls (-0.6021,-0.1151) and (-0.6144,-0.1208) .. (-0.6203,-0.1336)
+ .. controls (-0.6283,-0.1508) and (-0.6192,-0.1674) .. (-0.6130,-0.1831)
+ -- (-0.5961,-0.1831)
+ .. controls (-0.5903,-0.1723) and (-0.5831,-0.1615) .. (-0.5803,-0.1494)
+ .. controls (-0.5758,-0.1301) and (-0.5828,-0.1197) .. (-0.5925,-0.1174)
+ --cycle
+ ( 0.2952,-0.1237)
+ -- ( 0.3292,-0.1746)
+ -- ( 0.3377,-0.1746)
+ -- ( 0.3546,-0.1577)
+ .. controls ( 0.3339,-0.1275) and ( 0.3315,-0.1266) .. ( 0.2952,-0.1237)
+ --cycle
+ ( 0.1832,-0.1240)
+ .. controls ( 0.1608,-0.1263) and ( 0.1298,-0.1544) .. ( 0.1254,-0.2086)
+ .. controls ( 0.1747,-0.2011) and ( 0.2191,-0.1503) .. ( 0.2015,-0.1301)
+ .. controls ( 0.1972,-0.1252) and ( 0.1907,-0.1232) .. ( 0.1832,-0.1240)
+ --cycle
+ (-0.3330,-0.1407)
+ .. controls (-0.3325,-0.1552) and (-0.3330,-0.1683) .. (-0.3280,-0.1824)
+ .. controls (-0.3221,-0.1993) and (-0.2907,-0.2626) .. (-0.2674,-0.2496)
+ .. controls (-0.2290,-0.2283) and (-0.2939,-0.1556) .. (-0.3330,-0.1407)
+ --cycle
+ (-0.8677,-0.1492)
+ .. controls (-0.8906,-0.2074) and (-0.8704,-0.2079) .. (-0.8168,-0.2086)
+ -- (-0.8168,-0.2341)
+ -- (-0.7828,-0.2341)
+ .. controls (-0.7876,-0.1754) and (-0.8159,-0.1679) .. (-0.8677,-0.1492)
+ --cycle
+ ( 0.6507,-0.1523)
+ .. controls ( 0.6150,-0.1514) and ( 0.5790,-0.1648) .. ( 0.5634,-0.2019)
+ .. controls ( 0.5467,-0.2418) and ( 0.5701,-0.2915) .. ( 0.6347,-0.2595)
+ -- ( 0.5923,-0.2426)
+ .. controls ( 0.6167,-0.1901) and ( 0.6349,-0.1909) .. ( 0.6857,-0.1746)
+ -- ( 0.6857,-0.1577)
+ .. controls ( 0.6745,-0.1545) and ( 0.6627,-0.1526) .. ( 0.6507,-0.1523)
+ --cycle
+ ( 0.4992,-0.1530)
+ .. controls ( 0.4893,-0.1544) and ( 0.4788,-0.1613) .. ( 0.4723,-0.1757)
+ .. controls ( 0.4601,-0.2024) and ( 0.4716,-0.2265) .. ( 0.4819,-0.2510)
+ -- ( 0.4310,-0.2510)
+ .. controls ( 0.4659,-0.3129) and ( 0.5002,-0.2692) .. ( 0.5329,-0.2341)
+ .. controls ( 0.5195,-0.1890) and ( 0.5320,-0.1766) .. ( 0.5232,-0.1628)
+ .. controls ( 0.5186,-0.1555) and ( 0.5091,-0.1515) .. ( 0.4992,-0.1530)
+ --cycle
+ (-0.1462,-0.1577)
+ -- (-0.1462,-0.2001)
+ -- (-0.1292,-0.2001)
+ -- (-0.1292,-0.1577)
+ --cycle
+ ( 0.0490,-0.1577)
+ -- ( 0.0066,-0.1831)
+ -- ( 0.0066,-0.2001)
+ .. controls ( 0.0224,-0.2077) and ( 0.0639,-0.2307) .. ( 0.0802,-0.2267)
+ .. controls ( 0.1236,-0.2159) and ( 0.0615,-0.1657) .. ( 0.0490,-0.1577)
+ --cycle
+ ( 0.2527,-0.1577)
+ -- ( 0.2358,-0.1746)
+ -- ( 0.2273,-0.1746)
+ -- ( 0.2273,-0.1916)
+ .. controls ( 0.2817,-0.2389) and ( 0.2612,-0.2548) .. ( 0.3207,-0.2595)
+ -- ( 0.2952,-0.2341)
+ .. controls ( 0.2952,-0.1946) and ( 0.2813,-0.1829) .. ( 0.2527,-0.1577)
+ --cycle
+ ( 0.4124,-0.1906)
+ .. controls ( 0.3901,-0.1934) and ( 0.3801,-0.2077) .. ( 0.3631,-0.2341)
+ .. controls ( 0.4031,-0.2391) and ( 0.4075,-0.2303) .. ( 0.4395,-0.2086)
+ -- ( 0.4395,-0.1916)
+ .. controls ( 0.4286,-0.1900) and ( 0.4198,-0.1897) .. ( 0.4124,-0.1906)
+ --cycle
+ (-0.5282,-0.1916)
+ -- (-0.5536,-0.2001)
+ -- (-0.5282,-0.2171)
+ --cycle
+ (-0.6045,-0.2001)
+ .. controls (-0.6700,-0.2056) and (-0.6485,-0.2287) .. (-0.6330,-0.2741)
+ .. controls (-0.6243,-0.2991) and (-0.6268,-0.3013) .. (-0.6130,-0.3274)
+ .. controls (-0.5769,-0.3048) and (-0.5602,-0.2946) .. (-0.5536,-0.2510)
+ -- (-0.6045,-0.2510)
+ --cycle
+ (-0.3584,-0.2086)
+ .. controls (-0.3921,-0.2259) and (-0.3939,-0.2318) .. (-0.4008,-0.2680)
+ .. controls (-0.4235,-0.2397) and (-0.4237,-0.2318) .. (-0.4603,-0.2256)
+ -- (-0.4603,-0.2850)
+ .. controls (-0.4267,-0.2892) and (-0.3194,-0.3199) .. (-0.3429,-0.2424)
+ --cycle
+ ( 0.7960,-0.2086)
+ -- ( 0.8384,-0.2510)
+ .. controls ( 0.8428,-0.2169) and ( 0.8301,-0.2042) .. ( 0.7960,-0.2086)
+ --cycle
+ ( 0.1928,-0.2162)
+ .. controls ( 0.1816,-0.2174) and ( 0.1689,-0.2258) .. ( 0.1598,-0.2322)
+ .. controls ( 0.1191,-0.2606) and ( 0.1214,-0.2831) .. ( 0.1339,-0.3274)
+ -- ( 0.1509,-0.3274)
+ .. controls ( 0.1561,-0.3114) and ( 0.1614,-0.2848) .. ( 0.1729,-0.2730)
+ .. controls ( 0.1867,-0.2591) and ( 0.2098,-0.2594) .. ( 0.2174,-0.2461)
+ .. controls ( 0.2253,-0.2321) and ( 0.2130,-0.2142) .. ( 0.1928,-0.2162)
+ --cycle
+ (-0.1905,-0.2188)
+ .. controls (-0.1970,-0.2195) and (-0.2037,-0.2233) .. (-0.2087,-0.2284)
+ .. controls (-0.2248,-0.2451) and (-0.2297,-0.2881) .. (-0.2311,-0.3104)
+ -- (-0.1801,-0.3104)
+ .. controls (-0.1960,-0.2531) and (-0.1611,-0.2530) .. (-0.1738,-0.2284)
+ .. controls (-0.1778,-0.2206) and (-0.1840,-0.2181) .. (-0.1905,-0.2188)
+ --cycle
+ (-0.5112,-0.2256)
+ -- (-0.5112,-0.2595)
+ -- (-0.4772,-0.2595)
+ -- (-0.4772,-0.2256)
+ --cycle
+ ( 0.7451,-0.2256)
+ -- ( 0.6687,-0.2341)
+ -- ( 0.6602,-0.2426)
+ .. controls ( 0.6862,-0.3159) and ( 0.7361,-0.2848) .. ( 0.7451,-0.2256)
+ --cycle
+ (-0.8578,-0.2336)
+ -- (-0.8203,-0.3006)
+ .. controls (-0.7747,-0.3108) and (-0.8112,-0.2349) .. (-0.8578,-0.2336)
+ --cycle
+ (-0.0280,-0.2369)
+ .. controls (-0.0529,-0.2386) and (-0.0646,-0.2625) .. (-0.0273,-0.3019)
+ -- ( 0.0236,-0.2595)
+ .. controls ( 0.0068,-0.2430) and (-0.0130,-0.2359) .. (-0.0280,-0.2369)
+ --cycle
+ (-0.7234,-0.2510)
+ .. controls (-0.7141,-0.2750) and (-0.7050,-0.2842) .. (-0.6810,-0.2935)
+ -- (-0.6725,-0.2850)
+ .. controls (-0.6853,-0.2530) and (-0.6899,-0.2536) .. (-0.7234,-0.2510)
+ --cycle
+ ( 0.0504,-0.2510)
+ -- ( 0.0504,-0.2760)
+ .. controls ( 0.0689,-0.3381) and ( 0.1243,-0.2780) .. ( 0.0804,-0.2561)
+ .. controls ( 0.0707,-0.2513) and ( 0.0594,-0.2519) .. ( 0.0504,-0.2510)
+ --cycle
+ (-0.1292,-0.2595)
+ -- (-0.1462,-0.2765)
+ -- (-0.1038,-0.3274)
+ -- (-0.0953,-0.3274)
+ -- (-0.0783,-0.3104)
+ --cycle
+ ( 0.7877,-0.2632)
+ .. controls ( 0.7523,-0.2682) and ( 0.7335,-0.3052) .. ( 0.7960,-0.3359)
+ .. controls ( 0.8015,-0.3335) and ( 0.8068,-0.3333) .. ( 0.8122,-0.3324)
+ -- ( 0.8442,-0.2774)
+ .. controls ( 0.8248,-0.2696) and ( 0.8026,-0.2612) .. ( 0.7877,-0.2632)
+ --cycle
+ ( 0.5329,-0.2765)
+ .. controls ( 0.5358,-0.3116) and ( 0.5353,-0.3182) .. ( 0.5668,-0.3359)
+ .. controls ( 0.5639,-0.3008) and ( 0.5644,-0.2942) .. ( 0.5329,-0.2765)
+ --cycle
+ ( 0.3385,-0.2820)
+ .. controls ( 0.3148,-0.2878) and ( 0.2673,-0.3492) .. ( 0.3385,-0.3614)
+ -- ( 0.3122,-0.4038)
+ .. controls ( 0.3574,-0.4463) and ( 0.3787,-0.4004) .. ( 0.3701,-0.3806)
+ .. controls ( 0.3644,-0.3672) and ( 0.3492,-0.3602) .. ( 0.3377,-0.3529)
+ -- ( 0.3886,-0.3019)
+ .. controls ( 0.3746,-0.2928) and ( 0.3572,-0.2777) .. ( 0.3385,-0.2820)
+ --cycle
+ (-0.3075,-0.2850)
+ -- (-0.3669,-0.3359)
+ .. controls (-0.3237,-0.3346) and (-0.3194,-0.3327) .. (-0.2820,-0.3104)
+ --cycle
+ ( 0.6347,-0.2850)
+ -- ( 0.6093,-0.3359)
+ -- ( 0.6687,-0.3359)
+ .. controls ( 0.6634,-0.3038) and ( 0.6614,-0.3034) .. ( 0.6347,-0.2850)
+ --cycle
+ ( 0.2482,-0.2927)
+ .. controls ( 0.2430,-0.2922) and ( 0.2370,-0.2926) .. ( 0.2301,-0.2942)
+ .. controls ( 0.1967,-0.3336) and ( 0.2478,-0.3609) .. ( 0.2647,-0.3515)
+ .. controls ( 0.2796,-0.3431) and ( 0.2843,-0.2960) .. ( 0.2482,-0.2927)
+ --cycle
+ (-0.5371,-0.2933)
+ .. controls (-0.5481,-0.2970) and (-0.5577,-0.3098) .. (-0.5621,-0.3359)
+ -- (-0.5112,-0.3869)
+ .. controls (-0.4600,-0.3526) and (-0.5043,-0.2822) .. (-0.5371,-0.2933)
+ --cycle
+ (-0.4433,-0.3019)
+ .. controls (-0.4430,-0.3328) and (-0.4401,-0.3356) .. (-0.4093,-0.3359)
+ -- (-0.4263,-0.3019)
+ --cycle
+ ( 0.0236,-0.3104)
+ -- ( 0.0066,-0.3274)
+ -- ( 0.0066,-0.3359)
+ -- ( 0.0236,-0.3529)
+ -- ( 0.0321,-0.3529)
+ -- ( 0.0490,-0.3359)
+ --cycle
+ ( 0.4140,-0.3104)
+ -- ( 0.4140,-0.3274)
+ -- ( 0.4565,-0.3274)
+ -- ( 0.4565,-0.3104)
+ --cycle
+ (-0.6555,-0.3189)
+ .. controls (-0.7282,-0.3463) and (-0.7047,-0.4238) .. (-0.6385,-0.3614)
+ --cycle
+ (-0.7635,-0.3203)
+ .. controls (-0.7897,-0.3491) and (-0.7645,-0.3586) .. (-0.7512,-0.3515)
+ .. controls (-0.7383,-0.3446) and (-0.7269,-0.3159) .. (-0.7635,-0.3203)
+ --cycle
+ (-0.1547,-0.3359)
+ .. controls (-0.2375,-0.3951) and (-0.1886,-0.3975) .. (-0.2106,-0.4536)
+ .. controls (-0.2221,-0.4826) and (-0.2548,-0.4886) .. (-0.2435,-0.5309)
+ .. controls (-0.2373,-0.5540) and (-0.1692,-0.6520) .. (-0.1548,-0.5893)
+ .. controls (-0.1503,-0.5696) and (-0.1713,-0.5323) .. (-0.1801,-0.5141)
+ -- (-0.2141,-0.5141)
+ -- (-0.1801,-0.4836)
+ -- (-0.1632,-0.3784)
+ -- (-0.1292,-0.3614)
+ --cycle
+ ( 0.5838,-0.3444)
+ -- ( 0.6178,-0.3869)
+ .. controls ( 0.6126,-0.3569) and ( 0.6121,-0.3558) .. ( 0.5838,-0.3444)
+ --cycle
+ (-0.5876,-0.3529)
+ -- (-0.5876,-0.3869)
+ -- (-0.5536,-0.3869)
+ --cycle
+ (-0.3075,-0.3529)
+ .. controls (-0.3075,-0.4259) and (-0.3150,-0.4459) .. (-0.2480,-0.4378)
+ .. controls (-0.2520,-0.3893) and (-0.2634,-0.3741) .. (-0.3075,-0.3529)
+ --cycle
+ ( 0.0745,-0.3529)
+ .. controls ( 0.0603,-0.3977) and ( 0.0512,-0.3786) .. ( 0.0066,-0.3869)
+ .. controls ( 0.0321,-0.4377) and ( 0.0562,-0.4373) .. ( 0.1084,-0.4378)
+ -- ( 0.1254,-0.3614)
+ --cycle
+ ( 0.1868,-0.3534)
+ .. controls ( 0.1605,-0.3550) and ( 0.1563,-0.3921) .. ( 0.1681,-0.4095)
+ .. controls ( 0.1887,-0.4397) and ( 0.2596,-0.3970) .. ( 0.2782,-0.3784)
+ .. controls ( 0.2016,-0.3640) and ( 0.2352,-0.3656) .. ( 0.1995,-0.3551)
+ .. controls ( 0.1948,-0.3537) and ( 0.1906,-0.3532) .. ( 0.1868,-0.3534)
+ --cycle
+ (-0.0650,-0.3585)
+ .. controls (-0.0712,-0.3584) and (-0.0783,-0.3594) .. (-0.0865,-0.3617)
+ .. controls (-0.1407,-0.4045) and (-0.1029,-0.4414) .. (-0.0731,-0.4301)
+ .. controls (-0.0250,-0.4118) and (-0.0217,-0.3591) .. (-0.0650,-0.3585)
+ --cycle
+ (-0.4008,-0.3614)
+ -- (-0.3584,-0.4293)
+ .. controls (-0.3814,-0.4389) and (-0.3792,-0.4389) .. (-0.3839,-0.4632)
+ .. controls (-0.3078,-0.4504) and (-0.3334,-0.3529) .. (-0.4008,-0.3614)
+ --cycle
+ ( 0.7706,-0.3784)
+ -- ( 0.6689,-0.4004)
+ -- ( 0.6602,-0.4378)
+ .. controls ( 0.6990,-0.4346) and ( 0.7019,-0.4328) .. ( 0.7281,-0.4038)
+ .. controls ( 0.7344,-0.4232) and ( 0.7382,-0.4373) .. ( 0.7461,-0.4460)
+ -- ( 0.7747,-0.3969)
+ --cycle
+ (-0.7404,-0.3869)
+ -- (-0.7574,-0.4038)
+ .. controls (-0.7352,-0.4249) and (-0.7368,-0.4246) .. (-0.7065,-0.4208)
+ -- (-0.7065,-0.4038)
+ --cycle
+ ( 0.3971,-0.3953)
+ -- ( 0.3801,-0.4378)
+ -- ( 0.4140,-0.4378)
+ -- ( 0.4140,-0.3953)
+ --cycle
+ (-0.6640,-0.4038)
+ .. controls (-0.6429,-0.4478) and (-0.6261,-0.4537) .. (-0.5876,-0.4802)
+ -- (-0.5367,-0.4378)
+ .. controls (-0.5592,-0.4163) and (-0.5680,-0.4098) .. (-0.5876,-0.4378)
+ .. controls (-0.6195,-0.4110) and (-0.6224,-0.4072) .. (-0.6640,-0.4038)
+ --cycle
+ (-0.4603,-0.4038)
+ -- (-0.4603,-0.4378)
+ -- (-0.4263,-0.4378)
+ -- (-0.4263,-0.4038)
+ --cycle
+ ( 0.5584,-0.4038)
+ .. controls ( 0.5189,-0.4043) and ( 0.5111,-0.4167) .. ( 0.5159,-0.4548)
+ -- ( 0.5329,-0.4548)
+ --cycle
+ ( 0.6093,-0.4123)
+ -- ( 0.6008,-0.4378)
+ -- ( 0.6262,-0.4378)
+ --cycle
+ ( 0.2273,-0.4293)
+ -- ( 0.2273,-0.4632)
+ -- ( 0.2612,-0.4632)
+ -- ( 0.2612,-0.4293)
+ --cycle
+ ( 0.1339,-0.4378)
+ .. controls ( 0.1294,-0.4715) and ( 0.1342,-0.4762) .. ( 0.1679,-0.4717)
+ --cycle
+ (-0.1337,-0.4435)
+ .. controls (-0.1394,-0.4438) and (-0.1452,-0.4454) .. (-0.1547,-0.4474)
+ -- (-0.1547,-0.4632)
+ -- (-0.1038,-0.4972)
+ -- (-0.1547,-0.5057)
+ .. controls (-0.1508,-0.5315) and (-0.1180,-0.5928) .. (-0.0833,-0.5723)
+ .. controls (-0.0768,-0.5684) and (-0.0244,-0.4827) .. (-0.1123,-0.4474)
+ .. controls (-0.1220,-0.4442) and (-0.1279,-0.4432) .. (-0.1337,-0.4435)
+ --cycle
+ (-0.0033,-0.4457)
+ .. controls (-0.0284,-0.4445) and (-0.0459,-0.4662) .. (-0.0273,-0.5141)
+ -- ( 0.0660,-0.5141)
+ .. controls ( 0.0545,-0.4708) and ( 0.0219,-0.4468) .. (-0.0033,-0.4457)
+ --cycle
+ (-0.7383,-0.4470)
+ -- (-0.7101,-0.4972)
+ .. controls (-0.7099,-0.4756) and (-0.7233,-0.4577) .. (-0.7383,-0.4470)
+ --cycle
+ (-0.4942,-0.4548)
+ -- (-0.4857,-0.5065)
+ .. controls (-0.4998,-0.5043) and (-0.5212,-0.5004) .. (-0.5329,-0.5065)
+ .. controls (-0.5629,-0.5229) and (-0.5515,-0.5662) .. (-0.5329,-0.5843)
+ .. controls (-0.5068,-0.6075) and (-0.4879,-0.6033) .. (-0.4603,-0.5906)
+ .. controls (-0.4787,-0.5639) and (-0.4791,-0.5620) .. (-0.5112,-0.5566)
+ -- (-0.5112,-0.5396)
+ .. controls (-0.4518,-0.5306) and (-0.4206,-0.4773) .. (-0.4942,-0.4548)
+ --cycle
+ ( 0.3377,-0.4548)
+ .. controls ( 0.3023,-0.4717) and ( 0.2951,-0.4788) .. ( 0.2782,-0.5141)
+ .. controls ( 0.3342,-0.5180) and ( 0.3822,-0.5526) .. ( 0.3886,-0.4717)
+ -- ( 0.3631,-0.4972)
+ --cycle
+ ( 0.5663,-0.4671)
+ .. controls ( 0.5583,-0.4668) and ( 0.5478,-0.4680) .. ( 0.5329,-0.4717)
+ -- ( 0.5329,-0.4887)
+ .. controls ( 0.5814,-0.5209) and ( 0.6607,-0.5778) .. ( 0.6687,-0.4802)
+ -- ( 0.6201,-0.4852)
+ .. controls ( 0.5908,-0.4828) and ( 0.5901,-0.4680) .. ( 0.5663,-0.4671)
+ --cycle
+ (-0.6640,-0.4802)
+ .. controls (-0.6763,-0.5067) and (-0.6845,-0.5204) .. (-0.6886,-0.5355)
+ -- (-0.6647,-0.5782)
+ -- (-0.5876,-0.5396)
+ .. controls (-0.6003,-0.5515) and (-0.6232,-0.5710) .. (-0.6310,-0.5860)
+ .. controls (-0.6373,-0.5982) and (-0.6388,-0.6155) .. (-0.6360,-0.6294)
+ -- (-0.6224,-0.6537)
+ .. controls (-0.5951,-0.6768) and (-0.5385,-0.6561) .. (-0.5112,-0.6415)
+ .. controls (-0.5400,-0.5996) and (-0.5579,-0.6048) .. (-0.6045,-0.6161)
+ -- (-0.5621,-0.5651)
+ -- (-0.5621,-0.5566)
+ -- (-0.5791,-0.5481)
+ -- (-0.5621,-0.5141)
+ --cycle
+ ( 0.1000,-0.4802)
+ -- ( 0.0745,-0.5396)
+ .. controls ( 0.1186,-0.5345) and ( 0.1548,-0.5114) .. ( 0.1000,-0.4802)
+ --cycle
+ ( 0.2188,-0.4802)
+ -- ( 0.2358,-0.5141)
+ -- ( 0.2358,-0.4802)
+ --cycle
+ ( 0.4310,-0.4802)
+ -- ( 0.4140,-0.5311)
+ -- ( 0.4140,-0.5396)
+ -- ( 0.4310,-0.5566)
+ .. controls ( 0.4679,-0.5313) and ( 0.4644,-0.5230) .. ( 0.4649,-0.4802)
+ --cycle
+ ( 0.7111,-0.4802)
+ -- ( 0.7111,-0.5059)
+ -- ( 0.7261,-0.4802)
+ --cycle
+ (-0.3414,-0.4972)
+ .. controls (-0.3911,-0.5256) and (-0.3704,-0.5729) .. (-0.3075,-0.5566)
+ -- (-0.3075,-0.5396)
+ --cycle
+ (-0.4348,-0.5057)
+ -- (-0.4348,-0.5736)
+ .. controls (-0.4068,-0.5549) and (-0.4098,-0.5369) .. (-0.4008,-0.5057)
+ --cycle
+ ( 0.1509,-0.5311)
+ -- ( 0.1254,-0.5736)
+ -- ( 0.1849,-0.5651)
+ --cycle
+ ( 0.2273,-0.5311)
+ -- ( 0.2103,-0.5975)
+ .. controls ( 0.1971,-0.5957) and ( 0.1843,-0.5904) .. ( 0.1705,-0.5975)
+ .. controls ( 0.1304,-0.6124) and ( 0.1679,-0.7346) .. ( 0.2142,-0.6893)
+ .. controls ( 0.2226,-0.6812) and ( 0.2236,-0.6741) .. ( 0.2273,-0.6670)
+ -- ( 0.1849,-0.6330)
+ .. controls ( 0.2427,-0.6183) and ( 0.2598,-0.5884) .. ( 0.2443,-0.5311)
+ --cycle
+ ( 0.5074,-0.5311)
+ .. controls ( 0.5252,-0.5626) and ( 0.5317,-0.5622) .. ( 0.5668,-0.5651)
+ .. controls ( 0.5491,-0.5336) and ( 0.5426,-0.5340) .. ( 0.5074,-0.5311)
+ --cycle
+ ( 0.0269,-0.5388)
+ .. controls ( 0.0166,-0.5396) and ( 0.0072,-0.5496) .. ( 0.0090,-0.5738)
+ -- ( 0.0151,-0.5991)
+ .. controls ( 0.0222,-0.5954) and ( 0.0287,-0.5947) .. ( 0.0377,-0.5860)
+ .. controls ( 0.0637,-0.5611) and ( 0.0441,-0.5373) .. ( 0.0269,-0.5388)
+ --cycle
+ ( 0.2782,-0.5481)
+ -- ( 0.2612,-0.5821)
+ -- ( 0.3122,-0.6245)
+ .. controls ( 0.3120,-0.5837) and ( 0.3197,-0.5648) .. ( 0.2782,-0.5481)
+ --cycle
+ (-0.2820,-0.5566)
+ .. controls (-0.2791,-0.5918) and (-0.2795,-0.5983) .. (-0.2480,-0.6161)
+ .. controls (-0.2450,-0.5789) and (-0.2492,-0.5737) .. (-0.2820,-0.5566)
+ --cycle
+ ( 0.3631,-0.5651)
+ .. controls ( 0.3595,-0.5776) and ( 0.3566,-0.5855) .. ( 0.3557,-0.5990)
+ .. controls ( 0.3500,-0.6875) and ( 0.4541,-0.6501) .. ( 0.3934,-0.5846)
+ .. controls ( 0.3826,-0.5729) and ( 0.3761,-0.5717) .. ( 0.3631,-0.5651)
+ --cycle
+ ( 0.4330,-0.5736)
+ -- ( 0.4330,-0.6379)
+ .. controls ( 0.4274,-0.6731) and ( 0.3959,-0.6885) .. ( 0.4395,-0.7179)
+ .. controls ( 0.4751,-0.6405) and ( 0.4954,-0.6629) .. ( 0.4480,-0.5736)
+ --cycle
+ ( 0.5329,-0.5821)
+ .. controls ( 0.5362,-0.6232) and ( 0.5740,-0.6869) .. ( 0.6222,-0.6585)
+ -- ( 0.6513,-0.6086)
+ .. controls ( 0.6095,-0.6116) and ( 0.5939,-0.6354) .. ( 0.5668,-0.5821)
+ --cycle
+ ( 0.1000,-0.5906)
+ -- ( 0.0830,-0.6245)
+ -- ( 0.0575,-0.6161)
+ .. controls ( 0.0477,-0.6898) and ( 0.1617,-0.6541) .. ( 0.1000,-0.5906)
+ --cycle
+ (-0.3245,-0.5991)
+ .. controls (-0.3790,-0.5920) and (-0.3824,-0.6312) .. (-0.3839,-0.6754)
+ -- (-0.3245,-0.6161)
+ --cycle
+ (-0.4348,-0.6076)
+ -- (-0.4603,-0.6670)
+ -- (-0.4942,-0.6585)
+ -- (-0.5027,-0.6670)
+ .. controls (-0.4589,-0.7510) and (-0.3531,-0.6544) .. (-0.4348,-0.6076)
+ --cycle
+ (-0.1377,-0.6076)
+ .. controls (-0.1554,-0.6464) and (-0.1574,-0.6512) .. (-0.1292,-0.6839)
+ -- (-0.1208,-0.6839)
+ -- (-0.1038,-0.6670)
+ -- (-0.1208,-0.6076)
+ --cycle
+ (-0.0698,-0.6161)
+ -- (-0.0698,-0.6330)
+ -- (-0.0019,-0.6330)
+ -- (-0.0019,-0.6161)
+ --cycle
+ (-0.2735,-0.6330)
+ .. controls (-0.3246,-0.6408) and (-0.3550,-0.6906) .. (-0.3754,-0.7356)
+ -- (-0.3510,-0.7356)
+ -- (-0.2786,-0.6658)
+ --cycle
+ (-0.1971,-0.6330)
+ .. controls (-0.2393,-0.6535) and (-0.2774,-0.6931) .. (-0.2226,-0.7264)
+ --cycle
+ ( 0.2782,-0.6415)
+ -- ( 0.2612,-0.6585)
+ .. controls ( 0.2834,-0.6795) and ( 0.2819,-0.6792) .. ( 0.3122,-0.6754)
+ -- ( 0.3122,-0.6585)
+ --cycle
+ ( 0.5244,-0.6630)
+ .. controls ( 0.5103,-0.6630) and ( 0.4934,-0.6765) .. ( 0.4819,-0.6839)
+ .. controls ( 0.4916,-0.7019) and ( 0.4915,-0.7036) .. ( 0.5078,-0.7175)
+ -- ( 0.5293,-0.7332)
+ .. controls ( 0.6028,-0.7786) and ( 0.5789,-0.6636) .. ( 0.5244,-0.6630)
+ --cycle
+ (-0.0698,-0.6839)
+ -- (-0.0613,-0.7433)
+ -- (-0.0528,-0.7518)
+ .. controls (-0.0005,-0.7307) and (-0.0190,-0.6844) .. (-0.0698,-0.6839)
+ --cycle
+ ( 0.1339,-0.6839)
+ .. controls ( 0.0648,-0.6945) and ( 0.0512,-0.7734) .. ( 0.1169,-0.7943)
+ .. controls ( 0.1059,-0.7314) and ( 0.1116,-0.7410) .. ( 0.1339,-0.6839)
+ --cycle
+ ( 0.3546,-0.6839)
+ .. controls ( 0.3575,-0.7191) and ( 0.3571,-0.7256) .. ( 0.3886,-0.7433)
+ -- ( 0.3716,-0.6839)
+ --cycle
+ ( 0.3886,-0.7433)
+ -- ( 0.3886,-0.7603)
+ -- ( 0.3546,-0.7943)
+ -- ( 0.3631,-0.7943)
+ -- ( 0.3801,-0.8113)
+ .. controls ( 0.4252,-0.7878) and ( 0.4333,-0.7840) .. ( 0.4140,-0.7349)
+ --cycle
+ (-0.5653,-0.6922)
+ .. controls (-0.5767,-0.6913) and (-0.5873,-0.6939) .. (-0.5981,-0.6969)
+ -- (-0.5741,-0.7399)
+ .. controls (-0.5528,-0.7446) and (-0.5350,-0.7433) .. (-0.5027,-0.7433)
+ .. controls (-0.5172,-0.7077) and (-0.5409,-0.6942) .. (-0.5653,-0.6922)
+ --cycle
+ (-0.1547,-0.7099)
+ .. controls (-0.1719,-0.7103) and (-0.1811,-0.7133) .. (-0.1971,-0.7179)
+ .. controls (-0.1923,-0.7317) and (-0.1881,-0.7454) .. (-0.1792,-0.7574)
+ .. controls (-0.1162,-0.8422) and (-0.0444,-0.7079) .. (-0.1547,-0.7099)
+ --cycle
+ (-0.4348,-0.7179)
+ .. controls (-0.4394,-0.7549) and (-0.4359,-0.7636) .. (-0.4008,-0.7773)
+ --cycle
+ ( 0.2358,-0.7179)
+ -- ( 0.2358,-0.7349)
+ -- ( 0.3037,-0.7349)
+ -- ( 0.3037,-0.7179)
+ --cycle
+ ( 0.4649,-0.7179)
+ -- ( 0.4734,-0.7858)
+ .. controls ( 0.4612,-0.7900) and ( 0.4516,-0.7918) .. ( 0.4409,-0.8004)
+ .. controls ( 0.3964,-0.8360) and ( 0.4585,-0.8927) .. ( 0.4819,-0.8198)
+ -- ( 0.5159,-0.8283)
+ .. controls ( 0.5142,-0.8359) and ( 0.5131,-0.8417) .. ( 0.5125,-0.8468)
+ -- ( 0.5398,-0.8000)
+ .. controls ( 0.5329,-0.7638) and ( 0.5138,-0.7350) .. ( 0.4649,-0.7179)
+ --cycle
+ ( 0.2103,-0.7264)
+ -- ( 0.1509,-0.7349)
+ -- ( 0.1509,-0.7688)
+ .. controls ( 0.1894,-0.7657) and ( 0.1982,-0.7645) .. ( 0.2103,-0.7264)
+ --cycle
+ (-0.2905,-0.7349)
+ .. controls (-0.3009,-0.7717) and (-0.3009,-0.7829) .. (-0.2905,-0.8198)
+ -- (-0.2480,-0.8028)
+ -- (-0.2311,-0.8367)
+ .. controls (-0.1820,-0.7845) and (-0.2454,-0.7805) .. (-0.2735,-0.7349)
+ --cycle
+ (-0.0019,-0.7349)
+ .. controls (-0.0202,-0.7845) and (-0.0471,-0.8007) .. (-0.0358,-0.8537)
+ -- ( 0.0066,-0.8113)
+ -- ( 0.0236,-0.8113)
+ .. controls ( 0.0412,-0.8384) and ( 0.0421,-0.8410) .. ( 0.0745,-0.8367)
+ .. controls ( 0.0599,-0.7914) and ( 0.0500,-0.7437) .. (-0.0019,-0.7349)
+ --cycle
+ (-0.5282,-0.7688)
+ .. controls (-0.5349,-0.8205) and (-0.5012,-0.8219) .. (-0.4603,-0.8113)
+ -- (-0.4603,-0.7943)
+ --cycle
+ ( 0.3122,-0.7688)
+ -- ( 0.3037,-0.7773)
+ .. controls ( 0.3122,-0.8236) and ( 0.3093,-0.8598) .. ( 0.3608,-0.8698)
+ -- ( 0.3628,-0.8698)
+ -- ( 0.3292,-0.7688)
+ --cycle
+ (-0.3584,-0.7858)
+ -- (-0.3770,-0.8622)
+ .. controls (-0.3770,-0.8627) and (-0.3768,-0.8631) .. (-0.3768,-0.8636)
+ -- (-0.3401,-0.8639)
+ -- (-0.3245,-0.7858)
+ --cycle
+ ( 0.2612,-0.7858)
+ .. controls ( 0.2125,-0.7858) and ( 0.1976,-0.7780) .. ( 0.1594,-0.8113)
+ .. controls ( 0.2029,-0.8570) and ( 0.2552,-0.8596) .. ( 0.2612,-0.7858)
+ --cycle
+ (-0.1292,-0.7943)
+ -- (-0.1886,-0.8537)
+ .. controls (-0.1453,-0.8604) and (-0.1341,-0.8487) .. (-0.1038,-0.8198)
+ --cycle
+ (-0.4348,-0.8367)
+ -- (-0.4479,-0.8630)
+ -- (-0.4228,-0.8632)
+ .. controls (-0.4191,-0.8583) and (-0.4180,-0.8505) .. (-0.4178,-0.8367)
+ --cycle
+ (-0.0783,-0.8452)
+ .. controls (-0.0928,-0.8536) and (-0.0996,-0.8588) .. (-0.1026,-0.8659)
+ -- (-0.0748,-0.8661)
+ -- (-0.0698,-0.8537)
+ --cycle
+ ( 0.1503,-0.8501)
+ .. controls ( 0.1440,-0.8514) and ( 0.1387,-0.8545) .. ( 0.1353,-0.8602)
+ .. controls ( 0.1334,-0.8621) and ( 0.1330,-0.8649) .. ( 0.1333,-0.8679)
+ -- ( 0.2103,-0.8685)
+ -- ( 0.2103,-0.8602)
+ .. controls ( 0.1968,-0.8575) and ( 0.1690,-0.8460) .. ( 0.1503,-0.8501)
+ --cycle
+ (-0.2396,-0.8622)
+ -- (-0.2421,-0.8647)
+ -- (-0.2217,-0.8649)
+ .. controls (-0.2221,-0.8638) and (-0.2222,-0.8633) .. (-0.2226,-0.8622)
+ --cycle
+ ( 0.2867,-0.8622)
+ .. controls ( 0.2782,-0.8636) and ( 0.2734,-0.8665) .. ( 0.2676,-0.8690)
+ -- ( 0.2859,-0.8691)
+ --cycle
+ ( 0.3942,-0.8639)
+ .. controls ( 0.3909,-0.8650) and ( 0.3884,-0.8678) .. ( 0.3855,-0.8700)
+ -- ( 0.4192,-0.8703)
+ .. controls ( 0.4168,-0.8684) and ( 0.4154,-0.8656) .. ( 0.4124,-0.8643)
+ .. controls ( 0.4062,-0.8618) and ( 0.4000,-0.8619) .. ( 0.3942,-0.8639)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx b/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
new file mode 100644
index 0000000000..b361789fa3
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
@@ -0,0 +1,317 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/swamp}
+% The pattern for swamps. The pattern is filled with a light blue.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/swamp/.style={
+ draw=none,
+ fill={rgb,100:red,26;green,55;blue,70}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/swamp}
+% Swamps. This is probably the shortest of the terrain patterns.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/swamp/.pic={
+ \path[hex/terrain/swamp,pic actions,draw=none]
+ (-0.5026, 0.8699)
+ -- (-0.5041, 0.8672)
+ .. controls (-0.3586, 0.8441) and (-0.1148, 0.8722) .. ( 0.0006, 0.8697)
+ -- ( 0.2386, 0.8529)
+ -- ( 0.2386, 0.8699)
+ --cycle
+ ( 0.4257, 0.8699)
+ -- ( 0.4257, 0.8529)
+ -- ( 0.5112, 0.8558)
+ -- ( 0.5033, 0.8699)
+ --cycle
+ ( 0.3067, 0.8359)
+ -- ( 0.2897, 0.7848)
+ -- ( 0.2726, 0.8188)
+ -- ( 0.2556, 0.8188)
+ -- ( 0.2217, 0.7509)
+ -- ( 0.5719, 0.7509)
+ -- ( 0.5621, 0.7679)
+ -- ( 0.5617, 0.7679)
+ -- ( 0.3746, 0.7848)
+ -- ( 0.3746, 0.8359)
+ --cycle
+ (-0.3225, 0.7848)
+ -- (-0.3225, 0.7509)
+ -- ( 0.0856, 0.7509)
+ -- ( 0.0856, 0.7848)
+ --cycle
+ (-0.5555, 0.7782)
+ -- (-0.5713, 0.7509)
+ -- (-0.5097, 0.7509)
+ --cycle
+ ( 0.2789, 0.6696)
+ .. controls ( 0.2234, 0.6713) and ( 0.1659, 0.6658) .. ( 0.1195, 0.6658)
+ -- (-0.6117, 0.6658)
+ -- (-0.6117, 0.6318)
+ -- ( 0.4257, 0.6318)
+ .. controls ( 0.3878, 0.6597) and ( 0.3344, 0.6681) .. ( 0.2789, 0.6696)
+ --cycle
+ ( 0.6297, 0.6318)
+ -- ( 0.6297, 0.5468)
+ -- ( 0.5617, 0.5807)
+ .. controls ( 0.5449, 0.5387) and ( 0.5194, 0.5474) .. ( 0.4764, 0.5468)
+ -- ( 0.2047, 0.5468)
+ .. controls ( 0.2857, 0.5146) and ( 0.5508, 0.5135) .. ( 0.7089, 0.5136)
+ -- ( 0.6740, 0.5740)
+ -- ( 0.6638, 0.5637)
+ --cycle
+ (-0.6684, 0.5591)
+ .. controls (-0.6731, 0.5588) and (-0.6784, 0.5577) .. (-0.6832, 0.5571)
+ -- (-0.6990, 0.5298)
+ -- (-0.5777, 0.5298)
+ .. controls (-0.6139, 0.5561) and (-0.6407, 0.5608) .. (-0.6684, 0.5591)
+ --cycle
+ (-0.3396, 0.5468)
+ .. controls (-0.2194, 0.4991) and (-0.1285, 0.5826) .. (-0.0845, 0.4447)
+ -- (-0.1525, 0.4957)
+ -- (-0.1525, 0.4277)
+ .. controls (-0.0482, 0.4023) and ( 0.2732, 0.3989) .. ( 0.3746, 0.4277)
+ .. controls ( 0.2597, 0.4733) and ( 0.2397, 0.4045) .. ( 0.1026, 0.4957)
+ -- ( 0.0686, 0.4617)
+ -- ( 0.0516, 0.4617)
+ -- ( 0.0686, 0.5298)
+ -- ( 0.0006, 0.4447)
+ -- ( 0.0006, 0.5468)
+ --cycle
+ (-0.0675, 0.5127)
+ -- (-0.0164, 0.5127)
+ -- (-0.0505, 0.4447)
+ --cycle
+ (-0.7435, 0.4527)
+ -- (-0.7580, 0.4277)
+ -- (-0.6797, 0.4277)
+ .. controls (-0.6982, 0.4394) and (-0.7200, 0.4471) .. (-0.7435, 0.4527)
+ --cycle
+ (-0.5266, 0.4447)
+ .. controls (-0.4681, 0.4018) and (-0.4413, 0.4086) .. (-0.3736, 0.4277)
+ --cycle
+ ( 0.5787, 0.4277)
+ -- ( 0.5447, 0.3257)
+ -- ( 0.5108, 0.3257)
+ -- ( 0.4597, 0.4107)
+ -- ( 0.4597, 0.3257)
+ -- ( 0.4257, 0.3937)
+ -- ( 0.4087, 0.3257)
+ -- ( 0.2897, 0.3257)
+ .. controls ( 0.3725, 0.2928) and ( 0.6913, 0.3087) .. ( 0.7998, 0.3087)
+ .. controls ( 0.7426, 0.3376) and ( 0.7264, 0.3382) .. ( 0.6638, 0.3257)
+ -- ( 0.6638, 0.3767)
+ -- ( 0.5787, 0.3257)
+ --cycle
+ (-0.7817, 0.3257)
+ -- (-0.7137, 0.2407)
+ -- (-0.7988, 0.2746)
+ .. controls (-0.8162, 0.2534) and (-0.8404, 0.2432) .. (-0.8672, 0.2385)
+ -- (-0.8857, 0.2066)
+ -- (-0.6627, 0.2066)
+ .. controls (-0.5059, 0.2059) and (-0.2690, 0.1655) .. (-0.1185, 0.2066)
+ .. controls (-0.2358, 0.2532) and (-0.4834, 0.1773) .. (-0.5607, 0.2746)
+ -- (-0.6287, 0.2237)
+ -- (-0.6457, 0.2407)
+ .. controls (-0.5823, 0.3108) and (-0.5667, 0.3074) .. (-0.4756, 0.3087)
+ --cycle
+ ( 0.8338, 0.2576)
+ -- ( 0.7998, 0.2066)
+ -- ( 0.8906, 0.1990)
+ -- ( 0.8567, 0.2576)
+ --cycle
+ (-0.0164, 0.2237)
+ .. controls ( 0.0715, 0.1799) and ( 0.3189, 0.1896) .. ( 0.4257, 0.1896)
+ -- ( 0.4257, 0.2237)
+ --cycle
+ (-0.2716, 0.1216)
+ -- (-0.2716, 0.0876)
+ -- ( 0.1501, 0.0876)
+ -- ( 0.1434, 0.1042)
+ -- ( 0.0345, 0.1216)
+ --cycle
+ ( 0.1501, 0.0876)
+ -- ( 0.1536, 0.0789)
+ -- ( 0.1536, 0.0876)
+ --cycle
+ ( 0.1536, 0.0789)
+ -- ( 0.1536, 0.0196)
+ -- ( 0.0856, 0.0534)
+ -- ( 0.0686,-0.0145)
+ -- ( 0.7658,-0.0145)
+ .. controls ( 0.6332, 0.0380) and ( 0.4479,-0.0524) .. ( 0.3406, 0.0534)
+ -- ( 0.3236, 0.0534)
+ -- ( 0.2897, 0.0196)
+ -- ( 0.2897, 0.0876)
+ -- ( 0.2556, 0.0196)
+ -- ( 0.2386, 0.0876)
+ -- ( 0.1705, 0.0365)
+ --cycle
+ ( 0.3917, 0.1216)
+ -- ( 0.3917, 0.0876)
+ -- ( 0.8678, 0.0876)
+ .. controls ( 0.7768, 0.1266) and ( 0.5022, 0.1216) .. ( 0.3917, 0.1216)
+ --cycle
+ (-0.9351, 0.1208)
+ -- (-0.9518, 0.0921)
+ -- (-0.9518, 0.0876)
+ -- (-0.6117, 0.1045)
+ --cycle
+ (-0.9144, 0.0213)
+ .. controls (-0.9468, 0.0204) and (-0.9775, 0.0109) .. (-0.9996,-0.0116)
+ -- (-0.9982,-0.0141)
+ -- (-0.8158, 0.0026)
+ .. controls (-0.8449, 0.0142) and (-0.8804, 0.0222) .. (-0.9144, 0.0213)
+ --cycle
+ (-0.6287, 0.0196)
+ .. controls (-0.5470,-0.0404) and (-0.2796,-0.0145) .. (-0.1695,-0.0145)
+ -- (-0.1695, 0.0196)
+ --cycle
+ (-0.9488,-0.0996)
+ -- (-0.9292,-0.1335)
+ -- (-0.4756,-0.1335)
+ -- (-0.4756,-0.0996)
+ --cycle
+ (-0.2886,-0.0996)
+ -- (-0.2886,-0.1335)
+ -- ( 0.2726,-0.1335)
+ .. controls ( 0.2164,-0.0920) and ( 0.1871,-0.0997) .. ( 0.1195,-0.0996)
+ --cycle
+ ( 0.5478,-0.1025)
+ .. controls ( 0.5070,-0.1018) and ( 0.4651,-0.1086) .. ( 0.4257,-0.1165)
+ -- ( 0.6638,-0.1335)
+ .. controls ( 0.6286,-0.1113) and ( 0.5887,-0.1031) .. ( 0.5478,-0.1025)
+ --cycle
+ ( 0.8928,-0.1132)
+ .. controls ( 0.8481,-0.1114) and ( 0.8007,-0.1165) .. ( 0.7658,-0.1165)
+ -- ( 0.9264,-0.1394)
+ -- ( 0.9384,-0.1186)
+ .. controls ( 0.9238,-0.1157) and ( 0.9087,-0.1137) .. ( 0.8928,-0.1132)
+ --cycle
+ (-0.2982,-0.2002)
+ .. controls (-0.3469,-0.2010) and (-0.3950,-0.2053) .. (-0.4416,-0.2185)
+ -- (-0.0505,-0.2355)
+ -- ( 0.7827,-0.2355)
+ .. controls ( 0.6739,-0.1909) and ( 0.4335,-0.2017) .. ( 0.3067,-0.2016)
+ -- (-0.1525,-0.2016)
+ .. controls (-0.2005,-0.2016) and (-0.2496,-0.1992) .. (-0.2982,-0.2002)
+ --cycle
+ (-0.8328,-0.2016)
+ .. controls (-0.7894,-0.2498) and (-0.7244,-0.2355) .. (-0.6627,-0.2355)
+ -- (-0.6627,-0.3034)
+ -- (-0.6967,-0.2696)
+ -- (-0.7137,-0.2696)
+ .. controls (-0.7385,-0.3064) and (-0.7772,-0.3191) .. (-0.8200,-0.3227)
+ -- (-0.8113,-0.3377)
+ .. controls (-0.6682,-0.3440) and (-0.4684,-0.3376) .. (-0.3906,-0.3376)
+ -- (-0.4586,-0.2696)
+ -- (-0.5266,-0.3034)
+ -- (-0.5097,-0.2355)
+ -- (-0.5607,-0.3206)
+ -- (-0.5777,-0.2355)
+ -- (-0.6457,-0.3034)
+ -- (-0.6287,-0.2185)
+ --cycle
+ ( 0.8169,-0.2866)
+ -- ( 0.7489,-0.3206)
+ .. controls ( 0.7652,-0.3284) and ( 0.7871,-0.3345) .. ( 0.8114,-0.3386)
+ -- ( 0.8324,-0.3020)
+ --cycle
+ ( 0.2076,-0.3170)
+ .. controls ( 0.0913,-0.3168) and (-0.0288,-0.3206) .. (-0.0845,-0.3206)
+ -- ( 0.2509,-0.3621)
+ -- ( 0.2897,-0.4056)
+ -- ( 0.2556,-0.3716)
+ -- ( 0.2386,-0.3716)
+ -- ( 0.2386,-0.4566)
+ -- ( 0.4257,-0.4566)
+ -- ( 0.3746,-0.3716)
+ -- ( 0.3067,-0.4226)
+ -- ( 0.3067,-0.3547)
+ -- ( 0.4766,-0.3376)
+ .. controls ( 0.4363,-0.3215) and ( 0.3237,-0.3172) .. ( 0.2076,-0.3170)
+ --cycle
+ (-0.7622,-0.4226)
+ -- (-0.7427,-0.4566)
+ -- (-0.5607,-0.4566)
+ -- (-0.5607,-0.4226)
+ --cycle
+ (-0.3396,-0.4226)
+ -- (-0.3396,-0.4566)
+ -- (-0.0164,-0.4566)
+ -- (-0.0164,-0.4226)
+ --cycle
+ ( 0.5787,-0.4226)
+ .. controls ( 0.6179,-0.4661) and ( 0.6835,-0.4595) .. ( 0.7407,-0.4607)
+ -- ( 0.7528,-0.4400)
+ .. controls ( 0.6947,-0.4396) and ( 0.6370,-0.4368) .. ( 0.5787,-0.4226)
+ --cycle
+ (-0.2496,-0.5239)
+ .. controls (-0.2827,-0.5212) and (-0.3176,-0.5246) .. (-0.3566,-0.5246)
+ -- (-0.7034,-0.5246)
+ -- (-0.6873,-0.5524)
+ .. controls (-0.6429,-0.5639) and (-0.5972,-0.5587) .. (-0.5436,-0.5587)
+ -- (-0.1525,-0.5587)
+ .. controls (-0.1848,-0.5349) and (-0.2163,-0.5263) .. (-0.2496,-0.5239)
+ --cycle
+ (-0.0164,-0.5417)
+ .. controls ( 0.0514,-0.5917) and ( 0.1065,-0.5717) .. ( 0.1876,-0.5736)
+ .. controls ( 0.2932,-0.5761) and ( 0.5300,-0.5848) .. ( 0.6766,-0.5720)
+ -- ( 0.6872,-0.5538)
+ -- ( 0.4937,-0.5417)
+ --cycle
+ (-0.6255,-0.6593)
+ -- (-0.6248,-0.6607)
+ -- (-0.6117,-0.6607)
+ --cycle
+ (-0.5777,-0.6607)
+ -- (-0.5777,-0.7287)
+ -- (-0.5856,-0.7287)
+ -- (-0.5659,-0.7627)
+ -- (-0.3906,-0.7627)
+ -- (-0.1695,-0.7627)
+ -- (-0.4246,-0.7287)
+ -- (-0.4076,-0.6607)
+ -- (-0.4416,-0.7287)
+ -- (-0.4756,-0.7287)
+ -- (-0.4756,-0.6607)
+ -- (-0.5097,-0.6607)
+ -- (-0.5097,-0.7287)
+ --cycle
+ ( 0.0686,-0.7457)
+ .. controls ( 0.1464,-0.8028) and ( 0.3428,-0.7798) .. ( 0.4427,-0.7798)
+ -- ( 0.4427,-0.7457)
+ --cycle
+ (-0.3736,-0.8478)
+ -- (-0.3736,-0.8722)
+ -- (-0.2203,-0.8722)
+ .. controls (-0.2708,-0.8419) and (-0.3097,-0.8478) .. (-0.3736,-0.8478)
+ --cycle
+ (-0.0172,-0.8544)
+ .. controls (-0.0398,-0.8556) and (-0.0623,-0.8586) .. (-0.0845,-0.8648)
+ .. controls (-0.0753,-0.8684) and (-0.0664,-0.8700) .. (-0.0573,-0.8722)
+ -- ( 0.5033,-0.8722)
+ -- ( 0.5088,-0.8626)
+ .. controls ( 0.3892,-0.8602) and ( 0.2527,-0.8649) .. ( 0.1876,-0.8648)
+ .. controls ( 0.1186,-0.8647) and ( 0.0502,-0.8509) .. (-0.0172,-0.8544)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/town.dtx b/macros/latex/contrib/wargame/source/hex/terrain/town.dtx
new file mode 100644
index 0000000000..1186b54c81
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/town.dtx
@@ -0,0 +1,1061 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/town}
+% A town.
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/town/.pic={
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1432,-0.4518)
+ -- (-0.0320,-0.2906)
+ -- ( 0.0745,-0.0351)
+ -- ( 0.1130,-0.0387)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0729,-0.0352)
+ -- (-0.1716, 0.0254)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.2493, 0.5648)
+ -- (-0.2192, 0.4501)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0677,-0.6538)
+ -- ( 0.1754,-0.7052)
+ -- ( 0.4358,-0.4688)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0439,-0.3617)
+ -- (-0.0921,-0.5012)
+ -- (-0.2865,-0.3243)
+ -- (-0.4420,-0.4608)
+ -- (-0.5795,-0.4446)
+ -- (-0.6421,-0.3520)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0622,-0.6515)
+ -- (-0.0316,-0.6176)
+ -- (-0.0221,-0.5364)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0048,-0.2069)
+ -- (-0.1945,-0.1818)
+ -- (-0.2278,-0.2247)
+ -- (-0.5051,-0.1356)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3383, 0.0449)
+ -- (-0.2189, 0.4510)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0073, 0.8700)
+ -- ( 0.3952, 0.3373)
+ -- ( 0.3884, 0.2029)
+ -- ( 0.3555, 0.1378)
+ -- ( 0.3751, 0.0880)
+ -- ( 0.2513,-0.1997)
+ -- ( 0.1396,-0.4505)
+ -- ( 0.0641,-0.6512)
+ -- ( 0.0070,-0.8700)
+ -- ( 0.0070,-0.8700)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7575, 0.4367)
+ -- ( 0.3945, 0.3375)
+ -- ( 0.3945, 0.3375)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1900,-0.0806)
+ -- (-0.0751, 0.3938)
+ -- (-0.0765, 0.3925)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1308, 0.1580)
+ -- (-0.7603, 0.4394)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.7139,-0.1526)
+ -- (-0.6147,-0.3362)
+ -- (-0.7607,-0.4327)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6676,-0.2405)
+ -- (-0.4599,-0.1067)
+ -- (-0.1877,-0.0679)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2082,-0.3003)
+ -- ( 0.4578,-0.4855)
+ -- ( 0.5914,-0.3675)
+ -- ( 0.7607,-0.4420)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.3827, 0.1864)
+ -- (-0.1290, 0.1576)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4493,-0.3075)
+ -- (-0.4043,-0.2868)
+ -- (-0.3710,-0.3593)
+ -- (-0.4160,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4493,-0.3075)
+ -- (-0.4043,-0.2868)
+ -- (-0.3710,-0.3593)
+ -- (-0.4160,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5264,-0.1066)
+ -- (-0.5514,-0.0681)
+ -- (-0.5002,-0.0349)
+ -- (-0.4753,-0.0733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5264,-0.1066)
+ -- (-0.5514,-0.0681)
+ -- (-0.5002,-0.0349)
+ -- (-0.4753,-0.0733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0986, 0.2553)
+ -- (-0.0882, 0.2827)
+ -- (-0.0380, 0.2637)
+ -- (-0.0484, 0.2363)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0986, 0.2553)
+ -- (-0.0882, 0.2827)
+ -- (-0.0380, 0.2637)
+ -- (-0.0484, 0.2363)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0834, 0.2379)
+ -- ( 0.0888, 0.2667)
+ -- ( 0.1415, 0.2566)
+ -- ( 0.1361, 0.2279)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0834, 0.2379)
+ -- ( 0.0888, 0.2667)
+ -- ( 0.1415, 0.2566)
+ -- ( 0.1361, 0.2279)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0207,-0.0604)
+ -- (-0.0103,-0.0331)
+ -- ( 0.0398,-0.0521)
+ -- ( 0.0294,-0.0794)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0207,-0.0604)
+ -- (-0.0103,-0.0331)
+ -- ( 0.0398,-0.0521)
+ -- ( 0.0294,-0.0794)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4608)
+ -- ( 0.3837,-0.4748)
+ -- ( 0.3581,-0.5219)
+ -- ( 0.3324,-0.5080)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4608)
+ -- ( 0.3837,-0.4748)
+ -- ( 0.3581,-0.5219)
+ -- ( 0.3324,-0.5080)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2118,-0.3884)
+ -- ( 0.2245,-0.3620)
+ -- ( 0.2728,-0.3854)
+ -- ( 0.2600,-0.4118)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2118,-0.3884)
+ -- ( 0.2245,-0.3620)
+ -- ( 0.2728,-0.3854)
+ -- ( 0.2600,-0.4118)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1651,-0.4740)
+ -- ( 0.1775,-0.4475)
+ -- ( 0.2260,-0.4702)
+ -- ( 0.2137,-0.4968)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1651,-0.4740)
+ -- ( 0.1775,-0.4475)
+ -- ( 0.2260,-0.4702)
+ -- ( 0.2137,-0.4968)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2834,-0.4196)
+ -- ( 0.2957,-0.3932)
+ -- ( 0.3443,-0.4159)
+ -- ( 0.3319,-0.4423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2834,-0.4196)
+ -- ( 0.2957,-0.3932)
+ -- ( 0.3443,-0.4159)
+ -- ( 0.3319,-0.4423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1447,-0.5170)
+ -- ( 0.1555,-0.4899)
+ -- ( 0.2053,-0.5096)
+ -- ( 0.1945,-0.5368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1447,-0.5170)
+ -- ( 0.1555,-0.4899)
+ -- ( 0.2053,-0.5096)
+ -- ( 0.1945,-0.5368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0154,-0.5671)
+ -- ( 0.0244,-0.5392)
+ -- ( 0.0754,-0.5558)
+ -- ( 0.0664,-0.5836)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0154,-0.5671)
+ -- ( 0.0244,-0.5392)
+ -- ( 0.0754,-0.5558)
+ -- ( 0.0664,-0.5836)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2958,-0.3614)
+ -- (-0.2707,-0.3764)
+ -- (-0.2983,-0.4224)
+ -- (-0.3234,-0.4073)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2958,-0.3614)
+ -- (-0.2707,-0.3764)
+ -- (-0.2983,-0.4224)
+ -- (-0.3234,-0.4073)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3024,-0.2385)
+ -- (-0.2753,-0.2491)
+ -- (-0.2948,-0.2990)
+ -- (-0.3220,-0.2883)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3024,-0.2385)
+ -- (-0.2753,-0.2491)
+ -- (-0.2948,-0.2990)
+ -- (-0.3220,-0.2883)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5719,-0.2295)
+ -- (-0.5577,-0.2550)
+ -- (-0.6045,-0.2811)
+ -- (-0.6187,-0.2556)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5719,-0.2295)
+ -- (-0.5577,-0.2550)
+ -- (-0.6045,-0.2811)
+ -- (-0.6187,-0.2556)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5909,-0.3922)
+ -- (-0.5677,-0.3744)
+ -- (-0.5351,-0.4170)
+ -- (-0.5584,-0.4348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5909,-0.3922)
+ -- (-0.5677,-0.3744)
+ -- (-0.5351,-0.4170)
+ -- (-0.5584,-0.4348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4367,-0.3858)
+ -- (-0.4233,-0.4119)
+ -- (-0.4709,-0.4364)
+ -- (-0.4843,-0.4105)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4367,-0.3858)
+ -- (-0.4233,-0.4119)
+ -- (-0.4709,-0.4364)
+ -- (-0.4843,-0.4105)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6605,-0.4272)
+ -- (-0.6489,-0.4540)
+ -- (-0.6982,-0.4752)
+ -- (-0.7097,-0.4483)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6605,-0.4272)
+ -- (-0.6489,-0.4540)
+ -- (-0.6982,-0.4752)
+ -- (-0.7097,-0.4483)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2694,-0.2379)
+ -- ( 0.2777,-0.2098)
+ -- ( 0.3291,-0.2250)
+ -- ( 0.3209,-0.2530)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2694,-0.2379)
+ -- ( 0.2777,-0.2098)
+ -- ( 0.3291,-0.2250)
+ -- ( 0.3209,-0.2530)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1131,-0.3134)
+ -- ( 0.1237,-0.2861)
+ -- ( 0.1737,-0.3055)
+ -- ( 0.1630,-0.3328)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1131,-0.3134)
+ -- ( 0.1237,-0.2861)
+ -- ( 0.1737,-0.3055)
+ -- ( 0.1630,-0.3328)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1931,-0.0936)
+ -- ( 0.2058,-0.0673)
+ -- ( 0.2541,-0.0904)
+ -- ( 0.2415,-0.1168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1931,-0.0936)
+ -- ( 0.2058,-0.0673)
+ -- ( 0.2541,-0.0904)
+ -- ( 0.2415,-0.1168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1779, 0.1198)
+ -- ( 0.1984, 0.0990)
+ -- ( 0.1603, 0.0613)
+ -- ( 0.1398, 0.0821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1779, 0.1198)
+ -- ( 0.1984, 0.0990)
+ -- ( 0.1603, 0.0613)
+ -- ( 0.1398, 0.0821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2473, 0.2770)
+ -- (-0.2380, 0.3048)
+ -- (-0.1871, 0.2879)
+ -- (-0.1964, 0.2601)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2473, 0.2770)
+ -- (-0.2380, 0.3048)
+ -- (-0.1871, 0.2879)
+ -- (-0.1964, 0.2601)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1395, 0.3602)
+ -- (-0.1127, 0.3488)
+ -- (-0.1335, 0.2995)
+ -- (-0.1604, 0.3109)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1395, 0.3602)
+ -- (-0.1127, 0.3488)
+ -- (-0.1335, 0.2995)
+ -- (-0.1604, 0.3109)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3040, 0.3746)
+ -- (-0.2919, 0.4012)
+ -- (-0.2431, 0.3791)
+ -- (-0.2552, 0.3524)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3040, 0.3746)
+ -- (-0.2919, 0.4012)
+ -- (-0.2431, 0.3791)
+ -- (-0.2552, 0.3524)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7420,-0.2456)
+ -- (-0.7302,-0.2189)
+ -- (-0.6812,-0.2407)
+ -- (-0.6930,-0.2674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7420,-0.2456)
+ -- (-0.7302,-0.2189)
+ -- (-0.6812,-0.2407)
+ -- (-0.6930,-0.2674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2252,-0.0023)
+ -- (-0.1960,-0.0023)
+ -- (-0.1960,-0.0559)
+ -- (-0.2252,-0.0559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2252,-0.0023)
+ -- (-0.1960,-0.0023)
+ -- (-0.1960,-0.0559)
+ -- (-0.2252,-0.0559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0041,-0.2944)
+ -- ( 0.0064,-0.2671)
+ -- ( 0.0564,-0.2862)
+ -- ( 0.0460,-0.3135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0041,-0.2944)
+ -- ( 0.0064,-0.2671)
+ -- ( 0.0564,-0.2862)
+ -- ( 0.0460,-0.3135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1877,-0.2296)
+ -- (-0.1764,-0.2026)
+ -- (-0.1270,-0.2233)
+ -- (-0.1383,-0.2503)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1877,-0.2296)
+ -- (-0.1764,-0.2026)
+ -- (-0.1270,-0.2233)
+ -- (-0.1383,-0.2503)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1170,-0.3014)
+ -- (-0.1067,-0.2740)
+ -- (-0.0566,-0.2928)
+ -- (-0.0668,-0.3202)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1170,-0.3014)
+ -- (-0.1067,-0.2740)
+ -- (-0.0566,-0.2928)
+ -- (-0.0668,-0.3202)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.3499)
+ -- (-0.0428,-0.3468)
+ -- (-0.0371,-0.4001)
+ -- (-0.0661,-0.4032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.3499)
+ -- (-0.0428,-0.3468)
+ -- (-0.0371,-0.4001)
+ -- (-0.0661,-0.4032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1944,-0.4810)
+ -- (-0.1500,-0.4925)
+ -- (-0.1653,-0.5515)
+ -- (-0.2097,-0.5399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1944,-0.4810)
+ -- (-0.1500,-0.4925)
+ -- (-0.1653,-0.5515)
+ -- (-0.2097,-0.5399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3062, 0.5810)
+ -- (-0.2635, 0.5641)
+ -- (-0.2859, 0.5075)
+ -- (-0.3285, 0.5243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3062, 0.5810)
+ -- (-0.2635, 0.5641)
+ -- (-0.2859, 0.5075)
+ -- (-0.3285, 0.5243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0310,-0.4661)
+ -- ( 0.0449,-0.4224)
+ -- ( 0.1029,-0.4409)
+ -- ( 0.0889,-0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0310,-0.4661)
+ -- ( 0.0449,-0.4224)
+ -- ( 0.1029,-0.4409)
+ -- ( 0.0889,-0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1523,-0.2013)
+ -- ( 0.1718,-0.1598)
+ -- ( 0.2270,-0.1857)
+ -- ( 0.2075,-0.2272)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1523,-0.2013)
+ -- ( 0.1718,-0.1598)
+ -- ( 0.2270,-0.1857)
+ -- ( 0.2075,-0.2272)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0857,-0.3676)
+ -- ( 0.1052,-0.3261)
+ -- ( 0.1603,-0.3520)
+ -- ( 0.1409,-0.3935)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0857,-0.3676)
+ -- ( 0.1052,-0.3261)
+ -- ( 0.1603,-0.3520)
+ -- ( 0.1409,-0.3935)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0204,-0.2046)
+ -- ( 0.0398,-0.1631)
+ -- ( 0.0950,-0.1890)
+ -- ( 0.0755,-0.2305)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0204,-0.2046)
+ -- ( 0.0398,-0.1631)
+ -- ( 0.0950,-0.1890)
+ -- ( 0.0755,-0.2305)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0647, 0.4710)
+ -- (-0.0215, 0.4559)
+ -- (-0.0416, 0.3984)
+ -- (-0.0848, 0.4135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0647, 0.4710)
+ -- (-0.0215, 0.4559)
+ -- (-0.0416, 0.3984)
+ -- (-0.0848, 0.4135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1476,-0.3704)
+ -- (-0.1403,-0.3251)
+ -- (-0.0802,-0.3347)
+ -- (-0.0873,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1476,-0.3704)
+ -- (-0.1403,-0.3251)
+ -- (-0.0802,-0.3347)
+ -- (-0.0873,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0755, 0.3210)
+ -- (-0.0531, 0.3610)
+ -- ( 0.0001, 0.3312)
+ -- (-0.0224, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0755, 0.3210)
+ -- (-0.0531, 0.3610)
+ -- ( 0.0001, 0.3312)
+ -- (-0.0224, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1354, 0.0442)
+ -- (-0.1129, 0.0842)
+ -- (-0.0599, 0.0544)
+ -- (-0.0823, 0.0144)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1354, 0.0442)
+ -- (-0.1129, 0.0842)
+ -- (-0.0599, 0.0544)
+ -- (-0.0823, 0.0144)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1672,-0.0608)
+ -- (-0.1524,-0.0175)
+ -- (-0.0948,-0.0371)
+ -- (-0.1096,-0.0805)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1672,-0.0608)
+ -- (-0.1524,-0.0175)
+ -- (-0.0948,-0.0371)
+ -- (-0.1096,-0.0805)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0920,-0.6296)
+ -- ( 0.1069,-0.5863)
+ -- ( 0.1645,-0.6060)
+ -- ( 0.1497,-0.6493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0920,-0.6296)
+ -- ( 0.1069,-0.5863)
+ -- ( 0.1645,-0.6060)
+ -- ( 0.1497,-0.6493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3558, 0.0291)
+ -- (-0.3124, 0.0144)
+ -- (-0.3318,-0.0433)
+ -- (-0.3753,-0.0287)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3558, 0.0291)
+ -- (-0.3124, 0.0144)
+ -- (-0.3318,-0.0433)
+ -- (-0.3753,-0.0287)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0124, 0.1558)
+ -- ( 0.0333, 0.1525)
+ -- ( 0.0290, 0.0918)
+ -- (-0.0167, 0.0950)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0124, 0.1558)
+ -- ( 0.0333, 0.1525)
+ -- ( 0.0290, 0.0918)
+ -- (-0.0167, 0.0950)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2433,-0.1480)
+ -- (-0.2141,-0.1472)
+ -- (-0.2127,-0.2008)
+ -- (-0.2419,-0.2015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2433,-0.1480)
+ -- (-0.2141,-0.1472)
+ -- (-0.2127,-0.2008)
+ -- (-0.2419,-0.2015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2599,-0.2379)
+ -- (-0.2164,-0.2525)
+ -- (-0.2358,-0.3102)
+ -- (-0.2793,-0.2955)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2599,-0.2379)
+ -- (-0.2164,-0.2525)
+ -- (-0.2358,-0.3102)
+ -- (-0.2793,-0.2955)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0167, 0.0438)
+ -- ( 0.0385, 0.0365)
+ -- ( 0.0301, 0.0113)
+ -- ( 0.0082, 0.0187)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0167, 0.0438)
+ -- ( 0.0385, 0.0365)
+ -- ( 0.0301, 0.0113)
+ -- ( 0.0082, 0.0187)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2901,-0.1193)
+ -- (-0.2450,-0.1273)
+ -- (-0.2556,-0.1872)
+ -- (-0.3008,-0.1792)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2901,-0.1193)
+ -- (-0.2450,-0.1273)
+ -- (-0.2556,-0.1872)
+ -- (-0.3008,-0.1792)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1275,-0.0001)
+ -- ( 0.1734,-0.0022)
+ -- ( 0.1707,-0.0630)
+ -- ( 0.1248,-0.0610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1275,-0.0001)
+ -- ( 0.1734,-0.0022)
+ -- ( 0.1707,-0.0630)
+ -- ( 0.1248,-0.0610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0645,-0.5272)
+ -- (-0.0415,-0.5245)
+ -- (-0.0383,-0.5509)
+ -- (-0.0612,-0.5536)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0645,-0.5272)
+ -- (-0.0415,-0.5245)
+ -- (-0.0383,-0.5509)
+ -- (-0.0612,-0.5536)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3209, 0.2176)
+ -- (-0.2989, 0.2105)
+ -- (-0.3069, 0.1853)
+ -- (-0.3289, 0.1923)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3209, 0.2176)
+ -- (-0.2989, 0.2105)
+ -- (-0.3069, 0.1853)
+ -- (-0.3289, 0.1923)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx b/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
new file mode 100644
index 0000000000..93c2987227
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
@@ -0,0 +1,31 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/tree}
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/tree/.pic={
+ \path[draw,very thick,pic actions]
+ (-.15,.0)
+ arc (269:135:.1)
+ arc (215: 90:.1)
+ arc (180: 45:.1)
+ arc (135: 0:.1)
+ arc ( 90:-45:.1)
+ arc ( 45:-90:.1)
+ (-.15,.025)
+ arc (60:-60:.25)
+ arc (150:30:.075)
+ arc (150:30:.075)
+ arc (150:30:.075)
+ arc (-120:-240:.25);
+
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/village.dtx b/macros/latex/contrib/wargame/source/hex/terrain/village.dtx
new file mode 100644
index 0000000000..837b92642c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/village.dtx
@@ -0,0 +1,352 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/town/road,
+% hex/terrain/town/small road,
+% hex/terrain/town/house}
+% For villages, towns, and cities, we need three styles: one for
+% houses, and separate styles for regular and small roads. Note
+% that we draw using the stroke colour for roads and houses.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/town/road/.style={
+ fill=none,
+ draw=gray!50!black,
+ scale line widths,
+ line width=.3mm
+ },
+ hex/terrain/town/small road/.style={
+ fill=none,
+ draw=gray!75!black,
+ scale line widths,
+ line width=.15mm
+ },
+ hex/terrain/town/post road/.style={
+ fill=none
+ },
+ hex/terrain/town/house/.style={
+ draw=none,
+ fill=gray!75!black,
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \begin{TikzKey}{hex/terrain/village}
+% Now for village, town, and city patterns.
+%
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/village/.pic={
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0073, 0.8700)
+ -- ( 0.3952, 0.3373)
+ -- ( 0.3884, 0.2029)
+ -- ( 0.3555, 0.1378)
+ -- ( 0.3751, 0.0880)
+ -- ( 0.2513,-0.1997)
+ -- ( 0.1396,-0.4505)
+ -- ( 0.0641,-0.6512)
+ -- ( 0.0070,-0.8700)
+ -- ( 0.0070,-0.8700)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7575, 0.4367)
+ -- ( 0.3945, 0.3375)
+ -- ( 0.3945, 0.3375)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1900,-0.0806)
+ -- (-0.1155, 0.1588)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1308, 0.1580)
+ -- (-0.7603, 0.4394)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6615,-0.2309)
+ -- (-0.6777,-0.3255)
+ -- (-0.7607,-0.4327)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6676,-0.2405)
+ -- (-0.4599,-0.1067)
+ -- (-0.1877,-0.0679)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2082,-0.3003)
+ -- ( 0.4578,-0.4855)
+ -- ( 0.5914,-0.3675)
+ -- ( 0.7607,-0.4420)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.3827, 0.1864)
+ -- (-0.1290, 0.1576)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1323, 0.2640)
+ -- (-0.0890, 0.2489)
+ -- (-0.1092, 0.1914)
+ -- (-0.1524, 0.2065)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1323, 0.2640)
+ -- (-0.0890, 0.2489)
+ -- (-0.1092, 0.1914)
+ -- (-0.1524, 0.2065)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx b/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
new file mode 100644
index 0000000000..9b0d08499b
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
@@ -0,0 +1,1011 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/woods}
+% The style for woods. The pattern is filled with a darker green,
+% and outlines are not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/woods/.style={
+ draw=none,
+ fill={rgb,100:red,27;green,67;blue,27}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/woods}
+% Regular woods.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/woods/.pic={
+ \path[hex/terrain/woods,pic actions,draw=none]
+ (-0.2656, 0.8694)
+ .. controls (-0.3133, 0.8640) and (-0.3608, 0.8400) .. (-0.3541, 0.8219)
+ .. controls (-0.3417, 0.7629) and (-0.2512, 0.7779) .. (-0.2082, 0.7875)
+ -- (-0.2424, 0.6937)
+ .. controls (-0.2916, 0.7000) and (-0.3535, 0.6915) .. (-0.3950, 0.6606)
+ .. controls (-0.4299, 0.6330) and (-0.4373, 0.5909) .. (-0.3950, 0.5657)
+ .. controls (-0.4092, 0.5022) and (-0.3694, 0.4908) .. (-0.3191, 0.4633)
+ .. controls (-0.3291, 0.3852) and (-0.2535, 0.3866) .. (-0.2935, 0.4633)
+ .. controls (-0.2488, 0.4801) and (-0.2488, 0.5071) .. (-0.2778, 0.5156)
+ .. controls (-0.2888, 0.5201) and (-0.3300, 0.5153) .. (-0.3447, 0.5156)
+ -- (-0.3191, 0.6255)
+ -- (-0.2680, 0.6425)
+ -- (-0.2253, 0.5657)
+ .. controls (-0.2136, 0.5780) and (-0.2023, 0.5853) .. (-0.2092, 0.6046)
+ .. controls (-0.2132, 0.6161) and (-0.2403, 0.6366) .. (-0.2260, 0.6502)
+ .. controls (-0.2044, 0.6711) and (-0.1779, 0.6203) .. (-0.1564, 0.6147)
+ .. controls (-0.1363, 0.6094) and (-0.1262, 0.6240) .. (-0.1328, 0.6430)
+ .. controls (-0.1449, 0.6778) and (-0.1661, 0.6737) .. (-0.1741, 0.7278)
+ .. controls (-0.1213, 0.6943) and (-0.1063, 0.7287) .. (-0.1485, 0.7534)
+ -- (-0.1058, 0.7875)
+ -- (-0.0718, 0.7789)
+ -- (-0.0633, 0.8046)
+ .. controls (-0.0937, 0.8085) and (-0.0917, 0.8079) .. (-0.1143, 0.7875)
+ -- (-0.1311, 0.8194)
+ .. controls (-0.0764, 0.8223) and (-0.0450, 0.8485) .. (-0.0671, 0.8554)
+ .. controls (-0.1156, 0.8701) and (-0.1015, 0.8233) .. (-0.1806, 0.8398)
+ .. controls (-0.1900, 0.8580) and (-0.2089, 0.8664) .. (-0.2307, 0.8694)
+ --cycle
+ ( 0.3814, 0.8694)
+ .. controls ( 0.3767, 0.8683) and ( 0.3712, 0.8666) .. ( 0.3632, 0.8643)
+ -- ( 0.3974, 0.8387)
+ .. controls ( 0.3974, 0.8591) and ( 0.3972, 0.8674) .. ( 0.3911, 0.8694)
+ --cycle
+ (-0.2452, 0.8541)
+ .. controls (-0.2324, 0.8571) and (-0.2266, 0.8501) .. (-0.2079, 0.8422)
+ -- (-0.2167, 0.8284)
+ .. controls (-0.2397, 0.8309) and (-0.2848, 0.8202) .. (-0.2983, 0.8284)
+ .. controls (-0.3215, 0.8378) and (-0.2860, 0.8342) .. (-0.2614, 0.8473)
+ .. controls (-0.2547, 0.8509) and (-0.2496, 0.8531) .. (-0.2452, 0.8541)
+ --cycle
+ (-0.4331, 0.8427)
+ .. controls (-0.4534, 0.8538) and (-0.5066, 0.7937) .. (-0.5170, 0.7773)
+ .. controls (-0.5802, 0.6871) and (-0.6279, 0.5503) .. (-0.6704, 0.5650)
+ .. controls (-0.6703, 0.5117) and (-0.7322, 0.4917) .. (-0.7340, 0.4547)
+ .. controls (-0.7365, 0.4053) and (-0.6948, 0.3832) .. (-0.6621, 0.3593)
+ .. controls (-0.6271, 0.3335) and (-0.6254, 0.2860) .. (-0.5409, 0.3014)
+ -- (-0.5409, 0.3184)
+ -- (-0.5750, 0.3099)
+ -- (-0.5836, 0.3524)
+ -- (-0.4898, 0.3184)
+ -- (-0.5068, 0.3696)
+ .. controls (-0.4593, 0.3586) and (-0.4552, 0.3659) .. (-0.4214, 0.3269)
+ .. controls (-0.3754, 0.3528) and (-0.3794, 0.4022) .. (-0.4295, 0.4177)
+ .. controls (-0.4450, 0.4224) and (-0.4931, 0.4354) .. (-0.5068, 0.4333)
+ .. controls (-0.5383, 0.4284) and (-0.6200, 0.3557) .. (-0.6774, 0.4548)
+ -- (-0.6432, 0.4548)
+ -- (-0.6603, 0.4975)
+ .. controls (-0.6019, 0.4851) and (-0.6021, 0.5053) .. (-0.5921, 0.5572)
+ .. controls (-0.4969, 0.5307) and (-0.5431, 0.5224) .. (-0.4812, 0.4890)
+ .. controls (-0.4749, 0.5293) and (-0.4896, 0.5637) .. (-0.5068, 0.5998)
+ .. controls (-0.4948, 0.6064) and (-0.4850, 0.6107) .. (-0.4746, 0.6204)
+ .. controls (-0.4177, 0.6740) and (-0.4877, 0.7151) .. (-0.5154, 0.6423)
+ .. controls (-0.5225, 0.6240) and (-0.5189, 0.6174) .. (-0.5154, 0.5998)
+ -- (-0.5889, 0.6190)
+ .. controls (-0.5889, 0.6190) and (-0.5470, 0.6607) .. (-0.5396, 0.6879)
+ .. controls (-0.5254, 0.7392) and (-0.4740, 0.7624) .. (-0.4378, 0.7960)
+ .. controls (-0.4256, 0.8071) and (-0.3322, 0.7872) .. (-0.4331, 0.8427)
+ --cycle
+ ( 0.1374, 0.8418)
+ .. controls ( 0.1320, 0.8428) and ( 0.1261, 0.8424) .. ( 0.1202, 0.8403)
+ .. controls ( 0.1031, 0.8066) and ( 0.1641, 0.7460) .. ( 0.1812, 0.7545)
+ .. controls ( 0.1999, 0.7639) and ( 0.1758, 0.8354) .. ( 0.1374, 0.8418)
+ --cycle
+ (-0.0462, 0.8217)
+ -- (-0.0462, 0.7789)
+ -- (-0.0121, 0.7961)
+ --cycle
+ ( 0.3717, 0.8217)
+ -- ( 0.3717, 0.8046)
+ -- ( 0.4059, 0.7961)
+ -- ( 0.4144, 0.8217)
+ --cycle
+ ( 0.4898, 0.8122)
+ .. controls ( 0.4741, 0.8124) and ( 0.4748, 0.7893) .. ( 0.4981, 0.7754)
+ .. controls ( 0.5017, 0.7550) and ( 0.5313, 0.6452) .. ( 0.5686, 0.6689)
+ .. controls ( 0.5928, 0.6844) and ( 0.5339, 0.7103) .. ( 0.5653, 0.7412)
+ .. controls ( 0.5710, 0.7471) and ( 0.5728, 0.7507) .. ( 0.5731, 0.7536)
+ -- ( 0.5703, 0.7583)
+ .. controls ( 0.5582, 0.7647) and ( 0.5121, 0.7531) .. ( 0.5343, 0.7796)
+ .. controls ( 0.5145, 0.8036) and ( 0.4992, 0.8122) .. ( 0.4898, 0.8122)
+ --cycle
+ ( 0.3291, 0.7997)
+ .. controls ( 0.3112, 0.7975) and ( 0.2934, 0.7843) .. ( 0.2780, 0.7757)
+ .. controls ( 0.2235, 0.7455) and ( 0.1913, 0.7199) .. ( 0.2438, 0.6595)
+ .. controls ( 0.2287, 0.6542) and ( 0.2176, 0.6521) .. ( 0.2063, 0.6389)
+ .. controls ( 0.1704, 0.5968) and ( 0.2192, 0.5413) .. ( 0.2430, 0.5712)
+ .. controls ( 0.2494, 0.5791) and ( 0.2509, 0.6061) .. ( 0.2523, 0.6170)
+ .. controls ( 0.2545, 0.6376) and ( 0.2547, 0.6388) .. ( 0.2523, 0.6595)
+ -- ( 0.2865, 0.6681)
+ .. controls ( 0.3094, 0.6426) and ( 0.3194, 0.6608) .. ( 0.3291, 0.6852)
+ -- ( 0.2865, 0.6937)
+ .. controls ( 0.3061, 0.7101) and ( 0.3276, 0.7308) .. ( 0.3547, 0.7322)
+ .. controls ( 0.3792, 0.7335) and ( 0.4787, 0.6707) .. ( 0.4596, 0.7446)
+ .. controls ( 0.4487, 0.7866) and ( 0.4132, 0.7751) .. ( 0.3912, 0.7800)
+ .. controls ( 0.3681, 0.7853) and ( 0.3549, 0.8026) .. ( 0.3291, 0.7997)
+ --cycle
+ ( 0.0971, 0.7996)
+ .. controls ( 0.0971, 0.7996) and (-0.0371, 0.7713) .. (-0.0393, 0.7247)
+ .. controls (-0.0408, 0.6927) and ( 0.0217, 0.7175) .. ( 0.0521, 0.7277)
+ .. controls ( 0.0789, 0.7366) and ( 0.0971, 0.7996) .. ( 0.0971, 0.7996)
+ --cycle
+ (-0.1571, 0.7961)
+ -- (-0.1485, 0.7961)
+ -- (-0.1485, 0.7875)
+ -- (-0.1400, 0.7875)
+ -- (-0.1400, 0.7789)
+ -- (-0.1485, 0.7875)
+ --cycle
+ (-0.3689, 0.7733)
+ .. controls (-0.3791, 0.7835) and (-0.4247, 0.7612) .. (-0.4247, 0.7612)
+ .. controls (-0.4247, 0.7612) and (-0.4258, 0.7138) .. (-0.4104, 0.7184)
+ .. controls (-0.3965, 0.7227) and (-0.3586, 0.7631) .. (-0.3689, 0.7733)
+ --cycle
+ ( 0.3462, 0.7278)
+ -- ( 0.3462, 0.6766)
+ -- ( 0.3804, 0.7107)
+ --cycle
+ ( 0.1142, 0.7077)
+ .. controls ( 0.1016, 0.7065) and ( 0.0878, 0.7029) .. ( 0.0733, 0.6974)
+ .. controls ( 0.0595, 0.6920) and ( 0.0449, 0.6883) .. ( 0.0332, 0.6789)
+ .. controls ( 0.0192, 0.6678) and ( 0.0113, 0.6500) .. ( 0.0014, 0.6354)
+ .. controls (-0.0079, 0.6219) and (-0.0221, 0.6074) .. (-0.0243, 0.5905)
+ .. controls (-0.0267, 0.5713) and ( 0.0128, 0.4923) .. ( 0.0326, 0.4877)
+ .. controls ( 0.0455, 0.4824) and ( 0.0530, 0.4866) .. ( 0.0647, 0.4877)
+ .. controls ( 0.0870, 0.4591) and ( 0.0975, 0.4638) .. ( 0.1331, 0.4633)
+ .. controls ( 0.1499, 0.4110) and ( 0.1908, 0.4198) .. ( 0.1671, 0.4890)
+ .. controls ( 0.1267, 0.5142) and ( 0.1094, 0.5105) .. ( 0.0647, 0.4975)
+ .. controls ( 0.0889, 0.5509) and ( 0.0981, 0.5486) .. ( 0.0733, 0.6084)
+ .. controls ( 0.1221, 0.6144) and ( 0.1333, 0.6047) .. ( 0.1415, 0.6510)
+ -- ( 0.1927, 0.6425)
+ .. controls ( 0.1814, 0.6932) and ( 0.1526, 0.7111) .. ( 0.1142, 0.7077)
+ --cycle
+ ( 0.1671, 0.4890)
+ -- ( 0.2182, 0.4890)
+ .. controls ( 0.2474, 0.4580) and ( 0.2982, 0.5061) .. ( 0.2981, 0.5238)
+ .. controls ( 0.2981, 0.5425) and ( 0.2721, 0.5720) .. ( 0.2418, 0.5318)
+ -- ( 0.2182, 0.4975)
+ .. controls ( 0.1923, 0.5152) and ( 0.1850, 0.5158) .. ( 0.1671, 0.4890)
+ --cycle
+ (-0.1058, 0.6937)
+ -- (-0.0973, 0.6595)
+ -- (-0.0802, 0.6595)
+ -- (-0.0718, 0.6937)
+ --cycle
+ ( 0.3889, 0.6852)
+ .. controls ( 0.3954, 0.6469) and ( 0.4108, 0.6416) .. ( 0.4314, 0.6766)
+ --cycle
+ ( 0.4826, 0.6852)
+ -- ( 0.4562, 0.6475)
+ .. controls ( 0.4460, 0.6335) and ( 0.4249, 0.5852) .. ( 0.4639, 0.5976)
+ .. controls ( 0.4953, 0.6076) and ( 0.5058, 0.6583) .. ( 0.4998, 0.6852)
+ --cycle
+ (-0.0879, 0.6326)
+ .. controls (-0.1189, 0.6139) and (-0.0956, 0.5976) .. (-0.0822, 0.6003)
+ .. controls (-0.0699, 0.6027) and (-0.0544, 0.6253) .. (-0.0879, 0.6326)
+ --cycle
+ ( 0.3034, 0.6255)
+ -- ( 0.2694, 0.6170)
+ -- ( 0.2694, 0.5998)
+ -- ( 0.3034, 0.5913)
+ --cycle
+ ( 0.6085, 0.6015)
+ .. controls ( 0.5969, 0.6043) and ( 0.5796, 0.6004) .. ( 0.5688, 0.5964)
+ .. controls ( 0.5189, 0.5780) and ( 0.5216, 0.5317) .. ( 0.5338, 0.4890)
+ .. controls ( 0.5892, 0.5200) and ( 0.5513, 0.5451) .. ( 0.6191, 0.5657)
+ .. controls ( 0.6318, 0.5296) and ( 0.6176, 0.4979) .. ( 0.6703, 0.5572)
+ .. controls ( 0.6580, 0.5662) and ( 0.6196, 0.5989) .. ( 0.6085, 0.6015)
+ --cycle
+ ( 0.6703, 0.5572)
+ .. controls ( 0.6650, 0.4639) and ( 0.7377, 0.4434) .. ( 0.6703, 0.5572)
+ --cycle
+ ( 0.2950, 0.5828)
+ -- ( 0.3034, 0.5487)
+ -- ( 0.3206, 0.5487)
+ -- ( 0.3291, 0.5572)
+ -- ( 0.3291, 0.5743)
+ --cycle
+ (-0.2167, 0.5572)
+ .. controls (-0.2524, 0.4984) and (-0.2378, 0.4949) .. (-0.1997, 0.4463)
+ -- (-0.1656, 0.4548)
+ -- (-0.1656, 0.4719)
+ -- (-0.1997, 0.4804)
+ -- (-0.1997, 0.4719)
+ -- (-0.2082, 0.4804)
+ -- (-0.1997, 0.4804)
+ .. controls (-0.1944, 0.5170) and (-0.1913, 0.5288) .. (-0.2167, 0.5572)
+ --cycle
+ ( 0.4528, 0.5567)
+ .. controls ( 0.4208, 0.5591) and ( 0.3875, 0.5291) .. ( 0.3974, 0.4804)
+ -- ( 0.4998, 0.5146)
+ .. controls ( 0.4909, 0.5422) and ( 0.4721, 0.5552) .. ( 0.4528, 0.5567)
+ --cycle
+ (-0.5836, 0.5401)
+ .. controls (-0.5724, 0.5036) and (-0.5428, 0.4697) .. (-0.5238, 0.5231)
+ --cycle
+ (-0.0890, 0.5163)
+ .. controls (-0.1486, 0.4959) and (-0.1212, 0.4523) .. (-0.0806, 0.4615)
+ .. controls (-0.0429, 0.4702) and (-0.0388, 0.5108) .. (-0.0890, 0.5163)
+ --cycle
+ ( 0.3494, 0.5160)
+ .. controls ( 0.3442, 0.5162) and ( 0.3376, 0.5157) .. ( 0.3291, 0.5146)
+ -- ( 0.3632, 0.4804)
+ .. controls ( 0.3666, 0.5059) and ( 0.3648, 0.5149) .. ( 0.3494, 0.5160)
+ --cycle
+ ( 0.6832, 0.4635)
+ .. controls ( 0.6577, 0.4592) and ( 0.6354, 0.4224) .. ( 0.6277, 0.3866)
+ -- ( 0.6618, 0.3781)
+ .. controls ( 0.6758, 0.4215) and ( 0.6897, 0.4164) .. ( 0.7299, 0.4293)
+ .. controls ( 0.7150, 0.4573) and ( 0.6984, 0.4662) .. ( 0.6832, 0.4635)
+ --cycle
+ ( 0.3846, 0.4569)
+ .. controls ( 0.3643, 0.4547) and ( 0.3427, 0.4484) .. ( 0.3206, 0.4379)
+ .. controls ( 0.2993, 0.4278) and ( 0.2743, 0.4198) .. ( 0.2665, 0.3948)
+ .. controls ( 0.2602, 0.3747) and ( 0.2710, 0.3497) .. ( 0.2940, 0.3491)
+ .. controls ( 0.3208, 0.3484) and ( 0.3628, 0.4037) .. ( 0.4059, 0.3999)
+ .. controls ( 0.4648, 0.3948) and ( 0.4817, 0.3238) .. ( 0.5508, 0.3184)
+ -- ( 0.5594, 0.2842)
+ .. controls ( 0.6325, 0.3301) and ( 0.6184, 0.4000) .. ( 0.5253, 0.3610)
+ .. controls ( 0.4966, 0.4310) and ( 0.4457, 0.4630) .. ( 0.3846, 0.4569)
+ --cycle
+ ( 0.0020, 0.4093)
+ .. controls (-0.0096, 0.4099) and (-0.0218, 0.4039) .. (-0.0547, 0.3920)
+ .. controls (-0.0742, 0.3851) and (-0.1009, 0.3815) .. (-0.1085, 0.3591)
+ .. controls (-0.1143, 0.3413) and (-0.1036, 0.3179) .. (-0.0973, 0.3014)
+ .. controls (-0.1114, 0.2946) and (-0.1334, 0.2825) .. (-0.1485, 0.2820)
+ .. controls (-0.1767, 0.2809) and (-0.1949, 0.3055) .. (-0.2182, 0.3110)
+ .. controls (-0.2417, 0.3165) and (-0.3307, 0.2833) .. (-0.3437, 0.2635)
+ .. controls (-0.3530, 0.2471) and (-0.3474, 0.2253) .. (-0.3437, 0.2075)
+ .. controls (-0.4324, 0.1756) and (-0.3706, 0.0831) .. (-0.2765, 0.0710)
+ .. controls (-0.2795, 0.0550) and (-0.2801, 0.0364) .. (-0.2860, 0.0213)
+ .. controls (-0.2997,-0.0142) and (-0.3382,-0.0416) .. (-0.2680,-0.0825)
+ -- (-0.2424, 0.0027)
+ -- (-0.1997,-0.0143)
+ .. controls (-0.1918, 0.0295) and (-0.2082, 0.0371) .. (-0.1741, 0.0710)
+ .. controls (-0.1600, 0.0270) and (-0.1316, 0.0212) .. (-0.1230, 0.0710)
+ -- (-0.0547, 0.0710)
+ -- (-0.0547, 0.0198)
+ .. controls (-0.0089, 0.0346) and (-0.0127, 0.0528) .. (-0.0121, 0.0966)
+ .. controls ( 0.0434, 0.0981) and ( 0.0809, 0.1179) .. ( 0.0988, 0.1733)
+ -- ( 0.0561, 0.1477)
+ -- ( 0.0647, 0.1477)
+ -- ( 0.0647, 0.1392)
+ -- ( 0.0561, 0.1477)
+ -- (-0.0333, 0.1681)
+ -- (-0.0973, 0.1990)
+ .. controls (-0.1035, 0.1519) and (-0.0915, 0.1406) .. (-0.0462, 0.1307)
+ -- (-0.0547, 0.1051)
+ .. controls (-0.0809, 0.1134) and (-0.1575, 0.1376) .. (-0.1816, 0.1275)
+ .. controls (-0.1979, 0.1207) and (-0.2008, 0.1105) .. (-0.2082, 0.0966)
+ -- (-0.2765, 0.0796)
+ .. controls (-0.2913, 0.1042) and (-0.2904, 0.1037) .. (-0.3191, 0.1051)
+ -- (-0.3277, 0.1307)
+ -- (-0.3020, 0.1392)
+ -- (-0.3191, 0.1733)
+ -- (-0.2680, 0.2416)
+ .. controls (-0.2555, 0.2025) and (-0.2434, 0.1999) .. (-0.2082, 0.1819)
+ .. controls (-0.2103, 0.2198) and (-0.2204, 0.2217) .. (-0.2509, 0.2416)
+ -- (-0.1571, 0.2416)
+ -- (-0.0973, 0.1990)
+ .. controls (-0.0622, 0.2159) and (-0.0506, 0.2107) .. (-0.0376, 0.2501)
+ -- (-0.0718, 0.2672)
+ -- (-0.0121, 0.2842)
+ -- (-0.0121, 0.3014)
+ -- (-0.0462, 0.3184)
+ -- ( 0.0221, 0.3439)
+ .. controls ( 0.0070, 0.2950) and ( 0.0355, 0.2771) .. ( 0.0818, 0.2757)
+ -- ( 0.0561, 0.3354)
+ .. controls ( 0.1139, 0.3092) and ( 0.1160, 0.3517) .. ( 0.0949, 0.3683)
+ -- ( 0.0561, 0.3859)
+ .. controls ( 0.0248, 0.4010) and ( 0.0136, 0.4085) .. ( 0.0020, 0.4093)
+ --cycle
+ (-0.2680,-0.0825)
+ .. controls (-0.2752,-0.1245) and (-0.2656,-0.1332) .. (-0.2253,-0.1423)
+ .. controls (-0.2780,-0.1694) and (-0.3487,-0.1517) .. (-0.3277,-0.2360)
+ -- (-0.3958,-0.2275)
+ .. controls (-0.3850,-0.1662) and (-0.4133,-0.1372) .. (-0.4727,-0.1337)
+ -- (-0.4727,-0.0910)
+ .. controls (-0.5590,-0.0763) and (-0.5042,-0.0134) .. (-0.5750,-0.0228)
+ .. controls (-0.5589,-0.0849) and (-0.5477,-0.0819) .. (-0.5750,-0.1423)
+ .. controls (-0.6476,-0.1314) and (-0.6815,-0.1792) .. (-0.6262,-0.2360)
+ .. controls (-0.6614,-0.2507) and (-0.6863,-0.2704) .. (-0.6674,-0.3120)
+ .. controls (-0.6596,-0.3292) and (-0.6399,-0.3442) .. (-0.6461,-0.3629)
+ .. controls (-0.6528,-0.3836) and (-0.7224,-0.4151) .. (-0.6960,-0.4711)
+ .. controls (-0.6692,-0.5273) and (-0.5938,-0.5008) .. (-0.6603,-0.4579)
+ -- (-0.6262,-0.4237)
+ -- (-0.5921,-0.4579)
+ .. controls (-0.5645,-0.3552) and (-0.5902,-0.3724) .. (-0.6177,-0.2872)
+ -- (-0.5750,-0.2531)
+ -- (-0.6177,-0.2446)
+ -- (-0.6006,-0.2190)
+ .. controls (-0.5707,-0.2398) and (-0.5626,-0.2347) .. (-0.5494,-0.2019)
+ -- (-0.5836,-0.1848)
+ -- (-0.5153,-0.1592)
+ .. controls (-0.5297,-0.1903) and (-0.5326,-0.1983) .. (-0.4983,-0.2105)
+ -- (-0.4983,-0.1763)
+ .. controls (-0.4268,-0.1951) and (-0.4189,-0.2337) .. (-0.3789,-0.2872)
+ .. controls (-0.4036,-0.3020) and (-0.4028,-0.3012) .. (-0.4044,-0.3299)
+ -- (-0.3362,-0.3299)
+ .. controls (-0.3465,-0.3786) and (-0.3284,-0.3796) .. (-0.2850,-0.3811)
+ -- (-0.2850,-0.4151)
+ .. controls (-0.2401,-0.4035) and (-0.1731,-0.3767) .. (-0.1571,-0.3299)
+ .. controls (-0.1233,-0.3324) and (-0.1022,-0.3221) .. (-0.1230,-0.2872)
+ -- (-0.1143,-0.2360)
+ -- (-0.1741,-0.2531)
+ -- (-0.1741,-0.2701)
+ -- (-0.1485,-0.2787)
+ -- (-0.1571,-0.3214)
+ -- (-0.2765,-0.3640)
+ .. controls (-0.2785,-0.3286) and (-0.2853,-0.3271) .. (-0.3191,-0.3214)
+ -- (-0.3191,-0.3299)
+ -- (-0.3277,-0.3214)
+ -- (-0.3191,-0.3214)
+ .. controls (-0.3191,-0.3214) and (-0.2922,-0.3221) .. (-0.2850,-0.3128)
+ .. controls (-0.2781,-0.3038) and (-0.2850,-0.2787) .. (-0.2850,-0.2787)
+ .. controls (-0.2850,-0.2462) and (-0.2522,-0.2669) .. (-0.2424,-0.2360)
+ -- (-0.2935,-0.2360)
+ -- (-0.2509,-0.2019)
+ -- (-0.2424,-0.2360)
+ .. controls (-0.1852,-0.2624) and (-0.2046,-0.2259) .. (-0.1740,-0.2170)
+ .. controls (-0.1599,-0.2119) and (-0.1427,-0.2266) .. (-0.1281,-0.2170)
+ .. controls (-0.1166,-0.2109) and (-0.1070,-0.1747) .. (-0.1656,-0.1848)
+ -- (-0.2082,-0.0228)
+ -- (-0.2253,-0.0228)
+ .. controls (-0.2307,-0.0463) and (-0.2347,-0.0485) .. (-0.2167,-0.0654)
+ -- (-0.2253,-0.0910)
+ --cycle
+ ( 0.7385, 0.3781)
+ .. controls ( 0.7464, 0.3334) and ( 0.7712, 0.3235) .. ( 0.7897, 0.3696)
+ --cycle
+ ( 0.3825, 0.3684)
+ .. controls ( 0.3722, 0.3709) and ( 0.3598, 0.3638) .. ( 0.3547, 0.3341)
+ -- ( 0.3712, 0.3341)
+ .. controls ( 0.4107, 0.3328) and ( 0.3998, 0.3641) .. ( 0.3825, 0.3684)
+ --cycle
+ ( 0.3547, 0.3341)
+ -- ( 0.3034, 0.3280)
+ .. controls ( 0.2587, 0.3223) and ( 0.2449, 0.3331) .. ( 0.2267, 0.2842)
+ -- ( 0.1515, 0.2970)
+ .. controls ( 0.1395, 0.3001) and ( 0.1217, 0.3113) .. ( 0.1096, 0.3062)
+ .. controls ( 0.0947, 0.3000) and ( 0.0955, 0.2804) .. ( 0.0944, 0.2671)
+ .. controls ( 0.0897, 0.2118) and ( 0.0889, 0.2059) .. ( 0.1158, 0.1563)
+ -- ( 0.1331, 0.1563)
+ -- ( 0.1415, 0.1648)
+ -- ( 0.1415, 0.2501)
+ -- ( 0.2449, 0.2446)
+ .. controls ( 0.2870, 0.2248) and ( 0.2549, 0.1801) .. ( 0.3376, 0.1733)
+ -- ( 0.3376, 0.2245)
+ -- ( 0.3889, 0.2075)
+ .. controls ( 0.3692, 0.2680) and ( 0.3319, 0.2493) .. ( 0.3034, 0.2928)
+ .. controls ( 0.3440, 0.2858) and ( 0.3561, 0.2934) .. ( 0.3547, 0.3341)
+ --cycle
+ ( 0.4285, 0.3341)
+ .. controls ( 0.4111, 0.3048) and ( 0.4418, 0.2997) .. ( 0.4508, 0.3082)
+ .. controls ( 0.4603, 0.3170) and ( 0.4582, 0.3376) .. ( 0.4285, 0.3341)
+ --cycle
+ ( 0.7199, 0.3309)
+ .. controls ( 0.7120, 0.3311) and ( 0.7041, 0.3301) .. ( 0.6963, 0.3276)
+ .. controls ( 0.6516, 0.3141) and ( 0.5998, 0.2127) .. ( 0.6788, 0.2075)
+ -- ( 0.6874, 0.1819)
+ .. controls ( 0.6908, 0.1882) and ( 0.6948, 0.1871) .. ( 0.6958, 0.2009)
+ .. controls ( 0.6967, 0.2152) and ( 0.6850, 0.2341) .. ( 0.6875, 0.2482)
+ .. controls ( 0.6912, 0.2697) and ( 0.7185, 0.2790) .. ( 0.7404, 0.2558)
+ -- ( 0.7556, 0.2330)
+ .. controls ( 0.8209, 0.2699) and ( 0.7743, 0.3292) .. ( 0.7199, 0.3309)
+ --cycle
+ (-0.4641, 0.3269)
+ -- (-0.4556, 0.2928)
+ -- (-0.4386, 0.2928)
+ -- (-0.4300, 0.3269)
+ --cycle
+ (-0.3532, 0.3269)
+ .. controls (-0.3838, 0.3252) and (-0.3857, 0.3233) .. (-0.3874, 0.2928)
+ .. controls (-0.3613, 0.3019) and (-0.3623, 0.3007) .. (-0.3532, 0.3269)
+ --cycle
+ (-0.7723, 0.3114)
+ .. controls (-0.9303, 0.2491) and (-0.8236, 0.1766) .. (-0.9066, 0.1318)
+ .. controls (-0.9222, 0.1231) and (-0.9315, 0.1156) .. (-0.9385, 0.1084)
+ -- (-0.9505, 0.0875)
+ .. controls (-0.9537, 0.0757) and (-0.9542, 0.0621) .. (-0.9542, 0.0410)
+ -- (-0.9333, 0.0454)
+ .. controls (-0.9116, 0.1020) and (-0.8383, 0.0970) .. (-0.8943, 0.1349)
+ .. controls (-0.8577, 0.1472) and (-0.8473, 0.1249) .. (-0.8748, 0.1652)
+ -- (-0.8414, 0.1559)
+ .. controls (-0.8055, 0.1614) and (-0.8119, 0.2075) .. (-0.8279, 0.2170)
+ .. controls (-0.8020, 0.2197) and (-0.8300, 0.2698) .. (-0.8062, 0.2572)
+ .. controls (-0.7862, 0.2467) and (-0.7713, 0.2258) .. (-0.7547, 0.2261)
+ .. controls (-0.7211, 0.2267) and (-0.7384, 0.2895) .. (-0.7723, 0.3114)
+ --cycle
+ ( 0.5167, 0.2928)
+ -- ( 0.5083, 0.2842)
+ -- ( 0.5083, 0.2672)
+ -- ( 0.5167, 0.2587)
+ -- ( 0.5338, 0.2587)
+ -- ( 0.5423, 0.2672)
+ -- ( 0.5423, 0.2842)
+ -- ( 0.5338, 0.2928)
+ --cycle
+ ( 0.8233, 0.2914)
+ .. controls ( 0.8159, 0.2897) and ( 0.8101, 0.2823) .. ( 0.8101, 0.2664)
+ .. controls ( 0.8101, 0.2592) and ( 0.7901, 0.2245) .. ( 0.7943, 0.2184)
+ .. controls ( 0.8010, 0.2085) and ( 0.8177, 0.1916) .. ( 0.8341, 0.1843)
+ -- ( 0.7897, 0.1051)
+ .. controls ( 0.7638, 0.1109) and ( 0.6977, 0.1143) .. ( 0.6790, 0.0913)
+ .. controls ( 0.6678, 0.0772) and ( 0.6727, 0.0528) .. ( 0.6644, 0.0283)
+ .. controls ( 0.6511,-0.0104) and ( 0.6263,-0.0275) .. ( 0.5936,-0.0484)
+ .. controls ( 0.5977,-0.0521) and ( 0.6009,-0.0593) .. ( 0.6125,-0.0633)
+ .. controls ( 0.6432,-0.0738) and ( 0.6954,-0.0310) .. ( 0.7067,-0.0043)
+ .. controls ( 0.7123, 0.0088) and ( 0.7121, 0.0229) .. ( 0.7130, 0.0368)
+ .. controls ( 0.7585, 0.0333) and ( 0.7707, 0.0484) .. ( 0.7897, 0.0881)
+ -- ( 0.8409, 0.0027)
+ .. controls ( 0.7828,-0.0157) and ( 0.7583,-0.0941) .. ( 0.8409,-0.1337)
+ .. controls ( 0.8561,-0.0647) and ( 0.8176,-0.0742) .. ( 0.8836,-0.0143)
+ -- ( 0.9348,-0.0654)
+ .. controls ( 0.9443,-0.0311) and ( 0.9398,-0.0319) .. ( 0.9430,-0.0008)
+ .. controls ( 0.9475, 0.0433) and ( 0.9603, 0.0556) .. ( 0.8921, 0.0796)
+ -- ( 0.8836, 0.0710)
+ -- ( 0.8836, 0.0540)
+ -- ( 0.9006, 0.0198)
+ .. controls ( 0.8705, 0.0555) and ( 0.8589, 0.0671) .. ( 0.8494, 0.1137)
+ -- ( 0.8921, 0.0881)
+ .. controls ( 0.9100, 0.1275) and ( 0.9093, 0.1211) .. ( 0.9077, 0.1641)
+ .. controls ( 0.8502, 0.2199) and ( 0.8502, 0.2055) .. ( 0.8245, 0.2294)
+ .. controls ( 0.8511, 0.2387) and ( 0.8571, 0.2533) .. ( 0.8546, 0.2660)
+ -- ( 0.8445, 0.2834)
+ .. controls ( 0.8380, 0.2892) and ( 0.8301, 0.2928) .. ( 0.8233, 0.2914)
+ --cycle
+ (-0.6221, 0.2851)
+ .. controls (-0.6403, 0.2814) and (-0.6578, 0.2533) .. (-0.6578, 0.2330)
+ .. controls (-0.6578, 0.2083) and (-0.6228, 0.1685) .. (-0.6090, 0.1392)
+ .. controls (-0.6712, 0.1174) and (-0.6013, 0.0486) .. (-0.5914, 0.0454)
+ .. controls (-0.5625, 0.0361) and (-0.5594, 0.0690) .. (-0.5384, 0.0751)
+ .. controls (-0.5161, 0.0820) and (-0.5142, 0.0619) .. (-0.4641, 0.0796)
+ .. controls (-0.4838, 0.1372) and (-0.5135, 0.1504) .. (-0.5665, 0.1733)
+ -- (-0.5323, 0.2075)
+ -- (-0.5665, 0.2160)
+ -- (-0.5665, 0.1819)
+ -- (-0.5921, 0.2245)
+ -- (-0.6006, 0.2330)
+ -- (-0.6090, 0.2416)
+ -- (-0.6006, 0.2416)
+ -- (-0.6006, 0.2330)
+ -- (-0.5921, 0.2330)
+ -- (-0.5921, 0.2245)
+ .. controls (-0.5591, 0.2361) and (-0.5513, 0.2585) .. (-0.5921, 0.2587)
+ .. controls (-0.5999, 0.2809) and (-0.6112, 0.2874) .. (-0.6221, 0.2851)
+ --cycle
+ (-0.4001, 0.2659)
+ -- (-0.4398, 0.2231)
+ -- (-0.4713, 0.1989)
+ .. controls (-0.5030, 0.1708) and (-0.4873, 0.1496) .. (-0.4486, 0.1607)
+ .. controls (-0.4215, 0.1683) and (-0.3832, 0.1951) .. (-0.3704, 0.2199)
+ .. controls (-0.3565, 0.2464) and (-0.3702, 0.2690) .. (-0.4001, 0.2659)
+ --cycle
+ ( 0.5167, 0.2501)
+ .. controls ( 0.4726, 0.2275) and ( 0.4751, 0.2109) .. ( 0.4771, 0.1648)
+ .. controls ( 0.4776, 0.1495) and ( 0.4771, 0.1247) .. ( 0.4946, 0.1178)
+ .. controls ( 0.5149, 0.1096) and ( 0.5288, 0.1359) .. ( 0.5681, 0.1435)
+ .. controls ( 0.6164, 0.1530) and ( 0.6391, 0.1274) .. ( 0.6568, 0.1214)
+ .. controls ( 0.6669, 0.1180) and ( 0.6795, 0.1163) .. ( 0.6862, 0.1272)
+ .. controls ( 0.7003, 0.1512) and ( 0.6673, 0.1556) .. ( 0.6532, 0.1563)
+ .. controls ( 0.6261, 0.2314) and ( 0.5966, 0.1859) .. ( 0.5605, 0.1960)
+ .. controls ( 0.5390, 0.2022) and ( 0.5268, 0.2319) .. ( 0.5167, 0.2501)
+ --cycle
+ (-0.0462, 0.2075)
+ -- (-0.0462, 0.1819)
+ -- (-0.0206, 0.1819)
+ -- (-0.0206, 0.2075)
+ --cycle
+ (-0.7371, 0.1990)
+ -- (-0.7371, 0.1563)
+ -- (-0.7115, 0.1905)
+ -- (-0.7200, 0.1990)
+ --cycle
+ (-0.1656, 0.1905)
+ -- (-0.1400, 0.1648)
+ --cycle
+ (-0.7797, 0.1819)
+ -- (-0.7883, 0.1733)
+ -- (-0.7883, 0.1563)
+ -- (-0.7542, 0.1477)
+ -- (-0.7627, 0.1819)
+ --cycle
+ ( 0.1671, 0.1819)
+ -- ( 0.1841, 0.1477)
+ --cycle
+ ( 0.6447, 0.1477)
+ -- ( 0.6532, 0.1477)
+ -- ( 0.6532, 0.1392)
+ --cycle
+ (-0.7081, 0.1437)
+ .. controls (-0.7387, 0.1429) and (-0.7462, 0.1254) .. (-0.7593, 0.0844)
+ .. controls (-0.7628, 0.0670) and (-0.7720, 0.0499) .. (-0.7593, 0.0321)
+ .. controls (-0.7496, 0.0145) and (-0.7241, 0.0137) .. (-0.7173, 0.0321)
+ .. controls (-0.7114, 0.0479) and (-0.7222, 0.0657) .. (-0.7285, 0.0796)
+ .. controls (-0.6938, 0.0968) and (-0.6811, 0.1011) .. (-0.6688, 0.1392)
+ .. controls (-0.6852, 0.1425) and (-0.6979, 0.1439) .. (-0.7081, 0.1437)
+ --cycle
+ ( 0.8921, 0.1392)
+ -- ( 0.9006, 0.1392)
+ -- ( 0.9006, 0.1307)
+ --cycle
+ ( 0.5765, 0.1222)
+ -- ( 0.5850, 0.0881)
+ -- ( 0.6021, 0.0881)
+ -- ( 0.6106, 0.1222)
+ --cycle
+ ( 0.2872, 0.1175)
+ .. controls ( 0.2767, 0.1166) and ( 0.2651, 0.1135) .. ( 0.2533, 0.1071)
+ .. controls ( 0.2151, 0.0867) and ( 0.2220, 0.0479) .. ( 0.2267, 0.0113)
+ .. controls ( 0.2625, 0.0237) and ( 0.2504, 0.0254) .. ( 0.2701, 0.0519)
+ .. controls ( 0.2958, 0.0863) and ( 0.3249, 0.0559) .. ( 0.3338, 0.0822)
+ .. controls ( 0.3402, 0.1009) and ( 0.3185, 0.1198) .. ( 0.2872, 0.1175)
+ --cycle
+ ( 0.4845, 0.1051)
+ .. controls ( 0.4706, 0.1009) and ( 0.4616, 0.0995) .. ( 0.4512, 0.0905)
+ .. controls ( 0.4040, 0.0493) and ( 0.4796,-0.0172) .. ( 0.4845, 0.0710)
+ .. controls ( 0.4877, 0.0867) and ( 0.4856, 0.0907) .. ( 0.4845, 0.1051)
+ --cycle
+ ( 0.6362, 0.1051)
+ -- ( 0.6277, 0.0966)
+ -- ( 0.6277, 0.0796)
+ -- ( 0.6618, 0.0710)
+ -- ( 0.6532, 0.1051)
+ --cycle
+ ( 0.0988, 0.0966)
+ -- ( 0.0647, 0.0881)
+ -- ( 0.0647, 0.0710)
+ -- ( 0.0902, 0.0625)
+ .. controls ( 0.0813, 0.0194) and ( 0.0842, 0.0065) .. ( 0.1244,-0.0143)
+ -- ( 0.1331, 0.0283)
+ -- ( 0.1671, 0.0368)
+ -- ( 0.1671, 0.0540)
+ .. controls ( 0.1326, 0.0659) and ( 0.1186, 0.0637) .. ( 0.0988, 0.0966)
+ --cycle
+ (-0.8125, 0.0621)
+ .. controls (-0.8490, 0.0401) and (-0.8237, 0.0162) .. (-0.8062, 0.0190)
+ .. controls (-0.7883, 0.0219) and (-0.7704, 0.0544) .. (-0.8125, 0.0621)
+ --cycle
+ ( 0.5167, 0.0540)
+ -- ( 0.5083, 0.0198)
+ -- ( 0.5423, 0.0283)
+ -- ( 0.5423, 0.0454)
+ -- ( 0.5338, 0.0540)
+ --cycle
+ (-0.0973, 0.0454)
+ -- (-0.1058, 0.0368)
+ -- (-0.1058, 0.0198)
+ -- (-0.0718, 0.0113)
+ -- (-0.0802, 0.0454)
+ --cycle
+ (-0.0035, 0.0368)
+ -- (-0.0210, 0.0109)
+ .. controls (-0.0655,-0.0708) and ( 0.0385,-0.0566) .. ( 0.0166, 0.0109)
+ .. controls ( 0.0120, 0.0245) and ( 0.0056, 0.0275) .. (-0.0035, 0.0368)
+ --cycle
+ (-0.4977, 0.0207)
+ .. controls (-0.5147, 0.0204) and (-0.5312, 0.0080) .. (-0.5211,-0.0096)
+ .. controls (-0.5118,-0.0261) and (-0.4926,-0.0166) .. (-0.4645,-0.0487)
+ .. controls (-0.4440,-0.0720) and (-0.4524,-0.0706) .. (-0.4214,-0.0825)
+ .. controls (-0.4050,-0.0235) and (-0.4308, 0.0217) .. (-0.4977, 0.0207)
+ --cycle
+ ( 0.3756, 0.0075)
+ .. controls ( 0.3646, 0.0069) and ( 0.3522, 0.0045) .. ( 0.3376, 0.0002)
+ .. controls ( 0.3227,-0.0042) and ( 0.3054,-0.0075) .. ( 0.2946,-0.0193)
+ -- ( 0.2742,-0.0568)
+ .. controls ( 0.2649,-0.0745) and ( 0.2554,-0.0861) .. ( 0.2571,-0.1073)
+ .. controls ( 0.2601,-0.1471) and ( 0.2967,-0.2295) .. ( 0.3408,-0.1666)
+ .. controls ( 0.3653,-0.1317) and ( 0.3284,-0.1299) .. ( 0.3717,-0.0654)
+ .. controls ( 0.4033,-0.0789) and ( 0.4049,-0.0788) .. ( 0.4314,-0.0568)
+ .. controls ( 0.4664,-0.1165) and ( 0.5153,-0.0409) .. ( 0.5152,-0.0308)
+ .. controls ( 0.5148,-0.0111) and ( 0.4690, 0.0277) .. ( 0.4571,-0.0399)
+ .. controls ( 0.4280,-0.0054) and ( 0.4082, 0.0095) .. ( 0.3756, 0.0075)
+ --cycle
+ (-0.9801, 0.0047)
+ -- (-0.9427,-0.0792)
+ -- (-0.8931,-0.0669)
+ -- (-0.8538,-0.0818)
+ .. controls (-0.8464,-0.0219) and (-0.9339,-0.0180) .. (-0.9801, 0.0047)
+ --cycle
+ ( 0.5423,-0.0484)
+ -- ( 0.5594,-0.0997)
+ .. controls ( 0.5416,-0.1040) and ( 0.4986,-0.1096) .. ( 0.4864,-0.1181)
+ .. controls ( 0.4658,-0.1324) and ( 0.4601,-0.1677) .. ( 0.4793,-0.1854)
+ .. controls ( 0.4883,-0.1938) and ( 0.5053,-0.1981) .. ( 0.5167,-0.2019)
+ .. controls ( 0.4933,-0.2045) and ( 0.4609,-0.2005) .. ( 0.4427,-0.2156)
+ .. controls ( 0.4166,-0.2372) and ( 0.4089,-0.2872) .. ( 0.4826,-0.2957)
+ -- ( 0.4826,-0.2446)
+ .. controls ( 0.5217,-0.2597) and ( 0.5287,-0.2486) .. ( 0.5167,-0.2105)
+ .. controls ( 0.5424,-0.2023) and ( 0.5512,-0.1934) .. ( 0.5594,-0.1677)
+ -- ( 0.6191,-0.1848)
+ -- ( 0.6788,-0.3042)
+ -- ( 0.6532,-0.3128)
+ -- ( 0.6532,-0.3299)
+ -- ( 0.7385,-0.3214)
+ -- ( 0.7130,-0.2617)
+ .. controls ( 0.7337,-0.2558) and ( 0.7608,-0.2439) .. ( 0.7812,-0.2454)
+ .. controls ( 0.7973,-0.2453) and ( 0.8226,-0.2581) .. ( 0.8346,-0.2454)
+ .. controls ( 0.8523,-0.2285) and ( 0.8216,-0.2043) .. ( 0.8067,-0.1989)
+ .. controls ( 0.7691,-0.1854) and ( 0.7439,-0.2093) .. ( 0.6805,-0.1933)
+ -- ( 0.6805,-0.1448)
+ -- ( 0.6017,-0.0907)
+ -- ( 0.5680,-0.0907)
+ -- ( 0.5765,-0.0484)
+ --cycle
+ (-0.7372,-0.0610)
+ .. controls (-0.7812,-0.0612) and (-0.8222,-0.0885) .. (-0.7969,-0.1508)
+ -- (-0.8546,-0.1518)
+ .. controls (-0.8578,-0.0809) and (-0.9199,-0.0961) .. (-0.9322,-0.1220)
+ -- (-0.9145,-0.1528)
+ .. controls (-0.9119,-0.1539) and (-0.9110,-0.1554) .. (-0.9080,-0.1566)
+ .. controls (-0.8746,-0.1628) and (-0.8911,-0.2081) .. (-0.8709,-0.2184)
+ .. controls (-0.8479,-0.2301) and (-0.8289,-0.2160) .. (-0.8075,-0.2238)
+ .. controls (-0.7880,-0.2309) and (-0.7418,-0.2959) .. (-0.7285,-0.2190)
+ -- (-0.7712,-0.2105)
+ .. controls (-0.7608,-0.1935) and (-0.7474,-0.1633) .. (-0.7309,-0.1535)
+ .. controls (-0.7132,-0.1433) and (-0.6647,-0.1458) .. (-0.6532,-0.1225)
+ .. controls (-0.6410,-0.0974) and (-0.6763,-0.0776) .. (-0.6945,-0.0697)
+ .. controls (-0.7075,-0.0641) and (-0.7225,-0.0610) .. (-0.7372,-0.0610)
+ --cycle
+ ( 0.0790,-0.0703)
+ .. controls ( 0.0586,-0.0724) and ( 0.0391,-0.0799) .. ( 0.0314,-0.0938)
+ .. controls ( 0.0258,-0.1059) and ( 0.0293,-0.1207) .. ( 0.0314,-0.1337)
+ .. controls (-0.0051,-0.1451) and (-0.0235,-0.1672) .. ( 0.0136,-0.1933)
+ -- ( 0.0050,-0.2190)
+ -- ( 0.0647,-0.2360)
+ -- ( 0.0561,-0.2019)
+ -- ( 0.0391,-0.2105)
+ -- ( 0.0307,-0.2019)
+ -- ( 0.0818,-0.1251)
+ -- ( 0.0988,-0.1251)
+ .. controls ( 0.1190,-0.1566) and ( 0.1311,-0.1660) .. ( 0.1671,-0.1763)
+ .. controls ( 0.1712,-0.1381) and ( 0.1680,-0.1029) .. ( 0.1325,-0.0792)
+ .. controls ( 0.1208,-0.0715) and ( 0.0994,-0.0682) .. ( 0.0790,-0.0703)
+ --cycle
+ (-0.0347,-0.0729)
+ .. controls (-0.0400,-0.0723) and (-0.0465,-0.0725) .. (-0.0547,-0.0739)
+ .. controls (-0.1154,-0.1097) and (-0.0914,-0.1419) .. (-0.0629,-0.1331)
+ .. controls (-0.0318,-0.1235) and ( 0.0014,-0.0769) .. (-0.0347,-0.0729)
+ --cycle
+ (-0.1485,-0.0997)
+ -- (-0.1656,-0.1166)
+ -- (-0.1656,-0.1251)
+ .. controls (-0.1656,-0.1251) and (-0.1284,-0.1383) .. (-0.1230,-0.1251)
+ .. controls (-0.1184,-0.1140) and (-0.1485,-0.0997) .. (-0.1485,-0.0997)
+ --cycle
+ ( 0.8579,-0.1251)
+ -- ( 0.8579,-0.1508)
+ -- ( 0.8921,-0.1508)
+ -- ( 0.8921,-0.1251)
+ --cycle
+ ( 0.3462,-0.1848)
+ .. controls ( 0.3553,-0.2111) and ( 0.3541,-0.2099) .. ( 0.3804,-0.2190)
+ .. controls ( 0.3789,-0.1929) and ( 0.3722,-0.1863) .. ( 0.3462,-0.1848)
+ --cycle
+ ( 0.5680,-0.2105)
+ -- ( 0.5680,-0.2360)
+ -- ( 0.5936,-0.2360)
+ -- ( 0.5936,-0.2105)
+ --cycle
+ ( 0.2429,-0.2175)
+ .. controls ( 0.2301,-0.2183) and ( 0.2146,-0.2250) .. ( 0.2042,-0.2351)
+ .. controls ( 0.1851,-0.2515) and ( 0.1867,-0.2802) .. ( 0.1841,-0.3042)
+ -- ( 0.2267,-0.3128)
+ .. controls ( 0.2366,-0.2535) and ( 0.2673,-0.2625) .. ( 0.2665,-0.2351)
+ .. controls ( 0.2661,-0.2218) and ( 0.2558,-0.2167) .. ( 0.2429,-0.2175)
+ --cycle
+ (-0.8394,-0.2360)
+ .. controls (-0.8657,-0.2452) and (-0.8037,-0.2814) .. (-0.8128,-0.3076)
+ .. controls (-0.7841,-0.3060) and (-0.8155,-0.2595) .. (-0.8394,-0.2360)
+ --cycle
+ (-0.3106,-0.2446)
+ .. controls (-0.3061,-0.2411) and (-0.2935,-0.2446) .. (-0.2935,-0.2446)
+ .. controls (-0.2935,-0.2446) and (-0.3063,-0.2847) .. (-0.3191,-0.2787)
+ .. controls (-0.3297,-0.2736) and (-0.3199,-0.2518) .. (-0.3106,-0.2446)
+ --cycle
+ ( 0.0809,-0.2495)
+ .. controls ( 0.0629,-0.2468) and ( 0.0475,-0.2563) .. ( 0.0307,-0.2602)
+ .. controls ( 0.0102,-0.2651) and (-0.0913,-0.2616) .. (-0.0376,-0.3640)
+ .. controls (-0.1141,-0.3685) and (-0.1262,-0.4016) .. (-0.0926,-0.4664)
+ .. controls (-0.0856,-0.4795) and (-0.0758,-0.5040) .. (-0.0668,-0.5138)
+ .. controls (-0.0449,-0.5377) and ( 0.0001,-0.5440) .. ( 0.0307,-0.5431)
+ -- ( 0.0221,-0.4579)
+ -- (-0.0206,-0.4833)
+ .. controls (-0.0180,-0.4388) and (-0.0055,-0.4140) .. (-0.0633,-0.4237)
+ .. controls (-0.0215,-0.3935) and (-0.0083,-0.4022) .. ( 0.0050,-0.3640)
+ -- ( 0.0476,-0.3555)
+ -- ( 0.0476,-0.3384)
+ .. controls ( 0.0149,-0.3341) and ( 0.0150,-0.3375) .. (-0.0035,-0.3640)
+ .. controls (-0.0031,-0.3175) and ( 0.0507,-0.3021) .. ( 0.0895,-0.3132)
+ .. controls ( 0.0967,-0.3153) and ( 0.1020,-0.3182) .. ( 0.1069,-0.3214)
+ -- ( 0.0733,-0.3214)
+ -- ( 0.0733,-0.3555)
+ -- ( 0.1073,-0.3555)
+ -- ( 0.1073,-0.3217)
+ .. controls ( 0.1209,-0.3306) and ( 0.1314,-0.3431) .. ( 0.1671,-0.3555)
+ .. controls ( 0.1861,-0.3011) and ( 0.1658,-0.3044) .. ( 0.1276,-0.2793)
+ .. controls ( 0.1121,-0.2692) and ( 0.1003,-0.2524) .. ( 0.0809,-0.2495)
+ --cycle
+ ( 0.5253,-0.2617)
+ .. controls ( 0.5159,-0.2894) and ( 0.5137,-0.2935) .. ( 0.5423,-0.3042)
+ --cycle
+ (-0.5836,-0.2872)
+ -- (-0.5921,-0.3299)
+ .. controls (-0.5632,-0.3196) and (-0.5624,-0.3175) .. (-0.5665,-0.2872)
+ --cycle
+ ( 0.4825,-0.3113)
+ .. controls ( 0.4709,-0.3098) and ( 0.4621,-0.3187) .. ( 0.4571,-0.3470)
+ .. controls ( 0.4065,-0.2945) and ( 0.3565,-0.3080) .. ( 0.3141,-0.3613)
+ .. controls ( 0.3029,-0.3754) and ( 0.2880,-0.3874) .. ( 0.2903,-0.4075)
+ .. controls ( 0.2921,-0.4247) and ( 0.3027,-0.4361) .. ( 0.3120,-0.4493)
+ .. controls ( 0.2945,-0.4516) and ( 0.2350,-0.4574) .. ( 0.2234,-0.4665)
+ .. controls ( 0.2011,-0.4843) and ( 0.2099,-0.5378) .. ( 0.2182,-0.5602)
+ -- ( 0.2352,-0.5602)
+ .. controls ( 0.2421,-0.5417) and ( 0.2492,-0.5116) .. ( 0.2706,-0.5071)
+ .. controls ( 0.3048,-0.4961) and ( 0.3439,-0.5674) .. ( 0.3618,-0.5071)
+ -- ( 0.3618,-0.4833)
+ -- ( 0.3974,-0.4919)
+ -- ( 0.4059,-0.4579)
+ -- ( 0.3376,-0.4493)
+ -- ( 0.3717,-0.3896)
+ .. controls ( 0.4306,-0.3991) and ( 0.4623,-0.4570) .. ( 0.4656,-0.3640)
+ .. controls ( 0.4971,-0.3707) and ( 0.5062,-0.3751) .. ( 0.5253,-0.3470)
+ -- ( 0.5451,-0.3694)
+ .. controls ( 0.6171,-0.4271) and ( 0.5795,-0.2610) .. ( 0.5253,-0.3384)
+ .. controls ( 0.5089,-0.3248) and ( 0.4943,-0.3128) .. ( 0.4825,-0.3113)
+ --cycle
+ ( 0.6371,-0.3426)
+ .. controls ( 0.6165,-0.3414) and ( 0.6075,-0.3499) .. ( 0.6021,-0.3811)
+ .. controls ( 0.6375,-0.3781) and ( 0.6440,-0.3786) .. ( 0.6618,-0.3470)
+ .. controls ( 0.6521,-0.3447) and ( 0.6439,-0.3431) .. ( 0.6371,-0.3426)
+ --cycle
+ ( 0.1158,-0.3640)
+ -- ( 0.1073,-0.3981)
+ -- ( 0.1415,-0.3981)
+ -- ( 0.1331,-0.3640)
+ --cycle
+ (-0.4660,-0.3701)
+ .. controls (-0.4757,-0.3670) and (-0.4894,-0.3727) .. (-0.4983,-0.3981)
+ -- (-0.5580,-0.3811)
+ .. controls (-0.5508,-0.4276) and (-0.5277,-0.4685) .. (-0.4812,-0.4833)
+ -- (-0.4898,-0.4066)
+ .. controls (-0.4444,-0.4042) and (-0.4498,-0.3750) .. (-0.4660,-0.3701)
+ --cycle
+ ( 0.1671,-0.3724)
+ -- ( 0.1585,-0.3811)
+ -- ( 0.1671,-0.4407)
+ -- ( 0.1927,-0.4322)
+ -- ( 0.1927,-0.3811)
+ -- ( 0.1841,-0.3724)
+ --cycle
+ (-0.4061,-0.3746)
+ .. controls (-0.4337,-0.3682) and (-0.4432,-0.4275) .. (-0.3933,-0.4421)
+ .. controls (-0.3807,-0.4474) and (-0.3733,-0.4433) .. (-0.3617,-0.4421)
+ .. controls (-0.3654,-0.4287) and (-0.3677,-0.4184) .. (-0.3740,-0.4070)
+ .. controls (-0.3858,-0.3861) and (-0.3969,-0.3767) .. (-0.4061,-0.3746)
+ --cycle
+ (-0.2091,-0.4066)
+ -- (-0.2091,-0.4298)
+ -- (-0.1315,-0.5004)
+ .. controls (-0.1221,-0.4446) and (-0.1606,-0.4228) .. (-0.2091,-0.4066)
+ --cycle
+ ( 0.6634,-0.4202)
+ .. controls ( 0.6063,-0.4164) and ( 0.5403,-0.4628) .. ( 0.5936,-0.5175)
+ .. controls ( 0.5533,-0.5676) and ( 0.6039,-0.5913) .. ( 0.6362,-0.5261)
+ -- ( 0.6021,-0.5175)
+ -- ( 0.6618,-0.5004)
+ -- ( 0.6874,-0.5261)
+ -- ( 0.6532,-0.4749)
+ -- ( 0.6618,-0.4664)
+ .. controls ( 0.6767,-0.4763) and ( 0.6924,-0.4939) .. ( 0.7031,-0.4938)
+ .. controls ( 0.7482,-0.4516) and ( 0.7588,-0.4217) .. ( 0.6869,-0.4249)
+ .. controls ( 0.6795,-0.4222) and ( 0.6716,-0.4207) .. ( 0.6634,-0.4202)
+ --cycle
+ (-0.2595,-0.4322)
+ -- (-0.2680,-0.4407)
+ -- (-0.2680,-0.4579)
+ -- (-0.2595,-0.4664)
+ -- (-0.2424,-0.4664)
+ -- (-0.2338,-0.4579)
+ -- (-0.2338,-0.4407)
+ -- (-0.2424,-0.4322)
+ --cycle
+ (-0.3947,-0.4820)
+ .. controls (-0.4064,-0.4819) and (-0.4202,-0.4884) .. (-0.4300,-0.4906)
+ .. controls (-0.4705,-0.5000) and (-0.4926,-0.4888) .. (-0.4812,-0.5431)
+ .. controls (-0.4962,-0.5405) and (-0.5172,-0.5356) .. (-0.5319,-0.5380)
+ .. controls (-0.5497,-0.5409) and (-0.6218,-0.5786) .. (-0.6276,-0.5954)
+ .. controls (-0.6443,-0.6458) and (-0.5896,-0.6294) .. (-0.5665,-0.6198)
+ -- (-0.5750,-0.6455)
+ -- (-0.5409,-0.6540)
+ -- (-0.5409,-0.6198)
+ -- (-0.4727,-0.5943)
+ -- (-0.4812,-0.6370)
+ -- (-0.4641,-0.6028)
+ -- (-0.4214,-0.6796)
+ -- (-0.4044,-0.6796)
+ .. controls (-0.3922,-0.6110) and (-0.4199,-0.5974) .. (-0.4386,-0.5431)
+ -- (-0.4053,-0.5384)
+ .. controls (-0.3682,-0.5271) and (-0.3698,-0.4934) .. (-0.3840,-0.4848)
+ .. controls (-0.3872,-0.4829) and (-0.3908,-0.4821) .. (-0.3947,-0.4820)
+ --cycle
+ (-0.2509,-0.4833)
+ .. controls (-0.2897,-0.5056) and (-0.2886,-0.5289) .. (-0.2509,-0.5516)
+ -- (-0.2509,-0.5688)
+ .. controls (-0.3046,-0.5780) and (-0.3807,-0.5721) .. (-0.3362,-0.6796)
+ .. controls (-0.3905,-0.7060) and (-0.4127,-0.7567) .. (-0.3447,-0.7820)
+ -- (-0.3305,-0.8084)
+ .. controls (-0.3952,-0.8150) and (-0.4330,-0.7851) .. (-0.3796,-0.8551)
+ .. controls (-0.3707,-0.8560) and (-0.2665,-0.8846) .. (-0.3191,-0.8587)
+ .. controls (-0.2670,-0.8376) and (-0.2955,-0.8083) .. (-0.3191,-0.7735)
+ .. controls (-0.2852,-0.7626) and (-0.2805,-0.7579) .. (-0.2850,-0.7222)
+ -- (-0.3277,-0.7393)
+ -- (-0.3277,-0.6796)
+ .. controls (-0.2965,-0.6680) and (-0.3000,-0.6597) .. (-0.3020,-0.6285)
+ .. controls (-0.2349,-0.6402) and (-0.2059,-0.6119) .. (-0.1513,-0.6666)
+ .. controls (-0.1144,-0.7033) and (-0.1214,-0.7764) .. (-0.0716,-0.7828)
+ .. controls (-0.0398,-0.7870) and (-0.0581,-0.7438) .. (-0.0633,-0.7307)
+ .. controls (-0.0105,-0.7419) and (-0.0101,-0.7107) .. (-0.0259,-0.6944)
+ .. controls (-0.0416,-0.6781) and (-0.0638,-0.6847) .. (-0.0920,-0.6613)
+ .. controls (-0.1363,-0.6245) and (-0.1312,-0.5893) .. (-0.2253,-0.5516)
+ --cycle
+ ( 0.0893,-0.4928)
+ .. controls ( 0.0854,-0.4941) and ( 0.0816,-0.4977) .. ( 0.0781,-0.5045)
+ .. controls ( 0.0717,-0.5167) and ( 0.0733,-0.5538) .. ( 0.0733,-0.5688)
+ .. controls (-0.0068,-0.5661) and ( 0.0229,-0.6522) .. ( 0.0360,-0.6661)
+ .. controls ( 0.0456,-0.6761) and ( 0.0531,-0.6759) .. ( 0.0647,-0.6796)
+ -- ( 0.0647,-0.6198)
+ -- ( 0.1244,-0.6113)
+ -- ( 0.1073,-0.5773)
+ -- ( 0.1331,-0.5688)
+ .. controls ( 0.1502,-0.5983) and ( 0.1514,-0.6011) .. ( 0.1841,-0.6113)
+ .. controls ( 0.1815,-0.5647) and ( 0.1767,-0.5414) .. ( 0.1244,-0.5431)
+ -- ( 0.1174,-0.5185)
+ .. controls ( 0.1127,-0.5047) and ( 0.1008,-0.4886) .. ( 0.0893,-0.4928)
+ --cycle
+ ( 0.0647,-0.6796)
+ .. controls ( 0.0651,-0.7162) and ( 0.0755,-0.7152) .. ( 0.1073,-0.7052)
+ .. controls ( 0.0927,-0.6800) and ( 0.0939,-0.6798) .. ( 0.0647,-0.6796)
+ --cycle
+ ( 0.4429,-0.5307)
+ .. controls ( 0.4305,-0.5311) and ( 0.4171,-0.5380) .. ( 0.4059,-0.5558)
+ .. controls ( 0.3999,-0.5655) and ( 0.3989,-0.5750) .. ( 0.3994,-0.5861)
+ .. controls ( 0.3998,-0.5978) and ( 0.4033,-0.6088) .. ( 0.4059,-0.6198)
+ .. controls ( 0.4351,-0.6096) and ( 0.4347,-0.6075) .. ( 0.4400,-0.5773)
+ .. controls ( 0.5088,-0.5860) and ( 0.4802,-0.5296) .. ( 0.4429,-0.5307)
+ --cycle
+ ( 0.6296,-0.5636)
+ .. controls ( 0.6201,-0.5648) and ( 0.6129,-0.5872) .. ( 0.5850,-0.6007)
+ .. controls ( 0.5662,-0.6071) and ( 0.5466,-0.6101) .. ( 0.5358,-0.6303)
+ .. controls ( 0.5238,-0.6524) and ( 0.5014,-0.6717) .. ( 0.5092,-0.6929)
+ .. controls ( 0.4879,-0.7051) and ( 0.4594,-0.7105) .. ( 0.4574,-0.7383)
+ .. controls ( 0.4557,-0.7622) and ( 0.5198,-0.8058) .. ( 0.5459,-0.7885)
+ .. controls ( 0.5602,-0.7791) and ( 0.4924,-0.7612) .. ( 0.5176,-0.7262)
+ -- ( 0.5713,-0.7309)
+ .. controls ( 0.6461,-0.7123) and ( 0.5265,-0.6556) .. ( 0.6262,-0.6344)
+ .. controls ( 0.6303,-0.6340) and ( 0.6389,-0.6314) .. ( 0.6474,-0.6278)
+ -- ( 0.6629,-0.6006)
+ .. controls ( 0.6611,-0.5976) and ( 0.6583,-0.5944) .. ( 0.6541,-0.5908)
+ .. controls ( 0.6418,-0.5698) and ( 0.6353,-0.5628) .. ( 0.6296,-0.5636)
+ --cycle
+ ( 0.2723,-0.5991)
+ .. controls ( 0.2592,-0.6003) and ( 0.2468,-0.6028) .. ( 0.2363,-0.6064)
+ .. controls ( 0.1997,-0.6189) and ( 0.1915,-0.6622) .. ( 0.2438,-0.6796)
+ -- ( 0.2524,-0.6540)
+ -- ( 0.2694,-0.6540)
+ -- ( 0.2438,-0.6796)
+ -- ( 0.2352,-0.7052)
+ .. controls ( 0.1815,-0.6689) and ( 0.1445,-0.7418) .. ( 0.2182,-0.7649)
+ .. controls ( 0.2103,-0.7956) and ( 0.2084,-0.7983) .. ( 0.2267,-0.8246)
+ .. controls ( 0.1155,-0.7748) and ( 0.1095,-0.9097) .. ( 0.1942,-0.8505)
+ -- ( 0.2141,-0.8675)
+ .. controls ( 0.2535,-0.8323) and ( 0.2056,-0.8655) .. ( 0.2756,-0.8643)
+ -- ( 0.2903,-0.8720)
+ -- ( 0.3279,-0.8720)
+ -- ( 0.3427,-0.8612)
+ .. controls ( 0.3869,-0.8663) and ( 0.4661,-0.8748) .. ( 0.4741,-0.8502)
+ .. controls ( 0.5431,-0.8855) and ( 0.5233,-0.7888) .. ( 0.5039,-0.8143)
+ .. controls ( 0.4752,-0.7958) and ( 0.5046,-0.8131) .. ( 0.4741,-0.8331)
+ .. controls ( 0.3949,-0.7997) and ( 0.4522,-0.8406) .. ( 0.3683,-0.8327)
+ .. controls ( 0.3744,-0.7942) and ( 0.4288,-0.7829) .. ( 0.4051,-0.7307)
+ .. controls ( 0.4260,-0.7007) and ( 0.4185,-0.6946) .. ( 0.4051,-0.6626)
+ .. controls ( 0.3990,-0.6503) and ( 0.3940,-0.6359) .. ( 0.3839,-0.6265)
+ .. controls ( 0.3585,-0.6027) and ( 0.3119,-0.5953) .. ( 0.2723,-0.5991)
+ --cycle
+ (-0.2424,-0.6455)
+ -- (-0.2424,-0.6796)
+ -- (-0.1997,-0.6711)
+ -- (-0.1997,-0.6540)
+ --cycle
+ ( 0.2950,-0.6455)
+ .. controls ( 0.3615,-0.6477) and ( 0.3567,-0.6705) .. ( 0.3974,-0.7222)
+ .. controls ( 0.3592,-0.8249) and ( 0.3353,-0.7947) .. ( 0.2609,-0.7990)
+ -- ( 0.2438,-0.7649)
+ .. controls ( 0.2681,-0.7474) and ( 0.2638,-0.7424) .. ( 0.2609,-0.7137)
+ -- ( 0.2950,-0.6881)
+ .. controls ( 0.3035,-0.6916) and ( 0.3102,-0.6959) .. ( 0.3198,-0.6974)
+ .. controls ( 0.3496,-0.7020) and ( 0.3487,-0.6665) .. ( 0.3120,-0.6881)
+ --cycle
+ (-0.6122,-0.6460)
+ .. controls (-0.6202,-0.6484) and (-0.6222,-0.6534) .. (-0.6220,-0.6591)
+ -- (-0.6084,-0.6829)
+ .. controls (-0.6039,-0.6880) and (-0.6001,-0.6940) .. (-0.5958,-0.6974)
+ .. controls (-0.5822,-0.7078) and (-0.5979,-0.7175) .. (-0.5836,-0.7137)
+ -- (-0.5557,-0.7397)
+ .. controls (-0.5863,-0.7181) and (-0.4852,-0.7770) .. (-0.5233,-0.7812)
+ .. controls (-0.4643,-0.7650) and (-0.4542,-0.8172) .. (-0.4400,-0.7940)
+ .. controls (-0.4310,-0.7794) and (-0.4454,-0.7672) .. (-0.4569,-0.7609)
+ .. controls (-0.5042,-0.7356) and (-0.5468,-0.7364) .. (-0.5580,-0.6711)
+ .. controls (-0.5740,-0.6662) and (-0.5960,-0.6410) .. (-0.6122,-0.6460)
+ --cycle
+ (-0.2799,-0.6723)
+ .. controls (-0.2946,-0.6977) and (-0.2726,-0.7009) .. (-0.2645,-0.6954)
+ .. controls (-0.2563,-0.6899) and (-0.2508,-0.6683) .. (-0.2799,-0.6723)
+ --cycle
+ (-0.1741,-0.6796)
+ -- (-0.1826,-0.6881)
+ -- (-0.1826,-0.7052)
+ -- (-0.1571,-0.6796)
+ --cycle
+ ( 0.0647,-0.7393)
+ -- ( 0.0733,-0.7735)
+ -- ( 0.0902,-0.7735)
+ -- ( 0.0988,-0.7649)
+ -- ( 0.0988,-0.7478)
+ --cycle
+ ( 0.2267,-0.7564)
+ -- ( 0.2352,-0.7564)
+ -- ( 0.2352,-0.7649)
+ --cycle
+ (-0.2765,-0.7649)
+ -- (-0.2850,-0.7990)
+ -- (-0.2509,-0.7905)
+ -- (-0.2595,-0.7649)
+ --cycle
+ (-0.1620,-0.7999)
+ .. controls (-0.1665,-0.7994) and (-0.1723,-0.7994) .. (-0.1792,-0.8003)
+ .. controls (-0.2378,-0.8436) and (-0.2549,-0.8217) .. (-0.2658,-0.8441)
+ .. controls (-0.2799,-0.8733) and (-0.2098,-0.8685) .. (-0.1746,-0.8466)
+ .. controls (-0.1557,-0.8347) and (-0.1302,-0.8033) .. (-0.1620,-0.7999)
+ --cycle
+ (-0.0021,-0.8033)
+ .. controls (-0.0289,-0.7979) and (-0.0697,-0.8240) .. (-0.0817,-0.8284)
+ .. controls (-0.1018,-0.8361) and (-0.1245,-0.8333) .. (-0.1384,-0.8539)
+ .. controls (-0.1534,-0.8760) and (-0.1093,-0.8641) .. (-0.0866,-0.8639)
+ .. controls (-0.0704,-0.8637) and (-0.0573,-0.8695) .. (-0.0331,-0.8549)
+ .. controls ( 0.0004,-0.8348) and (-0.0157,-0.8559) .. ( 0.0221,-0.8587)
+ .. controls ( 0.0252,-0.8212) and ( 0.0141,-0.8066) .. (-0.0021,-0.8033)
+ --cycle
+ ( 0.1096,-0.8160)
+ .. controls ( 0.1044,-0.8138) and ( 0.0965,-0.8137) .. ( 0.0850,-0.8167)
+ .. controls ( 0.0624,-0.8514) and ( 0.0794,-0.8648) .. ( 0.0988,-0.8546)
+ .. controls ( 0.1148,-0.8462) and ( 0.1249,-0.8224) .. ( 0.1096,-0.8160)
+ --cycle
+ (-0.4386,-0.8161)
+ -- (-0.4386,-0.8587)
+ .. controls (-0.3929,-0.8508) and (-0.3929,-0.8240) .. (-0.4386,-0.8161)
+ --cycle
+ (-0.4898,-0.8246)
+ -- (-0.5227,-0.8312)
+ -- (-0.5082,-0.8563)
+ .. controls (-0.5034,-0.8573) and (-0.4999,-0.8586) .. (-0.4898,-0.8587)
+ -- (-0.4878,-0.8720)
+ -- (-0.4837,-0.8720)
+ -- (-0.4565,-0.8673)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/tile.dtx b/macros/latex/contrib/wargame/source/hex/tile.dtx
new file mode 100644
index 0000000000..76eceb27c4
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/tile.dtx
@@ -0,0 +1,25 @@
+% \iffalse
+% ====================================================================
+% This is simply to create tile images.
+%
+%<*tile>
+\documentclass{standalone}
+\usepackage[terrainpic]{wargame}
+\begin{document}%
+\begin{tikzpicture}%
+ \pic{hex/terrain/%
+%<beach>beach
+%<city>city
+%<lightwoods>light woods
+%<mountains>mountains
+%<rough>rough
+%<sea>sea
+%<swamp>swamp
+%<town>town
+%<village>village
+%<woods>woods
+};%
+\end{tikzpicture}
+\end{document}
+%</tile>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/towns.dtx b/macros/latex/contrib/wargame/source/hex/towns.dtx
new file mode 100644
index 0000000000..a73c5eed5c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/towns.dtx
@@ -0,0 +1,96 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Towns}
+% \label{sec:impl:hex:town}
+%
+% Similar to above, we define a namespace and family for towns. First
+% thing is the graphics style for towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/town/.style={
+ scale line widths,
+ thin,
+ fill=pgfstrokecolor,
+ color=pgfstrokecolor},
+ hex/town name/.style={
+ transform shape,
+ shape=rectangle,
+ above right=.1,
+ color=pgfstrokecolor,
+ font=\sffamily\normalsize}
+}
+% \end{macrocode}
+%
+% Next is the namespace for dealing with towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/town/.search also={/tikz},%
+ /hex/town/.cd,
+ pic/.store in=\hex@c@pic,
+ type/.store in=\hex@c@pic,
+ place/.store in=\hex@c@pos,
+ location/.store in=\hex@c@pos,
+ name/.store in=\hex@c@name,
+ village/.style={pic=hex/town/village},
+ town/.style={pic=hex/town/town},
+ city/.style={pic=hex/town/city}
+}
+% \end{macrocode}
+%
+% And some \spec{pic}tures for making the towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/town/village/.pic={\path[fill,pic actions] circle(.1);},
+ hex/town/town/.pic={\path[fill,pic actions] circle(.2);},
+ hex/town/city/.pic={%
+ \path[fill,pic actions] circle(.25);
+ \path[draw,pic actions] circle(.35);}
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\hex@do@town}
+%
+% The macro to make the towns. This uses same tricks as above.
+%
+% \begin{macrocode}
+\def\hex@c@nameparse{%
+ \@ifnextchar[{\hex@c@namep@rse}{\hex@c@namep@rse[]}%]
+}
+\def\hex@c@namep@rse[#1]#2\endhex@c@nameparse{%
+ \def\hex@c@node{node[shape=rectangle,hex/town name,#1]{#2}}}
+
+\def\hex@do@town{%
+ \edef\hex@c@tmp{[
+ /hex/town/.cd,%
+ town,%
+ /tikz/hex/town,%
+ /tikz/every hex town/.try,
+ \hex@town]}
+ \expandafter\scope\hex@c@tmp%
+ \ifx\hex@c@pic\empty\else%
+ \@ifundefined{hex@c@pos}{\let\hex@c@pos\empty}{}
+ \@ifundefined{hex@c@name}{\let\hex@c@name\empty}{}
+ \expandafter\hex@c@nameparse\hex@c@name\endhex@c@nameparse%
+ \ifx\hex@c@pos\empty\def\hex@c@pos{(0,0)}\fi
+ \hex@dbg{2}{Town:
+ ^^J text=\hex@c@name
+ ^^J pic=\hex@c@pic
+ ^^J place=\hex@c@pos
+ ^^J node=\hex@c@node
+ }
+ \filldraw \hex@c@pos pic{\hex@c@pic} \hex@c@node;
+ \fi%
+ \endscope%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
new file mode 100644
index 0000000000..c59e685b20
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
@@ -0,0 +1,39 @@
+%<*cmp>
+\CompatSection{\spec{activity}}
+\CompatTable{activity}{main}{{
+ arrest/{main={arrest}},
+ attempted criminal activity/{main={crime,individual}},
+ automobile/{main={automobile}},
+ demonstration/{main={squashed text=MASS}},
+ drive by shooting/{main={rifle},lower={wheeled}},
+ drug related activities/{main={squashed text=DRUG}},
+ explosion/{main={explosion}},
+ extortion 1/{main={text=\textdollar}},
+ extortion 2/{main={text=\pounds}},
+ extortion 3/{main={text=\texteuro}},
+ extortion 4/{main={text=\textyen}},
+ fire/{main={squashed text=FIRE}},
+ graffiti/{main={graffiti}},
+ improvised explosive device explosion/{main={explosion,small text=IED}},
+ individual/{main={individual}},
+ killing/{main={killing,individual}},
+ patrolling/{main={patrolling}},
+ pleasure craft/{main={sailing boat}},
+ poisoning/{main={poisoning}},
+ psychological operations/{main={psychological}},
+ radio and television psychological operations/{main={psychological,signal}},
+ riot/{main={squashed text=RIOT}},
+ searching/{main={searching}},
+}}
+\CompatTable{activity}{upper}{{
+ assassination/{upper={text=AS}},
+ execution/{upper={text=EX}},
+ hijack/{upper={text=H}},
+ house to house/{upper={house}},
+ kidnapping/{upper={text=K}},
+ murder/{upper={text=MU}},
+ piracy/{upper={text=PI}},
+ rape/{upper={text=RA}},
+ written/{upper={text=W}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
new file mode 100644
index 0000000000..286366f81a
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
@@ -0,0 +1,87 @@
+%<*cmp>
+\CompatSection{\spec{air}}
+\CompatTable{air}{main}{{
+ air decoy/{main={air decoy}},
+ airborne command post/{main={squashed text=ACP}},
+ airborne early warning/{main={squashed text=AEW}},
+ anti submarine warfare/{main={squashed text=ASW}},
+ anti surface warfare/{main={squashed text=ASUW}},
+ attack/{main={text=A}},
+ bomber/{main={text=B}},
+ cargo/{main={text=C}},
+ civilian airship/{main={airship}},
+ civilian balloon/{main={balloon}},
+ civilian fixed wing/{main={fixed wing}},
+ civilian rotary wing/{main={rotary wing}},
+ civilian/{main={squashed text=CIV}},
+ combat search and rescue/{main={squashed text=CSAR}},
+ communications/{main={squashed text=COM}},
+ electronic support measures/{main={squashed text=ESM}},
+ fighter/{main={text=F}},
+ government/{main={squashed text=GOV}},
+ jammer/{main={text=J}},
+ medic/{main={[fill]medic}},
+ military airship/{main={[fill]airship}},
+ military balloon/{main={[fill]balloon}},
+ military fixed wing/{main={[fill]fixed wing}},
+ military rotary wing/{main={[fill]rotary wing}},
+ military/{main={squashed text=MIL}},
+ mine countermeasures/{main={squashed text=MCM}},
+ passenger/{main={text=PX}},
+ patrol/{main={text=P}},
+ personnel recovery/{main={text=PR}},
+ reconnaissance/{main={text=R}},
+ search and rescue/{main={squashed text=SAR}},
+ special operations forces/{main={squashed text=SOF}},
+ suppression of enemy air defence/{main={squashed text=SEAD}},
+ tanker/{main={text=K}},
+ trainer/{main={text=T}},
+ ultra light/{main={text=UL}},
+ unmanned aerial vehicle/{main={[fill]unmanned}},
+ utility/{main={text=U}},
+ vertical short takeoff and landing/{main={text=V}},
+ very important person/{main={squashed text=VIP}},
+}}
+\CompatTable{air}{upper}{{
+ airborne command post/{upper={squashed text=ACP}},
+ airborne early warning/{upper={squashed text=AEW}},
+ anti submarine warfare/{upper={squashed text=ASW}},
+ anti surface warfare/{upper={squashed text=ASUW}},
+ cargo/{upper={text=C}},
+ combat search and rescue/{upper={squashed text=CSAR}},
+ communications/{upper={squashed text=COM}},
+ electronic support measures/{upper={squashed text=ESM}},
+ escort/{upper={text=E}},
+ government flight/{upper={squashed text=GOV}},
+ intensive care/{upper={text=IC}},
+ jammer/{upper={text=R}},
+ medical evacuation/{upper={[fill]medic}},
+ mine countermeasures/{upper={squashed text=MCM}},
+ passenger plane/{upper={text=PX}},
+ patrol/{upper={text=J}},
+ photography/{upper={text=PH}},
+ reconnaissance/{upper={text=P}},
+ search and rescue/{upper={squashed text=SAR}},
+ special operations forces/{upper={squashed text=SOF}},
+ suppression of enemy air defence/{upper={squashed text=SEAD}},
+ tanker/{upper={text=K}},
+ trainer/{upper={text=T}},
+ ultra light/{upper={text=UL}},
+ utility/{upper={text=U}},
+ very important person/{upper={squashed text=VIP}},
+}}
+
+\CompatTable{air}{lower}{{
+ boom and drogue/{lower={squashed text=B/D}},
+ boom only/{lower={text=B}},
+ close range/{lower={text=CR}},
+ drogue only/{lower={text=D}},
+ heavy/{lower={text=H}},
+ light/{lower={text=L}},
+ long range/{lower={text=LR}},
+ medium range/{lower={text=MR}},
+ medium/{lower={text=M}},
+ short range/{lower={text=SR}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
new file mode 100644
index 0000000000..d38cb93dbc
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
@@ -0,0 +1,99 @@
+%<*cmp>
+\CompatSection{\spec{equipment}}
+\CompatTable{equipment}{main}{{
+ air defence gun/{main={gun=air defence}},
+ air defence missile launcher/{main={missile launcher=air defence}},
+ antennae/{main={antenna}},
+ anti tank gun/{main={gun=anti tank}},
+ anti tank missile launcher/{main={missile launcher=anti tank}},
+ anti tank rocket launcher/{main={rocket launcher=anti tank}},
+ antipersonnel land mine/{main={land mine=personnel}},
+ antitank land mine/{main={land mine=tank}},
+ armoured fighting vehicle command and control/{main={armoured fighting vehicle,small text=C2}},
+ armoured fighting vehicle/{main={armoured fighting vehicle}},
+ armoured medical personnel carrier/{main={{[save clip]armoured personnel carrier},{[scale=.7]medical}}},
+ armoured personnel carrier/{main={armoured personnel carrier}},
+ armoured protected recovery vehicle/{main={armoured,[scale=.7]maintenance}},
+ armoured protected vehicle/{main={armoured}},
+ automatic rifle/{main={rifle,type=heavy}},
+ bomb/{main={squashed text=BOMB}},
+ booby trap/{main={booby trap}},
+ bridge mounted on utility vehicle/{main={utility vehicle,[scale=.7]bridge}},
+ bridge/{main={bridge}},
+ bus/{main={utility vehicle,text=B}},
+ chemical biological radiological nuclear equipment/{main={chemical biological radiological nuclear}},
+ computer system/{main={computer system}},
+ direct fire gun/{main={gun=direct}},
+ drill mounted on vehicle/{main={utility vehicle,{[scale=.6,yshift=-3]drilling}}},
+ drill/{main={drilling}},
+ earthmover/{main={earthmover}},
+ fixed bridge/{main={bridge=fixed}},
+ flame thrower/{main={flame thrower}},
+ folding girder bridge/{main={bridge=folding}},
+ generator set/{main={text=G}},
+ grenade launcher/{main={grenade launcher}},
+ heavy grenade launcher/{main={grenade launcher,[yshift=-.2]type=heavy}},
+ heavy machine gun/{main={machine gun,type=heavy}},
+ heavy tank/{main={tank,type=vheavy}},
+ hollow deck bridge/{main={bridge=hollow}},
+ howitzer/{main={howitzer}},
+ improvised explosive device/{main={squashed text=IED}},
+ land mine/{main={land mine}},
+ laser/{main={laser}},
+ light grenade launcher/{main={grenade launcher,[yshift=-.2]type=light}},
+ light machine gun/{main={machine gun,type=light}},
+ light tank/{main={tank,type=vlight}},
+ machine gun/{main={machine gun}},
+ medical evacuation armoured protected vehicle/{main={armoured,[fill]medic}},
+ medical evacuation medical vehicle/{main={utility vehicle,[fill]medical}},
+ medium grenade launcher/{main={grenade launcher,[yshift=-.2]type=medium}},
+ medium machine gun/{main={machine gun,type=medium}},
+ medium tank/{main={tank,type=vmedium}},
+ mine clearing equipment/{main={mine clearing equipment}},
+ mine clearing vehicle/{main={tank,mine clearing equipment}},
+ mine laying equipment/{main={mine},upper={type=light}},
+ mine laying vehicle/{main={utility vehicle,mine},upper={type=light}},
+ missile launcher/{main={missile launcher}},
+ mobile emergency physician/{main={[save clip]utility vehicle,physician}},
+ mortar/{main={mortar}},
+ multifunctional earthmover/{main={earthmover,text=MF}},
+ multiple rocket launcher/{main={rocket launcher=multiple}},
+ non lethal grenade launcher/{main={grenade launcher=non lethal}},
+ non lethal weapon/{main={non lethal weapon}},
+ petroleum oil and lubricants vehicle/{main={utility vehicle,[scale=.6]fuel}},
+ psychological operations equipment/{main={psychological}},
+ radar/{main={radar}},
+ recoilless gun/{main={gun=recoilless}},
+ rifle/{main={rifle}},
+ semi automatic rifle/{main={rifle,type=medium}},
+ semi trailer truck/{main={semi trailer truck}},
+ sensor emplaced/{main={sensor},upper={jagged wave}},
+ sensor/{main={sensor}},
+ single rocket launcher/{main={rocket launcher=single}},
+ single shot rifle/{main={rifle,type=light}},
+ surface to surface missile launcher/{main={missile launcher=surface to surface}},
+ tank recovery vehicle/{main={tank,[scale=.8]maintenance}},
+ tank/{main={tank}},
+ taser/{main={non lethal weapon,text=Z}},
+ train locomotive/{main={train locomotive}},
+ utility vehicle/{main={utility vehicle}},
+ water cannon/{main={non lethal weapon,text=W}},
+ water vehicle/{main={utility vehicle,{[yshift=-3,scale=.6]water}}},
+}}
+
+\CompatTable{equipment}{lower}{{
+ amphibious/{below={amphibious}},
+ barge/{below={riverine}},
+ over snow/{below={over snow}},
+ pack animal/{below={pack animal}},
+ railroad/{below={railroad}},
+ sled/{below={sled}},
+ towed/{below={towed}},
+ tracked/{below={tracked}},
+ wheeled and tracked/{below={wheeled=and tracked}},
+ wheeled cross country/{below={wheeled=cross country}},
+ wheeled limited mobility/{below={wheeled=limited}},
+ wheeled semi trailer/{below={wheeled=semi}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
new file mode 100644
index 0000000000..0686c01cb0
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
@@ -0,0 +1,43 @@
+%<*cmp>
+\CompatSection{\spec{installation}}
+\CompatTable{installation}{main}{{
+ airport/{main={base},upper={air strip}},
+ ammunition cache/{main={ammunition,supply}},
+ black list location/{main={squashed text=BLK}},
+ broadcast transmitter antenna/{main={antenna}},
+ chemical biological radiological nuclear/{main={chemical biological radiological nuclear}},
+ civilian telecommunications/{main={civilian telecommunications}},
+ electric power/{main={electric power}},
+ food distribution/{main={food,supply}},
+ grey list location/{main={squashed text=GRAY}},
+ mass grave site/{main={{[scale=.7,yshift=-.05]mortuary affairs},{[scale=.7,shift={(-.22,.05)}]mortuary affairs},{[scale=.7,shift={(.22,.05)}]mortuary affairs}}},
+ medical treatment facility/{main={medical treatment}},
+ medical/{main={medical}},
+ mine/{main={quarry}},
+ naval/{main={naval}},
+ nuclear/{main={nuclear}},
+ printed media/{main={printed media}},
+ safe house/{main={squashed text=SAFE}},
+ transportation/{main={transportation}},
+ water treatment/{main={water,{[shift={(-.2,.-.1)}]small squashed text=PURE}}},
+ water/{main={water}},
+ white list location/{main={squashed text=WHT}},
+}}
+
+\CompatTable{installation}{upper}{{
+ biological/{upper={text=B}},
+ chemical/{upper={text=C}},
+ coal/{upper={text=CO}},
+ geothermal/{upper={text=GT}},
+ hydroelectric/{upper={text=HY}},
+ natural gas/{upper={text=NG}},
+ nuclear energy/{upper={nuclear}},
+ nuclear/{upper={text=N}},
+ petroleum/{upper={fuel}},
+ radio/{upper={text=R}},
+ railroad/{upper={railroad}},
+ telephone/{upper={text=T}},
+ television/{upper={text=TV}},
+ yard/{upper={squashed text=YRD}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
new file mode 100644
index 0000000000..38c3951376
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
@@ -0,0 +1,266 @@
+%<*cmp>
+\CompatSection{\spec{land}}
+\CompatTable{land}{main}{{
+ above corps support/{main={above corps support}},
+ administrative/{main={squashed text=ADM}},
+ air and naval gunfire liaison company/{main={[fill]artillery,reconnaissance,air traffic},upper={naval}},
+ air assault with organic lift/{main={air assault with organic lift}},
+ air defence/{main={air defence}},
+ air traffic services/{main={air traffic,[fill]individual}},
+ ammunition/{main={ammunition}},
+ amphibious/{main={amphibious}},
+ analysis electronic warfare/{main={analysis,electronic warfare wide}},
+ analysis/{main={analysis}},
+ anti tank anti armour/{main={anti tank anti armour}},
+ armoured engineer/{main={armoured,[scale=.7]engineer}},
+ armoured/{main={armoured}},
+ aviation composite fixed wing and rotary wing/{main={[fill]fixed and rotary wing}},
+ aviation fixed wing/{main={fixed wing}},
+ aviation rotary wing/{main={rotary wing}},
+ band/{main={squashed text=BAND}},
+ broadcast transmitter antenna/{main={antenna}},
+ chemical biological radiological nuclear defence/{main={chemical biological radiological nuclear}},
+ civil affairs/{main={text=CA}},
+ civilian military cooperation/{main={civilian military cooperation}},
+ civilian police/{main={civilian police}},
+ combat service support/{main={squashed text=CSS}},
+ combat support/{main={combat support}},
+ combat/{main={squashed text=CBT}},
+ combined arms/{main={combined arms}},
+ corps support/{main={corps support}},
+ counter intelligence/{main={text=CI}},
+ criminal investigation division/{main={squashed text=CID}},
+ direction finding electronic warfare/{main={direction finding,electronic warfare wide}},
+ diving/{main={diving}},
+ dog/{main={squashed text=DOG}},
+ drilling/{main={drilling}},
+ electronic ordinance disposal/{main={squashed text=EOD}},
+ electronic ranging/{main={electronic ranging}},
+ electronic warfare/{main={text=EW}},
+ engineer/{main={engineer}},
+ environmental protection/{main={environmental protection}},
+ field artillery observer/{main={{[clip]observer},{[scale=.7,shift={(0,-.1)},fill]artillery},reconnaissance}},
+ field artillery/{main={[fill]artillery}},
+ finance/{main={finance}},
+ fire protection/{main={fire protection}},
+ geospatial support/{main={squashed text=GEO}},
+ government organization/{main={text=GO}},
+ headquarters/{main={headquarters}},
+ individual/{main={individual}},
+ infantry/{main={infantry}},
+ information operations/{main={text=IO}},
+ intercept electronic warfare/{main={[fill]analysis,electronic warfare wide}},
+ intercept/{main={[fill]analysis}},
+ internal security force/{main={squashed text=ISF}},
+ interrogation/{main={squashed text=IPW}},
+ jamming electronic warfare/{main={jamming,text=EW}},
+ jamming/{main={jamming}},
+ joint fire support/{main={squashed text=JFS}},
+ judge advocate general/{main={squashed text=JAG}},
+ killing victim/{main={killing,individual}},
+ killing victims/{main={killing,group}},
+ labour/{main={labour}},
+ laundry/{main={laundry}},
+ liaison/{main={text=LO}},
+ main gun system/{main={main gun}},
+ maintenance/{main={maintenance=fill}},
+ material/{main={squashed text=MAT}},
+ medical treatment facility/{main={medical treatment}},
+ medical/{main={medical}},
+ meteorological/{main={squashed text=MET}},
+ military intelligence/{main={text=MI}},
+ military police/{main={text=MP}},
+ mine/{main={mine}},
+ missile/{main={land missile}},
+ morale welfare and recreation/{main={squashed text=MWE}},
+ mortar/{main={mortar}},
+ mortuary affairs/{main={mortuary affairs}},
+ motorized/{main={motorized}},
+ naval/{main={naval}},
+ observer/{main={observer}},
+ ordnance/{main={ordnance}},
+ organisation or group/{main={organisation}},
+ personnel services/{main={text=PS}},
+ petroleum oil and lubricants/{main={fuel}},
+ pipeline/{main={pipeline}},
+ postal/{main={postal}},
+ psychological operations broadcast/{main={antenna,{[scale=.7,fill]psychological}}},
+ psychological/{main={psychological}},
+ public affairs/{main={text=PA}},
+ quartermaster/{main={quartermaster}},
+ radar/{main={radar}},
+ radio relay:/{main={radio relay}},
+ radio teletype centre/{main={radio teletype}},
+ radio/{main={radio}},
+ reconnaissance/{main={reconnaissance}},
+ religious support/{main={squashed text=REL}},
+ replacement holding unit/{main={squashed text=RHU}},
+ sea air land/{main={squashed text=SEAL}},
+ search electronic warfare/{main={search,electronic warfare wide}},
+ search/{main={search}},
+ security/{main={squashed text=SEC}},
+ self propelled field artillery/{main={motorized,artillery}},
+ sensor/{main={sensor}},
+ shore patrol security police/{main={text=SP}},
+ signal radio relay/{main={signal,radio relay}},
+ signal radio teletype centre/{main={signal,radio teletype}},
+ signal radio/{main={signal,radio}},
+ signal tactical satellite/{main={signal,tactical satellite}},
+ signal/{main={signal}},
+ sniper:/{main={sniper}},
+ special forces/{main={text=SF}},
+ special operations forces/{main={squashed text=SOF}},
+ spy:/{main={squashed text=SPY}},
+ supply/{main={supply}},
+ surveillance/{main={[fill]observer}},
+ survey/{main={survey}},
+ sustainment/{main={squashed text=SUST}},
+ tactical mortar/{main={armoured,[scale=.6]mortar}},
+ tactical satellite/{main={tactical satellite}},
+ topographic/{main={topographic}},
+ transportation/{main={transportation}},
+ unmanned systems/{main={unmanned}},
+ victim of an attempted crime/{main={individual,crime}},
+ video imagery/{main={video imagery}},
+ water purification/{main={water,{[shift={(-.2,.-.1)}]small squashed text=PURE}}},
+ water/{main={water}},
+}}
+
+\CompatTable{land}{upper}{{
+ Mil medical role 1/{upper={text=1}},
+ Mil medical role 2/{upper={text=2}},
+ Mil medical role 3/{upper={text=3}},
+ Mil medical role 4/{upper={text=4}},
+ air assault/{upper={air assault}},
+ area/{upper={squashed text=AREA}},
+ assassination/{upper={text=AS}},
+ attack/{upper={text=A}},
+ biological/{upper={text=B}},
+ border/{upper={squashed text=BOR}},
+ bridging/{upper={bridge}},
+ chemical/{upper={text=C}},
+ close protection/{upper={squashed text=CLP}},
+ coerced or impressed recruit/{upper={text=C}},
+ combat/{upper={squashed text=CBT}},
+ command and control/{upper={text=C2}},
+ communications contingency package/{upper={squashed text=CCP}},
+ construction/{upper={squashed text=CONST}},
+ cross cultural communication/{upper={squashed text=CCC}},
+ crowd and riot control/{upper={squashed text=CRC}},
+ decontamination/{upper={text=D}},
+ detention/{upper={squashed text=DET}},
+ direct communications/{upper={direct communications}},
+ displaced persons refugees and evacuees/{upper={squashed text=DPRE}},
+ diving/{upper={diving}},
+ division/{upper={text=XX}},
+ dog/{upper={squashed text=DOG}},
+ drilling/{upper={drilling}},
+ electro optical/{upper={text=EO}},
+ enhanced/{upper={squashed text=ENH}},
+ execution/{upper={text=EX}},
+ explosive ordnance disposal/{upper={squashed text=EOD}},
+ fire direction centre/{upper={squashed text=FDC}},
+ force/{upper={text=F}},
+ foreign fighters/{upper={text=FF}},
+ forward/{upper={squashed text=FWD}},
+ gang member or gang/{upper={squashed text=GANG}},
+ government organisation/{upper={text=GO}},
+ ground station module/{upper={squashed text=GSM}},
+ hijacking/{upper={text=H}},
+ kidnapping/{upper={text=K}},
+ landing support/{upper={text=LS}},
+ large extension node/{upper={squashed text=LEN}},
+ leader or leadership/{upper={squashed text=LDR}},
+ maintenance:/{upper={maintenance}},
+ mine countermeasuure/{upper={squashed text=MCM}},
+ missile:/{upper={land missile}},
+ mobile advisor and support/{upper={mobile advisor and support}},
+ mobile subscriber equipment/{upper={squashed text=MSE}},
+ mobility support/{upper={text=MS}},
+ movement control centre/{upper={squashed text=MCC}},
+ multinational specialized unit/{upper={squashed text=MSU}},
+ multinational/{upper={text=MN}},
+ multiple rocket launcher/{upper={rocket launcher=multiple head}},
+ murder victims/{upper={text=MU}},
+ naval/{upper={naval}},
+ node centre/{upper={text=NC}},
+ non-governmental organization member or non-governmental/{upper={organisation}},
+ nuclear:/{upper={text=N}},
+ operations:/{upper={squashed text=OPS}},
+ piracy:/{upper={text=PI}},
+ radar:/{upper={radar}},
+ radiological/{upper={squashed text=RAD}},
+ rape/{upper={text=RA}},
+ religious or religious organisation/{upper={squashed text=REL}},
+ runway/{upper={runway}},
+ search and rescue/{upper={squashed text=SAR}},
+ security/{upper={squashed text=SEC}},
+ sensor control module/{upper={squashed text=SEM}},
+ sensor/{upper={sensor}},
+ signals intelligence/{upper={signals intelligence}},
+ single rocket launcher/{upper={rocket launcher=single head}},
+ single shelter switch/{upper={squashed text=SSS}},
+ smoke/{upper={text=S}},
+ sniper/{upper={sniper}},
+ sound ranging/{upper={squashed text=SDR}},
+ special weapons and tactics/{upper={squashed text=SWAT}},
+ survey:/{upper={survey}},
+ tactical exploitation/{upper={text=TE}},
+ target acquisition/{upper={text=TA}},
+ targeted individual or organisation/{upper={squashed text=TGT}},
+ terrorist or terrorist organisation/{upper={squashed text=TER}},
+ topographic/{upper={topographic}},
+ utility/{upper={text=U}},
+ video imagery/{upper={video imagery}},
+ willing recruit/{upper={text=W}},
+}}
+
+\CompatTable{land}{lower}{{
+ airborne/{lower={airborne}},
+ arctic/{lower={arctic}},
+ battle damage repair/{lower={squashed text=BDR}},
+ bicycle equipped/{lower={bicycle equipped}},
+ clearing/{lower={squashed text=CLR}},
+ close range/{lower={text=CR}},
+ control/{lower={control}},
+ decontamination/{lower={text=D}},
+ demolition/{lower={squashed text=DEM}},
+ dental/{lower={text=D}},
+ digital/{lower={squashed text=DIG}},
+ enhanced location reporting system/{lower={enhanced location reporting system}},
+ equipment/{lower={text=E}},
+ heavy/{lower={text=H}},
+ intensive care/{lower={text=IC}},
+ intermodal/{lower={intermodal}},
+ laboratory/{lower={squashed text=LAB}},
+ launcher/{lower={launcher}},
+ light/{lower={text=L}},
+ long range/{lower={text=LR}},
+ medium range/{lower={text=MR}},
+ mountain/{lower={mountain}},
+ multi channel/{lower={text=MC}},
+ optical/{lower={squashed text=OPT}},
+ pack animal/{lower={pack animal}},
+ patient evacuation coordination/{lower={squashed text=PEC}},
+ preventative maintenance/{lower={text=PM}},
+ psychological/{lower={text=P}},
+ radio relay line of sight/{lower={radio relay line of sight}},
+ railroad/{lower={railroad}},
+ recovery maintenance/{lower={maintenance}},
+ recovery unmanned systems/{lower={recovery unmanned systems}},
+ rescue coordination centre/{lower={squashed text=RCC}},
+ riverine/{lower={riverine}},
+ short range/{lower={text=SR}},
+ single channel/{lower={text=SC}},
+ ski/{lower={ski}},
+ strategic/{lower={squashed text=STR}},
+ support/{lower={squashed text=SPT}},
+ tactical/{lower={squashed text=TAC}},
+ towed/{lower={towed}},
+ troop/{lower={text=T}},
+ vertical of short takeoff and landing/{lower={squashed text=VSTOL}},
+ veterinary/{lower={text=V}},
+ wheeled/{lower={wheeled}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
new file mode 100644
index 0000000000..db7ea7176d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
@@ -0,0 +1,14 @@
+%<*cmp>
+\CompatSection{\spec{missile}}
+\CompatTable{missile}{main}{{
+ missile/{main={missile}},
+ air/{main={missile},left={text=A}},
+ anti ballistic/{main={missile},left={text=AB}},
+ ballistic/{main={missile},left={text=B}},
+ cruise/{main={missile},left={text=C}},
+ space/{main={missile},left={text=SP}},
+ sub surface/{main={missile},left={text=SU}},
+ surface/{main={missile},left={text=S}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
new file mode 100644
index 0000000000..f4bdbd9d2f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
@@ -0,0 +1,18 @@
+%<*cmp>
+\CompatSection{\spec{sea mine}}
+\CompatTable{sea mine}{main}{{
+ free/{main={sea mine}},
+ free-neutralised/{main={sea mine=neutralised}},
+ bottomed/{main={sea mine},lower={bottomed}},
+ bottomed-neutralised/{main={sea mine=neutralised},lower={bottomed}},
+ moored/{main={sea mine},lower={moored}},
+ moored-neutralised/{main={sea mine=neutralized},lower={moored}},
+ floating/{main={sea mine},lower={floating}},
+ floating-neutralised/{main={sea mine=neutralised},lower={floating}},
+ in other position/{main={sea mine,in position}},
+ in other position-neutralised/{main={sea mine=neutralised,in position}},
+ rising/{main={sea mine},lower={rising}},
+ rising-neutralised/{main={sea mine=neutralised},lower={rising}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
new file mode 100644
index 0000000000..2470da3a4b
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
@@ -0,0 +1,131 @@
+%<*cmp>
+\CompatSection{\spec{sea surface}}
+\CompatTable{sea surface}{main}{{
+ ammunition ship/{main={text=AE}},
+ amphibious assault ship/{main={squashed text=LHA}},
+ amphibious assault/{main={text=LA}},
+ amphibious assualt ship helicopter/{main={squashed text=LPH}},
+ amphibious command ship/{main={squashed text=LCC}},
+ amphibious transport/{main={squashed text=LPD}},
+ amphibious warfare ship/{main={amphibious warfare ship}},
+ auxiliary flag ship/{main={squashed text=AGF}},
+ auxiliary ship/{main={text=AA}},
+ barge/{main={ship,[shift={(0,-.05)}]small text=YB}},
+ battleship/{main={text=BB}},
+ cargo/{main={ship,text=A}},
+ carrier/{main={carrier}},
+ civilian boat/{main={boat}},
+ civilian jetski/{main={jetski}},
+ civilian rigid hull inflatable boat/{main={boat,[shift={(0,-.05)}]small text=RB}},
+ civilian speedboat/{main={boat,[shift={(0,-.05)}]small text=SP}},
+ civilian unmanned surface water vehicle/{main={unmanned}},
+ civilian/{main={squashed text=CIV}},
+ combat support ship/{main={squashed text=AOE}},
+ combatant/{main={combatant}},
+ container ship/{main={ship,text=C}},
+ convoy/{main={convoy}},
+ corvette/{main={text=FS}},
+ cruiser guided missile/{main={text=CG}},
+ destroyer/{main={text=DD}},
+ dredge/{main={ship,text=D}},
+ drifter/{main={fishing vessel,text=DF}},
+ ferry/{main={ship,text=F}},
+ fishing vessel/{main={fishing vessel}},
+ frigate/{main={text=FF}},
+ harbour tug/{main={text=YT}},
+ hazardous material transport ship/{main={ship,[yshift=.-.07]small text=HZ}},
+ heavy lift/{main={ship,text=H}},
+ hospital ship/{main={text=AH}},
+ hovercraft/{main={ship,text=J}},
+ intelligence collector/{main={squashed text=AGI}},
+ junk/{main={ship,[yshift=-.07]small text=QJ}},
+ landing craft/{main={text=LC}},
+ landing ship/{main={text=LS}},
+ lash carrier/{main={ship,text=L}},
+ launch/{main={squashed text=YFT}},
+ law enforcement vessel/{main={coast guard vessel}},
+ littoral combatant ship/{main={squashed text=LCS}},
+ military jetski/{main={[fill]jetski}},
+ military rigid hull inflatable boat/{main={{[fill]boat},{[white,scale=.5,yshift=-1.2]small text=RB}}},
+ military speedboat/{main={[fill]boat}},
+ military unmanned surface water vehicle/{main={[fill]unmanned}},
+ military/{main={squashed text=MIL}},
+ mine countermeasure support ship/{main={squashed text=MCS}},
+ mine countermeasures/{main={squashed text=MCM}},
+ mine warfare vessel/{main={mine warfare vessel}},
+ minehunter/{main={text=MH}},
+ minelayer/{main={text=ML}},
+ minesweeper drone/{main={squashed text=MSD}},
+ minesweeper/{main={text=MS}},
+ multi purpose amphibious assualt ship/{main={squashed text=LHD}},
+ naval cargo ship/{main={text=AK}},
+ navy task element/{main={navy task,squashed text=TE}},
+ navy task force/{main={navy task,squashed text=TF}},
+ navy task group/{main={navy task,squashed text=TG}},
+ navy task organisation unit/{main={navy task}},
+ navy task unit/{main={navy task,squashed text=TU}},
+ non combatant/{main={non combatant}},
+ non self propelled barge/{main={text=YB}},
+ ocean going tug/{main={text=AT}},
+ ocean research ship/{main={squashed text=AGO}},
+ oiler/{main={squashed text=AOR}},
+ passenger ship/{main={ship,text=P}},
+ patrol craft/{main={text=PC}},
+ patrol ship/{main={text=PG}},
+ patrol/{main={patrol}},
+ repair ship/{main={text=AR}},
+ roll on roll off/{main={ship,text=E}},
+ sailing boat/{main={sailing boat}},
+ sea surface decoy/{main={decoy}},
+ self propelled barge/{main={text=YS}},
+ service craft/{main={text=YY}},
+ ship/{main={ship}},
+ stores ship/{main={text=AF}},
+ submarine tender/{main={text=AS}},
+ surface combatant/{main={surface combatant}},
+ survey ship/{main={squashed text=AGS}},
+ tanker/{main={ship,text=O}},
+ tow/{main={ship,[yshift=-.09]small text=TW}},
+ trawler/{main={fishing vessel,[yshift=-.09]small text=TR}},
+ tug/{main={ship,text=T}},
+}}
+
+\CompatTable{sea surface}{upper}{{
+ anti air warfare/{upper={squashed text=AAW}},
+ anti submarine warfare/{upper={squashed text=ASW}},
+ ballistic missile/{upper={text=B}},
+ drone equipped/{upper={[fill]unmanned}},
+ electronic warfare/{upper={text=EW}},
+ escort/{upper={text=E}},
+ guided missile/{upper={text=G}},
+ helicopter equipped/{upper={text=H}},
+ intelligence surveillance reconnaissance/{upper={squashed text=ISR}},
+ medical/{upper={text=ME}},
+ mine counter measures/{upper={squashed text=MCM}},
+ mine warfare/{upper={text=MW}},
+ missile defence/{upper={text=MD}},
+ other guided missile/{upper={text=M}},
+ remote multi mission vehicle/{upper={squashed text=RMV}},
+ special operations force/{upper={squashed text=SOF}},
+ surface warfare/{upper={squashed text=SUW}},
+ torpedo/{upper={text=T}},
+}}
+
+\CompatTable{sea surface}{lower}{{
+ air cushioned alternate/{lower={text=AC}},
+ air cushioned/{lower={text=J}},
+ autonomous control/{lower={squashed text=AUT}},
+ dock/{lower={text=D}},
+ expendable/{lower={squashed text=EXP}},
+ fast/{lower={text=F}},
+ heavy/{lower={text=H}},
+ hydrofoil/{lower={text=K}},
+ light/{lower={text=L}},
+ logistics/{lower={squashed text=LOG}},
+ medium/{lower={text=M}},
+ nuclear powered/{lower={text=N}},
+ remotely piloted/{lower={text=RP}},
+ tank/{lower={text=T}},
+ vehicle/{lower={text=V}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
new file mode 100644
index 0000000000..4a1a421911
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
@@ -0,0 +1,51 @@
+%<*cmp>
+\CompatSection{\spec{space}}
+\CompatTable{space}{main}{{
+ anti satellite weapon/{main={[fill]satellite,[scale=.6]rifle}},
+ civilian astronomical satellite/{main={satellite=astronomical}},
+ civilian bio satellite/{main={satellite=bio}},
+ civilian capsule/{main={capsule}},
+ civilian communications satellite/{main={satellite=communications}},
+ civilian earth observation satellite/{main={satellite=earth observing}},
+ civilian miniaturised satellite/{main={satellite=small}},
+ civilian navigational satellite/{main={satellite=navigation}},
+ civilian orbiter shuttle/{main={orbiter shuttle}},
+ civilian satellite/{main={satellite}},
+ civilian space station/{main={space station}},
+ civilian tether satellite/{main={satellite=tether}},
+ civilian weather satellite/{main={[yshift=-4]satellite,text=WX}},
+ military astronomical satellite/{main={[fill]satellite=astronomical}},
+ military bio satellite/{main={[fill]satellite=bio}},
+ military capsule/{main={[fill]capsule}},
+ military communications satellite/{main={[fill]satellite=communications}},
+ military earth observation satellite/{main={[fill]satellite=earth observing}},
+ military miniaturised satellite/{main={[fill]satellite=small}},
+ military navigational satellite/{main={[fill]satellite=navigation}},
+ military orbiter shuttle/{main={[fill]orbiter shuttle}},
+ military satellite/{main={[fill]satellite=none}},
+ military space station/{main={[fill]space station}},
+ military tether satellite/{main={[fill]satellite=tether}},
+ military weather satellite/{main={{[fill,yshift=-4]satellite},text=WX}},
+ planet lander/{main={text=PL}},
+ reconnaissance satellite/{main={satellite=reconnaissance}},
+ reentry vehicle/{main={text=RV}},
+ satellite/{main={squashed text=SAT}},
+ space vehicle/{main={text=SV}},
+}}
+
+\CompatTable{space}{upper}{{
+ geostationary orbit/{upper={text=GO}},
+ geosynchronous orbit/{upper={squashed text=GSO}},
+ high earth orbit/{upper={squashed text=HEO}},
+ low earth orbit/{upper={squashed text=LEO}},
+ medium earth orbit/{upper={squashed text=MEO}},
+ molinya orbit/{upper={text=MO}},
+}}
+
+\CompatTable{space}{lower}{{
+ infra red/{lower={text=IR}},
+ optical/{lower={text=O}},
+ radar=/{lower={text=R}},
+ signals instelligence/{lower={text=SI}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
new file mode 100644
index 0000000000..38a867bdcd
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
@@ -0,0 +1,67 @@
+%<*cmp>
+\CompatSection{\spec{sub surface}}
+\CompatTable{sub surface}{main}{{
+ autonomous underwater vehicle/{main={[fill]unmanned}},
+ bottomed sea mine decoy/{main={[fill]sea mine=top half,{[scale=.6,yshift=-6]decoy}},lower={bottomed}},
+ bottomed submarine/{main={submarine},lower={bottomed}},
+ civilian autonomous underwatervehicle/{main={unmanned}},
+ civilian diver/{main={diving}},
+ civilian seabed installation/{main={seabed installation}},
+ civilian submersible/{main={submersible}},
+ civilian/{main={squashed text=CIV}},
+ improvised explosive device/{main={squashed text=IED}},
+ military diver/{main={diving=military}},
+ military seabed installation/{main={[fill]seabed installation}},
+ military/{main={squashed text=MIL}},
+ moored sea mine decoy/{main={[fill]sea mine=top half,{[yshift=-4,scale=.6]decoy}},lower={[yshift=-2]bottomed,moored}},
+ non submarine/{main={small squashed text=NON SUB}},
+ other submersible/{main={[fill]submersible}},
+ sea mine decoy/{main={[fill]sea mine=top half,{[scale=.6,yshift=-6]decoy}}},
+ snorkelling submarine/{main={submarine},upper={[yshift=-8]surfaced,[yshift=-2]type=vlight}},
+ submarine/{main={submarine}},
+ surfaced submarine/{main={submarine},lower={surfaced}},
+ torpedo/{main={torpedo}},
+ underwater decoy/{main={decoy},upper={[yshift=-4]bottomed}},
+ underwater weapon/{main={squashed text=WPN}},
+ unexploded ordnance/{main={unexploded ordnance}},
+}}
+
+\CompatTable{sub surface}{upper}{{
+ anti submarine warfare/{upper={squashed text=ASW}},
+ attack/{upper={text=A}},
+ auxiliary/{upper={squashed text=AUX}},
+ ballistic missile/{upper={text=B}},
+ certain submarine/{upper={text=CT}},
+ command and control/{upper={text=C2}},
+ guided missile/{upper={text=G}},
+ intelligence surveillance reconnaissance/{upper={squashed text=ISR}},
+ mine countermeasures/{upper={squashed text=MCM}},
+ mine warfare/{upper={text=MW}},
+ other guided missile/{upper={text=M}},
+ possible submarine high 3/{upper={text=P3}},
+ possible submarine high 4/{upper={text=P4}},
+ possible submarine low 1/{upper={text=P1}},
+ possible submarine low 2/{upper={text=P2}},
+ probable submarine/{upper={text=PB}},
+ special operations force/{upper={squashed text=SOF}},
+ surface warfare/{upper={squashed text=SUW}},
+}}
+
+\CompatTable{sub surface}{lower}{{
+ air independent propulsion/{lower={text=AI}},
+ autonomous control/{lower={squashed text=AUT}},
+ diesel propulsion/{lower={text=D}},
+ diesel type 1/{lower={text=D1}},
+ diesel type 2/{lower={text=D2}},
+ diesel type 3/{lower={text=D3}},
+ expendable/{lower={squashed text=EXP}},
+ nuclear propulsion/{lower={text=N}},
+ nuclear type 1/{lower={text=N1}},
+ nuclear type 2/{lower={text=N2}},
+ nuclear type 3/{lower={text=N3}},
+ nuclear type 4/{lower={text=N4}},
+ nuclear type 5/{lower={text=N5}},
+ nuclear type 6/{lower={text=N6}},
+ remotely piloted/{lower={text=RP}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/core.dtx b/macros/latex/contrib/wargame/source/natoapp6c/core.dtx
new file mode 100644
index 0000000000..8a2caf322e
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/core.dtx
@@ -0,0 +1,226 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.natoapp6c} \TikZ{} library}
+%
+% In this section we define the code for the Tikz library. The
+% library defines a number of \spec{pic} keys we can use to draw
+% various parts of a marker. The markers conform to NATO App~6(c)
+% specification. The implementation here is heavily inspired by the
+% package \textsf{milsymb} \cite{milsymb} available at CTAN.
+%
+% \iffalse
+%<*natoapp6c>
+% \fi
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Debugging}
+% \begin{Macro}{\natoappdbglvl,\n@to@pp@dbg}
+%
+% Set the debug level, and make debug message.
+%
+% \begin{macrocode}
+\usetikzlibrary{wargame.util}
+\usetikzlibrary{calc}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{shapes.symbols}
+\usetikzlibrary{positioning,intersections}
+\newcount\natoappdbglvl\natoappdbglvl=\wargamedbglvl
+\def\n@to@pp@dbg#1#2{%
+ \ifnum#1>\natoappdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Colours}
+%
+% \begin{Macro}{\c@friendly,
+% \c@hostile,
+% \c@neutral,
+% \c@unknown}
+%
+% Define standard colours for marker affiliations.
+%
+% \begin{tabular}{|l|c|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {}\\
+% \hline
+% \spec{friendly} & \tikz{\draw[fill=friendly] (0,0) rectangle(1,.2);}\\
+% \spec{hostile} & \tikz{\draw[fill=hostile ] (0,0) rectangle(1,.2);}\\
+% \spec{neutral} & \tikz{\draw[fill=neutral ] (0,0) rectangle(1,.2);}\\
+% \spec{unknown} & \tikz{\draw[fill=unknown ] (0,0) rectangle(1,.2);}\\
+% \hline
+% \end{tabular}
+%
+% \begin{macrocode}
+\definecolor{friendly}{RGB}{128, 224, 255}
+\definecolor{hostile}{RGB}{255, 128, 128}
+\definecolor{neutral}{RGB}{170, 255, 170}
+\definecolor{unknown}{RGB}{255, 255, 128}
+\tikzset{%
+ faction/.code={%
+ \@ifundefined{natoapp@fac}{%
+ }{\tikzset{fill=\natoapp@fac}}}}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some dimensions}
+%
+% We define a number of dimensions which we will use in the
+% following. They provide a rough parameterisation of the node
+% shapes, but shouldn't really be changed. We have them here so that
+% the code uses as few hard coded numbers as possible.
+%
+% The dimensions are
+% \begin{itemize}
+% \item Installation `hat' $x$ coordinate
+% \item Installation `hat' height
+% \item Activity width of boxes
+% \item Height of space bar
+% \item Radius of the symbol
+% \end{itemize}
+%
+% \begin{macrocode}
+\newdimen\n@to@pp@inst@x\n@to@pp@inst@x=0.2cm
+\newdimen\n@to@pp@inst@h\n@to@pp@inst@h=0.15cm
+\newdimen\n@to@pp@act@w\n@to@pp@act@w=0.15cm
+\newdimen\n@to@pp@space@h\n@to@pp@space@h=0.1cm
+\newdimen\n@to@pp@r\n@to@pp@r=0.5cm
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some utilities}
+%
+% \begin{Macro}{\n@to@pp@isclip}
+% This detects if we're in a node that is being used for clipping
+%
+% \begin{macrocode}
+%\def\n@to@pp@cliptoken{clip}
+%\def\n@to@pp@isclip{FF\fi%
+% % \message{^^Jclip is \meaning\pgf@up@clip}%
+% \ifx\pgf@up@clip\n@to@pp@cliptoken}
+\newif\ifn@to@pp@isclip\n@to@pp@isclipfalse
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n@to@pp@saved@fill@color,\n@to@pp@saved@stroke@color}
+%
+% Macros to hold saved colours.
+
+% \begin{macrocode}
+\let\n@to@pp@saved@stroke@color\relax
+\let\n@to@pp@saved@fill@color\relax
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n@to@pp@stroke@to@fill,\n@to@pp@restore@fill}
+% Macro to get stroke and fill colours and set the fill colour to
+% the stroke colour, and to restore to the old setting. This is
+% used by the frame shapes below to make sure that filled elements
+% of the frame uses the same colour as the for strokes.
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@stroke@to@fill{%
+ %
+ \expandafter\let\expandafter\n@to@pp@saved@stroke@color%
+ \csname\string\color@pgfstrokecolor\endcsname%
+ %
+ \expandafter\let\expandafter\n@to@pp@saved@fill@color%
+ \csname\string\color@pgffillcolor\endcsname%
+ %
+ \expandafter\pgf@setfillcolor\n@to@pp@saved@stroke@color%
+ %
+ % \message{^^J=== Set fill to stroke color
+ % ^^J Old fill: \meaning\n@to@pp@saved@fill@color
+ % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color}
+}
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@restore@fill{%
+ % \message{^^J=== Restore fill color
+ % ^^J Old fill: \meaning\n@to@pp@saved@fill@color
+ % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color}
+ %
+ \ifx\n@to@pp@saved@fill@color\relax\else%
+ \expandafter\pgf@setfillcolor\n@to@pp@saved@fill@color%
+ \fi%
+ \global\let\n@to@pp@saved@fill@color\relax
+ \global\let\n@to@pp@saved@stroke@color\relax
+}
+% \end{macrocode}
+%
+% We also make an environment, just to simplify the use
+%
+% \begin{macrocode}
+\newenvironment{n@to@pp@stroketofill}{%
+ \pgfscope%
+ \n@to@pp@stroke@to@fill%
+}{%
+ \n@to@pp@restore@fill%
+ \endpgfscope%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Faction names as macros}
+%
+% \begin{macrocode}
+\def\n@to@pp@friendly{friendly}
+\def\n@to@pp@hostile{hostile}
+\def\n@to@pp@neutral{neutral}
+\def\n@to@pp@unknown{unknown}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Node shapes}
+%
+% Here we define bases for all commands and affiliations. These are
+% defined as node shapes. This means we will render the NATO App6(c)
+% symbols as nodes with embedded nodes of the relevant shape.
+%
+%
+%
+% \input{natoapp6c/frames/base.dtx}
+% \input{natoapp6c/frames/friendly.dtx}
+% \input{natoapp6c/frames/hostile.dtx}
+% \input{natoapp6c/frames/neutral.dtx}
+% \input{natoapp6c/frames/unknown.dtx}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \input{natoapp6c/echelon.dtx}
+% \input{natoapp6c/text.dtx}
+% \input{natoapp6c/shape.dtx}
+% \input{natoapp6c/util.dtx}
+% \input{natoapp6c/weaponry.dtx}
+% \input{natoapp6c/symbols.dtx}
+% \input{natoapp6c/list.dtx}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx b/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
new file mode 100644
index 0000000000..a63be2ae47
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
@@ -0,0 +1,82 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Echelons}
+%
+%
+% Dimensions
+%
+% \begin{macrocode}
+\def\n@to@pp@e@y{.12}
+\def\n@to@pp@e@yy{.24}
+% \end{macrocode}
+%
+% Paths as macros
+%
+% \begin{macrocode}
+\def\n@to@pp@e@d#1{($(#1*\n@to@pp@e@y,0)$) circle(0.09)}
+\def\n@to@pp@e@b#1{%
+ ($(#1*\n@to@pp@e@y,-\n@to@pp@e@y)$) -- ($(#1*\n@to@pp@e@y,\n@to@pp@e@y)$)}
+\def\n@to@pp@e@x#1{%
+ ($(-\n@to@pp@e@y,-\n@to@pp@e@y)+(#1*\n@to@pp@e@y,0)$)--
+ ++(\n@to@pp@e@yy,\n@to@pp@e@yy)
+ ($(-\n@to@pp@e@y, \n@to@pp@e@y)+(#1*\n@to@pp@e@y,0)$)--
+ ++(\n@to@pp@e@yy,-\n@to@pp@e@yy)}
+% \end{macrocode}
+%
+% Pictures
+%
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/echelon/.is choice,
+ pics/natoapp6c/s/echelon/squad/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/section/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/platoon/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/company/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/battalion/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/regiment/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/brigade/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/division/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/corps/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/army/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-3,-1,1,3}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/army group/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-4,-2,0,2,4}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/theatre/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-5,-3,-1,1,3,5}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/command/.style={code={
+ \path[draw,pic actions]
+ (-.3,-.1) -- (-.3,.1) (-.4, 0) -- (-.2, 0)
+ ( .3,-.1) -- ( .3,.1) ( .4, 0) -- ( .2, 0);}},
+ pics/natoapp6c/s/echelon/dummy/.style={code={%
+ \path[draw,pic actions] (M.north west) rectangle
+ ($(M.north east)+(0,.1)$);}},
+}
+% \end{macrocode}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
new file mode 100644
index 0000000000..614bf8f95c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
@@ -0,0 +1,70 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+%
+% First, the generic bounding box symbol for all markers.
+%
+% \begin{NatoAppFrame}{natoapp6c base}
+%
+% Place-holder symbol. This shape will form the basis of many of
+% the other frame shapes. We define the relevant sizes and
+% anchors.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c base}{%
+ \saveddimen\radius{\pgf@x=\n@to@pp@r}
+ \saveddimen\liney{\pgf@x=.2cm}
+ \saveddimen\linex{\pgf@x=0.41cm}
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedanchor\upper{\pgf@x=0cm\pgf@y=0.35cm}
+ \anchor{north east}{\pgf@x=\radius\pgf@y=\radius}
+ \anchor{south west}{\pgf@x=-\radius\pgf@y=-\radius}
+ \anchor{north west}{\pgf@x=-\radius\pgf@y=\radius}
+ \anchor{south east}{\pgf@x=\radius\pgf@y=-\radius}
+ \anchor{south}{\pgf@x=0cm\pgf@y=-\radius}
+ \anchor{north}{\pgf@x=0cm\pgf@y=\radius}
+ \anchor{west}{\pgf@x=-\radius\pgf@y=0cm}
+ \anchor{east}{\pgf@x=\radius\pgf@y=0cm}
+ \anchor{center}{\center}
+ \anchor{upper}{\upper}
+ \anchor{lower}{\upper\pgf@y=-\pgf@y}
+ \anchor{left}{\upper\pgf@x=-\pgf@y\pgf@y=0cm}
+ \anchor{right}{\upper\pgf@x=\pgf@y\pgf@y=0cm}
+ \savedmacro\init{
+ \def\octagon{%
+ \pgfpathmoveto{\pgfqpointpolar{0} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{45} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{90} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{135}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{180}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{225}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{270}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{315}{\radius}}%
+ \pgfpathclose}
+ \def\topline{%
+ \pgfpathmoveto{\pgfqpoint{\linex}{\liney}}%
+ \pgfpathlineto{\pgfqpoint{-\linex}{\liney}}}
+ \def\bottomline{%
+ \pgfpathmoveto{\pgfqpoint{\linex}{-\liney}}%
+ \pgfpathlineto{\pgfqpoint{-\linex}{-\liney}}}
+ }
+ \backgroundpath{%
+ \init%
+ \octagon}
+ \behindforegroundpath{%
+ \init%
+ \octagon%
+ \pgfusepath{stroke}%
+ \topline%
+ \pgfusepath{stroke}%
+ \bottomline%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
new file mode 100644
index 0000000000..d8d0c4fba7
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
@@ -0,0 +1,427 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Friendly' node shapes}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly air}
+%
+% Macro for friendly air shape
+%
+% \begin{macrocode}
+\def\n@to@friendly@@ir{%
+ \southeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \cntrl \wg@tmpb=\pgf@y%
+ \pgfpatharc{180}{0}{\wg@tmpa and \wg@tmpb}}
+% \end{macrocode}
+%
+% The friendly air command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\southeast{%
+ \pgf@x=1.1\n@to@pp@r%
+ \pgf@y=-\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=0cm\pgf@y=2.6\n@to@pp@r}
+ \savedanchor\north{\pgf@x=0cm\pgf@y=1.6\n@to@pp@r}
+ \anchor{south east}{\southeast}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=\wg@tmpa}
+ \anchor{north west}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=-\wg@tmpa}
+ \anchor{north}{\north}
+ \anchor{east}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{south}{\southeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@@ir%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@@ir%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly land}
+%
+% Macro for friendly land command
+%
+% \begin{macrocode}
+\def\n@to@friendly@l@nd{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath}
+% \end{macrocode}
+%
+% The friendly land command. The most used command frame.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.5\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@l@nd%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly activity}
+%
+% The friendly activity command. Similar to land command, but with
+% boxes in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly activity}{%
+ \inheritsavedanchors[from=natoapp6c friendly land]
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritanchor[from=natoapp6c friendly land]{inner north east}
+ \inheritanchor[from=natoapp6c friendly land]{inner north west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south east}
+ \inheritanchor[from=natoapp6c friendly land]{north east}
+ \inheritanchor[from=natoapp6c friendly land]{north west}
+ \inheritanchor[from=natoapp6c friendly land]{south east}
+ \inheritanchor[from=natoapp6c friendly land]{south west}
+ \inheritanchor[from=natoapp6c friendly land]{north}
+ \inheritanchor[from=natoapp6c friendly land]{west}
+ \inheritanchor[from=natoapp6c friendly land]{east}
+ \inheritanchor[from=natoapp6c friendly land]{south}
+ \inheritanchor[from=natoapp6c friendly land]{upper}
+ \inheritanchor[from=natoapp6c friendly land]{lower}
+ \inheritanchor[from=natoapp6c friendly land]{left}
+ \inheritanchor[from=natoapp6c friendly land]{right}
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpa\advance\wg@tmpc-\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\n@to@pp@act@w
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpd}}%
+ \pgfclosepath
+ %
+ \pgfusepath{fill}%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly equipment}
+%
+% The friendly equipment command. A circle.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly equipment}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \northeast\wg@tmpa\pgf@x%
+ \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg@tmpa}
+ }
+ \behindforegroundpath{%
+ \northeast\wg@tmpa\pgf@x%
+ \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg@tmpa}
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly installation}
+%
+% The friendly installation command. Similar to the land command, but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly installation}{%
+ \inheritsavedanchors[from=natoapp6c friendly land]
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritanchor[from=natoapp6c friendly land]{inner north east}
+ \inheritanchor[from=natoapp6c friendly land]{inner north west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south east}
+ \inheritanchor[from=natoapp6c friendly land]{north east}
+ \inheritanchor[from=natoapp6c friendly land]{north west}
+ \inheritanchor[from=natoapp6c friendly land]{south east}
+ \inheritanchor[from=natoapp6c friendly land]{south west}
+ \inheritanchor[from=natoapp6c friendly land]{north}
+ \inheritanchor[from=natoapp6c friendly land]{west}
+ \inheritanchor[from=natoapp6c friendly land]{east}
+ \inheritanchor[from=natoapp6c friendly land]{south}
+ \inheritanchor[from=natoapp6c friendly land]{upper}
+ \inheritanchor[from=natoapp6c friendly land]{lower}
+ \inheritanchor[from=natoapp6c friendly land]{left}
+ \inheritanchor[from=natoapp6c friendly land]{right}
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@y%
+ \wg@tmpb=\wg@tmpa\advance\wg@tmpb\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly sea surface}
+%
+% The friendly sea surface command. Same as equipment command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly sea surface}{%
+ \inheritsavedanchors[from=natoapp6c friendly equipment]
+ \inheritanchor[from=natoapp6c friendly equipment]{inner north east}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner north west}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner south west}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner south east}
+ \inheritanchor[from=natoapp6c friendly equipment]{north east}
+ \inheritanchor[from=natoapp6c friendly equipment]{north west}
+ \inheritanchor[from=natoapp6c friendly equipment]{south east}
+ \inheritanchor[from=natoapp6c friendly equipment]{south west}
+ \inheritanchor[from=natoapp6c friendly equipment]{north}
+ \inheritanchor[from=natoapp6c friendly equipment]{west}
+ \inheritanchor[from=natoapp6c friendly equipment]{east}
+ \inheritanchor[from=natoapp6c friendly equipment]{south}
+ \inheritanchor[from=natoapp6c friendly equipment]{upper}
+ \inheritanchor[from=natoapp6c friendly equipment]{lower}
+ \inheritanchor[from=natoapp6c friendly equipment]{left}
+ \inheritanchor[from=natoapp6c friendly equipment]{right}
+ \inheritanchor[from=natoapp6c friendly equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly equipment]
+ \inheritbehindforegroundpath[from=natoapp6c friendly equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly space}
+%
+% The friendly space command. Similar to air command, but with a
+% bar on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly space}{%
+ \inheritsavedanchors[from=natoapp6c friendly air]
+ \inheritanchor[from=natoapp6c friendly air]{north east}
+ \inheritanchor[from=natoapp6c friendly air]{north west}
+ \inheritanchor[from=natoapp6c friendly air]{south east}
+ \inheritanchor[from=natoapp6c friendly air]{south west}
+ \inheritanchor[from=natoapp6c friendly air]{north}
+ \inheritanchor[from=natoapp6c friendly air]{west}
+ \inheritanchor[from=natoapp6c friendly air]{east}
+ \inheritanchor[from=natoapp6c friendly air]{south}
+ \inheritanchor[from=natoapp6c friendly air]{upper}
+ \inheritanchor[from=natoapp6c friendly air]{lower}
+ \inheritanchor[from=natoapp6c friendly air]{left}
+ \inheritanchor[from=natoapp6c friendly air]{right}
+ \inheritanchor[from=natoapp6c friendly air]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@@ir%
+ \pgfusepath{stroke,clip}%
+ %
+ \cntrl\wg@tmpa=\pgf@y%
+ \north\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly sub surface}
+%
+% Macro for friendly sub surface command
+%
+% \begin{macrocode}
+\def\n@to@friendly@sub{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \cntrl \wg@tmpb=\pgf@y%
+ \pgfpatharc{180}{0}{\wg@tmpa and \wg@tmpb}}
+% \end{macrocode}
+%
+% The friendly sub surface command.
+%
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly sub surface}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.1\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=0cm\pgf@y=-2.6\n@to@pp@r}
+ \savedanchor\south{\pgf@x=0cm\pgf@y=-1.6\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=\wg@tmpa}
+ \anchor{south west}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=-\wg@tmpa}
+ \anchor{south}{\south}
+ \anchor{east}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@sub%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@sub%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
new file mode 100644
index 0000000000..c3df3f6525
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
@@ -0,0 +1,453 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Hostile' node shapes}
+%
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile air}
+%
+% The hostile air command
+%
+%
+% Macro for hostile air shape
+%
+%
+% \begin{macrocode}
+\def\n@to@hostile@@ir{%
+ \southeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \cntrl \wg@tmpc=\pgf@y%
+ \north \wg@tmpd=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+}
+% \end{macrocode}
+%
+%
+% The hostile air command.
+%
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\southeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=-\n@to@pp@r}
+ \savedanchor\cntrl{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=0.414\n@to@pp@r% (sqrt(2)-1)
+ }
+ \savedanchor\north{\pgf@x=0cm\pgf@y=1.414\n@to@pp@r}
+ \anchor{south east}{\southeast}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=\wg@tmpa}
+ \anchor{north west}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=-\wg@tmpa}
+ \anchor{north}{\north}
+ \anchor{east}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{south}{\southeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@@ir%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@@ir%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile land}
+%
+% Macro for hostile land command
+%
+% \begin{macrocode}
+\def\n@to@hostile@l@nd{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ 0cm}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ 0cm}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpb}}%
+ \pgfclosepath}
+% \end{macrocode}
+%
+% The hostile land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.414\n@to@pp@r%
+ \pgf@y=1.414\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@l@nd%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile activity}
+%
+% The hostile activity command. Similar to land command, but with
+% boxes in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile activity}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpb=\pgf@y%
+ \wg@tmpa=0.707\n@to@pp@act@w
+ \wg@tmpc=\wg@tmpb\advance\wg@tmpc-1.414\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\wg@tmpa
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpc}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpd}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpb}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpd}{-\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpb}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpd}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpd}{-\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile equipment}
+%
+% The hostile equipment command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile equipment}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \inheritbehindforegroundpath[from=natoapp6c hostile land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile installation}
+%
+% The hostile installation command. Similar to land command, but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile installation}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpb
+ \advance\wg@tmpc\n@to@pp@inst@h%
+ \advance\wg@tmpc-0.05cm%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{0cm}}
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpc}}
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{0cm}}
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpb}}
+ \pgfclosepath%
+ \pgfusepath{clip}
+ %
+ \wg@tmpd=\wg@tmpb%
+ \advance\wg@tmpd-\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile sea surface}
+%
+% The hostile sea surface command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile sea surface}{%
+ \inheritsavedanchors[from=natoapp6c hostile equipment]
+ \inheritanchor[from=natoapp6c hostile equipment]{inner north east}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner north west}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner south west}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner south east}
+ \inheritanchor[from=natoapp6c hostile equipment]{north east}
+ \inheritanchor[from=natoapp6c hostile equipment]{north west}
+ \inheritanchor[from=natoapp6c hostile equipment]{south east}
+ \inheritanchor[from=natoapp6c hostile equipment]{south west}
+ \inheritanchor[from=natoapp6c hostile equipment]{north}
+ \inheritanchor[from=natoapp6c hostile equipment]{west}
+ \inheritanchor[from=natoapp6c hostile equipment]{east}
+ \inheritanchor[from=natoapp6c hostile equipment]{south}
+ \inheritanchor[from=natoapp6c hostile equipment]{upper}
+ \inheritanchor[from=natoapp6c hostile equipment]{lower}
+ \inheritanchor[from=natoapp6c hostile equipment]{left}
+ \inheritanchor[from=natoapp6c hostile equipment]{right}
+ \inheritanchor[from=natoapp6c hostile equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile equipment]
+ \inheritbehindforegroundpath[from=natoapp6c hostile equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile space}
+%
+% The hostile space command. Similar to air command, but with bar on
+% top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile space}{%
+ \inheritsavedanchors[from=natoapp6c hostile air]
+ \inheritanchor[from=natoapp6c hostile air]{north east}
+ \inheritanchor[from=natoapp6c hostile air]{north west}
+ \inheritanchor[from=natoapp6c hostile air]{south east}
+ \inheritanchor[from=natoapp6c hostile air]{south west}
+ \inheritanchor[from=natoapp6c hostile air]{north}
+ \inheritanchor[from=natoapp6c hostile air]{west}
+ \inheritanchor[from=natoapp6c hostile air]{east}
+ \inheritanchor[from=natoapp6c hostile air]{south}
+ \inheritanchor[from=natoapp6c hostile air]{upper}
+ \inheritanchor[from=natoapp6c hostile air]{lower}
+ \inheritanchor[from=natoapp6c hostile air]{left}
+ \inheritanchor[from=natoapp6c hostile air]{right}
+ \inheritanchor[from=natoapp6c hostile air]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@@ir%
+ \pgfusepath{stroke,clip}%
+ %
+ \north\wg@tmpa=\pgf@y\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile sub surface}
+%
+% Macro for hostile sub surface command
+%
+% \begin{macrocode}
+\def\n@to@hostile@sub{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \cntrl \wg@tmpc=\pgf@y%
+ \south \wg@tmpd=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+}
+% \end{macrocode}
+%
+% The hostile sub surface command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile sub surface}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=\n@to@pp@r\pgf@y=-0.414\n@to@pp@r}
+ \savedanchor\south{\pgf@x=0cm\pgf@y=-1.414\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=\wg@tmpa}
+ \anchor{south west}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=-\wg@tmpa}
+ \anchor{south}{\south}
+ \anchor{east}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@sub%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@sub%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
new file mode 100644
index 0000000000..b0b18780a9
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
@@ -0,0 +1,405 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Neutral' node shapes}
+%
+%
+% Macro for neutral shapes
+%
+% \begin{macrocode}
+\def\n@to@pp@neutr@l@init{%
+ \northeast\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \def\n@to@pp@neutr@l@left {\pgflineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@right {\pgflineto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@top {\pgflineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@bottom{\pgflineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@nw {\pgfmoveto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@ne {\pgfmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@se {\pgfmoveto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@sw {\pgfmoveto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}}%
+}
+% \end{macrocode}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral air}
+%
+% The neutral air command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{\pgf@x=\n@to@pp@r\pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral land}
+%
+% The neutral land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral land}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral activity}
+%
+% The neutral activity command. Similar to land command but with
+% boxes added in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral activity}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpa\advance\wg@tmpc-\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\n@to@pp@act@w
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral equipment}
+%
+% The neutral equipment command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral equipment}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \inheritbehindbackgroundpath[from=natoapp6c neutral land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral installation}
+%
+% The neutral installation command. Similar to land command but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral installation}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@y%
+ \wg@tmpb=\wg@tmpa\advance\wg@tmpb\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral sea surface}
+%
+% The neutral sea surface command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral sea surface}{%
+ \inheritsavedanchors[from=natoapp6c neutral equipment]
+ \inheritanchor[from=natoapp6c neutral equipment]{inner north east}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner north west}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner south west}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner south east}
+ \inheritanchor[from=natoapp6c neutral equipment]{north east}
+ \inheritanchor[from=natoapp6c neutral equipment]{north west}
+ \inheritanchor[from=natoapp6c neutral equipment]{south east}
+ \inheritanchor[from=natoapp6c neutral equipment]{south west}
+ \inheritanchor[from=natoapp6c neutral equipment]{north}
+ \inheritanchor[from=natoapp6c neutral equipment]{west}
+ \inheritanchor[from=natoapp6c neutral equipment]{east}
+ \inheritanchor[from=natoapp6c neutral equipment]{south}
+ \inheritanchor[from=natoapp6c neutral equipment]{upper}
+ \inheritanchor[from=natoapp6c neutral equipment]{lower}
+ \inheritanchor[from=natoapp6c neutral equipment]{left}
+ \inheritanchor[from=natoapp6c neutral equipment]{right}
+ \inheritanchor[from=natoapp6c neutral equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral equipment]
+ \inheritbehindforegroundpath[from=natoapp6c neutral equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral space}
+%
+% The neutral space command. Similar to air command but with a
+% bar.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral space}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \pgfusepath{stroke}%
+ %
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \northeast\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral sub surface}
+%
+% The neutral sub surface command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral sub surface}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@nw
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \n@to@pp@neutr@l@right%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@nw
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \n@to@pp@neutr@l@right%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
new file mode 100644
index 0000000000..e6bd3aec38
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
@@ -0,0 +1,483 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Unknown' node shapes}
+%
+%
+% Macro to define unknown path elements
+%
+% \begin{macrocode}
+\def\n@to@pp@unknown@init{%
+ \def\n@to@pp@unknown@top{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{ \wg@tmpa}{\wg@tmpb}}{%
+ \pgfqpoint{-\wg@tmpa}{\wg@tmpb}}{%
+ \pgfqpoint{-\wg@tmpa}{\wg@tmpa}}}
+ \def\n@to@pp@unknown@left{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{-\wg@tmpb}{ \wg@tmpa}}{%
+ \pgfqpoint{-\wg@tmpb}{-\wg@tmpa}}{%
+ \pgfqpoint{-\wg@tmpa}{-\wg@tmpa}}}
+ \def\n@to@pp@unknown@bottom{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}{%
+ \pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}{%
+ \pgfqpoint{ \wg@tmpa}{-\wg@tmpa}}}
+ \def\n@to@pp@unknown@right{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{ \wg@tmpb}{-\wg@tmpa}}{%
+ \pgfqpoint{ \wg@tmpb}{ \wg@tmpa}}{%
+ \pgfqpoint{ \wg@tmpa}{ \wg@tmpa}}}
+}
+% \end{macrocode}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown land}
+%
+% The unknown land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\innernortheast{\pgf@x=.7\n@to@pp@r\pgf@y=.7\n@to@pp@r}
+ \savedanchor\cntrlnortheast{\pgf@x=1.6\n@to@pp@r\pgf@y=1.6\n@to@pp@r}
+ \savedanchor\northeast{\pgf@x=1.4\n@to@pp@r\pgf@y=1.4\n@to@pp@r}
+ \anchor{inner north east}{\innernortheast}
+ \anchor{inner north west}{\innernortheast\pgf@x=-\pgf@x}
+ \anchor{inner south west}{\innernortheast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{inner south east}{\innernortheast\pgf@y=-\pgf@y}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{center}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke}}
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown air}
+%
+% The unknown air command. To consider: Should clipping path extend
+% below the actual symbol to include that part of the base symbol?
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown air}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \anchor{south}{\innernortheast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{south east}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=-\pgf@y
+ \pgf@x=\wg@tmpa}
+ \anchor{south west}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=-\pgf@y
+ \pgf@x=-\wg@tmpa}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \ifn@to@pp@isclip
+ \pgfpathlineto{\pgfqpoint{0cm}{-\radius}}
+ \pgfpathclose
+ \fi
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown activity}
+%
+% The unknown activity command. Similar to land command, but with
+% boxes in the the `corners'.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown activity}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \behindforegroundpath{
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke,clip}
+ %
+ \northeast\wg@tmpa\pgf@x
+ \advance\wg@tmpa0.005cm
+ \wg@tmpb=\wg@tmpa
+ \advance\wg@tmpb-\n@to@pp@act@w
+ \wg@tmpc=\n@to@pp@act@w
+ \divide\wg@tmpc2
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpc}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpc}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpc}{-\wg@tmpa}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpb}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpb}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpb}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpb}{-\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown equipment}
+%
+% The unknown equipment command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown equipment}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \inheritbehindforegroundpath[from=natoapp6c unknown land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown installation}
+%
+% The unknown installation command. Similar to land command, but
+% with a `hat' on top. Note, NATO App6(d) makes the `hat' lower
+% part disconnected from the main symbol. I find that ugly, so we
+% do it like NATO App6(c).
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown installation}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \behindforegroundpath{
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke}
+ %
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@top %
+ %
+ \northeast\wg@tmpb=\pgf@y\wg@tmpc=\pgf@y%
+ \advance\wg@tmpb\n@to@pp@inst@h%
+ \advance\wg@tmpb-0.05cm%
+ \advance\wg@tmpc-\n@to@pp@inst@h%
+ \advance\wg@tmpc-\n@to@pp@inst@h%
+ %
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{clip}%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown sea surface}
+%
+% The unknown sea surface command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown sea surface}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \inheritbehindforegroundpath[from=natoapp6c unknown land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown space}
+%
+% The unknown space command. Similar to air command, but with a top
+% bar.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown space}{%
+ \inheritsavedanchors[from=natoapp6c unknown air]
+ \inheritanchor[from=natoapp6c unknown air]{inner north east}
+ \inheritanchor[from=natoapp6c unknown air]{inner north west}
+ \inheritanchor[from=natoapp6c unknown air]{inner south west}
+ \inheritanchor[from=natoapp6c unknown air]{inner south east}
+ \inheritanchor[from=natoapp6c unknown air]{north east}
+ \inheritanchor[from=natoapp6c unknown air]{north west}
+ \inheritanchor[from=natoapp6c unknown air]{south east}
+ \inheritanchor[from=natoapp6c unknown air]{south west}
+ \inheritanchor[from=natoapp6c unknown air]{north}
+ \inheritanchor[from=natoapp6c unknown air]{west}
+ \inheritanchor[from=natoapp6c unknown air]{east}
+ \inheritanchor[from=natoapp6c unknown air]{south}
+ \inheritanchor[from=natoapp6c unknown air]{upper}
+ \inheritanchor[from=natoapp6c unknown air]{lower}
+ \inheritanchor[from=natoapp6c unknown air]{left}
+ \inheritanchor[from=natoapp6c unknown air]{right}
+ \inheritanchor[from=natoapp6c unknown air]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown air]
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \pgfusepath{stroke,clip}%
+ %
+ \northeast\wg@tmpa=\pgf@y\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \radius}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\radius}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\radius}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \radius}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown sub surface}
+%
+% The unknown sub surface command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown sub surface}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \anchor{north}{\innernortheast\pgf@x=0cm}
+ \anchor{north east}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=\pgf@y
+ \pgf@x=\wg@tmpa}
+ \anchor{north west}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=\pgf@y
+ \pgf@x=-\wg@tmpa}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom %
+ \n@to@pp@unknown@right %
+ \ifn@to@pp@isclip
+ \pgfpathlineto{\pgfqpoint{0cm}{\radius}}
+ \pgfpathclose
+ \fi
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom %
+ \n@to@pp@unknown@right %
+ \pgfusepath{stroke}}
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/list.dtx b/macros/latex/contrib/wargame/source/natoapp6c/list.dtx
new file mode 100644
index 0000000000..0500f01326
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/list.dtx
@@ -0,0 +1,266 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \begin{Macro}{\n@to@pp@s@ll}
+%
+% A list of all defined symbols
+%
+% \begin{macrocode}
+\def\n@to@pp@s@ll{
+ weapon=base,
+ weapon=top,
+ weapon=bottom,
+ weapon=rifle,
+ weapon=machine gun,
+ weapon=grenade launcher,
+ weapon=missile launcher,
+ weapon=non lethal,
+ weapon=multi fire,
+ weapon=air defence,
+ weapon=anti tank,
+ weapon=full,
+ weapon,
+ type=light,
+ type=medium,
+ type=heavy,
+ type=vlight,
+ type=vmedium,
+ type=vheavy,
+ type,
+ above corps support,
+ air assault with organic lift,
+ air decoy,
+ air assault,
+ air defence,
+ air strip,
+ air traffic,
+ airship,
+ airborne,
+ ammunition,
+ amphibious,
+ amphibious warfare ship,
+ analysis,
+ arrest,
+ artillery,
+ anti tank anti armour,
+ antenna,
+ armoured,
+ armoured fighting vehicle,
+ armoured personnel carrier,
+ arctic,
+ automobile,
+ balloon,
+ bar,
+ base,
+ bicycle equipped,
+ boat,
+ booby trap,
+ bottomed,
+ bridge=none,
+ bridge=fixed,
+ bridge=folding,
+ bridge=hollow,
+ bridge,
+ capsule,
+ carrier,
+ chemical biological radiological nuclear,
+ civilian military cooperation,
+ civilian police,
+ civilian telecommunications,
+ coast guard vessel,
+ combat support,
+ combatant,
+ combined arms,
+ computer system,
+ control,
+ convoy,
+ corps support,
+ crime,
+ decoy,
+ direct communications,
+ direction finding,
+ diving=none,
+ diving=military,
+ diving,
+ drilling,
+ earthmover,
+ electric power,
+ electronic ranging,
+ electronic warfare wide,
+ engineer,
+ enhanced location reporting system,
+ environmental protection,
+ explosion,
+ finance,
+ fishing vessel,
+ fire protection,
+ fixed and rotary wing,
+ fixed wing,
+ flame thrower,
+ floating,
+ surfaced,
+ food,
+ fuel,
+ grenade launcher=none,
+ grenade launcher=non lethal,
+ grenade launcher,
+ graffiti,
+ group,
+ gun=base,
+ gun=air defence,
+ gun=anti tank,
+ gun=direct,
+ gun=recoilless,
+ gun,
+ headquarters,
+ house,
+ howitzer,
+ in position,
+ individual,
+ infantry,
+ intermodal,
+ jagged wave,
+ jam,
+ jamming,
+ jetski,
+ killing,
+ labour,
+ land mine=personnel,
+ land mine=tank,
+ land mine=none,
+ land mine,
+ land missile,
+ laser,
+ launcher,
+ laundry,
+ machine gun,
+ main gun,
+ maintenance,
+ medic,
+ medical,
+ medical treatment,
+ mine,
+ mine clearing equipment,
+ mine warfare vessel,
+ missile,
+ missile launcher=base,
+ missile launcher=none,
+ missile launcher=air defence,
+ missile launcher=anti tank,
+ missile launcher=surface to surface,
+ missile launcher,
+ mobile advisor and support,
+ moored,
+ mortar,
+ motorized,
+ mortuary affairs,
+ mountain,
+ naval,
+ navigation,
+ navy task,
+ non combatant,
+ non lethal weapon,
+ nuclear,
+ observer,
+ orbiter shuttle,
+ ordnance,
+ organisation,
+ over snow,
+ pack animal,
+ patrol,
+ patrolling,
+ physician,
+ pipeline,
+ poisoning,
+ postal,
+ printed media,
+ psychological,
+ quarry,
+ quartermaster,
+ radar,
+ radio,
+ radio relay,
+ radio relay line of sight,
+ radio teletype,
+ railroad,
+ reconnaissance,
+ recovery unmanned systems,
+ rifle,
+ rising,
+ riverine,
+ rocket launcher=base,
+ rocket launcher=anti tank,
+ rocket launcher=single,
+ rocket launcher=multiple,
+ rocket launcher=single head,
+ rocket launcher=multiple head,
+ rocket launcher,
+ rotary wing,
+ runway,
+ sailing boat,
+ satellite=none,
+ satellite=astronomical,
+ satellite=bio,
+ satellite=communications,
+ satellite=navigation,
+ satellite=earth observing,
+ satellite=tether,
+ satellite=small,
+ satellite=reconnaissance,
+ satellite,
+ sea mine=top half,
+ sea mine=bottom half,
+ sea mine=full,
+ sea mine=neutralised,
+ sea mine=neutralized,
+ sea mine,
+ seabed installation,
+ search,
+ searching,
+ semi trailer truck,
+ sensor,
+ ship,
+ signal,
+ signals intelligence,
+ ski,
+ sled,
+ small squashed text=TXT,
+ small text=TXT,
+ sniper,
+ space station,
+ squashed text=TXT,
+ submarine,
+ submersible,
+ supply,
+ surface combatant,
+ survey,
+ tactical satellite,
+ tank,
+ text=TXT,
+ topographic,
+ torpedo,
+ towed,
+ tracked,
+ train locomotive,
+ transportation,
+ unexploded ordnance,
+ unmanned,
+ utility vehicle,
+ vehicle,
+ video imagery,
+ warfare vessel,
+ water,
+ wheeled=and tracked,
+ wheeled=limited,
+ wheeled=cross country,
+ wheeled=semi,
+ wheeled
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
new file mode 100644
index 0000000000..029be911b7
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
@@ -0,0 +1,647 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Text \texttt{natoapp6c} namespace}
+%
+% \begin{NatoAppKey}{/natoapp6c}
+%
+% Here, we set up the key path \spec{/natoapp6c}
+%
+% \begin{macrocode}
+\def\natoapp@report{}
+\tikzset{
+ /natoapp6c/.search also={/tikz},
+ /natoapp6c/.cd,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \subsubsubsection{Choices of faction, command, and echelon}
+%
+% \begin{NatoAppKey}{natoapp6c/id,
+% natoapp6c/fac,
+% natoapp6c/cmd,
+% natoapp6c/ech}
+%
+% The keys \spec{id}, spec{fac}, \spec{cmd}, and \spec{ech} are
+% internal keys used to store the choice of faction, command, and
+% echelon, respectively, in.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ id/.store in=\natoapp@id,
+ fac/.store in=\natoapp@fac,
+ cmd/.store in=\natoapp@cmd,
+ ech/.store in=\natoapp@ech,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/faction}
+%
+% Choice of \meta{faction}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/fac}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ faction/.is choice,
+ faction/none/.code={\let\natoapp@fac\@undefined},
+ faction/friendly/.style={fac=friendly},
+ faction/friend/.style={fac=friendly},
+ faction/hostile/.style={fac=hostile},
+ faction/enemy/.style={fac=hostile},
+ faction/neutral/.style={fac=neutral},
+ faction/unknown/.style={fac=unknown},
+ faction/?/.style={fac=unknown},
+ faction/.initial=friendly,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/command}
+%
+% Choice of \meta{command}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/cmd}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ command/.is choice,
+ command/base/.style={cmd=base},
+ command/activity/.style={cmd=activity},
+ command/air/.style={cmd=air},
+ command/missile/.style={cmd=air},
+ command/equipment/.style={cmd=equipment},
+ command/installation/.style={cmd=installation},
+ command/land/.style={cmd=land},
+ command/sea surface/.style={cmd=sea surface},
+ command/space/.style={cmd=space},
+ command/sub surface/.style={cmd=sub surface},
+ command/sea mine/.style={cmd=sub surface},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/echolon}
+%
+% Unit size. The choice is limited to one of the below. The choice
+% is stored in the key \spec{natoapp6c/ech}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ echelon/.is choice,
+ echelon/none/.style={ech=},
+ echelon/team/.style={ech=},
+ echelon/squad/.style={ech=squad},
+ echelon/section/.style={ech=section},
+ echelon/platoon/.style={ech=platoon},
+ echelon/company/.style={ech=company},
+ echelon/battalion/.style={ech=battalion},
+ echelon/regiment/.style={ech=regiment},
+ echelon/brigade/.style={ech=brigade},
+ echelon/division/.style={ech=division},
+ echelon/corps/.style={ech=corps},
+ echelon/army/.style={ech=army},
+ echelon/army group/.style={ech=army group},
+ echelon/theatre/.style={ech=theatre},
+ echelon/command/.style={ech=command},
+ echelon/dummy/.style={ech=dummy},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/main,
+% natoapp6c/left,
+% natoapp6c/right,
+% natoapp6c/top,
+% natoapp6c/bottom,
+% natoapp6c/below,
+% natoapp6c/frame}
+% \begin{Macro}{\natoapp@main,
+% \natoapp@left,
+% \natoapp@right,
+% \natoapp@upper,
+% \natoapp@lower,
+% \natoapp@below}
+%
+% The various parts of the symbols. The keys \spec{upper} and
+% \spec{lower} are aliases for \spec{top} and \spec{bottom},
+% respectively. The choices are stored in macros
+%
+% \begin{macrocode}
+\newif\ifnatoapp@decoy\natoapp@decoyfalse
+\tikzset{
+ /natoapp6c/.cd,
+ main/.store in=\natoapp@main, main/.initial=,%
+ left/.store in=\natoapp@left, left/.initial=,%
+ right/.store in=\natoapp@right, right/.initial=,%
+ upper/.store in=\natoapp@upper, upper/.initial=,%
+ lower/.store in=\natoapp@lower, lower/.initial=,%
+ top/.store in=\natoapp@upper,%
+ bottom/.store in=\natoapp@lower,%
+ below/.store in=\natoapp@below, below/.initial=,%
+ frame/.store in=\natoapp@frame, frame/.initial=,%
+ decoy/.is if=natoapp@decoy,%
+}
+% \end{macrocode}
+% \end{Macro}
+% \end{NatoAppKey}
+%
+% \begin{TikzKey}{/tikz/natoapp6c/main,
+% /tikz/natoapp6c/modifiers,
+% /tikz/natoapp6c/lower,
+% /tikz/natoapp6c/upper,
+% /tikz/natoapp6c/left,
+% /tikz/natoapp6c/right,
+% /tikz/natoapp6c/echelon,
+% /tikz/natoapp6c/below}
+%
+% Styles used by the various parts of the symbol.
+%
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/parts/.style={draw,shape=rectangle,transform shape},
+ natoapp6c/main/.style={natoapp6c/parts},
+ natoapp6c/modifiers/.style={natoapp6c/parts,scale=.6},
+ natoapp6c/lower/.style={natoapp6c/parts},
+ natoapp6c/upper/.style={natoapp6c/parts},
+ natoapp6c/left/.style={natoapp6c/parts},
+ natoapp6c/right/.style={natoapp6c/parts},
+ natoapp6c/echelon/.style={natoapp6c/parts},
+ natoapp6c/below/.style={natoapp6c/parts}
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{The \texttt{natoapp6c} styles}
+%
+% \begin{TikzKey}{/tikz/natoapp6c}
+% This key sets up a node to make a NATO App6(c) symbol. The key
+% takes a single argument which in turn must contain key--value
+% pairs in the \texttt{/natoapp6c} (or \texttt{/tikz}) namespace(s). We
+% set the \texttt{shape} parameter of the node, and calls the passed
+% keys in the \texttt{/natoapp6c} namespace to set-up elements of the
+% chit.
+%
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/.code={%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=natoapp6c}
+ \pgfkeys{/natoapp6c/.cd,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% We define a counter to set-up unique names for symbol nodes.
+%
+% \begin{macrocode}
+\newcounter{natoappid}\setcounter{natoappid}{0}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp6c} shape}
+%
+% \begin{Macro}{\ifn@to@pp@below,\ifn@to@pp@mod}
+%
+% We define an \cs{if} to allow us to detect if something is
+% rendered below the frame
+%
+% \begin{macrocode}
+\newif\ifn@to@pp@below\n@to@pp@belowfalse%
+\newif\ifn@to@pp@mod\n@to@pp@modfalse%
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{NatoAppFrame}{natoapp6c}
+%
+% Next, we define the mother shape of NATO App6(c) nodes. This is a
+% composite node with sub-nodes for the various parts (including the
+% frame) of the symbol.
+%
+% It is quite complex so we will go through the implementation in
+% bits.
+%
+% First, we make some saved anchors (the centre) and macros
+% (identifier, frame type, and frame options).
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c}{%
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedmacro\id{%
+ \n@to@pp@dbg{3}{NATO App6(c) id (set): \meaning\natoapp@id}
+ \@ifundefined{natoapp@id}{\let\natoapp@id\pgfutil@empty}{}%
+ \ifx\natoapp@id\pgfutil@empty\relax%
+ \wg@r@ndom@id%
+ \edef\id{natoapp6c\wg@uuid}%
+ \else%
+ \edef\id{\natoapp@id}%
+ \fi%
+ \n@to@pp@dbg{3}{NATO App6(c) id: \meaning\id}}
+ \savedmacro\frameshape{%
+ \let\frameshape\pgfutil@empty%
+ \@ifundefined{natoapp@cmd}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@cmd}
+ \@ifundefined{natoapp@fac}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@fac\space\frameshape}}}
+ \n@to@pp@dbg{3}{NATO App6(c) frame shape: \meaning\frameshape}}
+ \savedmacro\frameopt{%
+ \let\frameopt\pgfutil@empty%
+ \@ifundefined{natoapp@frame}{}{%
+ \edef\frameopt{\natoapp@frame}}
+ \n@to@pp@dbg{3}{NATO App6(c) Frame options: \meaning\frameopt}%
+ }
+% \end{macrocode}
+%
+% Then we define a number of regular anchors
+%
+% \begin{macrocode}
+ \anchor{center} {\center}
+% \end{macrocode}
+%
+% The remaining anchors depend on the shape being used. We reference
+% the anchors of the embedded node of the frame.
+%
+% \begin{macrocode}
+ \anchor{north east}{\wg@sub@nchor{M\id}{north east}}
+ \anchor{north west}{\wg@sub@nchor{M\id}{north west}}
+ \anchor{south east}{\wg@sub@nchor{M\id}{south east}}
+ \anchor{south west}{\wg@sub@nchor{M\id}{south west}}
+ \anchor{north} {\wg@sub@nchor{M\id}{north}}
+ \anchor{west} {\wg@sub@nchor{M\id}{west}}
+ \anchor{south} {\wg@sub@nchor{M\id}{south}}
+ \anchor{east} {\wg@sub@nchor{M\id}{east}}
+ \anchor{upper} {\wg@sub@nchor{M\id}{upper}}
+ \anchor{lower} {\wg@sub@nchor{M\id}{lower}}
+ \anchor{left} {\wg@sub@nchor{M\id}{left}}
+ \anchor{right} {\wg@sub@nchor{M\id}{right}}
+% \end{macrocode}
+%
+% The next two anchors are a little funny.
+%
+% \begin{macrocode}
+ \anchor{echelon} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get echelon anchor}%
+ \wg@sub@nchor{M\id}{north}%
+ \wg@tmpa=\n@to@pp@e@y cm%
+ \advance\pgf@y\wg@tmpa%
+ }%
+ \anchor{below} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get below anchor}%
+ \wg@sub@nchor{M\id}{south}
+ \wg@tmpa=\n@to@pp@e@yy cm%
+ \advance\pgf@y-\wg@tmpa}
+% \end{macrocode}
+%
+% All right, so time to make the actual frame. Note that we do this
+% in a `behind' path so we can actually draw stuff. First, we flag
+% that we're not in a modifier, nor in the `below' part.
+%
+% \begin{macrocode}
+ \behindbackgroundpath{%
+ \n@to@pp@dbg{3}{NATO App6(c) background path: \meaning\id
+ ^^J ID: \meaning\natoapp@id
+ ^^J Faction: \meaning\natoapp@fac
+ ^^J Command: \meaning\natoapp@cmd
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Main: \meaning\natoapp@main
+ ^^J Left: \meaning\natoapp@left
+ ^^J Right: \meaning\natoapp@right
+ ^^J Upper: \meaning\natoapp@upper
+ ^^J Lower: \meaning\natoapp@lower
+ ^^J Below: \meaning\natoapp@below
+ ^^J Shape: \meaning\frameshape
+ ^^J Options: \meaning\frameopt}
+ \natoapp@report
+ \n@to@pp@modfalse
+ \n@to@pp@belowfalse
+% \end{macrocode}
+%
+% If the symbol is empty, then do nothing.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame!}
+ \else
+% \end{macrocode}
+%
+% We start a scope because we want to do some clipping here. Then, we
+% use the frame to clip the remaining part. Note that we do this via
+% a node which we give the identifier \spec{M}. Various elements of
+% the symbol can then refer to this shape to define paths, etc.
+%
+% \begin{macrocode}
+ \begin{scope}
+ \pgfinterruptboundingbox
+ %% Clip to shape in scope
+ %% \message{^^JClipping to NATO App6(c) shape}
+ \n@to@pp@iscliptrue%
+ \n@to@pp@dbg{2}{NATO App6(c) frame node M (clip)}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M}{\pgfusepath{clip}}
+ \n@to@pp@isclipfalse%
+% \end{macrocode}
+%
+% Next, we should see if we need to fill the frame. We do that by
+% expanding the passed \spec{frame} key-values in a scope, and
+% \emph{then} get the fill colour.
+%
+% \begin{macrocode}
+ %% Start new scope including frame key options
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+ % Get fill color {possibly from frame key}
+ \expandafter\let\expandafter\tmp@fill%
+ \csname\string\color@pgffillcolor\endcsname%
+% \end{macrocode}
+%
+% If the fill colour is not \cs{relax}, then we fill the frame. Note
+% that this is done in the background, so when we draw in the
+% foreground we will render on top of the fill.
+%
+% \begin{macrocode}
+ % Check if we need to fill shape (fill colour us not \relax)
+ \ifx\tmp@fill\relax\else%
+ \n@to@pp@dbg{2}{NATO App6(c) frame fill}
+ \pgfnode{natoapp6c \frameshape}{center}{}{}{\pgfusepath{fill}}%
+ \fi%
+ % End the fill scope
+ \endscope%
+% \end{macrocode}
+%
+% Now we need to render some of the elements of the symbol. We start
+% with the main elements. We can specify many main elements (to make
+% composite symbols).
+%
+% \begin{macrocode}
+ % Render mains
+ \@ifundefined{natoapp@main}{}{
+ \n@to@pp@dbg{2}{NATO App6(c) mains: \meaning\natoapp@main}
+ \begin{scope}[natoapp6c/main]
+ \wg@pic@all{\natoapp@main}{natoapp6c/s/}{M.center}{natoapp6c/main}%
+ \end{scope}}%
+ % Modififiers flagged
+% \end{macrocode}
+%
+% The next thing is to render the various modifiers. We start by
+% flagging this globally.
+%
+% \begin{macrocode}
+ \n@to@pp@modtrue
+ \n@to@pp@dbg{2}{NATO App6(c) modifiers}
+% \end{macrocode}
+%
+% Below we render the lower, upper, left, and right elements. This is
+% all done in the same way. Note that the elements positions are
+% dictated by anchors of the frame shape (via shape identifier
+% \spec{M}).
+%
+% \begin{macrocode}
+ % Render lowers
+ \@ifundefined{natoapp@lower}{}{%
+ \begin{scope}%
+ \wg@pic@all{\natoapp@lower}{natoapp6c/s/}{M.lower}{%
+ natoapp6c/modifiers,natoapp6c/lower}%
+ \end{scope}}%
+ % Render uppers
+ \@ifundefined{natoapp@upper}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@upper}{natoapp6c/s/}{M.upper}{%
+ natoapp6c/modifiers,natoapp6c/upper}%
+ \end{scope}}%
+ % Render lefts
+ \@ifundefined{natoapp@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@left}{natoapp6c/s/}{M.left}{%
+ natoapp6c/modifiers,natoapp6c/left}%
+ \end{scope}}%
+ % Render rights
+ \@ifundefined{natoapp@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@right}{natoapp6c/s/}{M.right}{%
+ natoapp6c/modifiers,natoapp6c/right}%
+ \end{scope}}%
+ % Modififiers end
+ \n@to@pp@modfalse%
+ \endpgfinterruptboundingbox
+ \end{scope}%
+ \fi%
+ }
+% \end{macrocode}
+%
+% That concludes rendering most of the symbol. We have not put in the
+% echelon, below element, or drawn the frame yet. That we will do on
+% the foreground path.
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% In the foreground `behind' path we render the echelon, below
+% element, and draw the frame.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \n@to@pp@dbg{2}{NATO App6(c) foreground path:
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Symbol: \meaning\frameshape
+ ^^J Below: \meaning\natoapp@below
+ ^^J Frame: \meaning\frameopt}
+ %
+% \end{macrocode}
+%
+% We check if we have a frame. If not, stop.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame shape!}%
+ \else%
+% \end{macrocode}
+%
+% We want to draw the rest of the symbol as a part of the frame, so we
+% expand the \spec{frame} options in a scope.
+%
+% \begin{macrocode}
+
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+% \end{macrocode}
+%
+% First thing in this scope is to draw the actual frame. Again, this
+% is done via a node with the right shape. Note that we label this
+% node as \spec{M}\meta{id} so we way refer to it later on.
+%
+% \begin{macrocode}
+ \n@to@pp@dbg{2}{NATO App6(c) inner node `M\id' ===}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M\id}{\pgfusepath{stroke}}
+% \end{macrocode}
+%
+% If the user gave an echelon, then put that in. Note that echelons
+% are limited to predefined values.
+%
+% \begin{macrocode}
+ % Put in the echelon
+ \@ifundefined{natoapp@ech}{}{%
+ \ifx\natoapp@ech\pgfutil@empty\else%
+ \def\args{echelon=\natoapp@ech}
+ \expandafter\wg@pic\args\@endwg@pic%
+ {natoapp6c/s/}{$(M.north)+(0,1.2*\n@to@pp@e@y)$}{natoapp6c/echelon}
+ \fi%
+ }
+% \end{macrocode}
+%
+% If the user want something under the frame, put that in.
+%
+% \begin{macrocode}
+ % Put in stuff below main
+ \@ifundefined{natoapp@below}{}{%
+ \n@to@pp@belowtrue
+ \begin{scope}
+ \wg@pic@all{\natoapp@below}{natoapp6c/s/}{%
+ $(M.south)+(0,-\n@to@pp@e@yy)$}{%
+ natoapp6c/below}%
+ \end{scope}%
+ \n@to@pp@belowfalse}
+% \end{macrocode}
+%
+% If the \spec{decoy} flag was set, we draw that.
+%
+% \begin{macrocode}
+ \ifnatoapp@decoy%
+ \scope[dash pattern=on 3\pgflinewidth off 2\pgflinewidth]%
+ \n@to@pp@dbg{1}{Drawing decoy modifier}%
+ \wg@sub@nchor{M\id}{north east}
+ \wg@tmpa=\pgf@x%
+ \wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpc=\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\wg@tmpb%
+ \pgfpathlineto{\pgfqpoint{0cm}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfusepath{stroke}%
+ \endscope%
+ \fi%
+ \endscope%
+ \fi%
+ }
+}
+% \end{macrocode}
+%
+% That finished the shape for NATO App6(c) symbols. We could stop
+% here, but for convenience we define a wrapper macro.
+%
+% \end{NatoAppFrame}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp} wrapper macro}
+%
+% \begin{Macro}{\natoapp}
+%
+% This is a wrapper macro for inserting a node with a NATO App6(c)
+% symbol in it. The syntax of the macro is
+%
+% \begin{Syntax}
+% \cs{natoapp}\oarg{natoapp6c options}\parg{position}\parg{identifier};
+% \end{Syntax}
+%
+% Note that the trailing semi-colon (\spec{;}) is optional.
+%
+% This macro forwards to \cs{n@toapp}.
+%
+% \begin{macrocode}
+\newcommand\natoapp[1][]{%
+ \n@to@pp@dbg{2}{NATO App6(c) macro -> `#1'}
+ \tikzset{/natoapp6c/.cd,faction=friendly,command=land}%
+ \@ifnextchar({\n@toapp{#1}}{\n@toapp{#1}(0,0)}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n@toapp}
+%
+% This macro takes care to parse the location argument --- if any.
+% It forwards to \cs{n@to@pp}.
+%
+% \begin{macrocode}
+\def\n@toapp#1(#2){%
+ \n@to@pp@dbg{2}{NATO App6(c) second macro -> `#1', `#2'}
+ \@ifnextchar({\n@to@pp{#1}{#2}}{\n@to@pp{#1}{#2}()}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n@to@pp}
+% This is the main work-horse of the wrapper. It makes a node with
+% the shape \spec{natoapp6c} passing the relevant parameters. The
+% syntax of the macro is
+%
+% \begin{macrocode}
+\def\n@to@pp#1#2(#3){%
+ %\let\name\pgfutil@empty%
+ %\ifx|#3|\else\edef\name{(#3)}\fi%
+ %\n@to@pp@dbg{3}{Arguments: #1}%
+ %\edef\args{[natoapp6c={#1},transform shape] \name at (#2) {}}
+ %\expandafter\node\args;%
+ \node[draw,transform shape,natoapp6c={#1}] (#3) at (#2) {};%
+ \@ifnextchar;{\@gobble}{}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Macros for markings}
+%
+% \begin{Macro}{\natoappmark}
+%
+% A macro for making NATO App6(c) markings.
+%
+% \begin{macrocode}
+\providecommand\natoappmark[2][]{%
+ \tikz[scale=.25,#1]{\natoapp[faction=friendly,command=land,main=#2]}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\echelonmark}
+% \begin{macrocode}
+\providecommand\echelonmark[2][]{\tikz[scale=.5,#1]{%
+ \pic[scale line widths,line width=1pt] {natoapp6c/s/echelon=#2};}}
+% \end{macrocode}
+% \end{Macro}
+%
+% Some specific NATO App6(c) markers.
+%
+% \begin{macrocode}
+\DeclareRobustCommand\armouredmark[1][]{\natoappmark[#1]{armoured}}
+\DeclareRobustCommand\infantrymark[1][]{\natoappmark[#1]{infantry}}
+\DeclareRobustCommand\artillerymark[1][]{%
+ \natoappmark[#1]{{[fill=pgfstrokecolor]artillery}}}
+\DeclareRobustCommand\combinedmark[1][]{\natoappmark[#1]{combined arms}}
+\DeclareRobustCommand\pgmark[1][] {\natoappmark[#1]{{armoured,infantry}}}
+\DeclareRobustCommand\reconnaissancemark[1][]{\natoappmark[#1]{reconnaissance}}
+\DeclareRobustCommand\corpsmark[1][]{\natoappmark[#1]{,echelon=corps}}
+\DeclareRobustCommand\divisionmark[1][]{\natoappmark[#1]{,echelon=division}}
+\DeclareRobustCommand\brigademark[1][] {\natoappmark[#1]{,echelon=brigade}}
+\DeclareRobustCommand\regimentmark[1][]{\natoappmark[#1]{,echelon=regiment}}
+\DeclareRobustCommand\sofmark[1][] {\natoappmark[#1]{{infantry,text=SOF}}}
+\DeclareRobustCommand\mountaineermark[1][]{%
+ \natoappmark[#1]{infantry,lower=mountain}}
+\DeclareRobustCommand\airbornemark[1][]{%
+ \natoappmark[#1]{infantry,lower=airborne}}
+\DeclareRobustCommand\amphibiousmark[1][]{\natoappmark[#1]{,lower=amphibious}}
+\DeclareRobustCommand\airassaultmark[1][]{%
+ \natoappmark[#1]{infantry,upper=air assault}}
+% \end{macrocode}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx b/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
new file mode 100644
index 0000000000..19b41da5cf
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
@@ -0,0 +1,3165 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{The symbols}
+%
+% Next, we define all the symbols. Note that we define them all as if
+% they are in the \spec{main} section of the symbol, since \spec{top},
+% \spec{bottom}, and \spec{below} symbols are automatically scaled.
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/above corps support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/above corps support/.pic={%
+ \edef\n@toapp@path{\n@toapp@corps@support{\natoapp@fac}}
+ \expandafter\path[draw] \n@toapp@path;
+ \expandafter\path[draw,xscale=-1] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air assault with organic lift}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air assault with organic lift/.pic={%
+ \ifx\n@to@pp@hostile\natoapp@fac%
+ \def\n@toapp@path{(-.75,-.2)--(-.15,-.2)--(0,-.5)--(.15,-.2)--(.75,-.2)}
+ \else
+ \def\n@toapp@path{(-.75,-.2)--(-.1,-.2)--(0,-.325)--(.1,-.2)--(.75,-.2)}
+ \fi
+ \path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air decoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air decoy/.pic={%
+ \pic[pic actions]{natoapp6c/s/decoy};
+ \path[fill=pgfstrokecolor,pic actions] (0.4, -0.2) rectangle (-0.4, -0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air assault}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air assault/.pic={%
+ \path[draw] ([shift={(150:.4)}]0,-.1)--(0,-.1)--([shift={(30:.4)}]0,-.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air defence}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air defence/.pic={%
+ \ifx\natoapp@fac\n@to@pp@friendly%
+ \def\n@toapp@opt{[out=90,in=90,looseness=.675]}%
+ \else\ifx\natoapp@fac\n@to@pp@neutral%
+ \def\n@toapp@opt{[out=90,in=90,looseness=1]}%
+ \else%
+ \def\n@toapp@opt{[out=45,in=135,looseness=1.5]}%
+ \fi\fi%
+ \edef\n@toapp@path{(M.south west) to\n@toapp@opt (M.south east)}
+ \path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air strip}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air strip/.pic={%
+ \path[fill=pgfstrokecolor] (-.4,-.1) rectangle(.4,0);
+ \path[rotate=45,fill=pgfstrokecolor] (-.4,0) rectangle (.4,.1);
+ }
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air traffic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air traffic/.pic={
+ \path[fill=pgfstrokecolor]
+ (0.33,0.21)--
+ (0.33, -0.21)--
+ (-0.33, 0.21)--
+ (-0.33,-0.21)--
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/airship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/airship/.pic={%
+ % \path (0.45, 0.175) rectangle (-0.45, -0.175);
+ \path[pic actions] (0, 0) ellipse (0.45 and 0.15);
+ \begin{scope}
+ \clip (0, 0) ellipse (0.45 and 0.15) [reverseclip];
+ \path[pic actions]
+ (0.2,0)--(0.3,0.175)--(0.4,0.175)--(0.375,0)
+ --(0.4,-0.175)--(0.3, -0.175)--cycle;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/airborne}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/airborne/.pic={%
+ \ifx\n@to@pp@neutral\natoapp@fac%
+ \draw (0,-0.05) arc(0:180:0.15);
+ \draw (0,-0.05) arc(180:0:0.15);
+ \else%
+ \draw (0,-0.05) arc(0:180:0.2);
+ \draw (0,-0.05) arc(180:0:0.2);
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ammunition}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ammunition/.pic={\path[draw]
+ (0.175,-0.175)--(-0.175,-0.175)
+ (0.125,-0.175)--(0.125, 0) to[out=90,in=90,looseness=2.75]
+ (-0.125, 0)--(-0.125, -0.175);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/amphibious}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/amphibious/.pic={
+ \def\n@to@pp@tmp{0}
+ \ifn@to@pp@below\def\n@to@pp@tmp{-.1}\fi
+ \ifn@to@pp@mod
+ \path[draw,shift={(0,\n@to@pp@tmp)}](1.21,0)
+ to[out=-90,in=-90, looseness=2.25] (1.05, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.89, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.73, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.57, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.41, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.25, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.08, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.08, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.25, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.41, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.57, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.73, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.89, 0)
+ to[out= 90,in= 90, looseness=2.25] (-1.05, 0)
+ to[out=-90,in=-90, looseness=2.25] (-1.21, 0)
+ \else
+ \path[draw,shift={(0,\n@to@pp@tmp)}](0.73, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.57, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.41, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.25, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.08, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.08, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.25, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.41, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.57, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.73, 0)
+ \fi
+ ;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/amphibious warfare ship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/amphibious warfare ship/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (0.15, 0.05) --
+ (0.15, 0.2) --
+ (-0.15, 0.2) --
+ (-0.15, 0.05) -- cycle
+ (0, -0.2) rectangle (0.25, -0.175);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/analysis}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/analysis/.pic={
+ \path[pic actions]
+ (-0.3,-0.2)--(0.3,-0.2)--(0, -0.4)--cycle (0,-0.2)--(0,0.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/arrest}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/arrest/.pic={
+ \path[pic actions] circle(0.2);
+ \pic[scale=.8]{natoapp6c/s/individual};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/artillery}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/artillery/.pic={
+ \path[pic actions] circle(0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/anti tank anti armour}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/anti tank anti armour/.pic={%
+ \ifx\natoapp@fac\n@to@pp@unknown%
+ \path[draw,pic actions] (225:.5)--(M.north)--(315:.5);
+ \else%
+ \path[draw,pic actions] (M.south west)--(M.north)--(M.south east);%
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/antenna}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/antenna/.pic={\path[draw]
+ (0, -0.3) -- (0, 0.3) (-0.125, 0.3) -- (0, 0.2) -- (0.125, 0.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured/.pic={\path[draw]
+ (-0.275,0.2) arc(90:270:0.2)--(0.275, -0.2) arc(270:450:0.2)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured fighting vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured fighting vehicle/.pic={
+ \path[fill=pgfstrokecolor] (-.4,-.2) rectangle (-.3,.2) (.3,-.2) rectangle (.4,.2);
+ \path[pic actions] (-.3,0) -- (0,.2) -- (.3,0) -- (0,-.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured personnel carrier}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured personnel carrier/.pic={
+ \pic[sub pic actions,draw]{natoapp6c/s/vehicle};
+ \path[pic actions] (.35,.15)--(0,.3)--(-.35,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/arctic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/arctic/.pic={
+ \draw (-0.325,0.135) arc(180:270:0.075 and 0.15) --
+ +(0.5, 0) arc(-90:0:0.075 and 0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/automobile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/automobile/.pic={
+ \begin{scope}
+ \clip (0.2,-0.15) circle(0.05) (-0.2,-0.15) circle(0.05) [reverseclip];
+ \path[pic actions]
+ (0.3, -0.15) --
+ (-0.3, -0.15) --
+ (-0.3, 0.025) --
+ (-0.1, 0.025) --
+ (-0.1, 0.2) --
+ ( 0.1, 0.2) --
+ ( 0.1, 0.025) --
+ ( 0.3, 0.025) -- cycle
+ ( 0.075, 0.025) rectangle (-0.075, 0.175);
+ \end{scope}
+ \path[pic actions]
+ ( 0.2, -0.15) circle (0.05)
+ (-0.2, -0.15) circle (0.05);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/balloon}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/balloon/.pic={%
+ \path[pic actions] (0, 0.025) circle (0.175);
+ \begin{scope}
+ \clip (0, 0.025) circle (0.175) [reverseclip];
+ \path[pic actions] (-0.05,0) rectangle (0.05,-0.2)--(0.05,0);
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bar}
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/bar/.pic={
+ \path[fill=pgfstrokecolor] (-.3,-.1) rectangle (.3,.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/base}
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/base/.pic={
+ \path[pic actions] circle(.2);
+ \path[pic actions]
+ (-.2,0) -- (.2,0)
+ ( 0,-.2) -- (0 ,.2)
+ (225:.2) -- (45:.2)
+ (135:.2) -- (-45:.2);
+ }
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bicycle equipped}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/bicycle equipped/.pic={\draw(0,0) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/boat}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/boat/.pic={
+ \path[pic actions]
+ (-0.2, -0.2) --
+ ( 0.2, -0.2) --
+ ( 0.35, 0.05) --
+ (-0.15, 0.05) --
+ (-0.075, 0.2) --
+ (-0.175, 0.2) --
+ (-0.25, 0.05) --
+ (-0.35, 0.05) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/booby trap}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/booby trap/.pic={
+ \path[draw] (0, -0.2) ellipse(0.2 and 0.065);
+ \begin{scope}
+ \clip (0, -0.2) ellipse(0.2 and 0.065) [reverseclip];
+ \path[draw] (-0.2, -0.2) -- (0, 0.2) -- (0.2, -0.2);
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bottomed}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/bottomed/.pic={
+ \path[draw,fill=pgfstrokecolor] (-0.33,.1) rectangle(0.33,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bridge}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/bridge/.is choice,
+ pics/natoapp6c/s/bridge/none/.style={
+ code={\path[pic actions]
+ (0.35,-0.15)--(0.25,-0.05)--(-0.25,-0.05)--(-0.35,-0.15)
+ (0.35, 0.15)--(0.25, 0.05)--(-0.25, 0.05)--(-0.35, 0.15);}},
+ pics/natoapp6c/s/bridge/fixed/.style={
+ code={\pic{natoapp6c/s/bridge};\pic{natoapp6c/s/type=vlight};}},
+ pics/natoapp6c/s/bridge/folding/.style={
+ code={\pic{natoapp6c/s/bridge=none};
+ \path[draw] (.1,-.2) -- (-.1,-.2) -- (-.1,.2) -- (.1,.2);}},
+ pics/natoapp6c/s/bridge/hollow/.style={
+ code={\pic{natoapp6c/s/bridge=none};
+ \path[draw] (.1,-.2) -- (-.1,-.2) -- (-.1,.2) -- (.1,.2) -- cycle;}},
+ pics/natoapp6c/s/bridge/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/capsule}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/capsule/.pic={
+ \path[pic actions]
+ ($(0.25, -0.2)!0.1!(0, 0.5)$) --
+ ($(0.25, -0.2)!0.5!(0, 0.5)$) to[in=75, out=105, looseness=0.75]
+ ($(0, 0.5)!0.5!(-0.25, -0.2)$) --
+ ($(0, 0.5)!0.9!(-0.25, -0.2)$) to[in=285, out=255, looseness=0.55]
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/carrier}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/carrier/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (-0.15, 0.05) --
+ (-0.15, 0.2) --
+ (-0.3, 0.2) --
+ (-0.3, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/chemical biological radiological nuclear}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/chemical biological radiological nuclear/.pic={
+ \path[draw,fill=pgfstrokecolor] (-0.29,0.1) circle(0.096) (0.29,0.1) circle(0.096);
+ \path[pic actions] (0.15,-0.2) arc(0:90:0.45 and 0.375)
+ (-0.15,-0.2) arc(180:90:0.45 and 0.375);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian military cooperation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian military cooperation/.pic={%
+ \path[draw] (.375,.2)--(-.375,.2)--(-.375,-.025)
+ to[in=270, out=270, looseness=0.75] (.375,-.025)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian police}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian police/.pic={%
+ \path[draw] (0.225, 0.2)
+ to[in=270, out=270, looseness=3] (-0.225, 0.2)
+ to [in=270, out=270, looseness=1.5] (0,0.2)
+ to [in=270, out=270, looseness=1.5] (0.225, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian telecommunications}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian telecommunications/.pic={
+ \path[draw] (0.075, -0.2){[line join=bevel] -- (0, 0.1) -- (-0.075, -0.2)}
+ (0.065, -0.05) -- (-0.065, -0.05)
+ (-0.325, 0.2) -- (-0.15, 0.125) -- (-0.15, 0.175) -- (0, 0.1) -- (0.15, 0.175) -- (0.15, 0.125) -- (0.325, 0.2);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/coast guard vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/coast guard vessel/.pic={%
+ \pic[draw] {natoapp6c/s/ship};
+ \path[pic actions] (0.15, 0.05) -- (0, -0.2) (0.2, 0.05)--(0.05, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combat support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combat support/.pic={%
+ \path[fill=pgfstrokecolor]
+ (.15,.2)--(-.15,.2)--(-.15,-.05)--(0,-.2)--(.15,-.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combatant/.pic={%
+ \begin{scope}[xshift=-4.5, yshift=-5]
+ \path[pic actions]
+ (0.3213,0.0534) .. controls (0.3186,0.0295) and (0.3072,0.0136) ..
+ (0.2925,0.0063) .. controls (0.2777,-0.0010) and (0.2605,0.0001) ..
+ (0.2461,0.0068) .. controls (0.2317,0.0136) and (0.2198,0.0265) ..
+ (0.2163,0.0433) .. controls (0.2147,0.0513) and (0.2150,0.0601) ..
+ (0.2179,0.0694) .. controls (0.1304,0.1129) and (0.0223,0.1961) ..
+ (0.0013,0.3209) .. controls (0.0601,0.1809) and (0.1770,0.0912) ..
+ (0.3213,0.0534) -- cycle
+ (0.2304,0.0633) .. controls (0.2287,0.0570) and (0.2287,0.0513) ..
+ (0.2298,0.0461) .. controls (0.2323,0.0340) and (0.2409,0.0245) ..
+ (0.2520,0.0193) .. controls (0.2630,0.0141) and (0.2760,0.0135) ..
+ (0.2864,0.0186) .. controls (0.2932,0.0220) and (0.2992,0.0277) ..
+ (0.3033,0.0370) .. controls (0.2845,0.0413) and (0.2597,0.0498) ..
+ (0.2304,0.0633) -- cycle
+ (0.1785,0.1137) .. controls (0.2446,0.1612) and (0.3061,0.2300) ..
+ (0.3214,0.3209) .. controls (0.2864,0.2377) and (0.2310,0.1723) ..
+ (0.1614,0.1249)
+ (0.1443,0.1138) .. controls (0.1011,0.0871) and (0.0530,0.0670) ..
+ (0.0014,0.0535) .. controls (0.0041,0.0295) and (0.0154,0.0136) ..
+ (0.0302,0.0063) .. controls (0.0449,-0.0010) and (0.0621,0.0001) ..
+ (0.0765,0.0069) .. controls (0.0909,0.0137) and (0.1028,0.0265) ..
+ (0.1063,0.0433) .. controls (0.1079,0.0513) and (0.1076,0.0602) ..
+ (0.1047,0.0694) .. controls (0.1230,0.0785) and (0.1422,0.0893) ..
+ (0.1613,0.1019)
+ (0.0928,0.0461) .. controls (0.0903,0.0340) and (0.0816,0.0245) ..
+ (0.0706,0.0193) .. controls (0.0596,0.0141) and (0.0466,0.0135) ..
+ (0.0362,0.0186) .. controls (0.0294,0.0220) and (0.0234,0.0277) ..
+ (0.0193,0.0370) .. controls (0.0381,0.0413) and (0.0629,0.0498) ..
+ (0.0921,0.0633) --
+ (0.0921,0.0633) .. controls (0.0938,0.0570) and (0.0938,0.0512) ..
+ (0.0928,0.0461) -- cycle;
+ \end{scope}
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combined arms}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combined arms/.pic={%
+ \path[draw] pic {natoapp6c/s/armoured};
+ \path[draw] (0.275, 0.2) -- (-0.275, -0.2) (0.275, -0.2) -- (-0.275, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/computer system}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/computer system/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (-.3, .28) rectangle ( .3, .3)
+ (-.3, -.18) rectangle ( .3, -.2)
+ (-.3, -.18) rectangle (-.3, .28)
+ ( .3, -.18) rectangle ( .3, .28)
+ (-.3, -.3) rectangle ( .3, -.28)
+ (-.05,-.28) rectangle ( .05,-.18);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/control}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/control/.pic={
+ \path[pic actions]
+ [{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}]
+ (0, .2) -- (0, -.2);
+ \path[pic actions]
+ [{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}]
+ (-.2, 0) -- (.2, 0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/convoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/convoy/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (0.35, 0.175) --
+ (-0.35, 0.175) --
+ (-0.35, -0.175) --
+ (-0.2, -0.175) --
+ (-0.2, 0.025) --
+ (0.2, 0.025) --
+ (0.2, -0.175) --
+ (0.35, -0.175) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/corps support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/corps support/.pic={%
+ \edef\n@toapp@path{\n@toapp@corps@support{\natoapp@fac}}
+ \expandafter\path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/crime}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/crime/.pic={\path[draw,dashed] (-.45,.25)--(.45,-.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/decoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/decoy/.pic={%
+ \path[fill=pgfstrokecolor,draw,yshift=1.5]
+ (0.2, 0) -- (0.4, 0.15) -- (0.4, -0.15) -- cycle
+ (-0.1, 0) -- (0.1, 0.15) -- (0.1, -0.15) -- cycle
+ (-0.4, 0) -- (-0.2, 0.15) -- (-0.2, -0.15) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/direct communications}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/direct communications/.pic={
+ \path[draw] (-.35,0) circle(.1) (.35,0) circle(.1);
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/intermodal};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/direction finding}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/direction finding/.pic={%
+ \path[draw] (-.3,.2)--(0,.4)--(.3,.2) (0,.4)--(0,-.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/diving}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/diving/.is choice,
+ pics/natoapp6c/s/diving/none/.style={
+ code={
+ \path[pic actions] (0,0) circle(.1) (0,0) circle(.25);
+ \begin{scope}
+ \clip (0,0) circle(.25) [reverseclip];
+ \path[pic actions] (-.3,-.1) rectangle(.3,.1)
+ (0,0) -- (-45:.4) -- (-135:.4) -- cycle;
+ \end{scope}}},
+ pics/natoapp6c/s/diving/military/.style={
+ code={
+ \begin{scope}[even odd rule]
+ \clip (0,0) circle(0.1)[reverseclip];
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/diving=none};
+ \end{scope}
+ \path[fill=pgfstrokecolor] (0,0) circle(0.08);
+ }},
+ pics/natoapp6c/s/diving/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/drilling}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/drilling/.pic={\path[fill=pgfstrokecolor]
+ (-0.1,-0.2) -- (0.1,-0.2) -- (0.2, 0.2) -- (-0.2, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/earthmover}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/earthmover/.pic={
+ \pic{natoapp6c/s/tank};
+ \path[pic actions] (.3,
+ .3)--(.175,.35)--(-.175,.35)--(-.3,.3)
+ (0,.2)--(0,.35);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electric power}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electric power/.pic={
+ \path[pic actions]
+ (-0.05, 0) .. controls(-0.06, 0.14) ..
+ ( 0, 0.09) .. controls( 0.03, 0.06) ..
+ ( 0, 0.06) .. controls(-0.03, 0.06) ..
+ ( 0, 0.09) .. controls( 0.06, 0.14) ..
+ (0.05, 0)
+ ($(-55:0.125) + (0, 0.075)$) arc(-55:235:0.125) arc(415:360:0.05) --
+ +(0, -0.08) arc(180:360:0.05035) --
+ +(0, 0.08) arc(180:125:0.05) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electronic ranging}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electronic ranging/.pic={%
+ \path[draw] (135:.225) arc (135:315:.225)--cycle (0,0)--(225:-.225);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electronic warfare wide}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electronic warfare wide/.pic={%
+ % OBS
+ \node[natoapp6c/text,natoapp6c/normal text] at(-.25,0){E};
+ \node[natoapp6c/text,natoapp6c/normal text] at(.25,0){W};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/engineer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/engineer/.pic={\path[draw]
+ (.4,-.2)--(.4,.2)--(-.4,.2)--(-.4,-.2) (0,.2)--(0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/enhanced location reporting system}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/enhanced location reporting system/.pic={\path[draw]
+ (0, -0.3) -- (0, 0.3) (-0.2, -.3) -- (0, 0.-.1) -- (0.2, -.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/environmental protection}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/environmental protection/.pic={%
+ \path[draw] (0, 0.2)
+ -- (0.1, 0.05)
+ -- (0.05, 0.05)
+ -- (0.15, -0.05)
+ -- (0.1, -0.05)
+ -- (0.2, -0.15)
+ -- (0.15, -0.15)
+ -- (0.05, -0.15)
+ -- (0.05, -0.2)
+ -- (-0.05, -0.2)
+ -- (-0.05, -0.15)
+ -- (-0.2, -0.15)
+ -- (-0.1, -0.05)
+ -- (-0.15, -0.05)
+ -- (-0.05, 0.05)
+ -- (-0.1, 0.05)
+ -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/explosion}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/explosion/.pic={%
+ \node [shape=rectangle,
+ starburst,
+ draw,
+ minimum width=0.9cm,
+ minimum height=0.9cm,
+ starburst point height=0.25cm,
+ starburst points=12] {};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/finance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/finance/.pic={%
+ \path[draw] (-.3,-.25) rectangle(.3,0)
+ (-.3,0) -- ++(60:.28) -- ([shift=(120:.28)].3,0) -- (.3,0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fishing vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fishing vessel/.pic={
+ \path[pic actions]
+ (-0.15, -0.2) --
+ ( 0.15, -0.2) --
+ ( 0.25, 0.025) --
+ (-0.05, 0.025) --
+ (-0.05, 0.125) --
+ (-0.2, 0.125) --
+ (-0.2, 0.025) --
+ (-0.25, 0.025) -- cycle
+ (0.025, 0.025) -- (0.025, 0.2)
+ (0.025, 0.025) -- +(45:0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fire protection}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fire protection/.pic={%
+ \path[fill=pgfstrokecolor] (0,0) circle(.2)
+ (0,0) -- (60:.3) -- (120:.3) -- cycle
+ (0,0) -- (-30:.3) -- (30:.3) -- cycle
+ (0,0) -- (150:.3) -- (210:.3) -- cycle
+ (0,0) -- (240:.3) -- (300:.3) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fixed and rotary wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fixed and rotary wing/.pic={%
+ \path[xscale=.45,yscale=.75,pic actions] pic {natoapp6c/s/fixed wing};
+ \path[yscale=.45,xscale=.7,rotate=90, pic actions] pic {
+ natoapp6c/s/rotary wing};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fixed wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fixed wing/.pic={
+ \path[pic actions]
+ (-0.36,0.125) arc (77:275:0.075 and 0.125) -- (0,0) -- cycle
+ ( 0.36,0.125) arc (-275:-77:-0.075 and 0.125) -- (0,0)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/flame thrower}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/flame thrower/.pic={
+ \path[pic actions]
+ (-0.1, -0.4) -- (-0.1, 0.3) to[out=90,in=90,looseness=2]
+ (0.1, 0.3) -- (0.1, 0.275);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/floating}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/floating/.pic={
+ \path[draw]
+ (-0.5, 0.100) --
+ (-0.417, 0.242) --
+ (-0.333, 0.100) --
+ (-0.250, 0.242) --
+ (-0.167, 0.100) --
+ (-0.083, 0.242) --
+ (0.0, 0.100) --
+ (0.083, 0.242) --
+ (0.167, 0.100) --
+ (0.250, 0.242) --
+ (0.333, 0.100) --
+ (0.417, 0.242) --
+ (0.5, 0.100);},
+ pics/natoapp6c/s/surfaced/.style=natoapp6c/s/floating,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/food}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/food/.pic={
+ \path[pic actions]
+ (0.075, 0.2) to[out=210, in=150, looseness=1]
+ (0.075, -0.2) to[out=180, in=180, looseness=1.5]
+ (0.075, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fuel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fuel/.pic={
+ \path[draw] (0,0) -- (135:.3) -- (45:.3) -- cycle (0,0) -- (0,-.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/grenade launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/grenade launcher/.is choice,%
+ pics/natoapp6c/s/grenade launcher/none/.style={%
+ code={%
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[draw]{natoapp6c/s/weapon=grenade launcher};}},%
+ pics/natoapp6c/s/grenade launcher/non lethal/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/non lethal weapon};
+ \pic[draw]{natoapp6c/s/weapon=grenade launcher};}},
+ pics/natoapp6c/s/grenade launcher/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/graffiti}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/graffiti/.pic={
+ \path[pic actions]
+ (0.05, 0.2)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ (-0.05, 0.2)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ arc (90:270:0.05)
+ arc (450:270:0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/group}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/group/.pic={
+ \path(-.23,.05) pic [draw,scale=.8] {natoapp6c/s/individual};
+ \path(0,-.05) pic [draw,scale=.8] {natoapp6c/s/individual};
+ \path(.23,.05) pic [draw,scale=.8] {natoapp6c/s/individual};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/gun}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/gun/.is choice,
+ pics/natoapp6c/s/gun/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/gun/air defence/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon=air defence};}},
+ pics/natoapp6c/s/gun/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon/anti tank};}},
+ pics/natoapp6c/s/gun/direct/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/gun/recoilless/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/gun/.default=direct,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/headquarters}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/headquarters/.pic={
+ \path[pic actions] (M.north west) -- ++(0,-.3) --
+ ([shift=(-90:.3)]M.north east) -- (M.north east) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/house}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/house/.pic={
+ \path[pic actions]
+ (-.125,-.175) rectangle (.125,.075)
+ (-.167,.075) -- (0,.225) -- (.167,.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/howitzer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/howitzer/.pic={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};
+ \pic[yshift=-8,draw]{natoapp6c/s/weapon=grenade launcher};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/in position}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/in position/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (-.3,-.01) rectangle (-.2,.01) (.2,-.01) rectangle (.3,.01);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/individual}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/individual/.pic={
+ \path[pic actions]
+ (0,.08) -- (0,-.3) (-.15,0) -- (.15,0) (0,.18) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/infantry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/infantry/.pic={
+ \path[draw] (-.75,.5) -- (.75,-.5) (-.75,-.5) -- (.75,.5);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/intermodal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/intermodal/.pic={
+ \path[pic actions]
+ ( 0.15, 0.025) --
+ (-0.15, 0.025) --
+ (-0.15, 0.075) --
+ (-0.25, 0) --
+ (-0.15, -0.075) --
+ (-0.15, -0.025) --
+ ( 0.15, -0.025) --
+ ( 0.15, -0.075) --
+ ( 0.25, 0) --
+ ( 0.15, 0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jagged wave}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jagged wave/.pic={
+ \draw (0.3, -0.05) --
+ (0.2, 0.05) --
+ (0.1, -0.05) --
+ (0, 0.05) --
+ (-0.1, -0.05) --
+ (-0.2, 0.05) --
+ (-0.3, -0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jam}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jam/.pic={%
+ \path[draw]
+ (0.75, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.65, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.55, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.45, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.35, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.25, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.15, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.05, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.05, 0)
+ to[out=90, in=90, looseness=2.25] (-0.15, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.25, 0)
+ to[out=90, in=90, looseness=2.25] (-0.35, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.45, 0)
+ to[out=90, in=90, looseness=2.25] (-0.55, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.65, 0)
+ to[out=90, in=90, looseness=2.25] (-0.75, 0)
+ ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jamming}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jamming/.pic={%
+ \path(0,.4) pic {natoapp6c/s/jam} (0,.26) pic {natoapp6c/s/jam};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jetski}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jetski/.pic={
+ \path[pic actions]
+ ( 0.3, -0.2) --
+ (-0.3, -0.2) --
+ (-0.35,-0.1) --
+ (-0.1, 0.2) --
+ ( 0, 0.2) --
+ ( 0, 0.1) --
+ (-0.05, 0.1) --
+ (-0.1, -0.05) --
+ ( 0.3, -0.05) --
+ ( 0.3, -0.2) -- cycle;
+},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/killing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/killing/.pic={\path[draw] (-.45,.25)--(.45,-.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/labour}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/labour/.pic={%
+ \path[draw] (-.15,.2) -- (.15,.2) (0,.2) -- (0,0)
+ (-.15,0) -- ++(300:.3) -- ++(60:.3) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/land mine}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/land mine/.is choice,
+ pics/natoapp6c/s/land mine/personnel/.style={
+ code={\pic[fill=pgfstrokecolor]{natoapp6c/s/land mine=none};
+ \path[pic actions] (135:0.35) -- (0, 0) -- (45:0.35);}},
+ pics/natoapp6c/s/land mine/tank/.style={
+ code={\pic[fill=pgfstrokecolor]{natoapp6c/s/land mine=none};}},
+ pics/natoapp6c/s/land mine/none/.style={
+ code={\path[pic actions] (0,0) circle(0.25);}},
+ pics/natoapp6c/s/land mine/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/land missile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/land missile/.pic={\pic{natoapp6c/s/missile launcher};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/laser}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/laser/.pic={
+ \path[draw,line join=round,line cap=round,pic actions]
+ ( 0.1, -0.25) --
+ (-0.1, -0.225) --
+ ( 0.1, -0.2) --
+ (-0.1, -0.175) --
+ ( 0.1, -0.15) --
+ ( 0, -0.1375) --
+ ( 0, -0.0125) --
+ (-0.1, 0) --
+ ( 0.1, 0.025) --
+ (-0.1, 0.05) --
+ ( 0.1, 0.075) --
+ ( 0, 0.0875) --
+ ( 0, 0.25)
+ ( 0.1, 0.2) --
+ ( 0, 0.25) --
+ (-0.1, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/launcher}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/launcher/.pic={
+ \path[draw] (-.3,-.2) -- (.3,.2) -- (.3,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/laundry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/laundry/.pic={%
+ \path[draw] (0,-.3) -- (0,.1)
+ (0,.1) -- ++(150:.25)
+ (0,.1) -- ++(180:.2)
+ (0,.1) -- ++(210:.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/machine gun}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/machine gun/.pic={%
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[draw]{natoapp6c/s/weapon=machine gun};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/main gun}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/main gun/.pic={
+ \path[pic actions] (M.north west) -- ++(.25,0) --
+ ([shift=(0:.25)]M.south west) -- (M.south west) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/maintenance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/maintenance/.pic={
+ \path[fill=pgfstrokecolor]
+ (-.38,.25)
+ to[out=0,in=90,looseness=1.5] (-.2,.05) -- (.2,.05)
+ to [out=90,in=180,looseness=1.5] (.38,.25) -- ++(0,-.08)
+ to [out=180,in=90,looseness=1.5] (.28,0)
+ to [out=-90,in=180,looseness=1.5] (.38,-.17) -- ++(0,-.08)
+ to [out=180,in=-90,looseness=1.5] (.2,-.05) -- (-.2,-.05)
+ to [out=-90,in=0,looseness=1.5] (-.38,-.25) -- ++(0,.08)
+ to [out=0,in=-90,looseness=1.5] (-.28,0)
+ to [out=90,in=0,looseness=1.5] (-.38,.17) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medic/.pic={
+ \path[pic actions]
+ (-0.075,-0.2)
+ --(0.075,-.2)
+ --(.075,-.075)
+ --(.2,-.075)
+ --(.2,.075)
+ --(.075,.075)
+ --(.075,.2)
+ --(-0.075,.2)
+ --(-0.075,.075)
+ --(-.2,.075)
+ --(-.2,-.075)
+ --(-.075,-.075)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medical}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medical/.pic={\path[draw] (-1,0) -- (1,0) (0,-1) -- (0,1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medical treatment}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medical treatment/.pic={
+ \path[draw] (0,0) pic {natoapp6c/s/medical}
+ ([xscale=.5,shift={(0,-.2)}]M.west) -- ([xscale=.5,shift={(0,.2)}]M.west)
+ ([xscale=.5,shift={(0,-.2)}]M.east) -- ([xscale=.5,shift={(0,.2)}]M.east);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine/.pic={
+ \path[fill=pgfstrokecolor,draw] (0,0) ellipse(.2 and .15)
+ (0,0) -- ++(60:.3)
+ (0,0) -- ++(90:.3)
+ (0,0) -- ++(120:.3)
+ (0,0) -- ++(240:.3)
+ (0,0) -- ++(270:.3)
+ (0,0) -- ++(300:.3)
+ ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine clearing equipment}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine clearing equipment/.pic={
+ \path[pic actions]
+ (0, 0.2) -- (0, 0) -- (0.35, -0.2) -- (-0.35, -0.2) -- (0, 0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine warfare vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine warfare vessel/.pic={%
+ \pic[scale=.8,fill=pgfstrokecolor,yshift=2.5]{natoapp6c/s/sea mine=top half};
+ \pic {natoapp6c/s/warfare vessel};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/missile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/missile/.pic={%
+ \path[pic actions,draw]
+ (0, 0.3)
+ -- (-0.05, 0.2)
+ -- (-0.05, -0.2)
+ -- (-0.125,-0.3)
+ -- (-0.125,-0.4)
+ -- (0, -0.265)
+ -- (0.125,-0.4)
+ -- (0.125,-0.3)
+ -- (0.05,-0.2)
+ -- (0.05,0.2)
+ -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/missile launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/missile launcher/.is choice,
+ pics/natoapp6c/s/missile launcher/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};
+ \pic[draw]{natoapp6c/s/weapon=missile launcher};}},
+ pics/natoapp6c/s/missile launcher/none/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=base};
+ \path[pic actions] (-.2,-.2)--(-.2,-.35) (.2,-.2)--(.2,-.35);}},
+ pics/natoapp6c/s/missile launcher/air defence/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=none};
+ \pic[draw]{natoapp6c/s/weapon=air defence};}},
+ pics/natoapp6c/s/missile launcher/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=anti tank};}},
+ pics/natoapp6c/s/missile launcher/surface to surface/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/missile launcher=none};
+ \pic[draw]{natoapp6c/s/weapon=bottom};
+ \pic[draw]{natoapp6c/s/weapon=machine gun};
+ }},
+ pics/natoapp6c/s/missile launcher/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mobile advisor and support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mobile advisor and support/.pic={
+ \path[draw] (-.35,0) circle(.1) (.35,0) circle(.1);
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ ( 0.15, 0.025) --
+ (-0.25, 0.025) --
+ (-0.25, -0.025) --
+ ( 0.15, -0.025) --
+ ( 0.15, -0.075) --
+ ( 0.25, 0) --
+ ( 0.15, 0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/moored}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/moored/.pic={
+ \path[draw] (0,.2) -- (0,-.05) (-.3,-.05) -- (.3,-.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mortar}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mortar/.pic={
+ \path[draw] (0,-.15) circle(.05) (0,.-.1) -- (0,.2)
+ ([shift=(225:.1)]0,.2) -- (0,.2) -- ([shift=(-45:.1)]0,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/motorized}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/motorized/.pic={\path[draw] (M.north) -- (M.south);},
+ pics/natoapp6c/s/motorised/.style={natoapp6c/s/motorized},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mortuary affairs}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mortuary affairs/.pic={
+ \path[draw] (-.1,-.2) rectangle (.1,.2)
+ (0,-.17) -- (0,.17) (-.07,.1) -- (.07,.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mountain}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mountain/.pic={
+ \path[draw,fill=pgfstrokecolor] (0,.2) -- ++(-60:.7) -- ++(180:.7) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/naval}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/naval/.pic={
+ \def\arrow{(0,0) -- (-.02,0) -- ++(60:.04) -- ++(-60:.04) -- cycle}
+ \begin{scope}[pic actions]
+ \path[draw]
+ (0,.13) circle (.08) (-.2,.04) -- (.2,.04) (0,.04)
+ -- (0,-.25) (210:.25) arc (210:340:.25);
+ \path[draw,shift=(210:.25),rotate=30] \arrow;
+ \path[draw,shift=(340:.25),rotate=-30] \arrow;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/navigation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/navigation/.pic={
+ \path[draw]
+ (.17,-.2) -- (0,.2) -- (-.17,-.2)
+ ($(-180:.17)+(0,.05)$) arc[radius=.17,start angle=-180,end angle=0];},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/navy task}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/navy task/.pic={
+ \path[pic actions]
+ (-0.25, -0.2) -- (-0.25, 0.1) -- (-0.15, 0.2)
+ ( 0.25, -0.2) -- ( 0.25, 0.1) -- ( 0.15, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/non combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/non combatant/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (-0.25, -0.2) --
+ (-0.25, 0.05) --
+ (-0.15, 0.05) --
+ (-0.15, 0.2) --
+ (0.15, 0.2) --
+ (0.15, 0.05) --
+ (0.25, 0.05) --
+ (0.25, -0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/non lethal weapon}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/non lethal weapon/.pic={%
+ \pic[draw]{natoapp6c/s/weapon};%
+ \pic[draw]{natoapp6c/s/weapon=non lethal};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/nuclear}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/nuclear/.pic={
+ \path[fill=pgfstrokecolor,pic actions] (0,0) circle(.05)
+ (0: .3) arc(0 : 60:.3) -- ( 60:.1) arc( 60: 0: .1) -- cycle
+ (180:.3) arc(180: 120:.3) -- ( 120:.1) arc( 120: 180:.1) -- cycle
+ (-60:.3) arc(-60:-120:.3) -- (-120:.1) arc(-120:-60: .1) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/observer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/observer/.pic={
+ \path[pic actions] (0.25,-.2)--(-.25,-.2)--(0,.2)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/orbiter shuttle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/orbiter shuttle/.pic={
+ \path[pic actions]
+ ($(0, 0.3)!0.35!(0.125, -0.15)$) --
+ (0.125, -0.15) -- (-0.125, -0.15) --
+ ($(-0.125, -0.15)!0.65!(0, 0.3)$)
+ to[in=105, out=75] cycle
+ (0, -0.20) -- (0, -0.15); },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ordnance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ordnance/.pic={
+ \path[draw] (0,0) ellipse(.2 and .15);
+ \begin{scope}
+ \clip (0,0) ellipse(.2 and .15) [reverseclip];
+ \path[draw] (0,0) -- ++(50:.3)
+ (0,0) -- ++(70:.3)
+ (0,0) -- ++(110:.3)
+ (0,0) -- ++(130:.3)
+ ;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/organisation}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/organisation/.style={natoapp6c/s/group},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/over snow}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/over snow/.pic={
+ \ifn@to@pp@below%
+ \draw ([shift={(-.15,.15)}]M.south west) to[in=180, out=270]
+ ++(.15,-.15) -- (M.south east);
+ \else%
+ \draw ([shift={(.3,.1)}]M.west) to[in=180, out=-90]
+ ([shift={(.5,-.1)}]M.west) --
+ ([shift={(-.3,-.1)}]M.east);
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/pack animal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/pack animal/.pic={
+ \def\n@to@pp@tmp{0}
+ \ifn@to@pp@below\def\n@to@pp@tmp{-.15}\fi
+ \path[draw,shift={(0,\n@to@pp@tmp)}]
+ (-.3,-.15) -- (-.15,.15) -- (0,-.15) -- (.15,.15) -- (.3,-.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/patrol}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/patrol/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor] (0.125, 0) -- (0, 0.2) -- (-0.125, 0) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/patrolling}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/patrolling/.pic={
+ % OBS
+ \path[draw]
+ (0.25, 0.05) -- (-0.05, 0.05) -- (0.05, -0.05) -- (-0.4, -0.05)
+ (-0.3, 0) -- (-0.4, -0.05) -- (-0.3, -0.1)
+ node [natoapp6c/text,natoapp6c/small text,
+ scale=.5,anchor=west,inner sep=0] at (0.25, 0.05) {P};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/physician}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/physician/.pic={
+ \pic{natoapp6c/s/medical};
+ \path[draw] (0.1, 0.05) -- (-0.1, 0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/pipeline}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/pipeline/.pic={
+ \path[draw] (-.15,-.15) rectangle (.15,.15)
+ (-.3,.1) -- (-.15,.1) (-.3,-.1) -- (-.15,-.1)
+ (.3,.1) -- (.15,.1) (.3,-.1) -- (.15,-.1)
+ (-.05,.15) rectangle (.05,.25) (-.1,.25) rectangle (.1,.30);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/poisoning}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/poisoning/.pic={
+ \path[pic actions] (0, 0.055) circle (0.145)
+ (0.3, 0) -- (-0.3, -0.2)
+ (-0.3, 0) -- (0.3, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/postal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/postal/.pic={
+ \path[draw] (-.25,.25) -- (.08,.25)
+ to [out=-90,in=120,looseness=1] (.25,-.25)
+ to [out=150,in=-90,looseness=1] (-.25,.25);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/printed media}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/printed media/.pic={
+ \path[pic actions] (0.2, 0) -- (-0.2, 0)
+ (0, 0.1) circle (0.085)
+ (0, -0.1) circle (0.085);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/psychological}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/psychological/.pic={
+ \path[pic actions] (-.25,.15) -- (-.1,.15) -- (.1,.25)
+ -- ++(0,-.5) -- (-.1,-.15) -- (-.25,-.15) -- cycle
+ (.1,.15) -- (.25,.15)
+ (.1,.05) -- (.25,.05)
+ (.1,-.05) -- (.25,-.05)
+ (.1,-.15) -- (.25,-.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/quarry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/quarry/.pic={
+ \path[draw] (-.2,-.2) -- (.18,.18) (.2,-.2) -- (-.18,.18)
+ (25:.255) arc(25:65:.255)
+ (115:.255) arc(115:155:.255);
+ %([shift={(115:.08)}]-.1,.1) arc (115:155:.08)
+ %([shift={(70:.08)}].1,.1) arc (70:110:.08);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/quartermaster}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/quartermaster/.pic={
+ \path[draw] (-.4,.1) -- (.1,.1) (.25,.1) circle(.15)
+ (-.3,.1) -- (-.3,-.15) (-.15,.1) -- (-.15,-.15)
+ (-.3,-.08) -- (-.15,-.08);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radar}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radar/.pic={%
+ \path[draw] (-.2,.2) arc (150:300:.25) (-.24,.01) -- (0,.2) --
+ (0,0) -- (.2,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio/.pic={%
+ \path[draw] (-.2,.2) -- (-.13,.25) -- (-.07,.2) -- (0,.25) --
+ (.07,.2) -- (.13,.25) -- (.2,.2) (0,.25) -- (0,-.05) (0,-.15) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio relay}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio relay/.pic={%
+ \path[draw] (-.2,.25) -- (.2,.25) (0,.25) -- (0,-.05) (0,-.15) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio relay line of sight}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio relay line of sight/.pic={%
+ \path[draw] (0,0) circle(.2);
+ \path[fill=pgfstrokecolor] (0,0) -- (45:.2) arc(45:-45:.2) -- cycle;
+ \path[fill=pgfstrokecolor] (0,0) -- (135:.2) arc(135:225:.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio teletype}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio teletype/.pic={%
+ \path[draw] (-.2,.25) -- (.2,.25) (-.15,.18) -- (.15,.18)
+ (0,.25) -- (0,-.25)
+ ([shift=(30:.1)]0,-.15) arc(30:330:.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/railroad}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/railroad/.pic={%
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west) -- (M.south east)
+ ([shift={(.08,-0.08)}]M.south west) circle(.08)
+ ([shift={(.24,-0.08)}]M.south west) circle(.08)
+ ([shift={(-.08,-0.08)}]M.south east) circle(.08)
+ ([shift={(-.24,-0.08)}]M.south east) circle(.08);
+ \else
+ \path[pic actions] (-.45,.08) -- (.45,.08)
+ (-.37,0) circle(0.08)
+ (-.21,0) circle(0.08)
+ (.21,0) circle(0.08)
+ (.37,0) circle(0.08);
+ \fi
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/reconnaissance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/reconnaissance/.pic={%
+ \path[draw] (M.north east)--(M.south west);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/recovery unmanned systems}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/recovery unmanned systems/.pic={%
+ \path[draw] (-.5,.15) to [out=-80,in=180] (0,-.15) to
+ [out=0,in=260] (.5,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rifle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rifle/.pic={%
+ \pic[draw]{natoapp6c/s/weapon=full};
+ \pic[draw]{natoapp6c/s/weapon=rifle};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rising}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rising/.pic={
+ \path[draw,fill=pgfstrokecolor] (0, 0.2) -- (0, -0.167)
+ (0.1, -0.2) -- (-0.1, -0.2) -- (0, 0.0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/riverine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/riverine/.pic={%
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west)
+ to [out=-90,in=-90,looseness=.5] (M.south east) -- cycle;
+ \else%
+ \path[pic actions] (-.5,.15) to [out=-80,in=180] (0,-.15) to
+ [out=0,in=260] (.5,.15) -- cycle;
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rocket launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/rocket launcher/.is choice,
+ pics/natoapp6c/s/rocket launcher/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=rifle};
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=rifle};
+ }},
+ pics/natoapp6c/s/rocket launcher/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=anti tank};
+ }},
+ pics/natoapp6c/s/rocket launcher/single/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/rocket launcher/multiple/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=single};
+ \pic[yshift=-6,draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/rocket launcher/single head/.style={
+ code={%
+ \pic[yshift=4,draw]{natoapp6c/s/weapon=rifle};}},
+ pics/natoapp6c/s/rocket launcher/multiple head/.style={
+ code={
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=rifle};
+ \pic[yshift=-6,draw]{natoapp6c/s/weapon=rifle};
+ }},
+ pics/natoapp6c/s/rocket launcher/.default=single,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rotary wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rotary wing/.pic={
+ \path[pic actions]
+ (0.44, 0.15) -- (0.44, -0.15) -- (-0.44, 0.15) -- (-0.44, -0.15) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/runway}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/runway/.pic={%
+ \path[draw] (-.3,-.15) -- (.3,-.15) (-.2,-.2) -- (.2,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sailing boat}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sailing boat/.pic={%
+ \path[draw]
+ (-0.15, -0.2) --
+ ( 0.15, -0.2) --
+ ( 0.25, -0.025) --
+ (-0.25, -0.025) -- cycle
+ ( 0, -0.025) -- (0, 0.2)
+ (0.025, 0) -- (0.025, 0.19) -- (0.225, 0) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/satellite}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/satellite/.is choice,
+ pics/natoapp6c/s/satellite/none/.style={
+ code={
+ \iftikz@mode@fill
+ \def\n@to@pp@next{\path[draw,fill=pgfstrokecolor,pic actions]}
+ \else
+ \def\n@to@pp@next{\path[pic actions]}
+ \fi
+ \n@to@pp@next
+ ( 0.45, 0.075) rectangle ( 0.15, -0.075)
+ ( 0.075, 0.075) rectangle (-0.075, -0.075)
+ (-0.45, 0.075) rectangle (-0.15, -0.075)
+ ( 0.15, 0) -- (0.075, 0)
+ (-0.15, 0) -- (-0.075, 0);
+ }},
+ pics/natoapp6c/s/satellite/astronomical/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0.04, 0.075) rectangle (-0.04, 0.2)
+ (0.02, -0.075) rectangle (-0.02, -0.2);}},
+ pics/natoapp6c/s/satellite/bio/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-1]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (-0.075, 0.13) circle (0.07)
+ ($(-0.075, 0.13) + (60:0.07)$) --
+ ++(-30:0.22) -- ++(0, -0.025) -- (-0.005, 0.13) -- cycle;
+ }},
+ pics/natoapp6c/s/satellite/communications/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-1]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, 0.075) -- (0, 0.125)
+ (0, 0.125) arc (270:340:0.25 and 0.1)
+ (0, 0.125) arc (270:200:0.25 and 0.1);
+ }},
+ pics/natoapp6c/s/satellite/navigation/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-3.75,scale=.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \pic[scale=.5,yshift=3.5]{natoapp6c/s/navigation};
+ }},
+ pics/natoapp6c/s/satellite/earth observing/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=3.75, scale=0.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, 0.065) -- +(315:0.125)
+ (0, 0.065) -- +(225:0.125)
+ (0, -0.12) circle (0.08);
+ }},
+ pics/natoapp6c/s/satellite/tether/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-3.75, scale=0.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, -0.066) -- +(30:0.3)
+ (0, -0.066) +(30:0.375) circle(0.075);
+ }},
+ pics/natoapp6c/s/satellite/small/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[scale=0.6]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0.05, 0.2) -- ( 0, 0.1) -- (-0.05, 0.2)
+ (0.05, -0.2) -- ( 0, -0.1) -- (-0.05, -0.2)
+ (-0.4, 0.05) -- (-0.3, 0) -- (-0.4, -0.05)
+ ( 0.4, 0.05) -- ( 0.3, 0) -- ( 0.4, -0.05);
+ }},
+ pics/natoapp6c/s/satellite/reconnaissance/.style={
+ code={
+ \pic[yshift=-1,fill=pgfstrokecolor]{natoapp6c/s/satellite=none};
+ \path[pic actions]
+ (-0.075, -0.05) -- +(250:0.1)
+ (-0.025, -0.05) -- +(260:0.1)
+ ( 0.025, -0.05) -- +(280:0.1)
+ ( 0.075, -0.05) -- +(290:0.1);
+ }},
+ pics/natoapp6c/s/satellite/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sea mine}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/sea mine/.is choice,
+ pics/natoapp6c/s/sea mine/top half/.style={
+ code={\path[draw,join=bevel,pic actions]
+ (.2,0) arc(0:35:.2 and .175) --
+ (42:.34 and .3) -- (48:.34 and .3) --
+ % ($(45:.1) + (40:.2)$) -- ($(45:.1)+(50:.2)$) --
+ (55:.2 and .175) arc(50:75:.2 and .175) --
+ (80:.26 and .23) -- (100:.26 and .23) --
+ (105:.2 and .175) arc(100:125:.2 and .175) --
+ (132:.34 and .3) -- (138:.34 and .3) --
+ %($(135:.1)+(130:.2)$) -- ($(135:.1)+(140:.2)$) --
+ (145:.2 and .175) arc(145:180:.2 and .175);
+ }},
+ pics/natoapp6c/s/sea mine/bottom half/.style={
+ code={
+ \path[pic actions] (.2,0) arc(0:-180:.2);}},
+ pics/natoapp6c/s/sea mine/full/.style={
+ code={
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/sea mine/top half};
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/sea mine/bottom half};}},
+ pics/natoapp6c/s/sea mine/neutralised/.style={
+ code={
+ \begin{scope}[even odd rule]
+ \clip [rotate=42] (-.4,-.015) rectangle (.4,.015) [reverseclip];
+ \clip [rotate=-42] (-.4,-.015) rectangle (.4,.015) [reverseclip];
+ \pic {natoapp6c/s/sea mine=full};
+ \end{scope}
+ }},
+ pics/natoapp6c/s/sea mine/neutralized/.style=natoapp6c/s/sea mine/neutralised,
+ pics/natoapp6c/s/sea mine/.default=full,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/seabed installation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/seabed installation/.pic={%
+ \path[pic actions]
+ (-0.25, -0.2) --
+ ( 0.25, -0.2) --
+ ( 0.25, -0.075) --
+ ( 0.05, -0.075) --
+ ( 0.05, 0.025) --
+ (-0.125, 0.025) --
+ (-0.125, 0.2) --
+ (-0.25, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/search}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/search/.pic={%
+ \path[draw] (-.3,-.2)--(0,-.4)--(.3,-.2) (0,.4)--(0,-.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/searching}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/searching/.pic={%
+ \path[pic actions]
+ (-0.4, 0)
+ arc (180:0:0.1)
+ arc (180:360:0.1)
+ arc (180:0:0.1)
+ arc (180:270:0.1) -- +(0.1, 0)
+ (0.3, -0.05) -- (0.4, -0.1) -- (0.3, -0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/semi trailer truck}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/semi trailer truck/.pic={
+ \pic[scale=.75,xshift=-2,draw]{natoapp6c/s/utility vehicle};
+ \path[pic actions] (0.21, -0.025) -- (0.35, -0.025)
+ (0.35, 0.05) -- (0.35, -0.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sensor}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sensor/.pic={%
+ \path[fill=pgfstrokecolor] (-.3,0) arc (270:360:.3) arc (180:270:.3) arc
+ (90:180:.3) arc (0:90:.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ship/.pic={%
+ \path[pic actions]
+ (-0.2, -0.2) --
+ ( 0.2, -0.2) --
+ ( 0.35, 0.05) --
+ ( 0.15, 0.05) --
+ ( 0.15, 0.2) --
+ (-0.15, 0.2) --
+ (-0.15, 0.05) --
+ (-0.35, 0.05) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/signal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/signal/.pic={%
+ \path[draw] (M.north west) -- (0,-.1) -- (0,.1) -- (M.south east);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/signals intelligence}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/signals intelligence/.pic={%
+ \path[draw] (-.2,.2) -- (-.13,.25) -- (-.07,.2) -- (0,.25) --
+ (.07,.2) -- (.13,.25) -- (.2,.2) (0,.25) -- (0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ski}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ski/.pic={
+ \path[draw] (-.15,-.15) -- (.1,.2) (.15,-.15) -- (-.1,.2)
+ (-.1,-.2) -- (-.2,-.1)
+ (.1,-.2) -- (.2,-.1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sled}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sled/.pic={
+ \ifn@to@pp@below%
+ \draw ([shift={(-.15,.15)}]M.south west) to[in=180, out=-90]
+ ++(.15,-.15) -- (M.south east) to[in=-90, out=0]
+ ([shift={(.15,.15)}]M.south east);
+ \else%
+ \draw ([shift={(.3,.1)}]M.west) to[in=180, out=-90]
+ ([shift={(.5,-.1)}]M.west) --
+ ([shift={(-.5,-.1)}]M.east) to[in=-90, out=0]
+ ([shift={(-.3,.1)}]M.east);
+ \fi
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/small squashed text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/small squashed text/.style={
+ code={\n@to@pp@text@smallsquashed{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/small text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/small text/.style={code={\n@to@pp@text@small{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sniper}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sniper/.pic={%
+ \path[draw] (-.2,.2)--(-.05,.2) (.05,.2)--(.2,.2) (0,.15)--(0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/space station}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/space station/.pic={
+ \path[join=bevel,pic actions]
+ (-80:.15 and .06) -- (0.025, 0.175) arc(0:180:0.025) -- (-100:.15 and .06)
+ ($(80:.25 and 0.1)+(0,-.0125)$) arc(80:-260:.25 and .1) --
+ (-260:.15 and .06) arc (-260:80:.15 and .06) -- cycle
+ (-82:.25 and .1) -- (0.025, -0.175) arc(360:180:0.025) -- (-98:.25 and .1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/squashed text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/squashed text/.style={code={\n@to@pp@text@squashed{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/submarine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/submarine/.pic={
+ \path[fill=pgfstrokecolor,pic actions]
+ (0.4, 0) --
+ (0.25, 0.15) --
+ (-0.25, 0.15) --
+ (-0.4, 0) --
+ (-0.25, -0.15) --
+ (0.25, -0.15) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/submersible}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/submersible/.pic={
+ \path[pic actions]
+ ($(0, -0.05) + (106.6:0.35 and 0.15)$)
+ arc (106.6:433.4:0.35 and 0.15) |- (0, 0.2) -| cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/supply}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/supply/.pic={
+ \path[pic actions]
+ ($(M.east)-(0,.25)$)--($(M.west)-(0,.25)$);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/surface combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/surface combatant/.pic={
+ \pic {natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (0.12, 0.05) --
+ (0.12, 0.14) --
+ (0.06, 0.14) --
+ (0.06, 0.2) --
+ (0.24, 0.2) --
+ (0.24, 0.272) --
+ (0.06, 0.272) --
+ (0.06, 0.35) --
+ (-0.06, 0.35) --
+ (-0.06, 0.272) --
+ (-0.24, 0.272) --
+ (-0.24, 0.2) --
+ (-0.06, 0.2) --
+ (-0.06, 0.14) --
+ (-0.12, 0.14) --
+ (-0.12, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/survey}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/survey/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (0, -0.1) -- (0, 0.195) -- (0.25, 0.0475) -- cycle;
+ \path[pic actions] (0.1, -0.2) -- (0, -0.1) -- (-0.1, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tactical satellite}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tactical satellite/.pic={
+ \path[fill=pgfstrokecolor,draw]
+ (-.3,-.2) rectangle(-.15,.2)
+ (.15,-.2) rectangle( .3,.2)
+ (-.075,-.15) rectangle (.075,.15)
+ (-.15,0) -- (.15,0)
+ (0,-.15) -- (0,-.3);
+ \path[draw] (-.2,-.35) to [out=40,in=140,looseness=1] (.2,-.35);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tank}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tank/.pic={%
+ \pic[draw]{natoapp6c/s/vehicle};
+ \path[pic actions] ( 0.35, 0.2) -- (-0.35, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/text/.style={code={%
+ \n@to@pp@dbg{3}{Text: `#1'}%
+ \n@to@pp@text@normal{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/topographic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/topographic/.pic={
+ \path[draw] (0,.05) -- (0,.2)
+ (0,.05) -- (-.1,-.2)
+ (0,.05) -- (.1,-.2)
+ (-30:.15) arc[radius=.15,start angle=-30,end angle=-150];},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/torpedo}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/torpedo/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (-0.35, 0) --
+ (-0.3, 0.075) --
+ ( 0.25, 0.075) --
+ ( 0.35, -0.075) --
+ ( 0.35, 0.075) --
+ ( 0.25, -0.075) --
+ (-0.3, -0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/towed}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/towed/.pic={
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south east) -- (M.south west)
+ ([shift={(.08,0)}]M.south east) circle(.08)
+ ([shift={(-.08,0)}]M.south west) circle(.08);
+ \else%
+ \path[draw] (-.32,0) -- (.32,0) (-.4,0) circle(.08) (.4,0) circle(.08);%
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tracked}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tracked/.pic={
+ \ifn@to@pp@below%
+ \path[pic actions]
+ ([shift={(.08,-.16)}]M.south west)
+ arc [radius=.08,start angle=-90,end angle=-270]
+ -- ([shift={(-.08,0)}]M.south east)
+ arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle;
+ \else%
+ \path[pic actions]
+ (-.3,-.1) arc [radius=.1,start angle=-90,end angle=-270]
+ -- (.3,.1) arc [radius=.1,start angle=90,end angle=-90]
+ -- cycle;
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/train locomotive}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/train locomotive/.pic={
+ \path[pic actions]
+ (.35,-.3)--(-.35,-.3)--(-.35,.3)--(0,.3)--(0,0)--(0.35, 0)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/transportation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/transportation/.pic={
+ \path[pic actions] (0,0) circle(.2)
+ (180:.2) -- (0:.2)
+ (225:.2) -- (45:.2)
+ (270:.2) -- (90:.2)
+ (315:.2) -- (135:.2) ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/unexploded ordnance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/unexploded ordnance/.pic={
+ \begin{scope}[transparency group=knockout]
+ \path[draw,fill=pgfstrokecolor,pic actions] (0,0) circle(.2);
+ \pic[opacity=0]{natoapp6c/s/small squashed text=UXO};
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/unmanned}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/unmanned/.pic={
+ \path[pic actions]
+ (0,-0.1)
+ --(0.45,0.05)
+ --(0.45,0.1)
+ --(0,0.025)
+ --(-0.45,0.1)
+ --(-0.45,0.05)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/utility vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/utility vehicle/.pic={%
+ \pic[draw]{natoapp6c/s/vehicle};
+ \path[pic actions]
+ (0.35, 0.3) to[in=-90, out=-90, looseness=1] (-0.35, 0.3); },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/vehicle/.pic={
+ \path[pic actions]
+ (-0.35, 0.2) -- (-0.35, -0.2) -- ( 0.35, -0.2) -- ( 0.35, 0.2)
+ (-0.35, -0.2) -- (-0.35, -0.3)
+ (0.35, -0.2) -- ( 0.35, -0.3)
+ (-0.35, 0.2) -- (-0.35, 0.3)
+ (0.35, 0.2) -- ( 0.35, 0.3);}
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/video imagery}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/video imagery/.pic={
+ \path[pic actions]
+ (-0.4, 0.2) -- (-0.4, -0.2) -- (0.05, -0.2) -- (0.2, 0.2) -- cycle
+ (0.075, -0.15) -- (0.4, -0.15)
+ (0.16, 0.1) -- (0.4, 0.1);
+ \path[draw,fill=pgfstrokecolor,pic actions](0.38,-.2) rectangle (0.42,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/warfare vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/warfare vessel/.pic={
+ \path[draw,fill=pgfstrokecolor] (0, -0.2) -- (0.3, 0.05) -- (-0.3, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/water}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/water/.pic={
+ \path[pic actions]
+ (-0.3, 0.05) -- (0, 0.05) to[in=90, out=0] (0.3, -0.2)
+ (0, 0.05) -- (0, 0.2)
+ (0.075, 0.2) -- (-0.075, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/wheeled}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/wheeled/.is choice,
+ pics/natoapp6c/s/wheeled/and tracked/.style={
+ code={
+ \ifn@to@pp@below%
+ \path[pic actions]
+ ([shift={(.4,-.16)}]M.south west)
+ arc [radius=.08,start angle=-90,end angle=-270]
+ -- ([shift={(-.08,0)}]M.south east)
+ arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle
+ ([shift={(.08,-.08)}]M.south west) circle(.08);
+ \else%
+ \path[pic actions]
+ (-.1,-.08) arc [radius=.08,start angle=-90,end angle=-270]
+ -- (.32,.08) arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle
+ (-.4,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/limited/.style={
+ code={
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west) -- (M.south east)
+ ([shift={(.08,-.08)}]M.south west) circle(.08)
+ ([shift={(-.08,-.08)}]M.south east) circle(.08);
+ \else
+ \path[pic actions] (-.4,.08) -- (.4,.08)
+ (-.32,0) circle(0.08) (.32,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/cross country/.style={
+ code={\pic{natoapp6c/s/wheeled=limited};
+ \ifn@to@pp@below%
+ \path[pic actions] ([shift={(0,-.08)}]M.south) circle(.08);
+ \else
+ \path[pic actions] (0,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/semi/.style={
+ code={\pic{natoapp6c/s/wheeled=limited};
+ \ifn@to@pp@below%
+ \path[pic actions] ([shift={(.24,-.08)}]M.south west) circle(.08);
+ \else
+ \path[pic actions] (-.16,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/.default=limited,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \subsubsection{Some extra MIL-STD symbols}
+%
+% Extra NATO App6(c) symbol (from MIL-STD)
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/prison}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/prison/.pic={
+ \path[pic actions] (-.3,-.3)rectangle(.3,.3)
+ (-.23,-.30)--(-.23, .3)
+ ( .23,-.30)--( .23, .3)
+ (-.08,-.30)--(-.08,-.2)
+ (-.08,-.15) circle (.05)
+ (-.08,-.1) --(-.08, .3)
+ ( .08,-.30)--( .08,-.2)
+ ( .08,-.15) circle (.05)
+ ( .08,-.1) --( .08, .3)
+ (0,.15) circle(.07 and .1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/text.dtx b/macros/latex/contrib/wargame/source/natoapp6c/text.dtx
new file mode 100644
index 0000000000..5a441dc482
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/text.dtx
@@ -0,0 +1,57 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+%\subsubsection{Text on symbols}
+%
+% \begin{TikzKey}{/tikz/natoapp6c/normal text,
+% /tikz/natoapp6c/squashed text,
+% /tikz/natoapp6c/small text,
+% /tikz/natoapp6c/small squashed text}
+%
+% NATO App6 does not specify any particular font for text symbols
+% (main, modifiers, or amplifiers) but here we choose to use \TeX{}
+% Gyro Heros (a Gothic font, i.e., Helvetica-like).
+%
+% \begin{macrocode}
+\newcommand\n@to@ppfont[2][b]{%
+ \fontencoding{T1}\fontfamily{qhv}\fontseries{#1}\fontsize{#2}{0}\selectfont}
+\tikzset{%
+ natoapp6c/text/.style={%
+ shape=rectangle,%
+ draw=none,%
+ fill=none,%
+ transform shape,%
+ anchor=center},
+ natoapp6c/normal text/.style={font=\n@to@ppfont{12}},
+ natoapp6c/squashed text/.style={font=\n@to@ppfont[bc]{12}},
+ natoapp6c/small text/.style={font=\n@to@ppfont{10}},
+ natoapp6c/squashed small text/.style={font=\n@to@ppfont[bc]{10}},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{Macro}{\n@to@pp@text@normal,
+% \n@to@pp@text@squashed,
+% \n@to@pp@text@small,
+% \n@to@pp@text@smallsquashed}
+%
+% These macros are short-hands for making a node at $(0,0)$ in the
+% local scope.
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@text@normal[2][] {%
+ \node[natoapp6c/text,natoapp6c/normal text,#1]{#2}}
+\newcommand\n@to@pp@text@squashed[2][]{%
+ \node[natoapp6c/text,natoapp6c/squashed text,#1]{#2}}
+\newcommand\n@to@pp@text@small[2][] {%
+ \node[natoapp6c/text,natoapp6c/small text,#1]{#2}}
+\newcommand\n@to@pp@text@smallsquashed[2][]{%
+ \node[natoapp6c/text,natoapp6c/squashed small text,#1]{#2}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/util.dtx b/macros/latex/contrib/wargame/source/natoapp6c/util.dtx
new file mode 100644
index 0000000000..18c7689878
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/util.dtx
@@ -0,0 +1,60 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Utility macros used in the symbols}
+%
+% Here, we define the main symbols used when making markers. Since
+% some of these symbols share code, we will create some regular \TeX{}
+% macros to hold the path definitions. This is by far the simplest
+% way of storing just the path specifications.
+%
+% \begin{Macro}{\testpath}
+% \begin{macrocode}
+\def\testpath#1{\csname n@toapp@#1\endcsname}
+% \end{macrocode}
+% \end{Macro}
+%
+% Corps support for \spec{friendly}, \spec{hostile},
+% \spec{neutral}, and \spec{unknown} factions.
+%
+% \begin{Macro}{\n@toapp@corps@sup@friendly,
+% \n@toapp@corps@sup@hostile,
+% \n@toapp@corps@sup@neutral,
+% \n@toapp@corps@sup@unknown}
+% \begin{macrocode}
+\def\n@toapp@corps@sup@friendly{(.75,.5)--(.5,0)--(.75,-.5)}
+% (M.north east)--(M.east-.25,0)--(M.south east)}
+\def\n@toapp@corps@sup@hostile{(.95,.5)--(.45,0)--(.95,-.5)}
+\def\n@toapp@corps@sup@neutral{(.5,.5)--(.35,0)--(.5,-.5)}
+\def\n@toapp@corps@sup@unknown{(.75,.5)--(.5,0)--(.75,-.5)}
+% \end{macrocode}
+% \end{Macro}
+%
+% Corps support, base
+%
+% \begin{Macro}{\n@toapp@corps@support}
+% \begin{macrocode}
+\def\n@toapp@corps@support#1{
+ \ifx\n@to@pp@friendly#1\n@toapp@corps@sup@friendly%
+ \else\ifx\n@to@pp@hostile#1\n@toapp@corps@sup@hostile%
+ \else\ifx\n@to@pp@neutral#1\n@toapp@corps@sup@neutral%
+ \else\ifx\n@to@pp@unknown#1\n@toapp@corps@sup@unknown%
+ \fi\fi\fi\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/TBD}
+% Special placeholder for symbols To Be Done.
+%
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/TBD/.pic={\n@to@pp@text@normal{\color{magenta}TBD};}
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx b/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
new file mode 100644
index 0000000000..3138da9e75
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
@@ -0,0 +1,88 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Symbols used when defining weaponry}
+%
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/weapon}
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/weapon/.is choice,
+ pics/natoapp6c/s/weapon/base/.style={
+ code={\path [pic actions] (0,-0.2)--(0,.2);}},
+ pics/natoapp6c/s/weapon/top/.style={
+ code={\path [pic actions] (0,.2)--(0,.35);}},
+ pics/natoapp6c/s/weapon/bottom/.style={
+ code={\path [pic actions] (0,.-.35)--(0,-.2);}},
+ pics/natoapp6c/s/weapon/rifle/.style={
+ code={\path [pic actions] (0.2, 0.1)--(0, 0.35)--(-0.2,0.1);}},
+ pics/natoapp6c/s/weapon/machine gun/.style={
+ code={\path [pic actions] (0.2, -0.35)--(-0.2, -0.35);}},
+ pics/natoapp6c/s/weapon/grenade launcher/.style={
+ code={\path [pic actions] (0,0) circle (0.1);}},
+ pics/natoapp6c/s/weapon/missile launcher/.style={
+ code={%
+ \path [pic actions] (0.2, 0.15)
+ to[out=90,in=90,looseness=1.75] (-0.2, 0.15);}},
+ pics/natoapp6c/s/weapon/non lethal/.style={
+ code={\path [pic actions] (-.2,.35) -- (.2,.35);}},
+ pics/natoapp6c/s/weapon/multi fire/.style={
+ code={\path[pic actions] (.2,-.2)--(.2, .2) (-.2,-.2)--(-.2,0.2);}},
+ pics/natoapp6c/s/weapon/air defence/.style={
+ code={%
+ \path[pic actions] (0.2, -0.4)
+ to[out=90,in=90,looseness=1.7] (-0.2, -0.4) -- cycle;}},
+ pics/natoapp6c/s/weapon/anti tank/.style={
+ code={\path[pic actions] (0.2, -0.4)--(0,-0.2)--(-0.2,-0.4);}},
+ pics/natoapp6c/s/weapon/full/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/weapon/.default=full
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/type}
+%
+% (Weight) class of weapons: light, medium, heavy
+%
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/type/.is choice,
+ pics/natoapp6c/s/type/light/.style={
+ code={\path [fill=pgfstrokecolor,pic actions] (-0.2, -0.12) rectangle (.2,-.08);}},
+ pics/natoapp6c/s/type/medium/.style={
+ code={
+ \path [fill=pgfstrokecolor,pic actions]
+ (-0.2, -0.12) rectangle (.2,-.08)
+ (-0.2, -0.22) rectangle (.2,-.18);}},
+ pics/natoapp6c/s/type/heavy/.style={
+ code={
+ \path [fill=pgfstrokecolor,pic actions]
+ (-0.2, -0.12) rectangle (.2,-.08)
+ (-0.2, -0.22) rectangle (.2,-.18)
+ (-0.2, -0.32) rectangle (.2,-.28);}},
+ pics/natoapp6c/s/type/vlight/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.025,-0.2) rectangle (.025,.2);}},
+ pics/natoapp6c/s/type/vmedium/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.075,-0.2) rectangle (-.025,.2)
+ ( .025, -0.2) rectangle (.075,.2);}},
+ pics/natoapp6c/s/type/vheavy/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.125,-0.2) rectangle (-.075,.2)
+ (-.025,-0.2) rectangle ( .025,.2)
+ ( .075,-0.2) rectangle ( .125,.2);}},
+ pics/natoapp6c/s/type/.default=light,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/package.dtx b/macros/latex/contrib/wargame/source/package.dtx
new file mode 100644
index 0000000000..908be36b32
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/package.dtx
@@ -0,0 +1,48 @@
+% \subsection{The \texttt{wargame} package}
+% \label{sec:impl:sty}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% First, package identification
+%
+% \begin{macrocode}
+\ProvidesPackage{wargame}
+% \end{macrocode}
+%
+% Then needed packages
+%
+% \begin{macrocode}
+\RequirePackage[svgnames]{xcolor}
+\RequirePackage{tikz}
+% \end{macrocode}
+%
+% A switch to include terrain pictures (which take a lot of memory for
+% some reason).
+%
+% \begin{macrocode}
+\@ifundefined{ifhex@terrain@pic}{%
+ \newif\ifhex@terrain@pic
+ \hex@terrain@picfalse}{}
+% \end{macrocode}
+%
+% Options
+%
+% \begin{macrocode}
+\DeclareOption{noterrainpic}{%
+ \hex@terrain@picfalse}
+\DeclareOption{terrainpic}{%
+ \hex@terrain@pictrue}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% Finally, the used \TikZ{} libraries
+%
+% \begin{macrocode}
+\usetikzlibrary{wargame.hex,wargame.natoapp6c,wargame.chit}
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/chits.dtx b/macros/latex/contrib/wargame/source/tests/chits.dtx
new file mode 100644
index 0000000000..7dcf26c50d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/chits.dtx
@@ -0,0 +1,74 @@
+% \section{Some test chits}
+%
+% \iffalse
+%<*testchits>
+% \fi
+% Some chits for testing stuff
+%
+% \begin{macrocode}
+\def\firstchit{
+ % \chitdbglvl=5
+ % \natoappdbglvl=5
+ \chit[symbol={
+ echelon=army,
+ main=infantry,
+ lower=mountain,
+ faction=friendly,
+ left={text=A},
+ frame={fill=yellow!50!black},
+ ultra thick,
+ command=land},
+ left={chit/identifier={1}},
+ right={chit/identifier={2}},
+ factors={chit/2 factors={4,8}},
+ frame={draw=black},
+ color=white,text=yellow,fill={blue}]}
+\makeatletter
+\def\secondchit{%
+ \@ifnextchar({\second@chit}{\second@chit(0,0)}%)
+}
+\def\second@chit(#1){
+ \node[draw, chit={symbol={[main=fixed wing,
+ faction=friendly,
+ lower={text=F},
+ command=air](0,-.15)},
+ left={[{red,font=\noexpand\sffamily}]chit/identifier={Fighter}},
+ right={chit/identifier={USAF}},
+ factors={chit/1 factor=3}}] at (#1){};}
+\def\thirdchit{
+ \chit[symbol={[echelon=battalion,
+ main={[fill]artillery},
+ faction=friendly,
+ command=land,
+ below=wheeled]},
+ left={chit/identifier={XVII}},
+ right={chit/identifier={IJA}},
+ factors={chit/2 factors artillery={2,6,5}}]}
+\def\fourthchit{
+ \chit[symbol={[main=fixed wing,
+ faction=friendly,
+ lower={text=F},
+ command=air](0,-.15)},
+ left={[{red,font=\noexpand\sffamily}]chit/identifier={Fighter}},
+ right={chit/identifier={USAF}},
+ factors={chit/1 factor=3}]}
+\tikzset{
+ wg/big text/.pic={
+ \node[shape=rectangle,
+ font=\sffamily\fontsize{18}{0}\selectfont]{#1};}}
+\def\turnchit{
+ \chit[full={wg/big text={Turn}},black,fill=yellow!20!white]}
+\tikzset{
+ my chit/.style={/chit/symbol={[
+ faction=friendly,
+ command=land,
+ bottom=amphibious,
+ main={armoured}]},
+ /chit/left={chit/identifier={Mine}},
+ /chit/factors={chit/2 factors={2,4}}}}
+\tikzset{
+ fort/.style={/chit/full={[scale=.625]hex/fortress 2}}}
+% \end{macrocode}
+% \iffalse
+%</testchits>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/map.dtx b/macros/latex/contrib/wargame/source/tests/map.dtx
new file mode 100644
index 0000000000..e685aa6179
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/map.dtx
@@ -0,0 +1,57 @@
+% \section{A test map}
+%
+% \iffalse
+%<*testmap>
+% \fi
+% \begin{Macro}{\testmap}
+%
+% A map for testing stuff
+%
+% \begin{macrocode}
+\def\testmap{
+ \hex[] (r=0,c=0)
+ \hex[] (r=0,c=1)
+ \hex[] (r=0,c=2)
+ \hex[] (r=0,c=3)
+ \hex[] (r=1,c=0)
+ \hex[town={pic=hex/town/city,name=London,font=\noexpand\bfseries}] (r=1,c=1)
+ \hex[terrain={woods}] (r=1,c=2)
+ \hex[] (r=1,c=3)
+ \hex[] (r=2,c=0)
+ \hex[] (r=2,c=1)
+ \hex[town={name=Oxford,red}] (r=2,c=2)
+ \hex[] (r=2,c=3)
+ \hex[] (r=3,c=0)
+ \hex[town={name=Cambridge}] (r=3,c=1)
+ \hex[] (r=3,c=2)
+ \hex[] (r=3,c=3)
+ \river
+ (hex cs:r=0,c=0,v=north west)--
+ (hex cs:r=0,c=0,v=north east)--
+ (hex cs:r=1,c=1,v=north west)--
+ (hex cs:r=2,c=1,v=west)--
+ (hex cs:r=2,c=1,v=north west)--
+ (hex cs:r=2,c=1,v=north east)--
+ (hex cs:r=3,c=1,v=east)--
+ (hex cs:r=2,c=2,v=north east)--
+ (hex cs:r=3,c=3,v=north west);
+ \river
+ (hex cs:r=2,c=0,v=east)--
+ (hex cs:r=2,c=0,v=north east);
+ \border[dashed,line width=3pt,red]
+ (hex cs:r=0,c=3,v=west)--
+ (hex cs:r=0,c=3,v=north west)--
+ (hex cs:r=1,c=3,v=west)--
+ (hex cs:r=1,c=3,v=north west)--
+ (hex cs:r=1,c=3,v=north east);
+ \road (hex cs:r=0,c=0,e=S)--(hex cs:r=0,c=0)--(hex cs:r=1,c=1);
+ \road (hex cs:r=1,c=1)--(hex cs:r=0,c=2)--(hex cs:r=1,c=3);
+ \road (hex cs:r=1,c=1)--(hex cs:r=2,c=1)--(hex cs:r=2,c=2);
+ \road (hex cs:r=1,c=3)--(hex cs:r=1,c=4);
+ \railroad (hex cs:r=2,c=2)--(hex cs:r=3,c=2)--(hex cs:r=4,c=3);
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</testmap>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/test.tex b/macros/latex/contrib/wargame/source/tests/test.tex
new file mode 100644
index 0000000000..5833d679f2
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/test.tex
@@ -0,0 +1,172 @@
+\documentclass{article}
+
+\usepackage{wargame}
+\usetikzlibrary{decorations.markings}
+\title{A test of \textsf{wargame}}
+\author{}
+\date{}
+\input{testmap}
+\input{testchits}
+\begin{document}
+\maketitle
+%\chitdbglvl=6
+%\wargamedbglvl=5
+\natoappdbglvl=1
+
+\section{A board}
+
+\begin{tikzpicture}
+ \begin{scope}[every hex/.style={/hex/label=auto},
+ hex/board frame/.style={fill=Tan}]
+ \boardframe[0.5](c=0,r=0)(c=3,r=3)
+ \boardpath(c=0,r=0)(c=3,r=3)
+ \draw[fill=white,very thick] \hexboardpath;
+ \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+ \testmap{}
+ \end{scope}
+\end{tikzpicture}
+
+\section{Some chits}
+
+\begin{tikzpicture}
+ \fill[red!50] (1,-1) rectangle (3,1);
+ \firstchit(0,0)%
+ %\secondchit(2,0)%
+ \fourthchit(2,0)%
+ \thirdchit(4,0)%
+ \turnchit(6,0)%
+% \chitdbglvl=4
+ \chit[my chit](0,-2)
+ \chit[my chit,color=white,fill=red,right={chit/identifier=1}](2,-2)
+% \chitdbglvl=0
+ \chit[fort](4,-2)
+ \node[chit={my chit},/chit/left={[font=\noexpand\rmfamily]chit/identifier={foo}},draw] at (6,-2) {};
+%
+\end{tikzpicture}
+
+\section{Chits on a board}
+\begin{tikzpicture}
+ \begin{scope}[every hex/.style={/hex/label=auto},transform shape]
+ \boardframe[0.5](c=0,r=0)(c=3,r=3)
+ \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+ \testmap{}
+ \firstchit(hex cs:c=2,r=1)
+ \secondchit(hex cs:c=3,r=0)
+ \thirdchit(hex cs:c=0,r=3)
+
+ \stackchits(hex cs:c=0,r=1)(.3,.3){
+ \noexpand\firstchit,
+ \noexpand\secondchit/\noexpand\chit[{full=chit/eliminate}]}
+
+ \begin{scope}[m/.style={hex/long move=green}]
+ \path[m] (hex cs:c=3,r=0) -- (hex cs:c=3,r=1)--(hex cs:c=3,r=2);
+ \end{scope}
+ \begin{scope}[a/.style={hex/attack}]
+ \path[a] (hex cs:c=1,r=0) -- (hex cs:c=1,r=1);
+ \end{scope}
+ \end{scope}
+ \turnchit(7,3)
+\end{tikzpicture}
+
+\section{NATO App6(C) symbols}
+
+\begin{tikzpicture}
+ \natoapp[faction=friendly,frame={faction},command=land,main=infantry](0,0)
+ %
+ \natoapp[faction=friendly,
+ frame={faction},
+ main={infantry,engineer},
+ lower=mountain,
+ color=red](2,0)
+ %
+ \natoapp[faction=unknown,
+ command=sea surface,
+ main={diving=military},color=blue](4,0)
+ %
+ \natoapp[faction=unknown,
+ command=space,
+ main={[fill]satellite},
+ color=green](6,0)
+ %
+ \natoapp[
+ faction=none,
+ command=base,
+ echelon=army,
+ main={text=M},
+ top={text=T},
+ bottom={text=B},
+ left={text=L},
+ right={text=R},
+ below={text=V}](8,0)
+ %
+ \natoapp[faction=hostile,
+ frame={faction},
+ command=land,
+ echelon=company,
+ main=rifle](10,0)
+ \begin{scope}[scale=.5]
+ \natoapp[faction=hostile,
+ command=land,
+ echelon=platoon,
+ main={rifle}](24,0)
+ \end{scope}
+
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy](0,-2)
+
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy,scale line widths,line
+ width=1pt](2,-2)
+
+ \begin{scope}[scale=.5]
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy,scale line widths,line
+ width=1pt](8,-4)
+ \end{scope}
+\end{tikzpicture}
+
+\section{Rotations}
+
+%\chitdbglvl=5
+%\natoappdbglvl=11
+\begin{tikzpicture}
+ \begin{scope}[rotate=45,transform shape]
+ \message{^^J======= Chit rotated 45}
+ \chit[symbol={[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour]}](0,0)
+
+ \message{^^J======= NATO App6(D) rotated 45}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour](0,2)
+
+ \message{^^J======= NATO App6(D) rotated 45}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=air defence](0,4)
+ \end{scope}
+
+ \begin{scope}[shift={(4,0)}]
+ \message{^^J==== Normal chit}
+ \chit[symbol={[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour]}](0,0)
+
+ \message{^^J==== Normal NATO App6(D)}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour](0,2)
+
+ \message{^^J==== Normal NATO App6(D)}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=air defence](0,4)
+
+ \end{scope}
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \begin{scope}[]
+ \node[draw,chit={symbol={faction=friendly,command=land,main=infantry}}]
+ (A) {};
+ \foreach \a in {north,west,south,east}{%
+ \draw[fill=red] (A.\a) circle(.1);}
+ \draw[thick,green] circle(.2);
+ \end{scope}
+\end{tikzpicture}
+\end{document}
diff --git a/macros/latex/contrib/wargame/source/util/core.dtx b/macros/latex/contrib/wargame/source/util/core.dtx
new file mode 100644
index 0000000000..a3c656a2b3
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/util/core.dtx
@@ -0,0 +1,1299 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.util} \TikZ{} library}
+% \label{sec:impl:util}
+%
+% This library contains some utilities for use in the other
+% libraries.
+%
+% \iffalse
+%<*utils>
+%\fi
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Miscellaneous macros}
+%
+% \begin{Macro}{\wg@dbg}
+% Debugging support. The counter \cs{wargamedbglvl} sets the debug
+% level. The package code then uses \cs{wg@dbg} to print out
+% debugging messages. This macro takes two arguments --- the first
+% is the \emph{least} debug level at which the message is printed, and
+% the second is the message it self.
+%
+% \begin{macrocode}
+\newcount\wargamedbglvl\wargamedbglvl=0
+\def\wg@dbg#1#2{%
+ \ifnum#1>\wargamedbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\wg@addto@macro}
+%
+% The macro \cs{wg@addto@macro}\marg{macro}\marg{other} adds the
+% definition of the macro \meta{other} to the macro \meta{macro}.
+% This uses the \cs{toks} trick of storing the \emph{tokens} of the
+% definition of a \meta{macro} and \meta{other} into \spec{@} and
+% expanding that token into the definition of \meta{macro}.
+% Effectively, this means that the top-level definition of
+% \meta{macro} and \meta{other} are expanded (i.e., macros used in
+% the definition of either macro is \emph{not} expanded) and then
+% that becomes the new definition of \meta{macro}.
+%
+% We will use this macro to do \emph{shallow} definitions of macros
+% to contain keys and such.
+%
+% \begin{macrocode}
+\long\def\wg@addto@macro#1#2{%
+ \begingroup
+ \toks@\expandafter\expandafter\expandafter{\expandafter#1#2}%
+ \xdef#1{\the\toks@}%
+ \endgroup}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@sub@nchor}
+% Get anchor from sub node. We cannot use \cs{pgfpointanchor} since
+% that returns the anchor coordinates in the global coordinate
+% system.
+%
+% \begin{macrocode}
+\def\wg@sub@nchor#1#2{%
+ \wg@dbg{3}{^^JGet `#2' in `#1'}%
+ \@ifundefined{pgf@sh@ns@#1}{%
+ \pgf@x=0cm\pgf@y=0cm}{%
+ \pgf@process{%
+ \csname pgf@sh@ma@#1\endcsname% MW
+ \csname pgf@sh@np@#1\endcsname%
+ \pgf@sh@reanchor{\csname pgf@sh@ns@#1\endcsname}{#2}}}%
+ \wg@dbg{10}{-> \the\pgf@x,\the\pgf@y}%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% Scratch dimensions
+%
+% \begin{macrocode}
+\newdimen\wg@tmpa
+\newdimen\wg@tmpb
+\newdimen\wg@tmpc
+\newdimen\wg@tmpd
+% \end{macrocode}
+%
+%
+% Macro to easy restore a saved path
+%
+% \begin{macrocode}
+\def\settosave#1{
+ \pgfsyssoftpath@setcurrentpath{#1}}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Pictures in compound nodes}
+%
+% \begin{Macro}{\wg@pic}
+% The macro \cs{wg@pic} will render a \texttt{pic}. This is used by
+% the \texttt{natoapp6cs}, \texttt{chit}, and \texttt{hex} node
+% shapes extensively.
+%
+% The arguments are
+% \begin{enumerate}
+% \item Prefix
+% \item Position
+% \item Fixed options
+% \item User options
+% \item Picture.
+% \end{enumerate}
+%
+% That is, the macro expects calls like
+% \begin{Syntax}
+% \cs{wg@pic}\oarg{options}\meta{picture}\cs{@endwg@pic}\marg{prefix}\marg{position}\marg{options}
+% \end{Syntax}
+%
+% Note the \cs{@endwg@pic} at the end of the call to swallow up
+% \meta{picture}. Typically this macro is used as
+%
+% \begin{Syntax}
+% \cs{edef}\cs{args}\{\meta{something}\}
+% \cs{expandafter}\cs{wg@pic}\cs{args}\cs{@endwg@pic}\marg{prefix}\parg{position}\marg{options}
+% \end{Syntax}
+%
+% where \meta{something} typically expands to \oarg{user
+% option}\meta{picture}
+%
+% First, the top-level macro \cs{wg@pic} that looks for user
+% options.
+%
+% \begin{macrocode}
+\def\wg@pic{%
+ \@ifnextchar[{\wg@@pic}{\wg@@pic[]}%]
+}
+% \end{macrocode}
+%
+% This macro then forwards to \cs{wg@@pic} to gobble up
+% \meta{picture}.
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@pic[#1]#2\@endwg@pic{%
+ \wg@dbg{2}{Options: `#1', picture: `#2'}%
+ \wg@@@pic{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \item Prefix
+% \item Coordinates
+% \item Fixed options
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@@pic#1#2#3#4#5{%
+ \ifx|#2|\wg@dbg{3}{No picture given}%
+ \else%
+ \wg@dbg{3}{^^JWG Pic:
+ ^^J User options: #1
+ ^^J Picture: #2
+ ^^J Prefix: #3
+ ^^J Coordinates: #4
+ ^^J Fixed options: #5}%
+ % \wg@dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+ \pic[#5,#1] at (#4) {#3#2};%
+ \ifwg@s@ve%
+ \pgf@relevantforpicturesizetrue%
+ \begin{getbbl}%
+ \pic[draw=none,fill=none,transform shape] at (#4) {#3#2};%
+ \end{getbbl}%
+ \wg@dbg{5}{Clipping to local bounding box}%
+ \clip (L.south west) rectangle (L.north east);%
+ \pgf@relevantforpicturesizefalse \global\wg@s@vefalse%
+ \fi
+ \fi%
+ \wg@dbg{3}{End of WG Pic}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@pic@all}
+%
+% This macro sets all pictures in a list.
+%
+% \begin{enumerate}
+% \item List
+% \item Prefix
+% \item Position
+% \item Styles
+% \end{enumerate}
+%
+%
+% \begin{macrocode}
+\def\wg@pic@all#1#2#3#4{%
+ \wg@dbg{2}{WG picture loop
+ ^^J List: \meaning#1
+ ^^J Prefix: `#2'
+ ^^J Position: `#3'
+ ^^J Styles: `#4'}
+ \foreach \p in #1{%
+ \wg@dbg{2}{WG picture element: \meaning\p}%
+ \expandafter\wg@pic\p\@endwg@pic {#2}{#3}{#4}%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Nodes in compound nodes}
+%
+% \begin{Macro}{\wg@node}
+% The macro \cs{wg@node} will render a \texttt{node}. This can be
+% used by the \texttt{natoapp6cs}, \texttt{chit}, and \texttt{hex}
+% node shapes.
+%
+% The arguments are
+% \begin{enumerate}
+% \item Prefix
+% \item Position
+% \item Fixed options
+% \item User options
+% \item Body.
+% \end{enumerate}
+%
+% That is, the macro expects calls like
+% \begin{Syntax}
+% \cs{wg@node}\oarg{options}\meta{body}\cs{@endwg@node}\marg{prefix}\marg{position}\marg{options}
+% \end{Syntax}
+%
+% Note the \cs{@endwg@node} at the end of the call to swallow up
+% \meta{body}. Typically this macro is used as
+%
+% \begin{Syntax}
+% \cs{edef}\cs{args}\{\meta{something}\}
+% \cs{expandafter}\cs{wg@node}\cs{args}\cs{@endwg@node}\marg{prefix}\parg{position}\marg{options}
+% \end{Syntax}
+%
+% where \meta{something} typically expands to \oarg{user
+% option}\meta{body}
+%
+% First, the top-level macro \cs{wg@node} that looks for user
+% options.
+%
+% \begin{macrocode}
+\def\wg@node{%
+ \@ifnextchar[{\wg@@node}{\wg@@node[]}%]
+}
+% \end{macrocode}
+%
+% This macro then forwards to \cs{wg@@node} to gobble up
+% \meta{body}.
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@node[#1]#2\@endwg@node{%
+ \wg@dbg{2}{Options: `#1', body: `#2'}%
+ \wg@@@node{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \item Prefix
+% \item Coordinates
+% \item Fixed options
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@@node#1#2#3#4#5{%
+ \ifx|#2|\wg@dbg{3}{No body given}%
+ \else%
+ \wg@dbg{3}{^^JWG Pic:
+ ^^J User options: #1
+ ^^J Body: #2
+ ^^J Prefix: #3
+ ^^J Coordinates: #4
+ ^^J Fixed options: #5}%
+ % \wg@dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+ \node[#5,#1] at (#4) {#3#2};%
+ \fi%
+ \wg@dbg{3}{End of WG Node}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@node@all}
+%
+% This macro sets all pictures in a list.
+%
+% \begin{enumerate}
+% \item List
+% \item Prefix
+% \item Position
+% \item Styles
+% \end{enumerate}
+%
+%
+% \begin{macrocode}
+\def\wg@node@all#1#2#3#4{%
+ \wg@dbg{2}{WG picture loop
+ ^^J List: \meaning#1
+ ^^J Prefix: `#2'
+ ^^J Position: `#3'
+ ^^J Styles: `#4'}
+ \foreach \p in #1{%
+ \wg@dbg{2}{WG picture element: \meaning\p}%
+ \expandafter\wg@node\p\@endwg@node {#2}{#3}{#4}%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Bounding boxes}
+%
+% Bounding box dimensions
+%
+%
+% \begin{macrocode}
+\newdimen\wg@bb@minx
+\newdimen\wg@bb@miny
+\newdimen\wg@bb@maxx
+\newdimen\wg@bb@maxy
+% \end{macrocode}
+%
+%
+%
+% Enable or disable bounding box tracking
+%
+% \begin{macrocode}
+\newif\ifwg@notrelevantforpathsize\wg@notrelevantforpathsizefalse
+% \end{macrocode}
+%
+%
+% \begin{Macro}{wg@resetbb}
+% Reset the bounding box tracking dimensions
+%
+% \begin{macrocode}
+\def\wg@resetbb{%
+ \global\wg@bb@minx=16000pt\relax%
+ \global\wg@bb@miny=16000pt\relax%
+ \global\wg@bb@maxx=-16000pt\relax%
+ \global\wg@bb@maxy=-16000pt\relax%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\old@pgf@protocolsize}
+% Save PGF's bounding box algorithm
+%
+% \begin{macrocode}
+\let\old@pgf@protocolsize\pgf@protocolsizes
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\wg@protocolsizes}
+% Our bounding box algorithm
+%
+% \begin{macrocode}
+\def\wg@protocolsizes#1#2{%
+ \old@pgf@protocolsize{#1}{#2}
+ \ifwg@notrelevantforpathsize\else%
+ \ifdim#1<\wg@bb@minx\global\wg@bb@minx#1\fi%
+ \ifdim#1>\wg@bb@maxx\global\wg@bb@maxx#1\fi%
+ \ifdim#2<\wg@bb@miny\global\wg@bb@miny#2\fi%
+ \ifdim#2>\wg@bb@maxy\global\wg@bb@maxy#2\fi%
+ \fi
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% % \begin{environment}{getbbl}
+% Environment that tracks the local bounding box
+%
+% \begin{macrocode}
+\newenvironment{getbbl}{%
+ \wg@resetbb%
+ \wg@notrelevantforpathsizefalse%
+ \global\let\pgf@protocolsizes\wg@protocolsizes}{%
+ \gdef\pgf@sh@ns@L{rectangle}
+ \gdef\pgf@sh@np@L{%
+ \def\southwest{\pgfqpoint{\the\wg@bb@minx}{\the\wg@bb@miny}}%
+ \def\northeast{\pgfqpoint{\the\wg@bb@maxx}{\the\wg@bb@maxy}}%
+ }
+ \gdef\pgf@sh@nt@L{{1}{0}{0}{1}{0pt}{0pt}}
+ \gdef\pgf@sh@pi@L{\pgfpictureid}
+ \global\let\pgf@protocolsizes\old@pgf@protocolsize
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{getbb}
+% Environment to track global bounding box
+%
+% \begin{macrocode}
+\newenvironment{getbb}{%
+ \wg@resetbb%
+ \wg@notrelevantforpathsizefalse%
+ \global\let\pgf@protocolsizes\wg@protocolsizes}{%
+ \gdef\pgf@sh@ns@M{rectangle}
+ \gdef\pgf@sh@np@M{%
+ \def\southwest{\pgfqpoint{\the\wg@bb@minx}{\the\wg@bb@miny}}%
+ \def\northeast{\pgfqpoint{\the\wg@bb@maxx}{\the\wg@bb@maxy}}%
+ }
+ \gdef\pgf@sh@nt@M{{1}{0}{0}{1}{0pt}{0pt}}
+ % \pgfgettransform\pgf@temp%
+ % \xdef\pgf@sh@nt@M{\pgf@temp}
+ % \pgfgettransformentries{\wg@tmp@a}{\wg@tmp@b}{\wg@tmp@c}{\wg@tmp@d}{\pgf@temp}{\pgf@temp}
+ % \message{^^JTransform of M: \meaning\pgf@temp}
+ % \xdef\pgf@sh@nt@M{{\wg@tmp@a}{\wg@tmp@b}{\wg@tmp@c}{\wg@tmp@d}{0pt}{0pt}}%
+ % \message{^^JTransform of M: \meaning\pgf@sh@nt@M}
+ \gdef\pgf@sh@pi@M{\pgfpictureid}
+ \global\let\pgf@protocolsizes\old@pgf@protocolsize
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Other Tikz utilities}
+%
+% \begin{TikzKey}{tikz/reverseclip}
+%
+% A reverse clipping path. This is used to cut out stuff outside of
+% path defined.
+%
+% \begin{macrocode}
+\tikzstyle{reverseclip}=[insert path={(current bounding box.north east) --
+ (current bounding box.south east) --
+ (current bounding box.south west) --
+ (current bounding box.north west) --
+ (current bounding box.north east)}]
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{tikz/clip even odd rule}
+% A reverse clipping path
+%
+% \begin{macrocode}
+\tikzset{
+ clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \begin{TikzKey}{tikz/invclip}
+%
+% Inverse clipping. This should be an option \emph{after} the path to
+% do the inverse clipping by. This works by adding a \emph{large}
+% (page) path to the current path, and then use that as clipping.
+%
+% \begin{macrocode}
+\tikzset{
+ invclip/.style={
+ clip,insert path=
+ [clip even odd rule]{
+ [reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
+ }
+ },
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{save clip}
+%
+% An option for use with sub-elements of NATO App 6(c) or chit
+% nodes. This will save the current path as a clipping path for the
+% next paths to be drawn in the sub-element
+%
+% \begin{macrocode}
+\newif\ifwg@s@ve\wg@s@vefalse
+\tikzset{
+ save clip/.is choice,
+ save clip/true/.code={\global\wg@s@vetrue},
+ save clip/false/.code={\global\wg@s@vefalse},
+ save clip/.default={true},
+ save clip/.initial={false},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{scale line widths}
+%
+% Scales any line width specified in the node options.
+%
+% Use like
+%
+% \begin{verbatim}
+% \tikzset{
+% some/.style={
+% scale line widths,
+% line width=1pt}
+% }
+% \end{verbatim}
+%
+% Note that the order is important.
+%
+% \begin{macrocode}
+\tikzset{
+ scale line widths/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \pgfgettransformentries{%
+ \wg@jaca}{%
+ \wg@jacb}{%
+ \wg@jacc}{%
+ \wg@jacd}{%
+ \wg@tmp}{%
+ \wg@tmp}%
+ \pgfmathsetmacro{\wg@jac}{sqrt(abs(\wg@jaca*\wg@jacd-\wg@jacb*\wg@jacc))}%
+ \wg@dbg{4}{Scaling line width ##1 by \wg@jac}
+ \pgfmathsetmacro{\wg@lw}{\wg@jac*##1}%
+ \wg@dbg{4}{Scaled ##1 -> \wg@lw}
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw pt}}%
+ \wg@dbg{4}{Added scaled option \wg@lw}
+ \pgfmathsetlength\pgflinewidth{\wg@lw pt}
+ \wg@dbg{4}{Did set line width \wg@lw pt}
+ }},
+ relative line width/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \wg@dbg{4}{Relative line width #1 times ##1}%
+ \pgfmathsetmacro{\wg@lv}{#1*##1}%
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw pt}}%
+ \pgfmathsetlength\pgflinewidth{\wg@lw pt}}}
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{sub pic actions}
+%
+% This is key that propagates actions to sub pictures of pictures.
+% The normal \texttt{pic actions} cannot be used as it causes an
+% infinite loop.
+%
+% \begin{macrocode}
+\tikzset{
+ sub pic actions/.code={%
+ \tikz@picmode%
+ \edef\opts{%
+ \iftikz@mode@draw draw,\else draw=none,\fi
+ \iftikz@mode@fill fill\else fill=none\fi}
+ \wg@dbg{5}{^^JSub Mode: \meaning\tikz@picmode \meaning\opts}
+ \pgfset{/tikz/.cd}
+ \pgfkeysalsofrom{\opts}
+ }}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{wg/debug show}
+%
+% Show debugging information
+%
+% \begin{macrocode}
+\tikzset{
+ wg/debug show/.code={%
+ \extractcolorspec{pgfstrokecolor}{\wg@tmp@fg}
+ \def\wg@tmp@bg{none}
+ \@ifundefinedcolor{pgffillcolor}{}{
+ \extractcolorspec{pgffillcolor}{\wg@tmp@bg}}
+ \begingroup
+ \tikz@mode
+ \wargamedbglvl=#1
+ \wg@dbg{3}{Drawing with w/stroke `\wg@tmp@fg'
+ (\tikz@strokecolor,\iftikz@mode@draw\else not\space\fi drawing)
+ and fill `\wg@tmp@bg' (\tikz@fillcolor,\iftikz@mode@fill\else
+ not\space\fi filling)}
+ \endgroup
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Random IDs}
+%
+%
+% \begin{macrocode}
+\def\wg@r@ndom@id{%
+ \def\wg@uuid{}
+ \foreach \i in {1,...,8}{%
+ \pgfmathparse{Hex(random(0,15))}
+ \xdef\wg@uuid{\wg@uuid\pgfmathresult}}}
+% \end{macrocode}
+%
+% \iffalse
+%</utils>
+%\fi
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wgexport} class}
+% \label{sec:impl:util}
+%
+% This document class is used for exporting game component to be used
+% in a VASSAL module
+% libraries.
+%
+% \iffalse
+%<*exportcls>
+%\fi
+%
+% Class identification and load \texttt{wargame} package
+%
+% \begin{macrocode}
+\ProvidesClass{wgexport}
+\PassOptionsToClass{multi=tikzpicture,varwidth=false}{standalone}
+\DeclareOption{noterrainpic}{%
+ \PassOptionsToPackage{\CurrentOption}{wargame}}
+\DeclareOption{terrainpic}{%
+ \PassOptionsToPackage{\CurrentOption}{wargame}}
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{standalone}}
+\ProcessOptions\relax
+\LoadClass{standalone}
+\RequirePackage{wargame}
+% \end{macrocode}
+%
+% We need a few utilities before we get to the actual environment.
+% First, we need a tools to write out literal left and right curly
+% braces. We do a bit of catcode hackery to accomplish that.
+%
+% \begin{macrocode}
+\begingroup
+\catcode`\^^I=12
+\def\@tabchar{^^I}
+\catcode`<=1 \catcode`>=2
+\catcode`{=12 \catcode`}=12
+\gdef\@lbchar<{>
+\gdef\@rbchar<}>
+\endgroup
+% \end{macrocode}
+%
+% Above, we temporarily set the tab, and left and right curly brace
+% characters to be regular letters (12), and the catcodes of less than
+% and greater than to be those of left and right curly braces
+% respectively. We then define the macros \cs{@tabchar},
+% \cs{@lbchar}, and \cs{@rbchar} to produce literal characters.
+% \LaTeX already has \cs{@percentchar}.
+%
+% Everything we do should go inside this environment. The single
+% optional argument is the file name stem of the output JSON file.
+%
+% \begin{macrocode}
+\newenvironment{imagelist}[1][\jobname]{%
+ \newwrite\mk@out%
+ \def\mk@i{}%
+ \def\mk@w{\immediate\write\mk@out}%
+ \immediate\openout\mk@out=#1.json
+ \mk@w{[}
+}{
+ \mk@w{\mk@i \@lbchar "name":"End of list", "category": "<<eol>>",
+ "subcategory": "" \@rbchar }
+ \mk@w{]}
+ \immediate\closeout\mk@out
+}
+% \end{macrocode}
+%
+%
+% Preceed all images (\textsf{tikzpicture}) with this command
+%
+% First argument is the name of the image. This can be anything.
+% Note that for counters, if the name ends in \texttt{flipped} then it
+% is considered the backside of a counter.
+%
+% Second argument is the type of image. Recognised types are
+%
+% \begin{itemize}
+% \item \texttt{board} for boards
+% \item \texttt{oob} for OOBs
+% \item \texttt{chart} for charts
+% \item \texttt{counter} for counters
+% \item \texttt{front} for front page
+% \end{itemize}
+%
+% Other types can be used, and the images will be exported, but the
+% Python script pays no particular attention to those then. Use for
+% example to prepare images for help or the like.
+%
+% The third argument is the sub type. This is most relevant for the
+% counters. Sub types can be anything, but since the counters will
+% receive different prototypes based on the sub type, it makes sense
+% to divide into sub types a la
+%
+% \begin{itemize}
+% \item factions
+% \item common markers
+% \end{itemize}
+%
+% The faction sub types should just be the name of the faction.
+% E.g., Allies, Axis, Soviet, NATO, Warsaw Pact. Spaces should not
+% matter.
+%
+% For common markers, there are a few names that are recognised
+% specifically by the Python script. These are
+%
+% \begin{itemize}
+% \item \texttt{common}
+% \item \texttt{all}
+% \item \texttt{marker}
+% \item \texttt{markers}
+% \end{itemize}
+%
+% Counters that has these sub-types will no be considered to belong
+% to any faction.
+%
+% Note that the Python script uses the faction names to guess the
+% players of the game, and uses them in several places.
+%
+%
+% \begin{macrocode}
+\def\info{%
+ \@ifstar{\@@info{,}}{\@@info{\@rbchar,}}}
+\def\@@info#1#2#3#4{%
+ \chit@dbg{2}{Making image `#2' of type `#3'/`#4' on page \thepage}%
+ \mk@w{ \@lbchar}%
+ \mk@w{ \space "name": "#2",}%
+ \mk@w{ \space "category": "#3",}%
+ \mk@w{ \space "subcategory": "#4", }%
+ \mk@w{ \space "number": \thepage #1}%
+ \let\oldmk@i\mk@i%
+ \ifx#1,\relax\edef\mk@i{\mk@i\space\space}\fi}
+\def\end@info{%
+ \let\mk@i\oldmk@i%
+ \mk@w{ \space \@rbchar,}}
+% \end{macrocode}
+%
+% Make separate images for each counter (single sided).
+%
+% \begin{macrocode}
+\newcommand\chitimages[2][]{%
+ \begingroup%
+ \let\chit@report\do@chit@report%
+ \let\natoapp@report\do@natoapp@report%
+ \chit@dbg{2}{chits to make images of `#2'}%
+ \foreach[count=\ti from 0] \t/\x in #2{%
+ \ifx\t\empty\else% Ignore empty rows
+ \message{^^JSubcategory: `\x' (default `#1')}
+ \ifx\t\x\def\x{#1}\fi% Take sub-category or default
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else% Ignore empty cells
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined
+ \ifx\u\m\def\m{1}\fi% If the same as unit
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ %% We only make one copy of the chit, since we can duplicate
+ %% it in VASSAL
+ \info*{\u}{counter}{\x}
+ \begin{tikzpicture}
+ \chit[\u=\ti]%
+ \end{tikzpicture}
+ \end@info%
+ %% \foreach \n in {1,...,\m}{% Make a number of copies
+ %% \ifx\u\chit@blank%
+ %% \chit@dbg{3}{Ignoring blank chit:\u}%
+ %% \else%
+ %% \info{\u}{counter}{#2}
+ %% \begin{tikzpicture}
+ %% \chit[\u=\ti](\c,\r)%
+ %% \end{tikzpicture}
+ %% \fi%
+ %% }%
+ \fi%
+ }%
+ \chit@dbg{2}{End of inner loop}%
+ \fi%
+ }%
+ \chit@dbg{2}{End of outer loop}%
+ \endgroup%
+}
+% \end{macrocode}
+%
+% Make separate images for each counter (double sided). The back-side
+% counters must be defined by append `\texttt{ flipped}' the front
+% face name
+%
+% \begin{macrocode}
+\newcommand\doublechitimages[2][]{%
+ \begingroup%
+ \let\chit@report\do@chit@report%
+ \let\natoapp@report\do@natoapp@report%
+ \foreach[count=\ti from 0] \t/\x in #2{%
+ \ifx\t\empty\else% Ignore empty rows
+ \message{^^JSubcategory: `\x' (default `#1')}
+ \ifx\t\x\def\x{#1}\fi% Take sub-category or default
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else% Ignore empty cells
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined
+ \ifx\u\m\def\m{1}\fi% If the same as unit
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ %% Flipped chit
+ \edef\s{\u\space flipped}%
+ %% We only make one copy of the chit, since we can duplicate
+ %% it in VASSAL
+ \info*{\u}{counter}{\x}%
+ \begin{tikzpicture}%
+ \chit[\u=\ti]%
+ \end{tikzpicture}%
+ \end@info%
+ \info*{\s}{counter}{\x}%
+ \begin{tikzpicture}%
+ \chit[\s=\ti]%
+ \end{tikzpicture}%
+ \end@info%
+ %% \foreach \n in {1,...,\m}{% Make a number of copies
+ %% \ifx\u\chit@blank%
+ %% \chit@dbg{3}{Ignoring blank chit:\u}%
+ %% \else%
+ %% \info{\u}{counter}{#2}
+ %% \begin{tikzpicture}
+ %% \chit[\u=\ti](\c,\r)%
+ %% \end{tikzpicture}
+ %% \fi%
+ %% }%
+ \fi%
+ }%
+ \fi%
+ }%
+ \endgroup%
+}
+% \end{macrocode}
+%
+% Special for boards, we have the environment \textsf{boardimage}.
+% Like \cs{info} we must specify the name and sub-category of the
+% board, but the category is assumed to be \texttt{board} (though the
+% optional argument can specify a different category).
+%
+% Within this environment some specific styles are defined that allows
+% the user to specify VASSAL zones on the board. For this to work
+% properly, the parent \textsf{tikzpicture} \emph{must} have the style
+% \texttt{zoned}. This style will record the bounding box of the
+% picture which we will need to calculate VASSAL coordinates later
+% on.
+%
+% Other styles are \texttt{zone scope}, to be applied to
+% \texttt{scope}s in the picture, and \texttt{zone path} to be applied
+% to \texttt{path}s (or \cs{draw}, \cs{fill}, or the like) in the
+% picture. These will record coordinates of these elements in side
+% the picture. The Python script will then define VASSAL zones based
+% on these coordinates.
+%
+% For \texttt{zone scope} applied to a \texttt{scope}, what is
+% recorded are
+%
+% \begin{itemize}
+% \item The current coordinate transformation matrix
+% \item The current translation
+% \item The bounding box, within the current transformation and
+% translation.
+% \end{itemize}
+%
+% To define a zone in the board, simply enclose it in a
+%
+% \begin{verbatim}
+% \begin{scope}[zone scope=name]
+% ...
+% \end{scope}
+% \end{verbatim}
+%
+% The \meta{name} will be the name of the scope. If this contains the
+% sub-string \texttt{hex} (upper, lower, or mixed case), then the zone
+% will get a hex grid with numbering attached to it.
+%
+% If the \meta{name} contains the sub-string \texttt{turn} (any case),
+% then it is assumed to be a turn track and a rectangular grid will be
+% attached. The column and row separator will be set to \texttt{T},
+% so that it won't collide with the main zone. Similar if \meta{name}
+% contains \texttt{oob}, except the separator is set to \texttt{O}.
+%
+% If \meta{name} contains the sub-string \texttt{pool}, then it is
+% assumed to be a pool of counters, and \emph{no} grid is attached.
+%
+% For \texttt{zone path} applied to a \texttt{path}, what is recorded
+% is the path coordinates (as straight line segments) in the global
+% coordinate system.
+%
+% Both styles take one argument --- the name of the zone. If that
+% name contains the sub-string \texttt{hex} anywhere in the name, then
+% the zone is assumed to contain a hex grid. Otherwise, a rectangular
+% grid (of fixed size) will be applied to it.
+%
+% The environment \texttt{boardimage} also records the coordinate
+% options currently in use (keys \texttt{hex/first row is},
+% \texttt{hex/row direction is}, and so on), as well as the current
+% label option (as defined by \texttt{every hex} or \texttt{every hex
+% node}).
+%
+% All coordinates, and such are recorded in centimetres. It is worth
+% remembering that the Tikz coordinate system has the $y$ axis point
+% upward, while typical image software has the $y$ axis point down.
+% \texttt{pdftocairo} typically assumes a 150 PPI (pixels-per-inch)
+% resolution.
+%
+% That means that scaling factor becomes
+%
+% $$\frac{150\mathrm{pixel}}{2.54\mathrm{cm}}=59.055\frac{\mathrm{pixel}}{\mathrm{cm}}$$
+%
+% \iffalse
+% Using definition in terms of printers feet - the one to use!
+%
+% PNG: 1674 x 1101
+% PDF: "lower left": [-0.02107,-0.02107],
+% "upper right": [28.31705,18.60843]
+% Width: 28.31705+0.02107 = 28.33812
+% Height: 18.60843+0.02107 = 18.62950
+% Pixel / cm: 1674 / 28.33812 = 59.07237318495369488166
+% 1101 / 18.62950 = 59.09981480984460130438
+% Average = 59.08609399739914809302
+%
+% Calculated = 150 / 2.54 = 59.05511811023622047244
+%
+% Using 1/72.27
+%
+% "lower left": [-0.02109,-0.02109],
+% "upper right": [28.321,18.61102]
+% Width: 28.321+0.02109=28.34209
+% Height: 18.61102+0.02109=18.63211
+% Pixel / cm: 1674 / 28.34209 = 59.06409866033168337267
+% 1101 / 18.63211 = 59.09153606328000425072
+% Average = 59.07781736180584381169
+% \fi
+%
+% The information extracted is written to the
+% \cs{jobname}\texttt{.json} file as a sub-object (with name given by
+% the first optional argument) of the image object. In that way, we
+% can later on easily get the information from our catalogue of
+% images.
+%
+% Note, the styles \texttt{zoned}, \texttt{zone scope}, and
+% \texttt{zone path} are defined in \texttt{wargame} to be dummies so
+% that one can have them in the definition of the board without
+% impact.
+%
+% Since we want to write all dimensions in centimetres, we need to be
+% able to convert \texttt{pt} dimensions to centimetres. We make two
+% macros to do that for us.
+%
+% The exact definition of 1pt is
+%
+% $$1\,\mathrm{pt} = \frac{249}{250}12"\frac{1}{864}=\frac{83}{6000}1"
+% = 0.03513\overline{6}$$
+%
+% \begin{macrocode}
+% 2.54 / 72.27 = .03514598035145980351
+% \def\pt@to@cm#1{\pgfmathparse{#1 * 0.0351460}}
+\def\pt@to@cm#1{\pgfmathparse{#1 * 0.0351367}}
+\def\ptpoint@to@cm#1#2{%
+ \pt@to@cm{#1}\edef\x{\pgfmathresult}%
+ \pt@to@cm{#2}\edef\y{\pgfmathresult}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\get@bb#1{%
+ \pgfpointanchor{#1}{south west}%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointanchor{#1}{north east}%
+ \pgfgetlastxy\tmp@urx\tmp@ury%
+ \pt@to@cm{\tmp@llx}\edef\llx{\pgfmathresult}
+ \pt@to@cm{\tmp@lly}\edef\lly{\pgfmathresult}
+ \pt@to@cm{\tmp@urx}\edef\urx{\pgfmathresult}
+ \pt@to@cm{\tmp@ury}\edef\ury{\pgfmathresult}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\mk@transform{%
+ \pgfgettransformentries{\mxx}{\mxy}{\myx}{\myy}{\ptdx}{\ptdy}
+ \pt@to@cm{\ptdx}\edef\dx{\pgfmathresult}
+ \pt@to@cm{\ptdy}\edef\dy{\pgfmathresult}
+ \mk@w{ \mk@i "xx": \mxx,}
+ \mk@w{ \mk@i "xy": \mxy,}
+ \mk@w{ \mk@i "yx": \myx,}
+ \mk@w{ \mk@i "yy": \myy,}
+ \mk@w{ \mk@i "dx": \dx,}
+ \mk@w{ \mk@i "dy": \dy,}
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\mk@bb#1{%
+ \get@bb{#1}
+ \mk@w{ \mk@i "lower left": [\llx,\lly],}
+ \mk@w{ \mk@i "upper right": [\urx,\ury],}
+ \begingroup
+ % \pgftransforminvert
+ \pgfpointanchor{#1}{south west}%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointtransformed{\pgfpoint{\tmp@llx}{\tmp@lly}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ %
+ \pgfpointanchor{#1}{north east}%
+ \pgfgetlastxy\tmp@urx\tmp@ury%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointtransformed{\pgfpoint{\tmp@urx}{\tmp@ury}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pt@to@cm{\the\pgf@xa}\edef\llx{\pgfmathresult}
+ \pt@to@cm{\the\pgf@ya}\edef\lly{\pgfmathresult}
+ \pt@to@cm{\the\pgf@xb}\edef\urx{\pgfmathresult}
+ \pt@to@cm{\the\pgf@yb}\edef\ury{\pgfmathresult}x
+ \mk@w{ \mk@i "global lower left": [\llx,\lly],}
+ \mk@w{ \mk@i "global upper right": [\urx,\ury]}
+ \endgroup
+}
+% \end{macrocode}
+%
+% For the key \texttt{zone path} to work, we need to be able to record
+% the path as it moves along. To that end, we make a custom
+% decoration that will do that for us, and, once the path is finished,
+% write the path to our JSON file.
+%
+% \begin{macrocode}
+\pgfdeclaredecoration{record path construction}{initial}{%
+ \state{initial}[width=0pt,next state=more]{
+ \begingroup
+ \pgf@decorate@inputsegment@first
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{[\x,\y]}
+ \endgroup
+ }%
+ \state{more}[width=\pgfdecoratedinputsegmentremainingdistance]{%
+ \begingroup
+ \pgf@decorate@inputsegment@last
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{\wg@path,[\x,\y]}
+ \endgroup
+ }
+ \state{final}{%
+ \begingroup
+ \pgf@decorate@inputsegment@last
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{\wg@path,[\x,\y]}
+ \endgroup
+ \mk@w{ \mk@i "zone path \wg@record@path@name": \@lbchar}
+ \mk@w{ \mk@i\space "path": [\wg@path] \@rbchar,}
+ }
+}%
+% \end{macrocode}
+%
+% Now we can make our environment
+%
+% The first thing we do is to use the \cs{info} macro to mark the
+% image. Then we open our JSON file. We make a short-hand macro for
+% writing to that file. The macro \cs{bd@i} records the current
+% indention (which is important in JSON)
+%
+% \begin{macrocode}
+\newenvironment{boardimage}[3][board]{%
+ \def\bd@n{#2}
+ \newcount\mk@point
+ \mk@point=0
+ \let\oomk@i\mk@i%
+% \end{macrocode}
+%
+%
+% Then, to extract the label option, we make a dummy \texttt{node}
+% with the styles \texttt{every hex} and \texttt{every hex node}, so
+% we can extract that option.
+%
+% \begin{macrocode}
+ \info{dummy}{<<dummy>>}{}%
+ %\tikz{}%
+ \tikz{\scoped[every hex/.try,every hex node/.try]{%
+ \node[inner sep=0,outer sep=0]{%
+ \global\let\mk@label\hex@label}}}%
+% \end{macrocode}
+%
+% The next thing we do is to make an object. The first things we put
+% in are the units used (``cm''), and the grid options.
+%
+% \begin{macrocode}
+ \info*{#2}{#1}{#3}%
+ \mk@w{ \mk@i "zones": \@lbchar}%
+ \edef\mk@i{\mk@i\space}
+ %% Everything is made into centimeters
+ \mk@w{ \mk@i "units": "cm",}
+ \message{^^Jlabel: \meaning\mk@label}
+ \@ifundefined{mk@label}{}{\mk@w{ \mk@i "labels": "\mk@label",}}
+ %% Write out coordinate options as "coords" object
+ \mk@w{ \mk@i"coords": \@lbchar}%
+ \mk@w{ \mk@i "row": \@lbchar}%
+ \mk@w{ \mk@i\space "offset": \hex@coords@row@off,}%
+ \mk@w{ \mk@i\space "factor": \hex@coords@row@fac \@rbchar,}%
+ \mk@w{ \mk@i "column": \@lbchar}%
+ \mk@w{ \mk@i\space "offset": \hex@coords@col@off,}%
+ \mk@w{ \mk@i\space "factor": \hex@coords@col@fac,}%
+ \mk@w{ \mk@i\space "top short": "\hex@top@short@col",}%
+ \mk@w{ \mk@i\space "bottom short": "\hex@bot@short@col" \@rbchar}%
+ \mk@w{ \mk@i\@rbchar,}%
+% \end{macrocode}
+%
+% We then monkey-patch \cs{boardframe} to also output coordinates to
+% our JSON file. Note that this will probably be embedded in a
+% different object.
+%
+% \begin{macrocode}
+ %%
+ \let\oldbo@rdframe\bo@rdframe%
+ \def\bo@rdframe[##1](##2)(##3){%
+ \oldbo@rdframe[##1](##2)(##3)%
+ \mk@w{ \mk@i"board frame": \@lbchar}
+ \mk@w{ \mk@i\space "lower left": [\llx,\lly],}
+ \mk@w{ \mk@i\space "upper right": [\urx,\ury],}
+ \mk@w{ \mk@i\space "margin": \margin,}
+ \mk@w{ \mk@i\space "width": \w,}
+ \mk@w{ \mk@i\space "height": \h \@rbchar,}}%
+% \end{macrocode}
+%
+% Next, we make the style \texttt{zoned} to be applied to the
+% \texttt{tikzpicture} environment. This records the bounding box of
+% the full picture.
+%
+% \begin{macrocode}
+ \tikzset{
+ zoned/.code={% Apply to whole picture
+ \pgfkeys{%
+ % This needs to be done in the picture!
+ /tikz/execute at end picture={%
+ \mk@w{ \mk@i "zoned": \@lbchar}
+ \mk@transform%
+ \mk@bb{current bounding box}
+ \mk@w{ \mk@i \@rbchar,}
+ }
+ }
+ },
+% \end{macrocode}
+%
+% The next style is the \texttt{zone scope}. At the start of the
+% scope we record the current transformation matrix. Then we install
+% a handler to extract the bounding box at the end of the scope. Note
+% that we increase indention here.
+%
+% \begin{macrocode}
+ zone scope/.code={%
+ \mk@w{ \mk@i"zone scope ##1": \@lbchar}
+ \let\omk@i\mk@i
+ \edef\mk@i{\mk@i\space}
+ \mk@transform%
+ %\bd@w{ \@rbchar,}
+ \gdef\wg@export@box{##1}%
+ \pgfkeys{%
+ /tikz/local bounding box=wg export box,
+ /tikz/execute at end scope={
+ \mk@bb{wg export box}
+ \let\mk@i\omk@i
+ \mk@w{ \mk@i\@rbchar,}},
+ } % pgfkeys
+ }, % zone scope
+% \end{macrocode}
+% The next style gets the global coordinates of the current (0,0)
+% point - f.ex. in a node - and outputs that
+% \begin{macrocode}
+ zone point/.code n args={3}{
+ \advance\mk@point1
+ \global\mk@point=\mk@point
+ \pgf@xa=##2 cm
+ \pgf@ya=##3 cm
+ \pgfpointtransformed{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ % \pgfpointtransformed{\pgfpoint{0pt}{0pt}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pt@to@cm{\the\pgf@xa}\edef\px{\pgfmathresult}
+ \pt@to@cm{\the\pgf@ya}\edef\py{\pgfmathresult}
+ \mk@w{ \mk@i "point\the\mk@point": \@lbchar "name": "##1", "type": "point", "coords": [\px,\py]
+ \@rbchar, }
+ %\message{^^JZone point \the\mk@point\space ##1: ##2,##3 -> \px,\py}
+ },
+% \end{macrocode}
+%
+% The \texttt{zone path} style is a bit more simple, but only because
+% the bulk of the work is done in a decoration. We need to be able to
+% pass a name to that decoration, s we make a key for that. The user
+% need not think about that though.
+%
+% \begin{macrocode}
+ /pgf/decoration/record path name/.store in=\wg@record@path@name,
+ zone path/.style={%
+ postaction={decorate,decoration={
+ record path construction,
+ record path name=##1}}
+ } % zone path
+ }% tikzset
+}
+% \end{macrocode}
+%
+% That finishes the first part of the environment. At the end of the
+% environment, we simple write the name of the picture, and close our
+% JSON output.
+%
+% \begin{macrocode}
+{%
+ \mk@w{ \mk@i "name": "\bd@n" }%
+ \let\mk@i\oomk@i%
+ \mk@w{ \mk@i\@rbchar}%
+ \end@info%
+}
+% \end{macrocode}
+%
+%
+% TO BE DONE: We could add hooks to both the \texttt{hex} and
+% \texttt{chit} shapes that would allow us to write out the settings
+% for each of these. This would allow us to make data files that
+% contain the information available in the \LaTeX{} code. For
+% example, we could write a counters
+%
+% \begin{itemize}
+% \item Left and right identifiers
+% \item Upper left, upper right, lower left, and lower right
+% identifiers. (some care must be taken if these contains graphics
+% and not just text.)
+% \item Factors
+% \item NATO symbol
+% \begin{itemize}
+% \item Faction, command, echelon
+% \item Mains
+% \item Left, right, top, and bottom attributes and modifiers
+% \item Below attribute
+% \end{itemize}
+% \end{itemize}
+%
+% If one then assumed that for example the upper left corner holds the
+% start-up hex, then one could use that information.
+%
+% The code below exports the chit information to the JSON file. Not
+% sure how to use it though.
+%
+% \begin{macrocode}
+\tikzset{
+ zone turn/.store in=\zone@turn,
+ zone mult/.store in=\zone@mult
+}
+\def\do@chit@report{%
+ \mk@w{ \mk@i "chit": \@lbchar}
+ \@ifundefined{id}{} {\mk@w{ \mk@i\space "id": "\id", }}%
+ \@ifundefined{chit@symbol}{} {\mk@w{ \mk@i\space "symbol": "true", }}%
+ \@ifundefined{chit@full}{} {\mk@w{ \mk@i\space "full": "\chit@full", }}
+ \@ifundefined{chit@factors}{} {\mk@w{ \mk@i\space "factors": "\chit@factors", }}%
+ \@ifundefined{chit@left}{} {\mk@w{ \mk@i\space "left": "\chit@left", }}%
+ \@ifundefined{chit@right}{} {\mk@w{ \mk@i\space "right": "\chit@right", }}%
+ \@ifundefined{chit@upper@left}{} {\mk@w{ \mk@i\space "upper left": "\chit@upper@left", }}%
+ \@ifundefined{chit@lower@left}{} {\mk@w{ \mk@i\space "lower left": "\chit@lower@left", }}%
+ \@ifundefined{chit@upper@right}{}{\mk@w{ \mk@i\space "upper right": "\chit@upper@right", }}%
+ \@ifundefined{chit@lower@right}{}{\mk@w{ \mk@i\space "lower right": "\chit@lower@right}", }%
+ \mk@w{ \mk@i\space "end": 0}
+ \@ifundefined{chit@symbol}{
+ \mk@w{ \mk@i \@rbchar }
+ }{
+ \mk@w{ \mk@i \@rbchar, }% NATOAPP6c will follow
+ }%
+}
+\def\do@natoapp@report{%
+ \mk@w{ \mk@i "natoapp6c": \@lbchar}
+ \@ifundefined{id}{}{\mk@w{ \mk@i\space "id": "\id", }}
+ \@ifundefined{natoapp@fac}{}{\mk@w{ \mk@i\space "faction": "\natoapp@fac", }}
+ \@ifundefined{natoapp@cmd}{}{\mk@w{ \mk@i\space "command": "\natoapp@cmd", }}
+ \@ifundefined{natoapp@ech}{}{\mk@w{ \mk@i\space "echelon": "\natoapp@ech", }}
+ \@ifundefined{natoapp@main}{}{\mk@w{ \mk@i\space "main": "\natoapp@main", }}
+ \@ifundefined{natoapp@left}{}{\mk@w{ \mk@i\space "left": "\natoapp@left", }}
+ \@ifundefined{natoapp@right}{}{\mk@w{ \mk@i\space "right": "\natoapp@right", }}
+ \@ifundefined{natoapp@upper}{}{\mk@w{ \mk@i\space "upper": "\natoapp@upper", }}
+ \@ifundefined{natoapp@lower}{}{\mk@w{ \mk@i\space "lower": "\natoapp@lower", }}
+ \@ifundefined{natoapp@below}{}{\mk@w{ \mk@i\space "below": "\natoapp@below", }}
+ \mk@w{ \mk@i\space "end": 0}
+ \mk@w{ \mk@i \@rbchar}
+}
+% \end{macrocode}
+% \iffalse
+%</exportcls>
+%\fi
+%
diff --git a/macros/latex/contrib/wargame/source/utils/export.py b/macros/latex/contrib/wargame/source/utils/export.py
new file mode 100755
index 0000000000..b60cbb0fc5
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/utils/export.py
@@ -0,0 +1,3562 @@
+#!/usr/bin/env python
+#
+from pprint import pprint
+
+# ====================================================================
+def add_pws(opw=None,upw=None):
+ '''Add password options to the poppler commands
+
+ Parameters
+ ----------
+ opw : str
+ Owner password
+ upw : str
+ User password
+
+ Returns
+ -------
+ opts : list
+ List of arguments
+ '''
+ args = []
+ if upw is not None:
+ args.extend(['-upw',upw])
+
+ if opw is not None:
+ args.extend(['-opw',opw])
+
+ return args
+
+# --------------------------------------------------------------------
+def create_proc(args):
+ '''Create a process
+
+ Parameters
+ ----------
+ args : list
+ List of commmand line arguments
+
+ Returns
+ -------
+ proc : subprocess.Process
+ Process handle
+ '''
+ from os import environ
+ from subprocess import Popen, PIPE, TimeoutExpired
+
+ return Popen(args,env=environ.copy(),stdout=PIPE,stderr=PIPE)
+
+# --------------------------------------------------------------------
+def get_pdf_info(pdfname='export.pdf',upw=None,opw=None,timeout=None):
+ '''Get dictionary of PDF information
+
+ Parameters
+ ----------
+ pdfname : str
+ File name
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ info : dict
+ PDF information
+ '''
+ from subprocess import TimeoutExpired
+
+ args = ['pdfinfo', pdfname]
+ args.extend(add_pws(opw=opw,upw=upw))
+
+ proc = create_proc(args)
+
+ try:
+ out, err = proc.communicate(timeout=timeout)
+ except Exception as e:
+ proc.kill()
+ proc.communicate()
+ raise RuntimeError(f'Failed to get PDF info: {e}')
+
+ d = {}
+ for field in out.decode("utf8", "ignore").split("\n"):
+ sf = field.split(":")
+ key, value = sf[0], ":".join(sf[1:])
+ if key != "":
+ d[key] = (int(value.strip()) if key == 'Pages' else value.strip())
+
+ if "Pages" not in d:
+ raise ValueError
+
+ return d
+
+# --------------------------------------------------------------------
+def get_images_info(infofile):
+ '''Read in image information from file
+
+ Parameters
+ ----------
+ infofile : str
+ file name
+
+ Returns
+ -------
+ images : list
+ List of image information
+ '''
+ #from csv import DictReader
+ from json import load
+
+ with open(infofile,'r') as file:
+ info = load(file)
+ #reader = DictReader(file,fieldnames=['page','name','type','sub type'])
+ #return [l for l in reader]
+
+ return info
+
+
+# --------------------------------------------------------------------
+def convert_page(pdfname,page,opw=None,upw=None,timeout=None):
+ '''Convert a single PDF page to an image
+
+ Parameters
+ ----------
+ pdfname : str
+ File name
+ page : int
+ Page number
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ img : bytes
+ The bytes of the image
+ '''
+ args = ['pdftocairo',
+ '-singlefile',
+ '-f', str(page),
+ '-l', str(page),
+ '-png']
+ args.extend(add_pws(opw=opw,upw=upw))
+ args.append(pdfname)
+ args.append('-')
+
+ proc = create_proc(args)
+
+ try:
+ out, err = proc.communicate(timeout=timeout)
+ except Exception as e:
+ proc.kill()
+ proc.communicate()
+ raise RuntimeError(f'Failed to convert page {page} of {pdfname}: {e}')
+
+ from io import BytesIO
+ from PIL import Image
+
+ img = out #Image.open(BytesIO(out))
+
+ return img
+
+# --------------------------------------------------------------------
+def ignore_entry(entry):
+ return entry['category'] in ['<<dummy>>','<<eol>>']
+
+# --------------------------------------------------------------------
+def convert_pages(pdfname,infoname,
+ opw=None,upw=None,timeout=None):
+ '''Convert pages in a PDF to images
+
+ This creates a list of dictionaries with the image name and data
+ (as bytes)
+
+ Parameters
+ ----------
+ pdfname : str
+ File name of PDF to read images from
+ infoname : str
+ File name of CSV to read image info from
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ imgs : list
+ List of images as dicts, info and the bytes of the images
+ '''
+
+ oargs = {'opw':opw,'upw':upw,'timeout':timeout}
+ docinfo = get_pdf_info(pdfname,**oargs)
+ info = get_images_info(infoname)
+
+ if len(info)-1 != docinfo['Pages']:
+ raise RuntimeError(f'Number of pages in {pdfname} '
+ f'({docinfo["Pages"]}) not {len(info)-1}')
+
+ for i in info:
+ if ignore_entry(i): continue
+ i['img'] = convert_page(pdfname,i['number'],**oargs)
+
+ return info
+
+# ====================================================================
+def remove_and_get(zipfname,*filenames):
+ '''Open zip file, and make a copy of it without the files listed
+ in entries. Return the data of files listed in entry.'''
+ from tempfile import mkdtemp
+ from zipfile import ZipFile
+ from shutil import move, rmtree
+ from os import path
+
+ tempdir = mkdtemp()
+ ret = {}
+ try:
+ tempname = path.join(tempdir, 'new.zip')
+ with ZipFile(zipfname, 'r') as zipread:
+
+ with ZipFile(tempname, 'w') as zipwrite:
+
+ for item in zipread.infolist():
+ data = zipread.read(item.filename)
+
+ if item.filename not in filenames:
+ zipwrite.writestr(item, data)
+ else:
+ ret[item.filename] = data
+
+ move(tempname, zipfname)
+ finally:
+ rmtree(tempdir)
+
+ return ret
+
+# --------------------------------------------------------------------
+def add_back(zipfname,files):
+ '''Open a zip file for appending and add data in files
+
+ Files is a dictionary of filenames mapping to file content,
+ as returned by remove_and_get
+ '''
+ from zipfile import ZipFile
+
+ with ZipFile(zipfname, 'a') as zipadd:
+ for filename,data in files.items():
+ zipadd.writestr(filename,data)
+
+# ====================================================================
+# Contants used for tag names
+BUILD = 'VASSAL.build.'
+MODULE = BUILD + 'module.'
+WIDGET = BUILD + 'widget.'
+MAP = MODULE + 'map.'
+PICKER = MAP + 'boardPicker.'
+
+# ====================================================================
+def get_asdict(elem,tag,key,enable=True):
+ cont = elem.getElementsByTagName(tag)
+ if not enable:
+ return cont
+
+ return {e.getAttribute(key): e for e in cont}
+
+# --------------------------------------------------------------------
+def get_asone(elem,tag,enable=True):
+ cont = elem.getElementsByTagName(tag)
+ if enable and len(cont) != 1:
+ return None
+ return cont
+
+# --------------------------------------------------------------------
+def get_doc(string):
+ from xml.dom.minidom import parseString
+
+ return parseString(string)
+
+# --------------------------------------------------------------------
+def get_game(doc):
+ return doc.getElementsByTagName('VASSAL.build.GameModule')[0]
+
+# --------------------------------------------------------------------
+def get_documentation(doc,one=True):
+ return get_asone(doc,MODULE+'Documentation',one)
+
+# --------------------------------------------------------------------
+def get_helpfiles(doc,key='fileName',asdict=True):
+ return get_asdict(doc,MODULE+'documentation.HelpFile',key,asdict)
+
+# --------------------------------------------------------------------
+def get_inventories(doc,key='name',asdict=False):
+ return get_asdict(doc,MODULE+'Inventory',key,asdict)
+
+# --------------------------------------------------------------------
+def get_maps(doc,asdict=True):
+ return get_asdict(doc,MODULE+'Map','mapName',asdict)
+
+# --------------------------------------------------------------------
+def get_widgetmap(doc,asdict=True):
+ return get_asdict(doc,WIDGET+'WidgetMap','mapName',asdict)
+
+# --------------------------------------------------------------------
+def get_chartwindows(doc,asdict=True):
+ return get_asdict(doc,MODULE+'ChartWindow','name',asdict)
+
+# --------------------------------------------------------------------
+def get_map(doc,name):
+ maps = get_maps(doc,True)
+ return maps.get(name, None) if maps else None
+
+# --------------------------------------------------------------------
+def get_boards(doc,asdict=True):
+ return get_asdict(doc,PICKER+'Board','name',asdict)
+
+# --------------------------------------------------------------------
+def get_zoned(doc,one=True):
+ return get_asone(doc,PICKER+'board.ZonedGrid',one)
+
+# --------------------------------------------------------------------
+def get_zone(doc,asdict=True):
+ return get_asdict(doc,PICKER+'board.mapgrid.Zone','name',asdict)
+
+# --------------------------------------------------------------------
+def get_hexgrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.HexGrid',one)
+
+# --------------------------------------------------------------------
+def get_squaregrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.SquareGrid',one)
+
+# --------------------------------------------------------------------
+def get_regiongrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.RegionGrid',one)
+
+# --------------------------------------------------------------------
+def get_hexnumbering(doc,one=True):
+ return get_asone(doc,PICKER+'board.mapgrid.HexGridNumbering',one)
+
+# --------------------------------------------------------------------
+def get_regions(doc,asdict=True):
+ return get_asdict(doc,PICKER+'board.Region', 'name', asdict)
+
+# --------------------------------------------------------------------
+def get_squarenumbering(doc,one=True):
+ return get_asone(doc,PICKER+'board.mapgrid.SquareGridNumbering', one)
+
+# --------------------------------------------------------------------
+def get_pieces(doc,asdict=True):
+ return get_asdict(doc,WIDGET+'PieceSlot','entryName',asdict)
+
+# --------------------------------------------------------------------
+def get_prototypes(doc,asdict=True):
+ return get_asdict(doc,MODULE+'PrototypeDefinition', 'name',asdict)
+
+# --------------------------------------------------------------------
+def get_masskey(map,asdict=True):
+ return get_asdict(map,MAP+'MassKeyCommand','name', asdict)
+
+# --------------------------------------------------------------------
+def get_masskey(map,asdict=True):
+ return get_asdict(map,MAP+'MassKeyCommand','name', asdict)
+
+
+# --------------------------------------------------------------------
+def get_piece_parts(code):
+ '''Takes the code part of a pieceslot (the text node) and decodes
+ it into traits.
+
+ One can use this to modify the pieces. One could for example
+ remove a trait by calling this function, and remove the element
+ corresponding to the trait from the returned list. Then one must
+ collect up the definitions and states separately and pass each of
+ them to `enc_parts', which gives us two strings that can be passed
+ to `add_piece' (or `add_proto') function to get the new text node
+ content of the piece slot or prototype definition. For example
+
+ piece = get_pieceslots(root,pieces)['foo']
+ code = piece.childNodes[0].nodeValue
+ traits = get_piece_parts(code)
+ ... # Modify the list
+
+ # Separate out definitions and states
+ defs = [enc_def(e['def']) for e in traits]
+ states = [enc_def(e['state']) for e in traits]
+
+ # Encode definitions and states as a single string, and then form body
+ def = enc_parts(*defs)
+ state = enc_parts(*states)
+ body = add_piece(def,state)
+
+ # Set new definition
+ piece.childNodes[0].nodeValue = body
+
+ See also dicts_to_piece
+
+ Parameters
+ ----------
+ code : str
+ Text node content of <PieceSlot> or <PrototypeDefinition> tags
+
+ Returns
+ -------
+ traits : list of dict
+ All the traits in a list. Each element of the list is a
+ dictionary with the keys 'def' and 'status'.
+
+ The key 'def' points to a list of the trait attributes used to
+ define the trait type. The first element of the 'def' list is
+ the trait identifier. The rest are the arguments for that
+ trait type. Note, all fields are encoded as strings.
+
+ The key 'status' encodes the status of the trait. The format
+ of this depends on the trait.Note, all fields are encoded as
+ strings.
+
+ '''
+ cmd,iden,typ,sta = code.split('/')
+ defs = typ.split(r' ')
+ stas = sta.split(r' ')
+ defs = [d.rstrip("\\").split(';') for d in defs]
+ stas = [s.rstrip("\\").split(';') for s in stas]
+ ret = [{'def': d, 'state': s} for d,s in zip(defs,stas)]
+ return ret
+
+# --------------------------------------------------------------------
+def dicts_to_piece(traits):
+ # Separate out definitions and states
+ defs = [enc_def(e['def']) for e in traits]
+ states = [enc_def(e['state']) for e in traits]
+
+ # Encode definitions and states as a single string, and then form body
+ df = enc_parts(*defs)
+ state = enc_parts(*states)
+ body = add_piece(df,state)
+
+ return body
+
+
+# ====================================================================
+# Key encoding
+CTRL = 130
+ALT = 520
+def key(let,mod=CTRL):
+
+ '''Encode a key sequence
+
+ Parameters
+ ----------
+ let : str
+ Key code (Letter)
+ mod : int
+ Modifier mask
+ '''
+ return f'{ord(let)},{mod}'
+# Colour encoding
+def rgb(r,g,b):
+ return ','.join([str(r),str(g),str(b)])
+
+def rgba(r,g,b,a):
+ return ','.join([str(r),str(g),str(b),str(a)])
+
+
+# --------------------------------------------------------------------
+def set_node_attr(node,**attr):
+ for k,v in attr.items():
+ node.setAttribute(k,str(v).lower() if isinstance(v,bool) else str(v))
+
+# --------------------------------------------------------------------
+def add_node(root,parent,tag,**attr):
+ e = root.createElement(tag)
+ if parent: parent.appendChild(e)
+ set_node_attr(e,**attr)
+
+ return e
+
+
+# --------------------------------------------------------------------
+def add_text(root,parent,text):
+ t = root.createTextNode(text)
+ parent.appendChild(t)
+ return t
+
+# --------------------------------------------------------------------
+def add_game(root,doc,
+ name,
+ version,
+ ModuleOther1 = "",
+ ModuleOther2 = "",
+ VassalVersion = "3.6.7",
+ description = "",
+ nextPieceSlotId = 0):
+ return add_node(root,doc,BUILD+'GameModule',
+ name = name,
+ version = version,
+ ModuleOther1 = ModuleOther1,
+ ModuleOther2 = ModuleOther2,
+ VassalVersion = VassalVersion,
+ description = description,
+ nextPieceSlotId = nextPieceSlotId)
+
+# --------------------------------------------------------------------
+def add_basiccommandencoder(root,doc):
+ return add_node(root,doc,MODULE+'BasicCommandEncoder')
+
+# --------------------------------------------------------------------
+def add_globalproperties(root,elem):
+ return add_node(root,elem,MODULE+'properties.GlobalProperties')
+
+# --------------------------------------------------------------------
+def add_translatable(root,elem):
+ return add_node(root,elem,MODULE+'properties.GlobalTranslatableMessages')
+
+# --------------------------------------------------------------------
+def add_language(root,elem):
+ return add_node(root,elem,'VASSAL.i18n.Language')
+
+# --------------------------------------------------------------------
+def add_chatter(root,elem):
+ return add_node(root,elem,MODULE+'Chatter')
+
+# --------------------------------------------------------------------
+def add_keynamer(root,elem):
+ return add_node(root,elem,MODULE+'KeyNamer')
+
+# --------------------------------------------------------------------
+def add_documentation(root,doc):
+ return add_node(root,doc,MODULE+'Documentation')
+
+# --------------------------------------------------------------------
+def add_about(root,doc,title,fileName=""):
+ return add_node(root,doc,MODULE+'documentation.AboutScreen',
+ fileName = fileName,
+ title = title)
+# --------------------------------------------------------------------
+def add_pdffile(root,doc,title,pdfFile):
+ return add_node(root,doc,MODULE+'documentation.BrowserPDFFile',
+ pdfFile = pdfFile, title=title)
+# --------------------------------------------------------------------
+def add_helpfile(root,doc,title,fileName,fileType="archive"):
+ return add_node(root,doc,MODULE+'documentation.HelpFile',
+ fileName = fileName,
+ fileType = fileType,
+ title = title)
+
+# --------------------------------------------------------------------
+def add_htmlfile(root,doc,title,startingPage='index.html'):
+ return add_node(root,doc,MODULE+'documentation.BrowserHelpFile',
+ startingPage=startingPage,
+ title=title)
+
+# --------------------------------------------------------------------
+def add_roster(root,doc,buttonKeyStroke='',
+ buttonText='Retire',
+ buttonToolTip='Switch sides, become observer, or release faction'):
+ return add_node(root,doc,MODULE+'PlayerRoster',
+ buttonKeyStroke = buttonKeyStroke,
+ buttonText = buttonText,
+ buttonToolTip = buttonToolTip)
+
+# --------------------------------------------------------------------
+def add_entry(root,doc,text):
+ n = add_node(root,doc,'entry')
+ add_text(root,n,text)
+ return n
+
+# --------------------------------------------------------------------
+def add_globaloptions(root,doc,
+ autoReport = "Use Preferences Setting",
+ centerOnMove = "Use Preferences Setting",
+ chatterHTMLSupport = "Always",
+ hotKeysOnClosedWindows = "Never",
+ inventoryForAll = "Always",
+ nonOwnerUnmaskable = "Use Preferences Setting",
+ playerIdFormat = "$playerName$",
+ promptString = "Opponents can unmask pieces",
+ sendToLocationMoveTrails = "Never"):
+ return add_node(root,doc,MODULE+'GlobalOptions',
+ autoReport = autoReport,
+ centerOnMove = centerOnMove,
+ chatterHTMLSupport = chatterHTMLSupport,
+ hotKeysOnClosedWindows = hotKeysOnClosedWindows,
+ inventoryForAll = inventoryForAll,
+ nonOwnerUnmaskable = nonOwnerUnmaskable,
+ playerIdFormat = playerIdFormat,
+ promptString = promptString,
+ sendToLocationMoveTrails = sendToLocationMoveTrails)
+
+# --------------------------------------------------------------------
+def add_option(root,doc,name,value):
+ n = add_node(root,doc,'option',name=name)
+ add_text(n,root,value)
+ return n
+
+# --------------------------------------------------------------------
+# CurrentMap == &quot;Board&quot;
+def add_inventory(root,doc,
+ canDisable = False,
+ centerOnPiece = True,
+ disabledIcon = '',
+ drawPieces = True,
+ foldersOnly = False,
+ forwardKeystroke = True,
+ groupBy = '',
+ hotkey = key('I'),
+ icon = '/images/inventory.gif',
+ include = '{}',
+ launchFunction = 'functionHide',
+ leafFormat = '$PieceName$',
+ name = '',
+ nonLeafFormat = '$PropertyValue$',
+ pieceZoom = '0.33',
+ pieceZoom2 = '0.5',
+ pieceZoom3 = '0.6',
+ propertyGate = '',
+ refreshHotkey = key('I',195),
+ showMenu = True,
+ sides = '',
+ sortFormat = '$PieceName$',
+ sortPieces = True,
+ sorting = 'alpha',
+ text = '',
+ tooltip = 'Show inventory of all pieces',
+ zoomOn = False):
+ return add_node(root,doc,MODULE+'Inventory',
+ canDisable = canDisable,
+ centerOnPiece = centerOnPiece,
+ disabledIcon = disabledIcon,
+ drawPieces = drawPieces,
+ foldersOnly = foldersOnly,
+ forwardKeystroke = forwardKeystroke,
+ groupBy = groupBy,
+ hotkey = hotkey,
+ icon = icon,
+ include = include,
+ launchFunction = launchFunction,
+ leafFormat = leafFormat,
+ name = name,
+ nonLeafFormat = nonLeafFormat,
+ pieceZoom = pieceZoom,
+ pieceZoom2 = pieceZoom2,
+ pieceZoom3 = pieceZoom3,
+ propertyGate = propertyGate,
+ refreshHotkey = refreshHotkey,
+ showMenu = showMenu,
+ sides = sides,
+ sortFormat = sortFormat,
+ sortPieces = sortPieces,
+ sorting = sorting,
+ text = text,
+ tooltip = tooltip,
+ zoomOn = zoomOn)
+
+
+
+# --------------------------------------------------------------------
+def add_map(root,doc,
+ mapName,
+ allowMultiple = 'false',
+ backgroundcolor = rgb(255,255,255),
+ buttonName = '',
+ changeFormat = '$message$',
+ color = rgb(0,0,0),
+ createFormat = '$pieceName$ created in $location$ *',
+ edgeHeight = '0',
+ edgeWidth = '0',
+ hideKey = '',
+ hotkey = key('M',ALT),
+ icon = '/images/map.gif',
+ launch = 'false',
+ markMoved = 'Always',
+ markUnmovedHotkey = '',
+ markUnmovedIcon = '/images/unmoved.gif',
+ markUnmovedReport = '',
+ markUnmovedText = '',
+ markUnmovedTooltip = 'Mark all pieces on this map as not moved',
+ moveKey = '',
+ moveToFormat = '$pieceName$ moves $previousLocation$ &amp;rarr; $location$ *',
+ moveWithinFormat = '$pieceName$ moves $previousLocation$ &amp;rarr; $location$ *',
+ showKey = '',
+ thickness = '3',
+ cls = MODULE+'Map'):
+ return add_node(root,doc,cls,
+ allowMultiple = allowMultiple,
+ backgroundcolor = backgroundcolor,
+ buttonName = buttonName,
+ changeFormat = changeFormat,
+ color = color,
+ createFormat = createFormat,
+ edgeHeight = edgeHeight,
+ edgeWidth = edgeWidth,
+ hideKey = hideKey,
+ hotkey = hotkey,
+ icon = icon,
+ launch = launch,
+ mapName = mapName,
+ markMoved = markMoved,
+ markUnmovedHotkey = markUnmovedHotkey,
+ markUnmovedIcon = markUnmovedIcon,
+ markUnmovedReport = markUnmovedReport,
+ markUnmovedText = markUnmovedText,
+ markUnmovedTooltip = markUnmovedTooltip,
+ moveKey = moveKey,
+ moveToFormat = moveToFormat,
+ moveWithinFormat = moveWithinFormat,
+ showKey = showKey,
+ thickness = thickness)
+
+# --------------------------------------------------------------------
+def add_widgetmap(root,doc, mapName,**attr):
+ return add_map(root,doc,mapName,cls=WIDGET+'WidgetMap',**attr)
+
+# --------------------------------------------------------------------
+def add_boardpicker(root,doc,
+ addColumnText = 'Add column',
+ addRowText = 'Add row',
+ boardPrompt = 'Select board',
+ slotHeight = 125,
+ slotScale = 0.2,
+ slotWidth = 350,
+ title = 'Choose Boards'):
+ return add_node(root,doc,MAP+'BoardPicker',
+ addColumnText = addColumnText,
+ addRowText = addRowText,
+ boardPrompt = boardPrompt,
+ slotHeight = slotHeight,
+ slotScale = slotScale,
+ slotWidth = slotWidth,
+ title = title)
+
+# --------------------------------------------------------------------
+def add_setup(root,picker,mapName,maxColumns,boardNames):
+ '''Add given boards in row-first up to maxColumns per row'''
+ s = add_node(root,picker,'setup')
+ col = 0
+ row = 0
+ lst = [f'{mapName}BoardPicker']
+ for bn in boardNames:
+ lst.extend([bn,str(col),str(row)])
+ col += 1
+ if col >= maxColumns:
+ col = 0
+ row += 1
+ txt = r' '.join(lst)
+ add_text(root,s,txt)
+
+# --------------------------------------------------------------------
+def add_board(root,picker,name,
+ image = '',
+ reversible = False,
+ color = rgb(255,255,255),
+ width = 0,
+ height = 0):
+ return add_node(root,picker,PICKER+'Board',
+ image = image,
+ name = name,
+ reversible = reversible,
+ color = color,
+ width = width,
+ height = height)
+
+# --------------------------------------------------------------------
+def add_zoned(root,board):
+ return add_node(root,board,PICKER+'board.ZonedGrid')
+
+# --------------------------------------------------------------------
+def add_zonehighlighter(root,zoned):
+ return add_node(root,zoned,PICKER+'board.mapgrid.ZonedGridHighlighter')
+
+# --------------------------------------------------------------------
+def add_zone(root,zoned,
+ name = "",
+ highlightProperty = "",
+ locationFormat = "$gridLocation$",
+ path = "0,0;976,0;976,976;0,976",
+ useHighlight = False,
+ useParentGrid = False):
+ return add_node(root,zoned,PICKER+'board.mapgrid.Zone',
+ name = name,
+ highlightProperty = highlightProperty,
+ locationFormat = locationFormat,
+ path = path,
+ useHighlight = useHighlight,
+ useParentGrid = useParentGrid)
+
+# --------------------------------------------------------------------
+HEX_WIDTH = 88.50779626676963
+HEX_HEIGHT = 102.2
+def add_hexgrid(root,zone,
+ color = rgb(0,0,0),
+ cornersLegal = False,
+ dotsVisible = False,
+ dx = HEX_WIDTH,
+ dy = HEX_HEIGHT,
+ edgesLegal = False,
+ sideways = False,
+ snapTo = True,
+ visible = True,
+ x0 = 0,
+ y0 = 32,
+ cls = PICKER+'board.HexGrid'):
+ return add_node(root,zone,cls,
+ color = color,
+ cornersLegal = cornersLegal,
+ dotsVisible = dotsVisible,
+ dx = dx,
+ dy = dy,
+ edgesLegal = edgesLegal,
+ sideways = sideways,
+ snapTo = snapTo,
+ visible = visible,
+ x0 = x0,
+ y0 = y0)
+
+# --------------------------------------------------------------------
+def add_hexnumbering(root,grid,
+ color = rgb(255,0,0),
+ first = 'H',
+ fontSize = 24,
+ hDescend = False,
+ hDrawOff = 0,
+ hLeading = 1,
+ hOff = 0,
+ hType = 'A',
+ locationFormat = '$gridLocation$',
+ rotateText = 0,
+ sep = '',
+ stagger = True,
+ vDescend = False,
+ vDrawOff = 32,
+ vLeading = 0,
+ vOff = 0,
+ vType = 'N',
+ visible = True,
+ cls = PICKER+'board.mapgrid.HexGridNumbering'):
+ return add_node(root,grid,cls,
+ color = color,
+ first = first,
+ fontSize = fontSize,
+ hDescend = hDescend,
+ hDrawOff = hDrawOff,
+ hLeading = hLeading,
+ hOff = hOff,
+ hType = hType,
+ locationFormat = locationFormat,
+ rotateText = rotateText,
+ sep = sep,
+ stagger = stagger,
+ vDescend = vDescend,
+ vDrawOff = vDrawOff,
+ vLeading = vLeading,
+ vOff = vOff,
+ vType = vType,
+ visible = visible)
+
+# --------------------------------------------------------------------
+RECT_WIDTH = 80
+RECT_HEIGHT = 80
+def add_squaregrid(root,zone,
+ dx = RECT_WIDTH,
+ dy = RECT_HEIGHT,
+ edgesLegal = False,
+ x0 = 0,
+ y0 = int(0.4*RECT_HEIGHT),
+ **attr):
+ return add_hexgrid(root,zone,cls=PICKER+'board.SquareGrid',
+ dx = dx,
+ dy = dy,
+ edgesLegal = edgesLegal,
+ x0 = x0,
+ y0 = y0,
+ **attr)
+
+# --------------------------------------------------------------------
+def add_squarenumbering(root,grid,
+ hType = 'N',
+ **attr):
+ return add_hexnumbering(root,grid,
+ cls=PICKER+'board.mapgrid.SquareGridNumbering',
+ hType = hType,
+ **attr)
+
+# --------------------------------------------------------------------
+def add_regiongrid(root,zone,snapto=True,fontsize=9,visible=True):
+ print(f'Make region grid visible: {visible}')
+ return add_node(root,zone,PICKER+'board.RegionGrid',
+ fontsize = fontsize,
+ snapto = snapto,
+ visble = visible)
+
+# --------------------------------------------------------------------
+def get_region_piece(root,grid,name,alsoPiece=True,piece=None,verbose=False):
+ if not alsoPiece:
+ return None, None
+
+ # Find the parent map element by stepping up the tree
+ from functools import reduce
+
+ map = reduce(lambda nn, _: None if nn is None else nn.parentNode,
+ range(5), grid)
+ if map is None or \
+ map.tagName not in [MODULE+'Map',WIDGET+'WidgetMap']:
+ if map is None:
+ print(f' = Map not found from grid')
+ return None, None
+
+ if piece is not None:
+ print(f' Using supplied piece')
+ return piece, map
+
+ # Find the piece by searching from the top of the tree
+ piece = get_pieces(root,root).get(name,None)
+ if piece is None:
+ print(list(get_pieces(root,root).keys()))
+ if verbose:
+ print(f' Possible piece for region {name}: {piece}')
+ return piece, map
+
+# --------------------------------------------------------------------
+def check_region_name(grid,name):
+ post = ''
+ targ = name
+ same = 0
+ regs = list(get_regions(grid).keys())
+ poss = len([e for e in regs if e.startswith(name)])
+ if poss == 0:
+ return name
+
+ return name + f' {poss}'
+ # Loop over keys, sorted
+ # regs.sort()
+ # for r in regs:
+ # if targ == r:
+ # same += 1
+ # targ = name + f' {same:02d}'
+ # print(f' Found region named {r} -> {targ}')
+
+ return targ
+
+# --------------------------------------------------------------------
+def add_region(root,grid,name,originx,originy,gpid,
+ alsoPiece=True,piece=None,verbose=True):
+ # First thing is to check if we have a piece
+ piece, map = get_region_piece(root,grid,name,alsoPiece,piece,verbose)
+ if verbose:
+ print(f' Region {name} -> piece {piece}')
+
+
+ nam = check_region_name(grid,name)
+ if verbose:
+ print(f' Region {name} -> real name {nam}')
+ n = add_node(root,grid,PICKER+'board.Region',
+ name = nam,
+ originx = originx,
+ originy = originy)
+ if piece is None:
+ return n, gpid
+
+ if verbose:
+ print(f' Add piece {name} to region')
+ _, gpid = add_atstart(root,map,name,piece,
+ location = name,
+ useGridLocation = True,
+ owningBoard = map.getAttribute('mapName'),
+ x = 0,
+ y = 0,
+ gpid = gpid)
+ return n, gpid
+
+
+# --------------------------------------------------------------------
+def add_stacking(root,map,
+ bottom = '40,0',
+ disabled = False,
+ down = '37,0',
+ exSepX = 6,
+ exSepY = 18,
+ top = '38,0',
+ unexSepX = 8,
+ unexSepY = 16,
+ up = '39,0'):
+ return add_node(root,map,MAP+'StackMetrics',
+ bottom = bottom,
+ disabled = disabled,
+ down = down,
+ exSepX = exSepX,
+ exSepY = exSepY,
+ top = top,
+ unexSepX = unexSepX,
+ unexSepY = unexSepY,
+ up = up)
+
+# --------------------------------------------------------------------
+def add_camera(root,map,
+ buttonText = '',
+ canDisable = False,
+ hotkey = '',
+ icon = '/images/camera.gif',
+ propertyGate = '',
+ tooltip = 'Save map as PNG image'):
+ return add_node(root,map,MAP+'ImageSaver',
+ buttonText = buttonText,
+ canDisable = canDisable,
+ hotkey = hotkey,
+ icon = icon,
+ propertyGate = propertyGate,
+ tooltip = tooltip)
+
+# --------------------------------------------------------------------
+def add_forwardtochatter(root,map):
+ return add_node(root,map,MAP+'ForwardToChatter')
+
+# --------------------------------------------------------------------
+def add_menudisplayer(root,map):
+ return add_node(root,map,MAP+'MenuDisplayer')
+
+# --------------------------------------------------------------------
+def add_mapcenterer(root,map):
+ return add_node(root,map,MAP+'MapCenterer')
+
+# --------------------------------------------------------------------
+def add_stackexpander(root,map):
+ return add_node(root,map,MAP+'StackExpander')
+
+# --------------------------------------------------------------------
+def add_piecemover(root,map):
+ return add_node(root,map,MAP+'PieceMover')
+
+# --------------------------------------------------------------------
+def add_selectionhighlighters(root,map):
+ return add_node(root,map,MAP+'SelectionHighlighters')
+
+# --------------------------------------------------------------------
+def add_keybufferer(root,map):
+ return add_node(root,map,MAP+'KeyBufferer')
+
+# --------------------------------------------------------------------
+def add_highlightlastmoved(root,map,color=rgb(255,0,0),enabled=True,thickness=2):
+ return add_node(root,map,MAP+'HighlightLastMoved',
+ color=color,enabled=enabled,thickness=thickness)
+
+# --------------------------------------------------------------------
+def add_counterviewer(root,map,
+ borderWidth = 0,
+ centerAll = False,
+ centerText = False,
+ combineCounterSummary = False,
+ counterReportFormat = '',
+ delay = 700,
+ description = '',
+ display = 'from top-most layer only',
+ emptyHexReportForma = '$LocationName$',
+ enableHTML = True,
+ extraTextPadding = 0,
+ fgColor = rgb(0,0,0),
+ fontSize = 9,
+ graphicsZoom = 1.0,
+ hotkey = key('\n',0),
+ layerList = '',
+ minDisplayPieces = 2,
+ propertyFilter = '',
+ showDeck = False,
+ showDeckDepth = 1,
+ showDeckMasked = False,
+ showMoveSelectde = False,
+ showNoStack = False,
+ showNonMovable = False,
+ showOverlap = False,
+ showgraph = True,
+ showgraphsingle = False,
+ showtext = False,
+ showtextsingle = False,
+ stretchWidthSummary = False,
+ summaryReportFormat = '$LocationName$',
+ unrotatePieces = False,
+ version = 3,
+ verticalOffset = 0,
+ verticalTopText = 5,
+ zoomlevel = 1.0):
+ return add_node(root,map,MAP+'CounterDetailViewer',
+ borderWidth = borderWidth,
+ centerAll = centerAll,
+ centerText = centerText,
+ combineCounterSummary = combineCounterSummary,
+ counterReportFormat = counterReportFormat,
+ delay = delay,
+ description = description,
+ display = display,
+ emptyHexReportForma = emptyHexReportForma,
+ enableHTML = enableHTML,
+ extraTextPadding = extraTextPadding,
+ fgColor = fgColor,
+ fontSize = fontSize,
+ graphicsZoom = graphicsZoom,
+ hotkey = hotkey,
+ layerList = layerList,
+ minDisplayPieces = minDisplayPieces,
+ propertyFilter = propertyFilter,
+ showDeck = showDeck,
+ showDeckDepth = showDeckDepth,
+ showDeckMasked = showDeckMasked,
+ showMoveSelectde = showMoveSelectde,
+ showNoStack = showNoStack,
+ showNonMovable = showNonMovable,
+ showOverlap = showOverlap,
+ showgraph = showgraph,
+ showgraphsingle = showgraphsingle,
+ showtext = showtext,
+ showtextsingle = showtextsingle,
+ stretchWidthSummary = stretchWidthSummary,
+ summaryReportFormat = summaryReportFormat,
+ unrotatePieces = unrotatePieces,
+ version = version,
+ verticalOffset = verticalOffset,
+ verticalTopText = verticalTopText,
+ zoomlevel = zoomlevel)
+
+# --------------------------------------------------------------------
+def add_globalmap(root,map,
+ buttonText = '',
+ color = rgb(255,0,0),
+ hotkey = '79,195',
+ icon = '/images/overview.gif',
+ scale = 0.2,
+ tooltip = 'Show/Hide overview window'):
+ return add_node(root,map,MAP+'GlobalMap',
+ buttonText = buttonText,
+ color = color,
+ hotkey = hotkey,
+ icon = icon,
+ scale = scale,
+ tooltip = 'Show/Hide overview window')
+
+# --------------------------------------------------------------------
+def add_zoomer(root,map,
+ inButtonText = '',
+ inIconName = '/images/zoomIn.gif',
+ inTooltip = 'Zoom in',
+ outButtonText = '',
+ outIconName = '/images/zoomOut.gif',
+ outTooltip = 'Zoom out',
+ pickButtonText = '',
+ pickIconName = '/images/zoom.png',
+ pickTooltip = 'Select Zoom',
+ zoomInKey = '61,195',
+ zoomLevels = [0.2,0.25,0.333,0.4,0.5,0.555,0.625,0.75,1.0,1.25,1.6],
+ zoomOutKey = key('-'),
+ zoomPickKey = key('='),
+ zoomStart = 3):
+ '''Zoom start is counting from the back (with default zoom levels,
+ and zoom start, the default zoom is 1'''
+ lvls = ','.join([str(z) for z in zoomLevels])
+ return add_node(root,map,MAP+'Zoomer',
+ inButtonText = inButtonText,
+ inIconName = inIconName,
+ inTooltip = inTooltip,
+ outButtonText = outButtonText,
+ outIconName = outIconName,
+ outTooltip = outTooltip,
+ pickButtonText = pickButtonText,
+ pickIconName = pickIconName,
+ pickTooltip = pickTooltip,
+ zoomInKey = zoomInKey,
+ zoomLevels = lvls,
+ zoomOutKey = zoomOutKey,
+ zoomPickKey = zoomPickKey,
+ zoomStart = zoomStart)
+
+# --------------------------------------------------------------------
+def add_hidepieces(root,map,
+ buttonText = '',
+ hiddenIcon = '/images/globe_selected.gif',
+ hotkey = key('O'),
+ showingIcon = '/images/globe_unselected.gif',
+ tooltip = 'Hide all pieces on this map'):
+ return add_node(root,map,MAP+'HidePiecesButton',
+ buttonText = buttonText,
+ hiddenIcon = hiddenIcon,
+ hotkey = hotkey,
+ showingIcon = showingIcon,
+ tooltip = tooltip)
+# --------------------------------------------------------------------
+def add_masskey(root,map,
+ name,
+ buttonHotkey,
+ hotkey,
+ buttonText = '',
+ canDisable = False,
+ deckCount = '-1',
+ filter = '',
+ propertyGate = '',
+ reportFormat = '',
+ reportSingle = False,
+ singleMap = True,
+ target = 'MAP|false|MAP|||||0|0||true|Selected|true|EQUALS',
+ tooltip = '',
+ icon = ''):
+ '''Default targets are selected units'''
+ return add_node(root,map,MAP+'MassKeyCommand',
+ name = name,
+ buttonHotkey = buttonHotkey, # This hot key
+ hotkey = hotkey, # Target hot key
+ buttonText = buttonText,
+ canDisable = canDisable,
+ deckCount = deckCount,
+ filter = filter,
+ propertyGate = propertyGate,
+ reportFormat = reportFormat,
+ reportSingle = reportSingle,
+ singleMap = singleMap,
+ target = target,
+ tooltip = tooltip,
+ icon = icon)
+
+
+# --------------------------------------------------------------------
+def add_flare(root,map,
+ circleColor = rgb(255,0,0),
+ circleScale = True,
+ circleSize = 100,
+ flareKey = 'keyAlt',
+ flareName = 'Map Flare',
+ flarePulses = 6,
+ flarePulsesPerSec = 3,
+ reportFormat = ''):
+ return add_node(root,map,MAP+'Flare',
+ circleColor = circleColor,
+ circleScale = circleScale,
+ circleSize = circleSize,
+ flareKey = flareKey,
+ flareName = flareName,
+ flarePulses = flarePulses,
+ flarePulsesPerSec = flarePulsesPerSec,
+ reportFormat = '')
+
+# --------------------------------------------------------------------
+def add_atstart(root,map,name,*pieces,
+ location = '',
+ useGridLocation = True,
+ owningBoard = '',
+ x = 0,
+ y = 0,
+ gpid = None):
+ '''Pieces are existing PieceSlot elements'''
+ a = add_node(root,map,MODULE+'map.SetupStack',
+ name = name,
+ location = location,
+ owningBoard = owningBoard,
+ useGridLocation = useGridLocation,
+ x = x,
+ y = y)
+ # copy pieces here
+ for p in pieces:
+ c = p.cloneNode(True)
+ a.appendChild(c)
+ if gpid is not None:
+ # Update gpid in element
+ c.setAttribute('gpid',str(gpid))
+ # Update gpid in traits state
+ traits = get_piece_parts(p.childNodes[0].nodeValue)
+ for t in traits:
+ code = t['def']
+ stat = t['state']
+ if code[0] == 'piece':
+ stat[3] = gpid
+ # Put back the traits
+ c.childNodes[0].nodeValue = dicts_to_piece(traits)
+
+ gpid += 1
+
+ return a, gpid
+
+# --------------------------------------------------------------------
+def add_pieceslot(root,elem,
+ entryName,
+ gpid,
+ code,
+ height=72,
+ width=72,
+ icon = ''):
+ p = add_node(root,elem,WIDGET+'PieceSlot',
+ entryName = entryName,
+ gpid = gpid,
+ height = height,
+ width = width,
+ icon = icon)
+ add_text(root,p,code)
+ return p
+
+# --------------------------------------------------------------------
+def add_prototypes(root,elem,*defs):
+ '''Defs are existing definition elements'''
+ p = add_node(root,elem,MODULE+'PrototypesContainer')
+
+ for d in defs:
+ c = d.cloneNode(True)
+ p.appendChild(c)
+
+ return p
+
+# --------------------------------------------------------------------
+def add_prototype(root,elem,name,code,description=''):
+ d = add_node(root,elem,MODULE+'PrototypeDefinition',
+ name = name,
+ description = description)
+ add_text(root,d,code)
+
+# --------------------------------------------------------------------
+def add_piecewindow(root,elem,name,
+ defaultWidth = 0,
+ hidden = False,
+ hotkey = key('C',ALT),
+ scale = 1.,
+ text = '',
+ tooltip = 'Show/hide piece window',
+ icon = '/images/counter.gif'):
+ return add_node(root,elem,MODULE+'PieceWindow',
+ name = name,
+ defaultWidth = defaultWidth,
+ hidden = hidden,
+ hotkey = hotkey,
+ scale = scale,
+ text = text,
+ tooltip = tooltip,
+ icon = icon)
+
+# --------------------------------------------------------------------
+def add_tabs(root,elem,entryName):
+ return add_node(root,elem,WIDGET+'TabWidget',entryName=entryName)
+
+# --------------------------------------------------------------------
+def add_list(root,elem,
+ entryName,
+ height = 0,
+ width = 0,
+ scale = 1.,
+ divider = 100):
+ return add_node(root,elem,WIDGET+'ListWidget',
+ entryName = entryName,
+ height = height,
+ width = width,
+ scale = scale,
+ divider = divider)
+
+# --------------------------------------------------------------------
+def add_panel(root,elem,
+ entryName,
+ fixed = False,
+ nColumns = 1,
+ vert = False):
+ return add_node(root,elem,WIDGET+'PanelWidget',
+ entryName = entryName,
+ fixed = fixed,
+ nColumns = nColumns,
+ vert = vert)
+
+# --------------------------------------------------------------------
+def add_mapwidget(root,elem,entryName=''):
+ return add_node(root,elem,WIDGET+'MapWidget',entryName=entryName)
+
+# --------------------------------------------------------------------
+def add_chartwindow(root,elem,
+ name,
+ hotkey = key('A',ALT),
+ description = '',
+ text = '',
+ tooltip = 'Show/hide Charts',
+ icon = '/images/chart.gif'):
+ return add_node(root,elem,MODULE+'ChartWindow',
+ name = name,
+ hotkey = hotkey,
+ description = description,
+ text = text,
+ tooltip = tooltip,
+ icon = icon)
+
+# --------------------------------------------------------------------
+def add_chart(root,elem,
+ chartName,
+ fileName,
+ description = ''):
+ return add_node(root,elem,WIDGET+'Chart',
+ chartName = chartName,
+ description = description,
+ fileName = fileName)
+
+# --------------------------------------------------------------------
+def add_dice(root,elem,
+ addToTotal = 0,
+ canDisable = False,
+ hotkey = key('6',ALT),
+ icon = '/images/die.gif',
+ keepCount = 1,
+ keepDice = False,
+ keepOption = '&gt;',
+ lockAdd = False,
+ lockDice = False,
+ lockPlus = False,
+ lockSides = False,
+ nDice = 1,
+ nSides = 6,
+ name = '1d6',
+ plus = 0,
+ prompt = False,
+ propertyGate = '',
+ reportFormat = '** $name$ = $result$ *** &amp;lt;$PlayerName$&amp;gt;',
+ reportTotal = False,
+ sortDice = False,
+ text = '1d6',
+ tooltip = 'Roll a 1d6'):
+ return add_node(root,elem,MODULE+'DiceButton',
+ addToTotal = addToTotal,
+ canDisable = canDisable,
+ hotkey = hotkey,
+ icon = icon,
+ keepCount = keepCount,
+ keepDice = keepDice,
+ keepOption = keepOption,
+ lockAdd = lockAdd,
+ lockDice = lockDice,
+ lockPlus = lockPlus,
+ lockSides = lockSides,
+ nDice = nDice,
+ nSides = nSides,
+ name = name,
+ plus = plus,
+ prompt = prompt,
+ propertyGate = propertyGate,
+ reportFormat = reportFormat,
+ reportTotal = reportTotal,
+ sortDice = sortDice,
+ text = text,
+ tooltip = tooltip)
+
+# ====================================================================
+def enc_def(args,term=False):
+ '''Encode a piece (decorator) definition
+
+ Parameters
+ ----------
+ args : list
+ List of fields
+ term : bool
+ If true, add terminating ';'
+
+ Returns
+ -------
+ code : str
+ The encoded definition
+ '''
+ return ';'.join([str(e).lower() if isinstance(e,bool) else str(e)
+ for e in args])+(';' if term else '')
+
+# --------------------------------------------------------------------
+def layer_trait(images,
+ newNames = None,
+ activateName = 'Activate',
+ activateMask = CTRL,
+ activateChar = 'A',
+ increaseName = 'Increase',
+ increaseMask = CTRL,
+ increaseChar = '[',
+ decreaseName = '',
+ decreaseMask = CTRL,
+ decreaseChar = ']',
+ resetName = '',
+ resetKey = '',
+ resetLevel = 1,
+ under = False,
+ underXoff = 0,
+ underYoff = 0,
+ loop = True,
+ name = '',
+ description = '',
+ randomKey = '',
+ randomName = '',
+ follow = False,
+ expression = '',
+ first = 1,
+ version = 1, # 1:new, 0:old
+ always = 'true',
+ activateKey = key('A'),
+ increaseKey = key('['),
+ decreaseKey = key(']'),
+ scale = 1.):
+ '''Create a layer trait (VASSAL.counter.Embellishment)
+
+ Parameters
+ ----------
+ main : dict
+ Main image dictionary
+ flipped : dict
+ Flipped image dictionary
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state
+ '''
+ if newNames is None:
+ newNames = ['']*len(images)
+ args = ['emb2', # Code
+ activateName, activateMask, activateChar, # ACTIVATE ; MASK ; KEY
+ increaseName, increaseMask, increaseChar,
+ decreaseName, decreaseMask, decreaseChar,
+ resetName, resetKey, resetLevel,
+ under, underXoff, underYoff,
+ ','.join(images),
+ ','.join(newNames),
+ loop,
+ name,
+ randomKey, randomName,
+ follow, expression,
+ first,
+ version,
+ always,
+ activateKey,
+ increaseKey,
+ decreaseKey,
+ description,
+ scale ]
+ stat = '1' # CURRENT LEVEL
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def prototype_trait(name):
+ '''Create a prototype trait (VASSAL.counter.UsePrototype)
+
+ Parameters
+ ----------
+ family : str
+ Side in game
+
+ Return
+ ------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['prototype', name ]
+ stat = '' # State is nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def mark_trait(key,value):
+ '''Create a marker trait (VASSAL.counter.Marker)
+
+ Parameters
+ ----------
+ family : str
+ Side in game
+
+ Return
+ ------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['mark', key ]
+ stat = value # State is nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def report_trait(*keys,
+ nosuppress = True,
+ description = '',
+ report = '$location$: $newPieceName$ $menuCommand$ *',
+ cyclekeys = '',
+ cyclereps = ''):
+ '''Create a report trait (VASSAL.counters.ReportActon)
+
+ Parameters
+ ----------
+ *keys : tuple of str
+ The keys to report actions for
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ esckeys = ','.join([k.replace(',',r'\,') for k in keys])
+ esccycl = ','.join([k.replace(',',r'\,') for k in cyclekeys])
+ escreps = ','.join([k.replace(',',r'\,') for k in cyclereps])
+ args = ['report', # CODE
+ esckeys, # ESCAPED KEYS (commas escaped)
+ report, # REPORT
+ esccycl, # CYCLE KEYS (commas escaped)
+ escreps, # CYCKE REPORTS (commas escaped)
+ description, # DESCRIPTION
+ nosuppress] # NOSUPPRESS
+ stat = '-1' # CYCLE STATE
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def moved_trait(image='moved.gif',
+ xoff = 36,
+ yoff = -38,
+ name = 'Mark Moved',
+ key = key('M')):
+ '''Create a moved trait (VASSAL.counters.MovementMarkable)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['markmoved', # CODE
+ image, # IMAGE
+ xoff, yoff, # XOFF ; YOFF
+ name, # MENU
+ key, # KEY, MODIFIER
+ ''] # ?
+ stat = False # MOVED?
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def trail_trait(key = key('T'),
+ name = 'Movement Trail',
+ localVisible = False,
+ globalVisible = False,
+ radius = 10,
+ fillColor = rgb(255,255,255),
+ lineColor = rgb(0,0,0),
+ activeOpacity = 100,
+ inactiveOpacity = 50,
+ edgesBuffer = 20,
+ displayBuffer = 30,
+ lineWidth = 1,
+ turnOn = '',
+ turnOff = '',
+ reset = '',
+ description = ''):
+ ''' Create a movement trail trait ( VASSAL.counters.Footprint)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state
+ '''
+ args = ['footprint', # CODE
+ key, # ENABLE KEY
+ name, # MENU
+ localVisible, # LOCAL VISABLE
+ globalVisible, # GLOBAL VISABLE
+ radius, # RADIUS
+ fillColor, # FILL COLOR
+ lineColor, # LINE COLOR
+ activeOpacity, # ACTIVE OPACITY
+ inactiveOpacity, # INACTIVE OPACITY
+ edgesBuffer, # EDGES BUFFER
+ displayBuffer, # DISPLAY BUFFER
+ lineWidth, # LINE WIDTH
+ turnOn, # TURN ON KEY
+ turnOff, # TURN OFF KEY
+ reset, # RESET KEY
+ description] # DESC
+ stat = [False, # GLOBAL VIS
+ '', # MAP
+ 0] # POINTS (followed by [; [X,Y]*]
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def delete_trait(name = 'Delete', key = key('D')):
+ '''Create a delete trait (VASSAL.counters.Delete)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['delete', name, key, '']
+ stat = '' # Nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def sendto_trait(mapName,
+ boardName,
+ name = 'Eliminate',
+ key = key('E'),
+ restoreName = 'Restore',
+ restoreKey = key('R'),
+ x = 200,
+ y = 200,
+ xidx = 0,
+ yidx = 0,
+ xoff = 1,
+ yoff = 1,
+ description = 'Eliminate this unit',
+ destination = 'L',
+ zone = '',
+ region = '',
+ expression = '',
+ position = ''):
+ '''Create a send to trait (VASSAL.counter.SendToLocation)
+
+ Parameters
+ ----------
+ side : str
+ Sub-map to move to
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['sendto', # CODE
+ name, # NAME
+ key, # KEY , MODIFIER
+ mapName, # MAP
+ boardName, # BOARD
+ x, y, # X ; Y
+ restoreName, # BACK
+ restoreKey, # KEY , MODIFIER
+ xidx, yidx, # XIDX ; YIDX
+ xoff, yoff, # XOFF ; YOFF
+ description, # DESC
+ destination, # DEST
+ zone, # ZONE
+ region, # REGION
+ expression, # EXPRESSION
+ position ] # GRIDPOS
+ stat = ['', # BACKMAP
+ '', # X
+ ''] # Y
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def basic_trait(name,
+ filename, # Can be empty
+ gpid, # Can be empty
+ cloneKey='', # Deprecated
+ deleteKey=''):# Deprecated
+ '''Create a basic unit (VASSAL.counters.BasicPiece)
+
+ Parameters
+ ----------
+ main : dict
+ Information
+ gpid : int
+ Piece global identifier
+ image : bool
+ If true, add image
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['piece', # CODE
+ cloneKey, # CLONEKEY
+ deleteKey, # DELETEKEY
+ filename, # IMAGE
+ name] # NAME
+ stat = ['null', # MAPID (possibly 'null')
+ 0, # X
+ 0, # Y
+ gpid, # GLOBAL PIECE ID
+ 0] # PROPERTY COUNT (followed by [; KEY; VALUE]+)
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def enc_parts(*parts):
+ '''Encode parts of a full piece definition
+
+ Each trait (VASSAL.counter.Decorator, VASSAL.counter.BasicPiece)
+ definition or state is separated by a litteral TAB character.
+ Beyond the first TAB separator, additional escape characters
+ (BACKSLAH) are added in front of the separator. This is to that
+ VASSAL.utils.SequenceDecoder does not see consequitive TABs as a
+ single TAB.
+
+ Parameters
+ ----------
+ parts : tuple
+ The various trait definitions or states
+
+ Returns
+ -------
+ code : str
+ The encoded piece
+ '''
+ ret = ''
+ sep = r' '
+ for i, p in enumerate(parts):
+ if i != 0:
+ ret += '\\'*(i-1) + sep
+ ret += str(p)
+
+ return ret
+
+# --------------------------------------------------------------------
+def add_piece(typ, state):
+ '''Create and add piece command (VASSAL.command.AddPiece)
+
+ Each part is separated by a SLASH ('/'). The first part is the
+ command type (PLUS '+') to perform. Second is the IDENTIFIER,
+ possibly 'null'. Then comes the fully encoded type of the piece,
+ followed by the state of the piece (also fully encoded).
+
+ Parameters
+ ----------
+ typ : str
+ Encoded piece definition
+ state : str
+ Encoded state definition
+
+ Returns
+ -------
+ cmd : str
+ The add command encoded
+ '''
+ args = ['+', # Type
+ 'null', # IDENTIFER
+ typ, # DEFINITION
+ state] # STATE
+ return '/'.join(args)
+
+# --------------------------------------------------------------------
+def add_proto(typ,state):
+ '''Create an add prototype command. This is the same as 'add_piece'
+
+ Parameters
+ ----------
+ typ : str
+ Encoded piece definition
+ state : str
+ Encoded state definition
+
+ Returns
+ -------
+ cmd : str
+ The add command encoded
+ '''
+ return add_piece(typ,state)
+
+
+# ====================================================================
+#
+# Below specific to the export app
+#
+# ====================================================================
+def get_bb(buffer):
+ '''Get bounding box of image
+
+ Parameters
+ ----------
+ buffer : bytes
+ The image bytes
+
+ Returns
+ -------
+ ulx, uly, lrx, lry : tuple
+ The coordinates of the bounding box
+ '''
+ from PIL import Image
+ from io import BytesIO
+
+ with Image.open(BytesIO(buffer)) as img:
+ bb = img.getbbox()
+
+ return bb
+
+# ====================================================================
+def piece_body(family,main,flipped,gpid):
+ '''Create an full add piece command from the side, image, and ID
+ information. This adds (in reverse order)
+
+ - BasicPiece
+ - Side prototype
+ - Flip layer (if 'flipped' is not none)
+
+ Parameters
+ ----------
+ family : str
+ Side in the game
+ main : dict
+ Main image information
+ flipped : dict
+ Flipped image information, possibly None
+ gpid : int
+ Global piece identifier
+
+ Returns
+ -------
+ cmd : str
+ The command to add the piece
+ '''
+ # Create the layer, prototype, and basic piece traits
+ decs = []
+ if flipped is not None:
+ imgs = [ main['filename'], flipped['filename'] ]
+ decs.extend([ layer_trait(images=imgs,
+ newNames=['','Reduced +'],
+ activateName = '',
+ decreaseName = '',
+ increaseName = 'Flip',
+ increaseKey = key('F'),
+ decreaseKey = '',
+ name='Step'),
+ report_trait(key('F')) ])
+ for m in main.get('mains',[]):
+ decs.append(prototype_trait(m + ' prototype'))
+ ech = main.get('echelon',None)
+ cmd = main.get('command',None)
+ if ech is not None: decs.append(prototype_trait(ech + ' prototype'))
+ if cmd is not None: decs.append(prototype_trait(cmd + ' prototype'))
+
+ decs.extend([ prototype_trait(family+' prototype'),
+ basic_trait(main['name'], main['filename'],gpid)
+ ])
+
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+
+ return add_piece(typ,stt)
+
+# --------------------------------------------------------------------
+def proto_body(family):
+ '''Create an full add prototype com from the side information.
+ This adds (in reverse order)
+
+ - An empty BasicPiece
+ - An eliminate (or sendto) trait
+ - A delete trait
+ - A mark moved trait
+ - A move trail trait
+
+ Parameters
+ ----------
+ family : str
+ Side in the game
+
+ Returns
+ -------
+ cmd : str
+ The command to add the piece
+ '''
+ # Dummy image
+ decs = [ report_trait(key('E'),key('R'),key('M')),
+ moved_trait(),
+ trail_trait(),
+ delete_trait(),
+ sendto_trait('DeadMap',family+' pool'),
+ mark_trait('Faction',family),
+ basic_trait('','','') ]
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+
+ return add_proto(typ,stt)
+
+# --------------------------------------------------------------------
+def add_splash(root,doc,categories,title='',verbose=False):
+ '''Add an about page
+
+ Parametersg
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ categories : dict
+ Catalog of images
+ title : str
+ Title of the game
+ '''
+ fronts = categories.get('front',{}).get('all',[])
+ front = list(fronts.values())[0] if len(fronts) > 0 else None
+ if front is None:
+ return
+
+ if verbose:
+ print(f'Adding about page with {title}')
+
+ add_about(root,doc, f'About {title}', fileName = front['filename'])
+
+# --------------------------------------------------------------------
+def add_rules(root,doc,zipfile,rules,verbose=False):
+ '''Add rules to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ zipfile : zipfile.ZipFile
+ The module archive
+ rules : str
+ File name of rules (PDF)
+ '''
+ if rules is None or rules == '':
+ return
+
+ if verbose:
+ print('Adding rules PDF to module')
+
+ zipfile.write(rules,'rules.pdf')
+
+ add_pdffile(root,doc,title='Show rules',pdfFile='rules.pdf')
+
+# --------------------------------------------------------------------
+def add_notes(root,doc,zipfile,title,version,sides,pdffile,infofile,rules,
+ verbose=False):
+ '''Add rules to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ zipfile : zipfile.ZipFile
+ The module archive
+ sides : list
+ Sides in the game
+ pdffile : str
+ The images PDF
+ infofile : str
+ The images information
+ rules : str
+ File name of rules (PDF)
+ '''
+ factions = "".join([f'<li>{s}</li>' for s in sides])
+ notes = f'''
+ <html>
+ <body>
+ <h1>Draft VASSAL module of {title} (Version {version})</h1>
+ <p>
+ This is a draft VASSAL module of {title} generated from
+ </p>
+ <ul>
+ <li>images in {pdffile}, and</li>
+ <li>information in {infofile}</li>
+ </ul>
+ <p>
+ both generated by LaTeX using the <b>wargame</b> [1] package, and
+ processed by the Python script <code>export.py</code> from that
+ package.
+ </p>
+ <p>
+ The module is <i>not</i> complete and the developer should edit
+ the module as needed in the VASSAL module editor.
+ </p>
+ <p>
+ [1] <code>https://gitlab.com/wargames_tex/wargame_tex</code>
+ </p>
+ <h2>Content of the module</h2>
+ <p>
+ The <code>export.py</code> Python script has identified the
+ factions of the game to be
+ </p>
+ <ul>
+ '''+factions+f'''
+ </ul>
+ <p>
+ and generated prototype pieces for these (along with possible
+ non-faction pieces. The script also generated a map ("dead map")
+ that contains boards for each faction and is meant to store
+ eliminated units ("&lt;faction&gt; pool"). These pools have a
+ generic shape and colour, and the developer should take care to
+ correct these as needed.
+ </p>
+ <p>
+ Boards of the game present in the {pdffile} and {infofile} files
+ have been generated. Each board has a single zone in it that
+ encompasses the full board, and a hex grid is added to that
+ zone. The module developer should adjust the zone and embedded
+ hex grid according to the actual map, using the VASSAL module
+ editor. The hex grid (as well as coordinates) is drawn by
+ default so as to make this obvious to the developer. The hex
+ sizes should be correct, and mainly the offset needs to be
+ adjusted.
+ </p>
+ <p>
+ Images marked as OOBs have also been added as maps to the
+ module. These also have a single zone with a rectangular grid
+ imposed in it. This grid, and the grid coordinates are drawn by
+ default, so it is easier to see and to remember to adjust it. The
+ module developer should adjust this, possibly adding zones, so
+ that it matches up with the graphics. The developer can add
+ units to the OOB via 'At-start' stacks in the VASSAL editor.
+ </p>
+ <p>
+ All pieces identified by {infofile} and present in {pdffile} have
+ been generated. Double sided pieces (identified by images which
+ also has a suffix-"flipped" image) are created as such.
+ </p>
+ <p>
+ Charts identified by the {infofile} and {pdffile} have been added
+ to the module. The are added as separate (pop-up) frames, but
+ the module developer can change this in the VASSAL module editor.
+ </p>
+ <p>
+ If the {infofile} and {pdffile} identified a front page, then that
+ has been added to module as the splash screen.
+ </p>
+ <p>
+ If a PDF rules file ({rules}) was passed to the Python script,
+ then that has been included in the module and is accessible from
+ the "Help" menu.
+ </p>
+ <h2>Key-bindings</h2>
+ <p>
+ The following key bindings have been defined
+ </p>
+ <table>
+ <tr>
+ <td>Alt-A</td>
+ <td>Show the charts panel</td>
+ </tr>
+ <tr>
+ <td>Alt-B</td>
+ <td>Show the OOBs</td>
+ </tr>
+ <tr>
+ <td>Alt-C</td>
+ <td>Show the counters panel</td>
+ </tr>
+ <tr>
+ <td>Alt-E</td>
+ <td>Show the eliminated units</td>
+ </tr>
+ <tr>
+ <td>Alt-6</td>
+ <td>Roll the die</td>
+ </tr>
+ <tr>
+ <td>Ctrl-O</td>
+ <td>Hide/show counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Flip selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Eliminate selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-+</td>
+ <td>Zoom in</td>
+ </tr>
+ <tr>
+ <td>Ctrl--</td>
+ <td>Zoom out</td>
+ </tr>
+ <tr>
+ <td>Ctrl-=</td>
+ <td>Select zoom</td>
+ </tr>
+ <tr>
+ <td>Ctrl-Shift-O</td>
+ <td>Show overview map</td>
+ </tr>
+ </table>
+
+ Counter short cuts (may not work, right click and use context menu)
+ <table>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Flip counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-D</td>
+ <td>Delete counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-M</td>
+ <td>Toggle "moved" marker</td>
+ </tr>
+ <tr>
+ <td>Ctrl-T</td>
+ <td>Toggle move trail</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Eliminate unit</td>
+ </tr>
+ <tr>
+ <td>Ctrl-R</td>
+ <td>Restore unit (from dead pool)</td>
+ </tr>
+ </table>
+ <h2>After finalising the module</h2>
+ <p>
+ After the developer has finalised the module (added more pieces,
+ fixed board zones a and grids, add in more commands), then this
+ Help menu entry should be deleted. You may want to keep key
+ bindings information in some help file.
+ </p>
+ </body>
+ </html>
+ '''
+ if version.lower() == 'draft':
+ if verbose:
+ print(f' Adding draft notes {version}')
+ zipfile.writestr('help/notes.html',notes)
+ add_helpfile(root,doc,title='Draft Module notes',
+ fileName='help/notes.html')
+
+ keys = f'''
+ <html>
+ <body>
+ <h1>{title} (Version {version}) Key bindings</h1>
+
+ <table>
+ <tr>
+ <th>Key </th>
+ <th>Where </th>
+ <th>Effect</th>
+ </tr>
+ <tr>
+ <td>Alt-A</td>
+ <td>-</td>
+ <td>Show the charts panel</td>
+ </tr>
+ <tr>
+ <td>Alt-B</td>
+ <td>-</td>
+ <td>Show the OOBs</td>
+ </tr>
+ <tr>
+ <td>Alt-C</td>
+ <td>-</td>
+ <td>Show the counters panel</td>
+ </tr>
+ <tr>
+ <td>Alt-E</td>
+ <td>-</td>
+ <td>Show the eliminated units</td>
+ </tr>
+ <tr>
+ <td>Alt-6</td>
+ <td>-</td>
+ <td>Roll the dice</td>
+ </tr>
+ <tr>
+ <td>Ctrl-O</td>
+ <td>Board</td>
+ <td>Hide/show counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Board</td>
+ <td>Flip selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Board</td>
+ <td>Eliminate selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-+</td>
+ <td>Board</td>
+ <td>Zoom in</td>
+ </tr>
+ <tr>
+ <td>Ctrl--</td>
+ <td>Board</td>
+ <td>Zoom out</td>
+ </tr>
+ <tr>
+ <td>Ctrl-=</td>
+ <td>Board</td>
+ <td>Select zoom</td>
+ </tr>
+ <tr>
+ <td>Ctrl-Shift-O</td>
+ <td>Board</td>
+ <td>Show overview map</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Counter</td>
+ <td>Flip counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-D</td>
+ <td>Counter</td>
+ <td>Delete counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-M</td>
+ <td>Counter</td>
+ <td>Toggle "moved" marker</td>
+ </tr>
+ <tr>
+ <td>Ctrl-T</td>
+ <td>Counter</td>
+ <td>Toggle move trail</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Counter</td>
+ <td>Eliminate unit</td>
+ </tr>
+ <tr>
+ <td>Ctrl-R</td>
+ <td>Counter</td>
+ <td>Restore unit (from dead pool)</td>
+ </tr>
+ </table>
+ <p>
+ Counter short cuts (may not work, right click and use context
+ menu)
+ </p>
+ </body>
+ </html>
+ '''
+ if verbose:
+ print(f'Add key bindings help file')
+ zipfile.writestr('help/keys.html',keys)
+ add_helpfile(root,doc,title='Key bindings',
+ fileName='help/keys.html')
+
+ return notes
+
+# --------------------------------------------------------------------
+def add_basics_to_map(root,map,**attr):
+ '''Add a map to the document
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ parent : xml.dom.minidom.Element
+ The parent element
+ button : str
+ Button text
+ name : str
+ Name of the map
+ stacking : bool
+ Whether to enable stacking
+
+ Returns
+ -------
+ map : xml.dom.minidom.Element
+ The map element
+ bpicker : xml.dom.minidom.Element
+ The board picker in map
+ '''
+ stacking = add_stacking(root,map)
+ add_camera (root,map)
+ add_forwardtochatter (root,map)
+ add_menudisplayer (root,map)
+ add_mapcenterer (root,map)
+ add_stackexpander (root,map)
+ add_piecemover (root,map)
+ add_keybufferer (root,map)
+ add_selectionhighlighters(root,map) # TBD
+ add_highlightlastmoved (root,map)
+
+ return stacking
+
+# --------------------------------------------------------------------
+def add_elim(root,game,sides,categories,verbose=False):
+ '''Add an eliminated map
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ sides : list of str
+ List of sides in the game
+ '''
+ if verbose:
+ print(' Adding eliminated map and boards')
+
+ if sides is None or len(sides) == 0:
+ return
+
+ map = add_map(root,game,'DeadMap',
+ buttonName = '', #'Eliminated units',
+ icon = '/images/playerAway.gif',
+ markMoved = 'Never',
+ launch = True,
+ allowMultiple = True,
+ hotkey=key('E',ALT))
+ bpicker = add_boardpicker(root,map,
+ slotHeight = 400,
+ slotWidth = 400)
+ add_setup(root,bpicker,'DeadMap',2,[s+' pool' for s in sides])
+ add_masskey(root,map,'Restore',
+ key('R'),
+ key('R'),
+ icon = '/images/Undo16.gif',
+ tooltip = "Restore selected units")
+
+ for i,s in enumerate(sides):
+ if verbose:
+ print(f' Adding {s} pool')
+
+ color = [0,0,0,64]
+ color[i % 3] = 255
+
+ w = 400
+ h = 400
+ c = ','.join([str(c) for c in color])
+ dimg = categories.get('pool',{}).get('all',{}).get(s,None)
+ img = ''
+
+ if dimg:
+ bb = get_bb(dimg['img'])
+ w = bb[2] - bb[0]
+ h = bb[3] - bb[1]
+ c = ''
+ img = dimg['filename']
+ if verbose:
+ print(f' Using image provided by the user: {img}')
+
+ add_board(root,bpicker,f'{s} pool',
+ image = img,
+ color = c,
+ width = w,
+ height = h)
+
+ add_basics_to_map(root,map)
+
+# --------------------------------------------------------------------
+def add_hex_grid(root,parent,color=rgb(255,0,0),visible=True,grid=True):
+ '''Add a hex grid, either to a zone or to the multizone container'''
+
+ hexes = add_hexgrid(root,parent,color=color,visible=visible,
+ edgesLegal=True)
+ if not grid:
+ return hexes
+
+ add_hexnumbering(root,hexes,
+ color = color,
+ hType = 'A',
+ hOff = -1,
+ vType = 'N',
+ vOff = -1,
+ visible = visible)
+
+ return hexes
+
+# --------------------------------------------------------------------
+def get_picture_info(picture,name,width,height,verbose):
+ '''
+ Returns
+ -------
+ hex_width, hex_height : float, float
+ Scale hex width
+ scx, scy : float, float, float, float
+ Scale to image and picture (x,y)
+ rot90 : bool
+ True if rotated +/-90 degrees
+ tran : callable
+ Translation function
+ '''
+ if picture is None:
+ print(f'WARNING: No Tikz picture information.'
+ f"Are you sure you used the `[zoned]' option for the "
+ f"tikzpicture environment of {name}?")
+ f = lambda x,y: (x,y)
+ return HEX_WIDTH,HEX_HEIGHT,1,1,False,f
+
+ # Get picture bounding box
+ pll = picture['lower left']
+ pur = picture['upper right']
+ # Get picture transformation
+ pa = picture['xx']
+ pb = picture['xy']
+ pc = picture['yx']
+ pd = picture['yy']
+ # Get picture offset (always 0,0?)
+ pdx = picture['dx']
+ pdy = picture['dy']
+ # Define picture global transformation
+ #pr = lambda x,y: (pa * x + pb * y, pc * x + pd * y)
+ pr = lambda x,y: (pa * x + pc * y, pb * x + pd * y)
+ # Globally transform (rotate) picture bounding box
+ pll = pr(*pll)
+ pur = pr(*pur)
+ # Calculate widht, height, and scaling factors
+ pw = pur[0] - pll[0]
+ ph = pur[1] - pll[1]
+ scw = width / pw
+ sch = height / ph
+ # Extract picture scales and rotation
+ # Courtesy of
+ # https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix
+ from math import sqrt, atan2, degrees, isclose
+ psx = sqrt(pa**2 + pb**2) # * (-1 if pa < 0 else 1)
+ psy = sqrt(pc**2 + pd**2) # * (-1 if pd < 0 else 1)
+ prt = degrees(atan2(pc,pd))
+ if not any([isclose(abs(prt),a) for a in [0,90,180,270]]):
+ raise RuntimeException('Rotations of Tikz pictures other than '
+ '0 or +/-90,+/- 180, or +/-270 not supported. '
+ 'found {prt}')
+ rot90 = isclose(abs(prt),90)
+ if any([isclose(prt,a) for a in [90,270,180,-180]]):
+ print(f'WARNING: rotations by {prt} not fully supported')
+
+ hex_width = psx * HEX_WIDTH
+ hex_height = psy * HEX_HEIGHT
+ if verbose:
+ print(f' Picture transformations: {pa},{pb},{pc},{pd}\n'
+ f' Scale (x,y): {psx},{psy}\n'
+ f' Rotation (degrees): {prt}')
+
+ # When translating the Tikz coordinates, it is important to note
+ # that the Tikz y-axis point upwards, while the picture y-axis
+ # point downwards. This means that the upper right corner is at
+ # (width,0) and the lower left corner is at (0,height).
+ def tranx(x,off=-pll[0]):
+ # print(f'x: {x} + {off} -> {x+off} -> {int(scw*(x+off))}')
+ return int(scw * (x + off)+.5)
+ def trany(y,off=-pur[1]):
+ # print(f'y: {y} + {off} -> {y+off} -> {-int(sch*(y+off))}')
+ return -int(sch * (y + off)+.5)
+ tran = lambda x,y : (tranx(x), trany(y))
+
+ return hex_width, hex_height, scw * psx, sch * psy, rot90, tran
+
+# --------------------------------------------------------------------
+def get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90,
+ labels,coords,targs,nargs):
+ targs['dx'] = hex_width
+ targs['dy'] = hex_height
+ if labels is not None:
+ labmap = {
+ 'auto': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' },
+ 'auto=numbers' : {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' },
+ 'auto=alpha column': {
+ 'hLeading': 0, 'vLeading': 0, 'hType': 'A', 'vType': 'N',
+ 'hOff': -1 },
+ 'auto=alpha 2 column': {# Not supported
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'A', 'vType': 'N' },
+ 'auto=inv y x plus 1': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N',
+ 'hOff': 0, 'vDescend': True },
+ 'auto=x and y plus 1': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N',
+ 'hOff': 0, 'vOff': 0 }
+ }
+ for l in labels.split(','):
+ nargs.update(labmap.get(l,{}))
+
+ # Field/Direction | Normal | Rotated |
+ # ----------------|--------|---------|
+ # hOff | column | column |
+ # vOff | row | row |
+ # hDescend | column | row | True, incr to left
+ # vDescend | row | column | True, incr upward
+ # First='H' | column | column |
+
+ # In wargame offset=0 means that the first coordinates are 0,0.
+ # But offset 0,0 in VASSAL means start at 1,1
+ horiz = 'column'
+ vert = 'row'
+ nargs['vOff'] = nargs.get('vOff',0)-coords[vert] ['offset']-1
+ nargs['hOff'] = nargs.get('hOff',0)-coords[horiz]['offset']-1
+
+ # In VASSAL, vDesend=False means rows increase downward,
+ # while in wargame, factor=-1 means rows increase downward
+ horiz = 'row' if rot90 else 'column'
+ vert = 'column' if rot90 else 'row'
+ nargs['hDescend'] = coords[horiz]['factor'] != 1
+ nargs['vDescend'] = coords[vert] ['factor'] != -1 # flipped y
+ targs['edgesLegal'] = True
+
+ # Check for inversed columns
+ inv_col = coords['column']['factor'] == -1
+ ell = hex_width if inv_col else 0
+
+ # Some special stuff in case of 90 degree rotation
+ if rot90:
+ targs.update({'sideways': True})
+ nargs['hOff'] -= 1
+ nargs['hDescend'] = not nargs['hDescend']
+ if inv_col:
+ nargs['hOff'] += 3
+
+ margin = i.get('board frame',{}).get('margin',0)
+ mx = scx * margin
+ my = scy * margin
+ if inv_col: mx = 0 # Bug in wargame?
+
+ # Grid offset is defined relative to the full image,
+ # not the zone:
+ #
+ # X,Y offset: The horizontal and vertical position of
+ # the center of the first hex of the grid.
+ #
+ # That is, (x,y)=(0,0) is in the top-left corner of the
+ # image, while in TikZ it is in the bottom left corner.
+ # This means we shift by the boudning box offsets plus
+ # some stuff to align with the zone.
+ #
+ # In case of inversed columns, we need to add some extra stuff.
+ x0, y0 = llx-hex_width/3 + ell + mx, ury + my
+
+ # Rotated?
+ if rot90:
+ x0, y0 = ury+2*hex_width/3 + ell + mx, llx + my
+
+ # Below should be double-checked.
+
+ if not rot90:
+ if coords.get('column',{}).get('top short','') == 'isodd' \
+ and coords.get('column',{}).get('offset',0) == -1:
+ y0 -= hex_width/2
+ elif coords.get('column',{}).get('top short','') == 'iseven' \
+ and coords.get('column',{}).get('offset',-1) == 0:
+ y0 -= hex_width/2
+
+ targs.update({'x0': int(x0),'y0': int(y0)})
+
+# --------------------------------------------------------------------
+def get_rectparams(i,llx,ury,width,height,rot90,targs,nargs):
+ targs['dx'] = width
+ targs['dy'] = height
+ targs['x0'] = int(llx - width/2)
+ targs['y0'] = int(ury + height/2)
+ targs['color'] = rgb(0,255,0)
+ nargs['color'] = rgb(0,255,0)
+ nargs['vDescend'] = True
+ nargs['vOff'] = -3
+ nargs.update({'sep':',','vLeading':0,'hLeading':0})
+
+# --------------------------------------------------------------------
+def add_zones(root,zoned,name,board,width,height,gpid,
+ labels=None,coords=None,picinfo=None,
+ verbose=False,visible=True):
+ grids = []
+ picture = None
+ if verbose:
+ print(f' Adding zones to {name} zoned={"zoned" in board}')
+
+ for k, v in board.items():
+ if k == 'labels': labels = v
+ if k == 'coords': coords = v
+ if k == 'zoned': picture = v
+ if 'zone' not in k or k == 'zoned':
+ continue
+
+ gridtype = (add_hexgrid
+ if 'hex' in k.lower()
+ else add_squaregrid)
+ gridnum = (add_hexnumbering
+ if 'hex' in k.lower()
+ else add_squarenumbering)
+ grids.append([k,v,gridtype,gridnum])
+
+ if len(grids) < 1: return gpid
+ if verbose:
+ print(f' Got zones: {[k[0] for k in grids]}')
+ # Either get picture information from argument, or deduce from the
+ # found 'zoned' key.
+ if picinfo is None:
+ picinfo = get_picture_info(picture,name,width,height,verbose)
+
+ hex_width, hex_height, scx, scy, rot90, tran = picinfo
+
+
+ for g in grids:
+ n, i, typ, num = g
+ if verbose:
+ print(f' Adding zone {n}')
+ if 'scope' in n:
+ llx,lly = tran(*i['global lower left'])
+ urx,ury = tran(*i['global upper right'])
+ path = [[llx,ury],[urx,ury],[urx,lly],[llx,lly]]
+ nm = n.replace('zone scope ','')
+ elif 'path' in n:
+ path = [tran(*ii) for ii in i['path']]
+ llx = min([px for px,py in path])
+ ury = max([py for px,py in path])
+ nm = n.replace('zone path ','')
+
+ # Checkf if we have "point" type elements in this object and
+ # add them to dict.
+ points = [ v for k,v in i.items()
+ if (k.startswith('point') and
+ isinstance(v,dict) and \
+ v.get('type','') == 'point')]
+
+ pathstr = ';'.join([f'{s[0]},{s[1]}' for s in path])
+ if verbose:
+ print(f' Zone path ({llx},{ury}): {pathstr}')
+ zone = add_zone(root,zoned,
+ name=nm,
+ locationFormat = ("$name$"
+ if 'pool' in n.lower() else
+ "$gridLocation$"),
+ useParentGrid=False,
+ path=pathstr)
+
+ # Do not add grids to pools
+ if 'pool' in n.lower():
+ continue
+
+ targs = {'color':rgb(255,0,0),'visible':visible}
+ nargs = {'color':rgb(255,0,0),'visible':visible}
+ if 'hex' in n.lower():
+ get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90,
+ labels,coords,targs,nargs)
+ else:
+ width = hex_width / HEX_WIDTH * RECT_WIDTH
+ height = hex_height / HEX_HEIGHT * RECT_HEIGHT
+ get_rectparams(i,llx,ury,width,height,rot90,targs,nargs)
+
+ # print(targs,nargs)
+ if 'turn' in n.lower(): nargs['sep'] = 'T'
+ if 'oob' in n.lower(): nargs['sep'] = 'O'
+
+ if verbose:
+ print(f' Adding grid')
+
+ if len(points) <= 0:
+ grid = typ(root,zone,**targs)
+ num(root,grid,**nargs)
+ else:
+ if verbose:
+ print(f' Use a region grid')
+ grid = add_regiongrid(root,zone,snapto=True,visible=visible)
+ for p in points:
+ pn = p["name"]
+ pc = p["coords"]
+ if verbose:
+ print(f' Add region {pn} {p}')
+
+ n, gpid = add_region(root,grid,pn,*tran(*pc),gpid,
+ alsoPiece=True,verbose=verbose)
+
+
+ # Once we've dealt with this grid, we should see if we have
+ # any embedded zones we should deal with.
+ add_zones(root,zoned,name,i,width,height,gpid,
+ labels=labels,coords=coords,picinfo=picinfo,
+ verbose=verbose)
+
+ # Adding a global grid
+ #targs['color'] = rgb(0,255,0)
+ #nargs['color'] = rgb(0,255,0)
+ #grid = typ(root,zoned,**targs)
+ #num(root,grid,**nargs)
+
+ return gpid
+
+
+# --------------------------------------------------------------------
+def add_inv(root,game,sides,**attr):
+ '''Add inventory to module'''
+ filt = '{' + '||'.join([f'Faction=="{s}"' for s in sides])+'}'
+ grp = 'Faction,Command,Echelon,Type'
+ inv = add_inventory(root,game,
+ include = filt,
+ groupBy = grp,
+ sortFormat = '$PieceName$',
+ tooltip = 'Show inventory of all pieces',
+ zoomOn = True,
+ **attr)
+ return inv
+
+
+# --------------------------------------------------------------------
+def add_map_board(root,game,name,board,gpid,verbose=False,visible=False):
+ '''A add a single board to the module
+ '''
+
+ map = add_map(root,game, name)
+ bpicker = add_boardpicker(root,map)
+
+ add_counterviewer (root,map)
+ add_hidepieces (root,map)
+ add_globalmap (root,map)
+ add_zoomer (root,map)
+ add_basics_to_map (root,map)
+ add_masskey (root,map,'Flip', key('F'),key('F'),
+ icon = '/images/Undo16.gif',
+ tooltip='Flip selected units')
+ add_masskey (root,map,'Eliminate',key('E'),key('E'),
+ icon = '/images/playerAway.gif',
+ tooltip='Eliminate selected units')
+
+ # Get the image so we may make a rectangle
+ if verbose:
+ print(f' Adding board {board["name"]} -> {board["filename"]}')
+ ulx,uly,lrx,lry = get_bb(board['img'])
+ eboard = add_board(root,bpicker,name,image=board['filename'])
+ zoned = add_zoned(root,eboard)
+ #hexes = add_hexgrid(root,zoned)
+ add_zonehighlighter(root,zoned)
+
+ if not 'zones' in board:
+ full = add_zone(root,zoned,
+ name='full',
+ useParentGrid=False,
+ path=(f'{ulx},{uly};' +
+ f'{lrx},{uly};' +
+ f'{lrx},{lry};' +
+ f'{ulx},{lry}'))
+
+ # We do not have board info, so add a grid to the whole thing
+ add_hex_grid(root,full,rgb(255,0,0),True,True,visible=visible)
+ return
+
+ # If we get here, we have board info!
+ w = abs(ulx-lrx)
+ h = abs(uly-lry)
+ return add_zones(root,zoned,name,board['zones'],w,h,gpid,
+ verbose=verbose,visible=visible)
+
+# --------------------------------------------------------------------
+def add_boards(root,game,categories,sides,gpid,verbose=False,visible=False):
+ '''Add all boards to the module, including eliminated map
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ categories : dict
+ Catalogue of images
+ sides : list of str
+ List of sides in the game
+ Name of the map
+ '''
+ if verbose:
+ print('Adding maps and boards')
+
+ # Loop over defined boards
+ for bn, b in categories.get('board',{}).get('all',{}).items():
+ gpid = add_map_board(root,game,bn,b,gpid,verbose,visible)
+
+ add_elim(root,game,sides,categories,verbose)
+
+ return gpid
+
+# --------------------------------------------------------------------
+def add_oob(root,widget,name,oob,gpid,hotkey='',verbose=False,visible=False):
+ '''A add a single board to the module
+ '''
+ # Short hand
+ cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr)
+
+ if verbose:
+ print(f' Adding oob {name}')
+
+ map = add_widgetmap(root,widget, name,markMoved='Never',hotkey='')
+ bpicker = add_boardpicker(root,map)
+
+ add_counterviewer (root,map)
+ add_zoomer (root,map)
+ add_basics_to_map (root,map)
+
+
+ # Get the image so we may make a rectangle
+ if verbose:
+ print(f' Adding OOB {oob["name"]} -> {oob["filename"]}')
+
+ ulx,uly,lrx,lry = get_bb(oob['img'])
+ board = add_board(root,bpicker,name,image=oob['filename'])
+ zoned = add_zoned(root,board)
+ add_zonehighlighter(root,zoned)
+
+ if not 'zones' in oob:
+ zone = add_zone(root,zoned,
+ name='full',
+ useParentGrid=False,
+ path=(f'{ulx},{uly};' +
+ f'{lrx},{uly};' +
+ f'{lrx},{lry};' +
+ f'{ulx},{lry}'))
+ # We do not have board info, so add a grid to the whole thing
+ grid = add_squaregrid(root,zone,visible=visible)
+ add_squarenumbering(root,grid,visible=visible)
+ return
+
+ # If we get here, we have board info!
+ w = abs(ulx-lrx)
+ h = abs(uly-lry)
+ return add_zones(root,zoned,name,oob['zones'],w,h,gpid,
+ verbose=verbose,visible=visible)
+
+# --------------------------------------------------------------------
+def add_oobs(root,game,categories,gpid,verbose=False,visible=False):
+ '''Add all OObs to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ categories : dict
+ Catalogue of images
+ '''
+ # Short hand
+ oobc = categories.get('oob',{}).get('all',{}).items()
+ if len(oobc) < 1:
+ return gpid
+
+ oobs = add_chartwindow(root,game, 'OOBs',
+ hotkey = key('B',ALT),
+ description = 'OOBs',
+ text = '',
+ icon = '/images/inventory.gif',
+ tooltip = 'Show/hide OOBs')
+ tabs = add_tabs(root,oobs,'OOBs')
+
+ if verbose:
+ print('Adding OOBs')
+
+ # Loop over defined boards
+ for on, o in oobc:
+ widget = add_mapwidget(root,tabs, entryName=on)
+ gpid = add_oob(root,widget,on,o,gpid,
+ verbose = verbose,
+ hotkey = key('B',ALT),
+ visible = visible)
+
+ return gpid
+
+# --------------------------------------------------------------------
+def add_markproto(root,protos,key,value):
+ decs = [ mark_trait(key,value.capitalize()),
+ basic_trait('','','') ]
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+ body = add_proto(typ,stt)
+ add_prototype(root,protos,value+' prototype',body)
+
+# --------------------------------------------------------------------
+def add_counters(root,game,categories,
+ unittypes,echelons,commands,verbose=False):
+ '''Add all counters to the module.
+
+ This will add all counters to the module, as well as prototypes
+ for each sub-category.
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+ '''
+ # Short hand
+ # Create prototypes container before adding pieces
+ protos = add_prototypes(root,game)
+ for utype in unittypes: add_markproto(root,protos,'Type',utype)
+ for ech in echelons: add_markproto(root,protos,'Echelon',ech)
+ for cmd in commands: add_markproto(root,protos,'Command',cmd)
+
+ # Stating global piece ID
+ gpid = 20
+
+ # A window to hold the pieces
+ piecew = add_piecewindow(root,game,'Counters',
+ hotkey = key('C',ALT))
+ # Tab container for each sub-category
+ piecet = add_tabs(root,piecew,entryName='Counters')
+
+ if verbose:
+ print('Adding counters and prototypes')
+
+ # Loop over sub-categories
+ for subn, subc in categories.get('counter',{}).items():
+ # Friendly message
+ if verbose:
+ print(f' Adding {subn} counters and prototype')
+
+ # Create a panel for this sub-category
+ piecep = add_panel(root,piecet,
+ entryName = subn,
+ fixed = False)
+ # Add a list to the panel
+ piecel = add_list(root,piecep,
+ entryName=f'{subn} counters')
+
+ if verbose:
+ print(f' Prototype: {subn} prototype')
+ # Create prototype for this sub-category
+ proto = add_prototype(root,protos,
+ name = f'{subn} prototype',
+ code = proto_body(subn),
+ description = f'Prototype for {subn} counters')
+
+ # Loop over counters in this sub-category
+ for cn, c in subc.items():
+ # Flipped counters are not added directly
+ if cn.endswith('flipped'): continue
+
+ if verbose:
+ print(f' counter: {cn}')
+
+ # Get image bounding box
+ bb = get_bb(c['img'])
+
+ # Get flipped image, if any
+ cf = subc.get(cn + ' flipped', None)
+
+ # Create a slot for this piece
+ sl = add_pieceslot(root,piecel,
+ entryName = cn,
+ gpid = gpid,
+ code = piece_body(subn,c,cf,gpid),
+ height = bb[3]-bb[1],
+ width = bb[2]-bb[0])
+
+ # Store the global piece identifier - do we need this?
+ c['gpid'] = gpid
+
+ # Increment global piece identifier
+ gpid += 1
+
+ # Return next free piece identifier
+ return gpid
+
+# --------------------------------------------------------------------
+def add_charts(root,game,categories,verbose=False):
+ '''Add all boards to the module
+
+ This will select all 'chart' elements from the catalogue and add
+ them as individual (popup) panels to the module.
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+
+ '''
+ chartc = categories.get('chart',{}).get('all',{}).items()
+ if len(chartc) < 1:
+ return
+
+ # Short hand
+ cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr)
+ cw = lambda parent,tag,**attr : create_elem(root,parent,vw(tag),**attr)
+
+ if verbose:
+ print('Adding charts')
+
+ charts = add_chartwindow(root,game, 'Charts',
+ hotkey = key('A',ALT),
+ description = 'Charts',
+ tooltip = 'Show/hide Charts')
+ tabs = add_tabs(root,charts,'Charts')
+
+
+ # Loop over defined charts
+ for cn, c in chartc:
+ if verbose:
+ print(f' Chart {cn} ({c["filename"]})')
+ add_chart(root,tabs,
+ chartName = cn,
+ description = cn,
+ fileName = c['filename'])
+
+# --------------------------------------------------------------------
+def add_diceroll(root,game,categories,verbose=False):
+ '''Add a dice button (1d6)
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+ '''
+ if verbose:
+ print('Adding dice')
+
+ add_dice(root,game,
+ hotkey = key('6',ALT),
+ nDice = 1,
+ nSides = 6,
+ text = '1d6',
+ tooltip = 'Roll a 1d6',
+ name = '1d6')
+
+
+# ====================================================================
+def create_build(info,
+ categories,
+ unittypes,
+ echelons,
+ commands,
+ zipfile,
+ title,
+ version,
+ desc = '',
+ rules = None,
+ pdffile = '',
+ infofile = '',
+ verbose = False,
+ visible = False):
+ '''Create the buildFile.xml document
+
+ Parameters
+ ----------
+ info : dict
+ Information dicationary
+ categories : dict
+ Catalogue of images
+ unittypes : set
+ Set of used unit types
+ zipfile : zipfile.ZipFile
+ Module archive
+ title : str
+ Title of module
+ version : str
+ Version number of module
+ desc : str
+ Short description of the game
+ rules : str
+ Filename of PDF rules document (if any)
+
+ Returns
+ -------
+ xml : str
+ The encoded document
+ '''
+ from xml.dom.minidom import Document
+
+ if verbose:
+ print(f'Creating buildFile.xml: {title},{version}')
+
+ # Create document
+ root = Document()
+
+ # Add game element
+ game = add_game(root,root,
+ name = title,
+ version = version,
+ description = desc)
+
+ # Extract the sides of the game from the counter sub-categories
+ # Should be a little more clever about the case here
+ dsides = {k.lower() : k for k in categories.get('counter',{}).keys()}
+ sides = None
+ for skip in ['all','common', 'marker', 'markers']:
+ if skip in dsides: del dsides[skip]
+ sides = list(dsides.values())
+ if verbose:
+ print('Identified factions: ',sides)
+
+ # Use the standard command encoder
+ add_basiccommandencoder(root,game)
+
+ # Add document parts
+ doc = add_documentation(root,game)
+ add_splash(root, doc, categories, title,verbose)
+ add_rules(root, doc, zipfile, rules,verbose)
+ notes = add_notes(root,doc,zipfile,title,version,
+ sides,pdffile,infofile,rules,verbose)
+
+
+ # Create roster or player sides
+ roster = add_roster(root,game)
+ for s in sides:
+ add_entry(root,roster,s)
+
+ # Add global options - mainly defer to user settings
+ add_globaloptions(root,game,
+ autoReport = 'Use Preferences Setting',
+ centerOnMove = 'Use Preferences Setting',
+ nonOwnerUnmaskable = 'Use Preferences Setting',
+ playerIdFormat = '$playerName$')
+ # Add all pieces to the module (including prototypes)
+ gpid = add_counters(root,game,categories,
+ unittypes,echelons,commands,verbose)
+ # Add an inventory
+ add_inv(root,game,sides)
+ # Add all boards to the module (including eliminated map)
+ gpid = add_boards(root,game,categories,sides,gpid,
+ verbose=verbose,visible=visible)
+ # Add all OOBs to the module
+ gpid = add_oobs(root,game,categories,gpid,
+ verbose=verbose,visible=visible)
+ # Add charts to the module
+ add_charts(root,game,categories,verbose=verbose)
+ # Add a dice rool
+ add_diceroll(root,game,categories,verbose=verbose)
+
+ # Set next available piece identifier on the game
+ game.setAttribute('nextPieceSlotId',str(gpid+1))
+
+ # Return the document
+ return root, notes
+
+# --------------------------------------------------------------------
+def create_data(title,version,desc='',verbose=False):
+ '''Create the module data XML
+
+ Parameters
+ ----------
+ title : str
+ Title of the game
+ version : str
+ Version number of the module
+ desc : str
+ Short description
+
+ Returns
+ -------
+ xml : str
+ The encoded document
+ '''
+ from xml.dom.minidom import Document
+ from time import time
+
+ if verbose:
+ print('Create module data')
+
+ # The document
+ root = Document()
+
+ # Top of the document
+ data = root.createElement('data')
+ data.setAttribute("version","1")
+ root.appendChild(data)
+
+ # Version number of module
+ vers = root.createElement('version')
+ vers.appendChild(root.createTextNode(str(version)))
+ data.appendChild(vers)
+
+ # Name of the game
+ name = root.createElement('name')
+ name.appendChild(root.createTextNode(title))
+ data.appendChild(name)
+
+ # VASSAL version (should get this in some other way)
+ vvers = root.createElement('VassalVersion')
+ vvers.appendChild(root.createTextNode("3.6.7"))
+ data.appendChild(vvers)
+
+ # Description, if any
+ desc = root.createElement('description')
+ data.appendChild(desc)
+
+ # Automatically set the save data
+ save = root.createElement('dateSaved')
+ save.appendChild(root.createTextNode(f'{int(time())}'))
+ data.appendChild(save)
+
+ return root
+
+
+# ====================================================================
+def create_vmod(vmodname,
+ info,
+ title,
+ version,
+ desc = '',
+ rules = None,
+ pdfname = '',
+ infoname = '',
+ patch = None,
+ verbose = False,
+ visible = False):
+ '''Create a VASSAL module from the information passed
+
+ Parameters
+ ----------
+ vmodname : str
+ Name of the module
+ info : list
+ List of images and image data
+ title : str
+ Name of the game
+ version : str
+ Version of the module
+ desc : str
+ Short description of the game
+ rules : str
+ Rules PDF (optional)
+
+ Returns
+ -------
+ '''
+ from zipfile import ZipFile, ZIP_DEFLATED
+ from pprint import pprint
+
+ categories = {}
+ unittypes = []
+ echelons = []
+ commands = []
+ with ZipFile(vmodname,'w',compression=ZIP_DEFLATED) as vmod:
+ # Create images in ZIP file
+ for i in info:
+ if ignore_entry(i): continue
+
+ # Store the name of the image file in catalogue
+ i['filename'] = i['name'].replace(' ','_') + '.png'
+ vmod.writestr('images/'+i['filename'],i['img'])
+
+ # Categorize - assume counter
+ typ = i.get('category','counter')
+ sub = i.get('subcategory','all')
+ if sub == '':
+ i['subcategory'] = 'all'
+ sub = 'all'
+
+ # Add to catalogue
+ if typ not in categories:
+ categories[typ] = {}
+ cat = categories[typ]
+
+ if sub not in cat:
+ cat[sub] = {}
+ tgt = cat[sub]
+
+ tgt[i['name']] = i
+
+ natoapp6c = i.get('natoapp6c',None)
+ if natoapp6c is not None:
+ from re import sub
+ mains = natoapp6c.get('main',None)
+ echelon = natoapp6c.get('echelon',None)
+ command = natoapp6c.get('command',None)
+
+ if mains is not None:
+ mains = sub(r'\[[^]]+\]','',mains)\
+ .replace('{','').replace('}','').split(',')
+ unittypes.extend(mains)
+ i['mains'] = mains
+
+ if echelon is not None:
+ echelons.append(natoapp6c['echelon'])
+ i['echelon'] = echelon
+
+ if command is not None:
+ commands.append(command)
+ i['command'] = command
+
+ # Friendly message
+ # if verbose:
+ # print(f'{i["name"]} -> {i["type"]}/{i["sub type"]} {typ}/{sub}')
+
+ unittypes = set(unittypes)
+ echelons = set(echelons)
+ commands = set(commands)
+
+ # Now create the `buildFile.xml` file
+ build, notes = create_build(info,
+ categories,
+ unittypes,
+ echelons,
+ commands,
+ vmod,
+ title,
+ version,
+ desc,
+ rules,
+ pdfname,
+ infoname,
+ verbose,
+ visible)
+ # Now create the `moduledata` file
+ data = create_data(title, version, desc,verbose)
+
+
+ if patch:
+ from importlib.util import spec_from_file_location, \
+ module_from_spec
+ from pathlib import Path
+ from sys import modules
+
+ p = Path(patch)
+ if verbose:
+ pn = str(p.stem)
+ print(f'Will patch module with {pn}.patch function')
+
+ spec = spec_from_file_location(p.stem, p.absolute())
+ module = module_from_spec(spec)
+ spec.loader.exec_module(module)
+ modules[p.stem] = module
+
+
+ # Patch must accept xml.dom.document,xml.dom.document,ZipFile
+ module.patch(build,data,vmod,verbose)
+
+ buildstr = build.toprettyxml(indent=' ',
+ encoding="UTF-8",
+ standalone=False)
+ datastr = data.toprettyxml(indent=' ',
+ encoding="UTF-8",
+ standalone=False)
+
+ vmod.writestr('buildFile.xml',buildstr)
+ vmod.writestr('moduledata',datastr)
+
+ return notes
+
+# ====================================================================
+def export(vmodname = 'Draft.vmod',
+ pdfname = 'export.pdf',
+ infoname = 'export.json',
+ title = 'Test',
+ version = 'Draft',
+ desc = '',
+ rules = None,
+ patch = None,
+ verbose = False,
+ visible = False):
+ '''Do the whole thing
+
+ - Read in information form the 'infoname' file (a CSV file
+ generated by LaTeX)
+
+ - Convert each page in the 'pdfname' file (a PDF generated by
+ LaTex) into images
+
+ - Create the VASSAL module
+
+ '''
+ if verbose:
+ print(f'Module name : {vmodname}\n'
+ f'PDF name : {pdfname}\n'
+ f'Info name : {infoname}\n'
+ f'Title : {title}\n'
+ f'Version : {version}\n'
+ f'Description : {desc}\n'
+ f'Rules : {rules}\n')
+ info = convert_pages(pdfname=pdfname,infoname=infoname)
+ return create_vmod(vmodname = vmodname,
+ info = info,
+ title = title,
+ version = version,
+ desc = desc,
+ rules = rules,
+ pdfname = pdfname,
+ infoname = infoname,
+ patch = patch,
+ verbose = verbose,
+ visible = visible)
+
+# ====================================================================
+if __name__ == '__main__':
+ from argparse import ArgumentParser, FileType
+
+ ap = ArgumentParser(description='Create draft VASSAL module')
+ ap.add_argument('pdffile',
+ help='The PDF file to read images from',
+ type=FileType('r'),
+ default='export.pdf',
+ nargs='?')
+ ap.add_argument('infofile',
+ help='The JSON file to read image information from',
+ type=FileType('r'),
+ default='export.json',
+ nargs='?')
+ ap.add_argument('-p','--patch',
+ help='A python script to patch generated module',
+ type=FileType('r'))
+ ap.add_argument('-o','--output',
+ help='Output file to write module to',
+ type=FileType('w'),
+ default='Draft.vmod')
+ ap.add_argument('-t','--title',
+ help='Module title', default='Draft',
+ type=str)
+ ap.add_argument('-v','--version',
+ help='Module version',
+ type=str,
+ default='draft')
+ ap.add_argument('-r','--rules',
+ help='Rules PDF file',
+ type=FileType('r'))
+ ap.add_argument('-d','--description',
+ help='Short description of module',
+ type=str,
+ default='draft of module')
+ ap.add_argument('-V','--verbose',
+ help='Be verbose',
+ action='store_true')
+ ap.add_argument('-G','--visible-grids',
+ action='store_true',
+ help='Make grids visible in the module')
+ ap.add_argument('-n','--notes',
+ help='Show notes',
+ action='store_true')
+
+
+ args = ap.parse_args()
+
+ vmodname = args.output.name
+ rulesname = args.rules.name if args.rules is not None else None
+ args.output.close()
+
+ patchname = args.patch.name if args.patch is not None else None
+ if args.patch is not None:
+ args.patch.close()
+
+ if args.version.lower() == 'draft':
+ args.visible_grids = True
+
+ try:
+ notes = export(vmodname = vmodname,
+ pdfname = args.pdffile.name,
+ infoname = args.infofile.name,
+ title = args.title,
+ version = args.version,
+ desc = args.description,
+ rules = rulesname,
+ patch = patchname,
+ verbose = args.verbose,
+ visible = args.visible_grids)
+
+ if args.notes:
+ print(f'Module {vmodname} created. '
+ 'Here are the notes from the module')
+ print(notes)
+
+ except Exception as e:
+ from sys import stderr
+ print(f'Failed to build {vmodname}: e',file=stderr)
+ from os import unlink
+ try:
+ unlink(vmodname)
+ except:
+ pass
+
+ raise e
diff --git a/macros/latex/contrib/wargame/source/utils/svg2tikz.py b/macros/latex/contrib/wargame/source/utils/svg2tikz.py
new file mode 100755
index 0000000000..a9f3c60203
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/utils/svg2tikz.py
@@ -0,0 +1,365 @@
+#!/usr/bin/env python3
+
+from sys import stderr, stdout
+
+def monkey_patch():
+ from svgelements import SVGElement
+
+ def SVGElement__imatmul__(self,other):
+ print('Dummy SVGElement.__imatmul__')
+ return self
+
+ SVGElement.__imatmul__ = SVGElement__imatmul__
+
+monkey_patch()
+
+# --------------------------------------------------------------------
+def open_svg(input):
+ from svgelements import SVG
+
+ svg = SVG.parse(input,reify=False)
+ print(type(svg[0]),file=stderr)
+ return svg
+
+# --------------------------------------------------------------------
+def get_bb(svg):
+ llx,lly,urx,ury = svg.bbox()
+ # print(llx,lly,urx,ury)
+ return llx,lly,urx,ury
+
+# --------------------------------------------------------------------
+def flush_left(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-llx,-lly)
+ return svg
+
+# --------------------------------------------------------------------
+def scale_unit(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ scale = 1 / max(urx,ury)
+ svg *= Matrix.scale(scale)
+
+ return svg
+
+# --------------------------------------------------------------------
+def scale_to_cm(svg,px_per_cm = 37.79531157367762334497):
+ from svgelements import Matrix
+
+ scale = 1 / px_per_cm
+ svg *= Matrix.scale(scale)
+
+ return svg
+
+# --------------------------------------------------------------------
+def shift_to_centre(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-urx/2,-ury/2)
+ svg *= Matrix.scale(1,-1)
+ svg.reify()
+ svg.render()
+ return svg
+
+# --------------------------------------------------------------------
+def flipy(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-llx,-lly)
+ svg *= Matrix.scale(1,-1)
+ svg.reify()
+ svg.render()
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(0,-lly)
+ return svg
+
+# ====================================================================
+def get_paths(svg):
+ '''Read in paths from the SVG image
+
+ This will recurse down groups for path operations
+
+ Returns
+ -------
+ paths : list
+ List of svg.path.Path objects
+ '''
+ from svgelements import Path, Group
+ from svg.path import parse_path
+
+ paths = []
+
+ for e in svg:
+ if isinstance(e,Path):
+ print('Parse path',file=stderr)
+ p = parse_path(e.d())
+ paths.append(p)
+ if isinstance(e,Group):
+ print('Parse group',file=stderr)
+ paths.append(get_paths(e))
+
+ return paths
+
+# ====================================================================
+def tikz_point(e,f):
+ '''Ouput a point
+
+ Parameters
+ ----------
+ e : complex
+ The point
+ f : str
+ Floating point format
+
+ Return
+ ------
+ coord : str
+ The point formatted for Tikz
+ '''
+ return f'({e.real:{f}},{e.imag:{f}})'
+
+# --------------------------------------------------------------------
+def tikz_move(e,f):
+ '''Output a move-to operation
+
+ Parameters
+ ----------
+ e : complex
+ The point to move to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ coord : str
+ The point formatted for Tikz
+ '''
+ return tikz_point(e.start,f)
+
+# --------------------------------------------------------------------
+def tikz_line(e,f):
+ '''Output a line-to operation
+
+ Parameters
+ ----------
+ e : complex
+ The point to draw line to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ line : str
+ The line-to operation to point
+ '''
+ return '-- '+tikz_point(e.end,f)
+
+# --------------------------------------------------------------------
+def tikz_curve(e,f):
+ '''Output a curve-to operation
+
+ Parameters
+ ----------
+ e : curve operation (3 complex numbers)
+ The control points (2 of them) and the point to draw curve to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ curve : str
+ The curve-to operation to point
+ '''
+ return \
+ '.. controls '+tikz_point(e.control1,f) + \
+ ' and ' +tikz_point(e.control2,f) + \
+ ' ..' +tikz_point(e.end,f)
+
+# --------------------------------------------------------------------
+def tikz_close(e,f):
+ '''Ouput a close (or cycle) operation
+ '''
+ return '-- cycle'
+
+# ====================================================================
+def path_to_tikz(path,f='8.5f'):
+ '''Convert a svt.path.Path to a TikZ path
+
+ Parameters
+ ----------
+ path : svg.path.Path
+ Path to convert
+ f : str
+ floating point format to use
+
+ Returns
+ -------
+ code : list
+ List of Tikz path operations as strings
+ '''
+ from svg.path import Line, Move, Close, CubicBezier, Path
+
+ code = []
+ for e in path:
+ if isinstance(e, Move): code.append(tikz_move(e, f))
+ elif isinstance(e, Line): code.append(tikz_line(e, f))
+ elif isinstance(e, Close): code.append(tikz_close(e,f))
+ elif isinstance(e, CubicBezier): code.append(tikz_curve(e,f))
+ elif isinstance(e, Path): code.extend(path_to_tikz(e,f))
+ else:
+ print(f'Unknown type: {type(e)}',file=stderr)
+
+ return code
+
+# ====================================================================
+def doc_header(output=stdout):
+ '''Prinout put standalone document header
+ '''
+ print(r'''%
+\documentclass{standalone}
+\usepackage{tikz}
+\begin{document}%''',file=output)
+
+# --------------------------------------------------------------------
+def doc_footer(output=stdout):
+ '''Prinout put standalone document footer
+ '''
+ print(r'''%
+\end{document}''',file=output)
+
+# --------------------------------------------------------------------
+def path_to_pic(path,name,output,format):
+ '''Output a Tikz pic definition from the path
+
+ Parameters
+ ----------
+ path : Path
+ The path to convert
+ name : str
+ The name of the pic
+ output : File
+ Output file
+ format : str
+ Floating point format
+ '''
+ print(fr'''\tikzset{{%
+ {name}/.pic={{%
+ \path[pic actions]''',file=output,end='\n ')
+
+ code = path_to_tikz(path,format)
+ print('\n '.join(code),file=output)
+ print(' ;\n }',file=output)
+ print('}%',file=output)
+
+# ====================================================================
+
+# ====================================================================
+def doit(input='soldier_side.svg',
+ centre=True,
+ unit=True,
+ output=stdout,
+ standalone=False,
+ format='8.5f'):
+ svg = open_svg(input)
+ orig_bb = get_bb(svg)
+
+ if centre or unit:
+ svg = flush_left(svg)
+ if unit:
+ svg = scale_unit(svg)
+ else:
+ svg = scale_to_cm(svg)
+ if centre:
+ svg = shift_to_centre(svg)
+ else:
+ svg = flipy(svg)
+ new_bb = get_bb(svg)
+
+ paths = get_paths(svg)
+
+ if standalone:
+ doc_header(output)
+ print(f'% Original bounding box: ({orig_bb[0]},{orig_bb[1]}) ({orig_bb[2]},{orig_bb[3]})',
+ file=output)
+ print(f'% New bounding box: ({new_bb[0]},{new_bb[1]}) ({new_bb[2]},{new_bb[3]})',
+ file=output)
+ pics = []
+ for i, path in enumerate(paths):
+ name = f'pic_{i:03d}'
+ path_to_pic(path,name,output,format)
+ pics.append(name)
+
+ if standalone:
+ print(r'\begin{tikzpicture}%',file=output)
+ x = 0
+ y = 0
+ for i, name in enumerate(pics):
+ if x > 10:
+ x = 0
+ y += 2
+
+ print(fr' \pic[draw,fill=red] at ({x},{y}) {{{name}}};%',
+ file=output)
+ x += 2
+
+ print(r'\end{tikzpicture}%',file=output)
+ doc_footer(output)
+
+# ====================================================================
+def test(svgfile='soldier_side.svg',tikzfile=stdout,standalone=True):
+ with open(svgfile,'r') as input:
+ with open(tikzfile,'w') if isinstance(tikzfile,str) else tikzfile as output:
+ doit(input=input,output=output,standalone=standalone)
+
+
+# ====================================================================
+if __name__ == '__main__':
+ from argparse import ArgumentParser, FileType
+
+ ap = ArgumentParser(description='Convert SVG to unit Tikz picture')
+ ap.add_argument('input',type=FileType('r'),nargs='?',default='soldier_side.svg',
+ help='Input SVG file')
+ ap.add_argument('-o','--output',type=FileType('w'),default=None,
+ help='Output Tikz file')
+ ap.add_argument('-s','--standalone',action='store_true',default=True,
+ help='Write standalone document')
+ ap.add_argument('-p','--picture',action='store_false',dest='standalone',
+ help='Only write picture')
+ ap.add_argument('-f','--format',type=str,default='8.5f',
+ help='Format for coordinates')
+ ap.add_argument('-O','--original-size',dest='unit',action='store_false',
+ help='Do no scale paths to unit size')
+ ap.add_argument('-S','--unit-size',dest='unit',action='store_true',
+ help='Scale paths to unit size')
+ ap.add_argument('-Z','--no-centre',dest='centre',action='store_false',
+ help='Do not centre paths')
+ ap.add_argument('-C','--centre',dest='centre',action='store_true',
+ help='Centre paths')
+
+ args = ap.parse_args()
+
+ if args.output is None:
+ from pathlib import Path
+ inname = Path(args.input.name)
+ outname = inname.with_suffix('.tex')
+ args.output = open(outname,'w')
+
+
+ doit(input = args.input,
+ unit = args.unit,
+ centre = args.centre,
+ output = args.output,
+ standalone = args.standalone,
+ format = args.format)
+
+
+
+
+
+
+
diff --git a/macros/latex/contrib/wargame/source/wargame.dtx b/macros/latex/contrib/wargame/source/wargame.dtx
new file mode 100644
index 0000000000..a2e7d06a94
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/wargame.dtx
@@ -0,0 +1,2455 @@
+% \iffalse
+%<*driver>
+% This is the preamp used in various documents
+\documentclass{ltxdoc}
+%<symbols>\usepackage[noterrainpic]{wgdoc}
+%<!symbols>\usepackage{wgdoc}
+%</driver>
+%\fi
+%\iffalse
+%<*doc>
+% This is for the main documentation
+\usepackage{wgdoc}
+\input{testmap}
+\input{testchits}
+\usetikzlibrary{external}
+\tikzexternalize[prefix=cache/]
+\CodelineIndex
+\EnableCrossrefs
+\DisableCrossrefs
+\DoNotIndex{\a,\advance,\args,\bfseries,\breakforeach,\cc,\ccc,
+ \divide,\def,\h,\filldraw,\node,\path,\RequirePackage,\ProvidesPackage,
+ \Large,\large,\huge,\Huge,\normalsize,\tiny,
+ \long,\n,\mc,\o,\p,
+ \usetikzlibrary,\draw,\foreach,\fv,\tikzinputsegmentfirst,
+ \tikzinputsegmentsupporta,\tikzinputsegmentsupportb,
+ \tikzinputsegmentlast,\pgfmathparse,\pgfpoint,\edef,\pgfmathresult,
+ \relax,\ifx,\else,\fi,\definecolor,\tikz,\tikzset,\tikzstyle,
+ \maxdimen,\pgfseteorule,\message,\global,\clip,\let,\end,\begin,
+ \sffamily,\selectfont,\fontsize,\DeclareTextFontCommand,
+ \selectfont,\define@key,\pgf@x,\pgf@y,\xdef,\expandafter,\@ifundefined,
+ \pgfpointxy,\csname,\endcsname,\pgfpointadd,\fill,\@empty,\@ifnextchar,
+ \@undefined,\@undefinedb,\arrow,\b,\c,\color,\fontfamily,\fontseries,
+ \gdef,\i,\k,\m,\newcommand,\newcount,\newif,\newlength
+ \pgf@pathmaxx,\pgf@pathminx,\pgf@pathmaxy,\pgf@pathminy,
+ \pgf@picmaxx,\pgf@picminx,\pgf@picmaxy,\pgf@picminy,
+ \pgf@relevantforpicturesizefalse,\pgf@relevantforpicturesizetrue,
+ \pic,\r,\setkeys,\setlength,\show,\t,\temp,\the,
+ \tikzdeclarecoordinatesystem,\tmp@x,\tmp@y,\v,\x,\y}
+%% \OnlyDescription
+\def\PrintMacroName#1{}
+\def\PrintEnvName#1{}
+\title{The \textsf{wargame} package}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\maketitle
+\begin{abstract}
+ This package provides tools to typesetting manuals, board, and
+ counters for wargames using \LaTeX{}.
+
+ Licensed under
+ \href{http://creativecommons.org/licenses/by-sa/4.0}{Creative
+ Commons Attribution-ShareAlike International License, version 4}
+ \tikz[scale=.2,transform shape]{\pic{cc by sa};}.
+\end{abstract}
+\tableofcontents
+\wargamedbglvl=0
+\hexdbglvl=0
+\chitdbglvl=0
+\natoappdbglvl=0
+% To avoid: Package multicol Error: Error saving partial page.
+\setlength{\IndexMin}{100pt}
+\DocInput{wargame.dtx}
+\end{document}
+%</doc>
+%\fi
+%
+% \iffalse
+% ====================================================================
+%
+% Documentation
+%
+% ====================================================================
+% \fi
+%
+% \newif\ifShowSymbols\ShowSymbolsfalse
+% \newif\ifShowCompat\ShowCompatfalse
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Introduction
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Introduction}
+%
+% This package provides tools for typesetting classic, hex-based
+% wargames. The package allows an author to design a board, or map,
+% comprised of hex, using a relatively simple interface. Units are
+% typeset using a similar interface. Unit types are identified using
+% the NATO Joint Military Symbology \cite{app6c} standard.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Hexes
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Hex Boards}
+%
+% The package provides a number of facilities to set-up a board
+% comprised of hexagon fields (``hexes'').
+%
+% \subsection{Placing hexes}
+%
+% A hex can be added to the current \texttt{tikzpicture} using the
+% macro \cs{hex}. It takes up to 4 arguments
+%
+% \begin{MacroSyntax}{\hex}
+% \cs{hex}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% The \meta{key-value-pairs} specify the hex. Valid options are
+% \begin{description}
+% \item[\keyval{terrain}{\meta{terrain-keys}}] specifies the terrain
+% of the hex. More on in this in
+% \sectionname~\ref{sec:hex:terrain}.
+% \item[\keyval{ridges}{\meta{ridges-keys}}] specifies where ridges
+% are drawn in the hex. \sectionname~\ref{sec:hex:ridges}.
+% \item[\keyval{label}{\meta{label-keys}}] specifies the how to output
+% the hex label, if any. This is expanded upon in
+% \sectionname~\ref{sec:hex:label}.
+% \item[\keyval{town}{\meta{town-keys}}] specifies that a town (or
+% similar) is present in the hex. The various keys are described in
+% \sectionname~\ref{sec:hex:town}.
+% \item[\keyval{extra}{\meta{extra-keyx}} \textrm{and} \keyval{extra
+% clipped}{\meta{extra-keyx}}] allows the user to put custom
+% graphics in the hexes. See also \sectionname~\ref{sec:hex:extra}
+% for more.
+% \item any style key defined for \TikZ{} pictures.
+% \end{description}
+%
+% The \meta{location} argument specifies the coordinates, in the hex
+% coordinate system where to put the hex. More about the coordinate
+% system is given in \sectionname~\ref{sec:hex:cs}. Note, the numbers
+% starts from the lower--left corner.
+%
+% The elements are rendered in the following order
+% \begin{enumerate}
+% \item The terrain, clipped to the hex shape.
+% \item The hex, including circumference and fill
+% \item The ridges, if any
+% \item The label, if any
+% \item Extra graphics clipped to the hex
+% \item Town, if any
+% \item Extra graphics which may extend beyond the confines of the
+% hex.
+% \end{enumerate}
+%
+% \figurename~\ref{fig:hex:parts} illustrates some of the components
+% of a hex. The hexes are 2 unit lengths wide. Typically, the unit
+% length is one centimetre, which means the hexes are roughly
+% $2\,\text{cm}\times 1.86\,\text{cmm}$ --- or roughly $3/4"\times
+% 3/4"$ --- big. This allows the hexes to fit chits (see
+% Section~\ref{sec:chit}) of size $12\,\mathrm{mm}\times12\,\mathrm{mm}$
+% --- or roughly $1/2"\times1/2"$ --- nicely. If one wants larger
+% chits or hexes one should take care to scale both by a similar
+% amount.
+%
+% {\makeatletter\global\let\hexyy\hex@yy}
+% \tikzset{wg arrow/.style={red!50!black,thick,<-}}
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \hex[terrain={woods},label={text=A1},color=blue](r=0,c=0)
+% \draw[red]($(hex cs:e=N)-(0,.2)$)
+% ellipse [x radius=.8, y radius=.4] node(label){};
+% \draw[wg arrow] (label)--(1.3,1.2)
+% node[align=right,anchor=south]{\texttt{label=\{text=A1\}}};
+% \draw[wg arrow] (0,0)--(-2,-1)node[align=right,anchor=base east]{
+% \texttt{terrain=\{woods\}}};
+% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},}};
+% \pic[draw,transform shape]{wg/y axis={1.2, -1,1, {0},{-\hexyy,\hexyy}}};
+% \end{tikzpicture}
+% \caption{Hex parts. The bar on the bottom and to the right
+% indicate two units of length.}
+% \label{fig:hex:parts}
+% \end{figure}
+%
+% \subsection{Styling hexes}
+%
+% Typical \TikZ{} options can be passed to the \cs{hex} macro. For
+% example, if you want to draw the hex borders in red, simply pass
+% \spec{draw=red} in the \oarg{optional} arguments to
+% \cs{hex}. Individual parts of the hexes can be styled separately.
+% the default style used by \cs{hex} is \spec{tikz/hex/hex}. Users
+% can redefine this style to suit their needs. If one does not want
+% to change the default style, or pass the same argument to all
+% \cs{hex}s one can define the style \spec{tikz/every hex}. For example,
+% if one wants to auto label all hexes, one can do
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \begin{scope}[every hex/.style={label=auto}]
+% % Hexes
+% \end{scope}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Hex coordinate system}
+% \label{sec:hex:cs}
+%
+% The package defines a coordinate system based on hexes. The centre
+% of a hex is specified as \meta{column}-\meta{row} pairs, while
+% vertexes and mid-point on edges can be specified separately. The
+% syntax of the coordinates is
+%
+% \begin{Syntax}
+% (hex cs:row=\meta{hex-row},column=\meta{hex-column},vertex=\meta{vertex},edge=\meta{edge})
+% \end{Syntax}
+%
+% where \meta{vertex} and \meta{edge} are optional. The hex row and
+% column defaults both to 0 and can be decimal numbers. The
+% \spec{row}, \spec{column}, \spec{vertex}, and \spec{edge} keywords
+% may be shorted to \spec{r}, \spec{c}, \spec{v}, and \spec{e},
+% respectively. Possible vertexes and edges are listed in
+% \tablename~\ref{tab:hex:ve}.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}}
+% \begin{tikzpicture}
+% \hex(r=0,c=0)
+% \foreach \v in {E,NE,NW,W,SW,SE}{
+% \fill(hex cs:v=\v) circle(0.05);
+% \node[inner sep=2pt] (v\v) at ($1.6*(hex cs:v=\v)$){\spec{v=\v}};
+% \draw[<-](hex cs:v=\v)--(v\v); }
+% \foreach \e in {NE,N,NW,SW,S,SE}{
+% \fill(hex cs:e=\e) circle(0.05);
+% \node[inner sep=2pt] (e\e) at ($1.6*(hex cs:e=\e)$) {\spec{e=\e}};
+% \draw[<-](hex cs:e=\e) -- (e\e);}
+% \end{tikzpicture}
+% &
+% \begin{tabular}{|ccr|ccr|}
+% \hline
+% \rowcolor{headbg}
+% \multicolumn{2}{c}{\color{headfg}\spec{vertex=}}
+% & {\color{headfg}\textbf{Angle}}
+% & \multicolumn{2}{c}{\color{headfg}\spec{edge=}}
+% & {\color{headfg}\textbf{Angle}}
+% \\
+% \hline
+% \rowcolor{white}
+% \spec{east} & \spec{E} & $ 0^{\circ}$ &
+% \spec{north east} & \spec{NE} & $ 30^{\circ}$\\
+% \spec{north east} & \spec{NE} & $ 60^{\circ}$ &
+% \spec{north} & \spec{N} & $ 90^{\circ}$\\
+% \spec{north west} & \spec{NW} & $120^{\circ}$ &
+% \spec{north west} & \spec{NW} & $150^{\circ}$\\
+% \spec{west} & \spec{W} & $180^{\circ}$ &
+% \spec{south west} & \spec{SW} & $210^{\circ}$\\
+% \spec{south west} & \spec{SW} & $240^{\circ}$ &
+% \spec{south} & \spec{S} & $270^{\circ}$\\
+% \spec{south east} & \spec{SE} & $300^{\circ}$ &
+% \spec{south east} & \spec{SE} & $330^{\circ}$\\
+% \hline
+% \end{tabular}
+% \end{tabular}
+% \caption{Vertex and edge positions}
+% \label{tab:hex:ve}
+% \end{table}
+%
+% In \figurename~\ref{fig:hex:cs} is an example of a picture drawn in
+% this coordinate system.
+%
+% \begin{figure}[htbp]
+% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}}
+% \begin{tikzpicture}[]
+% \hex[color=lightgray](r=0,c=0)
+% \hex[color=lightgray](r=0,c=1)
+% \hex[color=lightgray](r=1,c=0)
+% \hex[color=lightgray](r=1,c=1)
+% \draw[blue!50!black] (hex cs:r=0,c=0) -- (hex cs:r=1,c=1);
+% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) --
+% (hex cs:r=1,c=1,edge=north west);
+% \fill (hex cs:r=0,c=0) circle(.1)
+% node[color=gray,anchor=north] {\spec{(r=0,c=0)}};
+% \fill (hex cs:r=1,c=1) circle(.1)
+% node[color=gray,anchor=west] {\spec{(r=1,c=1)}};
+% \fill (hex cs:r=0,c=0,v=east) circle(.1)
+% node[color=gray,anchor=north west]{\spec{(r=0,c=0,v=E)}};
+% \fill (hex cs:r=1,c=1,e=north west) circle(.1)
+% node[color=gray,anchor=south]{
+% \spec{(r=1,c=1,e=NW)}};
+% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1)
+% node[anchor=south,inner sep=0]{(0.3,0.3)};
+% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1)
+% node[anchor=south,inner sep=0]{(1.3,0.3)};
+% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1)
+% node[anchor=south,inner sep=0]{(0.3,1.3)};
+% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1)
+% node[anchor=south,inner sep=0]{(1.3,1.3)};
+% \end{tikzpicture}
+% &
+% Hexes and lines drawn with
+% \begin{verbatim}
+% \hex(0,0)\hex(0,1)\hex(1,0)\hex(1,1)
+% \draw[blue!50!black] (hex cs:r=0,c=0) --
+% (hex cs:r=1,c=1);
+% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) --
+% (hex cs:r=1,c=1,edge=NW);
+% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1);
+% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1);
+% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1);
+% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1);
+% \end{verbatim}
+% \end{tabular}
+% \caption{Hex coordinate system}
+% \label{fig:hex:cs}
+% \end{figure}
+%
+%
+% \textbf{Important}: When the horizontal distance to the centre of a
+% hex becomes less than $-\cos60^{\circ}$ or larger than
+% $b-\cos60^{\circ}$ we effectively have a new hex column, and the
+% coordinates are shifted upward or downward for smaller or larger
+% numbers. Figure~\ref{fig:hex:coord:nb} illustrates. this. This can
+% make it a little hard to specify coordinates relative to a hex
+% centre. Alternatively one may use vertex or edge specifciations
+% together with a relative offset in those directions.
+% \
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \begin{scope}[scale=2,every node/.style={inner sep=0}]
+% \hex
+%
+% \begin{scope}[red,fill]
+% \draw[anchor=south east](hex cs:c=-0.66,r=-0.67)circle(.01)node{(-2/3,-2/3)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=-0.33)circle(.01)node{(-2/3,-1/3)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=0)circle(.01)node{(-2/3,0)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=0.33)circle(.01)node{(-2/3,1/3)};
+% \draw[anchor=north](hex cs:c=-0.33,r=-0.67)circle(.01)node{(-1/3,-2/3)};
+% \draw[anchor=north](hex cs:c=-0.33,r=-0.33)circle(.01)node{(-1/3,-1/3)};
+% \draw[anchor=south](hex cs:c=-0.33,r=0.33)circle(.01)node{(-1/3,1/3)};
+% \draw[anchor=south](hex cs:c=-0.33,r=0.67)circle(.01)node{(-1/3,2/3)};
+% \draw[anchor=south](hex cs:c=0.33,r=-0.67)circle(.01)node{(1/3,-2/3)};
+% \draw[anchor=south](hex cs:c=0.33,r=-0.33)circle(.01)node{(1/3,-1/3)};
+% \draw[anchor=north](hex cs:c=0.33,r=0.33)circle(.01)node{(1/3,1/3)};
+% \draw[anchor=north](hex cs:c=0.33,r=0.67)circle(.01)node{(1/3,2/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=-0.33)circle(.01)node{(2/3,-1/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0)circle(.01)node{(2/3,0)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0.33)circle(.01)node{(2/3,1/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0.67)circle(.01)node{(2/3,2/3)};
+% \end{scope}
+%
+% \hex(c=2)
+% \begin{scope}[blue,fill]
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=0.5)circle(.01)node{NE by 1/2};
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.0)circle(.01)node{NE by 1};
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.5)circle(.01)node{NE by 3/2};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=0.5)circle(.01)node{NW by 1/2};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.0)circle(.01)node{NW by 1};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.5)circle(.01)node{NW by 3/2};
+% \draw[anchor=north](hex cs:c=2,v=W,o=0.5)circle(.01)node{W by 1/2};
+% \draw[anchor=south](hex cs:c=2,v=W,o=1.0)circle(.01)node{W by 1};
+% \draw[anchor=north](hex cs:c=2,v=W,o=1.5)circle(.01)node{W by 3/2};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=0.5)circle(.01)node{SW by 1/2};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.0)circle(.01)node{SW by 1};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.5)circle(.01)node{SW by 3/2};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=0.5)circle(.01)node{SE by 1/2};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.0)circle(.01)node{SE by 1};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.5)circle(.01)node{SE by 3/2};
+% \draw[anchor=north](hex cs:c=2,v=E,o=0.5)circle(.01)node{E by 1/2};
+% \draw[anchor=south](hex cs:c=2,v=E,o=1.0)circle(.01)node{E by 1};
+% \draw[anchor=north](hex cs:c=2,v=E,o=1.5)circle(.01)node{E by 3/2};
+% \end{scope}
+% \end{scope}
+% \end{tikzpicture}
+% \caption{Relative coordinates}
+% \label{fig:hex:coords:nb}
+% \end{figure}
+% \subsection{Terrains}
+% \label{sec:hex:terrain}
+%
+% Terrains are rendered using tile images or \TikZ{}
+% \texttt{pic}tures. The available terrains are shown in
+% \tablename{}s~\ref{tab:hex:terrain:image}
+% and~\ref{tab:hex:terrain:pic}. Users can provide their own tile
+% images and select those via \texttt{terrain=\{image=\meta{image}\}}
+% or defined \TikZ{} \texttt{pic}tures and select those via
+% \texttt{terrain=\{pic=\meta{pic-name}\}}. In all cases, the terrain
+% graphics is clipped to the hex.
+%
+% The terrain of a hex is selected via the multi-valued key
+% \spec{terrain}. Sub-keys of this key are
+%
+% \begin{description}
+% \item[\spec{image=}\meta{graphics-file}] Specifies terrain tile
+% image \meta{graphics-file}.
+% \item[\spec{pic=}\meta{picture-key}] Specifies terrain tile \TikZ{}
+% \spec{pic}ture.
+% \item[\spec{code=}\meta{tikz-code}] Any valid \TikZ{} code
+% \item[\spec{clip=}\meta{path(s)}] \TikZ{} path specification to clip
+% the terrain within the hex.
+% \end{description}
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|ll|m{2cm}|ll|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}}\\
+% \hline
+% &&&&&\\[-1ex]
+% \tikz{\hex[](r=0,c=0) }
+% & Clear
+% & \texttt{}
+% & \tikz{\hex[terrain={image=beach}](r=0,c=0) }
+% & Beach
+% & \texttt{\{image=beach\}}\\
+% \tikz{\hex[terrain={image=light_woods}](r=0,c=0) }
+% & Light woods
+% & \texttt{\{image=light\_woods\}}
+% & \tikz{\hex[terrain={image=woods}](r=0,c=0)}
+% & Woods
+% & \texttt{\{image=woods\}}\\
+% \tikz{\hex[terrain={image=rough}](r=0,c=0) }
+% & Rough
+% & \texttt{\{image=rough\}}
+% & \tikz{\hex[terrain={image=swamp}](r=0,c=0) }
+% & Swamp
+% & \texttt{\{image=swamp\}}\\
+% \tikz{\hex[terrain={image=mountains}](r=0,c=0) }
+% & Mountains
+% & \texttt{\{image=mountains\}}
+% & \tikz{\hex[fill=blue!40!white](r=0,c=0) }
+% & Sea
+% & \texttt{\{image=sea\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrains specified via tile images}
+% \label{tab:hex:terrain:image}
+% \end{table}
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|l|l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{pic=\meta{image}\}}}\\
+% \hline
+% &&\\[-1ex]
+% \tikz{\hex[terrain={pic=hex/terrain/mountain,line width=3pt}](r=0,c=0) }
+% & Mountains
+% & \texttt{\{pic=hex/terrain/mountain,line width=3pt\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrains specified via \TikZ{} \spec{pic}tures}
+% \label{tab:hex:terrain:pic}
+% \end{table}
+%
+% The terrain can be clipped by the sub-key \spec{clip}. This can be
+% useful if the game specifies movement costs in terms of hex-edge
+% crossing, for example \emph{First Blood}~\cite{fb}. In that case, a
+% hex may be, for example, a jungle hex, but some edges a clear. Thus
+% movements across such an edge would count as moving into clear
+% territory while moving over other edges will count as moving into a
+% jungle. This is, of course, not how most games count movement
+% costs, but this package nonetheless facilitates such rules.
+% \tablename~\ref{tab:hex:terrain:clip} shows a few examples of
+% predefined clippings of terrain.
+%
+% Users can define \TikZ{} \spec{pic}tures that specify clipping paths
+% as needed. For example, one could add clipping to the terrain to
+% ensure that other graphics in the hex stands out.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}m{.3\linewidth}|m{2cm}m{.3\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\texttt{terrain=\{clip=,...\}}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\texttt{terrain=\{clip=,...\}}}\\
+% \hline
+% &&&\\
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE\}}
+% & \tikz{\hex[terrain={woods,
+% clip={
+% hex/large sextant=NE,
+% hex/large sextant=N}}](r=0,c=0) }
+% & \spec{\{hex/large sextant=NE,hex/large sextant=N\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=N}}](r=0,c=0) }
+% & \spec{\{hex/sextant=N\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NW\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=SW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=SW\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=S}}](r=0,c=0) }
+% & \spec{\{hex/sextant=S\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=SE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=SE\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=C\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrain clipped via \spec{clip} sub-key}
+% \label{tab:hex:terrain:clip}
+% \end{table}
+%
+% \subsubsection{Styling terrains}
+%
+% Terrains use the key \spec{tikz/hex/terrain} to render the
+% terrains. This is mainly useful for terrains made from \TikZ{}
+% \spec{pic}tures.
+%
+% \subsection{Ridges}
+% \label{sec:hex:ridges}
+%
+% Ridges, or hill or mountain slopes, can be added to a hex via the
+% keyword \spec{ridges}. The keyword takes a list of hex edges and
+% generates symbology for the ridge on the chosen edges. Note that
+% the edges does not have to be continuous, as illustrated in the
+% bottom right of \tablename~\ref{tab:hex:ridges}, nor in any
+% particular order. The edges are specified as compass direction
+%
+% \begin{Syntax}
+% north east, north, north west, south west, south, south east.\\
+% NE, N, NW, SW, S, SE
+% \end{Syntax}
+%
+% \tablename~\ref{tab:hex:ridges} shows some examples.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|c|m{2cm}|c|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{ridges=}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{ridges=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[ridges=NE]}
+% & \spec{NE}
+% & \tikz{\hex[ridges={NE,N}]}
+% & \spec{NE,N}\\
+% \tikz{\hex[ridges=N]}
+% & \spec{N}
+% & \tikz{\hex[ridges={NE,N,NW}]}
+% & \spec{NE,N,NW}\\
+% \tikz{\hex[ridges=NW]}
+% & \spec{NW}
+% & \tikz{\hex[ridges={NE,N,NW,SW}]}
+% & \spec{NE,N,NW,SW}\\
+% \tikz{\hex[ridges=SW]}
+% & \spec{SW}
+% & \tikz{\hex[ridges={NE,N,NW,SW,S,line width=3pt}]}
+% & \spec{NE,N,NW,SW,S,line width=3pt}\\
+% \tikz{\hex[ridges=S]}
+% & \spec{S}
+% & \tikz{\hex[ridges={NE,N,NW,SW,S,SE,color=brown!70!black}]}
+% & \spec{NE,N,NW,SW,S,SE,color=brown!70!black}\\
+% \tikz{\hex[ridges=SE]}
+% & \spec{SE}
+% & \tikz{\hex[ridges={N,S,NW,SE},terrain={rough}]}
+% & \spec{N,S,NW,SE}\\
+% \hline
+% \end{tabular}
+% \caption{Ridges}
+% \label{tab:hex:ridges}
+% \end{table}
+%
+% \subsubsection{Styling ridges}
+%
+% Every ridge is drawn with the style \spec{tikz/hex/ridges}. Users
+% can customise this style. The default is to draw thin black wave
+% lines (\TikZ{} decoration \spec{waves}). The default style also
+% takes care to auto scale line widths.
+%
+% \subsection{Labels}
+% \label{sec:hex:label}
+%
+% Labels can be placed on the hexes via the keyword \spec{label}. The
+% label can either be auto-generated or given explicitly.
+% \tablename~\ref{tab:hex:label} shows the various choices.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|l|c|m{6cm}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Column/Row}}
+% & {\color{headfg}\spec{label=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[label=none](r=0,c=0) }
+% & No label
+% & n/a
+% & \spec{none}\\
+% \tikz{\hex[label={text=B10}](r=0,c=0) }
+% & User specified
+% & n/a
+% & \spec{text=B10}\\
+% \tikz{\hex[label={color=blue,text=A1}](r=0,c=0) }
+% & User specified
+% & n/a
+% & \spec{\{color=blue,text=A1\}}\\
+% \tikz{\hex[label=auto](r=3,c=9) }
+% & Two-digit, zero padded numbers
+% & 9/3
+% & \spec{auto}\\
+% \tikz{\hex[label={auto=alpha column,font=\noexpand\rmfamily}](r=3,c=2)}
+% & Column letter, number row
+% & 2/3
+% & \spec{\{auto=alpha column,font=\cs{noexpand}\cs{rmfamily}\}}
+% \textsuperscript{$\dag$}\\
+% \tikz{\hex[label={auto=alpha 2 column,anchor=north east}](r=24,c=6) }
+% & Two letter column, two digit row
+% & 6/24
+% & \spec{\{auto=alpha 2 column,anchor=north east\}}\\
+% \hline
+% \end{tabular}
+% \caption{Labels\newline
+% \textsuperscript{$\dag$}When specifying macros as key values in
+% the options, for example the value \cs{rmfamily} for the key
+% \spec{font} above, we have to put a \cs{noexpand} in front if the
+% macro. This is to prevent early expansion of the macro, which
+% would cause errors. A minor nuisance.}
+% \label{tab:hex:label}
+% \end{table}
+%
+% The option \spec{auto=inv y x plus 1} will label the rows
+% inversely, and add one to the column number. This requires that the
+% key \spec{tikz/max hex row} has been set to the largest row number
+% used.
+%
+% In addition to the sub-keys \spec{none}, \spec{auto}, and
+% \spec{text}, one can also specify the following keys
+%
+% \begin{description}
+% \item[\keyval{place}{\meta{coordinates}}] specifies the Location of
+% label within the hex. The anchor point of the text will be placed
+% at this point.
+% \item[\oarg[options]] at the start of the option (but inside braces
+% \spec{\{\textellipsis\}}) can be used to give additional style
+% options.
+% \end{description}
+%
+% \subsubsection{Styling labels}
+%
+% All labels use the style \spec{tikz/hex/label}. By default, this
+% places the label at the top of the hex, and renders the text as gray
+% script sized text. Users can customise this style. If a user does
+% not want to change the default style, or want to pass the same
+% option to all labels, then one can set the key \spec{tikz/every
+% label} to those options.
+%
+%
+% \subsection{Towns}
+% \label{sec:hex:town}
+%
+% Towns in hexes are made via the key \spec{town}. This key takes
+% several sub-keys, as illustrated in \tablename~\ref{tab:hex:town}
+%
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}l|m{2cm}l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{town=}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{town=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[town](r=0,c=0) }
+% & \spec{}
+% & \tikz{\hex[town={name=Copenhagen}](r=0,c=0) }
+% & \spec{\{name=Copenhagen\}}\\
+% \tikz{\hex[town={pic=hex/town/city}](r=0,c=0) }
+% & \spec{\{pic=hex/town/city\}}
+% & \tikz{\hex[town={red,pic=hex/town/city}](r=0,c=0) }
+% & \spec{\{red,pic=hex/town/city\}}\\
+% \tikz{\hex[town={fill=red}](r=0,c=0) }
+% & \spec{\{fill=red\}}
+% & \tikz{\hex[town={pic=hex/town/city,name=London}](r=0,c=0) }
+% & \spec{\{name=London\}}\\
+% \tikz{\hex[town={color=red,name=Paris}](r=0,c=0) }
+% & \spec{\{red,name=Paris\}}
+% &\tikz{\hex[town={above=0.8,name=Berlin}](r=0,c=0) }
+% & \spec{\{above=0.8,name=Berlin\}}\\
+% \tikz{\hex[town={place={(.2,.2)}}](r=0,c=0) }
+% & \spec{\{place=\{(.2,.2)\}\}}
+% &\tikz{\hex[town={font=\noexpand\itshape,name=Amsterdam}](r=0,c=0) }
+% & \spec{\{font=\cs{noexpand}\cs{itshape},name=Amsterdam\}}
+% \textsuperscript{$\dag$}\\
+% \hline
+% \end{tabular}
+% \caption{Towns\newline
+% \textsuperscript{$\dag$}When specifying macros as key values in
+% the options, for example the value \cs{rmfamily} for the key
+% \spec{font} above, we have to put a \cs{noexpand} in front if the
+% macro. This is to prevent early expansion of the macro, which
+% would cause errors. A minor nuisance.}
+% \label{tab:hex:town}
+% \end{table}
+%
+% The sub-keys available for the \spec{town} key are
+%
+% \begin{description}
+% \item[\keyval{pic}{\meta{town-pic}}] The name of a \TikZ{}
+% \spec{pic}ture. Currently defined are \spec{hex/town/town} and
+% \spec{hex/town/city}. Users can provide alternate definitions or new types
+% by defining \TikZ{} \spec{pic}tures.
+% \item[\keyval{place}{\meta{coordinates}}] Location of label within
+% the hex. The anchor point of the text will be placed at this
+% point.
+% \item[\keyval{name}{\meta{name}}] Name of town
+% \end{description}
+%
+% \subsubsection{Styling towns}
+%
+% Towns uses two styles: \spec{tikz/hex/town} for the town graphics,
+% and \spec{tikz/hex/town name} for the name of the town. In addition,
+% a user may set the key \spec{tikz/every hex town} to contain options
+% to be passed to all towns.
+%
+% \subsection{Extra graphics for hexes}
+% \label{sec:hex:extra}
+%
+% Additional graphics for hexes can be added by the two keys
+% \spec{extra} and \spec{extra clipped}. The difference between the
+% two are that graphics specified by \spec{extra clipped} are clipped
+% (restricted) to the hex, while graphics given by \spec{extra} may
+% extend beyond the hex. Both keys accept a comma separated list of
+% arguments, where each element has the syntax
+%
+% \begin{Syntax}
+% \oarg{options}\parg{placement}\meta{picture}
+% \end{Syntax}
+%
+% Both \meta{options} and \meta{placement} are optional, and specifies
+% keys to draw \meta{picture} with and the relative location in the
+% hex, respectively. The required argument \meta{picture} must name a
+% \TikZ{} \spec{pic}ture, for example \spec{hex/fortress}. This can
+% be useful for marking hexes on the board. For example to mark a
+% set-up hex for one faction of the game.
+%
+% One could for example define the following pictures to define set-up
+% points for a Sovjet and German faction
+%
+% \tikzset{
+% setup/sovjet/.pic={
+% \path[fill=red,draw=yellow,pic actions]
+% ( 90:.4)--(126:.15)--
+% (162:.4)--(198:.15)--
+% (234:.4)--(270:.15)--
+% (306:.4)--(342:.15)--
+% ( 18:.4)--( 54:.15)--cycle;},
+% setup/german/.pic={
+% \path[fill,pic actions]
+% (-.4, -.1) rectangle(.4,.1)
+% (-.1, -.4) rectangle(.1,.4);
+% \path[draw,pic actions]
+% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4)
+% (-.4, .2) -- (-.2, .2) -- (-.2, .4)
+% ( .4, .2) -- ( .2, .2) -- ( .2, .4)
+% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);},
+% foo/large/.pic={
+% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);},
+% }
+% \begin{verbatim}
+% setup/sovjet/.pic={
+% \path[fill=red,draw=yellow,pic actions]
+% ( 90:.4)--(126:.15)--
+% (162:.4)--(198:.15)--
+% (234:.4)--(270:.15)--
+% (306:.4)--(342:.15)--
+% ( 18:.4)--( 54:.15)--cycle;},
+% setup/german/.pic={
+% \path[fill,pic actions]
+% (-.4, -.1) rectangle(.4,.1)
+% (-.1, -.4) rectangle(.1,.4);
+% \path[draw,pic actions]
+% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4)
+% (-.4, .2) -- (-.2, .2) -- (-.2, .4)
+% ( .4, .2) -- ( .2, .2) -- ( .2, .4)
+% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);}
+% foo/large/.pic={
+% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);},
+% }
+% \end{verbatim}
+%
+% We can place extra graphics in hexes as shown in
+% \tablename~\ref{tab:hex:extra}.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{extra=}}\\
+% \hline
+% &\\[-1ex]
+% \tikz{\hex[extra=hex/fortress](r=0,c=0) }
+% & \spec{hex/fortress}\\
+% \tikz{\hex[extra=setup/sovjet](r=0,c=0) }
+% & \spec{setup/sovjet}\\
+% \tikz{\hex[extra=setup/german](r=0,c=0) }
+% & \spec{setup/german}\\
+% \tikz{\hex[extra={setup/german,hex/fortress}](r=0,c=0) }
+% & \spec{\{setup/german,hex/fortress\}}\textsuperscript{$\dag$}\\
+% \tikz{\hex[extra={[{line width=2pt,color=brown}]hex/fortress 2}](r=0,c=0) }
+% & \spec{\{[\{line width=2pt,brown\}]
+% fortress 2\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra={[shift={(.2,.2)}]setup/sovjet}](r=0,c=0) }
+% & \spec{\{[shift=\{(.2,.2)\}]setup/sovjet\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra={[{shift={(.2,.2)},scale=.5,color=gray}]setup/german}](r=0,c=0) }
+% & \spec{\{[\{shift=\{(.2,.2)\},scale=.5,color=gray\}]
+% setup/german\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra=foo/large]} & \spec{foo/large}\\
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{extra clipped=}}\\
+% \hline
+% &\\[-1ex]
+% \iftrue
+% \tikz{\hex[extra clipped=foo/large]} & \spec{foo/large}\\
+% \fi
+% \hline
+% \end{tabular}
+% \caption{Hex extra graphics. Note that in the last line we use
+% the graphics \spec{foo/large} with \spec{extra clipped} (compare
+% to line just above) to restrict the graphics to the hex.\newline%
+% \textsuperscript{$\dag$}When specifying more than one item, the
+% list must be enclosed in braces
+% (\spec{\{\textellipsis\}})\newline%
+% \textsuperscript{$\ddag$}When an item in the list of \spec{extra}
+% contains a comma (\spec{,}), for example in a list of graphics
+% options, then we need to enclose the inner list \emph{and} the
+% whole list in braces (\spec{\{\textellipsis\}}) to protect against
+% unwanted expansion.}
+% \label{tab:hex:extra}
+% \end{table}
+%
+% To finish off this part on hexes and what we can do with those, we
+% generate a map in \figurename~\ref{fig:hex:placing}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.3\linewidth}m{.68\linewidth}}
+% \begin{tikzpicture}[scale=.8]
+% \hex[town={pic=hex/town/city,name=Berlin}](r=0,c=0)
+% \hex[] (r=0,c=1)
+% \hex[] (r=0,c=2)
+% \hex[terrain={swamp},label=auto] (r=0,c=3)
+% \hex[] (r=1,c=0)
+% \hex[terrain={light woods}] (r=1,c=1)
+% \hex[terrain={woods}] (r=1,c=2)
+% \hex[terrain={swamp}] (r=1,c=3)
+% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0)
+% \hex[extra=hex/fortress] (r=2,c=1)
+% \hex[terrain={rough}] (r=2,c=2)
+% \hex[] (r=2,c=3)
+% \hex[terrain={mountains}] (r=3,c=0)
+% \hex[terrain={mountains}] (r=3,c=1)
+% \hex[terrain={mountains}] (r=3,c=2)
+% \hex[] (r=3,c=3)
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \hex[town={pic=hex/town/city,name=Berlin}] (r=0,c=0)
+% \hex[] (r=0,c=1)
+% \hex[] (r=0,c=2)
+% \hex[terrain={swamp},label=auto] (r=0,c=3)
+% \hex[] (r=1,c=0)
+% \hex[terrain={light woods}] (r=1,c=1)
+% \hex[terrain={woods}] (r=1,c=2)
+% \hex[terrain={swamp}] (r=1,c=3)
+% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0)
+% \hex[extra=hex/fortress] (r=2,c=1)
+% \hex[terrain={rough}] (r=2,c=2)
+% \hex[] (r=2,c=3)
+% \hex[terrain={mountains}] (r=3,c=0)
+% \hex[terrain={mountains}] (r=3,c=1)
+% \hex[terrain={mountains}] (r=3,c=2)
+% \hex[] (r=3,c=3)
+% \end{verbatim}
+% \end{tabular}
+% \caption{Placing hexes}
+% \label{fig:hex:placing}
+% \end{figure}
+%
+% \subsection{Rivers, borders, and roads}
+%
+% Rivers and borders follow the hex sides and are added to the current
+% \spec{tikkzpicture} using \cs{river} and \cs{border} macros
+% respectively. They are specified as regular \TikZ{} paths. It is
+% useful to utilise the hex coordinate system for this.
+%
+% \begin{MacroSyntax}{\river,\border}
+% \cs{river}\oarg{options} \meta{path};\\
+% \cs{border}\oarg{options} \meta{path};
+% \end{MacroSyntax}
+%
+% Rivers are essentially borders, but are randomized to giver a more
+% aesthetically pleasing output.
+%
+% Roads and railroads typically go from hex--center to hex--center,
+% and are added using the macro \cs{road}. The road or railroad is
+% specified via a regular \TikZ{} path.
+%
+% \begin{MacroSyntax}{\addriver}
+% \cs{road}\oarg{options} \meta{path};\\
+% \cs{railroad}\oarg{options} \meta{path};
+% \end{MacroSyntax}
+%
+% Towns and cities conveniently serve as places to split up a road at.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}
+% \testmap
+% \end{tikzpicture}
+% \caption{Adding rivers, boarders, and roads}
+% \end{figure}
+%
+% \subsection{Board clipping and frame}
+%
+% In the river, border, and road example above, the roads extend beyond
+% the hexes, which does not look very nice. One way to deal with this,
+% is to draw a clipping box around the hexes
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.\linewidth}m{.\linewidth}}
+% \begin{tikzpicture}
+% \draw[clip](-.5,-.5) rectangle (5,5);
+% \testmap
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \draw[clip](-.5,-.5) rectangle (5,5);
+% \testmap
+% \end{verbatim}
+% \end{tabular}
+% \caption{Clipping for a manual using a \TikZ{}
+% \cs{draw}\spec{[clip]} command.}
+% \label{fig:hex:boxclip}
+% \end{figure}
+%
+% This technique works fine for examples in a manual, it has a
+% somewhat displeasing effect for a full board. The package therefor
+% defines the macro \cs{boardclip} which clips the graphics
+% according to the defined hexes.
+%
+% \begin{MacroSyntax}{\boardclip}
+% \cs{boardclip}\parg{lower-left}\parg{upper-right}\marg{options}
+% \end{MacroSyntax}
+%
+% A clipping path of that spans from the hex at \meta{lower-lest} to
+% \meta{upper-right}. Note, that both of these arguments should only
+% specify the column and row keys. If \meta{options} is non-empty,
+% then the clipping path is drawn with those options.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.4\linewidth}m{.4\linewidth}}
+% \begin{tikzpicture}
+% \begin{scope}
+% \boardclip(c=0,r=0)(c=3,r=3){}
+% \testmap
+% \end{scope}
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \begin{scope}
+% \boardclip(c=0,r=0)(c=3,r=3){}
+% \testmap
+% \end{scope}
+% \end{verbatim}
+% \end{tabular}
+% \caption{Snug--fit clipping of board using the macro \cs{boardclip}}
+% \label{fig:hex:clip}
+% \end{figure}
+%
+% This is particularly useful together with the \cs{boardframe} macro.
+% This macro will put a frame around the board, optionally with a
+% margin.
+%
+% \begin{MacroSyntax}{\boardframe}
+% \cs{boardframe}\oarg{margin}\parg{lower-left}{upper-right}
+% \end{MacroSyntax}
+%
+% where \meta{lower-left} and \meta{upper-right} are as for
+% \cs{boardclip}. The \meta{margin} must be a number, and specifies an
+% optional margin around the hexes, The argument \meta{options}
+% specifies how the frame is drawn. The idea is to first draw the
+% frame, then the clipping shape, and then the hexes. One should take
+% care to use the \meta{options} argument to \cs{boardclip} to specify
+% a default background color. The frame is drawn with the style
+% \spec{hex/board frame}
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{4.\linewidth}m{4.\linewidth}}
+% \begin{tikzpicture}[hex/border/.append style={color=red},
+% hex/board frame/.style={fill=Tan}]
+% \begin{scope}[every hex/.style={label=auto}]
+% \boardframe[0.5](c=0,r=0)(c=3,r=3){0.5}
+% \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+% \testmap{}
+% \end{scope}
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \begin{scope}[every hex/.style={label=auto}]
+% \boardframe[0.5](c=0,r=0)(c=3,r=3)
+% \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+% \testmap{}
+% \end{scope}
+% \end{verbatim}
+% \end{tabular}
+% \caption{Combining a frame and clipping}
+% \label{fig:hex:frame}
+% \end{figure}
+%
+% The \cs{boardframe} macro prints the position of the rectangle to
+% the log output, if one needs to do some more stuff around the board.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Chits
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \cleardoublepage
+% \section{Chits}
+%
+% Chits, or playing counters\footnote{Since \TeX{} has the concept of
+% counters as in `\cs{count}' and \LaTeX{}'s `\cs{newcounter}', we
+% choose the name `chit' for playing pieces instead.}, can be made
+% with the macro \cs{chit}. The syntax for rendering a chit is
+%
+% \begin{MacroSyntax}{\chit}
+% \cs{chit}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% \figurename~\ref{fig:chit:overview} shows an example of a chit.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \firstchit
+% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},{-.6,.6}}};
+% \pic[draw,transform shape]{wg/y axis={1.2,-1,1, {0},{-.6,.6}}};
+% \draw[wg arrow] (-.2,-.4)--(-0.9,-.6)
+% node[anchor=east]{\spec{factors=\{chit/2 factors=\{4,8\}\}}};
+% \draw[wg arrow] (-.5,.2)--(-1.1,.6)
+% node[anchor=east]{\spec{left=\{chit/identifier=\{1\}\}}};
+% \draw[wg arrow] (.5,.2)--(.7,1.2)
+% node[anchor=south west]{\spec{right=\{chit/identifier=\{2\}\}}};
+% \draw[wg arrow] (-.2,.4)--(-1,1)
+% node[anchor=east]{\spec{symbol=\{\meta{nato app 6(c) spec}\}}};
+% \end{tikzpicture}
+% \caption{An example of a chit. The lines below and to the right
+% shows two unit lengths. Other global options used are
+% \spec{color=white} to set the foreground colour, \spec{fill=blue}
+% for the background, and \spec{text=yellow} to set the font colour
+% to yellow. The \spec{symbol} key also contains
+% \spec{frame=\{fill=yellow!50!black} to set the frame fill colour,
+% and \spec{ultra thick} to set the line width of the NATO App6(C)
+% symbol. Note that the line width is automatically scaled.}
+% \label{fig:chit:overview}
+% \end{figure}
+%
+%
+% The example in \figurename~\ref{fig:chit:overview} shows an infantry
+% mountaineer army unit with attack factor 4, and movement factor 8.
+% The NATO App6(c) symbol is given in terms of keywords for the
+% \cs{natoapp} macro (see \sectionname~\ref{sec:nateoapp6c}). The
+% other parts of the chit (\spec{factors}, \spec{left}, \spec{right},
+% and \spec{below}) are rendered onto the chit via \TikZ{}
+% \spec{pic}tures. This allows for a great deal of flexibility in
+% generating chits. For example, above we use the \spec{pic}tures
+% \spec{chit/identifier} and \spec{chit/2 factors} to render the left-
+% and right-hand identifiers, and the factors, respectively.
+%
+% Full frame chits --- that is chits which are not typically
+% designating units or faction specific chits, e.g., a turn marker ---
+% can be made by using the key \spec{full}. In that case, all other
+% keys (\spec{symbol}, \spec{factors}, \spec{left}, \spec{right},
+% and \spec{below}) are ignored. \figurename~\ref{fig:chit:full} shows
+% such an example.
+%
+% \begin{figure}[tbp]
+% \centering
+% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}}
+% \begin{tikzpicture}[scale=2]
+% \turnchit
+% \end{tikzpicture}
+% &
+% chit made with
+% \begin{verbatim}
+% \tikzset{
+% wg/big text/.pic={
+% \node[font=\sffamily\fontsize{18}{0}%
+% \selectfont]{#1};}}
+% \tikz{
+% \chit[full={wg/big text={Turn}},
+% black,fill=yellow!20!white](0,0)}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{tabular}
+% \caption{An example of a full-frame chit. }
+% \label{fig:chit:full}
+% \end{figure}
+%
+% The size of the chits are $1.2\times1.2$ unit lengths squared. This
+% is tuned so that the chits will fit within the hexes produced by the
+% \cs{hex} command (see \sectionname~\label{sec:hex}). In
+% \figurename~\ref{fig:chit:hex} we illustrate this. Typically the
+% unit is one centimetre. which means the chits are
+% $12\,\text{mm}\times12\,\text{mm}$ --- or roughly $1/2"\times1/2"$,
+% which is a fairly good size for most games.
+%
+% \begin{figure}[tbp]
+% \centering
+% \begin{tikzpicture}
+% \hex
+% \firstchit(hex cs:r=0,c=0)
+% \hex(c=1,r=0)
+% \secondchit(hex cs:r=0,c=1)
+% \hex(c=2,r=0)
+% \thirdchit(hex cs:r=0,c=2)
+% \end{tikzpicture}
+% \caption{Example of chits fit within hexes. }
+% \label{fig:chit:hex}
+% \end{figure}
+%
+% \subsection{Styling chits}
+%
+% Typical \TikZ{} options can be passed to the \cs{chit} macro. For
+% example, if you want to draw the chit with a red foreground, simply pass
+% \spec{draw=red} in the \oarg{optional} arguments to
+% \cs{chits}. Individual parts of the hexes can be styled separately.
+%
+% \paragraph{Important:} To set the colours of the various elements,
+%
+% one should use
+% \begin{description}
+% \item[\spec{color}=\meta{foreground and text}] Selects the
+% foreground colour of lines, text, and so on, including for the
+% NATO App6(C) symbol.
+% \item[\spec{fill}=\meta{background}] Selects the background colour
+% of the full chit. By default this is transparent.
+% \item[\spec{text}=\meta{text foreground}] Selects the colour used
+% for text in the chit. This overrides \spec{color} for text.
+% \item[\spec{draw}=\meta{foreground}] This sets the colour for
+% foreground elements, excluding text.
+% \end{description}
+% \TikZ{} allows one to pass a \meta{colour} as arguments for drawing
+% and understands that as giving the foreground and text colours.
+% However, that key is \emph{deprecated} for this library, as it does
+% not properly propagate through\footnote{The colour
+% \spec{pgfstrokecolor} is not modified by that.}.
+%
+% The styles used by the \spec{left}, \spec{right}, \spec{setup},
+% \spec{factors}, and \spec{symbol} elements are
+% \spec{tikz/chit/left}, \spec{tikz/chit/right}, \spec{tikz/setup},
+% \spec{tikz/factors}, and \spec{tikz/symbol} respectively. A user can
+% redefine these to change the appearance of the chits. For example,
+% one could make the symbol larger by setting a different
+% \spec{scale}, move the factors to the side by changing \spec{shift},
+% and so on.
+%
+% Pictures used by these elements are also styled by
+% similar keys. For example, the picture \spec{chit/identifier} is
+% styled by \spec{tikz/chit/identifier}.
+%
+% In addition, one can define the key \spec{tikz/every chit} to be the
+% default options for all chits.
+%
+% \subsection{Defining preset chit types}
+%
+% One can conveniently pre-define some chit styles. For example,
+% given the style definition
+%
+% \begin{verbatim}
+% \tikzset{
+% my chit/.style={/chit/symbol={[
+% faction=friendly,
+% command=land,
+% main=armoured]},
+% /chit/left={chit/identifier={Mine}},
+% /chit/factors={chit/2 factors={2,4}}}}
+% \end{verbatim}
+%
+% We can use that to make different chits with some commonalities
+% defined by that style. For example
+%
+% \begin{tikzpicture}
+% \chit[my chit](0,-2)
+% \chit[my chit,color=white,fill=red,right={chit/identifier=1}](2,-2)
+% \end{tikzpicture}
+%
+% where, in the second example, we have passed additional options to
+% \cs{chit}. Note that we \emph{must} give the full path to the
+% \spec{chit} keys when defining a style like this.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% NATO App6(c) symbols
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \cleardoublepage
+% \section{NATO App 6(c) symbols}
+% \label{sec:nateoapp6c}
+%
+% The NATO markers are designed to fit within the template shown in
+% \figurename~\ref{fig:natoapp:template}. The template is serves as a
+% placement guide of the the various parts of the NATO marker as
+% illustrated in \figurename{fig:natoapp:usage}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \node[natoapp6c={command=base}] {};
+% \end{tikzpicture}
+% \caption{Template for NATO symbols}
+% \label{fig:natoapp:template}
+% \end{figure}
+%
+% \begin{MacroSyntax}{\natoapp}
+% \cs{natoapp}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% where all arguments are optional.
+% Keys are defined to fill in the various parts of the markers. These
+% keys are
+% \begin{description}
+% \item[\keyval{faction}{\meta{faction}}] Selects the faction used for
+% the symbol. See also
+% \sectionname~\ref{sec:natoapp:faction:command}.
+% \item[\keyval{command}{\meta{command}}] Selects the command used for
+% the symbol. See also
+% \sectionname~\ref{sec:natoapp:faction:command}.
+% \item[\keyval{main}{\meta{mains}}] Specifies the main symbol(s).
+% This can be a comma separated list of specifiers (delimited by
+% braces \marg{first,second,\textellipsis}), and each symbol can be
+% preceeded by an optional argument to shift, scale, rotate, etc.,
+% the individual symbols. \ifShowSymbols See also
+% \sectionname~\ref{sec:natoapp:mains}\fi.
+% \item[\keyval{left}{\meta{lefts}}, \keyval{right}{\meta{rights}},
+% \keyval{top}{\meta{tops}}, \keyval{bottom}{\meta{bottoms}},
+% \keyval{below}{\meta{belows}}] Specifies the left-, right-hand,
+% top, bottom, and lower symbol(s). The format of the arguments
+% \meta{lefts}, \meta{rights}, \meta{tops}, \meta{bottoms}, and
+% \meta{belows} has the same format as \meta{mains}.
+% \end{description}
+%
+% \begin{figure}[htbp]
+% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}}
+% \begin{center}
+% \begin{tikzpicture}[scale=2]
+% \natoapp[
+% faction=none,
+% command=base,
+% echelon=army,
+% main={text=M},
+% top={text=T},
+% bottom={text=B},
+% left={text=L},
+% right={text=R},
+% below={text=V}]
+% \pic[draw,transform shape]{wg/x axis={-.5,.5,-.7,,}};
+% \pic[draw,transform shape]{wg/y axis={.7,-.62,.74,,{-.5,.5,-.2,.2}}};
+% \end{tikzpicture}
+% \end{center}
+% & The figure is typeset by
+% \begin{verbatim}
+% \natoapp[faction=none,
+% command=base,
+% echelon=army,
+% main={text=M},
+% top={text=T},
+% bottom={text=B},
+% left={text=L},
+% right={text=R},
+% below={text=V}]
+% \end{verbatim}
+% \end{tabular}
+% \caption{Main keys of \cs{natoapp}. The bottom and right hand
+% bars indicate one unit of length.}
+% \label{fig:natoapp:usage}
+% \end{figure}
+%
+% Other keys are available to further customise the appearance of the
+% symbols
+%
+% \begin{description}
+% \item[\keyval{echelon}{\meta{size}}] The size of the unit described.
+% Possible values are \spec{team}, \spec{squad}, \spec{section},
+% \spec{platoon}, \spec{company}, \spec{battalion}, \spec{regiment},
+% \spec{brigade}, \spec{division}, \spec{corps}, \spec{army},
+% \spec{army group}, \spec{theatre}, and \spec{command}.
+% \item[\keyval{frame}{\meta{keys}}] Extra keys for frame.
+% \end{description}
+%
+% \subsection{Faction and Command Selection}
+% \label{sec:natoapp:faction:command}
+%
+% Table~\ref{tab:frames} shows the various bases used for the various
+% {\ttfamily{\itshape faction}/{\itshape command}} combinations. Also
+% shown in the table is the base template for main identifiers.
+%
+% \makeatletter
+% \def\tabledata{}
+% \foreach \c in {air,land,equipment,installation,sea surface,sub surface,space,activity}{%
+% \protected@xappto\tabledata{\spec{\c}}
+% \foreach \f in {friendly,hostile,neutral,unknown}{%
+% \protected@xappto\tabledata{
+% &\noexpand\tikz[scale=.8]{%
+% \noexpand\path (-.75,-.75) rectangle (.75,.75);
+% \noexpand\node[natoapp6c={faction=\f,command=\c},fill=\f]{};
+% \noexpand\node[natoapp6c={command=base},draw=lightgray]{};
+% }}}
+% \protected@xappto\tabledata{\\ \noexpand\hline}}
+% \makeatother
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|l|m{2cm}m{2cm}m{2cm}m{2cm}|}
+% \hline
+% \rowcolor{headbg}
+% & \multicolumn{4}{c|}{{\color{headfg}\meta{faction}}}\\
+% \rowcolor{headbg}
+% {\color{headfg}\meta{command}}
+% & {\color{headfg}\spec{friendly}}
+% & {\color{headfg}\spec{hostile}}
+% & {\color{headfg}\spec{neutral}}
+% & {\color{headfg}\spec{unknown}}
+% \\
+% \hline
+% \tabledata
+% \end{tabular}
+% \caption{Frames for various combinations of \meta{faction} and
+% \meta{command} combinations. These are drawn with the
+% \spec{pic} given by
+% \spec{natoapp6c/\meta{faction}/\meta{command}} with the options
+% \spec{draw=blue,fill=\meta{faction}}. If no \spec{fill} is
+% specified, then the background will be transparent. Note, the
+% template for main identifiers is also shown on top of each frame.}
+% \label{tab:frames}
+% \end{table}
+%
+% The fill color of the frame is set by the key \spec{frame}. If
+% this is or contains the special value \spec{faction}, then the
+% frame fill colour will be the standard for the faction as
+% illustrated in figure~\ref{fig:faction:color}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}
+% \foreach[count=\i] \f in {friendly,hostile,neutral,unknown}{
+% \natoapp[frame=faction,faction=\f,
+% command=space,main={infantry}](2*\i-2,0)}
+% \end{tikzpicture}
+% \caption{Illustration of using the special value \spec{faction}
+% for the \spec{frame} key}
+% \label{fig:faction:color}
+% \end{figure}
+%
+% Elements of the frame can be controlled by the key \spec{frame}.
+% \begin{description}
+% \item[\keyval{frame}{\meta{keys}}] Additional keys to pass to the
+% frame drawing. The special option \spec{faction} will make the
+% frame be filled with the standard faction color.
+% \end{description}
+%
+% \tablename~\ref{tab:frame:color} illustrates this.
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|c|cccc|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Example}}
+% & {\color{headfg}\textbf{\spec{frame=\{color,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{fill,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{draw,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{line width,...\}}}}
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air]}
+% &
+% &
+% &
+% &
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,color=red,
+% frame={line width=2pt}]}
+% & \spec{red}
+% &
+% &
+% & \spec{thick}
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,
+% frame={fill=yellow,line width=.5pt}]}
+% &
+% & \spec{yellow}
+% &
+% & \spec{thin}
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,frame={blue}]}
+% &
+% &
+% & \spec{blue}
+% &
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,frame={fill=pink,magenta}]}
+% &
+% & \spec{pink}
+% & \spec{magenta}
+% &
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,color=red,
+% frame={fill=green,draw=blue,line width=3pt}]}
+% & \spec{red}
+% & \spec{green}
+% & \spec{blue}
+% & \spec{ultra thick}
+% \\
+% \hline
+% \end{tabular}
+% \caption{Illustration of frame colour choices}
+% \label{tab:frame:color}
+% \end{table}
+%
+% \subsection{Unit Size (\spec{echelon})}
+%
+% The size of a unit a marker represents is given by the
+% \spec{echelon} keyword. \tablename~\ref{tab:natoapp6c:echelon}
+% shows the various markers and approximate unit sizes.
+%
+% \let\foo\empty
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{1.2cm}|cr@{--}lm{.27\linewidth}m{.27\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Example}}
+% & {\color{headfg}\spec{echelon}}
+% & \multicolumn{2}{c}{{\color{headfg}\textbf{Approx.~size}}}
+% & \foo{} {\color{headfg}\textbf{Sub-units}}
+% & \foo{} {\color{headfg}\textbf{Officer}}
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=team,lower=airborne]}
+% & \spec{team}
+% & 3
+% & 5
+% & \foo{} none
+% & \foo{} Corporal or Sergeant
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=squad]}
+% & \spec{squad}
+% & 5
+% & 10
+% & \foo{} 1--2 teams
+% & \foo{} Sergeant
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=section]}
+% & \spec{section}
+% & 7
+% & 13
+% & \foo{} 2--3 teams
+% & \foo{} Sergeant
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=platoon]}
+% & \spec{platoon}
+% & $25$
+% & $40$
+% & \foo{} Several squads/sections
+% & \foo{} Second Lieutenant
+% \\
+% \hline\tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=company]}
+% & \spec{company}
+% & $60$
+% & $250$
+% & \foo{} Several platoons
+% & \foo{} Captain
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=battalion]}
+% & \spec{battalion}
+% & $300$
+% & $1\,000$
+% & \foo{} 2--6 companies
+% & \foo{} Lieutenant colonel
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=regiment]}
+% & \spec{regiment}
+% & $500$
+% & $2\,000$
+% & \foo{} 3--7 battalions
+% & \foo{} Colonel
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=brigade]}
+% & \spec{brigade}
+% & $2\,000$
+% & $5\,000$
+% & \foo{} Several battalions
+% & \foo{} Colonel
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=division]}
+% & \spec{division}
+% & $10\,000$
+% & $20\,000$
+% & \foo{} Several brigades/regiments
+% & \foo{} Major General
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=corps]}
+% & \spec{corps}
+% & $30\,000$
+% & $60\,000$
+% & \foo{} Several divisions
+% & \foo{} Lieutenant General
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army]}
+% & \spec{army}
+% & \multicolumn{2}{c}{$100\,000$}
+% & \foo{} Several corps (5--10 divisions)
+% & \foo{} General
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army group]}
+% & \spec{army group}
+% & $120\,000$
+% & $500\,000$
+% & \foo{} Several armies
+% & \foo{} Field Marshal
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=theatre]}
+% & \spec{theatre}
+% & \multicolumn{2}{c}{$250\,000+$}
+% & \foo{} Several army groups
+% & \foo{} Field Marshal
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=command]}
+% & \spec{command}
+% & \multicolumn{4}{c|}{Not a unit size, but designator}
+% \\
+% \hline
+% \end{tabular}
+% \caption{Illustration of echelon values. Approximate sizes and
+% command officer titles are typical modern day United States of
+% America army values and identifiers. Historically the unit
+% sizes have changed, as has officer titles. Furthermore, both
+% the unit sizes, names, and command officer titles may vary from
+% country to country, even across command.}
+% \label{tab:natoapp6c:echelon}
+% \end{table}
+%
+% \subsection{Unit type identification}
+%
+% \begin{table}
+% \centering%
+% \def\typemark#1{%
+% \tikz[scale=.3]{\natoapp[faction=friendly,command=land,#1]}}
+% \def\sizemark#1{%
+% \tikz[scale=.2]{\pic{natoapp6c/s/echelon=#1};}}
+% \begin{tabular}{|clc|}
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & \multicolumn{2}{c|}{\color{headfg}\textbf{Type \& Abbreviation}}
+% \\
+% \hline
+% \typemark{upper=air assault}
+% & Air assault
+% & AA\\
+% \rowcolor{altcol}
+% \typemark{upper=air defence}
+% & Air defence
+% & ADA\\
+% \typemark{lower=airborne}
+% & Airborne
+% & AB\\
+% \rowcolor{altcol}
+% \typemark{lower=amphibious}
+% & Amphibious
+% & AM\\
+% \typemark{main=anti tank anti armour}
+% & Anti tank/armoured
+% & AT\\
+% \rowcolor{altcol}
+% \typemark{main=armoured}
+% & Armoured
+% & AR\\
+% \typemark{main=chemical biological radiological nuclear}
+% & Chemical biological radiological nuclear
+% & CB\\
+% \rowcolor{altcol}
+% \typemark{main=combined arms}
+% & Combined arms
+% & CAR\\
+% \typemark{main=engineer}
+% & Engineer
+% & ENG\\
+% \rowcolor{altcol}
+% \typemark{main={[fill=pgfstrokecolor]artillery}}
+% & Field artillery
+% & FA\\
+% \typemark{main=infantry}
+% & Infantry
+% & IN\\
+% \rowcolor{altcol}
+% \typemark{main={infantry,armoured}}
+% & Mechanised infantry
+% & M\\
+% \typemark{lower=mountain}
+% & Mountaineer
+% & MTN\\
+% \rowcolor{altcol}
+% \typemark{upper=naval}
+% & Naval
+% & N\\
+% \typemark{main=reconnaissance}
+% & Reconnaissance
+% & REC\\
+% \rowcolor{altcol}
+% \typemark{main={text=sof}}
+% & Special Operations Forces
+% & SOF\\
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & \multicolumn{2}{c|}{\color{headfg}\textbf{Echelon \& Abbreviation}}
+% \\
+% \hline
+% \sizemark{army group}
+% & Army group
+% & AG\\
+% \rowcolor{altcol}
+% \sizemark{army}
+% & Army
+% & A\\
+% \sizemark{corps}
+% & Corps
+% & -\\
+% \rowcolor{altcol}
+% \sizemark{division}
+% & Division
+% & D\\
+% \sizemark{brigade}
+% & Brigade
+% & BD\\
+% \rowcolor{altcol}
+% \sizemark{regiment}
+% & Regiment
+% & REGT\\
+% \sizemark{battalion}
+% & Battalion
+% & BN\\
+% \rowcolor{altcol}
+% \sizemark{company}
+% & Company
+% & COY\\
+% \sizemark{platoon}
+% & Platoon
+% & PLT\\
+% \rowcolor{altcol}
+% \sizemark{section}
+% & Section
+% & \\
+% \sizemark{squad}
+% & Squad
+% & \\
+% \hline
+% \end{tabular}
+% \caption{Some abbreviations of unit type identifications}
+% \label{tab:natoapp6c:abbr}
+% \end{table}
+%
+%
+% \ifShowSymbols
+% \subsection{Symbols Available}
+% \label{sec:natoapp:mains}
+%
+% \tablename~\ref{tab:natoapp6c:main:symbols} lists all the symbols
+% defined. Note, these do \emph{not} correspond to \emph{all} the
+% symbols defined in NATO APP-6(C) \cite{app6c}. However, using
+% combinations of these symbols one can construct \emph{all} of
+% those symbols (and so more if so desired).
+%
+% \ifShowCompat
+% See also
+% Appendix~\ref{app:natoapp6c:compat} for compatibility charts
+% between this library and \textsf{milsymb} \cite{milsymb}.
+% \fi
+%
+% {\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}}
+% \fi
+%
+% \begin{thebibliography}{99}
+% \bibitem{fb} Hanover,C., Hendrix,C.E., \& Llewelyn,S.,
+% \textit{First Blood}, 1997, \url{https://grognard.com/fb/}
+% \bibitem{app6c} \textit{NATO Joint Military Symbology}, APP-6(C),
+% May 2011,
+% \url{https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology}.
+% \bibitem{app6d} \textit{NATO Joint Military Symbology}, APP-6(D),
+% October 2017,
+% \url{https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN}
+% \bibitem{milsymb} \textsf{milsymb} package,
+% \url{https://www.ctan.org/pkg/MilSymb}.
+% \end{thebibliography}
+%
+% \StopEventually{}
+%
+%
+% \iffalse
+% ====================================================================
+%
+% Implementation
+%
+% ====================================================================
+%
+% The wargame main package
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Implementation}
+% \label{sec:impl}
+%
+% \input{package.dtx}
+% \input{util/core.dtx}
+% \input{hex/core.dtx}
+% \input{chit/core.dtx}
+% \input{natoapp6c/core.dtx}
+%
+% \appendix
+%
+% \iffalse
+% ====================================================================
+%
+% Appendices
+%
+% ====================================================================
+%
+% Compat tables
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \ifShowCompat
+% \section{Compatibility tables}
+% \label{app:natoapp6c:compat}
+%
+% The following tables provides compatibility with the the
+% \textsf{milsymb} package available from CTAN.
+%
+% \let\CompatSection\subsection
+% \let\CompatSubSection\subsubsection
+% \input{cmp_air}
+% \input{cmp_missile}
+% \input{cmp_land}
+% \input{cmp_equipment}
+% \input{cmp_installation}
+% \input{cmp_seasurface}
+% \input{cmp_subsurface}
+% \input{cmp_seamine}
+% \input{cmp_space}
+% \input{cmp_activity}
+% \fi
+%
+% \iffalse
+% ====================================================================
+%
+% Draft VASSAL module
+%
+% --------------------------------------------------------------------
+% \fi
+% \section{Generate draft VASSAL module}
+% \label{app:vassal}
+%
+% We can use the code you wrote for your game pieces (counters, maps,
+% tables), to generate a draft VASSAL module. To that end, use the
+% document class \textsf{wgexport}, and some simple macros to export
+% your graphics to a single PDF. A provided Python script then
+% processes this to generate the draft VASSAL module.
+%
+% The generated VASSAL module is not the final thing, but it is a good
+% start.
+%
+% \subsection{Example}
+%
+% Suppose we have defined counters and markers like
+% \begin{verbatim}
+% allied 1 id axis 1 ad out of supply
+% allied 2 ad axis 2 ad game turn
+% allied 3 abid axis 3 ic
+% \end{verbatim}
+% via Tikz styles. Also assume that we have macros
+% \begin{verbatim}
+% \board \oob \charts \front
+% \end{verbatim}
+% which produces \textsf{tikzpicture}s to the board, OOBs, charts, and
+% cover, respectively. All this is defined in our package
+% \texttt{mygame}. Of course that we have our rules in the file
+% \texttt{game.pdf}.
+%
+% We prepare a simple \LaTeX{} source file
+%
+% \begin{verbatim}
+% \documentclass{wgexport}
+% \usepackage{mygame}
+% \begin{document}
+% \begin{imagelist} %% Records image meta info
+% \chitimages{{%
+% {allied 1 id,allied 2 ad,allied 3 abid}/Allied,%
+% {axis 1 ad,axis 2 ad,axis 3 ic}/Axis,%
+% {out of supply, game turn}/Markers}}
+% \info{Board}{board}{} \board
+% \info{OOB}{oob}{} \oob
+% \info{Charts}{chart}{}\chart
+% \info{Cover}{front}{} \front
+% \end{imagelist}
+% \end{document}
+% \end{verbatim}
+%
+% When we run \LaTeX{} on this, we will get a PDF where each page is a
+% separate image and the page is cropped to image. \emph{In addition}
+% we will get a CSV (comma-separated-values) file \texttt{export.csv}
+% which contains some meta information about each page. In
+% particular, it identifies the name of each page, the category, and
+% sub category of the image.
+%
+% For chits, the name of the image is the style name (e.g., \texttt{game
+% turn}). For other images, it is the first argument to \cs{info}
+% above.
+%
+% The category is for chits is always \texttt{counter}. For other
+% images, it is the second argument to the \cs{info} macro (e.g.,
+% \texttt{board}).
+%
+% The category of an image is important later on when we generate the
+% VASSAL module. Recognised categories are
+%
+% \begin{itemize}
+% \item \texttt{counter} for counter images. Such an image will
+% trigger the creation of a VASSAL game piece.
+% \item \texttt{board} for board images. Images of this kind will
+% result in VASSAL board (or Map) elements.
+% \item \texttt{oob} for Order of Battle tables. This will also
+% result in a VASSAL map being created, but one that is displayed as
+% a pop-up and with a rectangular grid. This is useful for placing
+% units in an Order of Battle chart.
+% \item \texttt{chart} for charts. These images will be made VASSAL
+% charts --- i.e., pop-up windows which contains some graphics for the
+% players reference.
+% \item \texttt{front} for the cover image. This will become the
+% module splash image. Only one such image (the first) will be used.
+% \end{itemize}
+%
+% Other categories may be used, and the corresponding image will be
+% added to the VASSAL module. However, they will no be processed in
+% any specific way.
+%
+% The \emph{sub-category} is mainly used for counters. Above, we gave
+% the sub-categories \texttt{Allied}, \texttt{Axis}, and
+% \texttt{Markers}. The sub-categories will help to identify the
+% factions of the game, and counter prototypes will be made for each
+% category. The sub-categories of \texttt{board}, \texttt{charts},
+% \texttt{oob}, and \texttt{front} has no or little effect.
+%
+% One we have processed the file above to generate our PDF (Say
+% \texttt{export.pdf}), then we can process it (and the CSV file) with
+% a Python script to make our draft VASSAL module
+%
+% \begin{verbatim}
+% export.py export.pdf export.csv -o Game.vmod -t Game -v 0.1 \
+% -d "My game" -r rules.pdf
+% \end{verbatim}
+%
+% This will generate the draft module \texttt{Game.vmod}. Note that
+% we add the rules (\texttt{-r rules.pdf}) to the module so that the
+% module is complete.
+%
+% Once the module has been generated, one can open it in the VASSAL
+% editor and further customise it. For example, the grids used in
+% the boards needs to be adjusted, and one may want to make initial
+% set-ups or add all counters to the OOB.
+%
+% Of course, running the Python script will overwrite all changes, so
+% perhaps it is a good idea to work on a copy of the output file.
+%
+% \iffalse
+% This is the package used by the documentation
+%<*docsty>
+\ProvidesPackage{wgdoc}
+\DeclareOption{noterrainpic}{%
+ \PassOptionsToPackage{noterrainpic}{wargame}}
+\ProcessOptions\relax
+%
+\RequirePackage{etoolbox}
+\RequirePackage{wargame}
+\RequirePackage{longtable}
+\RequirePackage{colortbl}
+\RequirePackage{hyperref}
+\RequirePackage{textcomp}
+\RequirePackage{float}
+\RequirePackage[a4paper,right=1cm,left=2cm]{geometry}
+%
+\usetikzlibrary{external}
+\tikzexternalize[mode=graphics if exists,prefix=.cache-]
+%
+\newcommand\TikZ{{\mdseries Ti{\itshape k}Z}}
+\newcommand\sectionname{Section}
+\let\subsubsubsection\paragraph
+%
+\colorlet{headbg}{LightSlateGrey!50}
+\colorlet{headfg}{black}
+\colorlet{altcol}{LightSteelBlue!50}
+\newcommand\spec[1]{{\obeyspaces\ttfamily #1}}
+\newcommand\tspec[1]{{\ttfamily\footnotesize\obeyspaces #1}}
+\newcommand\keyval[2]{\spec{#1}=#2}
+%
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{1ex}
+\setlength\hfuzz{15pt}
+\hbadness=7000
+%
+\tikzset{
+ cc name/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41)
+ node[fill=none,transform shape,
+ font=\sffamily\bfseries\fontsize{16}{0}\selectfont] {cc}
+ ;
+ },
+ cc by/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41) (0,.26) circle(.07)
+ (0,.15)
+ --++(.11,0)
+ to[bend left] ++(.02,-.02)
+ --++(0,-.20)
+ --++(-.05,0)
+ --++(0,-.25)
+ --++(-.15,0)
+ --++(0,.25)
+ --++(-.05,0)
+ --++(0,.2)
+ to[bend left] ++(.02,.02)
+ --cycle
+ ;
+ },
+ cc sa/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41)
+ (-.22,-.08)
+ to[bend right=40] ++(.23,-.20)
+ to[bend right=40] ++(.23, .20)
+ to[bend right=10] ++(0, .16)
+ to[bend right=40] ++(-.23, .20)
+ to[bend right=40] ++(-.23, -.20)
+ --++(-.05,0)
+ --++(-45:.15)
+ --++( 45:.15)
+ --++(-.05,0)
+ to[bend left=40] ++(.12, .1)
+ to[bend left=40] ++(.12, -.1)
+ to[bend left=10] ++(0, -.16)
+ to[bend left=40] ++(-.12, -.1)
+ to[bend left=40] ++(-.12, .1)
+ --cycle
+ ;
+ },
+ cc by sa/.pic={
+ \pic at(-1,0) {cc name};
+ \pic at( 0,0) {cc by};
+ \pic at( 1,0) {cc sa};
+ }
+}
+
+%
+\newcommand\Continued[1]{\multicolumn{#1}{c}{%
+ \textit{\small continued from previous page}}\\}
+\newcommand\Continues[1]{\multicolumn{#1}{c}{%
+ \textit{\small continues on next page}}\\}
+\newcommand\SymbolTable[3][]{%
+ \setlength{\LTcapwidth}{\linewidth}
+ \def\tabledata{}
+ \foreach \m in #3{%
+ \protected@xappto\tabledata{\spec{\m}}
+ \foreach \f in {friendly,hostile,neutral,unknown}{%
+ \protected@xappto\tabledata{
+ &\noexpand\tikz[scale=.8]{%
+ \noexpand\natoapp[faction=\f,%
+ command=#2,%
+ main={\m},%
+ frame={faction},%
+ #1]}}}
+ \protected@xappto\tabledata{\\ \noexpand\hline}}
+ \def\colheaders{%
+ \hline%
+ & \multicolumn{4}{c|}{\meta{faction}}\\%
+ \meta{symbol}%
+ & \spec{friendly}%
+ & \spec{hostile}%
+ & \spec{neutral}%
+ & \spec{unknown}%
+ \\%
+ \hline}
+ \begin{longtable}{|l|
+ m{.1\linewidth}
+ m{.1\linewidth}
+ m{.1\linewidth}
+ m{.1\linewidth}|}
+ \caption{Symbols\label{tab:natoapp6c:main:symbols}}\\
+ \colheaders
+ \endfirsthead
+ \Continued{5}
+ \colheaders
+ \endhead
+ \Continues{5}
+ \endfoot
+ \endlastfoot
+ \tabledata
+ \end{longtable}
+}
+%
+\def\CompatSection#1{}
+\def\CompatSubSection#1{}
+\newcommand\CompatTable[3]{% command, where, list
+ \CompatSubSection{\spec{#2}}
+ \setlength{\LTcapwidth}{\linewidth}
+ \def\tabledata{}
+ \foreach \m/\s in #3{%
+ \n@to@pp@dbg{2}{Compatibility: `\m' -> `\s'}
+ \protected@xappto\tabledata{\tspec{\m} & \tspec{\s}}
+ \foreach \f in {{none,frame={draw=lightgray}},%
+ friendly,hostile,neutral,unknown}{%
+ \protected@xappto\tabledata{
+ &\noexpand\tikz[scale=.5]{%
+ \noexpand\natoapp[faction=\f,command=#1,\s,frame={faction}]}}}
+ \protected@xappto\tabledata{\\ \noexpand\hline}}
+ \def\colheaders{%
+ \hline%
+ &
+ & \multicolumn{5}{c|}{\meta{faction}}\\%
+ \textsf{milsymb}%
+ &\textsf{wargame}%
+ & \spec{none}%
+ & \spec{friendly}%
+ & \spec{hostile}%
+ & \spec{neutral}%
+ & \spec{unknown}%
+ \\%
+ \hline}
+ \begin{longtable}{|
+ m{.15\linewidth}|
+ m{.20\linewidth}|
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}|}
+ \caption{Compatibility with \textsf{milsymb} \spec{#1},\spec{#2}
+ symbols\label{tab:compat:#1:#2}}\\
+ \colheaders
+ \endfirsthead
+ \Continues{7}
+ \colheaders
+ \endhead
+ \Continues{7}
+ \endfoot
+ \endlastfoot
+ \tabledata
+ \end{longtable}
+}
+%
+\newenvironment{Syntax}{%
+ \par
+ \vspace{1ex}
+ \hspace*{-1cm}
+ \ttfamily
+ \begin{tabular}{|>{\columncolor{altcol}}p{.8\textwidth}|}
+ \hline}{\\\hline\end{tabular}\par\vskip 1ex}
+\def\MacroSyntax{%
+ \leavevmode\begingroup%
+ %\catcode`\\12
+ \MakePrivateLetters\M@croSyntax}
+\def\M@croSyntax#1{\endgroup%
+ \foreach \k in {#1}{\expandafter\Special@Usage@Index\k}
+ \Syntax}
+\let\endMacroSyntax\endSyntax
+%
+\@ifundefined{SpecialIndex@}{
+ \gdef\SpecialIndex@#1#2{%
+ \@SpecialIndexHelper@#1\@nil
+ \def\@tempb{ }%
+ \ifcat \@tempb\@gtempa
+ \special@index{\quotechar\space\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \quotechar\bslash\quotechar\space\verbatimchar#2}%
+ \else
+ \def\@tempb##1##2\relax{\ifx\relax##2\relax
+ \def\@tempc{\special@index{\quotechar##1\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \quotechar\bslash\quotechar##1\verbatimchar#2}}%
+ \else
+ \def\@tempc{\special@index{##1##2\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \bslash##1##2\verbatimchar#2}}%
+ \fi}%
+ \expandafter\@tempb\@gtempa\relax
+ \@tempc
+ \fi}}{}
+%
+\def\Special@Usage@Index#1{\@bsphack
+ {\let\special@index\index\SpecialIndex@{#1}{}}%
+ \@esphack}
+%
+\def\Speci@lIndex#1#2#3#4{%
+ \@bsphack\special@index{%
+ #1\actualchar
+ {\string\ttfamily\space#1}
+ (#3)%
+ \encapchar main}%
+ \special@index{#4:\levelchar#2\actualchar{%
+ \string\ttfamily\space#2}\encapchar main}\@esphack}
+%
+\def\SpecialHexKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{Hex keys}}
+\def\SpecialNatoSymbolIndex#1#2{%
+ \Speci@lIndex{#1}{#2}{symbol}{NATO App6(c) symbols}}
+\def\SpecialNatoFrameIndex#1#2{\Speci@lIndex{#1}{#2}{frame}{NATO App6(c) frame}}
+\def\SpecialNatoKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{NATO App6(c) keys}}
+\def\SpecialKeyIndex#1{\Speci@lIndex{#1}{#1}{key}{TikZ keys}}
+%
+\def\get@third #1/#2/#3/{\gdef\curr@third{#3}}
+\def\get@second #1/#2/#3/{\gdef\curr@second{#2}}
+%
+\def\KeyT@ble#1#2{
+ \leavevmode
+ \par
+ \vspace{1ex}
+ \hspace*{-1cm}
+ \begin{tabular}{#1}
+ \hline
+ #2
+ \hline
+ \end{tabular}\par}
+%
+\def\ShowKeyT@ble#1{
+ \KeyT@ble{|p{.1\textwidth}|>{\columncolor{altcol}}p{.7\textwidth}|}{#1}}
+%
+\def\Macro{%
+ \begingroup%
+ \catcode`\\12
+ \MakePrivateLetters\M@cro}
+%
+\def\M@cro#1{%
+ \endgroup
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\noexpand\string\k}\noexpand\SpecialMainIndex{\k}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\noexpand\tabledata}}
+\def\endMacro{}
+%
+\newenvironment{NatoAppSymbol}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@third\k/
+ \protected@xappto\tabledata{%
+ \noexpand\tikz[scale=.5]{\noexpand\natoapp[main=\curr@third,
+ faction=none,command=base,frame={draw=lightgray}]}
+ &\noexpand\spec{\k}
+ \noexpand\SpecialNatoSymbolIndex{\k}{\curr@third}\\}}
+ \ShowKeyT@ble{\tabledata}}{}
+\newenvironment{NatoAppFrame}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ %\expandafter\get@third\k/
+ %\expandafter\get@second\k/
+ \protected@xappto\tabledata{%
+ \noexpand\tikz[scale=.5]{\noexpand\node[shape=\k] {};}
+ &\noexpand\spec{\k}
+ \noexpand\SpecialNatoFrameIndex{\k}{\k}\\}}
+ \ShowKeyT@ble{\tabledata}}{}
+\newenvironment{NatoAppKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k//
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialNatoKeyIndex{\k}{\curr@second}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{HexKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k//
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+\newenvironment{HexKey*}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k/
+ \expandafter\get@third\k/
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second/\curr@third}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{TikzKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialKeyIndex{\k}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\tikzset{
+ pics/wg/x axis/.style args={#1,#2,#3,#4,#5}{
+ code={
+ \begin{scope}[/pgf/number format/.cd,fixed,precision=2]
+ \path[pic actions] (#1,#3)--(#2,#3)
+ \foreach \t in {#1,#2,#4}{
+ \ifx\t\@empty\else
+ (\t,#3)--++(0,-.2)
+ node[anchor=north]{$\pgfmathprintnumber{\t}$}\fi}
+ \foreach \t in {#5}{
+ \ifx\t\@empty\else
+ (\t,#3)--++(0,-.1)
+ node[anchor=north,font=\small]{$\pgfmathprintnumber{\t}$}\fi};
+ \end{scope}}},
+ pics/wg/y axis/.style args={#1,#2,#3,#4,#5}{
+ code={
+ \begin{scope}[/pgf/number format/.cd,fixed,precision=2]
+ \path[pic actions] (#1,#2)--(#1,#3)
+ \foreach \t in {#2,#3,#4}{
+ \ifx\t\@empty\else
+ (#1,\t)--++(.2,0)
+ node[anchor=west]{$\pgfmathprintnumber{\t}$}\fi}
+ \foreach \t in {#5}{
+ \ifx\t\@empty\else
+ (#1,\t)--++(.1,0)
+ node[anchor=west,font=\small]{$\pgfmathprintnumber{\t}$}\fi};
+ \end{scope}}},
+ pics/wg/xaxis/.style args={#1,#2,#3,#4}{%
+ code={
+ \pic[draw]{wg/x axis={-#1,#1,#2,#3,#4}};}},
+ pics/wg/yaxis/.style args={#1,#2,#3,#4}{%
+ code={
+ \pic[draw]{wg/y axis={#1,-#2,#2,#3,#4}};}},
+}
+%</docsty>
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Symbols documentation driver
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% Driver for symbols only document
+%<*symbols>
+\title{The \textsf{wargame} package\\
+ Symbols}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\maketitle
+% \natoappdbglvl=3
+{\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}}
+\end{document}
+%</symbols>
+%
+%
+%
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Compatibility documentation driver
+%
+% --------------------------------------------------------------------
+% \fi
+%
+%
+%<*compat>
+% Driver for compatibility only document
+\title{The \textsf{wargame} package\\
+ \textsf{milsymb} Compatibility}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\newgeometry{margin=1cm}
+\maketitle
+% \natoappdbglvl=1
+\let\CompatSection\section
+\let\CompatSubSection\subsection
+\input{cmp_air}
+\input{cmp_missile}
+\input{cmp_land}
+\input{cmp_equipment}
+\input{cmp_installation}
+\input{cmp_seasurface}
+\input{cmp_subsurface}
+\input{cmp_seamine}
+\input{cmp_space}
+\input{cmp_activity}
+\restoregeometry
+\end{document}
+%</compat>
+% \fi
+%
+% \PrintIndex
+% \Finale
+%
+%
+%
+% \iffalse
+% EOF
+% Local Variables:
+% TeX-command-extra-options: "-shell-escape"
+% End:
+% \fi
diff --git a/macros/latex/contrib/wargame/source/wargame.ins b/macros/latex/contrib/wargame/source/wargame.ins
new file mode 100644
index 0000000000..0ab9ec5a74
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/wargame.ins
@@ -0,0 +1,176 @@
+%% This is file `wargame.ins', the installation file for the
+%% `wargame' package.
+%%
+%% Copyright (C) 2019 Christian Holm.
+%%
+%% The wargame package is free software; you can redistribute it
+%% and/or modify it under the terms of the GNU General Public License
+%% as published by the Free Software Foundation; either version 2 of
+%% the License, or (at your option) any later version.
+%%
+%% The universal package is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+%% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this package; if not, write to the Free Software
+%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%%
+
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\declarepreamble\long
+
+Copyright (C) 2019 Christian Holm.
+
+This file is NOT the source for wargame, because almost all comments
+have been stripped from it. It is NOT the preferred form of universal
+for making modifications to it.
+
+Therefore you can NOT redistribute and/or modify THIS file. You can
+however redistribute the complete source (wargame.dtx and wargame.ins)
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2, or (at
+your option) any later version.
+
+The wargame package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this package; if not, write to the
+ Free Software Foundation, Inc.,
+ 675 Mass Ave, Cambridge,
+ MA 02139, USA.
+
+See the file wargame.dtx for further comments and documentation.
+
+\endpreamble
+
+\declarepreamble\short
+
+Copyright (C) 2019 Christian Holm.
+
+The wargame package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+See the file wargame.dtx for further comments and documentation.
+
+\endpreamble
+
+\postamble
+Local Variables:
+ mode: LaTeX
+End:
+\endpostamble
+
+\usepreamble\long
+\usedir{tex/latex/wargame}
+\Msg{***********************************************************}
+\Msg{* Generating LaTeX files}
+\Msg{***********************************************************}
+\generate{%
+ \file{wargame.sty} {\from{package.dtx}{package}}
+ \file{wgdoc.sty} {\from{wargame.dtx}{docsty}}
+ \file{compat.tex} {\from{wargame.dtx}{driver,compat}}
+ \file{symbols.tex} {\from{wargame.dtx}{driver,symbols}}
+ %
+ \file{tikzlibrarywargame.util.code.tex}{%
+ \from{util/core.dtx}{utils}}
+ %
+ \file{wgexport.cls}{%
+ \from{util/core.dtx}{exportcls}}
+ %
+ \file{tikzlibrarywargame.hex.code.tex}{
+ \from{hex/core.dtx} {hex}
+ \from{hex/coord.dtx} {hex}
+ \from{hex/shape.dtx} {hex}
+ \from{hex/terrain.dtx} {hex}
+ \from{hex/terrain/beach.dtx} {hex}
+ \from{hex/terrain/light_woods.dtx}{hex}
+ \from{hex/terrain/woods.dtx} {hex}
+ \from{hex/terrain/swamp.dtx} {hex}
+ \from{hex/terrain/rough.dtx} {hex}
+ \from{hex/terrain/mountains.dtx} {hex}
+ \from{hex/terrain/village.dtx} {hex}
+ \from{hex/terrain/town.dtx} {hex}
+ \from{hex/terrain/city.dtx} {hex}
+ \from{hex/terrain/mountain.dtx} {hex}
+ \from{hex/terrain/tree.dtx} {hex}
+ \from{hex/ridges.dtx} {hex}
+ \from{hex/towns.dtx} {hex}
+ \from{hex/labels.dtx} {hex}
+ \from{hex/extra.dtx} {hex}
+ \from{hex/paths.dtx} {hex}
+ \from{hex/board.dtx} {hex}}
+ %
+ \file{tikzlibrarywargame.natoapp6c.code.tex}{
+ \from{natoapp6c/core.dtx} {natoapp6c}
+ \from{natoapp6c/frames/base.dtx} {natoapp6c}
+ \from{natoapp6c/frames/friendly.dtx}{natoapp6c}
+ \from{natoapp6c/frames/hostile.dtx} {natoapp6c}
+ \from{natoapp6c/frames/neutral.dtx} {natoapp6c}
+ \from{natoapp6c/frames/unknown.dtx} {natoapp6c}
+ \from{natoapp6c/echelon.dtx} {natoapp6c}
+ \from{natoapp6c/text.dtx} {natoapp6c}
+ \from{natoapp6c/shape.dtx} {natoapp6c}
+ \from{natoapp6c/util.dtx} {natoapp6c}
+ \from{natoapp6c/weaponry.dtx} {natoapp6c}
+ \from{natoapp6c/symbols.dtx} {natoapp6c}
+ \from{natoapp6c/list.dtx} {natoapp6c}}
+ %
+ \file{tikzlibrarywargame.chit.code.tex}{
+ \from{chit/core.dtx} {chit}
+ \from{chit/shape.dtx} {chit}
+ \from{chit/elements.dtx}{chit}
+ \from{chit/misc.dtx} {chit}}
+ %
+ \file{beach.tex} {\from{hex/tile.dtx}{tile,beach}}
+ \file{city.tex} {\from{hex/tile.dtx}{tile,city}}
+ \file{light_woods.tex}{\from{hex/tile.dtx}{tile,lightwoods}}
+ \file{mountains.tex} {\from{hex/tile.dtx}{tile,mountains}}
+ \file{rough.tex} {\from{hex/tile.dtx}{tile,rough}}
+ \file{swamp.tex} {\from{hex/tile.dtx}{tile,swamp}}
+ \file{town.tex} {\from{hex/tile.dtx}{tile,town}}
+ \file{village.tex} {\from{hex/tile.dtx}{tile,village}}
+ \file{woods.tex} {\from{hex/tile.dtx}{tile,woods}}
+ %
+ \file{testmap.tex} {\from{tests/map.dtx}{testmap}}
+ \file{testchits.tex} {\from{tests/chits.dtx}{testchits}}
+ %
+ \file{cmp_air.tex} {\from{natoapp6c/compat/air.dtx} {cmp}}
+ \file{cmp_missile.tex} {\from{natoapp6c/compat/missile.dtx} {cmp}}
+ \file{cmp_land.tex} {\from{natoapp6c/compat/land.dtx} {cmp}}
+ \file{cmp_equipment.tex} {\from{natoapp6c/compat/equipment.dtx} {cmp}}
+ \file{cmp_installation.tex}{\from{natoapp6c/compat/installation.dtx}{cmp}}
+ \file{cmp_seasurface.tex} {\from{natoapp6c/compat/seasurface.dtx} {cmp}}
+ \file{cmp_subsurface.tex} {\from{natoapp6c/compat/subsurface.dtx} {cmp}}
+ \file{cmp_seamine.tex} {\from{natoapp6c/compat/seamine.dtx} {cmp}}
+ \file{cmp_space.tex} {\from{natoapp6c/compat/space.dtx} {cmp}}
+ \file{cmp_activity.tex} {\from{natoapp6c/compat/activity.dtx} {cmp}}
+ %
+}
+
+\Msg{***********************************************************}
+\Msg{* To finish the installation you have to move the files}
+\Msg{* `wargame.sty' `*.code.tex' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation do:}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space makeindex -s gind -o wargame.ind wargame.idx}
+\Msg{*\space\space makeindex -s gglo -o wargame.gls wargame.glo}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{* or whatever appropiate for your system.}
+\Msg{***********************************************************}
+\endbatchfile
+
+%% Local Variables:
+%% mode: docTeX
+%% End: \ No newline at end of file
diff --git a/support/texfot/texfot.pdf b/support/texfot/texfot.pdf
index 163dce0996..d51cb0fe97 100644
--- a/support/texfot/texfot.pdf
+++ b/support/texfot/texfot.pdf
Binary files differ
diff --git a/support/texfot/texfot.pl b/support/texfot/texfot.pl
index d7b9d85ce7..764210a1f5 100755
--- a/support/texfot/texfot.pl
+++ b/support/texfot/texfot.pl
@@ -1,5 +1,5 @@
#!/usr/bin/env perl
-# $Id: texfot,v 1.45 2022/02/17 18:42:02 karl Exp $
+# $Id: texfot,v 1.47 2022/09/24 16:38:13 karl Exp $
# Invoke a TeX command, filtering all but interesting terminal output;
# do not look at the log or check any output files.
# Exit status is that of the subprogram.
@@ -8,7 +8,7 @@
#
# Public domain. Originally written 2014 by Karl Berry.
-my $ident = '$Id: texfot,v 1.45 2022/02/17 18:42:02 karl Exp $';
+my $ident = '$Id: texfot,v 1.47 2022/09/24 16:38:13 karl Exp $';
(my $prg = $0) =~ s,^.*/,,;
select STDERR; $| = 1; # no buffering
select STDOUT; $| = 1;
@@ -21,6 +21,7 @@ use IO::File; # use new_tmpfile for that stderr.
use Getopt::Long qw(:config require_order);
use Pod::Usage;
+my @opt_accept = ();
my $opt_debug = 0;
my @opt_ignore = ();
my $opt_interactive = 0;
@@ -36,6 +37,7 @@ exit (&main ());
#
sub main {
my $ret = GetOptions (
+ "accept=s" => \@opt_accept,
"debug!" => \$opt_debug,
"ignore=s" => \@opt_ignore,
"interactive!" => \$opt_interactive,
@@ -90,9 +92,9 @@ sub main {
# Be sure everything is drained.
&debug ("starting waitpid() for $pid") ;
- waitpid ($pid, 0) || die "$prog: waitpid($pid) failed: $!\n";
+ waitpid ($pid, 0) || die "$prg: waitpid($pid) failed: $!\n";
my $child_exit_status = $? >> 8;
- &debug ("child exit status = $exit_status\n");
+ &debug ("child exit status = $child_exit_status\n");
&debug ("processing stderr from child");
seek (TEXERR, 0, 0) || warn "seek(stderr) failed: $!";
@@ -129,6 +131,17 @@ sub process_output {
next;
}
+ # don't anchor user accept patterns, leave it up to them.
+ for my $user_accept (@opt_accept) {
+ &debug ("checking user accept '$user_accept'\n");
+ if (/${user_accept}/) {
+ &debug (" found user accept ($user_accept)\n");
+ print $prefix;
+ print $line;
+ next;
+ }
+ }
+
&debug ("checking ignores\n");
next if /^(
LaTeX\ Warning:\ You\ have\ requested\ package
@@ -148,13 +161,13 @@ sub process_output {
|!\ $
)/x;
- # don't anchor user ignores, leave it up to them.
+ # don't anchor user ignore patterns either.
for my $user_ignore (@opt_ignore) {
&debug ("checking user ignore '$user_ignore'\n");
next LINE if /${user_ignore}/;
}
- &debug ("checking for print_next\n");
+ &debug ("checking for print_next pattern\n");
if (/^(
.*?:[0-9]+: # usual file:lineno: form
|! # usual ! form
@@ -189,6 +202,7 @@ sub process_output {
|all\ text\ was\ ignored\ after\ line
|.*Fatal\ error
|.*for\ symbol.*on\ input\ line
+ |\#\#
)/x) {
&debug (" matched for showing ($1)\n");
print $prefix;
@@ -225,8 +239,8 @@ texfot [I<option>]... I<texcmd> [I<texarg>...]
=head1 DESCRIPTION
C<texfot> invokes I<texcmd> with the given I<texarg> arguments,
-filtering the online output for ``interesting'' messages. Its exit
-value is that of I<texcmd>. Examples:
+filtering the online output for ``interesting'' messages. Its exit
+value is that of I<texcmd>. Examples:
# Sample basic invocation:
texfot pdflatex file.tex
@@ -238,15 +252,22 @@ value is that of I<texcmd>. Examples:
# Example of more complex engine invocation:
texfot xelatex --recorder '\nonstopmode\input file'
+Here is an example of what the output looks like (in its entirety) on an
+error-free run:
+
+ /path/to/texfot: invoking: pdflatex hello.ltx
+ This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex)
+ Output written on hello.pdf (1 page, 94415 bytes).
+
Aside from its own options, described below, C<texfot> just runs the
given command with the given arguments (same approach to command line
-syntax as C<env>, C<nice>, C<time>, C<timeout>, etc.). Thus, C<texfot>
-works with any engine and any command line options.
+syntax as C<env>, C<nice>, C<timeout>, etc.). Thus, C<texfot> works with
+any engine and any command line options.
C<texfot> does not look at the log file or any other possible output
file(s); it only looks at the standard output and standard error from
-the command. stdout is processed first, then stderr. Lines from stderr
-have an identifying prefix. C<texfot> writes all accepted lines to its
+the command. stdout is processed first, then stderr. Lines from stderr
+have an identifying prefix. C<texfot> writes all accepted lines to its
stdout.
The messages shown are intended to be those which likely need action by
@@ -265,32 +286,34 @@ If the ``next line'' needs to be printed (see below), print it.
=item 2.
+Otherwise, if the line matches any user-supplied list of regexps to
+accept (given with C<--accept>, see below), in that order, print it.
+
+=item 3.
+
Otherwise, if the line matches the built-in list of regexps to ignore,
or any user-supplied list of regexps to ignore (given with C<--ignore>,
see below), in that order, ignore it.
-=item 3.
+=item 4.
Otherwise, if the line matches the list of regexps for which the next
line (two lines in all) should be shown, show this line and set the
-``next line'' flag for the next time around the loop. Examples are the
+``next line'' flag for the next time around the loop. Examples are the
common C<!> and C<filename:lineno:> error messages, which are generally
followed by a line with specific detail about the error.
-=item 4.
+=item 5.
Otherwise, if the line matches the list of regexps to show, show it.
-=item 5.
+=item 6.
Otherwise, the default: if the line came from stdout, ignore it; if the
-line came from stderr, print it (to stdout). This distinction is made
+line came from stderr, print it (to stdout). This distinction is made
because TeX engines write relatively few messages to stderr, and it's
likely that any such should be considered.
-It would be easy to add more options to allow for user additions to the
-various regex lists, if that ever seems useful. Or email me (see end).
-
=back
Once a particular check matches, the program moves on to process the
@@ -303,8 +326,8 @@ in the source.
Incidentally, although nothing in this basic operation is specific to
TeX engines, all the regular expressions included in the program are
-specific to TeX. So in practice the program isn't useful except with
-TeX engines, although it would be easy enough to adapt it (if there was
+specific to TeX. So in practice the program isn't useful except with TeX
+engines, although it would be easy enough to adapt it (if there was
anything else as verbose as TeX to make that useful).
=head1 OPTIONS
@@ -315,28 +338,35 @@ output for that).
The first non-option terminates C<texfot>'s option parsing, and the
remainder of the command line is invoked as the TeX command, without
-further parsing. For example, C<texfot --debug tex
+further parsing. For example, C<texfot --debug tex
--debug> will output debugging information from both C<texfot> and
C<tex>.
Options may start with either - or --, and may be unambiguously
-abbreviated. It is best to use the full option name in scripts, though,
+abbreviated. It is best to use the full option name in scripts, though,
to avoid possible collisions with new options in the future.
=over 4
+=item C<--accept> I<regexp>
+
+Accept lines in the TeX output matching (Perl) I<regexp>. Can be
+repeated. This list is checked first, so any and all matches will be
+shown, regardless of other options. These regexps are not automatically
+anchored (or otherwise altered), simply used as-is.
+
=item C<--debug>
=item C<--no-debug>
-Output (or not) what is being done on standard error. Off by default.
+Output (or not) what the program is doing to standard error; off by default.
=item C<--ignore> I<regexp>
-Ignore lines in the TeX output matching (Perl) I<regexp>. Can be
-repeated. Adds to the default set of ignore regexps rather than
-replacing. These regexps are not automatically anchored (or otherwise
-altered), simply used as-is.
+Ignore lines in the TeX output matching (Perl) I<regexp>. Can be
+repeated. Adds to the default set of ignore regexps rather than
+replacing. Like the acceptance regexps, these are not automatically
+anchored (or otherwise altered).
=item C<--interactive>
@@ -344,14 +374,14 @@ altered), simply used as-is.
By default, standard input to the TeX process is closed so that TeX's
interactive mode (waiting for input upon error, the C<*> prompt, etc.)
-is never entered. Giving C<--interactive> allows interaction to happen.
+is never entered. Giving C<--interactive> allows interaction to happen.
=item C<--quiet>
=item C<--no-quiet>
-By default, the TeX command being invoked is reported on standard output.
-C<--quiet> omits that reporting. To get a completely silent run,
+By default, the TeX command being invoked is reported on standard
+output. C<--quiet> omits that reporting. To get a completely silent run,
redirect standard output: S<C<texfot ... E<gt>/dev/null>>. (The only
messages to standard error should be errors from C<texfot> itself, so it
shouldn't be necessary to redirect that, but of course that can be done
@@ -362,13 +392,13 @@ as well.)
=item C<--no-stderr>
The default is for C<texfot> to report everything written to stderr by
-the TeX command (on stdout). C<--no-stderr> omits that reporting.
-(Some programs, C<dvisvgm> is one, can be rather verbose on stderr.)
+the TeX command (on stdout). C<--no-stderr> omits that reporting. (Some
+programs, C<dvisvgm> is one, can be rather verbose on stderr.)
=item C<--tee> I<file>
By default, the output being filtered is C<tee>-ed, before filtering, to
-make it easy to check the full output in case of problems.
+make it easy to check the full output in case of problems.
The default I<file> is C<$TMPDIR/fot.>I<uid>; if C<TMPDIR> is not set,
C<TMP> is used if set; if neither is set, the default directory is
@@ -393,19 +423,18 @@ Display this help and exit successfully.
I wrote this because, in my work as a TUGboat editor
(L<https://tug.org/TUGboat>, journal submissions always welcome!), I run
-and rerun many documents, many times each. It was easy to lose
-warnings I needed to see in the mass of unvarying and uninteresting
-output from TeX, such as style files being read and fonts being used. I
-wanted to see all and only those messages which needed some action by
-me.
+and rerun many documents, many times each. It was easy to lose warnings
+I needed to see in the mass of unvarying and uninteresting output from
+TeX, such as style files being read and fonts being used. I wanted to
+see all and only those messages which needed some action by me.
I found some other programs of a similar nature, the LaTeX package
C<silence>, and plenty of other (La)TeX wrappers, but it seemed none of
-them did what I wanted. Either they read the log file (I wanted the
-online output only), or they output more or less than I wanted, or they
-required invoking TeX differently (I wanted to keep my build process
-exactly the same, most critically the TeX invocation, which can get
-complicated). Hence I wrote this.
+them did what I wanted. Either they read the log file (I wanted to look
+at only the online output), or they output more or less than I wanted,
+or they required invoking TeX differently (I wanted to keep my build
+process exactly the same, most critically the TeX invocation, which can
+get complicated). Hence I wrote this little script.
Here are some keywords if you want to explore other options:
texloganalyser, pydflatex, logfilter, latexmk, rubber, arara, and
@@ -417,17 +446,17 @@ don't support C<texfot> there.
The name comes from the C<trip.fot> and C<trap.fot> files that are part
of Knuth's trip and trap torture tests, which record the online output
-from the programs. I am not sure what "fot" stands for in trip and
-trap, but I can pretend that it stands for "filter online transcript" in
-the present S<case :).>
+from the programs. I am not sure what "fot" stands for in trip and trap,
+but I can pretend that it stands for "filter online transcript" in the
+present S<case :).>
=head1 AUTHORS AND COPYRIGHT
This script and its documentation were written by Karl Berry and both
-are released to the public domain. Email C<karl@freefriends.org> with
-bug reports. It has no home page beyond the package on CTAN:
+are released to the public domain. Email C<karl@freefriends.org> with
+bug reports. It has no home page beyond the package page on CTAN:
L<https://ctan.org/pkg/texfot>.
- $Id: texfot,v 1.45 2022/02/17 18:42:02 karl Exp $
+ $Id: texfot,v 1.47 2022/09/24 16:38:13 karl Exp $
=cut
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 36e6f229d8..23a6ed48a5 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=1663964548
+date=1664050592
lastupd=miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-x64-2.9 miktex-cjkutils-bin-x64-2.9 miktex-console-bin-x64-2.9 miktex-curl-bin-x64-2.9 miktex-cweb-bin-x64-2.9 miktex-devnag-bin-x64-2.9 miktex-doc miktex-dvicopy-bin-x64-2.9 miktex-dvipdfmx-bin-x64-2.9 miktex-dvipng-bin-x64-2.9 miktex-dvips-bin-x64-2.9
-lstdigest=8410ee0782b61cf63c5bac68fd710538
+lstdigest=389671c719e8268137bbc2c5af40c7d1
numpkg=6004
relstate=next
-version=8301
+version=8302
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: L/BF4WAqtrpgjYhylm0GCOOis5H4Q90docTz/+5johOENzPSkgFjdgLrEEWKzuTqYty8QAlf1aW4hN/OHvwvEy0BjQ1RRxCGBv5K5YxwqKEarSYzkAKteU3QwIk0IZI+b34R88r3n66PTKjp/+nYLcr97sUm7pZF8wbZyF8OULuwFNFpc+F8NdBajkdzCarWJMn5Pwl5GL75Hb10zsq5eYL9CSl08aRhCGNExJv+GfAP1/oKleTDUqgtCyJAtxoQlj2kJFsE7MFN79V2f/onf3NTk35Hy9StEi2F2SMxwX3xfhB7akxfJyTuSsF3z6p9152uElk9gcG0CzmwJUbemw==
+;;;; signature/miktex: e70Kxpu88EmTBIfLaSH6PXxejCCZsvbYU/JiJ9d3wjIHpBC+eCGMJBVx0zKhgmZwBOm6HI/gUcLJKQg/OWsz9T3eBCsY8HknzlxpCL82Niz93PoOEXhuKEAPSMpliq5eMt0q/Fjq/mmbfhQ+79nl/xb/pIor+DZF1NhWaA6jMmU9ZJscsP4+rfGLoT5xbMV/E7g7yXrUo/VKQ/tUBAbGQespHHaE1C8ZxY/tevpAxP7BCnK83E/UCzf/kCsSeNzt/tVdyTl8TmLzdRQxIhP4jQ73bIrBy1N7Qzn1S3mRxecflf0PYoxgDW+cHsg+7xwJdwiYpmUo5X+MNRPgL8H4Ww==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index cd7921b2b4..f812897a5f 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1663963902
+date=1664050299
lastupd=abspos abspos__doc abspos__source alegreya alegreya__doc animate animate__doc asmeconf asmeconf__doc asmeconf__source atkinson atkinson__doc babel babel__doc babel__source beamer beamer__doc beamertheme-tcolorbox beamertheme-tcolorbox__doc beamertheme-tcolorbox__source
-lstdigest=7607ae977525dac6f05f37bff4a324a9
+lstdigest=3fe425dd88799515168da326fd6cb6a6
numpkg=6004
relstate=stable
-version=8301
+version=8302
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: wpuXVkoU6lC8J24wXr2Dq1Rj84uDzh1peRWBtHeokb/vpd2n8sDEBkUU2sZf7pYkU9NS+4fbeWR/Yk1X4RVOO8oRcHEUbSVtg+w3c63gw6352W9oVGEoNjpNtq2iNm0JxqTpZ5MpH5zyK/aR+ilE/VJ+P/r9gzUnnE26Gg4MvMdYsIoMdgDGWgcHyQccylEPRNc+hJauCQ9+qlhHjs/ShzP2cXEVSe7VG89ratox0rmTM9YFjJ+WMSySd4iSsKaj9OvCGfjklSPJDMWjvkrHRtjiPp9JtZk74Ve8foHh2vXKXI+0Sjn7/D8yrZ0rhxUpiiuzG95X1k8H21nAws8lIA==
+;;;; signature/miktex: gFFW2bzj/liZ1kyXlNounQhJE5JJhdCqyetbQUAe/ZHnHqVLJOziJGnQD4Gj7OjELNsOLGGMH/5sbxfDpO+Pbml6ZJmziJGDAZotv+nZbG9NyUbH0wP0vK4bPYqOjQ1ttd1LtZxL424/Q5rKzdO68HjAOlewOQ/7Z4cmSioMyRaK0M6r0tlPNQm+Z4ifzrPKwL7TnTcGHI84CwMP5DXYDDIjcDQI5Mu1XtFlYRHXTDtDOEYo15RS8FOJayLxJTfn+yN4+/Q4Y8xvgR5phohL6XVRqUjNBuidzXN77bBa2CKSgulRt+tA1swSiguQw4J2Kj3GH10ZdLp8Zdcepd/wJg==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/timestamp b/timestamp
index 6bbcaa3cda..363c119f7a 100644
--- a/timestamp
+++ b/timestamp
@@ -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:
-2022-09-24-02-02
+2022-09-25-02-02