summaryrefslogtreecommitdiff
path: root/macros/context
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-10-14 03:01:20 +0000
committerNorbert Preining <norbert@preining.info>2023-10-14 03:01:20 +0000
commit315010c30c0dab68a71ca741364438a7a0b1261f (patch)
tree1892d65e76bc025eede34669c33667d1e8c1f218 /macros/context
parent7c1335b7f300ea31a40bf83026d6b7d24d7bafc5 (diff)
CTAN sync 202310140301
Diffstat (limited to 'macros/context')
-rw-r--r--macros/context/contrib/context-account/VERSION1
-rw-r--r--macros/context/contrib/context-account/doc/context/third/account/README13
-rw-r--r--macros/context/contrib/context-account/doc/context/third/account/account-doc.pdfbin115510 -> 0 bytes
-rw-r--r--macros/context/contrib/context-account/tex/context/interface/third/t-account.xml147
-rw-r--r--macros/context/contrib/context-account/tex/context/third/account/t-account.mkii38
-rw-r--r--macros/context/contrib/context-account/tex/context/third/account/t-account.mkiv84
-rw-r--r--macros/context/contrib/context-account/tex/context/third/account/t-account.tex439
-rw-r--r--macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkii68
-rw-r--r--macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkiv37
-rw-r--r--macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.tex78
-rw-r--r--macros/context/contrib/context-algorithmic/VERSION1
-rw-r--r--macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkii160
-rw-r--r--macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkiv317
-rw-r--r--macros/context/contrib/context-animation/VERSION1
-rw-r--r--macros/context/contrib/context-animation/doc/context/third/animation/README32
-rw-r--r--macros/context/contrib/context-animation/tex/context/interface/third/t-animation.xml77
-rw-r--r--macros/context/contrib/context-animation/tex/context/third/animation/t-animation.mkvi363
-rw-r--r--macros/context/contrib/context-annotation/VERSION1
-rw-r--r--macros/context/contrib/context-annotation/doc/context/third/annotation/README35
-rw-r--r--macros/context/contrib/context-annotation/doc/context/third/annotation/annotation-doc.pdfbin50341 -> 0 bytes
-rw-r--r--macros/context/contrib/context-annotation/tex/context/interface/third/t-annotation.xml163
-rw-r--r--macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.lua151
-rw-r--r--macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.mkvi1077
-rw-r--r--macros/context/contrib/context-bnf/VERSION1
-rw-r--r--macros/context/contrib/context-bnf/doc/context/third/bnf/NEWS28
-rw-r--r--macros/context/contrib/context-bnf/doc/context/third/bnf/README39
-rw-r--r--macros/context/contrib/context-bnf/doc/context/third/bnf/t-bnf.pdfbin280331 -> 0 bytes
-rw-r--r--macros/context/contrib/context-bnf/tex/context/third/bnf/t-bnf.tex195
-rw-r--r--macros/context/contrib/context-chromato/VERSION1
-rw-r--r--macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-demo.pdfbin162815 -> 0 bytes
-rw-r--r--macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-doc.pdfbin81559 -> 0 bytes
-rw-r--r--macros/context/contrib/context-chromato/tex/context/third/chromato/t-chromato.tex130
-rw-r--r--macros/context/contrib/context-cmscbf/VERSION1
-rw-r--r--macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-demo.pdfbin51786 -> 0 bytes
-rw-r--r--macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-doc.pdfbin123339 -> 0 bytes
-rw-r--r--macros/context/contrib/context-cmscbf/tex/context/third/cmscbf/t-cmscbf.tex42
-rw-r--r--macros/context/contrib/context-cmttbf/VERSION1
-rw-r--r--macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-demo.pdfbin49412 -> 0 bytes
-rw-r--r--macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-doc.pdfbin124156 -> 0 bytes
-rw-r--r--macros/context/contrib/context-cmttbf/tex/context/third/cmttbf/t-cmttbf.tex45
-rw-r--r--macros/context/contrib/context-collatingmarks/LICENSE1
-rw-r--r--macros/context/contrib/context-collatingmarks/README.md17
-rw-r--r--macros/context/contrib/context-collatingmarks/VERSION1
-rw-r--r--macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/README.md46
-rw-r--r--macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.pdfbin140294 -> 0 bytes
-rw-r--r--macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.tex3
-rw-r--r--macros/context/contrib/context-collatingmarks/tex/context/third/collating-marks/t-collatingmarks.mkiv174
-rw-r--r--macros/context/contrib/context-construction-plan/VERSION1
-rw-r--r--macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-demo.pdfbin407738 -> 0 bytes
-rw-r--r--macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-doc.pdfbin77353 -> 0 bytes
-rw-r--r--macros/context/contrib/context-construction-plan/tex/context/third/construction-plan/t-construction-plan.tex150
-rw-r--r--macros/context/contrib/context-degrade/VERSION1
-rw-r--r--macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-demo.pdfbin20889 -> 0 bytes
-rw-r--r--macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-doc.pdfbin169975 -> 0 bytes
-rw-r--r--macros/context/contrib/context-degrade/tex/context/third/degrade/t-degrade.tex163
-rw-r--r--macros/context/contrib/context-enigma/VERSION1
-rw-r--r--macros/context/contrib/context-enigma/doc/context/third/enigma/COPYING22
-rw-r--r--macros/context/contrib/context-enigma/doc/context/third/enigma/enigma_manual.tex498
-rw-r--r--macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-context.tex59
-rw-r--r--macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-latex.tex53
-rw-r--r--macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-plain.tex50
-rw-r--r--macros/context/contrib/context-enigma/doc/context/third/enigma/manual-v0.1.pdfbin0 -> 265288 bytes
-rw-r--r--macros/context/contrib/context-enigma/scripts/context/lua/third/enigma/mtx-t-enigma.lua72
-rw-r--r--macros/context/contrib/context-enigma/tex/context/third/enigma/t-enigma.mkvi157
-rw-r--r--macros/context/contrib/context-enigma/tex/generic/enigma/enigma.lua1662
-rw-r--r--macros/context/contrib/context-enigma/tex/latex/enigma/enigma.sty7
-rw-r--r--macros/context/contrib/context-enigma/tex/plain/enigma/enigma.tex130
-rw-r--r--macros/context/contrib/context-fancybreak/VERSION1
-rw-r--r--macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/README35
-rw-r--r--macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/fancybreak-doc.pdfbin193087 -> 0 bytes
-rw-r--r--macros/context/contrib/context-fancybreak/tex/context/interface/third/t-fancybreak.xml81
-rw-r--r--macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkii272
-rw-r--r--macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkvi493
-rw-r--r--macros/context/contrib/context-french/VERSION1
-rw-r--r--macros/context/contrib/context-french/doc/context/third/french/french-demo.pdfbin29058 -> 0 bytes
-rw-r--r--macros/context/contrib/context-french/doc/context/third/french/french-doc.pdf15251
-rw-r--r--macros/context/contrib/context-french/tex/context/third/french/t-french.mkiv98
-rw-r--r--macros/context/contrib/context-fullpage/VERSION1
-rw-r--r--macros/context/contrib/context-fullpage/doc/context/third/fullpage/README24
-rw-r--r--macros/context/contrib/context-fullpage/doc/context/third/fullpage/fullpage-doc.pdfbin159117 -> 0 bytes
-rw-r--r--macros/context/contrib/context-fullpage/tex/context/interface/third/t-fullpage.xml27
-rw-r--r--macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkii321
-rw-r--r--macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkiv325
-rw-r--r--macros/context/contrib/context-gantt/VERSION1
-rw-r--r--macros/context/contrib/context-gantt/doc/context/third/gantt/README22
-rw-r--r--macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-1.tex19
-rw-r--r--macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-2.tex25
-rw-r--r--macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-3.tex19
-rw-r--r--macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-4.tex22
-rw-r--r--macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-5.tex32
-rw-r--r--macros/context/contrib/context-gantt/doc/context/third/gantt/gantt.txt63
-rw-r--r--macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-mp.tex369
-rw-r--r--macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-tikz.tex312
-rw-r--r--macros/context/contrib/context-gantt/tex/context/third/gantt/t-gantt.tex23
-rw-r--r--macros/context/contrib/context-inifile/VERSION1
-rw-r--r--macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-demo.pdfbin8844 -> 0 bytes
-rw-r--r--macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-doc.pdfbin79148 -> 0 bytes
-rw-r--r--macros/context/contrib/context-inifile/tex/context/third/inifile/t-inifile.tex221
-rw-r--r--macros/context/contrib/context-layout/VERSION1
-rw-r--r--macros/context/contrib/context-layout/doc/context/third/layout/t-layout.pdfbin216930 -> 0 bytes
-rw-r--r--macros/context/contrib/context-layout/tex/context/third/layout/t-layout.tex411
-rw-r--r--macros/context/contrib/context-lua-widow-control/VERSION1
-rw-r--r--macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/README.md51
-rw-r--r--macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lua-widow-control.pdfbin0 -> 579606 bytes
-rw-r--r--macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lwc-zpravodaj.pdfbin0 -> 377831 bytes
-rw-r--r--macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/tb133chernoff-widows.pdfbin0 -> 519495 bytes
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/CHANGELOG.md186
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual-samples.tex178
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.bib80
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.mkxl371
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.tex949
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj-figure.ctx161
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.bib237
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.ltx1720
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-figure.ctx166
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-plot.dat1575
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.bib219
-rw-r--r--macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.ltx1465
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkiv1
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl171
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control-2022-02-22.sty103
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control.sty331
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.lua1781
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.tex119
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/optex/lua-widow-control/lua-widow-control.opm88
-rw-r--r--macros/context/contrib/context-lucida-bright-support/VERSION1
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbma.tfmbin0 -> 1496 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmad.tfmbin0 -> 1524 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmd.tfmbin0 -> 2340 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdi.tfmbin0 -> 2496 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdo.tfmbin0 -> 2496 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbme.tfmbin0 -> 1752 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmi.tfmbin0 -> 2368 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmo.tfmbin0 -> 2420 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmr.tfmbin0 -> 2296 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbms.tfmbin0 -> 1824 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmsd.tfmbin0 -> 1860 bytes
-rw-r--r--macros/context/contrib/context-lucida-bright-support/tex/context/luc/type-luc.tex386
-rw-r--r--macros/context/contrib/context-rst/VERSION1
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/OMakefile41
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/OMakefile.omcbin1266 -> 0 bytes
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/documentation.rst689
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/hybridtest.tex42
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/inc-first.rst14
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/inc-second.rst9
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/inc-third.rst14
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/inc.tex11
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/manual.bib10
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/manual.pdfbin118130 -> 0 bytes
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/manual.tex141
-rw-r--r--macros/context/contrib/context-rst/doc/context/third/rst/moduletest.tex9
-rw-r--r--macros/context/contrib/context-rst/scripts/context/lua/third/rst/mtx-t-rst.lua64
-rw-r--r--macros/context/contrib/context-rst/tex/context/interface/third/t-rst.xml83
-rw-r--r--macros/context/contrib/context-rst/tex/context/third/rst/rst_context.lua1326
-rw-r--r--macros/context/contrib/context-rst/tex/context/third/rst/rst_directives.lua381
-rw-r--r--macros/context/contrib/context-rst/tex/context/third/rst/rst_helpers.lua657
-rw-r--r--macros/context/contrib/context-rst/tex/context/third/rst/rst_parser.lua1635
-rw-r--r--macros/context/contrib/context-rst/tex/context/third/rst/rst_setups.lua377
-rw-r--r--macros/context/contrib/context-rst/tex/context/third/rst/t-rst.mkiv241
-rw-r--r--macros/context/contrib/context-ruby/VERSION1
-rw-r--r--macros/context/contrib/context-ruby/doc/context/third/ruby/README43
-rw-r--r--macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkii286
-rw-r--r--macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkiv283
-rw-r--r--macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkvi393
-rw-r--r--macros/context/contrib/context-simplefonts/VERSION1
-rw-r--r--macros/context/contrib/context-simplefonts/doc/context/third/simplefonts/README40
-rw-r--r--macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.lua228
-rw-r--r--macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkii400
-rw-r--r--macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkiv812
-rw-r--r--macros/context/contrib/context-squares/LICENSE21
-rw-r--r--macros/context/contrib/context-squares/README.md43
-rw-r--r--macros/context/contrib/context-squares/VERSION1
-rw-r--r--macros/context/contrib/context-squares/tex/context/third/squares/t-squares.lua306
-rw-r--r--macros/context/contrib/context-squares/tex/context/third/squares/t-squares.mklx194
-rw-r--r--macros/context/contrib/context-title/VERSION1
-rw-r--r--macros/context/contrib/context-title/doc/context/third/title/title-doc.pdfbin25415 -> 0 bytes
-rw-r--r--macros/context/contrib/context-title/tex/context/interface/third/t-title.xml79
-rw-r--r--macros/context/contrib/context-title/tex/context/third/title/t-title.mkvi130
-rw-r--r--macros/context/contrib/context-typearea/VERSION1
-rw-r--r--macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-demo.pdfbin4125 -> 0 bytes
-rw-r--r--macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-doc.pdfbin75801 -> 0 bytes
-rw-r--r--macros/context/contrib/context-typearea/tex/context/third/typearea/t-typearea.tex99
-rw-r--r--macros/context/contrib/context-urwgaramond/VERSION1
-rw-r--r--macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.pdfbin83796 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.tex11
-rw-r--r--macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/texnansi-urw-garamond.tex80
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/map/pdftex/context/texnansi-urw-garamond.map14
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmm8a.tfmbin1472 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmmi8a.tfmbin1656 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmr8a.tfmbin1472 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmri8a.tfmbin1684 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmm8a.tfmbin6380 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmmi8a.tfmbin6644 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmr8a.tfmbin6300 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmri8a.tfmbin6644 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmm8a.vfbin1784 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmmi8a.vfbin1788 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmr8a.vfbin1784 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmri8a.vfbin1788 -> 0 bytes
-rw-r--r--macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/t-urwgaramond.tex16
-rw-r--r--macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/type-urwgaramond.tex94
201 files changed, 13616 insertions, 31552 deletions
diff --git a/macros/context/contrib/context-account/VERSION b/macros/context/contrib/context-account/VERSION
deleted file mode 100644
index 5b759c095f..0000000000
--- a/macros/context/contrib/context-account/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2009.02.06
diff --git a/macros/context/contrib/context-account/doc/context/third/account/README b/macros/context/contrib/context-account/doc/context/third/account/README
deleted file mode 100644
index 5fe4b0bef1..0000000000
--- a/macros/context/contrib/context-account/doc/context/third/account/README
+++ /dev/null
@@ -1,13 +0,0 @@
-ConTeXt module to create T-Accounts
-
-To use the module you could use the two predefined environment
-'TACCOUNT' and 'TKONTO' or you could define your own with
-the command \defineACCOUNT.
-
-The background is drawn from TeX but it is possible to draw
-a more fancy layout with MetaPost, the module itself comes
-with the style 'account' you could use as a example for your
-own graphic.
-
-The module is copyrighted by Wolfgang Schuster and publishes
-under public domain.
diff --git a/macros/context/contrib/context-account/doc/context/third/account/account-doc.pdf b/macros/context/contrib/context-account/doc/context/third/account/account-doc.pdf
deleted file mode 100644
index a40c0262f8..0000000000
--- a/macros/context/contrib/context-account/doc/context/third/account/account-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-account/tex/context/interface/third/t-account.xml b/macros/context/contrib/context-account/tex/context/interface/third/t-account.xml
deleted file mode 100644
index e1c94bd353..0000000000
--- a/macros/context/contrib/context-account/tex/context/interface/third/t-account.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2006.07.14">
-
-<cd:command name="debits" type="environment" file="wolf-mis">
- <cd:sequence>
- <cd:string value="DEBITS"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments list="yes">
- <cd:parameter name="color">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="debit" file="wolf-mis.tex">
- <cd:sequence>
- <cd:string value="debit"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords optional="yes">
- <cd:constant type="cd:text"/>
- </cd:keywords>
- <cd:content/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="credits" type="environment" file="wolf-mis">
- <cd:sequence>
- <cd:string value="CREDITS"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments list="yes">
- <cd:parameter name="color">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="credit" file="wolf-mis.tex">
- <cd:sequence>
- <cd:string value="credit"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords optional="yes">
- <cd:constant type="cd:text"/>
- </cd:keywords>
- <cd:content/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="account" type="environment" file="wolf-mis">
- <cd:sequence>
- <cd:string value="ACCOUNT"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords>
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments optional="yes" list="yes">
- <cd:inherit name="setupACCOUNT"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setupaccount" file="wolf-mis.tex">
- <cd:sequence>
- <cd:string value="setupACCOUNT" />
- </cd:sequence>
- <cd:arguments>
- <cd:keywords>
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments list="yes">
- <cd:parameter name="frame">
- <cd:constant type="on"/>
- <cd:constant type="off" default="yes"/>
- <cd:constant type="none"/>
- <cd:constant type="overlay"/>
- </cd:parameter>
- <cd:parameter name="background">
- <cd:constant type="screen"/>
- <cd:constant type="color"/>
- <cd:constant type="none"/>
- <cd:constant type="foreground"/>
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="backgroundscreen">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="backgroundcolor">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="backgroundoffset">
- <cd:constant type="frame"/>
- <cd:constant type="cd:dimension"/>
- </cd:parameter>
- <cd:parameter name="rulethickness">
- <cd:constant type="cd:dimension"/>
- </cd:parameter>
- <cd:parameter name="framecolor">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="offset">
- <cd:constant type="none"/>
- <cd:constant type="overlay"/>
- <cd:constant type="default"/>
- <cd:constant type="cd:dimension"/>
- </cd:parameter>
- <cd:parameter name="width">
- <cd:constant type="fit" default="yes"/>
- <cd:constant type="cd:dimension"/>
- </cd:parameter>
- <cd:parameter name="left">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="middle">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="right">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="distance">
- <cd:constant type="cd:dimension"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="defineaccount" file="wolf-mis.tex">
- <cd:sequence>
- <cd:string value="defineACCOUNT"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords>
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments optional="yes" list="yes">
- <cd:inherit name="setupACCOUNT"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-</cd:interface>
diff --git a/macros/context/contrib/context-account/tex/context/third/account/t-account.mkii b/macros/context/contrib/context-account/tex/context/third/account/t-account.mkii
deleted file mode 100644
index ae4785a9af..0000000000
--- a/macros/context/contrib/context-account/tex/context/third/account/t-account.mkii
+++ /dev/null
@@ -1,38 +0,0 @@
-%D \module
-%D [ file=t-account,
-%D version=2007.01.15, % last change: 2008.02.13
-%D title=\CONTEXT\ User Module,
-%D subtitle=Miscelaneous,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\unprotect
-
-\defineXMLpickup [account] [name=TACCOUNT]
- {\startACCOUNT
- [\XMLpar{account}{name}{TACCOUNT}]
- [calculate=\XMLpar{account}{calculate}{no},
- left=\XMLpar{account}{left}{},
- middle=\XMLpar{account}{middle}{},
- right=\XMLpar{account}{right}{},
- background=\XMLpar{account}{background}{},
- rule=\XMLpar{account}{rule}{on},
- framecolor=\XMLpar{account}{framecolor}{black}]}
- {\stopACCOUNT}
-
-\defineXMLpickup [debits]
- \startDEBITS
- \stopDEBITS
-
-\defineXMLpickup [credits]
- \startCREDITS
- \stopCREDITS
-
-\defineXMLsingular [debit] {\debit[\XMLpar{debit}{text}{}]{\XMLpar{debit}{value}{}}}
-
-\defineXMLsingular [credit] {\credit[\XMLpar{credit}{text}{}]{\XMLpar{credit}{value}{}}}
-
-\protect \endinput
diff --git a/macros/context/contrib/context-account/tex/context/third/account/t-account.mkiv b/macros/context/contrib/context-account/tex/context/third/account/t-account.mkiv
deleted file mode 100644
index 6beb50b3ee..0000000000
--- a/macros/context/contrib/context-account/tex/context/third/account/t-account.mkiv
+++ /dev/null
@@ -1,84 +0,0 @@
-%D \module
-%D [ file=t-account,
-%D version=2007.01.15, % last change: 2008.02.13
-%D title=\CONTEXT\ User Module,
-%D subtitle=Miscelaneous,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\unprotect
-
-\startxmlsetups xml:account
- \xmlsetsetup{\xmldocument}{account|debits|credits|debit|credit}{*}
-\stopxmlsetups
-
-\xmlregistersetup{xml:account}
-
-\startxmlsetups account
-
- \bgroup
-
- \startcollecting
-
- \startcollect\startACCOUNT\stopcollect
- \doifelsenothing{\xmlatt{#1}{name}}
- {\startcollect[TACCOUNT]\stopcollect}
- {\startexpandedcollect[\xmlatt{#1}{name}]\stopexpandedcollect}
- \startcollect[\stopcollect
- \doifsomething{\xmlatt{#1}{background}}{\startexpandedcollect background=\xmlatt{#1}{background},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{backgroundcolor}}{\startexpandedcollect backgroundcolor=\xmlatt{#1}{backgroundcolor},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{backgroundoffset}}{\startexpandedcollect backgroundoffset=\xmlatt{#1}{backgroundoffset},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{backgroundscreen}}{\startexpandedcollect backgroundscreen=\xmlatt{#1}{backgroundscreen},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{frame}}{\startexpandedcollect frame=\xmlatt{#1}{frame},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{framecolor}}{\startexpandedcollect framecolor=\xmlatt{#1}{framecolor},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{offset}}{\startexpandedcollect offset=\xmlatt{#1}{offset},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{calculate}}{\startexpandedcollect calculate=\xmlatt{#1}{calculate},\stopexpandedcollect}
- \doifsomething{\xmlatt{#1}{rule}}{\startexpandedcollect rule=\xmlatt{#1}{rule},\stopexpandedcollect}
- \startcollect]\stopcollect
-
- \xmlflush{#1}
-
- \startcollect\stopACCOUNT\stopcollect
-
- \stopcollecting
-
- \egroup
-
-\stopxmlsetups
-
-\startxmlsetups debits
-
- \startcollect\startDEBITS\stopcollect
- \xmlflush{#1}
- \startcollect\stopDEBITS\stopcollect
-
-\stopxmlsetups
-
-\startxmlsetups debit
-
- \startexpandedcollect
- \noexpand\debit[\xmlatt{#1}{text}]{\xmlatt{#1}{value}}
- \stopexpandedcollect
-
-\stopxmlsetups
-
-\startxmlsetups credits
-
- \startcollect\startCREDITS\stopcollect
- \xmlflush{#1}
- \startcollect\stopCREDITS\stopcollect
-
-\stopxmlsetups
-
-\startxmlsetups credit
-
- \startexpandedcollect
- \noexpand\credit[\xmlatt{#1}{text}]{\xmlatt{#1}{value}}
- \stopexpandedcollect
-
-\stopxmlsetups
-
-\protect \endinput
diff --git a/macros/context/contrib/context-account/tex/context/third/account/t-account.tex b/macros/context/contrib/context-account/tex/context/third/account/t-account.tex
deleted file mode 100644
index 625d436b23..0000000000
--- a/macros/context/contrib/context-account/tex/context/third/account/t-account.tex
+++ /dev/null
@@ -1,439 +0,0 @@
-%D \module
-%D [ file=t-account,
-%D version=2007.01.15, % last change: 2009.02.06
-%D title=\CONTEXT\ User Module,
-%D subtitle=Miscelaneous,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-%M \usemodule [account]
-%M \loadsetups[t-account.xml]
-
-\writestatus{loading}{Context User Module / Miscelaneous}
-
-\unprotect
-
-\usemodule[floatnumber]
-
-\def\????ac{@@@@ac} % Account
-
-%D This is the second version of my T-Account module. If I want
-%D to be true I wrote this module the n-th time but the current
-%D version is my second version that has all things implemented
-%D that I wanted and is written as a real \CONTEXT\ module and
-%D in a simple plain \TEX\ style, although it is sometimes better
-%D to try writing things for plain \TEX\ and creating an extended
-%D for \CONTEXT\ later, after everything works.
-
-%D The next two count registers save the values for the values
-%D from the \tex{debit} and \tex{credit} macros. You can output
-%D the values at the end of the account.
-
-\definefloatnumber[creditvalue][\c!command=\accountparameter\c!numbercommand]
-\definefloatnumber[debitvalue] [\c!command=\accountparameter\c!numbercommand]
-
-\definefloatnumber[creditsum][\c!command=\accountparameter\c!numbercommand]
-\definefloatnumber[debitsum] [\c!command=\accountparameter\c!numbercommand]
-
-%D The following dimens are needed to save the textwidth in the
-%D first run with my account parser and feed these values into
-%D the account boxes, most of them only needed for the
-%D \mono{width=fit} option.
-
-\newdimen\!!debitwidth
-\newdimen\!!debitheight
-\newdimen\!!creditwidth
-\newdimen\!!creditheight
-\newdimen\!!accountwidth
-\newdimen\!!accountheight
-\newdimen\!!debittextwidth
-\newdimen\!!debitnumberwidth
-\newdimen\!!credittextwidth
-\newdimen\!!creditnumberwidth
-
-%D I collect the content from the debit environment in an box and
-%D put the content into the main box, after all values are collected.
-%D The same happens for the credit environment and his content.
-
-\newbox\debitbox
-\newbox\creditbox
-
-%D And the last thing is a private token register to save the account
-%D content and use it for both parsing the content and using it afterwards
-%D to fill the box with the processed content.
-
-\newtoks\accounttoks
-
-%D This nice thing was taken from \mono{core-rul.tex}.
-
-\def\accountparameter#1%
- {\csname\@@account#1\endcsname}
-
-%D \macros{startACCOUNT,stopACCOUNT}
-%D
-%D \showsetup{startaccount}
-
-%D My first version used a buffers to store the content between the
-%D \tex{startACCOUNT} \unknown\ \tex{stopACCOUNT} pair. This has
-%D worked untill I tried to put the environment into a float or to
-%D put a few of them side by side in an \mono{combination} environment.
-%D A solution for this problems could have been to call the output
-%D from my \mono{ACCOUNT} environment by a command like \tex{useACCOUNT}
-%D like the \mono{MPgraphics}, but is was not what I wanted and the
-%D only solution for this was to use an delimited environment on the
-%D one side or collext the text into braces like \tex{ACCOUNT{}} on
-%D the other side. The second way would have made it easier to define
-%D new macros to for the account with presets with the sideeffect to
-%D enclose the content with braces. The first way avoids braces and
-%D uses delimitercommands instead, more to write and harder to define
-%D wrapper macros (in the way I like) but I prefered this solution
-%D as shown below.
-
-\def\startACCOUNT
- {\dodoubleempty\dostartACCOUNT}
-
-\long\def\dostartACCOUNT[#1][#2]#3\stopACCOUNT
- {\bgroup
- \edef\@@account{\????ac#1}%
- \ifsecondargument
- \setupACCOUNT[#1][#2]%
- \fi
- \edef\accountwidth {\accountparameter\c!width}%
- \edef\accountdistance {\accountparameter\c!distance}%
- \resetfloatnumber[creditsum]%
- \resetfloatnumber[debitsum]%
- \def\creditsum{\getfloatnumber[creditsum]}%
- \def\debitsum {\getfloatnumber[debitsum]}%
- \doifvaluesomething{\accountparameter\c!bodyfont}
- {\expanded{\switchtobodyfont
- [\accountparameter\c!bodyfont]}}%
- \parseACCOUNT{#3}%
- \doifnot\accountwidth\v!fit
- {\global\!!accountwidth\the\dimexpr\accountwidth\relax
- \global\advance\!!accountwidth-\accountdistance
- \global\!!accountwidth0.5\!!accountwidth}%
- #3\removeunwantedspaces
- \checkACCOUNT
- \presetlocalframed[\????ac]%
- \localframed
- [\????ac]
- [\c!background=\accountparameter\c!background,
- \c!backgroundcolor=\accountparameter\c!backgroundcolor,
- \c!backgroundoffset=\accountparameter\c!backgroundoffset,
- \c!backgroundscreen=\accountparameter\c!backgroundscreen,
- \c!frame=\accountparameter\c!frame,
- \c!framecolor=\accountparameter\c!framecolor,
- \c!offset=\accountparameter\c!offset]
- \bgroup
- \setbox\scratchbox\vbox
- {\offinterlineskip
- \doifelsenothing
- {\accountparameter\c!left%
- \accountparameter\c!middle%
- \accountparameter\c!right}
- {\xdef\MPaccountheaderheight{\the\zeropoint}}
- {\setbox\scratchbox\hbox\!!to\dimexpr2\!!accountwidth+\accountdistance\relax
- {\doif{\accountparameter\c!strut}\v!yes\strut
- \rlap{\accountparameter\c!left}\hfil
- \accountparameter\c!middle\hfil
- \llap{\accountparameter\c!right}}%
- \xdef\MPaccountheaderheight{\the\dimexpr\ht\scratchbox+\dp\scratchbox\relax}%
- \box\scratchbox}
- \doifelse{\accountparameter\c!rule}\v!on
- {\doifsomething{\accountparameter\c!framecolor}
- {\color[\accountparameter\c!framecolor]}
- {\hrule\!!height\accountparameter\c!rulethickness\relax}}
- {\vskip\accountparameter\c!rulethickness\relax}%
- \hbox{\box\debitbox\betweenaccount\box\creditbox}%
- \doifelse{\accountparameter\c!calculate}\v!yes
- {\setbox\scratchbox\vbox
- {\doifelse{\accountparameter\c!rule}\v!on
- {\doifsomething{\accountparameter\c!framecolor}
- {\color[\accountparameter\c!framecolor]}
- {\hrule\!!height\accountparameter\c!rulethickness\relax}}
- {\vskip\accountparameter\c!rulethickness\relax}
- \hbox
- {\hbox\!!to\!!accountwidth
- {\doif{\accountparameter\c!strut}\v!yes\strut%
- \hfil\debitsum}%
- \spacebetweenaccount
- \hbox\!!to\!!accountwidth
- {\doif{\accountparameter\c!strut}\v!yes\strut%
- \hfil\creditsum}}}%
- \xdef\MPaccountfooterheight{\the\dimexpr\ht\scratchbox+\dp\scratchbox\relax}%
- \box\scratchbox}
- {\xdef\MPaccountfooterheight{\the\zeropoint}}}%
- \xdef\MPaccountmaxheight{\the\dimexpr\ht\scratchbox+\dp\scratchbox\relax}%
- \xdef\MPaccountmaxwidth {\the\wd\scratchbox}%
- \box\scratchbox
- \egroup
- \egroup}
-
-\defineoverlay[account][\useMPgraphic{account}]
-
-%D We are not limited to simple rules with \TEX\ primitives.
-%D The following \METAPOST\ example graphic shows one way to
-%D draw more complicated rules behind the T-Account, you can
-%D use thus as an example for your own backgrounds.
-
-\startuseMPgraphic{account}
- AccountNumberGap := 0.5*\MPaccountmaxwidth-\MPaccountwidth ;
- AccountRuleWidth := \the\dimexpr\accountparameter\c!rulethickness\relax ;
-
- z11 = (0,\MPaccountmaxheight-\MPaccountheaderheight) ;
- z12 = (\MPaccountmaxwidth,\MPaccountmaxheight-\MPaccountheaderheight) ;
-
- z21 = (\MPaccountwidth-\MPaccountnumberwidth-AccountNumberGap,\MPaccountmaxheight-\MPaccountheaderheight-\MPaccountdebitheight) ;
- z22 = (0.5*\MPaccountmaxwidth,\MPaccountmaxheight-\MPaccountheaderheight-\MPaccountdebitheight) ;
- z23 = (\MPaccountmaxwidth-\MPaccountnumberwidth-AccountNumberGap,\MPaccountmaxheight-\MPaccountheaderheight-\MPaccountcreditheight) ;
- z24 = (\MPaccountmaxwidth,\MPaccountmaxheight-\MPaccountheaderheight-\MPaccountcreditheight) ;
-
- z31 = (\MPaccountwidth-\MPaccountnumberwidth-AccountNumberGap,\MPaccountfooterheight) ;
- z32 = (0.5*\MPaccountmaxwidth-AccountNumberGap,\MPaccountfooterheight) ;
- z33 = (\MPaccountmaxwidth-\MPaccountnumberwidth-AccountNumberGap,\MPaccountfooterheight) ;
- z34 = (\MPaccountmaxwidth,\MPaccountfooterheight) ;
-
- z41 = (0.5*\MPaccountmaxwidth,\MPaccountmaxheight-\MPaccountheaderheight) ;
- z42 = (0.5*\MPaccountmaxwidth,0) ;
- z43 = whatever[z41,z42]=whatever[z22,z23] ;
- z44 = (0.5*\MPaccountmaxwidth,\MPaccountfooterheight) ;
-
- z51 = (0,\MPaccountfooterheight) ;
- z52 = (\MPaccountnumberwidth,\MPaccountfooterheight) ;
- z53 = (0.5*\MPaccountmaxwidth-\MPaccountnumberwidth-AccountNumberGap,\MPaccountmaxheight-\MPaccountheaderheight-\MPaccountdebitheight) ;
- z54 = (0.5*\MPaccountmaxwidth-AccountNumberGap,\MPaccountmaxheight-\MPaccountheaderheight-\MPaccountdebitheight) ;
-
- z61 = (\MPaccountwidth-\MPaccountnumberwidth-AccountNumberGap,0) ;
- z62 = (0.5*\MPaccountmaxwidth-AccountNumberGap,0) ;
- z63 = (\MPaccountmaxwidth-\MPaccountnumberwidth-AccountNumberGap,0) ;
- z64 = (\MPaccountmaxwidth,0) ;
-
- drawoptions (withpen pencircle scaled AccountRuleWidth withcolor \MPcolor{\accountparameter\c!framecolor}) ;
- linecap := butt ; % no round end of the lines
-
- draw z11--z12 ;
- draw z33--z34 ;
-
- if \MPaccountfooterheight>0pt:
- draw z61--z62 ;
- draw z63--z64 ;
- fi
-
- if \MPaccountcreditheight>\MPaccountdebitheight:
- draw z31--z32 ;
- draw z41--z44 ;
- draw z51--z52--z53--z54 ;
- else:
- draw z21--z22--z23--z24 ;
- draw z41--z43 ;
- fi
-
- setbounds currentpicture to unitsquare xyscaled (\MPaccountmaxwidth,\MPaccountmaxheight) ;
-\stopuseMPgraphic
-
-%D \showsetup{startdebits}
-%D \showsetup{debit}
-
-\long\def\startDEBITS#1\stopDEBITS
- {\bgroup
- \def\debit{\dosingleempty\dodebit}%
- \def\dodebit[##1]%
- {\def\dododebit####1{\dodododebit[##1]{####1}}%
- \permitspacesbetweengroups
- \dosinglegroupempty\dododebit}%
- \def\dodododebit[##1]##2%
- {\setfloatnumber[debitvalue]{##2}%
- \incrementfloatnumber[debitsum]{\rawfloatnumber[debitvalue]}%
- \hbox\!!to\hsize{\strut##1\hfill\getfloatnumber[debitvalue]}}%
- \global\setbox\debitbox\vtop{\hsize\!!accountwidth#1}%
- \!!debitheight\ht\debitbox
- \advance\!!debitheight\dp\debitbox
- \xdef\MPaccountdebitheight{\the\!!debitheight}%
- \egroup}
-
-%D \showsetup{startcredits}
-%D \showsetup{credit}
-
-\long\def\startCREDITS#1\stopCREDITS
- {\bgroup
- \def\credit{\dosingleempty\docredit}%
- \def\docredit[##1]%
- {\def\dodocredit####1{\dododocredit[##1]{####1}}%
- \permitspacesbetweengroups
- \dosinglegroupempty\dodocredit}%
- \def\dododocredit[##1]##2%
- {\setfloatnumber[creditvalue]{##2}%
- \incrementfloatnumber[creditsum]{\rawfloatnumber[creditvalue]}%
- \hbox\!!to\hsize{\strut##1\hfill\getfloatnumber[creditvalue]}}%
- \global\setbox\creditbox\vtop{\hsize\!!accountwidth#1}%
- \!!creditheight\ht\creditbox
- \advance\!!creditheight\dp\creditbox
- \xdef\MPaccountcreditheight{\the\!!creditheight}%
- \egroup}
-
-\long\def\parseACCOUNT#1%
- {\bgroup
- \resetfloatnumber[creditsum]%
- \resetfloatnumber[debitsum]%
- \def\startCREDITS##1\stopCREDITS
- {\def\credit{\dosingleempty\docredit}%
- \def\docredit[####1]%
- {\def\dodocredit########1{\dododocredit[####1]{########1}}%
- \permitspacesbetweengroups
- \dosinglegroupempty\dodocredit}%
- \def\dododocredit[####1]####2%
- {\incrementfloatnumber[creditsum]{####2}%
- \setbox\scratchbox\hbox{####1}\!!dimena\wd\scratchbox
- \compareaccountdimen\!!credittextwidth\!!dimena}%
- ##1\removeunwantedspaces}%
- \def\startDEBITS##1\stopDEBITS
- {\def\debit{\dosingleempty\dodebit}%
- \def\dodebit[####1]%
- {\def\dododebit########1{\dodododebit[####1]{########1}}%
- \permitspacesbetweengroups
- \dosinglegroupempty\dododebit}%
- \def\dodododebit[####1]####2%
- {\incrementfloatnumber[debitsum]{####2}%
- \setbox\scratchbox\hbox{####1}\!!dimena\wd\scratchbox
- \compareaccountdimen\!!debittextwidth\!!dimena}%
- ##1\removeunwantedspaces}%
- #1\removeunwantedspaces
- \compareACCOUNTnumberwidth
- \compareaccountdimen\!!debittextwidth\!!credittextwidth
- \global\!!accountwidth\!!debittextwidth
- \global\advance\!!accountwidth\dimexpr\MPaccountnumberwidth\relax
- \global\advance\!!accountwidth\accountparameter\c!columndistance
- \xdef\MPaccounttextwidth{\the\!!debittextwidth}%
- \xdef\MPaccountwidth {\the\!!accountwidth}%
- \resetfloatnumber[creditsum]%
- \resetfloatnumber[debitsum]%
- \egroup}
-
-\def\compareACCOUNTnumberwidth
- {\bgroup
- \setbox\plusone\hbox{\getfloatnumber[debitsum]}%
- \setbox\plustwo\hbox{\getfloatnumber[creditsum]}%
- \ifdim\wd\plusone>\wd\plustwo
- \xdef\MPaccountnumberwidth{\the\wd\plusone}%
- \else
- \xdef\MPaccountnumberwidth{\the\wd\plustwo}%
- \fi
- \egroup}
-
-\def\compareaccountdimen#1#2%
- {\ifdim#2>#1\relax
- #1#2
- \fi}
-
-\def\checkACCOUNT
- {\bgroup
- \compareaccountdimen\!!debitheight\!!creditheight
- \xdef\MPaccountheight{\the\!!debitheight}%
- \egroup}
-
-\def\linebetweenaccount
- {\bgroup
- \xdef\MPaccountdistance{\the\dimexpr\accountdistance\relax}%
- \ifdim\accountdistance>\zeropoint\relax
- \!!dimena\accountdistance
- \else
- \!!dimena\linewidth
- \fi
- \advance\!!dimena-\linewidth
- \hskip.5\!!dimena
- \doifsomething{\accountparameter\c!framecolor}
- {\color[\accountparameter\c!framecolor]}%
- {\vrule\!!width\accountparameter\c!rulethickness}%
- \hskip.5\!!dimena\relax
- \egroup}
-
-\def\spacebetweenaccount
- {\xdef\MPaccountdistance{\zeropoint}%
- \hskip\accountdistance}
-
-%D \macros{setupACCOUNT}
-%D
-%D \showsetup{setupaccount}
-
-\def\setupACCOUNT
- {\dodoubleargument\dosetupACCOUNT}
-
-\def\dosetupACCOUNT[#1][#2]%
- {\getparameters[\????ac#1][#2]%
- \processaction
- [\getvalue{\????ac#1\c!rule}]
- [ \v!on=>\let\betweenaccount\linebetweenaccount,
- \v!off=>\let\betweenaccount\spacebetweenaccount,
- \s!default=>\let\betweenaccount\spacebetweenaccount,
- \s!unknown=>\let\betweenaccount\spacebetweenaccount]}
-
-\def\defineACCOUNT
- {\dodoubleempty\dodefineACCOUNT}
-
-\def\dodefineACCOUNT[#1][#2]%
- {\setupACCOUNT
- [#1]
- [\c!background=,
- \c!backgroundoffset=0pt,
- \c!backgroundscreen=,
- \c!backgroundcolor=,
- \c!bodyfont=,
- \c!calculate=\v!no,
- \c!columndistance=\bodyfontsize,
- \c!distance=\bodyfontsize,
- \c!frame=\v!off,
- \c!framecolor=,
- \c!left=,
- \c!middle=,
- \c!offset=0.25ex,
- \c!right=,
- \c!rule=\v!on,
- \c!rulethickness=\linewidth,
- \c!width=\v!fit,
- \c!strut=\v!yes,
- \c!numbercommand=\integerrounding,
- #2]%
- \processbetween{#1}{\ACCOUNT[#1]}%
- \setvalue{\e!setup#1\e!endsetup}{\dodoubleargument\setupACCOUNT[#1]}}
-
-\def\ACCOUNT[#1]#2%
- {\startACCOUNT[#1]#2\stopACCOUNT}
-
-\defineACCOUNT[TACCOUNT]
-
-\defineACCOUNT[TKONTO]
-
-%D \subject{Example}
-%D
-%D \startbuffer
-%D \startTACCOUNT[left=S,middle=Retained Earnings,right=H]
-%D \startTACCOUNT
-%D \startDEBITS
-%D \debit [Rent Expense] {2200}
-%D \debit [Salaries Expense] {1650}
-%D \debit [Interest Expense] {3950}
-%D \debit [Dividends] {2000}
-%D \stopDEBITS
-%D \startCREDITS
-%D \credit [Sales Revenue] {8500}
-%D \credit [Interest Revenue] {1300}
-%D \stopCREDITS
-%D \stopTACCOUNT
-%D \stopbuffer
-%D
-%D A simple example:
-%D
-%D \typebuffer
-%D
-%D This results in the following output:
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-
-\loadmarkfile{t-account}
-
-\protect \endinput
diff --git a/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkii b/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkii
deleted file mode 100644
index 18ce3b92af..0000000000
--- a/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkii
+++ /dev/null
@@ -1,68 +0,0 @@
-%D \module
-%D [ file=floatnumber,
-%D version=2008.02.11,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Float Numbers,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\writestatus{loading}{Context User Module / Float Numbers}
-
-\unprotect
-
-\def\@@floatnumber@@v{@@floatnumber@@v}
-\def\@@floatnumber@@s{@@floatnumber@@s}
-
-% namespace is already dealt with in the frontend
-
-% \def\@@floatnumber@@v{v:}
-% \def\@@floatnumber@@s{s:}
-
-\def\makefloatcounter#1%
- {\global\@EA\let\csname\@@floatnumber@@v#1\endcsname\zeropoint
- \global\@EA\let\csname\@@floatnumber@@s#1\endcsname\zeropoint}
-
-\def\floatcountervalue#1%
- {\ifcsname\@@floatnumber@@v#1\endcsname
- \@EA\withoutpt\the\dimexpr\csname\@@floatnumber@@v#1\endcsname\relax
- \fi}
-
-\def\plusfloatcounter#1#2%
- {\@EA\xdef\csname\@@floatnumber@@v#1\endcsname
- {\the\dimexpr\csname\@@floatnumber@@v#1\endcsname+#2\points\relax}}
-
-\def\minusfloatcounter#1#2%
- {\@EA\xdef\csname\@@floatnumber@@v#1\endcsname
- {\the\dimexpr\csname\@@floatnumber@@v#1\endcsname-#2\points\relax}}
-
-\def\multiplyfloatcounter#1#2%
- {\@EA\xdef\csname\@@floatnumber@@v#1\endcsname
- {\the\dimexpr\csname\@@floatnumber@@v#1\endcsname*\integerrounding{\@EA\withoutpt\the\dimexpr#2\points*\plushundred\relax}/\plushundred\relax}}
-
-\def\multiplyfloatcounter#1#2%
- {\@EA\xdef\csname\@@floatnumber@@v#1\endcsname
- {\the\dimexpr\csname\@@floatnumber@@v#1\endcsname*\numexpr\number\dimexpr#2\points\relax*\plushundred/\maxcard\relax/\plushundred\relax}}
-
-\def\dividefloatcounter#1#2%
- {\@EA\xdef\csname\@@floatnumber@@v#1\endcsname
- {\the\dimexpr\csname\@@floatnumber@@v#1\endcsname*\plushundred/\integerrounding{\@EA\withoutpt\the\dimexpr#2\points*\plushundred\relax}\relax}}
-
-\def\dividefloatcounter#1#2%
- {\@EA\xdef\csname\@@floatnumber@@v#1\endcsname
- {\the\dimexpr\csname\@@floatnumber@@v#1\endcsname*\plushundred/\numexpr\number\dimexpr#2\points\relax*\plushundred/\maxcard\relax\relax}}
-
-\let\resetfloatcounter\makefloatcounter
-
-\def\setfloatcounter#1#2%
- {\global\@EA\xdef\csname\@@floatnumber@@v#1\endcsname{\the\dimexpr#2\points\relax}}
-
-\def\savefloatcounter#1%
- {\global\@EA\xdef\csname\@@floatnumber@@s#1\endcsname{\the\dimexpr\csname\@@floatnumber@@v#1\endcsname\relax}}
-
-\def\restorefloatcounter#1%
- {\global\@EA\xdef\csname\@@floatnumber@@v#1\endcsname{\the\dimexpr\csname\@@floatnumber@@s#1\endcsname\relax}}
-
-\protect \endinput
diff --git a/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkiv b/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkiv
deleted file mode 100644
index bbd5e37916..0000000000
--- a/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.mkiv
+++ /dev/null
@@ -1,37 +0,0 @@
-%D \module
-%D [ file=floatnumber,
-%D version=2008.02.11,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Float Numbers,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\writestatus{loading}{Context User Module / Float Numbers}
-
-\unprotect
-
-\startluacode
- thirddata = thirddata or { }
- thirddata.floatnumbers = thirddata.floatnumbers or { }
- thirddata.floatnumbers.data = thirddata.floatnumbers.data or { }
- thirddata.floatnumbers.saved = thirddata.floatnumbers.saved or { }
-\stopluacode
-
-\def\makefloatcounter #1{\ctxlua{thirddata.floatnumbers.data ["#1"] = 0 thirddata.floatnumbers.saved["#1"] = 0}}
-\def\setfloatcounter #1#2{\ctxlua{thirddata.floatnumbers.data ["#1"] = #2}}
-
-\def\plusfloatcounter #1#2{\ctxlua{thirddata.floatnumbers.data ["#1"] = thirddata.floatnumbers.data ["#1"] + #2}}
-\def\minusfloatcounter #1#2{\ctxlua{thirddata.floatnumbers.data ["#1"] = thirddata.floatnumbers.data ["#1"] - #2}}
-\def\multiplyfloatcounter#1#2{\ctxlua{thirddata.floatnumbers.data ["#1"] = thirddata.floatnumbers.data ["#1"] * #2}}
-\def\dividefloatcounter #1#2{\ctxlua{thirddata.floatnumbers.data ["#1"] = thirddata.floatnumbers.data ["#1"] / #2}}
-\def\savefloatcounter #1{\ctxlua{thirddata.floatnumbers.saved["#1"] = thirddata.floatnumbers.data ["#1"]}}
-\def\restorefloatcounter #1{\ctxlua{thirddata.floatnumbers.data ["#1"] = thirddata.floatnumbers.saved["#1"]}}
-
-\def\floatcountervalue #1{\ctxlua{tex.print(thirddata.floatnumbers.data["#1"])}}
-
-\let\resetfloatcounter\makefloatcounter
-
-\protect \endinput
diff --git a/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.tex b/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.tex
deleted file mode 100644
index f0bb838312..0000000000
--- a/macros/context/contrib/context-account/tex/context/third/account/t-floatnumber.tex
+++ /dev/null
@@ -1,78 +0,0 @@
-%D \module
-%D [ file=t-floatnumber,
-%D version=2008.02.11,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Float Numbers,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\writestatus{loading}{Context User Module / Float Numbers}
-
-\unprotect
-
-% Commands for floatnumbers:
-%
-% \definefloatnumber[name]
-% \setfloatnumber[name]{value}
-% \resetfloatnumber[name]
-% \incrementfloatnumber[name]{value}
-% \decrementfloatnumber[name]{value}
-% \multiplyfloatnumber[name]{value}
-% \dividefloatnumber[name]{value}
-% \savefloatnumber[name]
-% \restorefloatnumber[name]
-% \getfloatnumber[name]
-
-\def\setupfloatnumber
- {\dodoubleargument\dosetupfloatnumber}
-
-\def\dosetupfloatnumber[#1][#2]%
- {\getparameters[\s!float\s!number#1][#2]}
-
-\def\definefloatnumber
- {\dodoubleempty\dodefinefloatnumber}
-
-\def\dodefinefloatnumber[#1][#2]%
- {\setupfloatnumber
- [#1]
- [\c!command=\twodigitrounding,
- #2]%
- \makefloatcounter{\s!float\s!number#1}}
-
-\def\setfloatnumber[#1]#2%
- {\setfloatcounter{\s!float\s!number#1}{#2}}
-
-\def\resetfloatnumber[#1]%
- {\resetfloatcounter{\s!float\s!number#1}}
-
-\def\incrementfloatnumber[#1]#2%
- {\plusfloatcounter{\s!float\s!number#1}{#2}}
-
-\def\decrementfloatnumber[#1]#2%
- {\minusfloatcounter{\s!float\s!number#1}{#2}}
-
-\def\multiplyfloatnumber[#1]#2%
- {\multiplyfloatcounter{\s!float\s!number#1}{#2}}
-
-\def\dividefloatnumber[#1]#2%
- {\dividefloatcounter{\s!float\s!number#1}{#2}}
-
-\def\savefloatnumber[#1]%
- {\savefloatcounter{\s!float\s!number#1}}
-
-\def\restorefloatnumber[#1]%
- {\restorefloatcounter{\s!float\s!number#1}}
-
-\def\getfloatnumber[#1]%
- {\csname\s!float\s!number#1\c!command\endcsname
- {\floatcountervalue{\s!float\s!number#1}}}
-
-\def\rawfloatnumber[#1]%
- {\floatcountervalue{\s!float\s!number#1}}
-
-\loadmarkfile{t-floatnumber}
-
-\protect \endinput
diff --git a/macros/context/contrib/context-algorithmic/VERSION b/macros/context/contrib/context-algorithmic/VERSION
deleted file mode 100644
index 9997aa3cfd..0000000000
--- a/macros/context/contrib/context-algorithmic/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2013.06.03
diff --git a/macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkii b/macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkii
deleted file mode 100644
index 0a5c3fbcdf..0000000000
--- a/macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkii
+++ /dev/null
@@ -1,160 +0,0 @@
-%D \module
-%D [ file=t-algorithmic,
-%D version=2012.06.22,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Algorithms,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2010 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C (at your option) any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-\writestatus{loading}{Context User Module / Algorithms}
-
-\unprotect
-
-\def\????algorithmic{@@@@algorithmic}
-
-\def\algorithmicparameter#1%
- {\csname\ifcsname\????algorithmic#1\endcsname\????algorithmic#1\else\s!empty\fi\endcsname}
-
-\def\startalgorithmic
- {\bgroup
- \dosingleempty\dostartalgorithmic}
-
-\def\dostartalgorithmic[#1]%
- {\iffirstargument
- \setupalgorithmic[#1]%
- \fi
- \the\everyalgorithmic
- \doifsomething{\algorithmicparameter\c!spacebefore}{\blank[\algorithmicparameter\c!spacebefore]}%
- \algorithmicparameter\c!before
- \setupwhitespace[\v!none]%
- \doadaptleftskip{\algorithmicparameter\c!margin}%
- \doif{\algorithmicparameter\c!numbering}\v!yes
- {\setuplinenumbering
- [\c!start=\algorithmicparameter\c!start,
- \c!stop=\algorithmicparameter\c!stop,
- \c!step=\algorithmicparameter\c!step]%
- \startlinenumbering}}
-
-\def\stopalgorithmic
- {\par
- \doif{\algorithmicparameter\c!numbering}\v!yes\stoplinenumbering
- \algorithmicparameter\c!after
- \doifsomething{\algorithmicparameter\c!spaceafter}{\blank[\algorithmicparameter\c!spaceafter]}%
- \egroup}
-
-\def\setupalgorithmic
- {\dodoubleargument\getparameters[\????algorithmic]}
-
-% Commands
-
-\newtoks\everyalgorithmic
-
-\def\startsubalgorithmic
- {\par\doadaptleftskip{\algorithmicparameter\c!width}}
-
-\def\stopsubalgorithmic
- {\par\doadaptleftskip{-\algorithmicparameter\c!width}}
-
-\def\algorithmic!state {\par}
-\def\algorithmic!if #1{\par\algorithmicif\ #1 \algorithmicthen\startsubalgorithmic}
-\def\algorithmic!else {\stopsubalgorithmic\algorithmicelse\startsubalgorithmic}
-\def\algorithmic!elsif #1{\stopsubalgorithmic\algorithmicelsif\ #1 \algorithmicthen\startsubalgorithmic}
-\def\algorithmic!endif {\stopsubalgorithmic\algorithmicendif}
-\def\algorithmic!for #1{\par\algorithmicfor\ #1 \algorithmicdo\startsubalgorithmic}
-\def\algorithmic!forall#1{\par\algorithmicforall\ #1 \algorithmicdo\startsubalgorithmic}
-\def\algorithmic!endfor {\stopsubalgorithmic\algorithmicendfor}
-\def\algorithmic!while #1{\par\algorithmicwhile\ #1 \algorithmicdo\startsubalgorithmic}
-\def\algorithmic!endwhile{\stopsubalgorithmic\algorithmicendwhile}
-\def\algorithmic!repeat {\par\algorithmicrepeat\startsubalgorithmic}
-\def\algorithmic!until #1{\stopsubalgorithmic\algorithmicuntil\ #1}
-\def\algorithmic!loop {\par\algorithmicloop\startsubalgorithmic}
-\def\algorithmic!endloop {\stopsubalgorithmic\algorithmicendloop}
-\def\algorithmic!require {\par\algorithmicrequire\space}
-\def\algorithmic!ensure {\par\algorithmicensure\space}
-\def\algorithmic!return {\par\algorithmicreturn\space}
-\def\algorithmic!true {\algorithmictrue}
-\def\algorithmic!false {\algorithmicfalse}
-\def\algorithmic!print {\par\algorithmicprint\space}
-\def\algorithmic!comment {\algorithmiccomment}
-
-\appendtoks
- \let\STATE \algorithmic!state
- \let\IF \algorithmic!if
- \let\ELSE \algorithmic!else
- \let\ELSIF \algorithmic!elsif
- \let\ENDIF \algorithmic!endif
- \let\FOR \algorithmic!for
- \let\FORALL \algorithmic!forall
- \let\ENDFOR \algorithmic!endfor
- \let\WHILE \algorithmic!while
- \let\ENDWHILE\algorithmic!endwhile
- \let\REPEAT \algorithmic!repeat
- \let\UNTIL \algorithmic!until
- \let\LOOP \algorithmic!loop
- \let\ENDLOOP \algorithmic!endloop
- \let\REQUIRE \algorithmic!require
- \let\ENSURE \algorithmic!ensure
- \let\RETURN \algorithmic!return
- \let\TRUE \algorithmic!true
- \let\FALSE \algorithmic!false
- \let\PRINT \algorithmic!print
- \let\COMMENT \algorithmic!comment
-\to \everyalgorithmic
-
-% I should make this multilingual
-
-\def\algorithmicrequire {{\bf Require:}}
-\def\algorithmicensure {{\bf Ensure:}}
-\def\algorithmiccomment#1{\{#1\}}
-\def\algorithmicend {{\bf end}}
-\def\algorithmicif {{\bf if}}
-\def\algorithmicthen {{\bf then}}
-\def\algorithmicelse {{\bf else}}
-\def\algorithmicelsif {\algorithmicelse\ \algorithmicif}
-\def\algorithmicendif {\algorithmicend\ \algorithmicif}
-\def\algorithmicfor {{\bf for}}
-\def\algorithmicforall {{\bf for all}}
-\def\algorithmicdo {{\bf do}}
-\def\algorithmicendfor {\algorithmicend\ \algorithmicfor}
-\def\algorithmicwhile {{\bf while}}
-\def\algorithmicendwhile {\algorithmicend\ \algorithmicwhile}
-\def\algorithmicloop {{\bf loop}}
-\def\algorithmicendloop {\algorithmicend\ \algorithmicloop}
-\def\algorithmicrepeat {{\bf repeat}}
-\def\algorithmicuntil {{\bf until}}
-\def\algorithmicprint {{\bf print}}
-\def\algorithmicreturn {{\bf return}}
-\def\algorithmictrue {{\bf true}}
-\def\algorithmicfalse {{\bf false}}
-
-% Default values
-
-\setupalgorithmic
- [ \c!numbering=\v!no,
- \c!start=1,
- \c!stop=,
- \c!step=1,
- \c!width=1em,
- \c!margin=1em,
- \c!spacebefore=\v!line,
- \c!spaceafter=\v!line]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkiv b/macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkiv
deleted file mode 100644
index 0a4d386b0a..0000000000
--- a/macros/context/contrib/context-algorithmic/tex/context/third/algorithmic/t-algorithmic.mkiv
+++ /dev/null
@@ -1,317 +0,0 @@
-%D \module
-%D [ file=t-algorithmic,
-%D version=2013.06.03,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Algorithms,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2010 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C (at your option) any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-% begin info
-%
-% title : algorithmic
-% comment : context port of the algorithmic package for latex
-% status : final
-%
-% end info
-
-\writestatus{loading}{Context User Module / Algorithms}
-
-\unprotect
-
-\startinterface all
- \setinterfaceconstant {labelstyle} {labelstyle}
- \setinterfaceconstant {labelcolor} {labelcolor}
-\stopinterface
-
-\startinterface all
- \setinterfacevariable {algorithmic} {algorithmic}
-\stopinterface
-
-\installnamespace {algorithmic}
-\installnamespace {algorithmiccommand}
-
-%D The algorithmic environment
-
-\installcommandhandler \????algorithmic {algorithmic} \????algorithmic
-
-\appendtoks
- \setuevalue{\e!start\currentalgorithmic}{\algorithmic_start[\currentalgorithmic]}%
- \setuevalue{\e!stop \currentalgorithmic}{\algorithmic_stop }%
-\to \everydefinealgorithmic
-
-\appendtoks
- \definelinenumbering[\currentalgorithmic]%
-\to \everydefinealgorithmic
-
-\appendtoks
- \setuplinenumbering
- [\currentalgorithmic]
- [\c!conversion=\algorithmicparameter\c!conversion,
- \c!start=\algorithmicparameter\c!start,
- \c!step=\algorithmicparameter\c!step,
- \c!method=\algorithmicparameter\c!method,
- \c!continue=\algorithmicparameter\c!continue,
- \c!location=\algorithmicparameter\c!location,
- \c!style=\algorithmicparameter\c!numberstyle,
- \c!color=\algorithmicparameter\c!numbercolor,
- \c!width=\algorithmicparameter\c!numberwidth,
- \c!align=\algorithmicparameter\c!align]%
-\to \everysetupalgorithmic
-
-\unexpanded\def\algorithmic_start[#1]%
- {\begingroup
- \edef\currentalgorithmic{#1}%
- \dosingleempty\algorithmic_start_indeed}
-
-\def\algorithmic_start_indeed[#1]%
- {\iffirstargument
- \setupcurrentalgorithmic[#1]%
- \fi
- \the\t_algorithmic_commands
- \usealgorithmicstyleandcolor\c!style\c!color
- \doifsomething{\algorithmicparameter\c!spacebefore}{\blank[\algorithmicparameter\c!spacebefore]}%
- \algorithmicparameter\c!before
- \setupwhitespace[\v!none ]%
- \setupindenting [\v!never]%
- \doadaptleftskip{\algorithmicparameter\c!margin}%
- \doif{\algorithmicparameter\c!numbering}\v!yes\startlinenumbering}
-
-\unexpanded\def\algorithmic_stop
- {\par
- \doif{\algorithmicparameter\c!numbering}\v!yes\stoplinenumbering
- \algorithmicparameter\c!after
- \doifsomething{\algorithmicparameter\c!spaceafter}{\blank[\algorithmicparameter\c!spaceafter]}%
- \endgroup}
-
-% Commands
-
-\def\algorithmic_begsub
- {\par\doadaptleftskip{\algorithmicparameter\c!width}}
-
-\def\algorithmic_endsub
- {\par\doadaptleftskip{-\algorithmicparameter\c!width}}
-
-\def\algorithmic_label#1%
- {\begingroup
- \usealgorithmicstyleandcolor\c!labelstyle\c!labelcolor
- \algorithmictext{#1}%
- \endgroup}
-
-\starttexdefinition algorithmic_state
- \par
-\stoptexdefinition
-
-\starttexdefinition algorithmic_if #1
- \par
- \algorithmic_label{if} #1 \algorithmic_label{then}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_else
- \algorithmic_endsub
- \algorithmic_label{else}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_elsif #1
- \algorithmic_endsub
- \algorithmic_label{elsif} #1 \algorithmic_label{then}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_endif
- \algorithmic_endsub
- \algorithmic_label{endif}
-\stoptexdefinition
-
-\starttexdefinition algorithmic_for #1
- \par
- \algorithmic_label{for} #1 \algorithmic_label{do}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_forall #1
- \par
- \algorithmic_label{forall} #1 \algorithmic_label{do}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_endfor
- \algorithmic_endsub
- \algorithmic_label{endfor}
-\stoptexdefinition
-
-\starttexdefinition algorithmic_while #1
- \par
- \algorithmic_label{while} #1 \algorithmic_label{do}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_endwhile
- \algorithmic_endsub
- \algorithmic_label{endwhile}
-\stoptexdefinition
-
-\starttexdefinition algorithmic_repeat
- \par
- \algorithmic_label{repeat}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_until #1
- \algorithmic_endsub
- \algorithmic_label{until} #1
-\stoptexdefinition
-
-\starttexdefinition algorithmic_loop
- \par
- \algorithmic_label{loop}
- \algorithmic_begsub
-\stoptexdefinition
-
-\starttexdefinition algorithmic_endloop
- \algorithmic_endsub
- \algorithmic_label{endloop}
-\stoptexdefinition
-
-\starttexdefinition algorithmic_require
- \par
- \algorithmic_label{require}
- \space
-\stoptexdefinition
-
-\starttexdefinition algorithmic_ensure
- \par
- \algorithmic_label{ensure}
- \space
-\stoptexdefinition
-
-\starttexdefinition algorithmic_return
- \par
- \algorithmic_label{return}
- \space
-\stoptexdefinition
-
-\starttexdefinition algorithmic_true
- \algorithmic_label{true}
-\stoptexdefinition
-
-\starttexdefinition algorithmic_false
- \algorithmic_label{false}
-\stoptexdefinition
-
-\starttexdefinition algorithmic_print
- \par
- \algorithmic_label{print}
- \space
-\stoptexdefinition
-
-\starttexdefinition algorithmic_comment #1
- \textbraceleft
- #1
- \textbraceright
-\stoptexdefinition
-
-% The commands in the environment are all uppercase, the connection
-% between them and their defintion happens here.
-
-\newtoks\t_algorithmic_commands
-
-\def\algorithmic_define
- {\dodoubleargument\algorithmic_define_indeed}
-
-\def\algorithmic_define_indeed[#1][#2]%
- {\appendtoks\letvalue{#1}#2\to\t_algorithmic_commands}
-
-\algorithmic_define [STATE] [\algorithmic_state ]
-\algorithmic_define [IF] [\algorithmic_if ]
-\algorithmic_define [ELSE] [\algorithmic_else ]
-\algorithmic_define [ELSIF] [\algorithmic_elsif ]
-\algorithmic_define [ENDIF] [\algorithmic_endif ]
-\algorithmic_define [FOR] [\algorithmic_for ]
-\algorithmic_define [FORALL] [\algorithmic_forall ]
-\algorithmic_define [ENDFOR] [\algorithmic_endfor ]
-\algorithmic_define [WHILE] [\algorithmic_while ]
-\algorithmic_define [ENDWHILE] [\algorithmic_endwhile]
-\algorithmic_define [REPEAT] [\algorithmic_repeat ]
-\algorithmic_define [UNTIL] [\algorithmic_until ]
-\algorithmic_define [LOOP] [\algorithmic_loop ]
-\algorithmic_define [ENDLOOP] [\algorithmic_endloop ]
-\algorithmic_define [REQUIRE] [\algorithmic_require ]
-\algorithmic_define [ENSURE] [\algorithmic_ensure ]
-\algorithmic_define [RETURN] [\algorithmic_return ]
-\algorithmic_define [TRUE] [\algorithmic_true ]
-\algorithmic_define [FALSE] [\algorithmic_false ]
-\algorithmic_define [PRINT] [\algorithmic_print ]
-\algorithmic_define [COMMENT] [\algorithmic_comment ]
-
-% Labels
-
-\definelabelclass[algorithmic]
-
-\setupalgorithmictext[\s!en][require=Require:]
-\setupalgorithmictext[\s!en][ensure=Ensure:]
-\setupalgorithmictext[\s!en][end=end]
-\setupalgorithmictext[\s!en][if=if]
-\setupalgorithmictext[\s!en][then=then]
-\setupalgorithmictext[\s!en][else=else]
-\setupalgorithmictext[\s!en][elsif=else if]
-\setupalgorithmictext[\s!en][endif=end if]
-\setupalgorithmictext[\s!en][for=for]
-\setupalgorithmictext[\s!en][forall=for all]
-\setupalgorithmictext[\s!en][do=do]
-\setupalgorithmictext[\s!en][endfor=end for]
-\setupalgorithmictext[\s!en][while=while]
-\setupalgorithmictext[\s!en][endwhile=end while]
-\setupalgorithmictext[\s!en][loop=loop]
-\setupalgorithmictext[\s!en][endloop=end loop]
-\setupalgorithmictext[\s!en][repeat=repeat]
-\setupalgorithmictext[\s!en][until=until]
-\setupalgorithmictext[\s!en][print=print]
-\setupalgorithmictext[\s!en][return=return]
-\setupalgorithmictext[\s!en][true=true]
-\setupalgorithmictext[\s!en][false=false]
-
-% Default values
-
-\definealgorithmic[\v!algorithmic]
-
-\setupalgorithmic
- [ \c!numbering=\v!no, % linenumbering
- \c!conversion=\v!numbers, % linenumbering
- \c!start=1, % linenumbering
- \c!step=1, % linenumbering
- \c!method=\v!first, % linenumbering
- \c!continue=\v!no, % linenumbering
- \c!location=\v!left, % linenumbering
- \c!numberstyle=, % linenumbering
- \c!numbercolor=, % linenumbering
- \c!numberwidth=2em, % linenumbering
- \c!align=\v!auto, % linenumbering
- \c!width=1em,
- \c!margin=1em,
- \c!labelstyle=\v!bold,
- \c!before=,
- \c!after=,
- \c!spacebefore=\v!line,
- \c!spaceafter=\v!line]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-animation/VERSION b/macros/context/contrib/context-animation/VERSION
deleted file mode 100644
index e7e307b1d6..0000000000
--- a/macros/context/contrib/context-animation/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2013.04.07
diff --git a/macros/context/contrib/context-animation/doc/context/third/animation/README b/macros/context/contrib/context-animation/doc/context/third/animation/README
deleted file mode 100644
index ae79d8c4aa..0000000000
--- a/macros/context/contrib/context-animation/doc/context/third/animation/README
+++ /dev/null
@@ -1,32 +0,0 @@
-Modulename : t-animation
-Author : Wolfgang Schuster
-License : GNU General Public License
-
-Description
------------
-
-Generate fieldstack based animation with ConTeXt
-with a easy to use mechanism without the need
-to define symbols, layers and fieldstacks.
-
-Usage
------
-
-\usemodule[animation]
-
-\setupinteraction[state=start]
-
-\starttext
-
-\startanimation
- {One}
- {Two}
-\stopanimation
-
-\stoptext
-
-Options
--------
-
-- menu
-- frame \ No newline at end of file
diff --git a/macros/context/contrib/context-animation/tex/context/interface/third/t-animation.xml b/macros/context/contrib/context-animation/tex/context/interface/third/t-animation.xml
deleted file mode 100644
index 7ad5cb55a4..0000000000
--- a/macros/context/contrib/context-animation/tex/context/interface/third/t-animation.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2011.05.19">
-
-<cd:command name="animation" type="environment" generated="yes" file="t-animation.mkvi">
- <cd:sequence>
- <cd:variable value="animation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1" optional="yes">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="2" list="yes" optional="yes">
- <cd:inherit name="setupanimation" n="2"/>
- <cd:inherit name="definefieldstack" n="3"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="animation" type="environment" file="t-animation.mkvi">
- <cd:sequence>
- <cd:string value="animation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1" optional="yes">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="2" list="yes" optional="yes">
- <cd:inherit name="setupanimation" n="2"/>
- <cd:inherit name="definefieldstack" n="3"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="defineanimation" file="t-animation.mkvi">
- <cd:sequence>
- <cd:string value="defineanimation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:keywords n="2" optional="yes">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="3" list="yes" optional="yes">
- <cd:inherit name="setupanimation" n="2"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setupanimation" file="t-animation.mkvi">
- <cd:sequence>
- <cd:string value="setupanimation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="2">
- <cd:parameter name="menu">
- <cd:constant type="yes"/>
- <cd:constant type="no"/>
- <cd:constant type="overlay" default="yes"/>
- </cd:parameter>
- <cd:parameter name="menustyle">
- <cd:resolve name="style"/>
- </cd:parameter>
- <cd:parameter name="menucolor">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:inherit name="setupframed" n="2"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-</cd:interface> \ No newline at end of file
diff --git a/macros/context/contrib/context-animation/tex/context/third/animation/t-animation.mkvi b/macros/context/contrib/context-animation/tex/context/third/animation/t-animation.mkvi
deleted file mode 100644
index 62f960c9ad..0000000000
--- a/macros/context/contrib/context-animation/tex/context/third/animation/t-animation.mkvi
+++ /dev/null
@@ -1,363 +0,0 @@
-%D \module
-%D [ file=t-animation,
-%D version=2013.04.07,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Animations,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2011 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C (at your option) any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-% begin info
-%
-% title : animations
-% comment : simple interface to generate animations which are based on the fieldstack mechanism
-% status : useable in documents and modules
-%
-% end info
-
-%M \loadsetups[t-animation.xml]
-
-%D \showsetup{startanimation}
-%D \showsetup{defineanimation}
-%D \showsetup{setupanimation}
-
-\unprotect
-
-\startinterface all
- \setinterfacevariable {animation} {animation}
-\stopinterface
-
-\startinterface all
- \setinterfaceconstant {menustyle} {menustyle}
- \setinterfaceconstant {menucolor} {menucolor}
- \setinterfaceconstant {framerate} {framerate}
-\stopinterface
-
-\installnamespace {animation}
-\installnamespace {animationmenu}
-\installnamespace {animationrenderings}
-
-\installframedcommandhandler \????animation {animation} \????animation
-\installcommandhandler \????animationmenu {animationmenu} \????animationmenu
-
-\appendtoks
- \setuevalue{\e!start\currentanimation}{\animation_beg{\currentanimation}}%
- \setuevalue{\e!stop \currentanimation}{\animation_end }%
-\to \everydefineanimation
-
-\newcount\animation_current
-\newcount\animation_frame
-
-\edef\m_animation_signal_pause{+}
-
-\ifdefined\s!repeat \else \def\s!repeat {repeat} \fi
-\ifdefined\s!once \else \def\s!once {once} \fi
-\ifdefined\s!pause \else \def\s!pause {pause} \fi
-\ifdefined\s!FirstFrame \else \def\s!FirstFrame {FirstFrame} \fi
-\ifdefined\s!PreviousFrame \else \def\s!PreviousFrame {PreviousFrame} \fi
-\ifdefined\s!StartAnimation \else \def\s!StartAnimation{StartAnimation} \fi
-\ifdefined\s!StopAnimation \else \def\s!StopAnimation {StopAnimation} \fi
-\ifdefined\s!NextFrame \else \def\s!NextFrame {NextFrame} \fi
-\ifdefined\s!LastFrame \else \def\s!LastFrame {LastFrame} \fi
-
-\unexpanded\def\animation_beg#environment%
- {\begingroup
- \edef\currentanimation{#environment}%
- \dodoubleempty\animation_beg_parameters}
-
-\def\animation_beg_parameters
- {\iffirstargument
- \ifsecondargument
- \doubleexpandafter\animation_beg_parameters_two
- \else
- \doubleexpandafter\animation_beg_parameters_one
- \fi
- \else
- \expandafter\animation_beg_parameters_zero
- \fi}
-
-\def\animation_beg_parameters_zero[#name][#parameters]%
- {\global\advance\animation_current\plusone
- \animation_beg_parameters_two[\number\animation_current][]}
-
-\def\animation_beg_parameters_one[#name][#parameters]%
- {\doifassignmentelse{#name}
- {\global\advance\animation_current\plusone
- \animation_beg_parameters_two[\number\animation_current][#name]}
- {\animation_beg_parameters_two[#name][]}}
-
-\def\animation_beg_parameters_two[#name][#parameters]%
- {\edef\animation_name{\currentanimation:#name}%
- \setupcurrentanimation
- [#parameters,
- \c!align=\v!middle,
- \c!background={\v!foreground,\animation_name},
- \c!offset=\v!overlay]%
- \animation_initialize
- \animation_symbols
- \doifnextbgroupelse\animation_frame_grouped\donothing}
-
-\def\animation_symbols
- {\definesymbol[\s!FirstFrame ][\symbol\v!firstpage ]%
- \definesymbol[\s!PreviousFrame ][\symbol\v!PreviousJump]%
- \definesymbol[\s!StartAnimation][\symbol\v!StartMovie ]%
- \definesymbol[\s!StopAnimation ][\symbol\v!StopMovie ]%
- \definesymbol[\s!NextFrame ][\symbol\v!NextJump ]%
- \definesymbol[\s!LastFrame ][\symbol\v!lastpage ]}
-
-\def\animation_initialize
- {\animation_frame\zerocount
- \let\m_animation_symbols\empty
- \let\m_animation_pause \empty
- \let\startframe\animation_frame_start
- \let\stopframe \relax
- \let\frame \animation_frame_direct}
-
-\unexpanded\def\animation_end
- {\normalexpanded{\definefieldstack[\animation_name][\m_animation_symbols][]}%
- %
- \edef\p_animation_repeat{\animationparameter\c!repeat}%
- \ifx\p_animation_repeat\v!no
- \let\p_animation_repeat\s!once
- \else
- \let\p_animation_repeat\s!repeat
- \fi
- %
- \edef\p_animation_list{\animationparameter\c!list}%
- \ifx\m_animation_pause\empty \else
- \let\p_animation_list\m_animation_pause
- \fi
- %
- \edef\currentanimationmenu{\animationparameter\c!menu}%
- \edef\p_animation_renderingsetup{\animationmenuparameter\c!renderingsetup}%
- \doifsetupselse\p_animation_renderingsetup
- {\texsetup\p_animation_renderingsetup}
- {\texsetup{\????animationrenderings:\v!no}}%
- \endgroup}
-
-%D \extras
-%D {menu}
-%D
-%D \subject{Control buttons}
-%D
-%D Animations are useless without any method to enable them, one way
-%D is to use \tex{goto} command (e.g. \type{\goto{...}[JS(Walk_Field{<NAME>})]})
-%D where you go to the next frame with each click. A different way to control
-%D the animation is the menu, which can be a row with buttons below the animation
-%D or a link above the graphic.
-%D
-%D The module provides for this the following values for the menu key:
-%D
-%D \startitemize[packed]
-%D \startitem no (usefull when you use the \tex{goto} command) \stopitem
-%D \startitem yes (places a row with buttons below the animation) \stopitem
-%D \startitem overlay (creates a button over the animation) \stopitem
-%D \stopitemize
-
-\defineanimationmenu[\v!yes ][\c!renderingsetup=\????animationrenderings:\v!yes ]
-\defineanimationmenu[\v!no ][\c!renderingsetup=\????animationrenderings:\v!no ]
-\defineanimationmenu[\v!overlay][\c!renderingsetup=\????animationrenderings:\v!overlay]
-
-\startsetups[\????animationrenderings:\v!yes]
-
- \defineviewerlayer[\animation_name:\v!start][\c!state=\v!start]
- \defineviewerlayer[\animation_name:\v!stop ][\c!state=\v!stop ]
-
- \inheritedanimationframed\bgroup
-
- \fieldstack[\animation_name]
-
- \blank[\v!medium]% \animationparameter\c!inbetween
-
- \dontleavehmode\hbox\bgroup
-
- \setupinteraction[\c!style=,\c!color=,\c!contrastcolor=]% Use only "menustyle" and "menucolor"!
- \useanimationstyleandcolor\c!menustyle\c!menucolor
-
- \setupsymbolset[\animationparameter\c!symbolset]
-
- \gotobox
- {\symbol\s!FirstFrame}
- [JS(Reset_Walk_Field{\animation_name}),
- HideLayer{\animation_name:\v!stop },
- VideLayer{\animation_name:\v!start}]
-
- \dotfskip{\animationparameter\c!distance}
-
- \gotobox
- {\symbol\s!PreviousFrame}
- [JS(Previous_Walk_Field{\animation_name}),
- HideLayer{\animation_name:\v!stop },
- VideLayer{\animation_name:\v!start}]
-
- \dotfskip{\animationparameter\c!distance}
-
- \ifx\p_animation_list\empty
-
- \gotobox
- {\setbox\scratchbox\hbox{\symbol\s!StopAnimation}
- \startoverlay
- {\startviewerlayer[\animation_name:\v!stop]
- \hbox to \wd\scratchbox{\symbol\s!StopAnimation}
- \stopviewerlayer}
- {\startviewerlayer[\animation_name:\v!start]
- \hbox to \wd\scratchbox{\hss\symbol\s!StartAnimation\hss}
- \stopviewerlayer}
- \stopoverlay}
- [JS(Start_Pause_Walk_Field{\animation_name,\cldcontext{math.round(1000/\number\animationparameter\c!framerate)},\p_animation_repeat}),
- ToggleLayer{\animation_name:\v!stop },
- ToggleLayer{\animation_name:\v!start}]
-
- \else
-
- \gotobox
- {\symbol\s!StartAnimation}
- [JS(Start_Pause_Walk_Field{\animation_name,\cldcontext{math.round(1000/\number\animationparameter\c!framerate)},\s!pause,\p_animation_list}),
- ToggleLayer{\animation_name:\v!stop },
- ToggleLayer{\animation_name:\v!start}]
-
- \fi
-
- \dotfskip{\animationparameter\c!distance}
-
- \gotobox
- {\symbol\s!NextFrame}
- [JS(Next_Walk_Field{\animation_name}),
- HideLayer{\animation_name:\v!stop },
- VideLayer{\animation_name:\v!start}]
-
- \dotfskip{\animationparameter\c!distance}
-
- \gotobox
- {\symbol\s!LastFrame}
- [JS(Stop_Walk_Field{\animation_name}),
- JS(Set_Field{\animation_name,\number\animation_frame}),
- HideLayer{\animation_name:\v!stop },
- VideLayer{\animation_name:\v!start}]%
-
- \egroup
-
- \egroup
-
-\stopsetups
-
-\startsetups[\????animationrenderings:\v!no]
-
- \inheritedanimationframed{\fieldstack[\animation_name]}
-
-\stopsetups
-
-\startsetups[\????animationrenderings:\v!overlay]
-
- \defineoverlay[\animation_name][\overlaybutton{Walk{\animation_name}}]
-
- \inheritedanimationframed{\fieldstack[\animation_name]}
-
-\stopsetups
-
-%D \macros
-%D {frame,startframe}
-%D
-%D The content for each frame can be set with two methods, the first is to
-%D enclose the code in brackets like you do in the overlay environment.
-%D
-%D \starttyping
-%D \startanimation
-%D {FRAME 1}
-%D {FRAME 2}
-%D \stopanimation
-%D \stoptyping
-%D
-%D The second method is the modern variant with start/stop-tags to enclose
-%D each frame, you can either you use \tex{frame} command which takes
-%D a argument, e.g.
-%D
-%D \starttyping
-%D \startanimation
-%D \frame{FRAME 1}
-%D \frame{FRAME 2}
-%D \stopanimation
-%D \stoptyping
-%D
-%D or you use the \type{frame} environment which delimits each frame
-%D by the start and stop tags.
-%D
-%D \starttyping
-%D \startanimation
-%D \startframe FRAME 1 \stopframe
-%D \startframe FRAME 2 \stopframe
-%D \stopanimation
-%D \stoptyping
-
-\unexpanded\def\animation_frame_grouped#content%
- {\advance\animation_frame\plusone
- \edef\animation_currentframe{\animation_name:\number\animation_frame}%
- \appendtocommalist\animation_currentframe\m_animation_symbols
- \definesymbol[\animation_currentframe][{#content}]%
- \doifnextbgroupelse\animation_frame_grouped\donothing}
-
-\unexpanded\def\animation_frame_direct
- {\dosingleempty\animation_frame_direct_indeed}
-
-\def\animation_frame_direct_indeed[#signal]#content%
- {\advance\animation_frame\plusone
- \edef\m_animation_signal{#signal}%
- \ifx\m_animation_signal\m_animation_signal_pause
- \appendtocommalist{\number\animation_frame}\m_animation_pause
- \fi
- \edef\animation_currentframe{\animation_name:\number\animation_frame}%
- \appendtocommalist\animation_currentframe\m_animation_symbols
- \definesymbol[\animation_currentframe][{#content}]}
-
-\unexpanded\def\animation_frame_start
- {\dosingleempty\animation_frame_start_indeed}
-
-\def\animation_frame_start_indeed[#signal]#content\stopframe
- {\advance\animation_frame\plusone
- \edef\m_animation_signal{#signal}%
- \ifx\m_animation_signal\m_animation_signal_pause
- \appendtocommalist{\number\animation_frame}\m_animation_pause
- \fi
- \edef\animation_currentframe{\animation_name:\number\animation_frame}%
- \appendtocommalist\animation_currentframe\m_animation_symbols
- \definesymbol[\animation_currentframe][{#content}]}
-
-%D To use the module one has to create a new animation environment,
-%D to prevent the user from creating one first before he can use the module
-%D one environment would be always available. The name of this predefined
-%D environment is \tex{startenvironment}, to ensure it can be also by other
-%D modules when a non english interface is used it is ensured you can always
-%D use it with two commands \tex{startanimation} and \tex{stopanimation}.
-
-\defineanimation[\v!animation]
-
-\ifdefined\startanimation \else
- \def\startanimation{\animation_beg\v!animation}%
- \def\stopanimation {\animation_end }%
-\fi
-
-\setupanimation
- [ \c!frame=\v!off,
- \c!offset=\v!overlay,
- \c!menu=\v!overlay,
- \c!distance=\spaceamount,
- \c!framerate=\plusone,
- \c!symbolset=navigation 1]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-annotation/VERSION b/macros/context/contrib/context-annotation/VERSION
deleted file mode 100644
index 3ac25fd648..0000000000
--- a/macros/context/contrib/context-annotation/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2013.05.27
diff --git a/macros/context/contrib/context-annotation/doc/context/third/annotation/README b/macros/context/contrib/context-annotation/doc/context/third/annotation/README
deleted file mode 100644
index 74907e98ac..0000000000
--- a/macros/context/contrib/context-annotation/doc/context/third/annotation/README
+++ /dev/null
@@ -1,35 +0,0 @@
-Modulename : t-annotation
-Author : Wolfgang Schuster
-License : GNU General Public License
-
-Description
------------
-
-Annotate text blocks.
-
-Usage
------
-
-\usemodule[annotation]
-
-\starttext
-... \annotation{...} ...
-
-... \startannotation ...\stopannotation ...
-\stoptext
-
-Options
--------
-
-- alternative
-- before
-- after
-- inbetween
-- headstyle
-- headcolor
-- command
-- text
-- title
-- number
-- next
-- ... \ No newline at end of file
diff --git a/macros/context/contrib/context-annotation/doc/context/third/annotation/annotation-doc.pdf b/macros/context/contrib/context-annotation/doc/context/third/annotation/annotation-doc.pdf
deleted file mode 100644
index 131665ac31..0000000000
--- a/macros/context/contrib/context-annotation/doc/context/third/annotation/annotation-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-annotation/tex/context/interface/third/t-annotation.xml b/macros/context/contrib/context-annotation/tex/context/interface/third/t-annotation.xml
deleted file mode 100644
index 58f3c5e162..0000000000
--- a/macros/context/contrib/context-annotation/tex/context/interface/third/t-annotation.xml
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2010.12.31">
-
-<cd:command name="defineannotation" file="t-annotation.mkvi">
- <cd:sequence>
- <cd:string value="defineannotation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:keywords n="2" optional="yes">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="3" list="yes" optional="yes">
- <cd:inherit name="setupannotation" n="2"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="annotation" generated="yes" file="t-annotation.mkvi">
- <cd:sequence>
- <cd:variable value="annotation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes" optional="yes">
- <cd:inherit name="setupannotation"/>
- </cd:assignments>
- <cd:content n="2" optional="yes"/>
- <cd:content n="3"/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="annotation" generated="yes" type="environment" file="t-annotation.mkvi">
- <cd:sequence>
- <cd:variable value="annotation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes" optional="yes">
- <cd:inherit name="setupannotation"/>
- </cd:assignments>
- <cd:content n="2" optional="yes"/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setupannotation" file="t-annotation.mkvi">
- <cd:sequence>
- <cd:string value="setupannotation"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1" list="yes" optional="yes">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="2" list="yes">
- <cd:parameter name="alternative">
- <cd:constant type="text"/>
- <cd:constant type="paragraph" default="yes"/>
- <cd:constant type="comment"/>
- <cd:constant type="tooltip"/>
- <cd:constant type="inmargin"/>
- <cd:constant type="inleft"/>
- <cd:constant type="inright"/>
- <cd:constant type="margin"/>
- <cd:constant type="leftmargin"/>
- <cd:constant type="rightmargin"/>
- <cd:constant type="innermargin"/>
- <cd:constant type="outermargin"/>
- <cd:constant type="footnote"/>
- <cd:constant type="endnote"/>
- <cd:constant type="command"/>
- </cd:parameter>
- <cd:parameter name="before">
- <cd:constant type="cd:command"/>
- </cd:parameter>
- <cd:parameter name="after">
- <cd:constant type="cd:command"/>
- </cd:parameter>
- <cd:parameter name="inbetween">
- <cd:constant type="cd:command" default="\blank"/>
- </cd:parameter>
- <cd:parameter name="style">
- <cd:resolve name="style"/>
- </cd:parameter>
- <cd:parameter name="headstyle">
- <cd:resolve name="style" default="bold"/>
- </cd:parameter>
- <cd:parameter name="textstyle">
- <cd:resolve name="style"/>
- </cd:parameter>
- <cd:parameter name="color">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="headcolor">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="textcolor">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="title">
- <cd:constant type="yes" default="yes"/>
- <cd:constant type="no"/>
- </cd:parameter>
- <cd:parameter name="number">
- <cd:constant type="yes"/>
- <cd:constant type="no" default="yes"/>
- </cd:parameter>
- <cd:parameter name="next">
- <cd:constant type="cd:command" default="\autoinsertnextspace"/>
- </cd:parameter>
- <cd:parameter name="command">
- <cd:constant type="cd:twoarguments"/>
- </cd:parameter>
- <cd:parameter name="counter">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="reference">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="export">
- <cd:constant type="yes"/>
- <cd:constant type="no" default="yes"/>
- </cd:parameter>
- <cd:parameter name="list">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="display">
- <cd:constant type="yes"/>
- <cd:constant type="no"/>
- <cd:constant type="auto" default="yes"/>
- </cd:parameter>
- <cd:parameter name="paragraph">
- <cd:constant type="yes"/>
- <cd:constant type="no" default="yes"/>
- </cd:parameter>
- <cd:parameter name="spacebefore">
- <cd:inherit name="blank" n="1" default="line"/>
- </cd:parameter>
- <cd:parameter name="spaceafter">
- <cd:inherit name="blank" n="1" default="line"/>
- </cd:parameter>
- <cd:parameter name="left">
- <cd:constant type="cd:text" default="("/>
- </cd:parameter>
- <cd:parameter name="right">
- <cd:constant type="cd:text" default=")"/>
- </cd:parameter>
- <cd:parameter name="indentnext">
- <cd:constant type="yes" default="yes"/>
- <cd:constant type="no"/>
- <cd:constant type="auto"/>
- </cd:parameter>
- <cd:parameter name="indenting">
- <cd:inherit name="setupindenting" n="1" default="never"/>
- </cd:parameter>
- <cd:parameter name="align">
- <cd:inherit name="setupalign" n="1"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-</cd:interface> \ No newline at end of file
diff --git a/macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.lua b/macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.lua
deleted file mode 100644
index 0221cc4a77..0000000000
--- a/macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.lua
+++ /dev/null
@@ -1,151 +0,0 @@
-if not modules then modules = { } end modules ['t-annotation'] = {
- version = 1.000,
- comment = "Annotations",
- author = "Wolfgang Schuster",
- copyright = "Wolfgang Schuster",
- license = "GNU General Public License"
-}
-
-thirddata = thirddata or {}
-thirddata.annotation = thirddata.annotation or {}
-
-local annotation = thirddata.annotation
-
-local variables = interfaces.variables
-
-local format = string.format
-local gsub = string.gsub
-local rep = string.rep
-local validstring = string.valid
-
-local datasets = job.datasets
-
-local v_yes = variables.yes
-local v_no = variables.no
-local v_auto = variables.auto
-local v_paragraph = variables.paragraph
-local v_text = variables.text
-local v_command = variables.command
-local v_vertical = variables.vertical
-local v_horizontal = variables.horizontal
-local v_annotation = variables.annotation
-local v_buffer = variables.buffer
-
-local texsprint = tex.sprint
-local ctxcatcodes = tex.ctxcatcodes
-local txtcatcodes = tex.txtcatcodes
-
--- Collect the content of the environment
-
-local data = { }
-
-function annotation.erasedata(name)
- data[name] = nil
-end
-
-function annotation.getdata(name)
- local data = data[name]
- return data and data.content or ""
-end
-
-function annotation.printdata(environment,name)
- local content, catcodes
- if tex.conditionals['c_annotation_buffer'] and name ~= "" then
- content = datasets.getdata(environment,name,"content") or ""
- catcodes = datasets.getdata(environment,name,"catcodes") or ""
- else
- content = data[name] and data[name]["content"] or ""
- catcodes = data[name] and data[name]["catcodes"] or ""
- end
- if catcodes == txtcatcodes then
- context.pushcatcodes(txtcatcodes)
- else
- context.pushcatcodes(ctxcatcodes)
- end
- if tex.conditionals['c_annotation_inline'] then
- context(content:strip()) -- remove leading/trailing spaces
- else
- context.viafile(content,format("annotation.%s",validstring(name,"noname")))
- end
- context.popcatcodes()
-end
-
-function annotation.parameters(environment,name)
- local data = data[name]
- local parameters = data and data.parameters or ""
- texsprint(ctxcatcodes,parameters)
-end
-
-function annotation.dataset(environment,name,parameters,content,catcodes)
- datasets.setdata {
- name = environment,
- tag = name,
- data = {
- parameters = parameters,
- content = content,
- catcodes = catcodes
- }
- }
-end
-
-function annotation.collectdata(environment,name,parameters,content,begintag,endtag,catcodes)
- local oldcontent = annotation.getdata(name)
- local content = content
- local parameters = parameters
- local catcodes = catcodes
- local nesting = false
- if oldcontent == "" then
- -- no nested environment
- else
- content = oldcontent .. endtag .. " " .. content
- end
- if select(2,gsub(content,begintag,begintag)) > select(2,gsub(content,endtag,endtag)) then
- nesting = true
- else
- nesting = false
- end
- if not nesting and name ~= "" then
- annotation.dataset(environment,name,parameters,content,catcodes)
- end
- data[name] = { parameters = parameters, content = content, catcodes = catcodes }
- commands.doifelse(nesting)
-end
-
-function annotation.savedata(environment,name,parameters,content,catcodes)
- data[name] = { parameters = parameters, content = content, catcodes = catcodes }
-end
-
--- Write the content of the environment to a file
-
-annotation.empty = true
-
-function annotation.open()
- annotation.export = io.open(file.addsuffix(table.concat({tex.jobname,"annotation"},"-"),"txt"),"wb")
-end
-
-function annotation.write(title,content)
- local title, content = title:strip(), content
- if annotation.empty == true then
- annotation.open()
- annotation.empty = false
- else
- annotation.export:write("\n\n")
- end
- if title ~= "" then
- annotation.export:write(title)
- annotation.export:write("\n",rep("-",#title),"\n\n")
- content = content:gsub(" \\par ","\n\n")
- annotation.export:write(content)
- end
-end
-
---~ function annotation.write(title,content)
---~ local title, content = title:strip(), content
---~ if annotation.empty == true then
---~ annotation.open()
---~ annotation.empty = false
---~ else
---~ annotation.export:write("\n")
---~ end
---~ annotation.export:write(title.." "..content)
---~ end
diff --git a/macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.mkvi b/macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.mkvi
deleted file mode 100644
index 41ca153175..0000000000
--- a/macros/context/contrib/context-annotation/tex/context/third/annotation/t-annotation.mkvi
+++ /dev/null
@@ -1,1077 +0,0 @@
-%D \module
-%D [ file=t-annotation,
-%D version=2013.05.27,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Annotations,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2011 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C (at your option) any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-% begin info
-%
-% title : annotate text blocks
-% comment : create todo commands and environments and inline buffers
-% status : under development, mkiv only
-%
-% end info
-
-%M \usemodule[annotation]
-%M \loadsetups[t-annotation.xml]
-%M
-%M \setupbodyfont[calluna]
-%M
-%M \definedescription[description][alternative=margin]
-%M
-%M \setuptyping[typing][bodyfont=]
-
-%D \subject{\textbackslash defineannotation}
-%D
-%D \showsetup{defineannotation}
-%D
-%D \subject{The \tex{setupannotation} command}
-%D
-%D \showsetup{setupannotation}
-%D
-%D \startdescription {alternative}
-%D With the “alternative” you can control the placement of the anootation block.
-%D
-%D \starttabulate[|l|p|]
-%D \NC \bf Name \NC \bf Description \NC\NR
-%D \NC text \EQ inline \NC\NR
-%D \NC paragraph \EQ Separate paragraph \NC\NR
-%D \NC comment \EQ pdf comment \NC\NR
-%D \NC tooltip \EQ \type{\tooltip} \NC\NR
-%D \NC inmargin \EQ \type{\inmargin} \NC\NR
-%D \NC inleft \EQ \type{\inleft} \NC\NR
-%D \NC inright \EQ \type{\inright} \NC\NR
-%D \NC margin \EQ \type{\inmargin} \NC\NR
-%D \NC leftmargin \EQ \type{\inleft} \NC\NR
-%D \NC rightmargin \EQ \type{\inright} \NC\NR
-%D \NC innermargin \EQ \type{\ininner} \NC\NR
-%D \NC outermargin \EQ \type{\inouter} \NC\NR
-%D \NC footnote \EQ \type{\footnote} \NC\NR
-%D \NC endnote \EQ \type{\endnote} \NC\NR
-%D \NC command \EQ use the “command” key \NC\NR
-%D \stoptabulate
-%D \stopdescription
-%D
-%D \startdescription {title}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {text}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {number}
-%D The “number” key let you control whether to show a number or not. Each time
-%D you show a number the associated counter is incremented by one.
-%D \stopdescription
-%D
-%D \startdescription {list}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {counter}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {reference}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {left}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {right}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {next}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {display}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {paragraph}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {command}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {export}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {before}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {after}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {inbetween}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {spacebefore}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {spaceafter}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {style}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {color}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {headstyle}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {headcolor}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {textstyle}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {textcolor}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {align}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {indenting}
-%D …
-%D \stopdescription
-%D
-%D \startdescription {indentnext}
-%D This key let you control whether the next paragraph after the annotation block
-%D is indented or not. The option is only used for annotation which are set with
-%D the “paragraph” or “command” alternative, for “command” this is only true when
-%D display is set to “yes” or “auto”.
-%D \stopdescription
-%D
-%D \subject{The \textbackslash annotation command}
-%D
-%D \showsetup{annotation}
-%D \showsetup{startannotation}
-%D
-%D \subject{Accesing values}
-%D
-%D As you saw before you can get the content of the title and content blocks
-%D with the “command” alternative but there is another way to access
-%D the raw values of each element with the following for commands.
-%D
-%D \startitemize[packed]
-%D \item \type{\placeannotationtext}
-%D \item \type{\placeannotationtitle}
-%D \item \type{\placeannotationnumber}
-%D \item \type{\placeannotationcontent}
-%D \stopitemize
-%D
-%D The following example shows you how you can use the commands for yourself
-%D in your own defintions for the annotation environment. The \type{\placeannotationtext}
-%D commands holds the value you set with the “title” key while \type{\placeannotationnumber}
-%D let you access the number countervalue.
-%D
-%D \subject{Customized Layouts}
-%D
-%D \subsubject{Example 1}
-%D
-%D \startbuffer
-%D \define[2]\AnnotationCommand
-%D {\starttabulate[|l|p|]
-%D \NC Text \EQ \rawannotationtext \NC\NR
-%D \NC Number \EQ \rawannotationcounter \NC\NR
-%D \NC Title \EQ \rawannotationtitle \NC\NR
-%D \NC Content \EQ \rawannotationcontent \NC\NR
-%D \stoptabulate}
-%D
-%D \setupannotation
-%D [alternative=command,
-%D command=\AnnotationCommand,
-%D text=Annotation ,
-%D number=yes]
-%D
-%D \startannotation {Peter D. Ward}
-%D The Earth, as a habitat for animal life, is in old age and
-%D has a fatal illness. Several, in fact. It would be happening
-%D whether humans had ever evolved or not. But our presence is
-%D like the effect of an old-age patient who smokes many packs
-%D of cigarettes per day – and we humans are the cigarettes.
-%D \stopannotation
-%D \stopbuffer
-%D
-%D \start \typebuffer[option=tex] \getbuffer \stop
-%D
-%D \subsubject{Example 2}
-%D
-%D \startbuffer
-%D \define[2]\AnnotationCommand
-%D {\textrule{#1}#2\textrule}
-%D
-%D \setupannotation
-%D [alternative=command,
-%D command=\AnnotationCommand,
-%D text=Annotation]
-%D
-%D \startannotation
-%D The Earth, as a habitat for animal life, is in old age and
-%D has a fatal illness. Several, in fact. It would be happening
-%D whether humans had ever evolved or not. But our presence is
-%D like the effect of an old-age patient who smokes many packs
-%D of cigarettes per day – and we humans are the cigarettes.
-%D \stopannotation
-%D \stopbuffer
-%D
-%D \start \typebuffer \getbuffer \stop
-%D
-%D \subsubject{Example 3}
-%D
-%D \startbuffer
-%D \define[2]\AnnotationCommand
-%D {\startblockquote
-%D “#2”\wordright{\placeannotationtitle}%
-%D \stopblockquote}
-%D
-%D \setupannotation
-%D [alternative=command,
-%D command=\AnnotationCommand]
-%D
-%D \startannotation {Peter D. Ward}
-%D The Earth, as a habitat for animal life, is in old age and
-%D has a fatal illness. Several, in fact. It would be happening
-%D whether humans had ever evolved or not. But our presence is
-%D like the effect of an old-age patient who smokes many packs
-%D of cigarettes per day – and we humans are the cigarettes.
-%D \stopannotation
-%D \stopbuffer
-%D
-%D \start \typebuffer \getbuffer \stop
-
-\writestatus{loading}{ConTeXt User Module / Annotations}
-
-\unprotect
-
-\startinterface all
- \setinterfacevariable {annotation} {annotation}
- \setinterfacevariable {tooltip} {tooltip}
-\stopinterface
-
-\startinterface all
- \setinterfaceconstant {content} {content}
- \setinterfaceconstant {leftsymbol} {leftsymbol}
- \setinterfaceconstant {rightsymbol} {rightsymbol}
-\stopinterface
-
-\newconditional\c_annotation_header
-\newconditional\c_annotation_display
-\newconditional\c_annotation_inline
-\newconditional\c_annotation_number
-\newconditional\c_annotation_title
-\newconditional\c_annotation_paragraph
-\newconditional\c_annotation_buffer
-\newconditional\c_annotation_rightpage
-
-\installnamespace {annotation}
-\installnamespace {annotationalternative}
-\installnamespace {annotationrenderings}
-\installnamespace {annotationmethod}
-\installnamespace {annotationlevel}
-
-\installcommandhandler \????annotation {annotation} \????annotation
-
-\ctxloadluafile{t-annotation}
-
-\appendtoks
- \expandafter\newcount\csname\????annotationlevel\currentannotation\endcsname
- \setuevalue {\currentannotation}{\annotation_cmd{\currentannotation}}%
- \setuevalue{\e!start\currentannotation}{\annotation_beg{\currentannotation}}%
- \setuevalue{\e!stop \currentannotation}{\annotation_end }%
- \setuevalue{\e!get \currentannotation}{\annotation_get{\currentannotation}}%
-\to \everydefineannotation
-
-\appendtoks
- \definedataset[\currentannotation]%
-\to \everydefineannotation
-
-% each new environment creates a list and a counter with the same,
-% one can also use the counter of another environment but in this
-% case it has to be set with the “counter” key
-
-\appendtoks
- \letannotationparameter\s!counter\currentannotation
-\to \everypresetannotation
-
-\appendtoks
- \edef\p_annotation_counter{\annotationparameter\s!counter}%
- \ifx\p_annotation_counter\currentannotation
- \registerannotationcounter\currentannotation
- \definelist [\currentannotation]%
- \definecounter[\currentannotation]%
- \synchronizeannotationcounters
- \fi
-\to \everydefineannotation
-
-% the \setupannotation command inherits all keys from \setupstructurecounter,
-% to do this a single line is necessary which takes care of this
-
-\installcounterassociation{annotation}
-
-\appendtoks
- \synchronizeannotationcounters
-\to \everysetupannotation
-
-% Code for the annotation environment and command
-
-\def\annotation_initialize
- {\let\m_annotation_name \empty
- \let\m_annotation_parameters\empty
- %
- \setfalse\c_annotation_header
- \setfalse\c_annotation_display
- \setfalse\c_annotation_inline
- \setfalse\c_annotation_number
- \setfalse\c_annotation_title
- \setfalse\c_annotation_paragraph
- \setfalse\c_annotation_buffer
- \setfalse\c_annotation_rightpage
- %
- \let\currentannotationheader \annotation_header_formatted_indeed
- \let\currentannotationcontent\annotation_content_formatted_indeed
- \let\currentannotationtext \annotation_text_formatted
- \let\currentannotationcounter\annotation_counter_formatted
- \let\currentannotationtitle \annotation_title_formatted
- %
- \let\rawannotationheader \annotation_header_raw
- \let\rawannotationcontent\annotation_content_raw
- \let\rawannotationtext \annotation_text_raw
- \let\rawannotationcounter\annotation_counter_raw
- \let\rawannotationtitle \annotation_title_raw}
-
-\unexpanded\def\annotation_beg#environment%
- {\begingroup
- \annotation_initialize
- \edef\currentannotation{#environment}%
- \dodoubleempty\annotation_beg_parameters}
-
-\def\annotation_beg_parameters
- {\iffirstargument
- \ifsecondargument
- \doubleexpandafter\annotation_beg_parameters_two
- \else
- \doubleexpandafter\annotation_beg_parameters_one
- \fi
- \else
- \expandafter\annotation_beg_parameters_zero
- \fi}
-
-\def\annotation_beg_parameters_two[#name][#parameters]%
- {\edef\m_annotation_name {#name}%
- \edef\m_annotation_parameters{#parameters}%
- \dosinglegroupempty\annotation_beg_title}
-
-\def\annotation_beg_parameters_one[#name][#parameters]%
- {\doifassignmentelse{#name}
- {\edef\m_annotation_parameters{#name}}
- {\edef\m_annotation_name {#name}}%
- \dosinglegroupempty\annotation_beg_title}
-
-\def\annotation_beg_parameters_zero[#name][#parameters]%
- {\dosinglegroupempty\annotation_beg_title}
-
-\def\annotation_beg_title#title%
- {\ctxlua{thirddata.annotation.erasedata("\m_annotation_name")}%
- \edef\m_annotation_parameters{\c!reference=,\c!list=,\c!title={#title},\m_annotation_parameters}%
- \normalexpanded
- {\annotation_environment
- \expandafter\noexpand\csname\e!start\currentannotation\endcsname
- \expandafter\noexpand\csname\e!stop \currentannotation\endcsname}}
-
-\unexpanded\def\annotation_environment#1#2%
- {\begingroup\obeylines
- \def\annotation_collect##1#2%
- {\ctxlua{thirddata.annotation.collectdata("\currentannotation","\m_annotation_name",\!!bs\m_annotation_parameters\!!es,\!!bs\normalunexpanded{##1}\!!es,\!!bs#1\!!es,\!!bs#2\!!es,\number\catcodetable)}
- \annotation_collect
- \annotation_method}%
- \annotation_collect}
-
-\unexpanded\def\annotation_end
- {}
-
-\unexpanded\def\annotation_cmd#environment%
- {\begingroup
- \annotation_initialize
- \edef\currentannotation{#environment}%
- \dodoubleempty\annotation_cmd_parameters}
-
-\def\annotation_cmd_parameters
- {\iffirstargument
- \ifsecondargument
- \doubleexpandafter\annotation_cmd_parameters_two
- \else
- \doubleexpandafter\annotation_cmd_parameters_one
- \fi
- \else
- \expandafter\annotation_cmd_parameters_zero
- \fi}
-
-\def\annotation_cmd_parameters_two[#name][#parameters]%
- {\edef\m_annotation_name {#name}%
- \edef\m_annotation_parameters{#parameters}%
- \dodoublegroupempty\annotation_cmd_title}
-
-\def\annotation_cmd_parameters_one[#name][#parameters]%
- {\doifassignmentelse{#name}
- {\edef\m_annotation_parameters{#name}}
- {\edef\m_annotation_name {#name}}%
- \dodoublegroupempty\annotation_cmd_title}
-
-\def\annotation_cmd_parameters_zero[#name][#parameters]%
- {\dodoublegroupempty\annotation_cmd_title}
-
-\def\annotation_cmd_title
- {\ifsecondargument
- \expandafter\annotation_cmd_content
- \else
- \expandafter\annotation_cmd_content\expandafter\empty
- \fi}
-
-\def\annotation_cmd_content#title#content%
- {\ctxlua{thirddata.annotation.erasedata("\m_annotation_name")}%
- \edef\m_annotation_parameters{\c!reference=,\c!list=,\c!title={#title},\m_annotation_parameters}%
- \begingroup
- \ctxlua{thirddata.annotation.savedata("\currentannotation","\m_annotation_name","\m_annotation_parameters",\!!bs\normalunexpanded{#content}\!!es,\number\catcodetable)}%
- \annotation_method}
-
-\unexpanded\def\annotation_get#environment%
- {\begingroup
- \annotation_initialize
- \edef\currentannotation{#environment}%
- \dodoubleempty\annotation_get_parameters}
-
-\def\annotation_get_parameters
- {\iffirstargument
- \iffirstargument
- \doubleexpandafter\annotation_get_parameters_two
- \else
- \doubleexpandafter\annotation_get_parameters_one
- \fi
- \else
- \expandafter\annotation_get_parameters_zero
- \fi}
-
-\def\annotation_get_parameters_two[#name][#parameters]%
- {\edef\m_annotation_name {#name}%
- \edef\m_annotation_parameters{#parameters}%
- \annotation_get_content}
-
-\def\annotation_get_parameters_one[#name][#parameters]%
- {\doifassignmentelse{#name}
- {\edef\m_annotation_parameters{#name}}
- {\edef\m_annotation_name {#name}}%
- \annotation_get_content}
-
-\def\annotation_get_parameters_zero[#name][#parameters]%
- {\annotation_get_content}
-
-\def\annotation_get_content
- {\letannotationparameter\c!method\s!default
- \settrue\c_annotation_buffer
- \edef\m_annotation_parameters{\ctxlua{thirddata.annotation.parameters("\currentannotation","\m_annotation_name")},\m_annotation_parameters}%
- \begingroup
- \annotation_method}
-
-\def\annotation_alternative
- {\edef\currentannotationalternative {\annotationparameter \c!alternative }%
- \edef\p_annotationalternative_renderingsetup{\annotationalternativeparameter\c!renderingsetup}%
- \edef\p_annotationalternative_alternative {\annotationalternativeparameter\c!alternative }%
- \ifx\p_annotationalternative_alternative\v!vertical
- \settrue\c_annotation_display
- \else\ifx\p_annotationalternative_alternative\v!horizontal
- \settrue\c_annotation_inline
- \else\ifx\p_annotationalternative_alternative\v!auto % used for \setupannotation[alternative=command]
- \ifx\p_annotation_display\v!yes
- \settrue\c_annotation_display
- \else\ifx\p_annotation_display\v!no
- \settrue\c_annotation_inline
- \else
- \ifvmode
- \settrue\c_annotation_display
- \else
- \settrue\c_annotation_inline
- \fi
- \fi\fi
- \else\ifx\p_annotationalternative_alternative\v!none % needed for \setupannotation[alternative=none]
- \ifhmode
- \settrue\c_annotation_inline
- \fi
- \else
- % margin, comment etc. annotations
- \fi\fi\fi\fi
- \annotation_before
- \annotation_tagged_start
- \autosetups\p_annotationalternative_renderingsetup
- \annotation_tagged_stop
- \annotation_after}
-
-\def\annotation_before
- {\ifconditional\c_annotation_display
- \edef\p_annotation_spacebefore {\annotationparameter\c!spacebefore }%
- \edef\p_annotation_before {\annotationparameter\c!before }%
- \edef\p_annotation_spaceafter {\annotationparameter\c!spaceafter }%
- \edef\p_annotation_after {\annotationparameter\c!after }%
- \edef\p_annotation_inbetween {\annotationparameter\c!inbetween }%
- \edef\p_annotation_indenting {\annotationparameter\c!indenting }%
- \edef\p_annotation_interlinespace{\annotationparameter\c!interlinespace}%
- \ifx\p_annotation_spacebefore\empty
- \endgraf
- \else
- \blank[\p_annotation_spacebefore]%
- \fi
- \ifx\p_annotation_indenting\empty \else
- \setupindenting[\p_annotation_indenting]%
- \fi
- \ifconditional\c_annotation_paragraph
- \ifx\p_annotation_interlinespace\v!empty
- \setupinterlinespace
- \else
- \setupinterlinespace[\p_annotation_interlinespace]%
- \fi
- \fi
- \p_annotation_before
- \fi}
-
-\def\annotation_after
- {\ifconditional\c_annotation_display
- \p_annotation_after
- \ifx\p_annotation_spaceafter\empty
- \endgraf
- \else
- \blank[\p_annotation_spaceafter]%
- \fi
- \fi}
-
-% methods
-
-\unexpanded\def\installannotationmethod#name#command%
- {\setvalue{\????annotationmethod#name}{#command}}
-
-\def\annotation_method
- {\endgroup
- \expandnamespaceparameter\????annotationmethod\annotationparameter\c!method\s!default}
-
-\def\annotation_method_default
- {\normalexpanded{\annotation_parameters[\m_annotation_parameters]}%
- \annotation_alternative
- \ifconditional\c_annotation_display
- \checknextindentation[\p_annotation_indentnext]%
- \glet\annotation_aftergroup\dorechecknextindentation
- \else
- \ifconditional\c_annotation_inline
- \glet\annotation_aftergroup\p_annotation_next
- \else
- \glet\annotation_aftergroup\GotoPar
- \fi
- \fi
- \aftergroup\annotation_aftergroup
- \endgroup}
-
-\def\annotation_method_buffer
- {\endgroup}
-
-\installannotationmethod \s!default \annotation_method_default
-\installannotationmethod \v!buffer \annotation_method_buffer
-
-% processing
-
-\def\c_annotation_level{\csname\????annotationlevel\currentparentannotation\endcsname}
-
-\def\annotation_level
- {\let\currentparentannotation\currentannotation
- \advance\c_annotation_level\plusone
- \chaintocurrentannotation{\currentparentannotation:\number\c_annotation_level}%
- \edef\currentannotation{\currentparentannotation:\number\c_annotation_level}}
-
-\unexpanded\def\annotation_parameters[#parameters]%
- {\annotation_level
- \setupcurrentannotation[#parameters]%
- \useannotationstyleandcolor\c!style\c!color
- \edef\p_annotation_number {\annotationparameter\c!number }%
- \edef\p_annotation_header {\annotationparameter\c!header }%
- \edef\p_annotation_title {\annotationparameter\c!title }%
- \edef\p_annotation_text {\annotationparameter\c!text }%
- \edef\p_annotation_left {\annotationparameter\c!left }%
- \edef\p_annotation_right {\annotationparameter\c!right }%
- \edef\p_annotation_stopper {\annotationparameter\c!stopper }%
- \edef\p_annotation_reference {\annotationparameter\c!reference }%
- \edef\p_annotation_list {\annotationparameter\c!list }%
- \edef\p_annotation_counter {\annotationparameter\s!counter }%
- \edef\p_annotation_display {\annotationparameter\c!display }%
- \edef\p_annotation_paragraph {\annotationparameter\c!paragraph }%
- \edef\p_annotation_export {\annotationparameter\c!export }%
- \edef\p_annotation_indentnext {\annotationparameter\c!indentnext }%
- \edef\p_annotation_next {\annotationparameter\c!next }%
- \edef\p_annotation_doublesided{\annotationparameter\c!doublesided}%
- \edef\p_annotation_leftmargin {\annotationparameter\c!leftmargin }%
- \edef\p_annotation_rightmargin{\annotationparameter\c!rightmargin}%
- \ifx\p_annotation_number\v!yes
- \settrue\c_annotation_number
- \incrementcounter[\p_annotation_counter]%
- \fi
- \ifx\p_annotation_title\empty \else
- \settrue\c_annotation_title
- \fi
- \ifx\p_annotation_header\v!yes
- \ifconditional\c_annotation_number
- \settrue\c_annotation_header
- \else\ifconditional\c_annotation_title
- \settrue\c_annotation_header
- \else\ifx\p_annotation_text\empty
- % \setfalse\c_annotation_header
- \else
- \settrue\c_annotation_header
- \fi\fi\fi
- \fi
- \ifx\p_annotation_reference\empty \else
- \ifconditional\c_annotation_number
- \normalexpanded{\reference[\p_annotation_reference]{\directconvertedcounter\p_annotation_counter\empty}}%
- \else
- \normalexpanded{\reference[\p_annotation_reference]{{\tttf ??}}}%
- \fi
- \fi
- \ifx\p_annotation_list\empty \else
- \ifconditional\c_annotation_number
- \normalexpanded{\writetolist[\currentparentannotation]{\directconvertedcounter\p_annotation_counter\empty}{\p_annotation_list}}%
- \else
- \normalexpanded{\writetolist[\currentparentannotation]{}{\p_annotation_list}}%
- \fi
- \fi
- \ifx\p_annotation_paragraph\v!yes
- \settrue\c_annotation_paragraph
- \fi
- \ifx\p_annotation_doublesided\v!yes
- \signalrightpage
- \doifrightpageelse\settrue\setfalse\c_annotation_rightpage
- \else
- \settrue\c_annotation_rightpage
- \fi
- \ifx\p_annotation_export\v!yes
- \ifconditional\c_annotation_header % do this at the lua with the raw text
- \begingroup\simplifycommands
- \ctxlua{thirddata.annotation.write(\!!bs\annotation_header_raw\!!es,\!!bs\normalexpanded{\noexpand\detokenize{\annotation_content_raw}}\!!es)}%
- \endgroup
- \fi
- \fi}
-
-\def\annotation_tagged_start
- {\ifconditional\c_annotation_inline
- \dostarttagged\t!construct\currentparentannotation
- \else
- \dostarttagged\t!division\currentparentannotation
- \fi}
-
-\def\annotation_tagged_stop
- {\dostoptagged}
-
-% The title and the content of the annotation commands is accesed
-% by the following four commands, the formatted version is used
-% by alternatives which allow you to change the style and color.
-%
-% The raw version is used by alternatives where attributes are
-% not possible (comment) or undesired (footnotes).
-
-\unexpanded\def\annotation_header_formatted
- {\edef\p_annotation_headcommand{\annotationparameter\c!headcommand}%
- \p_annotation_headcommand\annotation_header_formatted_indeed}
-
-\unexpanded\def\annotation_header_formatted_indeed
- {\begingroup
- \useannotationstyleandcolor\c!headstyle\c!headcolor
- \p_annotation_text
- \ifconditional\c_annotation_number
- \ifx\p_annotation_text\empty \else
- \removeunwantedspaces\space % add space between “text” and “number” when there is text
- \fi
- \convertedcounter[\p_annotation_counter]%
- \fi
- \ifconditional\c_annotation_title
- \ifx\p_annotation_text\empty
- \ifconditional\c_annotation_number \space \fi % add space between “number” and “title” when there is a number
- \else
- \space % add space between “text” and “title” when there is a text
- \fi
- \p_annotation_left
- \p_annotation_title
- \p_annotation_right
- \fi
- \p_annotation_stopper
- \endgroup}
-
-\unexpanded\def\annotation_content_formatted
- {\edef\p_annotation_textcommand{\annotationparameter\c!textcommand}%
- \p_annotation_textcommand\annotation_content_formatted_indeed}
-
-\unexpanded\def\annotation_content_formatted_indeed
- {\begingroup
- \useannotationstyleandcolor\c!textstyle\c!textcolor
- \ifconditional\c_annotation_paragraph\setupinterlinespace\fi
- \ctxlua{thirddata.annotation.printdata("\currentparentannotation","\m_annotation_name")}%
- \removeunwantedspaces
- \ifconditional\c_annotation_paragraph\par\fi
- \endgroup}
-
-\unexpanded\def\annotation_text_formatted
- {\begingroup
- \useannotationstyleandcolor\c!headstyle\c!headcolor
- \annotationparameter\c!text
- \endgroup}
-
-\unexpanded\def\annotation_counter_formatted
- {\begingroup
- \useannotationstyleandcolor\c!headstyle\c!headcolor
- \convertedcounter[\p_annotation_counter]%
- \endgroup}
-
-\unexpanded\def\annotation_title_formatted
- {\begingroup
- \useannotationstyleandcolor\c!headstyle\c!headcolor
- \p_annotation_title
- \endgroup}
-
-\def\annotation_header_raw
- {\p_annotation_text
- \ifconditional\c_annotation_number
- \ifx\p_annotation_text\empty \else
- \removeunwantedspaces\space
- \fi
- \rawcountervalue[\p_annotation_counter]%
- \fi
- \ifconditional\c_annotation_title
- \ifx\p_annotation_text\empty
- \ifconditional\c_annotation_number \space \fi
- \else
- \space
- \fi
- \p_annotation_left
- \p_annotation_title
- \p_annotation_right
- \fi
- \p_annotation_stopper}
-
-\def\annotation_content_raw{\ctxlua{thirddata.annotation.printdata("\currentparentannotation","\m_annotation_name")}}
-\def\annotation_text_raw {\p_annotation_text}
-\def\annotation_counter_raw{\rawcountervalue[\p_annotation_counter]}
-\def\annotation_title_raw {\p_annotation_title}
-
-% With the command alternative one can access the formatted content and title
-% with the two arguments but it’s also possible to use the raw content of
-% each element with the \placeannotation... commands.
-
-\let\placeannotationtext \annotation_text_raw
-\let\placeannotationnumber \annotation_counter_raw
-\let\placeannotationtitle \annotation_title_raw
-\let\placeannotationcontent\annotation_content_raw
-
-% Condtionals for the users to check whether your’re in vertical or
-% horizontal mode, they are usefull when you want a command which
-% works different depenedent on the mode.
-
-\unexpanded\def\doifdisplayannotation
- {\ifconditional\c_annotation_display
- \expandafter\firstofoneargument
- \else
- \expandafter\gobbleoneargument
- \fi}
-
-\unexpanded\def\doifelsedisplayannotation
- {\ifconditional\c_annotation_display
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-\unexpanded\def\doifinlineannotation
- {\ifconditional\c_annotation_inline
- \expandafter\firstofoneargument
- \else
- \expandafter\gobbleoneargument
- \fi}
-
-\unexpanded\def\doifelseinlineannotation
- {\ifconditional\c_annotation_inline
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-% All layouts for the annotation commands are accessible with the alternative key,
-% the relation between the key values and the internal layout is done with the
-% following command. This command is not meant for user because they should always
-% use the command alternative for their own layouts but the author will add new
-% layouts if they are usefull.
-
-\installcommandhandler \????annotationalternative {annotationalternative} \????annotationalternative
-
-\defineannotationalternative
- [\v!text]
- [ \c!alternative=\v!horizontal,
- \c!renderingsetup=\????annotationrenderings:\v!text]
-
-\startsetups[\????annotationrenderings:\v!text]
- \ifconditional\c_annotation_header
- \annotation_header_formatted\space
- \fi
- \annotation_content_formatted
-\stopsetups
-
-\defineannotationalternative
- [\v!paragraph]
- [ \c!alternative=\v!vertical,
- \c!renderingsetup=\????annotationrenderings:\v!paragraph]
-
-\startsetups[\????annotationrenderings:\v!paragraph]
- \ifconditional\c_annotation_header
- \noindent\annotation_header_formatted
- \p_annotation_inbetween
- \fi
- \annotation_content_formatted
-\stopsetups
-
-\defineannotationalternative
- [\v!narrow]
- [ \c!alternative=\v!vertical,
- \c!renderingsetup=\????annotationrenderings:\v!narrow]
-
-\startsetups[\????annotationrenderings:\v!narrow]
- \ifconditional\c_annotation_rightpage
- \doadaptleftskip \p_annotation_leftmargin
- \doadaptrightskip\p_annotation_rightmargin
- \else
- \doadaptleftskip \p_annotation_rightmargin
- \doadaptrightskip\p_annotation_leftmargin
- \fi
- \annotation_content_formatted
-\stopsetups
-
-\defineannotationalternative
- [\v!comment]
- [\c!renderingsetup=\????annotationrenderings:\v!comment]
-
-\startsetups[\????annotationrenderings:\v!comment]
- \begingroup\simplifycommands
- \doifsomething{\annotationparameter\c!color}{\setupcomment[\c!color=\annotationparameter\c!color]}
- \removeunwantedspaces
- \ifconditional\c_annotation_header
- \inmargin[\c!stack=\v!yes]{\normalexpanded{\comment[\annotation_header_raw]{\annotation_content_raw}}}
- \else
- \inmargin[\c!stack=\v!yes]{\normalexpanded{\comment{\annotation_content_raw}}}
- \fi
- \endgroup
-\stopsetups
-
-\defineannotationalternative
- [\v!tooltip]
- [\c!renderingsetup=\????annotationrenderings:\v!tooltip]
-
-\startsetups[\????annotationrenderings:\v!tooltip]
- \ifconditional\c_annotation_title\else\removeunwantedspaces\fi
- \tooltip[\annotationparameter\c!location]{\annotation_title_raw}{\annotation_content_raw}
-\stopsetups
-
-\defineannotationalternative
- [\v!inmargin]
- [\c!command=\inmargin,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\defineannotationalternative
- [\v!margin]
- [\c!command=\inmargin,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\defineannotationalternative
- [\v!inleft]
- [\c!command=\inleft,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\defineannotationalternative
- [\v!leftmargin]
- [\c!command=\inleft,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\defineannotationalternative
- [\v!inright]
- [\c!command=\inright,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\defineannotationalternative
- [\v!rightmargin]
- [\c!command=\inright,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\defineannotationalternative
- [\v!innermargin]
- [\c!command=\ininner,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\defineannotationalternative
- [\v!outermargin]
- [\c!command=\inouter,
- \c!renderingsetup=\????annotationrenderings:\v!margin]
-
-\startsetups[\????annotationrenderings:\v!margin]
- \edef\p_annotation_command{\annotationalternativeparameter\c!command}%
- \ifx\p_annotation_command\empty \else
- \p_annotation_command{\annotationparameter\c!before
- \ifconditional\c_annotation_header
- \annotation_header_formatted
- \fi
- \annotationparameter\c!inbetween
- \annotation_content_formatted
- \annotationparameter\c!after}
- \fi
-\stopsetups
-
-\defineannotationalternative
- [\v!footnote]
- [ \c!alternative=\v!horizontal,
- \c!renderingsetup=\????annotationrenderings:\v!footnote]
-
-\startsetups[\????annotationrenderings:\v!footnote]
- \normalexpanded{\footnote{\annotation_content_raw}}
-\stopsetups
-
-\defineannotationalternative
- [\v!endnote]
- [ \c!alternative=\v!horizontal,
- \c!renderingsetup=\????annotationrenderings:\v!endnote]
-
-\startsetups[\????annotationrenderings:\v!endnote]
- \normalexpanded{\endnote{\annotation_content_raw}}
-\stopsetups
-
-\defineannotationalternative
- [\v!command]
- [ \c!alternative=\v!auto,
- \c!renderingsetup=\????annotationrenderings:\v!command]
-
-\startsetups[\????annotationrenderings:\v!command]
- \edef\p_annotation_command{\annotationparameter\c!command}%
- \ifx\p_annotation_command\empty \else
- \p_annotation_command\annotation_header_formatted\annotation_content_formatted
- \fi
-\stopsetups
-
-\defineannotationalternative
- [\v!quotation]
- [ \c!alternative=\v!horizontal,
- \c!renderingsetup=\????annotationrenderings:\v!quotation]
-
-\startsetups[\????annotationrenderings:\v!quotation]
- \annotationparameter\c!leftsymbol
- \annotation_content_raw\removeunwantedspaces
- \annotationparameter\c!rightsymbol
-\stopsetups
-
-\defineannotationalternative
- [\v!none]
- [\c!renderingsetup=\????annotationrenderings:\v!none]
-
-\startsetups[\????annotationrenderings:\v!none]
- \removeunwantedspaces
-\stopsetups
-
-% The module provides the option to write the content of each command to a external
-% file. The values for the option are defined with \defineannotationexport and can
-% be changed with \setupannotationexport.
-
-% \definenamespace
-% [annotationexport]
-% [ type=module,
-% comment=Annotationexport,
-% version=2011.02.17,
-% name=annotationexport,
-% style=no,
-% command=yes,
-% setup=yes,
-% \s!parent=annotationexport]
-%
-% \appendtoks
-% \ctxlua{thirddata.annotation.export_define{...}}%
-% \to \everydefineannotationexport
-%
-% \appendtoks
-% \ctxlua{thirddata.annotation.export_setup{...}}%
-% \to \everysetupannotationexport
-%
-% \defineannotationexport[\v!yes][\c!type=\v!default]
-% \defineannotationexport[\v!org][\c!type=\v!org]
-
-% To make the module usefull even if there is no annotation command in a document
-% i predefine here the command \annotation. As the command is created with
-% \defineannotation you can make specific setups for this command with
-% \setupannotation[annotation][...] which won’t affect all other commands.
-
-\defineannotation[\v!annotation]
-
-% Finally i set default values for all commands, you can change them in
-% your document but all or individual annotation commands.
-
-\setupannotation
- [ \c!headstyle=\v!bold,
- \c!left=(,
- \c!right=),
- \c!spacebefore=\v!line,
- \c!spaceafter=\annotationparameter\c!spacebefore,
- \c!inbetween=\blank,
- \c!alternative=\v!paragraph,
- \c!paragraph=\v!no,
- \c!number=\v!no,
- \c!header=\v!yes,
- \c!export=\v!no,
- \c!indenting=\v!never,
- \c!indentnext=\v!yes,
- \c!next=\autoinsertnextspace]
-
-\setupannotationalternative
- [\c!alternative=\v!none]
-
-% \setupannotationexport
-% [ \c!mode=\v!default,
-% \c!name=\v!annotation,
-% \c!extension=\s!txt]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-bnf/VERSION b/macros/context/contrib/context-bnf/VERSION
deleted file mode 100644
index 16307605cc..0000000000
--- a/macros/context/contrib/context-bnf/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2006.08.09
diff --git a/macros/context/contrib/context-bnf/doc/context/third/bnf/NEWS b/macros/context/contrib/context-bnf/doc/context/third/bnf/NEWS
deleted file mode 100644
index 2849b0784c..0000000000
--- a/macros/context/contrib/context-bnf/doc/context/third/bnf/NEWS
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- BNF Module News
-
-
-
-VERSION 0.3
-
- Nothing more than a clean-up of the project tree. Although the autotools
- setup was working OK it was more confusing than helpful. People tend to
- install these kinds of things in a much more ad hoc manner anyway.
-
-
-
-VERSION 0.2
-
-
- Total rewrite of the logic. Much easier to specify grammars, as the need for
- commas and full-stops has been lifted. Furthermore, there is now an
- alternative way of specifying non-terminals, using '-pairs instead. The
- output is a lot nicer now as well, albeit not as compact as before.
-
-
-
-VERSION 0.1
-
-
- Initial release, nothing much to report here.
diff --git a/macros/context/contrib/context-bnf/doc/context/third/bnf/README b/macros/context/contrib/context-bnf/doc/context/third/bnf/README
deleted file mode 100644
index 891661832f..0000000000
--- a/macros/context/contrib/context-bnf/doc/context/third/bnf/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
- BNF Module README
-
-
-INTRODUCTION
-
-
- The t-bnf module implements a way to easily write BNF grammars in CONTEXT.
- Let's look at an example BNF grammar in a document:
-
- \starttext
-
- Here's a \BNF\ grammar. Enjoy.
-
- \placebnfgrammar
- [here]
- [bnf:test]
- {A test of the \BNF\ module}
- {\startbnfgrammar[]
- <S>: a<S>b
- <S>: $\epsilon$
- \stopbnfgrammar}
-
- Which will match the language $L = \{\,a^nb^n \mid n \geq 0\,\}$.
-
- \stoptext
-
- You may try to generate module documenation embedded in t-bnf.tex with texexec
- as well:
-
- % texexec --interface=en --module --pdf t-bnf.tex
-
- If you have any issues with creating the documentation this may be a result
- of lacking the proper language format. You can look up the proper
- information for generating these formats in minstall.pdf at PRAGMA-ADEs site
- (http://www.pragma-ade.com/).
-
- Enjoy!
diff --git a/macros/context/contrib/context-bnf/doc/context/third/bnf/t-bnf.pdf b/macros/context/contrib/context-bnf/doc/context/third/bnf/t-bnf.pdf
deleted file mode 100644
index 863553fadc..0000000000
--- a/macros/context/contrib/context-bnf/doc/context/third/bnf/t-bnf.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-bnf/tex/context/third/bnf/t-bnf.tex b/macros/context/contrib/context-bnf/tex/context/third/bnf/t-bnf.tex
deleted file mode 100644
index 3f40c3e797..0000000000
--- a/macros/context/contrib/context-bnf/tex/context/third/bnf/t-bnf.tex
+++ /dev/null
@@ -1,195 +0,0 @@
-%D \module
-%D [ file=t-bnf,
-%D version=2004.6.23,
-%D title=\CONTEXT\ BNF Grammar Module,
-%D subtitle=Grammars,
-%D author={Nikolai Weibull},
-%D date=\currentdate,
-%D copyright={Nikolai Weibull}]
-%C
-%C This module is NOT part of the \CONTEXT\ macro||package.
-%C This module is free software; you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation; either version 2 of the License, or
-%C (at your option) any later version.
-%C
-%C This module is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program; if not, write to the Free Software
-%C Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-\writestatus{loading}{BNF Macros / Initialization}
-
-\unprotect
-
-%M \usemodule[bnf]
-%D We define a new system variable for our settings:
-
-\definesystemvariable{bnf}
-
-%D We need some constants for the multi||lingual interface,
-
-\startconstants english dutch
- terminalstart: terminalstart terminalstart
- terminalstop: terminalstop terminalstop
- nonterminalstart: nonterminalstart nonterminalstart
- nonterminalstop: nonterminalstop nonterminalstop
- is: is worden
-\stopconstants
-
-%D and while we're at it, lets define some variables.
-
-\startvariables english dutch
- bnfgrammar: bnfgrammar bnfspraakleer
- bnfgrammars: bnfgrammars bnfspraakleer
-\stopvariables
-
-%D Finally, we want the commands to be multi||lingually accessible, so we set
-%D that up as well:
-
-\startcommands english dutch
- setupbnfgrammar: setupbnfgrammar stelbnfspraakleer
- startbnfgrammar: startbnfgrammar startbnfspraakleer
- stopbnfgrammar: stopbnfgrammar startbnfspraakleer
-\stopcommands
-
-%D \macros
-%D {startbnfgrammar, stopbnfgrammar}
-%D
-%D Now to the interesting parts, those that are actually useful to the outside
-%D world. First we have the \type{\startbnfgrammar} and \type{\stopbnfgrammar}
-%D pairs, which are of course used to delimit \BNF\ grammars. We would like to
-%D define \type{\startbnfgrammar} as \type{\def\startbnfgrammar[#1]}, but a bug
-%D in \CONTEXT\ prevents us from doing this, as the first character in the
-%D grammar may be active, for example \type{<}, but while checking for the
-%D presence of \type{[}, it gets ruined. A way around it is of course to
-%D require that the user pass an empty \type{[]} pair, and we will use this
-%D method at the moment.
-
-\def\complexstartbnfgrammar[#1]%
- {\endgraf\nobreak\medskip
- \begingroup
- \setupbnfgrammar[#1]%
- \chardef\bnfsinglequote=`'
- \defineactivecharacter : {\@@bnfis}
- \defineactivecharacter | {\@@bnfoption}
- \defineactivecharacter " %
- {\thinspace\bgroup\@@bnfterminalstart\setupinlineverbatim%
- \defineactivecharacter " {\@@bnfterminalstop\egroup\thinspace}}
- \defineactivecharacter ' %
- {\thinspace\bgroup\@@bnfterminalstart\setupinlineverbatim%
- \defineactivecharacter ' {\@@bnfterminalstop\egroup\thinspace}}
- \catcode`<=13
- \let\par=\bnfgrammarline
- \obeylines}
-
-\def\stopbnfgrammar{\medbreak\checknextindentation[\@@bnfindentnext]}
-
-\definecomplexorsimpleempty\startbnfgrammar
-
-%D \macros
-%D {<>,bnfgrammarrule}
-%D
-%D We need a couple more macros to deal with the interior of a \BNF\ grammar.
-%D \type{\<>} is used for non||terminals, and \type{\bnfgrammarrule} is used
-%D later on in \type{\bnfgrammarswitch} for continuing a line.
-
-\def\<#1>{\leavevmode\hbox{\@@bnfnonterminalstart#1\/\@@bnfnonterminalstop}}
-
-\bgroup
- \catcode`<=13
- \global\let<=\<
- \gdef\bnfgrammarrule<#1>{\endgraf\indent\<#1>}
-\egroup
-
-%D \macros
-%D {bnfgrammarline, bnfgrammarswitch, bnfgrammarcont}
-%D
-%D These macros deal with the ending of a line in a grammar.
-%D \type{\bnfgrammarline} is called whenever a new line begins, and invokes
-%D \type{\bnfgrammarswitch} to determine what to do next. If the next token is
-%D \type{\<}, we will call upon \type{\bnfgrammarrule} to deal with the new
-%D rule. If it is \type{\stopbnfgrammar}, we end the top||level group, and let
-%D it process \type{\stopbnfgrammar} afterwards. Otherwise we invoke
-%D \type{\bnfgrammarcont}, which will end the line and add some indentation to
-%D the continuing line.
-
-\def\bnfgrammarline{\futurelet\next\bnfgrammarswitch}
-\def\bnfgrammarswitch%
- {\ifx\next\<
- \let\next=\bnfgrammarrule
- \else\ifx\next\stopbnfgrammar
- \let\next=\endgroup
- \else
- \let\next=\bnfgrammarcont
- \fi\fi
- \next}
-\def\bnfgrammarcont{\hfil\break\indent\qquad}
-
-%D \macros
-%D {setupbnfgrammar}
-%D
-%D We want to allow our users to change the way the \BNF\ grammars are typeset,
-%D so we define a setup command for them to use.
-%D
-%D It allows you to define the start and stop sequence for terminals and
-%D non||terminals, as well as colons (lhs / rhs separator) and vertical bars
-%D (alternative), and commas. This has been multi||lingualized above, so
-%D choose your language.
-
-\def\dosetupbnfgrammar[#1]%
- {\getparameters[\??bnf][#1]}
-
-\def\setupbnfgrammar%
- {\dosingleargument\dosetupbnfgrammar}
-
-\setupbnfgrammar
- [\c!terminalstart=\tttf,
- \c!terminalstop=,
- \c!nonterminalstart=\mathematics{\langle},
- \c!nonterminalstop=\mathematics{\rangle},
- \c!is={ \mathematics{\longrightarrow}},
- \c!option=\mathematics{\vert},
- \c!indentnext=\v!no]
-
-%D \macros
-%D {BNF}
-%D
-%D We also define a useful abbreviation to be used for header texts and labels.
-
-\logo[BNF]{bnf}
-
-%D And we use it here:
-
-\setupheadtext[\s!en][\v!bnfgrammar=\BNF\ Grammar]
-\setupheadtext[\s!en][\v!bnfgrammars=\BNF\ Grammars]
-\setuplabeltext[\s!en][\v!bnfgrammar=\BNF\ Grammar ]
-
-%D Finally we define a float to be use with \BNF\ grammars, so that we can
-%D finish off with something like this:
-%D
-%D \startbuffer
-%D \placebnfgrammar
-%D [][]
-%D {An example of a placed grammar.}
-%D {\startbnfgrammar[]
-%D <exp>: <num> | <num> "+" <num>
-%D <num>: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
-%D \stopbnfgrammar}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \getbuffer
-%D
-%D which looks kind of nice.
-
-\definefloat
- [\v!bnfgrammar]
- [\v!bnfgrammars]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-chromato/VERSION b/macros/context/contrib/context-chromato/VERSION
deleted file mode 100644
index d600ebb715..0000000000
--- a/macros/context/contrib/context-chromato/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2008.04.05
diff --git a/macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-demo.pdf b/macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-demo.pdf
deleted file mode 100644
index b01ca2631f..0000000000
--- a/macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-doc.pdf b/macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-doc.pdf
deleted file mode 100644
index 061b408157..0000000000
--- a/macros/context/contrib/context-chromato/doc/context/third/chromato/chromato-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-chromato/tex/context/third/chromato/t-chromato.tex b/macros/context/contrib/context-chromato/tex/context/third/chromato/t-chromato.tex
deleted file mode 100644
index 0ab8ab35d8..0000000000
--- a/macros/context/contrib/context-chromato/tex/context/third/chromato/t-chromato.tex
+++ /dev/null
@@ -1,130 +0,0 @@
-%D \module
-%D [ file=t-chromato,
-%D version=2008.04.05,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Macros for chromatograms,
-%D author=Peter Münster,
-%D date=\currentdate,
-%D copyright={Peter Münster}]
-%C This module is copyrighted by Peter Münster.
-%C Please send any comments to pmrb at free.fr.
-
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-\startmodule[chromato]
-
-\writestatus{loading}{Macros for chromatograms}
-
-\unprotect
-
-%D Some internal dimensions:
-\doifundefined{Width}{\newdimen\Width}
-\doifundefined{Height}{\newdimen\Height}
-
-%D \macros{startChromato}
-%D Starting a chromatogram.
-\def\startChromato{\bgroup\dosingleempty\dostartChromato}
-\def\dostartChromato[#1]#2#3{\getparameters[CHROM][dim=0.6,#1]
- \def\myChromFig{\doifdefinedelse{CHROMSdim}{%
- \externalfigure[#2][height=\CHROMSdim\textheight]}{%
- \externalfigure[#2][width=\CHROMdim\makeupwidth]}}%
- \setbox\scratchbox\hbox{\myChromFig}%
- \Width=\wd\scratchbox \Height=\ht\scratchbox \setuppositioning[unit=pt]
- \gdef\SavedCaption{#3}\doifundefined{CHROMSdim}{\placefigure[][fig:#2]{#3}}%
- \bgroup\startpositioning\position(0,0){\myChromFig}}
-
-%D \macros{stopChromato}
-%D End of chromatogram.
-\def\stopChromato{\stoppositioning\egroup\egroup{\doifdefined{CHROMSdim}{%
- \SavedCaption}}}
-
-%D \macros{startChromatos}
-%D Begin set of chromatograms.
-\def\startChromatos{\dosingleempty\dostartChromatos}
-\def\dostartChromatos[#1]#2#3{\placefigure[][fig:#2]{#3}\bgroup
- \getparameters[CHROMS][dim=0.3,#1]
- \doifdefined{CHROMSdist}{\setupcombinations[distance=\CHROMSdist em]}%
- \startcombination[2*1]}
-
-%D \macros{stopChromatos}
-%D End of chromatograms.
-\def\stopChromatos{\stopcombination\egroup}
-
-%D Internal macro: position left or right:
-\define[3]\LRposition{\edef\YPos{\withoutpt{\the\dimexpr(\withoutpt{%
- \the\dimexpr(#1pt/100)}\Height - 0.1\baselineskip)}}%
- \position(#2,\YPos){\vbox to 2pt{\vss{\hbox to 0pt{#3}\vss}}}}
-
-%D \macros{Lbrace}
-%D Place a brace at the left.
-\define[4]\Lbrace{\LRposition{#1}0{\hss\rotate[rotation=90]{%
- $\overbrace{\hskip#2\Height}^{%
- \displaystyle\text{\rotate[rotation=270]{#4}}}$}\hskip#3em}}
-
-%D \macros{Rbrace}
-%D Place a brace at the right.
-\define[4]\Rbrace{\LRposition{#1}{\withoutpt{\the\Width}}{\hskip#3em
- \rotate[rotation=270]{$\overbrace{\hskip#2\Height}^{%
- \displaystyle\text{\rotate[rotation=90]{#4}}}$}\hss}}
-
-%D \macros{Larrow}
-%D Place a flesh at the left.
-\define[2]\Larrow{\LRposition{#1}0{\hss{\tx#2} $\rightarrow$}}
-
-%D \macros{Rarrow}
-%D Place a flesh at the right.
-\define[2]\Rarrow{\LRposition{#1}{\withoutpt{\the\Width}}{$\leftarrow$ \tx#2}}
-
-%D \macros{Above,Abrace}
-%D Place something above the chromatogram.
-\define[3]\Oposition{\edef\XPos{\withoutpt{\the\dimexpr(\withoutpt{%
- \the\dimexpr(#1pt/100)}\Width)}}%
- \position(\XPos,-\withoutpt{\the\dimexpr(#2\baselineskip)}){%
- \hbox to 0pt{\hss#3\hss}}}
-\define[2]\Above{\Oposition{#1}{0.8}{\tx#2}}
-\define[3]\Abrace{\Oposition{#1}{2.5}{%
- $\overbrace{\hskip#2\Width}^{\displaystyle\text{#3}}$}}
-
-\protect
-
-\stopmodule
-
-\doifnotmode{demo}{\endinput}
-
-%D Usage example:
-\usemodule[chromato]
-\setupexternalfigures[directory=samples]
-\mainlanguage[de]
-\starttext
-\startChromato{ecolizeit}{Expression der rekombinanten Fucosyltransferase~V in
- {\em E.~coli}.}
- \Above{5}{BRS}\Above{15}{1h}\Above{26}{2h}\Above{38}{3h}\Above{50}{4h}
- \Above{61}{1h}\Above{72}{2h}\Above{83}{3h}\Above{94}{4h}
- \Larrow{12}{97\,kDa}\Larrow{20}{66\,kDa}
- \Larrow{32}{45\,kDa}\Larrow{52}{31\,kDa}
- \Lbrace{39}{0.75}{4}{A}
- \Lbrace{90}{0.16}{4}{B}
- \Abrace{32}{0.42}{löslich}
- \Abrace{77}{0.42}{unlöslich}
- \Rarrow{29}{FucT~V}\Rarrow{87}{FucT~V}
-\stopChromato
-\startChromatos[dim=0.17,dist=2]{saeuger}{Expression von rekombinanter
- Fucosyltransferase~V in unterschiedlichen Säugerzellinien.}
- \startChromato{saeuger}{A}
- \Above{26}{CHO}\Above{74}{HEK}
- \Larrow{4}{96\,kDa}\Larrow{37}{66\,kDa}\Larrow{81}{45\,kDa}
- \stopChromato
- \startChromato{saeugerred}{B}
- \Above{26}{CHO}\Above{74}{HEK}
- \Rarrow{81}{FucT~V}
- \stopChromato
-\stopChromatos
-\stoptext
diff --git a/macros/context/contrib/context-cmscbf/VERSION b/macros/context/contrib/context-cmscbf/VERSION
deleted file mode 100644
index 5df0836645..0000000000
--- a/macros/context/contrib/context-cmscbf/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2006.09.12
diff --git a/macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-demo.pdf b/macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-demo.pdf
deleted file mode 100644
index 6f45bb60a0..0000000000
--- a/macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-doc.pdf b/macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-doc.pdf
deleted file mode 100644
index bce42c35d5..0000000000
--- a/macros/context/contrib/context-cmscbf/doc/context/third/cmscbf/cmscbf-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-cmscbf/tex/context/third/cmscbf/t-cmscbf.tex b/macros/context/contrib/context-cmscbf/tex/context/third/cmscbf/t-cmscbf.tex
deleted file mode 100644
index b3903fa761..0000000000
--- a/macros/context/contrib/context-cmscbf/tex/context/third/cmscbf/t-cmscbf.tex
+++ /dev/null
@@ -1,42 +0,0 @@
-%D \useregime[il9]
-%D \enableregime[il9]
-%D \module
-%D [ file=t-cmscbf,
-%D version=2006.09.12,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Bold Small Caps for Computer/Latin Modern,
-%D author=Peter Mnster,
-%D date=\currentdate,
-%D copyright={Peter Mnster}]
-%C This module is copyrighted by Peter Mnster.
-%C Please send any comments to pmrb at free.fr.
-
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-\writestatus{loading}{Bold Small Caps for Computer/Latin Modern}
-
-\definebodyfont[15pt,14pt,13pt,12pt,11pt,10pt,9pt,8pt,7pt,6pt,5pt]
- [sc] [bf=cmbcsc10 sa 1, tf=cmcsc10 sa 1]
-
-%D Hint: when producing PDF, adjust your resolution with
-%D \type{\pdfpkresolution=xxx}
-
-\doifnotmode{demo}{\endinput}
-
-%D Usage example:
-\usemodule[cmscbf]
-\useregime[il9]
-\enableregime[il9]
-\pdfpkresolution=1200
-\starttext
-{\sc Normal and \bf bold Small Caps.}
-{\sc \bf }
-\stoptext
diff --git a/macros/context/contrib/context-cmttbf/VERSION b/macros/context/contrib/context-cmttbf/VERSION
deleted file mode 100644
index 5df0836645..0000000000
--- a/macros/context/contrib/context-cmttbf/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2006.09.12
diff --git a/macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-demo.pdf b/macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-demo.pdf
deleted file mode 100644
index b749878f02..0000000000
--- a/macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-doc.pdf b/macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-doc.pdf
deleted file mode 100644
index 773a8678d6..0000000000
--- a/macros/context/contrib/context-cmttbf/doc/context/third/cmttbf/cmttbf-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-cmttbf/tex/context/third/cmttbf/t-cmttbf.tex b/macros/context/contrib/context-cmttbf/tex/context/third/cmttbf/t-cmttbf.tex
deleted file mode 100644
index 77618732dd..0000000000
--- a/macros/context/contrib/context-cmttbf/tex/context/third/cmttbf/t-cmttbf.tex
+++ /dev/null
@@ -1,45 +0,0 @@
-%D \useregime[il9]
-%D \enableregime[il9]
-%D \module
-%D [ file=t-cmttbf,
-%D version=2006.09.12,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Bold Typewriter for Computer/Latin Modern,
-%D author=Peter Mnster,
-%D date=\currentdate,
-%D copyright={Peter Mnster}]
-%C This module is copyrighted by Peter Mnster.
-%C Please send any comments to pmrb at free.fr.
-
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-\writestatus{loading}{Bold Typewriter for Computer/Latin Modern}
-
-\definebodyfont[15pt,14pt,13pt,12pt,11pt,10pt] [tt] [bf=cmbtt10 sa 1]
-\definebodyfont[9pt] [tt] [bf=cmbtt9]
-\definebodyfont[8pt,7pt,6pt,5pt] [tt] [bf=cmbtt8 sa 1]
-%\definebodyfont[15pt,14pt,13pt,12pt,11pt,10pt,9pt,8pt,7pt,6pt,5pt]
-% [tt] [bf=cmttb10 sa 1]
-
-%D Hint: when producing PDF, adjust your resolution with
-%D \type{\pdfpkresolution=xxx}
-
-\doifnotmode{demo}{\endinput}
-
-%D Usage example:
-\usemodule[cmttbf]
-\useregime[il9]
-\enableregime[il9]
-\pdfpkresolution=1200
-\starttext
-{\tt Normal and \bf bold Typewriter.}
-{\tt \bf }
-\stoptext
diff --git a/macros/context/contrib/context-collatingmarks/LICENSE b/macros/context/contrib/context-collatingmarks/LICENSE
deleted file mode 100644
index a7a158b93c..0000000000
--- a/macros/context/contrib/context-collatingmarks/LICENSE
+++ /dev/null
@@ -1 +0,0 @@
-Public Domain \ No newline at end of file
diff --git a/macros/context/contrib/context-collatingmarks/README.md b/macros/context/contrib/context-collatingmarks/README.md
deleted file mode 100644
index bbdd0eff82..0000000000
--- a/macros/context/contrib/context-collatingmarks/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Module: Collating Marks
-
-## Editorial
-
-Author = W. Egger
-Version = 2023.04.15
-License = Public Domain
-
-## Introduction
-
-Collating marks are small black rules placed on the spine of printed sections. On each section the mark is moved by the length of the black rule. When the book is assembled on the spine appears a stair like pattern. Continuity of this pattern insures that the book is ordered in the correct sequence of sections.
-
-## Description
-
-The module is used in connection with arranging pages for folding to form sections.
-
-Depending on the arranging scheme used the module must be set up accordingly in the set of MetaPost variables. \ No newline at end of file
diff --git a/macros/context/contrib/context-collatingmarks/VERSION b/macros/context/contrib/context-collatingmarks/VERSION
deleted file mode 100644
index a327302c23..0000000000
--- a/macros/context/contrib/context-collatingmarks/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2023.04.26
diff --git a/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/README.md b/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/README.md
deleted file mode 100644
index b953b7761f..0000000000
--- a/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Module: Collating Marks
-
-## Editorial
-
-Author = W. Egger
-Version = 2023.04.15
-License = Public Domain
-
-## Introduction
-
-Collating marks are small black rules placed on the spine of printed sections. On each section the mark is moved by the length of the black rule. When the book is assembled on the spine appears a stair like pattern. Continuity of this pattern insures that the book is ordered in the correct sequence of sections.
-
-## Usage
-
-The module is used in connection with arranging pages for folding to form sections.
-
-Depending on the arranging scheme used the module must be set up accordingly in the set of MetaPost variables.
-
-### Example:
-
-Example setup for the collating marks:
-
-\usemodule[collatingmarks][Collatingmarks=yes]
-
-\setupMPvariables
- [pages=8, % pages per sheet of paper doublesided
- sheets=2, % sheets of paper used per section
- horpageshift=0.5mm, % used for correction if horizontal page-shifting is used
- frenchdoors=false,
- wickel=false]
-
-This setup is used for the arranging scheme \setuparranging[2*4*2] which indicates that it is double-sided printed with 4 pages recto and verso and there are two sheets of paper forming together the sections containing 16 pages.
-
-The shift parameter is used to adjust the position of the collating mark centered on the spine. This is specially important when a horizontal shift-list is used for arranging!
-
-Example setup for horizontal page shifting:
-
-\definepageshift
- [hor]
- [horizontal]
- [1mm,-1mm,.75mm,-.75mm,.5mm,-.5mm,.25mm,0mm,
- 0mm,-.25mm,.5mm,-.5mm,.75mm,-.75mm,1mm,-1mm]
-
-\setuppageshift[paper][hor] %paper= arrange only, horizontal only
-
-\setuparranging[2*4*2]
diff --git a/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.pdf b/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.pdf
deleted file mode 100644
index 52bf0eed68..0000000000
--- a/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.tex b/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.tex
deleted file mode 100644
index ab3abb9aa3..0000000000
--- a/macros/context/contrib/context-collatingmarks/doc/context/third/collating-marks/t-collatingmarks-module-doc.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-The documentation of this module can be created from the source-file by running:
-
-mtxrun --script modules --process t-collatingmarks.tex \ No newline at end of file
diff --git a/macros/context/contrib/context-collatingmarks/tex/context/third/collating-marks/t-collatingmarks.mkiv b/macros/context/contrib/context-collatingmarks/tex/context/third/collating-marks/t-collatingmarks.mkiv
deleted file mode 100644
index c0f13da3d0..0000000000
--- a/macros/context/contrib/context-collatingmarks/tex/context/third/collating-marks/t-collatingmarks.mkiv
+++ /dev/null
@@ -1,174 +0,0 @@
-%D \module
-%D [ file=t-collatingmarks,
-%D version=2023.04.15,
-%D title=Collating Marks \CONTEXT\ User Module,
-%D subtitle=Environment for collating marks,
-%D author={W. Egger},
-%D date=\currentdate,
-%D copyright={W. Egger},
-%D email=w.egger@boede.nl,
-%D license=Public Domain]
-%D
-%D The documentation can be generated with:
-%D mtxrun --script modules --process t-collatingmarks.tex
-
-\startmodule[collatingmarks]
-
-\writestatus{loading}{Context Module for Collating Marks}
-
-%D\enablemode[demo]
-
-%D \startsubject[title={Introduction}]
-%D
-%D This code is based on the work of Thomas A. Schmitz, who created the module for
-%D different crop marks.
-%D
-%D If a book consists of multiple sections, each section should be marked
-%D along the spine with a collating mark. This mark moves down along the spine
-%D according to the number of the section. After collating the book it becomes
-%D easy tho check whether the sequence of the sections is correct. One should
-%D see a \quotation{stair case} on the spine of the book.
-%D \stopsubject
-%D
-%D \startsubject[title={Using the module}]
-%D
-%D If the collating marks should be placed, then the system should be setup with
-%D \type{\setupMPvariables[pages=8,sheets=2,shift=0mm,frenchdoors=false,wickel=false]} Note that the
-%D collating marks-setup needs to know how many pages are placed on a
-%D doublesided printed sheet of paper and how many such sheets result in a
-%D section i.e. these values depend on the \type{\setuparranging} command. The
-%D shift-option is 0mm if no horizontal page shifting is issued during
-%D imposition. If a horizontal page shifting is used, then the shift option is
-%D used to position the collating mark precisely on the spine.
-%D
-%D The two keys \quotation{frenchdoors} and \quotation{wickel} are used for
-%D special purposes. These are not intended for general use.
-%D For the preparation of a binding called
-%D French doors, where there is a left (normal) and a right book, which opens
-%D from left to right the MPvariable \quotation{frenchdoors} must be set to true
-%D (boolean).
-%D For preparing a section with parallelfolding/letterfolding/Wickelfalz the
-%D MPvariable \quotation{wickel} must be set to true (boolean).
-%D\stopsubject
-
-%D \startsubject[title={Vocabulary}]
-%D
-%D EN: Collating mark, DE: Kollationiermarke, NL: collationeerblokje
-%D \stopsubject
-
-
-\unprotect
-
-\setupmodule[Collatingmarks=yes]
-
-\setupMPvariables
- [Collatingmarks]
- [pages=16, %pages per sheet doublesided
- sheets=1,% number of sheets forming one section
- horpageshift=0,
- frenchdoors=false,
- wickel=false]
-
-%D We prepare collating marks:
-
-\processaction[\currentmoduleparameter{Collatingmarks}]
- [yes=>\def\Collatingmarks{Collatingmarks},
- no=>\def\Collatingmarks{},
- \v!unknown=>\def\Collatingmarks{},
- \v!default=>\def\Collatingmarks{}]
-
-%D The newly prepared macros go into the page background:
-
-\setupbackgrounds[page][state=repeat,background={\Collatingmarks}]
-
-%D We define an overlay for the collating marks.
-
-\defineoverlay[Collatingmarks][\useMPgraphic{Collatingmarks}]
-
-%D We let \METAPOST do the calculations and draw de collating marks.
-
-\startusableMPgraphic{Collatingmarks}
-StartPage;
-
-numeric offset, sectionno, pages, sheets, factor, correction, offset, pageshift;
-path p,q;
-boolean frenchdoors,wickel;
-
-pages := \MPvar{pages};
-sheets := \MPvar{sheets};
-pageshift := \MPvar{horpageshift};
-frenchdoors := \MPvar{frenchdoors};
-wickel := \MPvar{wickel};
-
-z5colm = ulcorner Page;
-z6colm = (x5colm, y5colm-10mm);
-
-p := unitsquare xscaled 1mm yscaled 7mm;
-
-if \realpagenumber mod 2 = 1 : % on uneven pages only
- sectionno := \realpagenumber div (sheets*pages)+1;
- label.lrt(textext("\switchtobodyfont[5pt]"& decimal sectionno &""),llcorner Page shifted (1mm,-2mm));
- if \realpagenumber mod (sheets*pages) = 1 : % on the first page of a section only
- nofmarkings := (y6colm-7mm) div 7mm;
- offset := y6colm-sectionno*7mm;
- if sectionno > nofmarkings :
- correction := sectionno div nofmarkings;
- offset := y6colm-(sectionno-correction*nofmarkings)*7mm;
- fi;
- if frenchdoors or wickel :
- p := p shifted ((PaperWidth),offset);
- else :
- p := p shifted (-1mm-2pageshift,offset);
- fi;
- fill p withcolor black;
- if sectionno < 9 :
- label.rt(textext("\switchtobodyfont[3pt] \white "& decimal sectionno &""), center p shifted (-1.3mm,0));
- else :
- label.rt(textext("\switchtobodyfont[3pt] \white "& decimal sectionno &""), center p shifted (-1.5mm,0));
- fi;
- fi;
-fi;
-\stopusableMPgraphic
-
-\protect
-\stopmodule
-
-\doifnotmode{demo}{\endinput}
-
-
-
-%D Example:
-%D \usemodule[collatingmarks][Collatingmarks=yes]
-%D \setuppapersize[A5][A2]
-%D \setuplayout[location=middle,marking=on]
-%D \setuppagenumbering[alternative=doublesided]
-%D \setuparranging[2*4]
-%D
-%D \setupMPvariables
-%D [pages=8, % pages per sheet of paper doublesided
-%D sheets=1, % sheets of paper used per section
-%D horpageshift=0mm, % used for correction if horizontal page-shifting is used
-%D frenchdoors=false,
-%D wickel=false]
-%D
-%D \starttext
-%D \dorecurse{10}{\section{Text \recurselevel}\input tufte \par\subject{Ward} \input ward\par}
-%D \stoptext
-
-
-\usemodule[collatingmarks][Collatingmarks=yes]
-\setuppapersize[A5][A2]
-\setuplayout[location=middle,marking=on]
-\setuppagenumbering[alternative=doublesided]
-\setuparranging[2*4*2]
-
-\setupMPvariables
- [pages=8, % pages per sheet of paper doublesided
- sheets=2, % sheets of paper used per section
- horpageshift=0mm, % used for correction if horizontal page-shifting is used
- frenchdoors=false,
- wickel=false]
-
-\starttext
- \dorecurse{10}{\section{Text \recurselevel}\input tufte \par\subject{Ward} \input ward\par}
-\stoptext
diff --git a/macros/context/contrib/context-construction-plan/VERSION b/macros/context/contrib/context-construction-plan/VERSION
deleted file mode 100644
index d600ebb715..0000000000
--- a/macros/context/contrib/context-construction-plan/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2008.04.05
diff --git a/macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-demo.pdf b/macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-demo.pdf
deleted file mode 100644
index a19a865ae3..0000000000
--- a/macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-doc.pdf b/macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-doc.pdf
deleted file mode 100644
index f7466d5204..0000000000
--- a/macros/context/contrib/context-construction-plan/doc/context/third/construction-plan/construction-plan-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-construction-plan/tex/context/third/construction-plan/t-construction-plan.tex b/macros/context/contrib/context-construction-plan/tex/context/third/construction-plan/t-construction-plan.tex
deleted file mode 100644
index bb48bbf055..0000000000
--- a/macros/context/contrib/context-construction-plan/tex/context/third/construction-plan/t-construction-plan.tex
+++ /dev/null
@@ -1,150 +0,0 @@
-%D \module
-%D [ file=t-construction-plan,
-%D version=2008.04.05,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Construction plans,
-%D author=Peter Münster,
-%D date=\currentdate,
-%D copyright={Peter Münster}]
-%C This module is copyrighted by Peter Münster.
-%C Please send any comments to pmrb at free.fr.
-
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-\writestatus{loading}{Typesetting construction plans}
-
-\unprotect
-
-%D We need a lot of space.
-\setuplayout[header=0pt,footer=0pt,backspace=2cm,width=middle,
- topspace=1cm,height=middle]
-
-%D Doing pagenumbering on our own.
-\setuppagenumbering[state=stop]
-
-%D \macros
-%D {setupPlan}
-%D
-%D Setting up some values.
-%D
-%D Default setup:
-%D
-%D \starttyping
-%D \setupPlan[paper=A3,project=,author=,prec=10]
-%D \stoptyping
-%D
-%D Example:
-%D
-%D \starttyping
-%D \setupPlan[paper=A3,project=My garage,author=Peter Münster,
-%D prec=Precision factor for figure width]
-%D \stoptyping
-\def\setupPlan[#1]{\getparameters[CP][#1]}
-\setupPlan[paper=A4,project=,author=,date=,prec=10]
-
-%D Support for more than one language!
-\setuplabeltext[fr][project=Projet,author=Auteur,date=Date,scale=Échelle]
-\setuplabeltext[en][project=Project,author=Author,date=Date,scale=Scale]
-\setuplabeltext[de][project=Projekt,author=Autor,date=Datum,scale=Maßstab]
-
-%D \macros
-%D {Plan}
-%D
-%D Makes a page with a plan and some comments below it.
-%D
-%D Example:
-%D
-%D \starttyping
-%D \Plan[Prefix=file prefix,Scale=scale of figure,mm=width of figure in mm,
-%D Title=title of plan]
-%D \stoptyping
-%D
-%D If you want to include the file \type{plan-20000.eps} you have to use
-%D \type{Prefix=plan,mm=20000}.
-%D
-%D Sample document:
-%D
-%D \starttyping
-%D \usemodule[construction-plan]
-%D \mainlanguage[fr] % or better: \usemodule[french]
-%D \starttext
-%D \Plan[Prefix=situ,Scale=2000,mm=351000,Title=Plan de situation]
-%D \Plan[Prefix=masse,Scale=400,mm=66000,Title=Plan de masse]
-%D \Plan[Prefix=nord,Scale=100,mm=20906,Title=Façade nord]
-%D \Plan[Prefix=sud,mm=18900,Title=Façade sud]
-%D \Plan[Prefix=west,mm=23390,Title=Pignon ouest]
-%D \Plan[Prefix=ost,mm=23513,Title=Pignon est]
-%D \Plan[Prefix=rdc,mm=18456,Title=Rez-de-chaussée]
-%D \Plan[Prefix=etage,mm=16695,Title=Étage]
-%D \Plan[Prefix=haus1,Scale=150,mm=30000,Title=Simulation 1]
-%D \Plan[Prefix=haus2,Scale=100,mm=20000,Title=Simulation 2]
-%D \stoptext
-%D \stoptyping
-
-\def\@BottomLine{{\tx\doifsomething\CPproject{%
- \labeltext{project}: \CPproject, }%
- \doifsomething\CPauthor{\labeltext{author}: \CPauthor, }%
- \labeltext{date}: \doifelsenothing\CPdate\currentdate\CPdate}\hfill}
-
-\newdimen\CPwidth \newdimen\CPheight
-\def\Plan[#1]{%
- \getparameters[CP][#1]
- \CPwidth=\dimexpr(\the\numexpr(\CPprec*\CPmm/\CPscale)mm/\CPprec)
- \def\CPfig{\externalfigure[\CPprefix-\CPmm][width=\the\CPwidth]}%
- \setbox\scratchbox\hbox{\CPfig}\CPheight=\ht\scratchbox
- \ifdim\CPwidth>1.1\CPheight
- \setuppapersize[\CPpaper,landscape,rotated][\CPpaper]
- \else
- \setuppapersize[\CPpaper][\CPpaper]
- \fi
- \startstandardmakeup
- \midaligned{\CPfig}\vfil\@BottomLine
- \framed[align=lohi,offset=2ex]{{\bfc\CPtitle}\blank
- \labeltext{scale}: 1/\CPscale\quad\hfill(\currentpage/\lastpage)}%
- \vskip0pt plus -1fil
- \stopstandardmakeup}
-
-%D \macros
-%D {NoPlan}
-%D
-%D Makes a page with some content and some comments below it.
-%D
-%D Example:
-%D
-%D \starttyping
-%D \NoPlan[Title=Some notes]{Here are some notes about the plans.}
-%D \stoptyping
-
-\long\def\NoPlan[#1]#2{%
- \getparameters[CP][#1]
- \setuppapersize[\CPpaper][\CPpaper]
- \startstandardmakeup
- #2\vfil\@BottomLine
- \framed[align=lohi,offset=2ex]{{\bfc\CPtitle}\blank
- (\currentpage/\lastpage)}\vskip0pt plus -1fil
- \stopstandardmakeup}
-
-\protect
-
-\doifnotmode{demo}{\endinput}
-
-%D Usage example:
-\usemodule[construction-plan]
-\setupexternalfigures[directory=samples]
-\mainlanguage[de]
-\setupPlan[paper=A3,project=Mein Haus,prec=15]
-\starttext
-\Plan[prefix=unten,scale=100,mm=21478,title=Erdgeschoß]
-\Plan[prefix=oben,mm=21345,title=Obergeschoß]
-\Plan[prefix=simulation,scale=250,mm=80000,title=Simulation]
-\NoPlan[title=Notizen,paper=A4]{\tfb\setupinterlinespace
- Einige Notizen, die das Bauvorhaben beschreiben...}
-\stoptext
diff --git a/macros/context/contrib/context-degrade/VERSION b/macros/context/contrib/context-degrade/VERSION
deleted file mode 100644
index 5df0836645..0000000000
--- a/macros/context/contrib/context-degrade/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2006.09.12
diff --git a/macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-demo.pdf b/macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-demo.pdf
deleted file mode 100644
index 5a9d3e1558..0000000000
--- a/macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-doc.pdf b/macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-doc.pdf
deleted file mode 100644
index 1d3f34abd2..0000000000
--- a/macros/context/contrib/context-degrade/doc/context/third/degrade/degrade-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-degrade/tex/context/third/degrade/t-degrade.tex b/macros/context/contrib/context-degrade/tex/context/third/degrade/t-degrade.tex
deleted file mode 100644
index b2dbba495c..0000000000
--- a/macros/context/contrib/context-degrade/tex/context/third/degrade/t-degrade.tex
+++ /dev/null
@@ -1,163 +0,0 @@
-%D \enableregime[utf]
-%D \module
-%D [ file=t-degrade,
-%D version=2006.09.12,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Degrading JPEG images,
-%D author=Peter Münster,
-%D date=\currentdate,
-%D copyright={Peter Münster}]
-%C This module is copyrighted by Peter Münster.
-%C Please send any comments to pmrb at free.fr.
-
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-\writestatus{loading}{Degrading JPEG images on the fly}
-
-\unprotect
-
-%D In this module we suppose, that original figures are either eps or jpg.
-%D When creating pdf, eps is converted to pdf, and when creating dvi,
-%D jpg is converted to eps.
-%D Furthermore, jpg-images can be degraded to a given resolution, to get
-%D smaller documents.
-
-%D When
-%D \type{http://context.literatesolutions.com/collector/63}
-%D is solved, we can make it better using \type{\appliedfigurefilename},
-%D \type{\figurewidth} etc, and without redefining \type{\externalfigure}.
-
-%D \macros{setupDegrade}
-%D Sets the resolution, the directory for degraded images and the
-%D directory, where the original images can be found (source directory).
-%D
-%D Default setup:
-%D
-%D \starttyping
-%D \setupDegrade[Res=100,Dir=degrade,SDir=.]
-%D \stoptyping
-%D
-%D Example:
-%D
-%D \starttyping
-%D \setupDegrade[Res=600,Dir=degraded-images,SDir=/home/peter/jpegs]
-%D \stoptyping
-
-\def\setupDegrade[#1]{\getparameters[Deg][#1]}
-\setupDegrade[Res=100,Dir=degrade,SDir=.]
-
-%D In order to use this module, you must use \type{\externalfigure}
-%D in the following way: \type{\externalfigure[file-prefix][options]},
-%D where \type{options} must contain the width or the height.
-%D Furthermore, \type{\write18} must be enabled.
-%D The shell-script is in a buffer, just to keep this module in only
-%D one file.
-
-\startbuffer[degrade-script]
-#!/bin/bash
-
-# We consider, that original figures are either eps or jpg.
-
-# Arguments:
-# $1 = filename
-# $2 = eps or pdf
-# $3 = w or h
-# $4 = resolution
-# $5 = dimension of image
-# $6 = source directory
-# $7 = destination directory
-
-for i in jpeg2ps convert identify bc; do
- if ! type $i &>/dev/null; then
- echo Error: $i is not installed.
- exit 1
- fi
-done
-
-EPSTOPDF=epstopdf
-
-if ! type epstopdf &>/dev/null; then
- if type texmfstart &>/dev/null; then
- EPSTOPDF="texmfstart newpstopdf"
- else
- EPSTOPDF="texutil --figures --epstopdf"
- fi
-fi
-
-if [ -s "$1.jpg" ]; then
- if [ "$2" = eps ] && [ "$1.jpg" -nt "$1.eps" ]; then
- jpeg2ps "$1.jpg" >"$1.eps"
- fi
-else
- if [ "$2" = pdf ] && [ "$1.eps" -nt "$1.pdf" ]; then
- $EPSTOPDF "$1.eps"
- fi
-fi
-
-X=
-[ $3 = h ] && X=x
-FORMAT="%$3"
-FILE="$6/$1.jpg"
-DFILE="$7/$1.jpg"
-DFILE_EPS="$7/$1.eps"
-DPI="$4"
-IW="$5"
-MODE="$2"
-INCH=72.27
-
-mkdir -p $7
-
-if [ -s "$FILE" ]; then
- W=`identify -format "$FORMAT" "$FILE"`
-else
- rm -f "$DFILE"
- exit 0
-fi
-
-NW=`echo "$DPI * $IW / $INCH" | bc`
-
-if [ $NW -ge $W ]; then
- rm -f "$DFILE"
-else
- if [ -s "$DFILE" ] && \
- [ `identify -format "$FORMAT" "$DFILE"` -eq $NW ]; then
- exit 0
- else
- convert -verbose -resize $X$NW "$FILE" "$DFILE"
- [ $MODE = eps ] && jpeg2ps "$DFILE" >"$DFILE_EPS"
- fi
-fi
-\stopbuffer
-
-\def\Command{\immediate\write18}
-\let\externalfigureO=\externalfigure
-\def\externalfigure[#1][#2]{%
- \getparameters[Deg][height=,#2]%
- \processaction[\Degheight][%
- \s!default =>\scratchdimen=\Degwidth \def\Deg@WH{w},
- \s!unknown =>\scratchdimen=\Degheight \def\Deg@WH{h}]%
- \Command{bash ./\jobname-degrade-script.tmp #1 \ifcase\pdfoutput eps\else
- pdf\fi\space\Deg@WH\space\DegRes\space\withoutpt\the\scratchdimen\space
- \DegSDir\space\DegDir}%
- \doiffileexistselse{\DegDir/#1.jpg}{\def\Deg@File{\DegDir/#1}}{%
- \def\Deg@File{#1}}%
- \externalfigureO[\Deg@File][#2]}
-
-\protect
-
-\doifnotmode{demo}{\endinput}
-
-%D Usage example:
-%\usemodule[degrade]
-% \setupDegrade[Res=200] Here you can adjust the resolution (unit = dpi).
-\starttext
-\externalfigure[hacker][width=0.2\textwidth]
-\stoptext
diff --git a/macros/context/contrib/context-enigma/VERSION b/macros/context/contrib/context-enigma/VERSION
new file mode 100644
index 0000000000..be1280642c
--- /dev/null
+++ b/macros/context/contrib/context-enigma/VERSION
@@ -0,0 +1 @@
+0.1a
diff --git a/macros/context/contrib/context-enigma/doc/context/third/enigma/COPYING b/macros/context/contrib/context-enigma/doc/context/third/enigma/COPYING
new file mode 100644
index 0000000000..dad85d026e
--- /dev/null
+++ b/macros/context/contrib/context-enigma/doc/context/third/enigma/COPYING
@@ -0,0 +1,22 @@
+Copyright 2011-2013 Philipp Gesang. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/macros/context/contrib/context-enigma/doc/context/third/enigma/enigma_manual.tex b/macros/context/contrib/context-enigma/doc/context/third/enigma/enigma_manual.tex
new file mode 100644
index 0000000000..4331521900
--- /dev/null
+++ b/macros/context/contrib/context-enigma/doc/context/third/enigma/enigma_manual.tex
@@ -0,0 +1,498 @@
+%% If you’re looking for instructions concerning how to build this
+%% manual, please for now drop me an email: ·phg42.2a at gmail dot com·
+%% as you will need a certain mtx-script.
+\defineitemgroup [credits]
+\setupitemgroup [credits] [
+ % before={\startnarrower[middle]},
+ % after=\stopnarrower,
+ left=,
+ right=,
+ margin=,
+ option=2,
+]
+
+\pushcatcodetable
+\setcatcodetable\txtcatcodes
+\useurl [chickenize] [https://github.com/alt/chickenize]
+\useurl [codebook] [http://simonsingh.net/books/the-code-book/]
+\useurl [key_procedure] [http://users.telenet.be/d.rijmenants/en/enigmaproc.htm]
+\useurl [luatex-web] [http://www.luatex.org/]
+\useurl [rotor_wirings] [http://www.ellsbury.com/ultraenigmawirings.htm]
+\useurl [wp:day_key] [http://en.wikipedia.org/wiki/Cryptanalysis_of_the_Enigma#Key_setting]
+ [] [\hyphenatedurl{http://en.wikipedia.org/wiki/Cryptanalysis_of_the_Enigma\#Key_setting}]
+\useurl [wp:ring] [http://en.wikipedia.org/wiki/Enigma_rotor_details#The_ring_setting]
+ [] [\hyphenatedurl{http://en.wikipedia.org/wiki/Enigma_rotor_details\#The_ring_setting}]
+\useurl [initialization] [http://w1tp.com/enigma/mewirg.htm]
+\useurl [model-i] [http://www.cryptomuseum.com/crypto/enigma/i/index.htm]
+\useurl [ecollection] [http://cryptocellar.org/enigma/]
+\useurl [heinz_diss] [http://rzbl04.biblio.etc.tu-bs.de:8080/docportal/receive/DocPortal_document_00001705]
+\popcatcodetable
+
+\startdocchapter[title=Introduction]
+ This module implements an \emph{Enigma} cipher that is equivalent to
+ the most widely distributed model: the Enigma~I (subtypes {\sc m1}
+ {\sc m2} and {\sc m3}).%
+ \footnote{%
+ See \from[model-i] for a showcase.
+ }
+ Machines of this type had three rotors, a non-moving reflector and,
+ as a novelty at the time of their introduction, a plugboard.
+ The simulation accepts arbitrary configurations of these components,
+ as well as the starting position of the rotors, and then processes
+ text accordingly.
+ Depending on the input, this yields the plaintext or ciphertext, as
+ encryption and decryption are the same.
+
+ The code is provided as a module (interface for \CONTEXT) as well as
+ a package (\PLAIN, \LATEX).
+ It is subject to the {\sc bsd} license, see below,
+ \at{page}[license], for details.
+\stopdocchapter
+
+\startdocchapter[title=Usage]
+
+\startdocsection[title=Loading the Module / Package]
+ The intention is for the \modulename{Enigma} codebase to integrate
+ with the three most popular (as of 2012) \TEX\ formats:
+ \CONTEXT,
+ \PLAIN, and
+ \LATEX.
+ If the user interface does not fully conform with the common practice
+ of the latter two, please be lenient toward the author whose
+ intuitions are for the most part informed by \CONTEXT.
+ For this reason, a couple words concerning the interfaces will be
+ necessary.
+ The examples in this manual will be cycling through all three
+ formats, but once you get the general idea of how it works, you will
+ have no problem translating between coding styles.
+ Those familiar with \CONTEXT\ might, therefore, skip the following
+ paragraphs and continue directly with the next section on
+ \at{page}[sec:opts].%
+
+ The package is loaded as usual. For \PLAIN, issue a
+ \type{\input{enigma}}.
+ \LATEX-users need to place \type{\usepackage{enigma}} somewhere
+ inside the preamble.
+ (There are no package options.)
+ From this point on, instructions for both formats are the same.
+
+ The interface provides two basic macros from which all functionality
+ will be derived:
+ \texmacro{defineenigma} and \texmacro{setupenigma}.
+ Both are a kind of \emph{meta-macros}, meaning that they generate
+ other macros which may then be employed to access the functionality
+ of the package.
+ As such they naturally belong inside the preamble (if you chose to
+ use
+ \modulename{Enigma} with \LATEX, that is).
+ The correct order is to \texmacro{defineenigma} an enigma machine
+ first and then \texmacro{setupenigma} it.
+ The definition takes a single, setups a double mandatory argument.
+ Thus, \type{\defineenigma{encrypt}} creates a new environment
+ consisting of the macros \texmacro{beginencrypt} and
+ \texmacro{endencrypt}.%
+ \footnote{%
+ \CONTEXT-users will have noticed that there is no direct macro
+ \type{\encrypt{foo}}. The reason for this is that the callback
+ which the module relies on operates on node-level.
+ This means that for the Enigma encryption to have an effect it will
+ have to process entire paragraphs.
+ As encrypted passages are supposed to stand on their own, this
+ small limitation should not have a severe impact on functionality.
+ If you should, however, need a macro that works for smaller
+ portions of text, please send a feature request to the maintainer
+ (\ichdparameter{email}).
+ }
+ These correspond to \texmacro{startencrypt}/\texmacro{stopencrypt} in
+ the \CONTEXT\ interface.
+ The \CONTEXT-examples below are easily translated to
+ Plain/\LATEX-syntax by replacing curly brackets (groups) with
+ square brackets and substituting environment prefixes:
+ \type{\start<foo>} becomes \type{\begin<foo>} and
+ \type{\stop<foo>} becomes \type{\end<foo>}.
+ Except for those conventions the syntax, even in key-value
+ assignments, is identical.
+
+ However, the environment is not usable right away, as we still have
+ to set the initial state of the machine.
+ This is achieved by the second meta-macro,
+ \type{\setupenigma{encrypt}{<args>}}, where \type{<args>} is a
+ placeholder for a list of \emph{assignments}, i.\,e. pairs of
+ \emph{key=value} statements by means of which all further parameters
+ are specified.
+ The possible parameters are listed in the next section,
+ examples of their effects will be given further below in the section
+ on functionality (see \at{page}[sec:fun]).%
+ \footnote{%
+ If you grasp the concept of paired \type{\define<foo>}
+ \endash\space \type{\setup<foo>} macros, then congratulations are
+ in order: you qualify for migration from your current macro package
+ to \CONTEXT.
+ }
+\stopdocsection
+\startdocsection[title=Options Explained,reference=sec:opts]
+
+At the moment, the \texmacro{setupenigma} macro in any format accepts
+the following parameters.
+% \startpostponing[+2]%% messes up floats -- why?
+ \startplacefigure[
+ location={right,high},
+ title={Usage example for the \PLAIN\ format.},
+ ]
+ % \framed[align=right,frameoffset=1em]{%
+ \startframed[
+ align=right,
+ frameoffset=1em,
+ frame=off,
+ ]%
+ \startlatextyping[before=,after=,]
+ \input {enigma}
+ %% Definition ··········· %%
+ \defineenigma {encryption}
+ %% Setup ················ %%
+ \setupenigma {encryption} {
+ other_chars = no,
+ day_key = I II III
+ 01 01 01,
+ rotor_setting = aaa,
+ spacing = yes,
+ verbose = 1,
+ }
+ %% Usage ················ %%
+ \beginencryption
+ aaaaa aaaaa aaaaa
+ aaaaa aaaaa aaaaa
+ \endencryption
+ \beginencryption
+ Nobody in Poland is going
+ to be able to read this,
+ har har!
+ \endencryption
+ \bye
+ \stoplatextyping
+ \stopframed
+ \stopplacefigure
+% \stoppostponing
+\startitemize
+ \setuptolerance[tolerant]%% it’s crowded in here due to the float
+ \let\olditem\item
+ \let\item\undefined
+ \def\item#1#2{% 1 name, 2 type
+ \olditem
+ \identifier{#1}%
+ \reference[option:#1]{}%
+ \space
+ <\emph{#2}>%
+ \hskip1em%
+ }
+ \item{other_chars}{boolean} How to handle non-encodable characters,
+ i.\,e. glyphs outside the bare set of Latin letters; see below on
+ \at{page}[explained:other_chars].
+ \item{day_key}{string} Encryption key, i.\,e. a description of the
+ initial setup of an Enigma machine: the reflector used, the choice
+ and positions of the three rotors, the ring settings, and the
+ plugboard wiring.
+ \item{rotor_setting}{string} The initial rotor advancement.
+ \item{spacing}{boolean} Auto-space output?
+ \item{verbose}{integer} Controls overall verbosity level
+ (\emph{global}\/!).
+\stopitemize
+
+%% day key
+\noindentation
+To state the obvious, the value of \identifier{day_key} serves as the
+\emph{day key} for encryption. An Enigma day key ordinarily consists of
+(1) a list of the the rotor configuration,
+(2) the ring settings, and
+(3) the plugboard connections.\footnote{%
+ For a description of the initialization process see
+ \from[initialization].
+}
+Together these have the denotation \emph{day key}, because they are
+meant to be supplied in special code books by central authority, one
+for each day.\footnote{%
+ Read about the historical directives for daily key renewal at
+ \from[key_procedure].
+ there are some {\sc pdf}s with images of \emph{Kenngruppenbücher} at
+ \from[ecollection], section \emph{Enigma Messages and Keys}.
+ Also, while you’re at it, don’t miss the explanation on Wikipedia:
+ \from[wp:day_key].
+}
+In the \modulename{Enigma} setup, the day key starts
+with a triple of Roman numerals ({\sc i} to {\sc v}) describing which
+of the five rotors is located in which of the three slots.
+(e.\,g. \type{I VI II}).\footnote{%
+ For the individual wirings of the five rotors see
+ \from[rotor_wirings], as well as the implementation below at
+ \at{page}[listing:rotor_wiring].
+}
+Its next part is the ring setting, a triple of two-digit integers that
+are the amount by which the internal wiring of each rotor has been
+shifted (\type{03 23 11}). As the Enigma encrypts only the letters of
+the Latin alphabet, sane values range from one (first position: no
+shift) to twenty six.\footnote{%
+ Consult \from[wp:ring] for an introduction into the ring mechanics.
+}
+The third section specifies which pairs of letters are substituted by
+each other by means of plugboard connections (\type{NI CE GO LD ...}).
+There can be zero to thirteen of these redirections, thus the presence
+of this section is entirely optional.
+Also part of the \identifier{day_key}, but not mentioned yet, is the
+choice of the \emph{reflector}.
+It may be specified as one of the three letters \type{A}, \type{B} and
+\type{C} as the first item. If no reflector is requested explicitly,
+the machine defaults to \type{B}, which is actually the only one of the
+three models that had been in widespread use
+(see below on \at{page}[listing:reflector] for the wirings).
+
+Initialization is not complete without a \identifier{rotor_setting}.
+This is a triple of letters, each representing the initial state of one
+rotor (e.\,g. \type{fkd}). Historically this was not part of the day
+key but supposed to be chosen at random by the operating signal
+officer.
+
+The output can be automatically grouped into sequences of five
+characters, delimited by spaces (option \identifier{spacing}). This
+does not only conform with traditional crypto-style, but also allows
+for the resulting text to be sanely broken into lines by \TEX.
+
+%%% other_chars
+Most documents don’t naturally adhere to the machine-imposed
+restriction to the 26 letters of the Latin alphabet. The original
+encipherment directives comprised substitution tables to compensate for
+a set of intrinsic peculiarities of the German language, like umlauts
+and common digraphs. The \modulename{Enigma} simulation module strives
+to apply these automatically but there is no guarantee of completeness.
+
+However,\reference[explained:other_chars]{} the Enigma lacks means of
+handling languages other than German. When the substitution lookup
+fails, there are two ways of proceeding: either to ignore the current
+character or to pass it on to the output as if nothing happened. The
+default behaviour is to drop alien letters and move on. If the user
+intends to keep these foreign characters instead, E can achieve this by
+setting the \identifier{other_chars} key in the \modulename{Enigma}
+setup to the value \emph{true}. An example of how the result of both
+methods may look, other things being equal, is given in below listing
+(example for \CONTEXT; see the file \type{enigma-example-context.tex}
+in the \type{doc/} subtree of your installation path).
+
+\startcontexttyping
+\usemodule [enigma]
+\defineenigma [secretmessage]
+\setupenigma [secretmessage] [
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+]
+
+\defineenigma [othermessage] [secretmessage]
+\setupenigma [othermessage] [other_chars=wrong]
+
+\starttext
+
+\startsecretmessage
+ føo bąr baž
+\stopsecretmessage
+\startothermessage
+ føo bąr baž
+\stopothermessage
+
+\stoptext
+\stopcontexttyping
+
+Both methods have their disadvantages: if the user chooses to have the
+unknown characters removed it might distort the decrypted text to
+becoming illegible. Far more serious, however, are the consequences of
+keeping them. As artefacts in the ciphertext they would convey
+information about the structure of the plain text.
+
+\stopdocsection
+
+\startdocsection[title=Basic Functionality,reference=sec:fun]
+
+Encrypt the text of your document using the script interface. For
+a start try out the settings as given in below listing.
+
+\starttyping
+mtxrun --script mtx-t-enigma \
+ --setup="day_key = B I II III 01 01 01, \
+ rotor_setting = xyz, \
+ verbose=0" \
+ --text="Gentlemen don’t read each other’s mail, Mr. Turing\!"
+\stoptyping
+
+This will result in the thoroughly scrambled string
+\typ{omribshpwfrfjovkntgqgi abbkhjpxmhdztapkatwrvf}.
+Then, use the same settings you encrypted the text with in your
+document.
+
+\startcontexttyping
+\usemodule[enigma]
+\defineenigma [secretmessage]
+\setupenigma [secretmessage] [
+ day_key = B I II III 01 01 01,
+ rotor_setting = xyz,
+ verbose=3,
+]
+
+\starttext
+
+\startsecretmessage
+ omribshpwfrfjovkntgqgiabbkhjpxmhdztapkatwrvf
+\stopsecretmessage
+
+\stoptext
+\stopcontexttyping
+
+If you compile this document with \CONTEXT, the plain text will
+reappear.
+Notice that punctuation is substituted with the letter “x” before
+encryption and that spaces are omitted.
+
+\useURL[kgbuch] [http://de.wikipedia.org/wiki/Kenngruppenbuch]
+ [] [code book]
+Now it’s certainly not wise to carry around the key to encrypted
+documents as plain text within those documents. The keys will have to
+be distributed via an independent channel, e.\,g. a \from[kgbuch].
+Keys in general don’t have to be supplied inside the document. If there
+is none specified, the module will interrupt the \TEX\ run and
+\emph{ask} for user input. Suppose Alice wanted to send an encrypted
+file to Bob and already generated the cipher text as follows:
+
+\starttyping
+mtxrun --script mtx-t-enigma \
+ --setup="day_key =B I IV V 22 07 10 AZ DG IE YJ QM CW, \
+ rotor_setting = bar, \
+ verbose=0" \
+ --text="I have nothing to hide. From the NSA, that is."
+\stoptyping
+
+Alice would then include the result of this line in her \LATEX\
+document as follows:
+
+\startlatextyping
+\documentclass{scrartcl}
+\usepackage{enigma}
+\defineenigma{decryption}
+%% Encryption key not given in the setup.
+\setupenigma{decryption}{
+ rotor_setting = bar,
+ verbose = 3,
+}
+\begin{document}
+
+\begindecryption
+usbatbwcaajhzgeyzkqskupzbmdhbdepccgeh
+\enddecryption
+
+\end{document}
+\stoplatextyping
+
+She subsequently mails this file to Bob and conveys the key through a
+secure channel. They only thing that will be left for Bob to do now, is
+to enter the key at the prompt when compiling the document with
+\LUALATEX.
+\stopdocsection
+
+\startdocsection[title=Uses and Abuses]
+
+In \LUATEX, \identifier{callback}s may stack. This allows filtering the
+input through many enigma machines successively. For instance, in the
+following listing, two instances of the same machine are generated and
+applied.
+
+\startcontexttyping
+\usemodule [enigma] %% load the module
+\defineenigma [secretmessage] %% generate and
+\setupenigma [secretmessage] [ %% configure a machine
+ day_key = B IV V II 01 01 01 AD CN ET FL GI JV KZ PU QY WX,
+ rotor_setting = foo,
+ verbose=3,
+]
+
+%% now, copy the first machine’s settings
+\defineenigma [othermessage] [secretmessage]
+
+%% here we go!
+\starttext
+
+\startothermessage %% enable machine 1
+\startsecretmessage %% enable machine 2 while no 1 is active
+Encryption equals decryption.
+\stopothermessage
+\stopsecretmessage
+
+\stoptext \endinput
+\stopcontexttyping
+
+\stopdocsection
+
+\stopdocchapter
+
+\startdocchapter[title=Metadata]
+\startdocsection[title=License,reference=license]
+
+© 2012--2013 \emph{Philipp Gesang}. All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+\startitemize[n]
+ \item Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.
+ \item Redistributions in binary form must reproduce the
+ above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+\stopitemize
+
+\begingroup
+\setuptolerance [horizontal,strict]
+\startalignment [right,nothyphenated]
+\noindentation\startsmallcaps
+ this software is provided by the copyright
+ holder “as is” and any express or implied warranties,
+ including, but not limited to, the implied warranties of
+ merchantability and fitness for a particular purpose are
+ disclaimed. in no event shall the copyright holder or
+ contributors be liable for any direct, indirect, incidental,
+ special, exemplary, or consequential damages (including, but
+ not limited to, procurement of substitute goods or services;
+ loss of use, data, or profits; or business interruption)
+ however caused and on any theory of liability, whether in
+ contract, strict liability, or tort (including negligence or
+ otherwise) arising in any way out of the use of this software,
+ even if advised of the possibility of such damage.
+\stopsmallcaps\endgraf
+\stopalignment
+\endgroup
+\stopdocsection
+
+\startdocsection[title=Acknowledgements]
+\startcredits
+ \item The idea to implement the \emph{Enigma} cipher for \TEX\ came
+ up while I was reading \emph{The Code Book} by Simon Singh.
+ This work contains an excellent portrayal of the history of
+ German military cryptography and Allied cryptanalysis before
+ and during the Second World War.\par
+ \from[codebook]
+ \item A more detailed account from a historical-cryptological
+ perspective is provided by Ulrich Heinz in his Dissertation (in
+ German), which is freely available.
+ Includes an interesting albeit speculative note on the
+ effectiveness of the Soviet code breaking efforts (chapter
+ seven).\par
+ \from[heinz_diss]
+ \item Also, the \modulename{Enigma} module drew lots of inspiration
+ from Arno Trautmann’s \modulename{Chickenize} package, which
+ remains the unsurpassed hands-on introduction to callback
+ trickery.\par
+ \from[chickenize]
+ \item Finally, without \LUATEX, encryption on node-level would not
+ have been possible.\par
+ \from[luatex-web]
+\stopcredits
+\stopdocsection
+\stopdocchapter
diff --git a/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-context.tex b/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-context.tex
new file mode 100644
index 0000000000..051e719697
--- /dev/null
+++ b/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-context.tex
@@ -0,0 +1,59 @@
+\usemodule [enigma]
+%\usetypescript [computer-modern-unicode]
+%\setupbodyfont [computer-modern-unicode,20pt]
+%\usetypescript [iwona]
+%\setupbodyfont [iwona,20pt]
+\usetypescript [modern]
+\setupbodyfont [modern,20pt]
+
+\defineenigma [nilsettings]
+\setupenigma [nilsettings] [ %% a machine with vanilla settings
+ other_chars = no,
+ day_key = I II III 01 01 01,
+ rotor_setting = aaa,
+ spacing = yes,
+ verbose = 3,
+]
+
+\defineenigma [othernilsettings] [nilsettings]
+
+\defineenigma [secretmessage]
+\setupenigma [secretmessage] [
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+]
+
+\defineenigma [othersecretmessage] [secretmessage]
+
+\defineenigma [othermessage] [secretmessage]
+\setupenigma [othermessage] [other_chars=wrong]
+
+\starttext
+
+\placefigure{Enigma output and its reversal using nil settings}{
+ \framed [width=.7\hsize,frame=off,align=middle]{
+ \startnilsettings
+ aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aa
+ \stopnilsettings
+
+ \startothernilsettings
+ bdzgo wcxlt ksbtm cdlpb muqof xyhcx tgyjf linhn xs
+ \stopothernilsettings
+ }
+}
+
+\startsecretmessage
+ føo bąr baž
+\stopsecretmessage
+
+\startothersecretmessage
+ iøtyąwqiž
+\stopothersecretmessage
+
+\startothermessage
+ føo bąr baž
+\stopothermessage
+
+\stoptext
+% vim:ft=context:tw=71:ts=2:sw=2:expandtab
diff --git a/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-latex.tex b/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-latex.tex
new file mode 100644
index 0000000000..ea825cf1e9
--- /dev/null
+++ b/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-latex.tex
@@ -0,0 +1,53 @@
+\documentclass[a5paper]{scrartcl}
+\parindent0pt
+%%····································································%
+\usepackage {enigma}
+%%····································································%
+%% The first machine will be used for encryption of our plain text.
+\defineenigma {encryption}
+\setupenigma {encryption} {
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+ spacing = yes,
+ verbose = 2,
+}
+%%····································································%
+%% This second machine below will be used to decrypt the string. It is
+%% initialized with exactly the same settings as the first one. The
+%% reason for this is that we can’t reuse the “encryption” machine as
+%% it will already have progressed to some later state after the
+%% encryption. Applying it on the ciphertext would yield a totally
+%% different string. Hence the need for another machine.
+\defineenigma{decryption}
+\setupenigma{decryption}{
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+}
+%%····································································%
+\begin{document}
+
+%%····································································%
+%% Ciphertext in the PDF. Rely on the addressee to decrypt the document
+%% externally.
+\beginencryption
+ Never underestimate the amount of money, time, and effort someone
+ will expend to thwart a security system.
+\endencryption
+
+%%····································································%
+%% Input string generated with:
+%% mtxrun --script t-enigma \
+%% --setup="day_key=B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,\
+%% rotor_setting=ben,\
+%% other_chars=yes"\
+%% --text="Never underestimate the amount of money,\
+%% time, and effort someone will expend to\
+%% thwart a security system."
+\begindecryption
+ aqsnwyxgqarpuzrdktscbslaqmdhyonywxkwhcdgphvuqsspfjwhlszahygjbzmfpcpbniahvfcuradntepxsfchnn
+\enddecryption
+%%····································································%
+\end{document}
+% vim:ft=tex:tw=71:expandtab:ts=2:sw=2
diff --git a/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-plain.tex b/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-plain.tex
new file mode 100644
index 0000000000..bd50c93ca4
--- /dev/null
+++ b/macros/context/contrib/context-enigma/doc/context/third/enigma/examples/enigma-example-plain.tex
@@ -0,0 +1,50 @@
+\parindent0pt
+%%····································································%
+\input {enigma}
+%%····································································%
+%% The first machine will be used for encryption of our plain text.
+\defineenigma {encryption}
+\setupenigma {encryption} {
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+ spacing = yes,
+ verbose = 1,
+}
+%%····································································%
+%% This second machine below will be used to decrypt the string.
+\defineenigma{decryption}
+\setupenigma{decryption}{
+ other_chars = yes,
+ day_key = B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,
+ rotor_setting = ben,
+}
+%%····································································%
+%% main
+%%····································································%
+%% Ciphertext in the PDF. Rely on the addressee to decrypt the document
+%% externally.
+%%····································································%
+%% encryption of plain text
+%%····································································%
+\beginencryption
+ Never underestimate the amount of money, time, and effort someone
+ will expend to thwart a security system.
+\endencryption
+
+%%····································································%
+%% decryption of ciphertext
+%%····································································%
+%% Input string generated with:
+%% mtxrun --script t-enigma \
+%% --setup="day_key=B V III II 12 03 01 GI JV KZ WM PU QY AD CN ET FL,\
+%% rotor_setting=ben,\
+%% other_chars=yes"\
+%% --text="Never underestimate the amount of money,\
+%% time, and effort someone will expend to\
+%% thwart a security system."
+\begindecryption
+ aqsnwyxgqarpuzrdktscbslaqmdhyonywxkwhcdgphvuqsspfjwhlszahygjbzmfpcpbniahvfcuradntepxsfchnn
+\enddecryption
+%%·····································································%
+\bye
diff --git a/macros/context/contrib/context-enigma/doc/context/third/enigma/manual-v0.1.pdf b/macros/context/contrib/context-enigma/doc/context/third/enigma/manual-v0.1.pdf
new file mode 100644
index 0000000000..2a9a2f9ab7
--- /dev/null
+++ b/macros/context/contrib/context-enigma/doc/context/third/enigma/manual-v0.1.pdf
Binary files differ
diff --git a/macros/context/contrib/context-enigma/scripts/context/lua/third/enigma/mtx-t-enigma.lua b/macros/context/contrib/context-enigma/scripts/context/lua/third/enigma/mtx-t-enigma.lua
new file mode 100644
index 0000000000..1b093afb75
--- /dev/null
+++ b/macros/context/contrib/context-enigma/scripts/context/lua/third/enigma/mtx-t-enigma.lua
@@ -0,0 +1,72 @@
+--
+--------------------------------------------------------------------------------
+-- FILE: mtx-t-enigma.lua
+-- USAGE: mtxrun --script enigma --setup="s" --text="t"
+-- DESCRIPTION: context script interface for the Enigma module
+-- REQUIREMENTS: latest ConTeXt MkIV
+-- AUTHOR: Philipp Gesang (Phg), <gesang@stud.uni-heidelberg.de>
+-- CREATED: 2013-03-28 02:14:05+0100
+--------------------------------------------------------------------------------
+--
+
+environment.loadluafile("enigma")
+
+local iowrite = io.write
+
+local helpinfo = [[
+===============================================================
+ The Enigma module, command line interface.
+ © 2012--2013 Philipp Gesang. License: 2-clause BSD.
+ Home: <https://bitbucket.org/phg/enigma/>
+===============================================================
+
+USAGE:
+
+ mtxrun --script enigma --setup="settings" --text="text"
+ --verbose=int
+
+ where the settings are to be specified as a comma-delimited
+ conjunction of “key=value” statements, and “text” refers to
+ the text to be encoded. Note that due to the involutory
+ design of the enigma cipher, the text can be both plaintext
+ and ciphertext.
+
+===============================================================
+]]
+
+local application = logs.application {
+ name = "mtx-t-enigma",
+ banner = "The Enigma for ConTeXt, hg-rev 37+",
+ helpinfo = helpinfo,
+}
+
+local ea = environment.argument
+
+local setup, text = ea"setup" or ea"s", ea"text" or ea"t"
+local verbose = ea"verbose" or ea"v"
+
+local out = function (str)
+ iowrite(str)
+end
+
+local machine_id = "external"
+if setup and text then
+ local args = enigma.parse_args(setup)
+ if not args then
+ application.help()
+ iowrite"\n\n[Error] Could not process enigma setup!\n\n"
+ end
+ enigma.save_raw_args(args, machine_id)
+ --local machine = enigma.new_machine(enigma.parse_args(setup))
+ local machine = enigma.new_machine(machine_id)
+ --machine.name = machine_id
+ local result = machine:encode_string(text)
+ if result then
+ out(result)
+ else
+ application.help()
+ end
+else
+ application.help()
+end
+
diff --git a/macros/context/contrib/context-enigma/tex/context/third/enigma/t-enigma.mkvi b/macros/context/contrib/context-enigma/tex/context/third/enigma/t-enigma.mkvi
new file mode 100644
index 0000000000..b5fea293a8
--- /dev/null
+++ b/macros/context/contrib/context-enigma/tex/context/third/enigma/t-enigma.mkvi
@@ -0,0 +1,157 @@
+%D \module
+%D [ file=t-enigma.mkvi,
+%D version=2013-03-28 02:15:37+0100,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Enigma,
+%D author=Philipp Gesang,
+%D date=\currentdate,
+%D copyright=Philipp Gesang,
+%D license=2-clause BSD,
+%D email={phg42 dot 2a at gmail dot com}]
+%C This module is licensed under the conditions of the BSD license with
+%C two clauses. There is a copy in a file named "COPYING" in the
+%C t-enigma source tree.
+
+\unprotect
+
+\writestatus{loading} {ConTeXt module / Enigma Document Encryption}
+
+\startinterface all
+ \setinterfacevariable {enigma} {enigma}
+\stopinterface
+
+\definenamespace [\v!enigma] [
+ \v!command=\v!no,
+ comment=Enigma Document Encryption,
+ \s!name=\v!enigma,
+ \s!parent=\v!enigma,
+ % setup=\v!list,
+ setup=\v!no,
+ style=\v!no,
+ type=module,
+ version=hg-tip,
+]
+
+%D Loading the \LUA\ conversion routines.
+
+\startluacode
+thirddata = thirddata or { }
+\stopluacode
+\registerctxluafile{enigma}
+
+%D \startdocsection[title=Macro Generator]
+%D \startparagraph
+%D The main setup.\reference[listing:define]{} The
+%D \texmacro{defineenigma} macro does not adhere to the reommended
+%D practis of automatical macro derivation. Rather, we have our own
+%D parser do the job of setting globals. This is a consequence of the
+%D intention to offer the same behavior in any of the three main
+%D formats, \PLAIN, \CONTEXT and \LATEX. Hence, we don’t rely on the
+%D internal mechanisms but implement our own macro generator.
+%D \stopparagraph
+
+\def\enigma_define_indeed#id{%
+ \edef\enigmaid{#id}%
+ \expandafter\gdef\csname \e!start\enigmaid\endcsname{%
+ \endgraf
+ \bgroup
+ \ctxlua{
+ if thirddata.enigma.machines["#id"] then
+ nodes.tasks.enableaction("processors",
+ "thirddata.enigma.callbacks.#id")
+ else
+ print([[ENIGMA: No machine of that name: #id!]])
+ end
+ }%
+ }%
+ %
+ \expandafter\gdef\csname \e!stop\enigmaid\endcsname{%
+ \endgraf%% We need to force a paragraph here for the callback to be
+ %% applied.
+ \ctxlua{
+ nodes.tasks.disableaction("processors",
+ "thirddata.enigma.callbacks.#id")
+ thirddata.enigma.machines["#id"]:processed_chars()
+ }%
+ \egroup%
+ }%
+}
+
+%D \startparagraph
+%D The \texmacro{enigma_inherit}\reference[listing:inherit]{} is called
+%D as an intermediate step when deriving one machine from an already
+%D existing one. It gets the stored configuration of its ancestor,
+%D relying on the \luafunction{retrieve_raw_args} function (see
+%D \at{page}[listing:retrieve].
+%D \stopparagraph
+\def\enigma_inherit#to#from{%
+ \ctxlua{%
+ local enigma = thirddata.enigma
+ local current_args = enigma.retrieve_raw_args(\!!bs#from\!!es)
+ enigma.save_raw_args(current_args, \!!bs#to\!!es)
+ enigma.new_callback(enigma.new_machine(\!!bs#to\!!es),
+ \!!bs#to\!!es)
+ }%
+ \enigma_define_indeed{#to}%
+}
+
+\def\enigma_define[#id][#secondid]{%
+ \ifsecondargument %% Copy an existing machine and callback.
+ \enigma_inherit{#id}{#secondid}%
+ \else %% Create a new machine.
+ \iffirstargument
+ \enigma_define_indeed{#id}%
+ \else
+ \donothing
+ \fi
+ \fi
+ \endgroup%
+}
+
+\def\defineenigma{%
+ \begingroup
+ \dodoubleempty\enigma_define
+}
+
+%D \stopdocsection
+
+%D \startdocsection[title=Setup]
+\def\enigma_setup_indeed#args{%
+ \ctxlua{
+ local enigma = thirddata.enigma
+ local current_args =
+ enigma.parse_args(\!!bs\detokenize{#args}\!!es)
+ enigma.save_raw_args(current_args, \!!bs\currentenigmaid\!!es)
+ enigma.new_callback(
+ enigma.new_machine(\!!bs\currentenigmaid\!!es),
+ \!!bs\currentenigmaid\!!es)
+ }%
+}
+
+%D \startparagraph
+%D The module setup \texmacro{setupenigma} expects key=value, notation.
+%D All the logic is at the Lua end, not much to see here …
+%D \stopparagraph
+
+\def\enigma_setup[#id][#args]{%
+ \ifsecondargument
+ \edef\currentenigmaid{#id}
+ \pushcatcodetable
+ \catcodetable \txtcatcodes
+ \enigma_setup_indeed{#args}%
+ \else
+ \donothing
+ \fi
+ \popcatcodetable
+ \egroup%
+}
+
+\def\setupenigma{%
+ \bgroup
+ \dodoubleempty\enigma_setup%
+}
+
+%D \stopdocsection
+
+\protect
+% vim:ft=context:sw=2:ts=2:tw=71
diff --git a/macros/context/contrib/context-enigma/tex/generic/enigma/enigma.lua b/macros/context/contrib/context-enigma/tex/generic/enigma/enigma.lua
new file mode 100644
index 0000000000..9da428842b
--- /dev/null
+++ b/macros/context/contrib/context-enigma/tex/generic/enigma/enigma.lua
@@ -0,0 +1,1662 @@
+#!/usr/bin/env texlua
+-----------------------------------------------------------------------
+-- FILE: enigma.lua
+-- USAGE: Call via interface from within a TeX session.
+-- DESCRIPTION: Enigma logic.
+-- REQUIREMENTS: LuaTeX capable format (Luaplain, ConTeXt).
+-- AUTHOR: Philipp Gesang (Phg), <phg42 dot 2a at gmail dot com>
+-- VERSION: release
+-- CREATED: 2013-03-28 02:12:03+0100
+-----------------------------------------------------------------------
+--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Format Dependent Code]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\startparagraph
+Exported functionality will be collected in the table
+\identifier{enigma}.
+\stopparagraph
+--ichd]]--
+
+local enigma = { machines = { }, callbacks = { } }
+local format_is_context = false
+
+--[[ichd--
+\startparagraph
+Afaict, \LATEX\ for \LUATEX\ still lacks a globally accepted
+namespacing convention. This is more than bad, but we’ll have to cope
+with that. For this reason we brazenly introduce
+\identifier{packagedata} (in analogy to \CONTEXT’s
+\identifier{thirddata}) table as a package namespace proposal. If this
+module is called from a \LATEX\ or plain session, the table
+\identifier{packagedata} will already have been created so we will
+identify the format according to its presence or absence, respectively.
+\stopparagraph
+--ichd]]--
+
+if packagedata then -- latex or plain
+ packagedata.enigma = enigma
+elseif thirddata then -- context
+ format_is_context = true
+ thirddata.enigma = enigma
+else -- external call, mtx-script or whatever
+ _ENV.enigma = enigma
+end
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Prerequisites]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startparagraph
+First of all, we generate local copies of all those library functions
+that are expected to be referenced frequently.
+The format-independent stuff comes first; it consists of functions from
+the
+\identifier{io},
+\identifier{lpeg},
+\identifier{math},
+\identifier{string},
+\identifier{table}, and
+\identifier{unicode}
+libraries.
+\stopparagraph
+--ichd]]--
+
+local get_debug_info = debug.getinfo
+local ioread = io.read
+local iowrite = io.write
+local mathfloor = math.floor
+local mathrandom = math.random
+local next = next
+local nodecopy = node and node.copy
+local nodeid = node and node.id
+local nodeinsert_before = node and node.insert_before
+local nodeinsert_after = node and node.insert_after
+local nodelength = node and node.length
+local nodenew = node and node.new
+local noderemove = node and node.remove
+local nodeslide = node and node.slide
+local nodetraverse = node and node.traverse
+local nodetraverse_id = node and node.traverse_id
+local nodesinstallattributehandler
+local nodestasksappendaction
+local nodestasksdisableaction
+if format_is_context then
+ nodesinstallattributehandler = nodes.installattributehandler
+ nodestasksappendaction = nodes.tasks.appendaction
+ nodestasksdisableaction = nodes.tasks.disableaction
+end
+local stringfind = string.find
+local stringformat = string.format
+local stringlower = string.lower
+local stringsub = string.sub
+local stringupper = string.upper
+local tableconcat = table.concat
+local tonumber = tonumber
+local type = type
+local utf8byte = unicode.utf8.byte
+local utf8char = unicode.utf8.char
+local utf8len = unicode.utf8.len
+local utf8lower = unicode.utf8.lower
+local utf8sub = unicode.utf8.sub
+local utfcharacters = string.utfcharacters
+
+--- debugging tool (careful, this *will* break context!)
+--dofile(kpse.find_file("lualibs-table.lua")) -- archaic version :(
+--table.print = function (...) print(table.serialize(...)) end
+
+local tablecopy
+if format_is_context then
+ tablecopy = table.copy
+else -- could use lualibs instead but not worth the overhead
+ tablecopy = function (t) -- ignores tables as keys
+ local result = { }
+ for k, v in next, t do
+ if type(v) == table then
+ result[k] = tablecopy(v)
+ else
+ result[k] = v
+ end
+ end
+ return result
+ end
+end
+
+local GLYPH_NODE = node and nodeid"glyph"
+local GLUE_NODE = node and nodeid"glue"
+local GLUE_SPEC_NODE = node and nodeid"glue_spec"
+local KERN_NODE = node and nodeid"kern"
+local DISC_NODE = node and nodeid"disc"
+local HLIST_NODE = node and nodeid"hlist"
+local VLIST_NODE = node and nodeid"vlist"
+
+local IGNORE_NODES = node and {
+--[GLUE_NODE] = true,
+ [KERN_NODE] = true,
+--[DISC_NODE] = true,
+} or { }
+
+--[[ichd--
+\startparagraph
+The initialization of the module relies heavily on parsers generated by
+\type{LPEG}.
+\stopparagraph
+--ichd]]--
+
+local lpeg = require "lpeg"
+
+local C, Cb, Cc, Cf, Cg,
+ Cmt, Cp, Cs, Ct
+ = lpeg.C, lpeg.Cb, lpeg.Cc, lpeg.Cf, lpeg.Cg,
+ lpeg.Cmt, lpeg.Cp, lpeg.Cs, lpeg.Ct
+
+local P, R, S, V, lpegmatch
+ = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match
+
+--local B = lpeg.version() == "0.10" and lpeg.B or nil
+
+--[[ichd--
+\startparagraph
+By default the output to \type{stdout} will be zero. The verbosity
+level can be adjusted in order to alleviate debugging.
+\stopparagraph
+--ichd]]--
+--local verbose_level = 42
+local verbose_level = 0
+
+--[[ichd--
+\startparagraph
+Historically, Enigma-encoded messages were restricted to a size of 250
+characters. With sufficient verbosity we will indicate whether this
+limit has been exceeded during the \TEX\ run.
+\stopparagraph
+--ichd]]--
+local max_msg_length = 250
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Globals]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startparagraph
+The following mappings are used all over the place as we convert back
+and forth between the characters (unicode) and their numerical
+representation.
+\stopparagraph
+--ichd]]--
+
+local value_to_letter -- { [int] -> chr }
+local letter_to_value -- { [chr] -> int }
+local alpha_sorted -- string, length 26
+local raw_rotor_wiring -- { string0, .. string5, }
+local notches -- { [int] -> int } // rotor num -> notch pos
+local reflector_wiring -- { { [int] -> int }, ... } // symmetrical
+do
+ value_to_letter = {
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
+ "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
+ }
+
+ letter_to_value = {
+ a = 01, b = 02, c = 03, d = 04, e = 05, f = 06, g = 07, h = 08,
+ i = 09, j = 10, k = 11, l = 12, m = 13, n = 14, o = 15, p = 16,
+ q = 17, r = 18, s = 19, t = 20, u = 21, v = 22, w = 23, x = 24,
+ y = 25, z = 26,
+ }
+--[[ichd--
+\startparagraph
+The five rotors to simulate.\reference[listing:rotor_wiring]{}
+Their wirings are created from strings at runtime, see below the
+function \luafunction{get_rotors}.
+\stopparagraph
+--ichd]]--
+
+ --[[
+ Nice: http://www.ellsbury.com/ultraenigmawirings.htm
+ ]]--
+ alpha_sorted = "abcdefghijklmnopqrstuvwxyz"
+ raw_rotor_wiring = {
+ [0] = alpha_sorted,
+ "ekmflgdqvzntowyhxuspaibrcj",
+ "ajdksiruxblhwtmcqgznpyfvoe",
+ "bdfhjlcprtxvznyeiwgakmusqo",
+ "esovpzjayquirhxlnftgkdcmwb",
+ "vzbrgityupsdnhlxawmjqofeck",
+ }
+
+--[[ichd--
+\startparagraph
+Notches are assigned to rotors according to the Royal Army
+mnemonic.
+\stopparagraph
+--ichd]]--
+ notches = { }
+ do
+ local raw_notches = "rfwkannnn"
+ --local raw_notches = "qevjz"
+ local n = 1
+ for chr in utfcharacters(raw_notches) do
+ local pos = stringfind(alpha_sorted, chr)
+ notches[n] = pos - 1
+ n = n + 1
+ end
+ end
+
+--[[ichd--
+\placetable[here][listing:reflector]%
+ {The three reflectors and their substitution rules.}{%
+ \starttabulate[|r|l|]
+ \NC UKW a \NC AE BJ CM DZ FL GY HX IV KW NR OQ PU ST \NC \NR
+ \NC UKW b \NC AY BR CU DH EQ FS GL IP JX KN MO TZ VW \NC \NR
+ \NC UKW c \NC AF BV CP DJ EI GO HY KR LZ MX NW QT SU \NC \NR
+ \stoptabulate
+}
+--ichd]]--
+
+ reflector_wiring = { }
+ local raw_ukw = {
+ { a = "e", b = "j", c = "m", d = "z", f = "l", g = "y", h = "x",
+ i = "v", k = "w", n = "r", o = "q", p = "u", s = "t", },
+ { a = "y", b = "r", c = "u", d = "h", e = "q", f = "s", g = "l",
+ i = "p", j = "x", k = "n", m = "o", t = "z", v = "w", },
+ { a = "f", b = "v", c = "p", d = "j", e = "i", g = "o", h = "y",
+ k = "r", l = "z", m = "x", n = "w", q = "t", s = "u", },
+ }
+ for i=1, #raw_ukw do
+ local new_wiring = { }
+ local current_ukw = raw_ukw[i]
+ for from, to in next, current_ukw do
+ from = letter_to_value[from]
+ to = letter_to_value[to]
+ new_wiring[from] = to
+ new_wiring[to] = from
+ end
+ reflector_wiring[i] = new_wiring
+ end
+end
+
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Pretty printing for debug purposes]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startparagraph
+The functions below allow for formatting of the terminal output; they
+have no effect on the workings of the enigma simulator.
+\stopparagraph
+--ichd]]--
+
+local emit
+local pprint_ciphertext
+local pprint_encoding
+local pprint_encoding_scheme
+local pprint_init
+local pprint_machine_step
+local pprint_new_machine
+local pprint_rotor
+local pprint_rotor_scheme
+local pprint_step
+local polite_key_request
+local key_invalid
+do
+ local eol = "\n"
+
+ local colorstring_template = "\027[%d;1m%s\027[0m"
+ local colorize = function (s, color)
+ color = color and color < 38 and color > 29 and color or 31
+ return stringformat(colorstring_template,
+ color,
+ s)
+ end
+
+ local underline = function (s)
+ return stringformat("\027[4;37m%s\027[0m", s)
+ end
+
+ local s_steps = [[Total characters encoded with machine “]]
+ local f_warnsteps = [[ (%d over permitted maximum)]]
+ pprint_machine_step = function (n, name)
+ local sn
+ name = colorize(name, 36)
+ if n > max_msg_length then
+ sn = colorize(n, 31) .. stringformat(f_warnsteps,
+ n - max_msg_length)
+ else
+ sn = colorize(n, 37)
+ end
+ return s_steps .. name .. "”: " .. sn .. "."
+ end
+ local rotorstate = "[s \027[1;37m%s\027[0m n\027[1;37m%2d\027[0m]> "
+ pprint_rotor = function (rotor)
+ local visible = rotor.state % 26 + 1
+ local w, n = rotor.wiring, (rotor.notch - visible) % 26 + 1
+ local tmp = { }
+ for i=1, 26 do
+ local which = (i + rotor.state - 1) % 26 + 1
+ local chr = value_to_letter[rotor.wiring.from[which]]
+ if i == n then -- highlight positions of notches
+ tmp[i] = colorize(stringupper(chr), 32)
+ --elseif chr == value_to_letter[visible] then
+ ---- highlight the character in window
+ -- tmp[i] = colorize(chr, 33)
+ else
+ tmp[i] = chr
+ end
+ end
+ return stringformat(rotorstate,
+ stringupper(value_to_letter[visible]),
+ n)
+ .. tableconcat(tmp)
+ end
+
+ local rotor_scheme = underline"[rot not]"
+ .. " "
+ .. underline(alpha_sorted)
+ pprint_rotor_scheme = function ()
+ return rotor_scheme
+ end
+
+ local s_encoding_scheme = eol
+ .. [[in > 1 => 2 => 3 > UKW > 3 => 2 => 1]]
+ pprint_encoding_scheme = function ()
+ return underline(s_encoding_scheme)
+ end
+ local s_step = " => "
+ local stepcolor = 36
+ local finalcolor = 32
+ pprint_encoding = function (steps)
+ local nsteps, result = #steps, { }
+ for i=0, nsteps-1 do
+ result[i+1] = colorize(value_to_letter[steps[i]], stepcolor)
+ .. s_step
+ end
+ result[nsteps+1] = colorize(value_to_letter[steps[nsteps]],
+ finalcolor)
+ return tableconcat(result)
+ end
+
+ local init_announcement
+ = colorize("\n" .. [[Initial position of rotors: ]],
+ 37)
+ pprint_init = function (init)
+ local result = ""
+ result = value_to_letter[init[1]] .. " "
+ .. value_to_letter[init[2]] .. " "
+ .. value_to_letter[init[3]]
+ return init_announcement .. colorize(stringupper(result), 34)
+ end
+
+ local machine_announcement =
+ [[Enigma machine initialized with the following settings.]] .. eol
+ local s_ukw = colorize(" Reflector:", 37)
+ local s_pb = colorize("Plugboard setting:", 37)
+ local s_ring = colorize(" Ring positions:", 37)
+ local empty_plugboard = colorize(" ——", 34)
+ pprint_new_machine = function (m)
+ local result = { "" }
+ result[#result+1] = underline(machine_announcement)
+ result[#result+1] = s_ukw
+ .. " "
+ .. colorize(
+ stringupper(value_to_letter[m.reflector]),
+ 34
+ )
+ local rings = ""
+ for i=1, 3 do
+ local this = m.ring[i]
+ rings = rings
+ .. " "
+ .. colorize(stringupper(value_to_letter[this + 1]), 34)
+ end
+ result[#result+1] = s_ring .. rings
+ if m.__raw.plugboard then
+ local tpb, pb = m.__raw.plugboard, ""
+ for i=1, #tpb do
+ pb = pb .. " " .. colorize(tpb[i], 34)
+ end
+ result[#result+1] = s_pb .. pb
+ else
+ result[#result+1] = s_pb .. empty_plugboard
+ end
+ result[#result+1] = ""
+ result[#result+1] = pprint_rotor_scheme()
+ for i=1, 3 do
+ result[#result+1] = pprint_rotor(m.rotors[i])
+ end
+ return tableconcat(result, eol) .. eol
+ end
+
+ local step_template = colorize([[Step № ]], 37)
+ local chr_template = colorize([[ —— Input ]], 37)
+ local pbchr_template = colorize([[ → ]], 37)
+ pprint_step = function (n, chr, pb_chr)
+ return eol
+ .. step_template
+ .. colorize(n, 34)
+ .. chr_template
+ .. colorize(stringupper(value_to_letter[chr]), 34)
+ .. pbchr_template
+ .. colorize(stringupper(value_to_letter[pb_chr]), 34)
+ .. eol
+ end
+
+ -- Split the strings into lines, group them in bunches of five etc.
+ local tw = 30
+ local pprint_textblock = function (s)
+ local len = utf8len(s)
+ local position = 1 -- position in string
+ local nline = 5 -- width of current line
+ local out = utf8sub(s, position, position+4)
+ repeat
+ position = position + 5
+ nline = nline + 6
+ if nline > tw then
+ out = out .. eol .. utf8sub(s, position, position+4)
+ nline = 1
+ else
+ out = out .. " " .. utf8sub(s, position, position+4)
+ end
+ until position > len
+ return out
+ end
+
+ local intext = colorize([[Input text:]], 37)
+ local outtext = colorize([[Output text:]], 37)
+ pprint_ciphertext = function (input, output, upper_p)
+ if upper_p then
+ input = stringupper(input)
+ output = stringupper(output)
+ end
+ return eol
+ .. intext
+ .. eol
+ .. pprint_textblock(input)
+ .. eol .. eol
+ .. outtext
+ .. eol
+ .. pprint_textblock(output)
+ end
+
+--[[ichd--
+\startparagraph
+\luafunction{emit} is the main wrapper function for
+\identifier{stdout}. Checks if the global verbosity setting exceeds
+the specified threshold, and only then pushes the output.
+\stopparagraph
+--ichd]]--
+ emit = function (v, f, ...)
+ if f and v and verbose_level >= v then
+ iowrite(f(...) .. eol)
+ end
+ return 0
+ end
+--[[ichd--
+\startparagraph
+The \luafunction{polite_key_request} will be called in case the
+\identifier{day_key} field of the machine setup is empty at the time of
+initialization.
+\stopparagraph
+--ichd]]--
+ local s_request = "\n\n "
+ .. underline"This is an encrypted document." .. [[
+
+
+ Please enter the document key for enigma machine
+ “%s”.
+
+ Key Format:
+
+Ref R1 R2 R3 I1 I2 I3 [P1 ..] Ref: reflector A/B/C
+ Rn: rotor, I through V
+ In: ring position, 01 through 26
+ Pn: optional plugboard wiring, upto 32
+
+>]]
+ polite_key_request = function (name)
+ return stringformat(s_request, colorize(name, 33))
+ end
+
+ local s_invalid_key = colorize"Warning!"
+ .. " The specified key is invalid."
+ key_invalid = function ()
+ return s_invalid_key
+ end
+end
+
+--[[ichd--
+\startparagraph
+The functions \luafunction{new} and \luafunction{ask_for_day_key} are
+used outside their scope, so we declare them beforehand.
+\stopparagraph
+--ichd]]--
+local new
+local ask_for_day_key
+do
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Rotation]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startparagraph
+The following function \luafunction{do_rotate} increments the
+rotational state of a single rotor. There are two tests for notches:
+\startitemize[n]
+ \item whether it’s at the current character, and
+ \item whether it’s at the next character.
+\stopitemize
+The latter is an essential prerequisite for double-stepping.
+\stopparagraph
+--ichd]]--
+ local do_rotate = function (rotor)
+ rotor.state = rotor.state % 26 + 1
+ return rotor,
+ rotor.state == rotor.notch,
+ rotor.state + 1 == rotor.notch
+ end
+
+--[[ichd--
+\startparagraph
+The \luafunction{rotate} function takes care of rotor (\emph{Walze})
+movement. This entails incrementing the next rotor whenever the notch
+has been reached and covers the corner case \emph{double stepping}.
+\stopparagraph
+--ichd]]--
+ local rotate = function (machine)
+ local rotors = machine.rotors
+ local rc, rb, ra = rotors[1], rotors[2], rotors[3]
+
+ ra, nxt = do_rotate(ra)
+ if nxt or machine.double_step then
+ rb, nxt, nxxt = do_rotate(rb)
+ if nxt then
+ rc = do_rotate(rc)
+ end
+ if nxxt then
+ --- weird: home.comcast.net/~dhhamer/downloads/rotors1.pdf
+ machine.double_step = true
+ else
+ machine.double_step = false
+ end
+ end
+ machine.rotors = { rc, rb, ra }
+ end
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Input Preprocessing]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startparagraph
+Internally, we will use lowercase strings as they are a lot more
+readable than uppercase. Lowercasing happens prior to any further
+dealings with input. After the encoding or decoding has been
+accomplished, there will be an optional (re-)uppercasing.
+\stopparagraph
+
+\startparagraph
+Substitutions \reference[listing:preproc]{}are applied onto the
+lowercased input. You might want to avoid some of these, above all the
+rules for numbers, because they translate single digits only. The
+solution is to write out numbers above ten.
+\stopparagraph
+--ichd]]--
+
+ local pp_substitutions = {
+ -- Umlauts are resolved.
+ ["ö"] = "oe",
+ ["ä"] = "ae",
+ ["ü"] = "ue",
+ ["ß"] = "ss",
+ -- WTF?
+ ["ch"] = "q",
+ ["ck"] = "q",
+ -- Punctuation -> “x”
+ [","] = "x",
+ ["."] = "x",
+ [";"] = "x",
+ [":"] = "x",
+ ["/"] = "x",
+ ["’"] = "x",
+ ["‘"] = "x",
+ ["„"] = "x",
+ ["“"] = "x",
+ ["“"] = "x",
+ ["-"] = "x",
+ ["–"] = "x",
+ ["—"] = "x",
+ ["!"] = "x",
+ ["?"] = "x",
+ ["‽"] = "x",
+ ["("] = "x",
+ [")"] = "x",
+ ["["] = "x",
+ ["]"] = "x",
+ ["<"] = "x",
+ [">"] = "x",
+ -- Spaces are omitted.
+ [" "] = "",
+ ["\n"] = "",
+ ["\t"] = "",
+ ["\v"] = "",
+ ["\\"] = "",
+ -- Numbers are resolved.
+ ["0"] = "null",
+ ["1"] = "eins",
+ ["2"] = "zwei",
+ ["3"] = "drei",
+ ["4"] = "vier",
+ ["5"] = "fuenf",
+ ["6"] = "sechs",
+ ["7"] = "sieben",
+ ["8"] = "acht",
+ ["9"] = "neun",
+ }
+
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[
+ title={Main function chain to be applied to single characters},
+]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\startparagraph
+As far as the Enigma is concerned, there is no difference between
+encoding and decoding. Thus, we need only one function
+(\luafunction{encode_char}) to achieve the complete functionality.
+However, within every encoding step, characters will be wired
+differently in at least one of the rotors according to its rotational
+state. Rotation is simulated by adding the \identifier{state} field of
+each rotor to the letter value (its position on the ingoing end).
+\stopparagraph
+\placetable[here][table:dirs]{Directional terminology}{%
+ \starttabulate[|l|r|l|]
+ \NC boolean \NC direction \NC meaning \NC \AR
+ \NC true \NC “from” \NC right to left \NC \AR
+ \NC false \NC “to” \NC left to right \NC \AR
+ \stoptabulate%
+}
+\startparagraph
+The function \luafunction{do_do_encode_char} returns the character
+substitution for one rotor. As a letter passes through each rotor
+twice, the argument \identifier{direction} determines which way the
+substitution is applied.
+\stopparagraph
+--ichd]]--
+ local do_do_encode_char = function (char, rotor, direction)
+ local rw = rotor.wiring
+ local rs = rotor.state
+ local result = char
+ if direction then -- from
+ result = (result + rs - 1) % 26 + 1
+ result = rw.from[result]
+ result = (result - rs - 1) % 26 + 1
+ else -- to
+ result = (result + rs - 1) % 26 + 1
+ result = rw.to[result]
+ result = (result - rs - 1) % 26 + 1
+ end
+ return result
+ end
+
+--[[ichd--
+\startparagraph
+Behind the plugboard, every character undergoes seven substitutions:
+two for each rotor plus the central one through the reflector. The
+function \luafunction{do_encode_char}, although it returns the final
+result only, keeps every intermediary step inside a table for debugging
+purposes. This may look inefficient but is actually a great advantage
+whenever something goes wrong.
+\stopparagraph
+--ichd]]--
+ --- ra -> rb -> rc -> ukw -> rc -> rb -> ra
+ local do_encode_char = function (rotors, reflector, char)
+ local rc, rb, ra = rotors[1], rotors[2], rotors[3]
+ local steps = { [0] = char }
+ --
+ steps[1] = do_do_encode_char(steps[0], ra, true)
+ steps[2] = do_do_encode_char(steps[1], rb, true)
+ steps[3] = do_do_encode_char(steps[2], rc, true)
+ steps[4] = reflector_wiring[reflector][steps[3]]
+ steps[5] = do_do_encode_char(steps[4], rc, false)
+ steps[6] = do_do_encode_char(steps[5], rb, false)
+ steps[7] = do_do_encode_char(steps[6], ra, false)
+ emit(2, pprint_encoding_scheme)
+ emit(2, pprint_encoding, steps)
+ return steps[7]
+ end
+
+--[[ichd--
+\startparagraph
+Before an input character is passed on to the actual encoding routing,
+the function \luafunction{encode_char} matches it agains the latin
+alphabet.
+Characters failing this test are either passed through or ignored,
+depending on the machine option \identifier{other_chars}.
+Also, the counter of encoded characters is incremented at this stage
+and some pretty printer hooks reside here.
+\stopparagraph
+
+\startparagraph
+\luafunction{encode_char} contributes only one element of the encoding
+procedure: the plugboard (\emph{Steckerbrett}).
+Like the rotors described above, a character passed through this
+device twice; the plugboard marks the beginning and end of every step.
+For debugging purposes, the first substitution is stored in a separate
+local variable, \identifier{pb_char}.
+\stopparagraph
+--ichd]]--
+
+ local encode_char = function (machine, char)
+ machine.step = machine.step + 1
+ machine:rotate()
+ local pb = machine.plugboard
+ char = letter_to_value[char]
+ local pb_char = pb[char] -- first plugboard substitution
+ emit(2, pprint_step, machine.step, char, pb_char)
+ emit(3, pprint_rotor_scheme)
+ emit(3, pprint_rotor, machine.rotors[1])
+ emit(3, pprint_rotor, machine.rotors[2])
+ emit(3, pprint_rotor, machine.rotors[3])
+ char = do_encode_char(machine.rotors,
+ machine.reflector,
+ pb_char)
+ return value_to_letter[pb[char]] -- second plugboard substitution
+ end
+
+ local get_random_pattern = function ()
+ local a, b, c
+ = mathrandom(1,26), mathrandom(1,26), mathrandom(1,26)
+ return value_to_letter[a]
+ .. value_to_letter[b]
+ .. value_to_letter[c]
+ end
+
+ local pattern_to_state = function (pat)
+ return {
+ letter_to_value[stringsub(pat, 1, 1)],
+ letter_to_value[stringsub(pat, 2, 2)],
+ letter_to_value[stringsub(pat, 3, 3)],
+ }
+ end
+
+ local set_state = function (machine, state)
+ local rotors = machine.rotors
+ for i=1, 3 do
+ rotors[i].state = state[i] - 1
+ end
+ end
+
+--[[ichd--
+\startparagraph
+When \modulename{Enigma} is called from \TEX, the encoding
+proceeds character by character as we iterate one node at a time.
+\luafunction{encode_string} is a wrapper for use with strings, e.~g. in
+the mtx-script (\at{page}[sec:fun]).
+It handles iteration and extraction of successive characters from the
+sequence.
+\stopparagraph
+--ichd]]--
+ local encode_string = function (machine, str) --, pattern)
+ local result = { }
+ for char in utfcharacters(str) do
+ local tmp = machine:encode(char)
+ if tmp ~= false then
+ if type(tmp) == "table" then
+ for i=1, #tmp do
+ result[#result+1] = tmp[i]
+ end
+ else
+ result[#result+1] = tmp
+ end
+ end
+ end
+ machine:processed_chars()
+ return tableconcat(result)
+ end
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Initialization string parser]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\placetable[here][]{Initialization strings}{%
+ \bTABLE
+ \bTR
+ \bTD Reflector \eTD
+ \bTD[nc=3] Rotor \eTD
+ \bTD[nc=3] Initial \eTD
+ \bTD[nc=10] Plugboard wiring \eTD
+ \eTR
+ \eTR
+ \bTR
+ \bTD in slot \eTD
+ \bTD[nc=3] setting \eTD
+ \bTD[nc=3] rotor \eTD
+ \eTR
+ \bTR
+ \bTD \eTD
+ \bTD 1 \eTD\bTD 2 \eTD\bTD 3 \eTD
+ \bTD 1 \eTD\bTD 2 \eTD\bTD 3 \eTD
+ \bTD 1 \eTD\bTD 2 \eTD\bTD 3 \eTD\bTD 4 \eTD\bTD 5 \eTD
+ \bTD 6 \eTD\bTD 7 \eTD\bTD 8 \eTD\bTD 9 \eTD\bTD 10 \eTD
+ \eTR
+ \bTR
+ \bTD B \eTD
+ \bTD I \eTD\bTD IV \eTD\bTD III \eTD
+ \bTD 16 \eTD\bTD 26 \eTD\bTD 08 \eTD
+ \bTD AD \eTD\bTD CN \eTD\bTD ET \eTD
+ \bTD FL \eTD\bTD GI \eTD\bTD JV \eTD
+ \bTD KZ \eTD\bTD PU \eTD\bTD QY \eTD
+ \bTD WX \eTD
+ \eTR
+ \eTABLE
+}
+--ichd]]--
+ local roman_digits = {
+ i = 1, I = 1,
+ ii = 2, II = 2,
+ iii = 3, III = 3,
+ iv = 4, IV = 4,
+ v = 5, V = 5,
+ }
+
+ local p_init = P{
+ "init",
+ init = V"whitespace"^-1 * Ct(V"do_init"),
+ do_init = (V"reflector" * V"whitespace")^-1
+ * V"rotors" * V"whitespace"
+ * V"ring"
+ * (V"whitespace" * V"plugboard")^-1
+ ,
+ reflector = Cg(C(R("ac","AC")) / stringlower, "reflector")
+ ,
+
+ rotors = Cg(Ct(V"rotor" * V"whitespace"
+ * V"rotor" * V"whitespace"
+ * V"rotor"),
+ "rotors")
+ ,
+ rotor = Cs(V"roman_five" / roman_digits
+ + V"roman_four" / roman_digits
+ + V"roman_three" / roman_digits
+ + V"roman_two" / roman_digits
+ + V"roman_one" / roman_digits)
+ ,
+ roman_one = P"I" + P"i",
+ roman_two = P"II" + P"ii",
+ roman_three = P"III" + P"iii",
+ roman_four = P"IV" + P"iv",
+ roman_five = P"V" + P"v",
+
+ ring = Cg(Ct(V"double_digit" * V"whitespace"
+ * V"double_digit" * V"whitespace"
+ * V"double_digit"),
+ "ring")
+ ,
+ double_digit = C(R"02" * R"09"),
+
+ plugboard = Cg(V"do_plugboard", "plugboard"),
+ --- no need to enforce exactly ten substitutions
+ --do_plugboard = Ct(V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination" * V"whitespace"
+ -- * V"letter_combination")
+ do_plugboard = Ct(V"letter_combination"
+ * (V"whitespace" * V"letter_combination")^0)
+ ,
+ letter_combination = C(R("az", "AZ") * R("az", "AZ")),
+
+ whitespace = S" \n\t\v"^1,
+ }
+
+
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Initialization routines]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\startparagraph
+The plugboard is implemented as a pair of hash tables.
+\stopparagraph
+--ichd]]--
+ local get_plugboard_substitution = function (p)
+ --- Plugboard wirings are symmetrical, thus we have one table for
+ --- each direction.
+ local tmp, result = { }, { }
+ for _, str in next, p do
+ local one, two = stringlower(stringsub(str, 1, 1)),
+ stringlower(stringsub(str, 2))
+ tmp[one] = two
+ tmp[two] = one
+ end
+ local n_letters = 26
+
+ local lv = letter_to_value
+ for n=1, n_letters do
+ local letter = value_to_letter[n]
+ local sub = tmp[letter] or letter
+ -- Map each char either to the plugboard substitution or itself.
+ result[lv[letter]] = lv[sub or letter]
+ end
+ return result
+ end
+
+--[[ichd--
+\startparagraph
+Initialization of the rotors requires some precautions to be taken.
+The most obvious of which is adjusting the displacement of its wiring
+by the ring setting.
+\stopparagraph
+\startparagraph
+Another important task is to store the notch position in order for it
+to be retrievable by the rotation subroutine at a later point.
+\stopparagraph
+\startparagraph
+The actual bidirectional mapping is implemented as a pair of tables.
+The initial order of letters, before the ring shift is applied, is
+alphabetical on the input (right, “from”) side and, on the output
+(left, “to”) side taken by the hard wired correspondence as specified
+in the rotor wirings above.
+NB the descriptions in terms of “output” and “input” directions is
+misleading in so far as during any encoding step the electricity will
+pass through every rotor in both ways.
+Hence, the “input” (right, from) direction literally applies only to
+the first half of the encoding process between plugboard and reflector.
+\stopparagraph
+\startparagraph
+The function \luafunction{do_get_rotor} creates a single rotor instance
+and populates it with character mappings. The \identifier{from} and
+\identifier{to} subfields of its \identifier{wiring} field represent
+the wiring in the respective directions.
+This initital wiring was specified in the corresponding
+\identifier{raw_rotor_wiring} table; the ringshift is added modulo the
+alphabet size in order to get the correctly initialized rotor.
+\stopparagraph
+--ichd]]--
+ local do_get_rotor = function (raw, notch, ringshift)
+ local rotor = {
+ wiring = {
+ from = { },
+ to = { },
+ },
+ state = 0,
+ notch = notch,
+ }
+ local w = rotor.wiring
+ for from=1, 26 do
+ local to = letter_to_value[stringsub(raw, from, from)]
+ --- The shift needs to be added in both directions.
+ to = (to + ringshift - 1) % 26 + 1
+ from = (from + ringshift - 1) % 26 + 1
+ rotor.wiring.from[from] = to
+ rotor.wiring.to [to ] = from
+ end
+ --table.print(rotor, "rotor")
+ return rotor
+ end
+
+--[[ichd--
+\startparagraph
+Rotors are initialized sequentially accordings to the initialization
+request.
+The function \luafunction{get_rotors} walks over the list of
+initialization instructions and calls \luafunction{do_get_rotor} for
+the actual generation of the rotor table. Each rotor generation request
+consists of three elements:
+\stopparagraph
+\startitemize[n]
+ \item the choice of rotor (one of five),
+ \item the notch position of said rotor, and
+ \item the ring shift.
+\stopitemize
+--ichd]]--
+ local get_rotors = function (rotors, ring)
+ local s, r = { }, { }
+ for n=1, 3 do
+ local nr = tonumber(rotors[n])
+ local ni = tonumber(ring[n]) - 1 -- “1” means shift of zero
+ r[n] = do_get_rotor(raw_rotor_wiring[nr], notches[nr], ni)
+ s[n] = ni
+ end
+ return r, s
+ end
+
+ local decode_char = encode_char -- hooray for involutory ciphers
+
+--[[ichd--
+\startparagraph
+The function \luafunction{encode_general} is an intermediate step for
+the actual single-character encoding / decoding routine
+\luafunction{enchode_char}.
+Its purpose is to ensure encodability of a given character before
+passing it along.
+Characters are first checked against the replacement table
+\identifier{pp_substitutions} (see \at{page}[listing:preproc]).
+For single-character replacements the function returns the encoded
+character (string).
+However, should the replacement turn out to consist of more than one
+character, each one will be encoded successively, yielding a list.
+\stopparagraph
+--ichd]]--
+ local encode_general = function (machine, chr)
+ local chr = utf8lower(chr)
+ local replacement
+ = pp_substitutions[chr] or letter_to_value[chr] and chr
+ if not replacement then
+ if machine.other_chars then
+ return chr
+ else
+ return false
+ end
+ end
+
+ if utf8len(replacement) == 1 then
+ return encode_char(machine, replacement)
+ end
+ local result = { }
+ for new_chr in utfcharacters(replacement) do
+ result[#result+1] = encode_char(machine, new_chr)
+ end
+ return result
+ end
+
+ local process_message_key
+ local alpha = R"az"
+ local alpha_dec = alpha / letter_to_value
+ local whitespace = S" \n\t\v"
+ local mkeypattern = Ct(alpha_dec * alpha_dec * alpha_dec)
+ * whitespace^0
+ * C(alpha * alpha *alpha)
+ process_message_key = function (machine, message_key)
+ message_key = stringlower(message_key)
+ local init, three = lpegmatch(mkeypattern, message_key)
+ -- to be implemented
+ end
+
+ local decode_string = function (machine, str, message_key)
+ machine.kenngruppe, str = stringsub(str, 3, 5), stringsub(str, 6)
+ machine:process_message_key(message_key)
+ local decoded = encode_string(machine, str)
+ return decoded
+ end
+
+ local testoptions = {
+ size = 42,
+
+ }
+ local generate_header = function (options)
+ end
+
+ local processed_chars = function (machine)
+ emit(1, pprint_machine_step, machine.step, machine.name)
+ end
+
+--[[ichd--
+\startparagraph
+The day key is entrusted to the function \luafunction{handle_day_key}.
+If the day key is the empty string or \type{nil}, it will ask for a key
+on the terminal. (Cf. below, \at{page}[listing:ask_for_day_key].)
+Lesson: don’t forget providing day keys in your setups when running in
+batch mode.
+\stopparagraph
+--ichd]]--
+ local handle_day_key handle_day_key = function (dk, name, old)
+ local result
+ if not dk or dk == "" then
+ dk = ask_for_day_key(name, old)
+ end
+ result = lpegmatch(p_init, dk)
+ result.reflector = result.reflector or "b"
+ -- If we don’t like the key we’re going to ask again. And again....
+ return result or handle_day_key(nil, name, dk)
+ end
+
+--[[ichd--
+\startparagraph
+The enigma encoding is restricted to an input -- and, naturally, output
+-- alphabet of exactly twenty-seven characters. Obviously, this would
+severely limit the set of encryptable documents. For this reason the
+plain text would be \emph{preprocessed} prior to encoding, removing
+spaces and substituting a range of characters, e.\,g. punctuation, with
+placeholders (“X”) from the encodable spectrum. See above
+\at{page}[listing:preproc] for a comprehensive list of substitutions.
+\stopparagraph
+
+\startparagraph
+The above mentioned preprocessing, however, does not even nearly extend
+to the whole unicode range that modern day typesetting is expected to
+handle. Thus, sooner or later an Enigma machine will encounter
+non-preprocessable characters and it will have to decide what to do
+with them. The Enigma module offers two ways to handle this kind of
+situation: \emph{drop} those characters, possibly distorting the
+deciphered plain text, or to leave them in, leaving hints behind as to
+the structure of the encrypted text. None of these is optional, so it
+is nevertheless advisable to not include non-latin characters in the
+plain text in the first place. The settings key
+\identifier{other_chars} (type boolean) determines whether we will keep
+or drop offending characters.
+\stopparagraph
+--ichd]]--
+
+ new = function (name, args)
+ local setup_string, pattern = args.day_key, args.rotor_setting
+ local raw_settings = handle_day_key(setup_string, name)
+ local rotors, ring =
+ get_rotors(raw_settings.rotors, raw_settings.ring)
+ local plugboard
+ = raw_settings.plugboard
+ and get_plugboard_substitution(raw_settings.plugboard)
+ or get_plugboard_substitution{ }
+ local machine = {
+ name = name,
+ step = 0, -- n characters encoded
+ init = {
+ rotors = raw_settings.rotors,
+ ring = raw_settings.ring
+ },
+ rotors = rotors,
+ ring = ring,
+ state = init_state,
+ other_chars = args.other_chars,
+ spacing = args.spacing,
+ ---> a>1, b>2, c>3
+ reflector = letter_to_value[raw_settings.reflector],
+ plugboard = plugboard,
+ --- functionality
+ rotate = rotate,
+ --process_message_key = process_message_key,
+ encode_string = encode_string,
+ encode_char = encode_char,
+ encode = encode_general,
+ decode_string = decode_string,
+ decode_char = decode_char,
+ set_state = set_state,
+ processed_chars = processed_chars,
+ --- <badcodingstyle> -- hackish but occasionally useful
+ __raw = raw_settings
+ --- </badcodingstyle>
+ } --- machine
+ local init_state
+ = pattern_to_state(pattern or get_random_pattern())
+ emit(1, pprint_init, init_state)
+ machine:set_state(init_state)
+
+ --table.print(machine.rotors)
+ emit(1, pprint_new_machine, machine)
+ return machine
+ end
+
+end
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+
+--[[ichd--
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\startdocsection[title=Setup Argument Handling]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+--ichd]]--
+do
+--[[ichd--
+\startparagraph
+As the module is intended to work both with the Plain and \LATEX\
+formats as well as \CONTEXT, we can’t rely on format dependent setups.
+Hence the need for an argument parser. Should be more efficient anyways
+as all the functionality resides in Lua.
+\stopparagraph
+--ichd]]--
+
+ local p_args = P{
+ "args",
+ args = Cf(Ct"" * (V"kv_pair" + V"emptyline")^0, rawset),
+ kv_pair = Cg(V"key"
+ * V"separator"
+ * (V"value" * V"final"
+ + V"empty"))
+ * V"rest_of_line"^-1
+ ,
+ key = V"whitespace"^0 * C(V"key_char"^1),
+ key_char = (1 - V"whitespace" - V"eol" - V"equals")^1,
+ separator = V"whitespace"^0 * V"equals" * V"whitespace"^0,
+ empty = V"whitespace"^0 * V"comma" * V"rest_of_line"^-1
+ * Cc(false)
+ ,
+ value = C((V"balanced" + (1 - V"final"))^1),
+ final = V"whitespace"^0 * V"comma" + V"rest_of_string",
+ rest_of_string = V"whitespace"^0
+ * V"eol_comment"^-1
+ * V"eol"^0
+ * V"eof"
+ ,
+ rest_of_line = V"whitespace"^0 * V"eol_comment"^-1 * V"eol",
+ eol_comment = V"comment_string" * (1 - (V"eol" + V"eof"))^0,
+ comment_string = V"lua_comment" + V"TeX_comment",
+ TeX_comment = V"percent",
+ lua_comment = V"double_dash",
+ emptyline = V"rest_of_line",
+
+ balanced = V"balanced_brk" + V"balanced_brc",
+ balanced_brk = V"lbrk"
+ * (V"balanced" + (1 - V"rbrk"))^0
+ * V"rbrk"
+ ,
+ balanced_brc = V"lbrc"
+ * (V"balanced" + (1 - V"rbrc"))^0
+ * V"rbrc"
+ ,
+ -- Terminals
+ eol = P"\n\r" + P"\r\n" + P"\n" + P"\r",
+ eof = -P(1),
+ whitespace = S" \t\v",
+ equals = P"=",
+ dot = P".",
+ comma = P",",
+ dash = P"-", double_dash = V"dash" * V"dash",
+ percent = P"%",
+ lbrk = P"[", rbrk = P"]",
+ lbrc = P"{", rbrc = P"}",
+ }
+
+
+--[[ichd--
+\startparagraph
+In the next step we process the arguments, check the input for sanity
+etc. The function \luafunction{parse_args} will test whether a value
+has a sanitizer routine and, if so, apply it to its value.
+\stopparagraph
+--ichd]]--
+
+ local boolean_synonyms = {
+ ["1"] = true,
+ doit = true,
+ indeed = true,
+ ok = true,
+ ["⊤"] = true,
+ ["true"] = true,
+ yes = true,
+ }
+ local toboolean
+ = function (value) return boolean_synonyms[value] or false end
+ local alpha = R("az", "AZ")
+ local digit = R"09"
+ local space = S" \t\v"
+ local ans = alpha + digit + space
+ local p_ans = Cs((ans + (1 - ans / ""))^1)
+ local alphanum_or_space = function (str)
+ if type(str) ~= "string" then return nil end
+ return lpegmatch(p_ans, str)
+ end
+ local ensure_int = function (n)
+ n = tonumber(n)
+ if not n then return 0 end
+ return mathfloor(n + 0.5)
+ end
+ p_alpha = Cs((alpha + (1 - alpha / ""))^1)
+ local ensure_alpha = function (s)
+ s = tostring(s)
+ return lpegmatch(p_alpha, s)
+ end
+
+ local sanitizers = {
+ other_chars = toboolean, -- true = keep, false = drop
+ spacing = toboolean,
+ day_key = alphanum_or_space,
+ rotor_setting = ensure_alpha,
+ verbose = ensure_int,
+ }
+ enigma.parse_args = function (raw)
+ local args = lpegmatch(p_args, raw)
+ for k, v in next, args do
+ local f = sanitizers[k]
+ if f then
+ args[k] = f(v)
+ else
+ -- OPTIONAL be fascist and permit only predefined args
+ args[k] = v
+ end
+ end
+ return args
+ end
+--[[ichd--
+\startparagraph
+If the machine setting lacks key settings then we’ll go ahead and ask
+\reference[listing:ask_for_day_key]{}%
+the user directly, hence the function \luafunction{ask_for_day_key}.
+We abort after three misses lest we annoy the user \dots
+\stopparagraph
+--ichd]]--
+ local max_tries = 3
+ ask_for_day_key = function (name, old, try)
+ if try == max_tries then
+ iowrite[[
+Aborting. Entered invalid key three times.
+]]
+ os.exit()
+ end
+ if old then
+ emit(0, key_invalid)
+ end
+ emit(0, polite_key_request, name)
+ local result = ioread()
+ iowrite("\n")
+ return alphanum_or_space(result) or
+ ask_for_day_key(name, (try and try + 1 or 1))
+ end
+end
+
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+--[[ichd--
+\startdocsection[title=Callback]
+\startparagraph
+This is the interface to \TEX. We generate a new callback handler for
+each defined Enigma machine. \CONTEXT\ delivers the head as third
+argument of a callback only (...‽), so we’ll have to do some variable
+shuffling on the function side.
+\stopparagraph
+
+\startparagraph
+When grouping output into the traditional blocks of five letters we
+insert space nodes. As their properties depend on the font we need to
+recreate the space item for every paragraph. Also, as \CONTEXT\ does
+not preload a font we lack access to font metrics before
+\type{\starttext}. Thus creating the space earlier will result in an
+error.
+The function \luafunction{generate_space} will be called inside the
+callback in order to get an appropriate space glue.
+\stopparagraph
+--ichd]]--
+
+local generate_space = function ( )
+ local current_fontparms = font.getfont(font.current()).parameters
+ local space_node = nodenew(GLUE_NODE)
+ space_node.spec = nodenew(GLUE_SPEC_NODE)
+ space_node.spec.width = current_fontparms.space
+ space_node.spec.shrink = current_fontparms.space_shrink
+ space_node.spec.stretch = current_fontparms.space_stretch
+ return space_node
+end
+
+--[[ichd--
+\startparagraph
+\useURL[khaled_hosny_texsx] [http://tex.stackexchange.com/a/11970]
+ [] [tex.sx]
+Registering a callback (“node attribute”?, “node task”?, “task
+action”?) in \CONTEXT\ is not straightforward, let alone documented.
+The trick is to create, install and register a handler first in order
+to use it later on \dots\ many thanks to Khaled Hosny, who posted an
+answer to \from[khaled_hosny_texsx].
+\stopparagraph
+--ichd]]--
+
+local new_callback = function (machine, name)
+ enigma.machines [name] = machine
+ local format_is_context = format_is_context
+ local current_space_node
+ local mod_5 = 0
+
+ --- First we need to choose an insertion method. If autospacing is
+ --- requested, a space will have to be inserted every five
+ --- characters. The rationale behind using differend functions to
+ --- implement each method is that it should be faster than branching
+ --- for each character.
+ local insert_encoded
+
+ if machine.spacing then -- auto-group output
+ insert_encoded = function (head, n, replacement)
+ local insert_glyph = nodecopy(n)
+ if replacement then -- inefficient but bulletproof
+ insert_glyph.char = utf8byte(replacement)
+ --print(utf8char(n.char), "=>", utf8char(insertion.char))
+ end
+ --- if we insert a space we need to return the
+ --- glyph node in order to track positions when
+ --- replacing multiple nodes at once (e.g. ligatures)
+ local insertion = insert_glyph
+ mod_5 = mod_5 + 1
+ if mod_5 > 5 then
+ mod_5 = 1
+ insertion = nodecopy(current_space_node)
+ insertion.next, insert_glyph.prev = insert_glyph, insertion
+ end
+ if head == n then --> replace head
+ local succ = head.next
+ if succ then
+ insert_glyph.next, succ.prev = succ, insert_glyph
+ end
+ head = insertion
+ else --> replace n
+ local pred, succ = n.prev, n.next
+ pred.next, insertion.prev = insertion, pred
+ if succ then
+ insert_glyph.next, succ.prev = succ, insert_glyph
+ end
+ end
+
+ --- insertion becomes the new head
+ return head, insert_glyph -- so we know where to insert
+ end
+ else
+
+ insert_encoded = function (head, n, replacement)
+ local insertion = nodecopy(n)
+ if replacement then
+ insertion.char = utf8byte(replacement)
+ end
+ if head == n then
+ local succ = head.next
+ if succ then
+ insertion.next, succ.prev = succ, insertion
+ end
+ head = insertion
+ else
+ nodeinsert_before(head, n, insertion)
+ noderemove(head, n)
+ end
+ return head, insertion
+ end
+ end
+
+ --- The callback proper starts here.
+ local aux aux = function (head, recurse)
+ if recurse == nil then recurse = 0 end
+ for n in nodetraverse(head) do
+ local nid = n.id
+ --print(utf8char(n.char), n)
+ if nid == GLYPH_NODE then
+ local chr = utf8char(n.char)
+ --print(chr, n)
+ local replacement = machine:encode(chr)
+ --print(chr, replacement, n)
+ local treplacement = replacement and type(replacement)
+ --if replacement == false then
+ if not replacement then
+ noderemove(head, n)
+ elseif treplacement == "string" then
+ --print(head, n, replacement)
+ head, _ = insert_encoded(head, n, replacement)
+ elseif treplacement == "table" then
+ local current = n
+ for i=1, #replacement do
+ head, current = insert_encoded(head, current, replacement[i])
+ end
+ end
+ elseif nid == GLUE_NODE then
+ if n.subtype ~= 15 then -- keeping the parfillskip
+ noderemove(head, n)
+ end
+ elseif IGNORE_NODES[nid] then
+ -- drop spaces and kerns
+ noderemove(head, n)
+ elseif nid == DISC_NODE then
+ --- ligatures need to be resolved if they are characters
+ local npre, npost = n.pre, n.post
+ if nodeid(npre) == GLYPH_NODE and
+ nodeid(npost) == GLYPH_NODE then
+ if npre.char and npost.char then -- ligature between glyphs
+ local replacement_pre = machine:encode(utf8char(npre.char))
+ local replacement_post = machine:encode(utf8char(npost.char))
+ insert_encoded(head, npre, replacement_pre)
+ insert_encoded(head, npost, replacement_post)
+ else -- hlists or whatever
+ -- pass
+ --noderemove(head, npre)
+ --noderemove(head, npost)
+ end
+ end
+ noderemove(head, n)
+ elseif nid == HLIST_NODE or nid == VLIST_NODE then
+ if nodelength(n.list) > 0 then
+ n.list = aux(n.list, recurse + 1)
+ end
+-- else
+-- -- TODO other node types
+-- print(n)
+ end
+ end
+ nodeslide(head)
+ return head
+ end -- callback auxiliary
+
+ --- Context requires
+ --- × argument shuffling; a properly registered “action” gets the
+ --- head passed as its third argument
+ --- × hacking our way around the coupling of pre_linebreak_filter
+ --- and hpack_filter; background:
+ --- http://www.ntg.nl/pipermail/ntg-context/2012/067779.html
+ local cbk = function (a, _, c)
+ local head
+ current_space_node = generate_space ()
+ mod_5 = 0
+ if format_is_context == true then
+ head = c
+ local cbk_env = get_debug_info(4) -- no getenv in lua 5.2
+ --inspect(cbk_env)
+ if cbk_env.func == nodes.processors.pre_linebreak_filter then
+ -- how weird is that?
+ return aux(head)
+ end
+ return head
+ end
+ head = a
+ return aux(head)
+ end
+
+ if format_is_context then
+ local cbk_id = "enigma_" .. name
+ enigma.callbacks[name] = nodesinstallattributehandler{
+ name = cbk_id,
+ namespace = thirddata.enigma,
+ processor = cbk,
+ }
+ local cbk_location = "thirddata.enigma.callbacks." .. name
+ nodestasksappendaction("processors",
+ --"characters",
+ --"finalizers",
+ --- this one is tagged “for users”
+ --- (cf. node-tsk.lua)
+ "before",
+ cbk_location)
+ nodestasksdisableaction("processors", cbk_location)
+ else
+ enigma.callbacks[name] = cbk
+ end
+end
+
+--[[ichd--
+\startparagraph
+Enigma\reference[listing:retrieve]{} machines can be copied and derived
+from one another at will, cf. the \texmacro{defineenigma} on
+\at{page}[listing:define]. Two helper functions residing inside the
+\identifier{thirddata.enigma} namespace take care of these actions:
+\luafunction{save_raw_args} and \luafunction{retrieve_raw_args}. As
+soon as a machine is defined, we store its parsed options inside the
+table \identifier{configurations} for later reference. For further
+details on the machine derivation mechanism see
+\at{page}[listing:inherit].
+\stopparagraph
+--ichd]]--
+local configurations = { }
+
+local save_raw_args = function (conf, name)
+ local current = configurations[name] or { }
+ for k, v in next, conf do
+ current[k] = v
+ end
+ configurations[name] = current
+end
+
+local retrieve_raw_args = function (name)
+ local cn = configurations[name]
+ return cn and tablecopy(cn) or { }
+end
+
+enigma.save_raw_args = save_raw_args
+enigma.retrieve_raw_args = retrieve_raw_args
+
+
+--[[ichd--
+\startparagraph
+The function \luafunction{new_machine} instantiates a table containing
+the complete specification of a workable \emph{Enigma} machine and
+other metadata. The result is intended to be handed over to the
+callback creation mechanism (\luafunction{new_callback}). However, the
+arguments table is usally stored away in the
+\identifier{thirddata.enigma} namespace anyway
+(\luafunction{save_raw_args}), so that the specification of any machine
+can be inherited by some new setup later on.
+\stopparagraph
+--ichd]]--
+local new_machine = function (name)
+ local args = configurations[name]
+ --table.print(configurations)
+ verbose_level = args and args.verbose or verbose_level
+ local machine = new(name, args)
+ return machine
+end
+
+enigma.new_machine = new_machine
+enigma.new_callback = new_callback
+
+--[[ichd--
+\stopdocsection
+--ichd]]--
+
+-- vim:ft=lua:sw=2:ts=2:tw=71:expandtab
diff --git a/macros/context/contrib/context-enigma/tex/latex/enigma/enigma.sty b/macros/context/contrib/context-enigma/tex/latex/enigma/enigma.sty
new file mode 100644
index 0000000000..07bb8e78c9
--- /dev/null
+++ b/macros/context/contrib/context-enigma/tex/latex/enigma/enigma.sty
@@ -0,0 +1,7 @@
+\ProvidesPackage
+ {enigma}
+ [2013/03/28 Enigma Document Encryption]
+\RequirePackage{luatexbase}
+\input{enigma}
+\endinput
+% vim:ft=tex:sw=2:ts=2:expandtab:tw=71
diff --git a/macros/context/contrib/context-enigma/tex/plain/enigma/enigma.tex b/macros/context/contrib/context-enigma/tex/plain/enigma/enigma.tex
new file mode 100644
index 0000000000..d18b72ffa1
--- /dev/null
+++ b/macros/context/contrib/context-enigma/tex/plain/enigma/enigma.tex
@@ -0,0 +1,130 @@
+\newif\ifenigmaisrunningplain
+\ifcsname ver@enigma.sty\endcsname\else
+ \enigmaisrunningplaintrue
+ \input{luatexbase.sty}
+ \catcode`\@=11
+% \else latex
+\fi
+\catcode`\_=11 % There’s no reason why this shouldn’t be the case.
+\catcode`\!=11
+%D Nice tool from luat-ini.mkiv. This really helps with those annoying
+%D string separators of Lua’s that clutter the source.
+% this permits \typefile{self} otherwise nested b/e sep problems
+\def\luastringsep{===}
+\edef\!!bs{[\luastringsep[}
+\edef\!!es{]\luastringsep]}
+%D \startdocsection[title=Prerequisites]
+%D \startparagraph
+%D Package loading and the namespacing issue are commented on in
+%D \identifier{enigma.lua}.
+%D \stopparagraph
+\directlua{
+ packagedata = packagedata or { }
+ dofile(kpse.find_file\!!bs enigma.lua\!!es)
+}
+
+%D \startparagraph
+%D First, create somthing like \CONTEXT’s asciimode. We found
+%D \texmacro{newluatexcatcodetable} in \identifier{luacode.sty} and it
+%D seems to get the job done.
+%D \stopparagraph
+\newluatexcatcodetable \enigmasetupcatcodes
+\bgroup
+ \def\escapecatcode {0}
+ \def\begingroupcatcode {1}
+ \def\endgroupcatcode {2}
+ \def\spacecatcode {10}
+ \def\lettercatcode {11}
+ \setluatexcatcodetable\enigmasetupcatcodes {
+ \catcode`\^^I = \spacecatcode % tab
+ \catcode`\ = \spacecatcode
+ \catcode`\{ = \begingroupcatcode
+ \catcode`\} = \endgroupcatcode
+ \catcode`\^^L = \lettercatcode % form feed
+ \catcode`\^^M = \lettercatcode % eol
+ }
+\egroup
+%D \stopdocsection
+
+%D \startdocsection[title=Setups]
+%D \startparagraph
+%D Once the proper catcodes are in place, the setup macro
+%D \texmacro{do_setup_enigma} doesn’t to anything besides passing stuff
+%D through to Lua.
+%D \stopparagraph
+\def\do_setup_enigma#1{%
+ \directlua{
+ local enigma = packagedata.enigma
+ local current_args = enigma.parse_args(\!!bs\detokenize{#1}\!!es)
+ enigma.save_raw_args(current_args, \!!bs\current_enigma_id\!!es)
+ enigma.new_callback(
+ enigma.new_machine(\!!bs\current_enigma_id\!!es),
+ \!!bs\current_enigma_id\!!es)
+ }%
+ \egroup%
+}
+
+%D The module setup \texmacro{setupenigma} expects key=value, notation.
+%D All the logic is at the Lua end, not much to see here …
+\def\setupenigma#1{%
+ \bgroup
+ \edef\current_enigma_id{#1}
+ \luatexcatcodetable \enigmasetupcatcodes
+ \do_setup_enigma%
+}
+%D \stopdocsection
+
+%D \startdocsection[title=Encoding Macros]
+%D \startparagraph
+%D The environment of \texmacro{begin<enigmaid>} and
+%D \texmacro{end<enigmaid>} toggles Enigma encoding.
+%D (Regarding environment delimiters we adhere to Knuth’s
+%D practice of prefixing with \type{begin}/\type{end}.)
+%D \stopparagraph
+
+\def\e!start{begin} %{start}
+\def \e!stop{end} %{stop}
+\edef\c!pre_linebreak_filter{pre_linebreak_filter}
+\def\do_define_enigma#1{%
+ \@EA\gdef\csname \e!start\current_enigma_id\endcsname{%
+ \endgraf
+ \bgroup%
+ \directlua{%
+ if packagedata.enigma and
+ packagedata.enigma.machines[ \!!bs#1\!!es] then
+ luatexbase.add_to_callback(
+ \!!bs\c!pre_linebreak_filter\!!es,
+ packagedata.enigma.callbacks[ \!!bs#1\!!es],
+ \!!bs#1\!!es)
+ else
+ print\!!bs ENIGMA: No machine of that name: #1!\!!es
+ os.exit()
+ end
+ }%
+ }%
+ \@EA\gdef\csname \e!stop\current_enigma_id\endcsname{%
+ \endgraf
+ \directlua{
+ luatexbase.remove_from_callback(
+ \!!bs\c!pre_linebreak_filter\!!es,
+ \!!bs#1\!!es)
+ packagedata.enigma.machines[ \!!bs#1\!!es]:processed_chars()
+ }%
+ \egroup%
+ }%
+}
+
+\def\defineenigma#1{%
+ \begingroup
+ \let\@EA\expandafter
+ \edef\current_enigma_id{#1}%
+ \@EA\do_define_enigma\@EA{\current_enigma_id}%
+ \endgroup%
+}
+
+%D \stopdocsection
+
+\catcode`\_=8 % \popcatcodes
+\catcode`\!=12 % reserved according to source2e
+\ifenigmaisrunningplain\catcode`\@=12\fi
+% vim:ft=plaintex:sw=2:ts=2:expandtab:tw=71
diff --git a/macros/context/contrib/context-fancybreak/VERSION b/macros/context/contrib/context-fancybreak/VERSION
deleted file mode 100644
index 4a2d0d3542..0000000000
--- a/macros/context/contrib/context-fancybreak/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2015.04.18
diff --git a/macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/README b/macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/README
deleted file mode 100644
index 7ae0aa76f5..0000000000
--- a/macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/README
+++ /dev/null
@@ -1,35 +0,0 @@
-Modulename : t-fancybreak
-Author : Wolfgang Schuster
-License : GNU General Public License
-
-Description
------------
-
-Fanycbreak is a module for ConTeXt to insert thought
-breaks in texts. With parameters one can adjust the
-spacing around the content and set a default symbol.
-
-Usage
------
-
-\usemodule[fancybreak]
-
-\starttext
-\input knuth\par
-\fancybreak{$* * *$}
-\input zapf\par
-\fancybreak{+++++++}
-\input ward\par
-\stoptext
-
-Options
--------
-
-- spacebefore
-- spaceafter
-- spaceinbetween
-- align
-- style
-- color
-- symbol
-- indentnext
diff --git a/macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/fancybreak-doc.pdf b/macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/fancybreak-doc.pdf
deleted file mode 100644
index 1bacc8eb6f..0000000000
--- a/macros/context/contrib/context-fancybreak/doc/context/third/fancybreak/fancybreak-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-fancybreak/tex/context/interface/third/t-fancybreak.xml b/macros/context/contrib/context-fancybreak/tex/context/interface/third/t-fancybreak.xml
deleted file mode 100644
index dfedff2b36..0000000000
--- a/macros/context/contrib/context-fancybreak/tex/context/interface/third/t-fancybreak.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2010.06.21">
-
-<cd:command name="fancybreak" generated="yes" file="t-fancybreak.tex">
- <cd:sequence>
- <cd:variable value="fancybreak"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes" optional="yes">
- <cd:inherit name="setupfancybreak"/>
- </cd:assignments>
- <cd:content n="2" optional="yes"/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="fancybreak" generated="yes" type="environment" file="t-fancybreak.tex">
- <cd:sequence>
- <cd:variable value="fancybreak"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes" optional="yes">
- <cd:inherit name="setupfancybreak"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setupfancybreak" file="t-fancybreak.tex">
- <cd:sequence>
- <cd:string value="setupfancybreak"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1" optional="yes">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="2" list="yes">
- <cd:parameter name="spacebefore">
- <cd:inherit name="blank" n="1"/>
- </cd:parameter>
- <cd:parameter name="spaceafter">
- <cd:inherit name="blank" n="1" default="nowhite"/>
- </cd:parameter>
- <cd:parameter name="spaceinbetween">
- <cd:inherit name="blank" n="1"/>
- </cd:parameter>
- <cd:parameter name="align">
- <cd:inherit name="setupalign" n="1" default="middle"/>
- </cd:parameter>
- <cd:parameter name="indentnext">
- <cd:constant type="yes" default="yes"/>
- <cd:constant type="no"/>
- <cd:constant type="auto"/>
- </cd:parameter>
- <cd:parameter name="symbol">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- <cd:parameter name="style">
- <cd:resolve name="style"/>
- </cd:parameter>
- <cd:parameter name="color">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="definefancybreak" file="t-fancybreak.tex">
- <cd:sequence>
- <cd:string value="definefancybreak"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="2" list="yes" optional="yes">
- <cd:inherit name="setupfanycbreak" n="2"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-</cd:interface> \ No newline at end of file
diff --git a/macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkii b/macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkii
deleted file mode 100644
index 66ea139e7a..0000000000
--- a/macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkii
+++ /dev/null
@@ -1,272 +0,0 @@
-%D \module
-%D [ file=t-fancybreak,
-%D version=2013.04.27,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Fancybreak,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2010 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-%M \usemodule[fancybreak]
-%M \loadsetups[t-fancybreak.xml]
-
-%D \subject{Examples}
-%D
-%D \subsubject{The \letterbackslash fancybreak command}
-%D
-%D \starttyping
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak{$* * *$}
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \input ward
-%D \fancybreak{$* * *$}
-%D \input ward
-%D
-%D \subsubject{The “spacebefore” and “spaceafter” keys}
-%D
-%D \starttyping
-%D \setupfancybreak[spacebefore=line,spaceafter=line]
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak{$* * *$}
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[spacebefore=line,spaceafter=line]
-%D
-%D \input ward
-%D \fancybreak{$* * *$}
-%D \input ward
-%D
-%D \stop
-%D
-%D \subsubject{The argumentless version of the \letterbackslash fancybreak command}
-%D
-%D \starttyping
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \input ward
-%D \fancybreak
-%D \input ward
-%D
-%D \subsubject{The “spaceinbetween” key}
-%D
-%D \starttyping
-%D \setupfancybreak[spaceinbetween=3*line]
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[spaceinbetween=3*line]
-%D
-%D \input ward
-%D \fancybreak
-%D \input ward
-%D
-%D \stop
-%D
-%D \subsubject{The “symbol” key}
-%D
-%D \starttyping
-%D \setupfancybreak[symbol=star]
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[symbol=star]
-%D
-%D \input ward
-%D \fancybreak
-%D \input ward
-%D
-%D \stop
-%D
-%D \subsubject{How to create new \letterbackslash fancybreak commands}
-%D
-%D \starttyping
-%D \definefancybreak[starbreak] [symbol=star]
-%D \definefancybreak[squarebreak][symbol=square]
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D \starbreak
-%D The Earth, as a habitat for animal life, is in old age …
-%D \squarebreak
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \start
-%D
-%D \definefancybreak[starbreak] [symbol=star]
-%D \definefancybreak[squarebreak][symbol=square]
-%D
-%D \input ward
-%D \starbreak
-%D \input ward
-%D \squarebreak
-%D \input ward
-%D
-%D \stop
-
-%D \subject{Implementation}
-
-\writestatus{loading}{ConTeXt User Module / Fancybreak}
-
-\unprotect
-
-\startinterface all
- \setinterfacevariable {fancybreak} {fancybreak}
-\stopinterface
-
-\def\????fancybreak{@@@@fancybreak}
-
-\def\fancybreakparameter#1{\csname\????fancybreak\currentfancybreak#1\endcsname}
-
-%D \macros
-%D {setupfancybreak}
-%D
-%D \subsubject{\letterbackslash setupfancybreak}
-%D
-%D With the command \type{\setupfancybreak} one can change the settings of
-%D a previous created command, the two argument version change only the values
-%D of a certain command while the one argument version change the values of
-%D all commands.
-%D
-%D \showsetup{setupfancybreak}
-
-\unexpanded\def\setupfancybreak
- {\dodoubleempty\dosetupfancybreak}
-
-\def\dosetupfancybreak[#1][#2]%
- {\ifsecondargument
- \dodoubleargumentwithset\dodosetupfancybreak[#1][#2]%
- \else
- \dodosetupfancybreak[][#1]%
- \fi}
-
-\def\dodosetupfancybreak[#1][#2]%
- {\getparameters[\????fancybreak#1][#2]}
-
-%D \macros
-%D {definefancybreak}
-%D
-%D \subsubject{\letterbackslash definefancybreak}
-%D
-%D The command \type{\fancybreak} is not hardcoded in the module but created with
-%D \type{\definefancybreak}. The command takes two arguments, the first is the name
-%D of the new command and the second parameter to change the style of the commands
-%D content and distances to the surrounding text.
-%D
-%D In \MKII\ users can only change the spacing before and after the content and
-%D the alignment of it while \MKIV\ user can also change the style and color of it.
-%D
-%D \showsetup{definefancybreak}
-
-\unexpanded\def\definefancybreak
- {\dodoubleempty\dodefinefancybreak}
-
-\def\dodefinefancybreak[#1][#2]%
- {\copyparameters
- [\????fancybreak#1][\????fancybreak]
- [\c!spacebefore,\c!spaceafter,\c!spaceinbetween,\c!align,\c!indentnext,\c!symbol]%
- \getparameters[\????fancybreak#1][#2]%
- \setvalue {#1}{\dodoubleempty\dofancybreak [#1]}%
- \setvalue{\e!start#1}{\dodoubleempty\dostartfancybreak[#1]}%
- \setvalue{\e!stop #1}{\dostopfancybreak }}
-
-%D \macros
-%D {fancybreak}
-%D
-%D \subsubject{\letterbackslash fancybreak}
-%D
-%D The main macro of the module is the \type{\fancybreak} command (or a user defined
-%D variant of it), it takes one argument which can be optional.
-%D
-%D \showsetup{fancybreak}
-%D \showsetup{startfancybreak}
-
-\def\dofancybreak[#1][#2]%
- {\par
- \begingroup
- \edef\currentfancybreak{#1}%
- \ifsecondargument
- \doifassignmentelse{#2}
- {\getparameters[\????fancybreak\currentfancybreak][#2]}
- {\setvalue{\????fancybreak\currentfancybreak\c!spaceinbetween}{#2}}%
- \fi
- \doifnextbgroupelse\dodofancybreak\nodofancybreak}
-
-\def\dodofancybreak
- {\forgetall % \forgetparindent
- \dowithnextboxcontent
- {\setupalign[\fancybreakparameter\c!align]}
- {\blank[\fancybreakparameter\c!spacebefore]%
- \flushnextbox
- \blank[\fancybreakparameter\c!spaceafter ]%
- \checknextindentation[\fancybreakparameter\c!indentnext]%
- \endgroup
- \dorechecknextindentation}
- \vbox}
-
-\def\nodofancybreak
- {\doifsymboldefinedelse{\fancybreakparameter\c!symbol}
- {\dodofancybreak{\symbol[\fancybreakparameter\c!symbol]}}
- {\blank[\fancybreakparameter\c!spaceinbetween]%
- \checknextindentation[\fancybreakparameter\c!indentnext]%
- \endgroup
- \dorechecknextindentation}}
-
-\def\dostartfancybreak[#1][#2]%
- {\par
- \begingroup
- \edef\currentfancybreak{#1}%
- \ifsecondargument
- \getparameters[\????fancybreak#1][#2]%
- \fi
- \dodofancybreak\bgroup}
-
-\def\dostopfancybreak
- {\egroup}
-
-\definefancybreak[\v!fancybreak]
-
-\setupfancybreak
- [ \c!spacebefore=,
- \c!spaceafter=\v!nowhite,
- \c!spaceinbetween=\v!line,
- \c!align=\v!middle,
- \c!indentnext=\v!yes,
- \c!symbol=]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkvi b/macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkvi
deleted file mode 100644
index 3e547186e8..0000000000
--- a/macros/context/contrib/context-fancybreak/tex/context/third/fancybreak/t-fancybreak.mkvi
+++ /dev/null
@@ -1,493 +0,0 @@
-%D \module
-%D [ file=t-fancybreak,
-%D version=2015.04.18,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Fancybreak,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2010 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-%M \usemodule[fancybreak]
-%M \loadsetups[t-fancybreak.xml]
-
-%D \subject{Examples}
-%D
-%D \macros
-%D {fancybreak}
-%D
-%D \subsubject{The \letterbackslash fancybreak command}
-%D
-%D \starttyping
-%D Making oil requires a specific series of geological accidents ...
-%D \fancybreak{$* * *$}
-%D Making oil requires a specific series of geological accidents ...
-%D \stoptyping
-%D
-%D results in
-%D
-%D \startexample
-%D \input montgomery
-%D \fancybreak{$* * *$}
-%D \input montgomery
-%D \stopexample
-%D
-%D \extras
-%D {spacebefore,spaceafter}
-%D
-%D \subsubject{The “spacebefore” and “spaceafter” keys}
-%D
-%D \starttyping
-%D \setupfancybreak[spacebefore=line,spaceafter=line]
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak{$* * *$}
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D results in
-%D
-%D \start
-%D
-%D \setupfancybreak[spacebefore=line,spaceafter=line]
-%D
-%D \startexample
-%D \input ward
-%D \fancybreak{$* * *$}
-%D \input ward
-%D \stopexample
-%D
-%D \stop
-%D
-%D \extras
-%D {style}
-%D
-%D \subsubject{The “style” key}
-%D
-%D \starttyping
-%D \setupfancybreak[style=bold]
-%D
-%D The warm water spills north and south through a series of ocean currents ...
-%D \fancybreak{* * *}
-%D The warm water spills north and south through a series of ocean currents ...
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[style=bold,spacebefore=medium]
-%D
-%D \input linden
-%D \fancybreak{* * *}
-%D \input linden
-%D
-%D \stop
-%D
-%D \extras
-%D {color}
-%D
-%D \subsubject{The “color” key}
-%D
-%D \starttyping
-%D \setupfancybreak[color=red]
-%D
-%D Had our solar system included two suns, the problem would ...
-%D \fancybreak{* * *}
-%D Had our solar system included two suns, the problem would ...
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[color=red,spacebefore=medium]
-%D
-%D \input thuan
-%D \fancybreak{* * *}
-%D \input thuan
-%D
-%D \stop
-%D
-%D \extras
-%D {indentnext}
-%D
-%D \subsubject{The “indentnext” key}
-%D
-%D \starttyping
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak{$* * *$}
-%D The Earth, as a habitat for animal life, is in old age …
-%D \fancybreak[indentnext=no]{$* * *$}
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupindenting[yes,medium]
-%D
-%D \input ward
-%D \fancybreak{$* * *$}
-%D \input ward
-%D \fancybreak[indentnext=no]{$* * *$}
-%D \input ward
-%D
-%D \stop
-%D
-%D \macros
-%D {fancybreak}
-%D
-%D \subsubject{The argumentless version of the \letterbackslash fancybreak command}
-%D
-%D \starttyping
-%D Imagine trying to live in a world dominated by dihydrogen oxide ...
-%D \fancybreak
-%D Imagine trying to live in a world dominated by dihydrogen oxide ...
-%D \stoptyping
-%D
-%D \input bryson
-%D \fancybreak
-%D \input bryson
-%D
-%D \extras
-%D {spaceinbetween}
-%D
-%D \subsubject{The “spaceinbetween” key}
-%D
-%D \starttyping
-%D \setupfancybreak[spaceinbetween=3*line]
-%D
-%D If [in 2600] you stacked all the new books being published ...
-%D \fancybreak
-%D If [in 2600] you stacked all the new books being published ...
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[spaceinbetween=3*line]
-%D
-%D \input hawking
-%D \fancybreak
-%D \input hawking
-%D
-%D \stop
-%D
-%D \extras
-%D {symbol}
-%D
-%D \subsubject{The “symbol” key}
-%D
-%D \starttyping
-%D \setupfancybreak[symbol=star]
-%D
-%D This nation, turning 100 years old, had no {\em Odyssey}, ...
-%D \fancybreak
-%D This nation, turning 100 years old, had no {\em Odyssey}, ...
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[symbol=star]
-%D
-%D \input davis
-%D \fancybreak
-%D \input davis
-%D
-%D \stop
-%D
-%D \macros
-%D {startfancybreak}
-%D
-%D \subsubject{The fancybreak environment}
-%D
-%D \starttyping
-%D \useMPlibrary[txt]
-%D
-%D \setupMPvariables[EnglishRule][width=.6\hsize]
-%D
-%D \setupfancybreak[spacebefore=line,spaceafter=line]
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D
-%D \startfancybreak
-%D \dontleavehmode\useMPgraphic{EnglishRule}
-%D \stopfancybreak
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \start
-%D
-%D \setupfancybreak[spacebefore=line,spaceafter=line]
-%D
-%D \useMPlibrary[txt]
-%D
-%D \setupMPvariables[EnglishRule][width=.6\hsize]
-%D
-%D \input ward
-%D
-%D \startfancybreak
-%D \dontleavehmode\useMPgraphic{EnglishRule}
-%D \stopfancybreak
-%D
-%D \input ward
-%D
-%D \stop
-%D
-%D \macros
-%D {definefancybreak}
-%D
-%D \subsubject{How to create new \letterbackslash fancybreak commands}
-%D
-%D \starttyping
-%D \definefancybreak[starbreak] [symbol=star]
-%D \definefancybreak[squarebreak][symbol=square]
-%D
-%D The Earth, as a habitat for animal life, is in old age …
-%D \starbreak
-%D The Earth, as a habitat for animal life, is in old age …
-%D \squarebreak
-%D The Earth, as a habitat for animal life, is in old age …
-%D \stoptyping
-%D
-%D \start
-%D
-%D \definefancybreak[starbreak] [symbol=star]
-%D \definefancybreak[squarebreak][symbol=square]
-%D
-%D \input ward
-%D \starbreak
-%D \input bryson
-%D \squarebreak
-%D \input zapf
-%D
-%D \stop
-%D
-%D \subject{Implementation}
-
-\writestatus{loading}{ConTeXt User Module / Fancybreak}
-
-\unprotect
-
-\startinterface all
- \setinterfacevariable {fancybreak} {fancybreak}
-\stopinterface
-
-\installnamespace {fancybreak}
-\installnamespace {fancybreakalternative}
-\installnamespace {fancybreakrenderings}
-
-\installcommandhandler \????fancybreak {fancybreak} \????fancybreak
-\installcommandhandler \????fancybreakalternative {fancybreakalternative} \????fancybreakalternative
-
-%D \macros
-%D {setupfancybreak}
-%D
-%D \subsubject{\letterbackslash setupfancybreak}
-%D
-%D With the command \type{\setupfancybreak} one can change the settings of
-%D a previous created command, the two argument version change only the values
-%D of a certain command while the one argument version change the values of
-%D all commands.
-%D
-%D \showsetup{setupfancybreak}
-%D
-%D \macros
-%D {definefancybreak}
-%D
-%D \subsubject{\letterbackslash definefancybreak}
-%D
-%D The command \type{\fancybreak} is not hardcoded in the module but created with
-%D \type{\definefancybreak}. The command takes two arguments, the first is the name
-%D of the new command and the second parameter to change the style of the commands
-%D content and distances to the surrounding text.
-%D
-%D In \MKII\ users can only change the spacing before and after the content and
-%D the alignment of it while \MKIV\ user can also change the style and color of it.
-%D
-%D \showsetup{definefancybreak}
-
-\appendtoks
- \setuevalue {\currentfancybreak}{\fancybreak [\currentfancybreak]}%
- \setuevalue{\e!start\currentfancybreak}{\startfancybreak[\currentfancybreak]}%
- \setuevalue{\e!stop \currentfancybreak}{\stopfancybreak }%
-\to \everydefinefancybreak
-
-%D \macros
-%D {fancybreak}
-%D
-%D \subsubject{\letterbackslash fancybreak}
-%D
-%D The main macro of the module is the \type{\fancybreak} command (or a user defined
-%D variant of it), it takes one argument which can be optional.
-%D
-%D \showsetup{fancybreak}
-%D \showsetup{startfancybreak}
-
-\definefancybreakalternative [\s!default] [\c!renderingsetup=\????fancybreakrenderings:\s!default]
-
-\startsetups[\????fancybreakrenderings:\s!default]
- \blank[\fancybreakparameter\c!spacebefore]
- \flushnextbox
- \blank[\fancybreakparameter\c!spaceafter ]
-\stopsetups
-
-\definefancybreakalternative [\v!test] [\c!renderingsetup=\????fancybreakrenderings:\v!test]
-
-\startsetups[\????fancybreakrenderings:\v!test]
- \setbox\scratchboxone\vbox{\blank[\fancybreakparameter\c!spacebefore]}
- \setbox\scratchboxtwo\vbox{\blank[\fancybreakparameter\c!spaceafter ]}
- \ifzeropt\pagetotal
- % begin of new page
- \else
- \ifdim\dimexpr\pagegoal-\pagetotal\relax<\dimexpr\nextboxhtdp+\ht\scratchboxone+\ht\scratchboxtwo\relax
- \page % not enough space for the content
- \else
- \texsetup{\????fancybreakrenderings:\s!default}
- \fi
- \fi
-\stopsetups
-
-\definefancybreakalternative [\v!auto] [\c!renderingsetup=\????fancybreakrenderings:\v!auto]
-
-\startsetups[\????fancybreakrenderings:\v!auto]
- \setexpandedfancybreakparameter\c!spacebefore{\the\dimexpr\nextboxhtdp/2\relax}
- \setexpandedfancybreakparameter\c!spaceafter {\the\dimexpr\nextboxhtdp \relax}
- \texsetup{\????fancybreakrenderings:\v!test}
-\stopsetups
-
-\unexpanded\def\fancybreak
- {\par
- \begingroup
- \dodoubleempty\fancybreak_direct}
-
-\def\fancybreak_direct
- {\ifsecondargument
- \expandafter\fancybreak_direct_double
- \else\iffirstargument
- \doubleexpandafter\fancybreak_direct_single
- \else
- \doubleexpandafter\fancybreak_direct_zero
- \fi\fi}
-
-\def\fancybreak_direct_double[#environment][#parameters]%
- {\edef\currentfancybreak{#environment}%
- \ifcsname\currentfancybreakhash\s!parent\endcsname
- % the current environment does exist
- \else
- \let\currentfancybreak\empty
- \fi
- \doifassignmentelse{#parameters}
- {\setupcurrentfancybreak[#parameters]}
- {\setfancybreakparameter\c!spaceinbetween{#parameters}}%
- \doifnextbgroupelse\fancybreak_direct_yes\fancybreak_direct_nop}
-
-\def\fancybreak_direct_single[#environment][#parameters]%
- {\doifassignmentelse{#environment}
- {\let\currentfancybreak\empty
- \setupcurrentfancybreak[#environment]}
- {\edef\currentfancybreak{#environment}%
- \ifcsname\currentfancybreakhash\s!parent\endcsname
- % the argument is the name of a environment
- \else
- \let\currentfancybreak\empty
- \setfancybreakparameter\c!spaceinbetween{#parameters}
- \fi}%
- \doifnextbgroupelse\fancybreak_direct_yes\fancybreak_direct_nop}
-
-\def\fancybreak_direct_zero[#environment][#parameters]%
- {\let\currentfancybreak\empty
- \doifnextbgroupelse\fancybreak_direct_yes\fancybreak_direct_nop}
-
-\def\fancybreak_direct_yes
- {\forgetparindent
- \dowithnextboxcontent
- {\dostarttagged\t!division\currentfancybreak
- \usealignparameter\fancybreakparameter
- \usefancybreakstyleandcolor\c!style\c!color}
- {\edef\currentfancybreakalternative{\fancybreakparameter\c!alternative}%
- \ifcsname\currentfancybreakalternativehash\s!parent\endcsname
- % valid argument for the alternative key
- \else
- \let\currentfancybreakalternative\s!default
- \fi
- \edef\p_fancybreak_renderingsetup{\fancybreakalternativeparameter\c!renderingsetup}%
- \texsetup\p_fancybreak_renderingsetup
- \dostoptagged
- \checknextindentation[\fancybreakparameter\c!indentnext]%
- \endgroup
- \dorechecknextindentation}
- \vbox}
-
-\def\fancybreak_direct_nop
- {\doifsymboldefinedelse{\fancybreakparameter\c!symbol}
- {\fancybreak_direct_yes{\symbol[\fancybreakparameter\c!symbol]}}
- {\blank[\fancybreakparameter\c!spaceinbetween]%
- \checknextindentation[\fancybreakparameter\c!indentnext]%
- \endgroup
- \dorechecknextindentation}}
-
-\unexpanded\def\startfancybreak
- {\par
- \begingroup
- \dodoubleempty\fancybreak_start}
-
-\def\fancybreak_start
- {\ifsecondargument
- \expandafter\fancybreak_start_double
- \else\iffirstargument
- \doubleexpandafter\fancybreak_start_single
- \else
- \doubleexpandafter\fancybreak_start_zero
- \fi\fi}
-
-\def\fancybreak_start_double[#environment][#parameters]%
- {\edef\currentfancybreak{#environment}%
- \ifcsname\currentfancybreakhash\s!parent\endcsname
- % the current environment does exist
- \else
- \let\currentfancybreak\empty
- \fi
- \setupcurrentfancybreak[#parameters]%
- \fancybreak_direct_yes\bgroup}
-
-\def\fancybreak_start_single[#environment][#parameters]%
- {\doifassignmentelse{#environment}
- {\let\currentfancybreak\empty
- \setupcurrentfancybreak[#parameters]}
- {\edef\currentfancybreak{#environment}%
- \ifcsname\currentfancybreakhash\s!parent\endcsname
- % the current environment does exist
- \else
- \let\currentfancybreak\empty
- \fi}%
- \fancybreak_direct_yes\bgroup}
-
-\def\fancybreak_start_zero[#environment][#parameters]%
- {\let\currentfancybreak\empty
- \fancybreak_direct_yes\bgroup}
-
-\unexpanded\def\stopfancybreak
- {\egroup}
-
-\setupfancybreak
- [ \c!spacebefore=,
- \c!spaceafter=\v!nowhite,
- \c!spaceinbetween=\v!line,
- \c!align=\v!middle,
- \c!indentnext=\v!yes,
- \c!symbol=]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-french/VERSION b/macros/context/contrib/context-french/VERSION
deleted file mode 100644
index 743a197eb2..0000000000
--- a/macros/context/contrib/context-french/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2011.11.09
diff --git a/macros/context/contrib/context-french/doc/context/third/french/french-demo.pdf b/macros/context/contrib/context-french/doc/context/third/french/french-demo.pdf
deleted file mode 100644
index bd5663436d..0000000000
--- a/macros/context/contrib/context-french/doc/context/third/french/french-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-french/doc/context/third/french/french-doc.pdf b/macros/context/contrib/context-french/doc/context/third/french/french-doc.pdf
deleted file mode 100644
index f88e63c177..0000000000
--- a/macros/context/contrib/context-french/doc/context/third/french/french-doc.pdf
+++ /dev/null
@@ -1,15251 +0,0 @@
-%PDF-1.6
-%
-17 0 obj
-<<
-/Length 285298
->>
-stream
-0 g 0 G
-0 g 0 G
-% mps graphic 1: begin
-q
-0 g 0 G
-0.800 g 0.800 G
-10.000000 M
-1 j
-146.021545 531.747223 m
-259.123962 531.747223 l
-259.123962 642.893082 l
-146.021545 642.893082 l
-146.021545 531.747223 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-151.974304 537.699982 m
-253.171204 537.699982 l
-253.171204 636.940323 l
-151.974304 636.940323 l
-151.974304 537.699982 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.927063 543.652740 m
-247.218445 543.652740 l
-247.218445 558.530548 l
-157.927063 558.530548 l
-157.927063 543.652740 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.927063 564.483307 m
-247.218445 564.483307 l
-247.218445 575.250946 l
-157.927063 575.250946 l
-157.927063 564.483307 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.927063 581.203705 m
-247.218445 581.203705 l
-247.218445 595.876572 l
-157.927063 595.876572 l
-157.927063 581.203705 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.927063 601.829330 m
-247.218445 601.829330 l
-247.218445 614.230484 l
-157.927063 614.230484 l
-157.927063 601.829330 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.927063 620.183243 m
-247.218445 620.183243 l
-247.218445 630.987564 l
-157.927063 630.987564 l
-157.927063 620.183243 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-366.952194 280.025528 m
-480.054611 280.025528 l
-480.054611 390.096481 l
-366.952194 390.096481 l
-366.952194 280.025528 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-372.904953 285.978287 m
-474.101852 285.978287 l
-474.101852 384.143723 l
-372.904953 384.143723 l
-372.904953 285.978287 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-378.857712 291.931046 m
-468.149094 291.931046 l
-468.149094 303.264725 l
-378.857712 303.264725 l
-378.857712 291.931046 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-378.857712 309.217484 m
-468.149094 309.217484 l
-468.149094 321.949249 l
-378.857712 321.949249 l
-378.857712 309.217484 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-378.857712 327.902008 m
-468.149094 327.902008 l
-468.149094 339.859528 l
-378.857712 339.859528 l
-378.857712 327.902008 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-378.857712 345.812286 m
-468.149094 345.812286 l
-468.149094 360.223419 l
-378.857712 360.223419 l
-378.857712 345.812286 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-378.857712 366.176178 m
-468.149094 366.176178 l
-468.149094 378.190964 l
-378.857712 378.190964 l
-378.857712 366.176178 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-163.936356 539.398102 m
-277.038773 539.398102 l
-277.038773 632.868515 l
-163.936356 632.868515 l
-163.936356 539.398102 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-169.889114 545.350861 m
-271.086014 545.350861 l
-271.086014 626.915756 l
-169.889114 626.915756 l
-169.889114 545.350861 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.841873 551.303619 m
-265.133255 551.303619 l
-265.133255 564.588486 l
-175.841873 564.588486 l
-175.841873 551.303619 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.841873 570.541245 m
-265.133255 570.541245 l
-265.133255 581.826111 l
-175.841873 581.826111 l
-175.841873 570.541245 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.841873 587.778870 m
-265.133255 587.778870 l
-265.133255 602.583176 l
-175.841873 602.583176 l
-175.841873 587.778870 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.841873 608.535934 m
-265.133255 608.535934 l
-265.133255 620.962997 l
-175.841873 620.962997 l
-175.841873 608.535934 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-284.318329 157.928925 m
-397.420746 157.928925 l
-397.420746 250.613861 l
-284.318329 250.613861 l
-284.318329 157.928925 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-290.271088 163.881683 m
-391.467987 163.881683 l
-391.467987 244.661102 l
-290.271088 244.661102 l
-290.271088 163.881683 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-296.223846 169.834442 m
-385.515228 169.834442 l
-385.515228 182.133591 l
-296.223846 182.133591 l
-296.223846 169.834442 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-296.223846 188.086349 m
-385.515228 188.086349 l
-385.515228 202.051514 l
-296.223846 202.051514 l
-296.223846 188.086349 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-296.223846 208.004272 m
-385.515228 208.004272 l
-385.515228 220.694458 l
-296.223846 220.694458 l
-296.223846 208.004272 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-296.223846 226.647217 m
-385.515228 226.647217 l
-385.515228 238.708344 l
-296.223846 238.708344 l
-296.223846 226.647217 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-58.247269 261.048172 m
-171.349686 261.048172 l
-171.349686 346.587616 l
-58.247269 346.587616 l
-58.247269 261.048172 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-64.200027 267.000931 m
-165.396927 267.000931 l
-165.396927 340.634857 l
-64.200027 340.634857 l
-64.200027 267.000931 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.152786 272.953690 m
-159.444168 272.953690 l
-159.444168 284.545120 l
-70.152786 284.545120 l
-70.152786 272.953690 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.152786 290.497879 m
-159.444168 290.497879 l
-159.444168 301.346802 l
-70.152786 301.346802 l
-70.152786 290.497879 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.152786 307.299561 m
-159.444168 307.299561 l
-159.444168 317.969604 l
-70.152786 317.969604 l
-70.152786 307.299561 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.152786 323.922363 m
-159.444168 323.922363 l
-159.444168 334.682098 l
-70.152786 334.682098 l
-70.152786 323.922363 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-244.672638 710.839630 m
-357.775055 710.839630 l
-357.775055 823.035156 l
-244.672638 823.035156 l
-244.672638 710.839630 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-250.625397 716.792389 m
-351.822296 716.792389 l
-351.822296 817.082397 l
-250.625397 817.082397 l
-250.625397 716.792389 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-256.578156 722.745148 m
-345.869537 722.745148 l
-345.869537 733.462860 l
-256.578156 733.462860 l
-256.578156 722.745148 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-256.578156 739.415619 m
-345.869537 739.415619 l
-345.869537 750.330765 l
-256.578156 750.330765 l
-256.578156 739.415619 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-256.578156 756.283524 m
-345.869537 756.283524 l
-345.869537 770.245193 l
-256.578156 770.245193 l
-256.578156 756.283524 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-256.578156 776.197952 m
-345.869537 776.197952 l
-345.869537 790.993958 l
-256.578156 790.993958 l
-256.578156 776.197952 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-256.578156 796.946716 m
-345.869537 796.946716 l
-345.869537 811.129639 l
-256.578156 811.129639 l
-256.578156 796.946716 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-330.823975 -25.719849 m
-443.926392 -25.719849 l
-443.926392 84.825668 l
-330.823975 84.825668 l
-330.823975 -25.719849 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-336.776733 -19.767090 m
-437.973633 -19.767090 l
-437.973633 78.872910 l
-336.776733 78.872910 l
-336.776733 -19.767090 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-342.729492 -13.814331 m
-432.020874 -13.814331 l
-432.020874 -0.327164 l
-342.729492 -0.327164 l
-342.729492 -13.814331 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-342.729492 5.625595 m
-432.020874 5.625595 l
-432.020874 18.196472 l
-342.729492 18.196472 l
-342.729492 5.625595 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-342.729492 24.149231 m
-432.020874 24.149231 l
-432.020874 38.181076 l
-342.729492 38.181076 l
-342.729492 24.149231 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-342.729492 44.133835 m
-432.020874 44.133835 l
-432.020874 54.723831 l
-342.729492 54.723831 l
-342.729492 44.133835 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-342.729492 60.676590 m
-432.020874 60.676590 l
-432.020874 72.920151 l
-342.729492 72.920151 l
-342.729492 60.676590 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-203.319672 604.248322 m
-316.422089 604.248322 l
-316.422089 697.895050 l
-203.319672 697.895050 l
-203.319672 604.248322 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-209.272430 610.201080 m
-310.469330 610.201080 l
-310.469330 691.942291 l
-209.272430 691.942291 l
-209.272430 610.201080 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-215.225189 616.153839 m
-304.516571 616.153839 l
-304.516571 628.769821 l
-215.225189 628.769821 l
-215.225189 616.153839 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-215.225189 634.722580 m
-304.516571 634.722580 l
-304.516571 646.369431 l
-215.225189 646.369431 l
-215.225189 634.722580 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-215.225189 652.322189 m
-304.516571 652.322189 l
-304.516571 665.365524 l
-215.225189 665.365524 l
-215.225189 652.322189 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-215.225189 671.318283 m
-304.516571 671.318283 l
-304.516571 685.989532 l
-215.225189 685.989532 l
-215.225189 671.318283 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--17.199310 -12.799042 m
-95.903107 -12.799042 l
-95.903107 95.868073 l
--17.199310 95.868073 l
--17.199310 -12.799042 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--11.246552 -6.846283 m
-89.950348 -6.846283 l
-89.950348 89.915314 l
--11.246552 89.915314 l
--11.246552 -6.846283 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.293793 -0.893524 m
-83.997589 -0.893524 l
-83.997589 11.865845 l
--5.293793 11.865845 l
--5.293793 -0.893524 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.293793 17.818604 m
-83.997589 17.818604 l
-83.997589 29.249878 l
--5.293793 29.249878 l
--5.293793 17.818604 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.293793 35.202637 m
-83.997589 35.202637 l
-83.997589 47.382965 l
--5.293793 47.382965 l
--5.293793 35.202637 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.293793 53.335724 m
-83.997589 53.335724 l
-83.997589 64.460587 l
--5.293793 64.460587 l
--5.293793 53.335724 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.293793 70.413345 m
-83.997589 70.413345 l
-83.997589 83.962555 l
--5.293793 83.962555 l
--5.293793 70.413345 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-278.721771 664.996979 m
-391.824188 664.996979 l
-391.824188 778.690475 l
-278.721771 778.690475 l
-278.721771 664.996979 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-284.674530 670.949738 m
-385.871429 670.949738 l
-385.871429 772.737717 l
-284.674530 772.737717 l
-284.674530 670.949738 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-290.627289 676.902496 m
-379.918671 676.902496 l
-379.918671 689.448807 l
-290.627289 689.448807 l
-290.627289 676.902496 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-290.627289 695.401566 m
-379.918671 695.401566 l
-379.918671 706.038483 l
-290.627289 706.038483 l
-290.627289 695.401566 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-290.627289 711.991241 m
-379.918671 711.991241 l
-379.918671 725.736526 l
-290.627289 725.736526 l
-290.627289 711.991241 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-290.627289 731.689285 m
-379.918671 731.689285 l
-379.918671 746.108719 l
-290.627289 746.108719 l
-290.627289 731.689285 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-290.627289 752.061478 m
-379.918671 752.061478 l
-379.918671 766.784958 l
-290.627289 766.784958 l
-290.627289 752.061478 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-117.430695 705.322083 m
-230.533112 705.322083 l
-230.533112 816.381516 l
-117.430695 816.381516 l
-117.430695 705.322083 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-123.383453 711.274841 m
-224.580353 711.274841 l
-224.580353 810.428757 l
-123.383453 810.428757 l
-123.383453 711.274841 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.336212 717.227600 m
-218.627594 717.227600 l
-218.627594 729.324448 l
-129.336212 729.324448 l
-129.336212 717.227600 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.336212 735.277206 m
-218.627594 735.277206 l
-218.627594 747.956360 l
-129.336212 747.956360 l
-129.336212 735.277206 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.336212 753.909119 m
-218.627594 753.909119 l
-218.627594 767.911819 l
-129.336212 767.911819 l
-129.336212 753.909119 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.336212 773.864578 m
-218.627594 773.864578 l
-218.627594 785.911453 l
-129.336212 785.911453 l
-129.336212 773.864578 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.336212 791.864212 m
-218.627594 791.864212 l
-218.627594 804.475998 l
-129.336212 804.475998 l
-129.336212 791.864212 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--44.303223 504.041595 m
-68.799194 504.041595 l
-68.799194 610.798965 l
--44.303223 610.798965 l
--44.303223 504.041595 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--38.350464 509.994354 m
-62.846436 509.994354 l
-62.846436 604.846207 l
--38.350464 604.846207 l
--38.350464 509.994354 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.397705 515.947113 m
-56.893677 515.947113 l
-56.893677 526.800125 l
--32.397705 526.800125 l
--32.397705 515.947113 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.397705 532.752884 m
-56.893677 532.752884 l
-56.893677 547.537186 l
--32.397705 547.537186 l
--32.397705 532.752884 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.397705 553.489944 m
-56.893677 553.489944 l
-56.893677 564.458710 l
--32.397705 564.458710 l
--32.397705 553.489944 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.397705 570.411469 m
-56.893677 570.411469 l
-56.893677 581.661453 l
--32.397705 581.661453 l
--32.397705 570.411469 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.397705 587.614212 m
-56.893677 587.614212 l
-56.893677 598.893448 l
--32.397705 598.893448 l
--32.397705 587.614212 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-416.443390 376.495163 m
-529.545807 376.495163 l
-529.545807 487.257599 l
-416.443390 487.257599 l
-416.443390 376.495163 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-422.396149 382.447922 m
-523.593048 382.447922 l
-523.593048 481.304840 l
-422.396149 481.304840 l
-422.396149 382.447922 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-428.348907 388.400681 m
-517.640289 388.400681 l
-517.640289 402.666611 l
-428.348907 402.666611 l
-428.348907 388.400681 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-428.348907 408.619370 m
-517.640289 408.619370 l
-517.640289 421.684662 l
-428.348907 421.684662 l
-428.348907 408.619370 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-428.348907 427.637421 m
-517.640289 427.637421 l
-517.640289 440.058899 l
-428.348907 440.058899 l
-428.348907 427.637421 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-428.348907 446.011658 m
-517.640289 446.011658 l
-517.640289 456.813858 l
-428.348907 456.813858 l
-428.348907 446.011658 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-428.348907 462.766617 m
-517.640289 462.766617 l
-517.640289 475.352081 l
-428.348907 475.352081 l
-428.348907 462.766617 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-110.336426 240.004242 m
-223.438843 240.004242 l
-223.438843 330.610367 l
-110.336426 330.610367 l
-110.336426 240.004242 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-116.289185 245.957001 m
-217.486084 245.957001 l
-217.486084 324.657608 l
-116.289185 324.657608 l
-116.289185 245.957001 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-122.241943 251.909760 m
-211.533325 251.909760 l
-211.533325 262.529373 l
-122.241943 262.529373 l
-122.241943 251.909760 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-122.241943 268.482132 m
-211.533325 268.482132 l
-211.533325 280.185471 l
-122.241943 280.185471 l
-122.241943 268.482132 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-122.241943 286.138229 m
-211.533325 286.138229 l
-211.533325 297.885513 l
-122.241943 297.885513 l
-122.241943 286.138229 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-122.241943 303.838272 m
-211.533325 303.838272 l
-211.533325 318.704849 l
-122.241943 318.704849 l
-122.241943 303.838272 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-264.730484 10.500061 m
-377.832901 10.500061 l
-377.832901 122.682205 l
-264.730484 122.682205 l
-264.730484 10.500061 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-270.683243 16.452820 m
-371.880142 16.452820 l
-371.880142 116.729446 l
-270.683243 116.729446 l
-270.683243 16.452820 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-276.636002 22.405579 m
-365.927383 22.405579 l
-365.927383 36.623398 l
-276.636002 36.623398 l
-276.636002 22.405579 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-276.636002 42.576157 m
-365.927383 42.576157 l
-365.927383 55.352936 l
-276.636002 55.352936 l
-276.636002 42.576157 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-276.636002 61.305695 m
-365.927383 61.305695 l
-365.927383 72.981689 l
-276.636002 72.981689 l
-276.636002 61.305695 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-276.636002 78.934448 m
-365.927383 78.934448 l
-365.927383 90.520905 l
-276.636002 90.520905 l
-276.636002 78.934448 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-276.636002 96.473663 m
-365.927383 96.473663 l
-365.927383 110.776688 l
-276.636002 110.776688 l
-276.636002 96.473663 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-230.423584 86.310394 m
-343.526001 86.310394 l
-343.526001 184.061417 l
-230.423584 184.061417 l
-230.423584 86.310394 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-236.376343 92.263153 m
-337.573242 92.263153 l
-337.573242 178.108658 l
-236.376343 178.108658 l
-236.376343 92.263153 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-242.329102 98.215912 m
-331.620483 98.215912 l
-331.620483 112.738251 l
-242.329102 112.738251 l
-242.329102 98.215912 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-242.329102 118.691010 m
-331.620483 118.691010 l
-331.620483 131.449387 l
-242.329102 131.449387 l
-242.329102 118.691010 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-242.329102 137.402145 m
-331.620483 137.402145 l
-331.620483 151.657028 l
-242.329102 151.657028 l
-242.329102 137.402145 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-242.329102 157.609787 m
-331.620483 157.609787 l
-331.620483 172.155899 l
-242.329102 172.155899 l
-242.329102 157.609787 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-285.462921 641.257278 m
-398.565338 641.257278 l
-398.565338 736.031738 l
-285.462921 736.031738 l
-285.462921 641.257278 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-291.415680 647.210037 m
-392.612579 647.210037 l
-392.612579 730.078979 l
-291.415680 730.078979 l
-291.415680 647.210037 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-297.368439 653.162796 m
-386.659821 653.162796 l
-386.659821 665.426575 l
-297.368439 665.426575 l
-297.368439 653.162796 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-297.368439 671.379333 m
-386.659821 671.379333 l
-386.659821 685.555542 l
-297.368439 685.555542 l
-297.368439 671.379333 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-297.368439 691.508301 m
-386.659821 691.508301 l
-386.659821 705.724808 l
-297.368439 705.724808 l
-297.368439 691.508301 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-297.368439 711.677567 m
-386.659821 711.677567 l
-386.659821 724.126221 l
-297.368439 724.126221 l
-297.368439 711.677567 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-460.937637 253.324783 m
-574.040054 253.324783 l
-574.040054 348.556290 l
-460.937637 348.556290 l
-460.937637 253.324783 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-466.890396 259.277542 m
-568.087296 259.277542 l
-568.087296 342.603531 l
-466.890396 342.603531 l
-466.890396 259.277542 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-472.843155 265.230301 m
-562.134537 265.230301 l
-562.134537 277.344437 l
-472.843155 277.344437 l
-472.843155 265.230301 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-472.843155 283.297195 m
-562.134537 283.297195 l
-562.134537 298.018295 l
-472.843155 298.018295 l
-472.843155 283.297195 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-472.843155 303.971054 m
-562.134537 303.971054 l
-562.134537 318.823807 l
-472.843155 318.823807 l
-472.843155 303.971054 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-472.843155 324.776566 m
-562.134537 324.776566 l
-562.134537 336.650772 l
-472.843155 336.650772 l
-472.843155 324.776566 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--7.453232 436.240845 m
-105.649185 436.240845 l
-105.649185 547.115570 l
--7.453232 547.115570 l
--7.453232 436.240845 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--1.500473 442.193604 m
-99.696426 442.193604 l
-99.696426 541.162811 l
--1.500473 541.162811 l
--1.500473 442.193604 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-4.452286 448.146362 m
-93.743668 448.146362 l
-93.743668 460.457352 l
-4.452286 460.457352 l
-4.452286 448.146362 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-4.452286 466.410110 m
-93.743668 466.410110 l
-93.743668 479.529037 l
-4.452286 479.529037 l
-4.452286 466.410110 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-4.452286 485.481796 m
-93.743668 485.481796 l
-93.743668 499.036575 l
-4.452286 499.036575 l
-4.452286 485.481796 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-4.452286 504.989334 m
-93.743668 504.989334 l
-93.743668 517.796661 l
-4.452286 517.796661 l
-4.452286 504.989334 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-4.452286 523.749420 m
-93.743668 523.749420 l
-93.743668 535.210052 l
-4.452286 535.210052 l
-4.452286 523.749420 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-19.018372 573.347641 m
-132.120789 573.347641 l
-132.120789 681.482346 l
-19.018372 681.482346 l
-19.018372 573.347641 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-24.971130 579.300400 m
-126.168030 579.300400 l
-126.168030 675.529587 l
-24.971130 675.529587 l
-24.971130 579.300400 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-30.923889 585.253159 m
-120.215271 585.253159 l
-120.215271 597.362671 l
-30.923889 597.362671 l
-30.923889 585.253159 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-30.923889 603.315430 m
-120.215271 603.315430 l
-120.215271 616.567413 l
-30.923889 616.567413 l
-30.923889 603.315430 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-30.923889 622.520172 m
-120.215271 622.520172 l
-120.215271 633.822464 l
-30.923889 633.822464 l
-30.923889 622.520172 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-30.923889 639.775223 m
-120.215271 639.775223 l
-120.215271 651.489182 l
-30.923889 651.489182 l
-30.923889 639.775223 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-30.923889 657.441940 m
-120.215271 657.441940 l
-120.215271 669.576828 l
-30.923889 669.576828 l
-30.923889 657.441940 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-492.535019 299.335678 m
-605.637436 299.335678 l
-605.637436 412.805847 l
-492.535019 412.805847 l
-492.535019 299.335678 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-498.487778 305.288437 m
-599.684677 305.288437 l
-599.684677 406.853088 l
-498.487778 406.853088 l
-498.487778 305.288437 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-504.440536 311.241196 m
-593.731918 311.241196 l
-593.731918 325.624741 l
-504.440536 325.624741 l
-504.440536 311.241196 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-504.440536 331.577499 m
-593.731918 331.577499 l
-593.731918 346.442108 l
-504.440536 346.442108 l
-504.440536 331.577499 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-504.440536 352.394867 m
-593.731918 352.394867 l
-593.731918 365.234818 l
-504.440536 365.234818 l
-504.440536 352.394867 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-504.440536 371.187576 m
-593.731918 371.187576 l
-593.731918 384.267319 l
-504.440536 384.267319 l
-504.440536 371.187576 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-504.440536 390.220078 m
-593.731918 390.220078 l
-593.731918 400.900330 l
-504.440536 400.900330 l
-504.440536 390.220078 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--52.744431 662.455658 m
-60.357986 662.455658 l
-60.357986 776.069489 l
--52.744431 776.069489 l
--52.744431 662.455658 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--46.791672 668.408417 m
-54.405228 668.408417 l
-54.405228 770.116730 l
--46.791672 770.116730 l
--46.791672 668.408417 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--40.838913 674.361176 m
-48.452469 674.361176 l
-48.452469 687.530289 l
--40.838913 687.530289 l
--40.838913 674.361176 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--40.838913 693.483047 m
-48.452469 693.483047 l
-48.452469 706.811935 l
--40.838913 706.811935 l
--40.838913 693.483047 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--40.838913 712.764694 m
-48.452469 712.764694 l
-48.452469 725.799789 l
--40.838913 725.799789 l
--40.838913 712.764694 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--40.838913 731.752548 m
-48.452469 731.752548 l
-48.452469 746.331375 l
--40.838913 746.331375 l
--40.838913 731.752548 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--40.838913 752.284134 m
-48.452469 752.284134 l
-48.452469 764.163971 l
--40.838913 764.163971 l
--40.838913 752.284134 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-525.131119 -48.806931 m
-638.233536 -48.806931 l
-638.233536 64.400848 l
-525.131119 64.400848 l
-525.131119 -48.806931 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-531.083878 -42.854172 m
-632.280777 -42.854172 l
-632.280777 58.448090 l
-531.083878 58.448090 l
-531.083878 -42.854172 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-537.036636 -36.901413 m
-626.328018 -36.901413 l
-626.328018 -22.721207 l
-537.036636 -22.721207 l
-537.036636 -36.901413 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-537.036636 -16.768448 m
-626.328018 -16.768448 l
-626.328018 -5.888870 l
-537.036636 -5.888870 l
-537.036636 -16.768448 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-537.036636 0.063889 m
-626.328018 0.063889 l
-626.328018 13.097900 l
-537.036636 13.097900 l
-537.036636 0.063889 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-537.036636 19.050659 m
-626.328018 19.050659 l
-626.328018 31.974594 l
-537.036636 31.974594 l
-537.036636 19.050659 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-537.036636 37.927353 m
-626.328018 37.927353 l
-626.328018 52.495331 l
-537.036636 52.495331 l
-537.036636 37.927353 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-82.328400 477.967468 m
-195.430817 477.967468 l
-195.430817 590.946014 l
-82.328400 590.946014 l
-82.328400 477.967468 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-88.281158 483.920227 m
-189.478058 483.920227 l
-189.478058 584.993256 l
-88.281158 584.993256 l
-88.281158 483.920227 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-94.233917 489.872986 m
-183.525299 489.872986 l
-183.525299 503.555588 l
-94.233917 503.555588 l
-94.233917 489.872986 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-94.233917 509.508347 m
-183.525299 509.508347 l
-183.525299 522.212875 l
-94.233917 522.212875 l
-94.233917 509.508347 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-94.233917 528.165634 m
-183.525299 528.165634 l
-183.525299 538.981888 l
-94.233917 538.981888 l
-94.233917 528.165634 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-94.233917 544.934647 m
-183.525299 544.934647 l
-183.525299 558.484085 l
-94.233917 558.484085 l
-94.233917 544.934647 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-94.233917 564.436844 m
-183.525299 564.436844 l
-183.525299 579.040497 l
-94.233917 579.040497 l
-94.233917 564.436844 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-260.923691 133.380920 m
-374.026108 133.380920 l
-374.026108 245.051666 l
-260.923691 245.051666 l
-260.923691 133.380920 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-266.876450 139.333679 m
-368.073349 139.333679 l
-368.073349 239.098907 l
-266.876450 239.098907 l
-266.876450 139.333679 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.829208 145.286438 m
-362.120590 145.286438 l
-362.120590 156.752487 l
-272.829208 156.752487 l
-272.829208 145.286438 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.829208 162.705246 m
-362.120590 162.705246 l
-362.120590 177.035034 l
-272.829208 177.035034 l
-272.829208 162.705246 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.829208 182.987793 m
-362.120590 182.987793 l
-362.120590 196.510590 l
-272.829208 196.510590 l
-272.829208 182.987793 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.829208 202.463348 m
-362.120590 202.463348 l
-362.120590 214.352875 l
-272.829208 214.352875 l
-272.829208 202.463348 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.829208 220.305634 m
-362.120590 220.305634 l
-362.120590 233.146149 l
-272.829208 233.146149 l
-272.829208 220.305634 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-244.015411 73.563080 m
-357.117828 73.563080 l
-357.117828 181.214828 l
-244.015411 181.214828 l
-244.015411 73.563080 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-249.968170 79.515839 m
-351.165070 79.515839 l
-351.165070 175.262070 l
-249.968170 175.262070 l
-249.968170 79.515839 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.920929 85.468597 m
-345.212311 85.468597 l
-345.212311 96.228073 l
-255.920929 96.228073 l
-255.920929 85.468597 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.920929 102.180832 m
-345.212311 102.180832 l
-345.212311 114.476959 l
-255.920929 114.476959 l
-255.920929 102.180832 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.920929 120.429718 m
-345.212311 120.429718 l
-345.212311 132.067917 l
-255.920929 132.067917 l
-255.920929 120.429718 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.920929 138.020676 m
-345.212311 138.020676 l
-345.212311 150.060196 l
-255.920929 150.060196 l
-255.920929 138.020676 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.920929 156.012955 m
-345.212311 156.012955 l
-345.212311 169.309311 l
-255.920929 169.309311 l
-255.920929 156.012955 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-291.489548 335.328094 m
-404.591965 335.328094 l
-404.591965 425.921722 l
-291.489548 425.921722 l
-291.489548 335.328094 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-297.442307 341.280853 m
-398.639206 341.280853 l
-398.639206 419.968964 l
-297.442307 419.968964 l
-297.442307 341.280853 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-303.395065 347.233612 m
-392.686447 347.233612 l
-392.686447 358.144547 l
-303.395065 358.144547 l
-303.395065 347.233612 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-303.395065 364.097305 m
-392.686447 364.097305 l
-392.686447 376.026611 l
-303.395065 376.026611 l
-303.395065 364.097305 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-303.395065 381.979370 m
-392.686447 381.979370 l
-392.686447 394.029099 l
-303.395065 394.029099 l
-303.395065 381.979370 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-303.395065 399.981857 m
-392.686447 399.981857 l
-392.686447 414.016205 l
-303.395065 414.016205 l
-303.395065 399.981857 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-5.614655 238.853546 m
-118.717072 238.853546 l
-118.717072 326.900146 l
-5.614655 326.900146 l
-5.614655 238.853546 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-11.567413 244.806305 m
-112.764313 244.806305 l
-112.764313 320.947388 l
-11.567413 320.947388 l
-11.567413 244.806305 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-17.520172 250.759064 m
-106.811554 250.759064 l
-106.811554 261.383713 l
-17.520172 261.383713 l
-17.520172 250.759064 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-17.520172 267.336472 m
-106.811554 267.336472 l
-106.811554 278.401901 l
-17.520172 278.401901 l
-17.520172 267.336472 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-17.520172 284.354660 m
-106.811554 284.354660 l
-106.811554 295.163300 l
-17.520172 295.163300 l
-17.520172 284.354660 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-17.520172 301.116058 m
-106.811554 301.116058 l
-106.811554 314.994629 l
-17.520172 314.994629 l
-17.520172 301.116058 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-534.164948 92.349411 m
-647.267365 92.349411 l
-647.267365 201.033569 l
-534.164948 201.033569 l
-534.164948 92.349411 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-540.117706 98.302170 m
-641.314606 98.302170 l
-641.314606 195.080811 l
-540.117706 195.080811 l
-540.117706 98.302170 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-546.070465 104.254929 m
-635.361847 104.254929 l
-635.361847 115.000778 l
-546.070465 115.000778 l
-546.070465 104.254929 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-546.070465 120.953537 m
-635.361847 120.953537 l
-635.361847 131.434814 l
-546.070465 131.434814 l
-546.070465 120.953537 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-546.070465 137.387573 m
-635.361847 137.387573 l
-635.361847 151.260941 l
-546.070465 151.260941 l
-546.070465 137.387573 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-546.070465 157.213699 m
-635.361847 157.213699 l
-635.361847 169.805740 l
-546.070465 169.805740 l
-546.070465 157.213699 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-546.070465 175.758499 m
-635.361847 175.758499 l
-635.361847 189.128052 l
-546.070465 189.128052 l
-546.070465 175.758499 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-414.439423 220.083008 m
-527.541840 220.083008 l
-527.541840 329.822556 l
-414.439423 329.822556 l
-414.439423 220.083008 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-420.392181 226.035767 m
-521.589081 226.035767 l
-521.589081 323.869797 l
-420.392181 323.869797 l
-420.392181 226.035767 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-426.344940 231.988525 m
-515.636322 231.988525 l
-515.636322 245.928085 l
-426.344940 245.928085 l
-426.344940 231.988525 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-426.344940 251.880844 m
-515.636322 251.880844 l
-515.636322 264.165894 l
-426.344940 264.165894 l
-426.344940 251.880844 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-426.344940 270.118652 m
-515.636322 270.118652 l
-515.636322 281.737198 l
-426.344940 281.737198 l
-426.344940 270.118652 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-426.344940 287.689957 m
-515.636322 287.689957 l
-515.636322 299.200027 l
-426.344940 299.200027 l
-426.344940 287.689957 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-426.344940 305.152786 m
-515.636322 305.152786 l
-515.636322 317.917038 l
-426.344940 317.917038 l
-426.344940 305.152786 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-99.407394 497.481430 m
-212.509811 497.481430 l
-212.509811 610.260696 l
-99.407394 610.260696 l
-99.407394 497.481430 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-105.360153 503.434189 m
-206.557053 503.434189 l
-206.557053 604.307938 l
-105.360153 604.307938 l
-105.360153 503.434189 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-111.312912 509.386948 m
-200.604294 509.386948 l
-200.604294 521.310120 l
-111.312912 521.310120 l
-111.312912 509.386948 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-111.312912 527.262878 m
-200.604294 527.262878 l
-200.604294 540.914124 l
-111.312912 540.914124 l
-111.312912 527.262878 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-111.312912 546.866882 m
-200.604294 546.866882 l
-200.604294 560.676117 l
-111.312912 560.676117 l
-111.312912 546.866882 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-111.312912 566.628876 m
-200.604294 566.628876 l
-200.604294 578.319336 l
-111.312912 578.319336 l
-111.312912 566.628876 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-111.312912 584.272095 m
-200.604294 584.272095 l
-200.604294 598.355179 l
-111.312912 598.355179 l
-111.312912 584.272095 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--16.937134 653.879868 m
-96.165283 653.879868 l
-96.165283 747.280350 l
--16.937134 747.280350 l
--16.937134 653.879868 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--10.984375 659.832626 m
-90.212524 659.832626 l
-90.212524 741.327591 l
--10.984375 741.327591 l
--10.984375 659.832626 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.031616 665.785385 m
-84.259766 665.785385 l
-84.259766 679.213608 l
--5.031616 679.213608 l
--5.031616 665.785385 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.031616 685.166367 m
-84.259766 685.166367 l
-84.259766 698.271530 l
--5.031616 698.271530 l
--5.031616 685.166367 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.031616 704.224289 m
-84.259766 704.224289 l
-84.259766 718.561707 l
--5.031616 718.561707 l
--5.031616 704.224289 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--5.031616 724.514465 m
-84.259766 724.514465 l
-84.259766 735.374832 l
--5.031616 735.374832 l
--5.031616 724.514465 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-104.685303 395.096008 m
-217.787720 395.096008 l
-217.787720 508.020630 l
-104.685303 508.020630 l
-104.685303 395.096008 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-110.638062 401.048767 m
-211.834961 401.048767 l
-211.834961 502.067871 l
-110.638062 502.067871 l
-110.638062 401.048767 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-116.590820 407.001526 m
-205.882202 407.001526 l
-205.882202 419.219543 l
-116.590820 419.219543 l
-116.590820 407.001526 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-116.590820 425.172302 m
-205.882202 425.172302 l
-205.882202 439.860153 l
-116.590820 439.860153 l
-116.590820 425.172302 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-116.590820 445.812912 m
-205.882202 445.812912 l
-205.882202 458.125397 l
-116.590820 458.125397 l
-116.590820 445.812912 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-116.590820 464.078156 m
-205.882202 464.078156 l
-205.882202 478.221085 l
-116.590820 478.221085 l
-116.590820 464.078156 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-116.590820 484.173843 m
-205.882202 484.173843 l
-205.882202 496.115112 l
-116.590820 496.115112 l
-116.590820 484.173843 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--35.260605 505.823761 m
-77.841812 505.823761 l
-77.841812 618.422348 l
--35.260605 618.422348 l
--35.260605 505.823761 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--29.307846 511.776520 m
-71.889053 511.776520 l
-71.889053 612.469589 l
--29.307846 612.469589 l
--29.307846 511.776520 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--23.355087 517.729279 m
-65.936295 517.729279 l
-65.936295 531.301468 l
--23.355087 531.301468 l
--23.355087 517.729279 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--23.355087 537.254227 m
-65.936295 537.254227 l
-65.936295 550.424988 l
--23.355087 550.424988 l
--23.355087 537.254227 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--23.355087 556.377747 m
-65.936295 556.377747 l
-65.936295 566.826431 l
--23.355087 566.826431 l
--23.355087 556.377747 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--23.355087 572.779190 m
-65.936295 572.779190 l
-65.936295 586.556381 l
--23.355087 586.556381 l
--23.355087 572.779190 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--23.355087 592.509140 m
-65.936295 592.509140 l
-65.936295 606.516830 l
--23.355087 606.516830 l
--23.355087 592.509140 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-467.570679 677.516449 m
-580.673096 677.516449 l
-580.673096 789.268661 l
-467.570679 789.268661 l
-467.570679 677.516449 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-473.523438 683.469208 m
-574.720337 683.469208 l
-574.720337 783.315903 l
-473.523438 783.315903 l
-473.523438 683.469208 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-479.476196 689.421967 m
-568.767578 689.421967 l
-568.767578 700.637054 l
-479.476196 700.637054 l
-479.476196 689.421967 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-479.476196 706.589813 m
-568.767578 706.589813 l
-568.767578 718.413757 l
-479.476196 718.413757 l
-479.476196 706.589813 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-479.476196 724.366516 m
-568.767578 724.366516 l
-568.767578 737.609299 l
-479.476196 737.609299 l
-479.476196 724.366516 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-479.476196 743.562057 m
-568.767578 743.562057 l
-568.767578 758.436340 l
-479.476196 758.436340 l
-479.476196 743.562057 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-479.476196 764.389099 m
-568.767578 764.389099 l
-568.767578 777.363144 l
-479.476196 777.363144 l
-479.476196 764.389099 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-26.211121 41.596695 m
-139.313538 41.596695 l
-139.313538 152.156021 l
-26.211121 152.156021 l
-26.211121 41.596695 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-32.163879 47.549454 m
-133.360779 47.549454 l
-133.360779 146.203262 l
-32.163879 146.203262 l
-32.163879 47.549454 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-38.116638 53.502213 m
-127.408020 53.502213 l
-127.408020 68.339020 l
-38.116638 68.339020 l
-38.116638 53.502213 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-38.116638 74.291779 m
-127.408020 74.291779 l
-127.408020 85.983353 l
-38.116638 85.983353 l
-38.116638 74.291779 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-38.116638 91.936111 m
-127.408020 91.936111 l
-127.408020 105.073227 l
-38.116638 105.073227 l
-38.116638 91.936111 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-38.116638 111.025986 m
-127.408020 111.025986 l
-127.408020 122.171661 l
-38.116638 122.171661 l
-38.116638 111.025986 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-38.116638 128.124420 m
-127.408020 128.124420 l
-127.408020 140.250504 l
-38.116638 140.250504 l
-38.116638 128.124420 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-198.877014 359.130585 m
-311.979431 359.130585 l
-311.979431 456.313980 l
-198.877014 456.313980 l
-198.877014 359.130585 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-204.829773 365.083344 m
-306.026672 365.083344 l
-306.026672 450.361221 l
-204.829773 450.361221 l
-204.829773 365.083344 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.782532 371.036102 m
-300.073914 371.036102 l
-300.073914 385.233658 l
-210.782532 385.233658 l
-210.782532 371.036102 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.782532 391.186417 m
-300.073914 391.186417 l
-300.073914 405.032349 l
-210.782532 405.032349 l
-210.782532 391.186417 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.782532 410.985107 m
-300.073914 410.985107 l
-300.073914 425.517349 l
-210.782532 425.517349 l
-210.782532 410.985107 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.782532 431.470108 m
-300.073914 431.470108 l
-300.073914 444.408463 l
-210.782532 444.408463 l
-210.782532 431.470108 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-353.242798 -36.081207 m
-466.345215 -36.081207 l
-466.345215 53.720184 l
-353.242798 53.720184 l
-353.242798 -36.081207 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-359.195557 -30.128448 m
-460.392456 -30.128448 l
-460.392456 47.767426 l
-359.195557 47.767426 l
-359.195557 -30.128448 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-365.148315 -24.175690 m
-454.439697 -24.175690 l
-454.439697 -9.354584 l
-365.148315 -9.354584 l
-365.148315 -24.175690 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-365.148315 -3.401825 m
-454.439697 -3.401825 l
-454.439697 8.140289 l
-365.148315 8.140289 l
-365.148315 -3.401825 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-365.148315 14.093048 m
-454.439697 14.093048 l
-454.439697 24.540054 l
-365.148315 24.540054 l
-365.148315 14.093048 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-365.148315 30.492813 m
-454.439697 30.492813 l
-454.439697 41.814667 l
-365.148315 41.814667 l
-365.148315 30.492813 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-451.402618 5.240555 m
-564.505035 5.240555 l
-564.505035 94.389725 l
-451.402618 94.389725 l
-451.402618 5.240555 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-457.355377 11.193314 m
-558.552277 11.193314 l
-558.552277 88.436966 l
-457.355377 88.436966 l
-457.355377 11.193314 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.308136 17.146072 m
-552.599518 17.146072 l
-552.599518 27.937027 l
-463.308136 27.937027 l
-463.308136 17.146072 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.308136 33.889786 m
-552.599518 33.889786 l
-552.599518 47.561401 l
-463.308136 47.561401 l
-463.308136 33.889786 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.308136 53.514160 m
-552.599518 53.514160 l
-552.599518 64.667740 l
-463.308136 64.667740 l
-463.308136 53.514160 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.308136 70.620499 m
-552.599518 70.620499 l
-552.599518 82.484207 l
-463.308136 82.484207 l
-463.308136 70.620499 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-504.323273 500.891556 m
-617.425690 500.891556 l
-617.425690 594.209457 l
-504.323273 594.209457 l
-504.323273 500.891556 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-510.276031 506.844315 m
-611.472931 506.844315 l
-611.472931 588.256699 l
-510.276031 588.256699 l
-510.276031 506.844315 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.228790 512.797073 m
-605.520172 512.797073 l
-605.520172 526.250687 l
-516.228790 526.250687 l
-516.228790 512.797073 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.228790 532.203445 m
-605.520172 532.203445 l
-605.520172 543.712585 l
-516.228790 543.712585 l
-516.228790 532.203445 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.228790 549.665344 m
-605.520172 549.665344 l
-605.520172 561.605545 l
-516.228790 561.605545 l
-516.228790 549.665344 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.228790 567.558304 m
-605.520172 567.558304 l
-605.520172 582.303940 l
-516.228790 582.303940 l
-516.228790 567.558304 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-489.739487 111.829514 m
-602.841904 111.829514 l
-602.841904 222.213058 l
-489.739487 222.213058 l
-489.739487 111.829514 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-495.692245 117.782272 m
-596.889145 117.782272 l
-596.889145 216.260300 l
-495.692245 216.260300 l
-495.692245 117.782272 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.645004 123.735031 m
-590.936386 123.735031 l
-590.936386 136.419479 l
-501.645004 136.419479 l
-501.645004 123.735031 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.645004 142.372238 m
-590.936386 142.372238 l
-590.936386 154.033005 l
-501.645004 154.033005 l
-501.645004 142.372238 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.645004 159.985764 m
-590.936386 159.985764 l
-590.936386 173.164322 l
-501.645004 173.164322 l
-501.645004 159.985764 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.645004 179.117081 m
-590.936386 179.117081 l
-590.936386 190.486420 l
-501.645004 190.486420 l
-501.645004 179.117081 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.645004 196.439178 m
-590.936386 196.439178 l
-590.936386 210.307541 l
-501.645004 210.307541 l
-501.645004 196.439178 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-444.312592 441.853500 m
-557.415009 441.853500 l
-557.415009 552.773605 l
-444.312592 552.773605 l
-444.312592 441.853500 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-450.265350 447.806259 m
-551.462250 447.806259 l
-551.462250 546.820847 l
-450.265350 546.820847 l
-450.265350 447.806259 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.218109 453.759018 m
-545.509491 453.759018 l
-545.509491 467.360168 l
-456.218109 467.360168 l
-456.218109 453.759018 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.218109 473.312927 m
-545.509491 473.312927 l
-545.509491 484.032303 l
-456.218109 484.032303 l
-456.218109 473.312927 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.218109 489.985062 m
-545.509491 489.985062 l
-545.509491 504.021133 l
-456.218109 504.021133 l
-456.218109 489.985062 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.218109 509.973892 m
-545.509491 509.973892 l
-545.509491 524.045059 l
-456.218109 524.045059 l
-456.218109 509.973892 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.218109 529.997818 m
-545.509491 529.997818 l
-545.509491 540.868088 l
-456.218109 540.868088 l
-456.218109 529.997818 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-33.195328 301.586288 m
-146.297745 301.586288 l
-146.297745 391.862488 l
-33.195328 391.862488 l
-33.195328 301.586288 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-39.148087 307.539047 m
-140.344986 307.539047 l
-140.344986 385.909729 l
-39.148087 385.909729 l
-39.148087 307.539047 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-45.100845 313.491806 m
-134.392227 313.491806 l
-134.392227 324.721863 l
-45.100845 324.721863 l
-45.100845 313.491806 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-45.100845 330.674622 m
-134.392227 330.674622 l
-134.392227 342.188522 l
-45.100845 342.188522 l
-45.100845 330.674622 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-45.100845 348.141281 m
-134.392227 348.141281 l
-134.392227 362.738983 l
-45.100845 362.738983 l
-45.100845 348.141281 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-45.100845 368.691742 m
-134.392227 368.691742 l
-134.392227 379.956970 l
-45.100845 379.956970 l
-45.100845 368.691742 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-376.073944 573.675980 m
-489.176361 573.675980 l
-489.176361 668.016907 l
-376.073944 668.016907 l
-376.073944 573.675980 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-382.026703 579.628738 m
-483.223602 579.628738 l
-483.223602 662.064148 l
-382.026703 662.064148 l
-382.026703 579.628738 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-387.979462 585.581497 m
-477.270844 585.581497 l
-477.270844 598.077850 l
-387.979462 598.077850 l
-387.979462 585.581497 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-387.979462 604.030609 m
-477.270844 604.030609 l
-477.270844 614.734039 l
-387.979462 614.734039 l
-387.979462 604.030609 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-387.979462 620.686798 m
-477.270844 620.686798 l
-477.270844 635.546921 l
-387.979462 635.546921 l
-387.979462 620.686798 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-387.979462 641.499680 m
-477.270844 641.499680 l
-477.270844 656.111389 l
-387.979462 656.111389 l
-387.979462 641.499680 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-365.181046 98.992081 m
-478.283463 98.992081 l
-478.283463 187.417770 l
-365.181046 187.417770 l
-365.181046 98.992081 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-371.133804 104.944839 m
-472.330704 104.944839 l
-472.330704 181.465012 l
-371.133804 181.465012 l
-371.133804 104.944839 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.086563 110.897598 m
-466.377945 110.897598 l
-466.377945 121.356293 l
-377.086563 121.356293 l
-377.086563 110.897598 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.086563 127.309052 m
-466.377945 127.309052 l
-466.377945 139.981049 l
-377.086563 139.981049 l
-377.086563 127.309052 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.086563 145.933807 m
-466.377945 145.933807 l
-466.377945 157.817688 l
-377.086563 157.817688 l
-377.086563 145.933807 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.086563 163.770447 m
-466.377945 163.770447 l
-466.377945 175.512253 l
-377.086563 175.512253 l
-377.086563 163.770447 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-242.373306 358.333466 m
-355.475723 358.333466 l
-355.475723 448.798706 l
-242.373306 448.798706 l
-242.373306 358.333466 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-248.326065 364.286224 m
-349.522964 364.286224 l
-349.522964 442.845947 l
-248.326065 442.845947 l
-248.326065 364.286224 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-254.278824 370.238983 m
-343.570206 370.238983 l
-343.570206 382.702988 l
-254.278824 382.702988 l
-254.278824 370.238983 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-254.278824 388.655746 m
-343.570206 388.655746 l
-343.570206 402.427292 l
-254.278824 402.427292 l
-254.278824 388.655746 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-254.278824 408.380051 m
-343.570206 408.380051 l
-343.570206 419.420120 l
-254.278824 419.420120 l
-254.278824 408.380051 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-254.278824 425.372879 m
-343.570206 425.372879 l
-343.570206 436.893188 l
-254.278824 436.893188 l
-254.278824 425.372879 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-53.119705 194.076157 m
-166.222122 194.076157 l
-166.222122 306.588394 l
-53.119705 306.588394 l
-53.119705 194.076157 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-59.072464 200.028915 m
-160.269363 200.028915 l
-160.269363 300.635635 l
-59.072464 300.635635 l
-59.072464 200.028915 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-65.025223 205.981674 m
-154.316605 205.981674 l
-154.316605 220.224274 l
-65.025223 220.224274 l
-65.025223 205.981674 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-65.025223 226.177032 m
-154.316605 226.177032 l
-154.316605 239.689606 l
-65.025223 239.689606 l
-65.025223 226.177032 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-65.025223 245.642365 m
-154.316605 245.642365 l
-154.316605 256.376648 l
-65.025223 256.376648 l
-65.025223 245.642365 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-65.025223 262.329407 m
-154.316605 262.329407 l
-154.316605 274.668427 l
-65.025223 274.668427 l
-65.025223 262.329407 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-65.025223 280.621185 m
-154.316605 280.621185 l
-154.316605 294.682877 l
-65.025223 294.682877 l
-65.025223 280.621185 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-504.869370 782.653824 m
-617.971786 782.653824 l
-617.971786 896.717667 l
-504.869370 896.717667 l
-504.869370 782.653824 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-510.822128 788.606583 m
-612.019028 788.606583 l
-612.019028 890.764908 l
-510.822128 890.764908 l
-510.822128 788.606583 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.774887 794.559341 m
-606.066269 794.559341 l
-606.066269 807.319778 l
-516.774887 807.319778 l
-516.774887 794.559341 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.774887 813.272537 m
-606.066269 813.272537 l
-606.066269 827.094131 l
-516.774887 827.094131 l
-516.774887 813.272537 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.774887 833.046890 m
-606.066269 833.046890 l
-606.066269 846.600586 l
-516.774887 846.600586 l
-516.774887 833.046890 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.774887 852.553345 m
-606.066269 852.553345 l
-606.066269 865.668732 l
-516.774887 865.668732 l
-516.774887 852.553345 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-516.774887 871.621490 m
-606.066269 871.621490 l
-606.066269 884.812149 l
-516.774887 884.812149 l
-516.774887 871.621490 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--49.548706 233.974365 m
-63.553711 233.974365 l
-63.553711 346.540207 l
--49.548706 346.540207 l
--49.548706 233.974365 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--43.595947 239.927124 m
-57.600952 239.927124 l
-57.600952 340.587448 l
--43.595947 340.587448 l
--43.595947 239.927124 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--37.643188 245.879883 m
-51.648193 245.879883 l
-51.648193 258.375061 l
--37.643188 258.375061 l
--37.643188 245.879883 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--37.643188 264.327820 m
-51.648193 264.327820 l
-51.648193 276.452118 l
--37.643188 276.452118 l
--37.643188 264.327820 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--37.643188 282.404877 m
-51.648193 282.404877 l
-51.648193 294.561401 l
--37.643188 294.561401 l
--37.643188 282.404877 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--37.643188 300.514160 m
-51.648193 300.514160 l
-51.648193 314.182587 l
--37.643188 314.182587 l
--37.643188 300.514160 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--37.643188 320.135345 m
-51.648193 320.135345 l
-51.648193 334.634689 l
--37.643188 334.634689 l
--37.643188 320.135345 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-391.925537 43.501022 m
-505.027954 43.501022 l
-505.027954 139.007492 l
-391.925537 139.007492 l
-391.925537 43.501022 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-397.878296 49.453781 m
-499.075195 49.453781 l
-499.075195 133.054733 l
-397.878296 133.054733 l
-397.878296 49.453781 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.831055 55.406540 m
-493.122437 55.406540 l
-493.122437 68.997284 l
-403.831055 68.997284 l
-403.831055 55.406540 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.831055 74.950043 m
-493.122437 74.950043 l
-493.122437 89.101273 l
-403.831055 89.101273 l
-403.831055 74.950043 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.831055 95.054031 m
-493.122437 95.054031 l
-493.122437 109.779892 l
-403.831055 109.779892 l
-403.831055 95.054031 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.831055 115.732651 m
-493.122437 115.732651 l
-493.122437 127.101974 l
-403.831055 127.101974 l
-403.831055 115.732651 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-438.869690 337.858368 m
-551.972107 337.858368 l
-551.972107 424.712708 l
-438.869690 424.712708 l
-438.869690 337.858368 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-444.822449 343.811127 m
-546.019348 343.811127 l
-546.019348 418.759949 l
-444.822449 418.759949 l
-444.822449 343.811127 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.775208 349.763885 m
-540.066589 349.763885 l
-540.066589 360.441956 l
-450.775208 360.441956 l
-450.775208 349.763885 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.775208 366.394714 m
-540.066589 366.394714 l
-540.066589 376.833481 l
-450.775208 376.833481 l
-450.775208 366.394714 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.775208 382.786240 m
-540.066589 382.786240 l
-540.066589 393.611008 l
-450.775208 393.611008 l
-450.775208 382.786240 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.775208 399.563766 m
-540.066589 399.563766 l
-540.066589 412.807190 l
-450.775208 412.807190 l
-450.775208 399.563766 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-227.723312 678.094971 m
-340.825729 678.094971 l
-340.825729 789.337692 l
-227.723312 789.337692 l
-227.723312 678.094971 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-233.676071 684.047729 m
-334.872971 684.047729 l
-334.872971 783.384933 l
-233.676071 783.384933 l
-233.676071 684.047729 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-239.628830 690.000488 m
-328.920212 690.000488 l
-328.920212 702.532410 l
-239.628830 702.532410 l
-239.628830 690.000488 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-239.628830 708.485168 m
-328.920212 708.485168 l
-328.920212 721.171066 l
-239.628830 721.171066 l
-239.628830 708.485168 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-239.628830 727.123825 m
-328.920212 727.123825 l
-328.920212 737.742645 l
-239.628830 737.742645 l
-239.628830 727.123825 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-239.628830 743.695404 m
-328.920212 743.695404 l
-328.920212 757.663620 l
-239.628830 757.663620 l
-239.628830 743.695404 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-239.628830 763.616379 m
-328.920212 763.616379 l
-328.920212 777.432175 l
-239.628830 777.432175 l
-239.628830 763.616379 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-350.403519 230.046005 m
-463.505936 230.046005 l
-463.505936 323.814163 l
-350.403519 323.814163 l
-350.403519 230.046005 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-356.356277 235.998764 m
-457.553177 235.998764 l
-457.553177 317.861404 l
-356.356277 317.861404 l
-356.356277 235.998764 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-362.309036 241.951523 m
-451.600418 241.951523 l
-451.600418 252.981491 l
-362.309036 252.981491 l
-362.309036 241.951523 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-362.309036 258.934250 m
-451.600418 258.934250 l
-451.600418 273.054062 l
-362.309036 273.054062 l
-362.309036 258.934250 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-362.309036 279.006821 m
-451.600418 279.006821 l
-451.600418 291.563187 l
-362.309036 291.563187 l
-362.309036 279.006821 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-362.309036 297.515945 m
-451.600418 297.515945 l
-451.600418 311.908646 l
-362.309036 311.908646 l
-362.309036 297.515945 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-403.235184 -11.081284 m
-516.337601 -11.081284 l
-516.337601 102.162735 l
-403.235184 102.162735 l
-403.235184 -11.081284 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-409.187943 -5.128525 m
-510.384842 -5.128525 l
-510.384842 96.209976 l
-409.187943 96.209976 l
-409.187943 -5.128525 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.140701 0.824234 m
-504.432083 0.824234 l
-504.432083 13.970261 l
-415.140701 13.970261 l
-415.140701 0.824234 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.140701 19.923019 m
-504.432083 19.923019 l
-504.432083 33.719788 l
-415.140701 33.719788 l
-415.140701 19.923019 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.140701 39.672546 m
-504.432083 39.672546 l
-504.432083 54.023499 l
-415.140701 54.023499 l
-415.140701 39.672546 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.140701 59.976257 m
-504.432083 59.976257 l
-504.432083 73.535141 l
-415.140701 73.535141 l
-415.140701 59.976257 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.140701 79.487900 m
-504.432083 79.487900 l
-504.432083 90.257217 l
-415.140701 90.257217 l
-415.140701 79.487900 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-345.736252 390.882507 m
-458.838669 390.882507 l
-458.838669 504.401779 l
-345.736252 504.401779 l
-345.736252 390.882507 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-351.689011 396.835266 m
-452.885910 396.835266 l
-452.885910 498.449020 l
-351.689011 498.449020 l
-351.689011 396.835266 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-357.641769 402.788025 m
-446.933151 402.788025 l
-446.933151 415.570251 l
-357.641769 415.570251 l
-357.641769 402.788025 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-357.641769 421.523010 m
-446.933151 421.523010 l
-446.933151 435.614792 l
-357.641769 435.614792 l
-357.641769 421.523010 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-357.641769 441.567551 m
-446.933151 441.567551 l
-446.933151 456.422806 l
-357.641769 456.422806 l
-357.641769 441.567551 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-357.641769 462.375565 m
-446.933151 462.375565 l
-446.933151 474.731537 l
-357.641769 474.731537 l
-357.641769 462.375565 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-357.641769 480.684296 m
-446.933151 480.684296 l
-446.933151 492.496262 l
-357.641769 492.496262 l
-357.641769 480.684296 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-243.770309 488.836456 m
-356.872726 488.836456 l
-356.872726 581.632462 l
-243.770309 581.632462 l
-243.770309 488.836456 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-249.723068 494.789215 m
-350.919968 494.789215 l
-350.919968 575.679703 l
-249.723068 575.679703 l
-249.723068 494.789215 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.675827 500.741974 m
-344.967209 500.741974 l
-344.967209 514.566864 l
-255.675827 514.566864 l
-255.675827 500.741974 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.675827 520.519623 m
-344.967209 520.519623 l
-344.967209 532.126160 l
-255.675827 532.126160 l
-255.675827 520.519623 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.675827 538.078918 m
-344.967209 538.078918 l
-344.967209 552.282242 l
-255.675827 552.282242 l
-255.675827 538.078918 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-255.675827 558.235001 m
-344.967209 558.235001 l
-344.967209 569.726944 l
-255.675827 569.726944 l
-255.675827 558.235001 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-298.909256 507.807663 m
-412.011673 507.807663 l
-412.011673 619.512436 l
-298.909256 619.512436 l
-298.909256 507.807663 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-304.862015 513.760422 m
-406.058914 513.760422 l
-406.058914 613.559677 l
-304.862015 613.559677 l
-304.862015 513.760422 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-310.814774 519.713181 m
-400.106155 519.713181 l
-400.106155 533.448334 l
-310.814774 533.448334 l
-310.814774 519.713181 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-310.814774 539.401093 m
-400.106155 539.401093 l
-400.106155 552.559769 l
-310.814774 552.559769 l
-310.814774 539.401093 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-310.814774 558.512527 m
-400.106155 558.512527 l
-400.106155 570.427582 l
-310.814774 570.427582 l
-310.814774 558.512527 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-310.814774 576.380341 m
-400.106155 576.380341 l
-400.106155 590.908890 l
-310.814774 590.908890 l
-310.814774 576.380341 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-310.814774 596.861649 m
-400.106155 596.861649 l
-400.106155 607.606918 l
-310.814774 607.606918 l
-310.814774 596.861649 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-510.290649 743.430374 m
-623.393066 743.430374 l
-623.393066 856.316742 l
-510.290649 856.316742 l
-510.290649 743.430374 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-516.243408 749.383133 m
-617.440308 749.383133 l
-617.440308 850.363983 l
-516.243408 850.363983 l
-516.243408 749.383133 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-522.196167 755.335892 m
-611.487549 755.335892 l
-611.487549 769.718323 l
-522.196167 769.718323 l
-522.196167 755.335892 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-522.196167 775.671082 m
-611.487549 775.671082 l
-611.487549 786.702179 l
-522.196167 786.702179 l
-522.196167 775.671082 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-522.196167 792.654938 m
-611.487549 792.654938 l
-611.487549 807.436264 l
-522.196167 807.436264 l
-522.196167 792.654938 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-522.196167 813.389023 m
-611.487549 813.389023 l
-611.487549 824.567276 l
-522.196167 824.567276 l
-522.196167 813.389023 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-522.196167 830.520035 m
-611.487549 830.520035 l
-611.487549 844.411224 l
-522.196167 844.411224 l
-522.196167 830.520035 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-365.506760 383.547134 m
-478.609177 383.547134 l
-478.609177 490.158371 l
-365.506760 490.158371 l
-365.506760 383.547134 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-371.459518 389.499893 m
-472.656418 389.499893 l
-472.656418 484.205612 l
-371.459518 484.205612 l
-371.459518 389.499893 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.412277 395.452652 m
-466.703659 395.452652 l
-466.703659 406.387741 l
-377.412277 406.387741 l
-377.412277 395.452652 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.412277 412.340500 m
-466.703659 412.340500 l
-466.703659 425.175583 l
-377.412277 425.175583 l
-377.412277 412.340500 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.412277 431.128342 m
-466.703659 431.128342 l
-466.703659 443.722153 l
-377.412277 443.722153 l
-377.412277 431.128342 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.412277 449.674911 m
-466.703659 449.674911 l
-466.703659 461.508301 l
-377.412277 461.508301 l
-377.412277 449.674911 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-377.412277 467.461060 m
-466.703659 467.461060 l
-466.703659 478.252853 l
-377.412277 478.252853 l
-377.412277 467.461060 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-267.217834 261.194885 m
-380.320251 261.194885 l
-380.320251 351.519958 l
-267.217834 351.519958 l
-267.217834 261.194885 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-273.170593 267.147644 m
-374.367493 267.147644 l
-374.367493 345.567200 l
-273.170593 345.567200 l
-273.170593 267.147644 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.123352 273.100403 m
-368.414734 273.100403 l
-368.414734 285.753906 l
-279.123352 285.753906 l
-279.123352 273.100403 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.123352 291.706665 m
-368.414734 291.706665 l
-368.414734 302.321304 l
-279.123352 302.321304 l
-279.123352 291.706665 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.123352 308.274063 m
-368.414734 308.274063 l
-368.414734 319.315445 l
-279.123352 319.315445 l
-279.123352 308.274063 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.123352 325.268204 m
-368.414734 325.268204 l
-368.414734 339.614441 l
-279.123352 339.614441 l
-279.123352 325.268204 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-44.809753 684.873276 m
-157.912170 684.873276 l
-157.912170 775.507721 l
-44.809753 775.507721 l
-44.809753 684.873276 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-50.762512 690.826035 m
-151.959412 690.826035 l
-151.959412 769.554962 l
-50.762512 769.554962 l
-50.762512 690.826035 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-56.715271 696.778793 m
-146.006653 696.778793 l
-146.006653 709.261292 l
-56.715271 709.261292 l
-56.715271 696.778793 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-56.715271 715.214050 m
-146.006653 715.214050 l
-146.006653 728.754150 l
-56.715271 728.754150 l
-56.715271 715.214050 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-56.715271 734.706909 m
-146.006653 734.706909 l
-146.006653 745.930573 l
-56.715271 745.930573 l
-56.715271 734.706909 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-56.715271 751.883331 m
-146.006653 751.883331 l
-146.006653 763.602203 l
-56.715271 763.602203 l
-56.715271 751.883331 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-398.609009 787.482346 m
-511.711426 787.482346 l
-511.711426 878.162491 l
-398.609009 878.162491 l
-398.609009 787.482346 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-404.561768 793.435104 m
-505.758667 793.435104 l
-505.758667 872.209732 l
-404.561768 872.209732 l
-404.561768 793.435104 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-410.514526 799.387863 m
-499.805908 799.387863 l
-499.805908 812.838303 l
-410.514526 812.838303 l
-410.514526 799.387863 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-410.514526 818.791061 m
-499.805908 818.791061 l
-499.805908 830.189102 l
-410.514526 830.189102 l
-410.514526 818.791061 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-410.514526 836.141861 m
-499.805908 836.141861 l
-499.805908 846.759384 l
-410.514526 846.759384 l
-410.514526 836.141861 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-410.514526 852.712143 m
-499.805908 852.712143 l
-499.805908 866.256973 l
-410.514526 866.256973 l
-410.514526 852.712143 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-421.594574 295.751434 m
-534.696991 295.751434 l
-534.696991 390.029465 l
-421.594574 390.029465 l
-421.594574 295.751434 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-427.547333 301.704193 m
-528.744232 301.704193 l
-528.744232 384.076706 l
-427.547333 384.076706 l
-427.547333 301.704193 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-433.500092 307.656952 m
-522.791473 307.656952 l
-522.791473 321.017914 l
-433.500092 321.017914 l
-433.500092 307.656952 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-433.500092 326.970673 m
-522.791473 326.970673 l
-522.791473 340.727661 l
-433.500092 340.727661 l
-433.500092 326.970673 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-433.500092 346.680420 m
-522.791473 346.680420 l
-522.791473 358.251541 l
-433.500092 358.251541 l
-433.500092 346.680420 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-433.500092 364.204300 m
-522.791473 364.204300 l
-522.791473 378.123947 l
-433.500092 378.123947 l
-433.500092 364.204300 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-75.241531 33.609421 m
-188.343948 33.609421 l
-188.343948 126.387894 l
-75.241531 126.387894 l
-75.241531 33.609421 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-81.194290 39.562180 m
-182.391190 39.562180 l
-182.391190 120.435135 l
-81.194290 120.435135 l
-81.194290 39.562180 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.147049 45.514938 m
-176.438431 45.514938 l
-176.438431 59.430756 l
-87.147049 59.430756 l
-87.147049 45.514938 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.147049 65.383514 m
-176.438431 65.383514 l
-176.438431 78.848404 l
-87.147049 78.848404 l
-87.147049 65.383514 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.147049 84.801163 m
-176.438431 84.801163 l
-176.438431 95.742447 l
-87.147049 95.742447 l
-87.147049 84.801163 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.147049 101.695206 m
-176.438431 101.695206 l
-176.438431 114.482376 l
-87.147049 114.482376 l
-87.147049 101.695206 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-384.984955 -45.585312 m
-498.087372 -45.585312 l
-498.087372 65.437653 l
-384.984955 65.437653 l
-384.984955 -45.585312 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-390.937714 -39.632553 m
-492.134613 -39.632553 l
-492.134613 59.484894 l
-390.937714 59.484894 l
-390.937714 -39.632553 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.890472 -33.679794 m
-486.181854 -33.679794 l
-486.181854 -21.780792 l
-396.890472 -21.780792 l
-396.890472 -33.679794 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.890472 -15.828033 m
-486.181854 -15.828033 l
-486.181854 -2.706879 l
-396.890472 -2.706879 l
-396.890472 -15.828033 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.890472 3.245880 m
-486.181854 3.245880 l
-486.181854 17.165848 l
-396.890472 17.165848 l
-396.890472 3.245880 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.890472 23.118607 m
-486.181854 23.118607 l
-486.181854 37.024200 l
-396.890472 37.024200 l
-396.890472 23.118607 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.890472 42.976959 m
-486.181854 42.976959 l
-486.181854 53.532135 l
-396.890472 53.532135 l
-396.890472 42.976959 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-439.025772 514.403458 m
-552.128189 514.403458 l
-552.128189 608.912170 l
-439.025772 608.912170 l
-439.025772 514.403458 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-444.978531 520.356216 m
-546.175430 520.356216 l
-546.175430 602.959412 l
-444.978531 602.959412 l
-444.978531 520.356216 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.931290 526.308975 m
-540.222672 526.308975 l
-540.222672 539.436447 l
-450.931290 539.436447 l
-450.931290 526.308975 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.931290 545.389206 m
-540.222672 545.389206 l
-540.222672 556.252884 l
-450.931290 556.252884 l
-450.931290 545.389206 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.931290 562.205643 m
-540.222672 562.205643 l
-540.222672 577.008362 l
-450.931290 577.008362 l
-450.931290 562.205643 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.931290 582.961121 m
-540.222672 582.961121 l
-540.222672 597.006653 l
-450.931290 597.006653 l
-450.931290 582.961121 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-210.203568 338.601089 m
-323.305984 338.601089 l
-323.305984 451.881683 l
-210.203568 451.881683 l
-210.203568 338.601089 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-216.156326 344.553848 m
-317.353226 344.553848 l
-317.353226 445.928925 l
-216.156326 445.928925 l
-216.156326 344.553848 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.109085 350.506607 m
-311.400467 350.506607 l
-311.400467 364.631363 l
-222.109085 364.631363 l
-222.109085 350.506607 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.109085 370.584122 m
-311.400467 370.584122 l
-311.400467 383.916183 l
-222.109085 383.916183 l
-222.109085 370.584122 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.109085 389.868942 m
-311.400467 389.868942 l
-311.400467 403.873535 l
-222.109085 403.873535 l
-222.109085 389.868942 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.109085 409.826294 m
-311.400467 409.826294 l
-311.400467 422.666290 l
-222.109085 422.666290 l
-222.109085 409.826294 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.109085 428.619049 m
-311.400467 428.619049 l
-311.400467 439.976166 l
-222.109085 439.976166 l
-222.109085 428.619049 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-274.571335 401.472702 m
-387.673752 401.472702 l
-387.673752 494.053452 l
-274.571335 494.053452 l
-274.571335 401.472702 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-280.524094 407.425461 m
-381.720993 407.425461 l
-381.720993 488.100693 l
-280.524094 488.100693 l
-280.524094 407.425461 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-286.476852 413.378220 m
-375.768234 413.378220 l
-375.768234 425.532776 l
-286.476852 425.532776 l
-286.476852 413.378220 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-286.476852 431.485535 m
-375.768234 431.485535 l
-375.768234 445.238876 l
-286.476852 445.238876 l
-286.476852 431.485535 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-286.476852 451.191635 m
-375.768234 451.191635 l
-375.768234 462.638092 l
-286.476852 462.638092 l
-286.476852 451.191635 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-286.476852 468.590851 m
-375.768234 468.590851 l
-375.768234 482.147934 l
-286.476852 482.147934 l
-286.476852 468.590851 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-161.018417 379.604263 m
-274.120834 379.604263 l
-274.120834 477.332458 l
-161.018417 477.332458 l
-161.018417 379.604263 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-166.971176 385.557022 m
-268.168076 385.557022 l
-268.168076 471.379700 l
-166.971176 471.379700 l
-166.971176 385.557022 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-172.923935 391.509781 m
-262.215317 391.509781 l
-262.215317 405.512909 l
-172.923935 405.512909 l
-172.923935 391.509781 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-172.923935 411.465668 m
-262.215317 411.465668 l
-262.215317 425.982681 l
-172.923935 425.982681 l
-172.923935 411.465668 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-172.923935 431.935440 m
-262.215317 431.935440 l
-262.215317 444.653534 l
-172.923935 444.653534 l
-172.923935 431.935440 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-172.923935 450.606293 m
-262.215317 450.606293 l
-262.215317 465.426941 l
-172.923935 465.426941 l
-172.923935 450.606293 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-342.797058 611.350983 m
-455.899475 611.350983 l
-455.899475 701.844910 l
-342.797058 701.844910 l
-342.797058 611.350983 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-348.749817 617.303741 m
-449.946716 617.303741 l
-449.946716 695.892151 l
-348.749817 695.892151 l
-348.749817 617.303741 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-354.702576 623.256500 m
-443.993958 623.256500 l
-443.993958 635.107010 l
-354.702576 635.107010 l
-354.702576 623.256500 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-354.702576 641.059769 m
-443.993958 641.059769 l
-443.993958 654.478714 l
-354.702576 654.478714 l
-354.702576 641.059769 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-354.702576 660.431473 m
-443.993958 660.431473 l
-443.993958 673.422684 l
-354.702576 673.422684 l
-354.702576 660.431473 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-354.702576 679.375443 m
-443.993958 679.375443 l
-443.993958 689.939392 l
-354.702576 689.939392 l
-354.702576 679.375443 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-519.931976 458.721878 m
-633.034393 458.721878 l
-633.034393 572.642776 l
-519.931976 572.642776 l
-519.931976 458.721878 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-525.884735 464.674637 m
-627.081635 464.674637 l
-627.081635 566.690018 l
-525.884735 566.690018 l
-525.884735 464.674637 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.837494 470.627396 m
-621.128876 470.627396 l
-621.128876 483.599777 l
-531.837494 483.599777 l
-531.837494 470.627396 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.837494 489.552536 m
-621.128876 489.552536 l
-621.128876 503.419357 l
-531.837494 503.419357 l
-531.837494 489.552536 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.837494 509.372116 m
-621.128876 509.372116 l
-621.128876 523.149628 l
-531.837494 523.149628 l
-531.837494 509.372116 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.837494 529.102386 m
-621.128876 529.102386 l
-621.128876 540.272034 l
-531.837494 540.272034 l
-531.837494 529.102386 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.837494 546.224792 m
-621.128876 546.224792 l
-621.128876 560.737259 l
-531.837494 560.737259 l
-531.837494 546.224792 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-276.346909 581.881577 m
-389.449326 581.881577 l
-389.449326 691.681229 l
-276.346909 691.681229 l
-276.346909 581.881577 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-282.299667 587.834335 m
-383.496567 587.834335 l
-383.496567 685.728470 l
-282.299667 685.728470 l
-282.299667 587.834335 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-288.252426 593.787094 m
-377.543808 593.787094 l
-377.543808 608.325302 l
-288.252426 608.325302 l
-288.252426 593.787094 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-288.252426 614.278061 m
-377.543808 614.278061 l
-377.543808 624.808762 l
-288.252426 624.808762 l
-288.252426 614.278061 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-288.252426 630.761520 m
-377.543808 630.761520 l
-377.543808 642.257812 l
-288.252426 642.257812 l
-288.252426 630.761520 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-288.252426 648.210571 m
-377.543808 648.210571 l
-377.543808 662.120285 l
-288.252426 662.120285 l
-288.252426 648.210571 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-288.252426 668.073044 m
-377.543808 668.073044 l
-377.543808 679.775711 l
-288.252426 679.775711 l
-288.252426 668.073044 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-194.062622 580.912155 m
-307.165039 580.912155 l
-307.165039 691.540863 l
-194.062622 691.540863 l
-194.062622 580.912155 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-200.015381 586.864914 m
-301.212280 586.864914 l
-301.212280 685.588104 l
-200.015381 685.588104 l
-200.015381 586.864914 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-205.968140 592.817673 m
-295.259521 592.817673 l
-295.259521 606.312347 l
-205.968140 606.312347 l
-205.968140 592.817673 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-205.968140 612.265106 m
-295.259521 612.265106 l
-295.259521 626.867630 l
-205.968140 626.867630 l
-205.968140 612.265106 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-205.968140 632.820389 m
-295.259521 632.820389 l
-295.259521 643.738419 l
-205.968140 643.738419 l
-205.968140 632.820389 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-205.968140 649.691177 m
-295.259521 649.691177 l
-295.259521 662.987640 l
-205.968140 662.987640 l
-205.968140 649.691177 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-205.968140 668.940399 m
-295.259521 668.940399 l
-295.259521 679.635345 l
-205.968140 679.635345 l
-205.968140 668.940399 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-47.066849 85.471008 m
-160.169266 85.471008 l
-160.169266 202.590973 l
-47.066849 202.590973 l
-47.066849 85.471008 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-53.019608 91.423767 m
-154.216507 91.423767 l
-154.216507 196.638214 l
-53.019608 196.638214 l
-53.019608 91.423767 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-58.972366 97.376526 m
-148.263748 97.376526 l
-148.263748 110.227325 l
-58.972366 110.227325 l
-58.972366 97.376526 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-58.972366 116.180084 m
-148.263748 116.180084 l
-148.263748 129.982315 l
-58.972366 129.982315 l
-58.972366 116.180084 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-58.972366 135.935074 m
-148.263748 135.935074 l
-148.263748 150.768311 l
-58.972366 150.768311 l
-58.972366 135.935074 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-58.972366 156.721069 m
-148.263748 156.721069 l
-148.263748 170.903290 l
-58.972366 170.903290 l
-58.972366 156.721069 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-58.972366 176.856049 m
-148.263748 176.856049 l
-148.263748 190.685455 l
-58.972366 190.685455 l
-58.972366 176.856049 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-403.381516 670.836395 m
-516.483932 670.836395 l
-516.483932 759.105057 l
-403.381516 759.105057 l
-403.381516 670.836395 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-409.334274 676.789154 m
-510.531174 676.789154 l
-510.531174 753.152298 l
-409.334274 753.152298 l
-409.334274 676.789154 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.287033 682.741913 m
-504.578415 682.741913 l
-504.578415 696.991196 l
-415.287033 696.991196 l
-415.287033 682.741913 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.287033 702.943954 m
-504.578415 702.943954 l
-504.578415 713.385757 l
-415.287033 713.385757 l
-415.287033 702.943954 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.287033 719.338516 m
-504.578415 719.338516 l
-504.578415 730.732346 l
-415.287033 730.732346 l
-415.287033 719.338516 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.287033 736.685104 m
-504.578415 736.685104 l
-504.578415 747.199539 l
-415.287033 747.199539 l
-415.287033 736.685104 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-267.647247 152.445374 m
-380.749664 152.445374 l
-380.749664 261.991150 l
-267.647247 261.991150 l
-267.647247 152.445374 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-273.600006 158.398132 m
-374.796906 158.398132 l
-374.796906 256.038391 l
-273.600006 256.038391 l
-273.600006 158.398132 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.552765 164.350891 m
-368.844147 164.350891 l
-368.844147 178.016708 l
-279.552765 178.016708 l
-279.552765 164.350891 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.552765 183.969467 m
-368.844147 183.969467 l
-368.844147 196.220352 l
-279.552765 196.220352 l
-279.552765 183.969467 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.552765 202.173111 m
-368.844147 202.173111 l
-368.844147 215.321457 l
-279.552765 215.321457 l
-279.552765 202.173111 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.552765 221.274216 m
-368.844147 221.274216 l
-368.844147 232.765381 l
-279.552765 232.765381 l
-279.552765 221.274216 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-279.552765 238.718140 m
-368.844147 238.718140 l
-368.844147 250.085632 l
-279.552765 250.085632 l
-279.552765 238.718140 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-54.620621 355.376038 m
-167.723038 355.376038 l
-167.723038 450.212021 l
-54.620621 450.212021 l
-54.620621 355.376038 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-60.573380 361.328796 m
-161.770279 361.328796 l
-161.770279 444.259262 l
-60.573380 444.259262 l
-60.573380 361.328796 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-66.526138 367.281555 m
-155.817520 367.281555 l
-155.817520 381.971207 l
-66.526138 381.971207 l
-66.526138 367.281555 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-66.526138 387.923965 m
-155.817520 387.923965 l
-155.817520 400.418350 l
-66.526138 400.418350 l
-66.526138 387.923965 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-66.526138 406.371109 m
-155.817520 406.371109 l
-155.817520 417.776718 l
-66.526138 417.776718 l
-66.526138 406.371109 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-66.526138 423.729477 m
-155.817520 423.729477 l
-155.817520 438.306503 l
-66.526138 438.306503 l
-66.526138 423.729477 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-145.868652 255.034332 m
-258.971069 255.034332 l
-258.971069 347.869446 l
-145.868652 347.869446 l
-145.868652 255.034332 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-151.821411 260.987091 m
-253.018311 260.987091 l
-253.018311 341.916687 l
-151.821411 341.916687 l
-151.821411 260.987091 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.774170 266.939850 m
-247.065552 266.939850 l
-247.065552 279.139099 l
-157.774170 279.139099 l
-157.774170 266.939850 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.774170 285.091858 m
-247.065552 285.091858 l
-247.065552 298.567017 l
-157.774170 298.567017 l
-157.774170 285.091858 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.774170 304.519775 m
-247.065552 304.519775 l
-247.065552 315.855423 l
-157.774170 315.855423 l
-157.774170 304.519775 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-157.774170 321.808182 m
-247.065552 321.808182 l
-247.065552 335.963928 l
-157.774170 335.963928 l
-157.774170 321.808182 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-403.324478 105.760452 m
-516.426895 105.760452 l
-516.426895 216.614029 l
-403.324478 216.614029 l
-403.324478 105.760452 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-409.277237 111.713211 m
-510.474136 111.713211 l
-510.474136 210.661270 l
-409.277237 210.661270 l
-409.277237 111.713211 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.229996 117.665970 m
-504.521378 117.665970 l
-504.521378 129.433884 l
-415.229996 129.433884 l
-415.229996 117.665970 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.229996 135.386642 m
-504.521378 135.386642 l
-504.521378 149.961578 l
-415.229996 149.961578 l
-415.229996 135.386642 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.229996 155.914337 m
-504.521378 155.914337 l
-504.521378 170.277130 l
-415.229996 170.277130 l
-415.229996 155.914337 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.229996 176.229889 m
-504.521378 176.229889 l
-504.521378 186.981262 l
-415.229996 186.981262 l
-415.229996 176.229889 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.229996 192.934021 m
-504.521378 192.934021 l
-504.521378 204.708511 l
-415.229996 204.708511 l
-415.229996 192.934021 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-23.366440 117.500336 m
-136.468857 117.500336 l
-136.468857 208.948151 l
-23.366440 208.948151 l
-23.366440 117.500336 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-29.319199 123.453094 m
-130.516098 123.453094 l
-130.516098 202.995392 l
-29.319199 202.995392 l
-29.319199 123.453094 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-35.271957 129.405853 m
-124.563339 129.405853 l
-124.563339 140.162048 l
-35.271957 140.162048 l
-35.271957 129.405853 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-35.271957 146.114807 m
-124.563339 146.114807 l
-124.563339 158.778717 l
-35.271957 158.778717 l
-35.271957 146.114807 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-35.271957 164.731476 m
-124.563339 164.731476 l
-124.563339 176.895203 l
-35.271957 176.895203 l
-35.271957 164.731476 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-35.271957 182.847961 m
-124.563339 182.847961 l
-124.563339 197.042633 l
-35.271957 197.042633 l
-35.271957 182.847961 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-189.052139 630.050598 m
-302.154556 630.050598 l
-302.154556 734.551407 l
-189.052139 734.551407 l
-189.052139 630.050598 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-195.004898 636.003357 m
-296.201797 636.003357 l
-296.201797 728.598648 l
-195.004898 728.598648 l
-195.004898 636.003357 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-200.957657 641.956116 m
-290.249039 641.956116 l
-290.249039 653.088257 l
-200.957657 653.088257 l
-200.957657 641.956116 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-200.957657 659.041016 m
-290.249039 659.041016 l
-290.249039 669.777390 l
-200.957657 669.777390 l
-200.957657 659.041016 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-200.957657 675.730148 m
-290.249039 675.730148 l
-290.249039 688.394394 l
-200.957657 688.394394 l
-200.957657 675.730148 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-200.957657 694.347153 m
-290.249039 694.347153 l
-290.249039 705.146942 l
-200.957657 705.146942 l
-200.957657 694.347153 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-200.957657 711.099701 m
-290.249039 711.099701 l
-290.249039 722.645889 l
-200.957657 722.645889 l
-200.957657 711.099701 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--26.660614 32.173859 m
-86.441803 32.173859 l
-86.441803 143.776337 l
--26.660614 143.776337 l
--26.660614 32.173859 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--20.707855 38.126617 m
-80.489044 38.126617 l
-80.489044 137.823578 l
--20.707855 137.823578 l
--20.707855 38.126617 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--14.755096 44.079376 m
-74.536285 44.079376 l
-74.536285 56.683273 l
--14.755096 56.683273 l
--14.755096 44.079376 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--14.755096 62.636032 m
-74.536285 62.636032 l
-74.536285 76.946396 l
--14.755096 76.946396 l
--14.755096 62.636032 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--14.755096 82.899155 m
-74.536285 82.899155 l
-74.536285 96.908661 l
--14.755096 96.908661 l
--14.755096 82.899155 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--14.755096 102.861420 m
-74.536285 102.861420 l
-74.536285 114.998932 l
--14.755096 114.998932 l
--14.755096 102.861420 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--14.755096 120.951691 m
-74.536285 120.951691 l
-74.536285 131.870819 l
--14.755096 131.870819 l
--14.755096 120.951691 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-496.247696 423.701202 m
-609.350113 423.701202 l
-609.350113 535.549759 l
-496.247696 535.549759 l
-496.247696 423.701202 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-502.200455 429.653961 m
-603.397354 429.653961 l
-603.397354 529.597000 l
-502.200455 529.597000 l
-502.200455 429.653961 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.153214 435.606720 m
-597.444595 435.606720 l
-597.444595 446.307693 l
-508.153214 446.307693 l
-508.153214 435.606720 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.153214 452.260452 m
-597.444595 452.260452 l
-597.444595 465.643204 l
-508.153214 465.643204 l
-508.153214 452.260452 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.153214 471.595963 m
-597.444595 471.595963 l
-597.444595 484.357574 l
-508.153214 484.357574 l
-508.153214 471.595963 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.153214 490.310333 m
-597.444595 490.310333 l
-597.444595 503.094971 l
-508.153214 503.094971 l
-508.153214 490.310333 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.153214 509.047729 m
-597.444595 509.047729 l
-597.444595 523.644241 l
-508.153214 523.644241 l
-508.153214 509.047729 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--9.299744 260.265884 m
-103.802673 260.265884 l
-103.802673 370.178391 l
--9.299744 370.178391 l
--9.299744 260.265884 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--3.346985 266.218643 m
-97.849915 266.218643 l
-97.849915 364.225632 l
--3.346985 364.225632 l
--3.346985 266.218643 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-2.605774 272.171402 m
-91.897156 272.171402 l
-91.897156 286.119461 l
-2.605774 286.119461 l
-2.605774 272.171402 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-2.605774 292.072220 m
-91.897156 292.072220 l
-91.897156 304.544937 l
-2.605774 304.544937 l
-2.605774 292.072220 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-2.605774 310.497696 m
-91.897156 310.497696 l
-91.897156 323.348923 l
-2.605774 323.348923 l
-2.605774 310.497696 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-2.605774 329.301682 m
-91.897156 329.301682 l
-91.897156 339.945175 l
-2.605774 339.945175 l
-2.605774 329.301682 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-2.605774 345.897934 m
-91.897156 345.897934 l
-91.897156 358.272873 l
-2.605774 358.272873 l
-2.605774 345.897934 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-455.229355 366.361343 m
-568.331772 366.361343 l
-568.331772 474.369217 l
-455.229355 474.369217 l
-455.229355 366.361343 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-461.182114 372.314102 m
-562.379013 372.314102 l
-562.379013 468.416458 l
-461.182114 468.416458 l
-461.182114 372.314102 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-467.134872 378.266861 m
-556.426254 378.266861 l
-556.426254 391.881958 l
-467.134872 391.881958 l
-467.134872 378.266861 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-467.134872 397.834717 m
-556.426254 397.834717 l
-556.426254 408.816330 l
-467.134872 408.816330 l
-467.134872 397.834717 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-467.134872 414.769089 m
-556.426254 414.769089 l
-556.426254 426.157166 l
-467.134872 426.157166 l
-467.134872 414.769089 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-467.134872 432.109924 m
-556.426254 432.109924 l
-556.426254 443.007553 l
-467.134872 443.007553 l
-467.134872 432.109924 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-467.134872 448.960312 m
-556.426254 448.960312 l
-556.426254 462.463699 l
-467.134872 462.463699 l
-467.134872 448.960312 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-489.149811 -37.620255 m
-602.252228 -37.620255 l
-602.252228 72.748550 l
-489.149811 72.748550 l
-489.149811 -37.620255 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-495.102570 -31.667496 m
-596.299469 -31.667496 l
-596.299469 66.795792 l
-495.102570 66.795792 l
-495.102570 -31.667496 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.055328 -25.714737 m
-590.346710 -25.714737 l
-590.346710 -12.234360 l
-501.055328 -12.234360 l
-501.055328 -25.714737 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.055328 -6.281601 m
-590.346710 -6.281601 l
-590.346710 4.543365 l
-501.055328 4.543365 l
-501.055328 -6.281601 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.055328 10.496124 m
-590.346710 10.496124 l
-590.346710 21.079956 l
-501.055328 21.079956 l
-501.055328 10.496124 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.055328 27.032715 m
-590.346710 27.032715 l
-590.346710 40.161865 l
-501.055328 40.161865 l
-501.055328 27.032715 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-501.055328 46.114624 m
-590.346710 46.114624 l
-590.346710 60.843033 l
-501.055328 60.843033 l
-501.055328 46.114624 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-502.261017 69.317749 m
-615.363434 69.317749 l
-615.363434 165.991577 l
-502.261017 165.991577 l
-502.261017 69.317749 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-508.213776 75.270508 m
-609.410675 75.270508 l
-609.410675 160.038818 l
-508.213776 160.038818 l
-508.213776 75.270508 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-514.166534 81.223267 m
-603.457916 81.223267 l
-603.457916 93.421402 l
-514.166534 93.421402 l
-514.166534 81.223267 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-514.166534 99.374161 m
-603.457916 99.374161 l
-603.457916 113.866776 l
-514.166534 113.866776 l
-514.166534 99.374161 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-514.166534 119.819534 m
-603.457916 119.819534 l
-603.457916 133.326996 l
-514.166534 133.326996 l
-514.166534 119.819534 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-514.166534 139.279755 m
-603.457916 139.279755 l
-603.457916 154.086060 l
-514.166534 154.086060 l
-514.166534 139.279755 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-340.076599 758.249634 m
-453.179016 758.249634 l
-453.179016 870.370407 l
-340.076599 870.370407 l
-340.076599 758.249634 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-346.029358 764.202393 m
-447.226257 764.202393 l
-447.226257 864.417648 l
-346.029358 864.417648 l
-346.029358 764.202393 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.982117 770.155151 m
-441.273499 770.155151 l
-441.273499 784.147110 l
-351.982117 784.147110 l
-351.982117 770.155151 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.982117 790.099869 m
-441.273499 790.099869 l
-441.273499 800.710999 l
-351.982117 800.710999 l
-351.982117 790.099869 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.982117 806.663757 m
-441.273499 806.663757 l
-441.273499 821.126877 l
-351.982117 821.126877 l
-351.982117 806.663757 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.982117 827.079636 m
-441.273499 827.079636 l
-441.273499 837.773529 l
-351.982117 837.773529 l
-351.982117 827.079636 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.982117 843.726288 m
-441.273499 843.726288 l
-441.273499 858.464890 l
-351.982117 858.464890 l
-351.982117 843.726288 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--45.421799 60.094574 m
-67.680618 60.094574 l
-67.680618 150.908371 l
--45.421799 150.908371 l
--45.421799 60.094574 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--39.469040 66.047333 m
-61.727859 66.047333 l
-61.727859 144.955612 l
--39.469040 144.955612 l
--39.469040 66.047333 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.516281 72.000092 m
-55.775101 72.000092 l
-55.775101 82.942368 l
--33.516281 82.942368 l
--33.516281 72.000092 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.516281 88.895126 m
-55.775101 88.895126 l
-55.775101 99.803970 l
--33.516281 99.803970 l
--33.516281 88.895126 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.516281 105.756729 m
-55.775101 105.756729 l
-55.775101 119.941528 l
--33.516281 119.941528 l
--33.516281 105.756729 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.516281 125.894287 m
-55.775101 125.894287 l
-55.775101 139.002853 l
--33.516281 139.002853 l
--33.516281 125.894287 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-89.775833 128.392197 m
-202.878250 128.392197 l
-202.878250 219.436218 l
-89.775833 219.436218 l
-89.775833 128.392197 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-95.728592 134.344955 m
-196.925491 134.344955 l
-196.925491 213.483459 l
-95.728592 213.483459 l
-95.728592 134.344955 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-101.681351 140.297714 m
-190.972733 140.297714 l
-190.972733 152.149765 l
-101.681351 152.149765 l
-101.681351 140.297714 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-101.681351 158.102524 m
-190.972733 158.102524 l
-190.972733 169.911591 l
-101.681351 169.911591 l
-101.681351 158.102524 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-101.681351 175.864349 m
-190.972733 175.864349 l
-190.972733 188.524857 l
-101.681351 188.524857 l
-101.681351 175.864349 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-101.681351 194.477615 m
-190.972733 194.477615 l
-190.972733 207.530701 l
-101.681351 207.530701 l
-101.681351 194.477615 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-288.001282 745.825287 m
-401.103699 745.825287 l
-401.103699 833.924210 l
-288.001282 833.924210 l
-288.001282 745.825287 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-293.954041 751.778046 m
-395.150940 751.778046 l
-395.150940 827.971451 l
-293.954041 827.971451 l
-293.954041 751.778046 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-299.906799 757.730804 m
-389.198181 757.730804 l
-389.198181 769.967468 l
-299.906799 769.967468 l
-299.906799 757.730804 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-299.906799 775.920227 m
-389.198181 775.920227 l
-389.198181 788.213348 l
-299.906799 788.213348 l
-299.906799 775.920227 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-299.906799 794.166107 m
-389.198181 794.166107 l
-389.198181 804.995148 l
-299.906799 804.995148 l
-299.906799 794.166107 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-299.906799 810.947906 m
-389.198181 810.947906 l
-389.198181 822.018692 l
-299.906799 822.018692 l
-299.906799 810.947906 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--3.827103 -22.790192 m
-109.275314 -22.790192 l
-109.275314 69.551498 l
--3.827103 69.551498 l
--3.827103 -22.790192 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-2.125656 -16.837433 m
-103.322556 -16.837433 l
-103.322556 63.598740 l
-2.125656 63.598740 l
-2.125656 -16.837433 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-8.078415 -10.884674 m
-97.369797 -10.884674 l
-97.369797 -0.099808 l
-8.078415 -0.099808 l
-8.078415 -10.884674 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-8.078415 5.852951 m
-97.369797 5.852951 l
-97.369797 18.214050 l
-8.078415 18.214050 l
-8.078415 5.852951 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-8.078415 24.166809 m
-97.369797 24.166809 l
-97.369797 38.680054 l
-8.078415 38.680054 l
-8.078415 24.166809 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-8.078415 44.632812 m
-97.369797 44.632812 l
-97.369797 57.645981 l
-8.078415 57.645981 l
-8.078415 44.632812 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-183.622086 199.116486 m
-296.724503 199.116486 l
-296.724503 304.913010 l
-183.622086 304.913010 l
-183.622086 199.116486 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-189.574844 205.069244 m
-290.771744 205.069244 l
-290.771744 298.960251 l
-189.574844 298.960251 l
-189.574844 205.069244 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.527603 211.022003 m
-284.818985 211.022003 l
-284.818985 222.865753 l
-195.527603 222.865753 l
-195.527603 211.022003 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.527603 228.818512 m
-284.818985 228.818512 l
-284.818985 241.639481 l
-195.527603 241.639481 l
-195.527603 228.818512 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.527603 247.592239 m
-284.818985 247.592239 l
-284.818985 258.847046 l
-195.527603 258.847046 l
-195.527603 247.592239 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.527603 264.799805 m
-284.818985 264.799805 l
-284.818985 276.075394 l
-195.527603 276.075394 l
-195.527603 264.799805 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.527603 282.028152 m
-284.818985 282.028152 l
-284.818985 293.007492 l
-195.527603 293.007492 l
-195.527603 282.028152 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-98.036835 464.065598 m
-211.139252 464.065598 l
-211.139252 572.525391 l
-98.036835 572.525391 l
-98.036835 464.065598 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-103.989594 470.018356 m
-205.186493 470.018356 l
-205.186493 566.572632 l
-103.989594 566.572632 l
-103.989594 470.018356 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-109.942352 475.971115 m
-199.233734 475.971115 l
-199.233734 489.750320 l
-109.942352 489.750320 l
-109.942352 475.971115 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-109.942352 495.703079 m
-199.233734 495.703079 l
-199.233734 506.519455 l
-109.942352 506.519455 l
-109.942352 495.703079 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-109.942352 512.472214 m
-199.233734 512.472214 l
-199.233734 525.228104 l
-109.942352 525.228104 l
-109.942352 512.472214 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-109.942352 531.180862 m
-199.233734 531.180862 l
-199.233734 543.316147 l
-109.942352 543.316147 l
-109.942352 531.180862 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-109.942352 549.268906 m
-199.233734 549.268906 l
-199.233734 560.619873 l
-109.942352 560.619873 l
-109.942352 549.268906 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-391.979065 446.310608 m
-505.081482 446.310608 l
-505.081482 557.459869 l
-391.979065 557.459869 l
-391.979065 446.310608 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-397.931824 452.263367 m
-499.128723 452.263367 l
-499.128723 551.507111 l
-397.931824 551.507111 l
-397.931824 452.263367 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.884583 458.216125 m
-493.175964 458.216125 l
-493.175964 470.527939 l
-403.884583 470.527939 l
-403.884583 458.216125 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.884583 476.480698 m
-493.175964 476.480698 l
-493.175964 488.580429 l
-403.884583 488.580429 l
-403.884583 476.480698 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.884583 494.533188 m
-493.175964 494.533188 l
-493.175964 509.014069 l
-403.884583 509.014069 l
-403.884583 494.533188 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.884583 514.966827 m
-493.175964 514.966827 l
-493.175964 529.039993 l
-403.884583 529.039993 l
-403.884583 514.966827 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-403.884583 534.992752 m
-493.175964 534.992752 l
-493.175964 545.554352 l
-403.884583 545.554352 l
-403.884583 534.992752 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-308.805984 386.333252 m
-421.908401 386.333252 l
-421.908401 478.405258 l
-308.805984 478.405258 l
-308.805984 386.333252 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-314.758743 392.286011 m
-415.955643 392.286011 l
-415.955643 472.452499 l
-314.758743 472.452499 l
-314.758743 392.286011 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-320.711502 398.238770 m
-410.002884 398.238770 l
-410.002884 409.103241 l
-320.711502 409.103241 l
-320.711502 398.238770 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-320.711502 415.056000 m
-410.002884 415.056000 l
-410.002884 428.862396 l
-320.711502 428.862396 l
-320.711502 415.056000 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-320.711502 434.815155 m
-410.002884 434.815155 l
-410.002884 446.573471 l
-320.711502 446.573471 l
-320.711502 434.815155 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-320.711502 452.526230 m
-410.002884 452.526230 l
-410.002884 466.499741 l
-320.711502 466.499741 l
-320.711502 452.526230 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-451.111923 116.145142 m
-564.214340 116.145142 l
-564.214340 208.386505 l
-451.111923 208.386505 l
-451.111923 116.145142 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-457.064682 122.097900 m
-558.261581 122.097900 l
-558.261581 202.433746 l
-457.064682 202.433746 l
-457.064682 122.097900 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.017441 128.050659 m
-552.308823 128.050659 l
-552.308823 140.729568 l
-463.017441 140.729568 l
-463.017441 128.050659 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.017441 146.682327 m
-552.308823 146.682327 l
-552.308823 159.820709 l
-463.017441 159.820709 l
-463.017441 146.682327 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.017441 165.773468 m
-552.308823 165.773468 l
-552.308823 177.816330 l
-463.017441 177.816330 l
-463.017441 165.773468 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.017441 183.769089 m
-552.308823 183.769089 l
-552.308823 196.480988 l
-463.017441 196.480988 l
-463.017441 183.769089 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--38.531631 103.414963 m
-74.570786 103.414963 l
-74.570786 197.073410 l
--38.531631 197.073410 l
--38.531631 103.414963 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--32.578873 109.367722 m
-68.618027 109.367722 l
-68.618027 191.120651 l
--32.578873 191.120651 l
--32.578873 109.367722 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.626114 115.320480 m
-62.665268 115.320480 l
-62.665268 129.766891 l
--26.626114 129.766891 l
--26.626114 115.320480 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.626114 135.719650 m
-62.665268 135.719650 l
-62.665268 146.668320 l
--26.626114 146.668320 l
--26.626114 135.719650 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.626114 152.621078 m
-62.665268 152.621078 l
-62.665268 167.345551 l
--26.626114 167.345551 l
--26.626114 152.621078 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.626114 173.298309 m
-62.665268 173.298309 l
-62.665268 185.167892 l
--26.626114 185.167892 l
--26.626114 173.298309 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--12.758865 767.538193 m
-100.343552 767.538193 l
-100.343552 880.261795 l
--12.758865 880.261795 l
--12.758865 767.538193 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--6.806107 773.490952 m
-94.390793 773.490952 l
-94.390793 874.309036 l
--6.806107 874.309036 l
--6.806107 773.490952 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--0.853348 779.443710 m
-88.438034 779.443710 l
-88.438034 792.033997 l
--0.853348 792.033997 l
--0.853348 779.443710 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--0.853348 797.986755 m
-88.438034 797.986755 l
-88.438034 812.449936 l
--0.853348 812.449936 l
--0.853348 797.986755 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--0.853348 818.402695 m
-88.438034 818.402695 l
-88.438034 830.259598 l
--0.853348 830.259598 l
--0.853348 818.402695 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--0.853348 836.212357 m
-88.438034 836.212357 l
-88.438034 849.305466 l
--0.853348 849.305466 l
--0.853348 836.212357 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--0.853348 855.258224 m
-88.438034 855.258224 l
-88.438034 868.356277 l
--0.853348 868.356277 l
--0.853348 855.258224 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-528.505539 12.566437 m
-641.607956 12.566437 l
-641.607956 103.563889 l
-528.505539 103.563889 l
-528.505539 12.566437 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-534.458298 18.519196 m
-635.655197 18.519196 l
-635.655197 97.611130 l
-534.458298 97.611130 l
-534.458298 18.519196 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-540.411057 24.471954 m
-629.702438 24.471954 l
-629.702438 36.715546 l
-540.411057 36.715546 l
-540.411057 24.471954 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-540.411057 42.668304 m
-629.702438 42.668304 l
-629.702438 54.915161 l
-540.411057 54.915161 l
-540.411057 42.668304 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-540.411057 60.867920 m
-629.702438 60.867920 l
-629.702438 73.212402 l
-540.411057 73.212402 l
-540.411057 60.867920 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-540.411057 79.165161 m
-629.702438 79.165161 l
-629.702438 91.658371 l
-540.411057 91.658371 l
-540.411057 79.165161 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-393.635529 644.425049 m
-506.737946 644.425049 l
-506.737946 756.833389 l
-393.635529 756.833389 l
-393.635529 644.425049 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-399.588287 650.377808 m
-500.785187 650.377808 l
-500.785187 750.880630 l
-399.588287 750.880630 l
-399.588287 650.377808 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.541046 656.330566 m
-494.832428 656.330566 l
-494.832428 669.833450 l
-405.541046 669.833450 l
-405.541046 656.330566 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.541046 675.786209 m
-494.832428 675.786209 l
-494.832428 687.515701 l
-405.541046 687.515701 l
-405.541046 675.786209 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.541046 693.468460 m
-494.832428 693.468460 l
-494.832428 707.554886 l
-405.541046 707.554886 l
-405.541046 693.468460 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.541046 713.507645 m
-494.832428 713.507645 l
-494.832428 724.480774 l
-405.541046 724.480774 l
-405.541046 713.507645 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.541046 730.433533 m
-494.832428 730.433533 l
-494.832428 744.927872 l
-405.541046 744.927872 l
-405.541046 730.433533 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-221.435623 789.504654 m
-334.538040 789.504654 l
-334.538040 881.542938 l
-221.435623 881.542938 l
-221.435623 789.504654 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-227.388382 795.457413 m
-328.585281 795.457413 l
-328.585281 875.590179 l
-227.388382 875.590179 l
-227.388382 795.457413 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.341141 801.410172 m
-322.632523 801.410172 l
-322.632523 812.526794 l
-233.341141 812.526794 l
-233.341141 801.410172 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.341141 818.479553 m
-322.632523 818.479553 l
-322.632523 831.693817 l
-233.341141 831.693817 l
-233.341141 818.479553 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.341141 837.646576 m
-322.632523 837.646576 l
-322.632523 849.601639 l
-233.341141 849.601639 l
-233.341141 837.646576 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.341141 855.554398 m
-322.632523 855.554398 l
-322.632523 869.637421 l
-233.341141 869.637421 l
-233.341141 855.554398 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-470.041718 158.823669 m
-583.144135 158.823669 l
-583.144135 268.169876 l
-470.041718 268.169876 l
-470.041718 158.823669 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-475.994476 164.776428 m
-577.191376 164.776428 l
-577.191376 262.217117 l
-475.994476 262.217117 l
-475.994476 164.776428 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-481.947235 170.729187 m
-571.238617 170.729187 l
-571.238617 183.469131 l
-481.947235 183.469131 l
-481.947235 170.729187 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-481.947235 189.421890 m
-571.238617 189.421890 l
-571.238617 200.654327 l
-481.947235 200.654327 l
-481.947235 189.421890 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-481.947235 206.607086 m
-571.238617 206.607086 l
-571.238617 217.975388 l
-481.947235 217.975388 l
-481.947235 206.607086 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-481.947235 223.928146 m
-571.238617 223.928146 l
-571.238617 236.606354 l
-481.947235 236.606354 l
-481.947235 223.928146 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-481.947235 242.559113 m
-571.238617 242.559113 l
-571.238617 256.264359 l
-481.947235 256.264359 l
-481.947235 242.559113 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-272.388885 455.764328 m
-385.491302 455.764328 l
-385.491302 551.215714 l
-272.388885 551.215714 l
-272.388885 455.764328 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-278.341644 461.717087 m
-379.538544 461.717087 l
-379.538544 545.262955 l
-278.341644 545.262955 l
-278.341644 461.717087 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-284.294403 467.669846 m
-373.585785 467.669846 l
-373.585785 480.568436 l
-284.294403 480.568436 l
-284.294403 467.669846 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-284.294403 486.521194 m
-373.585785 486.521194 l
-373.585785 500.496460 l
-284.294403 500.496460 l
-284.294403 486.521194 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-284.294403 506.449219 m
-373.585785 506.449219 l
-373.585785 519.188553 l
-284.294403 519.188553 l
-284.294403 506.449219 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-284.294403 525.141312 m
-373.585785 525.141312 l
-373.585785 539.310196 l
-284.294403 539.310196 l
-284.294403 525.141312 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-20.330322 646.989243 m
-133.432739 646.989243 l
-133.432739 735.638855 l
-20.330322 735.638855 l
-20.330322 646.989243 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-26.283081 652.942001 m
-127.479980 652.942001 l
-127.479980 729.686096 l
-26.283081 729.686096 l
-26.283081 652.942001 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.235840 658.894760 m
-121.527222 658.894760 l
-121.527222 670.295197 l
-32.235840 670.295197 l
-32.235840 658.894760 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.235840 676.247955 m
-121.527222 676.247955 l
-121.527222 687.931900 l
-32.235840 687.931900 l
-32.235840 676.247955 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.235840 693.884659 m
-121.527222 693.884659 l
-121.527222 706.420090 l
-32.235840 706.420090 l
-32.235840 693.884659 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.235840 712.372849 m
-121.527222 712.372849 l
-121.527222 723.733337 l
-32.235840 723.733337 l
-32.235840 712.372849 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-377.487213 163.393860 m
-490.589630 163.393860 l
-490.589630 274.351105 l
-377.487213 274.351105 l
-377.487213 163.393860 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-383.439972 169.346619 m
-484.636871 169.346619 l
-484.636871 268.398346 l
-383.439972 268.398346 l
-383.439972 169.346619 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-389.392731 175.299377 m
-478.684113 175.299377 l
-478.684113 188.305801 l
-389.392731 188.305801 l
-389.392731 175.299377 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-389.392731 194.258560 m
-478.684113 194.258560 l
-478.684113 207.249863 l
-389.392731 207.249863 l
-389.392731 194.258560 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-389.392731 213.202621 m
-478.684113 213.202621 l
-478.684113 224.009964 l
-389.392731 224.009964 l
-389.392731 213.202621 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-389.392731 229.962723 m
-478.684113 229.962723 l
-478.684113 241.675339 l
-389.392731 241.675339 l
-389.392731 229.962723 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-389.392731 247.628098 m
-478.684113 247.628098 l
-478.684113 262.445587 l
-389.392731 262.445587 l
-389.392731 247.628098 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--4.837677 578.034698 m
-108.264740 578.034698 l
-108.264740 688.280670 l
--4.837677 688.280670 l
--4.837677 578.034698 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-1.115082 583.987457 m
-102.311981 583.987457 l
-102.311981 682.327911 l
-1.115082 682.327911 l
-1.115082 583.987457 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-7.067841 589.940216 m
-96.359222 589.940216 l
-96.359222 601.494995 l
-7.067841 601.494995 l
-7.067841 589.940216 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-7.067841 607.447754 m
-96.359222 607.447754 l
-96.359222 618.350357 l
-7.067841 618.350357 l
-7.067841 607.447754 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-7.067841 624.303116 m
-96.359222 624.303116 l
-96.359222 637.458374 l
-7.067841 637.458374 l
-7.067841 624.303116 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-7.067841 643.411133 m
-96.359222 643.411133 l
-96.359222 656.996674 l
-7.067841 656.996674 l
-7.067841 643.411133 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-7.067841 662.949432 m
-96.359222 662.949432 l
-96.359222 676.375153 l
-7.067841 676.375153 l
-7.067841 662.949432 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--5.817581 367.059937 m
-107.284836 367.059937 l
-107.284836 479.488358 l
--5.817581 479.488358 l
--5.817581 367.059937 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-0.135178 373.012695 m
-101.332077 373.012695 l
-101.332077 473.535599 l
-0.135178 473.535599 l
-0.135178 373.012695 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-6.087936 378.965454 m
-95.379318 378.965454 l
-95.379318 393.838821 l
-6.087936 393.838821 l
-6.087936 378.965454 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-6.087936 399.791580 m
-95.379318 399.791580 l
-95.379318 410.518585 l
-6.087936 410.518585 l
-6.087936 399.791580 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-6.087936 416.471344 m
-95.379318 416.471344 l
-95.379318 430.590530 l
-6.087936 430.590530 l
-6.087936 416.471344 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-6.087936 436.543289 m
-95.379318 436.543289 l
-95.379318 447.719818 l
-6.087936 447.719818 l
-6.087936 436.543289 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-6.087936 453.672577 m
-95.379318 453.672577 l
-95.379318 467.582840 l
-6.087936 467.582840 l
-6.087936 453.672577 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-127.305206 145.268951 m
-240.407623 145.268951 l
-240.407623 242.563919 l
-127.305206 242.563919 l
-127.305206 145.268951 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-133.257965 151.221710 m
-234.454865 151.221710 l
-234.454865 236.611160 l
-133.257965 236.611160 l
-133.257965 151.221710 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.210724 157.174469 m
-228.502106 157.174469 l
-228.502106 172.031799 l
-139.210724 172.031799 l
-139.210724 157.174469 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.210724 177.984558 m
-228.502106 177.984558 l
-228.502106 190.736847 l
-139.210724 190.736847 l
-139.210724 177.984558 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.210724 196.689606 m
-228.502106 196.689606 l
-228.502106 209.886002 l
-139.210724 209.886002 l
-139.210724 196.689606 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.210724 215.838760 m
-228.502106 215.838760 l
-228.502106 230.658401 l
-139.210724 230.658401 l
-139.210724 215.838760 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-28.699066 35.628845 m
-141.801483 35.628845 l
-141.801483 127.602127 l
-28.699066 127.602127 l
-28.699066 35.628845 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-34.651825 41.581604 m
-135.848724 41.581604 l
-135.848724 121.649368 l
-34.651825 121.649368 l
-34.651825 41.581604 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-40.604584 47.534363 m
-129.895966 47.534363 l
-129.895966 60.050369 l
-40.604584 60.050369 l
-40.604584 47.534363 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-40.604584 66.003128 m
-129.895966 66.003128 l
-129.895966 76.587158 l
-40.604584 76.587158 l
-40.604584 66.003128 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-40.604584 82.539917 m
-129.895966 82.539917 l
-129.895966 95.794464 l
-40.604584 95.794464 l
-40.604584 82.539917 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-40.604584 101.747223 m
-129.895966 101.747223 l
-129.895966 115.696609 l
-40.604584 115.696609 l
-40.604584 101.747223 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-355.340561 34.132401 m
-468.442978 34.132401 l
-468.442978 140.985153 l
-355.340561 140.985153 l
-355.340561 34.132401 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-361.293320 40.085159 m
-462.490219 40.085159 l
-462.490219 135.032394 l
-361.293320 135.032394 l
-361.293320 40.085159 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-367.246078 46.037918 m
-456.537460 46.037918 l
-456.537460 57.296158 l
-367.246078 57.296158 l
-367.246078 46.037918 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-367.246078 63.248917 m
-456.537460 63.248917 l
-456.537460 75.670471 l
-367.246078 75.670471 l
-367.246078 63.248917 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-367.246078 81.623230 m
-456.537460 81.623230 l
-456.537460 95.718201 l
-367.246078 95.718201 l
-367.246078 81.623230 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-367.246078 101.670959 m
-456.537460 101.670959 l
-456.537460 112.334412 l
-367.246078 112.334412 l
-367.246078 101.670959 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-367.246078 118.287170 m
-456.537460 118.287170 l
-456.537460 129.079636 l
-367.246078 129.079636 l
-367.246078 118.287170 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-367.390549 735.540131 m
-480.492966 735.540131 l
-480.492966 824.136612 l
-367.390549 824.136612 l
-367.390549 735.540131 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-373.343307 741.492889 m
-474.540207 741.492889 l
-474.540207 818.183853 l
-373.343307 818.183853 l
-373.343307 741.492889 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.296066 747.445648 m
-468.587448 747.445648 l
-468.587448 759.425278 l
-379.296066 759.425278 l
-379.296066 747.445648 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.296066 765.378036 m
-468.587448 765.378036 l
-468.587448 777.126083 l
-379.296066 777.126083 l
-379.296066 765.378036 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.296066 783.078842 m
-468.587448 783.078842 l
-468.587448 794.666565 l
-379.296066 794.666565 l
-379.296066 783.078842 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.296066 800.619324 m
-468.587448 800.619324 l
-468.587448 812.231094 l
-379.296066 812.231094 l
-379.296066 800.619324 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-260.883469 301.547913 m
-373.985886 301.547913 l
-373.985886 411.176117 l
-260.883469 411.176117 l
-260.883469 301.547913 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-266.836227 307.500671 m
-368.033127 307.500671 l
-368.033127 405.223358 l
-266.836227 405.223358 l
-266.836227 307.500671 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.788986 313.453430 m
-362.080368 313.453430 l
-362.080368 327.187607 l
-272.788986 327.187607 l
-272.788986 313.453430 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.788986 333.140366 m
-362.080368 333.140366 l
-362.080368 345.651871 l
-272.788986 345.651871 l
-272.788986 333.140366 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.788986 351.604630 m
-362.080368 351.604630 l
-362.080368 362.472656 l
-272.788986 362.472656 l
-272.788986 351.604630 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.788986 368.425415 m
-362.080368 368.425415 l
-362.080368 382.562988 l
-272.788986 382.562988 l
-272.788986 368.425415 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-272.788986 388.515747 m
-362.080368 388.515747 l
-362.080368 399.270599 l
-272.788986 399.270599 l
-272.788986 388.515747 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-210.478638 4.032227 m
-323.581055 4.032227 l
-323.581055 117.539108 l
-210.478638 117.539108 l
-210.478638 4.032227 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-216.431396 9.984985 m
-317.628296 9.984985 l
-317.628296 111.586349 l
-216.431396 111.586349 l
-216.431396 9.984985 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.384155 15.937744 m
-311.675537 15.937744 l
-311.675537 26.832108 l
-222.384155 26.832108 l
-222.384155 15.937744 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.384155 32.784866 m
-311.675537 32.784866 l
-311.675537 47.547058 l
-222.384155 47.547058 l
-222.384155 32.784866 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.384155 53.499817 m
-311.675537 53.499817 l
-311.675537 67.175964 l
-222.384155 67.175964 l
-222.384155 53.499817 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.384155 73.128723 m
-311.675537 73.128723 l
-311.675537 84.906769 l
-222.384155 84.906769 l
-222.384155 73.128723 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-222.384155 90.859528 m
-311.675537 90.859528 l
-311.675537 105.633591 l
-222.384155 105.633591 l
-222.384155 90.859528 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-220.597870 376.054581 m
-333.700287 376.054581 l
-333.700287 486.106735 l
-220.597870 486.106735 l
-220.597870 376.054581 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-226.550629 382.007339 m
-327.747528 382.007339 l
-327.747528 480.153976 l
-226.550629 480.153976 l
-226.550629 382.007339 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-232.503387 387.960098 m
-321.794769 387.960098 l
-321.794769 401.991364 l
-232.503387 401.991364 l
-232.503387 387.960098 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-232.503387 407.944122 m
-321.794769 407.944122 l
-321.794769 421.046066 l
-232.503387 421.046066 l
-232.503387 407.944122 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-232.503387 426.998825 m
-321.794769 426.998825 l
-321.794769 440.351700 l
-232.503387 440.351700 l
-232.503387 426.998825 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-232.503387 446.304459 m
-321.794769 446.304459 l
-321.794769 457.165787 l
-232.503387 457.165787 l
-232.503387 446.304459 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-232.503387 463.118546 m
-321.794769 463.118546 l
-321.794769 474.201218 l
-232.503387 474.201218 l
-232.503387 463.118546 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-481.570358 320.481430 m
-594.672775 320.481430 l
-594.672775 432.262833 l
-481.570358 432.262833 l
-481.570358 320.481430 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-487.523117 326.434189 m
-588.720016 326.434189 l
-588.720016 426.310074 l
-487.523117 426.310074 l
-487.523117 326.434189 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.475876 332.386948 m
-582.767258 332.386948 l
-582.767258 343.211777 l
-493.475876 343.211777 l
-493.475876 332.386948 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.475876 349.164536 m
-582.767258 349.164536 l
-582.767258 360.282883 l
-493.475876 360.282883 l
-493.475876 349.164536 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.475876 366.235641 m
-582.767258 366.235641 l
-582.767258 380.867111 l
-493.475876 380.867111 l
-493.475876 366.235641 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.475876 386.819870 m
-582.767258 386.819870 l
-582.767258 400.628250 l
-493.475876 400.628250 l
-493.475876 386.819870 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.475876 406.581009 m
-582.767258 406.581009 l
-582.767258 420.357315 l
-493.475876 420.357315 l
-493.475876 406.581009 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-351.902359 597.217270 m
-465.004776 597.217270 l
-465.004776 687.055252 l
-351.902359 687.055252 l
-351.902359 597.217270 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-357.855118 603.170029 m
-459.052017 603.170029 l
-459.052017 681.102493 l
-357.855118 681.102493 l
-357.855118 603.170029 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.807877 609.122787 m
-453.099258 609.122787 l
-453.099258 621.710114 l
-363.807877 621.710114 l
-363.807877 609.122787 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.807877 627.662872 m
-453.099258 627.662872 l
-453.099258 639.782501 l
-363.807877 639.782501 l
-363.807877 627.662872 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.807877 645.735260 m
-453.099258 645.735260 l
-453.099258 656.240509 l
-363.807877 656.240509 l
-363.807877 645.735260 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.807877 662.193268 m
-453.099258 662.193268 l
-453.099258 675.149734 l
-363.807877 675.149734 l
-363.807877 662.193268 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--8.149963 345.950928 m
-104.952454 345.950928 l
-104.952454 434.962097 l
--8.149963 434.962097 l
--8.149963 345.950928 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--2.197205 351.903687 m
-98.999695 351.903687 l
-98.999695 429.009338 l
--2.197205 429.009338 l
--2.197205 351.903687 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-3.755554 357.856445 m
-93.046936 357.856445 l
-93.046936 370.367203 l
-3.755554 370.367203 l
-3.755554 357.856445 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-3.755554 376.319962 m
-93.046936 376.319962 l
-93.046936 387.148483 l
-3.755554 387.148483 l
-3.755554 376.319962 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-3.755554 393.101242 m
-93.046936 393.101242 l
-93.046936 405.684647 l
-3.755554 405.684647 l
-3.755554 393.101242 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-3.755554 411.637405 m
-93.046936 411.637405 l
-93.046936 423.056580 l
-3.755554 423.056580 l
-3.755554 411.637405 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-58.309311 603.475037 m
-171.411728 603.475037 l
-171.411728 719.058853 l
-58.309311 719.058853 l
-58.309311 603.475037 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-64.262070 609.427795 m
-165.458969 609.427795 l
-165.458969 713.106094 l
-64.262070 713.106094 l
-64.262070 609.427795 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.214828 615.380554 m
-159.506210 615.380554 l
-159.506210 630.021667 l
-70.214828 630.021667 l
-70.214828 615.380554 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.214828 635.974426 m
-159.506210 635.974426 l
-159.506210 648.527954 l
-70.214828 648.527954 l
-70.214828 635.974426 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.214828 654.480713 m
-159.506210 654.480713 l
-159.506210 668.680542 l
-70.214828 668.680542 l
-70.214828 654.480713 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.214828 674.633301 m
-159.506210 674.633301 l
-159.506210 689.213333 l
-70.214828 689.213333 l
-70.214828 674.633301 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-70.214828 695.166092 m
-159.506210 695.166092 l
-159.506210 707.153336 l
-70.214828 707.153336 l
-70.214828 695.166092 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-443.292664 312.857712 m
-556.395081 312.857712 l
-556.395081 403.786087 l
-443.292664 403.786087 l
-443.292664 312.857712 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-449.245422 318.810471 m
-550.442322 318.810471 l
-550.442322 397.833328 l
-449.245422 397.833328 l
-449.245422 318.810471 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-455.198181 324.763229 m
-544.489563 324.763229 l
-544.489563 336.688202 l
-455.198181 336.688202 l
-455.198181 324.763229 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-455.198181 342.640961 m
-544.489563 342.640961 l
-544.489563 353.649231 l
-455.198181 353.649231 l
-455.198181 342.640961 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-455.198181 359.601990 m
-544.489563 359.601990 l
-544.489563 372.514160 l
-455.198181 372.514160 l
-455.198181 359.601990 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-455.198181 378.466919 m
-544.489563 378.466919 l
-544.489563 391.880569 l
-455.198181 391.880569 l
-455.198181 378.466919 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-6.271622 531.110870 m
-119.374039 531.110870 l
-119.374039 615.995880 l
-6.271622 615.995880 l
-6.271622 531.110870 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-12.224380 537.063629 m
-113.421280 537.063629 l
-113.421280 610.043121 l
-12.224380 610.043121 l
-12.224380 537.063629 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-18.177139 543.016388 m
-107.468521 543.016388 l
-107.468521 554.356384 l
-18.177139 554.356384 l
-18.177139 543.016388 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-18.177139 560.309143 m
-107.468521 560.309143 l
-107.468521 570.890381 l
-18.177139 570.890381 l
-18.177139 560.309143 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-18.177139 576.843140 m
-107.468521 576.843140 l
-107.468521 587.682632 l
-18.177139 587.682632 l
-18.177139 576.843140 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-18.177139 593.635391 m
-107.468521 593.635391 l
-107.468521 604.090363 l
-18.177139 604.090363 l
-18.177139 593.635391 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-299.165527 583.994400 m
-412.267944 583.994400 l
-412.267944 672.060287 l
-299.165527 672.060287 l
-299.165527 583.994400 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-305.118286 589.947159 m
-406.315186 589.947159 l
-406.315186 666.107529 l
-305.118286 666.107529 l
-305.118286 589.947159 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-311.071045 595.899918 m
-400.362427 595.899918 l
-400.362427 607.627731 l
-311.071045 607.627731 l
-311.071045 595.899918 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-311.071045 613.580490 m
-400.362427 613.580490 l
-400.362427 624.260178 l
-311.071045 624.260178 l
-311.071045 613.580490 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-311.071045 630.212936 m
-400.362427 630.212936 l
-400.362427 642.421310 l
-311.071045 642.421310 l
-311.071045 630.212936 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-311.071045 648.374069 m
-400.362427 648.374069 l
-400.362427 660.154770 l
-311.071045 660.154770 l
-311.071045 648.374069 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-222.856766 462.501892 m
-335.959183 462.501892 l
-335.959183 574.243988 l
-222.856766 574.243988 l
-222.856766 462.501892 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-228.809525 468.454651 m
-330.006424 468.454651 l
-330.006424 568.291229 l
-228.809525 568.291229 l
-228.809525 468.454651 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.762283 474.407410 m
-324.053665 474.407410 l
-324.053665 487.469986 l
-234.762283 487.469986 l
-234.762283 474.407410 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.762283 493.422745 m
-324.053665 493.422745 l
-324.053665 506.784134 l
-234.762283 506.784134 l
-234.762283 493.422745 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.762283 512.736893 m
-324.053665 512.736893 l
-324.053665 525.345367 l
-234.762283 525.345367 l
-234.762283 512.736893 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.762283 531.298126 m
-324.053665 531.298126 l
-324.053665 545.410538 l
-234.762283 545.410538 l
-234.762283 531.298126 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.762283 551.363297 m
-324.053665 551.363297 l
-324.053665 562.338470 l
-234.762283 562.338470 l
-234.762283 551.363297 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--36.013840 696.829620 m
-77.088577 696.829620 l
-77.088577 805.039581 l
--36.013840 805.039581 l
--36.013840 696.829620 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--30.061081 702.782379 m
-71.135818 702.782379 l
-71.135818 799.086823 l
--30.061081 799.086823 l
--30.061081 702.782379 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--24.108322 708.735138 m
-65.183060 708.735138 l
-65.183060 720.698715 l
--24.108322 720.698715 l
--24.108322 708.735138 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--24.108322 726.651474 m
-65.183060 726.651474 l
-65.183060 737.129395 l
--24.108322 737.129395 l
--24.108322 726.651474 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--24.108322 743.082153 m
-65.183060 743.082153 l
-65.183060 755.498047 l
--24.108322 755.498047 l
--24.108322 743.082153 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--24.108322 761.450806 m
-65.183060 761.450806 l
-65.183060 773.621048 l
--24.108322 773.621048 l
--24.108322 761.450806 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--24.108322 779.573807 m
-65.183060 779.573807 l
-65.183060 793.134064 l
--24.108322 793.134064 l
--24.108322 779.573807 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-67.203293 -29.857269 m
-180.305710 -29.857269 l
-180.305710 84.649231 l
-67.203293 84.649231 l
-67.203293 -29.857269 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-73.156052 -23.904510 m
-174.352951 -23.904510 l
-174.352951 78.696472 l
-73.156052 78.696472 l
-73.156052 -23.904510 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-79.108810 -17.951752 m
-168.400192 -17.951752 l
-168.400192 -3.774261 l
-79.108810 -3.774261 l
-79.108810 -17.951752 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-79.108810 2.178497 m
-168.400192 2.178497 l
-168.400192 15.450165 l
-79.108810 15.450165 l
-79.108810 2.178497 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-79.108810 21.402924 m
-168.400192 21.402924 l
-168.400192 33.794373 l
-79.108810 33.794373 l
-79.108810 21.402924 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-79.108810 39.747131 m
-168.400192 39.747131 l
-168.400192 54.062256 l
-79.108810 54.062256 l
-79.108810 39.747131 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-79.108810 60.015015 m
-168.400192 60.015015 l
-168.400192 72.743713 l
-79.108810 72.743713 l
-79.108810 60.015015 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-502.087128 25.960663 m
-615.189545 25.960663 l
-615.189545 119.985596 l
-502.087128 119.985596 l
-502.087128 25.960663 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-508.039886 31.913422 m
-609.236786 31.913422 l
-609.236786 114.032837 l
-508.039886 114.032837 l
-508.039886 31.913422 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-513.992645 37.866180 m
-603.284027 37.866180 l
-603.284027 52.042526 l
-513.992645 52.042526 l
-513.992645 37.866180 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-513.992645 57.995285 m
-603.284027 57.995285 l
-603.284027 72.796753 l
-513.992645 72.796753 l
-513.992645 57.995285 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-513.992645 78.749512 m
-603.284027 78.749512 l
-603.284027 89.184631 l
-513.992645 89.184631 l
-513.992645 78.749512 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-513.992645 95.137390 m
-603.284027 95.137390 l
-603.284027 108.080078 l
-513.992645 108.080078 l
-513.992645 95.137390 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-406.176392 206.019638 m
-519.278809 206.019638 l
-519.278809 297.409256 l
-406.176392 297.409256 l
-406.176392 206.019638 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-412.129150 211.972397 m
-513.326050 211.972397 l
-513.326050 291.456497 l
-412.129150 291.456497 l
-412.129150 211.972397 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-418.081909 217.925156 m
-507.373291 217.925156 l
-507.373291 228.462280 l
-418.081909 228.462280 l
-418.081909 217.925156 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-418.081909 234.415039 m
-507.373291 234.415039 l
-507.373291 248.288284 l
-418.081909 248.288284 l
-418.081909 234.415039 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-418.081909 254.241043 m
-507.373291 254.241043 l
-507.373291 267.792572 l
-418.081909 267.792572 l
-418.081909 254.241043 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-418.081909 273.745331 m
-507.373291 273.745331 l
-507.373291 285.503738 l
-418.081909 285.503738 l
-418.081909 273.745331 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-493.760742 389.229324 m
-606.863159 389.229324 l
-606.863159 496.885422 l
-493.760742 496.885422 l
-493.760742 389.229324 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-499.713501 395.182083 m
-600.910400 395.182083 l
-600.910400 490.932663 l
-499.713501 490.932663 l
-499.713501 395.182083 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.666260 401.134842 m
-594.957642 401.134842 l
-594.957642 412.727753 l
-505.666260 412.727753 l
-505.666260 401.134842 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.666260 418.680511 m
-594.957642 418.680511 l
-594.957642 429.285080 l
-505.666260 429.285080 l
-505.666260 418.680511 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.666260 435.237839 m
-594.957642 435.237839 l
-594.957642 448.433197 l
-505.666260 448.433197 l
-505.666260 435.237839 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.666260 454.385956 m
-594.957642 454.385956 l
-594.957642 466.292725 l
-505.666260 466.292725 l
-505.666260 454.385956 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.666260 472.245483 m
-594.957642 472.245483 l
-594.957642 484.979904 l
-505.666260 484.979904 l
-505.666260 472.245483 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-36.373337 719.003494 m
-149.475754 719.003494 l
-149.475754 833.021851 l
-36.373337 833.021851 l
-36.373337 719.003494 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-42.326096 724.956253 m
-143.522995 724.956253 l
-143.522995 827.069092 l
-42.326096 827.069092 l
-42.326096 724.956253 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-48.278854 730.909012 m
-137.570236 730.909012 l
-137.570236 744.844894 l
-48.278854 744.844894 l
-48.278854 730.909012 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-48.278854 750.797653 m
-137.570236 750.797653 l
-137.570236 763.676361 l
-48.278854 763.676361 l
-48.278854 750.797653 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-48.278854 769.629120 m
-137.570236 769.629120 l
-137.570236 783.372925 l
-48.278854 783.372925 l
-48.278854 769.629120 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-48.278854 789.325684 m
-137.570236 789.325684 l
-137.570236 802.224350 l
-48.278854 802.224350 l
-48.278854 789.325684 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-48.278854 808.177109 m
-137.570236 808.177109 l
-137.570236 821.116333 l
-48.278854 821.116333 l
-48.278854 808.177109 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-143.209915 721.700577 m
-256.312332 721.700577 l
-256.312332 815.704712 l
-143.209915 815.704712 l
-143.209915 721.700577 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-149.162674 727.653336 m
-250.359573 727.653336 l
-250.359573 809.751953 l
-149.162674 809.751953 l
-149.162674 727.653336 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.115433 733.606094 m
-244.406815 733.606094 l
-244.406815 748.079590 l
-155.115433 748.079590 l
-155.115433 733.606094 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.115433 754.032349 m
-244.406815 754.032349 l
-244.406815 767.454773 l
-155.115433 767.454773 l
-155.115433 754.032349 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.115433 773.407532 m
-244.406815 773.407532 l
-244.406815 784.805771 l
-155.115433 784.805771 l
-155.115433 773.407532 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.115433 790.758530 m
-244.406815 790.758530 l
-244.406815 803.799194 l
-155.115433 803.799194 l
-155.115433 790.758530 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--38.563950 -41.572983 m
-74.538467 -41.572983 l
-74.538467 69.901108 l
--38.563950 69.901108 l
--38.563950 -41.572983 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--32.611191 -35.620224 m
-68.585709 -35.620224 l
-68.585709 63.948349 l
--32.611191 63.948349 l
--32.611191 -35.620224 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.658432 -29.667465 m
-62.632950 -29.667465 l
-62.632950 -14.911636 l
--26.658432 -14.911636 l
--26.658432 -29.667465 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.658432 -8.958878 m
-62.632950 -8.958878 l
-62.632950 2.258469 l
--26.658432 2.258469 l
--26.658432 -8.958878 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.658432 8.211227 m
-62.632950 8.211227 l
-62.632950 20.534897 l
--26.658432 20.534897 l
--26.658432 8.211227 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.658432 26.487656 m
-62.632950 26.487656 l
-62.632950 39.025833 l
--26.658432 39.025833 l
--26.658432 26.487656 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--26.658432 44.978592 m
-62.632950 44.978592 l
-62.632950 57.995590 l
--26.658432 57.995590 l
--26.658432 44.978592 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-428.533478 44.851440 m
-541.635895 44.851440 l
-541.635895 155.404419 l
-428.533478 155.404419 l
-428.533478 44.851440 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-434.486237 50.804199 m
-535.683136 50.804199 l
-535.683136 149.451660 l
-434.486237 149.451660 l
-434.486237 50.804199 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-440.438995 56.756958 m
-529.730377 56.756958 l
-529.730377 70.269089 l
-440.438995 70.269089 l
-440.438995 56.756958 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-440.438995 76.221848 m
-529.730377 76.221848 l
-529.730377 90.536072 l
-440.438995 90.536072 l
-440.438995 76.221848 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-440.438995 96.488831 m
-529.730377 96.488831 l
-529.730377 107.495270 l
-440.438995 107.495270 l
-440.438995 96.488831 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-440.438995 113.448029 m
-529.730377 113.448029 l
-529.730377 126.220749 l
-440.438995 126.220749 l
-440.438995 113.448029 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-440.438995 132.173508 m
-529.730377 132.173508 l
-529.730377 143.498901 l
-440.438995 143.498901 l
-440.438995 132.173508 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-357.307388 312.918945 m
-470.409805 312.918945 l
-470.409805 405.464890 l
-357.307388 405.464890 l
-357.307388 312.918945 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-363.260147 318.871704 m
-464.457047 318.871704 l
-464.457047 399.512131 l
-363.260147 399.512131 l
-363.260147 318.871704 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-369.212906 324.824463 m
-458.504288 324.824463 l
-458.504288 339.479065 l
-369.212906 339.479065 l
-369.212906 324.824463 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-369.212906 345.431824 m
-458.504288 345.431824 l
-458.504288 355.977295 l
-369.212906 355.977295 l
-369.212906 345.431824 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-369.212906 361.930054 m
-458.504288 361.930054 l
-458.504288 375.050888 l
-369.212906 375.050888 l
-369.212906 361.930054 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-369.212906 381.003647 m
-458.504288 381.003647 l
-458.504288 393.559372 l
-369.212906 393.559372 l
-369.212906 381.003647 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-98.179428 616.629150 m
-211.281845 616.629150 l
-211.281845 729.029129 l
-98.179428 729.029129 l
-98.179428 616.629150 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-104.132187 622.581909 m
-205.329086 622.581909 l
-205.329086 723.076370 l
-104.132187 723.076370 l
-104.132187 622.581909 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-110.084946 628.534668 m
-199.376328 628.534668 l
-199.376328 641.908585 l
-110.084946 641.908585 l
-110.084946 628.534668 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-110.084946 647.861343 m
-199.376328 647.861343 l
-199.376328 659.667603 l
-110.084946 659.667603 l
-110.084946 647.861343 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-110.084946 665.620361 m
-199.376328 665.620361 l
-199.376328 676.589340 l
-110.084946 676.589340 l
-110.084946 665.620361 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-110.084946 682.542099 m
-199.376328 682.542099 l
-199.376328 697.279999 l
-110.084946 697.279999 l
-110.084946 682.542099 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-110.084946 703.232758 m
-199.376328 703.232758 l
-199.376328 717.123611 l
-110.084946 717.123611 l
-110.084946 703.232758 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-316.335663 277.617142 m
-429.438080 277.617142 l
-429.438080 388.612534 l
-316.335663 388.612534 l
-316.335663 277.617142 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-322.288422 283.569901 m
-423.485321 283.569901 l
-423.485321 382.659775 l
-322.288422 382.659775 l
-322.288422 283.569901 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-328.241180 289.522659 m
-417.532562 289.522659 l
-417.532562 302.854950 l
-328.241180 302.854950 l
-328.241180 289.522659 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-328.241180 308.807709 m
-417.532562 308.807709 l
-417.532562 321.585205 l
-328.241180 321.585205 l
-328.241180 308.807709 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-328.241180 327.537964 m
-417.532562 327.537964 l
-417.532562 339.435715 l
-328.241180 339.435715 l
-328.241180 327.537964 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-328.241180 345.388474 m
-417.532562 345.388474 l
-417.532562 357.356903 l
-328.241180 357.356903 l
-328.241180 345.388474 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-328.241180 363.309662 m
-417.532562 363.309662 l
-417.532562 376.707016 l
-328.241180 376.707016 l
-328.241180 363.309662 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-152.565521 701.527344 m
-265.667938 701.527344 l
-265.667938 806.738998 l
-152.565521 806.738998 l
-152.565521 701.527344 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-158.518280 707.480103 m
-259.715179 707.480103 l
-259.715179 800.786240 l
-158.518280 800.786240 l
-158.518280 707.480103 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.471039 713.432861 m
-253.762421 713.432861 l
-253.762421 724.913452 l
-164.471039 724.913452 l
-164.471039 713.432861 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.471039 730.866211 m
-253.762421 730.866211 l
-253.762421 741.298645 l
-164.471039 741.298645 l
-164.471039 730.866211 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.471039 747.251404 m
-253.762421 747.251404 l
-253.762421 758.752502 l
-164.471039 758.752502 l
-164.471039 747.251404 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.471039 764.705261 m
-253.762421 764.705261 l
-253.762421 775.465973 l
-164.471039 775.465973 l
-164.471039 764.705261 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.471039 781.418732 m
-253.762421 781.418732 l
-253.762421 794.833481 l
-164.471039 794.833481 l
-164.471039 781.418732 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-189.555878 477.643433 m
-302.658295 477.643433 l
-302.658295 583.977707 l
-189.555878 583.977707 l
-189.555878 477.643433 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-195.508636 483.596191 m
-296.705536 483.596191 l
-296.705536 578.024948 l
-195.508636 578.024948 l
-195.508636 483.596191 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-201.461395 489.548950 m
-290.752777 489.548950 l
-290.752777 501.724884 l
-201.461395 501.724884 l
-201.461395 489.548950 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-201.461395 507.677643 m
-290.752777 507.677643 l
-290.752777 519.304306 l
-201.461395 519.304306 l
-201.461395 507.677643 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-201.461395 525.257065 m
-290.752777 525.257065 l
-290.752777 536.007919 l
-201.461395 536.007919 l
-201.461395 525.257065 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-201.461395 541.960678 m
-290.752777 541.960678 l
-290.752777 552.906281 l
-201.461395 552.906281 l
-201.461395 541.960678 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-201.461395 558.859039 m
-290.752777 558.859039 l
-290.752777 572.072189 l
-201.461395 572.072189 l
-201.461395 558.859039 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-144.501877 268.126831 m
-257.604294 268.126831 l
-257.604294 379.378937 l
-144.501877 379.378937 l
-144.501877 268.126831 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-150.454636 274.079590 m
-251.651535 274.079590 l
-251.651535 373.426178 l
-150.454636 373.426178 l
-150.454636 274.079590 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-156.407394 280.032349 m
-245.698776 280.032349 l
-245.698776 292.551331 l
-156.407394 292.551331 l
-156.407394 280.032349 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-156.407394 298.504089 m
-245.698776 298.504089 l
-245.698776 312.029297 l
-156.407394 312.029297 l
-156.407394 298.504089 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-156.407394 317.982056 m
-245.698776 317.982056 l
-245.698776 330.148941 l
-156.407394 330.148941 l
-156.407394 317.982056 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-156.407394 336.101700 m
-245.698776 336.101700 l
-245.698776 350.469330 l
-156.407394 350.469330 l
-156.407394 336.101700 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-156.407394 356.422089 m
-245.698776 356.422089 l
-245.698776 367.473419 l
-156.407394 367.473419 l
-156.407394 356.422089 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--19.880035 745.275406 m
-93.222382 745.275406 l
-93.222382 857.324524 l
--19.880035 857.324524 l
--19.880035 745.275406 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--13.927277 751.228165 m
-87.269623 751.228165 l
-87.269623 851.371765 l
--13.927277 851.371765 l
--13.927277 751.228165 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--7.974518 757.180923 m
-81.316864 757.180923 l
-81.316864 769.843689 l
--7.974518 769.843689 l
--7.974518 757.180923 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--7.974518 775.796448 m
-81.316864 775.796448 l
-81.316864 790.410217 l
--7.974518 790.410217 l
--7.974518 775.796448 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--7.974518 796.362976 m
-81.316864 796.362976 l
-81.316864 807.369232 l
--7.974518 807.369232 l
--7.974518 796.362976 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--7.974518 813.321991 m
-81.316864 813.321991 l
-81.316864 826.849197 l
--7.974518 826.849197 l
--7.974518 813.321991 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--7.974518 832.801956 m
-81.316864 832.801956 l
-81.316864 845.419006 l
--7.974518 845.419006 l
--7.974518 832.801956 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-438.392868 637.373016 m
-551.495285 637.373016 l
-551.495285 729.042892 l
-438.392868 729.042892 l
-438.392868 637.373016 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-444.345627 643.325775 m
-545.542526 643.325775 l
-545.542526 723.090134 l
-444.345627 723.090134 l
-444.345627 643.325775 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.298386 649.278534 m
-539.589767 649.278534 l
-539.589767 659.923218 l
-450.298386 659.923218 l
-450.298386 649.278534 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.298386 665.875977 m
-539.589767 665.875977 l
-539.589767 680.578049 l
-450.298386 680.578049 l
-450.298386 665.875977 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.298386 686.530807 m
-539.589767 686.530807 l
-539.589767 699.875977 l
-450.298386 699.875977 l
-450.298386 686.530807 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-450.298386 705.828735 m
-539.589767 705.828735 l
-539.589767 717.137375 l
-450.298386 717.137375 l
-450.298386 705.828735 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-56.396515 546.500565 m
-169.498932 546.500565 l
-169.498932 636.910995 l
-56.396515 636.910995 l
-56.396515 546.500565 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-62.349274 552.453323 m
-163.546173 552.453323 l
-163.546173 630.958237 l
-62.349274 630.958237 l
-62.349274 552.453323 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-68.302032 558.406082 m
-157.593414 558.406082 l
-157.593414 570.686768 l
-68.302032 570.686768 l
-68.302032 558.406082 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-68.302032 576.639526 m
-157.593414 576.639526 l
-157.593414 588.432571 l
-68.302032 588.432571 l
-68.302032 576.639526 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-68.302032 594.385330 m
-157.593414 594.385330 l
-157.593414 608.446182 l
-68.302032 608.446182 l
-68.302032 594.385330 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-68.302032 614.398941 m
-157.593414 614.398941 l
-157.593414 625.005478 l
-68.302032 625.005478 l
-68.302032 614.398941 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-373.409271 29.204269 m
-486.511688 29.204269 l
-486.511688 119.425446 l
-373.409271 119.425446 l
-373.409271 29.204269 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-379.362030 35.157028 m
-480.558929 35.157028 l
-480.558929 113.472687 l
-379.362030 113.472687 l
-379.362030 35.157028 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-385.314789 41.109787 m
-474.606171 41.109787 l
-474.606171 54.224609 l
-385.314789 54.224609 l
-385.314789 41.109787 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-385.314789 60.177368 m
-474.606171 60.177368 l
-474.606171 72.787933 l
-385.314789 72.787933 l
-385.314789 60.177368 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-385.314789 78.740692 m
-474.606171 78.740692 l
-474.606171 89.529694 l
-385.314789 89.529694 l
-385.314789 78.740692 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-385.314789 95.482452 m
-474.606171 95.482452 l
-474.606171 107.519928 l
-385.314789 107.519928 l
-385.314789 95.482452 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-403.308899 730.283508 m
-516.411316 730.283508 l
-516.411316 840.624939 l
-403.308899 840.624939 l
-403.308899 730.283508 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-409.261658 736.236267 m
-510.458557 736.236267 l
-510.458557 834.672180 l
-409.261658 834.672180 l
-409.261658 736.236267 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.214417 742.189026 m
-504.505798 742.189026 l
-504.505798 752.965302 l
-415.214417 752.965302 l
-415.214417 742.189026 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.214417 758.918060 m
-504.505798 758.918060 l
-504.505798 773.529266 l
-415.214417 773.529266 l
-415.214417 758.918060 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.214417 779.482025 m
-504.505798 779.482025 l
-504.505798 793.018661 l
-415.214417 793.018661 l
-415.214417 779.482025 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.214417 798.971420 m
-504.505798 798.971420 l
-504.505798 810.434769 l
-415.214417 810.434769 l
-415.214417 798.971420 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.214417 816.387527 m
-504.505798 816.387527 l
-504.505798 828.719421 l
-415.214417 828.719421 l
-415.214417 816.387527 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-404.069794 -28.154999 m
-517.172211 -28.154999 l
-517.172211 80.371933 l
-404.069794 80.371933 l
-404.069794 -28.154999 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-410.022552 -22.202240 m
-511.219452 -22.202240 l
-511.219452 74.419174 l
-410.022552 74.419174 l
-410.022552 -22.202240 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.975311 -16.249481 m
-505.266693 -16.249481 l
-505.266693 -4.588364 l
-415.975311 -4.588364 l
-415.975311 -16.249481 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.975311 1.364395 m
-505.266693 1.364395 l
-505.266693 14.462585 l
-415.975311 14.462585 l
-415.975311 1.364395 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.975311 20.415344 m
-505.266693 20.415344 l
-505.266693 31.186584 l
-415.975311 31.186584 l
-415.975311 20.415344 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.975311 37.139343 m
-505.266693 37.139343 l
-505.266693 50.080185 l
-415.975311 50.080185 l
-415.975311 37.139343 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-415.975311 56.032944 m
-505.266693 56.032944 l
-505.266693 68.466415 l
-415.975311 68.466415 l
-415.975311 56.032944 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-393.923676 526.736130 m
-507.026093 526.736130 l
-507.026093 640.446640 l
-393.923676 640.446640 l
-393.923676 526.736130 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-399.876434 532.688889 m
-501.073334 532.688889 l
-501.073334 634.493881 l
-399.876434 634.493881 l
-399.876434 532.688889 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.829193 538.641647 m
-495.120575 538.641647 l
-495.120575 552.242996 l
-405.829193 552.242996 l
-405.829193 538.641647 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.829193 558.195755 m
-495.120575 558.195755 l
-495.120575 571.180939 l
-405.829193 571.180939 l
-405.829193 558.195755 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.829193 577.133698 m
-495.120575 577.133698 l
-495.120575 591.994324 l
-405.829193 591.994324 l
-405.829193 577.133698 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.829193 597.947083 m
-495.120575 597.947083 l
-495.120575 611.618637 l
-405.829193 611.618637 l
-405.829193 597.947083 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-405.829193 617.571396 m
-495.120575 617.571396 l
-495.120575 628.541122 l
-405.829193 628.541122 l
-405.829193 617.571396 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--13.564529 201.651321 m
-99.537888 201.651321 l
-99.537888 311.782257 l
--13.564529 311.782257 l
--13.564529 201.651321 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--7.611771 207.604080 m
-93.585129 207.604080 l
-93.585129 305.829498 l
--7.611771 305.829498 l
--7.611771 207.604080 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--1.659012 213.556839 m
-87.632370 213.556839 l
-87.632370 226.600616 l
--1.659012 226.600616 l
--1.659012 213.556839 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--1.659012 232.553375 m
-87.632370 232.553375 l
-87.632370 244.097427 l
--1.659012 244.097427 l
--1.659012 232.553375 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--1.659012 250.050186 m
-87.632370 250.050186 l
-87.632370 264.095169 l
--1.659012 264.095169 l
--1.659012 250.050186 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--1.659012 270.047928 m
-87.632370 270.047928 l
-87.632370 281.399673 l
--1.659012 281.399673 l
--1.659012 270.047928 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--1.659012 287.352432 m
-87.632370 287.352432 l
-87.632370 299.876740 l
--1.659012 299.876740 l
--1.659012 287.352432 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-180.277283 -15.589996 m
-293.379700 -15.589996 l
-293.379700 75.668411 l
-180.277283 75.668411 l
-180.277283 -15.589996 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-186.230042 -9.637238 m
-287.426941 -9.637238 l
-287.426941 69.715652 l
-186.230042 69.715652 l
-186.230042 -9.637238 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-192.182800 -3.684479 m
-281.474182 -3.684479 l
-281.474182 10.417862 l
-192.182800 10.417862 l
-192.182800 -3.684479 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-192.182800 16.370621 m
-281.474182 16.370621 l
-281.474182 29.492569 l
-192.182800 29.492569 l
-192.182800 16.370621 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-192.182800 35.445328 m
-281.474182 35.445328 l
-281.474182 47.071884 l
-192.182800 47.071884 l
-192.182800 35.445328 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-192.182800 53.024643 m
-281.474182 53.024643 l
-281.474182 63.762894 l
-192.182800 63.762894 l
-192.182800 53.024643 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-173.628250 774.868393 m
-286.730667 774.868393 l
-286.730667 881.845154 l
-173.628250 881.845154 l
-173.628250 774.868393 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-179.581009 780.821152 m
-280.777908 780.821152 l
-280.777908 875.892395 l
-179.581009 875.892395 l
-179.581009 780.821152 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-185.533768 786.773911 m
-274.825150 786.773911 l
-274.825150 799.527710 l
-185.533768 799.527710 l
-185.533768 786.773911 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-185.533768 805.480469 m
-274.825150 805.480469 l
-274.825150 816.481445 l
-185.533768 816.481445 l
-185.533768 805.480469 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-185.533768 822.434204 m
-274.825150 822.434204 l
-274.825150 835.031036 l
-185.533768 835.031036 l
-185.533768 822.434204 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-185.533768 840.983795 m
-274.825150 840.983795 l
-274.825150 853.494980 l
-185.533768 853.494980 l
-185.533768 840.983795 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-185.533768 859.447739 m
-274.825150 859.447739 l
-274.825150 869.939636 l
-185.533768 869.939636 l
-185.533768 859.447739 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-13.809341 205.324173 m
-126.911758 205.324173 l
-126.911758 297.632080 l
-13.809341 297.632080 l
-13.809341 205.324173 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-19.762100 211.276932 m
-120.959000 211.276932 l
-120.959000 291.679321 l
-19.762100 291.679321 l
-19.762100 211.276932 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-25.714859 217.229691 m
-115.006241 217.229691 l
-115.006241 229.360443 l
-25.714859 229.360443 l
-25.714859 217.229691 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-25.714859 235.313202 m
-115.006241 235.313202 l
-115.006241 248.556870 l
-25.714859 248.556870 l
-25.714859 235.313202 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-25.714859 254.509628 m
-115.006241 254.509628 l
-115.006241 266.112396 l
-25.714859 266.112396 l
-25.714859 254.509628 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-25.714859 272.065155 m
-115.006241 272.065155 l
-115.006241 285.726562 l
-25.714859 285.726562 l
-25.714859 272.065155 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-47.826523 32.866028 m
-160.928940 32.866028 l
-160.928940 141.511261 l
-47.826523 141.511261 l
-47.826523 32.866028 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-53.779282 38.818787 m
-154.976181 38.818787 l
-154.976181 135.558502 l
-53.779282 135.558502 l
-53.779282 38.818787 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-59.732040 44.771545 m
-149.023422 44.771545 l
-149.023422 58.056000 l
-59.732040 58.056000 l
-59.732040 44.771545 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-59.732040 64.008759 m
-149.023422 64.008759 l
-149.023422 75.109436 l
-59.732040 75.109436 l
-59.732040 64.008759 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-59.732040 81.062195 m
-149.023422 81.062195 l
-149.023422 94.374802 l
-59.732040 94.374802 l
-59.732040 81.062195 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-59.732040 100.327560 m
-149.023422 100.327560 l
-149.023422 111.567993 l
-59.732040 111.567993 l
-59.732040 100.327560 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-59.732040 117.520752 m
-149.023422 117.520752 l
-149.023422 129.605743 l
-59.732040 129.605743 l
-59.732040 117.520752 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-523.069672 382.665939 m
-636.172089 382.665939 l
-636.172089 473.572433 l
-523.069672 473.572433 l
-523.069672 382.665939 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-529.022430 388.618698 m
-630.219330 388.618698 l
-630.219330 467.619675 l
-529.022430 467.619675 l
-529.022430 388.618698 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.975189 394.571457 m
-624.266571 394.571457 l
-624.266571 408.696762 l
-534.975189 408.696762 l
-534.975189 394.571457 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.975189 414.649521 m
-624.266571 414.649521 l
-624.266571 426.034973 l
-534.975189 426.034973 l
-534.975189 414.649521 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.975189 431.987732 m
-624.266571 431.987732 l
-624.266571 443.441223 l
-534.975189 443.441223 l
-534.975189 431.987732 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.975189 449.393982 m
-624.266571 449.393982 l
-624.266571 461.666916 l
-534.975189 461.666916 l
-534.975189 449.393982 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-461.746826 49.772430 m
-574.849243 49.772430 l
-574.849243 138.486374 l
-461.746826 138.486374 l
-461.746826 49.772430 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-467.699585 55.725189 m
-568.896484 55.725189 l
-568.896484 132.533615 l
-467.699585 132.533615 l
-467.699585 55.725189 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-473.652344 61.677948 m
-562.943726 61.677948 l
-562.943726 72.195328 l
-473.652344 72.195328 l
-473.652344 61.677948 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-473.652344 78.148087 m
-562.943726 78.148087 l
-562.943726 89.601074 l
-473.652344 89.601074 l
-473.652344 78.148087 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-473.652344 95.553833 m
-562.943726 95.553833 l
-562.943726 107.028214 l
-473.652344 107.028214 l
-473.652344 95.553833 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-473.652344 112.980972 m
-562.943726 112.980972 l
-562.943726 126.580856 l
-473.652344 126.580856 l
-473.652344 112.980972 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-314.831772 476.334198 m
-427.934189 476.334198 l
-427.934189 565.661743 l
-314.831772 565.661743 l
-314.831772 476.334198 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-320.784531 482.286957 m
-421.981430 482.286957 l
-421.981430 559.708984 l
-320.784531 559.708984 l
-320.784531 482.286957 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-326.737289 488.239716 m
-416.028671 488.239716 l
-416.028671 499.755600 l
-326.737289 499.755600 l
-326.737289 488.239716 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-326.737289 505.708359 m
-416.028671 505.708359 l
-416.028671 517.873245 l
-326.737289 517.873245 l
-326.737289 505.708359 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-326.737289 523.826004 m
-416.028671 523.826004 l
-416.028671 535.360901 l
-326.737289 535.360901 l
-326.737289 523.826004 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-326.737289 541.313660 m
-416.028671 541.313660 l
-416.028671 553.756226 l
-326.737289 553.756226 l
-326.737289 541.313660 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--1.146744 184.806381 m
-111.955673 184.806381 l
-111.955673 277.400757 l
--1.146744 277.400757 l
--1.146744 184.806381 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-4.806015 190.759140 m
-106.002914 190.759140 l
-106.002914 271.447998 l
-4.806015 271.447998 l
-4.806015 190.759140 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.758774 196.711899 m
-100.050156 196.711899 l
-100.050156 211.545807 l
-10.758774 211.545807 l
-10.758774 196.711899 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.758774 217.498566 m
-100.050156 217.498566 l
-100.050156 229.065170 l
-10.758774 229.065170 l
-10.758774 217.498566 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.758774 235.017929 m
-100.050156 235.017929 l
-100.050156 248.385101 l
-10.758774 248.385101 l
-10.758774 235.017929 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.758774 254.337860 m
-100.050156 254.337860 l
-100.050156 265.495239 l
-10.758774 265.495239 l
-10.758774 254.337860 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-312.548691 128.859589 m
-425.651108 128.859589 l
-425.651108 221.876434 l
-312.548691 221.876434 l
-312.548691 128.859589 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-318.501450 134.812347 m
-419.698349 134.812347 l
-419.698349 215.923676 l
-318.501450 215.923676 l
-318.501450 134.812347 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-324.454208 140.765106 m
-413.745590 140.765106 l
-413.745590 154.464371 l
-324.454208 154.464371 l
-324.454208 140.765106 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-324.454208 160.417130 m
-413.745590 160.417130 l
-413.745590 171.544525 l
-324.454208 171.544525 l
-324.454208 160.417130 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-324.454208 177.497284 m
-413.745590 177.497284 l
-413.745590 190.582199 l
-324.454208 190.582199 l
-324.454208 177.497284 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-324.454208 196.534958 m
-413.745590 196.534958 l
-413.745590 209.970917 l
-324.454208 209.970917 l
-324.454208 196.534958 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-141.470795 81.118210 m
-254.573212 81.118210 l
-254.573212 171.301636 l
-141.470795 171.301636 l
-141.470795 81.118210 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-147.423553 87.070969 m
-248.620453 87.070969 l
-248.620453 165.348877 l
-147.423553 165.348877 l
-147.423553 87.070969 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-153.376312 93.023727 m
-242.667694 93.023727 l
-242.667694 105.025284 l
-153.376312 105.025284 l
-153.376312 93.023727 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-153.376312 110.978043 m
-242.667694 110.978043 l
-242.667694 125.433548 l
-153.376312 125.433548 l
-153.376312 110.978043 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-153.376312 131.386307 m
-242.667694 131.386307 l
-242.667694 141.945084 l
-153.376312 141.945084 l
-153.376312 131.386307 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-153.376312 147.897842 m
-242.667694 147.897842 l
-242.667694 159.396118 l
-153.376312 159.396118 l
-153.376312 147.897842 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-339.052139 117.494766 m
-452.154556 117.494766 l
-452.154556 228.746002 l
-339.052139 228.746002 l
-339.052139 117.494766 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-345.004898 123.447525 m
-446.201797 123.447525 l
-446.201797 222.793243 l
-345.004898 222.793243 l
-345.004898 123.447525 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-350.957657 129.400284 m
-440.249039 129.400284 l
-440.249039 144.013885 l
-350.957657 144.013885 l
-350.957657 129.400284 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-350.957657 149.966644 m
-440.249039 149.966644 l
-440.249039 163.258301 l
-350.957657 163.258301 l
-350.957657 149.966644 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-350.957657 169.211060 m
-440.249039 169.211060 l
-440.249039 179.664551 l
-350.957657 179.664551 l
-350.957657 169.211060 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-350.957657 185.617310 m
-440.249039 185.617310 l
-440.249039 196.328873 l
-350.957657 196.328873 l
-350.957657 185.617310 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-350.957657 202.281631 m
-440.249039 202.281631 l
-440.249039 216.840485 l
-350.957657 216.840485 l
-350.957657 202.281631 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-197.940018 668.685425 m
-311.042435 668.685425 l
-311.042435 760.847351 l
-197.940018 760.847351 l
-197.940018 668.685425 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-203.892776 674.638184 m
-305.089676 674.638184 l
-305.089676 754.894592 l
-203.892776 754.894592 l
-203.892776 674.638184 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-209.845535 680.590942 m
-299.136917 680.590942 l
-299.136917 694.912354 l
-209.845535 694.912354 l
-209.845535 680.590942 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-209.845535 700.865112 m
-299.136917 700.865112 l
-299.136917 712.129745 l
-209.845535 712.129745 l
-209.845535 700.865112 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-209.845535 718.082504 m
-299.136917 718.082504 l
-299.136917 730.159348 l
-209.845535 730.159348 l
-209.845535 718.082504 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-209.845535 736.112106 m
-299.136917 736.112106 l
-299.136917 748.941833 l
-209.845535 748.941833 l
-209.845535 736.112106 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-20.849762 335.044083 m
-133.952179 335.044083 l
-133.952179 445.342209 l
-20.849762 445.342209 l
-20.849762 335.044083 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-26.802521 340.996841 m
-127.999420 340.996841 l
-127.999420 439.389450 l
-26.802521 439.389450 l
-26.802521 340.996841 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.755280 346.949600 m
-122.046661 346.949600 l
-122.046661 360.052551 l
-32.755280 360.052551 l
-32.755280 346.949600 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.755280 366.005310 m
-122.046661 366.005310 l
-122.046661 379.919724 l
-32.755280 379.919724 l
-32.755280 366.005310 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.755280 385.872482 m
-122.046661 385.872482 l
-122.046661 396.708267 l
-32.755280 396.708267 l
-32.755280 385.872482 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.755280 402.661026 m
-122.046661 402.661026 l
-122.046661 415.660507 l
-32.755280 415.660507 l
-32.755280 402.661026 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-32.755280 421.613266 m
-122.046661 421.613266 l
-122.046661 433.436691 l
-32.755280 433.436691 l
-32.755280 421.613266 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-53.057465 731.412018 m
-166.159882 731.412018 l
-166.159882 823.412369 l
-53.057465 823.412369 l
-53.057465 731.412018 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-59.010223 737.364777 m
-160.207123 737.364777 l
-160.207123 817.459610 l
-59.010223 817.459610 l
-59.010223 737.364777 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-64.962982 743.317535 m
-154.254364 743.317535 l
-154.254364 757.423309 l
-64.962982 757.423309 l
-64.962982 743.317535 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-64.962982 763.376068 m
-154.254364 763.376068 l
-154.254364 776.212082 l
-64.962982 776.212082 l
-64.962982 763.376068 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-64.962982 782.164841 m
-154.254364 782.164841 l
-154.254364 792.699844 l
-64.962982 792.699844 l
-64.962982 782.164841 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-64.962982 798.652603 m
-154.254364 798.652603 l
-154.254364 811.506851 l
-64.962982 811.506851 l
-64.962982 798.652603 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-324.870987 656.792389 m
-437.973404 656.792389 l
-437.973404 766.233566 l
-324.870987 766.233566 l
-324.870987 656.792389 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-330.823746 662.745148 m
-432.020645 662.745148 l
-432.020645 760.280807 l
-330.823746 760.280807 l
-330.823746 662.745148 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.776505 668.697906 m
-426.067886 668.697906 l
-426.067886 680.390335 l
-336.776505 680.390335 l
-336.776505 668.697906 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.776505 686.343094 m
-426.067886 686.343094 l
-426.067886 699.590088 l
-336.776505 699.590088 l
-336.776505 686.343094 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.776505 705.542847 m
-426.067886 705.542847 l
-426.067886 718.919617 l
-336.776505 718.919617 l
-336.776505 705.542847 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.776505 724.872375 m
-426.067886 724.872375 l
-426.067886 736.491318 l
-336.776505 736.491318 l
-336.776505 724.872375 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.776505 742.444077 m
-426.067886 742.444077 l
-426.067886 754.328049 l
-336.776505 754.328049 l
-336.776505 742.444077 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-225.619766 224.127563 m
-338.722183 224.127563 l
-338.722183 339.003525 l
-225.619766 339.003525 l
-225.619766 224.127563 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-231.572525 230.080322 m
-332.769424 230.080322 l
-332.769424 333.050766 l
-231.572525 333.050766 l
-231.572525 230.080322 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-237.525284 236.033081 m
-326.816666 236.033081 l
-326.816666 249.490189 l
-237.525284 249.490189 l
-237.525284 236.033081 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-237.525284 255.442947 m
-326.816666 255.442947 l
-326.816666 268.781631 l
-237.525284 268.781631 l
-237.525284 255.442947 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-237.525284 274.734390 m
-326.816666 274.734390 l
-326.816666 287.919159 l
-237.525284 287.919159 l
-237.525284 274.734390 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-237.525284 293.871918 m
-326.816666 293.871918 l
-326.816666 307.063751 l
-237.525284 307.063751 l
-237.525284 293.871918 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-237.525284 313.016510 m
-326.816666 313.016510 l
-326.816666 327.098007 l
-237.525284 327.098007 l
-237.525284 313.016510 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--47.508759 271.473083 m
-65.593658 271.473083 l
-65.593658 360.308929 l
--47.508759 360.308929 l
--47.508759 271.473083 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--41.556000 277.425842 m
-59.640900 277.425842 l
-59.640900 354.356171 l
--41.556000 354.356171 l
--41.556000 277.425842 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--35.603241 283.378601 m
-53.688141 283.378601 l
-53.688141 294.105362 l
--35.603241 294.105362 l
--35.603241 283.378601 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--35.603241 300.058121 m
-53.688141 300.058121 l
-53.688141 313.323700 l
--35.603241 313.323700 l
--35.603241 300.058121 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--35.603241 319.276459 m
-53.688141 319.276459 l
-53.688141 331.050613 l
--35.603241 331.050613 l
--35.603241 319.276459 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--35.603241 337.003372 m
-53.688141 337.003372 l
-53.688141 348.403412 l
--35.603241 348.403412 l
--35.603241 337.003372 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-371.821487 345.174637 m
-484.923904 345.174637 l
-484.923904 433.546539 l
-371.821487 433.546539 l
-371.821487 345.174637 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-377.774246 351.127396 m
-478.971146 351.127396 l
-478.971146 427.593781 l
-377.774246 427.593781 l
-377.774246 351.127396 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-383.727005 357.080154 m
-473.018387 357.080154 l
-473.018387 370.109360 l
-383.727005 370.109360 l
-383.727005 357.080154 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-383.727005 376.062119 m
-473.018387 376.062119 l
-473.018387 388.241562 l
-383.727005 388.241562 l
-383.727005 376.062119 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-383.727005 394.194321 m
-473.018387 394.194321 l
-473.018387 405.231003 l
-383.727005 405.231003 l
-383.727005 394.194321 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-383.727005 411.183762 m
-473.018387 411.183762 l
-473.018387 421.641022 l
-383.727005 421.641022 l
-383.727005 411.183762 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-481.398102 606.087280 m
-594.500519 606.087280 l
-594.500519 719.044876 l
-481.398102 719.044876 l
-481.398102 606.087280 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-487.350861 612.040039 m
-588.547760 612.040039 l
-588.547760 713.092117 l
-487.350861 713.092117 l
-487.350861 612.040039 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.303619 617.992798 m
-582.595001 617.992798 l
-582.595001 632.743668 l
-493.303619 632.743668 l
-493.303619 617.992798 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.303619 638.696426 m
-582.595001 638.696426 l
-582.595001 653.054245 l
-493.303619 653.054245 l
-493.303619 638.696426 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.303619 659.007004 m
-582.595001 659.007004 l
-582.595001 669.466248 l
-493.303619 669.466248 l
-493.303619 659.007004 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.303619 675.419006 m
-582.595001 675.419006 l
-582.595001 687.905975 l
-493.303619 687.905975 l
-493.303619 675.419006 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-493.303619 693.858734 m
-582.595001 693.858734 l
-582.595001 707.139359 l
-493.303619 707.139359 l
-493.303619 693.858734 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--39.698090 328.593506 m
-73.404327 328.593506 l
-73.404327 415.665466 l
--39.698090 415.665466 l
--39.698090 328.593506 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--33.745331 334.546265 m
-67.451569 334.546265 l
-67.451569 409.712708 l
--33.745331 409.712708 l
--33.745331 334.546265 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--27.792572 340.499023 m
-61.498810 340.499023 l
-61.498810 352.251740 l
--27.792572 352.251740 l
--27.792572 340.499023 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--27.792572 358.204498 m
-61.498810 358.204498 l
-61.498810 370.279922 l
--27.792572 370.279922 l
--27.792572 358.204498 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--27.792572 376.232681 m
-61.498810 376.232681 l
-61.498810 386.966263 l
--27.792572 386.966263 l
--27.792572 376.232681 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--27.792572 392.919022 m
-61.498810 392.919022 l
-61.498810 403.759949 l
--27.792572 403.759949 l
--27.792572 392.919022 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-522.126923 639.114029 m
-635.229340 639.114029 l
-635.229340 746.834549 l
-522.126923 746.834549 l
-522.126923 639.114029 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-528.079681 645.066788 m
-629.276581 645.066788 l
-629.276581 740.881790 l
-528.079681 740.881790 l
-528.079681 645.066788 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.032440 651.019547 m
-623.323822 651.019547 l
-623.323822 661.784439 l
-534.032440 661.784439 l
-534.032440 651.019547 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.032440 667.737198 m
-623.323822 667.737198 l
-623.323822 680.032318 l
-534.032440 680.032318 l
-534.032440 667.737198 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.032440 685.985077 m
-623.323822 685.985077 l
-623.323822 696.873856 l
-534.032440 696.873856 l
-534.032440 685.985077 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.032440 702.826614 m
-623.323822 702.826614 l
-623.323822 715.881851 l
-534.032440 715.881851 l
-534.032440 702.826614 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-534.032440 721.834610 m
-623.323822 721.834610 l
-623.323822 734.929031 l
-534.032440 734.929031 l
-534.032440 721.834610 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-161.807907 126.952148 m
-274.910324 126.952148 l
-274.910324 236.513718 l
-161.807907 236.513718 l
-161.807907 126.952148 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-167.760666 132.904907 m
-268.957565 132.904907 l
-268.957565 230.560959 l
-167.760666 230.560959 l
-167.760666 132.904907 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-173.713425 138.857666 m
-263.004807 138.857666 l
-263.004807 151.292801 l
-173.713425 151.292801 l
-173.713425 138.857666 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-173.713425 157.245560 m
-263.004807 157.245560 l
-263.004807 170.785385 l
-173.713425 170.785385 l
-173.713425 157.245560 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-173.713425 176.738144 m
-263.004807 176.738144 l
-263.004807 189.023224 l
-173.713425 189.023224 l
-173.713425 176.738144 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-173.713425 194.975983 m
-263.004807 194.975983 l
-263.004807 205.449081 l
-173.713425 205.449081 l
-173.713425 194.975983 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-173.713425 211.401840 m
-263.004807 211.401840 l
-263.004807 224.608200 l
-173.713425 224.608200 l
-173.713425 211.401840 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-426.266846 569.961227 m
-539.369263 569.961227 l
-539.369263 676.612289 l
-426.266846 676.612289 l
-426.266846 569.961227 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-432.219604 575.913986 m
-533.416504 575.913986 l
-533.416504 670.659531 l
-432.219604 670.659531 l
-432.219604 575.913986 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-438.172363 581.866745 m
-527.463745 581.866745 l
-527.463745 594.014084 l
-438.172363 594.014084 l
-438.172363 581.866745 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-438.172363 599.966843 m
-527.463745 599.966843 l
-527.463745 610.754639 l
-438.172363 610.754639 l
-438.172363 599.966843 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-438.172363 616.707397 m
-527.463745 616.707397 l
-527.463745 627.658066 l
-438.172363 627.658066 l
-438.172363 616.707397 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-438.172363 633.610825 m
-527.463745 633.610825 l
-527.463745 645.046753 l
-438.172363 645.046753 l
-438.172363 633.610825 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-438.172363 650.999512 m
-527.463745 650.999512 l
-527.463745 664.706772 l
-438.172363 664.706772 l
-438.172363 650.999512 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--54.944580 585.757690 m
-58.157837 585.757690 l
-58.157837 677.938904 l
--54.944580 677.938904 l
--54.944580 585.757690 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--48.991821 591.710449 m
-52.205078 591.710449 l
-52.205078 671.986145 l
--48.991821 671.986145 l
--48.991821 591.710449 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--43.039062 597.663208 m
-46.252319 597.663208 l
-46.252319 608.906036 l
--43.039062 608.906036 l
--43.039062 597.663208 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--43.039062 614.858795 m
-46.252319 614.858795 l
-46.252319 627.903152 l
--43.039062 627.903152 l
--43.039062 614.858795 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--43.039062 633.855911 m
-46.252319 633.855911 l
-46.252319 645.259583 l
--43.039062 645.259583 l
--43.039062 633.855911 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--43.039062 651.212341 m
-46.252319 651.212341 l
-46.252319 666.033386 l
--43.039062 666.033386 l
--43.039062 651.212341 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-240.213043 577.409363 m
-353.315460 577.409363 l
-353.315460 691.840210 l
-240.213043 691.840210 l
-240.213043 577.409363 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-246.165802 583.362122 m
-347.362701 583.362122 l
-347.362701 685.887451 l
-246.165802 685.887451 l
-246.165802 583.362122 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-252.118561 589.314880 m
-341.409943 589.314880 l
-341.409943 603.187515 l
-252.118561 603.187515 l
-252.118561 589.314880 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-252.118561 609.140274 m
-341.409943 609.140274 l
-341.409943 622.927795 l
-252.118561 622.927795 l
-252.118561 609.140274 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-252.118561 628.880554 m
-341.409943 628.880554 l
-341.409943 642.130554 l
-252.118561 642.130554 l
-252.118561 628.880554 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-252.118561 648.083313 m
-341.409943 648.083313 l
-341.409943 661.425903 l
-252.118561 661.425903 l
-252.118561 648.083313 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-252.118561 667.378662 m
-341.409943 667.378662 l
-341.409943 679.934692 l
-252.118561 679.934692 l
-252.118561 667.378662 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--45.898148 -9.564789 m
-67.204269 -9.564789 l
-67.204269 82.583862 l
--45.898148 82.583862 l
--45.898148 -9.564789 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--39.945389 -3.612030 m
-61.251511 -3.612030 l
-61.251511 76.631104 l
--39.945389 76.631104 l
--39.945389 -3.612030 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.992630 2.340729 m
-55.298752 2.340729 l
-55.298752 13.834061 l
--33.992630 13.834061 l
--33.992630 2.340729 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.992630 19.786819 m
-55.298752 19.786819 l
-55.298752 32.607666 l
--33.992630 32.607666 l
--33.992630 19.786819 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.992630 38.560425 m
-55.298752 38.560425 l
-55.298752 50.231674 l
--33.992630 50.231674 l
--33.992630 38.560425 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--33.992630 56.184433 m
-55.298752 56.184433 l
-55.298752 70.678345 l
--33.992630 70.678345 l
--33.992630 56.184433 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-223.893494 742.360214 m
-336.995911 742.360214 l
-336.995911 833.040466 l
-223.893494 833.040466 l
-223.893494 742.360214 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-229.846252 748.312973 m
-331.043152 748.312973 l
-331.043152 827.087708 l
-229.846252 827.087708 l
-229.846252 748.312973 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-235.799011 754.265732 m
-325.090393 754.265732 l
-325.090393 768.430038 l
-235.799011 768.430038 l
-235.799011 754.265732 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-235.799011 774.382797 m
-325.090393 774.382797 l
-325.090393 786.430923 l
-235.799011 786.430923 l
-235.799011 774.382797 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-235.799011 792.383682 m
-325.090393 792.383682 l
-325.090393 803.337341 l
-235.799011 803.337341 l
-235.799011 792.383682 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-235.799011 809.290100 m
-325.090393 809.290100 l
-325.090393 821.134949 l
-235.799011 821.134949 l
-235.799011 809.290100 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-24.678467 384.860321 m
-137.780884 384.860321 l
-137.780884 493.283112 l
-24.678467 493.283112 l
-24.678467 384.860321 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-30.631226 390.813080 m
-131.828125 390.813080 l
-131.828125 487.330353 l
-30.631226 487.330353 l
-30.631226 390.813080 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-36.583984 396.765839 m
-125.875366 396.765839 l
-125.875366 407.375824 l
-36.583984 407.375824 l
-36.583984 396.765839 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-36.583984 413.328583 m
-125.875366 413.328583 l
-125.875366 424.169861 l
-36.583984 424.169861 l
-36.583984 413.328583 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-36.583984 430.122620 m
-125.875366 430.122620 l
-125.875366 440.988617 l
-36.583984 440.988617 l
-36.583984 430.122620 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-36.583984 446.941376 m
-125.875366 446.941376 l
-125.875366 461.240219 l
-36.583984 461.240219 l
-36.583984 446.941376 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-36.583984 467.192978 m
-125.875366 467.192978 l
-125.875366 481.377594 l
-36.583984 481.377594 l
-36.583984 467.192978 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-354.757156 460.143158 m
-467.859573 460.143158 l
-467.859573 573.366089 l
-354.757156 573.366089 l
-354.757156 460.143158 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-360.709915 466.095917 m
-461.906815 466.095917 l
-461.906815 567.413330 l
-360.709915 567.413330 l
-360.709915 466.095917 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-366.662674 472.048676 m
-455.954056 472.048676 l
-455.954056 485.026566 l
-366.662674 485.026566 l
-366.662674 472.048676 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-366.662674 490.979324 m
-455.954056 490.979324 l
-455.954056 505.506683 l
-366.662674 505.506683 l
-366.662674 490.979324 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-366.662674 511.459442 m
-455.954056 511.459442 l
-455.954056 525.755920 l
-366.662674 525.755920 l
-366.662674 511.459442 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-366.662674 531.708679 m
-455.954056 531.708679 l
-455.954056 543.697906 l
-366.662674 543.697906 l
-366.662674 531.708679 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-366.662674 549.650665 m
-455.954056 549.650665 l
-455.954056 561.460571 l
-366.662674 561.460571 l
-366.662674 549.650665 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-351.937515 145.601837 m
-465.039932 145.601837 l
-465.039932 253.521271 l
-351.937515 253.521271 l
-351.937515 145.601837 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-357.890274 151.554596 m
-459.087173 151.554596 l
-459.087173 247.568512 l
-357.890274 247.568512 l
-357.890274 151.554596 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.843033 157.507355 m
-453.134415 157.507355 l
-453.134415 168.245956 l
-363.843033 168.245956 l
-363.843033 157.507355 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.843033 174.198715 m
-453.134415 174.198715 l
-453.134415 185.276367 l
-363.843033 185.276367 l
-363.843033 174.198715 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.843033 191.229126 m
-453.134415 191.229126 l
-453.134415 204.237244 l
-363.843033 204.237244 l
-363.843033 191.229126 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.843033 210.190002 m
-453.134415 210.190002 l
-453.134415 220.827988 l
-363.843033 220.827988 l
-363.843033 210.190002 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-363.843033 226.780746 m
-453.134415 226.780746 l
-453.134415 241.615753 l
-363.843033 241.615753 l
-363.843033 226.780746 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-279.701447 613.204361 m
-392.803864 613.204361 l
-392.803864 698.090363 l
-279.701447 698.090363 l
-279.701447 613.204361 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-285.654205 619.157120 m
-386.851105 619.157120 l
-386.851105 692.137604 l
-285.654205 692.137604 l
-285.654205 619.157120 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-291.606964 625.109879 m
-380.898346 625.109879 l
-380.898346 635.546432 l
-291.606964 635.546432 l
-291.606964 625.109879 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-291.606964 641.499191 m
-380.898346 641.499191 l
-380.898346 652.099533 l
-291.606964 652.099533 l
-291.606964 641.499191 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-291.606964 658.052292 m
-380.898346 658.052292 l
-380.898346 669.762558 l
-291.606964 669.762558 l
-291.606964 658.052292 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-291.606964 675.715317 m
-380.898346 675.715317 l
-380.898346 686.184845 l
-291.606964 686.184845 l
-291.606964 675.715317 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-149.603180 22.263702 m
-262.705597 22.263702 l
-262.705597 134.509811 l
-149.603180 134.509811 l
-149.603180 22.263702 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-155.555939 28.216461 m
-256.752838 28.216461 l
-256.752838 128.557053 l
-155.555939 128.557053 l
-155.555939 28.216461 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-161.508698 34.169220 m
-250.800079 34.169220 l
-250.800079 45.619812 l
-161.508698 45.619812 l
-161.508698 34.169220 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-161.508698 51.572571 m
-250.800079 51.572571 l
-250.800079 66.113358 l
-161.508698 66.113358 l
-161.508698 51.572571 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-161.508698 72.066116 m
-250.800079 72.066116 l
-250.800079 84.731964 l
-161.508698 84.731964 l
-161.508698 72.066116 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-161.508698 90.684723 m
-250.800079 90.684723 l
-250.800079 103.444412 l
-161.508698 103.444412 l
-161.508698 90.684723 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-161.508698 109.397171 m
-250.800079 109.397171 l
-250.800079 122.604294 l
-161.508698 122.604294 l
-161.508698 109.397171 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-451.782303 419.001480 m
-564.884720 419.001480 l
-564.884720 527.521820 l
-451.782303 527.521820 l
-451.782303 419.001480 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-457.735062 424.954239 m
-558.931961 424.954239 l
-558.931961 521.569061 l
-457.735062 521.569061 l
-457.735062 424.954239 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.687820 430.906998 m
-552.979202 430.906998 l
-552.979202 445.479599 l
-463.687820 445.479599 l
-463.687820 430.906998 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.687820 451.432358 m
-552.979202 451.432358 l
-552.979202 462.427872 l
-463.687820 462.427872 l
-463.687820 451.432358 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.687820 468.380630 m
-552.979202 468.380630 l
-552.979202 479.783127 l
-463.687820 479.783127 l
-463.687820 468.380630 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.687820 485.735886 m
-552.979202 485.735886 l
-552.979202 498.362732 l
-463.687820 498.362732 l
-463.687820 485.735886 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-463.687820 504.315491 m
-552.979202 504.315491 l
-552.979202 515.616302 l
-463.687820 515.616302 l
-463.687820 504.315491 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--1.041367 126.176010 m
-112.061050 126.176010 l
-112.061050 236.511475 l
--1.041367 236.511475 l
--1.041367 126.176010 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-4.911392 132.128769 m
-106.108292 132.128769 l
-106.108292 230.558716 l
-4.911392 230.558716 l
-4.911392 132.128769 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.864151 138.081528 m
-100.155533 138.081528 l
-100.155533 152.662247 l
-10.864151 152.662247 l
-10.864151 138.081528 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.864151 158.615005 m
-100.155533 158.615005 l
-100.155533 169.281357 l
-10.864151 169.281357 l
-10.864151 158.615005 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.864151 175.234116 m
-100.155533 175.234116 l
-100.155533 187.938156 l
-10.864151 187.938156 l
-10.864151 175.234116 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.864151 193.890915 m
-100.155533 193.890915 l
-100.155533 204.877975 l
-10.864151 204.877975 l
-10.864151 193.890915 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-10.864151 210.830734 m
-100.155533 210.830734 l
-100.155533 224.605957 l
-10.864151 224.605957 l
-10.864151 210.830734 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-118.061707 257.318314 m
-231.164124 257.318314 l
-231.164124 375.177658 l
-118.061707 375.177658 l
-118.061707 257.318314 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-124.014465 263.271072 m
-225.211365 263.271072 l
-225.211365 369.224899 l
-124.014465 369.224899 l
-124.014465 263.271072 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.967224 269.223831 m
-219.258606 269.223831 l
-219.258606 282.818176 l
-129.967224 282.818176 l
-129.967224 269.223831 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.967224 288.770935 m
-219.258606 288.770935 l
-219.258606 301.390778 l
-129.967224 301.390778 l
-129.967224 288.770935 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.967224 307.343536 m
-219.258606 307.343536 l
-219.258606 321.863495 l
-129.967224 321.863495 l
-129.967224 307.343536 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.967224 327.816254 m
-219.258606 327.816254 l
-219.258606 342.479675 l
-129.967224 342.479675 l
-129.967224 327.816254 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-129.967224 348.432434 m
-219.258606 348.432434 l
-219.258606 363.272141 l
-129.967224 363.272141 l
-129.967224 348.432434 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-281.503281 22.760239 m
-394.605698 22.760239 l
-394.605698 118.201645 l
-281.503281 118.201645 l
-281.503281 22.760239 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-287.456039 28.712997 m
-388.652939 28.712997 l
-388.652939 112.248886 l
-287.456039 112.248886 l
-287.456039 28.712997 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-293.408798 34.665756 m
-382.700180 34.665756 l
-382.700180 49.268692 l
-293.408798 49.268692 l
-293.408798 34.665756 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-293.408798 55.221451 m
-382.700180 55.221451 l
-382.700180 68.762970 l
-293.408798 68.762970 l
-293.408798 55.221451 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-293.408798 74.715729 m
-382.700180 74.715729 l
-382.700180 87.278687 l
-293.408798 87.278687 l
-293.408798 74.715729 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-293.408798 93.231445 m
-382.700180 93.231445 l
-382.700180 106.296127 l
-293.408798 106.296127 l
-293.408798 93.231445 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-84.753052 166.282669 m
-197.855469 166.282669 l
-197.855469 282.604675 l
-84.753052 282.604675 l
-84.753052 166.282669 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-90.705811 172.235428 m
-191.902710 172.235428 l
-191.902710 276.651917 l
-90.705811 276.651917 l
-90.705811 172.235428 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.658569 178.188187 m
-185.949951 178.188187 l
-185.949951 191.074036 l
-96.658569 191.074036 l
-96.658569 178.188187 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.658569 197.026794 m
-185.949951 197.026794 l
-185.949951 210.596313 l
-96.658569 210.596313 l
-96.658569 197.026794 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.658569 216.549072 m
-185.949951 216.549072 l
-185.949951 231.349899 l
-96.658569 231.349899 l
-96.658569 216.549072 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.658569 237.302658 m
-185.949951 237.302658 l
-185.949951 250.126907 l
-96.658569 250.126907 l
-96.658569 237.302658 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.658569 256.079666 m
-185.949951 256.079666 l
-185.949951 270.699158 l
-96.658569 270.699158 l
-96.658569 256.079666 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-84.546097 664.626587 m
-197.648514 664.626587 l
-197.648514 778.641205 l
-84.546097 778.641205 l
-84.546097 664.626587 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-90.498856 670.579346 m
-191.695755 670.579346 l
-191.695755 772.688446 l
-90.498856 772.688446 l
-90.498856 670.579346 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.451614 676.532104 m
-185.742996 676.532104 l
-185.742996 690.318069 l
-96.451614 690.318069 l
-96.451614 676.532104 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.451614 696.270828 m
-185.742996 696.270828 l
-185.742996 710.708176 l
-96.451614 710.708176 l
-96.451614 696.270828 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.451614 716.660934 m
-185.742996 716.660934 l
-185.742996 729.076050 l
-96.451614 729.076050 l
-96.451614 716.660934 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.451614 735.028809 m
-185.742996 735.028809 l
-185.742996 749.112930 l
-96.451614 749.112930 l
-96.451614 735.028809 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-96.451614 755.065689 m
-185.742996 755.065689 l
-185.742996 766.735687 l
-96.451614 766.735687 l
-96.451614 755.065689 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--44.691895 772.220505 m
-68.410522 772.220505 l
-68.410522 885.802780 l
--44.691895 885.802780 l
--44.691895 772.220505 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--38.739136 778.173264 m
-62.457764 778.173264 l
-62.457764 879.850021 l
--38.739136 879.850021 l
--38.739136 778.173264 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.786377 784.126022 m
-56.505005 784.126022 l
-56.505005 798.915375 l
--32.786377 798.915375 l
--32.786377 784.126022 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.786377 804.868134 m
-56.505005 804.868134 l
-56.505005 817.265076 l
--32.786377 817.265076 l
--32.786377 804.868134 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.786377 823.217834 m
-56.505005 823.217834 l
-56.505005 835.354385 l
--32.786377 835.354385 l
--32.786377 823.217834 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.786377 841.307144 m
-56.505005 841.307144 l
-56.505005 853.830948 l
--32.786377 853.830948 l
--32.786377 841.307144 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.786377 859.783707 m
-56.505005 859.783707 l
-56.505005 873.897263 l
--32.786377 873.897263 l
--32.786377 859.783707 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-223.020538 300.405121 m
-336.122955 300.405121 l
-336.122955 392.477356 l
-223.020538 392.477356 l
-223.020538 300.405121 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-228.973297 306.357880 m
-330.170197 306.357880 l
-330.170197 386.524597 l
-228.973297 386.524597 l
-228.973297 306.357880 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.926056 312.310638 m
-324.217438 312.310638 l
-324.217438 323.980164 l
-234.926056 323.980164 l
-234.926056 312.310638 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.926056 329.932922 m
-324.217438 329.932922 l
-324.217438 341.975372 l
-234.926056 341.975372 l
-234.926056 329.932922 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.926056 347.928131 m
-324.217438 347.928131 l
-324.217438 362.548615 l
-234.926056 362.548615 l
-234.926056 347.928131 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-234.926056 368.501373 m
-324.217438 368.501373 l
-324.217438 380.571838 l
-234.926056 380.571838 l
-234.926056 368.501373 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-140.554306 -22.520844 m
-253.656723 -22.520844 l
-253.656723 72.928101 l
-140.554306 72.928101 l
-140.554306 -22.520844 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-146.507065 -16.568085 m
-247.703964 -16.568085 l
-247.703964 66.975342 l
-146.507065 66.975342 l
-146.507065 -16.568085 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-152.459824 -10.615326 m
-241.751205 -10.615326 l
-241.751205 1.481003 l
-152.459824 1.481003 l
-152.459824 -10.615326 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-152.459824 7.433762 m
-241.751205 7.433762 l
-241.751205 20.574966 l
-152.459824 20.574966 l
-152.459824 7.433762 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-152.459824 26.527725 m
-241.751205 26.527725 l
-241.751205 40.263046 l
-152.459824 40.263046 l
-152.459824 26.527725 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-152.459824 46.215805 m
-241.751205 46.215805 l
-241.751205 61.022583 l
-152.459824 61.022583 l
-152.459824 46.215805 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-324.237625 721.495346 m
-437.340042 721.495346 l
-437.340042 829.800674 l
-324.237625 829.800674 l
-324.237625 721.495346 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-330.190384 727.448105 m
-431.387283 727.448105 l
-431.387283 823.847916 l
-330.190384 823.847916 l
-330.190384 727.448105 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.143143 733.400864 m
-425.434525 733.400864 l
-425.434525 744.148178 l
-336.143143 744.148178 l
-336.143143 733.400864 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.143143 750.100937 m
-425.434525 750.100937 l
-425.434525 763.185104 l
-336.143143 763.185104 l
-336.143143 750.100937 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.143143 769.137863 m
-425.434525 769.137863 l
-425.434525 783.486206 l
-336.143143 783.486206 l
-336.143143 769.137863 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.143143 789.438965 m
-425.434525 789.438965 l
-425.434525 800.312714 l
-336.143143 800.312714 l
-336.143143 789.438965 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-336.143143 806.265472 m
-425.434525 806.265472 l
-425.434525 817.895157 l
-336.143143 817.895157 l
-336.143143 806.265472 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-493.141785 560.773071 m
-606.244202 560.773071 l
-606.244202 656.804321 l
-493.141785 656.804321 l
-493.141785 560.773071 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-499.094543 566.725830 m
-600.291443 566.725830 l
-600.291443 650.851562 l
-499.094543 650.851562 l
-499.094543 566.725830 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.047302 572.678589 m
-594.338684 572.678589 l
-594.338684 586.529449 l
-505.047302 586.529449 l
-505.047302 572.678589 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.047302 592.482208 m
-594.338684 592.482208 l
-594.338684 605.907349 l
-505.047302 605.907349 l
-505.047302 592.482208 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.047302 611.860107 m
-594.338684 611.860107 l
-594.338684 626.284363 l
-505.047302 626.284363 l
-505.047302 611.860107 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-505.047302 632.237122 m
-594.338684 632.237122 l
-594.338684 644.898804 l
-505.047302 644.898804 l
-505.047302 632.237122 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-339.968719 500.868073 m
-453.071136 500.868073 l
-453.071136 613.777512 l
-339.968719 613.777512 l
-339.968719 500.868073 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-345.921478 506.820831 m
-447.118378 506.820831 l
-447.118378 607.824753 l
-345.921478 607.824753 l
-345.921478 506.820831 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.874237 512.773590 m
-441.165619 512.773590 l
-441.165619 525.972977 l
-351.874237 525.972977 l
-351.874237 512.773590 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.874237 531.925735 m
-441.165619 531.925735 l
-441.165619 546.072784 l
-351.874237 546.072784 l
-351.874237 531.925735 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.874237 552.025543 m
-441.165619 552.025543 l
-441.165619 564.124557 l
-351.874237 564.124557 l
-351.874237 552.025543 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.874237 570.077316 m
-441.165619 570.077316 l
-441.165619 583.089035 l
-351.874237 583.089035 l
-351.874237 570.077316 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-351.874237 589.041794 m
-441.165619 589.041794 l
-441.165619 601.871994 l
-351.874237 601.871994 l
-351.874237 589.041794 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-483.965302 703.793930 m
-597.067719 703.793930 l
-597.067719 794.164093 l
-483.965302 794.164093 l
-483.965302 703.793930 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-489.918060 709.746689 m
-591.114960 709.746689 l
-591.114960 788.211334 l
-489.918060 788.211334 l
-489.918060 709.746689 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-495.870819 715.699448 m
-585.162201 715.699448 l
-585.162201 729.608536 l
-495.870819 729.608536 l
-495.870819 715.699448 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-495.870819 735.561295 m
-585.162201 735.561295 l
-585.162201 746.090454 l
-495.870819 746.090454 l
-495.870819 735.561295 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-495.870819 752.043213 m
-585.162201 752.043213 l
-585.162201 765.703171 l
-495.870819 765.703171 l
-495.870819 752.043213 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-495.870819 771.655930 m
-585.162201 771.655930 l
-585.162201 782.258575 l
-495.870819 782.258575 l
-495.870819 771.655930 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-202.616257 122.540207 m
-315.718674 122.540207 l
-315.718674 234.364761 l
-202.616257 234.364761 l
-202.616257 122.540207 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-208.569016 128.492966 m
-309.765915 128.492966 l
-309.765915 228.412003 l
-208.569016 228.412003 l
-208.569016 128.492966 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-214.521774 134.445724 m
-303.813156 134.445724 l
-303.813156 146.161682 l
-214.521774 146.161682 l
-214.521774 134.445724 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-214.521774 152.114441 m
-303.813156 152.114441 l
-303.813156 164.881363 l
-214.521774 164.881363 l
-214.521774 152.114441 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-214.521774 170.834122 m
-303.813156 170.834122 l
-303.813156 183.576126 l
-214.521774 183.576126 l
-214.521774 170.834122 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-214.521774 189.528885 m
-303.813156 189.528885 l
-303.813156 201.730667 l
-214.521774 201.730667 l
-214.521774 189.528885 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-214.521774 207.683426 m
-303.813156 207.683426 l
-303.813156 222.459244 l
-214.521774 222.459244 l
-214.521774 207.683426 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-476.661011 644.793076 m
-589.763428 644.793076 l
-589.763428 732.484665 l
-476.661011 732.484665 l
-476.661011 644.793076 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-482.613770 650.745834 m
-583.810669 650.745834 l
-583.810669 726.531906 l
-482.613770 726.531906 l
-482.613770 650.745834 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-488.566528 656.698593 m
-577.857910 656.698593 l
-577.857910 667.496277 l
-488.566528 667.496277 l
-488.566528 656.698593 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-488.566528 673.449036 m
-577.857910 673.449036 l
-577.857910 684.240662 l
-488.566528 684.240662 l
-488.566528 673.449036 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-488.566528 690.193420 m
-577.857910 690.193420 l
-577.857910 701.604065 l
-488.566528 701.604065 l
-488.566528 690.193420 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-488.566528 707.556824 m
-577.857910 707.556824 l
-577.857910 720.579147 l
-488.566528 720.579147 l
-488.566528 707.556824 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-217.085373 199.521332 m
-330.187790 199.521332 l
-330.187790 288.843918 l
-217.085373 288.843918 l
-217.085373 199.521332 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-223.038132 205.474091 m
-324.235031 205.474091 l
-324.235031 282.891159 l
-223.038132 282.891159 l
-223.038132 205.474091 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-228.990891 211.426849 m
-318.282272 211.426849 l
-318.282272 222.064209 l
-228.990891 222.064209 l
-228.990891 211.426849 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-228.990891 228.016968 m
-318.282272 228.016968 l
-318.282272 241.291473 l
-228.990891 241.291473 l
-228.990891 228.016968 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-228.990891 247.244232 m
-318.282272 247.244232 l
-318.282272 258.535355 l
-228.990891 258.535355 l
-228.990891 247.244232 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-228.990891 264.488113 m
-318.282272 264.488113 l
-318.282272 276.938400 l
-228.990891 276.938400 l
-228.990891 264.488113 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-344.561523 335.996338 m
-457.663940 335.996338 l
-457.663940 449.550400 l
-344.561523 449.550400 l
-344.561523 335.996338 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-350.514282 341.949097 m
-451.711182 341.949097 l
-451.711182 443.597641 l
-350.514282 443.597641 l
-350.514282 341.949097 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-356.467041 347.901855 m
-445.758423 347.901855 l
-445.758423 361.924866 l
-356.467041 361.924866 l
-356.467041 347.901855 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-356.467041 367.877625 m
-445.758423 367.877625 l
-445.758423 381.357727 l
-356.467041 381.357727 l
-356.467041 367.877625 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-356.467041 387.310486 m
-445.758423 387.310486 l
-445.758423 397.876404 l
-356.467041 397.876404 l
-356.467041 387.310486 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-356.467041 403.829163 m
-445.758423 403.829163 l
-445.758423 416.993073 l
-356.467041 416.993073 l
-356.467041 403.829163 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-356.467041 422.945831 m
-445.758423 422.945831 l
-445.758423 437.644882 l
-356.467041 437.644882 l
-356.467041 422.945831 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-296.484116 685.629852 m
-409.586533 685.629852 l
-409.586533 796.034317 l
-296.484116 796.034317 l
-296.484116 685.629852 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-302.436874 691.582611 m
-403.633774 691.582611 l
-403.633774 790.081558 l
-302.436874 790.081558 l
-302.436874 691.582611 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-308.389633 697.535370 m
-397.681015 697.535370 l
-397.681015 710.473770 l
-308.389633 710.473770 l
-308.389633 697.535370 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-308.389633 716.426529 m
-397.681015 716.426529 l
-397.681015 727.380951 l
-308.389633 727.380951 l
-308.389633 716.426529 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-308.389633 733.333710 m
-397.681015 733.333710 l
-397.681015 745.650024 l
-308.389633 745.650024 l
-308.389633 733.333710 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-308.389633 751.602783 m
-397.681015 751.602783 l
-397.681015 764.709030 l
-308.389633 764.709030 l
-308.389633 751.602783 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-308.389633 770.661789 m
-397.681015 770.661789 l
-397.681015 784.128799 l
-308.389633 784.128799 l
-308.389633 770.661789 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-277.912766 -27.334595 m
-391.015182 -27.334595 l
-391.015182 70.134033 l
-277.912766 70.134033 l
-277.912766 -27.334595 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-283.865524 -21.381836 m
-385.062424 -21.381836 l
-385.062424 64.181274 l
-283.865524 64.181274 l
-283.865524 -21.381836 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-289.818283 -15.429077 m
-379.109665 -15.429077 l
-379.109665 -2.310287 l
-289.818283 -2.310287 l
-289.818283 -15.429077 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-289.818283 3.642471 m
-379.109665 3.642471 l
-379.109665 17.828827 l
-289.818283 17.828827 l
-289.818283 3.642471 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-289.818283 23.781586 m
-379.109665 23.781586 l
-379.109665 38.568665 l
-289.818283 38.568665 l
-289.818283 23.781586 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-289.818283 44.521423 m
-379.109665 44.521423 l
-379.109665 58.228516 l
-289.818283 58.228516 l
-289.818283 44.521423 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-81.679794 481.382431 m
-194.782211 481.382431 l
-194.782211 570.785843 l
-81.679794 570.785843 l
-81.679794 481.382431 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-87.632553 487.335190 m
-188.829453 487.335190 l
-188.829453 564.833084 l
-87.632553 564.833084 l
-87.632553 487.335190 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-93.585312 493.287949 m
-182.876694 493.287949 l
-182.876694 504.664413 l
-93.585312 504.664413 l
-93.585312 493.287949 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-93.585312 510.617172 m
-182.876694 510.617172 l
-182.876694 523.617050 l
-93.585312 523.617050 l
-93.585312 510.617172 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-93.585312 529.569809 m
-182.876694 529.569809 l
-182.876694 541.718567 l
-93.585312 541.718567 l
-93.585312 529.569809 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-93.585312 547.671326 m
-182.876694 547.671326 l
-182.876694 558.880325 l
-93.585312 558.880325 l
-93.585312 547.671326 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-519.438110 718.589249 m
-632.540527 718.589249 l
-632.540527 815.669403 l
-519.438110 815.669403 l
-519.438110 718.589249 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-525.390869 724.542007 m
-626.587769 724.542007 l
-626.587769 809.716644 l
-525.390869 809.716644 l
-525.390869 724.542007 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.343628 730.494766 m
-620.635010 730.494766 l
-620.635010 744.056305 l
-531.343628 744.056305 l
-531.343628 730.494766 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.343628 750.009064 m
-620.635010 750.009064 l
-620.635010 764.707718 l
-531.343628 764.707718 l
-531.343628 750.009064 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.343628 770.660477 m
-620.635010 770.660477 l
-620.635010 784.039551 l
-531.343628 784.039551 l
-531.343628 770.660477 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-531.343628 789.992310 m
-620.635010 789.992310 l
-620.635010 803.763885 l
-531.343628 803.763885 l
-531.343628 789.992310 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-75.538574 278.035736 m
-188.640991 278.035736 l
-188.640991 390.232758 l
-75.538574 390.232758 l
-75.538574 278.035736 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-81.491333 283.988495 m
-182.688232 283.988495 l
-182.688232 384.279999 l
-81.491333 384.279999 l
-81.491333 283.988495 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.444092 289.941254 m
-176.735474 289.941254 l
-176.735474 303.002136 l
-87.444092 303.002136 l
-87.444092 289.941254 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.444092 308.954895 m
-176.735474 308.954895 l
-176.735474 322.302902 l
-87.444092 322.302902 l
-87.444092 308.954895 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.444092 328.255661 m
-176.735474 328.255661 l
-176.735474 340.777161 l
-87.444092 340.777161 l
-87.444092 328.255661 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.444092 346.729919 m
-176.735474 346.729919 l
-176.735474 360.055771 l
-87.444092 360.055771 l
-87.444092 346.729919 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-87.444092 366.008530 m
-176.735474 366.008530 l
-176.735474 378.327240 l
-87.444092 378.327240 l
-87.444092 366.008530 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--50.628494 388.995621 m
-62.473923 388.995621 l
-62.473923 478.805435 l
--50.628494 478.805435 l
--50.628494 388.995621 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--44.675735 394.948380 m
-56.521164 394.948380 l
-56.521164 472.852676 l
--44.675735 472.852676 l
--44.675735 394.948380 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--38.722977 400.901138 m
-50.568405 400.901138 l
-50.568405 413.856766 l
--38.722977 413.856766 l
--38.722977 400.901138 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--38.722977 419.809525 m
-50.568405 419.809525 l
-50.568405 430.652008 l
--38.722977 430.652008 l
--38.722977 419.809525 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--38.722977 436.604767 m
-50.568405 436.604767 l
-50.568405 449.808365 l
--38.722977 449.808365 l
--38.722977 436.604767 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--38.722977 455.761124 m
-50.568405 455.761124 l
-50.568405 466.899918 l
--38.722977 466.899918 l
--38.722977 455.761124 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-261.336166 784.577026 m
-374.438583 784.577026 l
-374.438583 896.727890 l
-261.336166 896.727890 l
-261.336166 784.577026 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-267.288925 790.529785 m
-368.485825 790.529785 l
-368.485825 890.775131 l
-267.288925 890.775131 l
-267.288925 790.529785 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-273.241684 796.482544 m
-362.533066 796.482544 l
-362.533066 809.354279 l
-273.241684 809.354279 l
-273.241684 796.482544 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-273.241684 815.307037 m
-362.533066 815.307037 l
-362.533066 828.138275 l
-273.241684 828.138275 l
-273.241684 815.307037 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-273.241684 834.091034 m
-362.533066 834.091034 l
-362.533066 845.251373 l
-273.241684 845.251373 l
-273.241684 834.091034 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-273.241684 851.204132 m
-362.533066 851.204132 l
-362.533066 864.823792 l
-273.241684 864.823792 l
-273.241684 851.204132 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-273.241684 870.776550 m
-362.533066 870.776550 l
-362.533066 884.822372 l
-273.241684 884.822372 l
-273.241684 870.776550 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-300.544220 258.647949 m
-413.646637 258.647949 l
-413.646637 351.744553 l
-300.544220 351.744553 l
-300.544220 258.647949 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-306.496979 264.600708 m
-407.693878 264.600708 l
-407.693878 345.791794 l
-306.496979 345.791794 l
-306.496979 264.600708 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-312.449738 270.553467 m
-401.741119 270.553467 l
-401.741119 282.182312 l
-312.449738 282.182312 l
-312.449738 270.553467 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-312.449738 288.135071 m
-401.741119 288.135071 l
-401.741119 302.871414 l
-312.449738 302.871414 l
-312.449738 288.135071 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-312.449738 308.824173 m
-401.741119 308.824173 l
-401.741119 319.481445 l
-312.449738 319.481445 l
-312.449738 308.824173 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-312.449738 325.434204 m
-401.741119 325.434204 l
-401.741119 339.839035 l
-312.449738 339.839035 l
-312.449738 325.434204 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-142.155304 355.306000 m
-255.257721 355.306000 l
-255.257721 471.456100 l
-142.155304 471.456100 l
-142.155304 355.306000 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-148.108063 361.258759 m
-249.304962 361.258759 l
-249.304962 465.503342 l
-148.108063 465.503342 l
-148.108063 361.258759 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-154.060822 367.211517 m
-243.352203 367.211517 l
-243.352203 381.406082 l
-154.060822 381.406082 l
-154.060822 367.211517 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-154.060822 387.358841 m
-243.352203 387.358841 l
-243.352203 400.884155 l
-154.060822 400.884155 l
-154.060822 387.358841 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-154.060822 406.836914 m
-243.352203 406.836914 l
-243.352203 419.466400 l
-154.060822 419.466400 l
-154.060822 406.836914 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-154.060822 425.419159 m
-243.352203 425.419159 l
-243.352203 439.284027 l
-154.060822 439.284027 l
-154.060822 425.419159 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-154.060822 445.236786 m
-243.352203 445.236786 l
-243.352203 459.550583 l
-154.060822 459.550583 l
-154.060822 445.236786 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-35.254486 467.735870 m
-148.356903 467.735870 l
-148.356903 577.089905 l
-35.254486 577.089905 l
-35.254486 467.735870 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-41.207245 473.688629 m
-142.404144 473.688629 l
-142.404144 571.137146 l
-41.207245 571.137146 l
-41.207245 473.688629 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-47.160004 479.641388 m
-136.451385 479.641388 l
-136.451385 494.089874 l
-47.160004 494.089874 l
-47.160004 479.641388 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-47.160004 500.042633 m
-136.451385 500.042633 l
-136.451385 511.832214 l
-47.160004 511.832214 l
-47.160004 500.042633 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-47.160004 517.784973 m
-136.451385 517.784973 l
-136.451385 528.348694 l
-47.160004 528.348694 l
-47.160004 517.784973 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-47.160004 534.301453 m
-136.451385 534.301453 l
-136.451385 546.056870 l
-47.160004 546.056870 l
-47.160004 534.301453 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-47.160004 552.009628 m
-136.451385 552.009628 l
-136.451385 565.184387 l
-47.160004 565.184387 l
-47.160004 552.009628 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-367.603928 210.644669 m
-480.706345 210.644669 l
-480.706345 316.057953 l
-367.603928 316.057953 l
-367.603928 210.644669 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-373.556686 216.597427 m
-474.753586 216.597427 l
-474.753586 310.105194 l
-373.556686 310.105194 l
-373.556686 216.597427 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.509445 222.550186 m
-468.800827 222.550186 l
-468.800827 233.977829 l
-379.509445 233.977829 l
-379.509445 222.550186 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.509445 239.930588 m
-468.800827 239.930588 l
-468.800827 251.760422 l
-379.509445 251.760422 l
-379.509445 239.930588 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.509445 257.713181 m
-468.800827 257.713181 l
-468.800827 268.456757 l
-379.509445 268.456757 l
-379.509445 257.713181 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.509445 274.409515 m
-468.800827 274.409515 l
-468.800827 286.513138 l
-379.509445 286.513138 l
-379.509445 274.409515 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-379.509445 292.465897 m
-468.800827 292.465897 l
-468.800827 304.152435 l
-379.509445 304.152435 l
-379.509445 292.465897 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-474.389114 -40.198318 m
-587.491531 -40.198318 l
-587.491531 64.332367 l
-474.389114 64.332367 l
-474.389114 -40.198318 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-480.341873 -34.245560 m
-581.538773 -34.245560 l
-581.538773 58.379608 l
-480.341873 58.379608 l
-480.341873 -34.245560 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-486.294632 -28.292801 m
-575.586014 -28.292801 l
-575.586014 -17.510620 l
-486.294632 -17.510620 l
-486.294632 -28.292801 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-486.294632 -11.557861 m
-575.586014 -11.557861 l
-575.586014 -0.033508 l
-486.294632 -0.033508 l
-486.294632 -11.557861 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-486.294632 5.919250 m
-575.586014 5.919250 l
-575.586014 16.761108 l
-486.294632 16.761108 l
-486.294632 5.919250 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-486.294632 22.713867 m
-575.586014 22.713867 l
-575.586014 35.186691 l
-486.294632 35.186691 l
-486.294632 22.713867 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-486.294632 41.139450 m
-575.586014 41.139450 l
-575.586014 52.426849 l
-486.294632 52.426849 l
-486.294632 41.139450 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-146.170273 188.775711 m
-259.272690 188.775711 l
-259.272690 294.114746 l
-146.170273 294.114746 l
-146.170273 188.775711 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-152.123032 194.728470 m
-253.319931 194.728470 l
-253.319931 288.161987 l
-152.123032 288.161987 l
-152.123032 194.728470 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-158.075790 200.681229 m
-247.367172 200.681229 l
-247.367172 211.655380 l
-158.075790 211.655380 l
-158.075790 200.681229 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-158.075790 217.608139 m
-247.367172 217.608139 l
-247.367172 231.407440 l
-158.075790 231.407440 l
-158.075790 217.608139 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-158.075790 237.360199 m
-247.367172 237.360199 l
-247.367172 248.210464 l
-158.075790 248.210464 l
-158.075790 237.360199 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-158.075790 254.163223 m
-247.367172 254.163223 l
-247.367172 265.058868 l
-158.075790 265.058868 l
-158.075790 254.163223 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-158.075790 271.011627 m
-247.367172 271.011627 l
-247.367172 282.209229 l
-158.075790 282.209229 l
-158.075790 271.011627 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-221.908936 486.545654 m
-335.011353 486.545654 l
-335.011353 601.179077 l
-221.908936 601.179077 l
-221.908936 486.545654 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-227.861694 492.498413 m
-329.058594 492.498413 l
-329.058594 595.226318 l
-227.861694 595.226318 l
-227.861694 492.498413 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.814453 498.451172 m
-323.105835 498.451172 l
-323.105835 512.309052 l
-233.814453 512.309052 l
-233.814453 498.451172 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.814453 518.261810 m
-323.105835 518.261810 l
-323.105835 531.486771 l
-233.814453 531.486771 l
-233.814453 518.261810 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.814453 537.439529 m
-323.105835 537.439529 l
-323.105835 550.020737 l
-233.814453 550.020737 l
-233.814453 537.439529 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.814453 555.973495 m
-323.105835 555.973495 l
-323.105835 570.761658 l
-233.814453 570.761658 l
-233.814453 555.973495 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-233.814453 576.714417 m
-323.105835 576.714417 l
-323.105835 589.273560 l
-233.814453 589.273560 l
-233.814453 576.714417 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--46.843933 618.250595 m
-66.258484 618.250595 l
-66.258484 728.012436 l
--46.843933 728.012436 l
--46.843933 618.250595 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--40.891174 624.203354 m
-60.305725 624.203354 l
-60.305725 722.059677 l
--40.891174 722.059677 l
--40.891174 624.203354 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--34.938416 630.156113 m
-54.352966 630.156113 l
-54.352966 640.700836 l
--34.938416 640.700836 l
--34.938416 630.156113 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--34.938416 646.653595 m
-54.352966 646.653595 l
-54.352966 661.194275 l
--34.938416 661.194275 l
--34.938416 646.653595 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--34.938416 667.147034 m
-54.352966 667.147034 l
-54.352966 677.893768 l
--34.938416 677.893768 l
--34.938416 667.147034 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--34.938416 683.846527 m
-54.352966 683.846527 l
-54.352966 698.642776 l
--34.938416 698.642776 l
--34.938416 683.846527 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--34.938416 704.595535 m
-54.352966 704.595535 l
-54.352966 716.106918 l
--34.938416 716.106918 l
--34.938416 704.595535 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-86.238892 769.902435 m
-199.341309 769.902435 l
-199.341309 880.680649 l
-86.238892 880.680649 l
-86.238892 769.902435 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-92.191650 775.855194 m
-193.388550 775.855194 l
-193.388550 874.727890 l
-92.191650 874.727890 l
-92.191650 775.855194 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-98.144409 781.807953 m
-187.435791 781.807953 l
-187.435791 796.433380 l
-98.144409 796.433380 l
-98.144409 781.807953 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-98.144409 802.386139 m
-187.435791 802.386139 l
-187.435791 813.784027 l
-98.144409 813.784027 l
-98.144409 802.386139 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-98.144409 819.736786 m
-187.435791 819.736786 l
-187.435791 830.172653 l
-98.144409 830.172653 l
-98.144409 819.736786 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-98.144409 836.125412 m
-187.435791 836.125412 l
-187.435791 850.231186 l
-98.144409 850.231186 l
-98.144409 836.125412 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-98.144409 856.183945 m
-187.435791 856.183945 l
-187.435791 868.775131 l
-98.144409 868.775131 l
-98.144409 856.183945 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-9.794006 771.717346 m
-122.896423 771.717346 l
-122.896423 865.308762 l
-9.794006 865.308762 l
-9.794006 771.717346 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-15.746765 777.670105 m
-116.943665 777.670105 l
-116.943665 859.356003 l
-15.746765 859.356003 l
-15.746765 777.670105 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-21.699524 783.622864 m
-110.990906 783.622864 l
-110.990906 798.356766 l
-21.699524 798.356766 l
-21.699524 783.622864 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-21.699524 804.309525 m
-110.990906 804.309525 l
-110.990906 818.524002 l
-21.699524 818.524002 l
-21.699524 804.309525 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-21.699524 824.476761 m
-110.990906 824.476761 l
-110.990906 835.510300 l
-21.699524 835.510300 l
-21.699524 824.476761 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-21.699524 841.463058 m
-110.990906 841.463058 l
-110.990906 853.403244 l
-21.699524 853.403244 l
-21.699524 841.463058 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-212.167862 -31.316315 m
-325.270279 -31.316315 l
-325.270279 57.572479 l
-212.167862 57.572479 l
-212.167862 -31.316315 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-218.120621 -25.363556 m
-319.317520 -25.363556 l
-319.317520 51.619720 l
-218.120621 51.619720 l
-218.120621 -25.363556 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-224.073380 -19.410797 m
-313.364761 -19.410797 l
-313.364761 -6.101242 l
-224.073380 -6.101242 l
-224.073380 -19.410797 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-224.073380 -0.148483 m
-313.364761 -0.148483 l
-313.364761 10.806046 l
-224.073380 10.806046 l
-224.073380 -0.148483 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-224.073380 16.758804 m
-313.364761 16.758804 l
-313.364761 27.794998 l
-224.073380 27.794998 l
-224.073380 16.758804 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-224.073380 33.747757 m
-313.364761 33.747757 l
-313.364761 45.666962 l
-224.073380 45.666962 l
-224.073380 33.747757 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-520.948868 153.546799 m
-634.051285 153.546799 l
-634.051285 263.105530 l
-520.948868 263.105530 l
-520.948868 153.546799 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-526.901627 159.499557 m
-628.098526 159.499557 l
-628.098526 257.152771 l
-526.901627 257.152771 l
-526.901627 159.499557 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.854385 165.452316 m
-622.145767 165.452316 l
-622.145767 176.471909 l
-532.854385 176.471909 l
-532.854385 165.452316 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.854385 182.424667 m
-622.145767 182.424667 l
-622.145767 192.862015 l
-532.854385 192.862015 l
-532.854385 182.424667 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.854385 198.814774 m
-622.145767 198.814774 l
-622.145767 211.468552 l
-532.854385 211.468552 l
-532.854385 198.814774 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.854385 217.421310 m
-622.145767 217.421310 l
-622.145767 231.390182 l
-532.854385 231.390182 l
-532.854385 217.421310 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.854385 237.342941 m
-622.145767 237.342941 l
-622.145767 251.200012 l
-532.854385 251.200012 l
-532.854385 237.342941 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-108.578613 80.706345 m
-221.681030 80.706345 l
-221.681030 193.389404 l
-108.578613 193.389404 l
-108.578613 80.706345 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-114.531372 86.659103 m
-215.728271 86.659103 l
-215.728271 187.436646 l
-114.531372 187.436646 l
-114.531372 86.659103 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-120.484131 92.611862 m
-209.775513 92.611862 l
-209.775513 106.190598 l
-120.484131 106.190598 l
-120.484131 92.611862 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-120.484131 112.143356 m
-209.775513 112.143356 l
-209.775513 123.643631 l
-120.484131 123.643631 l
-120.484131 112.143356 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-120.484131 129.596390 m
-209.775513 129.596390 l
-209.775513 142.606262 l
-120.484131 142.606262 l
-120.484131 129.596390 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-120.484131 148.559021 m
-209.775513 148.559021 l
-209.775513 160.827805 l
-120.484131 160.827805 l
-120.484131 148.559021 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-120.484131 166.780563 m
-209.775513 166.780563 l
-209.775513 181.483887 l
-120.484131 181.483887 l
-120.484131 166.780563 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-289.650040 95.699127 m
-402.752457 95.699127 l
-402.752457 181.660629 l
-289.650040 181.660629 l
-289.650040 95.699127 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-295.602798 101.651886 m
-396.799698 101.651886 l
-396.799698 175.707870 l
-295.602798 175.707870 l
-295.602798 101.651886 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-301.555557 107.604645 m
-390.846939 107.604645 l
-390.846939 118.327744 l
-301.555557 118.327744 l
-301.555557 107.604645 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-301.555557 124.280502 m
-390.846939 124.280502 l
-390.846939 134.952164 l
-301.555557 134.952164 l
-301.555557 124.280502 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-301.555557 140.904922 m
-390.846939 140.904922 l
-390.846939 152.081024 l
-301.555557 152.081024 l
-301.555557 140.904922 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-301.555557 158.033783 m
-390.846939 158.033783 l
-390.846939 169.755112 l
-301.555557 169.755112 l
-301.555557 158.033783 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-194.431137 85.748474 m
-307.533554 85.748474 l
-307.533554 181.565125 l
-194.431137 181.565125 l
-194.431137 85.748474 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-200.383896 91.701233 m
-301.580795 91.701233 l
-301.580795 175.612366 l
-200.383896 175.612366 l
-200.383896 91.701233 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-206.336655 97.653992 m
-295.628036 97.653992 l
-295.628036 111.782349 l
-206.336655 111.782349 l
-206.336655 97.653992 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-206.336655 117.735107 m
-295.628036 117.735107 l
-295.628036 129.938812 l
-206.336655 129.938812 l
-206.336655 117.735107 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-206.336655 135.891571 m
-295.628036 135.891571 l
-295.628036 150.016052 l
-206.336655 150.016052 l
-206.336655 135.891571 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-206.336655 155.968811 m
-295.628036 155.968811 l
-295.628036 169.659607 l
-206.336655 169.659607 l
-206.336655 155.968811 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-459.557129 784.299164 m
-572.659546 784.299164 l
-572.659546 877.684372 l
-459.557129 877.684372 l
-459.557129 784.299164 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-465.509888 790.251923 m
-566.706787 790.251923 l
-566.706787 871.731613 l
-465.509888 871.731613 l
-465.509888 790.251923 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-471.462646 796.204681 m
-560.754028 796.204681 l
-560.754028 809.184830 l
-471.462646 809.184830 l
-471.462646 796.204681 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-471.462646 815.137589 m
-560.754028 815.137589 l
-560.754028 826.177765 l
-471.462646 826.177765 l
-471.462646 815.137589 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-471.462646 832.130524 m
-560.754028 832.130524 l
-560.754028 846.537231 l
-471.462646 846.537231 l
-471.462646 832.130524 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-471.462646 852.489990 m
-560.754028 852.489990 l
-560.754028 865.778854 l
-471.462646 865.778854 l
-471.462646 852.489990 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-127.138489 463.176163 m
-240.240906 463.176163 l
-240.240906 573.816010 l
-127.138489 573.816010 l
-127.138489 463.176163 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-133.091248 469.128922 m
-234.288147 469.128922 l
-234.288147 567.863251 l
-133.091248 567.863251 l
-133.091248 469.128922 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.044006 475.081680 m
-228.335388 475.081680 l
-228.335388 488.531921 l
-139.044006 488.531921 l
-139.044006 475.081680 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.044006 494.484680 m
-228.335388 494.484680 l
-228.335388 505.564957 l
-139.044006 505.564957 l
-139.044006 494.484680 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.044006 511.517715 m
-228.335388 511.517715 l
-228.335388 523.221741 l
-139.044006 523.221741 l
-139.044006 511.517715 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.044006 529.174500 m
-228.335388 529.174500 l
-228.335388 542.596268 l
-139.044006 542.596268 l
-139.044006 529.174500 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-139.044006 548.549026 m
-228.335388 548.549026 l
-228.335388 561.910492 l
-139.044006 561.910492 l
-139.044006 548.549026 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-143.252594 652.528809 m
-256.355011 652.528809 l
-256.355011 742.599442 l
-143.252594 742.599442 l
-143.252594 652.528809 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-149.205353 658.481567 m
-250.402252 658.481567 l
-250.402252 736.646683 l
-149.205353 736.646683 l
-149.205353 658.481567 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.158112 664.434326 m
-244.449493 664.434326 l
-244.449493 677.220520 l
-155.158112 677.220520 l
-155.158112 664.434326 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.158112 683.173279 m
-244.449493 683.173279 l
-244.449493 693.998444 l
-155.158112 693.998444 l
-155.158112 683.173279 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.158112 699.951202 m
-244.449493 699.951202 l
-244.449493 714.006851 l
-155.158112 714.006851 l
-155.158112 699.951202 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-155.158112 719.959610 m
-244.449493 719.959610 l
-244.449493 730.693924 l
-155.158112 730.693924 l
-155.158112 719.959610 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-17.227295 -44.365875 m
-130.329712 -44.365875 l
-130.329712 65.281723 l
-17.227295 65.281723 l
-17.227295 -44.365875 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-23.180054 -38.413116 m
-124.376953 -38.413116 l
-124.376953 59.328964 l
-23.180054 59.328964 l
-23.180054 -38.413116 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-29.132812 -32.460358 m
-118.424194 -32.460358 l
-118.424194 -20.453766 l
-29.132812 -20.453766 l
-29.132812 -32.460358 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-29.132812 -14.501007 m
-118.424194 -14.501007 l
-118.424194 -2.048691 l
-29.132812 -2.048691 l
-29.132812 -14.501007 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-29.132812 3.904068 m
-118.424194 3.904068 l
-118.424194 17.465454 l
-29.132812 17.465454 l
-29.132812 3.904068 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-29.132812 23.418213 m
-118.424194 23.418213 l
-118.424194 34.359146 l
-29.132812 34.359146 l
-29.132812 23.418213 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-29.132812 40.311905 m
-118.424194 40.311905 l
-118.424194 53.376205 l
-29.132812 53.376205 l
-29.132812 40.311905 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-94.694000 -32.631561 m
-207.796417 -32.631561 l
-207.796417 61.258148 l
-94.694000 61.258148 l
-94.694000 -32.631561 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-100.646759 -26.678802 m
-201.843658 -26.678802 l
-201.843658 55.305389 l
-100.646759 55.305389 l
-100.646759 -26.678802 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-106.599518 -20.726044 m
-195.890900 -20.726044 l
-195.890900 -8.642380 l
-106.599518 -8.642380 l
-106.599518 -20.726044 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-106.599518 -2.689621 m
-195.890900 -2.689621 l
-195.890900 11.146011 l
-106.599518 11.146011 l
-106.599518 -2.689621 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-106.599518 17.098770 m
-195.890900 17.098770 l
-195.890900 29.749222 l
-106.599518 29.749222 l
-106.599518 17.098770 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-106.599518 35.701981 m
-195.890900 35.701981 l
-195.890900 49.352631 l
-106.599518 49.352631 l
-106.599518 35.701981 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-536.155258 567.294800 m
-649.257675 567.294800 l
-649.257675 682.052795 l
-536.155258 682.052795 l
-536.155258 567.294800 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-542.108017 573.247559 m
-643.304916 573.247559 l
-643.304916 676.100037 l
-542.108017 676.100037 l
-542.108017 573.247559 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-548.060776 579.200317 m
-637.352158 579.200317 l
-637.352158 593.355713 l
-548.060776 593.355713 l
-548.060776 579.200317 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-548.060776 599.308472 m
-637.352158 599.308472 l
-637.352158 613.288223 l
-548.060776 613.288223 l
-548.060776 599.308472 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-548.060776 619.240982 m
-637.352158 619.240982 l
-637.352158 632.323578 l
-548.060776 632.323578 l
-548.060776 619.240982 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-548.060776 638.276337 m
-637.352158 638.276337 l
-637.352158 650.284698 l
-548.060776 650.284698 l
-548.060776 638.276337 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-548.060776 656.237457 m
-637.352158 656.237457 l
-637.352158 670.147278 l
-548.060776 670.147278 l
-548.060776 656.237457 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-77.580444 399.174606 m
-190.682861 399.174606 l
-190.682861 509.895325 l
-77.580444 509.895325 l
-77.580444 399.174606 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-83.533203 405.127365 m
-184.730103 405.127365 l
-184.730103 503.942566 l
-83.533203 503.942566 l
-83.533203 405.127365 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-89.485962 411.080124 m
-178.777344 411.080124 l
-178.777344 423.648331 l
-89.485962 423.648331 l
-89.485962 411.080124 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-89.485962 429.601089 m
-178.777344 429.601089 l
-178.777344 442.254654 l
-89.485962 442.254654 l
-89.485962 429.601089 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-89.485962 448.207413 m
-178.777344 448.207413 l
-178.777344 460.580231 l
-89.485962 460.580231 l
-89.485962 448.207413 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-89.485962 466.532990 m
-178.777344 466.532990 l
-178.777344 478.325943 l
-89.485962 478.325943 l
-89.485962 466.532990 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-89.485962 484.278702 m
-178.777344 484.278702 l
-178.777344 497.989807 l
-89.485962 497.989807 l
-89.485962 484.278702 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-537.732574 255.789749 m
-650.834991 255.789749 l
-650.834991 365.758408 l
-537.732574 365.758408 l
-537.732574 255.789749 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-543.685333 261.742508 m
-644.882233 261.742508 l
-644.882233 359.805649 l
-543.685333 359.805649 l
-543.685333 261.742508 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.638092 267.695267 m
-638.929474 267.695267 l
-638.929474 280.269379 l
-549.638092 280.269379 l
-549.638092 267.695267 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.638092 286.222137 m
-638.929474 286.222137 l
-638.929474 297.689606 l
-549.638092 297.689606 l
-549.638092 286.222137 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.638092 303.642365 m
-638.929474 303.642365 l
-638.929474 316.218628 l
-549.638092 316.218628 l
-549.638092 303.642365 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.638092 322.171387 m
-638.929474 322.171387 l
-638.929474 335.395691 l
-549.638092 335.395691 l
-549.638092 322.171387 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.638092 341.348450 m
-638.929474 341.348450 l
-638.929474 353.852890 l
-549.638092 353.852890 l
-549.638092 341.348450 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-429.351685 462.367142 m
-542.454102 462.367142 l
-542.454102 551.626678 l
-429.351685 551.626678 l
-429.351685 462.367142 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-435.304443 468.319901 m
-536.501343 468.319901 l
-536.501343 545.673920 l
-435.304443 545.673920 l
-435.304443 468.319901 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.257202 474.272659 m
-530.548584 474.272659 l
-530.548584 487.118698 l
-441.257202 487.118698 l
-441.257202 474.272659 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.257202 493.071457 m
-530.548584 493.071457 l
-530.548584 503.730240 l
-441.257202 503.730240 l
-441.257202 493.071457 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.257202 509.682999 m
-530.548584 509.682999 l
-530.548584 522.408630 l
-441.257202 522.408630 l
-441.257202 509.682999 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.257202 528.361389 m
-530.548584 528.361389 l
-530.548584 539.721161 l
-441.257202 539.721161 l
-441.257202 528.361389 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-30.625610 691.824661 m
-143.728027 691.824661 l
-143.728027 780.568405 l
-30.625610 780.568405 l
-30.625610 691.824661 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-36.578369 697.777420 m
-137.775269 697.777420 l
-137.775269 774.615646 l
-36.578369 774.615646 l
-36.578369 697.777420 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-42.531128 703.730179 m
-131.822510 703.730179 l
-131.822510 715.553482 l
-42.531128 715.553482 l
-42.531128 703.730179 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-42.531128 721.506241 m
-131.822510 721.506241 l
-131.822510 733.989655 l
-42.531128 733.989655 l
-42.531128 721.506241 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-42.531128 739.942413 m
-131.822510 739.942413 l
-131.822510 750.570160 l
-42.531128 750.570160 l
-42.531128 739.942413 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-42.531128 756.522919 m
-131.822510 756.522919 l
-131.822510 768.662888 l
-42.531128 768.662888 l
-42.531128 756.522919 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-519.056992 662.642410 m
-632.159409 662.642410 l
-632.159409 773.933472 l
-519.056992 773.933472 l
-519.056992 662.642410 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-525.009750 668.595169 m
-626.206650 668.595169 l
-626.206650 767.980713 l
-525.009750 767.980713 l
-525.009750 668.595169 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-530.962509 674.547928 m
-620.253891 674.547928 l
-620.253891 688.974319 l
-530.962509 688.974319 l
-530.962509 674.547928 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-530.962509 694.927078 m
-620.253891 694.927078 l
-620.253891 707.107300 l
-530.962509 707.107300 l
-530.962509 694.927078 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-530.962509 713.060059 m
-620.253891 713.060059 l
-620.253891 726.017822 l
-530.962509 726.017822 l
-530.962509 713.060059 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-530.962509 731.970581 m
-620.253891 731.970581 l
-620.253891 744.757523 l
-530.962509 744.757523 l
-530.962509 731.970581 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-530.962509 750.710281 m
-620.253891 750.710281 l
-620.253891 762.027954 l
-530.962509 762.027954 l
-530.962509 750.710281 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-93.400375 6.787689 m
-206.502792 6.787689 l
-206.502792 121.126434 l
-93.400375 121.126434 l
-93.400375 6.787689 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-99.353134 12.740448 m
-200.550034 12.740448 l
-200.550034 115.173676 l
-99.353134 115.173676 l
-99.353134 12.740448 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-105.305893 18.693207 m
-194.597275 18.693207 l
-194.597275 31.395752 l
-105.305893 31.395752 l
-105.305893 18.693207 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-105.305893 37.348511 m
-194.597275 37.348511 l
-194.597275 49.404633 l
-105.305893 49.404633 l
-105.305893 37.348511 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-105.305893 55.357391 m
-194.597275 55.357391 l
-194.597275 69.997223 l
-105.305893 69.997223 l
-105.305893 55.357391 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-105.305893 75.949982 m
-194.597275 75.949982 l
-194.597275 90.332626 l
-105.305893 90.332626 l
-105.305893 75.949982 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-105.305893 96.285385 m
-194.597275 96.285385 l
-194.597275 109.220917 l
-105.305893 109.220917 l
-105.305893 96.285385 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-384.178329 685.879898 m
-497.280746 685.879898 l
-497.280746 775.542099 l
-384.178329 775.542099 l
-384.178329 685.879898 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-390.131088 691.832657 m
-491.327988 691.832657 l
-491.327988 769.589340 l
-390.131088 769.589340 l
-390.131088 691.832657 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.083847 697.785416 m
-485.375229 697.785416 l
-485.375229 709.468399 l
-396.083847 709.468399 l
-396.083847 697.785416 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.083847 715.421158 m
-485.375229 715.421158 l
-485.375229 726.926834 l
-396.083847 726.926834 l
-396.083847 715.421158 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.083847 732.879593 m
-485.375229 732.879593 l
-485.375229 745.809021 l
-396.083847 745.809021 l
-396.083847 732.879593 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-396.083847 751.761780 m
-485.375229 751.761780 l
-485.375229 763.636581 l
-396.083847 763.636581 l
-396.083847 751.761780 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-533.591858 789.820328 m
-646.694275 789.820328 l
-646.694275 882.682220 l
-533.591858 882.682220 l
-533.591858 789.820328 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-539.544617 795.773087 m
-640.741516 795.773087 l
-640.741516 876.729462 l
-539.544617 876.729462 l
-539.544617 795.773087 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-545.497375 801.725845 m
-634.788757 801.725845 l
-634.788757 813.846344 l
-545.497375 813.846344 l
-545.497375 801.725845 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-545.497375 819.799103 m
-634.788757 819.799103 l
-634.788757 830.314819 l
-545.497375 830.314819 l
-545.497375 819.799103 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-545.497375 836.267578 m
-634.788757 836.267578 l
-634.788757 850.305695 l
-545.497375 850.305695 l
-545.497375 836.267578 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-545.497375 856.258453 m
-634.788757 856.258453 l
-634.788757 870.776703 l
-545.497375 870.776703 l
-545.497375 856.258453 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-454.754440 734.763809 m
-567.856857 734.763809 l
-567.856857 827.198807 l
-454.754440 827.198807 l
-454.754440 734.763809 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-460.707199 740.716568 m
-561.904099 740.716568 l
-561.904099 821.246048 l
-460.707199 821.246048 l
-460.707199 740.716568 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-466.659958 746.669327 m
-555.951340 746.669327 l
-555.951340 758.620483 l
-466.659958 758.620483 l
-466.659958 746.669327 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-466.659958 764.573242 m
-555.951340 764.573242 l
-555.951340 775.276108 l
-466.659958 775.276108 l
-466.659958 764.573242 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-466.659958 781.228867 m
-555.951340 781.228867 l
-555.951340 795.178223 l
-466.659958 795.178223 l
-466.659958 781.228867 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-466.659958 801.130981 m
-555.951340 801.130981 l
-555.951340 815.293289 l
-466.659958 815.293289 l
-466.659958 801.130981 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-111.836975 310.533600 m
-224.939392 310.533600 l
-224.939392 425.783447 l
-111.836975 425.783447 l
-111.836975 310.533600 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-117.789734 316.486359 m
-218.986633 316.486359 l
-218.986633 419.830688 l
-117.789734 419.830688 l
-117.789734 316.486359 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-123.742493 322.439117 m
-213.033875 322.439117 l
-213.033875 336.726883 l
-123.742493 336.726883 l
-123.742493 322.439117 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-123.742493 342.679642 m
-213.033875 342.679642 l
-213.033875 356.807022 l
-123.742493 356.807022 l
-123.742493 342.679642 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-123.742493 362.759781 m
-213.033875 362.759781 l
-213.033875 374.999374 l
-123.742493 374.999374 l
-123.742493 362.759781 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-123.742493 380.952133 m
-213.033875 380.952133 l
-213.033875 395.705750 l
-123.742493 395.705750 l
-123.742493 380.952133 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-123.742493 401.658508 m
-213.033875 401.658508 l
-213.033875 413.877930 l
-123.742493 413.877930 l
-123.742493 401.658508 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-172.244064 709.172928 m
-285.346481 709.172928 l
-285.346481 824.513733 l
-172.244064 824.513733 l
-172.244064 709.172928 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-178.196823 715.125687 m
-279.393723 715.125687 l
-279.393723 818.560974 l
-178.196823 818.560974 l
-178.196823 715.125687 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-184.149582 721.078445 m
-273.440964 721.078445 l
-273.440964 734.396820 l
-184.149582 734.396820 l
-184.149582 721.078445 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-184.149582 740.349579 m
-273.440964 740.349579 l
-273.440964 755.059250 l
-184.149582 755.059250 l
-184.149582 740.349579 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-184.149582 761.012009 m
-273.440964 761.012009 l
-273.440964 775.207657 l
-184.149582 775.207657 l
-184.149582 761.012009 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-184.149582 781.160416 m
-273.440964 781.160416 l
-273.440964 792.433228 l
-184.149582 792.433228 l
-184.149582 781.160416 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-184.149582 798.385986 m
-273.440964 798.385986 l
-273.440964 812.608215 l
-184.149582 812.608215 l
-184.149582 798.385986 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-520.637161 202.378632 m
-633.739578 202.378632 l
-633.739578 313.655197 l
-520.637161 313.655197 l
-520.637161 202.378632 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-526.589920 208.331390 m
-627.786819 208.331390 l
-627.786819 307.702438 l
-526.589920 307.702438 l
-526.589920 208.331390 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.542679 214.284149 m
-621.834061 214.284149 l
-621.834061 225.748428 l
-532.542679 225.748428 l
-532.542679 214.284149 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.542679 231.701187 m
-621.834061 231.701187 l
-621.834061 245.885468 l
-532.542679 245.885468 l
-532.542679 231.701187 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.542679 251.838226 m
-621.834061 251.838226 l
-621.834061 266.199615 l
-532.542679 266.199615 l
-532.542679 251.838226 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.542679 272.152374 m
-621.834061 272.152374 l
-621.834061 284.953873 l
-532.542679 284.953873 l
-532.542679 272.152374 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.542679 290.906631 m
-621.834061 290.906631 l
-621.834061 301.749680 l
-532.542679 301.749680 l
-532.542679 290.906631 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-512.127228 219.027374 m
-625.229645 219.027374 l
-625.229645 313.669571 l
-512.127228 313.669571 l
-512.127228 219.027374 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-518.079987 224.980133 m
-619.276886 224.980133 l
-619.276886 307.716812 l
-518.079987 307.716812 l
-518.079987 224.980133 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-524.032745 230.932892 m
-613.324127 230.932892 l
-613.324127 244.113785 l
-524.032745 244.113785 l
-524.032745 230.932892 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-524.032745 250.066544 m
-613.324127 250.066544 l
-613.324127 263.778763 l
-524.032745 263.778763 l
-524.032745 250.066544 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-524.032745 269.731522 m
-613.324127 269.731522 l
-613.324127 281.748978 l
-524.032745 281.748978 l
-524.032745 269.731522 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-524.032745 287.701736 m
-613.324127 287.701736 l
-613.324127 301.764053 l
-524.032745 301.764053 l
-524.032745 287.701736 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--48.365723 474.448715 m
-64.736694 474.448715 l
-64.736694 587.420486 l
--48.365723 587.420486 l
--48.365723 474.448715 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--42.412964 480.401474 m
-58.783936 480.401474 l
-58.783936 581.467728 l
--42.412964 581.467728 l
--42.412964 480.401474 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--36.460205 486.354233 m
-52.831177 486.354233 l
-52.831177 497.991486 l
--36.460205 497.991486 l
--36.460205 486.354233 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--36.460205 503.944244 m
-52.831177 503.944244 l
-52.831177 516.635910 l
--36.460205 516.635910 l
--36.460205 503.944244 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--36.460205 522.588669 m
-52.831177 522.588669 l
-52.831177 535.620102 l
--36.460205 535.620102 l
--36.460205 522.588669 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--36.460205 541.572861 m
-52.831177 541.572861 l
-52.831177 554.720169 l
--36.460205 554.720169 l
--36.460205 541.572861 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--36.460205 560.672928 m
-52.831177 560.672928 l
-52.831177 575.514969 l
--36.460205 575.514969 l
--36.460205 560.672928 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-163.141663 386.102722 m
-276.244080 386.102722 l
-276.244080 495.070435 l
-163.141663 495.070435 l
-163.141663 386.102722 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-169.094421 392.055481 m
-270.291321 392.055481 l
-270.291321 489.117676 l
-169.094421 489.117676 l
-169.094421 392.055481 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.047180 398.008240 m
-264.338562 398.008240 l
-264.338562 409.069458 l
-175.047180 409.069458 l
-175.047180 398.008240 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.047180 415.022217 m
-264.338562 415.022217 l
-264.338562 427.777847 l
-175.047180 427.777847 l
-175.047180 415.022217 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.047180 433.730606 m
-264.338562 433.730606 l
-264.338562 445.987198 l
-175.047180 445.987198 l
-175.047180 433.730606 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.047180 451.939957 m
-264.338562 451.939957 l
-264.338562 463.153763 l
-175.047180 463.153763 l
-175.047180 451.939957 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-175.047180 469.106522 m
-264.338562 469.106522 l
-264.338562 483.164917 l
-175.047180 483.164917 l
-175.047180 469.106522 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-520.260498 356.491302 m
-633.362915 356.491302 l
-633.362915 471.745331 l
-520.260498 471.745331 l
-520.260498 356.491302 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-526.213257 362.444061 m
-627.410156 362.444061 l
-627.410156 465.792572 l
-526.213257 465.792572 l
-526.213257 362.444061 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.166016 368.396820 m
-621.457397 368.396820 l
-621.457397 380.313644 l
-532.166016 380.313644 l
-532.166016 368.396820 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.166016 386.266403 m
-621.457397 386.266403 l
-621.457397 400.154358 l
-532.166016 400.154358 l
-532.166016 386.266403 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.166016 406.107117 m
-621.457397 406.107117 l
-621.457397 420.908020 l
-532.166016 420.908020 l
-532.166016 406.107117 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.166016 426.860779 m
-621.457397 426.860779 l
-621.457397 439.483536 l
-532.166016 439.483536 l
-532.166016 426.860779 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-532.166016 445.436295 m
-621.457397 445.436295 l
-621.457397 459.839813 l
-532.166016 459.839813 l
-532.166016 445.436295 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-152.159363 772.347229 m
-265.261780 772.347229 l
-265.261780 867.562347 l
-152.159363 867.562347 l
-152.159363 772.347229 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-158.112122 778.299988 m
-259.309021 778.299988 l
-259.309021 861.609589 l
-158.112122 861.609589 l
-158.112122 778.299988 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.064880 784.252747 m
-253.356262 784.252747 l
-253.356262 795.785995 l
-164.064880 795.785995 l
-164.064880 784.252747 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.064880 801.738754 m
-253.356262 801.738754 l
-253.356262 815.997406 l
-164.064880 815.997406 l
-164.064880 801.738754 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.064880 821.950165 m
-253.356262 821.950165 l
-253.356262 836.538818 l
-164.064880 836.538818 l
-164.064880 821.950165 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-164.064880 842.491577 m
-253.356262 842.491577 l
-253.356262 855.656830 l
-164.064880 855.656830 l
-164.064880 842.491577 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-198.911331 303.791885 m
-312.013748 303.791885 l
-312.013748 413.207703 l
-198.911331 413.207703 l
-198.911331 303.791885 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-204.864090 309.744644 m
-306.060989 309.744644 l
-306.060989 407.254944 l
-204.864090 407.254944 l
-204.864090 309.744644 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.816849 315.697403 m
-300.108231 315.697403 l
-300.108231 329.115494 l
-210.816849 329.115494 l
-210.816849 315.697403 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.816849 335.068253 m
-300.108231 335.068253 l
-300.108231 347.930511 l
-210.816849 347.930511 l
-210.816849 335.068253 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.816849 353.883270 m
-300.108231 353.883270 l
-300.108231 365.047821 l
-210.816849 365.047821 l
-210.816849 353.883270 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.816849 371.000580 m
-300.108231 371.000580 l
-300.108231 384.747116 l
-210.816849 384.747116 l
-210.816849 371.000580 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-210.816849 390.699875 m
-300.108231 390.699875 l
-300.108231 401.302185 l
-210.816849 401.302185 l
-210.816849 390.699875 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-170.824417 -49.520569 m
-283.926834 -49.520569 l
-283.926834 60.214417 l
-170.824417 60.214417 l
-170.824417 -49.520569 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-176.777176 -43.567810 m
-277.974075 -43.567810 l
-277.974075 54.261658 l
-176.777176 54.261658 l
-176.777176 -43.567810 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-182.729935 -37.615051 m
-272.021317 -37.615051 l
-272.021317 -25.120361 l
-182.729935 -25.120361 l
-182.729935 -37.615051 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-182.729935 -19.167603 m
-272.021317 -19.167603 l
-272.021317 -5.326965 l
-182.729935 -5.326965 l
-182.729935 -19.167603 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-182.729935 0.625793 m
-272.021317 0.625793 l
-272.021317 12.915222 l
-182.729935 12.915222 l
-182.729935 0.625793 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-182.729935 18.867981 m
-272.021317 18.867981 l
-272.021317 30.349167 l
-182.729935 30.349167 l
-182.729935 18.867981 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-182.729935 36.301926 m
-272.021317 36.301926 l
-272.021317 48.308899 l
-182.729935 48.308899 l
-182.729935 36.301926 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--54.461411 190.286850 m
-58.641006 190.286850 l
-58.641006 283.955383 l
--54.461411 283.955383 l
--54.461411 190.286850 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--48.508652 196.239609 m
-52.688248 196.239609 l
-52.688248 278.002625 l
--48.508652 278.002625 l
--48.508652 196.239609 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--42.555893 202.192368 m
-46.735489 202.192368 l
-46.735489 212.789185 l
--42.555893 212.789185 l
--42.555893 202.192368 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--42.555893 218.741943 m
-46.735489 218.741943 l
-46.735489 231.557404 l
--42.555893 231.557404 l
--42.555893 218.741943 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--42.555893 237.510162 m
-46.735489 237.510162 l
-46.735489 252.098297 l
--42.555893 252.098297 l
--42.555893 237.510162 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--42.555893 258.051056 m
-46.735489 258.051056 l
-46.735489 272.049866 l
--42.555893 272.049866 l
--42.555893 258.051056 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-319.707535 -44.090347 m
-432.809952 -44.090347 l
-432.809952 48.078369 l
-319.707535 48.078369 l
-319.707535 -44.090347 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-325.660294 -38.137589 m
-426.857193 -38.137589 l
-426.857193 42.125610 l
-325.660294 42.125610 l
-325.660294 -38.137589 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-331.613052 -32.184830 m
-420.904434 -32.184830 l
-420.904434 -21.446259 l
-331.613052 -21.446259 l
-331.613052 -32.184830 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-331.613052 -15.493500 m
-420.904434 -15.493500 l
-420.904434 -2.368210 l
-331.613052 -2.368210 l
-331.613052 -15.493500 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-331.613052 3.584549 m
-420.904434 3.584549 l
-420.904434 15.852722 l
-331.613052 15.852722 l
-331.613052 3.584549 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-331.613052 21.805481 m
-420.904434 21.805481 l
-420.904434 36.172852 l
-331.613052 36.172852 l
-331.613052 21.805481 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-496.458405 155.936981 m
-609.560822 155.936981 l
-609.560822 244.788330 l
-496.458405 244.788330 l
-496.458405 155.936981 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-502.411163 161.889740 m
-603.608063 161.889740 l
-603.608063 238.835571 l
-502.411163 238.835571 l
-502.411163 161.889740 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.363922 167.842499 m
-597.655304 167.842499 l
-597.655304 181.859726 l
-508.363922 181.859726 l
-508.363922 167.842499 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.363922 187.812485 m
-597.655304 187.812485 l
-597.655304 199.715103 l
-508.363922 199.715103 l
-508.363922 187.812485 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.363922 205.667862 m
-597.655304 205.667862 l
-597.655304 216.392166 l
-508.363922 216.392166 l
-508.363922 205.667862 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-508.363922 222.344925 m
-597.655304 222.344925 l
-597.655304 232.882812 l
-508.363922 232.882812 l
-508.363922 222.344925 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-290.399399 773.080338 m
-403.501816 773.080338 l
-403.501816 885.454132 l
-290.399399 885.454132 l
-290.399399 773.080338 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-296.352158 779.033096 m
-397.549057 779.033096 l
-397.549057 879.501373 l
-296.352158 879.501373 l
-296.352158 779.033096 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-302.304916 784.985855 m
-391.596298 784.985855 l
-391.596298 797.856705 l
-302.304916 797.856705 l
-302.304916 784.985855 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-302.304916 803.809464 m
-391.596298 803.809464 l
-391.596298 815.922287 l
-302.304916 815.922287 l
-302.304916 803.809464 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-302.304916 821.875046 m
-391.596298 821.875046 l
-391.596298 836.074783 l
-302.304916 836.074783 l
-302.304916 821.875046 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-302.304916 842.027542 m
-391.596298 842.027542 l
-391.596298 853.526199 l
-302.304916 853.526199 l
-302.304916 842.027542 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-302.304916 859.478958 m
-391.596298 859.478958 l
-391.596298 873.548615 l
-302.304916 873.548615 l
-302.304916 859.478958 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-137.312012 538.643509 m
-250.414429 538.643509 l
-250.414429 651.166107 l
-137.312012 651.166107 l
-137.312012 538.643509 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-143.264771 544.596268 m
-244.461670 544.596268 l
-244.461670 645.213348 l
-143.264771 645.213348 l
-143.264771 544.596268 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-149.217529 550.549026 m
-238.508911 550.549026 l
-238.508911 564.641907 l
-149.217529 564.641907 l
-149.217529 550.549026 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-149.217529 570.594666 m
-238.508911 570.594666 l
-238.508911 581.887527 l
-149.217529 581.887527 l
-149.217529 570.594666 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-149.217529 587.840286 m
-238.508911 587.840286 l
-238.508911 599.131073 l
-149.217529 599.131073 l
-149.217529 587.840286 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-149.217529 605.083832 m
-238.508911 605.083832 l
-238.508911 618.824860 l
-149.217529 618.824860 l
-149.217529 605.083832 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-149.217529 624.777618 m
-238.508911 624.777618 l
-238.508911 639.260590 l
-149.217529 639.260590 l
-149.217529 624.777618 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-100.662689 553.660522 m
-213.765106 553.660522 l
-213.765106 649.546402 l
-100.662689 649.546402 l
-100.662689 553.660522 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-106.615448 559.613281 m
-207.812347 559.613281 l
-207.812347 643.593643 l
-106.615448 643.593643 l
-106.615448 559.613281 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-112.568207 565.566040 m
-201.859589 565.566040 l
-201.859589 579.194595 l
-112.568207 579.194595 l
-112.568207 565.566040 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-112.568207 585.147354 m
-201.859589 585.147354 l
-201.859589 599.031647 l
-112.568207 599.031647 l
-112.568207 585.147354 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-112.568207 604.984406 m
-201.859589 604.984406 l
-201.859589 618.927994 l
-112.568207 618.927994 l
-112.568207 604.984406 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-112.568207 624.880753 m
-201.859589 624.880753 l
-201.859589 637.640884 l
-112.568207 637.640884 l
-112.568207 624.880753 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-537.107895 532.524475 m
-650.210312 532.524475 l
-650.210312 639.240814 l
-537.107895 639.240814 l
-537.107895 532.524475 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-543.060654 538.477234 m
-644.257553 538.477234 l
-644.257553 633.288055 l
-543.060654 633.288055 l
-543.060654 538.477234 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.013412 544.429993 m
-638.304794 544.429993 l
-638.304794 557.125931 l
-549.013412 557.125931 l
-549.013412 544.429993 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.013412 563.078690 m
-638.304794 563.078690 l
-638.304794 573.930130 l
-549.013412 573.930130 l
-549.013412 563.078690 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.013412 579.882889 m
-638.304794 579.882889 l
-638.304794 590.328934 l
-549.013412 590.328934 l
-549.013412 579.882889 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.013412 596.281693 m
-638.304794 596.281693 l
-638.304794 609.304947 l
-549.013412 609.304947 l
-549.013412 596.281693 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-549.013412 615.257706 m
-638.304794 615.257706 l
-638.304794 627.335297 l
-549.013412 627.335297 l
-549.013412 615.257706 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-458.456650 479.217316 m
-571.559067 479.217316 l
-571.559067 592.666397 l
-458.456650 592.666397 l
-458.456650 479.217316 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-464.409409 485.170074 m
-565.606308 485.170074 l
-565.606308 586.713638 l
-464.409409 586.713638 l
-464.409409 485.170074 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-470.362167 491.122833 m
-559.653549 491.122833 l
-559.653549 502.626892 l
-470.362167 502.626892 l
-470.362167 491.122833 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-470.362167 508.579651 m
-559.653549 508.579651 l
-559.653549 521.542053 l
-470.362167 521.542053 l
-470.362167 508.579651 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-470.362167 527.494812 m
-559.653549 527.494812 l
-559.653549 540.145111 l
-470.362167 540.145111 l
-470.362167 527.494812 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-470.362167 546.097870 m
-559.653549 546.097870 l
-559.653549 560.495728 l
-470.362167 560.495728 l
-470.362167 546.097870 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-470.362167 566.448486 m
-559.653549 566.448486 l
-559.653549 580.760880 l
-470.362167 580.760880 l
-470.362167 566.448486 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-183.117722 231.659851 m
-296.220139 231.659851 l
-296.220139 339.995605 l
-183.117722 339.995605 l
-183.117722 231.659851 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-189.070480 237.612610 m
-290.267380 237.612610 l
-290.267380 334.042847 l
-189.070480 334.042847 l
-189.070480 237.612610 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.023239 243.565369 m
-284.314621 243.565369 l
-284.314621 257.347366 l
-195.023239 257.347366 l
-195.023239 243.565369 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.023239 263.300125 m
-284.314621 263.300125 l
-284.314621 273.741486 l
-195.023239 273.741486 l
-195.023239 263.300125 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.023239 279.694244 m
-284.314621 279.694244 l
-284.314621 291.677948 l
-195.023239 291.677948 l
-195.023239 279.694244 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.023239 297.630707 m
-284.314621 297.630707 l
-284.314621 311.305893 l
-195.023239 311.305893 l
-195.023239 297.630707 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-195.023239 317.258652 m
-284.314621 317.258652 l
-284.314621 328.090088 l
-195.023239 328.090088 l
-195.023239 317.258652 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-429.907318 784.731705 m
-543.009735 784.731705 l
-543.009735 877.211319 l
-429.907318 877.211319 l
-429.907318 784.731705 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-435.860077 790.684464 m
-537.056976 790.684464 l
-537.056976 871.258560 l
-435.860077 871.258560 l
-435.860077 790.684464 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.812836 796.637222 m
-531.104218 796.637222 l
-531.104218 810.204819 l
-441.812836 810.204819 l
-441.812836 796.637222 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.812836 816.157578 m
-531.104218 816.157578 l
-531.104218 827.114029 l
-441.812836 827.114029 l
-441.812836 816.157578 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.812836 833.066788 m
-531.104218 833.066788 l
-531.104218 846.439529 l
-441.812836 846.439529 l
-441.812836 833.066788 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-441.812836 852.392288 m
-531.104218 852.392288 l
-531.104218 865.305801 l
-441.812836 865.305801 l
-441.812836 852.392288 l
-h f
-0 g 0 G
-0.800 g 0.800 G
--43.940155 709.511337 m
-69.162262 709.511337 l
-69.162262 806.608521 l
--43.940155 806.608521 l
--43.940155 709.511337 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
--37.987396 715.464096 m
-63.209503 715.464096 l
-63.209503 800.655762 l
--37.987396 800.655762 l
--37.987396 715.464096 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.034637 721.416855 m
-57.256744 721.416855 l
-57.256744 736.248596 l
--32.034637 736.248596 l
--32.034637 721.416855 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.034637 742.201355 m
-57.256744 742.201355 l
-57.256744 753.924988 l
--32.034637 753.924988 l
--32.034637 742.201355 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.034637 759.877747 m
-57.256744 759.877747 l
-57.256744 774.502853 l
--32.034637 774.502853 l
--32.034637 759.877747 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
--32.034637 780.455612 m
-57.256744 780.455612 l
-57.256744 794.703003 l
--32.034637 794.703003 l
--32.034637 780.455612 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-63.111969 756.866150 m
-176.214386 756.866150 l
-176.214386 871.815674 l
-63.111969 871.815674 l
-63.111969 756.866150 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-69.064728 762.818909 m
-170.261627 762.818909 l
-170.261627 865.862915 l
-69.064728 865.862915 l
-69.064728 762.818909 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-75.017487 768.771667 m
-164.308868 768.771667 l
-164.308868 781.777405 l
-75.017487 781.777405 l
-75.017487 768.771667 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-75.017487 787.730164 m
-164.308868 787.730164 l
-164.308868 800.793198 l
-75.017487 800.793198 l
-75.017487 787.730164 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-75.017487 806.745956 m
-164.308868 806.745956 l
-164.308868 821.260574 l
-75.017487 821.260574 l
-75.017487 806.745956 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-75.017487 827.213333 m
-164.308868 827.213333 l
-164.308868 841.723892 l
-75.017487 841.723892 l
-75.017487 827.213333 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-75.017487 847.676651 m
-164.308868 847.676651 l
-164.308868 859.910156 l
-75.017487 859.910156 l
-75.017487 847.676651 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-532.731857 65.591293 m
-645.834274 65.591293 l
-645.834274 155.157837 l
-532.731857 155.157837 l
-532.731857 65.591293 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-538.684616 71.544052 m
-639.881516 71.544052 l
-639.881516 149.205078 l
-538.684616 149.205078 l
-538.684616 71.544052 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-544.637375 77.496811 m
-633.928757 77.496811 l
-633.928757 88.873596 l
-544.637375 88.873596 l
-544.637375 77.496811 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-544.637375 94.826355 m
-633.928757 94.826355 l
-633.928757 108.138138 l
-544.637375 108.138138 l
-544.637375 94.826355 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-544.637375 114.090897 m
-633.928757 114.090897 l
-633.928757 125.199081 l
-544.637375 125.199081 l
-544.637375 114.090897 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-544.637375 131.151840 m
-633.928757 131.151840 l
-633.928757 143.252319 l
-544.637375 143.252319 l
-544.637375 131.151840 l
-h f
-0 g 0 G
-0.800 g 0.800 G
-445.092438 560.048203 m
-558.194855 560.048203 l
-558.194855 666.342270 l
-445.092438 666.342270 l
-445.092438 560.048203 l
-h f
-0 g 0 G
-0.750 0.750 1.000 rg 0.750 0.750 1.000 RG
-451.045197 566.000961 m
-552.242096 566.000961 l
-552.242096 660.389511 l
-451.045197 660.389511 l
-451.045197 566.000961 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.997955 571.953720 m
-546.289337 571.953720 l
-546.289337 582.695602 l
-456.997955 582.695602 l
-456.997955 571.953720 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.997955 588.648361 m
-546.289337 588.648361 l
-546.289337 603.392654 l
-456.997955 603.392654 l
-456.997955 588.648361 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.997955 609.345413 m
-546.289337 609.345413 l
-546.289337 620.161926 l
-456.997955 620.161926 l
-456.997955 609.345413 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.997955 626.114685 m
-546.289337 626.114685 l
-546.289337 636.731934 l
-456.997955 636.731934 l
-456.997955 626.114685 l
-h f
-0 g 0 G
-0.750 1.000 0.750 rg 0.750 1.000 0.750 RG
-456.997955 642.684692 m
-546.289337 642.684692 l
-546.289337 654.436752 l
-456.997955 654.436752 l
-456.997955 642.684692 l
-h f
-0 g 0 G
-1 0 0 1 155.0578 671.8011 cm
-q
-411.86791992188 0 0 141.73225402832 0 0 cm
-q
-0.023767001460016 0 0 0.069065913240499 0 0 cm
-0.25 0.25 0.25 rg 0.25 0.25 0.25 RG
-1 0 0 1 -155.0578 -671.8011 cm
-BT
-/F5 9.96264 Tf 1 0 0 1 155.0578 675.8552 Tm [<0026005200510037>]TJ
-1 0 0 1 180.0395 673.2697 Tm [<0028>]TJ
-1 0 0 1 186.0369 675.8552 Tm [<003B0057>]TJ
-ET
-1 0 0 1 155.0578 671.8011 cm
-Q
-0 g 0 G
-Q
-1 0 0 1 -155.0578 -671.8011 cm
-1 J
-0.000000 w
-1 0 0 1 223.6237 572.5898 cm
-q
-343.30140686035 0 0 42.51969909668 0 0 cm
-q
-0.0085541761481151 0 0 0.069065913240499 0 0 cm
-0.25 0.25 0.25 rg 0.25 0.25 0.25 RG
-1 0 0 1 -223.6237 -572.5898 cm
-BT
-/F5 9.96264 Tf 1 0 0 1 223.6237 576.6438 Tm [<0026005200510037>]TJ
-1 0 0 1 248.6053 574.0583 Tm [<0028>]TJ
-1 0 0 1 254.6027 576.6438 Tm [<003B0057>]TJ
-/F6 9.96264 Tf 1 0 0 1 269.1672 576.6438 Tm [<0038005600480055>-348<0030005200470058004F0048>]TJ
-ET
-1 0 0 1 223.6237 572.5898 cm
-Q
-0 g 0 G
-Q
-1 0 0 1 -223.6237 -572.5898 cm
-10.000000 M
-1 j
-1 J
-0.000000 w
-1 0 0 1 197.9285 515.8975 cm
-q
-368.99688720703 0 0 42.51969909668 0 0 cm
-q
-0.007958497870693 0 0 0.069065913240499 0 0 cm
-0.25 0.25 0.25 rg 0.25 0.25 0.25 RG
-1 0 0 1 -197.9285 -515.8975 cm
-BT
-/F6 9.96264 Tf 1 0 0 1 197.9285 519.9516 Tm [<0029>54<00520055>-347<0029>17<0055004800510046004B>-347<004700520046005800500048005100570056>]TJ
-ET
-1 0 0 1 197.9285 515.8975 cm
-Q
-0 g 0 G
-Q
-1 0 0 1 -197.9285 -515.8975 cm
-10.000000 M
-1 j
-1 J
-0.000000 w
-1 0 0 1 330.4259 99.2114 cm
-q
-236.49798583984 0 0 42.51969909668 0 0 cm
-q
-0.012417275747508 0 0 0.069065913240499 0 0 cm
-0.25 0.25 0.25 rg 0.25 0.25 0.25 RG
-1 0 0 1 -330.4259 -99.2114 cm
-BT
-/F6 9.96264 Tf 1 0 0 1 330.4259 103.2654 Tm [<0033>26<0048005700480055>-347<003000BE00510056005700480055>]TJ
-ET
-1 0 0 1 330.4259 99.2114 cm
-Q
-0 g 0 G
-Q
-1 0 0 1 -330.4259 -99.2114 cm
-10.000000 M
-1 j
-1 J
-0.000000 w
-1 0 0 1 267.2699 42.5191 cm
-q
-299.65461730957 0 0 42.51969909668 0 0 cm
-q
-0.0098001525553013 0 0 0.069065913240499 0 0 cm
-0.25 0.25 0.25 rg 0.25 0.25 0.25 RG
-1 0 0 1 -267.2699 -42.5191 cm
-BT
-/F6 9.96264 Tf 1 0 0 1 267.2699 46.5732 Tm [<00310052005900480050004500480055>-348<001C000F>-348<0015001300140014>]TJ
-ET
-1 0 0 1 267.2699 42.5191 cm
-Q
-0 g 0 G
-Q
-1 0 0 1 -267.2699 -42.5191 cm
-10.000000 M
-1 j
-1 J
-0.000000 w
-Q
-% mps graphic 1: end
-endstream
-endobj
-16 0 obj
-<<
-/Type /Page
-/Contents 17 0 R
-/Resources 15 0 R
-/MediaBox [0 0 595.2673 841.878]
-/TrimBox [ 0.0000 0.0000 595.2673 841.8780 ] /CropBox [ 0.0000 0.0000 595.2673 841.8780 ]
-/Parent 20 0 R
->>
-endobj
-15 0 obj
-<<
-
-/Font << /F5 18 0 R /F6 19 0 R >>
-/ProcSet [ /PDF /Text ]
->>
-endobj
-23 0 obj
-<<
-/Length 582
->>
-stream
-0 g 0 G
-0 g 0 G
-BT
-/F7 9.96264 Tf 1 0 0 1 99.2126 774.213 Tm [<002900520055>-317<002900550048>-1<00510046004B>-317<004700520046005800500048005100570056>]TJ
-1 0 0 1 22.008 60.9644 Tm [<0014>]TJ
-/F8 9.96264 Tf 1 0 0 1 37.0553 60.9644 Tm [<0057001000490055004800510046004B>]TJ
-/F7 9.96264 Tf 1 0 0 1 99.2126 60.9644 Tm [<0026005200510037>]TJ
-1 0 0 1 123.2311 58.2402 Tm [<0028>]TJ
-1 0 0 1 128.4514 60.9644 Tm [<003B0057>-317<0038005600480055>-318<0030005200470058004F0048>-29679<0026005200510037>]TJ
-1 0 0 1 524.1428 58.2402 Tm [<0028>]TJ
-1 0 0 1 529.3631 60.9644 Tm [<003B0057>]TJ
-ET
-endstream
-endobj
-22 0 obj
-<<
-/Type /Page
-/Contents 23 0 R
-/Resources 21 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/TrimBox [ 0.0000 0.0000 595.2756 841.8898 ] /CropBox [ 0.0000 0.0000 595.2756 841.8898 ]
-/Parent 20 0 R
->>
-endobj
-21 0 obj
-<<
-
-/Font << /F7 24 0 R /F8 25 0 R >>
-/ProcSet [ /PDF /Text ]
->>
-endobj
-28 0 obj
-<<
-/Length 10211
->>
-stream
-0 g 0 G
-0 g 0 G
-BT
-/F7 9.96264 Tf 1 0 0 1 428.3211 774.213 Tm [<002900520055>-317<002900550048>-1<00510046004B>-317<004700520046005800500048005100570056>]TJ
-/F8 9.96264 Tf 1 0 0 1 37.0553 60.9644 Tm [<0057001000490055004800510046004B>]TJ
-/F7 9.96264 Tf 1 0 0 1 99.2126 60.9644 Tm [<0026005200510037>]TJ
-1 0 0 1 123.2311 58.2402 Tm [<0028>]TJ
-1 0 0 1 128.4514 60.9644 Tm [<003B0057>-29678<0026005200510037>]TJ
-1 0 0 1 458.8749 58.2402 Tm [<0028>]TJ
-1 0 0 1 464.0952 60.9644 Tm [<003B0057>-317<0038005600480055>-318<0030005200470058004F0048>-1423<0015>]TJ
-/F5 9.96264 Tf 1 0 0 1 99.2126 739.339 Tm [<0037004B004C0056>-317<0050>-1<005200470058004F0048>-317<00570055004C00480056>-318<00570052>-318<00470052>-318<0056004C0050004C004F00440055>-318<0057004B004C0051004A0056>-318<00440056>-318<0057004B0048>-318<00490055004800510046004B00450011004F00470049>-318<004C0051>-318<002F>]TJ
-/F5 5.977584 Tf 1 0 0 1 401.1659 742.2441 Tm [<0024>]TJ
-/F5 9.96264 Tf 1 0 0 1 404.6193 739.339 Tm [<0037>]TJ
-1 0 0 1 409.5638 736.7534 Tm [<0028>]TJ
-1 0 0 1 415.5612 739.339 Tm [<003B001D>]TJ
-/F4 9.96264 Tf 1 0 0 1 99.2126 712.9049 Tm [<03A1>]TJ
-/F5 9.96264 Tf 1 0 0 1 114.1567 712.9049 Tm [<0044005800570052005000440057004C0046>-317<00560053004400460048>-318<004500480049005200550048>-318<007D>-318<004400510047>-318<00440049005700480055>-318<006D000F>-318<001D000F>-317<0022>-1<000F>-317<001E>-318<004400510047>-318<0004>]TJ
-/F4 9.96264 Tf 1 0 0 1 99.2126 686.4708 Tm [<03A1>]TJ
-/F5 9.96264 Tf 1 0 0 1 114.1567 686.4708 Tm [<0046004B00440051004A004C0051004A>-318<0056005C005000450052004F>-318<004900520055>-317<004C005700480050004C005D0048>-318<004800510059004C0055005200510050004800510057>]TJ
-1 0 0 1 99.2126 660.0367 Tm [<002C0049>-271<002C>-272<00550048005000480050004500480055>-272<0055004C004A004B0057000F>-281<0057004B0048>-271<002F>]TJ
-/F5 5.977584 Tf 1 0 0 1 225.3485 662.9418 Tm [<0024>]TJ
-/F5 9.96264 Tf 1 0 0 1 228.8019 660.0367 Tm [<0037>]TJ
-1 0 0 1 233.7464 657.4512 Tm [<0028>]TJ
-1 0 0 1 239.7438 660.0367 Tm [<003B>-271<0045004400450048004F>-272<005300440046004E0044004A0048>-272<0047005200480056>-271<0044>-272<005000580046004B>-272<004500480057005700480055>-271<004D00520045>-272<00440057>-271<004F00440051004A>-1<00580044004A0048>-271<0056005A004C00570046004B0010>]TJ
-1 0 0 1 99.2126 645.5578 Tm [<004C0051004A000F>-317<0045>-1<00580057>-317<002C>-318<00470052005107700057>-318<004E00510052005A>118<000F>-317<004B0052005A>-318<0057004B004C0056>-318<004C0056>-318<0053005200560056004C0045004F0048>-318<004C0051>-318<0026005200510037>]TJ
-1 0 0 1 349.4774 642.9722 Tm [<0028>]TJ
-1 0 0 1 355.4748 645.5578 Tm [<003B0057001100110011>]TJ
-1 0 0 1 99.2126 619.1237 Tm [<003000440051005C>-318<0057004B00440051004E0056>-317<00570052>-318<002B004400510056>-318<002B0044004A00480051>-318<004400510047>-318<003A>67<0052004F0049004A00440051004A>-317<00360046004B00580056005700480055>-318<004900520055>-318<0057004B0048004C0055>-318<004B0048004F00530004>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 592.6896 Tm [<0014>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 592.6896 Tm [<003F005A0055004C00570048005600570044005700580056005E004F005200440047004C0051004A>1<0060005E0037005C005300480056004800570057004C0051004A>-601<00290055004800510046004B>-602<0047005200460058005000480051005700560060>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 566.2555 Tm [<0015>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 566.2555 Tm [<003F00560057004400550057005600480057005800530056>-601<00490055004800510046004B>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 551.7766 Tm [<0016>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 551.7766 Tm [<0008>-602<0037005200470052001D>-601<0037004B004C0056>-602<0056004B005200580047>-602<00450048>-602<0044004F00560052>-602<004400460057004C00590048>-602<004C0051>-602<004900520052005700510052005700480056000F>-601<004B004800440047004800550056>-602<004400510047>-602<0049005200520057004800550056000F>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 537.2976 Tm [<0017>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 537.2976 Tm [<0008>-602<004400510047>-601<005100520057>-602<004400460057004C00590048>-602<004C0051>-602<005900480055004500440057004C0050>-602<00570048005B0057001D>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 522.8187 Tm [<0018>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 522.8187 Tm [<003F0056004800570046004B00440055004400460057004800550056005300440046004C0051004A>1<003E00490055004800510046004B00530058005100460057005800440057004C005200510040>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 508.3398 Tm [<0019>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 508.3398 Tm [<0008>-602<0024>-602<00540058004800560057004C00520051>-601<00520049>-602<00560057005C004F0048001D>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 493.8609 Tm [<001A>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 493.8609 Tm [<003F00560048005700580053004C005700480050004C005D0048003E0056005C005000450052004F>1<002000150040>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 479.382 Tm [<001B>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 479.382 Tm [<003F0056005700520053005600480057005800530056>]TJ
-/F8 7.970112 Tf 1 0 0 1 80.241 464.903 Tm [<001C>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 464.903 Tm [<003F00560057004400550057005600480057005800530056>-601<005100520057001000490055004800510046004B>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 450.4241 Tm [<00140013>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 450.4241 Tm [<003F0056004800570046004B00440055004400460057004800550056005300440046004C0051004A>1<003E005500480056004800570040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 435.9452 Tm [<00140014>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 435.9452 Tm [<003F00560048005700580053004C005700480050004C005D0048003E0056005C005000450052004F>1<0020003F0046005800550055004800510057004C005700480050004F004800590048004F0040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 421.4663 Tm [<00140015>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 421.4663 Tm [<003F0056005700520053005600480057005800530056>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 406.9873 Tm [<00140016>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 406.9873 Tm [<003F00560048005700580053004F00440051004A00580044004A0048>-601<003E00470048004900440058004F00570040>-602<003E0056004800570058005300560020005100520057001000490055004800510046004B0040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 392.5084 Tm [<00140017>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 392.5084 Tm [<003F00560048005700580053004F00440051004A00580044004A0048>-601<003E004900550040>-3612<003E005600480057005800530056002000490055004800510046004B0040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 378.0295 Tm [<00140018>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 378.0295 Tm [<003F00500044004C0051004F00440051004A00580044004A0048>-1203<003E004900550040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 351.5954 Tm [<00140019>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 351.5954 Tm [<003F004C0049005B>-601<003F004C004800500048>-1204<003F00580051004700480049004C005100480047>-602<003F004700480049003F004C004800500048>-1203<005E003F004B004C004A004B005200550047004C00510044004F005600570055005E004800600060>-1806<003F0049004C>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 337.1165 Tm [<0014001A>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 337.1165 Tm [<003F004C0049005B>-601<003F004C0048005000480056>-602<003F00580051004700480049004C005100480047>-602<003F004700480049003F004C0048005000480056>-601<005E003F004B004C004A004B005200550047004C00510044004F005600570055005E0048005600600060>-1203<003F0049004C>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 322.6376 Tm [<0014001B>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 322.6376 Tm [<003F004C0049005B>-601<003F004C00480055>-1806<003F00580051004700480049004C005100480047>-602<003F004700480049003F004C00480055>-1806<005E003F004B004C004A004B005200550047004C00510044004F005600570055005E0048005500600060>-1203<003F0049004C>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 308.1586 Tm [<0014001C>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 308.1586 Tm [<003F004C0049005B>-601<003F004C004800550048>-1204<003F00580051004700480049004C005100480047>-602<003F004700480049003F004C004800550048>-1203<005E003F004B004C004A004B005200550047004C00510044004F005600570055005E0055004800600060>-1204<003F0049004C>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 293.6797 Tm [<00150013>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 293.6797 Tm [<003F004C0049005B>-601<003F004C004800550056>-1204<003F00580051004700480049004C005100480047>-602<003F004700480049003F004C004800550056>-1203<005E003F004B004C004A004B005200550047004C00510044004F005600570055005E00480055005600600060>-601<003F0049004C>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 279.2008 Tm [<00150014>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 279.2008 Tm [<003F004C0049005B>-601<003F004C0048005500480056>-602<003F00580051004700480049004C005100480047>-602<003F004700480049003F004C0048005500480056>-601<005E003F004B004C004A004B005200550047004C00510044004F005600570055005E00550048005600600060>-601<003F0049004C>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 252.7667 Tm [<00150015>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 252.7667 Tm [<003F0046005200510057004C005100580048004C0049004C00510053005800570049004C004F0048>1<005E0057001000490055004800510046004B00110050004E004C00590060>]TJ
-/F5 9.96264 Tf 1 0 0 1 99.2126 226.3326 Tm [<003800560044004A0048>-317<0048005B004400500053004F0048001D>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 199.8985 Tm [<00150016>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 199.8985 Tm [<003F00560057004400550057004500580049004900480055003E004C00570048005000560040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 185.4196 Tm [<00150017>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 185.4196 Tm [<003F00560057004400550057004C005700480050004C005D0048>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 170.9407 Tm [<00150018>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 170.9407 Tm [<003F004C005700480050>-601<0057004800560057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 156.4618 Tm [<00150019>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 156.4618 Tm [<003F004C005700480050>-601<0057004800560057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 141.9828 Tm [<0015001A>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 141.9828 Tm [<003F00560057004400550057004C005700480050004C005D0048>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 127.5039 Tm [<0015001B>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 127.5039 Tm [<003F004C005700480050>-601<0057004800560057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 113.025 Tm [<0015001C>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 113.025 Tm [<003F004C005700480050>-601<0057004800560057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 98.5461 Tm [<00160013>]TJ
-/F8 9.96264 Tf 1 0 0 1 135.2007 98.5461 Tm [<003F00560057004400550057004C005700480050004C005D0048>]TJ
-ET
-endstream
-endobj
-27 0 obj
-<<
-/Type /Page
-/Contents 28 0 R
-/Resources 26 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/TrimBox [ 0.0000 0.0000 595.2756 841.8898 ] /CropBox [ 0.0000 0.0000 595.2756 841.8898 ]
-/Parent 20 0 R
->>
-endobj
-26 0 obj
-<<
-
-/Font << /F7 24 0 R /F8 25 0 R /F5 18 0 R /F4 29 0 R >>
-/ProcSet [ /PDF /Text ]
->>
-endobj
-32 0 obj
-<<
-/Length 4638
->>
-stream
-0 g 0 G
-0 g 0 G
-BT
-/F7 9.96264 Tf 1 0 0 1 99.2126 774.213 Tm [<002900520055>-317<002900550048>-1<00510046004B>-317<004700520046005800500048005100570056>]TJ
-1 0 0 1 22.008 60.9644 Tm [<0016>]TJ
-/F8 9.96264 Tf 1 0 0 1 37.0553 60.9644 Tm [<0057001000490055004800510046004B>]TJ
-/F7 9.96264 Tf 1 0 0 1 99.2126 60.9644 Tm [<0026005200510037>]TJ
-1 0 0 1 123.2311 58.2402 Tm [<0028>]TJ
-1 0 0 1 128.4514 60.9644 Tm [<003B0057>-317<0038005600480055>-318<0030005200470058004F0048>-29679<0026005200510037>]TJ
-1 0 0 1 524.1428 58.2402 Tm [<0028>]TJ
-1 0 0 1 529.3631 60.9644 Tm [<003B0057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 739.3389 Tm [<00160014>]TJ
-/F8 9.96264 Tf 1 0 0 1 135.2007 739.3389 Tm [<003F004C005700480050>-601<0057004800560057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 724.86 Tm [<00160015>]TJ
-/F8 9.96264 Tf 1 0 0 1 135.2007 724.86 Tm [<003F004C005700480050>-601<0057004800560057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 710.3811 Tm [<00160016>]TJ
-/F8 9.96264 Tf 1 0 0 1 135.2007 710.3811 Tm [<003F0056005700520053004C005700480050004C005D0048>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 695.9022 Tm [<00160017>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 695.9022 Tm [<003F0056005700520053004C005700480050004C005D0048>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 681.4233 Tm [<00160018>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 681.4233 Tm [<003F0056005700520053004C005700480050004C005D0048>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 666.9443 Tm [<00160019>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 666.9443 Tm [<003F0056005700520053004500580049004900480055>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 640.5102 Tm [<0016001A>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 640.5102 Tm [<003F0058005600480050005200470058004F0048003E00490055004800510046004B0040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 614.0762 Tm [<0016001B>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 614.0762 Tm [<003F0056005700440055005700570048005B0057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 599.5972 Tm [<0016001C>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 599.5972 Tm [<003F00560057004400550057004500580049004900480055>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 585.1183 Tm [<00170013>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 585.1183 Tm [<00390052004C004F00A2001D>-601<00390052004C004F00A20022>-602<00390052004C004F00A20004>-602<00390052004C004F00A2001E>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 570.6394 Tm [<00170014>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 570.6394 Tm [<003F00560057004400550057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 556.1605 Tm [<00170015>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 556.1605 Tm [<003F004F00440051004A00580044004A0048003E004800510040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 541.6815 Tm [<00170016>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 541.6815 Tm [<0056005200500048>-601<00280051004A004F004C0056004B>-602<00570048005B0057001D>-602<006D00280051004A004F004C0056004B007D>-602<00520055>-601<003F005400580052005700440057004C00520051005E00290055004800510046004B0060000F>-602<0052004E0022>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 527.2026 Tm [<00170017>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 527.2026 Tm [<003F0056005700520053>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 512.7237 Tm [<00170018>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 512.7237 Tm [<006D00590052004C004F00A2007D>-601<003F00540058005200570048005E00590052004C004F00A20060>-602<003F005400580052005700440057004C00520051005E00590052004C004F00A20060>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 498.2448 Tm [<00170019>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 498.2448 Tm [<003F004A00480057004500580049004900480055003E004C00570048005000560040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 483.7658 Tm [<0017001A>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 483.7658 Tm [<003F00560057004400550057>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 469.2869 Tm [<0017001B>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 469.2869 Tm [<003F004F00440051004A00580044004A0048003E004800510040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 454.808 Tm [<0017001C>]TJ
-/F8 9.96264 Tf 1 0 0 1 123.2047 454.808 Tm [<003F004A00480057004500580049004900480055003E004C00570048005000560040>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 440.3291 Tm [<00180013>]TJ
-/F8 9.96264 Tf 1 0 0 1 111.2086 440.3291 Tm [<003F0056005700520053>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 425.8502 Tm [<00180014>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 425.8502 Tm [<003F0056005700520053004500580049004900480055>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 411.3712 Tm [<00180015>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 411.3712 Tm [<003F0057005C00530048004500580049004900480055>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 396.8923 Tm [<00180016>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 396.8923 Tm [<003F004A00480057004500580049004900480055>]TJ
-/F8 7.970112 Tf 1 0 0 1 75.4426 382.4134 Tm [<00180017>]TJ
-/F8 9.96264 Tf 1 0 0 1 99.2126 382.4134 Tm [<003F005600570052005300570048005B0057>]TJ
-ET
-endstream
-endobj
-31 0 obj
-<<
-/Type /Page
-/Contents 32 0 R
-/Resources 30 0 R
-/MediaBox [0 0 595.2756 841.8898]
-/TrimBox [ 0.0000 0.0000 595.2756 841.8898 ] /CropBox [ 0.0000 0.0000 595.2756 841.8898 ]
-/Parent 20 0 R
->>
-endobj
-30 0 obj
-<<
-
-/Font << /F7 24 0 R /F8 25 0 R >>
-/ProcSet [ /PDF /Text ]
->>
-endobj
-33 0 obj
-<<
-/Type /Metadata /Subtype /XML
-/Length 2234
->>
-stream
-<?xpacket begin="" id="vkuuxfithomqjnyxqsdpagdu"?>
-
-<x:xmpmeta xmlns:x="adobe:ns:meta/">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
- <dc:format>application/pdf</dc:format>
- <dc:creator>
- <rdf:Seq>
- <rdf:li/>
- </rdf:Seq>
- </dc:creator>
- <dc:description/>
- <dc:title>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">t-french</rdf:li>
- </rdf:Alt>
- </dc:title>
- </rdf:Description>
- <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
- <pdfx:ConTeXt.Jobname>t-french</pdfx:ConTeXt.Jobname>
- <pdfx:ConTeXt.Time>2011.11.09 23:08</pdfx:ConTeXt.Time>
- <pdfx:ConTeXt.Url>www.pragma-ade.com</pdfx:ConTeXt.Url>
- <pdfx:ConTeXt.Version>2011.11.08 15:20</pdfx:ConTeXt.Version>
- <pdfx:ID>t-french.2011-11-09T23:08:17+01:00</pdfx:ID>
- <pdfx:PTEX.Fullbanner>This is LuaTeX, Version beta-0.70.1-2011051918 (rev 4277) (TeX Live 2011) kpathsea version 6.0.1</pdfx:PTEX.Fullbanner>
- </rdf:Description>
- <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
- <xmp:CreateDate>2011-11-09T23:08:17+01:00</xmp:CreateDate>
- <xmp:CreatorTool>ConTeXt - 2011.11.08 15:20</xmp:CreatorTool>
- <xmp:ModifyDate>2011-11-09T23:08:17+01:00</xmp:ModifyDate>
- <xmp:MetadataDate>2011-11-09T23:08:17+01:00</xmp:MetadataDate>
- </rdf:Description>
- <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
- <pdf:Keywords/>
- <pdf:Producer>LuaTeX-0.70.1</pdf:Producer>
- <pdf:Trapped>False</pdf:Trapped>
- </rdf:Description>
- <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
- <xmpMM:DocumentID>uuid:281c66a4-4214-8ffb-37e0-8350d6d09cd6</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:4bc9a336-4863-9f90-4ae3-c57786d9c519</xmpMM:InstanceID>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
-
-<?xpacket end="w"?>
-endstream
-endobj
-34 0 obj
-[ 929 [523]]
-endobj
-35 0 obj
-<<
-/Length 117
->>
-stream
-
-endstream
-endobj
-36 0 obj
-<<
-/Subtype /CIDFontType0C
-/Length 757
->>
-stream
-
-
-@@L
-
-;[<!53# 5
-
-
-endstream
-endobj
-37 0 obj
-<<
-/Type /FontDescriptor
-/FontName /DINNAX+XITSMath
-/Flags 4
-/FontBBox [-970 -906 3238 2566]
-/Ascent 1055
-/CapHeight 662
-/Descent -455
-/ItalicAngle 0
-/StemV 83
-/XHeight 450
-/FontFile3 36 0 R
-/CIDSet 35 0 R
->>
-endobj
-38 0 obj
-<<
-/Length 647
->>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-DINNAX-XITSMath-0)
-%%Title: (TeX-DINNAX-XITSMath-0 TeX DINNAX-XITSMath 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (DINNAX-XITSMath)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-DINNAX-XITSMath def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-0 beginbfrange
-endbfrange
-1 beginbfchar
-<03A1> <2022>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-endstream
-endobj
-29 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/Encoding /Identity-H
-/BaseFont /DINNAX+XITSMath
-/DescendantFonts [39 0 R]
-/ToUnicode 38 0 R
->>
-endobj
-39 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType0
-/BaseFont /DINNAX+XITSMath
-/FontDescriptor 37 0 R
-/W 34 0 R
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
->>
-endobj
-40 0 obj
-[ 4 [602.1] 8 [602.1] 15 [602.1 602.1 602.1] 19 [602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1] 32 [602.1] 34 [602.1] 36 [602.1] 40 [602.1 602.1] 55 [602.1] 57 [602.1] 62 [602.1 602.1 602.1] 68 [602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1] 78 [602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1 602.1] 96 [602.1] 109 [602.1] 125 [602.1] 162 [602.1]]
-endobj
-41 0 obj
-<<
-/Length 21
->>
-stream
-C
-endstream
-endobj
-42 0 obj
-<<
-/Length 26271
->>
-stream
-
-
- :UZmt{ .<[ex{-McyEMWY[]}
-  # & 7 : > I K _ q !!!!!!!"!$!&!+!.!_" """" "-"="i"""""""####!#(#+#5#>#D#I#M#P#T#\#`#e#i#p#z#}#####$#&/&&&&'' '''K'M'R'V'^'u''''''))*/+,d,p,w,z,..%..'t
-hdb\XVURHFB@86,*(&$ {yrmljfeda_;
- |snO g`_Q<MD<dcd_d]cc>6.$ h g e l
-
-
-
-P
-
-
-
-
-
-
-
-
-
-
-
-7
-
-
-<2991
-
- %
-4 
-+ :99991
-@  $!
-/ ?
-? O
-O _
-_
-
-
- F/
-/ _
-_
- $]]4632#"&"32'2#"M68PO98K7PP78NL0670xx~
-
-
-"$91
-  #)
-
-"
-
-
- os
-
-1
-  %%B
-
-%
-%
-
-
-B
- 91
-
- 1
-21
-
- D >*22991
- ]#"326757#5#"&546;5.#"5>32=zl;^[fX=& 3qpepӺ)Ld_y64''RR2
-    
-
-
-
-<<1
- D
-
- 
-0 ?????????
- #]>32#4&#"#4&#"#3>32"iJo5FP;9JI9!c?LeHEws{p{``<?F
-
-SWW
-
-B
- 
- 
- 
-  J
-
-
-
- 
-
-  
-
-  &
-
-
-++>><
-H
-Y
-jih
-{yz|
-
-]]333# #àö`wBf
-
-
-
- B
-
-
-
-
-:4
-ZV
-]] # # 3 ^oo)'`?Hk
-  
-
-]
-2991
-]!!!5!-}bܖ%
-$
-
-%<<299999991
-v 
-
-<<991
-
-,,6^^^^^^^^^^^^^^d X
-B
-n
- , h D , rHPPPPPPPPPPPPPPPP
-
-
-DejaVu changes are in public domain
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Bitstream Vera Fonts Copyright
-------------------------------
-
-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:
-
-The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.
-
-The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".
-
-This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.
-
-The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.
-
-
-
-ϊ̖ˋ%}Ś   ]%]@%AA dd@2(-}-d
-  ..A]%]@%%%A  %d%BSx~}~}}|{zwvut uu
- @  
- @  
- 
- -:-:
-endstream
-endobj
-43 0 obj
-<<
-/Type /FontDescriptor
-/FontName /ORAKJC+DejaVuSansMono
-/Flags 4
-/FontBBox [0 -208 1000 760]
-/Ascent 760
-/CapHeight 729
-/Descent -208
-/ItalicAngle 0
-/StemV 86
-/XHeight 547
-/FontFile2 42 0 R
-/CIDSet 41 0 R
->>
-endobj
-44 0 obj
-<<
-/Length 944
->>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-ORAKJC-DejaVuSansMono-0)
-%%Title: (TeX-ORAKJC-DejaVuSansMono-0 TeX ORAKJC-DejaVuSansMono 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (ORAKJC-DejaVuSansMono)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-ORAKJC-DejaVuSansMono def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-6 beginbfrange
-<000F> <0011> <002C>
-<0013> <001E> <0030>
-<0028> <0029> <0045>
-<003E> <0040> <005B>
-<0044> <004C> <0061>
-<004E> <005E> <006B>
-endbfrange
-11 beginbfchar
-<0004> <0021>
-<0008> <0025>
-<0020> <003D>
-<0022> <003F>
-<0024> <0041>
-<0037> <0054>
-<0039> <0056>
-<0060> <007D>
-<006D> <00AB>
-<007D> <00BB>
-<00A2> <00E0>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-endstream
-endobj
-25 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/Encoding /Identity-H
-/BaseFont /ORAKJC+DejaVuSansMono
-/DescendantFonts [45 0 R]
-/ToUnicode 44 0 R
->>
-endobj
-45 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType2
-/CIDToGIDMap /Identity
-/BaseFont /ORAKJC+DejaVuSansMono
-/FontDescriptor 43 0 R
-/W 40 0 R
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
->>
-endobj
-46 0 obj
-[ 20 [636.2 636.2 636.2] 38 [698.2] 40 [631.8 575.2] 48 [862.8] 55 [610.8 731.9] 59 [685.1] 70 [549.8 634.8 615.2] 75 [633.8] 79 [277.8 974.1 633.8 611.8] 85 [411.1 521 392.1 633.8]]
-endobj
-47 0 obj
-<<
-/Length 12
->>
-stream
-
-endstream
-endobj
-48 0 obj
-<<
-/Length 27804
->>
-stream
-
-$`)
-
- :UWZpt?5JR>PjGv#.[jx{}EMWY[]} d q ! !I!K!N!!###!#(#,#u#z#}#######$#$i&&&&'' '''K'M'R'V'^''''''()) )A))))***/***++$+T,w,-e-o..%..MGMQWn+?KSWg6<>ADO#t
-)@))))*
-
-
-
-
-7
-=
-E
-F
-G
-H
-g
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 
-
-
-
-KTKT[KT[X
-    #)
-
- 
-21
- 
-
- B
-
->
-
-
-&& &
-
-45
-i|{y
-
- #,'( 4<VY ej vy ]
-TX
-8
- 1
-]
-
-
-
-Y3 3 # #su 
-
-o
-Cė
-
-
- {  {]"32654&'2
-
-SB
- 
- 
-  . ,
-, , ; ;
-; ;
-( *//*(() )!$'
- 
-    '/)?)_))))))]
-  
-  N
-
-
-
-
-Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
-DejaVu changes are in public domain
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Bitstream Vera Fonts Copyright
-------------------------------
-
-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
-a trademark of Bitstream, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of the fonts accompanying this license ("Fonts") and associated
-documentation files (the "Font Software"), to reproduce and distribute the
-Font Software, including without limitation the rights to use, copy, merge,
-publish, distribute, and/or sell copies of the Font Software, and to permit
-persons to whom the Font Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright and trademark notices and this permission notice shall
-be included in all copies of one or more of the Font Software typefaces.
-
-The Font Software may be modified, altered, or added to, and in particular
-the designs of glyphs or characters in the Fonts may be modified and
-additional glyphs or characters may be added to the Fonts, only if the fonts
-are renamed to names not containing either the words "Bitstream" or the word
-"Vera".
-
-This License becomes null and void to the extent applicable to Fonts or Font
-Software that has been modified and is distributed under the "Bitstream
-Vera" names.
-
-The Font Software may be sold as part of a larger software package but no
-copy of one or more of the Font Software typefaces may be sold by itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
-TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
-FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
-ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
-FONT SOFTWARE.
-
-Except as contained in this notice, the names of Gnome, the Gnome
-Foundation, and Bitstream Inc., shall not be used in advertising or
-otherwise to promote the sale, use or other dealings in this Font Software
-without prior written authorization from the Gnome Foundation or Bitstream
-Inc., respectively. For further information, contact: fonts at gnome dot
-org.
-
-Arev Fonts Copyright
-------------------------------
-
-Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the fonts accompanying this license ("Fonts") and
-associated documentation files (the "Font Software"), to reproduce
-and distribute the modifications to the Bitstream Vera Font Software,
-including without limitation the rights to use, copy, merge, publish,
-distribute, and/or sell copies of the Font Software, and to permit
-persons to whom the Font Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright and trademark notices and this permission notice
-shall be included in all copies of one or more of the Font Software
-typefaces.
-
-The Font Software may be modified, altered, or added to, and in
-particular the designs of glyphs or characters in the Fonts may be
-modified and additional glyphs or characters may be added to the
-Fonts, only if the fonts are renamed to names not containing either
-the words "Tavmjong Bah" or the word "Arev".
-
-This License becomes null and void to the extent applicable to Fonts
-or Font Software that has been modified and is distributed under the
-"Tavmjong Bah Arev" names.
-
-The Font Software may be sold as part of a larger software package but
-no copy of one or more of the Font Software typefaces may be sold by
-itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
-TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the name of Tavmjong Bah shall not
-be used in advertising or otherwise to promote the sale, use or other
-dealings in this Font Software without prior written authorization
-from Tavmjong Bah. For further information, contact: tavmjong @ free
-. fr.
-  A(]%]@%..%A  %d%@~}}~}}|d{T{%zyxw v
-utsrqponl!kjBjSih}gBfedcba:`^ ][ZYX
-YX
-WW2VUTUBTSSRQJQP ONMNMLKJKJIJI IH GFEDC-CBAK@?>=>=<=<; <@; :987876765 65 43 21 21 0/ 0 / .- .- ,2+*%+d*)*%)('%(A'%&% &% $#"!! d d BBBdB-B}d     
- -d@--
-endstream
-endobj
-49 0 obj
-<<
-/Type /FontDescriptor
-/FontName /YZYCWM+DejaVuSans
-/Flags 4
-/FontBBox [0 -208 1000 760]
-/Ascent 760
-/CapHeight 729
-/Descent -208
-/ItalicAngle 0
-/StemV 86
-/XHeight 547
-/FontFile2 48 0 R
-/CIDSet 47 0 R
->>
-endobj
-50 0 obj
-<<
-/Length 825
->>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-YZYCWM-DejaVuSans-0)
-%%Title: (TeX-YZYCWM-DejaVuSans-0 TeX YZYCWM-DejaVuSans 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (YZYCWM-DejaVuSans)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-YZYCWM-DejaVuSans def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-6 beginbfrange
-<0014> <0016> <0031>
-<0028> <0029> <0045>
-<0037> <0038> <0054>
-<0046> <0048> <0063>
-<004F> <0052> <006C>
-<0055> <0058> <0072>
-endbfrange
-4 beginbfchar
-<0026> <0043>
-<0030> <004D>
-<003B> <0058>
-<004B> <0068>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-endstream
-endobj
-24 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/Encoding /Identity-H
-/BaseFont /YZYCWM+DejaVuSans
-/DescendantFonts [51 0 R]
-/ToUnicode 50 0 R
->>
-endobj
-51 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType2
-/CIDToGIDMap /Identity
-/BaseFont /YZYCWM+DejaVuSans
-/FontDescriptor 49 0 R
-/W 46 0 R
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
->>
-endobj
-52 0 obj
-[ 15 [348.1] 19 [695.8 695.8 695.8] 28 [695.8] 41 [710] 48 [1106.9 914.1] 51 [752] 56 [872.1] 69 [699.2 608.9 699.2 636.2] 75 [727.1] 79 [379.9 1058.1 727.1 667] 85 [526.9 563 461.9 727.1 581.1] 190 [727.1]]
-endobj
-53 0 obj
-<<
-/Length 24
->>
-stream
-
-endstream
-endobj
-54 0 obj
-<<
-/Length 20527
->>
-stream
-
-
-
-
-
-
-
-33
-TX
-
-91
-
- *
-9991
-  &1
-#
-vs v
- &&&:VPf`uwvvp]
-sv
-myyyy7By
-
- p5
-
-
- ]]4&#"!32673#
-
-
-TX
-21
-H N5 N"H* ($5&A12<91
-
-TX
-43
- Q ! * !
- 
-) , , )6#E#Y Y
-Y Y Y YYY Y!Y"Y#j j
-j j j jjj j!j"j#
-  !"#
-  !"#
-  !"#<]]7332654&/.54632#.#"!"&`qlsIi^Ձq lo@SѠc)w}KF@F%)!mnEB6>%5
-
-T[X
-TK T[X
-    L
-
-
-
-
-DejaVu changes are in public domain
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Bitstream Vera Fonts Copyright
-------------------------------
-
-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:
-
-The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.
-
-The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".
-
-This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.
-
-The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.
-
-2ǻƻĖG}G0} 
-&
-@ 7 !7 2.+t+t ]%]@%@ @  dtd  @  
-2
-}t} t2q  @~t~}|}|{z{zy]zzyx%y]y@x%w7vtvkututsrqrqqpo.po.nmlkKj
-hg
-g@f!e}d@ckba}`^] ][YXY-XW2V TSTSRQPQ%PPOONMN}MI MM@LL1KK2JI J}I HG
-H}G
-FE F2ED E E@D CBCBA@A}@6 @@?=)?>=)>]==)<;<;:;:9
-:9
-878}76 776 6@5454+ 43 32) 210 0/$)/7.!
-.-,-,+ ,,@+ *&*) )@('('&''@&%$)%$!$)#!#"!
-"! !
-!  @!*@-:!}22!)k!)
-!-} -    @ 
- 
- 
-
-@@
-endstream
-endobj
-55 0 obj
-<<
-/Type /FontDescriptor
-/FontName /NGTCAR+DejaVuSerif-Bold
-/Flags 4
-/FontBBox [0 -222 1000 760]
-/Ascent 760
-/CapHeight 729
-/Descent -222
-/ItalicAngle 0
-/StemV 150
-/XHeight 519
-/FontFile2 54 0 R
-/CIDSet 53 0 R
->>
-endobj
-56 0 obj
-<<
-/Length 876
->>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-NGTCAR-DejaVuSerif-Bold-0)
-%%Title: (TeX-NGTCAR-DejaVuSerif-Bold-0 TeX NGTCAR-DejaVuSerif-Bold 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (NGTCAR-DejaVuSerif-Bold)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-NGTCAR-DejaVuSerif-Bold def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-5 beginbfrange
-<0013> <0015> <0030>
-<0030> <0031> <004D>
-<0045> <0048> <0062>
-<004F> <0052> <006C>
-<0055> <0059> <0072>
-endbfrange
-7 beginbfchar
-<000F> <002C>
-<001C> <0039>
-<0029> <0046>
-<0033> <0050>
-<0038> <0055>
-<004B> <0068>
-<00BE> <00FC>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-endstream
-endobj
-19 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/Encoding /Identity-H
-/BaseFont /NGTCAR+DejaVuSerif-Bold
-/DescendantFonts [57 0 R]
-/ToUnicode 56 0 R
->>
-endobj
-57 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType2
-/CIDToGIDMap /Identity
-/BaseFont /NGTCAR+DejaVuSerif-Bold
-/FontDescriptor 55 0 R
-/W 52 0 R
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
->>
-endobj
-58 0 obj
-[ 4 [401.9] 15 [317.9 337.9 317.9] 29 [336.9 336.9] 34 [536.1] 36 [722.2] 38 [765.1] 40 [730] 43 [872.1 395] 47 [664.1 1023.9] 54 [685.1 667 842.8] 58 [1027.8 711.9] 68 [596.2 640.1 560.1 640.1 591.8 370.1 640.1 644 319.8 310.1 606 319.8 948.2 644 602.1 640.1] 85 [478 513.2 401.9 644 564.9 856 564 564.9 526.9] 109 [611.8] 125 [611.8] 1904 [317.9]]
-endobj
-59 0 obj
-<<
-/Length 239
->>
-stream
-*
-endstream
-endobj
-60 0 obj
-<<
-/Length 33290
->>
-stream
-
-
-
-.ohbߢߡߟߞߝߜ*!feeeJeFe@e:e8e6ee e
-eed
-
-/
-4
-=
-E
-L
-M
-O
-P
-R
-
-
-
-
-
-
- 
-!2221
-$$
-
-ob
- 
-ob o
-) ) ) )) )!)"8 9
-: : : 99:: :!9"8#I
-I J I HI I!I"Y
-Y Y Y Y Y!Y"j l
-l l k kl l!l"i#{
-{ { { y{{ {!{"y#7++]
-$ 
-
-M 
-
-  %) $?< 5L FX\ Tm d~ t    
-g f d ehjjhusvuu v
-u w t y||yV]
-bo 
-
-*"<<1
-z
-zqz
-
-
-   
-   ( (
-( &)-**+,)/6 6 6959?F D D DEY X
-X WVVVh f f gegaabef`x x
-x zxxvz
- T]
-21
-
-
-
-= ", , '?=',?(,* '$,&01291
-/ //
- 2 ]>323!534&#"3!534&#"3!53#5!>32%5n`o{`o{h3d|Xuwjj%jj,jjTijp{
-zz
-
-` $,
--
-Z Z Z ZZ Z!Z"X# !"# !"# !"#@++]
-
-]#533!!32673#"&5ݢZ4FHBkJk]LU_
-    >
-
-]@H' Scv  
-%
-*8
-x ]
-
-
->
-
- z
- 
-$,
-(3=
-9DJ
-IW
-^di
-itz
-z
-
-
- 
-  &
-# **%&:
-; 8 8:9F
-F I H HHHHFQ
-T XVSPb
-d fb`u
-q u v vvwwwtw
-x]
- 
-
-      (
- > >M
- 
-* ''&XSUPUPSV
-V hd``dv
--
-- 
-
-Z <21
-  Z
-<<1
-
-
-
- 2 N RRn,l>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
-
-
-DejaVu changes are in public domain
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Bitstream Vera Fonts Copyright
-------------------------------
-
-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:
-
-The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.
-
-The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".
-
-This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.
-
-The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.
-
-%K.%x
-@@%0% @@ 
- 
-o} @ :]%]@%@0d0 ddl~}~2}|{|{zyx
-wv wvuv utltsrqp qp p@o}nm>nkm>lk llk k@jddjihihg]hhgf%g]g@f%eddeddcba`_.`_.^]\K[}ZYDXWVUSdRQ2POP}ONA@BL JdI"IH2GGFE
-EDCDkCBCBA BA@ A @ @@S?>->M=<=K<;
-<<@;
-:9:]98987 654543432
-321 2
-2@1 0/0D/.//.
-..- d-,+,K+"++@*
-*d)(0)A(-(0'-'&:% %]$#$S#"##@"! !]   
-
-@#$0S-0
-k@-B d- 
-  @  
- @8k
- d
-} d2}-2-
-S
-endstream
-endobj
-61 0 obj
-<<
-/Type /FontDescriptor
-/FontName /XRJAAT+DejaVuSerif
-/Flags 4
-/FontBBox [0 -222 1000 760]
-/Ascent 760
-/CapHeight 729
-/Descent -222
-/ItalicAngle 0
-/StemV 86
-/XHeight 519
-/FontFile2 60 0 R
-/CIDSet 59 0 R
->>
-endobj
-62 0 obj
-<<
-/Length 928
->>
-stream
-%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-XRJAAT-DejaVuSerif-0)
-%%Title: (TeX-XRJAAT-DejaVuSerif-0 TeX XRJAAT-DejaVuSerif 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (XRJAAT-DejaVuSerif)
-/Supplement 0
->> def
-/CMapName /TeX-Identity-XRJAAT-DejaVuSerif def
-/CMapType 2 def
-1 begincodespacerange
-<0000> <FFFF>
-endcodespacerange
-8 beginbfrange
-<000F> <0011> <002C>
-<001D> <001E> <003A>
-<002B> <002C> <0048>
-<002F> <0030> <004C>
-<0036> <0038> <0053>
-<003A> <003B> <0057>
-<0044> <0053> <0061>
-<0055> <005D> <0072>
-endbfrange
-8 beginbfchar
-<0004> <0021>
-<0022> <003F>
-<0024> <0041>
-<0026> <0043>
-<0028> <0045>
-<006D> <00AB>
-<007D> <00BB>
-<0770> <2019>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-endstream
-endobj
-18 0 obj
-<<
-/Type /Font
-/Subtype /Type0
-/Encoding /Identity-H
-/BaseFont /XRJAAT+DejaVuSerif
-/DescendantFonts [63 0 R]
-/ToUnicode 62 0 R
->>
-endobj
-63 0 obj
-<<
-/Type /Font
-/Subtype /CIDFontType2
-/CIDToGIDMap /Identity
-/BaseFont /XRJAAT+DejaVuSerif
-/FontDescriptor 61 0 R
-/W 58 0 R
-/CIDSystemInfo <<
-/Registry (Adobe)
-/Ordering (Identity)
-/Supplement 0
->>
->>
-endobj
-20 0 obj
-<<
-/Type /Pages
-
-/Count 4
-/Kids [16 0 R 22 0 R 27 0 R 31 0 R]
->>
-endobj
-64 0 obj
-<<
->>
-endobj
-65 0 obj
-<<
-/Type /Catalog
-/Pages 20 0 R
-/Names 64 0 R
-/Version /1.6 /PageLabels << /Nums [ 0 << /S /D >> ] >> /ViewerPreferences << /FitWindow true >> /PageLayout /TwoColumnRight /PageMode /UseNone /Metadata 33 0 R
->>
-endobj
-66 0 obj
-<<
-/ConTeXt.Url (www.pragma-ade.com) /ConTeXt.Version (2011.11.08 15:20) /ConTeXt.Jobname (t-french) /CreationDate (D:20111109230817+01'00') /Trapped /False /Title <feff0074002d006600720065006e00630068> /ConTeXt.Time (2011.11.09 23:08) /ID (t-french.2011-11-09T23:08:17+01:00) /Producer (LuaTeX-0.70.1) /ModDate (D:20111109230817+01'00') /Creator <feff0043006f006e00540065005800740020002d00200032003000310031002e00310031002e00300038002000310035003a00320030>
-/PTEX.Fullbanner (This is LuaTeX, Version beta-0.70.1-2011051918 (rev 4277) (TeX Live 2011) kpathsea version 6.0.1)
->>
-endobj
-xref
-0 67
-0000000001 65535 f
-0000000002 00000 f
-0000000003 00000 f
-0000000004 00000 f
-0000000005 00000 f
-0000000006 00000 f
-0000000007 00000 f
-0000000008 00000 f
-0000000009 00000 f
-0000000010 00000 f
-0000000011 00000 f
-0000000012 00000 f
-0000000013 00000 f
-0000000014 00000 f
-0000000000 00000 f
-0000285578 00000 n
-0000285371 00000 n
-0000000015 00000 n
-0000422489 00000 n
-0000386894 00000 n
-0000422852 00000 n
-0000286507 00000 n
-0000286299 00000 n
-0000285659 00000 n
-0000364477 00000 n
-0000334870 00000 n
-0000297065 00000 n
-0000296857 00000 n
-0000286588 00000 n
-0000306451 00000 n
-0000302072 00000 n
-0000301864 00000 n
-0000297168 00000 n
-0000302153 00000 n
-0000304476 00000 n
-0000304505 00000 n
-0000304681 00000 n
-0000305521 00000 n
-0000305746 00000 n
-0000306594 00000 n
-0000306785 00000 n
-0000307232 00000 n
-0000307312 00000 n
-0000333642 00000 n
-0000333868 00000 n
-0000335019 00000 n
-0000335239 00000 n
-0000335438 00000 n
-0000335509 00000 n
-0000363372 00000 n
-0000363594 00000 n
-0000364622 00000 n
-0000364838 00000 n
-0000365062 00000 n
-0000365145 00000 n
-0000385731 00000 n
-0000385960 00000 n
-0000387045 00000 n
-0000387267 00000 n
-0000387633 00000 n
-0000387931 00000 n
-0000421280 00000 n
-0000421503 00000 n
-0000422635 00000 n
-0000422933 00000 n
-0000422955 00000 n
-0000423181 00000 n
-trailer
-<< /Size 67
-/Root 65 0 R
-/Info 66 0 R
-/ID [<309E2A7BED36680813C0C7BC399CCD6D> <309E2A7BED36680813C0C7BC399CCD6D>] >>
-startxref
-423774
-%%EOF
diff --git a/macros/context/contrib/context-french/tex/context/third/french/t-french.mkiv b/macros/context/contrib/context-french/tex/context/third/french/t-french.mkiv
deleted file mode 100644
index ce9513a118..0000000000
--- a/macros/context/contrib/context-french/tex/context/third/french/t-french.mkiv
+++ /dev/null
@@ -1,98 +0,0 @@
-%D \module
-%D [ file=t-french,
-%D version=2011.11.09,
-%D title=\CONTEXT\ User Module,
-%D subtitle=For French documents,
-%D author=Peter Münster,
-%D date=\currentdate,
-%D copyright=Peter Münster,
-%D email=pmrb@free.fr,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2011 Peter Münster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but without any warranty; without even the implied warranty of
-%C merchantability or fitness for a particular purpose. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-%D This module tries to do similar things as the frenchb.ldf in \LaTeX:
-%D \startitemize
-%D \item automatic space before » and after «, :, ?, ; and !
-%D \item changing symbol for itemize environment
-%D \stopitemize
-%D
-%D If I remember right, the \LaTeX\ babel package does a much better job at
-%D language switching, but I don't know, how this is possible in \ConTeXt...
-%D
-%D Many thanks to Hans Hagen and Wolfgang Schuster for their help!
-
-\writestatus{loading}{Typesetting French documents}
-
-\startsetups french
- % Todo: This shoud be also active in footnotes, headers and footers,
- % and not active in verbatim text:
- \setcharacterspacing[frenchpunctuation]
- % A question of style:
- \setupitemize[symbol=2]
-\stopsetups
-\startsetups not-french
- \setcharacterspacing[reset]
- \setupitemize[symbol=\currentitemlevel]
-\stopsetups
-\setuplanguage [default] [setups=not-french]
-\setuplanguage [fr] [setups=french]
-\mainlanguage [fr]
-
-\ifx \ieme \undefined \def\ieme {\highordinalstr{e}} \fi
-\ifx \iemes \undefined \def\iemes {\highordinalstr{es}} \fi
-\ifx \ier \undefined \def\ier {\highordinalstr{er}} \fi
-\ifx \iere \undefined \def\iere {\highordinalstr{re}} \fi
-\ifx \iers \undefined \def\iers {\highordinalstr{ers}} \fi
-\ifx \ieres \undefined \def\ieres {\highordinalstr{res}} \fi
-
-\continueifinputfile{t-french.mkiv}
-
-%D Usage example:
-\startbuffer[items]
- \startitemize
- \item test
- \item test
- \startitemize
- \item test
- \item test
- \startitemize
- \item test
- \item test
- \stopitemize
- \stopitemize
- \stopitemize
-\stopbuffer
-
-\usemodule[french]
-
-\starttext
-\startbuffer
- Voilà: Voilà? Voilà! Voilà;
- \start
- \language[en]
- some English text: «English» or \quotation{French}, ok?
- \stop
- «voilà» \quote{voilà} \quotation{voilà}
- \getbuffer[items]
- \start
- \language[en]
- \getbuffer[items]
- \stop
-\stopbuffer
-\typebuffer
-\getbuffer
-\stoptext
diff --git a/macros/context/contrib/context-fullpage/VERSION b/macros/context/contrib/context-fullpage/VERSION
deleted file mode 100644
index 295009c0aa..0000000000
--- a/macros/context/contrib/context-fullpage/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2017.08.27
diff --git a/macros/context/contrib/context-fullpage/doc/context/third/fullpage/README b/macros/context/contrib/context-fullpage/doc/context/third/fullpage/README
deleted file mode 100644
index 418dcdb6dd..0000000000
--- a/macros/context/contrib/context-fullpage/doc/context/third/fullpage/README
+++ /dev/null
@@ -1,24 +0,0 @@
-Modulename : t-fullpage
-Author : Wolfgang Schuster
-License : GNU General Public License
-
-Description
------------
-
-Fullpage is a module for ConTeXt to set equal margins
-in a document without the need for \setuplayout.
-
-Usage
------
-
-\usemodule[fullpage][style={cm,empty}]
-
-\starttext
-\input knuth\par
-\stoptext
-
-Options
--------
-
-- style (cm,in,margin,headings,plain,empty)
-- margin (DIMENSION)
diff --git a/macros/context/contrib/context-fullpage/doc/context/third/fullpage/fullpage-doc.pdf b/macros/context/contrib/context-fullpage/doc/context/third/fullpage/fullpage-doc.pdf
deleted file mode 100644
index 0d3a05bac3..0000000000
--- a/macros/context/contrib/context-fullpage/doc/context/third/fullpage/fullpage-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-fullpage/tex/context/interface/third/t-fullpage.xml b/macros/context/contrib/context-fullpage/tex/context/interface/third/t-fullpage.xml
deleted file mode 100644
index 14fbee5bf3..0000000000
--- a/macros/context/contrib/context-fullpage/tex/context/interface/third/t-fullpage.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2010.12.27">
-
-<cd:command name="setupfullpage" file="t-fullpage.tex">
- <cd:sequence>
- <cd:string value="setupfullpage"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes">
- <cd:parameter name="style" list="yes">
- <cd:constant type="in" default="yes"/>
- <cd:constant type="cm"/>
- <cd:constant type="margin"/>
- <cd:constant type="plain" default="yes"/>
- <cd:constant type="headings"/>
- <cd:constant type="empty"/>
- <cd:constant type="none"/>
- </cd:parameter>
- <cd:parameter name="margin">
- <cd:constant type="cd:dimension" default="0pt"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-</cd:interface> \ No newline at end of file
diff --git a/macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkii b/macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkii
deleted file mode 100644
index ab87124cb6..0000000000
--- a/macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkii
+++ /dev/null
@@ -1,321 +0,0 @@
-%D \module
-%D [ file=t-fullpage,
-%D version=2011.01.26,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Fullpage documents,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2010 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-%M \loadsetups[t-fullpage.xml]
-
-%D \subject{Introduction}
-%D
-%D The \filename {fullpage} module is a port of the \LATEX\ package
-%D with the same name. The module was written after Mohammed Bana
-%D asked on the \CONTEXT\ mailing list if a module with the same
-%D function as the \LATEX\ package is available for \CONTEXT.
-%D
-%D The purpose of the module is to easily change the margins of
-%D all four margins of the page to the same value without the need
-%D of \type {\setuplayout} in the document.
-%D
-%D \subject{Usage}
-%D
-%D To use the module you have to load it with the \type {\usemodule}
-%D command. Parameters for the module can be either set with the
-%D \type {\setupfullpage} command or as argument to \type {\usemodule}
-%D when you load the module for your document.
-%D
-%D A example how to use the module is:
-%D
-%D \starttyping
-%D \usemodule[fullpage][style={cm,empty}]
-%D
-%D \starttext
-%D \input knuth
-%D \stoptext
-%D \stoptyping
-%D
-%D You can give for \type {\usemodule} the same argument as you can
-%D give to \type {\setupfullpage}, which has the following sytnax:
-%D
-%D \showsetup{setupfullpage}
-%D
-%D The meaning of the values for the “style” key is:
-%D
-%D \starttable[|Bl|l|]
-%D \HL
-%D \NC in \NC set the margins to 1in \NC\AR
-%D \NC cm \NC set the margins to 1.5cm \NC\AR
-%D \NC margin \NC set the margins to the “margin” value \NC\AR
-%D \NC plain \NC no header and narrow footer with 0.5cm \NC\AR
-%D \NC headings \NC narrow header and footer with 0.5cm \NC\AR
-%D \NC empty \NC no header and footer \NC\AR
-%D \HL
-%D \stoptable
-%D
-%D The “margin” value is only usefull when you use also the margin key
-%D which expects a dimension as argument because it’s default value is
-%D 0pt which result otherwise in no margins at all. You can see the
-%D result of all combinations of the style argument \at{at page}[sec:examples],
-%D the examples for the margin argument use a value of 4cm for the margin key.
-%D
-%D \subject[sec:examples]{Examples}
-%D
-%D \startbuffer[none]
-%D \usemodule[fullpage][style=none]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[headings]
-%D \usemodule[fullpage][style=headings]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[plain]
-%D \usemodule[fullpage][style=plain]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[empty]
-%D \usemodule[fullpage][style=empty]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in]
-%D \usemodule[fullpage][style={in}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in+headings]
-%D \usemodule[fullpage][style={in,headings}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in+plain]
-%D \usemodule[fullpage][style={in,plain}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in+empty]
-%D \usemodule[fullpage][style={in,empty}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm]
-%D \usemodule[fullpage][style={cm}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm+headings]
-%D \usemodule[fullpage][style={cm,headings}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm+plain]
-%D \usemodule[fullpage][style={cm,plain}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm+empty]
-%D \usemodule[fullpage][style={cm,empty}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin]
-%D \usemodule[fullpage][style={margin},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin+headings]
-%D \usemodule[fullpage][style={margin,headings},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin+plain]
-%D \usemodule[fullpage][style={margin,plain},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin+empty]
-%D \usemodule[fullpage][style={margin,empty},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startcombination[4*4]
-%D {\typesetbuffer[none] [frame=on,width=.2\textwidth]}{none}
-%D {\typesetbuffer[headings] [frame=on,width=.2\textwidth]}{headings}
-%D {\typesetbuffer[plain] [frame=on,width=.2\textwidth]}{plain}
-%D {\typesetbuffer[empty] [frame=on,width=.2\textwidth]}{empty}
-%D {\typesetbuffer[in] [frame=on,width=.2\textwidth]}{in}
-%D {\typesetbuffer[in+headings] [frame=on,width=.2\textwidth]}{in + headings}
-%D {\typesetbuffer[in+plain] [frame=on,width=.2\textwidth]}{in + plain}
-%D {\typesetbuffer[in+empty] [frame=on,width=.2\textwidth]}{in + empty}
-%D {\typesetbuffer[cm] [frame=on,width=.2\textwidth]}{cm}
-%D {\typesetbuffer[cm+headings] [frame=on,width=.2\textwidth]}{cm + headings}
-%D {\typesetbuffer[cm+plain] [frame=on,width=.2\textwidth]}{cm + plain}
-%D {\typesetbuffer[cm+empty] [frame=on,width=.2\textwidth]}{cm + empty}
-%D {\typesetbuffer[margin] [frame=on,width=.2\textwidth]}{margin}
-%D {\typesetbuffer[margin+headings][frame=on,width=.2\textwidth]}{margin + headings}
-%D {\typesetbuffer[margin+plain] [frame=on,width=.2\textwidth]}{margin + plain}
-%D {\typesetbuffer[margin+empty] [frame=on,width=.2\textwidth]}{margin + empty}
-%D \stopcombination
-
-\writestatus{loading}{ConTeXt User Module / Fullpage}
-
-\unprotect
-
-\startmodule[fullpage]
-
-\startinterface all
- \setinterfacevariable {fullpage} {fullpage}
- \setinterfacevariable {in} {in}
- \setinterfacevariable {cm} {cm}
- \setinterfacevariable {plain} {plain}
- \setinterfacevariable {headings} {headings}
-\stopinterface
-
-\def\????fullpage{@@@@fullpage} % FullPage
-
-\def\fullpageparameter#1%
- {\csname\????fullpage#1\endcsname}
-
-\setupmodule
- [ \c!style={\v!in,\v!plain},
- \c!margin=0pt]
-
-\startsetups[\v!fullpage:\v!in]
-
- \setuplayout
- [\c!backspace=1in,
- \c!width=\v!middle,
- \c!topspace=1in,
- \c!height=\v!middle]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!cm]
-
- \setuplayout
- [\c!backspace=15mm,
- \c!width=\v!middle,
- \c!topspace=15mm,
- \c!height=\v!middle]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!margin]
-
- \setuplayout
- [\c!backspace=\fullpageparameter\c!margin,
- \c!width=\v!middle,
- \c!topspace=\fullpageparameter\c!margin,
- \c!height=\v!middle]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!plain]
-
- \setuplayout
- [\c!header=0pt,
- \c!footer=.5in]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!empty]
-
- \setuplayout
- [\c!header=0pt,
- \c!footer=0pt]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!headings]
-
- \setuplayout
- [\c!header=.5in,
- \c!footer=.5in]
-
-\stopsetups
-
-\unexpanded\def\setupfullpage
- {\dosingleargument\dosetupfullpage}
-
-\def\dosetupfullpage[#1]%
- {\getparameters[\????fullpage][#1]%
- \def\dodosetupfullpage##1{\setup[\v!fullpage:##1]}%
- \processcommacommand[\fullpageparameter\c!style]\dodosetupfullpage}
-
-\normalexpanded{\setupfullpage
- [ \c!style={\currentmoduleparameter\c!style},
- \c!margin={\currentmoduleparameter\c!margin}]}
-
-\stopmodule
-
-\protect \endinput
diff --git a/macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkiv b/macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkiv
deleted file mode 100644
index 6c0b361b66..0000000000
--- a/macros/context/contrib/context-fullpage/tex/context/third/fullpage/t-fullpage.mkiv
+++ /dev/null
@@ -1,325 +0,0 @@
-%D \module
-%D [ file=t-fullpage,
-%D version=2011.01.26,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Fullpage documents,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2010 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-%M \loadsetups[t-fullpage.xml]
-
-%D \subject{Introduction}
-%D
-%D The \filename {fullpage} module is a port of the \LATEX\ package
-%D with the same name. The module was written after Mohammed Bana
-%D asked on the \CONTEXT\ mailing list if a module with the same
-%D function as the \LATEX\ package is available for \CONTEXT.
-%D
-%D The purpose of the module is to easily change the margins of
-%D all four margins of the page to the same value without the need
-%D of \type {\setuplayout} in the document.
-%D
-%D \subject{Usage}
-%D
-%D To use the module you have to load it with the \type {\usemodule}
-%D command. Parameters for the module can be either set with the
-%D \type {\setupfullpage} command or as argument to \type {\usemodule}
-%D when you load the module for your document.
-%D
-%D A example how to use the module is:
-%D
-%D \starttyping
-%D \usemodule[fullpage][style={cm,empty}]
-%D
-%D \starttext
-%D \input knuth
-%D \stoptext
-%D \stoptyping
-%D
-%D You can give for \type {\usemodule} the same argument as you can
-%D give to \type {\setupfullpage}, which has the following sytnax:
-%D
-%D \showsetup{setupfullpage}
-%D
-%D The meaning of the values for the “style” key is:
-%D
-%D \starttable[|Bl|l|]
-%D \HL
-%D \NC in \NC set the margins to 1in \NC\AR
-%D \NC cm \NC set the margins to 1.5cm \NC\AR
-%D \NC margin \NC set the margins to the “margin” value \NC\AR
-%D \NC plain \NC no header and narrow footer with 0.5cm \NC\AR
-%D \NC headings \NC narrow header and footer with 0.5cm \NC\AR
-%D \NC empty \NC no header and footer \NC\AR
-%D \HL
-%D \stoptable
-%D
-%D The “margin” value is only usefull when you use also the margin key
-%D which expects a dimension as argument because it’s default value is
-%D 0pt which result otherwise in no margins at all. You can see the
-%D result of all combinations of the style argument \at{at page}[sec:examples],
-%D the examples for the margin argument use a value of 4cm for the margin key.
-%D
-%D \subject[sec:examples]{Examples}
-%D
-%D \startbuffer[none]
-%D \usemodule[fullpage][style=none]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[headings]
-%D \usemodule[fullpage][style=headings]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[plain]
-%D \usemodule[fullpage][style=plain]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[empty]
-%D \usemodule[fullpage][style=empty]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in]
-%D \usemodule[fullpage][style={in}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in+headings]
-%D \usemodule[fullpage][style={in,headings}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in+plain]
-%D \usemodule[fullpage][style={in,plain}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[in+empty]
-%D \usemodule[fullpage][style={in,empty}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm]
-%D \usemodule[fullpage][style={cm}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm+headings]
-%D \usemodule[fullpage][style={cm,headings}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm+plain]
-%D \usemodule[fullpage][style={cm,plain}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[cm+empty]
-%D \usemodule[fullpage][style={cm,empty}]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{8}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin]
-%D \usemodule[fullpage][style={margin},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin+headings]
-%D \usemodule[fullpage][style={margin,headings},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin+plain]
-%D \usemodule[fullpage][style={margin,plain},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startbuffer[margin+empty]
-%D \usemodule[fullpage][style={margin,empty},margin=4cm]
-%D \showframe[text]
-%D \starttext
-%D \dorecurse{4}{\input knuth\par}
-%D \stoptext
-%D \stopbuffer
-%D
-%D \startcombination[4*4]
-%D {\typesetbuffer[none] [frame=on,width=.2\textwidth]}{none}
-%D {\typesetbuffer[headings] [frame=on,width=.2\textwidth]}{headings}
-%D {\typesetbuffer[plain] [frame=on,width=.2\textwidth]}{plain}
-%D {\typesetbuffer[empty] [frame=on,width=.2\textwidth]}{empty}
-%D {\typesetbuffer[in] [frame=on,width=.2\textwidth]}{in}
-%D {\typesetbuffer[in+headings] [frame=on,width=.2\textwidth]}{in + headings}
-%D {\typesetbuffer[in+plain] [frame=on,width=.2\textwidth]}{in + plain}
-%D {\typesetbuffer[in+empty] [frame=on,width=.2\textwidth]}{in + empty}
-%D {\typesetbuffer[cm] [frame=on,width=.2\textwidth]}{cm}
-%D {\typesetbuffer[cm+headings] [frame=on,width=.2\textwidth]}{cm + headings}
-%D {\typesetbuffer[cm+plain] [frame=on,width=.2\textwidth]}{cm + plain}
-%D {\typesetbuffer[cm+empty] [frame=on,width=.2\textwidth]}{cm + empty}
-%D {\typesetbuffer[margin] [frame=on,width=.2\textwidth]}{margin}
-%D {\typesetbuffer[margin+headings][frame=on,width=.2\textwidth]}{margin + headings}
-%D {\typesetbuffer[margin+plain] [frame=on,width=.2\textwidth]}{margin + plain}
-%D {\typesetbuffer[margin+empty] [frame=on,width=.2\textwidth]}{margin + empty}
-%D \stopcombination
-
-\writestatus{loading}{ConTeXt User Module / Fullpage}
-
-\unprotect
-
-\startmodule[fullpage]
-
-\startinterface all
- \setinterfacevariable {fullpage} {fullpage}
- \setinterfacevariable {in} {in}
- \setinterfacevariable {cm} {cm}
- \setinterfacevariable {plain} {plain}
- \setinterfacevariable {headings} {headings}
-\stopinterface
-
-\definenamespace
- [fullpage]
- [ type=module,
- comment=Fullpage,
- version=2011.01.26,
- name=fullpage,
- style=no,
- command=yes,
- setup=yes,
- \s!parent=fullpage]
-
-\appendtoks
- \startprocesscommacommand[\fullpageparameter\c!style]%
- \setup[\v!fullpage:\currentcommalistitem]%
- \stopprocesscommacommand
-\to \everysetupfullpage
-
-\setupmodule
- [ \c!style={\v!in,\v!plain},
- \c!margin=0pt]
-
-\startsetups[\v!fullpage:\v!in]
-
- \setuplayout
- [\c!backspace=1in,
- \c!width=\v!middle,
- \c!topspace=1in,
- \c!height=\v!middle]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!cm]
-
- \setuplayout
- [\c!backspace=15mm,
- \c!width=\v!middle,
- \c!topspace=15mm,
- \c!height=\v!middle]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!margin]
-
- \setuplayout
- [\c!backspace=\fullpageparameter\c!margin,
- \c!width=\v!middle,
- \c!topspace=\fullpageparameter\c!margin,
- \c!height=\v!middle]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!plain]
-
- \setuplayout
- [\c!header=0pt,
- \c!footer=.5in]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!empty]
-
- \setuplayout
- [\c!header=0pt,
- \c!footer=0pt]
-
-\stopsetups
-
-\startsetups[\v!fullpage:\v!headings]
-
- \setuplayout
- [\c!header=.5in,
- \c!footer=.5in]
-
-\stopsetups
-
-\normalexpanded{\setupfullpage
- [ \c!style={\currentmoduleparameter\c!style},
- \c!margin={\currentmoduleparameter\c!margin}]}
-
-\stopmodule
-
-\protect \endinput
diff --git a/macros/context/contrib/context-gantt/VERSION b/macros/context/contrib/context-gantt/VERSION
deleted file mode 100644
index 6c420a3978..0000000000
--- a/macros/context/contrib/context-gantt/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2012.08.19
diff --git a/macros/context/contrib/context-gantt/doc/context/third/gantt/README b/macros/context/contrib/context-gantt/doc/context/third/gantt/README
deleted file mode 100644
index dda1088fcf..0000000000
--- a/macros/context/contrib/context-gantt/doc/context/third/gantt/README
+++ /dev/null
@@ -1,22 +0,0 @@
-Modulename : t-gantt
-Author : Adam Reviczky
-License : Public Domain
-
-Description
------------
-
-Drawing Gantt charts.
-
-Usage
------
-
-\usemodule[gantt]
-
-\starttext
-… \startgantt … \stopgantt …
-\stoptext
-
-Options
--------
-
-- alternative
diff --git a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-1.tex b/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-1.tex
deleted file mode 100644
index 51c16058df..0000000000
--- a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-1.tex
+++ /dev/null
@@ -1,19 +0,0 @@
-\usemodule[gantt]
-%\usemodule[gantt][alternative=mp]
-%\usemodule[gantt][alternative=tikz]
-\setuppagenumbering[location=]
-
-\starttext
- \startgantt{7}{12}
- \startganttitle
- \numtitle{1}{1}{12}{1}
- \stopganttitle
- \ganttbar{a task}{0}{2}
- \ganttbarcon{a consecutive task}{2}{4}
- \ganttbarcon{another consecutive task}{8}{2}
- \ganttbar{another task}{2}{2}
- \ganttbar{another task}{4}{2}
- \ganttbar{another task}{4}{2}
- \ganttcon{4}{4}{4}{6}
- \stopgantt
-\stoptext
diff --git a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-2.tex b/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-2.tex
deleted file mode 100644
index a9c6a2765c..0000000000
--- a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-2.tex
+++ /dev/null
@@ -1,25 +0,0 @@
-\usemodule[gantt]
-%\usemodule[gantt][alternative=mp]
-%\usemodule[gantt][alternative=tikz]
-\setuppagenumbering[location=]
-
-\starttext
- \startgantt{3}{12}
- \startganttitle
- \titleelement{Jan}{1}
- \titleelement{Feb}{1}
- \titleelement{Mar}{1}
- \titleelement{Apr}{1}
- \titleelement{May}{1}
- \titleelement{Jun}{1}
- \titleelement{Jul}{1}
- \titleelement{Aug}{1}
- \titleelement{Sep}{1}
- \titleelement{Oct}{1}
- \titleelement{Nov}{1}
- \titleelement{Dec}{1}
- \stopganttitle
- \ganttbar{Task 1}{0}{2}
- \ganttbarcon{a consecutive task}{2}{4}
- \stopgantt
-\stoptext
diff --git a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-3.tex b/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-3.tex
deleted file mode 100644
index b8042af5b5..0000000000
--- a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-3.tex
+++ /dev/null
@@ -1,19 +0,0 @@
-\usemodule[gantt]
-%\usemodule[gantt][alternative=mp]
-%\usemodule[gantt][alternative=tikz]
-\setuppagenumbering[location=]
-
-\starttext
- \startgantt{4}{12}
- \startganttitle
- \numtitle{2010}{1}{2012}{4}
- \stopganttitle
- \startganttitle
- \numtitle{1}{1}{4}{1}
- \numtitle{1}{1}{4}{1}
- \numtitle{1}{1}{4}{1}
- \stopganttitle
- \ganttbar{Task 1}{0}{2}
- \ganttbarcon{a consecutive task}{2}{4}
- \stopgantt
-\stoptext
diff --git a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-4.tex b/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-4.tex
deleted file mode 100644
index 440e1bff33..0000000000
--- a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-4.tex
+++ /dev/null
@@ -1,22 +0,0 @@
-\usemodule[gantt]
-%\usemodule[gantt][alternative=mp]
-%\usemodule[gantt][alternative=tikz]
-\setuppagenumbering[location=]
-
-\starttext
- \startgantt{10}{12}
- \startganttitle
- \numtitle{1}{1}{12}{1}
- \stopganttitle
- \ganttbar{a task}{0}{2}
- \ganttbarcon{a consecutive task}{2}{4}
- \ganttbarcon{another consecutive task}{8}{2}
- \ganttmilestone[color=darkcyan]{Milestone with color!}{4}
- \ganttbar{another task}{2}{2}
- \ganttbar[color=cyan]{another coloured task}{4}{4}
- \ganttbar{another task}{4}{2}
- \ganttcon{4}{5}{4}{7}
- \ganttmilestonecon{A connected Milestone}{7}
- \ganttbarcon{another consecutive task}{8}{2}
- \stopgantt
-\stoptext
diff --git a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-5.tex b/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-5.tex
deleted file mode 100644
index a454ece64a..0000000000
--- a/macros/context/contrib/context-gantt/doc/context/third/gantt/examples/gantt-5.tex
+++ /dev/null
@@ -1,32 +0,0 @@
-\usemodule[gantt]
-%\usemodule[gantt][alternative=mp]
-%\usemodule[gantt][alternative=tikz]
-\setuppapersize[A4,landscape][A4,landscape]
-\setuplayout[scale=0.8]
-\setuppagenumbering[location=]
-
-\starttext
- \startgantt[xunitlength=0.5cm,style=\tfx,titlestyle=\tfx,drawledgerline=true]{10}{48}
- \startganttitle
- \titleelement{2009}{7}
- \numtitle{2010}{1}{2012}{12}
- \titleelement{2013}{5}
- \stopganttitle
- \startganttitle
- \numtitle{6}{1}{12}{1}
- \numtitle{1}{1}{12}{1}
- \numtitle{1}{1}{12}{1}
- \numtitle{1}{1}{12}{1}
- \numtitle{1}{1}{5}{1}
- \stopganttitle
- \ganttbar{task 1}{2}{17}
- \ganttgroup{a group of tasks}{6}{18}
- \ganttbar{task 2}{5}{10}
- \ganttbar[color=blue]{task 3}{15}{3}
- \ganttbar{task 4}{20}{3}
- \ganttcon{15}{4}{20}{6}
- \ganttbar{task 5}{15}{5}
- \ganttbarcon[color=red]{task 6}{20}{5}
- \ganttbarcon{task 7}{30}{5}
- \stopgantt
-\stoptext
diff --git a/macros/context/contrib/context-gantt/doc/context/third/gantt/gantt.txt b/macros/context/contrib/context-gantt/doc/context/third/gantt/gantt.txt
deleted file mode 100644
index ff897767a8..0000000000
--- a/macros/context/contrib/context-gantt/doc/context/third/gantt/gantt.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-Gantt is a (third party) ConTeXt module for drawing Gantt charts via MetaPost or PGF/TikZ.
-
-== Description ==
-To switch between the two drawing engines (MetaPost and TikZ) use the style option.
-\usemodule[gantt][alternative=mp]
-\usemodule[gantt][alternative=tikz]
-The default engine is MetaPost.
-
-Here is a short description of the environments and commands:
-
-=== Gantt ===
-The gantt environment draws the canvas of a gantt figure.
-\startgantt[…]{no of Tasks to plot}{no of time slots}
-The optional argument […] can be filled in a key=value syntax, using one or more of the following keys:
-* factor - MetaPost scale factor (default: 1)
-* xunitlength - length of one time slot (default: 1cm)
-* style - fontsize of labels (default: \tf)
-* titlestyle - fontsize of title section (default: \tfx)
-* drawledgerline - switch to enable/disable the drawing of horizontal ledger lines (default value: false)
-
-=== Ganttitle ===
-This is the environment for drawing the title section.
-\startganttitle (…) \stopganttitle
-
-=== Titleelement ===
-This draws one element of the title.
-\titleelement{label}{length}
-
-=== Numtitle ===
-This draws a numbered sequence of title elements.
-\numtitle{start number}{increment}{end number}{length of each title element}
-
-=== Ganttbar ===
-This draws a single, unconnected bar for representing a task.
-\ganttbar[pattern=value,color=value]{label}{start}{length}
-The optional comma separated arguments are:
-* <pattern> - is a TikZ pattern (e.g. north east lines (default), north west lines, crosshatch, crosshatch dots, grid, …)
-* <color> - a color of the pattern (e.g. black (default), red, green blue gray, dark gray)
-
-=== Ganttcon ===
-This draws an arrow between the bars specified by coordinates.
-\ganttcon{startx}{starty}{endx}{endy}
-
-=== Ganttbarcon ===
-This draws a single bar and connects the bar with the previous bar for consecutive tasks.
-\ganttbarcon[pattern=value,color=value]{label}{start}{length}
-The optional pattern argument are the same as for \ganttbar.
-
-=== Ganttgroup ===
-This draws a bar to group tasks.
-\ganttgroup{label}{start}{length}
-
-=== Ganttmilestone ===
-This draws a milestone using a diamond.
-\ganttmilestone[color=value]{label}{start}
-The optional color argument argument is:
-* <color> - a color of the pattern (e.g. black (default), red, green blue gray, dark gray)
-
-=== Ganttmilestonecon ===
-This draws a milestone using a diamond and connects the milestone with the previous bar or milestone.
-\ganttmilestonecon[color=value]{label}{start}
-The optional color argument argument is:
-* <color> - a color of the pattern (e.g. black (default), red, green blue gray, dark gray)
diff --git a/macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-mp.tex b/macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-mp.tex
deleted file mode 100644
index a8a310cf21..0000000000
--- a/macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-mp.tex
+++ /dev/null
@@ -1,369 +0,0 @@
-%D \module
-%D [ file=t-gantt,
-%D version=2012.08.19,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Drawing Gantt charts,
-%D author={Adam Reviczky and Aditya Mahajan},
-%D date=\currentdate,
-%D copyright={Adam Reviczky and Aditya Mahajan},
-%D license=Public Domain]
-
-%D Some macros for drawing Gantt charts using MetaPost.
-
-\writestatus{loading}{ConTeXt User Module / metapost gantt chart}
-
-\startmodule[gantt-s-mp]
-\unprotect
-
-\def\????gantt{@@@@gantt}
-
-\definesystemvariable{gantt}
-
-\startMPinclusions
- % temporary solution for a pattern substitute
- input hatching;
-\stopMPinclusions
-
-\newcount\ganttnum
-\newcount\gantttitlenum
-\newcount\ganttwidth
-
-\newdimen\ganttlastx \ganttlastx = 0cm
-\newdimen\nextganttlastx
-\newdimen\titleunitlength \titleunitlength = 1cm
-\newdimen\ganttunitlength \ganttunitlength = 1cm
-
-\newdimen\gantttmpa
-\newdimen\gantttmpb
-
-% workaround for titleelement
-\def\!!row{\numexpr\ganttnum-1\relax}
-
-\unexpanded\def\setupgantt
- {\bgroup
- \dosingleempty
- \dosetupgantt}
-
-\unexpanded\def\dosetupgantt[#1]%
- {\egroup
- \getparameters[\????gantt][#1]}
-
-\setupgantt
- [factor=1,
- xunitlength=1cm,
- style=\tf,
- titlestyle=\tfx,
- drawledgerline=false]
-
-\unexpanded\def\setupganttbar
- {\bgroup
- \dosingleempty
- \dosetupganttbar}
-
-\unexpanded\def\dosetupganttbar[#1]%
- {\egroup
- \getparameters[\????gantt][#1]}
-
-\setupganttbar
- [pattern=north east lines,
- color=black]
-
-% The gantt environment draws the canvas of a gantt figure (realized as tikzpicture)
-% The usage is \startgantt[...]{no of Tasks to plot}{no of time slots}
-% The optional argument [...] can be filled in a key=value syntax, using one or more of the following keys:
-%
-% xunitlength - length of one time slot (default: 1cm)
-% style - style of labels (default: \tf)
-% titlestyle - style of title section (default: \tfx)
-% drawledgerline - Switch to enable/disable the drawing of horizontal ledger lines (default value: false)
-\unexpanded\long\def\dostartgantt[#1]#2#3%
- {\getparameters[\????gantt][#1]%
- \gdef\gantt!factor{\@@@@ganttfactor}
- \gdef\gantt!ganttunitlength{\@@@@ganttxunitlength}
- \gdef\gantt!style{\getvalue{@@@@ganttstyle}}
- \gdef\gantt!titlestyle{\getvalue{@@@@gantttitlestyle}}
- \gdef\gantt!drawledgerline{\@@@@ganttdrawledgerline}
-
- \bgroup
- \newcount\ganttx \ganttx=0
- \newcount\ganttheight
-
- \def\ganttxstringtop{}
- \def\ganttxstringbottom{}
-
- \global\ganttwidth=#3
- \global\ganttnum=0
-
- \ganttheight=#2
- \advance\ganttheight by 1
-
- \startMPdrawing
- linecap := squared;
- linejoin := mitered;
-
- draw (0,0.5cm)--(0,1.4cm-\the\ganttheight*cm);
- draw (\the\ganttwidth*\gantt!ganttunitlength,0.5cm)--(\the\ganttwidth*\gantt!ganttunitlength,1.4cm-\the\ganttheight*cm);
- % draw x axis
- draw (0cm,-#2*cm+0.4cm)--(\the\ganttwidth*\gantt!ganttunitlength,-#2*cm+0.4cm);
-
- % draw grid
- for t=1 upto \the\ganttwidth:
- draw (\gantt!ganttunitlength*t,-0.5cm)--(\gantt!ganttunitlength*t,1.4cm-\the\ganttheight*cm) dashed withdots;
- endfor
- \stopMPdrawing
- \egroup
- }
-
-\unexpanded\def\startgantt%
- {\dosingleempty\dostartgantt}
-
-\unexpanded\def\stopgantt%
- {\startMPdrawing
- % debug
- % draw bbox currentpicture withcolor .625red;
- currentpicture := currentpicture scaled \gantt!factor;
- \stopMPdrawing
- \MPdrawingdonetrue\getMPdrawing
- \resetMPdrawing
- \doglobal\ganttnum=0
- }
-
-% ganttitle is the environment for drawing the title section
-\definestartstop[ganttitle][
- before={
- \ganttlastx = 0cm
- \doglobal\advance\ganttnum by 1
- },
- after={
- \ganttlastx = 0cm
- }
- ]
-
-% \titleelement draws one element of the title
-% usage: \titleelement{label}{length}
-\unexpanded\long\def\dotitleelement#1#2%
- {\gantttmpa=\dimexpr\gantt!ganttunitlength*#2\relax
- \divide\gantttmpa by 2
-
- \startMPdrawing
- draw (\the\ganttlastx,0.5cm-\the\!!row*cm)--(\the\ganttlastx+#2*\gantt!ganttunitlength,0.5cm-\the\!!row*cm)--(\the\ganttlastx+#2*\gantt!ganttunitlength,0.5cm-0.6cm-\the\!!row*cm)--(\the\ganttlastx,0.5cm-0.6cm-\the\!!row*cm)--cycle;
- path diam; diam = (\the\ganttlastx,0.5cm-\the\!!row*cm)--(\the\ganttlastx+#2*\gantt!ganttunitlength,0.5cm-0.6cm-\the\!!row*cm);
- label (textext("\getvalue{gantt!titlestyle}{#1}"), center diam);
- \stopMPdrawing
-
- \ganttlastx=\dimexpr\ganttlastx+\gantt!ganttunitlength*#2\relax
- }
-
-\unexpanded\def\titleelement%
- {\dotitleelement}
-
-% \numtitle draws a numbered sequence of title elements
-% usage: \numtitle{start number}{increment}{end number}{length of each title element}
-\unexpanded\long\def\donumtitle#1#2#3#4%
- {\gantttitlenum=#1
- \dostepwiserecurse{#1}{#3}{#2}{
- \titleelement{\the\gantttitlenum}{#4}
- \advance\gantttitlenum by #2
- }
- }
-
-\unexpanded\def\numtitle%
- {\donumtitle}
-
-% \ganttbar draws a single, unconnected bar for representing a task
-% usage: \ganttbar[pattern=<pattern>,color=<color>]{label}{start}{length}
-% where the optional comma separated arguments are:
-% pattern - not implemented with MetaPost yet! (FIXME)
-% color - a color of the pattern (e.g. red, green blue gray, dark gray)
-\unexpanded\long\def\doganttbar[#1]#2#3#4%
- {\bgroup
- \getparameters[\????gantt][#1]%
- \edef\gantt!pattern{\@@@@ganttpattern}
- \edef\gantt!color{\@@@@ganttcolor}
-
- \gantttmpa=\dimexpr\gantt!ganttunitlength*#3\relax
- \gantttmpb=\dimexpr\gantt!ganttunitlength*#4+\gantttmpa\relax
-
- \doif{\gantt!drawledgerline}{true}{
- \startMPdrawing
- draw (0,-\the\ganttnum*cm-0.2cm)--(\the\ganttwidth*\gantt!ganttunitlength,-\the\ganttnum*cm-0.2cm) dashed withdots;
- \stopMPdrawing
- }
- \startMPdrawing
- path diag; diag = (0,-\the\ganttnum*cm+0.1cm)--(0,-\the\ganttnum*cm+0.5cm);
- label.lft (textext("\getvalue{gantt!style}{#2}"), center diag);
- path f; f := (\the\gantttmpa,-\the\ganttnum*cm+0.1cm)--(\the\gantttmpb,-\the\ganttnum*cm+0.1cm)--(\the\gantttmpb,-\the\ganttnum*cm+0.5cm)--(\the\gantttmpa,-\the\ganttnum*cm+0.5cm)--cycle;
-
- hatchoptions(withcolor \gantt!color);
- draw f withcolor black;
- % workaround for transparent bug
- % hatchfill f withcolor transparent("normal",0,white) withcolor (45,1mm,-0.5bp);
- hatchfill f withcolor (45,1mm,-0.5bp);
- \stopMPdrawing
-
- \global\ganttlastx=\gantttmpb
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttbar
- {\dosingleempty\doganttbar}
-
-% \ganttcon draws an arrow between to bars with specified coordinates
-% usage: \ganttcon{startx}{starty}{endx}{endy}
-\unexpanded\long\def\doganttcon#1#2#3#4%
- {\bgroup
- \startMPdrawing
- begingroup;
- interim linecap := squared;
- interim linejoin := rounded;
-
- drawarrow (#1*\gantt!ganttunitlength,-#2*cm+0.1cm+0.2cm)--(#1*\gantt!ganttunitlength+0.4*\gantt!ganttunitlength,-#2*cm+0.1*cm+0.2*cm)--(#1*\gantt!ganttunitlength+0.4*\gantt!ganttunitlength,-#2*cm-0.4*cm+0.2*cm)--(#1*\gantt!ganttunitlength-0.4*\gantt!ganttunitlength,-#2*cm-0.4*cm+0.2*cm)--(#1*\gantt!ganttunitlength-0.4*\gantt!ganttunitlength,-#4*cm+0.1*cm+0.2*cm)--(#3*\gantt!ganttunitlength,-#4*cm+0.1*cm+0.2*cm);
- endgroup;
- \stopMPdrawing
- \egroup
- }
-
-\unexpanded\def\ganttcon
- {\doganttcon}
-
-% \ganttbarcon draws a single bar *and* connects the bar with the previous bar for
-% consecutive tasks
-% usage: \ganttbarcon[pattern=<pattern>,color=<color>]{label}{start}{length}
-% where the optional pattern argument are the same as for \ganttbar
-\unexpanded\long\def\doganttbarcon[#1]#2#3#4%
- {\bgroup
- \getparameters[\????gantt][#1]%
- \edef\gantt!pattern{\@@@@ganttpattern}
- \edef\gantt!color{\@@@@ganttcolor}
-
- \nextganttlastx = \dimexpr\ganttlastx+\ganttunitlength*1\relax
- \ifdim\nextganttlastx>\dimexpr\gantt!ganttunitlength*#3\relax
- \startMPdrawing
- begingroup;
- interim linecap := squared;
- interim linejoin := rounded;
-
- drawarrow (\the\ganttlastx,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+0.6*cm+0.2*cm)--(\the\ganttlastx-0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+0.6*cm+0.2*cm)--(\the\ganttlastx-0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+0.1*cm+0.2*cm)--(#3*\gantt!ganttunitlength,-\the\ganttnum*cm+0.1*cm+0.2*cm);
- endgroup;
- \stopMPdrawing
- \else
- \startMPdrawing
- begingroup;
- interim linecap := squared;
- interim linejoin := rounded;
-
- drawarrow (\the\ganttlastx,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+0.1*cm+0.2*cm)--(#3*\gantt!ganttunitlength,-\the\ganttnum*cm+0.1*cm+0.2*cm);
- endgroup;
- \stopMPdrawing
- \fi
-
- \ganttbar[#1]{#2}{#3}{#4}
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttbarcon
- {\dosingleempty\doganttbarcon}
-
-% \ganttgroup draws a bar to group tasks
-% usage: \ganttgroup{label}{start}{length}
-\unexpanded\long\def\doganttgroup#1#2#3%
- {\bgroup
- \gantttmpa=\dimexpr\gantt!ganttunitlength*#2\relax
- \gantttmpb=\dimexpr\gantt!ganttunitlength*#3+\gantttmpa\relax
-
- \doif{\gantt!drawledgerline}{true}{
- \startMPdrawing
- draw (0,-\the\ganttnum*cm-0.2cm)--(\the\ganttwidth*\gantt!ganttunitlength,-\the\ganttnum*cm-0.2cm) dashed withdots;
- \stopMPdrawing
- }
- \startMPdrawing
- pen diamond; diamond := makepen fulldiamond;
- path diag; diag = (0,-\the\ganttnum*cm+0.1cm)--(0,-\the\ganttnum*cm+0.5cm);
- label.lft (textext("\getvalue{gantt!style}{\bf #1}"), center diag);
- fill (\the\gantttmpa-0.14*cm,-\the\ganttnum*cm+0.2cm)--(\the\gantttmpb+0.14*cm,-\the\ganttnum*cm+0.2cm)--(\the\gantttmpb+0.14*cm,-\the\ganttnum*cm+0.4cm)--(\the\gantttmpa-0.14*cm,-\the\ganttnum*cm+0.4cm)--cycle withcolor black;
- fill fulldiamond scaled 0.3cm shifted (\the\gantttmpa+0.01cm,-\the\ganttnum*cm+0.2cm) withcolor black;
- fill fulldiamond scaled 0.3cm shifted (\the\gantttmpb-0.01cm,-\the\ganttnum*cm+0.2cm) withcolor black;
- \stopMPdrawing
-
- \global\ganttlastx=\gantttmpb
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttgroup
- {\doganttgroup}
-
-% \ganttmilestone, draw a diamond to represent a milestone
-% usage: \ganttgroup[color=<color>]{label}{start}
-% color - a tikz color of the pattern (e.g. red, green blue gray, dark gray)
-% for more information see the tikz documentation
-
-% Declaring layers to abvoid superposition when you connect a \ganttmileston with a task
-\unexpanded\long\def\doganttmilestone[#1]#2#3%
- {\bgroup
- \getparameters[\????gantt][#1]%
- \edef\gantt!color{\@@@@ganttcolor}
-
- \gantttmpa=\dimexpr\gantt!ganttunitlength*#3\relax
- \gantttmpb=\dimexpr\gantt!ganttunitlength*0+\gantttmpa\relax
-
- \doif{\gantt!drawledgerline}{true}{
- \startMPdrawing
- draw (0,-\the\ganttnum*cm-0.2cm)--(\the\ganttwidth*\gantt!ganttunitlength,-\the\ganttnum*cm-0.2cm) dashed withdots;
- \stopMPdrawing
- }
- \startMPdrawing
- pen diamond; diamond := makepen fulldiamond;
- path diag; diag = (0,-\the\ganttnum*cm+0.1cm)--(0,-\the\ganttnum*cm+0.5cm);
- label.lft (textext("\getvalue{gantt!style}{#2}"), center diag);
- fill fulldiamond scaled 0.3cm shifted (\the\gantttmpb,-\the\ganttnum*cm+0.3cm) withcolor \gantt!color;
- \stopMPdrawing
-
- \global\ganttlastx=\gantttmpb
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttmilestone
- {\dosingleempty\doganttmilestone}
-
-% \ganttmilestonecon draws a single diamond *and* connects the diamond with the previous task
-% usage: \ganttmilestonecon[color=<color>]{label}{start}{length}
-% where the optional color argument are the same as for \ganttbar and \ganttmilestone
-\unexpanded\long\def\doganttmilestonecon[#1]#2#3%
- {\bgroup
- \getparameters[\????gantt][#1]%
- \edef\gantt!color{\@@@@ganttcolor}
-
- \nextganttlastx = \dimexpr\ganttlastx+\ganttunitlength*1\relax
- \ifdim\nextganttlastx>\dimexpr\gantt!ganttunitlength*#3\relax
- \startMPdrawing
- begingroup;
- interim linecap := squared;
- interim linejoin := rounded;
-
- drawarrow (\the\ganttlastx,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+0.6*cm+0.2*cm)--(\the\ganttlastx-0.4*\gantt!ganttunitlength-0.14*cm,-\the\ganttnum*cm+0.6*cm+0.2*cm)--(\the\ganttlastx-0.4*\gantt!ganttunitlength-0.14*cm,-\the\ganttnum*cm+0.1*cm+0.2*cm)--(#3*\gantt!ganttunitlength-0.14*cm,-\the\ganttnum*cm+0.1*cm+0.2*cm);
- endgroup;
- \stopMPdrawing
- \else
- \startMPdrawing
- begingroup;
- interim linecap := squared;
- interim linejoin := rounded;
-
- drawarrow (\the\ganttlastx,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+1.1*cm+0.2*cm)--(\the\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum*cm+0.1*cm+0.2*cm)--(#3*\gantt!ganttunitlength-0.14*cm,-\the\ganttnum*cm+0.1*cm+0.2*cm);
- endgroup;
- \stopMPdrawing
- \fi
-
- \ganttmilestone[#1]{#2}{#3}
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttmilestonecon
- {\dosingleempty\doganttmilestonecon}
-
-\protect \stopmodule
diff --git a/macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-tikz.tex b/macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-tikz.tex
deleted file mode 100644
index bb0f1a7c8c..0000000000
--- a/macros/context/contrib/context-gantt/tex/context/third/gantt/gantt-s-tikz.tex
+++ /dev/null
@@ -1,312 +0,0 @@
-%D \module
-%D [ file=t-gantt-tikz,
-%D version=2012.08.19,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Drawing Gantt charts,
-%D author=Adam Reviczky,
-%D date=\currentdate,
-%D copyright=Adam Reviczky,
-%D license=Public Domain]
-
-%D Some macros for drawing Gantt charts using TikZ.
-
-\writestatus{loading}{ConTeXt User Module / tikz gantt chart}
-
-\startmodule[gantt-s-tikz]
-\unprotect
-
-\def\??gantt-tikz{@@gantt-tikz}
-
-\usemodule[tikz,pgffor]
-\usetikzlibrary[arrows,patterns]
-
-\definesystemvariable{gantt}
-
-\newcount\ganttnum
-\newcount\gantttitlenum
-\newcount\ganttwidth
-
-\newdimen\ganttlastx \ganttlastx = 0cm
-\newdimen\nextganttlastx
-\newdimen\titleunitlength \titleunitlength = 1cm
-\newdimen\ganttunitlength \ganttunitlength = 1cm
-
-\newdimen\gantttmpa
-\newdimen\gantttmpb
-
-% workaround for titleelement
-\def\!!row{\numexpr\ganttnum-1\relax}
-
-\unexpanded\def\setupgantt
- {\bgroup
- \dosingleempty
- \dosetupgantt}
-
-\unexpanded\def\dosetupgantt[#1]%
- {\egroup
- \getparameters[\??gantt][#1]}
-
-\setupgantt
- [xunitlength=1cm,
- fontsize=\tf,
- titlefontsize=\tfx,
- drawledgerline=false]
-
-\unexpanded\def\setupganttbar
- {\bgroup
- \dosingleempty
- \dosetupganttbar}
-
-\unexpanded\def\dosetupganttbar[#1]%
- {\egroup
- \getparameters[\??gantt][#1]}
-
-\setupganttbar
- [pattern=north east lines,
- color=black]
-
-% The gantt environment draws the canvas of a gantt figure (realized as tikzpicture)
-% The usage is \startgantt[...]{no of Tasks to plot}{no of time slots}
-% The optional argument [...] can be filled in a key=value syntax, using one or more of the following keys:
-%
-% xunitlength - length of one time slot (default: 1 cm)
-% fontsize - fontsize of labels (default: \tf)
-% titlefontsize - fontsize of title section (default: \tfx)
-% drawledgerline - Switch to enable/disable the drawing of horizontal ledger lines (default value: false)
-
-\unexpanded\long\def\dostartgantt[#1]#2#3%
- {\getparameters[\??gantt][#1]%
- \gdef\gantt!ganttunitlength{\getvalue{@@ganttxunitlength}}
- \gdef\gantt!fontsize{\getvalue{@@ganttfontsize}}
- \gdef\gantt!titlefontsize{\getvalue{@@gantttitlefontsize}}
- \gdef\gantt!drawledgerline{\@@ganttdrawledgerline}
-
- \bgroup
- \tikzstyle{time}=[coordinate]
-
- \newcount\ganttx \ganttx=0
- \newcount\ganttheight
-
- \def\ganttxstringtop{}
- \def\ganttxstringbottom{}
-
- \global\ganttwidth=#3
- \global\ganttnum=0
-
- \ganttheight=#2
- \advance\ganttheight by 1;
-
- \draw (0,0.5) node[above] {\ganttxstringtop} -- (0,1.4-\ganttheight) node[below] {\ganttxstringbottom};
- \draw (\ganttwidth*\gantt!ganttunitlength,0.5) node[above] {\ganttxstringtop} -- (\ganttwidth*\gantt!ganttunitlength,1.4-\ganttheight) node[below] {\ganttxstringbottom};
-
- % draw grid
- \foreach \!!t in {1,2,...,\ganttwidth}{
- \draw[dotted] (\gantt!ganttunitlength*\!!t,-0.5) node[above] {\ganttxstringtop} -- (\gantt!ganttunitlength*\!!t,1.4-\ganttheight) node[below] {\ganttxstringbottom};
- }
-
- % draw x axis
- \draw[] (0,-#2+0.4) -- (\ganttwidth*\gantt!ganttunitlength,-#2+0.4);
- \egroup
- }
-
-\unexpanded\def\startgantt%
- {\starttikzpicture[draw=black,yscale=.7,xscale=1]
- \dosingleempty\dostartgantt}
-
-\unexpanded\def\stopgantt%
- {\doglobal\ganttnum=0
- \stoptikzpicture}
-
-% ganttitle is the environment for drawing the title section
-\definestartstop[ganttitle][
- before={
- \ganttlastx = 0cm
- \doglobal\advance\ganttnum by 1
- },
- after={
- \ganttlastx = 0cm
- }
- ]
-
-% \titleelement draws one element of the title
-% usage: \titleelement{label}{length}
-\unexpanded\long\def\dotitleelement#1#2%
- {\gantttmpa=\dimexpr\gantt!ganttunitlength*#2\relax
- \divide\gantttmpa by 2;
-
- \def\!!xoffset{1.5}
-
- \draw (\ganttlastx,-\the\!!row) rectangle (\ganttlastx+#2*\gantt!ganttunitlength,-\the\!!row+0.6);
- \node [text height=1.5ex,text depth=0.7ex] at (\ganttlastx+\gantttmpa-\!!xoffset,-\the\!!row+0.25) {%
- \getvalue{gantt!titlefontsize} #1%
- };
-
- \ganttlastx=\dimexpr\ganttlastx+\gantt!ganttunitlength*#2\relax
- }
-
-\unexpanded\def\titleelement%
- {\dotitleelement}
-
-% \numtitle draws a numbered sequence of title elements
-% usage: \numtitle{start number}{increment}{end number}{length of each title element}
-\unexpanded\long\def\donumtitle#1#2#3#4%
- {\gantttitlenum=#1
- \dostepwiserecurse{#1}{#3}{#2}{
- \titleelement{\the\gantttitlenum}{#4}
- \advance\gantttitlenum by #2;
- }
- }
-
-\unexpanded\def\numtitle%
- {\donumtitle}
-
-% \ganttbar draws a single, unconnected bar for representing a task
-% usage: \ganttbar[pattern=<pattern>,color=<color>]{label}{start}{length}
-% where the optional comma separated arguments are:
-% pattern - is a tikz pattern (e.g. north east lines (default), north west lines, crosshatch, crosshatch dots, grid, ...)
-% color - a tikz color of the pattern (e.g. red, green blue gray, dark gray)
-% for more information see the tikz documentation
-\unexpanded\long\def\doganttbar[#1]#2#3#4%
- {\bgroup
- \getparameters[\??gantt][#1]%
- \edef\gantt!pattern{\@@ganttpattern}
- \edef\gantt!color{\@@ganttcolor}
-
- \gantttmpa=\dimexpr\gantt!ganttunitlength*#3\relax
- \gantttmpb=\dimexpr\gantt!ganttunitlength*#4+\gantttmpa\relax
-
- \doif{\gantt!drawledgerline}{true}{
- \draw[dotted] (0,-\the\ganttnum-0.2) -- (\ganttwidth*\gantt!ganttunitlength,-\the\ganttnum-0.2);
- }
- \node at (0,-\the\ganttnum+0.1) [anchor=base east] {%
- \getvalue{gantt!fontsize} #2%
- };
- \draw[pattern=\gantt!pattern,pattern color=\gantt!color] (\gantttmpa,-\the\ganttnum+0.1) rectangle (\gantttmpb,-\the\ganttnum+0.5);
- \global\ganttlastx=\gantttmpb
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttbar
- {\dosingleempty\doganttbar}
-
-% \ganttcon draws an arrow between to bars with specified coordinates
-% usage: \ganttcon{startx}{starty}{endx}{endy}
-\unexpanded\long\def\doganttcon#1#2#3#4%
- {\bgroup
- \draw[-latex,rounded corners=1pt] (#1*\gantt!ganttunitlength,-#2+0.1+0.2) -- (#1*\gantt!ganttunitlength+0.4*\gantt!ganttunitlength,-#2+0.1+0.2) -- (#1*\gantt!ganttunitlength+0.4*\gantt!ganttunitlength,-#2-0.4+0.2) -- (#1*\gantt!ganttunitlength-0.4*\gantt!ganttunitlength,-#2-0.4+0.2) -- (#1*\gantt!ganttunitlength-0.4*\gantt!ganttunitlength,-#4+0.1+0.2) -- (#3*\gantt!ganttunitlength,-#4+0.1+0.2);
- \egroup
- }
-
-\unexpanded\def\ganttcon
- {\doganttcon}
-
-% \ganttbarcon draws a single bar *and* connects the bar with the previous bar for
-% consecutive tasks
-% usage: \ganttbarcon[pattern=<pattern>,color=<color>]{label}{start}{length}
-% where the optional pattern argument are the same as for \ganttbar
-\unexpanded\long\def\doganttbarcon[#1]#2#3#4%
- {\bgroup
- \getparameters[\??gantt][#1]%
- \edef\gantt!pattern{\@@ganttpattern}
- \edef\gantt!color{\@@ganttcolor}
-
- \nextganttlastx = \dimexpr\ganttlastx+\ganttunitlength*1\relax
- \ifdim\nextganttlastx>\dimexpr\gantt!ganttunitlength*#3\relax
- \draw[-latex,rounded corners=1pt] (\ganttlastx,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+0.6+0.2) -- (\ganttlastx-0.4*\gantt!ganttunitlength,-\the\ganttnum+0.6+0.2) -- (\ganttlastx-0.4*\gantt!ganttunitlength,-\the\ganttnum+0.1+0.2) -- (#3*\gantt!ganttunitlength,-\the\ganttnum+0.1+0.2);
- \else
- \draw[-latex,rounded corners=1pt] (\ganttlastx,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+0.1+0.2) -- (#3*\gantt!ganttunitlength,-\the\ganttnum+0.1+0.2);
- \fi
-
- %hbox overfull!
- \ganttbar[#1]{#2}{#3}{#4}
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttbarcon
- {\dosingleempty\doganttbarcon}
-
-% \ganttgroup draws a bar to group tasks
-% usage: \ganttgroup{label}{start}{length}
-\unexpanded\long\def\doganttgroup#1#2#3%
- {\bgroup
- \gantttmpa=\dimexpr\gantt!ganttunitlength*#2\relax
- \gantttmpb=\dimexpr\gantt!ganttunitlength*#3+\gantttmpa\relax
-
- \doif{\gantt!drawledgerline}{true}{
- \draw[dotted] (0,-\the\ganttnum-0.2) -- (\ganttwidth*\gantt!ganttunitlength,-\the\ganttnum-0.2);
- }
- \node at (0,-\the\ganttnum+0.1) [anchor=base east] {%
- \getvalue{gantt!fontsize}\bf #1%
- };
- \fill[black] (\gantttmpa-0.14cm,-\the\ganttnum+0.2) rectangle (\gantttmpb+0.14cm,-\the\ganttnum+0.4);
- \draw[diamond-diamond] (\gantttmpa-0.14cm,-\the\ganttnum+0.2) -- (\gantttmpb+0.14cm,-\the\ganttnum+0.2);
-
- \global\ganttlastx=\gantttmpb
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttgroup
- {\doganttgroup}
-
-% \ganttmilestone, draw a diamond to represent a milestone
-% usage: \ganttmilestone[color=<color>]{label}{start}
-% color - a tikz color of the pattern (e.g. red, green blue gray, dark gray)
-% for more information see the tikz documentation
-
-% Declaring layers to abvoid superposition when you connect a \ganttmileston with a task
-\pgfdeclarelayer{background}
-\pgfdeclarelayer{foreground}
-\pgfsetlayers{background,main,foreground}
-
-\unexpanded\long\def\doganttmilestone[#1]#2#3%
- {\bgroup
- \getparameters[\??gantt][#1]%
- \edef\gantt!color{\@@ganttcolor}
-
- \gantttmpa=\dimexpr\gantt!ganttunitlength*#3\relax
- \gantttmpb=\dimexpr\gantt!ganttunitlength*0+\gantttmpa\relax
-
- \doif{\gantt!drawledgerline}{true}{
- \draw[dotted] (0,-\the\ganttnum-0.2) -- (\ganttwidth*\gantt!ganttunitlength,-\the\ganttnum-0.2);
- }
- \node at (0,-\the\ganttnum) [anchor=base east] {%
- \getvalue{gantt!fontsize} #2%
- };
- \pgfonlayer{foreground}
- \draw[diamond-, color=\gantt!color] (\gantttmpa,-\the\ganttnum+0.1) -- (\gantttmpb,-\the\ganttnum+0.4);
- \endpgfonlayer
- \global\ganttlastx=\gantttmpb
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttmilestone
- {\dosingleempty\doganttmilestone}
-
-% \ganttmilestonecon draws a single diamond *and* connects the diamond with the previous task
-% usage: \ganttmilestonecon[color=<color>]{label}{start}
-% where the optional color argument are the same as for \ganttbar and \ganttmilestone
-\unexpanded\long\def\doganttmilestonecon[#1]#2#3%
- {\bgroup
- \getparameters[\??gantt][#1]%
- \edef\gantt!color{\@@ganttcolor}
-
- \nextganttlastx = \dimexpr\ganttlastx+\ganttunitlength*1\relax
- \ifdim\nextganttlastx>\dimexpr\gantt!ganttunitlength*#3\relax
- \draw[-latex,rounded corners=1pt] (\ganttlastx,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+0.6+0.2) -- (\ganttlastx-0.4*\gantt!ganttunitlength-1.8,-\the\ganttnum+0.6+0.2) -- (\ganttlastx-0.4*\gantt!ganttunitlength-1.8,-\the\ganttnum+0.1+0.2) -- (#3*\gantt!ganttunitlength-1.8,-\the\ganttnum+0.1+0.2);
- \else
- \draw[-latex,rounded corners=1pt] (\ganttlastx,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+1.1+0.2) -- (\ganttlastx+0.4*\gantt!ganttunitlength,-\the\ganttnum+0.1+0.2) -- (#3*\gantt!ganttunitlength-1.8,-\the\ganttnum+0.1+0.2);
- \fi
-
- \ganttmilestone[#1]{#2}{#3}
- \egroup
- \doglobal\advance\ganttnum by 1
- }
-
-\unexpanded\def\ganttmilestonecon
- {\dosingleempty\doganttmilestonecon}
-
-\protect \stopmodule
diff --git a/macros/context/contrib/context-gantt/tex/context/third/gantt/t-gantt.tex b/macros/context/contrib/context-gantt/tex/context/third/gantt/t-gantt.tex
deleted file mode 100644
index 06cecfb54a..0000000000
--- a/macros/context/contrib/context-gantt/tex/context/third/gantt/t-gantt.tex
+++ /dev/null
@@ -1,23 +0,0 @@
-%D \module
-%D [ file=t-gantt,
-%D version=2012.08.19,
-%D title=\CONTEXT\ Module,
-%D subtitle=Gantt Module,
-%D author={Adam Reviczky and Aditya Mahajan},
-%D date=\currentdate,
-%D copyright={Adam Reviczky and Aditya Mahajan},
-%D license=Public Domain]
-
-\writestatus{loading}{module gantt}
-
-\startmodule[gantt]
-
-\unprotect
-\setupmodule[alternative=]
-
-\doifdefinedelse{\currentmoduleparameter{\c!alternative}}
- {\usemodule[gantt-s-mp]}
- {\usemodule[gantt-s-\currentmoduleparameter{\c!alternative}]}
-
-\protect
-\stopmodule
diff --git a/macros/context/contrib/context-inifile/VERSION b/macros/context/contrib/context-inifile/VERSION
deleted file mode 100644
index 53ed26412b..0000000000
--- a/macros/context/contrib/context-inifile/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2008.07.15
diff --git a/macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-demo.pdf b/macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-demo.pdf
deleted file mode 100644
index 94ee02ad2f..0000000000
--- a/macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-doc.pdf b/macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-doc.pdf
deleted file mode 100644
index 2dc6a2a5ec..0000000000
--- a/macros/context/contrib/context-inifile/doc/context/third/inifile/inifile-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-inifile/tex/context/third/inifile/t-inifile.tex b/macros/context/contrib/context-inifile/tex/context/third/inifile/t-inifile.tex
deleted file mode 100644
index df1c883080..0000000000
--- a/macros/context/contrib/context-inifile/tex/context/third/inifile/t-inifile.tex
+++ /dev/null
@@ -1,221 +0,0 @@
-%D \module
-%D [ file=t-inifile,
-%D version=2008.07.15,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Formatting of ini-files,
-%D author=Peter Münster,
-%D date=\currentdate,
-%D copyright={Peter Münster}]
-%C This module is copyrighted by Peter Münster.
-%C Please send any comments to pmrb at free.fr.
-%C You can find the latest version of this module on
-%C http://modules.contextgarden.net/
-
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-\writestatus{loading}{Formatting of ini-files}
-\doifnotmode{mkiv}{\writestatus{error}{needs luatex}\wait\end}
-
-\unprotect
-
-\startluacode
--- namespace
-thirddata = thirddata or { }
-thirddata.inifile = {}
-
--- sort the table
--- s1: primary key
--- s2: secondary key
--- s3: third key
-local function sort_table(s1, s2, s3)
- local function cmp(a, b)
- if s2 ~= "" and a[s1] == b[s1] then
- if s3 ~= "" and a[s2] == b[s2] then
- return a[s3] < b[s3]
- else
- return a[s2] < b[s2]
- end
- else
- return a[s1] < b[s1]
- end
- end
- if s1 ~= "" then
- table.sort(thirddata.inifile.t, cmp)
- end
-end
-
--- write default values to table entry
--- d: the default values separated by commas
--- i: the index of the entry
-local function write_defaults(d, i)
- for k, v in string.gmatch(d, "[,%s]*(.-)=([^,]*)") do
- thirddata.inifile.t[i][k] = v
- end
-end
-
--- generate table from ini-file
--- d: default values for all entries
--- s1: primary sort-key
--- s2: secondary sort-key
--- s3: third sort-key
-function thirddata.inifile.make_table(d, s1, s2, s3)
- thirddata.inifile.t = {}
- local i = 0
- local lastkey
- while true do
- local l = io.read()
- if not l then
- break
- end
- while true do
- -- check for new entry:
- key = string.match(l, "^%[(.+)%]$")
- if key then
- i = i + 1
- thirddata.inifile.t[i] = {}
- thirddata.inifile.t[i]["key"] = key
- thirddata.inifile.t[i]["n"] = i
- write_defaults(d, i)
- break -- continue !
- end
- -- treat continued lines:
- while string.match(l, "\\$") do
- local c = io.read()
- l = string.match(l, "^(.*)\\$") .. c
- end
- local c = string.match(l, "^%s+(.*)$")
- if c then
- thirddata.inifile.t[i][lastkey] =
- thirddata.inifile.t[i][lastkey] .. " " .. c
- end
- -- get a new key value pair:
- key, val = string.match(l, "^([%w_]+)%s*=%s(.*)$")
- if key then
- thirddata.inifile.t[i][key] = val
- lastkey = key
- end
- break
- end
- end
- sort_table(s1, s2, s3)
- print(table.serialize(thirddata.inifile.t))
-end
-
--- let ConTeXt print the sorted table with user defined formatting
--- c: the user supplied command to print one entry
-function thirddata.inifile.print(c)
- for i = 1,#thirddata.inifile.t do
- tex.print(string.format("%s\\def\\IF@index{%d}%s\\%s",
- "\\unprotect", i, "\\protect", c))
- end
-end
-
--- initialise the new entry, in general to be called in the beginning
--- of the user supplied formatting command
--- i: the index of the new entry
-function thirddata.inifile.newentry(i)
- for k, v in pairs(thirddata.inifile.t[i]) do
- tex.print(string.format("\\def\\IF%s{%s}", k, v))
- end
-end
-
--- filter applied to values of a key
--- k: the key
--- s: the search pattern
--- r: the replace string
-function thirddata.inifile.filter(k, s, r)
- for i = 1,#thirddata.inifile.t do
- thirddata.inifile.t[i][k] =
- string.gsub(thirddata.inifile.t[i][k], s, r)
- end
-end
-\stopluacode
-
-\getparameters[IF@][defaults=,sortA=,sortB=,sortC=,file=/dev/null]
-\def\setupIniFile[#1]{
- \getparameters[IF@][#1]
- \ctxlua{io.input("\IF@file")}
- \ctxlua{thirddata.inifile.make_table("\IF@defaults",
- "\IF@sortA", "\IF@sortB", "\IF@sortC")}
-}
-\def\IniFilePrint{\ctxlua{thirddata.inifile.print("\IF@command")}}
-\def\IniFileNewEntry{\ctxlua{thirddata.inifile.newentry(\IF@index)}}
-\def\IniFileFilter[#1][#2][#3]{\ctxlua{thirddata.inifile.filter("#1",
- "#2", "#3")}}
-
-\protect
-
-\doifnotmode{demo}{\endinput}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%D Usage example:
-
-\startbuffer[thewho]
-[p_t]
-givenname = Peter
-surname = Townshend
-birthyear = 1945
-comment = 100 % with nobreakspace
-
-[r_d]
-givenname = Roger
-surname = Daltrey
-comment = 100 % with thinspace
-
-[j_e]
-givenname = John
-surname = Entwistle
-comment = very very very very
- long line
-
-[k_m]
-givenname = Keith
-surname = Moon
-birthyear = 1946
-comment = another very very very very \
- long line
-
-[k_j]
-givenname = Kenney
-surname = Jones
-birthyear = 1948
-comment = yet another very very very very \
-long line
-\stopbuffer
-\savebuffer[thewho]
-
-\usemodule[inifile]
-
-\setupIniFile[defaults={birthyear=1944,comment=},
- sortA=birthyear,sortB=key,command=FormatMember,file=\jobname-thewho.tmp]
-\IniFileFilter[comment][\%\% ][\\letterpercent\\space ]
-\IniFileFilter[comment][\%\%][\\letterpercent ]
-
-\setupTABLE[frame=off,width=0.5\textwidth]
-\nonknuthmode
-
-\def\IFbirthyear{}
-\def\FormatMember{
- \edef\LastBirthyear{\IFbirthyear}
- \IniFileNewEntry
- \doifnot\IFbirthyear\LastBirthyear{\section{\IFbirthyear}}
- \subsection{\WORD{\IFkey}}
- \bTABLE\bTR
- \bTD Given name: \IFgivenname\eTD\bTD Surname: \IFsurname\eTD
- \eTR\eTABLE
- \doifsomething\IFcomment{Comment to show the treatment of the percent
- sign and multi-line values: \IFcomment}}
-
-\starttext
-\title{The Who}
-\IniFilePrint
-\stoptext
diff --git a/macros/context/contrib/context-layout/VERSION b/macros/context/contrib/context-layout/VERSION
deleted file mode 100644
index 90da282144..0000000000
--- a/macros/context/contrib/context-layout/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2007.06.27
diff --git a/macros/context/contrib/context-layout/doc/context/third/layout/t-layout.pdf b/macros/context/contrib/context-layout/doc/context/third/layout/t-layout.pdf
deleted file mode 100644
index 4e1d7cd0c1..0000000000
--- a/macros/context/contrib/context-layout/doc/context/third/layout/t-layout.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-layout/tex/context/third/layout/t-layout.tex b/macros/context/contrib/context-layout/tex/context/third/layout/t-layout.tex
deleted file mode 100644
index 7ca9d6e1b6..0000000000
--- a/macros/context/contrib/context-layout/tex/context/third/layout/t-layout.tex
+++ /dev/null
@@ -1,411 +0,0 @@
-%% Last Change: Fri Apr 22 11:06:09 2005
-
-%D \module
-%D [ file=t-layout,
-%D version=2003.03.26,
-%D title=\CONTEXT\ User Module,
-%D subtitle=show layout,
-%D author=Patrick Gundlach,
-%D date=\currentdate,
-%D copyright={Patrick Gundlach}]
-
-
-%C filename: t-layout.tex
-%C module layout, shows layout of current page
-
-
-%C copyright 2003,2007 Patrick Gundlach, patrick@gundla.ch
-%C may be distributed under the terms of the GNU General Public License
-%C URL: http://levana.de/context/
-
-%D \subject{Introduction}
-%D This third-party module \quote{layout} draws a representation of
-%D the of the layout of the
-%D current page and displays the sizes of the widths and heights of the
-%D margins, header, footer and text body.
-
-%D \subject{Usage}
-%D Include this module into your ConTeXt files:
-%D \type{\usemodule[t][layout]} and show the layout with \type{\ShowLayout}.
-
-%D You can set some parameters using \type{\SetupShowLayout}. The
-%D parameters are: units, digits, round, showmore and graphonly.
-%D If graphonly (0/1) is 0, this module shows the lenghts of some text areas.
-%D units (cm, mm, in or pt) sets the unit in which the lengths will be
-%D displayed, digits (any number $\geq 0$)
-%D sets the number of digits after the decimal period, round (any
-%D number $\neq 0$) states
-%D the place where rounding of the displayed numbers should occur
-%D (\TeX\ is bad at calculating such things) and showmore (0/1) tells
-%D this module to display information about the edge and top/bottom.
-
-%D Example:
-%D \starttyping
-%D \ShowLayout
-%D [units=cm,
-%D digits=2,
-%D round=0.1,
-%D showmore=1,
-%D graphonly=1]
-%D
-%D \stoptyping
-
-%D The idea was taken from the \type{\layout} command from the layout LaTeX
-%D package. (Kent McPherson and others)
-
-%C the following settings will be recognized:
-%C units = cm, mm, in or pt
-%C digits = any number >= 0, those are the digits after the decimal period
-%C round = any number != 0, just play with it, example 0.1 or 0.01.
-%C Explanation will be done later
-
-%D \subject{The code}
-
-%D This section is not meant as documentation
-
-\newdimen\ShowLayoutdimen
-
-\setvalue{Layoutmm}{0.351459804} % 2.54/72.27 * 10
-\setvalue{Layoutcm}{0.0351459804} % 2.54/72.27
-\setvalue{Layoutin}{0.0138370001} % 1/72.27
-\setvalue{Layoutpt}{1}
-
-\def\ShowLayoutB(#1.#2)#3{%
- \counttokens #2\to\scratchcounter
- #1\ifnum#3>0%
- \ifnum#3 > \the\scratchcounter \else \scratchcounter=#3 \fi
- \splitofftokens \scratchcounter \from #2 \to\test .\test \fi}
-
-% taken from ConTeXt source
-\def\LayoutConvert#1#2#3%
- {\ShowLayoutdimen=\getvalue{ShowLayoutround}pt
- \begingroup
- \scratchdimen#1\relax
- \scratchdimen\getvalue{Layout#2}\scratchdimen
- \advance\scratchdimen by 0.5\ShowLayoutdimen
- \divide\scratchdimen by \ShowLayoutdimen
- \multiply\scratchdimen by \ShowLayoutdimen
- \expandafter\ShowLayoutB\expandafter(\number\withoutpt{\the\scratchdimen}){#3}\thinspace #2
- \endgroup}
-
-\def\ShowLayoutA#1{%
- \LayoutConvert{#1}%
- {\getvalue{ShowLayoutunits}}%
- {\getvalue{ShowLayoutdigits}}}%
-
-\startuniqueMPgraphic{ShowLayout}{showmore}
-% make sure that the label is on the same side as the posa
-vardef swapifnecessary (suffix posa, posb)(expr labelpos) =
- if ( (labelpos < posa) and (posa > posb))
- or ( (labelpos > posa) and (posa < posb)) :
- save c; %swap 'em
- c:=posa;
- posa:=posb;
- posb:= c;
- fi
-enddef;
-% num: labelnumber
-% vertical: horizontal or vertical label?
-% pos: for horizontal the y coord, for vertical the x corrd
-% posa, posb: positions of the borders (x coord for horizontal)
-% labelpos: position for label, only for outer labels, given in the
-% same direction as posa, posb
-def layoutshowmark(expr num, vertical, pos, posa, posb, labelpos) =
- save b,e,c,p,arrow;
- numeric b,e; pair p[]; path arrow[],c;
-
- b:=posa;
- e:=posb;
-
- % p0 is labelposition
- % p1 is from
- % p2 is to
- % p3 is opposite arrow in outer marking
-
- if labelpos = 0 : % inner label |<----(n)---->|
- p0 := (.5[b,e], pos);
- else: % outer label --->| |<----(n)
- swapifnecessary (b,e, labelpos);
- p0 := (labelpos, pos);
- p3 := ( if b < labelpos: e-5mm else: e+5mm fi ,pos);
- fi
-
- p1 := (b,pos);
- p2 := (e,pos);
-
- if vertical:
- p0:=(ypart p0,xpart p0);
- p1:=(ypart p1,xpart p1);
- p2:=(ypart p2,xpart p2);
- p3:=(ypart p3,xpart p3);
- fi
- c:= fullcircle scaled .7cm shifted p0;
-
- if (center(c) -- p1) intersectiontimes c = (-1,-1):
- % don't draw the arrows, because there is not enough room for them.
- else:
- arrow1 :=center(c) -- p1 cutbefore (center(c) -- p1) intersectionpoint c ;
- arrow2 :=
- if labelpos = 0 : % inner
- center(c) -- p2 cutbefore (center(c) -- p2) intersectionpoint c
- else:
- p3 -- p2
- fi;
-
- label (decimal (num), center(c));
- draw c;
- drawarrow arrow1;
- drawarrow arrow2;
- fi
-
-enddef;
-
-
-
-StartPage;
-numeric xpos,ypos;
-
-path body,leftmargin,header,footer,rightmargin;
-
-
-% backspace:
-draw llcorner Page shifted (BackSpace,0) --
- ulcorner Page shifted (BackSpace,0) dashed evenly;
-
-%topspace
-draw urcorner Page shifted (0,-TopSpace) --
- ulcorner Page shifted (0,-TopSpace) dashed evenly;
-
-
-header := Field [Header] [Text];
-footer := Field [Footer] [Text];
-leftmargin := Field [LeftMargin] [Text];
-rightmargin:= Field [RightMargin][Text];
-body := Field [Text] [Text];
-
-pickup pencircle scaled 2pt;
-
-draw Page;
-draw leftmargin;
-draw rightmargin;
-draw header;
-draw footer;
-draw body;
-
-
-
-label ("Body", center (body));
-label ("Header",center (header));
-label ("Left Margin", center (leftmargin));
-label ("Right Margin", center (rightmargin));
-label ("Footer", center (footer));
-%% label (textext("\tfb Body"), center (body));
-%% label (textext("\tfa Header"),center (header));
-%% label (textext("Left Margin"), center (leftmargin));
-%% label (textext("Right Margin"), center (rightmargin));
-%% label (textext("\tfa Footer"), center (footer));
-
-
-if \MPvar{showmore}=1:
- path top, bot, leftedge, rightedge;
-
- top := Field [Top] [Text];
- bot := Field [Bottom] [Text];
- leftedge := Field [LeftEdge] [Text];
- rightedge := Field [RightEdge][Text];
-
- draw top;
- draw bot;
- draw leftedge;
- draw rightedge;
-fi
-
-pickup pencircle scaled 1pt;
-
-% (num, vertical, pos, from, to, labelpos)
-
-%backspace
-layoutshowmark (1, false, .5[ypart(ulcorner Page),Vstep[Top]], 0,BackSpace,0)
-
-
-ypos := Vstep[HeaderSeparator] -1cm;
-
-% leftmargin
-layoutshowmark (2, false, ypos,
- Hstep[LeftMargin],
- Hstep[LeftMargin]+Hsize[LeftMargin],0);
-
-% leftmargindistance
-layoutshowmark (3, false, ypos -1cm,
- Hstep[LeftMarginSeparator],
- Hstep[Text],
- Hstep[Text]+1cm);
-
-% makeupwidth
-layoutshowmark (4, false, Vstep[Text]+2cm,
- Hstep[Text], Hstep[Text]+Hsize[Text],0);
-
-% rightmargin
-layoutshowmark (5, false, ypos,
- Hstep[RightMargin],
- Hstep[RightMargin]+Hsize[RightMargin],0);
-
-% rightmargindistance
-layoutshowmark (6, false, ypos-1cm,
- Hstep[RightMargin],
- Hstep[RightMarginSeparator],
- Hstep[RightMarginSeparator] -1cm);
-
-
-%topspace
-
-xpos:=xpart(ulcorner Page)+BackSpace+1cm;
-layoutshowmark (7, true, xpos, PaperHeight,PaperHeight-TopSpace,0)
-
-%header
-xpos:=xpos+1cm;
-ypos:=.5[PaperHeight,PaperHeight-TopSpace];
-layoutshowmark (8, true, xpos ,
- Vstep[Header],
- Vstep[Header]+Vsize[Header],ypos);
-
-%headerseparator
-xpos:=xpos+1cm;
-layoutshowmark (9, true,xpos,
- Vstep[HeaderSeparator],
- Vstep[HeaderSeparator]+Vsize[HeaderSeparator],ypos);
-
-xpos:=xpos+1cm;
-
-if \MPvar{showmore}=1:
- % top
- layoutshowmark (17, true, xpos,
- Vstep[Top],
- Vstep[Top]+Vsize[Top], ypos);
-
- xpos:=xpos+1cm;
- layoutshowmark (18, true, xpos,
- Vstep[TopSeparator],
- Vstep[TopSeparator]+Vsize[TopSeparator], ypos);
-
-fi
-
-% makeupheight
-layoutshowmark (10, true,Hstep[RightMarginSeparator]-2cm,
- Vstep[Header]+Vsize[Header],
- Vstep[Footer],0);
-
-
-%footerseparator
-xpos:=xpart(ulcorner Page)+BackSpace+2cm;
-ypos:=.5(Vstep[Footer]);
-
-layoutshowmark (11, true,xpos,
- Vstep[FooterSeparator],
- Vstep[FooterSeparator]+Vsize[FooterSeparator],ypos);
-
-%footer
-xpos:=xpos+1cm;
-layoutshowmark (12, true,xpos,
- Vstep[Footer],Vstep[Footer]+Vsize[Footer],ypos);
-
-xpos:=xpos+1cm;
-
-if \MPvar{showmore}=1:
- % bottom
- layoutshowmark (19, true, xpos,
- Vstep[Bottom],
- Vstep[Bottom]+Vsize[Bottom], ypos);
- xpos:=xpos+1cm;
- layoutshowmark (20, true, xpos,
- Vstep[BottomSeparator],
- Vstep[BottomSeparator]+Vsize[BottomSeparator], ypos);
-
-fi
-
-if \MPvar{showmore}=1:
-
- ypos := Vstep[HeaderSeparator] -3cm;
-
- % LeftEdge
- layoutshowmark (13, false, ypos,
- Hstep[LeftEdge],
- Hstep[LeftEdge]+Hsize[LeftEdge],Hstep[Text]+1cm);
- ypos := ypos-1cm;
- % LeftEdgeSeparator
- layoutshowmark (14, false, ypos,
- Hstep[LeftEdgeSeparator],
- Hstep[LeftEdgeSeparator]+Hsize[LeftEdgeSeparator],
- Hstep[Text]+1cm);
-
- ypos := Vstep[HeaderSeparator] -3cm;
-
- layoutshowmark (15, false, ypos,
- Hstep[RightEdge],
- Hstep[RightEdge]+Hsize[RightEdge],
- Hstep[RightMarginSeparator] -1cm);
-
- ypos := ypos-1cm;
-
- layoutshowmark (16, false, ypos,
- Hstep[RightEdge],
- Hstep[RightEdgeSeparator],
- Hstep[RightMarginSeparator] -1cm);
-
-
-
-fi
-
-currentpicture := currentpicture scaled .5;
-
-\stopuniqueMPgraphic
-\defineoverlay[ShowLayout][\uniqueMPgraphic{ShowLayout}]
-
-\def\SetupShowLayout{\dosingleempty\getparameters[ShowLayout]}
-\SetupShowLayout[units=pt,digits=1,round=0.1,showmore=0,graphonly=0]
-
-\def\ShowLayout{\dosingleempty\doShowLayout}
-
-
-\def\doShowLayout[#1]{%
- \getparameters[ShowLayout][#1]
- \setMPvariables[ShowLayout][showmore=\getvalue{ShowLayoutshowmore}]
- \framed[width=.5\paperwidth,
- height=.5\paperheight,
- background=ShowLayout,
- frame=off,
-% frame=on,
- ]{}%
-\ifnum\getvalue{ShowLayoutgraphonly}=0
- \bgroup\tfxx
-\startcolumns[n=2]
-\starttabulate[|r|l|]
-\NC 1 \NC backspace \ShowLayoutA{\the\backspace} \NR
-\NC 2 \NC leftmargin \ShowLayoutA{\the\leftmarginwidth}\NR
-\NC 3 \NC leftmargindistance \ShowLayoutA{\the\leftmargindistance}\NR
-\NC 4 \NC width \ShowLayoutA{\the\makeupwidth}\NR
-\NC 5 \NC rightmargin \ShowLayoutA{\the\rightmarginwidth}\NR
-\NC 6 \NC rightmargindistance \ShowLayoutA{\the\rightmargindistance}\NR
-\NC 7 \NC topspace \ShowLayoutA{\the\topspace}\NR
-\NC 8 \NC header \ShowLayoutA{\the\headerheight}\NR
-\NC 9 \NC headerdistance \ShowLayoutA{\the\headerdistance}\NR
-\NC 10\NC height \ShowLayoutA{\the\makeupheight}\NR
-\NC 11\NC footerdistance \ShowLayoutA{\the\footerdistance}\NR
-\NC 12\NC footer \ShowLayoutA{\the\footerheight}\NR
-\ifnum\getvalue{ShowLayoutshowmore}=1%
-\NC 13\NC leftedge \ShowLayoutA{\the\leftedgewidth}\NR
-\NC 14\NC leftedgedistance \ShowLayoutA{\the\leftedgedistance}\NR
-\NC 15\NC rightedge \ShowLayoutA{\the\rightedgewidth}\NR
-\NC 16\NC rightedgedistance \ShowLayoutA{\the\rightedgedistance}\NR
-\NC 17\NC top \ShowLayoutA{\the\topheight}\NR
-\NC 18\NC topdistance \ShowLayoutA{\the\topdistance}\NR
-\NC 19\NC bottom \ShowLayoutA{\the\bottomheight}\NR
-\NC 20\NC bottomdistance \ShowLayoutA{\the\bottomdistance}\NR
-\fi
-\NC \NC paperwidth \ShowLayoutA{\the\paperwidth}\NR
-\NC \NC paperheight \ShowLayoutA{\the\paperheight}\NR
-\stoptabulate
-\stopcolumns
-\egroup
-\fi
-}
diff --git a/macros/context/contrib/context-lua-widow-control/VERSION b/macros/context/contrib/context-lua-widow-control/VERSION
new file mode 100644
index 0000000000..ad55eb85fc
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/VERSION
@@ -0,0 +1 @@
+v3.0.0
diff --git a/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/README.md b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/README.md
new file mode 100644
index 0000000000..93f94449f5
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/README.md
@@ -0,0 +1,51 @@
+<!-- lua-widow-control
+ https://github.com/gucci-on-fleek/lua-widow-control
+ SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+ SPDX-FileCopyrightText: 2022 Max Chernoff
+-->
+
+lua-widow-control
+=================
+
+Lua-widow-control is a Plain TeX/LaTeX/ConTeXt/OpTeX package that removes widows and orphans without any user intervention. Using the power of LuaTeX, it does so _without_ stretching any glue or shortening any pages or columns. Instead, lua-widow-control automatically lengthens a paragraph on a page or column where a widow or orphan would otherwise occur.
+
+Please see the [**package manual**](https://github.com/gucci-on-fleek/lua-widow-control/releases/latest/download/lua-widow-control.pdf) for usage details or the [***TUGboat***](https://github.com/gucci-on-fleek/lua-widow-control/releases/latest/download/tb133chernoff-widows.pdf) or [***Zpravodaj* articles**](https://github.com/gucci-on-fleek/lua-widow-control/releases/latest/download/lwc-zpravodaj.pdf) for background information and discussion.
+
+Usage
+-----
+### Installation
+Lua-widow-control is included in TeX&nbsp;Live and MikTeX. Provided that you have an up-to-date installation, you should not need to explicitly install the package.
+
+If you are using ConTeXt or want to manually install the package, you may download it from one of the below links:
+
+|Latest Release|Other Releases|
+|--------------|--------------|
+|[GitHub](https://github.com/gucci-on-fleek/lua-widow-control/releases/latest/)|[GitHub](https://github.com/gucci-on-fleek/lua-widow-control/releases)|
+|[CTAN](https://www.ctan.org/pkg/lua-widow-control)||
+|[ConTeXt Garden](https://modules.contextgarden.net/cgi-bin/module.cgi/action=view/id=127)||
+
+### Usage
+To load the package, add the relevant line to your preamble:
+
+|Macro Package|Code |
+|-------------|--------------------------------|
+|LaTeX |`\usepackage{lua-widow-control}`|
+|ConTeXt |`\usemodule[lua-widow-control]` |
+|Plain TeX |`\input lua-widow-control` |
+|OpTeX |`\load[lua-widow-control]` |
+
+
+Contributing
+------------
+
+Please see [`CONTRIBUTING.md`](https://github.com/gucci-on-fleek/lua-widow-control/blob/master/CONTRIBUTING.md).
+
+Licence
+-------
+
+Lua-widow-control is licensed under the [_Mozilla Public License_, version 2.0](https://www.mozilla.org/en-US/MPL/2.0/) or greater. The documentation is additionally licensed under [CC-BY-SA, version 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode) or greater.
+
+Please note that a compiled document is absolutely **not** considered to be an "Executable Form" as defined by the MPL. The use of lua-widow-control in a document does not place **any** obligations on the document's author or distributors. The MPL and CC-BY-SA licenses **only** apply to you if you distribute the lua-widow-control source code or documentation.
+
+---
+_v3.0.0 (2022-11-22)_ <!--%%version %%dashdate-->
diff --git a/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lua-widow-control.pdf b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lua-widow-control.pdf
new file mode 100644
index 0000000000..ba428f1f01
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lua-widow-control.pdf
Binary files differ
diff --git a/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lwc-zpravodaj.pdf b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lwc-zpravodaj.pdf
new file mode 100644
index 0000000000..1c37d25bf2
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/lwc-zpravodaj.pdf
Binary files differ
diff --git a/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/tb133chernoff-widows.pdf b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/tb133chernoff-widows.pdf
new file mode 100644
index 0000000000..e77e4df285
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/doc/luatex/lua-widow-control/tb133chernoff-widows.pdf
Binary files differ
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/CHANGELOG.md b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/CHANGELOG.md
new file mode 100644
index 0000000000..37eee32f11
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/CHANGELOG.md
@@ -0,0 +1,186 @@
+<!-- lua-widow-control
+ https://github.com/gucci-on-fleek/lua-widow-control
+ SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+ SPDX-FileCopyrightText: 2022 Max Chernoff
+-->
+
+Changelog
+=========
+
+All notable changes to lua-widow-control will be listed here, in reverse chronological order. **Changes listed in bold** are important changes: they either remove options or commands, or may change the location of page breaks.
+
+## v3.0.0 (2022-11-22)
+
+- Add the new _TUGboat_ and _Zpravodaj_ articles.
+
+- Add and document the public Lua interfaces.
+
+- Change `\parfillskip` settings for lengthened paragraphs to more strongly prevent short last lines. **May affect page breaks.**
+
+- Add the ability to configure the horizontal offset for the paragraph costs printed in draft mode.
+
+- Add support for [LuaMetaLaTeX and LuaMetaPlain](https://github.com/zauguin/luametalatex). All features should work identically to the LuaTeX-based version, although there are a few minor bugs. ([#40](https://github.com/gucci-on-fleek/lua-widow-control/pull/40))
+
+- Fully support inserts/footnotes in LuaMetaTeX ([#38](https://github.com/gucci-on-fleek/lua-widow-control/issues/38)).
+
+- Add support for presets in ConTeXt.
+
+- Add support for node colouring in ConTeXt and OpTeX ([#39](https://github.com/gucci-on-fleek/lua-widow-control/issues/39)).
+
+## [v2.2.2 (2022-08-23)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-6c91837c205572a78a0bcaf9c80b8e475ef71689)
+
+- Add preliminary support for inserts/footnotes in LuaMetaTeX ([#38](https://github.com/gucci-on-fleek/lua-widow-control/issues/38)).
+
+- Use the built-in LaTeX key–value interface where available.
+
+ This means that lua-widow-control now also reads the global class options.
+
+- Add support for split footnotes ([#37](https://github.com/gucci-on-fleek/lua-widow-control/issues/37)).
+
+## [v2.2.1 (2022-07-28)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-45c3146d5fc5a86606a931212395a28ffb48f925)
+
+- Fix crashes with recent LuaMetaTeX (ConTeXt MkXL). See also [this thread](https://mailman.ntg.nl/pipermail/ntg-context/2022/106331.html).
+- No longer show "left parfill skip" warnings with ConTeXt LMTX/MkXL ([#7](https://github.com/gucci-on-fleek/lua-widow-control/issues/7)).
+
+## [v2.2.0 (2022-06-17)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-9a5deba53545adc5ab25a5caa0b8ebf4104843f9)
+
+- Fix paragraphs not being properly saved for potential expansion. **May affect page breaks.**
+- Add a new `draft` option ([#36](https://github.com/gucci-on-fleek/lua-widow-control/issues/36)).
+- Fix a node memory leak ([#29](https://github.com/gucci-on-fleek/lua-widow-control/issues/29)). You should now be able to use lua-widow-control on documents with > 10 000 pages.
+- Use `\lua_load_module:n` when available.
+- Add additional metadata to the documentation.
+
+
+## [v2.1.2 (2022-05-27)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-3744f3e78bdf02fc63d508a0f80595260191607c)
+
+- Fully-support footnotes/inserts: lua-widow-control now moves the "footnote text" with the "footnote mark" when it moves a line to the next page.
+- No longer attempt to expand paragraphs in `\vbox`es
+- Minor documentation updates
+
+
+## [v2.1.1 (2022-05-20)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-980f24ac64816bd0d453754f8f1af676f0f7ee99)
+
+- Prevent spurious `under/overfull \vbox` warnings when widows/orphans are removed
+- Add TUGboat article to the distributed documentation
+- Rewrite many portions of the manual
+- Add support for `luahbtex` and `mmoptex` ([#35](https://github.com/gucci-on-fleek/lua-widow-control/pull/35) [@vlasakm](https://github.com/vlasakm))
+- Fix the (undocumented) `microtype` LaTeX option
+
+
+## [v2.1.0 (2022-05-14)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-82563aa0396805008059e3a96c2bf30b59c58026)
+
+- Fully support grid snapping in ConTeXt
+- New warnings when a new widow/orphan is inadvertently created
+- Significant internal rewrites
+- Add Plain and OpTeX interfaces to `\nobreak` behaviour and debug mode
+
+
+## [v2.0.6 (2022-04-23)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-2aa9269b33a03f66d2ece634c3dcba6b258fddf0)
+
+- Emergency fix for renamed LMTX engine Lua functions
+- Internal LaTeX refactoring
+
+
+## [v2.0.5 (2022-04-13)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-e3234ac7dfb31118d08fcb5ed0fe03f394df2b57)
+
+- Support nested `\lwcdisablecmd` macros
+- Fix `\lwcdisablecmd` in Plain TeX
+- Support command patching in OpTeX
+- Patch memoir to prevent spurious asterisks at broken two-line paragraphs ([#32](https://github.com/gucci-on-fleek/lua-widow-control/issues/32))
+
+
+## [v2.0.4 (2022-04-07)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-8a0e97e448976280a38d41f92c2781320b1a91f0)
+
+- Don't expand paragraphs typeset during output routines ([#31](https://github.com/gucci-on-fleek/lua-widow-control/issues/31))
+
+
+## [v2.0.3 (2022-03-28)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-d6622dd9fd04a4bc7678ff18420c1b4bdf077844)
+
+- Automatically patch section commands provided by memoir, KOMA-Script, and titlesec.
+
+
+## [v2.0.2 (2022-03-20)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-7e79189406a2318c33dcaceb85d9d1021b357a3f)
+
+_Final release present in TeX Live 2021_
+
+- Add `balanced` mode preset.
+
+
+## [v2.0.1 (2022-03-18)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-f3048dbcbfaf4d7d6f6a57e236cdb9684ff5d18d)
+
+- Documentation updates ([#25](https://github.com/gucci-on-fleek/lua-widow-control/issues/25))
+- Bug fixes ([#28](https://github.com/gucci-on-fleek/lua-widow-control/issues/28))
+
+
+## [v2.0.0 (2022-03-07)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-cea06ddad8dfcf15fa9ba2a86c6640648b9df523)
+
+- **Page breaks may be slightly different**
+- **Removed `\lwcemergencystretch` and `\lwcdisablecmd` in LaTeX. Please use the new key–value interface**
+- Use expl3 for the LaTeX files ([#20](https://github.com/gucci-on-fleek/lua-widow-control/pull/20))
+- Use a key–value interface for configuration with LaTeX ([#11](https://github.com/gucci-on-fleek/lua-widow-control/issues/11))
+- Silence some extraneous `luatexbase` info messages
+- Add a "debug mode" to print extra information ([#12](https://github.com/gucci-on-fleek/lua-widow-control/issues/12))
+- Fix error message line wrapping
+- Don't reset `\interlinepenalty` and `\brokenpenalty`
+- Set and analyze `\displaywidowpenalty`
+- Keep section headings with moved orphans ([#17](https://github.com/gucci-on-fleek/lua-widow-control/issues/17))
+- Add the ability to configure the maximum paragraph cost ([#22](https://github.com/gucci-on-fleek/lua-widow-control/issues/22))
+- Add a "strict" mode
+- Use an improved cost function to select the best paragraph to lengthen ([#23](https://github.com/gucci-on-fleek/lua-widow-control/issues/23))
+- Dozens of bug fixes
+- Miscellaneous documentation updates
+
+
+## [v1.1.6 (2022-02-22)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-2c7201854d89535ef7c02f6c38486205677f1aa1)
+
+- Add support for the OpTeX format/macro package.
+- Add support for the LuaTeX/MKIV version of ConTeXt.
+- Ensure compatibility with the new `linebreaker` package.
+- Fix a small bug with `\lwcdisablecmd`.
+- Test the `\outputpenalty` for the specific values that indicate a widow or orphan.
+
+
+## [v1.1.5 (2022-02-15)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-5cc95212c8141006ae3a600d26a4e0cd63b368c0)
+
+- Improve the appearance of the demo table in the documentation ([#4](https://github.com/gucci-on-fleek/lua-widow-control/issues/4))
+- Improve compatibility with microtype
+- Block loading the package without LuaTeX
+- Improve logging
+- Bug fix to prevent crashing
+
+
+## [v1.1.4 (2022-02-04)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-a8caba8e689ce5c743a88dcf1dcd8e4a0db67fb2)
+
+- Enable protrusion/expansion in the demo table in the documentation ([#3](https://github.com/gucci-on-fleek/lua-widow-control/issues/3))
+- Fix `\prevdepth` bug
+
+
+## [v1.1.3 (2022-01-30)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-8d1228bf1697e2720062b0c2a40f306005da72e8)
+
+- Fix bug when used with the LaTeX `calc` package. ([#2](https://github.com/gucci-on-fleek/lua-widow-control/issues/2))
+
+
+## [v1.1.2 (2021-12-14)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-61a684d92f1a38ecf0ff53c6da22b2a973fae530)
+
+- Fix crash under ConTeXt LMTX
+
+
+## [v1.1.1 (2021-11-26)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/v1.1.1)
+
+- Minor documentation updates
+
+
+## [v1.1.0 (2021-11-08)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-8c958011bb4bd7f6e4ad843321c0d2643645a08f)
+
+- Extensive documentation updates
+- Clarify that lua-widow-control *does* in fact support columns
+- Add `\lwcdisablecmd` macro to disable lua-widow-control for certain commands
+- Automatically disable lua-widow-control inside section headings (uses `\lwcdisablecmd`)
+- Add automated tests to prevent regressions
+- Fix a rare issue that would cause indefinite hangs
+
+
+
+## [v1.0.0 (2021-10-09)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-bae44a6858432e095597521bf1ef7df2104b6b9c)
+
+Initial release
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual-samples.tex b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual-samples.tex
new file mode 100644
index 0000000000..6951f7a5bb
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual-samples.tex
@@ -0,0 +1,178 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\startbuffer[demo-text]
+ \definepapersize[smallpaper][
+ width=6cm,
+ height=8.3cm
+ ]\setuppapersize[smallpaper]
+
+ \setuplayout[
+ topspace=0.1cm,
+ backspace=0.1cm,
+ width=middle,
+ height=middle,
+ header=0pt,
+ footer=0pt,
+ ]
+
+ \def\lwc/{\sans{lua-\allowbreak widow-\allowbreak control}}
+ \def\Lwc/{\sans{Lua-\allowbreak widow-\allowbreak control}}
+
+ \setupbodyfont[9pt]
+ \setupindenting[yes, 2em]
+
+ \definepalet[layout][grid=middlegray]
+ \showgrid[nonumber, none, lines]
+
+ \definefontfeature[default][default][expansion=quality,protrusion=quality]
+
+ \usetypescript[modern-base]
+ \setupbodyfont[reset,modern]
+
+ \setupalign[hz,hanging,tolerant]
+
+ \setuplanguage[en][spacing=packed]
+
+ \starttext
+ \Lwc/ can remove most widows and orphans from a document, \emph{without} stretching any glue or shortening any pages.
+
+ It does so by automatically lengthening a paragraph on a page where a widow or orphan would otherwise occur. While \TeX{} breaks paragraphs into their natural length, \lwc/ is breaking the paragraph 1~line longer than its natural length. \TeX{}'s paragraph is output to the page, but \lwc/'s paragraph is just stored for later. When a widow or orphan occurs, \lwc/ can take over. It selects the previously-saved paragraph with the least badness; then, it replaces \TeX{}'s paragraph with its saved paragraph. This increases the text block height of the page by 1~line.
+
+ Now, the last line of the current page can be pushed to the top of the next page. This removes the widow or the orphan without creating any additional work.
+ \stoptext
+\stopbuffer
+\savebuffer[list=demo-text]
+
+\startbuffer[shorten]
+ \parskip=0pt
+ \input lwc-manual-demo-text.tmp
+\stopbuffer
+
+\startbuffer[shorten-code]
+ \parskip=0pt
+
+ \clubpenalty=10000
+ \widowpenalty=10000
+\stopbuffer
+
+\startbuffer[stretch]
+ \parskip=0pt plus 1fill
+ \input lwc-manual-demo-text.tmp
+\stopbuffer
+
+\startbuffer[stretch-code]
+ \parskip=0pt plus 1fill
+
+ \clubpenalty=10000
+ \widowpenalty=10000
+\stopbuffer
+
+\startbuffer[ignore]
+ \startsetups[*default]
+ \clubpenalty=0
+ \widowpenalty=0
+ \displaywidowpenalty=0
+ \interlinepenalty=0
+ \brokenpenalty=0
+ \stopsetups
+
+ \setups[*default]
+
+ \input lwc-manual-demo-text.tmp
+\stopbuffer
+
+\startbuffer[ignore-code]
+ \parskip=0pt
+
+ \clubpenalty=0
+ \widowpenalty=0
+\stopbuffer
+
+\startbuffer[lwc]
+ \usemodule[lua-widow-control]
+ \input lwc-manual-demo-text.tmp
+\stopbuffer
+
+\startbuffer[lwc-code]
+ \usepackage{lua-widow-control}
+\stopbuffer
+
+\startbuffer[widow-orphan]
+ % TODO This is all really quite hacky
+ \define[1]\rulewords{\dorecurse{#1}{\blackrule[height=1.5ex, width=1em] \blackrule[height=1.5ex, width=2em] \blackrule[height=1.5ex, width=1.5em] \blackrule[height=1.5ex, width=3em] }}
+
+ \define[2]\fakestart{\framed[width=broad, align=normal, frame=off]{\parfillskip=0pt\spaceskip=0.2em plus 1fill\hskip 5em\rulewords{#1}\blackrule[height=1.5ex, width=#2]}}
+
+ \define[2]\fakeend{\framed[width=broad, align=normal, frame=off]{\parfillskip=5em\spaceskip=0.2em plus 1fill\rulewords{#1}\blackrule[height=1.5ex, width=#2]}}
+
+ \setupTABLE[width=broad, frame=off]
+ \setupTABLE[row][1][align=middle, style=\ssbf]
+ \setupTABLE[row][2][align=low, frame=on]
+ \setupTABLE[row][3][align=high, frame=on]
+ \setupTABLE[column][2][frame=off, width=1em]
+ \startTABLE
+ \NC Widow \NC\NC Orphan \NC\NR
+ \NC\fakestart{5}{1.5em}\NC\NC\fakestart{1}{2em}\NC\NR
+ \NC\fakeend{1}{2em}\NC\NC\fakeend{5}{1.5em}\NC\NR
+ \stopTABLE
+\stopbuffer
+
+\startbuffer[nobreak]
+ % This is also really hacky and terrible
+ \parfillskip=0pt
+ \define\lineone{%
+ \hbox to 0.3\textwidth{\blackrule[height=1.5ex, width=1em]\hfill%
+ \blackrule[height=1.5ex, width=3em]\hfill%
+ \blackrule[height=1.5ex, width=1em]\hfill%
+ \blackrule[height=1.5ex, width=3em]\hfill%
+ \blackrule[height=1.5ex, width=1em]}%
+ }
+
+ \define\linetwo{%
+ \hbox to 0.3\textwidth{\blackrule[height=1.5ex, width=2em]\hfill%
+ \blackrule[height=1.5ex, width=1em]\hfill%
+ \blackrule[height=1.5ex, width=2.5em]\hfill%
+ \blackrule[height=1.5ex, width=1em]\hfill%
+ \blackrule[height=1.5ex, width=2.5em]}%
+ }
+
+ \define\linethree{%
+ \hbox to 0.3\textwidth{\blackrule[height=1.5ex, width=1em]\hfill%
+ \blackrule[height=1.5ex, width=3em]\hfill%
+ \blackrule[height=1.5ex, width=1em]\hfill%
+ \blackrule[height=1.5ex, width=3em]\hfill%
+ \hskip1em\relax}%
+ }
+
+ \define\heading{\bold{Heading}}
+
+ \setupTABLE[
+ width=broad,
+ topframe=off,
+ bottomframe=off,
+ leftframe=on,
+ rightframe=on,
+ height=1.2\baselineskip
+ ]
+ \setupTABLE[row][1][
+ align=middle,
+ style=\ttbf,
+ bottomframe=on,
+ leftframe=off,
+ rightframe=off
+ ]
+ \setupTABLE[row][3][bottomframe=on]
+ \setupTABLE[row][5][bottomframe=on]
+ \setupTABLE[column][2][bottomframe=off, width=1em]
+ \setupTABLE[column][4][bottomframe=off, width=1em]
+ \startTABLE
+ \NC keep \NC\NC split \NC\NC warn \NC\NR
+ \NC \NC\NC \NC\NC \heading \NC\NR
+ \NC \NC\NC \heading \NC\NC \lineone \NC\NR
+ \NC \heading \NC\NC \lineone \NC\NC \linetwo \NC\NR
+ \NC \lineone \NC\NC \linetwo \NC\NC \linethree \NC\NR
+ \stopTABLE
+\stopbuffer
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.bib b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.bib
new file mode 100644
index 0000000000..9a8d174df7
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.bib
@@ -0,0 +1,80 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+@book{texbook,
+ author = {Donald E. Knuth},
+ title = {The \TeX{}Book},
+ year = {2020},
+ publisher = {Addison--Wesley},
+ url = {https://ctan.org/pkg/texbook}
+}
+
+@book{elements,
+ title = {The Elements of Typographic Style},
+ author = {Robert Bringhurst},
+ edition = {3rd},
+ publisher = {Hartley \& Marks},
+ year = {2004},
+}
+
+@article{global,
+ doi = {10.1111/coin.12165},
+ year = {2018},
+ month = mar,
+ publisher = {Wiley},
+ volume = {35},
+ number = {2},
+ pages = {242--284},
+ author = {Frank Mittelbach},
+ title = {A general framework for globally optimized pagination},
+ journal = {Computational Intelligence}
+}
+
+@phdthesis{plass,
+ title={Optimal pagination techniques for automatic typesetting systems},
+ author={Plass, Michael Frederick},
+ year={1981},
+ school={Stanford University},
+ urlnewline=1,
+ url={https://tug.org/docs/plass/plass-thesis.pdf}
+}
+
+@article{tugboat1,
+ title={Automatically removing widows and orphans with
+ {\tt lua-widow-control}},
+ author={Chernoff, Max},
+ journal={TUGboat},
+ volume={43},
+ number={1},
+ year={2022},
+ month=may,
+ pages={28--39},
+ DOI={10.47397/tb/43-1/tb133chernoff-widows},
+}
+
+@article{tugboat2,
+ title={Updates to \sans{lua-widow-control}},
+ author={Chernoff, Max},
+ journal={TUGboat},
+ volume={43},
+ number={3},
+ pages={340--342},
+ year={2022},
+ month=nov,
+ DOI={10.47397/tb/43-3/tb135chernoff-lwc},
+}
+
+@article{zpravodaj,
+ title={Automatically removing widows and orphans with
+ \sans{lua-widow-control}},
+ author={Chernoff, Max},
+ journal={Zpravodaj Československého sdružení uživatelů TeXu},
+ volume={2022},
+ number={1--4},
+ pages={49--76},
+ year={2022},
+ month=nov,
+ DOI={10.5300/2022-1-4/49},
+}
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.mkxl b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.mkxl
new file mode 100644
index 0000000000..9d74e40590
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.mkxl
@@ -0,0 +1,371 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\startenvironment[lwc-manual]
+\unprotect
+
+\mainlanguage[en]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Font Selection %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\startluacode
+fonts.handlers.otf.addfeature {
+ name = "emdash_kern", -- Increase sidebearings on em-dash
+ type = "single",
+ data = {
+ ["—"] = { 100, 0, 200, 0 },
+ }
+}
+\stopluacode
+
+\definefontfeature[default][default][
+ protrusion=quality,
+ expansion=quality,
+ onum=yes,
+ script=latn,
+ emdash_kern=yes,
+ trep=yes,
+]
+\setupalign[hz, hanging]
+
+\definefontfeature[lining][onum=no,lnum=yes]
+\definefontfeature[allsmall][c2sc=yes, smcp=yes]
+\define\lining{\feature[+][lining]}
+
+\starttypescript[lwc-fonts]
+ \definetypeface[lwc-fonts] [rm] [serif][pagella] [default]
+ \definetypeface[lwc-fonts] [ss] [sans] [libertinus] [default] [rscale=1.07]
+ \definetypeface[lwc-fonts] [tt] [mono] [plex] [default] [rscale=0.89]
+ \definetypeface[lwc-fonts] [mm] [math] [pagella] [default]
+\stoptypescript
+
+\setupbodyfont[lwc-fonts, 11pt]
+
+\setupbodyfontenvironment[default][em=italic]
+
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Page Layout %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\setuppapersize[letter]
+
+\setupindenting[yes, 3em]
+\setupinterlinespace[2.75ex]
+
+\input lang-frq.mkxl % For \averagecharwidth
+
+\setuplayout[
+ width=75\averagecharwidth,
+ backspace=\dimexpr(\paperwidth - \makeupwidth) / 2,
+ topspace=\dimexpr\backspace - \headerheight,
+ footerdistance=3\baselineskip,
+ footer=\baselineskip,
+ height=8.75in,
+ margin=\dimexpr\backspace - \margindistance - 0.25cm,
+]
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% PDF Settings %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+% PDF/UA
+\setupbackend[format=PDF/UA-1]
+\setupinteraction[state=start, focus=standard]
+\setuptagging[state=start]
+\setupstructure[state=start, method=auto]
+
+% Bookmarks
+\placebookmarks[section, subsection][section, subsection][number=no]
+\setupinteractionscreen[option=bookmark]
+
+%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Formatting %%%%%
+%%%%%%%%%%%%%%%%%%%%%%
+
+\setuppagenumbering[location=footer, style=\ss\lining]
+\let\old@tex=\tex
+\def\tex#1{\expandafter\old@tex\normalexpanded{{#1}}} % Allow expansion in the \tex macro (for \allowbreak)
+
+% Acronym styling
+\definecharacterkerning[acronymkerning][factor=0.05]
+\definealternativestyle[acronymstyle][{\feature[+][allsmall]\switchtobodyfont[1.2em]\setcharacterkerning[acronymkerning]}][]
+\definehighlight[acronym][style=acronymstyle]
+
+\startsetups[commandtable]
+ \setupTABLE[frame=off]
+ \setupTABLE[column][first][roffset=1.5em]
+ \setupTABLE[row][first][toffset=0.25ex]
+\stopsetups
+
+\startsetups[booktabs]
+ \setupTABLE[each][each][frame=off]
+ \setupTABLE[row][first][topframe=on, rulethickness=1.2bp]
+ \setupTABLE[row][2] [topframe=on, rulethickness=0.6bp]
+ \setupTABLE[row][last] [bottomframe=on, rulethickness=1.2bp]
+ \setupTABLE[column][first][loffset=0.5em]
+ \setupTABLE[column][last][roffset=0.5em]
+\stopsetups
+
+\setupitemize[each][
+ style=\lining,
+ inbetween={\blank[quarterline]},
+]
+\setupcaptions[
+ headstyle=\ssbf\lining,
+ style=\ss,
+]
+
+\setupdelimitedtext[blockquote][
+ style=\ss,
+ before=\noindentation,
+ after={\blank[medium]}
+]
+
+\define[1]\meta{\m{\langle}\italic{#1}\m{\rangle}}
+\define[1]\githubissue{\goto{(Issue~\##1)}[url(https://github.com/gucci-on-fleek/lua-widow-control/issues/#1)]}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Section Commands %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\definecharacterkerning[titlekern][factor=0.2]
+
+\protected\def\interwordspace{\scaledfontdimen2\font}
+
+% Section
+\startsetups[style:section]
+ \setcharacterkerning[titlekern]
+ \switchtobodyfont[adventor]
+ \WORD
+ \bfb
+ \feature[+][allsmall]
+ \interwordspace=0.4em
+ \veryraggedcenter
+\stopsetups
+
+\setuphead[section][
+ before={\blank[big, preference]},
+ after={\blank[medium, samepage]},
+ textstyle=\setups{style:section},
+ number=no,
+]
+
+% Subsection
+\setuphead[subsection][
+ before={\blank[medium, preference]},
+ after=,
+ textstyle=\ss,
+ alternative=margintext,
+ number=no,
+]
+
+% TOC
+\def\secondleveltoc{subsection}
+\starttexdefinition protected SectionTOCcommand #1#2#3
+ \startcurrentlistentrywrapper % Make the whole line a link
+ \midaligned{ % Have the title and page number "glued" to the middle
+ \llap{\currentlistentrytitle}
+ \hskip 1em
+ \rlap{\color[\interactionparameter{color}]{\bf \currentlistentrypagenumber}}
+ }
+ \stopcurrentlistentrywrapper
+
+ \par
+ \nobreak
+
+ \setbox0=\vbox{\framedtext[ % Align the subsection titles under the section title
+ frame=off,
+ width=\dimexpr\textwidth/2 - 0.5em,
+ align={flushright, wide},
+ offset=none,
+ toffset=-\lineheight,
+ ]{
+ \global\firstsubsectiontrue
+ \placelist[\secondleveltoc][criterium=local]
+ }}
+ \iffirstsubsection
+ \blank[quarterline] % No subsections here
+ \else
+ \box0
+ \fi
+
+ \goodbreak
+\stoptexdefinition
+
+\newif\iffirstsubsection
+
+\define\tocspace{\hskip 0.5em plus 0.5em minus 0.2em\relax}
+
+\unexpanded\def\toc_link#1{%
+ \startcurrentlistentrywrapper%
+ \hbox{#1}%
+ \stopcurrentlistentrywrapper%
+}
+
+\starttexdefinition protected SubsectionTOCcommand #1#2#3
+ \ss\itx
+ \dontleavehmode
+ \iffirstsubsection
+ \global\firstsubsectionfalse
+ \toc_link{#2}
+ \else
+ \discretionary{}{
+ \toc_link{#2} % No interpunct if the line splits here
+ }{
+ \tocspace{\bfa·}\tocspace\toc_link{#2}
+ }
+ \fi
+\stoptexdefinition
+
+\setupcombinedlist[content][list=section]
+\setuplist[section][
+ alternative=command,
+ command=\SectionTOCcommand,
+]
+
+\setuplist[subsection][
+ alternative=command,
+ command=\SubsectionTOCcommand,
+]
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Title Block %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\setupdocument[
+ title={},
+ author={},
+ version={},
+ ctan={},
+ github={},
+]
+
+\startluacode
+local function strip_url(str)
+ local url_table = url.hashed(str)
+ url_table.fragment = nil
+ url_table.scheme = nil
+ url_table.authority = url_table.authority:gsub("^www%.", "")
+ tex.sprint(-2, url.decode(url.construct(url_table)))
+end
+
+interfaces.implement {
+ name = "strip_url",
+ actions = strip_url,
+ arguments = "1 string"
+}
+\stopluacode
+
+\define[1]\strippedurl{%
+ \goto{\tt\hyphenatedurl{\clf_strip_url{#1}}}[url(#1)]
+}
+
+\startsetups[titleblock]
+ \startalignment [middle]
+ \begingroup
+ \setups[style:section]\bfc
+ \documentvariable{title}
+ \par
+ \endgroup
+
+ \blank[big]
+
+ \begingroup
+ \ssa\lining
+ \documentvariable{author}
+ \blank[medium]
+ v\,\documentvariable{version}
+ \par
+ \endgroup
+
+ \dontleavehmode
+ \blackrule[depth=-0.25\baselineskip, height=\dimexpr0.25\baselineskip + 0.4pt, width=8em]
+ \par
+
+ \doifdocumentvariable{ctan}{
+ \strippedurl{\documentvariable{ctan}}
+ }
+ \doifdocumentvariable{github}{
+ \strippedurl{\documentvariable{github}}
+ }
+ \blank[big]
+
+ \noindentation
+ \stopalignment
+\stopsetups
+
+\startsetups[document:start]
+ \setup[titleblock]
+
+ \setupinteraction[
+ title=\documentvariable{title},
+ author=\documentvariable{author},
+ ]
+\stopsetups
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Bibliography %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%
+\usebtxdefinitions[apa]
+
+\resetsetups[apa:list:sameauthor]
+
+\setupbtx[apa:list][
+ stopper:initials=,
+ separator:initials=\btxnbsp,
+ interaction=start,
+]
+
+\setupbtxlabeltext[en][
+ apa:Retrieved={}
+]
+
+\setupbtxrendering[apa][
+ numbering=yes,
+ sorttype=used,
+]
+
+\setupbtx[apa:cite][alternative=num]
+
+\defineshift[citeshift][
+ method=0,
+ dy=-1,
+ unit=ex,
+ continue=yes,
+ style=\tfx\lining,
+]
+
+\setupbtx[apa:cite:num][
+ command=\citeshift,
+ left=,
+ right=,
+ separator:2=\citeshift{,\,},
+ separator:3=\citeshift{--}
+]
+
+\setupbtxlist[apa][
+ alternative=a,
+ before=,
+ after={\blank[quarterline]},
+ style=\lining,
+ margin=0pt,
+ width=1.5em,
+]
+
+\starttexdefinition mutable protected btx:apa:url
+ \strippedurl{\clf_btxflush{\currentbtxdataset}{\currentbtxtag}{url}
+ }
+\stoptexdefinition
+
+\define[1]\lwc_doi{\goto{\acronym{DOI:}\,\tt\hyphenatedurl{#1}}[url(https://dx.doi.org/#1)]}
+\starttexdefinition mutable protected btx:apa:doi
+ \lwc_doi{\clf_btxflush{\currentbtxdataset}{\currentbtxtag}{doi}}
+\stoptexdefinition
+
+\protect
+\stopenvironment
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.tex b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.tex
new file mode 100644
index 0000000000..ef46472225
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-manual.tex
@@ -0,0 +1,949 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\doifnot{\contextmark}{LMTX}{
+ \errhelp{LMTX/MkXL is required to compile this file.}
+ \errmessage{Fatal error, exiting.}
+}
+
+\environment lwc-manual
+
+\usemodule[lua-widow-control]
+\usebtxdataset[\jobname.bib]
+
+\useURL[projecturl][https://github.com/gucci-on-fleek/lua-widow-control]
+\useURL[download][https://github.com/gucci-on-fleek/lua-widow-control/releases/latest]
+\useURL[ctan][https://www.ctan.org/pkg/lua-widow-control]
+
+% Abbreviations
+\def\lwc/{\sans{lua-\allowbreak widow-\allowbreak control}}
+\def\Lwc/{\sans{Lua-\allowbreak widow-\allowbreak control}}
+\def\estretch/{\tex{emergency\allowbreak stretch}}
+\def\openalty/{\tex{output\allowbreak penalty}}
+\def\waos/{widows and orphans}
+\def\wao/{widow and orphan}
+\def\woo/{widow or orphan}
+\def\mkxl/{\ConTeXt~Mk\acronym{XL}}
+\def\mkiv/{\ConTeXt~Mk\acronym{IV}}
+\define\OpTeX{Op\kern-.05em\TeX}
+\def\LuaMeta{Lua\-Meta\-}
+\def\LuaMetaTeX{\LuaMeta\TeX}
+\def\plainop/{Plain~\TeX{}/\OpTeX{}}
+\let\q=\quotation
+
+\def\titlecite[#1]{\cite[title][#1]\cite[#1]}
+
+\definetype[inlineTEX][option=tex, escape={$,$}, lines=hyphenated]
+\definetype[inlineLUA][option=lua, escape={$,$}, lines=hyphenated]
+
+\input lwc-manual-samples
+
+\definecolor[expanded][r=0.00, g=0.70, b=0.25]
+\definecolor[failure] [r=0.90, g=0.00, b=0.25]
+\definecolor[moved] [r=0.25, g=0.25, b=1.00]
+\definecolor[cost] [r=0.50, g=0.50, b=0.50]
+
+\usemodule[markdown]
+\define[4]\markdownRendererLinkPrototype{\goto{#1}[url(#3)]}
+\def\markdownOptionHtml{true}
+\def\markdownOptionShiftHeadings{1}
+\startluacode
+ interfaces.implement {
+ name = "markdownRendererHeadingThreePrototype",
+ public = true,
+ arguments = { "string" },
+ actions = function (str)
+ context.subsection {
+ title = str,
+ list = str:match "v%d+%.%d+%.%d+"
+ }
+ end
+ }
+\stopluacode
+
+\startdocument[
+ title=lua-widow-control,
+ author=Max Chernoff,
+ version=3.0.0, %%version
+ github=https://github.com/gucci-on-fleek/lua-widow-control,
+ ctan=https://www.ctan.org/pkg/lua-widow-control,
+]
+
+\Lwc/ is a Plain~\TeX/\LaTeX/\ConTeXt{}/\OpTeX{} package that removes \waos/ without any user intervention. Using the power of \LuaTeX{}, it does so \emph{without} stretching any glue or shortening any pages or columns. Instead, \lwc/ automatically lengthens a paragraph on a page or column where a \woo/ would otherwise occur.
+
+\section{Quick Start}
+Ensure that your \TeX~Live/Mik\TeX{} distribution is up-to-date. Then, \LaTeX{} users just need to place \inlineTEX{\usepackage{lua-widow-control}} in the preamble of their document. For more details, see the \goto{Usage sections}[sec:usage].
+
+\subject{Contents}
+\placecontent[criterium=all]
+
+\section{Preliminaries}
+
+This manual begins with a brief introduction to widows, orphans, and \lwc/. For an extended introduction and discussion of these topics, please see the \emph{Zpravodaj} article\cite[zpravodaj] distributed with this manual (Links: \goto{local}[lwc-zpravodaj::], \goto{\acronym{CTAN}}[url(http://mirrors.ctan.org/macros/luatex/generic/lua-widow-control/lwc-zpravodaj.pdf)], \goto{GitHub}[url(https://github.com/gucci-on-fleek/lua-widow-control/releases/latest/download/lwc-zpravodaj.pdf)]). This same material is also available in two \emph{TUGboat} articles\cite[tugboat1, tugboat2] (Links: \goto{local}[tb133chernoff-widows::], \goto{\acronym{CTAN}}[url(http://mirrors.ctan.org/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf)], \goto{GitHub}[url(https://github.com/gucci-on-fleek/lua-widow-control/releases/latest/download/tb133chernoff-widows.pdf)]) if you prefer. You can also skip ahead to the \goto{installation instructions on \at{page}[sec:install]}[sec:install] or the \goto{usage section starting at \at{page}[sec:usage]}[sec:usage].
+
+\section[sec:motivation]{Motivation}
+
+Unmodified \TeX{} has only two familiar ways of dealing with \waos/: it can
+either shorten a page by one line, or it can stretch vertical
+whitespace. \TeX{} was designed for mathematical and scientific typesetting,
+where a typical page has multiple section headings, tables, figures, and
+equations. For this style of document, \TeX's default behaviour works quite
+well, since the slight stretching of whitespace between the various document
+elements is nearly imperceptible; however, for prose or other documents
+composed almost entirely of paragraphs, there is little vertical whitespace
+to stretch.
+
+\Lwc/ offers an alternative method of removing \waos/: instead of shortening a page or stretching vertical whitespace, \lwc/ simply chooses a paragraph to lengthen by one~line such that the \woo/ is eliminated.
+
+\section{Widows and Orphans}
+\subsection{Widows}
+A \q{widow} occurs when the majority of a paragraph is on one page or column,
+but the last line is on the following page or column. It not only looks
+quite odd for a lone line to be at the start of the page, but it makes a
+paragraph harder to read since the separation of a paragraph and
+its last line disconnects the two, causing the reader to lose context for
+the widowed line.
+
+\subsection{Orphans}
+An \q{orphan} occurs when the first line of a paragraph is at the end
+of the page or column preceding the remainder of the paragraph. They are not
+as distracting for the reader, but they are still not ideal.
+Visually, \waos/ are about equally disruptive; however, orphans tend not to
+decrease the legibility of a text as much as widows, so some authors choose
+to ignore them.
+
+\subsection{Broken Hyphens}
+\q{Broken} hyphens occur whenever a page break occurs in a
+hyphenated word. These are not related to \waos/; however,
+breaking a word across two pages is at least as disruptive for the reader
+as \waos/. \TeX{} identifies broken hyphens in the same ways as \waos/, so
+\lwc/ treats broken hyphens in the same way.
+
+\startplacefigure[location={here, top, bottom}, title={A visual comparison of \waos/.}, reference=tab:widow]
+ \getbuffer[widow-orphan]
+\stopplacefigure
+
+\section{\TeX's Pagination}
+\subsection{Algorithm}
+It is tricky to understand how \lwc/ works if you aren't familiar with how
+\TeX{} breaks pages and columns. For a full description, you should
+consult Chapter~15 of \titlecite[texbook] (\q{How \TeX{} Makes Lines
+into Pages}); however, this goes into much more detail than most users
+require, so here is a \emph{very} simplified summary of \TeX{}'s page
+breaking algorithm:
+
+\TeX{} fills the page with lines and other objects until the next object
+will no longer fit. Once no more objects will fit, \TeX{} will align the
+bottom of the last line with the bottom of the page by stretching any
+available vertical spaces if (in \LaTeX) \tex{flushbottom} is set;
+otherwise, it will
+break the page and leave the bottom empty.
+
+However, some objects have \q{penalties} attached. Penalties encourage or
+discourage page breaks from occurring at specific places. For example,
+\LaTeX{} sets a negative penalty before section headings to encourage a
+page break there; conversely, it sets a positive penalty after section
+headings to discourage breaking.
+
+To reduce \waos/, \TeX{} sets weakly-positive penalties between the
+first and second lines of a paragraph to prevent orphans, and between the
+penultimate and final lines to prevent widows.
+
+\subsection{Behaviour}
+
+Due to these \q{penalties} attached to \waos/, \TeX{} tries to avoid
+creating them. Widows and orphans with small penalties attached---like
+\LaTeX's default values of 150---are only lightly coupled to the rest
+of the paragraph, while \waos/ with large penalties---values of
+10\,000 or more---are treated as infinitely bad and are thus
+unbreakable. Intermediate values behave just as you would expect,
+discouraging page breaks proportional to their value.
+
+However, when these lines are moved as a group, \TeX{} will have to make a page or column with less lines. \about[sec:demo] goes into further detail about how \TeX{} deals with these too-short pages or columns.
+
+\startpostponing
+\startTEXpage[
+ align=normal,
+ width=100cm,
+ autowidth=force,
+ offset=5pt,
+ pagestate=start,
+]
+ \veryraggedcenter
+ \setupTABLE[row][first][style=\ssbf, align=middle]
+ \setupTABLE[frame=off, offset=5pt]
+ \startTABLE
+ \NC Ignore
+ \NC Shorten
+ \NC Stretch
+ \NC \Lwc/ \NC\NR
+
+ \NC \typesetbuffer[ignore][frame=on,page=1]
+ \NC \typesetbuffer[shorten][frame=on,page=1]
+ \NC \typesetbuffer[stretch][frame=on,page=1]
+ \NC \typesetbuffer[lwc][frame=on,page=1]
+ \NC\NR
+
+ \NC \typesetbuffer[ignore][frame=on,page=2]
+ \NC \typesetbuffer[shorten][frame=on,page=2]
+ \NC \typesetbuffer[stretch][frame=on,page=2]
+ \NC \typesetbuffer[lwc][frame=on,page=2]
+ \NC\NR
+
+ \NC \typebuffer[ignore-code][option=TEX]
+ \NC \typebuffer[shorten-code][option=TEX]
+ \NC \typebuffer[stretch-code][option=TEX]
+ \NC \typebuffer[lwc-code][option=TEX]
+ \NC\NR
+ \stopTABLE
+
+ \placefloatcaption[table][reference=tab:demo, title={A visual comparison of various automated widow handling techniques.}]
+\stopTEXpage
+\stoppostponing
+
+\section[sec:demo]{Demonstration}
+
+Although \TeX{}'s page breaking algorithm is reasonably
+straightforward, it can lead to
+complex behaviour when \waos/ are involved. The usual
+choices, when rewriting is not possible, are to ignore them,
+stretch some glue, or shorten the
+page. \in{Table}[tab:demo] has a visual comparison of these
+options, which we'll discuss in the following:
+
+\subsection{\q{Ignore}}
+
+As you can see, the last line of the page is on a separate page from the
+rest of its paragraph, creating a widow. This is usually highly
+distracting for the reader, so it is best avoided for the reasons previously
+discussed.
+
+\subsection{\q{Shorten}}
+
+This page did not leave any widows, but it did shorten the previous page
+by one line. Sometimes this is acceptable, but usually it looks bad because
+pages will then have different text-block heights. This can make the pages
+look quite uneven, especially when typesetting with columns or in a book
+with facing pages.
+
+\subsection{\q{Stretch}}
+
+This page also has no widows and it has a flush bottom margin. However,
+the space between each pair of paragraphs had to be stretched.
+
+If this page had many equations, headings, and other elements with
+natural space between them, the stretched out space would be much less
+noticeable. \TeX{} was designed for mathematical typesetting, so it makes
+sense that this is its default behaviour. However, in a page with mostly
+text, these paragraph gaps look unsightly.
+
+Also, this method is incompatible with grid typesetting, where
+all glue stretching must be quantised to the height of a line.
+
+\subsection{\q{\lwc/}}
+
+\Lwc/ has none of these issues: it eliminates the widows in a document
+while keeping a flush bottom margin and constant paragraph spacing.
+
+To do so, \lwc/ lengthened the second paragraph by one line. If you look
+closely, you can see that this stretched the interword spaces. This
+stretching is noticeable when typesetting in a narrow text block, but
+is mostly imperceptible with larger widths.
+
+\Lwc/ automatically finds the \q{best} paragraph to stretch, so the
+increase in interword spaces should almost always be minimal.
+
+\section[sec:install]{Installation}
+Most up-to-date \TeX~Live and Mik\TeX{} systems should already have \lwc/ installed. However, a manual installation may occasionally be required.
+
+\subsection{\TeX~Live}
+Run \type{tlmgr install lua-widow-control} in a terminal, or install using the \q{\TeX~Live Manager} \acronym{GUI}.
+
+\subsection{Mik\TeX}
+Run \type{mpm --install=lua-widow-control} in a terminal, or install using the \q{Mik\TeX{} Maintenance} \acronym{GUI}.
+
+\subsection{Manual}
+Currently, \mkxl/ (\LuaMetaTeX{}) users must manually install the package. Most other users will be better served by using the \lwc/ supplied by \TeX~Live and Mik\TeX{}; however, all users may manually install the package if desired. The procedure should be fairly similar regardless of your \acronym{OS}, \TeX{} distribution, or format.
+
+\subsection{Steps}
+\startitemize[N]
+ \item Download \type{lua-widow-control.tds.zip} from \goto{\acronym{CTAN}}[url(ctan)], \goto{GitHub}[url(download)] or the \goto{\ConTeXt{}~Garden}[url(https://modules.contextgarden.net/cgi-bin/module.cgi/action=view/id=127)].
+ \item Unzip the release into your \type{TEXMFLOCAL/} directory. (You can find its location by running \type{kpsewhich --var-value TEXMFHOME} in a terminal)
+ \item Refresh the filename database: \startitemize[1]
+ \item \ConTeXt: \type{mtxrun --generate}
+ \item \TeX~Live: \type{mktexlsr}
+ \item Mik\TeX: \type{initexmf --update-fndb}
+ \stopitemize
+\stopitemize
+
+\section{Dependencies}
+\Lwc/ does have a few dependencies; however, these will almost certainly be met by all but the most minimal of \TeX{} installations.
+
+\subsection{Plain~\TeX{}}
+\Lwc/ requires \LuaTeX{} ($\ge$ 0.85) and the most recent version of \sans{luatexbase} (2015/10/04). Any version of \TeX~Live $\ge$ 2016 will meet these requirements.
+
+\subsection{\LaTeX{}}
+\Lwc/ requires \LuaTeX{} ($\ge$ 0.85), \LaTeX{} ($\ge$ 2020/10/01), and \sans{microtype} (any version). Any version of \TeX~Live $\ge$ 2021 will meet these requirements.
+
+\Lwc/ also supports a \q{legacy} mode for older \LaTeX{} kernels. This uses an older version of the \LaTeX{} code while still using the most recent Lua code. This mode requires \LuaTeX{} ($\ge$ 0.85), \LaTeX{} ($\ge$ 2015/01/01), \sans{microtype} (any version), and \sans{etoolbox} (any version). Any version of \TeX~Live $\ge$ 2016 will meet these requirements.
+
+Please note that when running in legacy mode, you cannot use the key--value interface. This legacy interface is undocumented, but mostly the same as the \q{Plain~\TeX{}} interface.
+
+\subsection{\ConTeXt{}}
+\Lwc/ supports both \mkxl/ (\LuaMetaTeX{}) and \mkiv/ (\LuaTeX{}).
+
+\subsection{\OpTeX{}}
+\Lwc/ works with any version of \OpTeX{} and has no dependencies.
+
+\subsection{LuaMeta\TeX{}}
+
+\Lwc/ has preliminary support for LuaMeta\LaTeX{} and LuaMetaPlain. All features should work identically to the \LuaTeX{}-based version, although there are a few minor bugs. You should always make sure to use the latest engine, format, and \lwc/ since these formats are under rapid development.
+
+
+\section[sec:usage]{Loading the Package}
+
+\startTABLE[setups=commandtable]
+ \NC Plain~\TeX{}
+ \NC\inlineTEX{\input lua-widow-control}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\usepackage{lua-widow-control}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\usemodule[lua-widow-control]}
+ \NC\NR
+ \NC \OpTeX{}
+ \NC\inlineTEX{\load[lua-widow-control]}
+ \NC\NR
+\stopTABLE
+
+\section{Options}
+
+\Lwc/ is automatically enabled with the default settings as soon as you load it. Most users should not need to configure \lwc/; however, the packages provides a few commands.
+
+\subsection{Overview}
+
+\LaTeX{} users can set the options either when loading the package (\inlineTEX{\usepackage[$\meta{options}$]{lua-widow-control}}) or at any point using \inlineTEX{\lwcsetup{$\meta{options}$}}.
+
+\ConTeXt{} users should use the \inlineTEX{\setuplwc[$\meta{options}$]} command for setting options at any point.
+
+Plain~\TeX{} and \OpTeX{} are a little different. Some options require you to set a register (i.e., \inlineTEX{\lwcemergencystretch = $\meta{dimension}$}), while others use macro arguments (i.e., \inlineTEX{\lwcnobreak{$\meta{option}$}}).
+
+\subsection{Disabling}
+
+You may want to disable \lwc/ for certain portions of your
+document. You can do so with the following commands:
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcdisable}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{disable}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[state = stop]}
+ \NC\NR
+\stopTABLE
+
+This prevents \lwc/ from stretching any paragraphs that follow. If a page
+has earlier paragraphs where \lwc/ was still enabled and a \woo/ is
+detected, \lwc/ will still attempt to remove the \woo/.
+
+\subsection{Enabling}
+
+\Lwc/ is enabled as soon as the package is loaded. If you
+have previously disabled it, you will need to re-enable it to save new paragraphs.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcenable}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{enable}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[state = start]}
+ \NC\NR
+\stopTABLE
+
+\subsection{Automatically disabling}
+
+You may want to disable \lwc/ for certain commands where
+stretching is undesirable such as section headings. Of course, manually
+disabling and
+then enabling \lwc/ multiple times
+throughout a document would quickly become tedious, so \lwc/ provides
+some options to do this automatically for you.
+
+\Lwc/ automatically patches the default \LaTeX{}, \ConTeXt{},
+Plain~\TeX{}, \OpTeX{}, \sans{memoir}, \sans{\acronym{KOMA}-Script}, and
+\sans{titlesec} section commands, so you don't need to patch these.
+Any others, though, you'll need to patch yourself.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC \inlineTEX{\lwcdisablecmd $\meta{\backslash macro}$}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC \inlineTEX{\lwcsetup{disablecmds = {$\meta{macronameone}$, $\meta{macronametwo}$}}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC \inlineTEX{\prependtoks\lwc$\hskip-0.5em\relax$@patch@pre\to\everybefore$\hskip-0.5em\relax\meta{hook}$}
+ \NC\NR\NC\NC \inlineTEX{\prependtoks\lwc$\hskip-0.5em\relax$@patch@pre\to\everyafter$\hskip-0.5em\relax\meta{hook}$}
+ \NC\NR
+\stopTABLE
+
+The Plain~\TeX{}, \OpTeX{}, and \ConTeXt{} commands \emph{append} to the list of patched commands: they simply patch the provided commands while leaving the original patches in place. The \LaTeX{} option \emph{sets} the list of patched commands: it replaces the default list with the provided list.
+
+\subsection{\estretch/}
+
+\Lwc/ defaults to an \estretch/ value of 3~em for stretched paragraphs,
+but you can configure this.
+
+\Lwc/ will only use the \estretch/ when it cannot lengthen a paragraph
+in any other way, so it is fairly safe to set this to a large value.
+\TeX{} accumulates badness when \estretch/ is
+used, so it's pretty rare that a paragraph that
+requires any \estretch/ will actually be used on the page.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcemergencystretch = $\meta{dimension}$}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{emergencystretch = $\meta{dimension}$}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[emergencystretch = $\meta{dimension}$]}
+ \NC\NR
+\stopTABLE
+
+\subsection{Penalties}
+
+You can also manually adjust the penalties that \TeX{} assigns to \waos/.
+Usually, the defaults are fine, but there are a few circumstances where you
+may want to change them.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\widowpenalty = $\meta{integer}$}
+ \NC\NR\NC\NC\inlineTEX{\clubpenalty = $\meta{integer}$}
+ \NC\NR\NC\NC\inlineTEX{\brokenpenalty = $\meta{integer}$}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{widowpenalty = $\meta{integer}$}}
+ \NC\NR\NC\NC\inlineTEX{\lwcsetup{orphanpenalty = $\meta{integer}$}}
+ \NC\NR\NC\NC\inlineTEX{\lwcsetup{brokenpenalty = $\meta{integer}$}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[widowpenalty = $\meta{integer}$]}
+ \NC\NR\NC\NC\inlineTEX{\setuplwc[orphanpenalty = $\meta{integer}$]}
+ \NC\NR\NC\NC\inlineTEX{\setuplwc[brokenpenalty = $\meta{integer}$]}
+ \NC\NR
+\stopTABLE
+
+The value of these penalties determines how much \TeX{} should attempt
+to stretch glue before passing the \woo/ to \lwc/. If you set the values to~1
+(default), \TeX{} will stretch nothing and immediately trigger \lwc/;
+if you set the values to 10\,000, \TeX{} will stretch infinitely and
+\lwc/ will never be triggered. If you set the value to some intermediate
+number, \TeX{} will first attempt to stretch some glue to remove the \woo/;
+only if it fails will \lwc/ come in and lengthen a paragraph. As a special
+case, if you set the values to~0, both \TeX{} and \lwc/ will completely
+ignore the \woo/.
+
+\Lwc/ will pick up on the values of \tex{widowpenalty}, \tex{clubpenalty}, and
+\tex{brokenpenalty} regardless of how you set them, so the use of these
+dedicated keys is entirely optional.
+
+\subsection{\tex{nobreak} Behaviour}
+
+When \lwc/ encounters an orphan, it removes it by moving the orphaned
+line to the next page. The majority of the time, this is an appropriate
+solution. However, if the orphan is immediately preceded by a section
+heading (or \tex{nobreak}\slash\tex{penalty 10000}), \lwc/ would na\"ively separate a section heading from
+the paragraph that follows. This is almost always undesirable, so \lwc/
+provides some options to configure this.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcnobreak{$\meta{value}$}}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{nobreak = $\meta{value}$}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[nobreak = $\meta{value}$]}
+ \NC\NR
+\stopTABLE
+
+The default value, \type{keep}, \emph{keep}s the section heading with
+the orphan by moving both to the next page. The advantage to this option
+is that it removes the orphan and retains any \tex{nobreak}s; the
+disadvantage is that moving the section heading can create a large blank
+space at the end of the page.
+
+The value \type{split} \emph{split}s up the section heading and the
+orphan by moving the orphan to the next page while leaving the heading
+behind. This is usually a bad idea, but exists for the sake of
+flexibility.
+
+The value \type{warn} causes \lwc/ to give up on the page and do nothing,
+leaving an orphaned line. \Lwc/ \emph{warn}s the user so that they can
+manually remove the orphan.
+
+\startplacefigure[location={here, top, bottom}, title={A visual comparison of the various \type{nobreak} options, where each box represents a different page.}, reference=tab:nobreak]
+ \getbuffer[nobreak]
+\stopplacefigure
+
+\subsection{Maximum Cost}
+
+\Lwc/ ranks each paragraph on the page by how much it would \q{cost} to
+lengthen that paragraph. By default, \lwc/ selects the paragraph on
+the page with the lowest cost; however, you can configure it to only
+select paragraphs below a selected cost.
+
+If there aren't any paragraphs below the set threshold, then \lwc/ won't
+remove the \woo/ and will instead issue a warning.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcmaxcost = $\meta{integer}$}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{max-cost = $\meta{integer}$}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[maxcost = $\meta{integer}$]}
+ \NC\NR
+\stopTABLE
+
+Based on my testing, \type{max-cost} values less than 1\,000
+cause completely imperceptible changes in interword spacing; values less
+than 5\,000 are only noticeable if you are specifically trying to pick out the
+expanded paragraph on the page; values less than 15\,000 are typically
+acceptable; and larger values may become distracting. \Lwc/ defaults to an
+infinite \type{max-cost}, although the \q{strict} and \q{balanced} modes
+sets the values to~5\,000 and 10\,000 respectively.
+
+\Lwc/ uses a \q{cost function} $C$ that is initially defined as \startformula
+ C = \frac{d}{\sqrt{l}}
+\stopformula where $d$ is the total demerits of the paragraph, and $l$ is the number of lines in the paragraph.
+
+\subsection{Draft Mode}
+
+\setuplwc[draft=start]
+\definecolor[lwc_expanded][s=0]
+\definecolor[lwc_failure][s=0]
+\definecolor[lwc_moved][s=0]
+You can use the draft mode to visualize how \lwc/ processes pages. Any \color[failure]{remaining widows and orphans will be coloured red}, any \color[expanded]{expanded paragraphs will be coloured green}, and any \color[moved]{lines moved to the next page will be coloured blue}. In addition, the \color[cost]{cost of each paragraph is shown in the right margin} as it is here.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcdraft 1}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{draft}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[draft = start]}
+ \NC\NR
+\stopTABLE
+
+Advanced users may also customize the colours used by modifying the \inlineLUA{lwc.colours} table. The table keys are currently \type{expanded}, \type{failure}, \type{moved}, and \type{cost}. The table values are \acronym{RGB} 3-tuples, where each element is a float between zero and one.
+
+You can also show or hide the costs and colours independently of each other.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcshowcosts 1}
+ \NC\NR\NC\NC\inlineTEX{\lwcshowcolours 1}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{showcosts = true}}
+ \NC\NR\NC\NC\inlineTEX{\lwcsetup{showcolours = true}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[showcosts = start]}
+ \NC\NR\NC\NC\inlineTEX{\setuplwc[showcolours = start]}
+ \NC\NR
+\stopTABLE
+
+Plain~\TeX{} users will need to modify their output routines to be able to see the costs. Before you ship out the page, you should call \inlineTEX{\lwcpreshipout} with a box number as its argument. For example, here is some sample code to correctly reproduce the standard Plain~\TeX{} output routine:
+
+\startTEX
+\newbox\tempshipoutbox
+\output={
+ \setbox\tempshipoutbox=\vbox{
+ \makeheadline
+ \pagebody
+ \makefootline
+ }
+ \lwcpreshipout\the\tempshipoutbox
+ \shipout\box\tempshipoutbox
+ \advancepageno
+}
+\stopTEX
+
+Setting the output routine like this is automatic in all other formats. \Lwc/ does not modify the output routine in Plain~\TeX{} since most of its users likely have their own output routines.
+
+\subsection{Draft Offset}
+
+In draft mode, the paragraph costs are printed in the margins, offset a certain distance from the page edge. By default, this offset is set to \unit{1 inch}; however, you can change this to any value that you want:
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcdraftoffset = $\meta{dimension}$}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{draftoffset = $\meta{dimension}$}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[draftoffset = $\meta{dimension}$]}
+ \NC\NR
+\stopTABLE
+
+\setuplwc[draft=stop]
+\subsection{Debug Mode}
+
+\Lwc/ offers a \q{debug} mode that prints extra information in the log files. This may be helpful to understand how \lwc/ is processing paragraphs and pages, although the information is likely inscrutable unless you are the package's author. If you are reporting an issue with \lwc/, make sure to compile your document with debug mode enabled!
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcdebug 1}
+ \NC\NR\NC\NC\inlineTEX{\lwcdebug 0}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{debug = true}}
+ \NC\NR\NC\NC\inlineTEX{\lwcsetup{debug = false}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[debug = start]}
+ \NC\NR\NC\NC\inlineTEX{\setuplwc[debug = stop]}
+ \NC\NR
+\stopTABLE
+
+\section{Presets}
+
+As you can see, \lwc/ provides quite a few options. Luckily, there are a few
+presets that you can use to set multiple options at once. These presets are
+a good starting point for most documents, and you can always manually
+override individual options.
+
+Presets are available only with \LaTeX{} and \ConTeXt{}.
+
+\startTABLE[setups=commandtable]
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{$\meta{preset}$}}\NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[$\meta{preset}$]}\NC\NR
+\stopTABLE
+
+\subsection{\type{default}}
+
+If you use \lwc/ without any options, it defaults to this preset. In default
+mode, \lwc/ takes all possible measures to remove \waos/ and will not
+attempt to stretch any vertical glue. This usually
+removes~$\mathord{>}\,95\%$ of all
+possible \waos/. The catch here is that this mode is quite aggressive, so
+it often leaves behind some fairly \q{spacey} paragraphs.
+
+This mode is good if you want to remove (nearly) all \waos/ from your
+document, without fine-tuning the results.
+
+\subsection{\type{strict}}
+
+\Lwc/ also offers a strict mode. This greatly restricts \lwc/'s tolerance
+and makes it so that it will only lengthen paragraphs where the change will
+be imperceptible.
+
+The caveat with strict mode is that---depending on the document---
+\lwc/ will be able to remove less than a third of the \waos/.
+For the \waos/ that can't be automatically removed, a warning will be
+printed to your terminal and log file so that a human can manually fix the
+situation.
+
+This mode is good if you want the best possible typesetting and are willing
+to do some manual editing.
+
+\subsection{\type{balanced}}
+
+Balanced mode sits somewhere between default mode and strict mode. This mode
+first lets \TeX{} stretch a little glue to remove the \woo/; only if that
+fails will it then trigger \lwc/. Even then, the maximum paragraph cost is
+capped. Here, \lwc/ can usually remove 90\% of a document's
+potential \waos/, and it does so while making a minimal visual impact.
+
+This mode is recommended for most users who care about their document's
+typography. This mode is not the default since it doesn't remove all
+\waos/: it
+still requires a little manual intervention.
+
+% %
+\startplacetable[location={here, top, bottom}, title={\Lwc/ options set by each mode.}, reference=tab:modes]
+ \startTABLE[setups=booktabs, style=tt, loffset=0.5em]
+ \NC {\rm Option} \NC default \NC balanced \NC strict \NC\NR
+ \NC max-cost \NC $\infty$ \NC 10000 \NC 5000 \NC\NR
+ \NC emergencystretch \NC 3em \NC 1em \NC 0pt \NC\NR
+ \NC nobreak \NC keep \NC keep \NC warn \NC\NR
+ \NC widowpenalty \NC 1 \NC 500 \NC 1 \NC\NR
+ \NC orphanpenalty \NC 1 \NC 500 \NC 1 \NC\NR
+ \NC brokenpenalty \NC 1 \NC 500 \NC 1 \NC\NR
+ \stopTABLE
+\stopplacetable
+
+\section{Lua Interface}
+
+\Lwc/ provides a few public functions and tables that you can safely use or modify as documented. Any Lua interfaces that aren't documented below are subject to change at any time, but ff you do want to use an undocumented interface, please let me know and can easily document it.
+
+\subsection{Costs}
+
+\Lwc/ uses a \q{cost function} to select which paragraph to expand. Typically, this depends on the number of lines and demerits in the broken paragraph; however, you can redefine this function to do something else if you want. The default function is defined as:
+
+\startLUA
+--- The "cost function" to use.
+---
+--- @param demerits number The demerits of the broken paragraph
+--- @param lines number The number of lines in the broken paragraph
+--- @param nat_demerits number The demerits of the naturally-broken paragraph
+--- @param nat_lines number The number of lines in the naturally-broken paragraph
+--- @param head node The head of the broken paragraph
+--- @return number cost The cost of the broken paragraph
+function lwc.paragraph_cost(demerits, lines, nat_demerits, nat_lines, head)
+ return demerits / math.sqrt(lines)
+end
+\stopLUA
+
+\subsection{Activation}
+
+Typically, \lwc/ determines if there are \waos/ at the end of a page by checking the \tex{outputpenalty} register. However, you can use a custom check if you want. The default check is defined as:
+
+\startLUA
+--- Determines if we should "activate" lwc for the current page/column.
+---
+--- @param penalty number The \outputpenalty for the current page/column
+--- @param paragraphs table<table<string, node|number>> The `paragraphs` table
+--- @param head node The head of the current page/column
+--- @return boolean activate True if lwc should move the last line on this page
+function lwc.should_remove_widows(penalty, paragraphs, head)
+ return is_matching_penalty(penalty)
+end
+\stopLUA
+
+By setting a custom activation and cost function, you can transform \lwc/ from a \wao/ remover into a custom layout customization tool.
+
+\section{Compatibility}
+
+The \lwc/ implementation is almost entirely in Lua, with only a minimal
+\TeX{} footprint. It
+doesn't modify the output routine, \tex{everypar}, and
+it doesn't insert any whatsits. This means that it should be compatible with
+nearly any \TeX{} package, class, and format. Most changes that \lwc/ makes
+are not observable on the \TeX{} side.
+
+However, on the Lua side, \lwc/ modifies much of a page's internal
+structure.
+This should not affect any \TeX{} code; however, it may surprise
+Lua code that modifies or depends on the page's low-level structure. This
+does not matter for Plain~\TeX{} or \LaTeX{}, where even most Lua-based
+packages don't depend on the node list structure; nevertheless, there are
+a few issues with \ConTeXt{}.
+
+However, on the Lua side, \lwc/ modifies much of a page's internal
+structure. This should not affect any \TeX{} code; however, it may surprise
+Lua code that modifies or depends on the page's low-level structure. This
+does not affect Plain~\TeX{} or \LaTeX{} where even most Lua-based packages
+don't depend on the node list structure. \ConTeXt{} \emph{does} depend on
+this internal node structure; however, I have carefully tested the package
+to ensure that this causes no issues.
+
+Finally, keep in mind that adding \lwc/ to a document will almost certainly
+change its page break locations.
+
+\subsection{Formats}
+
+\Lwc/ runs on all known Lua\TeX{}-based formats: Plain~Lua\TeX{},
+Lua\LaTeX{}, \ConTeXt{} Mk\acronym{IV}, and~\OpTeX{}. Unless otherwise
+documented, all features should work equally well in all formats.
+
+\Lwc/ is also fully-compatible with the \LuaMeta\TeX{}-based formats:
+\ConTeXt{} Mk\acronym{XL}\slash\acronym{LMTX}, \LuaMeta\LaTeX{}, and
+\LuaMeta{}Plain. \ConTeXt{} Mk\acronym{XL} works equally
+well as \ConTeXt{} Mk\acronym{IV} and Lua\LaTeX{}; however, \LuaMeta\LaTeX{}
+and \LuaMeta{}Plain support is still quite early. All features should work,
+although there are still a few minor bugs.
+
+All told, \lwc/ supports 7 different format\slash{}engine combinations.
+
+\subsection{Columns}
+
+Since \TeX{} and the formats implement column breaking and page
+breaking through the
+same internal mechanisms, \lwc/ removes \waos/ between columns just
+as it does with \waos/ between pages.
+
+\Lwc/ is known to work with the \LaTeX{} class option \type{twocolumn}
+and the two-column output routine from Chapter~23 of \titlecite[texbook].
+
+\subsection{Performance}
+
+\Lwc/ runs entirely in a single pass, without depending on any
+\type{.aux} files or the like. Thus, it shouldn't meaningfully
+increase compile times. Although \lwc/ internally breaks each paragraph
+twice, modern computers break paragraphs near-instantaneously, so you
+are not likely to notice any slowdown.
+
+\subsection{\eTeX{} penalties}
+
+Knuth's original \TeX{} has three basic line penalties:
+\tex{interlinepenalty}, which
+is inserted between all lines; \tex{club\-penalty}, which is inserted after
+the first line; and \tex{widow\-penalty}, which is inserted before the last
+line. The \eTeX{} extensions generalize these commands with a
+syntax similar to \tex{parshape}: with \tex{widow\-penalties} you can set the
+penalty between the last, second last, and $n$th last lines of a paragraph;
+\tex{inter\-line\-penalties} and \tex{club\-penalties} behave similarly.
+
+\Lwc/ makes no explicit attempts to support these new -\type{penalties}
+commands. Specifically, if you give a line a penalty that matches either
+\tex{widowpenalty} or \tex{clubpenalty}, \lwc/ will treat the lines
+exactly as it would a \woo/. So while these commands won't break \lwc/, they
+are likely to lead to some unexpected behaviour.
+
+\subsection{Grids}
+
+\Lwc/ is fully compatible with the grid snapping features of \ConTeXt{} \mkiv/ and \mkxl/.
+
+\subsection{Footnotes}
+
+If there are footnotes (or any other type of inline \tex{insert}) present in the moved line, \lwc/ will move both the \q{footnote mark} and the \q{footnote text} such that both are on the same page. However, this may lead to an odd blank space at the bottom of the page since \lwc/ needs to move both the line and its footnotes. Footnotes cause the same page-breaking issues in unmodified Plain~\TeX{} and \LaTeX{}, so this is mostly unavoidable.
+
+\section{Stability}
+
+The documented interfaces of \lwc/ can be considered stable: I'm not planning on removing or modifying any existing options or commands in any way that would break documents.
+
+However, \lwc/'s page breaking \emph{is} subject to change. I will attempt to keep page breaks the same whenever reasonable; however, I will \emph{rarely} make modifications to the algorithm when I can improve the output quality. Any such changes will be clearly noted in the release notes.
+
+\section{Short last lines}
+
+When lengthening a paragraph with \tex{looseness}, it is common advice to insert
+ties (\type{~}) between the last few words of the paragraph to avoid
+overly-short last lines\cite[texbook]. \Lwc/ does this automatically,
+but instead of using ties or \tex{hbox}es, it uses the
+\tex{par\allowbreak fill\allowbreak skip}
+parameter. When lengthening a paragraph
+(and only when lengthening a paragraph---remember, \lwc/ doesn't
+interfere with \TeX{}'s output unless it detects a \woo/), \lwc/ sets
+\tex{parfillskip} to \type{0.75\hsize plus 0.05\hsize minus 0.75\hsize}.
+This normally makes the last line of a paragraph be at least
+20\% of the overall paragraph's width, thus preventing
+ultra-short~lines.
+
+\section[sec:issues]{Known Issues}
+
+\startitemize
+ \item When a three-line paragraph is at the end of a page forming a
+ widow, \lwc/ will remove the widow; however, it will leave an orphan.
+ This issue is inherent to any process that removes widows through
+ paragraph expansion and is thus unavoidable. Orphans are considered
+ to be better than widows\cite[elements], so this is still an
+ improvement.
+
+ \item \Lwc/ only attempts to expand paragraphs; it never attempts to shrink them. See the \emph{TUGboat}~article\cite[article] §15.3 for further discussion. \githubissue{33}
+
+ \item \Lwc/ can only expand paragraphs that fit completely on a page. This is unavoidable due to the one-page-at-a-time model: you can't modify the bottom half of a paragraph since its top half has already shipped out, and you can't expand the top half of a paragraph since that can't remove orphans. This only causes issues if your document has paragraphs so long that a page only has two half-paragraphs and zero whole paragraphs.
+
+ \item Sometimes a \woo/ cannot be eliminated because no paragraph has
+ enough stretch. Sometimes this can be remediated by
+ increasing \lwc/'s \estretch/; however, some pages just don't have
+ any suitable paragraph.
+
+ Long paragraphs with short words tend to be stretchier than short
+ paragraphs with long words since these long paragraphs have more
+ interword glue. Narrow columns also stretch more easily than wide columns
+ since you need to expand a paragraph by less to make a new line.
+
+ \item \Lwc/ only attempts to expand paragraphs on a page with
+ a \woo/. A global system like in \titlecite[global] would solve this;
+ however, this is both \acronym{NP}-complete\cite[plass] and
+ impossible to solve in a single pass. Very rarely would such a
+ system remove widows or orphans that \lwc/ cannot.
+\stopitemize
+
+\section{Contributions}
+
+If you have any issues with \lwc/, please create an issue at the \goto{project's GitHub page}[url(projecturl)]. Or, if you think that you can solve any of the \about[sec:issues] or add any new features, \goto{submit a \acronym{PR}}[url(projecturl)]. Thanks!
+
+\section{License}
+
+\Lwc/ is licensed under the \goto{\emph{Mozilla Public License}, version 2.0}[url(https://www.mozilla.org/en-US/MPL/2.0/)] or greater. The documentation is licensed under \goto{\acronym{CC-BY-SA}, version 4.0}[url(https://creativecommons.org/licenses/by-sa/4.0/legalcode)] or greater as well as the \acronym{MPL}.
+
+Please note that a compiled document is \bold{not} considered to be an \q{Executable Form} as defined by the \acronym{MPL}. The \acronym{MPL} and \acronym{CC-BY-SA} licenses \bold{only} apply to you if you distribute the \lwc/ source code or documentation.
+
+\section{References}
+
+\placelistofpublications
+
+\page
+
+\setuphead[subsection][
+ alternative=normal,
+ style=\ssitb,
+ after={\blank[disable, penalty:10000]}
+]
+\markdownInput{../../CHANGELOG.md}
+
+\page
+
+\setuplayout[
+ width=middle,
+ backspace=1in,
+ height=9.25in,
+]
+\section[sec:implementation]{Implementation}
+
+From here and until the end of this manual is the raw source code of \lwc/. This is primarily of interest to developers; most users need not read further.
+
+This code vaguely resembles the typical \LaTeX{} literate programming style, although I use extensive inline comments instead of arcane \sans{docstrip} macros. Hopefully this is useful as a reference for advanced \lwc/ users as well as anyone doing extensive node manipulation in \LuaTeX{}.
+
+If want to offer any improvements to the code below, please open an issue or a \acronym{PR} on \goto{GitHub}[url(projecturl)].
+
+\usemodule[scite]
+\setupbodyfont[10pt]
+\setuphead[subsection][
+ page=yes,
+ continue=yes,
+]
+
+\subsection{lua-widow-control.lua}
+
+\typeLUAfile{../source/lua-widow-control.lua}
+
+\subsection{lua-widow-control.tex}
+
+\typeTEXfile{../source/lua-widow-control.tex}
+
+\subsection{lua-widow-control.sty}
+
+\typeTEXfile{../source/lua-widow-control.sty}
+
+\subsection{lua-widow-control-2022-02-22.sty}
+
+\typeTEXfile{../source/lua-widow-control-2022-02-22.sty}
+
+\subsection{t-lua-widow-control.mkxl}
+
+\typeTEXfile{../source/t-lua-widow-control.mkxl}
+
+\subsection{lua-widow-control.opm}
+
+\typeTEXfile{../source/lua-widow-control.opm}
+
+\subsection{Demo from \in{Table}[tab:demo]}
+
+\typeTEXfile{\jobname-demo-text.tmp}
+
+\stopdocument
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj-figure.ctx b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj-figure.ctx
new file mode 100644
index 0000000000..9ab907dea2
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj-figure.ctx
@@ -0,0 +1,161 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\startbuffer[demo-text]
+ \definepapersize[smallpaper][
+ width=6cm,
+ height=8.3cm
+ ]
+ \setuppapersize[smallpaper]
+
+ \def\lwc/{\sans{lua-\allowbreak widow-\allowbreak control}}
+ \def\Lwc/{\sans{lua-\allowbreak widow-\allowbreak control}}
+
+ \setupbodyfont[9pt]
+ \setupindenting[yes, 2em]
+ \setupalign[tolerant]
+
+ \definecolor[midlightgray][s=0.75]
+ \definepalet[layout][grid=midlightgray]
+ \showgrid[nonumber, none, lines]
+
+ \definefontfeature[default][default][expansion=quality,protrusion=quality]
+
+ \usetypescript[modern-base]
+ \setupbodyfont[reset,modern]
+
+ \setupalign[hz,hanging,tolerant]
+
+ \setuplanguage[en][spacing=packed]
+
+ \setuplayout[
+ topspace=0.1cm,
+ backspace=0.1cm,
+ width=middle,
+ height=\dimexpr 21\baselineskip + 1.1pt,
+ header=0pt,
+ footer=0pt,
+ ]
+
+ \starttext
+ % This text has been carefully adjusted to produce a good demonstration. Be careful before modifying it.
+ \Lwc/ can remove most widows and orphans from a document, \emph{without}
+ stretching any glue or shortening any pages.
+
+ \ifx\uselooseness\undefined\else\uselooseness\fi It does so by automatically lengthening a paragraph on a page where a
+ widow or orphan would otherwise occur. While \TeX{} breaks paragraphs
+ into their natural length, \lwc/ is breaking the paragraph 1~line
+ longer than its natural length. \TeX{}'s paragraph is output to the
+ page, but \lwc/'s paragraph is just stored for later. When a widow or
+ orphan occurs, \lwc/ can take over. It selects the previously-saved
+ paragraph with the least badness; then, it replaces \TeX{}'s paragraph
+ with its saved paragraph. This increases the text block height of the
+ page by 1~line.
+
+ Now, the last line of the current page can be pushed to the top of the
+ next page. This removes the widow or the orphan without creating any
+ additional work.
+ \stoptext
+ \stoptext
+\stopbuffer
+\savebuffer[list=demo-text]
+
+\startbuffer[shorten]
+ \parskip=0pt
+ \input lwc-zpravodaj-figure-demo-text.tmp
+\stopbuffer
+
+\startbuffer[shorten-code]
+ \parskip=0pt
+ \clubpenalty=10000
+ \widowpenalty=10000
+\stopbuffer
+
+\startbuffer[stretch]
+ \parskip=0pt plus 1fill
+ \input lwc-zpravodaj-figure-demo-text.tmp
+\stopbuffer
+
+\startbuffer[stretch-code]
+ \parskip=0pt plus 1fill
+ \clubpenalty=10000
+ \widowpenalty=10000
+\stopbuffer
+
+\startbuffer[ignore]
+ \startsetups[*default]
+ \clubpenalty=0
+ \widowpenalty=0
+ \displaywidowpenalty=0
+ \interlinepenalty=0
+ \brokenpenalty=0
+ \stopsetups
+
+ \setups[*default]
+
+ \input lwc-zpravodaj-figure-demo-text.tmp
+\stopbuffer
+
+\startbuffer[ignore-code]
+ \parskip=0pt
+ \clubpenalty=0
+ \widowpenalty=0
+\stopbuffer
+
+\startbuffer[lwc]
+ \def\uselooseness{\looseness=1}
+ \input lwc-zpravodaj-figure-demo-text.tmp
+\stopbuffer
+
+% We're pretending that we're using LaTeX for the demo since that's what
+% 99% of users will be using.
+\startbuffer[lwc-code]
+ \usepackage
+ {lua-widow-control}
+\stopbuffer
+
+\setupbodyfont[9pt]
+
+\setupbackend[format=PDF/A-1b:2005] % Force PDF version <1.5
+
+\startTEXpage[
+ align=normal,
+ width=492.5733pt,
+ offset=0pt,
+]
+ \veryraggedcenter
+ \setupTABLE[row][1][style=\bfa, align=middle, offset=0pt]
+ % \setupTABLE[row][4][toffset=2ex]
+ \setupTABLE[frame=off, distance=0em]
+ \startTABLE
+ \NC Ignore
+ \NC Shorten
+ \NC Stretch
+ \NC \sans{lua-widow-control}
+ \NC\NR
+
+ \NC \typesetbuffer[ignore][frame=on, page=1, scale=700]
+ \NC \typesetbuffer[shorten][frame=on, page=1, scale=700]
+ \NC \typesetbuffer[stretch][frame=on, page=1, scale=700]
+ \NC \typesetbuffer[lwc][frame=on, page=1, scale=700]
+ \NC\NR
+
+ \NC \clip[height=2cm]{\typesetbuffer[ignore]
+ [frame=on, page=2, scale=700]}
+ \NC \clip[height=2cm]{\typesetbuffer[shorten]
+ [frame=on, page=2, scale=700]}
+ \NC \clip[height=2cm]{\typesetbuffer[stretch]
+ [frame=on, page=2, scale=700]}
+ \NC \clip[height=2cm]{\typesetbuffer[lwc]
+ [frame=on, page=2, scale=700]}
+ \NC\NR
+
+ \NC \typebuffer[ignore-code]
+ \NC \typebuffer[shorten-code]
+ \NC \typebuffer[stretch-code]
+ \NC \typebuffer[lwc-code]
+ \NC\NR
+ \stopTABLE
+\stopTEXpage
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.bib b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.bib
new file mode 100644
index 0000000000..6bbe904c0d
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.bib
@@ -0,0 +1,237 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+@book{texbook,
+ author = {Donald E. Knuth},
+ title = {The \TeX{}book},
+ publisher = {Addison--Wesley},
+ year = {2021},
+}
+
+@online{widows-and-orphans,
+ author = {Frank Mittelbach},
+ year = {2021},
+ month = {03},
+ title = {The \textsf{widows-and-orphans} package},
+ url = {https://ctan.org/pkg/widows-and-orphans},
+ urldate = {2022-11-08},
+}
+
+@online{widow-assist,
+ author = {jeremie},
+ title = {Paragraph callback to help with widows\slash orphans hand tuning},
+ url = {https://tex.stackexchange.com/q/372062},
+ year = {2017},
+ month = {07},
+ urldate = {2022-11-08},
+}
+
+@book{elements,
+ title = {The Elements of Typographic Style},
+ author = {Bringhurst, R.},
+ edition = {3rd},
+ publisher = {Hartley \& Marks},
+ year = {2004},
+}
+
+@online{oed-club,
+ title={club, n.},
+ journal={OED Online},
+ publisher={Oxford University Press},
+ month={09},
+ year={2021},
+ url={https://www.oed.com/view/Entry/34788},
+ author={{Oxford English Dictionary}},
+ urldate = {2022-11-08},
+}
+
+@online{oed-line,
+ title={line at end of paragraph},
+ journal={OED Online},
+ publisher={Oxford University Press},
+ month={12},
+ year={2021},
+ url={https://www.oed.com/view/th/class/195380},
+ author={{Oxford English Dictionary}},
+ urldate = {2022-11-08},
+}
+
+@online{oed-widow,
+ title={widow, n.},
+ journal={OED Online},
+ publisher={Oxford University Press},
+ month={12},
+ year={2021},
+ url={https://www.oed.com/view/Entry/228912},
+ author={{Oxford English Dictionary}},
+ urldate = {2022-11-08},
+}
+
+@article{widowhistory,
+ title={The Typographical Widow},
+ subtitle={Who is she? What is she?},
+ author={Karl Brown},
+ journal={Bulletin of the {New York} Public Library},
+ publisher={The {New York} Public Library},
+ location={New York},
+ volume={52},
+ number={1},
+ year={1948},
+ month={01},
+ pages={3--25},
+ url={https://hdl.handle.net/2027/uc1.b3310084}
+}
+
+@article{widowhistory2,
+ title={The Typographical Widow: Encore},
+ subtitle={Encore},
+ author={Karl Brown},
+ journal={Bulletin of the {New York} Public Library},
+ publisher={The {New York} Public Library},
+ location={New York},
+ volume={52},
+ number={9},
+ year={1948},
+ month={09},
+ pages={458-466},
+ urlnewline=1,
+ url={https://hdl.handle.net/2027/uc1.b3310084}
+}
+
+@book{old,
+ title={Mechanick exercises},
+ subtitle={The doctrine of handy-works applied to the art of printing},
+ volume={2},
+ author={Moxon, Joseph},
+ year={1683},
+ location={London},
+ pages={394},
+ url={https://archive.org/details/mechanickexercis00moxo_0}
+}
+
+@article{global,
+ url = {https://doi.org/10.1111/coin.12165},
+ year = {2018},
+ month = {03},
+ publisher = {Wiley},
+ volume = {35},
+ number = {2},
+ pages = {242--284},
+ author = {Frank Mittelbach},
+ title = {A general framework for globally optimized pagination},
+ journal = {Computational Intelligence}
+}
+
+@book{backwards1,
+ title={The Layout Book},
+ author={Ambrose, G. and Harris, P.},
+ isbn={9782940373536},
+ series={Advanced Level Series},
+ year={2007},
+ publisher={Bloomsbury Academic}
+}
+
+@book{backwards2,
+ title={Typography Essentials Revised and Updated},
+ subtitle={100 Design Principles for Working with Type},
+ author={Saltz, I.},
+ isbn={9781631596483},
+ year={2019},
+ publisher={Rockport Publishers}
+}
+
+@book{backwards3,
+ title={Advanced Typography: From Knowledge to Mastery},
+ author={Hunt, R.},
+ isbn={9781350055926},
+ lccn={2020024110},
+ year={2020},
+ publisher={Bloomsbury Publishing}
+}
+
+@article{gutenberg,
+ title={All Books (sorted by popularity)},
+ url={https://www.gutenberg.org/ebooks/search/?sort_order=downloads},
+ year={2022},
+ month={03},
+ journal={Project Gutenberg}
+}
+
+@online{etex,
+ title={The {\eTeX} manual},
+ author={{The \NTS{} Team}},
+ url={https://ctan.org/pkg/etex},
+ year={1998},
+ % month={02},
+ urldate = {2022-11-08},
+}
+
+@phdthesis{plass,
+ title={Optimal pagination techniques for automatic typesetting systems},
+ author={Plass, Michael Frederick},
+ year={1981},
+ school={Stanford University},
+ urlnewline=1,
+ url={https://tug.org/docs/plass/plass-thesis.pdf}
+}
+
+@article{tb133chernoff-widows,
+ title={Automatically removing widows and orphans with
+ \texttt{lua-widow-control}},
+ author={Chernoff, Max},
+ journal={TUGboat},
+ volume={43},
+ number={1},
+ pages={28--39},
+ year={2022},
+ month={05},
+ DOI={10.47397/tb/43-1/tb133chernoff-widows},
+}
+
+@online{luametalatex,
+ year={2022},
+ month={10},
+ url={https://github.com/zauguin/luametalatex},
+ author={Marcel Krüger},
+ title={\texttt{luametalatex}},
+ urldate = {2022-11-08},
+}
+
+@Book{naruby,
+ author = "Petr Ol{\v{s}}{\'a}k",
+ title = "{\TeX}book naruby. [{\TeX}book inside out]",
+ publisher = "Konvoj",
+ address = "Brno, Czech Republic",
+ pages = "467",
+ year = "1997",
+ ISBN = "80-85615-64-9",
+ ISBN-13 = "978-80-85615-64-7",
+ bibsource = "http://www.math.utah.edu/pub/tex/bib/texbook3.bib",
+ URL = "https://petr.olsak.net/ftp/olsak/tbn/tbn.pdf",
+}
+
+@article{mittelbach,
+ author = "Frank Mittelbach",
+ title = "Managing forlorn paragraph lines (a.k.a.~widows and
+ orphans) in {\LaTeX}",
+ journal = "TUGboat",
+ volume = "39",
+ number = "3",
+ pages = "246--251",
+ year = "2018",
+ ISSN = "0896-3207",
+ ISSN-L = "0896-3207",
+ URL = "https://tug.org/TUGboat/tb39-3/tb123mitt-widows.pdf",
+ issue = "123",
+}
+
+@PHDTHESIS{thanh,
+ author = {Thành, Hàn Thế},
+ title = {Micro-typographic extensions to the \TeX{} typesetting system},
+ date = {2001},
+ institution = {The Faculty of Informatics, Masaryk University},
+ location = {Brno},
+ url = {http://www.pragma-ade.nl/pdftex/thesis.pdf},
+}
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.ltx b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.ltx
new file mode 100644
index 0000000000..1a00292e2f
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/lwc-zpravodaj.ltx
@@ -0,0 +1,1720 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+% This is the LaTeX source for the following article:
+% @article{zpravodaj-lwc,
+% title={Automatically Removing Widows and Orphans with
+% \textsf{lua-widow-control}},
+% author={Chernoff, Max},
+% journal={Zpravodaj Československého sdružení uživatelů TeXu},
+% number={1--4},
+% pages={49--76},
+% year={2022},
+% month=nov,
+% DOI={10.5300/2022-1-4/49},
+% }
+% Please refer to the PDF on cstug.cz for the authoritative version.
+
+% Compiling:
+% context lwc-zpravodaj-figure.ctx
+% lualatex lwc-zpravodaj.ltx
+% biber lwc-zpravodaj
+% lualatex lwc-zpravodaj.ltx
+% lualatex lwc-zpravodaj.ltx
+
+\RequirePackage{luatex85}
+\PassOptionsToPackage{main=english}{babel}
+\PassOptionsToPackage{shorthands=off}{babel}
+
+\makeatletter
+\disable@package@load{fontenc}
+\makeatother
+
+\let\oldlooseness=\looseness
+
+\documentclass{csbulletin}
+
+% Hyperlinks
+\usepackage[implicit=false, hidelinks]{hyperref}
+\setcounter{secnumdepth}{3}
+
+% Load lwc
+\usepackage[balanced, draftoffset=\oddsidemargin + 1in + 10pt]{lua-widow-control}
+
+% Table Stuff
+\usepackage{tabularx}
+\usepackage{longtable}
+\usepackage{hhline}
+\usepackage{booktabs}
+\usepackage{graphicx}
+\AddToHook{env/tabularx/before}{\nobreak\smallskip\noindent}
+\AddToHook{env/tabularx/after}{\smallskip\pagebreak[1]}
+\AddToHook{env/tabular/before}{\nobreak\smallskip\noindent}
+\AddToHook{env/tabular/after}{\smallskip\pagebreak[1]}
+\AddToHook{env/longtable/before}{\nobreak\smallskip\noindent}
+\AddToHook{env/longtable/after}{\smallskip\pagebreak[1]}
+\setlength{\LTleft}{0pt}
+\renewcommand{\arraystretch}{1.15}
+
+% For the sideways figure
+\usepackage{rotating}
+
+% Rotate the sideways figure in the PDF viewer too
+\AddToHook{env/sidewaysfigure/end}{%
+ \latelua{pdf.setpageattributes('/Rotate 90')}%
+ \AddToHookNext{shipout/after}{%
+ \AddToHookNext{shipout/after}{%
+ \directlua{pdf.setpageattributes('/Rotate 0')}%
+ }%
+ }%
+}%
+% Let the macro names in section headings be in boldface
+\usepackage{lmodern}
+\AtBeginDocument{\def\cs#1{\texttt{\textbackslash#1}}}
+
+\directlua{
+ local percent = string.char(37)
+ luatexbase.add_to_callback("process_input_buffer", function(line) return line:gsub(percent .. "-" .. percent .. "-" ..percent .. "-", "\\kern0.1em---\\kern0.1em") end, "emdash")
+} % Add a little more kerning to em-dashes
+
+\makeatletter
+\DeclareRobustCommand{\eTeX}{%
+ \ifx\f@series\bfseries@rm%
+ \ensuremath{\boldsymbol{\varepsilon}}\mbox{-}\kern-.125em\TeX%
+ \else%
+ \ensuremath{\varepsilon}\mbox{-}\kern-.125em\TeX%
+ \fi%
+}
+\let\goodeTeX=\eTeX
+\makeatother
+
+% Other commands
+\usepackage{hologo}
+\def\ConTeXt{\Hologo{ConTeXt}}
+
+\usepackage{mathtools}
+
+% Abbreviations Most of these are just typewriter commands with `\allowbreak`s
+% added.
+\def\lwc/{\textsf{lua-\allowbreak widow-\allowbreak control}}
+\def\Lwc/{\textsf{lua-\allowbreak widow-\allowbreak control}}
+\def\estretch/{%
+ \texorpdfstring{\cs{emergency}\-\mbox{\ttfamily stretch}}{\textbackslash{}emergencystretch}%
+ }
+\def\openalty/{\cs{output}\-\mbox{\ttfamily penalty}}
+\def\waos/{widows and orphans}
+\def\wao/{widow and orphan}
+\def\woo/{widow or orphan}
+\def\woos/{widows or orphans}
+\def\latexuse/{%
+ \cs{use\-package\{lua-\allowbreak widow-\allowbreak control\}}
+}
+\def\lsness/{\texorpdfstring{%
+ \cs{loose}\-\mbox{\ttfamily ness}}{\textbackslash{}looseness}%
+}
+\def\plainop/{Plain~\TeX\slash\OpTeX{}}
+\newcommand{\LuaMeta}{Lua\-Meta\-}
+\newcommand{\q}[1]{\texorpdfstring{``#1''}{“#1”}}
+
+\def\inlineurl[#1]#2{\href{https://#1}{#2}\footnote{\raggedright\href{https://#1}{\ttfamily #1}}}
+
+\def\longs/{\char"017F}
+\def\endofline#1{\unskip\nobreak\hskip\fontdimen2\font plus 1fill\hbox{#1}}
+
+% TUGboat compatibility
+\def\tubsentencespace{\spacefactor=3000{}\space\ignorespaces}
+\DeclareRobustCommand\OpTeX{Op\kern-.05em\TeX}
+\DeclareRobustCommand\acro[1]{\textsc{\MakeLowercase{#1}}}
+\DeclareRobustCommand\meta[1]{%
+ \ensuremath{\langle}%
+ \ifmmode \expandafter\mbox \fi%
+ {\it #1\/}%
+ \ensuremath{\rangle}%
+}
+
+% Bibliography
+\usepackage[
+ backend=biber,
+ style=iso-authoryear,
+ sortlocale=en,
+ autolang=other,
+ bibencoding=UTF8,
+ mincitenames=2,
+ maxcitenames=2,
+]{biblatex}
+
+% Remove the "also" from "available also from"
+\DefineBibliographyStrings{english}{
+ urlalso = {available from},
+}
+
+\protected\def\titlecite#1{\citetitle{#1}~\cite{#1}}
+
+\let\cite=\parencite
+
+\addbibresource{lwc-zpravodaj.bib}
+\addbibresource{tugboat.bib}
+
+% Figures
+\makeatletter
+\renewcommand*{\fps@figure}{tb}
+\renewcommand*{\fps@table}{tb}
+\g@addto@macro\@floatboxreset\centering
+\makeatother
+
+% pgfplots
+\usepackage{pgfplots}
+\usepackage{pgfplotstable}
+\usetikzlibrary{patterns}
+
+\pgfkeys{
+ /pgf/number format/.cd,
+ sci generic={%
+ mantissa sep={\times},
+ exponent={10^{##1}}
+ },
+ 1000 sep={\,},
+}
+
+\pgfplotsset{
+ compat=1.18,
+ lua backend=true,
+ unbounded coords=discard,
+ filter discard warning=false,
+}
+
+
+\pgfplotstableread{tb133chernoff-widows-plot.dat}{\plotdata}
+
+% Final adjustments
+\def\spoj{\discretionary{-}{-}{-}}
+
+\makeatletter
+\csbul@start@page {49}
+\def\doi{10.5300/2022-1-4/\thepage}
+\csbul@webtrue
+\csbul@colortrue
+\makeatother
+
+\begin{document}
+ \title{Automatically Removing Widows and Orphans\\ with \lwc/}
+ \EnglishTitle{Automatically Removing Widows and Orphans\\ with \lwc/}
+ \author{Max Chernoff}
+ \podpis{Max Chernoff, mseven at telus dot net}
+
+ \maketitle
+
+ \begin{abstract}
+ The \textsf{lua-widow-control} package, for
+ plain~Lua\TeX\slash{}Lua\LaTeX\slash{}\ConTeXt\slash{}\OpTeX{},
+ removes widows and orphans without any user intervention.
+ Using the power of Lua\TeX{}, it does so without stretching any vertical glue
+ or shortening any pages or columns. Instead, \textsf{lua-widow-control}
+ automatically lengthens a paragraph on a page or column where a widow or
+ orphan would otherwise occur.
+
+ To use the \textsf{lua-widow-control} package, all that most \LaTeX{} users
+ need do is place \verb|\usepackage{lua-widow-control}| in their preamble.
+ No further changes are required.
+ \end{abstract}
+ \keywords: Lua\TeX{}, widows, orphans
+
+ \hypersetup{bookmarksdepth=10}
+ \section{Motivation}
+
+ {\let\thefootnote\relax\footnotetext{First published in \textsl{TUGboat} \textbf{43}:1 \cite{tb133chernoff-widows}, pp.~28--39. Reprinted, with additions and corrections, with permission.}}
+
+ \TeX{} provides top-notch typesetting: even 40 years after its first
+ release, no other program produces higher quality mathematical
+ typesetting, and its paragraph\spoj breaking algorithm is still
+ state-of-the-art. However, its page breaking is not quite as sophisticated
+ as its paragraph breaking and thus suffers from some minor issues.
+ \oldlooseness=-1
+
+ Unmodified \TeX{} has only two familiar ways of dealing with \waos/: it can
+ either shorten a page by one line, or it can stretch vertical
+ whitespace. \TeX{} was designed for mathematical and scientific typesetting,
+ where a typical page has multiple section headings, tables, figures, and
+ equations. For this style of document, \TeX's default behaviour works quite
+ well, since the slight stretching of whitespace between the various document
+ elements is nearly imperceptible; however, for prose or other documents
+ composed almost entirely of paragraphs, there is little vertical whitespace
+ to stretch.
+
+ Since no ready-made, fully-automated solution to remove
+ \waos/ from all types of documents was available, I decided to
+ create \lwc/.
+ \oldlooseness=-1
+
+ \section{What are \waos/?}
+
+ \subsection{Widows}
+
+ A \q{widow} occurs when the majority of a paragraph is on one page
+ or column,
+ but the last line is on the following page or column. It not only looks
+ quite odd for a lone line to be at the start of the page, but it makes a
+ paragraph harder to read since the separation of a paragraph and
+ its last line disconnects the two, causing the reader to lose context for
+ the widowed line.
+
+ \subsection{Orphans}
+
+ An \q{orphan} occurs when the first line of a paragraph is at the end
+ of the page or column preceding the remainder of the paragraph. They are not
+ as distracting for the reader, but they are still not ideal.
+ Visually, \waos/ are about equally disruptive; however, orphans tend not to
+ decrease the legibility of a text as much as widows, so many authors choose
+ to ignore them.
+
+ See Figure~\ref{tab:widow} for a visual reference.
+
+ \begin{figure}
+ \def\firstpage#1{%
+ \parfillskip=0pt\relax
+ \spaceskip=0.2em plus 1fill\relax
+ \hskip 3em\relax
+ #1%
+ }
+
+ \def\lastpage#1{%
+ \parfillskip=3em plus 1fill\relax
+ \spaceskip=0.2em plus 1fil\relax
+ #1%
+ }
+
+ \renewcommand{\arraystretch}{1}
+ \renewcommand{\doublerulesep}{0.5em}
+ \begin{tabularx}{\linewidth}{|X|@{\hskip\doublerulesep}|X|}
+ \multicolumn1c{\bfseries Widow} &
+ \multicolumn1c{\bfseries Orphan}
+ \\\hhline{-||-}%
+ \firstpage{A widow is when a paragraph's last line is
+ placed on a different page}%
+ &\vskip4pt\leavevmode\firstpage{An orphan is when the first}%
+ \\ \hhline{-||-}
+ \lastpage{than where it begins.}
+ & \lastpage{line of a paragraph occurs on the
+ page before all the other lines.} \\ \hhline{-||-}
+ \end{tabularx}
+ \caption{The difference between \waos/. If we imagine that each box is a
+ different page, then this roughly simulates how \waos/ appear.\oldlooseness=-1}
+ \label{tab:widow}
+ \end{figure}
+
+ \subsection{Broken hyphens}
+
+ \q{Broken} hyphens occur whenever a page break occurs in a
+ hyphenated word. These are not related to \waos/; however,
+ breaking a word across two pages is at least as disruptive for the reader
+ as \waos/. \TeX{} identifies broken hyphens in the same ways as \waos/, so
+ \lwc/ treats broken hyphens in the same way.
+
+ \section{History and etymology}
+
+ The concept of \waos/ is nearly as old as printing itself. In \titlecite{old},
+ a printers manual from 1683, we have:
+ \begin{quote}
+ Nor do good \emph{Compo\longs/iters} account it good Workman\longs/hip
+ to begin a \emph{Page} with a \emph{Break-line}, unle\longs/s it be a
+ very \longs/hort \emph{Break}, and cannot be gotten in the foregoing
+ \emph{Page}\,; but if it be a long \emph{Break}, he will let it be the
+ \emph{Direction-line} of the fore-going \emph{Page}, and \emph{Set} his
+ \emph{Direction} at the end of it. \endofline{(p.~226)}
+ \end{quote}
+ However, the terms \q{widow} and \q{orphan} are much newer.
+
+ \subsection{Widows}
+
+ The earliest published source that I could find referencing \q{widows} in
+ typography is \textsl{Webster's New International Dictionary} from~1934.
+ However, no one---not even the editors of the
+ dictionary~\cite{widowhistory}---seems to know how it got there. Even then,
+ the definition is somewhat different than it is now:
+ \begin{quote}
+ widow, n.~c.~\emph{Print}\@. A short line or single word carried over
+ from the foot of one column or page to the head of a succeeding column
+ or page.
+ \endofline{\cite{widowhistory}}
+ \end{quote}
+ Contrast this with the modern definition:
+ \begin{quote}
+ The stub-ends left when paragraphs end on the first line of a page are called
+ widows. They have a past but not a future, and they look foreshortened and forlorn.
+ \endofline{\cite{elements}}
+ \end{quote}
+ which includes a single lone line of any length.
+
+ \subsection{Orphans}
+
+ The term \q{orphan} is even more confusing. Its initial usage seems to have
+ occurred some time after \q{widow}~\cite{widowhistory}, and it is given many
+ contradictory definitions. Most sources define an orphan as a first line at
+ the bottom of the page and a widow as the last line at the
+ top~\cite{elements, widowhistory, widowhistory2, Isambert:TB31-1-12,
+ texbook, widows-and-orphans, oed-line, oed-widow}; however, some sources
+ define these two terms as \emph{exact opposites} of each other, with a widow
+ as a first line at the bottom of the page and an orphan as the last
+ line!~\cite{backwards1, widowhistory, backwards3, oed-line,
+ backwards2}\tubsentencespace
+ This usage is plain wrong; nevertheless, it is sufficiently common that you
+ need to be careful when you see the terms \q{widow} and \q{orphan}.
+
+ Similarly to the term \q{widow}, \titlecite{elements} provides a succinct
+ definition of the term \q{club}, along with a helpful mnemonic:
+ \begin{quote}
+ Isolated lines created when paragraphs begin on the last line of a page
+ are known as orphans. They have no past, but they do have a future.
+ \endofline{\cite{elements}}
+ \end{quote}
+
+ \subsection{Clubs}
+
+ \textsl{The \TeX{}book} never refers to \q{orphans} as such; rather, it
+ refers to them as \q{clubs}. This term is remarkably rare: I could only find
+ a \emph{single} source published before \textsl{The \TeX{}book}---a
+ compilation article about the definition of \q{widow}---that mentions
+ a \q{club line}:
+ \begin{quotation}
+ \noindent
+ The Dictionary staff informs me that they have no example of the use of
+ the word widow in the typographical sense.~[\dots]
+
+ Mr.~Watson of the technical staff says that
+ the Edinburgh printing houses referred to it as a \q{clubline}.
+ \endofline{\cite[p.~4]{widowhistory}}
+ \end{quotation}\medskip
+ \begin{quotation}
+ \noindent
+ To my knowledge, a `widow', or `widow-line,' is a short line, forming
+ the end of a paragraph, which is carried over from the foot of a page or
+ column to the top of the succeeding one.~[\dots]
+
+ To my personal knowledge, in typographical parlance in Edinburgh,
+ Scotland, the `widow' is called a `club-line.'
+ \endofline{\cite[p.~23]{widowhistory}}
+ \end{quotation}
+
+ Both quotes above are from separate authors, and they each define a \q{club}
+ like we define \q{widow}, not an \q{orphan}. In addition, they both mention
+ that the term is only used in Scotland. Even the extensive
+ \acro{OED}---which lists 17~full definitions and
+ 103~subdefinitions for the noun \q{club}---doesn't recognize the
+ phrase.~\cite{oed-club}
+
+ I spent a few hours searching through Google Books and my university library
+ catalogue, but I could not find a single additional source. However, Don
+ Knuth---the creator of \TeX{}---read the original article
+ \cite{tb133chernoff-widows} and sent me this reply:
+ \oldlooseness=-1
+
+ \begin{quote}
+ I cannot remember where I found the term \q{club line}. Evidently
+ the books that I scoured in 1977 and 1978 had taught me only that an
+ isolated line, caused by breaking between pages in the midst of a
+ paragraph, was called a \q{widow}; hence \TeX78 had only
+ \q{\cs{chpar4}} to
+ change the \q{\texttt{widowpenalty}}. Sometime between then and \TeX82
+ I must
+ have come across what appeared to be an authoritative source that
+ distinguished between widows at the beginning of a paragraph and
+ orphans or club lines at the end. I may have felt that the term
+ \q{orphan} was somewhat pejorative, who knows?\footnotemark
+ \end{quote}
+
+ \footnotetext{
+ Note that this definition is somewhat mistaken. Widows are located
+ either at the \emph{end} of a paragraph, or the beginning of a
+ \emph{page or column}. Likewise, orphans\slash{}clubs appear at the
+ \emph{beginning} of a paragraph or at the end of a \emph{page or column}.
+ }
+
+ \noindent
+ So this (somewhat) resolves the question of where the term \q{club} came
+ from.
+
+ \section{Pagination in \TeX}
+
+ Let's move on to looking at how \TeX{} treats these \waos/.
+
+ \subsection{Algorithm}
+
+ It is tricky to understand how \lwc/ works if you aren't familiar with how
+ \TeX{} breaks pages and columns. For a full description, you should consult
+ Chapter~15 of~\titlecite{texbook} (\q{How \TeX{} Makes
+ Lines into Pages}); however, this goes into much more detail than most users
+ require, so here is a \emph{very} simplified summary of \TeX{}'s page
+ breaking algorithm:
+
+ \TeX{} fills the page with lines and other objects until the next object
+ will no longer fit. Once no more objects will fit, \TeX{} will align the
+ bottom of the last line with the bottom of the page by stretching any
+ available vertical spaces if (in \LaTeX) \cs{flushbottom} is set;
+ otherwise, it will
+ break the page and leave the bottom empty.
+
+ However, some objects have penalties attached. Penalties encourage or
+ discourage page breaks from occurring at specific places. For example,
+ \LaTeX{} sets a negative penalty before section headings to encourage a
+ page break there; conversely, it sets a positive penalty after section
+ headings to discourage breaking.
+
+ To reduce \waos/, \TeX{} sets weakly-positive penalties between the
+ first and second lines of a paragraph to prevent orphans, and between the
+ penultimate and final lines to prevent widows.
+
+ One important note: once \TeX{} begins breaking a page, it never goes
+ back to modify any content on the page. Page breaking is a localized
+ algorithm, without any backtracking.
+
+ \subsection{Behaviour}
+
+ Merely describing the algorithm doesn't allow us to intuitively
+ understand how
+ \TeX{} deals with \waos/.
+
+ Due to the penalties attached to \waos/, \TeX{} tries to avoid
+ them. Widows and orphans with small penalties attached---like
+ \LaTeX's default values of 150---are only lightly coupled to the rest
+ of the paragraph, while \waos/ with large penalties---values of
+ 10\,000 or more---are treated as infinitely bad and are thus
+ unbreakable. Intermediate values behave just as you would expect,
+ discouraging page breaks proportional to their value.
+
+ When \TeX{} goes to break a page, it tries to avoid breaking at a
+ location with a high penalty. How it does so depends on a few settings:
+
+ \subsubsection{\cs{flushbottom} and \cs{normalbottom}}
+
+ With the settings \cs{normalbottom} (Plain \TeX{}) or \cs{flushbottom}
+ (\LaTeX{}), \TeX{} is willing to stretch any glue on the page by an amount
+ roughly commensurate to the magnitude of the penalty: for small
+ \cs{clubpenalty} and \cs{widowpenalty} values, \TeX{} will only slightly
+ stretch the glue on the page before creating a \woo/; for very large
+ penalties, \TeX{} will stretch the glue by a near-infinite amount.
+ \oldlooseness=-1
+
+ This corresponds to the \q{Stretch} column in
+ Figure~\ref{fig:demo}. It is
+ the default behaviour of Plain~\TeX{}, and of the standard \LaTeX{} classes
+ when the \verb|twocolumn| option is given.
+
+ \subsubsection{\cs{raggedbottom}}
+
+ When \cs{raggedbottom} is set, \TeX{} won't stretch any glue. Instead, for
+ sufficiently high \cs{clubpenalty} and
+ \cs{widowpenalty} values, \TeX{} will shorten the page or column by
+ one~line in order to prevent the \woo/ from being created.
+
+ This corresponds to the \q{Shorten} column in Figure~\ref{fig:demo} and is
+ the default behaviour of the \LaTeX{} classes when the
+ \verb|twocolumn| option is not given.
+
+ \section{\lsness/}\label{sec:looseness} Before we can continue further, we
+ need to discuss one more \TeX{} command: \lsness/. The following is
+ excerpted from Chapter~14 of~\titlecite{texbook} (\q{How \TeX{} Breaks
+ Paragraphs into Lines}):
+
+ \begin{quotation}
+ \noindent
+ If you set \lsness/\verb|=1|, \TeX{} will try to make the current
+ paragraph one line longer than its optimum length, provided that
+ there is a way to choose such breakpoints without exceeding the
+ tolerance you have specified for the badnesses of individual lines.
+ Similarly, if you set \lsness/\verb|=2|, \TeX{} will try to make the
+ paragraph two lines longer; and \lsness/\verb|=-1| causes an attempt
+ to make it shorter.~[\dots]
+
+ For example, you can set \lsness/\verb|=1| if you want to avoid a
+ lonely \q{club line} or \q{widow line} on some page that does not
+ have sufficiently flexible glue, or if you want the total number of
+ lines in some two-column document to come out to be an even number.
+
+ It's usually best to choose a paragraph that is already pretty
+ \q{full}, i.e., one whose last line doesn't have much white space,
+ since such paragraphs can generally be loosened without much harm.
+ You might also want to insert a tie between the last two words of
+ that paragraph, so that the loosened version will not end with only
+ one \q{widow word} on the orphans line; this tie will cover your
+ tracks, so that people will find it hard to detect the fact that you
+ have tampered with the spacing. On the other hand, \TeX{} can take
+ almost any sufficiently long paragraph and stretch it a bit, without
+ substantial~harm.
+ \oldlooseness=1
+ \end{quotation}
+
+ The \wao/ removal strategy suggested in the second paragraph works quite
+ well; however, it requires manual editing each and every time a page
+ or paragraph is rewritten or repositioned.
+
+ \begin{sidewaysfigure}[p!]
+ \includegraphics{lwc-zpravodaj-figure}
+ \caption{A visual comparison of various automated widow-handling
+ techniques.
+ }\label{fig:demo}
+ \end{sidewaysfigure}
+
+ \section{Alternate removal strategies}
+
+ There have been a few previous attempts to improve upon \TeX's
+ previously discussed \wao/-handling abilities; however, none of these
+ have been able to automatically remove \waos/ without stretching any vertical glue
+ or shortening any pages.
+
+ The articles \titlecite{Isambert:TB31-1-12} and \titlecite{mittelbach} both
+ begin with comprehensive discussions of the methods of preventing \waos/.
+ They agree that \waos/ are bad and ought to be avoided; however, they
+ differ in their solutions. \textsl{Strategies}~proposes an output routine
+ that reduces the length of facing pages by one line when necessary to
+ remove \waos/, while \textsl{Managing}~proposes that the author manually
+ rewrites or adjusts \lsness/ when needed.
+
+ The post \titlecite{widow-assist} contains a file
+ \verb|widow-assist.lua| that
+ automatically detects which paragraphs can be safely shortened or
+ lengthened by one line. The \textsf{widows-and-orphans}
+ package~\cite{widows-and-orphans} alerts the author to
+ the pages that contain widows or orphans. Combined, these packages make
+ it simple for the author to quickly remove \waos/ by adjusting the
+ values of \lsness/; however, it still requires the author to make manual
+ source changes after each revision.
+
+ Another article suggests a fully-automated solution to remove
+ \waos/~\cite{global}. This would seem to offer a complete solution; however,
+ it requires multiple passes, an external tool, and has not yet been publicly
+ released.
+
+ \Lwc/ is essentially a combination of
+ \verb|widow-assist.lua|~\cite{widow-assist} and
+ \textsf{widows-and-orphans}~\cite{widows-and-orphans}, although its
+ implementation is independent of both: when the \openalty/
+ value indicates
+ that a \woo/ has occurred, Lua is used to find a stretchable paragraph. What
+ \lwc/ mainly adds on top of these packages is automation: it eliminates the
+ requirement for any manual adjustments or changes to your document's
+ source.
+
+ \section{Visual comparison}
+
+ Although \TeX{}'s page breaking algorithm is reasonably
+ straightforward, it can lead to
+ complex behaviour when \waos/ are involved. The usual
+ choices, when rewriting is not possible, are to ignore them,
+ stretch some glue, or shorten the
+ page. Figure~\ref{fig:demo} has a visual comparison of these
+ options, which we'll discuss in the following:
+
+ \subsection{Ignore}
+
+ As you can see, the last line of the page is on a separate page from the
+ rest of its paragraph, creating a widow. This is usually highly
+ distracting for the reader, so it is best avoided for the reasons previously
+ discussed.
+
+ \subsection{Shorten}
+
+ This page did not leave any widows, but it did shorten the previous page
+ by one line. Sometimes this is acceptable, but usually it looks bad because
+ pages will then have different text-block heights. This can make the pages
+ look quite uneven, especially when typesetting with columns or in a book
+ with~facing~pages.
+ \oldlooseness=1
+
+ \subsection{Stretch}
+
+ This page also has no widows and it has a flush bottom margin. However,
+ the space between each pair of paragraphs had to be stretched.
+
+ If this page had many equations, headings, and other elements with
+ natural space between them, the stretched out space would be much less
+ noticeable. \TeX{} was designed for mathematical typesetting, so it makes
+ sense that this is its default behaviour. However, in a page with mostly
+ text, these paragraph gaps look unsightly.
+
+ Also, this method is incompatible with grid typesetting, where
+ all vertical glue stretching must be quantised to the height of a line.
+
+ \subsection{\lwc/}
+
+ \Lwc/ has none of these issues: it eliminates the widows in a document
+ while keeping a flush bottom margin and constant paragraph spacing.
+
+ To do so, \lwc/ lengthened the second paragraph in Figure~\ref{fig:demo} by
+ one line. If you look closely, you can see that this stretched the
+ interword spaces. This stretching is noticeable when typesetting in a
+ narrow text block, but is mostly imperceptible with larger widths.
+
+ \Lwc/ automatically finds the \q{best} paragraph to stretch, so the
+ increase in interword spaces should almost always be minimal.
+
+ \section{Installation and standard usage}
+
+ The \lwc/ package was first released in
+ October~2021. It is available in the default installations of both
+ MiK\TeX{} and \TeX{}~Live, although you will need recent versions
+ of either.
+
+ You may also download \lwc/ manually from either
+ \inlineurl[ctan.org/pkg/lua-widow-control]{\acro{CTAN},}
+ the \inlineurl%
+ [modules.contextgarden.net/cgi-bin/module.cgi/action=view/id=127]%
+ {\ConTeXt{} Garden,} or \inlineurl%
+ [github.com/gucci-on-fleek/lua-widow-control/releases/latest/]%
+ {GitHub,} although it is best if you can install it through your
+ \TeX~distribution.
+
+ As its name may suggest, \lwc/ \textit{requires} Lua\TeX{} or
+ \LuaMeta\TeX{} regardless of the format used.
+ With that in mind, using \lwc/ is quite simple:
+
+ \begin{tabular}{rl}
+ Plain \TeX{} &
+ \cs{input lua-widow-control}\phantom{\tt]} \\
+ \OpTeX {} &
+ \cs{load[lua-widow-control]} \\
+ \LaTeX{} &
+ \latexuse/ \\
+ \ConTeXt{} &
+ \cs{usemodule[lua-widow-control]} \\
+ \end{tabular}
+
+ And that's usually enough. Most users won't need to do anything else since
+ \lwc/ comes preconfigured and ready-to-go.
+
+ \section{Options}
+
+ Nevertheless, \lwc/ does have a few options.
+
+ \Lwc/ tries very hard to have a \q{natural} user interface with each
+ format, so how you set an option heavily depends on how you are running
+ \lwc/. Also note that not every option is available in every format.
+
+ Some general guidelines:
+
+ \begin{tabularx}\linewidth{rX}
+ \plainop/ & Specially-named \cs{lwc}\meta{option} commands and
+ registers are provided for all options. \\[4pt]
+ \LaTeX{} & Options can be set either as package options or at
+ any point in the document with \cs{lwcsetup}. \\[4pt]
+ \ConTeXt{} & Always use \cs{setuplwc}.
+ \end{tabularx}
+
+ \subsection{Disabling}
+
+ You may want to disable \lwc/ for certain portions of your
+ document. You can do so with the following commands:
+
+ \begin{tabular}{rl}
+ \plainop/ &
+ \cs{lwcdisable} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{disable\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[state=stop]}\hphantom{\texttt{a}} \\
+ \end{tabular}
+
+ This prevents \lwc/ from stretching any paragraphs that follow. If a page
+ has earlier paragraphs where \lwc/ was still enabled and a \woo/ is
+ detected, \lwc/ will still attempt to remove the \woo/.
+
+ \subsection{Enabling}
+
+ \Lwc/ is enabled as soon as the package is loaded. If you have previously
+ disabled it, you will need to re-enable it to save new paragraphs.
+
+ \begin{tabular}{rl}
+ \plainop/ &
+ \cs{lwcenable} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{enable\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[state=start]} \\
+ \end{tabular}
+
+ \subsection{Automatically disabling}
+
+ You may want to disable \lwc/ for certain commands where
+ stretching is undesirable such as section headings. Of course, manually
+ disabling and
+ then enabling \lwc/ multiple times
+ throughout a document would quickly become tedious, so \lwc/ provides
+ some options to do this automatically for you.
+
+ \Lwc/ automatically patches the default \LaTeX{}, \ConTeXt{},
+ Plain \TeX{}, \OpTeX{}, \textsf{\mbox{memoir}},
+ \textsf{KOMA-Script}, and \textsf{titlesec} section commands, so you don't
+ need to patch these. Any others, though, you'll need to patch yourself.
+
+ \begin{tabular}{rl}
+ \plainop/ & \cs{lwcdisablecmd\{\meta{\texttt{\char`\\}macro}\}} \\[4pt]
+ \LaTeX{} & \cs{lwcsetup\{disablecmds=\{\texttt{\meta{csnameone},%
+ \meta{csnametwo}\}\}}} \\[4pt]
+ \ConTeXt{} &
+ \cs{prependtoks\textbackslash{}lwc@patch@pre}\cs{to\textbackslash{}everybefore\meta{hook}} \\
+ & \cs{prependtoks\textbackslash{}lwc@patch@post}\cs{to\textbackslash{}everyafter\meta{hook}} \\
+ \end{tabular}
+
+ \subsection{\estretch/}
+
+ \Lwc/ defaults to an \estretch/ value of 3~em for stretched paragraphs,
+ but you can configure this.
+
+ \Lwc/ will only use the \estretch/ when it cannot extend a paragraph in
+ any other way, so it is fairly safe to set this to a large value. \TeX{}
+ accumulates badness when \estretch/ is used~\cite{Knuth:TB10-3-325}, so
+ it's pretty rare that a paragraph that requires any \estretch/ will
+ actually be used on the page.
+
+ \begin{tabular}{rr@=l}
+ \plainop/ & \cs{lwcemergencystretch} & \meta{dimension} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{emergencystretch} & \meta{dimension}\texttt{\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[emergencystretch} & \meta{dimension}\texttt{]} \\
+ \end{tabular}
+
+ \subsection{Penalties}
+
+ You can also manually adjust the penalties that \TeX{} assigns to \waos/.
+ Usually, the defaults are fine, but there are a few circumstances where you
+ may want to change them.
+
+ \begin{longtable}{rr@{\texttt{=\meta{integer}}}l}
+ \plainop/ & \cs{widowpenalty} \\*
+ & \cs{clubpenalty} \\*
+ & \cs{brokenpenalty} \\[4pt]
+ \LaTeX{} &
+ \cs{lwcsetup\{ widowpenalty} & \texttt{\}} \\*
+ & \cs{lwcsetup\{orphanpenalty} & \texttt{\}} \\*
+ & \cs{lwcsetup\{brokenpenalty} & \texttt{\}} \\[4pt]
+ \leavevmode\hbox{\ConTeXt{}} &
+ \cs{setuplwc[ widowpenalty} & \texttt{]} \\*
+ & \cs{setuplwc[orphanpenalty} & \texttt{]} \\*
+ & \cs{setuplwc[brokenpenalty} & \texttt{]} \\
+ \end{longtable}
+
+ The value of these penalties determines how much \TeX{} should attempt to
+ stretch glue before passing the \woo/ to \lwc/. If you set the values to~1
+ (default), \TeX{} will stretch nothing and immediately trigger \lwc/; if you
+ set the values to 10\,000, \TeX{} will stretch infinitely and \lwc/ will
+ never be triggered. If you set the value to some intermediate number, \TeX{}
+ will first attempt to stretch some glue to remove the \woo/; only if it
+ fails will \lwc/ come in and lengthen a paragraph. As a special case, if you
+ set the values to~0, both \TeX{} and \lwc/ will completely ignore the \woo/.
+
+ \Lwc/ will pick up on the values of \cs{widowpenalty}, \cs{clubpenalty}, and
+ \cs{brokenpenalty} regardless of how you set them, so the use of these
+ dedicated keys is entirely optional.
+
+ \subsection{\cs{nobreak} behaviour}
+
+ When \lwc/ encounters an orphan, it removes it by moving the orphaned line
+ to the next page. The majority of the time, this is an appropriate solution.
+ However, if the orphan is immediately preceded by a section heading (or
+ \cs{nobreak}\slash\cs{penalty 10000}), \lwc/ would na\"ively separate a
+ section heading from the paragraph that follows. This is almost always
+ undesirable, so \lwc/ provides some options to configure this.
+
+ \begin{tabular}{rl}
+ \plainop/ &
+ \cs{lwcnobreak\{\meta{value}\}} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{nobreak=\meta{value}\}\hphantom{"}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[nobreak=\meta{value}]\hphantom{"}} \\
+ \end{tabular}
+
+ The default value, \texttt{keep}, \emph{keep}s the section heading with
+ the orphan by moving both to the next page. The advantage to this option
+ is that it removes the orphan and retains any \cs{nobreak}s; the
+ disadvantage is that moving the section heading can create a large blank
+ space at the end of the page.
+ The value \texttt{split} \emph{split}s up the section heading and the
+ orphan by moving the orphan to the next page while leaving the heading
+ behind. This is usually a bad idea, but exists for the sake of
+ flexibility.
+ The value \texttt{warn} causes \lwc/ to give up on the page and do nothing,
+ leaving an orphaned line. \Lwc/ \emph{warn}s the user so that they can
+ manually remove the orphan.
+
+ See Figure~\ref{tab:nobreak} for a visual reference.
+
+ \begin{figure}
+ \renewcommand{\arraystretch}{1}
+ \renewcommand{\doublerulesep}{0.5em}
+ \begin{tabularx}{\linewidth}{%
+ |X|@{\hskip\doublerulesep}|X|@{\hskip\doublerulesep}|X|%
+ }
+ \multicolumn1c{\ttfamily keep} &
+ \multicolumn1c{\ttfamily split} &
+ \multicolumn1c{\ttfamily warn}
+ \\ \hhline{-||-||-}
+ &
+ &
+ \textbf{Heading} \\
+ &
+ \textbf{Heading} &
+ The\hfill very\hfill first\hfill line
+ \\ \hhline{-||-||-}
+ \textbf{Heading} &
+ The\hfill very\hfill first\hfill line &
+ text\hfill text\hfill text\hfill text \\
+ The\hfill very\hfill first\hfill line &
+ text\hfill text\hfill text\hfill text &
+ last line. \\
+ text\hfill text\hfill text\hfill text &
+ last line. &
+ % Nothing
+ \\ \hhline{-||-||-}
+ \end{tabularx}
+ \caption{A visual comparison of the \texttt{nobreak} option values.}
+ \label{tab:nobreak}
+ \end{figure}
+
+ \subsection{Maximum cost}
+
+ \Lwc/ ranks each paragraph on the page by how much it would \q{cost} to
+ lengthen that paragraph. By default, \lwc/ selects the paragraph on
+ the page with the lowest cost; however, you can configure it to only
+ select paragraphs below a selected cost.
+
+ If there aren't any paragraphs below the set threshold, then \lwc/ won't
+ remove the \woo/ and will instead issue a warning.
+
+ \begin{tabular}{rr@{\texttt{=\meta{integer}}}l}
+ \plainop/ &
+ \cs{lwcmaxcost} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{max-cost} & \texttt{\}} \\
+ \leavevmode\hbox{\ConTeXt{}} &
+ \cs{setuplwc[maxcost} & \texttt{]} \\
+ \end{tabular}
+
+ Based on my testing, \texttt{max-cost} values less than 1\,000 cause
+ completely imperceptible changes in interword spacing; values less than
+ 5\,000 are only noticeable if you are specifically trying to pick out the
+ expanded paragraph on the page; values less than 15\,000 are typically
+ acceptable; and larger values may become distracting. \Lwc/ defaults to an
+ infinite \texttt{max-cost}, although the \q{strict} and \q{balanced} modes
+ sets the values to~5\,000 and 10\,000, respectively.
+
+ \subsection{Draft mode}
+
+ \Lwc/ has a \q{draft mode} which shows how \lwc/ processes pages.
+
+ \begin{tabular}{rl}
+ Plain \TeX{}\slash\OpTeX{} &
+ \cs{lwcdraft 1} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{draft\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[draft=start]} \\
+ \end{tabular}
+
+ The draft mode has two main features:
+
+ First, it colours lines in the document according to their status. Any
+ remaining widows and orphans will be coloured red, any expanded paragraphs
+ will be coloured green, and any lines moved to the next page will be
+ coloured blue.
+
+ Second, this draft mode shows the paragraph costs at the end of each
+ paragraph, in the margin.
+
+ This draft mode leads to a neat trick: if you don't quite trust \lwc/, or
+ you're writing a document whose final version will need to be compilable by
+ both pdf\LaTeX{} and Lua\LaTeX, you can load the package with:
+
+ \smallskip
+ \cs{usepackage[draft, disable]\{lua-widow-control\}}
+ \smallskip
+
+ \noindent This way, all the widows and orphans will be coloured red and
+ listed in your log file. When you go through the document to try and
+ manually remove the widows and orphans---whether through the \cs{looseness}
+ trick or by rewriting certain lines---you can easily find the best
+ paragraphs to modify by looking at the paragraph costs in the margins. If
+ you're less cautious, you can compile your document with
+ \textsf{lua-widow-control} enabled as normal and inspect all the green
+ paragraphs to see if they look acceptable to you.
+
+ You can also toggle the paragraph colouring and the cost displays
+ individually:
+
+ \begin{tabular}{rl}
+ \plainop/ &
+ \cs{lwcshowcosts 1} \\
+ & \cs{lwcshowcolours 0} \\[4pt]
+ \LaTeX{} &
+ \cs{lwcsetup\{showcosts=true\}} \\
+ & \cs{lwcsetup\{showcolours=false\}} \\[4pt]
+ \ConTeXt{} &
+ \cs{setuplwc[showcosts=start]} \\
+ & \cs{setuplwc[showcolours=stop]} \\
+ \end{tabular}
+
+ \section{Presets}
+
+ As you can see, \lwc/ provides quite a few options. Luckily, there are a few
+ presets that you can use to set multiple options at once. These presets are
+ a good starting point for most documents, and you can always manually
+ override individual options.
+
+ These presets are only available for \LaTeX{} and \ConTeXt{}.
+
+ \begin{tabular}{@{}rl@{}}
+ \LaTeX{} &
+ \cs{lwcsetup\{\meta{preset}\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[\meta{preset}]} \\
+ \end{tabular}
+
+ \subsection{\texttt{default}}
+
+ If you use \lwc/ without any options, it defaults to this preset. In default
+ mode, \lwc/ takes all possible measures to remove \waos/ and will not
+ attempt to stretch any vertical glue. This usually
+ removes~$\mathord{>}\,95\%$ of all
+ possible \waos/. The catch here is that this mode is quite aggressive, so
+ it often leaves behind some fairly \q{spacey} paragraphs.
+
+ This mode is good if you want to remove (nearly) all \waos/ from your
+ document, without fine-tuning the results.
+
+ \subsection{\texttt{strict}}
+
+ \Lwc/ also offers a strict mode. This greatly restricts \lwc/'s tolerance
+ and makes it so that it will only lengthen paragraphs where the change will
+ be imperceptible.
+
+ The caveat with strict mode is that---depending on the document---\lwc/ will
+ be able to remove less than a third of the \waos/. For the \waos/ that can't
+ be automatically removed, a warning will be printed to your terminal and log
+ file so that a human can manually fix the situation.
+
+ This mode is good if you want the best possible typesetting and are willing
+ to do some manual editing.
+
+ \subsection{\texttt{balanced}}
+
+ Balanced mode sits somewhere between default mode and strict mode. This mode
+ first lets \TeX{} stretch a little glue to remove the \woo/; only if that
+ fails will it then trigger \lwc/. Even then, the maximum paragraph cost is
+ capped. Here, \lwc/ can usually remove 90\% of a document's
+ potential \waos/, and it does so while making a minimal visual impact.
+ \oldlooseness=-1
+
+ This mode is recommended for most users who care about their document's
+ typography. This mode is not the default since it doesn't remove all
+ \waos/: it
+ still requires a little manual intervention.
+
+ \begin{table}
+ \caption{\Lwc/ options set by each mode.}\label{tab:modes}
+ \ttfamily\setlength{\tabcolsep}{4pt}
+ \begin{tabular}{l*3r}\toprule
+ \textrm{Option} & default & balanced & strict \\ \midrule
+ max-cost & $\infty$ & 10000 & 5000 \\
+ \rlap{emergencystretch} & 3em & 1em & 0pt \\
+ nobreak & keep & keep & warn \\
+ widowpenalty & 1 & 500 & 1 \\
+ orphanpenalty & 1 & 500 & 1 \\
+ brokenpenalty & 1 & 500 & 1 \\
+ \bottomrule\end{tabular}
+ \end{table}
+
+ \section{Compatibility}
+
+ The \lwc/ implementation is almost entirely in Lua, with only a minimal
+ \TeX{} footprint. It doesn't modify the output routine or \cs{everypar} and
+ it doesn't insert any whatsits. This means that it should be compatible with
+ nearly any \TeX{} package, class, and format. Most changes that \lwc/ makes
+ are not observable on the \TeX{} side.
+
+ However, on the Lua side, \lwc/ modifies much of a page's internal
+ structure. This should not affect any \TeX{} code; however, it may surprise
+ Lua code that modifies or depends on the page's low-level structure. This
+ does not affect Plain~\TeX{} or \LaTeX{} where even most Lua-based packages
+ don't depend on the node list structure. \ConTeXt{} \emph{does} depend on
+ this internal node structure; however, I have carefully tested the package
+ to ensure that this causes no issues.
+
+ Finally, keep in mind that adding \lwc/ to a document will almost certainly
+ change its page break locations.
+
+ \subsection{Formats}
+
+ \Lwc/ runs on all known Lua\TeX{}-based formats: Plain~Lua\TeX{},
+ Lua\LaTeX{}, \ConTeXt{} Mk\acro{IV}, and~\OpTeX{}. Unless otherwise
+ documented, all features should work equally well in all formats.
+
+ \Lwc/ is also fully-compatible with the \LuaMeta\TeX{}-based formats:
+ \ConTeXt{} Mk\acro{XL}\slash\acro{LMTX}, \LuaMeta\LaTeX{}, and
+ \LuaMeta{}Plain~\cite{luametalatex}. \ConTeXt{} Mk\acro{XL} works equally
+ well as \ConTeXt{} Mk\acro{IV} and Lua\LaTeX{}; however, \LuaMeta\LaTeX{}
+ and \LuaMeta{}Plain support is still quite early. All features should work,
+ although there are still a few minor bugs.
+
+ All told, \lwc/ supports 7 different format\slash{}engine combinations.
+
+ \subsection{Columns}
+
+ Since \TeX{} and the formats implement column breaking and page
+ breaking through the
+ same internal mechanisms, \lwc/ removes \waos/ between columns just
+ as it does with \waos/ between pages.
+
+ \Lwc/ is known to work with the \LaTeX{} class option \verb|twocolumn|
+ and the two-column output routine from Chapter~23 of \titlecite{texbook}.
+ \oldlooseness=-1
+
+ \subsection{Performance}
+
+ \Lwc/ runs entirely in a single pass, without depending on any
+ \verb|.aux| files or the like. Thus, it shouldn't meaningfully
+ increase compile times. Although \lwc/ internally breaks each paragraph
+ twice, modern computers break paragraphs near-instantaneously, so you
+ are not likely to notice any slowdown.
+
+ \Lwc/ has been carefully tested to ensure that there are no memory leaks, so
+ \lwc/ can now easily compile documents $>10\,000$ pages long.
+
+ \vspace*{-1pt}
+
+ \subsection{\eTeX{} penalties}
+
+ Knuth's original \TeX{} has three basic line penalties:
+ \cs{interlinepenalty}, which
+ is inserted between all lines; \cs{club\-penalty}, which is inserted after
+ the first line; and \cs{widow\-penalty}, which is inserted before the last
+ line. The \eTeX{} extensions~\cite{etex} generalize these commands with a
+ syntax similar to \cs{parshape}: with \cs{widow\-penalties} you can set the
+ penalty between the last, second last, and $n$th last lines of a paragraph;
+ \cs{inter\-line\-penalties} and \cs{club\-penalties} behave similarly.
+
+ The \lwc/ package makes no explicit attempts to support these new
+ -\texttt{penalties} commands. Specifically, if you give a line a penalty
+ that matches either \cs{widowpenalty} or \cs{clubpenalty}, \lwc/ will treat
+ the lines exactly as it would a \woo/. So while these commands won't break
+ \lwc/, they are likely to lead to some unexpected behaviour.
+
+ \vspace*{-3pt}
+
+ \section{Short last lines}
+
+ \vspace*{-1pt}
+
+ When lengthening a paragraph with \lsness/, it is common advice to insert
+ ties (\verb|~|) between the last few words of the paragraph to avoid
+ overly-short last lines \cite{texbook}. \Lwc/ does this automatically,
+ but instead of using ties or \cs{hbox}es, it uses the
+ \cs{par\allowbreak fill\allowbreak skip}
+ parameter~\cite{texbook, Wermuth:2018:ECP, naruby}. When lengthening a paragraph
+ (and only when lengthening a paragraph---remember, \lwc/ doesn't
+ interfere with \TeX{}'s output unless it detects a \woo/), \lwc/ sets
+ \cs{parfillskip} to \verb|0.75\hsize plus 0.05\hsize minus 0.75\hsize|.
+ This normally makes the last line of a paragraph be at least
+ 20\% of the overall paragraph's width, thus preventing
+ ultra-short~lines.
+
+ \vspace*{-3pt}
+
+ \section{How it works}
+
+ \vspace*{-1pt}
+
+ \Lwc/ uses a fairly simple algorithm to eliminate \waos/, but there
+ are a few subtleties.
+
+ \vspace*{-1pt}
+
+ \subsection{Setup}
+
+ \Lwc/ sets the \cs{club\-penalty}, \cs{widow\-penalty}, and
+ \cs{broken\-penalty} parameters to sentinel values of~1. This will signal
+ to \lwc/ when a \woo/ occurs, yet it is small enough that it won't stretch
+ any glue.
+
+ \Lwc/ also enables Lua\TeX{}'s micro\-typographic
+ extensions~\cite{thanh}. This isn't strictly necessary;
+ however, it significantly increases the number of paragraphs that can
+ be acceptably \q{loosened}.
+
+ That is all that happens on the \TeX{} end. The rest of \lwc/ is pure Lua.
+
+ \subsection{Paragraph breaking}
+
+ First, \lwc/ hooks into the paragraph breaking process, before any output
+ routines or page breaking.
+
+ Before a paragraph is broken by \TeX{}, \lwc/ grabs the unbroken
+ paragraph. Then \lwc/ breaks the paragraph one line longer than its natural
+ length and stores it for later. It does this in the background,
+ \emph{without} interfering with how \TeX{} breaks paragraphs into their
+ natural length.
+
+ After \TeX{} has broken its paragraph into its natural length, \lwc/
+ appears again. Before the broken paragraph is added to the main
+ vertical list, \lwc/ \q{tags} the first and last nodes of the paragraph
+ using a Lua\TeX{} attribute. These attributes associate the
+ previously-saved lengthened paragraph with the naturally-typeset
+ paragraph on the page.
+
+ \subsection{Page breaking}
+
+ \Lwc/ intercepts \cs{box255} (the \cs{vbox} output by \TeX) immediately
+ before the output routine runs,
+ after all the paragraphs have been typeset.
+
+ First, \lwc/ looks at the \openalty/ of the page or column. If the page
+ was broken at a \woo/, the \openalty/ will be equal to either
+ the \cs{widowpenalty} or the \cs{clubpenalty}. If the \openalty/ does not
+ indicate a \woo/, \lwc/ will stop and return \cs{box255} unmodified to
+ the output~routine, and \TeX{} continues as normal.
+
+ Otherwise, we assume that we have a \woo/ on the page,
+ meaning that we should lengthen the page by 1~line. We iterate through
+ the list of saved paragraphs to find the lengthened paragraph with the
+ least cost. After we've selected a good paragraph, we traverse
+ through the page to find the original version of this paragraph---the
+ one that unmodified \TeX{} originally typeset. Having found the original
+ paragraph, we splice in the lengthened paragraph in place of the original.
+ \oldlooseness=-1
+
+ Since the page is now 1~line longer than it was before, we pull the last
+ line off the page to bring it back to its original length, and place
+ that line onto the top of \TeX's \q{recent contributions} list. When
+ the next page begins, this line will be inserted before all other
+ paragraphs, right at the top. Now, we can return the new, widow-free page
+ (updated \cs{box255}) to the output routine, which proceeds
+ as normal.
+
+ \subsection{Footnotes}
+ Earlier versions of \textsf{lua-widow-control} completely ignored inserts.
+ This meant that if a moved line had associated footnotes,
+ \textsf{lua-widow-control} would move the \q{footnote mark} but not the
+ associated \q{footnote text}. \textsf{lua-widow-control} now handles
+ footnotes correctly through the mechanism detailed in the next section.
+
+ \subsubsection{Inserts}
+
+ Before we go into the details of how \textsf{lua-widow-control} handles
+ footnotes, we need to look at what footnotes actually are to \TeX{}. Every
+ \cs{footnote} command ultimately expands to something like
+ \cs{insert\meta{class}}\allowbreak\verb|{|\meta{content}\verb|}|, where
+ \meta{class} is an insertion class number, defined as \cs{footins} in this
+ case (in Plain \TeX\ and \LaTeX). Inserts can be found in horizontal mode
+ (footnotes) or in vertical mode (\cs{topins} in Plain \TeX{} and floats in
+ \LaTeX{}), but they cannot be inside boxes. Each of these insert types is
+ assigned a different class number, but the mechanism is otherwise identical.
+ \textsf{lua-widow-control} treats all inserts identically, although it
+ safely ignores vertical mode inserts since they are only ever found between
+ paragraphs.
+
+ But what does \cs{insert} do exactly? When \TeX{} sees an \cs{insert}
+ primitive in horizontal mode (when typesetting a paragraph), it does two
+ things: first, it processes the insert's content and saves it invisibly just
+ below the current line. Second, it effectively adds the insert content's
+ height to the height of the material on the current page. Also, for the
+ first insert on a page, the glue in \cs{skip}\meta{class} is added to the
+ current height. All this is done to ensure that there is sufficient room for
+ the insert on the page whenever the line is output onto the page.
+
+ If there is absolutely no way to make the insert fit on the page---say,
+ if you placed an entire paragraph in a footnote on the last line of a
+ page---then \TeX{} will begrudgingly \q{split} the insert, placing the first
+ part on the current page and \q{holding over} the second part until the next
+ page.
+
+ There are some other \TeX{}nicalities involving \cs{count}\meta{class} and
+ \cs{dimen}\meta{class}, but they mostly don't affect
+ \textsf{lua-widow-control}. See Chapter~15 in \textsl{The \TeX{}book} or another reference for
+ all the details.
+
+ After \TeX{} has chosen the breakpoints for a paragraph, it adds the chosen
+ lines one by one to the current page. Whenever the accumulated page height
+ is \q{close enough} to the target page height (normally \cs{vsize}) the
+ \cs{output} token list (often called the ``output routine'') is expanded.
+
+ But before \cs{output} is called, \TeX{} goes through the page contents and
+ moves the contents of any saved inserts into \cs{vbox}es corresponding to
+ the inserts' classes, namely \cs{box}\meta{class}, so \cs{output} can work
+ with them.
+
+ And that's pretty much it on the engine side. Actually placing the inserts
+ on the page is reserved for the output routine, which is defined by the
+ format. This too is a complicated process, although thankfully not one that
+ \textsf{lua-widow-control} needs to worry about.
+
+ \subsubsection{\LuaMeta\TeX{}}
+
+ The \LuaMeta\TeX{} engine treats inserts slightly differently than
+ traditional \TeX{} engines. The first major difference is that insertions
+ have dedicated registers; so instead of \cs{box}\meta{class}, \LuaMeta\TeX{}
+ has \cs{insertbox}\meta{class}; instead of \cs{count}\meta{class},
+ \LuaMeta\TeX{} has \cs{insertmultiplier}\meta{class}; etc. The second major
+ difference is that \LuaMeta\TeX{} will pick up inserts that are inside of
+ boxes, meaning that placing footnotes in things like tables or frames should
+ mostly just work as expected.
+
+ There are also a few new parameters and other minor changes, but the overall
+ mechanism is still quite similar to traditional \TeX{}.
+
+ \subsubsection{Paragraph breaking}
+
+ As stated in the original article~\cite{tb133chernoff-widows},
+ \textsf{lua-widow-control} intercepts \TeX{}'s output immediately before
+ the output routine. However, this is \emph{after} all the inserts on the
+ page have been processed and boxed. This is a bit of a problem because if
+ we move a line to the next page, we need to move the associated insert;
+ however, the insert is already gone.
+
+ To solve this problem, immediately after \TeX{} has naturally broken a
+ paragraph, \textsf{lua-widow-control} copies and stores all its inserts.
+ Then, \textsf{lua-widow-control} tags the first element of each line
+ (usually a glyph) with a Lua\TeX{} attribute that contains the indices for
+ the first and last associated insert. \textsf{lua-widow-control} also tags
+ each line inside the insert's content with its corresponding index so that
+ it can be found later.
+
+ \subsubsection{Page breaking}
+
+ Here, we follow the same algorithm as in the original
+ article~\cite{tb133chernoff-widows}. However, when we move the last line of
+ the page to the next page, we first need to inspect the line to see if any
+ of its contents have been marked with an insert index. If so, we need to
+ move the corresponding insert to the next page. To do so, we unpack the
+ attributes value to get all the inserts associated with this line.
+
+ Using the stored insert indices and class, we can iterate through
+ \cs{box}\meta{class} and delete any lines that match one of the current
+ line's indices. We also need to iterate through the internal \TeX{} box
+ \verb|hold_head|---the box that holds any inserts split onto the next
+ page---and delete any matching lines. We can safely delete any of these
+ lines since they are still stored in the original \cs{insert} nodes that we
+ copied earlier.
+
+ Now, we can retrieve all of our previously-stored inserts and add them to
+ the next page, immediately after the moved line. Then, when \TeX{} builds
+ that page, it will find these inserts and move their contents to the
+ appropriate boxes
+
+ \section{Choosing the \q{best} paragraph}
+
+ As we discussed previously, \lwc/ lengthens the paragraph with the lowest
+ cost. However, assigning a cost to each paragraph is not quite as simple as
+ it sounds. Before we look at how \lwc/ assigns costs, let's look at how
+ \TeX{} scores paragraphs when breaking them naturally.
+
+ \subsection{How \TeX{} scores paragraphs}
+
+ All glue in \TeX{} has a certain natural size: the size that it would be
+ in an ideal scenario. However, most glue also has stretch and shrink
+ components so that the glue can change in size to adapt to its
+ surroundings. For each line, \TeX{} individually sums the total
+ stretch/shrink for the line and the stretch/shrink that was actually used.
+ We define the stretch/shrink ratio~$r$ as the quotient of the
+ stretch/shrink used and the stretch/shrink available. Then the badness~$b$
+ of a line is approximately defined as
+ \begin{equation*}
+ b = 100r^3.
+ \end{equation*}
+ This is the badness referenced in the commonly-seen
+ \texttt{Underfull \cs{hbox}
+ (badness 1234)} warnings that \TeX{} produces.
+
+ \TeX{} calculates the badness for each line individually; however, we also
+ need to assess the paragraph as a whole. To do so, \TeX{} defines the
+ demerits for a whole paragraph~$d$ as approximately\footnotemark{} the sum
+ of the squared badnesses for each line. The natural paragraph that \TeX{}
+ breaks is the one that minimizes~$d$.
+
+ \footnotetext{We ignore any additional demerits or penalties that
+ \TeX{} may add.}
+
+ One important thing to realize is that demerits grow incredibly fast:
+ demerits are proportional to the \emph{sixth} power of glue stretch. This
+ means that you can expect to see extremely large demerit values, even for
+ a relatively \q{good} paragraph.
+
+ \subsection{Possible cost functions}
+
+ Now, let's return to how \lwc/ assigns costs to each paragraph. This is
+ surprisingly more complicated than it sounds, so we'll go through a few
+ possible cost functions first.
+
+ Here, we use $c$~for the cost of a paragraph, $d$~for the total demerits,
+ and $l$~for the number of lines (\cs{prevgraf}).
+
+ \subsubsection{The original implementation}
+
+ The original implementation of \lwc/ used the simple cost function
+ \begin{equation*}
+ c = d.
+ \end{equation*}
+ This cost function works reasonably well, but has one major issue: it
+ doesn't take into account the number of lines in the paragraph. The demerits
+ for a paragraph is the sum of the demerits for each line. This means this
+ cost function will prefer using shorter paragraphs since they tend to have
+ fewer demerits. However, long paragraphs tend to have much more available
+ glue stretch, so this strategy can lead to suboptimal solutions.
+
+ \subsubsection{Scaling by the number of lines}
+
+ Once I realized this issue, I tried correcting it by dividing by the number
+ of lines in the paragraph to get the average demerits instead of the total
+ demerits:
+ \begin{equation*}
+ c = \frac{d}{l}
+ \end{equation*}
+ This works better than the previous function, but still has an issue.
+ If we have a fairly bad ten-line paragraph with total demerits $10d$ and an
+ almost-equally bad two-line paragraph with total demerits $2d + 1$, then by
+ this cost function, the ten-line paragraph will have a lower cost and will
+ be chosen. This means that our page now has ten bad lines instead of two bad
+ lines, which is not ideal.
+
+ \subsubsection{Current implementation}
+
+ Our first cost function, $c=dl^0$, doesn't consider the number of lines at
+ all, while our second cost function, $c=dl^{-1}$, considers the number of
+ lines too much. Splitting the difference between the two functions, we get
+ the current implementation:
+ \begin{equation*}
+ c = \frac{d}{\sqrt{l}}
+ \end{equation*}
+
+ This solves the issue with the previous function, but it adds a new issue: given a
+ short paragraph with a large number of demerits per line and a long
+ paragraph with fairly few average demerits per line, this function will often
+ choose the shorter line. Although this sounds bad, in practice it gives much
+ better results since very bad short paragraphs are \emph{much} less noticeable than
+ slightly bad long paragraphs.
+
+ Of course, this new function may still not be quite perfect. \Lwc/ uses the
+ \texttt{lwc.paragraph\_cost(demerits, lines)} Lua function to calculate a
+ paragraph's cost; if you want, you can redefine this function to anything
+ that you want.
+ \oldlooseness=-1
+
+ % I didn't arrive at this function through any sort of scientific testing;
+ % rather, I picked the simplest function that I could think of that satisfies
+ % the following two properties:
+ % \begin{itemize}
+ % \item Given a long paragraph and a short paragraph with different
+ % average badnesses per line, prefer the one with the least average
+ % badness.
+ % \item Given two paragraphs with equal average badnesses per line,
+ % prefer the shorter one.
+ % \end{itemize}
+
+ \vspace*{-3pt}
+
+ \section{Quantitative analysis}
+
+ \vspace*{-1pt}
+
+ \begin{figure}
+ \begin{tikzpicture}\begin{axis}[
+ ybar interval,
+ xticklabels={1, ..., 15,
+ {$\,\ge\! 16$}},
+ x tick label style={font=\small},
+ y tick label style={font=\small},
+ enlarge y limits=upper,
+ enlarge x limits={abs=1},
+ grid=none,
+ scaled y ticks=base 10:-3,
+ ytick scale label code/.code={},
+ xlabel={Paragraph length (lines)},
+ ylabel={Count (thousands)}
+ ]
+ \addplot+ [
+ draw=black,
+ fill=black!10,
+ semithick,
+ ] table {
+ Length Count
+ 1 4429
+ 2 3704
+ 3 2045
+ 4 1320
+ 5 894
+ 6 717
+ 7 498
+ 8 406
+ 9 379
+ 10 251
+ 11 175
+ 12 152
+ 13 111
+ 14 95
+ 15 79
+ 16 437
+ 18 0
+ };
+
+ \filldraw [fill=black!25, draw=black] (16, 0) rectangle (18, 437);
+ \end{axis}\end{tikzpicture}
+ \caption{Histogram of natural paragraph lengths in the sample text.}
+ \label{fig:hist}
+ \end{figure}
+
+ Let's look at some statistics for \lwc/. For testing, I
+ downloaded the top~ten books on \textsl{Project Gutenberg},\footnotemark{}
+ converted them to \LaTeX{} using \textsf{pandoc}, concatenated them into a
+ single \textsf{article} file, and compiled twice. This gives us a \acro{PDF}
+ with 1\,381~pages, 15\,692~paragraphs, 61\,865~lines, and 399~\waos/
+ (if they aren't removed).
+ \footnotetext{\textsl{Frankenstein},
+ \textsl{Pride and Prejudice},
+ \textsl{Alice's Adventures in Wonderland},
+ \textsl{The Great Gatsby},
+ \textsl{The Adventures of Sherlock Holmes},
+ \textsl{Simple Sabotage Field Manual},
+ \textsl{A Tale of Two Cities},
+ \textsl{The Picture of Dorian Gray},
+ \textsl{Moby Dick},
+ and \textsl{A Doll's House}.
+ }
+
+ This is a fairly challenging test: almost every third page has a \woo/, over
+ half of the paragraphs have two lines or fewer, and the text block is set to
+ the fairly wide \textsf{article} defaults. An average document is
+ much less challenging for \lwc/, so we can consider this to be a
+ worst-case scenario.
+
+ \vspace*{-1pt}
+
+ \subsection{Widows and orphans removed}
+
+ \begin{figure}
+ \begin{tikzpicture}\begin{axis}[
+ ybar=0pt,
+ bar width=0.8,
+ xtick=data,
+ ylabel={Widows and orphans removed},
+ xticklabels={
+ \shortstack[c]{\hfill Maximum\\\hfill possible},
+ \textsf{lwc} \texttt{default},
+ \texttt{balanced},
+ \LaTeX{},
+ \texttt{strict},
+ },
+ x tick label style={
+ font=\small,
+ rotate=45,
+ anchor=east,
+ },
+ enlarge x limits=0.2,
+ ]
+ \addplot+ [
+ draw=black,
+ fill=black!10,
+ semithick,
+ ] table [x expr=\coordindex, y index=0] {
+ 399
+ 392
+ 348
+ 179
+ 52
+ };
+
+ \filldraw [fill=black!25, draw=black]
+ (-0.4, 0) rectangle (0.4, 399);
+ \end{axis}\end{tikzpicture}
+ \divide\abovecaptionskip by 2
+ \caption{The number of \waos/ removed by each method.}\label{fig:modes}
+ \end{figure}
+
+ When we run \LaTeX{} with its default settings on the file, 179~(47\%) of
+ the \waos/ are removed. When we add \lwc/ with default settings, we remove
+ 392~(98\%). Switching to strict mode, we can only remove 52~(13\%) of the
+ \waos/. In balanced mode, we remove 348~(87\%). See Figure~\ref{fig:modes}
+ for a visual comparison.
+
+ \subsection{Paragraph costs}
+
+ \begin{figure}
+ \begin{tikzpicture}\begin{axis}[
+ xlabel={Percentile},
+ ylabel={Cost},
+ ymode=log,
+ legend entries={Long, Natural},
+ legend pos=north west,
+ cycle list={
+ {black, thick},
+ {black!35, thick},
+ },
+ ]
+ \addplot+ table [x=Percentile, y=Long] {\plotdata};
+ \addplot+ table [x=Percentile, y=Natural] {\plotdata};
+
+ \end{axis}\end{tikzpicture}
+ \divide\abovecaptionskip by 2
+ \caption{Paragraph costs by percentile rank for naturally-broken and
+ one-line lengthened paragraphs.}\label{fig:costs}
+ \end{figure}
+
+ The last section showed us that \lwc/ is quite effective at removing \waos/,
+ so now let's look at the paragraphs that \lwc/ expands. As \TeX{}
+ processes a document, \lwc/ is recording the costs for the naturally-broken
+ and expanded versions of each paragraph in the document. Costs don't
+ mean that much on their own, but a lower cost is always better.
+
+ As you can see in Figure~\ref{fig:costs}, the
+ lengthened paragraphs tend to have \emph{much} higher costs than the
+ naturally-broken paragraphs. This is not surprising, since (as we've seen)
+ a paragraph's demerits scale with the sixth power of glue stretch, so even
+ a small amount of glue stretch can cause a huge increase in demerits.
+
+ The empty space on the left of the \q{long} line is from the paragraphs
+ that \lwc/ was unable to lengthen at any cost. Lua\TeX{} assigns these
+ paragraphs zero~demerits, so they disappear on a logarithmic plot.
+
+ \subsection{Lengthening vs.\ shortening paragraphs}
+ \begin{figure}[t]
+ \begin{tikzpicture}\begin{axis}[
+ xbar stacked,
+ height=0.15\linewidth,
+ width=\dimexpr\linewidth-1em,
+ scale only axis,
+ bar width=1,
+ enlargelimits=false,
+ xmin=0,
+ ymin=-0.5,
+ ymax=1,
+ ymajorticks=false,
+ xtick style={draw=none},
+ xlabel={Paragraphs (thousands)},
+ scaled x ticks=base 10:-3,
+ xtick scale label code/.code={},
+ legend style={at={(0.5,1)}, anchor=north},
+ legend columns=5,
+ legend cell align=left,
+ legend style={
+ /tikz/every even column/.append style={column sep=1em},
+ draw=none,
+ fill=none,
+ },
+ legend entries={
+ {$n=1$},
+ {$n$},
+ {$n+1$},
+ {$n\pm1$},
+ {$n-1$}
+ },
+ ]
+ \addplot [fill=black!10 ] coordinates {(4429, 0)}; % One
+ \addplot [fill=white ] coordinates {(4474, 0)}; % None
+ \addplot [pattern=north east lines] coordinates {(5457, 0)}; % Long
+ \addplot [pattern=crosshatch ] coordinates {( 482, 0)}; % Both
+ \addplot [pattern=north west lines] coordinates {( 850, 0)}; % Short
+ \end{axis}\end{tikzpicture}
+ \divide\abovecaptionskip by 2
+ \caption{The number of paragraphs in the test sample that
+ (respectively) have exactly
+ one line, cannot be stretched or shrunk, can be only stretched
+ by one~line, can be either stretched or shrunk, and can be
+ only shrunk.}
+ \label{fig:stretchshrink}
+ \end{figure}
+
+ Figure~\ref{fig:stretchshrink} shows the number of paragraphs that \lwc/
+ could potentially stretch or shrink. The one-line paragraphs are broken out
+ separately since this test sample has an anomalous number of them.
+ Otherwise, we can see that \lwc/ is capable of stretching the majority of
+ paragraphs.
+
+ We can also see that of non-single-line paragraphs, only about 8\%
+ of paragraphs can only be shrunk (the last segment of
+ Figure~\ref{fig:stretchshrink}), and this is in a document where 13\%
+ of paragraphs have at least eight~lines. Most documents rarely have
+ such long paragraphs, and it is these long paragraphs that are the
+ easiest to shrink.
+ \oldlooseness=-1
+
+ Because of this, \lwc/ doesn't even attempt to shrink paragraphs; it
+ only stretches them.
+
+ \vspace*{-10pt}
+
+ \section{Known issues}
+
+ \vspace*{-5pt}
+
+ \Lwc/ is quite stable these days. At this point, all \emph{known} bugs have
+ been resolved; some bugs certainly still remain, but I'd feel quite
+ confident using \textsf{lua-widow-control} in your everyday documents. There
+ are, however, some fundamental limitations due to how \lwc/ operates:
+
+ \begin{itemize}
+ \item When a three-line paragraph is at the end of a page forming a
+ widow, \lwc/ will remove the widow; however, it will leave an orphan.
+ This issue is inherent to any process that removes widows through
+ paragraph expansion and is thus unavoidable. Orphans are considered
+ to be better than widows~\cite{elements}, so this is still an
+ improvement.
+
+ \item Sometimes a \woo/ cannot be eliminated because no paragraph has
+ enough stretch. Sometimes this can be remediated by
+ increasing \lwc/'s \estretch/; however, some pages just don't have
+ any suitable paragraph.
+
+ Long paragraphs with short words tend to be stretchier than short
+ paragraphs with long words since these long paragraphs have more
+ interword glue. Narrow columns also stretch more easily than wide
+ columns since you need to expand a paragraph by less to make a new line.
+
+ \item \Lwc/ only attempts to expand paragraphs on a page with a \woo/. A
+ global system like in~\titlecite{global} would solve this;
+ however, this is both \acro{NP}-complete~\cite{plass} and
+ impossible to solve in a single pass. Very rarely would such a
+ system remove \woos/ that \lwc/ cannot.
+
+ \item \textsf{lua-widow-control} won't properly move footnotes if there
+ are multiple different ``classes'' of inserts on the same line. To the
+ best of my knowledge, this shouldn't happen in any real-world
+ documents. If this happens to be an issue for you, please let me know;
+ this problem is relatively easy to fix, although it will add
+ considerable complexity for what I think isn't a real issue.
+ \oldlooseness=-1
+ \end{itemize}
+
+ \section{Conclusion}
+
+ All this probably makes \lwc/ look quite complicated, and this is true to
+ some extent. However, this complexity is hidden from the end~user:
+ as stated at the outset, most
+ users merely need to place \latexuse/ in their \LaTeX{} document
+ preamble, and \lwc/ will remove all the troublesome \waos/, without needing
+ any manual intervention.
+
+ Should you have any issues, questions, or suggestions for \lwc/, please
+ visit the project's GitHub page:
+ \href{https://github.com/gucci-on-fleek/lua-widow-control}
+ {\ttfamily https://github.com/gucci-on-fleek\discretionary{-}{-}{-}lua-widow-control}.
+ Any feedback is greatly appreciated!
+
+ \let\macro=\cs
+ \AtNextBibliography{\small}
+ \printbibliography
+
+ \section*{Automatické odstraňování vdov a sirotků pomocí balíčku \textsf{lua-widow-control}}
+ \begin{otherlanguage}{czech}
+ Balíček \textsf{lua-widow-control} pro
+ Lua\TeX\slash{}Lua\LaTeX\slash{}\ConTeXt\slash{}\OpTeX{} odstraňuje vdovy
+ a sirotky bez dalšího zásahu uživatele. Využívá přitom sílu Lua\TeX u a přitom
+ nenatahuje žádné vertikální mezery a ani nezkracuje stránky nebo sloupce.
+ Namísto toho balíček automaticky prodlužuje některý z odstavců na té stránce
+ nebo sloupci, kde by se vdova nebo sirotek vyskytli.
+
+ Pro použití balíčku postačí většině uživatelů \LaTeX u uvést v~preambuli
+ dokumentu \verb|\usepackage{lua-widow-control}|. Žádné další změny
+ v~dokumentu nejsou zapotřebí.
+ \end{otherlanguage}
+ \klicovaslova: Lua\TeX, vdova, sirotek
+
+\end{document}
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-figure.ctx b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-figure.ctx
new file mode 100644
index 0000000000..e61637e2a8
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-figure.ctx
@@ -0,0 +1,166 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\startbuffer[demo-text]
+ \definepapersize[smallpaper][
+ width=6cm,
+ height=8.3cm
+ ]
+ \setuppapersize[smallpaper]
+
+ \def\lwc/{\sans{lua-\allowbreak widow-\allowbreak control}}
+ \def\Lwc/{\sans{lua-\allowbreak widow-\allowbreak control}}
+
+ \setupbodyfont[9pt]
+ \setupindenting[yes, 2em]
+ \setupalign[tolerant]
+
+ \definecolor[midlightgray][s=0.75]
+ \definepalet[layout][grid=midlightgray]
+ \showgrid[nonumber, none, lines]
+
+ \definefontfeature[default][default][expansion=quality,protrusion=quality]
+
+ \usetypescript[modern-base]
+ \setupbodyfont[reset,modern]
+
+ \setupalign[hz,hanging,tolerant]
+
+ \setuplanguage[en][spacing=packed]
+
+ \setuplayout[
+ topspace=0.1cm,
+ backspace=0.1cm,
+ width=middle,
+ height=\dimexpr 21\baselineskip + 1.1pt,
+ header=0pt,
+ footer=0pt,
+ ]
+
+ \starttext
+ \Lwc/ can remove most widows and orphans from a document, \emph{without}
+ stretching any glue or shortening any pages.
+
+ \ifx\uselooseness\undefined\else\uselooseness\fi It does so by automatically lengthening a paragraph on a page where a
+ widow or orphan would otherwise occur. While \TeX{} breaks paragraphs
+ into their natural length, \lwc/ is breaking the paragraph 1~line
+ longer than its natural length. \TeX{}'s paragraph is output to the
+ page, but \lwc/'s paragraph is just stored for later. When a widow or
+ orphan occurs, \lwc/ can take over. It selects the previously-saved
+ paragraph with the least badness; then, it replaces \TeX{}'s paragraph
+ with its saved paragraph. This increases the text block height of the
+ page by 1~line.
+
+ Now, the last line of the current page can be pushed to the top of the
+ next page. This removes the widow or the orphan without creating any
+ additional work.
+ \stoptext
+ \stoptext
+\stopbuffer
+\savebuffer[list=demo-text]
+
+\startbuffer[shorten]
+ \parskip=0pt
+ \input tb133chernoff-widows-figure-demo-text.tmp
+\stopbuffer
+
+\startbuffer[shorten-code]
+ \parskip=0pt
+ \clubpenalty=10000
+ \widowpenalty=10000
+\stopbuffer
+
+\startbuffer[stretch]
+ \parskip=0pt plus 1fill
+ \input tb133chernoff-widows-figure-demo-text.tmp
+\stopbuffer
+
+\startbuffer[stretch-code]
+ \parskip=0pt plus 1fill
+ \clubpenalty=10000
+ \widowpenalty=10000
+\stopbuffer
+
+\startbuffer[ignore]
+ \startsetups[*default]
+ \clubpenalty=0
+ \widowpenalty=0
+ \displaywidowpenalty=0
+ \interlinepenalty=0
+ \brokenpenalty=0
+ \stopsetups
+
+ \setups[*default]
+
+ \input tb133chernoff-widows-figure-demo-text.tmp
+\stopbuffer
+
+\startbuffer[ignore-code]
+ \parskip=0pt
+ \clubpenalty=0
+ \widowpenalty=0
+\stopbuffer
+
+\startbuffer[lwc]
+ \def\uselooseness{\looseness=1}
+ \input tb133chernoff-widows-figure-demo-text.tmp
+\stopbuffer
+
+% We're pretending that we're using LaTeX for the demo since that's what
+% 99% of users will be using.
+\startbuffer[lwc-code]
+ \usepackage{lua-widow-control}
+\stopbuffer
+
+\setupbodyfont[10pt]
+
+\setupbackend[format=PDF/A-1b:2005] % Force PDF version <1.5
+
+\startTEXpage[
+ align=normal,
+ width=39pc,
+ offset=0pt,
+]
+ \veryraggedcenter
+ \setupTABLE[row][1, 5][style=\bfa, align=middle, offset=0pt]
+ \setupTABLE[row][5][toffset=2ex]
+ \setupTABLE[frame=off, distance=5em]
+ \startTABLE
+ \NC Ignore
+ \NC Shorten
+ \NC\NR
+
+ \NC \typesetbuffer[ignore][frame=on, page=1, scale=925]
+ \NC \typesetbuffer[shorten][frame=on, page=1, scale=925]
+ \NC\NR
+
+ \NC \clip[height=1cm]{\typesetbuffer[ignore]
+ [frame=on, page=2, scale=925]}
+ \NC \clip[height=1cm]{\typesetbuffer[shorten]
+ [frame=on, page=2, scale=925]}
+ \NC\NR
+
+ \NC \typebuffer[ignore-code]
+ \NC \typebuffer[shorten-code]
+ \NC\NR
+
+ \NC Stretch
+ \NC \sans{lua-widow-control} \NC\NR
+
+ \NC \typesetbuffer[stretch][frame=on, page=1, scale=925]
+ \NC \typesetbuffer[lwc][frame=on, page=1, scale=925]
+ \NC\NR
+
+ \NC \clip[height=1cm]{\typesetbuffer[stretch]
+ [frame=on, page=2, scale=925]}
+ \NC \clip[height=1cm]{\typesetbuffer[lwc]
+ [frame=on, page=2, scale=925]}
+ \NC\NR
+
+ \NC \typebuffer[stretch-code]
+ \NC \typebuffer[lwc-code]
+ \NC\NR
+ \stopTABLE
+\stopTEXpage
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-plot.dat b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-plot.dat
new file mode 100644
index 0000000000..e6705bd361
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows-plot.dat
@@ -0,0 +1,1575 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+Percentile Natural Long
+0.063734863 nan nan
+0.127469726 nan nan
+0.191204589 nan nan
+0.254939452 nan nan
+0.318674315 nan nan
+0.382409178 nan nan
+0.446144041 100 nan
+0.509878904 100 nan
+0.573613767 100 nan
+0.63734863 100 nan
+0.701083493 100 nan
+0.764818356 100 nan
+0.828553219 100 nan
+0.892288082 100 nan
+0.956022945 100 nan
+1.019757808 100 nan
+1.08349267 100 nan
+1.147227533 100 nan
+1.210962396 100 nan
+1.274697259 100 nan
+1.338432122 100 nan
+1.402166985 100 nan
+1.465901848 100 nan
+1.529636711 100 nan
+1.593371574 100 nan
+1.657106437 100 nan
+1.7208413 100 nan
+1.784576163 100 nan
+1.848311026 100 nan
+1.912045889 100 nan
+1.975780752 100 nan
+2.039515615 100 nan
+2.103250478 100 nan
+2.166985341 100 nan
+2.230720204 100 nan
+2.294455067 100 nan
+2.35818993 100 nan
+2.421924793 100 nan
+2.485659656 100 nan
+2.549394519 100 nan
+2.613129382 100 nan
+2.676864245 100 nan
+2.740599108 100 nan
+2.804333971 100 nan
+2.868068834 100 nan
+2.931803697 100 nan
+2.99553856 100 nan
+3.059273423 100 nan
+3.123008286 100 nan
+3.186743149 100 nan
+3.250478011 100 nan
+3.314212874 100 nan
+3.377947737 100 nan
+3.4416826 100 nan
+3.505417463 100 nan
+3.569152326 100 nan
+3.632887189 100 nan
+3.696622052 100 nan
+3.760356915 100 nan
+3.824091778 100 nan
+3.887826641 100 nan
+3.951561504 100 nan
+4.015296367 100 nan
+4.07903123 100 nan
+4.142766093 100 nan
+4.206500956 100 nan
+4.270235819 100 nan
+4.333970682 100 nan
+4.397705545 100 nan
+4.461440408 100 nan
+4.525175271 100 nan
+4.588910134 100 nan
+4.652644997 100 nan
+4.71637986 100 nan
+4.780114723 100 nan
+4.843849586 100 nan
+4.907584449 100 nan
+4.971319312 100 nan
+5.035054175 100 nan
+5.098789038 100 nan
+5.162523901 100 nan
+5.226258764 100 nan
+5.289993627 100 nan
+5.353728489 100 nan
+5.417463352 100 nan
+5.481198215 100 nan
+5.544933078 100 nan
+5.608667941 100 nan
+5.672402804 100 nan
+5.736137667 100 nan
+5.79987253 100 nan
+5.863607393 100 nan
+5.927342256 100 nan
+5.991077119 100 nan
+6.054811982 100 nan
+6.118546845 100 nan
+6.182281708 100 nan
+6.246016571 100 nan
+6.309751434 100 nan
+6.373486297 100 nan
+6.43722116 100 nan
+6.500956023 100 nan
+6.564690886 100 nan
+6.628425749 100 nan
+6.692160612 100 nan
+6.755895475 100 nan
+6.819630338 100 nan
+6.883365201 100 nan
+6.947100064 100 nan
+7.010834927 100 nan
+7.07456979 100 nan
+7.138304653 100 nan
+7.202039516 100 nan
+7.265774379 100 nan
+7.329509242 100 nan
+7.393244105 100 nan
+7.456978967 100 nan
+7.52071383 100 nan
+7.584448693 100 nan
+7.648183556 100 nan
+7.711918419 100 nan
+7.775653282 100 nan
+7.839388145 100 nan
+7.903123008 100 nan
+7.966857871 100 nan
+8.030592734 100 nan
+8.094327597 100 nan
+8.15806246 100 nan
+8.221797323 100 nan
+8.285532186 100 nan
+8.349267049 100 nan
+8.413001912 100 nan
+8.476736775 100 nan
+8.540471638 100 nan
+8.604206501 100 nan
+8.667941364 100 nan
+8.731676227 100 nan
+8.79541109 100 nan
+8.859145953 100 nan
+8.922880816 100 nan
+8.986615679 100 nan
+9.050350542 100 nan
+9.114085405 100 nan
+9.177820268 100 nan
+9.241555131 100 nan
+9.305289994 100 nan
+9.369024857 100 nan
+9.43275972 100 nan
+9.496494583 100 nan
+9.560229446 100 nan
+9.623964308 100 nan
+9.687699171 100 nan
+9.751434034 100 nan
+9.815168897 100 nan
+9.87890376 100 nan
+9.942638623 100 nan
+10.00637349 100 nan
+10.07010835 100 nan
+10.13384321 100 nan
+10.19757808 100 nan
+10.26131294 100 nan
+10.3250478 100 nan
+10.38878266 100 nan
+10.45251753 100 nan
+10.51625239 100 nan
+10.57998725 100 nan
+10.64372212 100 nan
+10.70745698 100 nan
+10.77119184 100 nan
+10.8349267 100 nan
+10.89866157 100 nan
+10.96239643 100 nan
+11.02613129 100 nan
+11.08986616 100 nan
+11.15360102 100 nan
+11.21733588 100 nan
+11.28107075 100 nan
+11.34480561 100 nan
+11.40854047 100 nan
+11.47227533 100 nan
+11.5360102 100 nan
+11.59974506 100 nan
+11.66347992 100 nan
+11.72721479 100 nan
+11.79094965 100 nan
+11.85468451 100 nan
+11.91841938 100 nan
+11.98215424 100 nan
+12.0458891 100 nan
+12.10962396 100 nan
+12.17335883 100 nan
+12.23709369 100 nan
+12.30082855 100 nan
+12.36456342 100 nan
+12.42829828 100 nan
+12.49203314 100 nan
+12.55576801 100 nan
+12.61950287 100 nan
+12.68323773 100 nan
+12.74697259 100 nan
+12.81070746 100 nan
+12.87444232 100 nan
+12.93817718 100 nan
+13.00191205 100 nan
+13.06564691 100 nan
+13.12938177 100 nan
+13.19311663 100 nan
+13.2568515 100 nan
+13.32058636 100 nan
+13.38432122 100 nan
+13.44805609 100 nan
+13.51179095 100 nan
+13.57552581 100 nan
+13.63926068 100 nan
+13.70299554 100 nan
+13.7667304 100 nan
+13.83046526 100 nan
+13.89420013 100 nan
+13.95793499 100 nan
+14.02166985 100 nan
+14.08540472 100 nan
+14.14913958 100 nan
+14.21287444 100 nan
+14.27660931 100 nan
+14.34034417 100 nan
+14.40407903 100 nan
+14.46781389 100 nan
+14.53154876 100 nan
+14.59528362 100 nan
+14.65901848 100 nan
+14.72275335 100 nan
+14.78648821 100 nan
+14.85022307 100 nan
+14.91395793 100 nan
+14.9776928 100 nan
+15.04142766 100 nan
+15.10516252 100 nan
+15.16889739 100 nan
+15.23263225 100 nan
+15.29636711 100 nan
+15.36010198 100 nan
+15.42383684 100 nan
+15.4875717 100 nan
+15.55130656 100 nan
+15.61504143 100 nan
+15.67877629 100 nan
+15.74251115 100 nan
+15.80624602 100 nan
+15.86998088 100 nan
+15.93371574 100 nan
+15.99745061 100 nan
+16.06118547 100 nan
+16.12492033 100 nan
+16.18865519 100 nan
+16.25239006 100 nan
+16.31612492 100 nan
+16.37985978 100 nan
+16.44359465 100 nan
+16.50732951 100 nan
+16.57106437 100 nan
+16.63479924 100 nan
+16.6985341 100 nan
+16.76226896 100 nan
+16.82600382 100 nan
+16.88973869 100 nan
+16.95347355 100 nan
+17.01720841 100 nan
+17.08094328 100 nan
+17.14467814 100 nan
+17.208413 100 nan
+17.27214786 100 nan
+17.33588273 100 nan
+17.39961759 100 nan
+17.46335245 100 nan
+17.52708732 100 nan
+17.59082218 100 nan
+17.65455704 100 nan
+17.71829191 100 nan
+17.78202677 100 nan
+17.84576163 100 nan
+17.90949649 100 nan
+17.97323136 100 nan
+18.03696622 100 nan
+18.10070108 100 nan
+18.16443595 100 nan
+18.22817081 100 nan
+18.29190567 100 nan
+18.35564054 100 nan
+18.4193754 100 nan
+18.48311026 100 nan
+18.54684512 100 nan
+18.61057999 100 nan
+18.67431485 100 nan
+18.73804971 100 nan
+18.80178458 100 nan
+18.86551944 100 nan
+18.9292543 100 nan
+18.99298917 100 nan
+19.05672403 100 nan
+19.12045889 100 nan
+19.18419375 100 nan
+19.24792862 100 nan
+19.31166348 100 nan
+19.37539834 100 nan
+19.43913321 100 nan
+19.50286807 100 nan
+19.56660293 100 nan
+19.63033779 100 nan
+19.69407266 100 nan
+19.75780752 100 nan
+19.82154238 100 nan
+19.88527725 100 nan
+19.94901211 100 nan
+20.01274697 100 nan
+20.07648184 100 nan
+20.1402167 100 nan
+20.20395156 100 nan
+20.26768642 100 nan
+20.33142129 100 nan
+20.39515615 100 nan
+20.45889101 100 nan
+20.52262588 100 nan
+20.58636074 100 nan
+20.6500956 100 nan
+20.71383047 100 nan
+20.77756533 100 nan
+20.84130019 100 nan
+20.90503505 100 nan
+20.96876992 100 nan
+21.03250478 100 nan
+21.09623964 100 nan
+21.15997451 100 nan
+21.22370937 100 nan
+21.28744423 100 nan
+21.35117909 100 nan
+21.41491396 100 nan
+21.47864882 100 nan
+21.54238368 100 nan
+21.60611855 100 nan
+21.66985341 100 nan
+21.73358827 100 nan
+21.79732314 100 nan
+21.861058 100 nan
+21.92479286 100 nan
+21.98852772 100 nan
+22.05226259 100 nan
+22.11599745 100 nan
+22.17973231 100 nan
+22.24346718 100 nan
+22.30720204 100 nan
+22.3709369 100 nan
+22.43467177 100 nan
+22.49840663 100 nan
+22.56214149 100 nan
+22.62587635 100 nan
+22.68961122 100 nan
+22.75334608 100 nan
+22.81708094 100 nan
+22.88081581 100 nan
+22.94455067 100 nan
+23.00828553 100 nan
+23.0720204 100 nan
+23.13575526 100 nan
+23.19949012 100 nan
+23.26322498 100 nan
+23.32695985 100 nan
+23.39069471 100 nan
+23.45442957 100 nan
+23.51816444 100 nan
+23.5818993 100 nan
+23.64563416 100 nan
+23.70936902 100 nan
+23.77310389 100 nan
+23.83683875 100 nan
+23.90057361 100 nan
+23.96430848 100 nan
+24.02804334 100 nan
+24.0917782 100 nan
+24.15551307 100 nan
+24.21924793 100 nan
+24.28298279 100 nan
+24.34671765 100 nan
+24.41045252 100 nan
+24.47418738 100 nan
+24.53792224 100 nan
+24.60165711 100 nan
+24.66539197 100 nan
+24.72912683 100 nan
+24.7928617 100 nan
+24.85659656 100 nan
+24.92033142 100 nan
+24.98406628 100 nan
+25.04780115 100 nan
+25.11153601 100 nan
+25.17527087 100 nan
+25.23900574 100 nan
+25.3027406 100 nan
+25.36647546 100 nan
+25.43021033 100 nan
+25.49394519 100 nan
+25.55768005 100 nan
+25.62141491 100 nan
+25.68514978 100 nan
+25.74888464 100 nan
+25.8126195 100 nan
+25.87635437 100 nan
+25.94008923 100 nan
+26.00382409 100 nan
+26.06755895 100 nan
+26.13129382 100 nan
+26.19502868 100 nan
+26.25876354 100 nan
+26.32249841 100 nan
+26.38623327 100 nan
+26.44996813 100 nan
+26.513703 100 nan
+26.57743786 100 nan
+26.64117272 100 nan
+26.70490758 100 nan
+26.76864245 100 nan
+26.83237731 100 nan
+26.89611217 100 nan
+26.95984704 100 nan
+27.0235819 100 nan
+27.08731676 100 nan
+27.15105163 100 nan
+27.21478649 100 nan
+27.27852135 100 nan
+27.34225621 100 nan
+27.40599108 100 nan
+27.46972594 100 nan
+27.5334608 100 nan
+27.59719567 100 nan
+27.66093053 100 nan
+27.72466539 100 nan
+27.78840025 100 nan
+27.85213512 100 nan
+27.91586998 100 nan
+27.97960484 121 nan
+28.04333971 141.4213562 nan
+28.10707457 141.4213562 nan
+28.17080943 141.4213562 nan
+28.2345443 141.4213562 nan
+28.29827916 141.4213562 nan
+28.36201402 141.4213562 nan
+28.42574888 141.4213562 nan
+28.48948375 141.4213562 nan
+28.55321861 141.4213562 nan
+28.61695347 141.4213562 nan
+28.68068834 141.4213562 nan
+28.7444232 141.4213562 nan
+28.80815806 141.4213562 nan
+28.87189293 141.4213562 nan
+28.93562779 141.4213562 140.8734657
+28.99936265 141.4213562 141.4213562
+29.06309751 141.4213562 141.4213562
+29.12683238 141.4213562 141.4213562
+29.19056724 141.4213562 141.4213562
+29.2543021 141.4213562 155.3072224
+29.31803697 141.4213562 170.8956797
+29.38177183 141.4213562 172.5340546
+29.44550669 141.4213562 172.5340546
+29.50924156 141.4213562 172.5340546
+29.57297642 141.4213562 187.383297
+29.63671128 141.4213562 187.383297
+29.70044614 141.4213562 190.2117241
+29.76418101 141.4213562 190.2117241
+29.82791587 141.4213562 190.2117241
+29.89165073 141.4213562 190.2117241
+29.9553856 141.4213562 190.2117241
+30.01912046 141.4213562 205.0609665
+30.08285532 141.4213562 205.0609665
+30.14659018 141.4213562 209.3036072
+30.21032505 141.4213562 209.3036072
+30.27405991 141.4213562 209.3036072
+30.33779477 141.4213562 209.3036072
+30.40152964 141.4213562 213.0422493
+30.4652645 141.4213562 221.3244225
+30.52899936 141.4213562 224.1528496
+30.59273423 141.4213562 229.8097039
+30.65646909 141.4213562 229.8097039
+30.72020395 141.4213562 229.8097039
+30.78393881 141.4213562 229.8097039
+30.84767368 141.4213562 233.5
+30.91140854 141.4213562 240.4163056
+30.9751434 141.4213562 244.6589463
+31.03887827 141.4213562 244.6589463
+31.10261313 141.4213562 251.7300141
+31.16634799 141.4213562 251.7300141
+31.23008286 141.4213562 251.7300141
+31.29381772 141.4213562 251.7300141
+31.35755258 141.4213562 260.9224023
+31.42128744 141.4213562 266.1584741
+31.48502231 141.4213562 266.5792565
+31.54875717 141.4213562 275.0645379
+31.61249203 141.4213562 275.0645379
+31.6762269 141.4213562 275.0645379
+31.73996176 141.4213562 278.6000718
+31.80369662 141.4213562 280.5922308
+31.86743149 141.4213562 282.8427125
+31.93116635 141.4213562 288.6751346
+31.99490121 141.4213562 289.9137803
+32.05863607 141.4213562 297.3353886
+32.12237094 141.4213562 299.8132752
+32.1861058 141.4213562 299.8132752
+32.24984066 141.4213562 300.520382
+32.31357553 141.4213562 306.1772363
+32.37731039 141.4213562 314.6558967
+32.44104525 141.4213562 314.6625176
+32.50478011 141.4213562 319.6122651
+32.56851498 141.4213562 325.9762261
+32.63224984 141.4213562 325.9762261
+32.6959847 141.4213562 325.9762261
+32.75971957 141.4213562 330.9259736
+32.82345443 141.4213562 340.0593086
+32.88718929 141.4213562 340.1183618
+32.95092416 141.4213562 346.4101615
+33.01465902 141.4213562 349.2969129
+33.07839388 141.4213562 353.5533906
+33.14212874 141.4213562 357.0889245
+33.20586361 141.4213562 363.4528855
+33.26959847 141.4213562 368.402633
+33.33333333 141.4213562 372.3909236
+33.3970682 141.4213562 379.3191269
+33.46080306 141.4213562 382.5447686
+33.52453792 141.4213562 382.5447686
+33.58827279 141.4213562 384.666089
+33.65200765 141.4213562 391.5
+33.71574251 141.4213562 396.0622847
+33.77947737 141.4213562 404.7225387
+33.84321224 141.4213562 409.9186911
+33.9069471 141.4213562 412.9503602
+33.97068196 141.4213562 412.9503602
+34.03441683 141.4213562 419.1562954
+34.09815169 141.4213562 433.0127019
+34.16188655 141.4213562 437.631504
+34.22562141 141.4213562 444.7701654
+34.28935628 141.4213562 444.7701654
+34.35309114 141.4213562 448.5
+34.416826 141.4213562 459.6194078
+34.48056087 141.4213562 461.7407281
+34.54429573 141.4213562 467.653718
+34.60803059 141.4213562 473.4272207
+34.67176546 141.4213562 476.3139721
+34.73550032 141.4213562 478.0041841
+34.79923518 141.4213562 480.8326112
+34.86297004 141.4213562 484.9742261
+34.92670491 141.4213562 492.8534265
+34.99043977 141.4213562 497.0985818
+35.05417463 141.4213562 508.6455872
+35.1179095 141.4213562 512.6524164
+35.18164436 141.4213562 516.1511407
+35.24537922 141.4213562 520.5
+35.30911409 141.4213562 527.5016588
+35.37284895 141.4213562 536.3584001
+35.43658381 141.4213562 543.2866033
+35.50031867 141.4213562 545.8864351
+35.56405354 141.4213562 548.7148622
+35.6277884 141.4213562 550.7921568
+35.69152326 141.4213562 557.72036
+35.75525813 141.4213562 563.5641046
+35.81899299 141.4213562 568.1126649
+35.88272785 141.4213562 577.3502692
+35.94646272 141.4213562 582.5
+36.01019758 141.4213562 586.1915216
+36.07393244 141.4213562 586.5878735
+36.1376673 141.4213562 594.093427
+36.20140217 141.4213562 600.5
+36.26513703 141.4213562 601.040764
+36.32887189 141.4213562 605.6404324
+36.39260676 141.4213562 612.5686356
+36.45634162 141.4213562 617.30422
+36.52007648 141.4213562 625.0823946
+36.58381134 141.4213562 625.2703415
+36.64754621 141.4213562 634.9818895
+36.71128107 141.4213562 639.931637
+36.77501593 141.4213562 647.2096518
+36.8387508 141.4213562 656.1950929
+36.90248566 141.4213562 661.0660582
+36.96622052 141.4213562 665.3874811
+37.02995539 141.4213562 669
+37.09369025 141.4213562 673.8727625
+37.15742511 141.4213562 680.2367235
+37.22115997 141.4213562 692.9646456
+37.28489484 141.4213562 698.0164755
+37.3486297 141.4213562 707.1067812
+37.41236456 141.4213562 713.0275824
+37.47609943 141.4213562 716.4916841
+37.53983429 141.4213562 721.6878365
+37.60356915 141.4213562 727.4613392
+37.66730402 141.4213562 728.6160397
+37.73103888 141.4213562 733.5
+37.79477374 141.4213562 742.4724462
+37.8585086 141.4213562 746.5138981
+37.92224347 141.4213562 750.5
+37.98597833 141.4213562 756.3288526
+38.04971319 141.4213562 764.9891067
+38.11344806 141.4213562 769.6079088
+38.17718292 141.4213562 774.9890322
+38.24091778 141.4213562 775.4683746
+38.30465264 141.4213562 781.3529932
+38.36838751 141.4213562 787.9903553
+38.43212237 141.4213562 794.7880221
+38.49585723 141.4213562 795
+38.5595921 141.4213562 799.6301228
+38.62332696 141.4213562 808.2903769
+38.68706182 141.4213562 809.6372645
+38.75079669 141.4213562 816.3732806
+38.81453155 141.4213562 822.7241336
+38.87826641 141.4213562 825.9007204
+38.94200127 141.4213562 836.2894236
+39.00573614 141.4213562 840.7499628
+39.069471 141.4213562 843.57839
+39.13320586 141.4213562 849
+39.19694073 141.4213562 853.5
+39.26067559 141.4213562 856.7877995
+39.32441045 141.4213562 864.9110937
+39.38814532 141.4213562 871.8626612
+39.45188018 141.4213562 877
+39.51561504 141.4213562 888.1261172
+39.5793499 141.4213562 893.1608664
+39.64308477 141.4213562 903.5
+39.70681963 141.4213562 906.5108935
+39.77055449 141.4213562 917.986928
+39.83428936 141.4213562 922
+39.89802422 141.4213562 930.1112837
+39.96175908 141.4213562 936.9164851
+40.02549395 141.4213562 936.9164851
+40.08922881 141.4213562 945.6997409
+40.15296367 141.4213562 952.0505939
+40.21669853 141.4213562 961.0620167
+40.2804334 141.4213562 972.8352036
+40.34416826 141.4213562 976.267279
+40.40790312 141.4213562 987.1210665
+40.47163799 141.4213562 998.434775
+40.53537285 141.4213562 1001.970309
+40.59910771 141.4213562 1008.05357
+40.66284257 141.4213562 1019.023225
+40.72657744 141.4213562 1025
+40.7903123 141.4213562 1035.911434
+40.85404716 141.4213562 1039.230485
+40.91778203 141.4213562 1044.426637
+40.98151689 141.4213562 1053.589104
+41.04525175 141.4213562 1058.283043
+41.10898662 141.4213562 1062.5
+41.17272148 141.4213562 1069.85256
+41.23645634 141.4213562 1079.067653
+41.3001912 141.4213562 1084.5
+41.36392607 141.4213562 1091.77287
+41.42766093 141.4213562 1097.542862
+41.49139579 141.4213562 1103.5
+41.55513066 141.4213562 1112.728594
+41.61886552 141.4213562 1124.294979
+41.68260038 141.4213562 1127.244654
+41.74633525 141.4213562 1133.239251
+41.81007011 141.4213562 1141.263435
+41.87380497 141.4213562 1147.5
+41.93753983 141.4213562 1156.941572
+42.0012747 141.4213562 1161.069335
+42.06500956 141.4213562 1172.383043
+42.12874442 141.4213562 1177.332791
+42.19247929 141.4213562 1189.341555
+42.25621415 141.4213562 1199.733859
+42.31994901 141.4213562 1202.081528
+42.38368388 141.4213562 1202.081528
+42.44741874 141.4213562 1209
+42.5111536 141.4213562 1217.050468
+42.57488846 141.4213562 1225.416052
+42.63862333 141.4213562 1233.5
+42.70235819 141.4213562 1245.344531
+42.76609305 141.4213562 1252.272734
+42.82982792 141.4213562 1257.5
+42.89356278 141.4213562 1259.357177
+42.95729764 141.4213562 1262.665039
+43.0210325 141.4213562 1274.20642
+43.08476737 141.4213562 1279.985547
+43.14850223 141.4213562 1290.469876
+43.21223709 141.4213562 1296.025
+43.27597196 141.4213562 1308.147545
+43.33970682 141.4213562 1318.04704
+43.40344168 141.4213562 1323.703894
+43.46717655 141.4213562 1332.896283
+43.53091141 141.4213562 1343
+43.59464627 141.4213562 1354.5
+43.65838113 141.4213562 1363.301874
+43.722116 141.4213562 1373
+43.78585086 141.4213562 1378.151117
+43.84958572 141.4213562 1387.343505
+43.91332059 141.4213562 1399.47514
+43.97705545 141.4213562 1409.312007
+44.04079031 141.4213562 1423
+44.10452518 141.4213562 1438.686137
+44.16826004 141.4213562 1442.798323
+44.2319949 141.4213562 1446.033368
+44.29572976 141.4213562 1454.518649
+44.35946463 141.4213562 1473
+44.42319949 141.4213562 1481.618642
+44.48693435 141.4213562 1500.128436
+44.55066922 141.4213562 1508.616253
+44.61440408 141.4213562 1517.853858
+44.67813894 141.4213562 1540.947868
+44.7418738 141.4213562 1548.453422
+44.80560867 141.4213562 1555.6703
+44.86934353 141.4213562 1566.948627
+44.93307839 141.4213562 1572
+44.99681326 141.4213562 1581.79787
+45.06054812 141.4213562 1596.4
+45.12428298 141.4213562 1600.360317
+45.18801785 141.4213562 1612.539302
+45.25175271 156.2705986 1618.567422
+45.31548757 156.2705986 1627.5
+45.37922243 156.2705986 1632.709558
+45.4429573 156.2705986 1639.5
+45.50669216 156.2705986 1646.025617
+45.57042702 156.2705986 1654.5
+45.63416189 156.2705986 1668.402565
+45.69789675 156.2705986 1683.553385
+45.76163161 156.2705986 1690.760295
+45.82536648 156.2705986 1699.884702
+45.88910134 156.2705986 1701
+45.9528362 156.2705986 1707.799336
+46.01657106 156.2705986 1714.733944
+46.08030593 156.2705986 1730.006613
+46.14404079 156.2705986 1743.941617
+46.20777565 156.2705986 1751.503497
+46.27151052 156.2705986 1768.47406
+46.33524538 156.2705986 1789.318306
+46.39898024 156.2705986 1801.708078
+46.46271511 156.2705986 1815.5
+46.52644997 156.2705986 1831.355054
+46.59018483 156.2705986 1839.914186
+46.65391969 156.2705986 1850.479855
+46.71765456 169 1868.176116
+46.78138942 172.5340546 1879.467576
+46.84512428 172.5340546 1899.482386
+46.90885915 172.5340546 1911
+46.97259401 172.5340546 1924.744658
+47.03632887 172.5340546 1934.123402
+47.10006373 172.5340546 1943
+47.1637986 172.5340546 1969.292386
+47.22753346 172.5340546 1982.727414
+47.29126832 172.5340546 1995.5
+47.35500319 172.5340546 2006.597404
+47.41873805 172.5340546 2020.204074
+47.48247291 173.2050808 2032.789485
+47.54620778 173.2050808 2050.5
+47.60994264 173.2050808 2056.973626
+47.6736775 173.2050808 2071.115762
+47.73741236 173.2050808 2087.966061
+47.80114723 173.2050808 2098.692927
+47.86488209 173.2050808 2111.420849
+47.92861695 173.2050808 2120.680042
+47.99235182 173.2050808 2132.731894
+48.05608668 173.2050808 2151.584955
+48.11982154 173.2050808 2174.801328
+48.18355641 173.2050808 2187.163294
+48.24729127 173.2050808 2209.708691
+48.31102613 173.2050808 2227.222493
+48.37476099 173.2050808 2258.499059
+48.43849586 173.2050808 2269.105661
+48.50223072 173.2050808 2286.609368
+48.56596558 173.2050808 2298.44668
+48.62970045 173.2050808 2314.597229
+48.69343531 173.2050808 2330.381182
+48.75717017 173.2050808 2346.333333
+48.82090504 173.2050808 2359.629096
+48.8846399 173.2050808 2379.068009
+48.94837476 173.2050808 2388.498064
+49.01210962 173.2050808 2398.506202
+49.07584449 173.2050808 2414.059089
+49.13957935 173.2050808 2421.840726
+49.20331421 173.2050808 2455.470695
+49.26704908 173.2050808 2467.0177
+49.33078394 173.2050808 2492.421112
+49.3945188 173.2050808 2508.58692
+49.45825366 173.2050808 2532.149383
+49.52198853 173.2050808 2541.495885
+49.58572339 173.2050808 2558.665888
+49.64945825 173.2050808 2566.899297
+49.71319312 173.2050808 2586.410889
+49.77692798 173.2050808 2600.031634
+49.84066284 173.2050808 2616.29509
+49.90439771 173.2050808 2631.144333
+49.96813257 173.2050808 2647.407789
+50.03186743 173.2050808 2665.085458
+50.09560229 173.2050808 2687.619783
+50.15933716 173.2050808 2704.683438
+50.22307202 173.2050808 2728.557372
+50.28680688 173.2050808 2741.666667
+50.35054175 173.2050808 2756.302233
+50.41427661 173.2050808 2775.900094
+50.47801147 173.2050808 2790.243359
+50.54174634 173.2050808 2812.163669
+50.6054812 173.2050808 2828.427125
+50.66921606 173.2050808 2838.253923
+50.73295092 173.2050808 2855.5
+50.79668579 173.2050808 2877.217493
+50.86042065 173.2050808 2886.409881
+50.92415551 173.2050808 2895.44235
+50.98789038 173.2050808 2919.6439
+51.05162524 173.2050808 2938.571195
+51.1153601 173.2050808 2945.099744
+51.17909496 173.2050808 2956.610729
+51.24282983 173.2050808 2973.384015
+51.30656469 173.2050808 2999.740179
+51.37029955 173.2050808 3021.467276
+51.43403442 173.2050808 3048.333333
+51.49776928 173.2050808 3059.114969
+51.56150414 173.2050808 3089.349527
+51.62523901 173.2050808 3117.691454
+51.68897387 173.2050808 3140.261215
+51.75270873 173.2050808 3168.545486
+51.81644359 173.2050808 3189.642188
+51.88017846 173.2050808 3218.750068
+51.94391332 173.2050808 3242.791699
+52.00764818 173.2050808 3269.661756
+52.07138305 173.2050808 3312.79527
+52.13511791 173.2050808 3334.305565
+52.19885277 173.2050808 3340.372434
+52.26258764 173.2050808 3352.94321
+52.3263225 173.2050808 3355.221677
+52.39005736 173.2050808 3366.675674
+52.45379222 173.2050808 3387.195772
+52.51752709 173.2050808 3401.183618
+52.58126195 173.2050808 3413.362506
+52.64499681 173.2050808 3436.677477
+52.70873168 173.2050808 3457.045053
+52.77246654 173.2050808 3468.358762
+52.8362014 173.2050808 3486.036431
+52.89993627 173.2050808 3506.248185
+52.96367113 173.2050808 3508.989028
+53.02740599 173.2050808 3525.634411
+53.09114085 173.2050808 3541.177876
+53.15487572 173.2050808 3560.282643
+53.21861058 173.2050808 3576.677808
+53.28234544 173.2050808 3595.442694
+53.34608031 173.2050808 3617.676787
+53.40981517 173.2050808 3626.043574
+53.47355003 173.2050808 3652.206525
+53.53728489 173.2050808 3677.721215
+53.60101976 173.2050808 3713.724815
+53.66475462 173.2050808 3734.230911
+53.72848948 173.2050808 3752.969241
+53.79222435 173.2050808 3773.828891
+53.85595921 173.2050808 3804.630531
+53.91969407 173.2050808 3825.447686
+53.98342894 173.2050808 3845.788513
+54.0471638 173.2050808 3867.958148
+54.11089866 173.2050808 3892.331277
+54.17463352 173.2050808 3906.764966
+54.23836839 173.2050808 3927.271063
+54.30210325 185.3294364 3947.460956
+54.36583811 185.3294364 3975.113604
+54.42957298 185.3294364 4002.178607
+54.49330784 185.3294364 4022.730478
+54.5570427 185.3294364 4042
+54.62077757 185.3294364 4057.838952
+54.68451243 185.3294364 4087.876331
+54.74824729 185.3294364 4101.219331
+54.81198215 185.3294364 4125.191208
+54.87571702 185.3294364 4145
+54.93945188 185.3294364 4164.505388
+55.00318674 185.3294364 4180.061737
+55.06692161 185.3294364 4190.870077
+55.13065647 185.3294364 4194.665192
+55.19439133 185.3294364 4219.604393
+55.2581262 185.3294364 4232.741192
+55.32186106 185.3294364 4260.852919
+55.38559592 185.3294364 4279.234664
+55.44933078 185.3294364 4311.937152
+55.51306565 185.3294364 4327.847054
+55.57680051 190.2117241 4339.696985
+55.64053537 190.2117241 4362.84884
+55.70427024 190.2117241 4387.894598
+55.7680051 190.2117241 4411.939275
+55.83173996 190.2117241 4432.852411
+55.89547482 190.2117241 4461.136683
+55.95920969 190.2117241 4474.819237
+56.02294455 196 4476.233254
+56.08667941 197.4537921 4497.906235
+56.15041428 198.6084926 4520.861101
+56.21414914 198.6084926 4532.54996
+56.277884 198.6084926 4546.34305
+56.34161887 198.6084926 4571.564357
+56.40535373 198.6084926 4592.385019
+56.46908859 198.6084926 4596.194078
+56.53282345 198.6084926 4599.729612
+56.59655832 198.6084926 4622
+56.66029318 198.6084926 4633.670737
+56.72402804 200 4647.380992
+56.78776291 200 4667.838054
+56.85149777 200 4669.497093
+56.91523263 200 4698.246778
+56.9789675 200 4712.083085
+57.04270236 200 4745.630085
+57.10643722 200 4776.688414
+57.17017208 200 4806.39695
+57.23390695 200 4834.842616
+57.29764181 200 4850.666667
+57.36137667 200 4868.360864
+57.42511154 200 4882.5
+57.4888464 200 4912.026291
+57.55258126 200 4931.009139
+57.61631612 200 4950.213255
+57.68005099 200 4981.567273
+57.74378585 200 5013.387079
+57.80752071 200 5033.293173
+57.87125558 200 5053.546906
+57.93499044 200 5072.784048
+57.9987253 200 5104
+58.06246017 200 5119.453096
+58.12619503 200 5143.938071
+58.18992989 200 5169.412003
+58.25366475 200 5183.092706
+58.31739962 200 5199.039174
+58.38113448 200 5218.666667
+58.44486934 200 5232.590181
+58.50860421 200 5245.390956
+58.57233907 200 5264.409986
+58.63607393 200 5277.525187
+58.6998088 200 5308.957713
+58.76354366 200 5330.720572
+58.82727852 200 5367.666667
+58.89101338 200 5394.549403
+58.95474825 200 5429.620263
+59.01848311 200 5463.814098
+59.08221797 200 5483.70569
+59.14595284 200 5505.597152
+59.2096877 200 5538.293167
+59.27342256 200 5561.394834
+59.33715743 200 5585.697808
+59.40089229 200 5601.699921
+59.46462715 200 5625.499818
+59.52836201 209.3036072 5656.854249
+59.59209688 209.3036072 5684.20771
+59.65583174 209.3036072 5694
+59.7195666 209.3036072 5715
+59.78330147 209.3036072 5733.928889
+59.84703633 209.3036072 5754.131137
+59.91077119 210.5 5769.63569
+59.97450605 210.5 5784.13347
+60.03824092 210.5 5805.279683
+60.10197578 210.5 5830.095411
+60.16571064 210.5 5847.340264
+60.22944551 210.5 5866.506231
+60.29318037 210.5 5881.305994
+60.35691523 210.5 5905.5
+60.4206501 210.5 5919.333333
+60.48438496 210.5 5936.74664
+60.54811982 210.5 5951.722784
+60.61185468 210.5 5967.77351
+60.67558955 210.5 5988.48733
+60.73932441 210.5 6000.025125
+60.80305927 210.5 6011.80606
+60.86679414 210.5 6043.5
+60.930529 210.7328483 6071.5
+60.99426386 213.0422493 6101.480488
+61.05799873 213.0422493 6122.354122
+61.12173359 213.0422493 6145.361516
+61.18546845 213.0422493 6169.506666
+61.24920331 213.0422493 6180.820374
+61.31293818 213.0422493 6199.722074
+61.37667304 221 6217.465437
+61.4404079 221 6244
+61.50414277 222 6275.540017
+61.56787763 222 6309.885577
+61.63161249 222 6333.555439
+61.69534736 222 6350
+61.75908222 222 6366.430044
+61.82281708 222 6389.416875
+61.88655194 222 6411.864455
+61.95028681 222 6452.349378
+62.01402167 223.6067977 6468.050232
+62.07775653 223.6067977 6482.090712
+62.1414914 223.6067977 6502.333333
+62.20522626 223.6067977 6523.060056
+62.26896112 223.6067977 6538.026209
+62.33269598 223.6067977 6555
+62.39643085 223.6067977 6561
+62.46016571 223.6067977 6587.406774
+62.52390057 223.6067977 6598.720482
+62.58763544 223.6067977 6618.519472
+62.6513703 223.6067977 6642.347649
+62.71510516 223.6067977 6659.885219
+62.77884003 223.6067977 6687.91986
+62.84257489 223.6067977 6725.999703
+62.90630975 223.6067977 6725.999703
+62.97004461 223.6067977 6760.923084
+63.03377948 223.6067977 6786.457332
+63.09751434 223.6067977 6823.666667
+63.1612492 223.6067977 6840.197448
+63.22498407 223.6067977 6861
+63.28871893 223.6067977 6877.250672
+63.35245379 223.6067977 6893.350361
+63.41618866 223.6067977 6913
+63.47992352 225.166605 6949.610649
+63.54365838 228.6307066 6970.640016
+63.60739324 228.6307066 6995.407386
+63.67112811 228.6307066 6995.407386
+63.73486297 228.6307066 7027
+63.79859783 228.6307066 7052.329482
+63.8623327 228.6307066 7091
+63.92606756 228.6307066 7125
+63.98980242 229.8097039 7147.333333
+64.05353728 229.8097039 7182.458881
+64.11727215 229.8097039 7204.052206
+64.18100701 232.5 7216.878365
+64.24474187 232.9982833 7242.859127
+64.30847674 232.9982833 7281.333333
+64.3722116 232.9982833 7302.5
+64.43594646 232.9982833 7332.132812
+64.49968133 232.9982833 7350.275107
+64.56341619 232.9982833 7367.656898
+64.62715105 232.9982833 7385.285316
+64.69088591 232.9982833 7414.666667
+64.75462078 232.9982833 7442.62232
+64.81835564 234.5 7462.451415
+64.8820905 234.5 7492
+64.94582537 234.5 7509.979852
+65.00956023 234.5 7546.729424
+65.07329509 242.3897688 7572.40652
+65.13702996 242.3897688 7597.929543
+65.20076482 243.284196 7629.240332
+65.26449968 243.284196 7640.288771
+65.32823454 243.284196 7659.985176
+65.39196941 243.284196 7682.715178
+65.45570427 244.9489743 7686.841484
+65.51943913 244.9489743 7721.959604
+65.583174 244.9489743 7750.5
+65.64690886 244.9489743 7771.32753
+65.71064372 244.9489743 7796.651149
+65.77437859 244.9489743 7825.754414
+65.83811345 244.9489743 7861.489431
+65.90184831 244.9489743 7884.666667
+65.96558317 244.9489743 7915.353309
+66.02931804 244.9489743 7962
+66.0930529 244.9489743 7964.5
+66.15678776 244.9489743 7988.602548
+66.22052263 244.9489743 8041.5
+66.28425749 244.9489743 8072.205399
+66.34799235 244.9489743 8097
+66.41172721 245 8137.031285
+66.47546208 245.3738644 8181.225458
+66.53919694 245.3738644 8203
+66.6029318 245.3738644 8238.450502
+66.66666667 248 8240.231717
+66.73040153 248 8305.129986
+66.79413639 251.7300141 8333.253416
+66.85787126 251.7300141 8376
+66.92160612 251.7300141 8411.666667
+66.98534098 251.7300141 8430.5
+67.04907584 252.6756815 8466.5
+67.11281071 253.5221884 8495.534423
+67.17654557 253.5221884 8521.073383
+67.24028043 253.5221884 8536.900169
+67.3040153 253.5221884 8550.557487
+67.36775016 253.5221884 8589.455184
+67.43148502 253.5221884 8616.096129
+67.49521989 253.5221884 8639.758571
+67.55895475 253.5221884 8664
+67.62268961 254.0341184 8688.652417
+67.68642447 254.4645358 8728.753426
+67.75015934 254.4645358 8764.996129
+67.8138942 254.4645358 8789.088792
+67.87762906 256.5 8831.895841
+67.94136393 261.1727398 8859.175647
+68.00509879 262.0954025 8877.637084
+68.06883365 262.5 8916.5
+68.13256851 262.5 8929
+68.19630338 262.5 8946.331096
+68.26003824 262.9118991 8975.890588
+68.3237731 262.9118991 9010.272637
+68.38750797 262.9118991 9051.115263
+68.45124283 262.9118991 9076.199921
+68.51497769 263.2717228 9123.306449
+68.57871256 263.2717228 9153.311168
+68.64244742 263.2717228 9193.786722
+68.70618228 263.8560213 9227.389941
+68.76991714 263.8560213 9276
+68.83365201 264.5751311 9295.339334
+68.89738687 264.5751311 9318.36371
+68.96112173 264.5751311 9353
+69.0248566 264.5751311 9384.14057
+69.08859146 264.5751311 9411.964088
+69.15232632 264.5751311 9455.537221
+69.21606119 266.5393029 9478.971019
+69.27979605 266.5393029 9514.469244
+69.34353091 266.5393029 9539
+69.40726577 270.6686166 9557
+69.47100064 271.4851132 9588.342093
+69.5347355 271.4851132 9624.453448
+69.59847036 272.512385 9664.843506
+69.66220523 272.512385 9685.666667
+69.72594009 272.512385 9704.913422
+69.78967495 272.512385 9730.333333
+69.85340982 273 9759.949953
+69.91714468 273.1181063 9809.630217
+69.98087954 273.1181063 9843.432332
+70.0446144 275.0645379 9869.225502
+70.10834927 275.0645379 9923.222471
+70.17208413 275.0645379 9943
+70.23581899 275.9307884 9966.5
+70.29955386 278 9997.075672
+70.36328872 278 10015.1069
+70.42702358 278 10073.6075
+70.49075844 279.5084972 10117.76038
+70.55449331 280.449639 10155.59124
+70.61822817 280.449639 10182.5
+70.68196303 281.2055679 10233.38811
+70.7456979 281.2055679 10255.5
+70.80943276 281.6913204 10281.38959
+70.87316762 282.3242816 10315.20956
+70.93690249 282.3242816 10353.44195
+71.00063735 282.5 10384.5
+71.06437221 282.8427125 10412.92123
+71.12810707 282.8427125 10434.5676
+71.19184194 282.8427125 10454.65867
+71.2555768 284.1408102 10496.22789
+71.31931166 284.1408102 10497.33333
+71.38304653 284.5 10525.28444
+71.44678139 288.3868929 10567.35729
+71.51051625 289 10600.94486
+71.57425112 289.1428219 10621.75
+71.63798598 290.2645345 10671.41082
+71.70172084 290.2673337 10708.42509
+71.7654557 290.2673337 10744.77404
+71.82919057 290.2673337 10784.10864
+71.89292543 290.6546797 10818.5797
+71.95666029 290.6546797 10845.11584
+72.02039516 291.0810311 10894.51388
+72.08413002 293.3721186 10937.95012
+72.14786488 293.3721186 10961.66667
+72.21159975 294.5 11021.06607
+72.27533461 294.5 11057.35615
+72.33906947 295 11101.5
+72.40280433 296 11131.27495
+72.4665392 297.0800758 11159.60335
+72.53027406 297.6919549 11211.19763
+72.59400892 298.2914682 11246.53335
+72.65774379 298.3990617 11261
+72.72147865 298.5919337 11289.66687
+72.78521351 299.8132752 11327.92037
+72.84894837 299.8132752 11370.98415
+72.91268324 300 11383.5
+72.9764181 300 11413.39319
+73.04015296 300 11443.33333
+73.10388783 300.8597205 11473.5
+73.16762269 302.5315411 11507.29456
+73.23135755 302.5315411 11514.30971
+73.29509242 302.5315411 11542.40392
+73.35882728 305.0173297 11544.11863
+73.42256214 306.5291876 11570.9813
+73.486297 307 11602.91517
+73.55003187 307 11629.2761
+73.61376673 307.2378964 11660.19082
+73.67750159 307.7276935 11719.66667
+73.74123646 308.1301673 11738.10832
+73.80497132 308.6357076 11756.79821
+73.86870618 308.6357076 11779.80051
+73.93244105 311.8206902 11796.33435
+73.99617591 312 11829.40246
+74.05991077 312.5 11872.5
+74.12364563 313.2483041 11896.71804
+74.1873805 314 11931.10542
+74.25111536 314.6666667 11968.47108
+74.31485022 316.227766 11988.28837
+74.37858509 316.783838 12026.20611
+74.44231995 317.2089217 12051.95919
+74.50605481 319.7579442 12075.96961
+74.56978967 321.380032 12104.72574
+74.63352454 322.0871388 12143.98556
+74.6972594 322.1614502 12174.96456
+74.76099426 322.8685491 12210.38084
+74.82472913 322.8685491 12229.4764
+74.88846399 323 12249.18038
+74.95219885 323.7826431 12268.72679
+75.01593372 323.893501 12271.5
+75.07966858 323.893501 12313.13192
+75.14340344 324.2084592 12342.57057
+75.2071383 325.9762261 12365.45592
+75.27087317 327.0368863 12397
+75.33460803 328.6666667 12431.19631
+75.39834289 330.1417877 12462.59556
+75.46207776 330.5 12493
+75.52581262 330.6811153 12528.51795
+75.58954748 331.662479 12570
+75.65328235 333.1741286 12610.08175
+75.71701721 335.4101966 12650.5
+75.78075207 336.1501153 12678.50543
+75.84448693 336.3965913 12718.30744
+75.9082218 336.7825708 12753
+75.97195666 337.6666667 12798.63274
+76.03569152 337.6666667 12816.95508
+76.09942639 338.0474819 12836.80589
+76.16316125 340.3295462 12856.46155
+76.22689611 341 12882.27481
+76.29063098 342.4358125 12905.21897
+76.35436584 344.3259555 12949
+76.4181007 344.9289782 12979.65208
+76.48183556 346.4101615 13002.50541
+76.54557043 346.4101615 13034.45285
+76.60930529 346.4101615 13076.05891
+76.67304015 348.1052796 13113.47739
+76.73677502 349.7210317 13158.23734
+76.80050988 350 13201.86467
+76.86424474 351.2607164 13256.50264
+76.9279796 351.5017781 13304.6508
+76.99171447 352 13372.38306
+77.05544933 352.8462838 13408.33333
+77.11918419 353.5533906 13465.60136
+77.18291906 353.5533906 13529.5
+77.24665392 353.5533906 13559.0975
+77.31038878 355.7562368 13575.74309
+77.37412365 357.176427 13634.70396
+77.43785851 357.7708764 13662.99412
+77.50159337 358.6653036 13679.73728
+77.56532823 360.0069444 13709.08367
+77.6290631 360.9780118 13763.89283
+77.69279796 362.038672 13793.47528
+77.75653282 363.2238586 13832.74378
+77.82026769 365 13861.60261
+77.88400255 366.3794796 13894.03198
+77.94773741 367.1623619 13933.9224
+78.01147228 369.1097398 13959.17481
+78.07520714 370.0815226 14006.67644
+78.138942 370.5 14018.39194
+78.20267686 370.5 14040.31225
+78.26641173 370.8589538 14100.04827
+78.33014659 372.2000806 14133.66667
+78.39388145 372.7585319 14163.34883
+78.45761632 374.413675 14199.35252
+78.52135118 375.9948138 14255.93285
+78.58508604 376.1066338 14318.91232
+78.64882091 377.4482746 14400.2296
+78.71255577 379.0304517 14443.00956
+78.77629063 379.6922843 14492.40378
+78.84002549 381 14526.71012
+78.90376036 382.2058782 14557.30969
+78.96749522 382.5447686 14630.80223
+79.03123008 384.1616413 14693.52315
+79.09496495 385.6666667 14708.98971
+79.15869981 387 14731.43965
+79.22243467 387.7435891 14759.43984
+79.28616953 389.3034072 14778.17326
+79.3499044 391.5377194 14812.5
+79.41363926 392 14866.21297
+79.47737412 393.4610164 14914.4781
+79.54110899 394.6666667 14943.5
+79.60484385 394.9075841 15015.14845
+79.66857871 395.3368184 15057
+79.73231358 396.3333509 15096.97453
+79.79604844 398.6590858 15104.06039
+79.8597833 400.969762 15145.05226
+79.92351816 401.7163178 15173.5
+79.98725303 403.4044187 15211.50423
+80.05098789 404.7283039 15233.38685
+80.11472275 406.3526793 15275.5
+80.17845762 407.3013626 15328.0723
+80.24219248 409.6666667 15362.71331
+80.30592734 411 15402.55048
+80.36966221 412.3307734 15440.4966
+80.43339707 412.9503602 15479
+80.49713193 414.2490624 15518.59789
+80.56086679 415.4614302 15545.5
+80.62460166 416.3333333 15627.05986
+80.68833652 419.039139 15673.49488
+80.75207138 420.3749814 15733.79372
+80.81580625 421.3805881 15817.05045
+80.87954111 423.3534772 15872.69353
+80.94327597 426 15902.09079
+81.00701083 427.6738513 15951.61059
+81.0707457 428.6666667 15990.26904
+81.13448056 430.6280297 16043.78774
+81.19821542 433.0127019 16086.67927
+81.26195029 434.2995181 16139
+81.32568515 435.5 16198.07643
+81.38942001 436.4804692 16279.54554
+81.45315488 438 16329.05315
+81.51688974 439.2751605 16391
+81.5806246 440.5053916 16443.06109
+81.64435946 442.2503062 16474.88138
+81.70809433 442.9201652 16524.37837
+81.77182919 444.4862203 16589.00528
+81.83556405 444.7701654 16638.22256
+81.89929892 444.8483824 16685.59872
+81.96303378 446.2917581 16748.53122
+82.02676864 448.0238089 16801.5
+82.09050351 448.6592527 16849.5
+82.15423837 451.5732499 16918.17114
+82.21797323 453.6666667 16994.15159
+82.28170809 455.3333333 17048.5761
+82.34544296 457.6666667 17099.06776
+82.40917782 459.2793268 17134.98891
+82.47291268 461.3008238 17186.23032
+82.53664755 462.5 17225.5
+82.60038241 465.6666667 17270
+82.66411727 467.044029 17327
+82.72785214 468.6759465 17373.98821
+82.791587 472.6666667 17422.69907
+82.85532186 474.0254213 17483.21516
+82.91905672 476.0974319 17533.01597
+82.98279159 478.0041841 17628.17205
+83.04652645 478.0041841 17680.41696
+83.11026131 478.0041841 17749.96972
+83.17399618 480.0337488 17829.95884
+83.23773104 481.2018288 17866.68143
+83.3014659 482.2473432 17909.60055
+83.36520076 484 17970.5
+83.42893563 486.9499828 17999.47199
+83.49267049 487.8609775 18029.66129
+83.55640535 489.0860281 18085.67014
+83.62014022 491.868885 18126.79816
+83.68387508 497.5492605 18159.5
+83.74760994 499.9847998 18232.42808
+83.81134481 501.7173839 18235.22639
+83.87507967 502.9618939 18284.2757
+83.93881453 504.5 18306.55948
+84.00254939 505.7588358 18345.32139
+84.06628426 506.5 18391.2119
+84.13001912 509.5116126 18448.6505
+84.19375398 509.6666667 18502.63275
+84.25748885 511.3632404 18567.5
+84.32122371 512.6524164 18613
+84.38495857 514.0739895 18614.36669
+84.44869344 516.25 18651.2314
+84.5124283 519.7543651 18699.79787
+84.57616316 523.9453693 18753.88605
+84.63989802 525.0073015 18815.26792
+84.70363289 527.25 18879.93115
+84.76736775 528.7328248 18943.52069
+84.83110261 529.6229791 19017.99043
+84.89483748 532.6666667 19076.34313
+84.95857234 536.3584001 19121.53343
+85.0223072 536.3933125 19194.5
+85.08604207 538.5450095 19251
+85.14977693 540.1170244 19318.14001
+85.21351179 542 19399.55051
+85.27724665 543.5807646 19445.68257
+85.34098152 544.1186681 19530.5
+85.40471638 545.7355337 19606.5
+85.46845124 548 19658.27562
+85.53218611 548.7148622 19730.94545
+85.59592097 550.1290758 19774.78465
+85.65965583 553.390233 19825.15282
+85.72339069 556.9724281 19919.78797
+85.78712556 560.7356775 19975.41302
+85.85086042 563.25 20107.93406
+85.91459528 565.7942001 20176.5
+85.97833015 568.1126649 20239.20948
+86.04206501 569.3997514 20284.04701
+86.10579987 571.5476066 20316
+86.16953474 573.5012674 20389.67146
+86.2332696 577.0589586 20441
+86.29700446 581.3776741 20540.39053
+86.36073932 584.0702013 20605
+86.42447419 586.1915216 20630.41037
+86.48820905 588.4998726 20663.05697
+86.55194391 590.7584713 20711.35603
+86.61567878 590.7691597 20796
+86.67941364 594.8818829 20895.5
+86.7431485 598.9324431 20985.51505
+86.80688337 601.0216302 21080.96848
+86.87061823 602.1181551 21146.02829
+86.93435309 604.5 21200.87923
+86.99808795 608 21310.57579
+87.06182282 613.1459859 21405.27437
+87.12555768 616.25 21473.67357
+87.18929254 619.6666667 21573.47266
+87.25302741 622.6075208 21673.5
+87.31676227 625 21731.66667
+87.38049713 625.6666667 21827.5
+87.44423199 628.9770266 21884.55786
+87.50796686 631.3325194 21976.5233
+87.57170172 632.5 22089.99865
+87.63543658 635.0852961 22224.31101
+87.69917145 636.6286615 22288.60714
+87.76290631 638 22318.0462
+87.82664117 639.8070732 22396.50121
+87.89037604 643.7455501 22535.13571
+87.9541109 648.063365 22566.31262
+88.01784576 648.6666667 22648.00919
+88.08158062 650.723082 22725.6613
+88.14531549 654.5 22795.00131
+88.20905035 660.424507 22887.63229
+88.27278521 665.3874811 22957.43437
+88.33652008 665.3874811 23012.01499
+88.40025494 669.0238479 23097.24057
+88.4639898 674.7116733 23186.03136
+88.52772467 676.9368919 23305.28941
+88.59145953 680.3360514 23429.18951
+88.65519439 687.3863542 23491.23574
+88.71892925 694.1199464 23595.5
+88.78266412 698 23655.36313
+88.84639898 705.6925676 23719.31468
+88.91013384 707.1067812 23808.28532
+88.97386871 713.2189606 23899.99174
+89.03760357 719.7417361 23992.13309
+89.10133843 723.0077224 24107.87805
+89.1650733 726.7220927 24214.64764
+89.22880816 729 24296.05403
+89.29254302 733.8683596 24405.78755
+89.35627788 740.2187276 24460.23777
+89.42001275 747.8786666 24593.38942
+89.48374761 754.3041345 24698.5
+89.54748247 762.5 24736
+89.61121734 768.162181 24806.7201
+89.6749522 770.3091525 24848
+89.73868706 779.0665202 24903
+89.80242192 782.886965 25003.29578
+89.86615679 787.9848016 25048.34143
+89.92989165 794.7880221 25140.74622
+89.99362651 798 25278.36032
+90.05736138 803 25365.5
+90.12109624 811 25494.75265
+90.1848311 818.2930841 25583.0504
+90.24856597 822.7241336 25706.28468
+90.31230083 824.6618701 25708.76549
+90.37603569 828.7291476 25829.80153
+90.43977055 834.5 25896.84044
+90.50350542 840.7499628 25933.99674
+90.56724028 841.810623 26039.20722
+90.63097514 849.4709465 26235
+90.69471001 857.6666667 26425.32182
+90.75844487 863.7160027 26579.4368
+90.82217973 878.1497594 26681.26808
+90.8859146 881.3267839 26791.56883
+90.94964946 886.7046537 26949.55587
+91.01338432 890.3895215 27078.70086
+91.07711918 901.4452681 27147.95065
+91.14085405 907.8832983 27213.82002
+91.20458891 917.4095777 27328.29764
+91.26832377 926 27441.452
+91.33205864 934.7322989 27552.41573
+91.3957935 937.7002816 27644.33333
+91.45952836 943.9662713 27776.56858
+91.52326322 949.1638425 27881.97883
+91.58699809 954.6862461 27980.21533
+91.65073295 960.7876797 28115.22606
+91.71446781 970.3333333 28291.34232
+91.77820268 982.1713191 28454.5
+91.84193754 987.1210665 28597
+91.9056724 990.5 28743.5
+91.96940727 994.1921343 28882.66667
+92.03314213 1001 29009.0557
+92.09687699 1005.744169 29146.66667
+92.16061185 1011.597153 29258.66439
+92.22434672 1015.174862 29286.24156
+92.28808158 1029.19392 29467
+92.35181644 1038.062504 29575.72001
+92.41555131 1038.739862 29745
+92.47928617 1039.230485 29950.21482
+92.54302103 1053 30146.0834
+92.6067559 1069.261494 30338.41645
+92.67049076 1076.142891 30381
+92.73422562 1085.513966 30546.03021
+92.79796048 1087.883783 30626.69973
+92.86169535 1092.759387 30714.18253
+92.92543021 1102.5 30748.53838
+92.98916507 1118.842551 30914.56118
+93.05289994 1133.915929 31042.96927
+93.1166348 1146.220092 31152.2023
+93.18036966 1152.376359 31274.67679
+93.24410453 1162.5 31405.44058
+93.30783939 1171 31538.33333
+93.37157425 1181.950827 31733.53813
+93.43530911 1188.333333 31927.99249
+93.49904398 1202.081528 32131.27453
+93.56277884 1209.265562 32335.9931
+93.6265137 1217.423568 32433.28544
+93.69024857 1225.425946 32581.67147
+93.75398343 1245.344531 32661.5
+93.81771829 1259.357177 32813.74165
+93.88145315 1265.5697 32904.86651
+93.94518802 1265.5697 33088.52128
+94.00892288 1275 33278.3594
+94.07265774 1276.333333 33381.80403
+94.13639261 1284.604349 33477
+94.20012747 1293.738832 33657.49997
+94.26386233 1304.761536 33791.33333
+94.3275972 1317 33890.32904
+94.39133206 1318.04704 34035.19069
+94.45506692 1323.864167 34257.90306
+94.51880178 1338.908361 34513.71872
+94.58253665 1345.553524 34651.76781
+94.64627151 1356.666667 34668.66667
+94.71000637 1372.498525 34790.91931
+94.77374124 1381.89001 34948.40085
+94.8374761 1390.836798 35111.26795
+94.90121096 1428.717047 35111.80247
+94.96494583 1439.669406 35212.6398
+95.02868069 1445.685074 35365.5
+95.09241555 1450 35642.47635
+95.15615041 1450 35903.20187
+95.21988528 1460.5 36057.49609
+95.28362014 1468.469101 36262.79306
+95.347355 1486.432026 36445.52442
+95.41108987 1501.68805 36637.07938
+95.47482473 1518.502742 36806.5
+95.53855959 1546.144021 37014.81677
+95.60229446 1566.948627 37158.46135
+95.66602932 1587.219022 37256.33074
+95.72976418 1603 37372.27325
+95.79349904 1612.988996 37550.90561
+95.85723391 1616.580754 37679.98149
+95.92096877 1616.580754 37858.49706
+95.98470363 1628.705109 38188.01613
+96.0484385 1631.88241 38396.56821
+96.11217336 1662.5 38557.11856
+96.17590822 1683.639348 38697.77503
+96.23964308 1684.840695 38923.53736
+96.30337795 1702.570292 39073.49905
+96.36711281 1737.24696 39219
+96.43084767 1768.47406 39418.01228
+96.49458254 1818.364673 39598.68685
+96.5583174 1838.477631 39743.34916
+96.62205226 1863.666667 39889.21665
+96.68578713 1900 40089.47064
+96.74952199 1930.947975 40439.28937
+96.81325685 1982.453698 40778.27728
+96.87699171 1984.5 41378.69379
+96.94072658 2005.001278 41600.5
+97.00446144 2054.713646 41807.52426
+97.0681963 2057.676359 41973
+97.13193117 2106.076922 42156.64546
+97.19566603 2141 42378.5
+97.25940089 2147.794256 42546.61502
+97.32313576 2186.427268 42719.5
+97.38687062 2220 42943.5
+97.45060548 2269.67666 43233.67291
+97.51434034 2296.5 43516.04449
+97.57807521 2370.232056 43516.5
+97.64181007 2442.680659 43691.5
+97.70554493 2462 43978
+97.7692798 2554.774941 44300.23984
+97.83301466 2591.365002 44461.5
+97.89674952 2624.628259 44746.95526
+97.96048438 2690.358311 45179.49893
+98.02421925 2801.91062 45461.7149
+98.08795411 2877.217493 45573.03205
+98.15168897 2979.336973 45824.64586
+98.21542384 3064.913912 46076.49208
+98.2791587 3169.606147 46409.53937
+98.34289356 3283.132752 46662.71377
+98.40662843 3386.483146 46949.54654
+98.47036329 3462.5 47461.7548
+98.53409815 3642.107522 47929.69381
+98.59783301 3714.108911 48113.47467
+98.66156788 3739.580496 48526.84129
+98.72530274 3838.882715 48891.62633
+98.7890376 3942.827412 49484.69157
+98.85277247 4260.793504 49846.07833
+98.91650733 4483.7641 50164.98348
+98.98024219 4520.53332 50480.35311
+99.04397706 4762 51305.5
+99.10771192 5060.056126 51933
+99.17144678 5376.986352 52460.31357
+99.23518164 5444.722215 52979.97558
+99.29891651 5444.722215 53372.60612
+99.36265137 5444.722215 53969.54846
+99.42638623 5444.722215 54938.34222
+99.4901211 5444.722215 55449.5
+99.55385596 5459.571458 56188.84521
+99.61759082 5748.071024 56830.8964
+99.68132569 6122.222254 57893.14158
+99.74506055 6614.5 59304.59616
+99.80879541 7690.305586 60478.13589
+99.87253027 8976.666667 62969.57313
+99.93626514 10304.69567 64989.04536
+100 14746.74475 70892.72389
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.bib b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.bib
new file mode 100644
index 0000000000..b18838d626
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.bib
@@ -0,0 +1,219 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+@book{texbook,
+ author = {Donald E. Knuth},
+ title = {The \TeX{}book},
+ publisher = {Addison--Wesley},
+ xurl = {https://ctan.org/pkg/texbook},
+ year = {2021},
+}
+
+@misc{widows-and-orphans,
+ urlnewline = 1,
+ author = {Frank Mittelbach},
+ year = {2021},
+ month = {March},
+ title = {The \textsf{widows-and-orphans} package},
+ url = {https://ctan.org/pkg/widows-and-orphans},
+}
+
+@misc{widow-assist,
+ author = {jeremie},
+ title = {Paragraph callback to help with widows\slash orphans hand tuning},
+ url = {https://tex.stackexchange.com/q/372062},
+ year = {2017},
+ month = {August},
+}
+
+@book{elements,
+ title = {The Elements of Typographic Style},
+ author = {Robert Bringhurst},
+ edition = {3rd},
+ publisher = {Hartley \& Marks},
+ year = {2004},
+}
+
+@misc{oed-club,
+ title={club, n.},
+ journal={OED Online},
+ publisher={Oxford University Press},
+ month=sep,
+ year={2021},
+ url={www.oed.com/view/Entry/34788},
+ author={{Oxford English Dictionary}}
+}
+
+@misc{oed-line,
+ title={line at end of paragraph},
+ journal={OED Online},
+ publisher={Oxford University Press},
+ urlnewline=1,
+ url={https://www.oed.com/view/th/class/195380},
+ author={{Oxford English Dictionary}}
+}
+
+@misc{oed-widow,
+ title={widow, n.},
+ journal={OED Online},
+ publisher={Oxford University Press},
+ month=dec,
+ year={2021},
+ url={www.oed.com/view/Entry/228912},
+ author={{Oxford English Dictionary}}
+}
+
+@article{widowhistory,
+ title={The Typographical Widow},
+ subtitle={Who is she? What is she?},
+ author={Karl Brown},
+ journal={Bulletin of the {New York} Public Library},
+ publisher={The {New York} Public Library},
+ location={New York},
+ volume={52},
+ number={1},
+ year={1948},
+ month=jan,
+ pages={3--25},
+ url={https://hdl.handle.net/2027/uc1.b3310084}
+}
+
+@article{widowhistory2,
+ title={The Typographical Widow: Encore},
+ subtitle={Encore},
+ author={Karl Brown},
+ journal={Bulletin of the {New York} Public Library},
+ publisher={The {New York} Public Library},
+ location={New York},
+ volume={52},
+ number={9},
+ year={1948},
+ month=sep,
+ pages={458-466},
+ urlnewline=1,
+ url={https://hdl.handle.net/2027/uc1.b3310084}
+}
+
+@book{old,
+ title={Mechanick exercises},
+ subtitle={The doctrine of handy-works applied to the art of printing},
+ volume={\unskip~2,\gobble},
+ author={Moxon, Joseph},
+ year={1683},
+ location={London},
+ pages={394},
+ publisher={\hspace*{-.66em}\gobble},
+ url={https://archive.org/details/mechanickexercis00moxo_0}
+}
+
+@article{global,
+ url = {https://doi.org/10.1111/coin.12165},
+ year = {2018},
+ month = mar,
+ publisher = {Wiley},
+ volume = {35},
+ number = {2},
+ pages = {242--284},
+ author = {Frank Mittelbach},
+ title = {A general framework for globally optimized pagination},
+ journal = {Computational Intelligence}
+}
+
+@book{backwards1,
+ title={The Layout Book},
+ author={Ambrose, G. and Harris, P.},
+ isbn={9782940373536},
+ series={Advanced Level Series},
+ year={2007},
+ publisher={Bloomsbury Academic}
+}
+
+@book{backwards2,
+ title={Typography Essentials Revised and Updated},
+ subtitle={100 Design Principles for Working with Type},
+ author={Saltz, I.},
+ isbn={9781631596483},
+ year={2019},
+ publisher={Rockport Publishers}
+}
+
+@book{backwards3,
+ title={Advanced Typography: From Knowledge to Mastery},
+ author={Hunt, R.},
+ isbn={9781350055926},
+ lccn={2020024110},
+ year={2020},
+ publisher={Bloomsbury Publishing}
+}
+
+@article{gutenberg,
+ title={All Books (sorted by popularity)},
+ url={https://www.gutenberg.org/ebooks/search/?sort_order=downloads},
+ year={2022},
+ month=mar,
+ journal={Project Gutenberg}
+}
+
+@misc{etex,
+ title={The {\eTeX} manual},
+ author={{The \NTS{} Team}},
+ url={ctan.org/pkg/etex},
+ year={1998},
+ month=feb,
+}
+
+@String{j-TUGboat = "TUGboat"}
+@Article{xIsambert:TB31-1-12,
+urlnewline = 1,
+ author = "Paul Isambert",
+ title = "Strategies against widows",
+ journal = j-TUGboat,
+ volume = "31",
+ number = "1",
+ pages = "12--17",
+ year = "2010",
+ ISSN = "0896-3207",
+ ISSN-L = "0896-3207",
+ bibdate = "Sun Nov 27 15:57:23 MST 2011",
+ bibsource = "http://www.math.utah.edu/pub/tex/bib/index-table-t.html#tugboat;
+ http://www.math.utah.edu/pub/tex/bib/tugboat.bib",
+ URL = "https://tug.org/TUGboat/tb31-1/tb97isambert.pdf",
+ acknowledgement = ack-bnb # " and " # ack-nhfb,
+ fjournal = "TUGboat",
+ issue = "97",
+ journal-URL = "https://tug.org/TUGboat/",
+}
+
+@Article{xThanh:2000:MTE,
+urlnewline = 1,
+ author = "\Thanh",
+ title = "Micro-typographic extensions to the {\TeX} typesetting
+ system",
+ journal = j-TUGboat,
+ volume = "21",
+ number = "4",
+ pages = "317--317",
+ month = dec,
+ year = "2000",
+ CODEN = "????",
+ ISSN = "0896-3207",
+ ISSN-L = "0896-3207",
+ bibdate = "Mon Aug 10 16:37:32 MDT 2020",
+ bibsource = "http://www.math.utah.edu/pub/tex/bib/tugboat.bib",
+ URL = "https://tug.org/TUGboat/tb21-4/tb69thanh.pdf",
+ acknowledgement = ack-nhfb,
+ fjournal = "TUGboat",
+ issue = "69",
+ journal-URL = "https://tug.org/TUGboat/",
+}
+
+@phdthesis{plass,
+ title={Optimal pagination techniques for automatic typesetting systems},
+ author={Plass, Michael Frederick},
+ year={1981},
+ school={Stanford University},
+ urlnewline=1,
+ url={tug.org/docs/plass/plass-thesis.pdf}
+}
diff --git a/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.ltx b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.ltx
new file mode 100644
index 0000000000..bcae2c01c6
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/source/luatex/lua-widow-control/tb133chernoff-widows.ltx
@@ -0,0 +1,1465 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\documentclass[final]{ltugboat}
+
+% This is the LaTeX source for the following article:
+% @article{tb133chernoff-widows,
+% title={Automatically removing widows and orphans with
+% \texttt{lua-widow-control}},
+% author={Chernoff, Max},
+% journal={TUGboat},
+% volume={43},
+% number={1},
+% pages={28--39},
+% year={2022},
+% month=may,
+% DOI={10.47397/tb/43-1/tb133chernoff-widows},
+% }
+% Please refer to the PDF on tug.org for the authoritative version.
+
+% Compiling:
+% context tb133chernoff-widows-figure.ctx
+% lualatex tb133chernoff-widows.ltx
+% bibtex tb133chernoff-widows
+% lualatex tb133chernoff-widows.ltx
+% lualatex tb133chernoff-widows.ltx
+% The original article was built with the final/frozen TeX Live 2021.
+
+% Set the publication info
+\vol 43, 1.
+\issyear 2022.
+\issueseqno=133
+\setcounter{page}{28}
+\PrelimDraftfalse
+
+% Load lwc
+\usepackage[balanced]{lua-widow-control}
+
+% Table Stuff
+\usepackage{tabularx}
+\usepackage{hhline}
+\usepackage{booktabs}
+\AddToHook{env/tabularx/before}{\smallskip\noindent}
+\AddToHook{env/tabularx/after}{\smallskip}
+\AddToHook{env/tabular/before}{\smallskip\noindent}
+\AddToHook{env/tabular/after}{\smallskip}
+\renewcommand{\arraystretch}{1.15}
+
+\usepackage{graphicx}
+
+% Let the macro names in section headings be in boldface
+\usepackage{lmodern}
+\DeclareRobustCommand{\cs}[1]{\texttt{\textbackslash#1}}
+
+\makeatletter
+\DeclareRobustCommand{\eTeX}{%
+ \ifx\f@series\bfseries@rm%
+ \ensuremath{\boldsymbol{\varepsilon}}\mbox{-}\kern-.125em\TeX%
+ \else%
+ \ensuremath{\varepsilon}\mbox{-}\kern-.125em\TeX%
+ \fi%
+}
+\let\goodeTeX=\eTeX
+\makeatother
+
+\usepackage{mathtools}
+
+% Abbreviations
+% Most of these are just typewriter commands with `\allowbreak`s added.
+\def\lwc/{\textsf{lua-\allowbreak widow-\allowbreak control}}
+\def\Lwc/{\textsf{lua-\allowbreak widow-\allowbreak control}}
+\def\estretch/{%
+ \texorpdfstring{\cs{emergency}\-\mbox{\ttfamily stretch}}{\textbackslash{}emergencystretch}%
+ }
+\def\openalty/{\cs{output}\-\mbox{\ttfamily penalty}}
+\def\waos/{widows and orphans}
+\def\wao/{widow and orphan}
+\def\woo/{widow or orphan}
+\def\woos/{widow or orphans}
+\def\latexuse/{%
+ \cs{use\-package\{lua-\allowbreak widow-\allowbreak control\}}
+}
+\def\lsness/{\texorpdfstring{%
+ \cs{loose}\-\mbox{\ttfamily ness}}{\textbackslash{}looseness}%
+}
+\def\plainop/{Plain~\TeX\slash\OpTeX{}}
+\newcommand{\LuaMetaTeX}{Lua\-Meta\-\TeX{}}
+\newcommand{\q}[1]{\texorpdfstring{``#1''}{“#1”}}
+
+\def\inlineurl[#1]#2{\href{https://#1}{#2}\footnote{\raggedright\tbsurl{#1}}}
+
+\def\longs/{\char"017F}
+\def\endofline#1{\unskip\nobreak\hskip\fontdimen2\font plus 1fill\hbox{#1}}
+
+% Additional macros
+\def\dots{\ensuremath{\mathellipsis}}
+\def\ttbs{{\tt\char`\\}}
+
+\ifdefined\tubsentencespace\else
+ \def\tubsentencespace{\spacefactor=3000{}\space\ignorespaces}
+\fi
+
+% Figures
+\makeatletter
+\renewcommand*{\fps@figure}{tb}
+\renewcommand*{\fps@table}{tb}
+\g@addto@macro\@floatboxreset\centering
+\makeatother
+
+% pgfplots
+\usepackage{pgfplots}
+\usepackage{pgfplotstable}
+\usetikzlibrary{patterns}
+
+\pgfkeys{
+ /pgf/number format/.cd,
+ sci generic={%
+ mantissa sep={\times},
+ exponent={10^{##1}}
+ },
+ 1000 sep={\,},
+}
+
+\pgfplotsset{
+ compat=1.18,
+ lua backend=true,
+ unbounded coords=discard,
+ filter discard warning=false,
+}
+
+\pgfplotstableread{\jobname-plot.dat}{\plotdata}
+
+% Metadata
+\title{Automatically removing \waos/ with \lwc/}
+\author{Max Chernoff}
+\address{Calgary, Alberta\\Canada}
+
+% Load last
+\AddToHookNext{shipout/foreground}{%
+ \put(1in, \dimexpr-2\baselineskip){%
+ \fbox{\parbox[t]{\textwidth}{%
+ This document is a part of the \lwc/ documentation. For the
+ authoritative version of the article, please see
+ \tbsurl{https://tug.org/TUGboat/tb43-1/tb133chernoff-widows.html}.
+ }%
+ }}%
+ \put(\dimexpr1in + 0.4\textwidth, \dimexpr-\paperheight + 4\baselineskip){%
+ \fbox{\parbox[t]{0.6\textwidth}{%
+ Some commands may have changed since publication. Please see the
+ \lwc/ manual for the current syntax. (Links:
+ \href{lua-widow-control.pdf}{local},
+ \href{http://mirrors.ctan.org/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf}{\acro{CTAN}},
+ \href{https://github.com/gucci-on-fleek/lua-widow-control/releases/latest/download/lua-widow-control.pdf}{GitHub}.)
+ }%
+ }}%
+}
+
+\usepackage[hidelinks,pdfa]{hyperref}
+
+\usepackage{hyperxmp}
+\hypersetup{
+ pdfdisplaydoctitle=true,
+ pdftitle={Automatically removing widows and orphans with lua-widow-control},
+ pdfauthor={Max Chernoff},
+ pdflang={en},
+ pdfcontacturl={https://github.com/gucci-on-fleek/lua-widow-control},
+ pdfcopyright={SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+},
+ pdflicenseurl={https://creativecommons.org/licenses/by-sa/4.0/},
+ pdfdoi={10.47397/tb/43-1/tb133chernoff-widows},
+ pdfpublication={TUGboat},
+ pdfpubtype={journal},
+ pdfvolumenum={43},
+ pdfissuenum={1},
+ pdfpagerange={28-39},
+ pdfdate={2022-05}
+}
+
+% TODO: Temporary fix
+\def\Thanh{H{\`a}n Th\^e\llap{\raise0.5ex\hbox{\'{\relax}}} Th{\`a}nh}
+
+\begin{document}
+ \maketitle
+
+ \begin{abstract}
+ The \textsf{lua-widow-control} package, for
+ plain~Lua\TeX\slash{}\LuaLaTeX\slash{}\ConTeXt\slash{}\OpTeX{},
+ removes widows and orphans without any user intervention.
+ Using the power of Lua\TeX{}, it does so \emph{without} stretching any glue
+ or shortening any pages or columns. Instead, \textsf{lua-widow-control}
+ automatically lengthens a paragraph on a page or column where a widow or
+ orphan would otherwise occur.
+
+ To use \textsf{lua-widow-control}, all that most users need do is
+ place \verb|\usepackage{lua-widow-control}| in their preamble. No further
+ changes are required.
+ \end{abstract}
+
+ \section{Motivation}
+
+ \TeX{} provides top-notch typesetting: even 40 years after its first
+ release, no other program produces higher quality mathematical
+ typesetting, and its paragraph-breaking algorithm is still
+ state-of-the-art. However, its page breaking is not quite as sophisticated
+ as its paragraph breaking and thus suffers from some minor issues.
+
+ Unmodified \TeX{} has only two familiar ways of dealing with \waos/: it can
+ either shorten a page by one line, or it can stretch vertical
+ whitespace. \TeX{} was designed for mathematical and scientific typesetting,
+ where a typical page has multiple section headings, tables, figures, and
+ equations. For this style of document, \TeX's default behaviour works quite
+ well, since the slight stretching of whitespace between the various document
+ elements is nearly imperceptible; however, for prose or other documents
+ composed almost entirely of paragraphs, there is little vertical whitespace
+ to stretch.
+
+ Since no ready-made and fully-automated solution to remove
+ \waos/ from all types of documents was available, I decided to
+ create \lwc/.
+
+ \section{What are \waos/?}
+
+ \subsection{Widows}
+
+ A \q{widow} occurs when the majority of a paragraph is on one page
+ or column,
+ but the last line is on the following page or column. It not only looks
+ quite odd for a lone line to be at the start of the page, but it makes a
+ paragraph harder to read since the separation of a paragraph and
+ its last line disconnects the two, causing the reader to lose context for
+ the widowed line.
+
+ \subsection{Orphans}
+
+ An \q{orphan} occurs when the first line of a paragraph is at the end
+ of the page or column preceding the remainder of the paragraph. They are not
+ as distracting for the reader, but they are still not ideal.
+ Visually, \waos/ are about equally disruptive; however, orphans tend not to
+ decrease the legibility of a text as much as widows, so many authors choose
+ to ignore them.
+
+ See figure~\ref{tab:widow} for a visual reference.
+
+ \begin{figure}
+ \def\firstpage#1{%
+ \parfillskip=0pt%
+ \spaceskip=0.2em plus 1fill%
+ \hskip 3em%
+ #1%
+ }
+
+ \def\lastpage#1{%
+ \parfillskip=3em%
+ \spaceskip=0.2em plus 1fill%
+ #1%
+ }
+
+ \renewcommand{\arraystretch}{1}
+ \renewcommand{\doublerulesep}{0.5em}
+ \begin{tabularx}{\linewidth}{|X|@{\hskip\doublerulesep}|X|}
+ \multicolumn1c{\bfseries Widow} &
+ \multicolumn1c{\bfseries Orphan}
+ \\ \hhline{-||-}
+ \firstpage{A widow occurs when the last line of a paragraph is
+ placed on a page separate from}
+ & \vskip2.25\baselineskip\relax\firstpage{An orphan is}
+ \\ \hhline{-||-}
+ \lastpage{where it begins.}
+ & \lastpage{when the first line of a paragraph occurs on the
+ page before all of the other lines.} \\ \hhline{-||-}
+ \end{tabularx}
+ \caption{The difference between \waos/. If we imagine that each box is a
+ different page, then this roughly simulates how \waos/ appear.}
+ \label{tab:widow}
+ \end{figure}
+
+ \subsection{Broken hyphens}
+
+ \q{Broken} hyphens occur whenever a page break occurs in a
+ hyphenated word. These are not related to \waos/; however,
+ breaking a word across two pages is at least as disruptive for the reader
+ as \waos/. \TeX{} identifies broken hyphens in the same ways as \waos/, so
+ \lwc/ treats broken hyphens in the same way.
+
+ \section{History and etymology}
+
+ The concept of \waos/ is nearly as old as printing itself. In \cite{old},
+ a printers manual from 1683, we have:
+ \begin{quote}
+ Nor do good \emph{Compo\longs/iters} account it good Workman\longs/hip
+ to begin a \emph{Page} with a \emph{Break-line}, unle\longs/s it be a
+ very \longs/hort \emph{Break}, and cannot be gotten in the foregoing
+ \emph{Page}\,; but if it be a long \emph{Break}, he will let it be the
+ \emph{Direction-line} of the fore-going \emph{Page}, and \emph{Set} his
+ \emph{Direction} at the end of it. \endofline{(p.~226)}
+ \end{quote}
+
+ \subsection{Widows}
+
+ However, the terms \q{widow} and \q{orphan} are much newer. The earliest
+ published source that I could find referencing \q{widows} in typography is
+ \textsl{Webster's New International Dictionary} from~1934. However, no
+ one \Dash not even the editors of the dictionary~\cite{widowhistory} \Dash
+ seems to know how it got there. Even then, the definition is somewhat
+ different than it is now:
+ \begin{quote}
+ widow, n.\ c.\ \emph{Print}\@. A short line or single word carried over from
+ the foot of one column or page to the head of a succeeding column or
+ page. \endofline{\cite{widowhistory}}
+ \end{quote}
+ Contrast this with the modern definition:
+ \begin{quote}
+ \emph{Typography}\@. A short line of text (usually one consisting of one
+ word or part of a word) which falls undesirably at the end of a
+ paragraph, esp.\ one set at the top of a page or column.
+ \endofline{\cite{oed-widow}}
+ \end{quote}
+ which includes a single lone line of any length.
+
+ \subsection{Orphans}
+
+ The term \q{orphan} is even more confusing. Its initial usage seems to have
+ occurred some time after \q{widow}~\cite{widowhistory}, and it is given many
+ contradictory definitions. Most sources define an orphan as a first line at
+ the bottom of the page and a widow as the last line at the
+ top~\cite{elements, widowhistory, widowhistory2, xIsambert:TB31-1-12,
+ texbook, widows-and-orphans, oed-line, oed-widow}; however, some sources
+ define these two terms as \emph{exact opposites} of each other, with a widow
+ as a first line at the bottom of the page and an orphan as the last
+ line!~\cite{backwards1, widowhistory, backwards3, oed-line,
+ backwards2}\tubsentencespace
+ This usage is plain wrong; nevertheless, it is sufficiently common that you
+ need to be careful when you see the terms \q{widow} and \q{orphan}.
+
+ \subsection{Clubs}
+
+ \textsl{The \TeX{}book} never refers to \q{orphans} as such; rather, it
+ refers to them as \q{clubs}. This term is remarkably rare: I could only find
+ a \emph{single} source published before \textsl{The \TeX{}book} \Dash a
+ compilation article about the definition of \q{widow} \Dash that mentions
+ a \q{club line}:
+ \begin{quote}
+ The Dictionary staff informs me that they have no example of the use of
+ the word widow in the typographical sense.~[\dots]
+
+ Mr. Watson of the technical staff says that the Edinburgh printing
+ houses referred to it as a ``clubline''.
+ \endofline{\cite[p.~4]{widowhistory}}
+ \end{quote}\medskip
+ \begin{quote}
+ To my knowledge, a `widow', or `widow-line,' is a short line, forming
+ the end of a paragraph, which is carried over from the foot of a page or
+ column to the top of the succeeding one.~[\dots]
+
+ To my personal knowledge, in typographical parlance in Edinburgh,
+ Scotland, the `widow' is called a `club-line.'
+ \endofline{\cite[p.~23]{widowhistory}}
+ \end{quote}
+
+ Both quotes above are from separate authors, and they each define a \q{club}
+ like we define \q{widow}, not an \q{orphan}. In addition, they both mention
+ that the term is only used in Scotland. Even the extensive
+ \acro{OED}\Dash which lists 17~full definitions and
+ 103~subdefinitions for the noun \q{club}\Dash doesn't recognize the
+ phrase.~\cite{oed-club}
+
+ I spent a few hours searching through Google Books and my university library
+ catalogue, but I could not find a single additional source. If anyone has
+ any more information on the definition of a \q{club line} or why Knuth chose
+ to use this archaic Scottish term in \TeX{}, please let me know!
+
+ \section{Pagination in \TeX}
+
+ Let's move on to looking at how \TeX{} treats these \waos/.
+
+ \subsection{Algorithm}
+
+ It is tricky to understand how \lwc/ works if you aren't familiar with how
+ \TeX{} breaks pages and columns. For a full description, you should
+ consult Chapter~15 of \textit{\TB}~\cite{texbook} (\q{How \TeX{} Makes Lines
+ into Pages}); however, this goes into much more detail than most users
+ require, so here is a \emph{very} simplified summary of \TeX{}'s page
+ breaking algorithm:
+
+ \TeX{} fills the page with lines and other objects until the next object
+ will no longer fit. Once no more objects will fit, \TeX{} will align the
+ bottom of the last line with the bottom of the page by stretching any
+ available vertical spaces if (in \LaTeX) \cs{flushbottom} is set;
+ otherwise, it will
+ break the page and leave the bottom empty.
+
+ However, some objects have penalties attached. Penalties encourage or
+ discourage page breaks from occurring at specific places. For example,
+ \LaTeX{} sets a negative penalty before section headings to encourage a
+ page break there; conversely, it sets a positive penalty after section
+ headings to discourage breaking.
+
+ To reduce \waos/, \TeX{} sets weakly\hyph positive penalties between the
+ first and second lines of a paragraph to prevent orphans, and between the
+ penultimate and final lines to prevent widows.
+
+ One important note: once \TeX{} begins breaking a page, it never goes
+ back to modify any content on the page. Page breaking is a localized
+ algorithm, without any backtracking.
+
+ \subsection{Behaviour}
+
+ Merely describing the algorithm doesn't allow us to intuitively
+ understand how
+ \TeX{} deals with \waos/.
+
+ Due to the penalties attached to \waos/, \TeX{} tries to avoid
+ them. Widows and orphans with small penalties attached \Dash like
+ \LaTeX's default values of 150 \Dash are only lightly coupled to the rest
+ of the paragraph, while \waos/ with large penalties \Dash values of
+ 10\,000 or more \Dash are treated as infinitely bad and are thus
+ unbreakable. Intermediate values behave just as you would expect,
+ discouraging page breaks proportional to their value.
+
+ When \TeX{} goes to break a page, it tries to avoid breaking at a
+ location with a high penalty. How it does so depends on a few settings:
+
+ \subsubsection{\cs{flushbottom} and \cs{normalbottom}}
+
+ With the settings \cs{normalbottom} (Plain \TeX{}) or
+ \cs{flushbottom} (\LaTeX{}), \TeX{} is willing to stretch any glue on the
+ page by an amount roughly commensurate to the magnitude of the
+ penalty: for small \cs{clubpenalty} and \cs{widowpenalty} values, \TeX{} will
+ only slightly stretch the glue on the page before creating a \woo/;
+ for very large penalties, \TeX{} will stretch the glue by a
+ near-infinite amount.
+
+ This corresponds to the \q{Stretch} column in
+ Figure~\ref{fig:demo}. It is
+ the default behaviour of Plain~\TeX{}, and of the standard \LaTeX{} classes
+ when the \verb|twocolumn| option is given.
+
+ \subsubsection{\cs{raggedbottom}}
+
+ When \cs{raggedbottom} is set, \TeX{} won't stretch any glue. Instead,
+ for sufficiently-high \cs{clubpenalty} and \cs{widowpenalty} values, \TeX{} will
+ shorten the page or column by one~line in order to prevent the \woo/ from
+ being created.
+
+ This corresponds to the \q{Shorten} column in Figure~\ref{fig:demo} and is
+ the default behaviour of the \LaTeX{} classes when the
+ \verb|twocolumn| option is not given.
+
+ \section{\lsness/}\label{sec:looseness}
+ Before we can continue further, we need to discuss one more \TeX{}
+ command: \lsness/. The following is excerpted from Chapter~14 of
+ \cite{texbook} (\q{How \TeX{} Breaks Paragraphs into Lines}):
+
+ \begin{quote}\parskip=0pt
+ If you set \lsness/\verb|=1|, \TeX{} will try to make the current
+ paragraph one line longer than its optimum length, provided that
+ there is a way to choose such breakpoints without exceeding the
+ tolerance you have specified for the badnesses of individual lines.
+ Similarly, if you set \lsness/\verb|=2|, \TeX{} will try to make the
+ paragraph two lines longer; and \lsness/\verb|=-1| causes an attempt
+ to make it shorter.~[\dots]
+
+ For example, you can set \lsness/\verb|=1| if you want to avoid a
+ lonely \q{club line} or \q{widow line} on some page that does not
+ have sufficiently flexible glue, or if you want the total number of
+ lines in some two-column document to come out to be an even number.
+
+ It's usually best to choose a paragraph that is already pretty
+ \q{full}, i.e., one whose last line doesn't have much white space,
+ since such paragraphs can generally be loosened without much harm.
+ You might also want to insert a tie between the last two words of
+ that paragraph, so that the loosened version will not end with only
+ one \q{widow word} on the orphans line; this tie will cover your
+ tracks, so that people will find it hard to detect the fact that you
+ have tampered with the spacing. On the other hand, \TeX{} can take
+ almost any sufficiently long paragraph and stretch it a bit, without
+ substantial harm.
+ \end{quote}
+
+ The \wao/ removal strategy suggested in the second paragraph works quite
+ well; however, it requires manual editing each and every time a page
+ or paragraph is rewritten or repositioned.
+
+ \begin{figure*}[p]
+ % Note: this figure may appear incorrect on some systems.
+ \divide\abovecaptionskip by 2
+ \includegraphics{\jobname-figure}
+ \caption{A visual comparison of various automated widow-handling
+ techniques.
+ }\label{fig:demo}
+ \end{figure*}
+
+ \section{Alternate removal strategies}
+
+ \looseness=1 There have been a few previous attempts to improve upon \TeX's
+ previously-discussed \wao/-handling abilities; however, none of these
+ have been able to automatically remove \waos/ without stretching any glue
+ or shortening any pages.
+
+ The articles \q{Strategies against
+ widows} by Paul Isambert~\cite{xIsambert:TB31-1-12} and
+ \q{Managing forlorn paragraph lines} by Frank
+ Mittelbach~\cite{Mittelbach:2018:MFP} both
+ begin with comprehensive discussions of the methods of preventing \waos/.
+ They agree that \waos/ are bad and ought to be avoided; however, they
+ differ in their solutions. \textsl{Strategies}~proposes an output routine
+ that reduces the length of facing pages by one line when necessary to
+ remove \waos/, while \textsl{Managing}~proposes that the author manually
+ rewrites or adjusts \lsness/ when needed.
+
+ \looseness=1 The post \q{Paragraph callback \dots} by
+ jeremie~\cite{widow-assist} contains a file
+ \verb|widow-assist.lua| that
+ automatically detects which paragraphs can be safely shortened or
+ lengthened by one line. Mittelbach's \textsf{widows-and-orphans}
+ package~\cite{widows-and-orphans} alerts the author to
+ the pages that contain widows or orphans. Combined, these packages make
+ it simple for the author to quickly remove \waos/ by adjusting the
+ values of \lsness/; however, it still requires the author to make manual
+ source changes after each revision.
+
+ Another article by Mittelbach~\cite{global} suggests an fully-automated
+ solution to remove \waos/. This would seem to offer a complete solution;
+ however, it requires multiple passes, an external tool, and has not yet been
+ publicly released.
+
+ \pagebreak
+
+ \Lwc/ is essentially a combination of
+ \verb|widow-assist.lua|~\cite{widow-assist} and
+ \textsf{widows-and-orphans}~\cite{widows-and-orphans} (although its
+ implementation is independent of both): when the \openalty/
+ value indicates
+ that a \woo/ has occurred, Lua is used to find a stretchable paragraph. What
+ \lwc/ mainly adds on top of these packages is automation: it eliminates the
+ requirement for any manual adjustments or changes to your document's
+ source.
+
+ \section{Visual comparison}
+
+ Although \TeX{}'s page breaking algorithm is reasonably
+ straightforward, it can lead to
+ complex behaviour when \waos/ are involved. The usual
+ choices, when rewriting is not possible, are to ignore them,
+ stretch some glue, or shorten the
+ page. Figure~\ref{fig:demo} has a visual comparison of these
+ options, which we'll discuss in the following:
+
+ \subsection{\q{Ignore}}
+
+ As you can see, the last line of the page is on a separate page from the
+ rest of its paragraph, creating a widow. This is usually highly
+ distracting for the reader, so it is best avoided for the reasons previously
+ discussed.
+
+ \subsection{\q{Shorten}}
+
+ This page did not leave any widows, but it did shorten the previous page
+ by one line. Sometimes this is acceptable, but usually it looks bad because
+ pages will then have different text-block heights. This can make the pages
+ look quite uneven, especially when typesetting with columns or in a book
+ with facing pages.
+
+ \subsection{\q{Stretch}}
+
+ This page also has no widows and it has a flush bottom margin. However,
+ the space between each pair of paragraphs had to be stretched.
+
+ If this page had many equations, headings, and other elements with
+ natural space between them, the stretched out space would be much less
+ noticeable. \TeX{} was designed for mathematical typesetting, so it makes
+ sense that this is its default behaviour. However, in a page with mostly
+ text, these paragraph gaps look unsightly.
+
+ Also, this method is incompatible with grid typesetting, where
+ all glue stretching must be quantised to the height of a line.
+
+ \subsection{\q{\lwc/}}
+
+ \Lwc/ has none of these issues: it eliminates the widows in a document
+ while keeping a flush bottom margin and constant paragraph spacing.
+
+ To do so, \lwc/ lengthened the second paragraph by one line. If you look
+ closely, you can see that this stretched the interword spaces. This
+ stretching is noticeable when typesetting in a narrow text block, but
+ is mostly imperceptible with larger widths.
+
+ \Lwc/ automatically finds the \q{best} paragraph to stretch, so the
+ increase in interword spaces should almost always be minimal.
+
+ \section{Installation and standard usage}
+
+ The \lwc/ package was first released in
+ October~2021. It is available in the default installations of both
+ MiK\TeX{} and \TeX{}~Live, although you will need recent versions
+ of either.
+
+ You may also download \lwc/ manually from either
+ \inlineurl[ctan.org/pkg/lua-widow-control]{\acro{CTAN},}
+ the \inlineurl%
+ [modules.contextgarden.net/cgi-bin/module.cgi/action=view/id=127]%
+ {\ConTeXt{} Garden,} or \inlineurl%
+ [github.com/gucci-on-fleek/lua-widow-control/releases/latest/]%
+ {GitHub,} although it is best if you can install it through your
+ \TeX~distribution.
+
+ As its name may suggest, \lwc/ \textit{requires} \LuaTeX{}\footnote{Or
+ \LuaMetaTeX{} in the case of \ConTeXt{}.} regardless of the format used.
+ With that in mind, using \lwc/ is quite simple:
+
+ \begin{tabularx}{\linewidth}{@{}l@{}>{\raggedleft\arraybackslash}X@{}}
+ Plain \TeX{} &
+ \cs{input lua-widow-control}\phantom{\tt]} \\
+ \OpTeX {} &
+ \cs{load[lua-widow-control]} \\
+ \LaTeX{} &
+ \latexuse/ \\
+ \ConTeXt{} &
+ \cs{usemodule[lua-widow-control]} \\
+ \end{tabularx}
+
+ And that's usually enough. Most users won't need to do anything else since
+ \lwc/ comes preconfigured and ready-to-go.
+
+ \section{Options}
+
+ Nevertheless, \lwc/ does have a few options.
+
+ \Lwc/ tries very hard to have a \q{natural} user interface with each
+ format, so how you set an option heavily depends on how you are running
+ \lwc/. Also note that not every option is available in every format.
+
+ Some general guidelines:
+ \begin{description}
+ \item[\rm \plainop/\ ] Some options are set
+ by modifying a register, while others must be set manually using
+ \cs{directlua}.
+
+ \item[\rm \LaTeX{}\ ] Options can be set either as package options
+ or at any point in the document with \cs{lwcsetup}.
+
+ \item[\rm \ConTeXt{}\ ] Always use \cs{setuplwc}.
+ \end{description}
+
+ \subsection{Disabling}
+
+ You may want to disable \lwc/ for certain portions of your
+ document. You can do so with the following commands:
+
+ \begin{tabularx}{\linewidth}{@{}Xl@{}}
+ \plainop/ &
+ \cs{lwcdisable} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{disable\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[state=stop]}\hphantom{\texttt{a}} \\
+ \end{tabularx}
+
+ This prevents \lwc/ from stretching any paragraphs that follow. If a page
+ has earlier paragraphs where \lwc/ was still enabled and a \woo/ is
+ detected, \lwc/ will still attempt to remove the \woo/.
+
+ \subsection{Enabling}
+
+ \Lwc/ is enabled as soon as the package is loaded. If you
+ have previously disabled it, you will need to re-enable it to save new paragraphs.
+
+ \begin{tabularx}{\linewidth}{@{}Xl@{}}
+ \plainop/ &
+ \cs{lwcenable} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{enable\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[state=start]} \\
+ \end{tabularx}
+
+ \subsection{Automatically disabling}
+
+ You may want to disable \lwc/ for certain commands where
+ stretching is undesirable such as section headings. Of course, manually
+ disabling and
+ then enabling \lwc/ multiple times
+ throughout a document would quickly become tedious, so \lwc/ provides
+ some options to do this automatically for you.
+
+ \Lwc/ automatically patches the default \LaTeX{}, \ConTeXt{},
+ Plain~\TeX{}, \OpTeX{}, \textsf{\mbox{memoir}}, \KOMAScript, and
+ \textsf{titlesec} section commands, so you don't need to patch these.
+ Any others, though, you'll need to patch yourself.
+
+ \begin{tabularx}{\linewidth}{@{}Xl@{}}
+ \leavevmode\rlap{\plainop/} & \texttt{ }%
+ \cs{lwcdisablecmd\{\meta{\ttbs macro}\}} \\
+ \LaTeX{} & \texttt{ }%
+ \cs{lwcsetup\{disablecmds=\{} \\
+ & \hfill\texttt{\meta{csnameone},
+ \meta{csnametwo}\}\}} \\
+ \ConTeXt{} &
+ \cs{prependtoks\textbackslash{}lwc@patch@pre} \\
+ & \hfill\cs{to\textbackslash{}everybefore\meta{hook}} \\
+ & \cs{prependtoks\textbackslash{}lwc@patch@post} \\
+ & \hfill\cs{to\textbackslash{}everyafter\meta{hook}} \\
+ \end{tabularx}
+
+ \subsection{\estretch/}
+
+ \Lwc/ defaults to an \estretch/ value of 3~em for stretched paragraphs,
+ but you can configure this.
+
+ \Lwc/ will only use the \estretch/ when it cannot lengthen a paragraph
+ in any other way, so it is fairly safe to set this to a large value.
+ \TeX{} accumulates badness when \estretch/ is
+ used~\cite{Knuth:TB10-3-325}, so it's pretty rare that a paragraph that
+ requires any \estretch/ will actually be used on the page.
+
+ \begin{tabularx}{\linewidth}{@{}Xl@{}}
+ \leavevmode\rlap{\plainop/} &
+ \hskip2em\cs{lwcemergencystretch=} \\
+ & \hfill\texttt{\meta{dimension}} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{emergencystretch=\hphantom{\}}}\\
+ & \hfill\texttt{\meta{dimension}\}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[emergencystretch=\hphantom{]}} \\
+ & \hfill\texttt{\meta{dimension}]} \\
+ \end{tabularx}
+
+ \subsection{Penalties}
+
+ You can also manually adjust the penalties that \TeX{} assigns to \waos/.
+ Usually, the defaults are fine, but there are a few circumstances where you
+ may want to change them.
+
+ \begin{tabular}{@{}p{.175\linewidth}@{}r@{\texttt{=\meta{integer}}}l@{}}
+ \leavevmode\rlap{\plainop/} &
+ \hskip6em\cs{widowpenalty} \\
+ & \hskip6em\cs{clubpenalty} \\
+ & \hskip6em\cs{brokenpenalty} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{ widowpenalty} & \texttt{\}} \\
+ & \cs{lwcsetup\{orphanpenalty} & \texttt{\}} \\
+ & \cs{lwcsetup\{brokenpenalty} & \texttt{\}} \\
+ \leavevmode\hbox{\ConTeXt{}} &
+ \cs{setuplwc[ widowpenalty} & \texttt{]} \\
+ & \cs{setuplwc[orphanpenalty} & \texttt{]} \\
+ & \cs{setuplwc[brokenpenalty} & \texttt{]} \\
+ \end{tabular}
+
+ The value of these penalties determines how much \TeX{} should attempt
+ to stretch glue before passing the \woo/ to \lwc/. If you set the values to~1
+ (default), \TeX{} will stretch nothing and immediately trigger \lwc/;
+ if you set the values to 10\,000, \TeX{} will stretch infinitely and
+ \lwc/ will never be triggered. If you set the value to some intermediate
+ number, \TeX{} will first attempt to stretch some glue to remove the \woo/;
+ only if it fails will \lwc/ come in and lengthen a paragraph. As a special
+ case, if you set the values to~0, both \TeX{} and \lwc/ will completely
+ ignore the \woo/.
+
+ \subsection{\cs{nobreak} behaviour}
+
+ When \lwc/ encounters an orphan, it removes it by moving the orphaned
+ line to the next page. The majority of the time, this is an appropriate
+ solution. However, if the orphan is immediately preceded by a section
+ heading (or \cs{nobreak}\slash\cs{penalty 10000}), \lwc/ would na\"ively separate a section heading from
+ the paragraph that follows. This is almost always undesirable, so \lwc/
+ provides some options to configure this.
+
+ \begin{tabularx}{\linewidth}{@{}Xr@{}}
+ \leavevmode\rlap{\plainop/} &
+ \cs{directlua\{lwc.}\hskip4em\null \\
+ & \hfill\texttt{nobreak\_behaviour="\meta{value}"\}} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{nobreak=\meta{value}\}\hphantom{"}} \\
+ \ConTeXt{} &
+ \cs{setuplwc[nobreak=\meta{value}]\hphantom{"}} \\
+ \end{tabularx}
+
+ The default value, \texttt{keep}, \emph{keep}s the section heading with
+ the orphan by moving both to the next page. The advantage to this option
+ is that it removes the orphan and retains any \cs{nobreak}s; the
+ disadvantage is that moving the section heading can create a large blank
+ space at the end of the page.
+
+ The value \texttt{split} \emph{split}s up the section heading and the
+ orphan by moving the orphan to the next page while leaving the heading
+ behind. This is usually a bad idea, but exists for the sake of
+ flexibility.
+
+ The value \texttt{warn} causes \lwc/ to give up on the page and do nothing,
+ leaving an orphaned line. \Lwc/ \emph{warn}s the user so that they can
+ manually remove the orphan.
+
+ See figure~\ref{tab:nobreak} for a visual reference.
+
+ \begin{figure}
+ \renewcommand{\arraystretch}{1}
+ \renewcommand{\doublerulesep}{0.5em}
+ \begin{tabularx}{\linewidth}{%
+ |X|@{\hskip\doublerulesep}|X|@{\hskip\doublerulesep}|X|%
+ }
+ \multicolumn1c{\ttfamily keep} &
+ \multicolumn1c{\ttfamily split} &
+ \multicolumn1c{\ttfamily warn}
+ \\ \hhline{-||-||-}
+ &
+ &
+ \textbf{Heading} \\
+ &
+ \textbf{Heading} &
+ The\hfill first\hfill line
+ \\ \hhline{-||-||-}
+ \textbf{Heading} &
+ The\hfill first\hfill line &
+ text\hfill text\hfill text \\
+ The\hfill first\hfill line &
+ text\hfill text\hfill text &
+ last line. \\
+ text\hfill text\hfill text &
+ last line. &
+ % Nothing
+ \\ \hhline{-||-||-}
+ \end{tabularx}
+ \caption{A visual comparison of the \texttt{nobreak} option values.}
+ \label{tab:nobreak}
+ \end{figure}
+
+ \subsection{Maximum cost}
+
+ \Lwc/ ranks each paragraph on the page by how much it would \q{cost} to
+ lengthen that paragraph. By default, \lwc/ selects the paragraph on
+ the page with the lowest cost; however, you can configure it to only
+ select paragraphs below a selected cost.
+
+ If there aren't any paragraphs below the set threshold, then \lwc/ won't
+ remove the \woo/ and will instead issue a warning.
+
+ \begin{tabularx}{\linewidth}{@{}Xr@{\texttt{=\meta{integer}}}l@{}}
+ \leavevmode\rlap{\plainop/} &
+ \cs{lwcmaxcost} \\
+ \LaTeX{} &
+ \cs{lwcsetup\{max-cost} & \texttt{\}} \\
+ \leavevmode\hbox{\ConTeXt{}} &
+ \cs{setuplwc[maxcost} & \texttt{]} \\
+ \end{tabularx}
+
+ Based on my testing, \texttt{max-cost} values less than 1\,000
+ cause completely imperceptible changes in interword spacing; values less
+ than 5\,000 are only noticeable if you are specifically trying to pick out the
+ expanded paragraph on the page; values less than 15\,000 are typically
+ acceptable; and larger values may become distracting. \Lwc/ defaults to an
+ infinite \texttt{max-cost}, although the \q{strict} and \q{balanced} modes
+ sets the values to~5\,000 and 10\,000 respectively.
+
+ \section{Presets}
+
+ As you can see, \lwc/ provides quite a few options. Luckily, there are a few
+ presets that you can use to set multiple options at once. These presets are
+ a good starting point for most documents, and you can always manually
+ override individual options.
+
+ Currently, these presets are \LaTeX{}-only.
+
+ \begin{tabular}{@{}rl@{}}
+ \LaTeX{} &
+ \cs{lwcsetup\{\meta{preset}\}} \\
+ \end{tabular}
+
+ \subsection{\texttt{default}}
+
+ If you use \lwc/ without any options, it defaults to this preset. In default
+ mode, \lwc/ takes all possible measures to remove \waos/ and will not
+ attempt to stretch any vertical glue. This usually
+ removes~$\mathord{>}\,95\%$ of all
+ possible \waos/. The catch here is that this mode is quite aggressive, so
+ it often leaves behind some fairly \q{spacey} paragraphs.
+
+ This mode is good if you want to remove (nearly) all \waos/ from your
+ document, without fine-tuning the results.
+
+ \subsection{\texttt{strict}}
+
+ \Lwc/ also offers a strict mode. This greatly restricts \lwc/'s tolerance
+ and makes it so that it will only lengthen paragraphs where the change will
+ be imperceptible.
+
+ The caveat with strict mode is that\Dash depending on the document\Dash
+ \lwc/ will be able to remove less than a third of the \waos/.
+ For the \waos/ that can't be automatically removed, a warning will be
+ printed to your terminal and log file so that a human can manually fix the
+ situation.
+
+ This mode is good if you want the best possible typesetting and are willing
+ to do some manual editing.
+
+ \subsection{\texttt{balanced}}
+
+ Balanced mode sits somewhere between default mode and strict mode. This mode
+ first lets \TeX{} stretch a little glue to remove the \woo/; only if that
+ fails will it then trigger \lwc/. Even then, the maximum paragraph cost is
+ capped. Here, \lwc/ can usually remove 90\% of a document's
+ potential \waos/, and it does so while making a minimal visual impact.
+
+ This mode is recommended for most users who care about their document's
+ typography. This mode is not the default since it doesn't remove all
+ \waos/: it
+ still requires a little manual intervention.
+
+ \begin{table}
+ \caption{\Lwc/ options set by each mode.}\label{tab:modes}
+ \ttfamily\setlength{\tabcolsep}{4pt}
+ \begin{tabular}{l*3r}\toprule
+ \textrm{Option} & default & balanced & strict \\ \midrule
+ max-cost & $\infty$ & 10000 & 5000 \\
+ \rlap{emergencystretch} & 3em & 1em & 0pt \\
+ nobreak & keep & keep & warn \\
+ widowpenalty & 1 & 500 & 1 \\
+ orphanpenalty & 1 & 500 & 1 \\
+ brokenpenalty & 1 & 500 & 1 \\
+ \bottomrule\end{tabular}
+ \end{table}
+
+ \section{Compatibility}
+
+ The \lwc/ implementation is almost entirely in Lua, with only a minimal
+ \TeX{} footprint. It
+ doesn't modify the output routine, inserts\slash floats, \cs{everypar}, and
+ it doesn't insert any whatsits. This means that it should be compatible with
+ nearly any \TeX{} package, class, and format. Most changes that \lwc/ makes
+ are not observable on the \TeX{} side.
+
+ However, on the Lua side, \lwc/ modifies much of a page's internal
+ structure.
+ This should not affect any \TeX{} code; however, it may surprise
+ Lua code that modifies or depends on the page's low-level structure. This
+ does not matter for Plain~\TeX{} or \LaTeX{}, where even most Lua-based
+ packages don't depend on the node list structure; nevertheless, there are
+ a few issues with \ConTeXt{}.
+
+ Simple \ConTeXt{} documents tend to be fine, but many advanced
+ \ConTeXt{} features rely heavily on Lua and can thus be disturbed by
+ \lwc/. This is not a huge issue\Dash the \lwc/ manual is
+ written in \ConTeXt{}\Dash but \lwc/ is inevitably more reliable
+ with Plain \TeX{} and \LaTeX{} than with \ConTeXt{}.
+
+ Finally, keep in mind that adding \lwc/ to a document will almost certainly
+ change its page break locations.
+
+ \subsection{Formats}
+
+ \Lwc/ runs on all known \LuaTeX{}-based formats: Plain~\LuaTeX{},
+ \LuaLaTeX{}, \CMkIV{}, \ConTeXt{} Mk\acro{XL}\slash\acro{LMTX},
+ and~\OpTeX{}. Unless otherwise documented, all features should work
+ equally well in all formats.
+
+ \subsection{Columns}
+
+ Since \TeX{} and the formats implement column breaking and page
+ breaking through the
+ same internal mechanisms, \lwc/ removes \waos/ between columns just
+ as it does with \waos/ between pages.
+
+ \Lwc/ is known to work with the \LaTeX{} class option \verb|twocolumn|
+ and the two-column output routine from Chapter~23 of \cite{texbook}.
+
+ \subsection{Performance}
+
+ \Lwc/ runs entirely in a single pass, without depending on any
+ \verb|.aux| files or the like. Thus, it shouldn't meaningfully
+ increase compile times. Although \lwc/ internally breaks each paragraph
+ twice, modern computers break paragraphs near-instantaneously, so you
+ are not likely to notice any slowdown.
+
+ \subsection{\eTeX{} penalties}
+
+ Knuth's original \TeX{} has three basic line penalties:
+ \cs{interlinepenalty}, which
+ is inserted between all lines; \cs{club\-penalty}, which is inserted after
+ the first line; and \cs{widow\-penalty}, which is inserted before the last
+ line. The \eTeX{} extensions~\cite{etex} generalize these commands with a
+ syntax similar to \cs{parshape}: with \cs{widow\-penalties} you can set the
+ penalty between the last, second last, and $n$th last lines of a paragraph;
+ \cs{inter\-line\-penalties} and \cs{club\-penalties} behave similarly.
+
+ \Lwc/ makes no explicit attempts to support these new -\texttt{penalties}
+ commands. Specifically, if you give a line a penalty that matches either
+ \cs{widowpenalty} or \cs{clubpenalty}, \lwc/ will treat the lines
+ exactly as it would a \woo/. So while these commands won't break \lwc/, they
+ are likely to lead to some unexpected behaviour.
+
+ \section{Short last lines}
+
+ \looseness=1
+ When lengthening a paragraph with \lsness/, it is common advice to insert
+ ties (\verb|~|) between the last few words of the paragraph to avoid
+ overly-short last lines \cite{texbook}. \Lwc/ does this automatically,
+ but instead of using ties or \cs{hbox}es, it uses the
+ \cs{par\allowbreak fill\allowbreak skip}
+ parameter~\cite{texbook, Wermuth:2018:ECP}. When lengthening a paragraph
+ (and only when lengthening a paragraph\Dash remember, \lwc/ doesn't
+ interfere with \TeX{}'s output unless it detects a \woo/), \lwc/ sets
+ \cs{parfillskip} to \verb|0pt plus 0.8\hsize|.
+ This normally makes the last line of a paragraph be at least
+ 20\% of the overall paragraph's width, thus preventing
+ ultra-short~lines.
+
+ \section{How it works}
+
+ \Lwc/ uses a fairly simple algorithm to eliminate \waos/, but there
+ are a few subtleties.
+
+ \subsection{Setup}
+
+ \Lwc/ sets the parameters \cs{clubpenalty}, \cs{widowpenalty}, and
+ \cs{brokenpenalty} to sentinel values of~1. This will signal to \lwc/ when
+ a \woo/ occurs, yet it is small enough that it won't stretch any glue.
+
+ \Lwc/ also enables \LuaTeX{}'s micro\-typographic
+ extensions~\cite{xThanh:2000:MTE}. This isn't strictly necessary;
+ however, it significantly increases the number of paragraphs that can
+ be acceptably \q{loosened}.
+
+ That is all that happens on the \TeX{} end. The rest of \lwc/ is pure Lua.
+
+ \subsection{Paragraph breaking}
+
+ First, \lwc/ hooks into the paragraph breaking process, before any output
+ routines or page breaking.
+
+ Before a paragraph is broken by \TeX{}, \lwc/ grabs the unbroken
+ paragraph. Then \lwc/ breaks the paragraph one line longer than its natural
+ length and stores it for later. It does this in the background,
+ \emph{without} interfering with how \TeX{} breaks paragraphs into their
+ natural length.
+
+ After \TeX{} has broken its paragraph into its natural length, \lwc/
+ appears again. Before the broken paragraph is added to the main
+ vertical list, \lwc/ \q{tags} the first and last nodes of the paragraph
+ using a \LuaTeX{} attribute. These attributes associate the
+ previously-saved lengthened paragraph with the naturally-typeset
+ paragraph on the page.
+
+ \subsection{Page breaking}
+
+ \Lwc/ intercepts \cs{box255} (the \cs{vbox} output by \TeX) immediately
+ before the output routine runs,
+ after all the paragraphs have been typeset.
+
+ First, \lwc/ looks at the \openalty/ of the page or column. If the page
+ was broken at a \woo/, the \openalty/ will be equal to either
+ the \cs{widowpenalty} or the \cs{clubpenalty}. If the \openalty/ does not
+ indicate a \woo/, \lwc/ will stop and return \cs{box255} unmodified to
+ the output~routine, and \TeX{} continues as normal.
+
+ Otherwise, we assume that we have a \woo/ on the page,
+ meaning that we should lengthen the page by 1~line. We iterate through
+ the list of saved paragraphs to find the lengthened paragraph with the
+ least cost. After we've selected a good paragraph, we traverse
+ through the page to find the original version of this paragraph\Dash the
+ one that unmodified \TeX{} originally typeset. Having found the original
+ paragraph, we splice in the lengthened paragraph in place of the original.
+
+ Since the page is now 1~line longer than it was before, we pull the last
+ line off the page to bring it back to its original length, and place
+ that line onto the top of \TeX's \q{recent contributions} list. When
+ the next page begins, this line will be inserted before all other
+ paragraphs, right at the top. Now, we can return the new, widow-free page
+ (updated \cs{box255}) to the output routine, which proceeds
+ as normal.
+
+ \section{Choosing the \q{best} paragraph}
+
+ As we discussed previously, \lwc/ lengthens the paragraph with the lowest
+ cost. However, assigning a cost to each paragraph is not quite as simple as
+ it sounds. Before we look at how \lwc/ assigns costs, let's look at how
+ \TeX{} scores paragraphs when breaking them naturally.
+
+ \subsection{How \TeX{} scores paragraphs}
+
+ All glue in \TeX{} has a certain natural size: the size that it would be
+ in an ideal scenario. However, most glue also has stretch and shrink
+ components so that the glue can change in size to adapt to its
+ surroundings. For each line, \TeX{} individually sums the total
+ stretch/shrink for the line and the stretch/shrink that was actually used.
+ We define the stretch/shrink ratio~$r$ as the quotient of the
+ stretch/shrink used and the stretch/shrink available. Then the badness~$b$
+ of a line is approximately defined as
+ \begin{equation*}
+ b = 100r^3.
+ \end{equation*}
+ This is the badness referenced in the commonly-seen
+ \texttt{Underfull \cs{hbox}
+ (badness 1234)} warnings that \TeX{} produces.
+
+ \TeX{} calculates the badness for each line individually; however, we also
+ need to assess the paragraph as a whole. To do so, \TeX{} defines the
+ demerits for a whole paragraph~$d$ as approximately\footnotemark{} the sum of
+ the squared badnesses for each line. The natural paragraph that \TeX{}
+ breaks is the one that minimizes~$d$.
+
+ \footnotetext{We ignore any additional demerits or penalties that
+ \TeX{} may add.}
+
+ One important thing to realize is that demerits grow incredibly fast:
+ demerits are proportional to the \emph{sixth} power of glue stretch. This
+ means that you can expect to see extremely large demerit values, even for
+ a relatively \q{good} paragraph.
+
+ \subsection{Possible cost functions}
+
+ Now, let's return to how \lwc/ assigns costs to each paragraph. This is
+ surprisingly more complicated than it sounds, so we'll go through a few
+ possible cost functions first.
+
+ Here, we use $c$~for the cost of a paragraph, $d$~for the total demerits,
+ and $l$~for the number of lines (\cs{prevgraf}).
+
+ \subsubsection{The original implementation}
+
+ The original implementation of \lwc/ used the very simple cost function
+ \begin{equation*}
+ c = d.
+ \end{equation*}
+ This cost function works reasonably well, but has one major issue: it doesn't
+ take into account the number of lines in the paragraph. The demerits for a
+ paragraph is the sum of the demerits for each line. This means this cost
+ function will prefer using shorter paragraphs since they tend to have fewer
+ demerits. However, long paragraphs tend to have much more available glue
+ stretch, so this strategy can lead to suboptimal solutions.
+
+ \subsubsection{Scaling by the number of lines}
+
+ Once I realized this issue, I tried correcting it by dividing by the number
+ of lines in the paragraph to get the average demerits instead of the total
+ demerits:
+ \begin{equation*}
+ c = \frac{d}{l}
+ \end{equation*}
+ This works better than the previous function, but still has an issue.
+ If we have a fairly bad ten-line paragraph with total demerits $10d$ and an
+ almost-equally bad two-line paragraph with total demerits $2d + 1$, then by
+ this cost function, the ten-line paragraph will have a lower cost and will
+ be chosen. This means that our page now has ten bad lines instead of two bad
+ lines, which is not ideal.
+
+ \subsubsection{Current implementation}
+
+ Our first cost function, $c=dl^0$, doesn't consider the number of lines at
+ all, while our second cost function, $c=dl^{-1}$, considers the number of
+ lines too much. Splitting the difference between the two functions, we get
+ the current implementation:
+ \begin{equation*}
+ c = \frac{d}{\sqrt{l}}
+ \end{equation*}
+
+ I didn't arrive at this function through any sort of scientific testing;
+ rather, I picked the simplest function that I could think of that satisfies
+ the following two properties:
+ \begin{itemize}
+ \item Given a long paragraph and a short paragraph with different
+ average badnesses per line, prefer the one with the least average
+ badness.
+ \item Given two paragraphs with equal average badnesses per line,
+ prefer the shorter one.
+ \end{itemize}
+
+ \section{Quantitative analysis}
+
+ \begin{figure}
+ \begin{tikzpicture}\begin{axis}[
+ ybar interval,
+ xticklabels={1, ..., 15,
+ {$\,\ge\! 16$}},
+ x tick label style={font=\small},
+ y tick label style={font=\small},
+ enlarge y limits=upper,
+ enlarge x limits={abs=1},
+ grid=none,
+ scaled y ticks=base 10:-3,
+ ytick scale label code/.code={},
+ xlabel={Paragraph length (lines)},
+ ylabel={Count (thousands)}
+ ]
+ \addplot+ [
+ draw=black,
+ fill=black!10,
+ semithick,
+ ] table {
+ Length Count
+ 1 4429
+ 2 3704
+ 3 2045
+ 4 1320
+ 5 894
+ 6 717
+ 7 498
+ 8 406
+ 9 379
+ 10 251
+ 11 175
+ 12 152
+ 13 111
+ 14 95
+ 15 79
+ 16 437
+ 18 0
+ };
+
+ \filldraw [fill=black!25, draw=black] (16, 0) rectangle (18, 437);
+ \end{axis}\end{tikzpicture}
+ \caption{Histogram of natural paragraph lengths in the sample text.}
+ \label{fig:hist}
+ \end{figure}
+
+ Let's look at some statistics for \lwc/. For testing, I
+ downloaded the top~ten books on \textsl{Project Gutenberg},\footnotemark{}
+ converted them to \LaTeX{} using \textsf{pandoc}, concatenated them into a
+ single \textsf{article} file, and compiled twice. This gives us a \acro{PDF}
+ with 1\,381~pages, 15\,692~paragraphs, 61\,865~lines, and 399~\waos/
+ (if they aren't removed).
+ \footnotetext{\textsl{Frankenstein},
+ \textsl{Pride and Prejudice},
+ \textsl{Alice's Adventures in Wonderland},
+ \textsl{The Great Gatsby},
+ \textsl{The Adventures of Sherlock Holmes},
+ \textsl{Simple Sabotage Field Manual},
+ \textsl{A Tale of Two Cities},
+ \textsl{The Picture of Dorian Gray},
+ \textsl{Moby Dick},
+ and \textsl{A Doll's House}.
+ }
+
+ This is a fairly challenging test: almost every third page has a \woo/, over
+ half of the paragraphs have two lines or fewer, and the text block is set to
+ the fairly wide \textsf{article} defaults. An average document is
+ much less challenging for \lwc/, so we can consider this to be a
+ worst-case scenario.
+
+ \subsection{Widows and orphans removed}
+
+ \begin{figure}
+ \begin{tikzpicture}\begin{axis}[
+ ybar=0pt,
+ bar width=0.8,
+ xtick=data,
+ ylabel={Widows and orphans removed},
+ width=\linewidth,
+ height=0.8\linewidth,
+ xticklabels={
+ \shortstack[c]{\hfill Maximum\\\hfill possible},
+ \textsf{lwc} \texttt{default},
+ \texttt{balanced},
+ \LaTeX{},
+ \texttt{strict},
+ },
+ x tick label style={
+ font=\small,
+ rotate=45,
+ anchor=east,
+ },
+ enlarge x limits=0.2,
+ ]
+ \addplot+ [
+ draw=black,
+ fill=black!10,
+ semithick,
+ ] table [x expr=\coordindex, y index=0] {
+ 399
+ 392
+ 348
+ 179
+ 52
+ };
+
+ \filldraw [fill=black!25, draw=black]
+ (-0.4, 0) rectangle (0.4, 399);
+ \end{axis}\end{tikzpicture}
+ \divide\abovecaptionskip by 2
+ \caption{The number of \waos/ removed by each method.}\label{fig:modes}
+ \end{figure}
+
+ When we run \LaTeX{} with its default settings on the file, 179~(47\%) of
+ the \waos/ are removed. When we add \lwc/ with default settings, we remove
+ 392~(98\%). Switching to strict mode, we can only remove 52~(13\%) of the
+ \waos/. In balanced mode, we remove 348~(87\%). See figure~\ref{fig:modes}
+ for a visual comparison.
+
+ \subsection{Paragraph costs}
+
+ \begin{figure}
+ \begin{tikzpicture}\begin{axis}[
+ width=\linewidth,
+ height=0.8\linewidth,
+ xlabel={Percentile},
+ ylabel={Cost},
+ ymode=log,
+ legend entries={Long, Natural},
+ legend pos=north west,
+ cycle list={
+ {black, thick},
+ {black!35, thick},
+ },
+ ]
+ \addplot+ table [x=Percentile, y=Long] {\plotdata};
+ \addplot+ table [x=Percentile, y=Natural] {\plotdata};
+
+ \end{axis}\end{tikzpicture}
+ \divide\abovecaptionskip by 2
+ \caption{Paragraph costs by percentile rank for naturally-broken and
+ one-line lengthened paragraphs.}\label{fig:costs}
+ \end{figure}
+
+ The last section showed us that \lwc/ is quite effective at removing \waos/,
+ so now let's look at the paragraphs that \lwc/ expands. As \TeX{}
+ processes a document, \lwc/ is recording the costs for the naturally-broken
+ and expanded versions of each paragraph in the document. Costs don't
+ mean that much on their own, but a lower cost is always better.
+
+ As you can see in figure~\ref{fig:costs}, the lengthened paragraphs tend to
+ have \emph{much} higher costs than the naturally-broken paragraphs. This
+ is not surprising, since (as we've seen) a paragraph's demerits
+ scale with the sixth
+ power of glue stretch, so even a small amount of glue stretch can cause a
+ huge increase in demerits.
+
+ The empty space on the left of the \q{long} line is from the paragraphs
+ that \lwc/ was unable to lengthen at any cost. \LuaTeX{} assigns these
+ paragraphs zero~demerits, so they disappear on a logarithmic plot.
+
+ \subsection{Lengthening vs.\ shortening paragraphs}
+ \begin{figure}
+ \begin{tikzpicture}\begin{axis}[
+ xbar stacked,
+ height=0.2\linewidth,
+ width=\dimexpr\linewidth-1em,
+ scale only axis,
+ bar width=1,
+ enlargelimits=false,
+ xmin=0,
+ ymin=-0.5,
+ ymax=1,
+ ymajorticks=false,
+ xtick style={draw=none},
+ xlabel={Paragraphs (thousands)},
+ scaled x ticks=base 10:-3,
+ xtick scale label code/.code={},
+ legend style={at={(0.5,1)}, anchor=north},
+ legend columns=5,
+ legend cell align=left,
+ legend style={
+ /tikz/every even column/.append style={column sep=1em},
+ draw=none,
+ fill=none,
+ },
+ legend entries={
+ {$n=1$},
+ {$n$},
+ {$n+1$},
+ {$n\pm1$},
+ {$n-1$}
+ },
+ ]
+ \addplot [fill=black!10 ] coordinates {(4429, 0)}; % One
+ \addplot [fill=white ] coordinates {(4474, 0)}; % None
+ \addplot [pattern=north east lines] coordinates {(5457, 0)}; % Long
+ \addplot [pattern=crosshatch ] coordinates {( 482, 0)}; % Both
+ \addplot [pattern=north west lines] coordinates {( 850, 0)}; % Short
+ \end{axis}\end{tikzpicture}
+ \divide\abovecaptionskip by 2
+ \caption{The number of paragraphs in the test sample that
+ (respectively) have exactly
+ one line, cannot be stretched or shrunk, can be only stretched
+ by one~line, can be either stretched or shrunk, and can be
+ only shrunk.}
+ \label{fig:stretchshrink}
+ \end{figure}
+
+ Figure~\ref{fig:stretchshrink} shows the number of paragraphs that \lwc/
+ could potentially stretch or shrink. The one-line paragraphs are broken out
+ separately since this test sample has an anomalous number of them.
+ Otherwise, we can see that \lwc/ is capable of stretching the majority of
+ paragraphs.
+
+ We can also see that of non-single-line paragraphs, only about 8\%
+ of paragraphs can only be shrunk (the last segment of
+ figure~\ref{fig:stretchshrink}), and this is in a document where 13\%
+ of paragraphs have at least eight~lines. Most documents rarely have
+ such long paragraphs, and it is these long paragraphs that are the
+ easiest to shrink.
+
+ Because of this, \lwc/ doesn't even attempt to shrink paragraphs; it
+ only stretches them.
+
+ \section{Known issues}
+
+ \Lwc/ is quite stable these days, a few issues remain:
+
+ \begin{itemize}
+ \item When a three-line paragraph is at the end of a page forming a
+ widow, \lwc/ will remove the widow; however, it will leave an orphan.
+ This issue is inherent to any process that removes widows through
+ paragraph expansion and is thus unavoidable. Orphans are considered
+ to be better than widows~\cite{elements}, so this is still an
+ improvement.
+
+ \item Sometimes a \woo/ cannot be eliminated because no paragraph has
+ enough stretch. Sometimes this can be remediated by
+ increasing \lwc/'s \estretch/; however, some pages just don't have
+ any suitable paragraph.
+
+ Long paragraphs with short words tend to be stretchier than short
+ paragraphs with long words since these long paragraphs have more
+ interword glue. Narrow columns also stretch more easily than wide columns
+ since you need to expand a paragraph by less to make a new line.
+
+ \item When running under \LuaMetaTeX{} (\ConTeXt{}), the log may
+ contain many lines like \q{\texttt{%
+ \spaceskip=\fontdimen2\font plus1.25pt minus1.25pt
+ luatex warning > tex: left parfill skip is gone}}. These messages
+ are completely harmless (although admittedly quite annoying).
+
+ \item \TeX{} may warn about overfull \cs{vbox}es on pages where
+ \lwc/ removed a \woo/. This happens due to the way that \lwc/
+ corrects for the \cs{prevdepth} when replacing paragraphs. It
+ does not actually produce an overfull \texttt{vbox}, but there
+ is a warning nevertheless. You can set \cs{vfuzz=2.5pt} to
+ hide the
+ warning.
+
+ \item \Lwc/ only attempts to expand paragraphs on a page with
+ a \woo/. A global system like in~\cite{global} would solve this;
+ however, this is both \acro{NP}-complete~\cite{plass} and
+ impossible to solve in a single pass. Very rarely would such a
+ system remove \woos/ that \lwc/ cannot.
+ \end{itemize}
+
+ \section{Conclusion}
+
+ All this probably makes \lwc/ look quite complicated, and this is true to
+ some extent. However, this complexity is hidden from the end~user:
+ as stated at the outset, most
+ users merely need to place \latexuse/ in their \LaTeX{} document
+ preamble, and \lwc/ will remove all the troublesome \waos/, without needing
+ any manual intervention.
+
+ Should you have any issues, questions, or suggestions for \lwc/, please
+ visit the project's GitHub page:
+ \href{https://github.com/gucci-on-fleek/lua-widow-control}
+ {\ttfamily github.com/gucci-on-fleek/lua-widow-control}.
+ Any feedback is greatly appreciated!
+
+ \bibliographystyle{tugboat}
+ \AddToHook{env/thebibliography/begin}{%
+ \let\eTeX=\goodeTeX%
+ \let\tubeTeX=\goodeTeX%
+ }
+ \let\macro=\cs
+\SetBibJustification{\raggedright \advance\itemsep by 1pt plus1pt minus1pt
+\def\url{\tbsurl}
+}
+\smallskip
+ \bibliography{\jobname.bib, tugboat.bib}
+
+ \makesignature
+\end{document}
diff --git a/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkiv b/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkiv
new file mode 100644
index 0000000000..5f277c2b14
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkiv
@@ -0,0 +1 @@
+\input t-lua-widow-control.mkxl
diff --git a/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl b/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
new file mode 100644
index 0000000000..b4d35eb15f
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
@@ -0,0 +1,171 @@
+%D \module
+%D [ file=t-lua-widow-control,
+%D version=3.0.0, %%version
+%D title=lua-widow-control,
+%D subtitle=\ConTeXt module for lua-widow-control,
+%D author=Max Chernoff,
+%D date=2022-11-22, %%dashdate
+%D copyright=Max Chernoff,
+%D license=MPL-2.0+,
+%D url=https://github.com/gucci-on-fleek/lua-widow-control]
+\startmodule[lua-widow-control]
+\unprotect
+
+% Preliminaries
+\installnamespace{lwc}
+
+\installswitchcommandhandler \????lwc {lwc} \????lwc
+
+% Set up the options
+\newdimen\lwc_emergency_stretch
+\newdimen\lwc_draft_offset
+\newcount\lwc_max_cost
+
+\starttexdefinition lwc_set_parameters
+ \lwc_emergency_stretch=\lwcparameter{emergencystretch}
+ \lwc_draft_offset=\lwcparameter{draftoffset}
+
+ \doifelse{\lwcparameter{\c!state}}\v!start{
+ \lwc_enable
+ }{
+ \lwc_disable
+ }
+
+ \lwc_debug{\lwcparameter{debug}}
+
+ \doif{\lwcparameter{draft}}\v!start{
+ \setlwcparameter{showcosts}{\v!start}
+ \setlwcparameter{showcolours}{\v!start}
+ }
+
+ \doif{\lwcparameter{draft}}\v!stop{
+ \setlwcparameter{showcosts}{\v!stop}
+ \setlwcparameter{showcolours}{\v!stop}
+ }
+
+ \lwc_show_costs{\lwcparameter{showcosts}}
+ \lwc_show_colours{\lwcparameter{showcolours}}
+
+ \lwc_nobreak{\lwcparameter{nobreak}}
+
+ \lwc_max_cost=\lwcparameter{maxcost}
+
+ % We can't just set the penalties because they will be reset automatically
+ % at \\starttext.
+ \startsetups[*default]
+ \directsetup{*reset}
+
+ \clubpenalty=\lwcparameter{orphanpenalty}
+ \widowpenalty=\lwcparameter{widowpenalty}
+ \displaywidowpenalty=\lwcparameter{widowpenalty}
+ \brokenpenalty=\lwcparameter{brokenpenalty}
+ \stopsetups
+
+ \startsetups[grid][*default]
+ \directsetup{*reset}
+
+ \clubpenalty=\lwcparameter{orphanpenalty}
+ \widowpenalty=\lwcparameter{widowpenalty}
+ \displaywidowpenalty=\lwcparameter{widowpenalty}
+ \brokenpenalty=\lwcparameter{brokenpenalty}
+ \stopsetups
+
+ \setups[*default]
+\stoptexdefinition
+
+% Load the main Lua file
+\ctxloadluafile{lua-widow-control}
+
+% Define the presets
+\definelwc[default][
+ emergencystretch=3em,
+ maxcost=2147483647,
+ nobreak=keep,
+ orphanpenalty=1,
+ widowpenalty=1,
+ brokenpenalty=1,
+]
+
+\definelwc[strict][
+ emergencystretch=0pt,
+ maxcost=5000,
+ nobreak=warn,
+ widowpenalty=1,
+ orphanpenalty=1,
+ brokenpenalty=1,
+]
+
+\definelwc[balanced][
+ emergencystretch=1em,
+ maxcost=10000
+ nobreak=keep,
+ widowpenalty=500,
+ orphanpenalty=500,
+ brokenpenalty=500,
+]
+
+% Set up the default options
+\setuplwc[
+ \c!state=\v!start,
+ debug=\v!stop,
+ draft=,
+ showcosts=\v!stop,
+ showcolours=\v!stop,
+ draftoffset=1in,
+]
+
+\setuplwc[default]
+
+\appendtoks
+ \ifcase\lwcsetupmode
+ % can't happen
+ \or % \setuplwc[name][key=value]
+ \ifx\previouslwc\currentlwc
+ \let\currentlwc\currentlwc
+ \lwc_set_parameters
+ \fi
+ \or % \setuplwc[key=value]
+ \let\currentlwc\previouslwc
+ \lwc_set_parameters
+ \or % \setuplwc[name]
+ \glet\currentlwc\currentlwc % global
+ \lwc_set_parameters
+ \fi
+\to \everysetuplwc
+
+\lwc_set_parameters
+
+% Here, we enable font expansion/contraction. It isn't strictly necessary for
+% \lwc/'s functionality; however, it is required for the
+% lengthened paragraphs to not have terrible spacing.
+\definefontfeature[default][default][expansion=quality]
+\setupalign[hz]
+
+% Expansion of some parts of the document, such as section headings, is quite
+% undesirable, so we'll disable \lwc/ for certain commands.
+% We should only reenable \lwc/ at the end if it was already enabled.
+\newcount\lwc_disable_count
+
+\define\lwc_patch_pre{%
+ \lwc_if_enabled%
+ \advance\lwc_disable_count by 1%
+ \setuplwc[\c!state=\v!stop]%
+ \fi%
+}
+
+\define\lwc_patch_post{
+ \ifnum\lwc_disable_count>0\relax%
+ \setuplwc[\c!state=\v!start]%
+ \advance\lwc_disable_count by -1%
+ \fi%
+}
+
+% Add the default patches
+\prependtoks\lwc_patch_pre\to\everybeforesectionheadhandle % Sectioning
+\prependtoks\lwc_patch_post\to\everyaftersectionheadhandle
+
+% Make the commands public
+\let\iflwc=\lwc_if_enabled
+
+\protect
+\stopmodule
diff --git a/macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control-2022-02-22.sty b/macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control-2022-02-22.sty
new file mode 100644
index 0000000000..d7f8601e60
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control-2022-02-22.sty
@@ -0,0 +1,103 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\NeedsTeXFormat{LaTeX2e}[2015/01/01] % Formats built after 2015 include \LuaTeX{}Base
+\ProvidesPackage{lua-widow-control}%
+ [2022/02/22 v1.1.6]
+
+% The version number above is somewhat-misleading: I will make bugfixes to this file
+% from time to time, but the core of the file will not change. Therefore, we should
+% report a real version number here for debugging.
+\PackageInfo{lua-widow-control}{%
+ Real version:
+ 2022/11/22 %%slashdate
+ v3.0.0 %%version
+}
+
+\PackageWarning{lua-widow-control}{%
+ Old LaTeX format detected!\MessageBreak\MessageBreak
+ Lua-widow-control prefers a LaTeX format\MessageBreak
+ newer than November 2020. I'll still run\MessageBreak
+ the latest Lua code, but I'm using an older\MessageBreak
+ version of the LaTeX code. This means that\MessageBreak
+ the key-value interface is *UNSUPPORTED*.\MessageBreak
+}
+
+\ifdefined\directlua\else
+ \PackageError{lua-widow-control}{%
+ LuaTeX is required for this package.\MessageBreak
+ Make sure to compile with `lualatex'%
+ }{}
+\fi
+
+\clubpenalty=1
+\widowpenalty=1
+\displaywidowpenalty=1
+
+% We can't use \\newlength since that makes a \TeX{} "skip", not a "dimen"
+\newdimen\lwcemergencystretch
+\lwcemergencystretch=3em
+
+\newcount\lwcmaxcost
+\lwcmaxcost=2147483647
+
+\directlua{require "lua-widow-control"}
+
+% Here, we enable font expansion/contraction. It isn't strictly necessary for
+% \lwc/'s functionality; however, it is required for the
+% lengthened paragraphs to not have terrible spacing.
+\RequirePackage{etoolbox}
+\AtEndPreamble{
+ \@ifpackageloaded{microtype}{}{ % Only load if not already loaded
+ \RequirePackage[
+ final,
+ activate={true,nocompatibility}
+ ]{microtype}
+ }
+}
+
+% Define \TeX{} wrappers for Lua functions
+\newcommand{\lwcenable}{\directlua{lwc.enable_callbacks()}}
+\newcommand{\lwcdisable}{\directlua{lwc.disable_callbacks()}}
+\newcommand{\iflwc}{\directlua{lwc.if_lwc_enabled()}}
+
+% Enable \lwc/ by default when the package is loaded.
+\lwcenable
+
+% Expansion of some parts of the document, such as section headings, is quite
+% undesirable, so we'll disable \lwc/ for certain commands.
+\newcommand{\lwc@patch@warning}[1]{\PackageWarning{lua-widow-control}{%
+ Patching the \protect#1 command failed%
+}}
+
+% We should only reenable \lwc/ at the end if it was already enabled.
+\newif\iflwc@should@reenable
+
+\newcommand{\lwc@patch@pre}{%
+ \iflwc%
+ \lwc@should@reenabletrue%
+ \lwcdisable%
+ \else%
+ \lwc@should@reenablefalse%
+ \fi%
+}
+
+\newcommand{\lwc@patch@post}{%
+ \iflwc@should@reenable%
+ \lwcenable%
+ \fi%
+}
+
+\newcommand{\lwcdisablecmd}[1]{%
+ \ifdefined#1
+ \pretocmd{#1}{\lwc@patch@pre}{}{\lwc@patch@warning{#1}}%
+ \apptocmd{#1}{\lwc@patch@post}{}{\lwc@patch@warning{#1}}%
+ \fi
+}
+
+\lwcdisablecmd{\@sect} % Sectioning
+
+
+\endinput
diff --git a/macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control.sty b/macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control.sty
new file mode 100644
index 0000000000..ad3e95a28a
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/lualatex/lua-widow-control/lua-widow-control.sty
@@ -0,0 +1,331 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+% Formats built after 2015 include \LuaTeX{}Base, so this is the absolute
+% minimum version that we will run under.
+\NeedsTeXFormat{LaTeX2e}[2015/01/01]
+
+% For _really_ old formats
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+
+\DeclareRelease{}{0000-00-00}{lua-widow-control-2022-02-22.sty}
+\DeclareRelease{v1.1.6}{2022-02-22}{lua-widow-control-2022-02-22.sty}
+\DeclareCurrentRelease{v3.0.0}{2022-11-22} %%version %%dashdate
+
+% If this version of LaTeX doesn't support command hooks, then we load
+% the last v1.1.X version of the package.
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\IfFormatAtLeastTF{2020/10/01}{}{\input{lua-widow-control-2022-02-22.sty}}
+\IfFormatAtLeastTF{2020/10/01}{}{\endinput}
+
+\ProvidesExplPackage
+ {lua-widow-control}
+ {2022/11/22} %%slashdate
+ {v3.0.0} %%version
+ {Use Lua to remove widows and orphans}
+
+% Message and String Constants
+\str_const:Nn \c__lwc_name_str { lua-widow-control }
+
+\msg_new:nnn
+ { \c__lwc_name_str }
+ { no-luatex }
+ {
+ LuaTeX~ is~ REQUIRED! \\
+ Make~ sure~ to~ compile~ your~ document~ with~ `lualatex'.
+ }
+
+\msg_new:nnn
+ { \c__lwc_name_str }
+ { patch-failed }
+ {
+ Patching~ \c_backslash_str #1~ failed. \\
+ Please~ ensure~ that~ \c_backslash_str #1~ exists.
+ }
+
+\msg_new:nnn
+ { \c__lwc_name_str }
+ { old-format-patch }
+ {
+ Patching~ not~ supported~ with~ old~ LaTeX. \\
+ Please~ use~ a~ LaTeX~ format~ >=~ 2021/06/01.
+ }
+
+\msg_new:nnn
+ { \c__lwc_name_str }
+ { old-command }
+ {
+ \c_backslash_str #1~ has~ been~ REMOVED! \\
+ Please~ use~ \c_backslash_str setuplwc \c_left_brace_str #2
+ \c_right_brace_str\ instead.
+ }
+
+% Don't let the user proceed unless they are using \LuaTeX{}.
+\sys_if_engine_luatex:F {
+ \msg_critical:nn { \c__lwc_name_str } { no-luatex }
+}
+
+% Define (most of) the keys
+\cs_generate_variant:Nn \keys_define:nn { Vn }
+
+\keys_define:Vn { \c__lwc_name_str } {
+ emergencystretch .dim_gset:N = \g__lwc_emergencystretch_dim,
+ emergencystretch .value_required:n = true,
+ emergencystretch .initial:x = \dim_max:nn { 3em } { 30pt },
+
+ draftoffset .dim_gset:N = \g__lwc_draftoffset_dim,
+ draftoffset .value_required:n = true,
+ draftoffset .initial:x = 1in,
+
+ max-cost .int_gset:N = \g__lwc_maxcost_int,
+ max-cost .value_required:n = true,
+ max-cost .initial:x = \c_max_int,
+
+ widowpenalty .code:n = \int_gset:Nn \tex_widowpenalty:D { #1 }
+ \int_gset:Nn \tex_displaywidowpenalty:D { #1 },
+ widowpenalty .value_required:n = true,
+ widowpenalty .initial:n = 1,
+
+ orphanpenalty .code:n = \int_gset:Nn \tex_clubpenalty:D { #1 }
+ \int_gset:Nn \@clubpenalty { #1 },
+ orphanpenalty .value_required:n = true,
+ orphanpenalty .initial:n = 1,
+
+ brokenpenalty .int_gset:N = \tex_brokenpenalty:D,
+ brokenpenalty .value_required:n = true,
+ brokenpenalty .initial:n = 1,
+
+ microtype .bool_gset:N = \g__lwc_use_microtype_bool,
+ microtype .value_required:n = true,
+ microtype .initial:n = true,
+ microtype .usage:n = preamble,
+
+ disablecmds .clist_gset:N = \g__lwc_disablecmds_cl,
+ disablecmds .value_required:n = false,
+ disablecmds .initial:n = { \@sect, % LaTeX default
+ \@ssect, % LaTeX starred
+ \M@sect, % Memoir
+ \@mem@old@ssect, % Memoir Starred
+ \ttl@straight@ii, % titlesec normal
+ \ttl@top@ii, % titlesec top
+ \ttl@part@ii, % titlesec part
+ },
+ disablecmds .usage:n = preamble,
+}
+
+% Load the Lua code
+\cs_if_exist:NTF \lua_load_module:n {
+ \lua_load_module:n { lua-widow-control }
+} {
+ \lua_now:n { require "lua-widow-control" }
+}
+
+% Here, we enable font expansion/contraction. It isn't strictly necessary for
+% \lwc/'s functionality; however, it is required for the
+% lengthened paragraphs to not have terrible spacing.
+\hook_gput_code:nnn { begindocument / before } { \c__lwc_name_str } {
+ \bool_if:NT \g__lwc_use_microtype_bool {
+ \@ifpackageloaded { microtype } {} {
+ \RequirePackage[
+ final,
+ activate = { true, nocompatibility }
+ ]
+ { microtype }
+ }
+ }
+}
+
+% Core Function Definitions
+\cs_new_eq:NN \iflwc \__lwc_iflwc:
+
+\prg_new_conditional:Nnn \__lwc_if_enabled: { T, F, TF } {
+ \__lwc_if_enabled:
+ \prg_return_true:
+ \else
+ \prg_return_false:
+ \fi
+}
+
+\prg_new_conditional:Nnn \__lwc_if_lmtx: { T, F, TF } {
+ \int_compare:nNnTF { \tex_luatexversion:D } > { 200 } {
+ \prg_return_true:
+ } {
+ \prg_return_false:
+ }
+}
+
+% Expansion of some parts of the document, such as section headings, is quite
+% undesirable, so we'll disable \lwc/ for certain commands.
+\int_new:N \g__lwc_disable_int
+
+\cs_new:Npn \__lwc_patch_pre: {
+ % We should only reenable \lwc/ at the end if it was already enabled.
+ \__lwc_if_enabled:T {
+ \int_gincr:N \g__lwc_disable_int
+ \__lwc_disable:
+ }
+}
+
+\cs_new:Npn \__lwc_patch_post: {
+ \int_compare:nT { \g__lwc_disable_int > 0 } {
+ \__lwc_enable:
+ \int_gdecr:N \g__lwc_disable_int
+ }
+}
+
+\cs_new:Npn \__lwc_patch_cmd:c #1 {
+ \IfFormatAtLeastTF { 2021/06/01 } {
+ \hook_gput_code:nnn { cmd / #1 / before } { \c__lwc_name_str } {
+ \__lwc_patch_pre:
+ }
+ \hook_gput_code:nnn { cmd / #1 / after } { \c__lwc_name_str } {
+ \__lwc_patch_post:
+ }
+ } {
+ \msg_warning:nn
+ { \c__lwc_name_str }
+ { old-format-patch }
+ }
+}
+
+\cs_new:Npn \__lwc_patch_cmd:N #1 {
+ \__lwc_patch_cmd:c { \cs_to_str:N #1 }
+}
+
+\cs_new:Npn \__lwc_patch_cmd:n #1 {
+ % If the item provided is a single token, we'll assume that it's a \macro.
+ % If it is multiple tokens, we'll assume that it's a `csname`.
+ \tl_if_single:nTF { #1 } {
+ \__lwc_patch_cmd:c { \cs_to_str:N #1 }
+ } {
+ \__lwc_patch_cmd:c { #1 }
+ }
+}
+
+\hook_gput_code:nnn { begindocument / before } { \c__lwc_name_str } {
+ \clist_map_function:NN \g__lwc_disablecmds_cl \__lwc_patch_cmd:n
+}
+
+\__lwc_if_lmtx:T {
+ \int_gset:Nn \normalizelinemode {
+ \numexpression\normalizelinemode bor 2\relax
+ }
+}
+
+%%% Class and package-specifc patches
+
+% KOMA-Script
+\cs_if_exist:NT \AddtoDoHook {
+ \AddtoDoHook { heading / begingroup } { \__lwc_patch_pre: \use_none:n }
+ \AddtoDoHook { heading / endgroup } { \__lwc_patch_post: \use_none:n }
+}
+
+% Memoir
+\cs_gset_nopar:Npn \pen@ltyabovepfbreak { 23 } % Issue #32
+
+% Define some final keys
+\keys_define:Vn { \c__lwc_name_str } {
+ enable .choice:,
+ enable / true .code:n = \__lwc_enable:,
+ enable / false .code:n = \__lwc_disable:,
+ enable .initial:n = true,
+ enable .default:n = true,
+ enable .value_required:n = false,
+
+ disable .code:n = \__lwc_disable:,
+ disable .value_forbidden:n = true,
+
+ debug .choice:,
+ debug / true .code:n = \__lwc_debug:n { true },
+ debug / false .code:n = \__lwc_debug:n { false },
+ debug .default:n = true,
+ debug .value_required:n = false,
+
+ showcolours .choice:,
+ showcolours / true .code:n = \__lwc_show_colours:n { true },
+ showcolours / false .code:n = \__lwc_show_colours:n { false },
+ showcolours .default:n = true,
+ showcolours .value_required:n = false,
+
+ showcosts .choice:,
+ showcosts / true .code:n = \__lwc_show_costs:n { true },
+ showcosts / false .code:n = \__lwc_show_costs:n { false },
+ showcosts .default:n = true,
+ showcosts .value_required:n = false,
+
+ draft .meta:n = {
+ showcolours = { #1 },
+ showcosts = { #1 },
+ },
+ draft .default:n = true,
+ draft .value_required:n = false,
+
+ nobreak .code:n = \__lwc_nobreak:n { #1 },
+ nobreak .value_required:n = true,
+ nobreak .initial:n = keep,
+
+ strict .meta:n = { emergencystretch = 0pt,
+ max-cost = 5000,
+ nobreak = warn,
+ widowpenalty = 1,
+ orphanpenalty = 1,
+ brokenpenalty = 1,
+ },
+ strict .value_forbidden:n = true,
+
+ default .meta:n = { emergencystretch = 3em,
+ max-cost = \c_max_int,
+ nobreak = keep,
+ widowpenalty = 1,
+ orphanpenalty = 1,
+ brokenpenalty = 1,
+ },
+ default .value_forbidden:n = true,
+
+ balanced .meta:n = { emergencystretch = 1em,
+ max-cost = 10000,
+ nobreak = keep,
+ widowpenalty = 500,
+ orphanpenalty = 500,
+ brokenpenalty = 500,
+ },
+ balanced .value_forbidden:n = true,
+}
+
+% Add the user interface for the keys
+\IfFormatAtLeastTF { 2022-06-01 } {
+ \ProcessKeyOptions [ \c__lwc_name_str ]
+}{
+ \RequirePackage { l3keys2e }
+ \exp_args:NV \ProcessKeysOptions { \c__lwc_name_str }
+}
+
+\cs_generate_variant:Nn \keys_set:nn { Vn }
+\NewDocumentCommand \lwcsetup {m} {
+ \keys_set:Vn { \c__lwc_name_str }{ #1 }
+}
+
+% Legacy Commands
+\NewDocumentCommand \lwcemergencystretch { } {
+ \msg_error:nnnnn
+ { \c__lwc_name_str }
+ { old-command }
+ { lwcemergencystretch }
+ { emergencystretch=XXXpt }
+}
+
+\NewDocumentCommand \lwcdisablecmd { m } {
+ \msg_error:nnxx
+ { \c__lwc_name_str }
+ { old-command }
+ { lwcdisablecmd }
+ { disablecmds={\c_backslash_str aaa,~ \c_backslash_str bbb} }
+}
+
+\cs_new_eq:NN \lwcenable \__lwc_enable:
+\cs_new_eq:NN \lwcdisable \__lwc_disable:
+
+\endinput
diff --git a/macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.lua b/macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.lua
new file mode 100644
index 0000000000..59ae84ee3e
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.lua
@@ -0,0 +1,1781 @@
+--[[
+ lua-widow-control
+ https://github.com/gucci-on-fleek/lua-widow-control
+ SPDX-License-Identifier: MPL-2.0+
+ SPDX-FileCopyrightText: 2022 Max Chernoff
+ ]]
+
+--- Tell the linter about node attributes
+--- @class node
+--- @field depth integer
+--- @field height integer
+--- @field id integer
+--- @field list node
+--- @field next node
+--- @field penalty integer
+--- @field prev node
+--- @field subtype integer
+
+-- Initial setup
+lwc = lwc or {}
+lwc.name = "lua-widow-control"
+
+-- Locals for `debug_print`
+local debug_lib = debug
+local string_rep = string.rep
+local write_nl = texio.write_nl
+
+local write_log
+if status.luatex_engine == "luametatex" then
+ write_log = "logfile"
+else
+ write_log = "log"
+end
+
+--- Prints debugging messages to the log, only if `debug` is set to `true`.
+---
+--- @param title string The "title" to use
+--- @param text string? The "content" to print
+--- @return nil
+local function debug(title, text)
+ if not lwc.debug then return end
+
+ -- The number of spaces we need
+ local filler = 15 - #title
+
+ if text then
+ write_nl(
+ write_log,
+ "LWC (" ..
+ title ..
+ string_rep(" ", filler) ..
+ "): " ..
+ text
+ )
+ else
+ write_nl(write_log, "LWC: " .. string_rep(" ", 18) .. title)
+ end
+end
+
+
+--[[
+ \lwc/ is intended to be format-agonistic. It only runs on Lua\TeX{} and
+ LuaMeta\TeX{}, but there are still some slight differences between formats.
+ Here, we detect the format name then set some flags for later processing.
+ ]]
+local format = tex.formatname
+local context, latex, plain, optex, lmtx
+
+if status.luatex_engine == "luametatex" then
+ lmtx = true
+end
+
+if format:find("cont") then -- cont-en, cont-fr, cont-nl, ...
+ context = true
+elseif format:find("latex") then -- lualatex, lualatex-dev, ...
+ latex = true
+elseif format == "luatex" or
+ format == "luahbtex" or
+ format:find("plain")
+then -- Plain
+ plain = true
+elseif format:find("optex") then -- OpTeX
+ optex = _G.optex
+end
+
+--[[
+ Save some local copies of the node library to reduce table lookups.
+ This is probably a useless micro-optimization, but it is done in all of the
+ ConTeXt and expl3 Lua code, so I should probably do it here too.
+ ]]
+-- Node ID's
+-- (We need to hardcode the subid's sadly)
+local id_from_name = node.id
+local baselineskip_subid = 2
+local glue_id = id_from_name("glue")
+local glyph_id = id_from_name("glyph")
+local hlist_id = id_from_name("hlist")
+local insert_id = id_from_name("insert") or id_from_name("ins")
+local line_subid = 1
+local linebreakpenalty_subid = 1
+local par_id = id_from_name("par") or id_from_name("local_par")
+local penalty_id = id_from_name("penalty")
+local parfill_subids = {
+ parfillleftskip = 17,
+ parfillrightskip = 16,
+ parinitleftskip = 19,
+ parinitrightskip = 18,
+}
+local vlist_id = id_from_name("vlist")
+
+-- Local versions of globals
+local abs = math.abs
+local copy = node.copy
+local copy_list = node.copy_list or node.copylist
+local effective_glue = node.effective_glue or node.effectiveglue
+local find_attribute = node.find_attribute or node.findattribute
+local free = node.free
+local free_list = node.flush_list or node.flushlist
+local get_attribute = node.get_attribute or node.getattribute
+local hpack = node.hpack
+local insert_token = token.put_next or token.putnext
+local is_node = node.is_node or node.isnode
+local last = node.slide
+local linebreak = tex.linebreak
+local new_node = node.new
+local remove = node.remove
+local set_attribute = node.set_attribute or node.setattribute
+local str_byte = string.byte
+local str_char = string.char
+local str_format = string.format
+local subtype = node.subtype
+local tex_box = tex.box
+local tex_count = tex.count
+local tex_dimen = tex.dimen
+local tex_lists = tex.lists
+local traverse = node.traverse
+local traverse_id = node.traverse_id or node.traverseid
+local vpack = node.vpack
+
+-- Misc. Constants
+local iffalse = token.create("iffalse")
+local iftrue = token.create("iftrue")
+local INFINITY = 10000
+local INSERT_CLASS_MULTIPLE = 1000 * 1000
+local INSERT_FIRST_MULTIPLE = 1000
+local PAGE_MULTIPLE = 100
+local SINGLE_LINE = 50
+
+lwc.colours = {
+ expanded = {0.00, 0.70, 0.25},
+ failure = {0.90, 0.00, 0.25},
+ moved = {0.25, 0.25, 1.00},
+ cost = {0.50, 0.50, 0.50},
+}
+
+
+--[[ Package/module initialization.
+
+ Here, we replace any format/engine-specific variables/functions with some
+ generic equivalents. This way, we can write the rest of the module without
+ worrying about any format/engine differences.
+ ]]
+local contrib_head,
+ draft_offset,
+ emergencystretch,
+ hold_head,
+ info,
+ insert_attribute,
+ max_cost,
+ page_head,
+ paragraph_attribute,
+ set_whatsit_field,
+ shrink_order,
+ stretch_order,
+ warning
+
+if lmtx then
+ -- LMTX has removed underscores from most of the Lua parts
+ debug("LMTX")
+ contrib_head = "contributehead"
+ shrink_order = "shrinkorder"
+ stretch_order = "stretchorder"
+ hold_head = "holdhead"
+ page_head = "pagehead"
+ set_whatsit_field = node.setwhatsitfield
+else
+ contrib_head = "contrib_head"
+ shrink_order = "shrink_order"
+ stretch_order = "stretch_order"
+ hold_head = "hold_head"
+ page_head = "page_head"
+ set_whatsit_field = node.setfield
+end
+
+if context then
+ debug("ConTeXt")
+
+ warning = logs.reporter(lwc.name, "warning")
+ local _info = logs.reporter(lwc.name, "info")
+ --[[ We don't want the info messages on the terminal, but ConTeXt doesn't
+ provide any logfile-only reporters, so we need this hack.
+ ]]
+ info = function (text)
+ logs.pushtarget("logfile")
+ _info(text)
+ logs.poptarget()
+ end
+ paragraph_attribute = attributes.public(lwc.name .. "_paragraph")
+ insert_attribute = attributes.public(lwc.name .. "_insert")
+
+ -- Dimen/count names
+ emergencystretch = "lwc_emergency_stretch"
+ draft_offset = "lwc_draft_offset"
+ max_cost = "lwc_max_cost"
+elseif plain or latex or optex then
+ -- Dimen names
+ if tex.isdimen("g__lwc_emergencystretch_dim") then
+ emergencystretch = "g__lwc_emergencystretch_dim"
+ draft_offset = "g__lwc_draftoffset_dim"
+ max_cost = "g__lwc_maxcost_int"
+ else
+ emergencystretch = "lwcemergencystretch"
+ draft_offset = "lwcdraftoffset"
+ max_cost = "lwcmaxcost"
+ end
+
+ if plain or latex then
+ debug("Plain/LaTeX")
+ luatexbase.provides_module {
+ name = lwc.name,
+ date = "2022/11/22", --%%slashdate
+ version = "3.0.0", --%%version
+ description = [[
+
+This module provides a LuaTeX-based solution to prevent
+widows and orphans from appearing in a document. It does
+so by increasing or decreasing the lengths of previous
+paragraphs.]],
+ }
+ warning = function(str) luatexbase.module_warning(lwc.name, str) end
+ info = function(str) luatexbase.module_info(lwc.name, str) end
+ paragraph_attribute = luatexbase.new_attribute(lwc.name .. "_paragraph")
+ insert_attribute = luatexbase.new_attribute(lwc.name .. "_insert")
+ elseif optex then
+ debug("OpTeX")
+
+ warning = function(str) write_nl(lwc.name .. " Warning: " .. str) end
+ info = function(str) write_nl("log", lwc.name .. " Info: " .. str) end
+ paragraph_attribute = alloc.new_attribute(lwc.name .. "_paragraph")
+ insert_attribute = alloc.new_attribute(lwc.name .. "_insert")
+ end
+else -- This shouldn't ever happen
+ error [[Unsupported format.
+
+Please use LaTeX, Plain TeX, ConTeXt or OpTeX.]]
+end
+
+-- We can't get the value of \\horigin from Lua, but we can guess it
+-- based on the format.
+local horigin
+if optex or (lmtx and context) then
+ horigin = 0
+else
+ horigin = tex.sp("1in")
+end
+
+-- Plain is the only format without a `pre_shipout_filter`
+if plain then
+ luatexbase.create_callback('pre_shipout_filter', 'list')
+end
+
+
+--[[ Select the fonts
+
+ We want to use cmr6 for the draft mode cost displays, and the easiest
+ way to do so is to just hardcode the font id's. This relies on some
+ implementation details; however, it is very unlikely to ever be an issue.
+ ]]
+local SMALL_FONT
+if plain then
+ SMALL_FONT = 5
+elseif latex then
+ SMALL_FONT = 6
+elseif optex then
+ SMALL_FONT = 8
+elseif context then
+ SMALL_FONT = fonts.definers.define({
+ name = "LMRoman6-Regular",
+ size = tex.sp("6pt"),
+ })
+end
+
+-- Global variables
+local paragraphs = {} -- The expanded paragraphs on each page
+local inserts = {} -- Copies of all the inserts on each page
+local costs = {} -- All of the paragraph costs for the document
+local pagenum = 1 -- The current page/column number
+
+--[[ Function definitions
+ ]]
+
+--- Gets the current paragraph and page locations
+--- @return string
+local function get_location()
+ return "At " .. pagenum .. "/" .. #paragraphs
+end
+
+
+--- Prints the starting glyphs and glue of an `hlist`.
+---
+--- Useful for debugging purposes.
+---
+--- @param head node
+--- @return nil
+local function get_chars(head)
+ if not lwc.debug then return end
+
+ local chars = ""
+ for n in traverse(head) do
+ if n.id == glyph_id then
+ if n.char < 127 then -- Only ASCII
+ chars = chars .. str_char(n.char)
+ else
+ chars = chars .. "#" -- Replacement for an unknown glyph
+ end
+ elseif n.id == glue_id then
+ chars = chars .. " " -- Any glue goes to a space
+ end
+ if #chars > 25 then
+ break
+ end
+ end
+
+ debug(get_location(), chars)
+end
+
+
+--- The "cost function" to use. Users can redefine this if they wish.
+---
+--- @param demerits number The demerits of the broken paragraph
+--- @param lines number The number of lines in the broken paragraph
+--- @param nat_demerits number The demerits of the naturally-broken paragraph
+--- @param nat_lines number The number of lines in the naturally-broken paragraph
+--- @param head node The head of the broken paragraph
+--- @return number cost The cost of the broken paragraph
+function lwc.paragraph_cost(demerits, lines, nat_demerits, nat_lines, head)
+ return demerits / math.sqrt(lines)
+end
+
+
+--- Checks if the ConTeXt "grid snapping" is active
+---
+--- @return boolean
+local function grid_mode_enabled()
+ -- Compare the token "mode" to see if `\\ifgridsnapping` is `\\iftrue`
+ return token.create("ifgridsnapping").mode == iftrue.mode
+end
+
+
+--- Gets the next node of a specified type/subtype in a node list
+---
+--- @param head node The head of the node list
+--- @param id number The node type
+--- @param args table?
+--- subtype: number = The node subtype
+--- reverse: bool = Whether we should iterate backwards
+--- @return node?
+local function next_of_type(head, id, args)
+ args = args or {}
+
+ if lmtx or not args.reverse then
+ for n, subtype in traverse_id(id, head, args.reverse) do
+ if (subtype == args.subtype) or (args.subtype == nil) then
+ return n
+ end
+ end
+ else
+ -- Only LMTX has the built-in backwards traverser, so we need to do
+ -- it manually otherwise.
+ while head do
+ if head.id == id and
+ (head.subtype == args.subtype or args.subtype == nil)
+ then
+ return head
+ end
+ head = head.prev
+ end
+ end
+
+ -- Needed for the special `tex.lists` nodes
+ if head and head.id == id and
+ (head.subtype == args.subtype or args.subtype == nil)
+ then
+ return head
+ end
+end
+
+
+--- Ensures that a paragraph is ready to be broken
+---
+--- Only applies to LuaMetaTeX
+---
+--- @param head node
+--- @return nil
+local function prepare_linebreak(head)
+ if not lmtx then
+ return
+ end
+
+ -- See how many of the par[left/right][init/fill]skips we have
+ local parfills = {}
+ local count = 0
+ for name, subid in pairs(parfill_subids) do
+ parfills[name] = next_of_type(head, glue_id, { subtype = subid })
+ if parfills[name] then
+ count = count + 1
+ end
+ end
+
+ if count == 0 then
+ -- Usual case
+ tex.preparelinebreak(head)
+ elseif count == 4 then
+ -- Already prepared for some reason, ignored
+ else
+ -- Uh oh
+ warning("Weird par(fill/init)skips found!")
+ tex.preparelinebreak(head) -- Try to fix it
+ end
+end
+
+
+--- Breaks a paragraph one line longer than natural
+---
+--- @param head node The unbroken paragraph
+--- @param parfillskip table<number> The {width, stretch, shrink,
+--- stretch_order, shrink_order} to set
+--- for the \\parfillskip
+--- @return node long_node The broken paragraph
+--- @return table long_info An info table about the broken paragraph
+local function long_paragraph(head, parfillskip)
+ -- We can't modify the original paragraph
+ head = copy_list(head)
+
+ prepare_linebreak(head)
+
+ -- TODO node.setglue is broken in LMTX, so we have to do this manually
+ local n = last(head)
+ n.width = parfillskip[1]
+ n.stretch = parfillskip[2]
+ n.shrink = parfillskip[3]
+ n[stretch_order] = parfillskip[4]
+ n[shrink_order] = parfillskip[5]
+
+ -- Break the paragraph 1 line longer than natural
+ local long_node, long_info = linebreak(head, {
+ looseness = 1,
+ emergencystretch = tex_dimen[emergencystretch],
+ })
+
+ -- Mark the last line for the costs display
+ set_attribute(
+ last(long_node),
+ paragraph_attribute,
+ -1 * (#paragraphs + 1 + (PAGE_MULTIPLE * pagenum))
+ )
+
+ return long_node, long_info
+end
+
+
+--- Breaks a paragraph at its natural length
+---
+--- @param head node The unbroken paragraph
+--- @return table natural_info An info table about the broken paragraph
+local function natural_paragraph(head)
+ -- We can't modify the original paragraph
+ head = copy_list(head)
+
+ prepare_linebreak(head)
+
+ -- Break the paragraph naturally to get \\prevgraf
+ local natural_node, natural_info = linebreak(head)
+ free_list(natural_node)
+
+ return natural_info
+end
+
+
+local show_colours = false
+--- Changes the text colour in a node list if draft mode is active
+---
+--- @param head node The first node to colour
+--- @param colour string The name of a colour in `lwc.colours`
+--- @return node head The coloured node
+local function colour_list(head, colour)
+ if not show_colours then
+ return head
+ end
+
+ local pdf_colour = str_format(
+ "%.2f %.2f %.2f rg",
+ table.unpack(lwc.colours[colour])
+ )
+
+ if optex and optex.set_node_color then
+ for n in node.traverse(head) do
+ optex.set_node_color(n, pdf_colour)
+ end
+
+ return head
+ end
+
+ if context then
+ nodes.tracers.colors.setlist(head, "lwc_" .. colour)
+ return head
+ end
+
+ -- Adapted from https://tex.stackexchange.com/a/372437 and
+ -- https://github.com/zauguin/luametalatex/issues/8.
+ local start_colour = new_node("whatsit", subtype("pdf_colorstack"))
+ set_whatsit_field(start_colour, "stack", 0)
+ set_whatsit_field(start_colour, "command", 1)
+ set_whatsit_field(start_colour, "data", pdf_colour)
+
+ local end_colour = new_node("whatsit", subtype("pdf_colorstack"))
+ set_whatsit_field(end_colour, "stack", 0)
+ set_whatsit_field(end_colour, "command", 2)
+
+ start_colour.next = head
+ last(head).next = end_colour
+
+ return start_colour
+end
+
+
+--- Saves each paragraph, but lengthened by 1 line
+---
+--- Called by the `pre_linebreak_filter` callback
+---
+--- @param head node The pre-broken paragraph
+--- @return node head The unmodified `head` argument
+function lwc.save_paragraphs(head)
+ if (head.id ~= par_id and context) or -- Make sure that `head` is a paragraph
+ status.output_active or -- Don't run during the output routine
+ tex.nest.ptr > 1 -- Don't run inside boxes
+ then
+ return head
+ end
+
+ -- Prevent the "underfull hbox" warnings when we store a potential paragraph
+ local renable_box_warnings
+ if (context or optex) or
+ #luatexbase.callback_descriptions("hpack_quality") == 0
+ then -- See #18 and michal-h21/linebreaker#3
+ renable_box_warnings = true
+ lwc.callbacks.disable_box_warnings.enable()
+ end
+
+ natural_info = natural_paragraph(head)
+
+ -- Prevent ultra-short last lines (\TeX{}book p. 104). Equivalent to
+ -- \\parfillskip=0.75\\hsize plus 0.05\\hsize minus 0.75\\hsize.
+ -- From http://petr.olsak.net/ftp/olsak/tbn/tbn.pdf p. 234 (via Jan Sustek)
+ long_node, long_info = long_paragraph(
+ head,
+ {0.75 * tex.hsize, 0.05 * tex.hsize, 0.75 * tex.hsize, 0, 0}
+ )
+
+ if long_info.prevgraf ~= natural_info.prevgraf + 1 then
+ -- The \\parfillskip settings with \\looseness=1 can sometimes
+ -- lengthen paragraphs by two lines instead of one. If this happens,
+ -- we fall back to a slightly-worse \\parfillskip setting.
+ free_list(long_node)
+ long_node, long_info = long_paragraph(
+ head,
+ {0, 0.8 * tex.hsize, false, 0, false}
+ )
+ end
+
+ if renable_box_warnings then
+ lwc.callbacks.disable_box_warnings.disable()
+ end
+
+ if not grid_mode_enabled() then
+ -- Offset the \\prevdepth differences between natural and long
+ local prevdepth = new_node("glue")
+ prevdepth.width = natural_info.prevdepth - long_info.prevdepth
+ last(long_node).next = prevdepth
+ end
+
+ local long_cost = lwc.paragraph_cost(
+ long_info.demerits,
+ long_info.prevgraf,
+ natural_info.demerits,
+ natural_info.prevgraf,
+ long_node
+ )
+
+ if long_info.prevgraf ~= natural_info.prevgraf + 1 or
+ long_cost < 10 -- Any paragraph that is "free" to expand is suspicious
+ then
+ -- This paragraph is infinitely bad
+ long_cost = math.maxinteger
+ end
+
+ -- The initial glue can disappear in ConTeXt's grid mode, so we
+ -- save starting at the first hlsit
+ local saved_node = next_of_type(long_node, hlist_id, { subtype = line_subid })
+
+ for n in traverse_id(hlist_id, saved_node) do
+ n.list = colour_list(n.list, "expanded")
+ end
+
+ table.insert(paragraphs, {
+ cost = long_cost,
+ node = copy_list(saved_node)
+ })
+
+ free_list(long_node)
+
+ costs[#paragraphs + (PAGE_MULTIPLE * pagenum)] = long_cost
+
+ -- Print some debugging information
+ if lwc.debug then
+ get_chars(head)
+ debug(get_location(), "nat lines " .. natural_info.prevgraf)
+ debug(
+ get_location(),
+ "nat cost " ..
+ lwc.paragraph_cost(natural_info.demerits, natural_info.prevgraf)
+ )
+ debug(get_location(), "long lines " .. long_info.prevgraf)
+ debug(
+ get_location(),
+ "long cost " ..
+ lwc.paragraph_cost(long_info.demerits, long_info.prevgraf)
+ )
+ end
+
+ -- \ConTeXt{} crashes if we return `true`
+ return head
+end
+
+
+--- Tags the beginning and the end of each paragraph as it is added to the page.
+---
+--- We add an attribute to the first and last node of each paragraph. The ID is
+--- some arbitrary number for \lwc/, and the value corresponds to the
+--- paragraphs index, which is negated for the end of the paragraph.
+---
+--- @param head node
+--- @return nil
+local function mark_paragraphs(head)
+ -- Tag the paragraphs
+ if status.output_active then
+ -- Don't run during the output routine
+ return
+ end
+
+ -- Get the start and end of the paragraph
+ local top = next_of_type(head, hlist_id, { subtype = line_subid })
+ local bottom = last(head)
+
+ -- The inserts disappear before `pre_output_routine`, so we shouldn't
+ -- mark them.
+ while bottom.id == insert_id do
+ bottom = bottom.prev
+ end
+
+ if top ~= bottom then
+ set_attribute(
+ top,
+ paragraph_attribute,
+ #paragraphs + (PAGE_MULTIPLE * pagenum)
+ )
+ set_attribute(
+ bottom,
+ paragraph_attribute,
+ -1 * (#paragraphs + (PAGE_MULTIPLE * pagenum))
+ )
+ else
+ -- We need a special tag for a 1-line paragraph since the node can only
+ -- have a single attribute value
+ set_attribute(
+ top,
+ paragraph_attribute,
+ #paragraphs + (PAGE_MULTIPLE * pagenum) + SINGLE_LINE
+ )
+ end
+end
+
+
+--- Tags the each line with the indices of any corresponding inserts.
+---
+--- We need to tag the first element of the hlist before the any insert nodes
+--- since the insert nodes are removed before `pre_output_filter` gets called.
+---
+--- @param head node
+--- @return nil
+local function mark_inserts(head)
+ local insert_indices = {}
+ for insert in traverse_id(insert_id, head) do
+ -- Save the found insert nodes for later
+ inserts[#inserts+1] = copy(insert)
+
+ -- Tag the insert's content so that we can find it later
+ set_attribute(insert.list, insert_attribute, #inserts)
+
+ -- We need to tag all lines---not just the start and the end---since
+ -- \TeX{} can split the insert between pages at any point.
+ for n in traverse(insert.list.next) do
+ set_attribute(n, insert_attribute, -1 * #inserts)
+ end
+
+ -- Each hlist/line can have multiple inserts, but so we can't just tag
+ -- the hlist as we go. Instead, we need save up all of their indices,
+ -- then tag the hlist with the first and last indices.
+ insert_indices[#insert_indices+1] = #inserts
+
+ if not insert.next or
+ insert.next.id ~= insert_id
+ then
+ local hlist_before = next_of_type(insert, hlist_id, { reverse = true} )
+
+ local insert_class
+ if lmtx then
+ insert_class = insert.index
+ else
+ insert_class = insert.subtype
+ end
+
+ -- We tag the first element of the hlist/line with an integer
+ -- that holds the insert class and the first and last indices
+ -- of the inserts contained in the line. This won't work if
+ -- the line has multiple classes of inserts, but I don't think
+ -- that happens in real-world documents. If this does turn out
+ -- to be an issue, we can get the insert's class from it's copy
+ -- at `pre_output_filter` instead of saving it now.
+ set_attribute(
+ hlist_before.list,
+ insert_attribute,
+ insert_class * INSERT_CLASS_MULTIPLE +
+ insert_indices[1] * INSERT_FIRST_MULTIPLE +
+ insert_indices[#insert_indices]
+ )
+
+ -- Clear the indices to prepare for the next line
+ insert_indices = {}
+ end
+ end
+end
+
+
+--- Saves the inserts and tags a typeset paragraph. Called by the
+--- `post_linebreak_filter` callback.
+---
+--- @param head node The head of the broken paragraph
+--- @return node head The unmodified `head` parameter
+function lwc.mark_paragraphs(head)
+ mark_paragraphs(head)
+ mark_inserts(head)
+
+ return head
+end
+
+
+--- Checks to see if a penalty matches the widow/orphan/broken penalties
+---
+--- @param penalty number
+--- @return boolean
+local function is_matching_penalty(penalty)
+ local widowpenalty = tex.widowpenalty
+ local clubpenalty = tex.clubpenalty
+ local displaywidowpenalty = tex.displaywidowpenalty
+ local brokenpenalty = tex.brokenpenalty
+
+ penalty = penalty - tex.interlinepenalty
+
+ -- Adapted from https://tug.org/TUGboat/tb39-3/tb123mitt-widows-code.pdf.
+ -- This only takes into account the original \TeX{} penalties, not the
+ -- "new" \eTeX{} \\(club/widow/broken)penalties commands.
+ return penalty ~= 0 and
+ penalty < INFINITY and (
+ penalty == widowpenalty or
+ penalty == displaywidowpenalty or
+ penalty == clubpenalty or
+ penalty == clubpenalty + widowpenalty or
+ penalty == clubpenalty + displaywidowpenalty or
+ penalty == brokenpenalty or
+ penalty == brokenpenalty + widowpenalty or
+ penalty == brokenpenalty + displaywidowpenalty or
+ penalty == brokenpenalty + clubpenalty or
+ penalty == brokenpenalty + clubpenalty + widowpenalty or
+ penalty == brokenpenalty + clubpenalty + displaywidowpenalty
+ )
+end
+
+
+--- Determines if we should "activate" \lwc/ for the current page/column.
+---
+--- Users can redefine this if they wish.
+---
+--- @param penalty number The \\outputpenalty for the current page/column
+--- @param paragraphs table<table<string, node|number>> The `paragraphs` table
+--- @param head node The head of the current page/column
+--- @return boolean activate True if \lwc/ should move the last line on this page
+function lwc.should_remove_widows(penalty, paragraphs, head)
+ return is_matching_penalty(penalty)
+end
+
+--- Reset any state saved between pages
+---
+--- This function is *vital* to ensure that we don't leak any nodes.
+--- If we do leak nodes, then very large documents will slow down and
+--- eventually fail to compile.
+---
+--- @return nil
+local function reset_state()
+ for _, paragraph in ipairs(paragraphs) do
+ free_list(paragraph.node)
+ end
+ paragraphs = {}
+
+ for _, insert in ipairs(inserts) do
+ free(insert)
+ end
+ inserts = {}
+
+ pagenum = pagenum + 1
+end
+
+
+--- When we are unable to remove a widow/orphan, print a warning
+---
+--- @return nil
+local function remove_widows_fail()
+ warning("Widow/Orphan/Broken Hyphen NOT removed on page " .. pagenum)
+
+ local last_line = next_of_type(
+ last(tex_lists[page_head]),
+ hlist_id,
+ { subtype = line_subid, reverse = true }
+ )
+ if last_line then
+ last_line.list = colour_list(last_line.list, "failure")
+ end
+
+ local next_first_line = next_of_type(
+ tex_lists[contrib_head],
+ hlist_id,
+ { subtype = line_subid }
+ )
+ if next_first_line then
+ next_first_line.list = colour_list(next_first_line.list, "failure")
+ end
+
+ reset_state()
+end
+
+
+--- Finds the first and last paragraphs present on a page
+---
+--- @param head node The node representing the start of the page
+--- @return number first_index The index of the first paragraph on the page in
+--- the `paragraphs` table
+--- @return number last_index The index of the last paragraph on the page in the
+--- `paragraphs` table
+local function first_last_paragraphs(head)
+ local first_index, last_index
+
+ -- Find the last paragraph on the page, starting at the end, heading in reverse
+ local n = last(head)
+ while n do
+ local value = get_attribute(n, paragraph_attribute)
+ if value then
+ last_index = value % PAGE_MULTIPLE
+ break
+ end
+
+ n = n.prev
+ end
+
+ -- Find the first paragraph on the page, from the top
+ local first_val, first_head = find_attribute(head, paragraph_attribute)
+ while abs(first_val) // PAGE_MULTIPLE == pagenum - 1 do
+ -- If the first complete paragraph on the page was initially broken on the
+ -- previous page, then we can't expand it here. Why can't we expand it?
+ -- Well, expanding it will nearly always change how the first few lines
+ -- are printed, but we can't modify those since they've already been
+ -- shipped out. So, we need to skip these paragraphs.
+ first_val, first_head = find_attribute(
+ first_head.next,
+ paragraph_attribute
+ )
+ end
+
+ first_index = first_val % PAGE_MULTIPLE
+
+ if first_index >= SINGLE_LINE then
+ first_index = first_index - SINGLE_LINE
+ end
+
+ debug("first/last", first_index .. "/" .. last_index)
+
+ return first_index, last_index
+end
+
+
+--- Selects the "best" paragraph on the page to expand
+---
+--- @param head node The node representing the start of the page
+--- @return number? best_index The index of the paragraph to expand in the
+--- `paragraphs` table
+local function best_paragraph(head)
+ local first_paragraph_index, last_paragraph_index = first_last_paragraphs(head)
+
+ -- Find the paragraph on the page with the least cost.
+ local best_index = 1
+ local best_cost = paragraphs[best_index].cost
+
+ -- We find the current "best" replacement
+ for index, paragraph in pairs(paragraphs) do
+ if paragraph.cost < best_cost and
+ index < last_paragraph_index and
+ index >= first_paragraph_index
+ then
+ best_index, best_cost = index, paragraph.cost
+ end
+ end
+
+ debug(
+ "selected para",
+ pagenum .. "/" .. best_index .. " (" .. best_cost .. ")"
+ )
+
+ if best_cost > tex_count[max_cost] or
+ best_index == last_paragraph_index or -- Shouldn't happen
+ best_cost == math.maxinteger
+ then
+ return nil
+ else
+ return best_index
+ end
+end
+
+
+--- Gets any inserts present in the moved line
+---
+--- @param last_line node The moved last line
+--- @return table<node> inserts A list of the present inserts
+local function get_inserts(last_line)
+ local selected_inserts = {}
+
+ local n = last_line.list
+ while n do -- Iterate through the last line
+ local line_value
+ line_value, n = find_attribute(n, insert_attribute)
+
+ if not n then
+ break
+ end
+
+ -- Demux the insert values
+ local class = line_value // INSERT_CLASS_MULTIPLE
+ local first_index = (line_value % INSERT_CLASS_MULTIPLE)
+ // INSERT_FIRST_MULTIPLE
+ local last_index = line_value % INSERT_FIRST_MULTIPLE
+
+ -- Get the output box containing the insert boxes
+ local insert_box
+
+ if lmtx then
+ insert_box = tex.getinsertcontent(class)
+ -- `getinsertcontent` resets the insert box, so we need to
+ -- re-set it.
+ tex.setinsertcontent(class, insert_box)
+ else
+ insert_box = tex_box[class]
+ end
+
+ -- Get any portions of the insert "held over" until the next page
+ local split_insert
+ if lmtx then
+ split_insert = next_of_type(
+ tex_lists[hold_head],
+ insert_id,
+ { index = class }
+ )
+ else
+ split_insert = next_of_type(
+ tex_lists[hold_head],
+ insert_id,
+ { subtype = class }
+ )
+ end
+
+ -- We use the same procedure for this page and the next page
+ for i, insert in ipairs { insert_box, split_insert } do
+ local m = insert and insert.list
+
+ while m do -- Iterate through the insert box
+ local box_value
+ box_value, m = find_attribute(m, insert_attribute)
+ local next = m.next
+
+ if not m then
+ break
+ end
+
+ if abs(box_value) >= first_index and
+ abs(box_value) <= last_index
+ then
+ -- Remove the respective contents from the insert box
+ insert.list = remove(insert.list, m)
+
+ if box_value > 0 and i == 1 then
+ table.insert(selected_inserts, copy(inserts[box_value]))
+ end
+
+ free(m)
+ end
+
+ m = next
+ end
+ end
+
+ -- If the box has no contents, then void it so that any \\ifvoid
+ -- tests work correctly in the output routine.
+ if not insert_box.list then
+ tex_box[class] = nil
+ end
+
+ if split_insert and not split_insert.list then
+ remove(tex_lists[hold_head], split_insert)
+ end
+
+ n = n.next
+ end
+
+ if #selected_inserts ~= 0 then
+ -- This is a somewhat-risky process, so we print an info
+ -- message just in case something goes wrong. We can probably
+ -- remove this in the future if we're sure that everything
+ -- is working correctly.
+ info("Moving footnotes on page " .. pagenum)
+ end
+
+ return selected_inserts
+end
+
+
+lwc.nobreak_behaviour = "keep"
+--- Moves the last line of the page onto the following page.
+---
+--- This is the most complicated function of the module since it needs to
+--- look back to see if there is a heading preceding the last line, then it does
+--- some low-level node shuffling.
+---
+--- @param head node The node representing the start of the page
+--- @return boolean success Set to false if something went wrong
+local function move_last_line(head)
+ -- Start of final paragraph
+ debug("remove_widows", "moving last line")
+
+ -- Here we check to see if the widow/orphan was preceded by a large penalty
+ local big_penalty_found, last_line, hlist_head
+ local n = last(head).prev
+ while n do
+ if n.id == glue_id then
+ -- Ignore any glue nodes
+ elseif n.id == penalty_id and n.penalty >= INFINITY then
+ -- Infinite break penalty
+ big_penalty_found = true
+ elseif big_penalty_found and n.id == hlist_id then
+ -- Line before the penalty
+ if lwc.nobreak_behaviour == "keep" then
+ hlist_head = n
+ big_penalty_found = false
+ elseif lwc.nobreak_behaviour == "split" then
+ n = last(head)
+ break
+ elseif lwc.nobreak_behaviour == "warn" then
+ debug("last line", "heading found")
+ return false
+ end
+ else
+ -- Not found
+ if hlist_head then
+ n = hlist_head
+ else
+ n = last(head)
+ end
+ break
+ end
+ n = n.prev
+ end
+
+ local potential_penalty = n.prev.prev
+
+ if potential_penalty and
+ potential_penalty.id == penalty_id and
+ potential_penalty.subtype == linebreakpenalty_subid and
+ is_matching_penalty(potential_penalty.penalty)
+ then
+ warning("Making a new widow/orphan/broken hyphen on page " .. pagenum)
+
+ local second_last_line = next_of_type(
+ potential_penalty,
+ hlist_id,
+ { subtype = line_subid, reverse = true }
+ )
+ second_last_line.list = colour_list(second_last_line.list, "failure")
+ end
+
+ last_line = copy_list(n)
+
+ last_line.list = colour_list(last_line.list, "moved")
+
+ -- Reinsert any inserts originally present in this moved line
+ local selected_inserts = get_inserts(last_line)
+ for _, insert in ipairs(selected_inserts) do
+ last(last_line).next = insert
+ end
+
+ -- Add back in the content from the next page
+ last(last_line).next = copy_list(tex_lists[contrib_head])
+
+ free_list(n.prev.prev.next)
+ n.prev.prev.next = nil
+
+ -- Set the content of the next page
+ free_list(tex_lists[contrib_head])
+ tex_lists[contrib_head] = last_line
+
+ return true
+end
+
+
+--- Replace the chosen paragraph with its expanded version.
+---
+--- This is the "core function" of the module since it is what ultimately causes
+--- the expansion to occur.
+---
+--- @param head node
+--- @param paragraph_index number
+local function replace_paragraph(head, paragraph_index)
+ -- Remove any inserts. They are completely ignored after
+ -- the page has been broken, but they can upset LuaMetaLaTeX if
+ -- they're found somewhere unexpected.
+ local target_node, last_target_node
+ for n in traverse(paragraphs[paragraph_index].node) do
+ -- Just removing the inserts from the list doesn't work properly,
+ -- so we instead copy over everything that isn't an insert.
+ if n.id ~= insert_id then
+ if not target_node then
+ target_node = copy(n)
+ last_target_node = target_node
+ else
+ last_target_node.next = copy(n)
+ last_target_node = last_target_node.next
+ end
+ end
+ end
+
+ local start_found = false
+ local end_found = false
+ local free_nodes_begin
+
+ -- Loop through all of the nodes on the page with the \lwc/ attribute
+ local n = head
+ while n do
+ local value
+ value, n = find_attribute(n, paragraph_attribute)
+
+ if not n then
+ break
+ end
+
+ debug("remove_widows", "found " .. value)
+
+ -- Insert the start of the replacement paragraph
+ if value == paragraph_index + (PAGE_MULTIPLE * pagenum) or
+ value == paragraph_index + (PAGE_MULTIPLE * pagenum) + SINGLE_LINE
+ then
+ debug("remove_widows", "replacement start")
+ start_found = true
+
+ -- Fix the `\\baselineskip` glue between paragraphs
+ height_difference = (
+ next_of_type(n, hlist_id, { subtype = line_subid }).height -
+ next_of_type(
+ target_node, hlist_id, { subtype = line_subid }
+ ).height
+ )
+
+ local prev_bls = next_of_type(
+ n,
+ glue_id,
+ { subtype = baselineskip_subid, reverse = true }
+ )
+
+ if prev_bls then
+ prev_bls.width = prev_bls.width + height_difference
+ end
+
+ n.prev.next = target_node
+ free_nodes_begin = n
+ end
+
+ -- Insert the end of the replacement paragraph
+ if value == -(paragraph_index + (PAGE_MULTIPLE * pagenum)) or
+ value == paragraph_index + (PAGE_MULTIPLE * pagenum) + SINGLE_LINE
+ then
+ debug("remove_widows", "replacement end")
+ end_found = true
+
+ local target_node_last = last(target_node)
+
+ if grid_mode_enabled() then
+ -- Account for the difference in depth
+ local after_glue = new_node("glue")
+ after_glue.width = n.depth - target_node_last.depth
+ target_node_last.next = after_glue
+
+ after_glue.next = n.next
+ else
+ target_node_last.next = n.next
+ end
+
+ n.next = nil
+
+ break
+ end
+
+ n = n.next
+ end
+
+ if start_found and end_found then
+ free_list(free_nodes_begin)
+ else
+ warning("Paragraph NOT expanded on page " .. pagenum)
+ end
+end
+
+
+--- Remove the widows and orphans from the page, just after the output routine.
+---
+--- This is called just after the end of the output routine, before the page is
+--- shipped out. If the output penalty indicates that the page was broken at a
+--- widow or an orphan, we replace one paragraph with the same paragraph, but
+--- lengthened by one line. Then, we can push the bottom line of the page to the
+--- next page.
+---
+--- @param head node
+--- @return node
+function lwc.remove_widows(head)
+ debug("outputpenalty", tex.outputpenalty .. " " .. #paragraphs)
+
+ -- See if there is a widow/orphan for us to remove
+ if not lwc.should_remove_widows(tex.outputpenalty, paragraphs, head) then
+ reset_state()
+ return head
+ end
+
+ info("Widow/orphan/broken hyphen detected. Attempting to remove")
+
+ -- Nothing that we can do if there aren't any paragraphs available to expand
+ if #paragraphs == 0 then
+ debug("failure", "no paragraphs to expand")
+ remove_widows_fail()
+ return head
+ end
+
+ -- Check the original height of \\box255
+ local vsize = tex_dimen.vsize
+ local orig_vpack = vpack(head)
+ local orig_height_diff = orig_vpack.height - vsize
+ orig_vpack.list = nil
+ free(orig_vpack)
+
+ -- Find the paragraph to expand
+ local paragraph_index = best_paragraph(head)
+
+ if not paragraph_index then
+ debug("failure", "no good paragraph")
+ remove_widows_fail()
+ return head
+ end
+
+ -- Move the last line of the page to the next page
+ if not move_last_line(head) then
+ debug("failure", "can't move last line")
+ remove_widows_fail()
+ return head
+ end
+
+ -- Replace the chosen paragraph with its expanded version
+ replace_paragraph(head, paragraph_index)
+
+ -- The final \\box255 needs to be exactly \\vsize tall to avoid
+ -- over/underfull box warnings, so we correct any discrepancies
+ -- here.
+ local new_vpack = vpack(head)
+ local new_height_diff = new_vpack.height - vsize
+ new_vpack.list = nil
+ free(new_vpack)
+ -- We need the original height discrepancy in case there are \\vfill's
+ local net_height_diff = orig_height_diff - new_height_diff
+ local bls = tex.skip.baselineskip
+ local bls_width = bls.width
+ free(bls)
+
+ if abs(net_height_diff) > 0 and
+ -- A difference larger than 0.25\\baselineskip is probably not from
+ -- \lwc/, so we let those warnings surface
+ abs(net_height_diff) < bls_width / 4
+ then
+ local bottom_glue = new_node("glue")
+ bottom_glue.width = net_height_diff
+ last(head).next = bottom_glue
+ end
+
+ info(
+ "Widow/orphan/broken hyphen successfully removed at paragraph "
+ .. paragraph_index
+ .. " on page "
+ .. pagenum
+ )
+
+ reset_state()
+
+ return head
+end
+
+
+local show_costs = false
+--- Add the paragraph to the list of paragraphs on the page.
+---
+--- Called immediately before the page is shipped out so that we can get
+--- the costs on the correct side in multi-column layouts.
+---
+--- To evenly align all of the costs in the margins, we need to know the
+--- the exact position of the start and end of the paragraph on the page.
+--- This is surprisingly complicated.
+---
+--- @param head node The box to be shipped out
+--- @return true
+function lwc.show_costs (head)
+ if not show_costs then
+ return true
+ end
+
+ local pagewidth = tex.pagewidth or layouts.getpagedimensions()
+
+ --- Loop over each sublist, add up the total width, and show the costs.
+ ---
+ --- @param n node The node to loop over
+ --- @param width number The accumulated width so far
+ --- @param parent node The parent node of the current list
+ --- @return nil
+ local function recurse(n, width, parent)
+ for m in traverse(n) do
+ -- Anything with an \\hbox parent and a width is actual width.
+ -- (If it had a \\vbox parent, then n.width would actually be height.)
+ local self_width = 0
+ if m.id == glue_id and parent.id == hlist_id then
+ self_width = effective_glue(m, parent)
+ elseif m.width and parent.id == hlist_id then
+ self_width = m.width
+ end
+
+ -- A node's "shift" attribute is horizontal only if the parent is
+ -- a \\vbox. This corresponds to the primatives \\moveleft and
+ -- \\moveright. (If the parent is a \\hbox, then n.shift is
+ -- vertical and corresponds to \\raise.)
+ local shift = 0
+ if m.shift and
+ (parent.id == vlist_id or
+ not is_node(parent))
+ then
+ shift = m.shift
+ end
+
+ width = width + self_width
+
+ local attr = get_attribute(m, paragraph_attribute)
+ if attr and abs(attr) % PAGE_MULTIPLE >= SINGLE_LINE then
+ attr = -1 * (abs(attr) - SINGLE_LINE)
+ end
+
+ local cost = costs[abs(attr or 0)]
+
+ if attr and attr < 0 and cost and m.list then
+ -- We've found the end of a marked paragraph!
+
+ -- Generate the \\hbox containing the formatted cost
+ local cost_str
+ if not cost then
+ return
+ elseif cost < math.maxinteger then
+ cost_str = str_format("%.0f", cost)
+ else
+ cost_str = "infinite"
+ end
+
+ local prev, first
+ for letter in cost_str:gmatch(".") do
+ local curr = new_node("glyph")
+ curr.font = SMALL_FONT
+ curr.char = str_byte(letter)
+
+ if not first then
+ first = curr
+ else
+ prev.next = curr
+ end
+ prev = curr
+ end
+
+ local text = hpack(colour_list(first, "cost"))
+
+ -- Make an \\hss to make sure that our `\\hbox`es aren't overfull
+ local hss = new_node("glue")
+ hss.stretch = 1
+ hss[stretch_order] = 1
+ hss.shrink = 1
+ hss[shrink_order] = 1
+
+ local hbox
+ local offset = new_node("glue")
+
+ if (width >= pagewidth / 2) or
+ (m.width >= 0.4 * pagewidth)
+ then -- Right column or single-column
+ -- Costs in the right margin
+ offset.width = (
+ pagewidth -
+ width -
+ m.width -
+ shift -
+ tex_dimen[draft_offset]
+ )
+ text.next = hss
+ hbox = hpack(text, 0, "exactly")
+ else -- Left column
+ -- Costs in the left margin
+ offset.width = (
+ tex_dimen[draft_offset] -
+ m.width -
+ width -
+ shift
+ )
+ hss.next = text
+ hbox = hpack(hss, 0, "exactly")
+ end
+
+ last(m.list).next = offset
+ offset.next = hbox
+ elseif m.list then
+ recurse(m.list, width - self_width + shift, m)
+ end
+ end
+ end
+
+ -- Start at the root of the page
+ recurse(head.list, (tex.hoffset or 0) + horigin, {})
+
+ -- LaTeX requires us to always return true here
+ return true
+end
+
+
+--- Create a table of functions to enable or disable a given callback
+---
+--- @param t table Parameters of the callback to create
+--- callback: string = The \LuaTeX{} callback name
+--- func: function = The function to call
+--- name: string = The name/ID of the callback
+--- category: string = The category for a \ConTeXt{} "Action"
+--- position: string = The "position" for a \ConTeXt{} "Action"
+--- lowlevel: boolean = If we should use a lowlevel \LuaTeX{} callback
+--- instead of a \ConTeXt{} "Action"
+--- @return table t Enablers/Disablers for the callback
+--- enable: function = Enable the callback
+--- disable: function = Disable the callback
+local function register_callback(t)
+ if plain or latex then -- Both use \LuaTeX{}Base for callbacks
+ return {
+ enable = function()
+ luatexbase.add_to_callback(t.callback, t.func, t.name)
+ end,
+ disable = function()
+ luatexbase.remove_from_callback(t.callback, t.name)
+ end,
+ }
+ elseif context and not t.lowlevel then
+ return {
+ -- Register the callback when the table is created,
+ -- but activate it when `enable()` is called.
+ enable = nodes.tasks.appendaction(t.category, t.position, "lwc." .. t.name)
+ or function()
+ nodes.tasks.enableaction(t.category, "lwc." .. t.name)
+ end,
+ disable = function()
+ nodes.tasks.disableaction(t.category, "lwc." .. t.name)
+ end,
+ }
+ elseif context and t.lowlevel then
+ -- Some of the callbacks in \ConTeXt{} have no associated "actions".
+ -- Unlike with \LuaTeX{}base, \ConTeXt{} leaves some \LuaTeX{} callbacks
+ -- unregistered and unfrozen. Because of this, we need to register some
+ -- callbacks at the engine level. This is fragile though, because a
+ -- future \ConTeXt{} update may decide to register one of these
+ -- functions, in which case \lwc/ will crash with a cryptic error
+ -- message.
+ return {
+ enable = function() callback.register(t.callback, t.func) end,
+ disable = function() callback.register(t.callback, nil) end,
+ }
+ elseif optex then -- Op\TeX{} is luckily very similar to luatexbase
+ return {
+ enable = function()
+ callback.add_to_callback(t.callback, t.func, t.name)
+ end,
+ disable = function()
+ callback.remove_from_callback(t.callback, t.name)
+ end,
+ }
+ end
+end
+
+
+-- Add all of the callbacks
+lwc.callbacks = {
+ disable_box_warnings = register_callback({
+ callback = "hpack_quality",
+ func = function() end,
+ name = "disable_box_warnings",
+ lowlevel = true,
+ }),
+ remove_widows = register_callback({
+ callback = "pre_output_filter",
+ func = lwc.remove_widows,
+ name = "remove_widows",
+ lowlevel = true,
+ }),
+ save_paragraphs = register_callback({
+ callback = "pre_linebreak_filter",
+ func = lwc.save_paragraphs,
+ name = "save_paragraphs",
+ category = "processors",
+ position = "after",
+ }),
+ mark_paragraphs = register_callback({
+ callback = "post_linebreak_filter",
+ func = lwc.mark_paragraphs,
+ name = "mark_paragraphs",
+ category = "finalizers",
+ position = "after",
+ }),
+ show_costs = register_callback({
+ callback = "pre_shipout_filter",
+ func = lwc.show_costs,
+ name = "show_costs",
+ category = "shipouts",
+ position = "finishers",
+ }),
+}
+
+
+local lwc_enabled = false
+--- Enables the paragraph callbacks
+function lwc.enable_callbacks()
+ debug("callbacks", "enabling")
+ if not lwc_enabled then
+ lwc.callbacks.save_paragraphs.enable()
+ lwc.callbacks.mark_paragraphs.enable()
+
+ lwc_enabled = true
+ else
+ info("Already enabled")
+ end
+end
+
+
+--- Disables the paragraph callbacks
+function lwc.disable_callbacks()
+ debug("callbacks", "disabling")
+ if lwc_enabled then
+ lwc.callbacks.save_paragraphs.disable()
+ lwc.callbacks.mark_paragraphs.disable()
+
+ -- We do *not* disable `remove_widows` callback, since we still want
+ -- to expand any of the previously-saved paragraphs if we hit an orphan
+ -- or a widow.
+ lwc_enabled = false
+ else
+ info("Already disabled")
+ end
+end
+
+function lwc.if_lwc_enabled()
+ debug("iflwc")
+ if lwc_enabled then
+ insert_token(iftrue)
+ else
+ insert_token(iffalse)
+ end
+end
+
+
+--- Mangles a macro name so that it's suitable for a specific format
+---
+--- @param name string The plain name
+--- @param args table<string> The TeX types of the function arguments
+--- @return string name The mangled name
+local function mangle_name(name, args)
+ if plain then
+ return "lwc@" .. name:gsub("_", "@")
+ elseif optex then
+ return "_lwc_" .. name
+ elseif context then
+ return "lwc_" .. name
+ elseif latex then
+ return "__lwc_" .. name .. ":" .. string_rep("n", #args)
+ end
+end
+
+
+--- Creates a TeX command that evaluates a Lua function
+---
+--- @param name string The name of the csname to define
+--- @param func function
+--- @param args table<string> The TeX types of the function arguments
+--- @return nil
+local function register_tex_cmd(name, func, args)
+ local scanning_func
+ name = mangle_name(name, args)
+
+ if not context then
+ local scanners = {}
+ for _, arg in ipairs(args) do
+ scanners[#scanners+1] = token['scan_' .. arg]
+ end
+
+ -- An intermediate function that properly "scans" for its arguments
+ -- in the \TeX{} side.
+ scanning_func = function()
+ local values = {}
+ for _, scanner in ipairs(scanners) do
+ values[#values+1] = scanner()
+ end
+
+ func(table.unpack(values))
+ end
+ end
+
+ if optex then
+ define_lua_command(name, scanning_func)
+ return
+ elseif plain or latex then
+ local index = luatexbase.new_luafunction(name)
+ lua.get_functions_table()[index] = scanning_func
+ token.set_lua(name, index)
+ elseif context then
+ interfaces.implement {
+ name = name,
+ public = true,
+ arguments = args,
+ actions = func
+ }
+ end
+end
+
+--[[ Make all of the \lwc/ Lua commands available from \TeX{}
+ ]]
+register_tex_cmd("if_enabled", lwc.if_lwc_enabled, {})
+register_tex_cmd("enable", lwc.enable_callbacks, {})
+register_tex_cmd("disable", lwc.disable_callbacks, {})
+register_tex_cmd(
+ "nobreak",
+ function(str)
+ lwc.nobreak_behaviour = str
+ end,
+ { "string" }
+)
+register_tex_cmd(
+ "debug",
+ function(str)
+ lwc.debug = str ~= "0" and str ~= "false" and str ~= "stop"
+ end,
+ { "string" }
+)
+register_tex_cmd(
+ "show_costs",
+ function(str)
+ show_costs = str ~= "0" and str ~= "false" and str ~= "stop"
+ end,
+ { "string" }
+)
+register_tex_cmd(
+ "show_colours",
+ function(str)
+ show_colours = str ~= "0" and str ~= "false" and str ~= "stop"
+ end,
+ { "string" }
+)
+register_tex_cmd(
+ "pre_shipout",
+ function(box)
+ luatexbase.call_callback('pre_shipout_filter', tex_box[box])
+ end,
+ { "int" }
+)
+
+--- Silence the luatexbase "Enabling/Removing <callback>" info messages
+---
+--- Every time that a paragraph is typeset, \lwc/ hooks in
+--- and typesets the paragraph 1 line longer. Some of these longer paragraphs
+--- will have pretty bad badness values, so TeX will issue an over/underfull
+--- hbox warning. To block these warnings, we hook into the `hpack_quality`
+--- callback and disable it so that no warning is generated.
+---
+--- However, each time that we enable/disable the null `hpack_quality` callback,
+--- luatexbase puts an info message in the log. This completely fills the log file
+--- with useless error messages, so we disable it here.
+---
+--- This uses the Lua `debug` library to internally modify the log upvalue in the
+--- `add_to_callback` function. This is almost certainly a terrible idea, but I
+--- don't know of a better way to do it.
+---
+--- @return nil
+local function silence_luatexbase()
+ local nups = debug_lib.getinfo(luatexbase.add_to_callback).nups
+
+ for i = 1, nups do
+ local name, func = debug_lib.getupvalue(luatexbase.add_to_callback, i)
+ if name == "luatexbase_log" then
+ debug_lib.setupvalue(
+ luatexbase.add_to_callback,
+ i,
+ function(text)
+ if text:match("^Inserting") or text:match("^Removing") then
+ return
+ else
+ func(text)
+ end
+ end
+ )
+ return
+ end
+ end
+end
+
+
+-- Call `silence_luatexbase` in Plain and LaTeX, unless the undocmented global
+-- `LWC_NO_DEBUG` is set. We provide this opt-out in case something goes awry
+-- with the `debug` library calls.
+if (plain or latex) and
+ not LWC_NO_DEBUG --- @diagnostic disable-line
+then
+ silence_luatexbase()
+end
+
+-- Register colours for ConTeXt
+if context then
+ for colour, values in pairs(lwc.colours) do
+ attributes.colors.defineprocesscolor(
+ "lwc_" .. colour,
+ str_format("r=%.2f, g=%.2f, b=%.2f", table.unpack(values))
+ )
+ end
+end
+
+-- Activate \lwc/
+lwc.callbacks.remove_widows.enable()
+lwc.callbacks.show_costs.enable()
+
+return lwc
+
diff --git a/macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.tex b/macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.tex
new file mode 100644
index 0000000000..e25342ee4b
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/luatex/lua-widow-control/lua-widow-control.tex
@@ -0,0 +1,119 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\wlog{lua-widow-control v3.0.0} %%version
+
+\ifx\directlua\undefined
+ \errmessage{%
+ LuaTeX is required for this package.
+ Make sure to compile with `luatex'%
+ }
+\fi
+
+\catcode`@=11
+
+% We need to change some code if we're using LuaMetaTeX
+\def\lwc@iflmtx{\ifnum\luatexversion>200\relax}
+
+\input ltluatex % \LuaTeX{}Base
+
+\clubpenalty=1
+\widowpenalty=1
+\displaywidowpenalty=1
+\brokenpenalty=1
+
+\newdimen\lwcemergencystretch
+\lwcemergencystretch=3em
+
+\newdimen\lwcdraftoffset
+\lwcdraftoffset=1in
+
+\newcount\lwcmaxcost
+\lwcmaxcost=2147483647
+
+\directlua{require "lua-widow-control"}
+
+% Here, we enable font expansion/contraction. It isn't strictly necessary for
+% \lwc/'s functionality; however, it is required for the
+% lengthened paragraphs to not have terrible spacing.
+\lwc@iflmtx\else
+ \expandglyphsinfont\the\font 20 20 5
+ \adjustspacing=2
+\fi
+
+% Enable \lwc/ by default when the package is loaded.
+\lwc@enable
+
+% Fix some strange LMTX bugs
+\lwc@iflmtx
+ \normalizelinemode=\numexpression\normalizelinemode bor 2\relax
+\fi
+
+
+% Expansion of some parts of the document, such as section headings, is quite
+% undesirable, so we'll disable \lwc/ for certain commands.
+
+% We should only reenable \lwc/ at the end if it was already enabled.
+\newcount\lwc@disable@count
+
+\def\lwc@patch@pre{%
+ \lwc@if@enabled%
+ \advance\lwc@disable@count by 1%
+ \lwc@disable%
+ \fi%
+}
+
+\def\lwc@patch@post{
+ \ifnum\lwc@disable@count>0%
+ \lwc@enable%
+ \advance\lwc@disable@count by -1%
+ \fi
+}
+
+\def\lwc@extractcomponents #1:#2->#3\STOP{%
+ \def\lwc@params{#2}%
+ \def\lwc@body{#3}%
+}
+
+\def\lwcdisablecmd#1{%
+ \ifdefined#1%
+ \expandafter\lwc@extractcomponents\meaning#1\STOP%
+ \begingroup%
+ \catcode`@=11%
+ \expanded{%
+ \noexpand\scantokens{%
+ \gdef\noexpand#1\lwc@params{%
+ \noexpand\lwc@patch@pre\lwc@body\noexpand\lwc@patch@post%
+ }%
+ }%
+ }%
+ \endgroup%
+ \fi%
+}
+
+\begingroup
+ \lwc@iflmtx\else
+ \suppressoutererror=1
+ \fi
+ \lwcdisablecmd{\beginsection} % Sectioning
+\endgroup
+
+% Make the commands public
+\let\lwcenable=\lwc@enable
+\let\lwcdisable=\lwc@disable
+\let\lwcdebug=\lwc@debug
+\def\lwcdraft#1{%
+ \lwc@show@costs{#1}%
+ \lwc@show@colours{#1}%
+}
+\let\lwcshowcosts=\lwc@show@costs
+\let\lwcshowcolours=\lwc@show@colours
+\let\iflwc=\lwc@if@enabled
+\let\lwcnobreak=\lwc@nobreak
+\let\lwcpreshipout=\lwc@pre@shipout
+
+
+\catcode`@=12
+\endinput
diff --git a/macros/context/contrib/context-lua-widow-control/tex/optex/lua-widow-control/lua-widow-control.opm b/macros/context/contrib/context-lua-widow-control/tex/optex/lua-widow-control/lua-widow-control.opm
new file mode 100644
index 0000000000..fa2be77863
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/optex/lua-widow-control/lua-widow-control.opm
@@ -0,0 +1,88 @@
+% lua-widow-control
+% https://github.com/gucci-on-fleek/lua-widow-control
+% SPDX-License-Identifier: MPL-2.0+
+% SPDX-FileCopyrightText: 2022 Max Chernoff
+
+\_codedecl\lwcenable{lua-widow-control <v3.0.0>} %%version
+\_namespace{lwc}
+
+\_clubpenalty=1
+\_widowpenalty=1
+\_displaywidowpenalty=1
+\_brokenpenalty=1
+
+\_newdimen\lwcemergencystretch
+\lwcemergencystretch=3em
+
+\_newdimen\lwcdraftoffset
+\lwcdraftoffset=1in
+
+\_newcount\lwcmaxcost
+\lwcmaxcost=2147483647
+
+\_directlua{require "lua-widow-control"}
+
+% Enable \lwc/ by default when the package is loaded.
+\.enable
+
+% Expansion of some parts of the document, such as section headings, is quite
+% undesirable, so we'll disable \lwc/ for certain commands.
+
+% We should only reenable \lwc/ at the end if it was already enabled.
+\_newcount\.disable_count
+
+\_def\.patch_pre{%
+ \.if_enabled%
+ \_advance\.disable_count by 1%
+ \.disable%
+ \_fi%
+}
+
+\_def\.patch_post{
+ \_ifnum\.disable_count>0%
+ \.enable%
+ \_advance\.disable_count by -1%
+ \_fi
+}
+
+\_def\.extractcomponents #1:#2->#3\STOP{%
+ \_def\.params{#2}%
+ \_def\.body{#3}%
+}
+
+\def\.disable_cmd#1{%
+ \_ifdefined#1%
+ \_ea\.extractcomponents\_meaning#1\STOP%
+ \_begingroup%
+ \_catcode`_=11%
+ \_expanded{%
+ \_noexpand\_scantokens{%
+ \_gdef\_noexpand#1\.params{%
+ \_noexpand\.patch_pre\.body\_noexpand\.patch_post%
+ }%
+ }%
+ }%
+ \_endgroup%
+ \_fi%
+}
+
+\.disable_cmd{\_printchap}
+\.disable_cmd{\_printsec}
+\.disable_cmd{\_printsecc}
+
+% Make the commands public
+\_let\lwcenable=\.enable
+\_let\lwcdisable=\.disable
+\_let\lwcdisablecmd=\.disable_cmd
+\_let\lwcdebug=\.debug
+\_def\lwcdraft#1{%
+ \.show_costs{#1}%
+ \.show_colours{#1}%
+}
+\_let\lwcshowcosts=\.show_costs
+\_let\lwcshowcolours=\.show_colours
+\_let\iflwc=\.if_enabled
+\_let\lwcnobreak=\.nobreak
+
+\_endnamespace
+\_endcode
diff --git a/macros/context/contrib/context-lucida-bright-support/VERSION b/macros/context/contrib/context-lucida-bright-support/VERSION
new file mode 100644
index 0000000000..b63ba696b7
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/VERSION
@@ -0,0 +1 @@
+0.9
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbma.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbma.tfm
new file mode 100644
index 0000000000..a1913ef9f5
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbma.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmad.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmad.tfm
new file mode 100644
index 0000000000..b8feb111e8
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmad.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmd.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmd.tfm
new file mode 100644
index 0000000000..9e3e64f617
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmd.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdi.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdi.tfm
new file mode 100644
index 0000000000..7241660155
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdi.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdo.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdo.tfm
new file mode 100644
index 0000000000..504a9ae7ec
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmdo.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbme.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbme.tfm
new file mode 100644
index 0000000000..ebfb71b2ed
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbme.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmi.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmi.tfm
new file mode 100644
index 0000000000..26183ad522
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmi.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmo.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmo.tfm
new file mode 100644
index 0000000000..2b7795bc0b
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmo.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmr.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmr.tfm
new file mode 100644
index 0000000000..770de67074
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmr.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbms.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbms.tfm
new file mode 100644
index 0000000000..cab85a7f81
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbms.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmsd.tfm b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmsd.tfm
new file mode 100644
index 0000000000..dc8cbbea79
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/fonts/tfm/yandy/luc/lbmsd.tfm
Binary files differ
diff --git a/macros/context/contrib/context-lucida-bright-support/tex/context/luc/type-luc.tex b/macros/context/contrib/context-lucida-bright-support/tex/context/luc/type-luc.tex
new file mode 100644
index 0000000000..4e405d36c5
--- /dev/null
+++ b/macros/context/contrib/context-lucida-bright-support/tex/context/luc/type-luc.tex
@@ -0,0 +1,386 @@
+
+\starttypescript [luc]
+ \definetypeface [luc][rm][serif][lucid][default][encoding=texnansi]
+ \definetypeface [luc][ss][sans][lucid][default][encoding=texnansi]
+ \definetypeface [luc][tt][mono][lucid][default][encoding=texnansi]
+ \definetypeface [luc][ttsans][monosans][lucid][default][encoding=texnansi]
+ \definetypeface [luc][cg][calligraphy][lucid][default][encoding=texnansi]
+ \definetypeface [luc][ca][casual][lucid][default][encoding=texnansi]
+ \definetypeface [luc][fx][fax][lucid][default][encoding=texnansi]
+ \definetypeface [luc][hw][handwriting][lucid][default][encoding=texnansi]
+ \definetypeface [luc][bl][blackletter][lucid][default][encoding=texnansi]
+ \definetypeface [luc][mm][math][lucid][default][encoding=texnansi]
+ \definetypeface [luc][mm][boldmath][lucid][default][encoding=texnansi]
+
+ % blackboard font accessed as:
+ \definefamilysynonym [luc][blackboard][ma]
+
+ % style names for parameters
+ \definefontstyle [bl,blackletter] [bl]
+ \definefontstyle [ca,casual] [ca]
+ \definefontstyle [fx,fax] [fx]
+ %\definefontstyle [sc,smallcaps] [sc] %%voorlopig SK
+ %\definefontstyle [scb,boldsmallcaps] [scb] %%Voorlopig SK
+
+ \definestyle [blackletter] [\bl] []
+ \definestyle [casual] [\ca] []
+ \definestyle [fax] [\fx] []
+% \definestyle [smallcaps] [\sc] []
+% \definestyle [boldsmallcaps] [\scb] []
+
+% \quittypescriptscanning %%doormij toegevoegd, SK
+
+\stoptypescript
+
+\starttypescript [serif,sans,mono,monosans,calligraphy,casual,handwriting,blackletter,fax] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [rm,ss,tt,ttsans,cg,ca,hw,bl,fx] [default]
+\stoptypescript
+
+\starttypescript [map] [lucid] [texnansi]
+ \loadmapfile[texnansi-yandy-luc.map]
+\stoptypescript
+
+\starttypescript [serif] [lucid] [default]
+ \definebodyfont [default] [rm]
+ [tf=Serif sa 1,
+ bf=SerifBold sa 1,
+ it=SerifItalic sa 1,
+ sl=SerifSlanted sa 1,
+ bi=SerifBoldItalic sa 1,
+ bs=SerifBoldSlanted sa 1,
+ sc=SerifCaps sa 1,
+ scb=SerifCapsBold sa 1] % bold smallcaps added
+\stoptypescript
+
+\starttypescript [serif] [lucid] [name]
+ \usetypescript[serif][fallback]
+ \definefontsynonym [Serif] [LucidaBright]
+ \definefontsynonym [SerifBold] [LucidaBright-Demi]
+ \definefontsynonym [SerifItalic] [LucidaBright-Italic]
+ \definefontsynonym [SerifSlanted] [LucidaBright-Oblique]
+ \definefontsynonym [SerifBoldItalic] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifBoldSlanted] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps]
+ \definefontsynonym [SerifCapsBold] [LucidaBrightSmallcaps-Demi]
+\stoptypescript
+
+\starttypescript [serif] [lucid] [texnansi]
+% \definefontsynonym [LucidaBright] [hlhr8y] [encoding=texnansi]
+% \definefontsynonym [LucidaBright-Demi] [hlhb8y] [encoding=texnansi]
+% \definefontsynonym [LucidaBright-DemiItalic] [hlhbi8y] [encoding=texnansi]
+% \definefontsynonym [LucidaBright-Italic] [hlhri8y] [encoding=texnansi]
+% \definefontsynonym [LucidaBrightSmallcaps] [hlhrc8y] [encoding=texnansi]
+% \definefontsynonym [LucidaBrightSmallcaps-Demi] [hlhbc8y] [encoding=texnansi]
+% \definefontsynonym [LucidaBright-Oblique] [hlhro8y] [encoding=texnansi]
+ \definefontsynonym [LucidaBright] [texnansi-lbr] [encoding=texnansi]
+ \definefontsynonym [LucidaBright-Demi] [texnansi-lbd] [encoding=texnansi]
+ \definefontsynonym [LucidaBright-DemiItalic] [texnansi-lbdi] [encoding=texnansi]
+ \definefontsynonym [LucidaBright-Italic] [texnansi-lbi] [encoding=texnansi]
+ \definefontsynonym [LucidaBrightSmallcaps] [texnansi-lbrsc] [encoding=texnansi]
+ \definefontsynonym [LucidaBrightSmallcaps-Demi] [texnansi-lbdsc] [encoding=texnansi]
+ \definefontsynonym [LucidaBright-Oblique] [texnansi-lbsl] [encoding=texnansi]
+\stoptypescript
+
+\starttypescript [sans] [lucid] [default]
+ \definebodyfont [default] [ss]
+ [tf=Sans sa 1,
+ bf=SansBold sa 1,
+ it=SansItalic sa 1,
+ sl=SansSlanted sa 1,
+ bi=SansBoldItalic sa 1,
+ bs=SansBoldSlanted sa 1,
+ sc=SansCaps sa 1,
+ scb=SansCapsBold sa 1] % bold smallcaps added
+\stoptypescript
+
+\starttypescript [sans] [lucid] [name]
+ \definefontsynonym [Sans] [LucidaSans]
+ \definefontsynonym [SansBold] [LucidaSans-Demi]
+ \definefontsynonym [SansItalic] [LucidaSans-Italic]
+ \definefontsynonym [SansSlanted] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldItalic] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansBoldSlanted] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansCaps] [LucidaSans]
+ \definefontsynonym [SansCapsBold] [LucidaSans-Demi]
+\stoptypescript
+
+\starttypescript [sans] [lucid] [texnansi]
+% \definefontsynonym [LucidaSans] [hlsr8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-Demi] [hlsb8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-DemiItalic] [hlsbi8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-Italic] [hlsri8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-Bold] [hlsu8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-BoldItalic] [hlsui8y] [encoding=texnansi]
+ \definefontsynonym [LucidaSans] [texnansi-lsr] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-Demi] [texnansi-lsd] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-DemiItalic] [texnansi-lsdi] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-Italic] [texnansi-lsi] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-Bold] [texnansi-lsb] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-BoldItalic] [texnansi-lsbi] [encoding=texnansi]
+\stoptypescript
+
+\starttypescript [mono] [lucid] [default]
+ \definebodyfont [default] [tt]
+ [tf=Mono sa 1,
+ bf=MonoBold sa 1,
+ it=MonoItalic sa 1,
+ sl=MonoSlanted sa 1,
+ bi=MonoBoldItalic sa 1,
+ bs=MonoBoldSlanted sa 1,
+ sc=MonoCaps sa 1,
+ scb=MonoCapsBold sa 1] % bold smallcaps added
+\stoptypescript
+
+\starttypescript [mono] [lucid] [name]
+ \definefontsynonym [Mono] [LucidaTypewriter]
+ \definefontsynonym [MonoBold] [LucidaTypewriterBold]
+ \definefontsynonym [MonoItalic] [LucidaTypewriterOblique]
+ \definefontsynonym [MonoSlanted] [LucidaTypewriterOblique]
+ \definefontsynonym [MonoBoldItalic] [LucidaTypewriterBoldOblique]
+ \definefontsynonym [MonoBoldSlanted] [LucidaTypewriterBoldOblique]
+ \definefontsynonym [MonoCaps] [LucidaTypewriter]
+ \definefontsynonym [MonoCapsBold] [LucidaTypewriterBold]
+\stoptypescript
+
+\starttypescript [mono] [lucid] [texnansi]
+% \definefontsynonym [LucidaTypewriter] [hlcrt8y]
+% \definefontsynonym [LucidaTypewriterBold] [hlcbt8y]
+% \definefontsynonym [LucidaTypewriterOblique] [hlcrot8y]
+% \definefontsynonym [LucidaTypewriterBoldOblique] [hlcbot8y]
+ \definefontsynonym [LucidaTypewriter] [texnansi-lbtr]
+ \definefontsynonym [LucidaTypewriterBold] [texnansi-lbtb]
+ \definefontsynonym [LucidaTypewriterOblique] [texnansi-lbto]
+ \definefontsynonym [LucidaTypewriterBoldOblique] [texnansilbtbo]
+\stoptypescript
+
+\starttypescript [monosans] [lucid] [default]
+ \definebodyfont [default] [ttsans]
+ [tf=SansMono sa 1,
+ it=SansMonoItalic sa 1,
+ bf=SansMonoBold sa 1,
+ sl=SansMonoSlanted sa 1,
+ bi=SansMonoBoldItalic sa 1,
+ bs=SansMonoBoldSlanted sa 1,
+ sc=SansMonoCaps sa 1,
+ scb=SansMonoCapsBold sa 1] % bold smallcaps added
+\stoptypescript
+
+\starttypescript [monosans] [lucid] [name]
+ \definefontsynonym [SansMono] [LucidaSans-Typewriter]
+ \definefontsynonym [SansMonoBold] [LucidaSans-TypewriterBold]
+ \definefontsynonym [SansMonoItalic] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [SansMonoSlanted] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [SansMonoBoldItalic] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [SansMonoBoldSlanted] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [SansMonoCaps] [LucidaSans-Typewriter]
+ \definefontsynonym [SansMonoCapsBold] [LucidaSans-TypewriterBold]
+\stoptypescript
+
+\starttypescript [monosans] [lucid] [texnansi]
+% \definefontsynonym [LucidaSans-Typewriter] [hlsrt8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-TypewriterBold] [hlsbt8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-TypewriterBoldOblique] [hlsbot8y] [encoding=texnansi]
+% \definefontsynonym [LucidaSans-TypewriterOblique] [hlsrot8y] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-Typewriter] [texnansi-lstr] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-TypewriterBold] [texnansi-lstb] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-TypewriterBoldOblique] [texnansi-lstbo] [encoding=texnansi]
+ \definefontsynonym [LucidaSans-TypewriterOblique] [texnansi-lsto] [encoding=texnansi]
+\stoptypescript
+
+\starttypescript [calligraphy] [lucid] [default]
+ \definebodyfont [default] [cg]
+ [tf=Calligraphy sa 1]
+\stoptypescript
+
+\starttypescript [calligraphy] [lucid] [texnansi]
+ \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic]
+% \definefontsynonym [LucidaCalligraphy-Italic] [hlcrie8y] [encoding=texnansi]
+ \definefontsynonym [LucidaCalligraphy-Italic] [lbc] [encoding=texnansi]
+\stoptypescript
+
+\starttypescript [casual] [lucid] [default]
+ \definebodyfont [default] [ca]
+ [tf=Casual sa 1,
+ it=CasualItalic sa 1,
+ sc=CasualItalic sa 1]
+\stoptypescript
+
+\starttypescript [casual] [lucid] [texnansi]
+ \definefontsynonym [Casual] [LucidaCasual]
+ \definefontsynonym [CasualItalic] [LucidaCasual-Italic]
+\stoptypescript
+
+\starttypescript [casual] [lucid] [texnansi]
+% \definefontsynonym [LucidaCasual] [hlcrn8y] [encoding=texnansi]
+% \definefontsynonym [LucidaCasual-Italic] [hlcrin8y] [encoding=texnansi]
+ \definefontsynonym [LucidaCasual] [lbkr] [encoding=texnansi]
+ \definefontsynonym [LucidaCasual-Italic] [lbki] [encoding=texnansi]
+\stoptypescript
+
+\starttypescript [handwriting] [lucid] [default]
+ \definebodyfont [default] [hw]
+ [tf=Handwriting sa 1]
+\stoptypescript
+
+\starttypescript [handwriting] [lucid] [texnansi]
+ \definefontsynonym [Handwriting] [LucidaHandwriting-Italic]
+% \definefontsynonym [LucidaHandwriting-Italic] [hlcriw8y] [encoding=texnansi]
+ \definefontsynonym [LucidaHandwriting-Italic] [texnansi-lbh] [encoding=texnansi]
+\stoptypescript
+
+\starttypescript [blackletter] [lucid] [default]
+ \definebodyfont [default] [bl]
+ [tf=Blackletter sa 1]
+\stoptypescript
+
+\starttypescript [blackletter] [lucid] [texnansi]
+ \definefontsynonym [Blackletter] [LucidaBlackletter]
+% \definefontsynonym [LucidaBlackletter] [hlcrf8y] [encoding=texnansi]
+ \definefontsynonym [LucidaBlackletter] [texnansi-lbl] [encoding=texnansi]
+\stoptypescript
+
+\starttypescript [fax] [lucid] [default]
+ \definebodyfont [default] [fx]
+ [tf=Fax sa 1,
+ it=FaxItalic sa 1,
+ sl=FaxSlanted sa 1,
+ bf=FaxBold sa 1,
+ bi=FaxBoldItalic sa 1,
+ bs=FaxBoldSlanted sa 1,
+ sc=FaxCaps sa 1,
+ scb=FaxCapsBold sa 1]
+\stoptypescript
+
+\starttypescript [fax] [lucid] [name]
+ \definefontsynonym [Fax] [LucidaFax]
+ \definefontsynonym [FaxBold] [LucidaFax-Demi]
+ \definefontsynonym [FaxItalic] [LucidaFax-Italic]
+ \definefontsynonym [FaxSlanted] [LucidaFax-Italic]
+ \definefontsynonym [FaxBoldItalic] [LucidaFax-DemiItalic]
+ \definefontsynonym [FaxBoldSlanted] [LucidaFax-DemiItalic]
+ \definefontsynonym [FaxCaps] [LucidaFax]
+ \definefontsynonym [FaxCapsBold] [LucidaFax-Demi]
+\stoptypescript
+
+\starttypescript [fax] [lucid] [texnansi]
+% \definefontsynonym [LucidaFax] [hlxr8y] [encoding=texnansi]
+% \definefontsynonym [LucidaFax-Demi] [hlxb8y] [encoding=texnansi]
+% \definefontsynonym [LucidaFax-DemiItalic] [hlxbi8y] [encoding=texnansi]
+% \definefontsynonym [LucidaFax-Italic] [hlxri8y] [encoding=texnansi]
+ \definefontsynonym [LucidaFax] [texnansi-lfr] [encoding=texnansi]
+ \definefontsynonym [LucidaFax-Demi] [texnansi-lfd] [encoding=texnansi]
+ \definefontsynonym [LucidaFax-DemiItalic] [texnansi-lfdi] [encoding=texnansi]
+ \definefontsynonym [LucidaFax-Italic] [texnansi-lfi] [encoding=texnansi]
+\stoptypescript
+
+% The next typescripts define the math fonts
+
+\starttypescript [math,boldmath] [lucid] [special]
+% \usemathcollection[lbr]
+ \usemathcollection[luc] % For the time being an exact copy of lbr
+\stoptypescript
+
+\starttypescript [math] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [mm] [math]
+\stoptypescript
+
+\starttypescript [boldmath] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [mm] [boldmath]
+\stoptypescript
+
+\starttypescript [math] [lucid] [default]
+ \definebodyfont [default] [mm]
+ [mr=MathRoman mo 1,
+ ex=MathExtension mo 1,
+ mi=MathItalic mo 1,
+ sy=MathSymbol mo 1,
+ ma=MathAlpha mo 1,
+ mb=MathBeta mo 1]
+\stoptypescript
+
+\starttypescript [math] [lucid] [name]
+ \definefontsynonym [MathRoman] [LucidaBright]
+ \definefontsynonym [MathExtension] [LucidaNewMath-Extension]
+ \definefontsynonym [MathItalic] [LucidaNewMath-AltItalic]
+ \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol]
+ \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows]
+ \definefontsynonym [MathBeta] [LucidaNewMath-Roman]
+\stoptypescript
+
+\starttypescript [math] [lucid] [name]
+ \definefontsynonym [OldStyle] [MathItalic]
+ \definefontsynonym [Fraktur] [eufm10]
+ \definefontsynonym [Blackboard] [MathAlpha]
+ \definefontsynonym [Gothic] [eufm10]
+ \definefontsynonym [Calligraphic] [MathSymbol] % math caligraphic !
+\stoptypescript
+
+\starttypescript [math] [lucid] [texnansi,ec,8r]
+% \definefontsynonym [LucidaBright] [hlhr8y] [encoding=texnansi]
+% \definefontsynonym [LucidaNewMath-AltItalic] [hlcrima]
+% \definefontsynonym [LucidaNewMath-Arrows] [hlcra]
+% \definefontsynonym [LucidaNewMath-Extension] [hlcrv]
+% \definefontsynonym [LucidaNewMath-Roman] [hlcrm]
+% \definefontsynonym [LucidaNewMath-Italic] [hlcrim]
+% \definefontsynonym [LucidaNewMath-Symbol] [hlcry]
+% \definefontsynonym [LucidaBlackletter] [hlcrf8y]
+ \definefontsynonym [LucidaBright] [texnansi-lbr] [encoding=texnansi]
+ \definefontsynonym [LucidaNewMath-AltItalic] [lbmo]
+ \definefontsynonym [LucidaNewMath-Arrows] [lbma]
+ \definefontsynonym [LucidaNewMath-Extension] [lbme]
+ \definefontsynonym [LucidaNewMath-Roman] [lbmr]
+ \definefontsynonym [LucidaNewMath-Italic] [lbmi]
+ \definefontsynonym [LucidaNewMath-Symbol] [lbms]
+ \definefontsynonym [LucidaBlackletter] [texnansi-lbl] [encoding=texnansi]
+\stoptypescript
+
+
+\starttypescript [boldmath] [lucid] [default]
+ \definebodyfont [default] [mm]
+ [mrbf=MathRomanBold mo 1,
+ exbf=MathExtensionBold mo 1,
+ mibf=MathItalicBold mo 1,
+ sybf=MathSymbolBold mo 1,
+ mabf=MathAlphaBold mo 1,
+ mbbf=MathBetaBold mo 1]
+\stoptypescript
+
+\starttypescript [boldmath] [lucid] [name]
+ \definefontsynonym [MathRomanBold] [LucidaBright-Demi]
+ \definefontsynonym [MathExtensionBold] [LucidaNewMath-Extension]
+ \definefontsynonym [MathItalicBold] [LucidaNewMath-DemiItalic]
+ \definefontsynonym [MathItalicBold] [LucidaNewMath-AltDemiItalic]
+ \definefontsynonym [MathSymbolBold] [LucidaNewMath-Symbol-Demi]
+ \definefontsynonym [MathAlphaBold] [LucidaNewMath-Arrows-Demi]
+ \definefontsynonym [MathBetaBold] [LucidaNewMath-DemiBold]
+\stoptypescript
+
+\starttypescript [boldmath] [lucid] [texnansi,ec,8r]
+% \definefontsynonym [LucidaBright-Demi] [hlhb8y] [encoding=texnansi]
+% \definefontsynonym [LucidaNewMath-AltDemiItalic] [hlcdima]
+% \definefontsynonym [LucidaNewMath-Arrows-Demi] [hlcda]
+% \definefontsynonym [LucidaNewMath-Extension] [hlcrv]
+% \definefontsynonym [LucidaNewMath-DemiBold] [hlcdm]
+% \definefontsynonym [LucidaNewMath-DemiItalic] [hlcdim]
+% \definefontsynonym [LucidaNewMath-Symbol-Demi] [hlcdy]
+ \definefontsynonym [LucidaNewMath-AltDemiItalic] [lbmdo]
+ \definefontsynonym [LucidaNewMath-Arrows-Demi] [lbmad]
+ \definefontsynonym [LucidaNewMath-Extension] [lbme]
+ \definefontsynonym [LucidaNewMath-DemiBold] [lbmd]
+ \definefontsynonym [LucidaNewMath-DemiItalic] [lbmdi]
+ \definefontsynonym [LucidaNewMath-Symbol-Demi] [lbmsd]
+\stoptypescript
+
+\endinput
+
+
+
+
+
+
diff --git a/macros/context/contrib/context-rst/VERSION b/macros/context/contrib/context-rst/VERSION
deleted file mode 100644
index 58770f60c0..0000000000
--- a/macros/context/contrib/context-rst/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-0.6c
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/OMakefile b/macros/context/contrib/context-rst/doc/context/third/rst/OMakefile
deleted file mode 100644
index 72dccf472e..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/OMakefile
+++ /dev/null
@@ -1,41 +0,0 @@
-## Subdirectory omake makefile for the reStructuredText module
-## for Context. See the root OMakefile for details.
-## https://bitbucket.org/phg/context-rst/src/tip/OMakefile
-.PHONY: manual clean nuke
-
-name = manual
-
-manual_src = $(name).tex
-manual_rst = documentation.rst
-manual_pdf = $(name).pdf
-manual_tmp = doc.tex
-manual_junk[] = $(addprefix $(name), .tuc .log)
-manual_spam = $(name)-termout.log
-
-## The manual is itself written in reStructuredText. This leads to
-## a precarious situation: the module is required to be present in
-## order for the manual to be built. We’re going to have to find
-## some solution for smooth bootstrapping, but at the moment that’s
-## a low priority goal.
-$(manual_pdf): :effects: $(manual_tmp) $(manual_junk) $(manual_spam)
- rm -rf -- $(manual_spam)
- echo ":: creating $(manual_tmp) from $(manual_rst)"
- mtxrun --script rst \
- --if=$(file $(manual_rst)) \
- --of=$(manual_tmp) \
- &> $(manual_spam)
- echo ":: creating $@ from $(manual_src) and $(manual_tmp)"
- context --nonstopmode $(file $(manual_src)) &>> $(manual_spam)
-
-manual: $(manual_pdf)
-
-clean:
- rm -rf -- $(manual_junk) $(manual_tmp) $(manual_spam)
-
-nuke: clean
- rm -rf -- $(manual_pdf)
-
-## note to self: default targets in subdirectories will
-## lead to those targets being built whenever omake is
-## invoked without arguments from the root tree as well.
-#.DEFAULT: manual
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/OMakefile.omc b/macros/context/contrib/context-rst/doc/context/third/rst/OMakefile.omc
deleted file mode 100644
index c59ffb27d3..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/OMakefile.omc
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/documentation.rst b/macros/context/contrib/context-rst/doc/context/third/rst/documentation.rst
deleted file mode 100644
index 1571d34e05..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/documentation.rst
+++ /dev/null
@@ -1,689 +0,0 @@
-========================
-Features Not Implemented
-========================
-Nesting
-*******
-Proper nesting. So far only lists support real nested structures.
-There's no way you could have real paragraphs or bulleted lists
-inside table cells. The problem is that with true nesting some
-jobs like the dissection of tables would have to be moved from
-the formatter to the parser. If you feel you need thoroughly
-nested structures -- e.g. grid tables in footnotes or bullet lists
-inside simple tables inside enumerations inside quotations inside
-footnotes -- you should consider including |CONTEXT| code as
-substitution directives. (OTOH docutils' new and old LaTeX
-formatter seems to have problems with tables in footnotes as
-well. Not to mention its preference for enclosing random nested
-structures in ``quote``-environments.)
-
-Should you find yourself in desparate need of tables or whatever
-structures inside footnotes then I might agree to find a solution
-if you ask.
-
-Hyperlinks
-**********
-The hyperlink implementation should be fine in general use if you
-avoid certain situations.
-
-- Never ever call your hyperlink targets ``anon_#``, where ``#``
- stands for any integer. Just don't do it, OK? Great.
-
-- Referencing a structure element like a section heading by means
- of an *empty link block* does work. However, if the element in
- question requests a page break (e.g. the vanilla
- ``\chapter{#1}`` command), the reference will link to the
- previous page instead and become useless. You can avoid this
- behaviour by referencing the section directly or by targetting
- the first paragraph in the section instead.
-
-- Link chaining does not work with internal references. This is
- considered a low-priority bug and will be addressed during the
- next big hyperlink overhaul.
-
-=====
-Usage
-=====
-Invocation from the Command Line
-********************************
-|rstcontext| is integrated into the ``mtxrun`` command as a
-script, which relies, naturally, on the Lua interpreter of
-|LUATEX|. Therefore, |rstcontext| might not run at all on other
-Lua installations, at least not without modification of the
-source. Fortunately, every |CONTEXT| user is equipped with
-|LUATEX| nowadays so this dependency should be trivial.
-
-To generate |CONTEXT| code from a |rst| document named
-``infile.rst``, call ``mtxrun``: ::
-
- $mtxrun --script rst --if=infile.rst --of=outfile.tex
-
-You should now have a file ``outfile.tex`` that is ready to be
-run by |CONTEXT|. With some exceptions the generated code is
-downward compatible with MkII, thus it does not matter for a
-start whether you decide to test it with ``texexec`` or
-``context``.
-
-The resulting |TEX| file has rather a basic layout, if at all.
-This is intentional as you are expected to include it in a
-document after specifying your own setups.
-An example for prepended setups can be found in the environment
-for this manual (``mod/doc/context/third/rst/manual.tex``).
-
-.. caution::
- The output of |rstcontext| automatically inserts necessary
- setups for the components found in the input. Therefore, the
- ``\starttext`` and ``\stoptext`` commands are part of the
- output and may not be specified in your setups file.
- For now you have to use the |CONTEXT| command
- ``\appendtoks <token> \to \starttext`` to add content like
- title pages and indices to the result. This mechanism works
- reliable as long as you have an eye on the order in which the
- tokens are given. Again, have a look at ``manual.tex`` to get
- an impression how useful this can be. User hooks for these
- and other common constructs are thought of but have yet to be
- implemented.
-
-To build the documentation, first create a temporary directory
-somewhere safe. Then copy or symlink the Lua files from
-``mod/tex/context/third/rst/`` and the manual source there as
-well: ::
-
- $mkdir tmp; cd tmp
- $ln -s ../mod/doc/context/third/rst/documentation.rst .
-
-Now run |rstcontext| on the main documentation file as follows: ::
-
- $mtxrun --script rst --if=documentation.rst --of=doc.tex
-
-Now run |CONTEXT| on the layout file: ::
-
- $context ../mod/doc/context/third/rst/manual.tex
-
-This will include the generated code after a couple of setups --
-voilà, you have successfully built ``manual.pdf``. (Note that the
-commands you have to issue in each of the steps vary across
-different OS. In the literal form the example might only work on
-Linux or POSIX compliant systems.)
-
-Module
-******
-
-A provisional module for MkIV is included (``t-rst.mkiv``).
-Actually, the converter was thought of as a module for direct
-rendering of |rst| input initially, but certain objections
-diverted me from this path.
-
-- *Typography*. It’s all about the details. No matter how good your
- converter is, auto-generated code will not reach |TEX|’s
- omnipotence and flexibility. |rstcontext| is a tool to
- generate raw material for your typesetting job, not a
- typesetting system in itself.
-
-- *Testing*. Never underestimate the insights gained from reading
- the resulting |CONTEXT| file. Quite some effort has been
- undertaken to make it human-readable, especially the setups.
-
-- *MkII*. I’m not an MkII user at all, and compatibility with
- it is not a primary objective for |rstcontext|.
- However, an effort has been made to keep the output essentially
- MkII clean. Do not expect Unicode to work without
- precautions.
-
-During the development readability of the generated code was
-alway one of the main goals of |rstcontext|. Quite some computing
-effort is made to reflow even simple things as paragraphs into
-a shape understandable by more than only the |TEX| machine.
-If you should at one point decide that your project is
-ripe for the typographical finish and you want to add local
-changes in form of |TEX| code only, you should be able to use the
-output of |rstcontext| as starting point.
-
-However, using the module may have advantages when testing. There
-is a usage example in ``moduletest.tex``, introducing the macro
-``\\typesetRSTfile``. Another example in ``hybridtest.tex``
-demonstrates the |CONTEXT| command ``\\RST`` as well as the
-corresponding environment.
-
-To install the module simply copy the files into your local |TEX|
-tree, i.e. if the minimals reside in ``~/context/``, you would
-issue the following line: ::
-
- $cp -r ./mod/* ~/context/tex/texmf-local/
-
-Then rebuild the filename database running ``context
---generate``. The module should be ready for use now.
-
-RST projects
-************
-
-In addition to the simple command ``\\typesetRSTfile`` the module
-also provides means for handling multiple |rst| input files. This
-is achieved by so-called *inclusions*. An inclusion has to be
-defined first, using the macro ``\\defineRSTinclusion``, which
-receives up to three arguments in brackets. The first one
-specifies the *identifier* by which the inclusion will be
-referred to afterwards (cf. |CONTEXT|’s ``\\useURL`` command). The
-second argument, which is mandatory as well, takes the file to be
-associated with an inclusion. Finally, optional setups can be
-passed to the parser via the third argument (cf. the section on
-`Tabs`_). E.g.: ::
-
- \usemodule[rst]
- \defineRSTinclusion [first][inc-first.rst]
- \defineRSTinclusion[second][inc-second.rst][expandtab=true,shiftwidth=8]
- \defineRSTinclusion [third][inc-third.rst]
-
-Those inclusions are afterwards accessible *within* the
-``\\[start|stop]project`` environment, and can be dereferenced by
-``\\RSTinclusion``, which takes the identifier as a single
-argument in brackets: ::
-
- \startRSTproject
- \RSTinclusion [first]
- \RSTinclusion[second]
- \RSTinclusion [third]
- \stopRSTproject
-
-Within the project environment, |rstcontext| allows for arbitrary
-|CONTEXT| markup.
-
-=========
-Examples
-=========
-
-|rstcontext| was developed for the largest part by going through
-the |rst| specification_ step by step and tested against the
-examples given both in the spec and in the `quick reference`_.
-Therefore you should refer to those examples first (and drop me a
-note immediately if any of them stopped working).
-All kinds of text blocks and inline markup have been implemented
-with the exception of anything mentioned in the section on
-`Features Not Implemented`_.
-Some of them that I have not found a real-world usage for (such
-as *definition lists*) do not yet have a presentable output --
-there is room for improvements that should be supplied by
-somebody who actually uses those features.
-
-.. _specification: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html
-.. _quick reference: http://docutils.sourceforge.net/docs/user/rst/quickref.html
-
-Block Quotes
-************
-
-The *block quote* syntax is fully supported, including
-attributions. For instance, the next snippet: ::
-
- Some people have made the mistake of seeing Shunt’s work as a
- load of rubbish about railway timetables, but clever people
- like me, who talk loudly in restaurants, see this as a
- deliberate ambiguity, a plea for understanding in a
- mechanized world.
-
- --- Gavin Millarrrrrrrrrr on Neville Shunt
-
-gets you a neatly indented quotation, typeset in a slightly
-smaller font magnitude.
-
- Some people have made the mistake of seeing Shunt’s work as a
- load of rubbish about railway timetables, but clever people
- like me, who talk loudly in restaurants, see this as a
- deliberate ambiguity, a plea for understanding in a
- mechanized world.
-
- --- Gavin Millarrrrrrrrrr on Neville Shunt
-
-Don’t forget proper indentation.
-
-Numbered List
-*************
-
-Save for nesting lists are fully implemented in |rstcontext|.
-The following code typesets a triple-nested list with different
-kinds of bulleting / numbering: ::
-
- i. First order list, first entry.
-
- ii. First order list, second entry.
-
- iii. First order list, third entry.
-
- - Second order list, first entry.
-
- #. Third order list, first entry.
- #. Third order list, second entry.
- #. Third order list, third entry.
- Real nesting rules!
-
- - Second order list, second entry.
-
- iv. First order list, fourth entry.
-
- v. First order list, fifth entry.
-
-The result looks like this:
-
-i. First order list, first entry.
-
-ii. First order list, second entry.
-
-iii. First order list, third entry.
-
- - Second order list, first entry.
-
- #. Third order list, first entry.
- #. Third order list, second entry.
- #. Third order list, third entry.
- Real nesting rules!
-
- - Second order list, second entry.
-
-iv. First order list, fourth entry.
-
-v. First order list, fifth entry.
-
-.. caution::
- Don’t forget the blank lines between list items.
-
-Line Blocks
-***********
-
-Line blocks are a convenient environment for parts of the text
-that need to preserve line breaks and indentation. This makes it
-the first choice for most kinds of poems: ::
-
- | When does a dream begin?
- | Does it start with a goodnight kiss?
- | Is it conceived or simply achieved?
- | When does a dream begin?
- |
- | When does a dream begin?
- | Is it born in a moment of bliss?
- | Or is it begun when two hearts are one?
- | When does a dream exist?
- |
- | The vision of you appears somehow
- Impossible to resist
- | But I'm not imagining seeing you
- For who could have dreamed of this?
- |
- | When does a dream begin?
- | When reality is dismissed?
- | Or does it commence when we lose all pretence?
- | When does a dream begin?
-
-Indentation, continued lines, etc. should work out without
-problems:
-
-| When does a dream begin?
-| Does it start with a goodnight kiss?
-| Is it conceived or simply achieved?
-| When does a dream begin?
-|
-| When does a dream begin?
-| Is it born in a moment of bliss?
-| Or is it begun when two hearts are one?
-| When does a dream exist?
-|
-| The vision of you appears somehow
- Impossible to resist
-| But I'm not imagining seeing you
- For who could have dreamed of this?
-|
-| When does a dream begin?
-| When reality is dismissed?
-| Or does it commence when we lose all pretence?
-| When does a dream begin?
-
-
-==========
-Directives
-==========
-Admonitions
-************
-The following admonition directives have been implemented:
-
-Caution
--------
-The *caution* directive results in the text being prefixed by one
-“dangerous bend” symbol in order to resemble the “wizards only”
-passages of the TeXbook.
-For example, the directive: ::
-
- .. caution:: White mice do worse in experiments than grey mice.
-
-will result in the following:
-
-.. caution:: White mice do worse in experiments than grey mice.
-
-Danger
-------
-Similar to the *caution* directive, the *danger* directive
-prefixes the given text with two “dangerous bends” giving it the
-look of Knuths’s “esoteric” annotations.
-
-.. danger:: Be nice to the parser:
- Don’t forget to align paragraphs that end a literal
- block!
-
-
-Images
-******
-Including pictures is easy using the *image* directive: simply
-supply it the name of the image file as in ``.. image:: cow``.
-If the format is supported by |CONTEXT| the suffix can be
-neglected.
-
-The placement of images can be controlled via a set of optional
-arguments, each of which has to be specified on single line in
-``key: value`` style: ::
-
- .. image:: cow
- width: hsize
- caption: A generic Dutch cow.
-
-This will place your image somewhere close to the spot where you
-defined it. (The placement parameter to ``placefigure`` will be
-set to ``here`` by default.)
-
-.. image:: cow
- cow.pdf
- width: hsize
- alt: A generic Dutch cow (*bos primigenius taurus*).
-
-The supported parameters are ``width``
-(alias: ``size``), ``caption`` and ``scale``.
-The *width* parameter accepts the values ``hsize``
-(alias: ``fit``, ``broad``) or ``normal``.
-Alternatively, the *scale* parameter allows for arbitrary
-manipulation of the desired magnification; it defaults to ``1``
-(unscaled).
-The value passed as *caption* parameter will be used in as the
-caption text of the image.
-
-.. |CONTEXT| ctx:: \CONTEXT
-.. |TEX| ctx:: \TeX
-.. |PDFTEX| ctx:: \PDFTEX
-.. |LUATEX| ctx:: \LUATEX
-.. |rstcontext| ctx:: \bgroup\em rst\egroup\kern.5pt\CONTEXT
-.. |rst| ctx:: \bgroup\rm re\egroup\bgroup\ss Structured\egroup\bgroup\rm Text\egroup
-.. |LATEX| ctx:: \LATEX
-
-.. _outline: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html
-.. _docutils: http://docutils.sourceforge.net/
-.. _Pandoc: http://johnmacfarlane.net/pandoc/
-
-Containers
-**********
-
-Upon request |rstcontext| now supports another kind of
-directive, namely containers_.
-Due to their being defined explicitly in terms of HTML,
-*containers* lack a corresponding construct in |CONTEXT| (or
-|TEX| for that matter).
-Some parts of |CONTEXT| (e. g. ``\\framed``) come quite close with
-respect to functionality as well as generality.
-However, none of the candidates alone covers the entire spectrum
-of functionality that containers_ are supposed to.
-For that reason the implementation leaves them essentially
-undefined.
-
-If an explicit name is specified, then the ``container``
-directive maps to the environment of that name.
-Anonymous containers are interpreted as a |TEX| group.
-Any text block inside the element is treated as ordinary
-paragraph.
-In below example the content will be handled as if between
-``\\startxyzzy`` and ``\\stopxyzzy``, where it is up to the user to
-define the *xyzzy* environment::
-
- This is a paragraph.
-
- .. container:: xyzzy
-
- whatever
-
- foo **bar** baz
-
- This is another paragraph.
-
-The middle part translates to |CONTEXT| as follows::
-
- \start[xyzzy]%
- whatever
-
- foo {\sc bar} baz
- \stop
-
-Note that the ``\\start[foo]``/``\\stop``-environment is equivalent
-to ``\\startfoo``/``\\stopfoo``, except that the environment
-doesn’t actually need to be defined.
-
-.. caution::
- Support for the *container* directive is considered
- experimental.
- Suggestions for improving or extending the current
- implementation are always welcome.
-
-.. _containers: http://docutils.sourceforge.net/docs/ref/rst/directives.html#container
-
-=======================
-Substitution Directives
-=======================
-
-There are substitution directives for simple *replacing* and
-for insertion of |LUATEX|’s three languages: |mp|, Lua and,
-of course, |TEX|.
-
-.. |mp| replace:: \METAPOST
-
-Ordinary text replacement is done via the ``replace``
-substitution directive. E.g. in the main text you consistently
-use ``|replaceme|`` and have all its occurences substituted by
-``I wasn’t in the mood to write out this long sentence.``
-like in the next snippet:
-
-::
-
- .. |replaceme| replace::
- I wasn’t in the mood to write out this long sentence.
-
-The code insertions work similarly. You have to specify some
-phrase that gets substituted by the code you supply.
-E.g. this document accesses the fancy logos predefined in the
-|CONTEXT| core via substitutions: ::
-
- .. |CONTEXT| ctx:: \CONTEXT
- .. |LUATEX| ctx:: \LUATEX
-
-Etc. pp. The respective directive names are ``ctx``, ``mp`` and
-``lua``. In order to get a |circle| drawn on spot, you would
-define a Metapost substitution:
-
-::
-
- .. |circle| mp::
- fill fullcircle scaled(8) withcolor blue;
-
-================
-Special Features
-================
-Text Roles
-**********
-
-The default *role* for interpreted text is *emphasis*.
-
-The role marker provides explicit access to formatting commands.
-The formatting routine for inline literals can be called with the
-role marker :literal:`literal`, strong emphasis likewise is
-achieved via the role marker :literal:`strong_emphasis`.
-
-Other roles that lack an equivalent among inline markup are
-``bold``, :ss:`ss` (alias :literal:`sans_serif`),
-``uppercase``, ``lowercase`` and colors.
-Color roles begin with the string ``color_`` (the underscore is
-compulsive), followed by either the string ``rgb_`` or a
-`valid color name`__.
-An rgb vector is specified in decimal.
-Its values can be separated by either dashes or underscores.
-Thus, ``color_rgb_.3_.5_.8`` is a valid rgb expression, as is
-``color_rgb_0-1-0``.
-Unforturnately, the colon character ``:`` has to be escaped in
-color expressions, e.g. ``color_gray\:5``.
-
-__ http://wiki.contextgarden.net/Colors#Using_predefined_colors:_.5Csetupcolor
-
-For example, to give Mr. Neville Shunt’s work an apt
-typographic representation you can use these roles instead of
-the standard inline markup: ::
-
- :color_rgb_.9_.2_.7:`Chuff`, chuff, :literal:`chuffwoooooch`,
- woooooch! Sssssssss, sssssssss! :uppercase:`Diddledum`,
- `diddledum`, diddlealum. :literal:`Toot`, toot. The train
- :bold:`now` standing :color_gray\:5:`at` platform :ss:`eight,
- tch`, tch, :color_rgb_0-1-0:`tch`,
- :color_rgb_.5-.6-.2:`diddledum`, diddledum.
- :lowercase:`Chuffff`, :strong_emphasis:`chuffffiTff`
- eeeeeeeeeaaaaaaaaa :color_red:`Vooooommmmm`.
-
-which yields when passed through |rstcontext|:
-
-:color_rgb_.9_.2_.7:`Chuff`, chuff, :literal:`chuffwoooooch`,
-woooooch! Sssssssss, sssssssss! :uppercase:`Diddledum`,
-`diddledum`, diddlealum. :literal:`Toot`, toot. The train
-:bold:`now` standing :color_gray\:5:`at` platform :ss:`eight,
-tch`, tch, :color_rgb_0-1-0:`tch`,
-:color_rgb_.5-.6-.2:`diddledum`, diddledum. :lowercase:`Chuffff`,
-:strong_emphasis:`chuffffiTff` eeeeeeeeeaaaaaaaaa
-:color_red:`Vooooommmmm`.
-
-**************************
-Bibliography and Citations
-**************************
-
-.. caution::
- Not much for now concerning the usage of Taco’s bib system.
- It’s just that I use my own bibliography system and never
- became sufficiently familiar with the standard |CONTEXT|
- approach. *If you feel that the current support should be
- improved then feel free to contact me!* I will need somebody
- for testing.
-
-When |rstcontext| first encounters a citation (``[texbook]_``) it
-automatically looks up a bibliography in the working directory by
-the name of ``\jobname``. E.g. with a main file ``manual.tex``
-bibtex will use the database called ``manual.bib``. Symlinking
-your bibliography file in the local tree should suffice and you
-can keep whatever directory structure you prefer. (Speaking for
-myself, bib data usually resides in its own subdirectory, so I’d
-use symlinks, too.)
-
-****
-Tabs
-****
-The |rst| specification requests that tabs (ASCII no 9) be
-treated as spaces_. Converting your tabs to spaces might be a
-good preparation for an |rstcontext| run. However, as of version
-123 |rstcontext| comes with built-in tab expansion. It can be
-enabled by supplying an optional argument to the
-``typesetRSTfile`` command: ::
-
- \usemodule[rst]
- \typesetRSTfile[expandtab=true,shiftwidth=4]{myfile.rst}
-
-The argument ``expandtab`` triggers a prepocessing step which
-expands all tabulation characters (``\t`` and ``\v``) into the
-correct amount of spaces. Optionally, the tab stop distance can
-be configured using the ``shiftwidth`` parameter, which defaults
-to 4.
-
-.. _spaces: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#whitespace
-
-===================
-About this software
-===================
-
-The docutils_ provide means to translate the extra-convenient
-markup language |rst| into various formats like PDF, HTML and
-|LATEX|, unfortunately omitting the One True Macro System:
-|CONTEXT|.
-
-As far as I am aware of it, there is some support for |rst| in
-Pandoc_ but as it relies on a rather large set of dependencies it
-proved very difficult (too difficult for me) to install on my
-favourite distribution.
-From the `interactive demo`__ I gather that support for |rst|’s
-language features is not very extensive and the result did not
-even come with proper setups.
-Additionally, it’s written in a language I am not familiar with
-and that does not make use of one the most awesome features of
-all the the extended capabilities |LUATEX| provides: the Lua
-interpreter.
-
-For quite some time I was thinking about how to implement an
-|rst| parser in |LUATEX|, until some discussion__ emerged on the
-|CONTEXT| mailing list that indicates a broader interest in
-convenient markup languages across the community.
-As the alternatives mentioned above don’t meet the expectations
-of a normal |CONTEXT| user, the initial step to write
-|rstcontext| was done.
-Handling most of the corner cases and usability features of |rst|
-proved in the end not nearly as easy as I imagined.
-
-__ http://johnmacfarlane.net/pandoc/try
-__ http://archive.contextgarden.net/message/20100814.051917.28caafcd.en.html
-
-.. caution::
- |rstcontext| is experimental software and neither feature
- complete nor thoroughly commented. Keep this in mind before you
- start using it. Anything might still be subject to change, so
- expect breakage *in case you start relying on exceptional
- behaviour* (read: bugs) that does not conform to the |rst|
- specification. Consider filing a bug report instead and wait for
- me (the maintainer) to fix it, because regardless of how much
- testing I do myself I alway run into the weirdest issues only
- during the actual deployment of the software. Thus, if you notice
- that |rstcontext| does not adhere to the outline_ of |rst|
- according to the Docutils documentation, very likely you have
- discovered a corner case I was not aware of.
-
-.. |circle| mp::
- fill fullcircle scaled(8) withcolor blue;
-
-
-=======
-License
-=======
-
-::
-
- Copyright 2010-2014 Philipp Gesang. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, are permitted provided that the
- following conditions are met:
-
- 1. Redistributions of source code must retain the above
- copyright notice, this list of conditions and the
- following disclaimer.
-
- 2. Redistributions in binary form must reproduce the
- above copyright notice, this list of conditions and
- the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS''
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-.. vim:tw=65
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/hybridtest.tex b/macros/context/contrib/context-rst/doc/context/third/rst/hybridtest.tex
deleted file mode 100644
index bd509c04aa..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/hybridtest.tex
+++ /dev/null
@@ -1,42 +0,0 @@
-\usemodule[rst][test=yes]
-\setuphead[chapter][page=no,style=bold]
-
-\def\RSTCTX{{\em rst}\kern.5pt\CONTEXT}
-\def\reST{{\rm re}{\ss Structured}{\rm Text}}
-
-\starttext
-
-\chapter{\RSTCTX\ Hybrid Documents}
-
-This example demonstrates the macro \type{\RST} which can be used
-to process \reST\ markup directly in a normal \CONTEXT\ document.
-
-\RST{
--------------
-This Chapter,
--------------
-
-… for instance, was given entirely in *reST* markup. Naturally,
-there are some :bold:`drawbacks` to expect when mixing markups:
-directives and hyperlink targets that have already been specified
-somewhere above the current section will *stay* accessible in
-later passages until you redefine them. Also, certain letters
-need to be thoroughly escaped in order for them to make it
-through to the *reST*-parser, e.g. *\\\{* (<left brace>), and
-you’ll have to be inventive to make a backslash
-(*\\letterbackslash*) pass through the parser.
-
-}
-
-\startRST
-
--------------
-Alternatively
--------------
-you may always use the matching environment ``\\[start|stop]RST``
-if you prefer.
-
-\stopRST
-
-
-\stoptext
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/inc-first.rst b/macros/context/contrib/context-rst/doc/context/third/rst/inc-first.rst
deleted file mode 100644
index 392649f556..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/inc-first.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-=============
-First Chapter
-=============
-
-Mountaineer? *Mountaineer* where the devil are they, mound, mount... mountain...
-a mountaineer: ‘two men skilled in climbing mountains’. Jolly good, well you’re
-in. Congratulations, both of you.
-
-We’ll be leaving on January 22nd and taking the following routes. The A23s
-through Purleys down on the main roads near Purbrights avoiding Leatherheads and
-then taking the A231s entering Rottingdeans from the North. From Rottingdeans we
-go through Africa to Nairobis. We take the South road out of Nairobis for about
-twelve miles and then ask.
-
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/inc-second.rst b/macros/context/contrib/context-rst/doc/context/third/rst/inc-second.rst
deleted file mode 100644
index eff120e2d2..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/inc-second.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-==============
-Second Chapter
-==============
-Well Bruce, I heard the Prime Minister use it. S’hot enough to boil a monkey’s
-bum in ’ere, your Majesty, he said and she smiled quietly to herself.
-
-Now, Bruce teaches classical philosophy, Bruce teaches Hegelian philosophy, and
-Bruce here teaches logical positivism, and is also in charge of the sheepdip.
-
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/inc-third.rst b/macros/context/contrib/context-rst/doc/context/third/rst/inc-third.rst
deleted file mode 100644
index 67e6d5a2a8..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/inc-third.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-=============
-Third Chapter
-=============
-You are hereby charged that on the 28th day of May 1970, you did wilfully,
-unlawfully, and with malice aforethought publish an alleged English-Hungarian
-phrasebook with intent to cause a breach of the peace. How do you plead?
-
-Not guilty.
-
-I quote an example. The Hungarian phrase meaning ‘Can you direct me to the
-station?’ is translated by the English phrase, ‘Please fondle my bum’.
-
-I wish to plead incompetence.
-
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/inc.tex b/macros/context/contrib/context-rst/doc/context/third/rst/inc.tex
deleted file mode 100644
index 7703fae081..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/inc.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\usemodule[rst]
-
-\defineRSTinclusion [first][inc-first.rst]
-\defineRSTinclusion[second][inc-second.rst]
-\defineRSTinclusion [third][inc-third.rst]
-
-\startRSTproject
-\RSTinclusion [first]
-\RSTinclusion[second]
-\RSTinclusion [third]
-\stopRSTproject
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/manual.bib b/macros/context/contrib/context-rst/doc/context/third/rst/manual.bib
deleted file mode 100644
index 638ed80770..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/manual.bib
+++ /dev/null
@@ -1,10 +0,0 @@
-@BOOK{texbook,
- author = {Donald E. Knuth},
- title = {The \TEX book},
- year = {1984},
- address = {Reading, Mass. et. al.},
- location = {Reading, Mass. et. al.},
- series = {Computers and typesetting vol. 1},
- keywords = {all}
-}
-
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/manual.pdf b/macros/context/contrib/context-rst/doc/context/third/rst/manual.pdf
deleted file mode 100644
index 566347e1ea..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/manual.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/manual.tex b/macros/context/contrib/context-rst/doc/context/third/rst/manual.tex
deleted file mode 100644
index 6e30789ea6..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/manual.tex
+++ /dev/null
@@ -1,141 +0,0 @@
-\setuppapersize[A5][A5]
-
-\setupcombinedlist[content][interaction=all,]
-
-\setupinteraction[
- state=start,
- focus=standard,
- color=darkcyan,
- contrastcolor=\interactionparameter{color},
-]
-
-\setupindenting[yes,next,medium] % -> lead to the glue node error in mkiv
-
-\setuphead[chapter] [style={\rm\sc},before={\blank[line,force]},after={\blank[2*line,force]}]
-\setuphead[section] [style={\rm\it},before={\blank[line]} ,after={\blank[line]}]
-\setuphead[subsection][style={\rm},before={\blank[line]} ,after={\blank[line]}]
-
-\setupheads[indentnext=yes]
-\setupfloats[indentnext=yes]
-
-\setupbodyfont[latin-modern,10pt]
-\definefontfeature [textfigures] [onum=yes]
-\definefontfeature [liningfigures] [onum=no]
-\definefontfeature [texligatures] [tlig=yes]
-\definefontfeature [notexligatures] [tlig=yes]
-\addfs{textfigures,texligatures}
-
-\setuptyping[
- style={\addff{liningfigures,notexligatures}\ttx},
-]
-
-% title page
-\startbuffer[frontpage]
-\startstandardmakeup
-\raggedcenter
-\vfill
-{\setupbodyfont[,19pt]
-{\em Typesetting}
-\blank [2*big]
-{\tfc {\em re}{\ss Structured}{\em \kern-6ptText}}
-\blank [2*big]
-{\em with \CONTEXT}
-\blank [5*big]
-{\tfa A Manual for {\em rst}{\kern1pt\CONTEXT}}
-}
-\vfill
-\stopstandardmakeup
-\stopbuffer
-
-% additional information
-\startbuffer[author]
-\startstandardmakeup
-\vfill
-\framed [align=right,frame=off,topframe=on] {%
-\tfxx\ss\setupinterlinespace[small]\noindentation
-Copyright 2010--2014 Philipp Gesang, Tübingen.\par
-Mail any bug reports, patches or suggestions to\par
-\type{string.format("%s@%s.com", "phg42.2a", "gmail")}.\par
-Alternatively, pay a visit
-to \goto{my BitBucket handle}[url(http://bitbucket.org/phg/)]
-or \goto{my home page}[url(https://phi-gamma.net/coding)]
-\par
-}
-\stopstandardmakeup
-\stopbuffer
-
-
-% table of contents
-\startbuffer [toc]
-\setuppagenumbering[
- state=start,
- alternative=doublesided,
- location=,
-]
-\setuplayout [grid=no]
-\setuptolerance [verytolerant]
-\setuptolerance [vertical,verytolerant]
-
-\newdimen \mypagenumdistance \mypagenumdistance .7em
-\def\fillercmd{\nobreak\hskip\mypagenumdistance}
-
-\definelistplacement[my_list_placement][command]#1#2#3%
- {#2\fillercmd#3\hskip1.5em}
-
-\setuplist [chapter] [alternative=a,style=\word\sc]
-\setuplist [section] [alternative=my_list_placement,]
-
-\startsetups toc:subsection
- \noindentation\placelist[subsection]
-\stopsetups
-
-\startsetups toc:section
- \blank
- \setupnarrower [middle=9em,]
- \startnarrower[middle]\tfx
- \noindentation\placelist[section][after=\setups{toc:subsection}]
- \stopnarrower
- \blank
-\stopsetups
-
-\title{Contents}
-
-\placelist [chapter] [criterium=text,after=\setups{toc:section}]
-
-% \setupheadertexts
-% [{\tfx\sc\getmarking[chapter]}] [{\tfx\bf \pagenumber}]
-% [{\tfx\bf \pagenumber}] [{\tfx{\em rst}{\kern.5pt\CONTEXT}}]
-% \completecontent
-\stopbuffer
-
-% something radically changed in mkiv
-\startluacode
-jobvariables = job.variables or {}
-jobvariables.tobesaved = jobvariables.tobesaved or {}
-\stopluacode
-
-% list of publications
-\startbuffer[pubs]
-\setuplayout[grid=no]
-\setuptolerance[verytolerant]
-\setuptolerance[vertical,verytolerant]
-
-\completepublications
-\stopbuffer
-
-\appendtoks
- \startfrontmatter
- \getbuffer[frontpage]
- \getbuffer[author]
- \getbuffer[toc]
- \stopfrontmatter
-\to \everystarttext
-
-%\prependtoks \getbuffer[pubs] \to \everystoptext
-
-\setupwhitespace[none]
-\setuplayout[grid=verystrict]
-\setuptolerance[tolerant]
-\language[en]
-\setuppagenumbering[state=stop,location=]
-\input doc.tex
diff --git a/macros/context/contrib/context-rst/doc/context/third/rst/moduletest.tex b/macros/context/contrib/context-rst/doc/context/third/rst/moduletest.tex
deleted file mode 100644
index 76994e7b61..0000000000
--- a/macros/context/contrib/context-rst/doc/context/third/rst/moduletest.tex
+++ /dev/null
@@ -1,9 +0,0 @@
-%% Usage example
-% 1. load the module
-\usemodule[rst]
-% 2. add your setups
-\setuphead[chapter][page=no]
-\setupindenting[yes,medium,next]
-% 3. run the converter
-\typesetRSTfile{README.rst}
-
diff --git a/macros/context/contrib/context-rst/scripts/context/lua/third/rst/mtx-t-rst.lua b/macros/context/contrib/context-rst/scripts/context/lua/third/rst/mtx-t-rst.lua
deleted file mode 100644
index 6735b1dd7b..0000000000
--- a/macros/context/contrib/context-rst/scripts/context/lua/third/rst/mtx-t-rst.lua
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env texlua
---------------------------------------------------------------------------------
--- FILE: mtx-rst.lua
--- USAGE: mtxrun --script rst --if=input.rst --of=output.tex
--- DESCRIPTION: context script interface for the reStructuredText module
--- REQUIREMENTS: latest ConTeXt MkIV
--- AUTHOR: Philipp Gesang (Phg), <megas.kapaneus@gmail.com>
--- CHANGED: 2013-03-27 00:25:32+0100
---------------------------------------------------------------------------------
---
-
-scripts = scripts or { }
-scripts.rst = { }
-
-environment.loadluafile("rst_parser")
-
-local ea = environment.argument
-
-local helpinfo = [[
-===============================================================
- The reStructuredText module, command line interface.
- © 2010--2013 Philipp Gesang. License: 2-clause BSD.
- Home: <https://bitbucket.org/phg/context-rst/>
-===============================================================
-
-USAGE:
-
- mtxrun --script rst --if=input.rst --of=output.tex
-
-Mandatory arguments:
-
- “infile.rst” is your input file containing reST markup.
- “outfile.tex” is the target file that the TeX-code will be
- written to.
-
-Optional arguments:
- --et=bool “expandtab”, should tab chars (“\t”, “\v”) be
- converted to spaces?
- --sw=int “shiftwidth”, tab stop modulo factor.
-
-===============================================================
-]]
-
-local application = logs.application {
- name = "mtx-rst",
- banner = "The reStructuredText module for ConTeXt, hg-rev 125+",
- helpinfo = helpinfo,
-}
-
-scripts.rst.input = ea("if")
-scripts.rst.output = ea("of")
-
-if scripts.rst.input and scripts.rst.output then
- local expandtab = ea("et") == "true" and true
- local shiftwidth = ea("sw")
- local debug = ea("debug") == "true"
- if expandtab then thirddata.rst.expandtab = true end
- if shiftwdith then thirddata.rst.shiftwidth = tonumber(shiftwidth) end
- if debug then thirddata.rst_helpers.rst_debug = debug end
- thirddata.rst.standalone(scripts.rst.input, scripts.rst.output)
-else
- application.help()
-end
-
diff --git a/macros/context/contrib/context-rst/tex/context/interface/third/t-rst.xml b/macros/context/contrib/context-rst/tex/context/interface/third/t-rst.xml
deleted file mode 100644
index 68dcc1baf9..0000000000
--- a/macros/context/contrib/context-rst/tex/context/interface/third/t-rst.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands"
- name="context"
- language="en"
- version="0.6; 2013-03-27 00:26:22+0100">
-
- <cd:command name="typesetRSTfile" generated="no" file="t-rst.mkiv">
- <cd:sequence>
- <cd:variable value="typesetRSTfile"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes" optional="yes">
- <cd:parameter name="expandtab">
- <cd:constant type="false" default="false"/>
- <cd:constant type="true"/>
- </cd:parameter>
- <cd:parameter name="shiftwidth">
- <cd:constant type="cd:number" default="4"/>
- </cd:parameter>
- <cd:parameter name="stripBOM">
- <cd:constant type="false" default="false"/>
- <cd:constant type="true"/>
- </cd:parameter>
- </cd:assignments>
- <cd:content n="2" optional="no"/>
- </cd:arguments>
- </cd:command>
-
- <cd:command name="RST" generated="no" file="t-rst.mkiv">
- <cd:sequence>
- <cd:variable value="RST"/>
- </cd:sequence>
- <cd:arguments>
- <cd:content n="1" optional="no"/>
- </cd:arguments>
- </cd:command>
-
- <cd:command name="RST" generated="no" type="environment" file="t-rst.mkiv">
- <cd:sequence>
- <cd:variable value="RST"/>
- </cd:sequence>
- </cd:command>
-
- <cd:command name="RSTproject" generated="no" type="environment" file="t-rst.mkiv">
- <cd:sequence>
- <cd:variable value="RST"/>
- </cd:sequence>
- </cd:command>
-
- <cd:command name="defineRSTinclusion" generated="no" file="t-rst.mkiv">
- <cd:sequence>
- <cd:variable value="defineRSTinclusion"/>
- </cd:sequence>
- <cd:arguments>
- <cd:content n="1" optional="yes" name="id"/>
- <cd:content n="2" optional="yes" name="filename"/>
- <cd:assignments n="3" list="yes" optional="yes">
- <cd:parameter name="expandtab">
- <cd:constant type="false" default="false"/>
- <cd:constant type="true"/>
- </cd:parameter>
- <cd:parameter name="shiftwidth">
- <cd:constant type="cd:number" default="4"/>
- </cd:parameter>
- <cd:parameter name="stripBOM">
- <cd:constant type="false" default="false"/>
- <cd:constant type="true"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
- </cd:command>
-
- <cd:command name="RSTinclusion" generated="no" file="t-rst.mkiv">
- <cd:sequence>
- <cd:variable value="RSTinclusion"/>
- </cd:sequence>
- <cd:arguments>
- <cd:content n="1" optional="yes" name="id"/>
- </cd:arguments>
- </cd:command>
-
-</cd:interface>
diff --git a/macros/context/contrib/context-rst/tex/context/third/rst/rst_context.lua b/macros/context/contrib/context-rst/tex/context/third/rst/rst_context.lua
deleted file mode 100644
index 699064e572..0000000000
--- a/macros/context/contrib/context-rst/tex/context/third/rst/rst_context.lua
+++ /dev/null
@@ -1,1326 +0,0 @@
-#!/usr/bin/env texlua
---------------------------------------------------------------------------------
--- FILE: rst_context.lua
--- USAGE: called by rst_parser.lua
--- DESCRIPTION: Complement to the reStructuredText parser
--- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
--- CHANGED: 2013-03-26 22:46:17+0100
---------------------------------------------------------------------------------
---
---- TODO
---- Find an appropriate way to handle generic tables irrespective of the grid
---- settings. The problem is:
---- http://archive.contextgarden.net/message/20100912.112605.8a1aaf13.en.html
---- Seems we'll have to choose either the grid or split tables as default. Not
---- good.
-
-
-local helpers = helpers or thirddata and thirddata.rst_helpers
-local rst_directives = rst_directives or thirddata and thirddata.rst_directives
-
-local utf = unicode.utf8
-local utflen = utf.len
-local utflower = utf.lower
-local utfupper = utf.upper
-local iowrite = io.write
-local tableconcat = table.concat
-
-local stringgmatch = string.gmatch
-local stringgsub = string.gsub
-local stringmatch = string.match
-local stringsub = string.sub
-local stringformat = string.format
-
-local dbg_write = helpers.dbg_writef
-
-local C, Cb, Cc, Cg, Cmt, Cp,
- Cs, Ct, P, R, S, V, lpegmatch
- = lpeg.C, lpeg.Cb, lpeg.Cc, lpeg.Cg, lpeg.Cmt, lpeg.Cp,
- lpeg.Cs, lpeg.Ct, lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match
-
--- This one should ignore escaped spaces.
-do
- local stripper = P{
- [1] = "stripper",
- stripper = V"space"^0 * C((V"space"^0 * (V"escaped" + V"nospace")^1)^0),
- space = S(" \t\v\n"),
- nospace = 1 - V"space",
- escaped = P"\\" * V"space"
- }
- function string.strip(str)
- return lpegmatch(stripper, str) or ""
- end
-end
-local stringstrip = string.strip
-
-local err = function(str)
- if str then
- iowrite("\n*[rstctx] Error: " .. str .. "\n\n")
- end
-end
-
-local rst_context = thirddata.rst
-
-rst_context.collected_adornments = {}
-rst_context.last_section_level = 0
-rst_context.anonymous_targets = 0
-rst_context.anonymous_links = {}
-
-rst_context.collected_references = {}
-rst_context.context_references = {}
-rst_context.structure_references = {}
-rst_context.anonymous_set = {}
-
-rst_context.substitutions = {}
-rst_context.lastitemnumber = 0 -- enumerations in RST allow arbitrary skips
-
-rst_context.current_footnote_number = 0
-rst_context.current_symbolnote_number = 0
-
-function rst_context.addsetups(item)
- local state = rst_context.state
- state.addme[item] = state.addme[item] or true
- return 0
-end
-
-function rst_context.footnote_reference (label)
- local tf = rst_context.state.footnotes
- if stringmatch(label, "^%d+$") then -- all digits
- local c = tonumber(label)
- return [[\\footnote{\\getbuffer[__footnote_number_]].. c .."]}"
- elseif label == "#" then --autonumber
- local rc = rst_context.current_footnote_number
- rc = rc + 1
- rst_context.current_footnote_number = rc
- return [[\\footnote{\\getbuffer[__footnote_number_]].. rc .."]}"
- elseif stringmatch(label, "^#.+$") then
- local thelabel = stringmatch(label, "^#(.+)$")
- return [[\\footnote{\\getbuffer[__footnote_label_]].. thelabel .."]}"
- elseif label == "*" then
- local rc = rst_context.current_symbolnote_number
- rc = rc + 1
- rst_context.current_symbolnote_number = rc
- return [[\\symbolnote{\\getbuffer[__footnote_symbol_]].. rc .."]}"
- else -- “citation reference” for now treating them like footnotes
- rst_context.addsetups("citations")
- return [[\\cite{]] .. label .. [[}]]
- end
-end
-
-do
- local w = S" \v\t\n" / "_"
- local wp = Cs((w + 1)^1)
- function rst_context.whitespace_to_underscore(str)
- return str and lpegmatch(wp, str) or ""
- end
-end
-
---- So we can use crefs[n][2] to refer to the place where the reference was
---- created.
-local function get_context_reference (str)
- local crefs = rst_context.context_references
- local srefs = rst_context.structure_references
- srefs[str] = true
- refstring = "__target_" .. rst_context.whitespace_to_underscore(str)
- crefs[#crefs + 1] = { refstring, str }
- return refstring
-end
-
-function rst_context.emphasis (str)
- return [[{\\em ]] .. str .. [[}]]
-end
-
-function rst_context.strong_emphasis (str)
- return [[{\\sc ]] .. str .. [[}]]
-end
-
-function rst_context.literal (str)
- return [[\\type{]] .. str .. [[}]]
-end
-
---- ROLES for interpreted text
-
-rst_context.roles = {}
-rst_context.roles.emphasis = rst_context.emphasis
-rst_context.roles.strong_emphasis = rst_context.strong_emphasis
-rst_context.roles.literal = rst_context.literal
-rst_context.roles.bold = function(str)
- return [[{\\bold ]] .. str .. [[}]]
-end
-rst_context.roles.bf = rst_context.roles.bold
-
-rst_context.roles.italic = function(str)
- return [[{\\italic ]] .. str .. [[}]]
-end
-rst_context.roles.it = rst_context.roles.italic
-
-rst_context.roles.sans = function(str)
- return [[{\\ss ]] .. str .. [[}]]
-end
-rst_context.roles.sans_serif = rst_context.roles.sans
-rst_context.roles.ss = rst_context.roles.sans
-
-rst_context.roles.uppercase = function(str)
- return utfupper(str)
-end
-
-rst_context.roles.lowercase = function(str)
- return utflower(str)
-end
-
-rst_context.roles.color = function(color, str)
- local p = helpers.patterns
- local definition = stringmatch(color, "^color_(.+)$")
- if stringmatch(definition, "^rgb_") then -- assume rgb
- local rgb = lpegmatch(p.rgbvalues, definition)
- definition = stringformat([[r=%s,g=%s,b=%s]], rgb[1], rgb[2], rgb[3])
- end
- return stringformat([[\\colored[%s]{%s}]], definition, str)
-end
-
---------------------------------------------------------------------------------
---- Inofficial text roles for my private bib
---------------------------------------------------------------------------------
-
--- Afterthought:
--- Different citation commands are essentially typographical instructions:
--- they are concerned with the final representation of the data with respect to
--- a concrete implementation. Not the thing at all that would make reST
--- portable. But then its support for Python-style string escaping &c. ain’t at
--- all portable either. The problem is the same with XML written to be
--- processed with ConTeXt -- when processing the text directly in MkIV you’ll
--- always find yourself adding setups that allow fine-grained control of the
--- typeset output. At the same time those instructions directly contradict the
--- main reason for XML: to provide an application-independent data markup.
--- Typesetting XML (and now reST) with TeX, you will always end up writing TeX
--- code disguised in XML brackets. (Btw. the docutils reST specification has
--- the same kind of inclination to HTML -- some of its components don’t even
--- have a meaning save in HTML peculiarities.) If you strive to avoid this
--- *and* would like to have decent typesetting, you should use the
--- automatically generated TeX code as a starting point for the actual
--- typesetting job. Wish it was possible to have both -- the data in a
--- universal form and the output in the Optimal Typesetting System -- but
--- that’s a dream for now. If you really read these musings, then prove me
--- wrong if you can! Or go tell those digital publishers and their willing
--- subordinates, the authors, who think they can save a few pennys,
--- substituting the typesetter and editor by some fancy software. Keep in mind
--- that zapf.tex is not just random dummy text. </rant>
-
-function rst_context.roles.ctsh(str) -- shorthand
- rst_context.addsetups("citator")
- return [[\\ctsh{]] .. str .. [[}]]
-end
-
-function rst_context.roles.ctas(str) -- short cite
- rst_context.addsetups("citator")
- return [[\\ctas{]] .. str .. [[}]]
-end
-
-function rst_context.roles.ctau(str) -- author only
- rst_context.addsetups("citator")
- return [[\\ctau{]] .. str .. [[}]]
-end
-
-function rst_context.roles.cttt(str) -- title only
- rst_context.addsetups("citator")
- return [[\\cttt{]] .. str .. [[}]]
-end
-
-function rst_context.roles.ctay(str) -- author year
- rst_context.addsetups("citator")
- return [[\\ctay{]] .. str .. [[}]]
-end
-
-function rst_context.roles.ctfu(str) -- full cite
- rst_context.addsetups("citator")
- return [[\\ctfu{]] .. str .. [[}]]
-end
-
-function rst_context.roles.nocite(str) -- nocite
- rst_context.addsetups("citator")
- return [[\\nocite[]] .. str .. [=[]]=]
-end
-
---------------------------------------------------------------------------------
---- End citator roles
---------------------------------------------------------------------------------
-
---------------------------------------------------------------------------------
---- Experimental roles.
---------------------------------------------------------------------------------
-
---- Feature request by Philipp A.
-function rst_context.roles.math(str)
- return [[\\mathematics{]] .. str .. [[}]]
-end
-
---------------------------------------------------------------------------------
---- End roles
---------------------------------------------------------------------------------
-
-function rst_context.interpreted_text (...)
- local tab = { ... }
- local role, str
- role = stringmatch(tab[1], "^:(.*):$") or stringmatch(tab[3], "^:(.*):$")
- str = tab[2]
-
- if not role then -- implicit role
- role = "emphasis"
- end
-
- if stringmatch(role, "^color_") then
- return rst_context.roles.color(role, str)
- end
-
- return rst_context.roles[role](str)
-end
-
-function rst_context.link_standalone (str)
- return "\n"
- .. [[\\goto{\\hyphenatedurl{]] .. str .. [[}}[url(]] .. str .. [=[)]]=]
-end
-
-function rst_context.reference (str)
- rst_context.addsetups("references")
- str = stringmatch(str, "^`?([^`]+)`?_$")
- return [[\\RSTchoosegoto{__target_]] .. rst_context.whitespace_to_underscore(str) .. "}{"
- .. str .. "}"
-end
-
-function rst_context.anon_reference (str)
- rst_context.addsetups("references")
- str = stringmatch(str, "^`?([^`]+)`?__$")
- rst_context.anonymous_links[#rst_context.anonymous_links+1] = str
- link = "__target_anon_" .. #rst_context.anonymous_links
- return stringformat([[\\RSTchoosegoto{%s}{%s}]], link, str)
-end
-
-local whitespace = S" \n\t\v"
-local nowhitespace = 1 - whitespace
-local removewhitespace = Cs((nowhitespace^1 + Cs(whitespace / ""))^0)
-
-function rst_context.target (tab)
- rst_context.addsetups("references")
- --local tab = { ... }
- local refs = rst_context.collected_references
- local arefs = rst_context.anonymous_set
- local target = tab[#tab] -- Ct + C could be clearer but who cares
- tab[#tab] = nil
-
- local function create_anonymous ()
- rst_context.anonymous_targets = rst_context.anonymous_targets + 1
- return { "anon_" .. rst_context.anonymous_targets, rst_context.anonymous_targets }
- end
-
- local insert = ""
-
- if target == "" then -- links here
- for _, id in next, tab do
- insert = insert .. "\n\\reference[__target_" .. id .. "]{}"
- end
- else
- for i=1,#tab do
- local id = tab[i]
- if id == "" then -- anonymous
- local anon = create_anonymous()
- id, arefs[anon[1]] = anon[1], anon[2]
- else
- local tmp = tab[i]
- tmp = stringgsub(tmp, "\\:",":")
- tmp = stringmatch(tmp, "`?([^`]+)`?")
- id = tmp
- --id = tab[i]:gsub("\\:",":"):match("`?([^`]+)`?") -- deescaping
- end
- if id then
- refs[id] = refs[id] or target
- end
- end
- end
-
- return insert
-end
-
-function rst_context.inline_internal_target (str)
- return "\\\\reference[__target_" .. rst_context.whitespace_to_underscore(str) .."]{}"
-end
-
-function rst_context.substitution_reference (str, underscores)
- local sub = ""
- rst_context.addsetups "substitutions"
- if underscores == "_" then -- normal reference
- sub = sub .. [[\\reference[__target_]] .. rst_context.whitespace_to_underscore(stringstrip(str)) .. "]{}"
- elseif underscores == "__" then -- normal reference
- rst_context.anonymous_targets = rst_context.anonymous_targets + 1
- sub = sub .. [[\\reference[__target_anon_]] .. rst_context.anonymous_targets .. "]{}"
- end
- return sub .. [[{\\RSTsubstitution]] .. stringgsub(str, "%s", "") .. "}"
-end
-
-do
- -- see catc-sym.tex
- local escape_me = {
- ["&"] = [[\letterampersand ]],
- ["$"] = [[\letterdollar ]],
- ["#"] = [[\letterhash ]],
- ["^"] = [[\letterhat ]],
- ["_"] = [[\letterunderscore ]],
- }
-
- local chars
- for chr, repl in next, escape_me do
- chars = chars and chars + (P(chr) / repl) or P(chr) / repl
- end
-
- local p_escape = P{
- [1] = Cs((V"skip"
- --+ V"literal" -- achieved via gsub later
- + chars
- + 1)^1),
- skip1 = P"\\starttyping" * (1 - P"\\stoptyping")^1,
- balanced = P"{" * (V"balanced" + (1 - P"}"))^0 * P"}",
- skip2 = P"\\type" * V"balanced",
- skip3 = P"\\mathematics" * V"balanced",
- skip = V"skip1" + V"skip2" + V"skip3",
- --literal = Cs(P"\\" / "") * 1
- }
-
- function rst_context.escape (str)
- str = stringgsub(str, "\\(.)", "%1")
- return lpegmatch(p_escape, str)
- end
-end
-
-function rst_context.joinindented (tab)
- return tableconcat (tab, "")
-end
-
-local corresponding = {
- ['"'] = '"',
- ["'"] = "'",
- ["{"] = "}",
- ["("] = ")",
- ["["] = "]",
- ["<"] = ">",
-}
-
-local inline_parser = P{
- [1] = "block",
-
- block = Cs(V"inline_as_first"^-1 * (V"except" + V"inline_element" + V"normal_char")^0),
-
- inline_element = V"precede_inline"
- * Cs(V"inline_do_elements")
- * #V"succede_inline"
- + V"footnote_reference"
- ,
-
- -- Ugly but needed in case the first element of a paragraph is inline
- -- formatted.
- inline_as_first = V"inline_do_elements" * #V"succede_inline",
-
- except = P"\\starttyping" * (1 - P"\\stoptyping")^1 * P"\\stoptyping"
- + V"enclosed"
- ,
-
- inline_do_elements = V"strong_emphasis"
- + V"substitution_reference"
- + V"anon_reference"
- + V"inline_literal"
- + V"reference"
- + V"emphasis"
- + V"interpreted_text"
- + V"inline_internal_target"
- + V"link_standalone"
- ,
-
- precede_inline = V"spacing"
- + V"eol"
- + -P(1)
- + S[['"([{<-/:]]
- + P"‘" + P"“" + P"’" + P"«" + P"¡" + P"¿"
- + V"inline_delimiter"
- + P"„", -- not in standard Murkin reST
-
- succede_inline = V"spacing"
- + V"eol"
- + S[['")]}>-/:.,;!?\]]
- + P"’" + P"”" + P"»"
- + V"inline_delimiter"
- + -P(1)
- + P"“" -- non-standard again but who cares
- ,
-
- enclosed = V"precede_inline"^-1
- * Cg(V"quote_single" + V"quote_double" + V"leftpar", "lastgroup")
- * V"inline_delimiter"
- * Cmt(C(V"quote_single" + V"quote_double" + V"rightpar") * Cb("lastgroup"), function(s, i, char, oldchar)
- return corresponding[oldchar] == char
- end)
- * V"succede_inline"^-1
- * -V"underscore"
- ,
-
- space = P" ",
- whitespace = (P" " + Cs(P"\t") / " " + Cs(S"\v") / " "),
- spacing = V"whitespace"^1,
-
- eol = P"\n",
- --inline_delimiters = P"‐" + P"‑" + P"‒" + P"–" + V"emdash" + V"space", -- inline markup
- inline_delimiter = P"‐" + P"‑" + P"‒" + P"–" + V"emdash" + V"space"
- + V"bareia"
- + V"asterisk"
- + V"bar"
- + V"lbrack" + V"rbrack"
- , -- inline markup
- asterisk = P"*",
- quote_single = P"'",
- quote_double = P'"',
- double_asterisk = V"asterisk" * V"asterisk",
- bareia = P"`",
- backslash = P"\\",
- bar = P"|",
- double_bareia = V"bareia" * V"bareia",
- escaped_bareia = (Cs(V"backslash") / "" * V"bareia") + 1,
- colon = P":",
- escaped_colon = (Cs(V"backslash") / "" * V"colon") + 1,
- semicolon = P";",
- underscore = P"_",
- double_underscore = V"underscore" * V"underscore",
- dot = P".",
- interpunct = P"·",
- comma = P",",
- dash = P"-",
- emdash = P"—",
- ellipsis = P"…" + P"...",
- exclamationmark = P"!",
- questionmark = P"?",
- interrobang = P"‽",
- double_dash = V"dash" * V"dash",
- triple_dash = V"double_dash" * V"dash",
- hyphen = P"‐",
- dashes = V"dash" + P"‒" + P"–" + V"emdash" + P"―",
-
- lparenthesis = P"(",
- rparenthesis = P")",
- lbrack = P"[",
- rbrack = P"]",
- lbrace = P"{" / [[{\\letterleftbrace}]],
- rbrace = P"}" / [[{\\letterrightbrace}]],
- less = P"<",
- greater = P">",
- leftpar = V"lparenthesis" + V"lbrack" + V"lbrace" + V"less",
- rightpar = V"rparenthesis" + V"rbrack" + V"rbrace" + V"greater",
-
- normal_char = V"lbrace" + V"rbrace" + V"lbrack" + V"rbrack" -- escape those if in input
- + 1
- ,
-
- --groupchars = S"()[]{}",
- groupchars = V"leftpar" + V"rightpar",
- apostrophe = P"’" + P"'",
-
- guillemets = P"«" + P"»",
- quotationmarks= P"‘" + P"’" + P"“" + P"”",
- solidus= P"⁄",
- slash = P"/",
-
- gartenzaun = P"#",
- digit = R"09",
- letter = R"az" + R"AZ",
-
- punctuation = V"apostrophe"
- + V"colon"
- + V"comma"
- + V"dashes"
- + V"dot"
- + V"ellipsis"
- + V"exclamationmark"
- + V"guillemets"
- + V"hyphen"
- + V"interpunct"
- + V"interrobang"
- + V"questionmark"
- + V"quotationmarks"
- + V"semicolon"
- + V"slash"
- + V"solidus"
- + V"underscore"
- ,
-
- emphasis = (V"asterisk" - V"double_asterisk")
- * Cs((V"normal_char" - V"spacing" - V"eol" - V"asterisk")
- * ((V"normal_char" - (V"normal_char" * V"asterisk"))^0
- * (V"normal_char" - V"spacing" - V"eol" - V"asterisk"))^-1)
- * V"asterisk"
- / rst_context.emphasis,
-
- strong_emphasis = V"double_asterisk"
- * Cs((V"normal_char" - V"spacing" - V"eol" - V"asterisk")
- * ((V"normal_char" - (V"normal_char" * V"double_asterisk"))^0
- * (V"normal_char" - V"spacing" - V"eol" - V"asterisk"))^-1)
- * V"double_asterisk"
- / rst_context.strong_emphasis,
-
- inline_literal = V"double_bareia"
- * C ((V"escaped_bareia" - V"spacing" - V"eol" - V"bareia")
- * ((V"escaped_bareia" - (V"normal_char" * V"double_bareia"))^0
- * (V"escaped_bareia" - V"spacing" - V"eol" - V"bareia"))^-1)
- * V"double_bareia"
- / rst_context.literal,
-
- interpreted_single_char = (V"normal_char" - V"spacing" - V"eol" - V"bareia") * #V"bareia",
- interpreted_multi_char = (V"normal_char" - V"spacing" - V"eol" - V"bareia") * (V"normal_char" - (1 * V"bareia"))^0 * (1 - V"spacing" - V"eol" - V"bareia"),
-
- interpreted_text = C(V"role_marker"^-1)
- * (V"bareia" - V"double_bareia")
- * C(V"interpreted_single_char" + V"interpreted_multi_char")
- * V"bareia"
- * C(V"role_marker"^-1)
- / rst_context.interpreted_text,
-
- role_marker = V"colon" * (V"backslash" * V"colon" + V"letter" + V"digit" + V"dash" + V"underscore" + V"dot")^1 * V"colon",
-
- link_standalone = C(V"uri")
- / rst_context.link_standalone,
-
- anon_reference = Cs(V"anon_phrase_reference" + V"anon_normal_reference")
- / rst_context.anon_reference,
-
- anon_normal_reference = C((1 - V"underscore" - V"spacing" - V"eol" - V"punctuation" - V"groupchars")^1) * V"double_underscore",
-
- anon_phrase_reference = (V"bareia" - V"double_bareia")
- * C((1 - V"bareia")^1)
- * V"bareia" * V"double_underscore"
- ,
-
- reference = Cs(V"normal_reference" + V"phrase_reference")
- / rst_context.reference,
-
- normal_reference = (1 - V"underscore" - V"spacing" - V"eol" - V"punctuation" - V"groupchars")^1 * V"underscore",
-
- phrase_reference = (V"bareia" - V"double_bareia")
- * C((1 - V"bareia")^1)
- * V"bareia" * V"underscore"
- ,
-
- footnote_reference = V"lbrack"
- * Cs(V"footnote_label" + V"citation_reference_label")
- * V"rbrack"
- * V"underscore"
- / rst_context.footnote_reference
- ,
-
- footnote_label = V"digit"^1
- + V"gartenzaun" * V"letter"^1
- + V"gartenzaun"
- + V"asterisk"
- ,
-
- citation_reference_label = V"letter" * (1 - V"rbrack")^1,
-
- inline_internal_target = V"underscore"
- * V"bareia"
- * Cs((1 - V"bareia")^1)
- * V"bareia"
- / rst_context.inline_internal_target
- ,
-
- substitution_reference = V"bar"
- * C((1 - V"bar")^1)
- * V"bar"
- * C((V"double_underscore" + V"underscore")^-1)
- / rst_context.substitution_reference
- ,
-
---------------------------------------------------------------------------------
--- Urls
---------------------------------------------------------------------------------
- uri = V"url_protocol" * V"url_domain" * V"url_path_char"^0,
-
- url_protocol = (P"http" + P"ftp" + P"shttp" + P"sftp") * P"://",
- url_domain_char = 1 - V"dot" - V"spacing" - V"eol" - V"punctuation",
- url_domain = V"url_domain_char"^1 * (V"dot" * V"url_domain_char"^1)^0,
- url_path_char = R("az", "AZ", "09") + S[[-_.!~*'()/]],
-}
-
-rst_context.inline_parser = inline_parser
-
-function rst_context.paragraph (data)
- local str
- if not data then
- return ""
- elseif type(data) == "table" then
--- str = #data > 1 and helpers.string.wrapat(lpegmatch(inline_parser, tableconcat(data, " ")), 65)
--- or inline_parser:match(data[1])
- if #data > 1 then
- str = helpers.string.wrapat(
- lpegmatch(inline_parser, tableconcat(data, " "))
- , 65)
- else
- str = lpegmatch(inline_parser, data[1])
- end
- else
- str = data
- end
- return stringformat([[
-
-\\startparagraph
-%s
-\\stopparagraph
-]], str)
-end
-
-local sectionlevels = {
- [1] = "chapter",
- [2] = "section",
- [3] = "subsection",
- [4] = "subsubsection",
- [5] = "subsubsubsection",
-}
-
-local function get_line_pattern (chr)
- return P(chr)^1 * (-P(1))
-end
-
---[[--
- Quoth the spec:
- An underline-only adornment is distinct from an
- overline-and-underline adornment using the same character.
-
- We store the depths by hashing the adorn character and distinguish
- the overlined ones from only underlined ones by prefixing them with
- “O” and “U”, respectively.
---]]--
-
-function rst_context.section (first, second, third)
- local section = true
- local str = ""
- local adornchar = nil
- local ulen = utflen
- if third then --- overlined
- adornchar = "O" .. stringsub(first, 1,1)
- section = ulen(first) >= ulen(second)
- str = stringstrip(second)
- else -- underline-only
- adornchar = "U" .. stringsub(second, 1,1)
- section = ulen(first) <= ulen(second)
- str = stringstrip(first)
- end
-
- if section then -- determine level
- local level = rst_context.last_section_level
- local rca = rst_context.collected_adornments
- if rca[adornchar] then
- level = rca[adornchar]
- else
- level = level + 1
- rca[adornchar] = level
- rst_context.last_section_level = level
- end
-
- local ref = get_context_reference (str)
-
- str = stringformat("\n\\\\%s[%s]{%s}\n",
- sectionlevels[level],
- ref,
- str)
- return str or ""
- end
- return [[{\\bf fix your sectioning!}\\endgraf}]]
-end
-
--- Prime time for the fancybreak module.
-function rst_context.transition (str)
- rst_context.addsetups("breaks")
- --return "\\fancybreak\n"
- return "\\fancybreak{$* * *$}\n"
-end
-
-function rst_context.bullet_marker(str)
- return "marker"
-end
-
--- This one should ignore escaped spaces.
-do
- local stripper = P{
- [1] = "stripper",
- stripper = V"space"^0 * C((V"space"^0 * V"nospace"^1)^0),
- space = S(" \t\v\n"),
- escaped = P"\\" * V"space",
- nospace = V"escaped" + (1 - V"space"),
- }
- function stringstrip(str)
- return lpegmatch(stripper, str) or ""
- end
-end
-
-local enumeration_types = {
- ["*"] = "*", -- unordered bulleted
- ["+"] = "*",
- ["-"] = "*",
- ["•"] = "*",
- ["‣"] = "*",
- ["⁃"] = "*",
-
- ["#"] = "n", -- numbered lists and conversion
- ["A"] = "A",
- ["a"] = "a",
- ["I"] = "R",
- ["i"] = "r",
-}
-
--- \setupitemize[left=(, right=), margin=4em, stopper=]
-
-local stripme = S"()."
-local dontstrip = 1 - stripme
-local itemstripper = stripme^0 * C(dontstrip^1) * stripme^0
-
-local function parse_itemstring(str)
- local offset = nil
- local setup = ",fit][itemalign=flushright,"
- if stringmatch(str, "^%(") then
- setup = setup .. [[left=(,]]
- end
- if stringmatch(str, "%)$") then
- setup = setup .. [[right=)]]
- end
- if stringmatch(str, "%.$") then
- setup = setup .. [[stopper={.\\space}]]
- end
- local num = stringmatch(str, "^%d")
- if num then
- -- http://thread.gmane.org/gmane.comp.tex.context/61728/focus=61729
- setup = setup .. ",start=" .. num
- str = "n"
- end
-
- str = lpegmatch(itemstripper, str)
- str = enumeration_types[str] or str
- return { setup = setup, str = str }
-end
-
-function rst_context.startitemize(str)
- local setup = ""
- local result = ""
- str = stringstrip(str)
-
- local listtype = enumeration_types[str] or parse_itemstring(str)
-
- if type(listtype) == "table" then
- setup = listtype.setup
- listtype = listtype.str
- end
-
- result = [[
-\\startitemize[]] .. listtype .. setup .. [[]
-]]
- return result
-end
-
-local item_stack = { }
-
-function rst_context.stopitemize(str)
- item_stack[#item_stack] = nil
- return str .. [[
-\\stopitemize
-]]
-end
-
-function rst_context.bullet_item (tab)
- -- The capture of the first item has the \startitemize as
- -- *second* element in the array.
- local content = #tab == 2 and tab[2] or tab[3]
- local startstr = #tab == 3 and tab[2] or nil
- local itemtype = tab[1]
- local result = startstr or ""
- if startstr then
- item_stack[#item_stack + 1] = itemtype
- elseif next (item_stack) then
- local current_item = item_stack [#item_stack]
- if helpers.list.successor(itemtype, current_item) then
- -- just leave it alone
- elseif helpers.list.greater(itemtype, current_item) then
- local itemnum = tonumber(stringstrip(itemtype)) or helpers.list.get_decimal(itemtype)
- result = result .. stringformat([[
-\\setnumber[itemgroup:itemize]{%s}
-]], itemnum)
- end
- item_stack[#item_stack] = itemtype
- end
-
- return result .. [[
-
-\\item ]] .. lpegmatch(inline_parser, content) .. [[
-
-]]
-end
-
---------------------------------------------------------------------------------
--- Definition lists
---------------------------------------------------------------------------------
--- TODO define proper setups (probably bnf-like and some narrower for def-paragraphs)
-
-function rst_context.deflist (list)
- rst_context.addsetups("deflist")
-
- local deflist = [[
-\\startRSTdefinitionlist
-]]
- for nd=1, #list do
- local item = list[nd]
- local term = item[1]
- local nc = 2
- local tmp = [[
-
- \\RSTdeflistterm{]] .. stringstrip(term) .. "}"
- if #item > 2 then
- while nc < #item do
- tmp = tmp .. [[
-
- \\RSTdeflistclassifier{]] .. stringstrip(item[nc]) .. "}"
- nc = nc + 1
- end
- end
- tmp = tmp .. [[
-
- \\RSTdeflistdefinition{%
-]]
- local final = item[#item]
- for np=1, #final do
- local par = final[np]
- tmp = tmp .. [[
- \\RSTdeflistparagraph{%
-]] .. lpegmatch(inline_parser, par) .. "}\n"
- end
- tmp = tmp .. " }"
- deflist = deflist .. tmp
- end
- return deflist .. [[
-
-\\stopRSTdefinitionlist
-]]
-end
-
---------------------------------------------------------------------------------
--- Field lists
---------------------------------------------------------------------------------
-
--- TODO Do something useful with field lists. For now I'm not sure what as the
--- bibliography directives from the reST specification seem to make sense only
--- when using docinfo and, after all, we have .bib files that are portable.
-
-function rst_context.field_list (str)
- rst_context.addsetups("fieldlist")
- return [[
-
-\\startRSTfieldlist]] .. str .. [[\\eTABLEbody\\stopRSTfieldlist
-]]
-end
-
-function rst_context.field_name (str)
- return [[\\fieldname{]] .. str .. [[}]]
-end
-
-function rst_context.field_body (str)
- return [[\\fieldbody{]] .. lpegmatch(inline_parser, str) .. [[}]]
-end
-
-function rst_context.field (tab)
- local name, body = tab[1], tab[2]
- return stringformat([[
-
- \\RSTfieldname{%s}
- \\RSTfieldbody{%s}
-]], name, lpegmatch(inline_parser, body))
-end
-
-function rst_context.line_comment (str)
- return "% " .. str
-end
-
-function rst_context.block_comment (str)
- return stringformat([[
-
-\iffalse %% start block comment
-%s\fi %% stop block comment
-]], str)
-end
-
-function rst_context.option_list (str)
- return [[
-\\setupTABLE[c][first] [background=color, backgroundcolor=grey, style=\tt]
-\\setupTABLE[c][each] [frame=off]
-\\setupTABLE[r][each] [frame=off]
-\\bTABLE[split=yes,option=stretch]
-\\bTABLEhead
-\\bTR
- \\bTH Option \\eTH
- \\bTH Description \\eTH
-\\eTR
-\\eTABLEhead
-\\bTABLEbody
-]] .. lpegmatch(inline_parser, str) .. [[
-
-\\eTABLEbody
-\\eTABLE
-]]
-end
-
-function rst_context.option_item (tab)
- return stringformat([[\\bTR\\bTC %s \\eTC\\bTC %s \\eTC\\eTR
-]], tab[1], tab[2])
-end
-
-function rst_context.test(str)
- return ":"
-end
-
-function rst_context.literal_block (str, included)
- local indent = P" "^1
- local stripme = #str
- for line in stringgmatch(str, "[^\n]+") do
- -- setting to the lowest indend of all lines
- local idt = lpegmatch(indent, line)
- if line and idt then
- stripme = idt < stripme and idt or stripme
- end
- end
-
- local strip = P{
- [1] = "strip",
- strip = Cs(V"line"^1),
- eol = P"\n",
- restofline = (1 - V"eol")^0,
- stop = Cs(V"eol" * P" "^0) * -P(1) / "", -- remove trailing blank lines
- line = Cs(V"restofline" * (V"stop" + V"eol")) / function (line)
- return #line > stripme and line:sub(stripme) or line
- end,
- }
-
- str = lpegmatch(strip, str)
- str = [[
-
-\starttyping[lines=hyphenated]
-]] .. str .. [[
-
-\stoptyping
-]]
- if included then -- escaping can ruin your day
- str = str:gsub("\\", "\\\\")
- end
- return str
-end
-
-function rst_context.included_literal_block (str)
- return rst_context.literal_block(str, true)
-end
-
-function rst_context.line_block (str)
- rst_context.addsetups("lines")
- return [[
-
-\\startlines
-]] .. lpegmatch(inline_parser, str) .. [[\\stoplines
-]]
-end
-
-function rst_context.line_block_line(str)
- str = str:gsub("\n", " ")
- return str .. "\n"
-end
-
-function rst_context.line_block_empty()
- return "\n"
-end
-
-function rst_context.block_quote (tab)
- rst_context.addsetups("blockquote")
- local str = [[
-\\startlinecorrection
-\\blank[small]
-\\startblockquote
-]] .. lpegmatch(inline_parser, tab[1]) .. [[
-
-\\stopblockquote
-]]
-
- return tab[2] and str .. [[
-\\blank[small]
-\\startattribution
-]] .. lpegmatch(inline_parser, tab[2]) .. [[
-\\stopattribution
-\\blank[small]
-\\stoplinecorrection
-]] or str .. [[
-\\blank[small]
-\\stoplinecorrection
-]]
-end
-
---function rst_context.table (str)
- --return [[
---\\startlinecorrection
---]] .. str .. [[
-
---\\stoplinecorrection
---]]
---end
-
-function rst_context.grid_table (tab)
- local body = ""
- local nr = 1
- local head
- if tab.has_head then
- head = [[
-\\setupTABLE[c][each] [frame=off]
-\\setupTABLE[r][each] [frame=off]
-%\\startlinecorrection
-\\bTABLE[split=repeat,option=stretch]
-\\bTABLEhead
-]]
- while nr <= tab.head_end do
- local r = tab.rows[nr]
- local isempty = true
- for n=1, #r do
- local cell = r[n]
- if cell.variant == "normal" then
- isempty = false
- break
- end
- end
-
- if not isempty then
- local row = [[\\bTR]]
- for n=1, #r do
- local c = r[n]
- if not (c.parent or
- c.variant == "separator") then
- local celltext = lpegmatch(inline_parser, c.stripped)
- if c.span.x or c.span.y then
- local span_exp = "["
- if c.span.x then
- span_exp = span_exp .. "nc=" .. c.span.x .. ","
- end
- if c.span.y then
- span_exp = span_exp .. "nr=" .. c.span.y
- end
- celltext = span_exp .. "] " .. celltext
-
- end
-
- row = row .. "\n " .. [[\\bTH ]] .. celltext .. [[\\eTH]]
- end
- end
- head = head .. row .. "\n" .. [[\\eTR]] .. "\n"
- end
- nr = nr + 1
- end
- head = head .. [[
-\\eTABLEhead
-\\bTABLEbody
-]]
- else
- head = [[
-\\setupTABLE[c][each] [frame=off]
-\\setupTABLE[r][each] [frame=off]
-%\\startlinecorrection
-\\bTABLE[split=repeat,option=stretch]
-\\bTABLEbody
-]]
- end
- while nr <= #tab.rows do
- local r = tab.rows[nr]
- local isempty = true
- for n=1, #r do
- local cell = r[n]
- if cell.variant == "normal" then
- isempty = false
- break
- end
- end
-
- if not isempty then
- local row = [[\\bTR]]
- for n=1, #r do
- local c = r[n]
- if not (c.parent or
- c.variant == "separator") then
- local celltext = lpegmatch(inline_parser, c.stripped)
- if c.span.x or c.span.y then
- local span_exp = "["
- if c.span.x then
- span_exp = span_exp .. "nc=" .. c.span.x .. ","
- end
- if c.span.y then
- span_exp = span_exp .. "nr=" .. c.span.y
- end
- celltext = span_exp .. "] " .. celltext
-
- end
-
- row = row .. "\n " .. [[\\bTC ]] .. celltext .. [[\\eTC]]
- end
- end
- body = body .. row .. "\n" .. [[\\eTR]] .. "\n"
- end
- nr = nr + 1
- end
- local tail = [[
-\\eTABLEbody
-\\eTABLE
-%\\stoplinecorrection
-]]
- return head .. body .. tail
-end
-
-
-function rst_context.simple_table(tab)
- local head
- local nr = 1
- if tab.head_end then
- head = [[
-\\setupTABLE[c][each] [frame=off]
-\\setupTABLE[r][each] [frame=off]
-%\\startlinecorrection
-\\bTABLE[split=yes,option=stretch]
-\\bTABLEhead
-]]
- while nr <= tab.head_end do
- local row = tab[nr]
- if not row.ignore then
- dbg_write(">hr>" .. #row)
- head = head .. [[\\bTR]]
- for nc=1, #row do
- local cell = row[nc]
- dbg_write("%7s | ", cell.content)
- local celltext = lpegmatch(inline_parser, cell.content)
- if cell.span then
- head = head .. stringformat([=[\\bTH[nc=%s]%s\\eTH]=], cell.span.x, celltext or "")
- else
- head = head .. [[\\bTH ]] .. celltext .. [[\\eTH]]
- end
- end
- dbg_write("\n")
- head = head .. "\\\\eTR\n"
- end
- nr = nr + 1
- end
-
- head = head .. [[
-\\eTABLEhead
-\\bTABLEbody
-]]
- else
- head = [[
-\\setupTABLE[c][each] [frame=off]
-\\setupTABLE[r][each] [frame=off]
-%\\startlinecorrection
-\\bTABLE[split=yes,option=stretch]
-\\bTABLEbody
-]]
- end
- local tail = [[
-\\eTABLEbody
-\\eTABLE
-%\\stoplinecorrection
-]]
- local body = ""
- while nr <= #tab do
- local row = tab[nr]
- if not row.ignore then
- dbg_write(">tr>" .. #row)
- body = body .. [[\\bTR]]
- for nc=1, #row do
- local cell = row[nc]
- dbg_write("%7s | ", cell.content)
- local celltext = lpegmatch(inline_parser, cell.content)
- if cell.span then
- body = body .. stringformat([=[\\bTC[nc=%s]%s\\eTC]=], cell.span.x, celltext or "")
- else
- body = body .. [[\\bTC ]] .. celltext .. [[\\eTC]]
- end
- end
- dbg_write("\n")
- body = body .. "\\\\eTR\n"
- end
- nr = nr + 1
- end
- return head .. body .. tail
-end
-
-function rst_context.footnote (label, content)
- local tf = rst_context.state.footnotes
- rst_context.addsetups("footnotes")
- if stringmatch(label, "^%d+$") then -- all digits
- tf.numbered[tonumber(label)] =
- rst_context.escape(lpegmatch(inline_parser, content))
- elseif label == "#" then --autonumber
- repeat -- until next unrequested number
- tf.autonumber = tf.autonumber + 1
- until tf.numbered[tf.autonumber] == nil
- tf.numbered[tf.autonumber] =
- rst_context.escape(lpegmatch(inline_parser, content))
- elseif stringmatch(label, "^#.+$") then
- local thelabel = stringmatch(label, "^#(.+)$")
- tf.autolabel[thelabel] =
- rst_context.escape(lpegmatch(inline_parser, content))
- elseif label == "*" then
- rst_context.addsetups("footnote_symbol")
- tf.symbol[#tf.symbol+1] =
- rst_context.escape(lpegmatch(inline_parser, content))
- else -- “citation reference” treated like ordinary footnote
- repeat -- until next unrequested number
- tf.autonumber = tf.autonumber + 1
- until tf.numbered[tf.autonumber] == nil
- tf.numbered[tf.autonumber] =
- rst_context.escape(lpegmatch(inline_parser, content))
- end
- return ""
-end
-
---- hack to differentiate inline images
-local special_substitutions = {
- image = "inline_image",
-}
-
-function rst_context.substitution_definition (subtext, directive, data)
- local special = special_substitutions[directive]
- if special then
- --- override; pass data directly
- directive = special
- else
- local tmp
- if data.first ~= "" then
- tmp = { data.first }
- else
- tmp = { }
- end
- data.first = nil
- for i=1, #data do -- paragraphs
- local current = tableconcat(data[i], "\n")
- --current = lpegmatch(inline_parser, current)
- --current = rst_context.escape(current)
- tmp[#tmp+1] = current
- end
- data = tableconcat(tmp, "\n\n")
- data = stringstrip(data)
- end
- subtext = stringgsub(subtext, "%s", "")
- rst_context.substitutions[subtext] = { directive = directive,
- data = data }
- return ""
-end
-
--- not to be confused with the directive definition table rst_directives
-function rst_context.directive(directive, data)
- local fun = rst_directives[directive]
- if fun then
- rst_context.addsetups("directive")
- local result = ""
- result = fun(data)
- return result
- end
- return ""
-end
-
--- vim:ft=lua:sw=4:ts=4:expandtab
diff --git a/macros/context/contrib/context-rst/tex/context/third/rst/rst_directives.lua b/macros/context/contrib/context-rst/tex/context/third/rst/rst_directives.lua
deleted file mode 100644
index f5572b7be7..0000000000
--- a/macros/context/contrib/context-rst/tex/context/third/rst/rst_directives.lua
+++ /dev/null
@@ -1,381 +0,0 @@
-#!/usr/bin/env texlua
---------------------------------------------------------------------------------
--- FILE: rst_directives.lua
--- USAGE: called by rst_parser.lua
--- DESCRIPTION: Complement to the reStructuredText parser
--- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
--- CHANGED: 2013-06-03 18:52:35+0200
---------------------------------------------------------------------------------
---
-
-local helpers = helpers or thirddata and thirddata.rst_helpers
-
---------------------------------------------------------------------------------
--- Directives for use with |substitutions|
---------------------------------------------------------------------------------
-
-local rst_directives = { }
-thirddata.rst_directives = rst_directives
-local rst_context = thirddata.rst
-
-local lpegmatch = lpeg.match
-local stringformat = string.format
-local stringstrip = string.strip
-local tableconcat = table.concat
-local tableflattened = table.flattened
-local type = type
-
---rst_directives.anonymous = 0
-rst_directives.images = {}
-rst_directives.images.done = {}
-rst_directives.images.values = {}
-
-
-rst_directives.images.keys = {
- ["width"] = "width",
- ["size"] = "width",
- ["caption"] = "caption",
- ["alt"] = "caption",
- ["scale"] = "scale",
-}
-
-rst_directives.images.values.scale = function (orig)
- -- http://wiki.contextgarden.net/Reference/en/useexternalfigure
- -- scale=1000 is original size; to get 72%, use scale=720.
- return tonumber(orig) * 1000
-end
-
-rst_directives.images.values.width = {
- ["fit"] = "\\hsize",
- ["hsize"] = "\\hsize",
- ["broad"] = "\\hsize",
- ["normal"] = "local",
- ["normal"] = "local",
-}
-
--- we won't allow passing arbitrary setups to context
-local permitted_setups = {
- "width",
- "scale"
-}
-
-local function img_setup (properties)
- local result = ""
- for _, prop in next, permitted_setups do
- if properties[prop] then
- result = result .. prop .. "=" .. properties[prop] .. ","
- end
- end
- if result ~= "" then
- result = "[" .. result .. "]"
- end
- return result
-end
-
-local collect_image_properties = function (data)
- local image_directives = rst_directives.images
- local p_keyval = helpers.patterns.colon_keyval
- local properties = { }
-
- data = tableflattened(data)
- for i=1, #data do
- local str = stringstrip(data[i])
- local key, val = lpegmatch(p_keyval, str)
- if key and val then
- key = image_directives.keys[key] -- sanitize key expression
- local valtype = type(image_directives.values[key])
- if valtype == "table" then
- val = image_directives.values[key][val]
- elseif valtype == "function" then
- val = image_directives.values[key](val)
- end
- properties[key] = val
- end
- end
- return properties
-end
-
---- ordinary image directives are converted to floats
-
-local float_image = function (data)
- rst_context.addsetups "image"
- local inline_parser = rst_context.inline_parser
- local properties
- local anon = false
- local rdi = rst_directives.images
- local hp = helpers.patterns
- local caption = ""
- local name = ""
-
- if data.name then
- name = stringstrip(data.name)
- data.name = nil
- else
- if next(data[1]) then
- name = data[1][1]
- end
- end
-
- --rd.anonymous = rd.anonymous + 1
- --anon = true -- indicates a nameless picture
- --name = "anonymous" .. rd.anonymous
-
- properties = collect_image_properties(data)
-
- if properties.caption then
- caption = lpegmatch(inline_parser, properties.caption)
- caption = rst_context.escape(caption)
- end
-
- properties.setup = img_setup(properties) or ""
- local img = ""
--- local images_done = rdi.done
--- if not anon then -- TODO: implement?
--- if not images_done[name] then
--- img = img .. stringformat([[
---
---\useexternalfigure[%s][%s][]%%
---]], name, data)
--- images_done[name] = true
--- end
--- img = img .. stringformat([[
---\def\RSTsubstitution%s{%%
--- \placefigure[here]{%s}{\externalfigure[%s]%s}%%
---}
---]], name, rst_context.escape(lpegmatch(inline_parser, properties.caption)), name, properties.setup)
--- else -- image won't be referenced but used instantly
- img = stringformat(
- "\n\\placefigure[here]{%s}{\\externalfigure[%s]%s}",
- caption,
- name,
- properties.setup)
--- end
- return img
-end
-
---- inline substitutions are converted to bare external figures
-local inline_image = function (name, data)
- rst_context.addsetups "image"
- local filename = data.first
- local p_keyval = helpers.patterns.colon_keyval
- local properties
-
- if not filename then --- garbage, ignore
- return ""
- end
- data.first = nil
- filename = stringstrip(filename)
- properties = collect_image_properties(data)
-
- local scheme = "\n\\def\\RSTsubstitution%s{\n \\externalfigure[%s]%s%%\n}\n"
- local options = ""
- if next(properties) then
- local tmp = { }
- tmp[#tmp+1] = "["
- for key, value in next, properties do
- tmp[#tmp+1] = key
- tmp[#tmp+1] = "={"
- tmp[#tmp+1] = rst_context.escape(value)
- tmp[#tmp+1] = "},"
- end
- tmp[#tmp+1] = "]"
- options = tableconcat(tmp)
- end
- return stringformat(scheme, name, filename, options)
-end
-
-rst_directives.image = float_image
-rst_directives.inline_image = inline_image
-
-rst_directives.caution = function(data)
- local inline_parser = rst_context.inline_parser
- rst_context.addsetups("dbend")
- rst_context.addsetups("caution")
- local text = { }
- for i=1, #data do -- paragraphs
- local current = tableconcat(data[i], "\n")
- current = lpegmatch(inline_parser, current)
- current = rst_context.escape(current)
- text[i] = current
- end
- return stringformat([[
-\startRSTcaution
-%s
-\stopRSTcaution
-]], tableconcat(text, "\n\n"))
-end
-
-rst_directives.danger = function(data)
- local inline_parser = rst_context.inline_parser
- rst_context.addsetups("dbend")
- rst_context.addsetups("danger")
- local text = { }
- for i=1, #data do -- paragraphs
- local current = tableconcat(data[i], "\n")
- current = lpegmatch(inline_parser, current)
- current = rst_context.escape(current)
- text[i] = current
- end
- return stringformat([[
-\startRSTdanger
-%s
-\stopRSTdanger
-]], tableconcat(text, "\n\n"))
-end
-
--- http://docutils.sourceforge.net/docs/ref/rst/directives.html
-rst_directives.DANGER = function(data)
- local inline_parser = rst_context.inline_parser
- local text = { }
- for i=1, #data do -- paragraphs
- local current = tableconcat(data[i], "\n")
- current = lpegmatch(inline_parser, current)
- current = rst_context.escape(current)
- text[i] = current
- end
- return stringformat([[
-
-%% The Rabbit of Caerbannog
-\startlinecorrection
-\blank[force,big]
-\framed[frame=on,
- corner=round,
- rulethickness=5pt,
- align=middle,
- width=\hsize,
- frameoffset=.5em,
- backgroundoffset=1em,
- background=color,
- backgroundcolor=red,
- foreground=color,
- foregroundcolor=black]{%%
- \language[en-gb]\tfb\bf
- Follow only if ye be men of valour, for the entrance to this cave is guarded
- by a creature so foul, so cruel that no man yet has fought with it and lived.
- Bones of full fifty men lie strewn about its lair. So, brave knights, if you
- do doubt your courage or your strength, come no further, for death awaits you
- all with nasty, big, pointy teeth.%%
- \blank[force,big]
- %s%%
-}
-\blank[force,big]
-\stoplinecorrection
-]], tableconcat(text, "\n\n"))
-end
-
-rst_directives.mp = function(name, data)
- local mpcode = stringformat([[
-\startreusableMPgraphic{%s}
-%s
-\stopreusableMPgraphic
-]], name, data)
- mpcode = mpcode .. stringformat([[
-\def\RSTsubstitution%s{%%
- \reuseMPgraphic{%s}%%
-}
-]], name, name)
- return mpcode
-end
-
---- There’s an issue with buffers leaving trailing spaces due to their
---- implementation.
---- http://archive.contextgarden.net/message/20111108.175913.1d994624.en.html
-rst_directives.ctx = function(name, data)
- local ctx = stringformat([[
-
-\startbuffer[%s]
-%s\stopbuffer
-\def\RSTsubstitution%s{%%
- \getbuffer[%s]\removeunwantedspaces%%
-}
-]], name, data, name, name)
- return ctx
-end
-
-rst_directives.lua = function(name, data)
- local luacode = stringformat([[
-
-\startbuffer[%s]
-\startluacode
-%s
-\stopluacode
-\stopbuffer
-\def\RSTsubstitution%s{%%
- \getbuffer[%s]\removeunwantedspaces%%
-}
-]], name, data, name, name)
- return luacode
-end
-
---------------------------------------------------------------------------------
---- Experimental math directive
---------------------------------------------------------------------------------
-
-rst_directives.math = function (name, data)
- data = data or name
- local formula
- if type(data) == "table" then
- local last, i = #data, 1
- while i <= last do
- local line = stringstrip(data[i])
- if line and line ~= "" then
- formula = formula and formula .. " " .. line or line
- end
- i = i + 1
- end
- end
- return stringformat([[
-\startformula
-%s
-\stopformula
-]], formula)
-end
-
---------------------------------------------------------------------------------
---- End math directive
---------------------------------------------------------------------------------
-
-rst_directives.replace = function(name, data)
- return stringformat([[
-
-\def\RSTsubstitution%s{%s}
-]], name, data)
-end
-
---------------------------------------------------------------------------------
---- Containers.
---------------------------------------------------------------------------------
-
---- *data*:
---- { [1] -> directive name,
---- [>1] -> paragraphs }
-
-rst_directives.container = function(data)
- local inline_parser = rst_context.inline_parser
- local tmp = { }
- for i=1, #data do -- paragraphs
- local current = tableconcat(data[i], "\n")
- current = lpegmatch(inline_parser, current)
- current = rst_context.escape(current)
- tmp[i] = current
- end
- local content = tableconcat(tmp, "\n\n")
- local name = data.name
- if name and name ~= "" then
- name = stringstrip(data.name)
- return stringformat([[
-\start[%s]%%
-%s%%
-\stop
-]], name, content)
- else
- return stringformat([[
-\begingroup%%
-%s%%
-\endgroup
-]], content)
- end
-end
-
--- vim:ft=lua:sw=4:ts=4:expandtab
-
diff --git a/macros/context/contrib/context-rst/tex/context/third/rst/rst_helpers.lua b/macros/context/contrib/context-rst/tex/context/third/rst/rst_helpers.lua
deleted file mode 100644
index ba6abfb123..0000000000
--- a/macros/context/contrib/context-rst/tex/context/third/rst/rst_helpers.lua
+++ /dev/null
@@ -1,657 +0,0 @@
-#!/usr/bin/env texlua
---------------------------------------------------------------------------------
--- FILE: rst_helpers.lua
--- USAGE: called by rst_parser.lua
--- DESCRIPTION: Complement to the reStructuredText parser
--- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
--- CHANGED: 2014-03-02 19:20:28+0100
---------------------------------------------------------------------------------
---
-
-local P, R, S, V, lpegmatch
- = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match
-
-local C, Carg, Cb, Cc, Cg,
- Cmt, Cp, Cs, Ct
- = lpeg.C, lpeg.Carg, lpeg.Cb, lpeg.Cc, lpeg.Cg,
- lpeg.Cmt, lpeg.Cp, lpeg.Cs, lpeg.Ct
-
-local helpers
-helpers = thirddata.rst_helpers
-helpers.table = {}
-helpers.cell = {}
-
-local utf = unicode.utf8
-local utflen = utf.len
-
-local stringstrip = string.strip
-local stringformat = string.format
-
-function helpers.dbg_writef(...)
- if helpers.rst_debug then
- io.write(stringformat(...))
- end
-end
-
-local dbg_write = helpers.dbg_writef
-
-helpers.patterns = {}
-
-do
- local p = helpers.patterns
- p.dash = P"-"
- p.equals = P"="
- p.plus = P"+"
- p.bar = P"|"
- p.eol = P"\n"
- p.last = -P(1)
- p.space = P" "
-
- p.dash_or_equals = p.dash + p.equals
-
- p.celldelim = p.bar + p.plus
- p.cellcontent = (1 - p.celldelim)
- p.cell = p.celldelim * C((1 - p.celldelim)^1) * #p.celldelim
- p.cell_line = p.plus * p.dash^1 * #p.plus
- p.dashesonly = p.dash^1 * p.last
- p.spacesonly = p.space^1 * p.last
-
- p.col_start = Cp() * p.dash_or_equals^1
- p.col_stop = p.dash_or_equals^1 * Cp()
- p.column_starts = Ct(p.col_start * ( p.space^1 * p.col_start)^1)
- p.column_stops = Ct(p.col_stop * ( p.space^1 * p.col_stop)^1)
-
- p.st_headsep = p.equals^1 * (p.space^1 * p.equals^1)^1
- p.st_colspan = p.dash^1 * (p.space^1 * p.dash^1)^0 * p.space^0 * p.last
- p.st_span_starts = Ct(Cp() * p.dash^1 * (p.space^1 * Cp() * p.dash^1)^0)
- p.st_span_stops = Ct(p.dash^1 * Cp() * (p.space^1 * p.dash^1 * Cp())^0)
-
-
- p.cells = P{
- [1] = "cells",
- cells = p.celldelim
- * (C(V"in_cell")
- * (V"matchwidth" * C(V"in_cell"))^1),
-
- in_cell = p.cellcontent^1
- + (p.dash - p.cellcontent)^1,
-
- matchwidth = Cmt(C(p.celldelim) * Carg(1), function(s,i,del, layout)
- local pos = 1
- local lw = layout.widths
- for n=1, #lw do
- pos = pos + lw[n] + 1
- if (i - 1) == pos then return true end
- end
- return false
- end),
- }
-
- p.sep_line = p.plus * (p.dash^1 * p.plus)^1 * p.last
- p.sep_head = p.plus * (p.equals^1 * p.plus)^1 * p.last
-
- p.sep_part = ((1 - p.cell_line)^0 * p.cell_line) - p.sep_line
-
- p.new_row = p.sep_line + p.sep_head + p.sep_part
-
- p.whitespace = S" \t\v\r\n"^1
- p.strip = p.whitespace^0 * C((1 - (p.whitespace * p.last))^1) * p.whitespace^0 * p.last
-
-
- local colon = P":"
- local escaped_colon = P"\\:"
- local nocolon = (escaped_colon + (1 - colon))^1
- p.colon_right = nocolon * colon
- p.colon_keyval = colon^-1 * C(nocolon) * colon * p.space^1 * C((1 - (p.space^0 * P(-1)))^1)
-
- -- color expression matching for text roles
- local digit = R"09"
- local dot = P"."
- local colvalue = digit * dot * digit^1
- + digit
- + dot * digit^1
- local coldelim = P"_" + P"-"
- p.rgbvalues = P"rgb_"
- * Ct( C(colvalue) * coldelim * C(colvalue) * coldelim * C(colvalue) )
-end
-
-function helpers.cell.create(raw, n_row, n_col, parent, variant)
- local p = helpers.patterns
- local cell = {}
- cell.stripped = raw and p.strip:match(raw) or ""
- cell.content = raw
- cell.width = raw and utflen(raw) or 0
- cell.bytes = raw and #raw or 0
- cell.variant = "normal" -- [normal|separator|y_continue|x_continue]
- cell.pos = {}
- cell.pos.x = n_col
- cell.pos.y = n_row
- cell.span = {}
- cell.span.x = 1
- cell.span.y = 1
- cell.parent = parent
- return cell
-end
-
-function helpers.cell.get_x_span(content, layout, init)
- local acc = 0
- local lw = layout.widths
- for n=init, #lw do
- acc = acc + lw[n] + 1
- if utflen(content) + 1 == acc then
- return n - init
- end
- end
- return false
-end
-
-
--- Extending a cell by 1 cell horizontally.
-function helpers.cell.add_x (cell)
- cell.span.x = cell.span.x + 1
-end
-
-
-local function set_layout (line)
- local p = helpers.patterns
- local layout = {}
- local slice = Ct((p.plus * C(p.dash^1) * #p.plus)^1)
-
- layout.widths = {}
- layout.slices = {}
- local elms = lpegmatch(slice, line)
- for n=1, #elms do
- local elm = elms[n]
- layout.widths[n] = #elm
- layout.slices[n] = elm
- end
- return layout
-end
-
-function helpers.table.create(raw)
- local newtab = {}
- newtab.rows = {}
- newtab.layout = set_layout(raw[1])
-
- local p = helpers.patterns
-
- newtab.resolve_parent = function(row, col, array)
- local array = array or newtab.rows
- local cell = array[row][col]
- local par_row, par_col = row, col
- if cell.parent then
- par_row, par_col = newtab.resolve_parent(cell.parent.y, cell.parent.x)
- end
- return par_row, par_col
- end
-
- newtab.__init = function()
- local hc = helpers.cell
- local rowcount = 0
- local newtablayout = newtab.layout
- for nr=1, #raw do
- local row = raw[nr]
- newtab.rows[nr] = {}
- local this_row = newtab.rows[nr]
- this_row.sepline = p.sep_line:match(row)
- this_row.sephead = p.sep_head:match(row)
- this_row.seppart = p.sep_part:match(row)
- if this_row.sephead then
- newtab.has_head = true
- newtab.head_end = nr
- end
-
- local splitted = { p.cells:match(row, 1, newtablayout) }
- local pos_layout, pos_row = 1, 1
- local make_empty = {}
- make_empty.n, make_empty.parent = 0, nil
-
- while pos_layout <= #newtablayout.widths do
- local splitpos = splitted[pos_layout]
- local layoutwidth = newtablayout.widths[pos_layout]
- local span = 1
- local this
-
- if make_empty.n > 0 then
- make_empty.n = make_empty.n - 1
- this = hc.create("", nr, pos_layout, make_empty.parent)
- this.parent = make_empty.parent
- p_row, p_col = newtab.resolve_parent(this.parent.y, this.parent.x)
- local thisparent = newtab.rows[p_row][p_col]
- if this_row.sepline or this_row.sephead or
- newtab.rows[p_row][p_col].variant == "separator" then
- this.variant = "separator"
- else
- this.variant = "empty1"
- end
- else
- local cellwidth = utflen(splitpos)
- if cellwidth > layoutwidth then
- span = span + hc.get_x_span(splitpos, newtablayout, pos_layout)
- end
- pos_row = pos_row + span
- this = hc.create(splitpos, nr, pos_layout, nil)
- if p.dashesonly:match(splitpos) or
- this_row.sepline or this_row.sephead then
- this.variant = "separator"
- end
- this.span.x = span
- make_empty.n = span - 1
- make_empty.parent = span > 1 and { y = nr, x = pos_layout } or nil
- end
-
- this_row[pos_layout] = this
- pos_layout = pos_layout + 1
- end -- while
- end -- for loop over rows
-
- local oldrows = newtab.rows
- local newrows = oldrows
- for nc=1, #newtablayout.widths do
- local width = newtablayout.widths[nc]
- -- this is gonna be extremely slow but at least it's readable
- local newrow
- local currentrow = 1
- for nr=1, #newrows do
- local row = newrows[nr]
- local cell = row[nc]
- dbg_write("nc: %s, nr:%2s | %9s | ", nc, nr,cell.variant)
- if row.sepline or row.sephead
- or p.dashesonly:match(cell.content)
- or cell.variant == "separator" then -- separator; skipping and beginning new row
- newrows[nr][nc] = cell
- currentrow = currentrow + 1
- newrow = true
- dbg_write("new >%24s< ", cell.stripped)
- if cell.parent then dbg_write("parent |") else dbg_write("no par |") end
- else
- dbg_write("old >%24s< ", cell.stripped)
- if cell.parent then dbg_write("parent |") else dbg_write("no par |") end
- if newrow then
- newrows[nr][nc] = cell
- currentrow = currentrow + 1
- else -- continuing parent
-
- local par_row, par_col
- local parent
- if cell.parent then
- par_row, par_col = newtab.resolve_parent(cell.parent.y, cell.parent.x, newrows)
- dbg_write(" use %s,%2s | ", par_col, par_row)
- else -- Using vertical predecessor.
- par_row, par_col = newtab.resolve_parent(nr-1,nc, newrows)
- dbg_write(" new %s,%2s | ", par_col, par_row)
- end
- parent = newrows[par_row][par_col]
-
- if newrows[nr].seppart then
- dbg_write("span++")
- parent.span.y = parent.span.y + 1
- end
-
- parent.content = parent.content .. cell.content
- parent.stripped = parent.stripped .. " " .. cell.stripped
- cell.variant = "empty2"
- cell.parent = { x = par_col, y = par_row }
- end
- newrow = false
- end
- dbg_write("\n")
- newrows[nr][nc] = cell
- end -- for loop over rows
- end -- for loop over columns
- --newtab.rows = oldrows
- newtab.rows = newrows
- end
-
- newtab.__init()
-
---[[
- newtab.__draw_debug = function()
- for nr=1, #newtab.rows do
- local row = newtab.rows[nr]
- for nc=1, #row do
- local cell = row[nc]
- local field = cell.variant:sub(1,7)
- if cell.parent then
- field = field .. string.format(" %s,%2s",cell.parent.x, cell.parent.y)
- end
- dbg_write("%12s | ", field)
- end
- dbg_write("\n")
- end
- end
---]]
-
- return newtab
-end
-
-
-
-function helpers.table.resolve_parent (row, col, array)
- local cell = array[row][col]
- local par_row, par_col = row, col
- if cell.parent then
- par_row, par_col = self.resolve_parent(cell.parent.y, cell.parent.x)
- end
- return par_row, par_col
-end
-
-
--- Check the column boundaries of a simple table.
-function helpers.get_st_boundaries (str)
- local p_column_starts = helpers.patterns.column_starts
- local p_column_stops = helpers.patterns.column_stops
- local starts, stops, slices, elms = { }, { }, { }, nil
-
- elms = lpegmatch(p_column_starts, str)
- for n=1, #elms do
- local elm = elms[n]
- slices[n] = { start = elm }
- starts[elm] = true
- end
-
- elms = lpegmatch(p_column_stops, str)
- for n=1, #elms do
- local elm = elms[n]
- slices[n]["stop"] = elm
- stops[elm] = true
- end
- return { starts = starts, stops = stops, slices = slices }
-end
-
-function helpers.table.simple(raw)
- local rows = {}
- local multispans = {}
- local bounds = helpers.get_st_boundaries(raw[1])
- local p = helpers.patterns
-
- for nr=1, #raw do
- local row = raw[nr]
- local newrow = {}
- if not p.st_headsep:match(row) and
- not p.st_colspan:match(row) then
- local starts, stops = {}, {}
- local check_span = false
- if p.st_colspan:match(raw[nr+1]) then -- expect spans over several columns
- starts = p.st_span_starts:match(raw[nr+1])
- stops = p.st_span_stops :match(raw[nr+1])
- check_span = true
- else
- for ncol=1, #bounds.slices do
- local slice = bounds.slices[ncol]
- starts[ncol] = slice.start
- stops [ncol] = slice.stop
- end
- end
-
- for nc=1, #starts do
- local start = starts[nc]
- -- last column can exceed layout width
- local stop = nc ~= #starts and stops[nc] or #row
- local cell = {
- content = "",
- span = { x = 1, y = 1 },
- }
- cell.content = stringstrip(row:sub(start, stop))
- if check_span then
- local start_at, stop_at
- for ncol=1, #bounds.slices do
- local slice = bounds.slices[ncol]
- if slice.start == start then
- start_at = ncol
- end
- if start_at and
- not (ncol == #bounds.slices) then
- if slice.stop == stop then
- stop_at = ncol
- break
- end
- else -- last column, width doesn't matter
- stop_at = ncol
- end
- end
- cell.span.x = 1 + stop_at - start_at
- end
- newrow[nc] = cell
- end
- elseif p.st_colspan:match(row) then
- newrow.ignore = true
- elseif not rows.head_end and
- nr > 1 and #raw > nr then -- ends the header
- rows.head_end = nr
- newrow.head_sep = true
- newrow.ignore = true
- else
- newrow.ignore = true
- end
- rows[nr] = newrow
- end
-
- for nr=1, #rows do
- local row = rows[nr]
- if not row.ignore and row[1].content == "" then
- row.ignore = true
- for nc=1, #row do
- local cell = row[nc]
- local par_row, par_col = helpers.table.resolve_parent(nr - 1, nc, rows)
- parent = rows[par_row][par_col]
- parent.content = parent.content .. " " .. cell.content
- cell.content = ""
- end
-
- end
- end
-
- return rows
-end
-
-helpers.list = {}
-
-do
- local c = {}
- c.roman = S"ivxlcdm"^1
- c.Roman = S"IVXLCDM"^1
- c.alpha = R"az" - P"i" - P"v" - P"x" - P"l"
- c.Alpha = R"AZ" - P"I" - P"V" - P"X" - P"L"
- c.digit = R"09"^1
- c.auto = P"#"
-
- local stripme = S" ()."
- local dontstrip = 1 - stripme
- local itemstripper = stripme^0 * C(dontstrip^1) * stripme^0
-
- local con = function (str)
- str = itemstripper:match(str)
- for conv, pat in next, c do
- if pat:match(str) then
- return conv
- end
- end
- return false
- end
- helpers.list.conversion = con
-
- local rnums = {
- i = 1,
- v = 5,
- x = 10,
- l = 50,
- c = 100,
- d = 500,
- m = 1000,
- }
-
- local function roman_to_arab (str)
- local n = 1
- local curr, succ
- local max_three = { }
- local value = 0
- while n <= #str do
- if curr and curr == max_three[#max_three] then
- if #max_three >= 3 then
- return "Not a number"
- else
- max_three[#max_three+1] = curr
- end
- else
- max_three = { curr }
- end
-
- curr = rnums[str:sub(n,n)] or 1
-
- n = n + 1
- succ = str:sub(n,n)
-
- if succ and succ ~= "" then
- succ = rnums[succ]
- if curr < succ then
- --n = n + 1
- --value = value + succ - curr
- value = value - curr
- else
- value = value + curr
- end
- else
- value = value + curr
- end
- end
- return value
- end
- helpers.list.roman_to_arab = roman_to_arab
-
- local suc = function (str, old)
- str, old = itemstripper:match(str), itemstripper:match(old)
- local n_str, n_old = tonumber(str), tonumber(old)
- if n_str and n_old then -- arabic numeral
- return n_str == n_old + 1
- end
-
- local con_str, con_old = con(str), con(old)
- if con_str == "alpha" or
- con_str == "Alpha" then
- return str:byte() == old:byte() + 1
- else -- “I'm a Roman!” - “A woman?” - “No, *Roman*! - Au!” - “So your father was a woman?”
- if not (str:lower() == str or
- str:upper() == str) then -- uneven cased --> fail
- return false
- end
-
- local trc = thirddata.rst.state.roman_cache
- n_str = trc[str] or nil
- n_old = trc[old] or nil
- if not n_str then
- n_str = roman_to_arab(str:lower())
- trc[str] = n_str
- end
- if not n_old then
- n_old = roman_to_arab(old:lower())
- trc[old] = n_old
- end
- return n_str == n_old + 1
- end
- end
- helpers.list.successor = suc
-
- local greater = function (str, old)
- str, old = itemstripper:match(str), itemstripper:match(old)
- local n_str, n_old = tonumber(str), tonumber(old)
- if n_str and n_old then -- arabic numeral
- return n_str > n_old
- end
-
- local con_str, con_old = con(str), con(old)
- if con_str == "alpha" or
- con_str == "Alpha" then
- return str:byte() > old:byte()
- else
- if not (str:lower() == str or
- str:upper() == str) then -- uneven cased --> fail
- return false
- end
-
-
- local trc = thirddata.rst.state.roman_cache
- n_str = trc[str] or nil
- n_old = trc[old] or nil
- if not n_str then
- n_str = roman_to_arab(str:lower())
- trc[str] = n_str
- end
- if not n_old then
- n_old = roman_to_arab(old:lower())
- trc[old] = n_old
- end
- return n_str > n_old
- end
- end
- helpers.list.greater = greater
-
- local gd = function(str)
- str = itemstripper:match(str)
- local value
- local con_str = con(str)
- if con_str == "alpha" or
- con_str == "Alpha" then
- return str:byte()
- else
- if not (str:lower() == str or
- str:upper() == str) then
- return false
- end
-
- local trc = thirddata.rst.state.roman_cache
- n_str = trc[str] or nil
- if not n_str then
- n_str = roman_to_arab(str:lower())
- trc[str] = n_str
- end
- return n_str
- end
- end
-
- helpers.list.get_decimal = gd
-end
-
-helpers.string = {}
-
-do
- --- This grammar inside the function is slightly faster than the
- --- same as an upvalue with the value of “width” repeatedly given
- --- via lpeg.Carg(). This holds for repeated calls as well.
- local ulen = utflen
- function helpers.string.wrapat (str, width)
- local width = width or 65
- local linelength = 0
- local wrap = P{
- [1] = "wrapper",
-
- wrapper = Cs(V"nowhitespace"^0 * (Cs(V"wrapme") + V"other")^1),
- whitespace = S" \t\v" + P"\n" / function() linelength = 0 end,
- nowhitespace = 1 - V"whitespace",
- typing = P[[\\type{]] * (1 - P"}")^0 * P"}",
- typingenv = P[[\\starttyping]] * (1 - P[[\\stoptyping]])^0 * P[[\\stoptyping]],
- ignore = V"typing" + V"typingenv",
- --- the initial whitespace of the “other” pattern must not
- --- be enforced (“^1”) as it will break the exceptions
- --- (“ignore” pattern)! In general it is better to have the
- --- wrapper ignore some valid breaks than to not have it
- --- matching some valid strings at all.
- other = Cmt(V"whitespace"^0 * (V"ignore" + (1 - V"whitespace")^1), function(s,i,w)
- linelength = linelength + ulen(w)
- return true
- end),
- wrapme = Cmt(V"whitespace"^1 * (1 - V"whitespace" - V"ignore")^1, function(s,i,w)
- local lw = ulen(w)
- if linelength + lw > width then
- linelength = lw
- return true
- end
- return false
- end) / function (word) return "\n" .. word:match("[^%s]+") end,
- }
-
- local reflowed = wrap:match(str)
- return reflowed
- end
-end
-
diff --git a/macros/context/contrib/context-rst/tex/context/third/rst/rst_parser.lua b/macros/context/contrib/context-rst/tex/context/third/rst/rst_parser.lua
deleted file mode 100644
index a3a59ae365..0000000000
--- a/macros/context/contrib/context-rst/tex/context/third/rst/rst_parser.lua
+++ /dev/null
@@ -1,1635 +0,0 @@
-#!/usr/bin/env texlua
---------------------------------------------------------------------------------
--- FILE: rst_parser.lua
--- USAGE: refer to doc/documentation.rst
--- DESCRIPTION: https://bitbucket.org/phg/context-rst/overview
--- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
--- VERSION: 0.6c
--- CHANGED: 2014-03-02 19:20:17+0100
---------------------------------------------------------------------------------
---
-
-local usage_info = [[
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- rstConTeXt
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Functionality has been moved, the reST converter can now be
-accessed via mtxrun:
-
- $mtxrun --script rst
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-]]
-
-local main = function ()
- io.write("\n"..usage_info.."\n")
- return -1
-end
-
-thirddata = thirddata or { }
-thirddata.rst = { }
-thirddata.rst_helpers = { rst_debug = false }
-
-if context then
- if environment.argument "debug" == true then
- thirddata.rst_helpers.rst_debug = true
- end
-elseif not scripts then
- return main()
-end
-
-environment.loadluafile"rst_helpers"
-environment.loadluafile"rst_directives"
-environment.loadluafile"rst_setups"
-environment.loadluafile"rst_context"
-
-local rst = thirddata.rst
-local helpers = thirddata.rst_helpers
-local optional_setups = thirddata.rst_setups
-
-rst.strip_BOM = true
-rst.expandtab = true
-rst.shiftwidth = 4
-rst.crlf = true
-
-local utf = unicode.utf8
-
-local ioopen = io.open
-local iowrite = io.write
-local select = select
-local stringfind = string.find
-local stringformat = string.format
-local stringgsub = string.gsub
-local stringlen = string.len
-local stringmatch = string.match
-local stringstrip = string.strip
-local stringsub = string.sub
-local tableconcat = table.concat
-local utflen = utf.len
-
-local context = context
-
-local warn
-do
- local ndebug = 0
- warn = function(str, ...)
- if not helpers.rst_debug then return false end
- ndebug = ndebug + 1
- local slen = #str + 3
- --str = "*["..str.."]"
- str = stringformat("*[%4d][%s]", ndebug, str)
- for i=1, select ("#", ...) do
- local current = select (i, ...)
- if 80 - i * 8 - slen < 0 then
- local indent = ""
- for i=1, slen do
- indent = indent .. " "
- end
- str = str .. "\n" .. indent
- end
- str = str .. stringformat(" |%6s", stringstrip(tostring(current)))
- end
- iowrite(str .. " |\n")
- return 0
- end
-end
-
-local C, Cb, Cc, Cg,
- Cmt, Cp, Cs, Ct
- = lpeg.C, lpeg.Cb, lpeg.Cc, lpeg.Cg,
- lpeg.Cmt, lpeg.Cp, lpeg.Cs, lpeg.Ct
-
-local P, R, S, V, lpegmatch
- = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.match
-
-local utf = unicode.utf8
-
-local state = {}
-thirddata.rst.state = state
-
-state.depth = 0
-state.bullets = {} -- mapping bullet forms to depth
-state.bullets.max = 0
-state.lastbullet = ""
-state.lastbullets = {}
-state.roman_cache = {} -- storing roman numerals that were already converted
-state.currentindent = "" -- used in definition lists and elsewhere
-state.previousindent = "" -- for literal blocks included in paragraphs to restore the paragraph indent
-state.currentwidth = 0 -- table layout
-state.currentlayout = {} -- table layout
-state.previousadorn = nil -- section underlining and overlining
-
-state.footnotes = {}
-state.footnotes.autonumber = 0
-state.footnotes.numbered = {}
-state.footnotes.labeled = {}
-state.footnotes.autolabel = {}
-state.footnotes.symbol = {}
-
-state.addme = {}
-
-local valid_adornment
-do
- --[[--
-
- valid_adornment -- This subpattern tests if the string consists
- entirely of one repeated adornment char.
-
- --]]--
- local first_adornment = ""
- local adornment_char = S[[!"#$%&'()*+,-./:;<=>?@[]^_`{|}~]] + P[[\\]]
- local check_first = Cmt(adornment_char, function(_,_, first)
- first_adornment = first
- return true
- end)
- local check_other = Cmt(adornment_char, function(_,_, char)
- return char == first_adornment
- end)
- valid_adornment = check_first * check_other^1 * -P(1)
-end
-
-local enclosed_mapping = {
- ["'"] = "'",
- ['"'] = '"',
- ["("] = ")",
- ["["] = "]",
- ["{"] = "}",
- ["<"] = ">",
-}
-
-local utfchar = P{ -- from l-lpeg.lua, modified to use as grammar
- [1] = "utfchar",
- utf8byte = R("\128\191"),
- utf8one = R("\000\127"),
- utf8two = R("\194\223") * V"utf8byte",
- utf8three = R("\224\239") * V"utf8byte" * V"utf8byte",
- utf8four = R("\240\244") * V"utf8byte" * V"utf8byte" * V"utf8byte",
- utfchar = V"utf8one" + V"utf8two" + V"utf8three" + V"utf8four",
-}
-
-
-
-local rst_parser = P {
- [1] = V"document",
-
- document = V"blank_line"^0 * Cs(V"block"^1),
-
---------------------------------------------------------------------------------
--- Blocks
---------------------------------------------------------------------------------
-
- block = V"explicit_markup"
- + Cs(V"section") / rst.escape
- + V"target_block"
- + V"literal_block"
- + Cs(V"list") / rst.escape
- + Cs(V"line_block") / rst.escape
- + Cs(V"table_block") / rst.escape
- + V"transition" --/ rst.escape
- + V"comment_block"
- + Cs(V"block_quote") / rst.escape
- + Cs(V"paragraph") / rst.escape
- ,
-
---------------------------------------------------------------------------------
--- Explicit markup block
---------------------------------------------------------------------------------
-
- explicit_markup_start = V"double_dot" * V"whitespace",
-
- explicit_markup = V"footnote_block"
- + V"directive_block"
- + V"substitution_definition"
- ,
-
- explicit_markup_block = V"explicit_markup"^1
- ,
-
---------------------------------------------------------------------------------
--- Directives block
---------------------------------------------------------------------------------
-
- directive_block = V"directive"
- --* (V"blank_line"^-1 * V"directive")^0
- * V"end_block"
- ,
-
- directive = V"explicit_markup_start"
- * C(((V"escaped_colon" + (1 - V"colon" - V"eol"))
- - V"substitution_text")^1) --> directive name
- * V"double_colon"
- * Ct(V"directive_block_multi" + V"directive_block_single") --> content
- / rst.directive
- ,
-
- directive_block_multi = Cg((1 - V"eol")^0, "name") -- name
- * V"eol"
- * V"blank_line"^0 -- how many empty lines are permitted?
- * V"directive_indented_lines"
- ,
-
- directive_block_single = V"whitespace"^1 * Ct(C((1 - V"eol")^1)) * V"eol",
-
---------------------------------------------------------------------------------
--- Substitution definition block
---------------------------------------------------------------------------------
-
- substitution_definition = V"explicit_markup_start"
- * V"substitution_text"
- * V"whitespace"^1
- * C((1 - V"colon" - V"space" - V"eol")^1) -- directive
- * V"double_colon"
- * Ct(V"data_directive_block")
- * V"end_block"^-1
- / rst.substitution_definition
- ,
-
- substitution_text = V"bar"
- * C((1 - V"bar" - V"eol")^1)
- * V"bar"
- ,
-
- data_directive_block = V"data_directive_block_multi"
- + V"data_directive_block_single"
- ,
- data_directive_block_single = Ct(C((1 - V"eol")^0)) * V"eol",
-
- data_directive_block_multi = Cg((1 - V"eol")^0, "first") * V"eol"
- * V"directive_indented_lines"
- ,
-
- directive_indented_lines = Ct(V"directive_indented_first"
- * V"directive_indented_other"^0)
- * (V"blank_line"^1 * Ct(V"directive_indented_other"^1))^0
- ,
-
-
- directive_indented_first = Cmt(V"space"^1, function(s,i,indent)
- warn("sub-i", #indent, i)
- state.currentindent = indent
- return true
- end)
- * C((1 - V"eol")^1) * V"eol"
- ,
-
- directive_indented_other = Cmt(V"space"^1, function(s,i,indent)
- warn("sub-m",
- #state.currentindent <= #indent,
- #indent,
- #state.currentindent,
- i)
- return #state.currentindent <= #indent
- end)
- * C((1 - V"eol")^1) * V"eol"
- ,
-
-
---------------------------------------------------------------------------------
--- Explicit markup footnote block
---------------------------------------------------------------------------------
-
- footnote_block = V"footnote"^1 * V"end_block",
-
- footnote = V"explicit_markup_start"
- * (V"footnote_marker" + V"citation_reference_label")
- * C(V"footnote_content")
- * (V"blank_line" - V"end_block")^-1
- / rst.footnote
- ,
-
- footnote_marker = V"lsquare" * C(V"footnote_label") * V"rsquare" * V"whitespace"^0
- ,
-
- citation_reference_label = V"lsquare" * C(V"letter" * (1 - V"rsquare")^1) * V"rsquare" * V"whitespace"^0,
-
- footnote_label = V"digit"^1
- + (V"gartenzaun" * V"letter"^1)
- + V"gartenzaun"
- + V"asterisk"
- ,
-
- footnote_content = V"footnote_long" -- single line
- + V"footnote_simple"
- ,
-
- footnote_simple = (1 - V"eol")^1 * V"eol"
- ,
-
- footnote_long = (1 - V"eol")^1 * V"eol"
- * V"footnote_body"
- ,
-
- footnote_body = V"fn_body_first"
- * (V"fn_body_other" + V"fn_body_other_block")^0
- ,
-
- fn_body_first = Cmt(V"space"^1, function(s, i, indent)
- warn("fn-in", true, #indent)
- state.currentindent = indent
- return true
- end)
- * (1 - V"eol")^1 * V"eol"
- ,
-
- fn_matchindent = Cmt(V"space"^1, function(s, i, indent)
- local tc = state.currentindent
- warn("fn-ma", tc == indent, #tc, #indent, i)
- return tc == indent
- end)
- ,
-
- fn_body_other = V"fn_body_other_regular"
- * (V"blank_line" * V"fn_body_other_regular")^0
- ,
-
- fn_body_other_regular = V"fn_matchindent"
- * (1 - V"eol")^1 * V"eol"
- ,
-
- -- TODO find a way to get those to work in footnotes!
- fn_body_other_block = V"line_block"
- + V"table_block"
- + V"transition"
- + V"block_quote"
- + V"list"
- ,
-
---------------------------------------------------------------------------------
--- Table block
---------------------------------------------------------------------------------
-
- table_block = V"simple_table"
- + V"grid_table"
- ,
-
---------------------------------------------------------------------------------
--- Simple tables
---------------------------------------------------------------------------------
-
- simple_table = Ct(V"st_first_row"
- * V"st_other_rows")
- * V"end_block"
- / function (tab)
- return rst.simple_table(helpers.table.simple(tab))
- end
- ,
-
- st_first_row = V"st_setindent"
- * C(V"st_setlayout")
- * V"space"^0
- * V"eol"
- ,
-
- st_setindent = Cmt(V"space"^0, function(s, i, indent)
- warn("sta-i", "true", #indent, "set", i)
- state.currentindent = indent
- return true
- end)
- ,
-
- st_matchindent = Cmt(V"space"^0, function(s, i, indent)
- warn("sta-m", state.currentindent == indent, #indent, #state.currentindent, i)
- return state.currentindent == indent
- end)
- ,
-
- st_setlayout = Cmt((V"equals"^1) * (V"spaces" * V"equals"^1)^1, function(s, i, layout)
- local tc = state.currentlayout
- warn("sta-l", #layout, "set", "", i)
- tc.raw = layout
- tc.bounds = helpers.get_st_boundaries(layout)
- return true
- end)
- ,
-
- st_other_rows = (V"st_content"^1 * V"st_separator")^1,
-
- st_content = V"blank_line"^-1
- * C(V"st_matchlayout"),
-
- st_matchlayout = -#V"st_separator" * Cmt((1 - V"eol")^1, function (s, i, content)
- -- Don't check for matching indent but if the rest is
- -- fine then the line should be sane. This allows
- -- cells starting with spaces.
- content = stringsub (content, #state.currentindent)
- local tcb = state.currentlayout.bounds
- local n = 1
- local spaces_only = P" "^1
- while n < #tcb.slices do
- local from = tcb.slices[n] .stop
- local to = tcb.slices[n+1].start
- local between = lpegmatch (spaces_only, content, from)
- if not between then -- Cell spanning more than one row.
- -- pass
- warn("sta-c", "span", from, to, i)
- elseif not (between >= to) then
- warn("sta-c", "false", from, to, i)
- return false
- end
- n = n + 1
- end
- warn("sta-c", "true", #tcb.slices, "", i)
- return true
- end)
- * V"eol"
- ,
-
- st_separator = V"st_matchindent"
- * C(V"st_normal_sep" + V"st_colspan_sep")
- * V"eol"
- ,
-
- st_normal_sep = Cmt((V"equals"^1) * (V"spaces" * V"equals"^1)^1, function(s, i, layout)
- warn("sta-s", state.currentlayout.raw == layout, #layout, #state.currentlayout.raw, i)
- return state.currentlayout.raw == layout
- end)
- ,
-
- st_colspan_sep = Cmt(V"dash"^1 * (V"spaces" * V"dash"^1)^0, function(s, i, layout)
- local tcb = state.currentlayout.bounds
- local this = helpers.get_st_boundaries (layout)
- local start_valid = false
- for start, _ in next, this.starts do
- if tcb.starts[start] then
- start_valid = true
- local stop_valid = false
- for stop, _ in next, this.stops do
- if tcb.stops[stop] then -- bingo
- stop_valid = true
- end
- end
- if not stop_valid then
- warn("sta-x", stop_valid, #layout, #state.currentlayout.raw, i)
- return false
- end
- end
- end
- warn("sta-x", start_valid, #layout, #state.currentlayout.raw, i)
- return start_valid
- end)
- ,
-
-
---------------------------------------------------------------------------------
--- Grid tables
---------------------------------------------------------------------------------
-
- grid_table = Ct(V"gt_first_row"
- * V"gt_other_rows")
- * V"blank_line"^1
- / function(tab)
- return rst.grid_table(helpers.table.create(tab))
- end
- ,
-
- gt_first_row = V"gt_setindent"
- * C(V"gt_sethorizontal")
- * V"eol"
- ,
-
- gt_setindent = Cmt(V"space"^0, function(s, i, indent)
- warn("tab-i", true, #indent, "set", i)
- state.currentindent = indent
- return true
- end)
- ,
-
- gt_layoutmarkers = V"table_intersection" + V"table_hline" + V"table_header_hline",
-
- gt_sethorizontal = Cmt(V"gt_layoutmarkers"^3, function (s, i, width)
- warn("tab-h", "width", "true", #width, "set", i)
- state.currentwidth = #width
- return true
- end)
- ,
-
- gt_other_rows = V"gt_head"^-1
- * V"gt_body"
- ,
-
- gt_matchindent = Cmt(V"space"^0, function (s, i, this)
- local matchme = state.currentindent
- warn("tab-m", "indent", #this == #matchme, #this, #matchme, i)
- return #this == #matchme
- end)
- ,
-
-
- gt_cell = (V"gt_content_cell" + V"gt_line_cell")
- * (V"table_intersection" + V"table_vline")
- ,
-
- gt_content_cell = ((1 - V"table_vline" - V"table_intersection" - V"eol")^1),
-
- gt_line_cell = V"table_hline"^1,
-
- gt_contentrow = V"gt_matchindent"
- * C((V"table_intersection" + V"table_vline")
- * V"gt_cell"^1)
- * V"whitespace"^-1 * V"eol"
- ,
-
- gt_body = ((V"gt_contentrow" - V"gt_bodysep")^1 * V"gt_bodysep")^1,
-
- gt_bodysep = V"gt_matchindent"
- * C(Cmt(V"table_intersection"
- * (V"table_hline"^1 * V"table_intersection")^1, function(s, i, separator)
- local matchme = state.currentwidth
- warn("tab-m", "body", #separator == matchme, #separator, matchme, i)
- return #separator == matchme
- end))
- * V"whitespace"^-1 * V"eol"
- ,
-
- gt_head = V"gt_contentrow"^1
- * V"gt_headsep"
- ,
-
- gt_headsep = V"gt_matchindent"
- * C(Cmt(V"table_intersection"
- * (V"table_header_hline"^1 * V"table_intersection")^1, function(s, i, separator)
- local matchme = state.currentwidth
- warn("tab-s", "head", #separator == matchme, #separator, matchme, i)
- return #separator == matchme
- end))
- * V"whitespace"^-1 * V"eol"
- ,
-
-
---------------------------------------------------------------------------------
--- Block quotes
---------------------------------------------------------------------------------
-
- block_quote = Ct(Cs(V"block_quote_first"
- * V"block_quote_other"^0
- * (V"blank_line" * V"block_quote_other"^1)^0)
- * (V"blank_line"
- * Cs(V"block_quote_attri"))^-1)
- * V"end_block"
- / rst.block_quote
- ,
-
- block_quote_first = Cmt(V"space"^1, function (s, i, indent)
- warn("bkq-i", #indent, "", indent, "", i)
- state.currentindent = indent
- return true
- end) / ""
- * -V"attrib_dash"
- * (1 - V"eol")^1
- * V"eol"
- ,
-
- block_quote_other = Cmt(V"space"^1, function (s, i, indent)
- warn("bkq-m", #indent, #state.currentindent,
- indent, state.currentindent, i)
- return state.currentindent == indent
- end) / ""
- * -V"attrib_dash"
- * (1 - V"eol")^1
- * V"eol"
- ,
-
- block_quote_attri = V"block_quote_attri_first"
- * V"block_quote_attri_other"^0,
-
- block_quote_attri_first = Cmt(V"space"^1 * V"attrib_dash" * V"space", function (s, i, indent)
- local t = state
- warn("bqa-i", utflen(indent), #t.currentindent,
- indent, t.currentindent, i)
- local ret = stringmatch (indent, " *") == t.currentindent
- t.currentindent = ret and indent or t.currentindent
- return ret
- end) / ""
- * (1 - V"eol")^1
- * V"eol"
- ,
-
- block_quote_attri_other = Cmt(V"space"^1, function (s, i, indent)
- warn("bqa-m", #indent, utflen(state.currentindent),
- indent, state.currentindent, i)
- return utflen(state.currentindent) == #indent
- end) / ""
- * (1 - V"eol")^1
- * V"eol"
- ,
-
---------------------------------------------------------------------------------
--- Line blocks
---------------------------------------------------------------------------------
-
- line_block = Cs(V"line_block_first"
- * (V"line_block_other"
- + V"line_block_empty")^1)
- --* V"blank_line"
- * V"end_block"
- / rst.line_block
- ,
-
- line_block_marker = V"space"^0 * V"bar" * V"space",
-
- line_block_empty_marker = V"space"^0 * V"bar" * V"space"^0 * V"eol",
-
-
- line_block_first = Cmt(V"line_block_marker", function(s, i, marker)
- warn("lbk-i", #marker, "", marker, "", i)
- state.currentindent = marker
- return true
- end) / ""
- * V"line_block_line"
- ,
-
- line_block_empty = Cmt(V"line_block_empty_marker", function(s, i, marker)
- warn("lbk-e", #marker, #state.currentindent, marker, state.currentindent, i)
- marker = stringgsub (marker, "|.*", "| ")
- return state.currentindent == marker
- end) / ""
- / rst.line_block_empty
- ,
-
- line_block_other = Cmt(V"line_block_marker", function(s, i, marker)
- warn("lbk-m", #marker, #state.currentindent, marker, state.currentindent, i)
- return state.currentindent == marker
- end) / ""
- * V"line_block_line"
- ,
-
- line_block_line = Cs((1 - V"eol")^1
- * V"line_block_cont"^0
- * V"eol")
- / rst.line_block_line
- ,
-
- line_block_cont = (V"eol" - V"line_block_marker")
- * Cmt(V"space"^1, function(s, i, spaces)
- warn("lbk-c", #spaces, #state.currentindent, spaces, state.currentindent, i)
- return #spaces >= #state.currentindent
- end) / ""
- * (1 - V"eol")^1
- ,
-
---------------------------------------------------------------------------------
--- Literal blocks
---------------------------------------------------------------------------------
-
- literal_block = V"literal_block_marker"
- * Cs(V"literal_block_lines")
- * V"end_block"
- / rst.literal_block,
-
- literal_block_marker = V"double_colon" * V"whitespace"^0 * V"eol" * V"blank_line",
-
- literal_block_lines = V"unquoted_literal_block_lines"
- + V"quoted_literal_block_lines"
- ,
-
- unquoted_literal_block_lines = V"literal_block_first"
- * (V"blank_line"^-1 * V"literal_block_other")^0
- ,
-
- quoted_literal_block_lines = V"quoted_literal_block_first"
- * V"quoted_literal_block_other"^0 -- no blank lines allowed
- ,
-
- literal_block_first = Cmt(V"space"^1, function (s, i, indent)
- warn("lbk-f", #indent, "", "", i)
- if not indent or
- indent == "" then
- return false
- end
- if state.currentindent and #state.currentindent < #indent then
- state.currentindent = state.currentindent .. " "
- return true
- else
- state.currentindent = " "
- return true
- end
- end)
- * V"rest_of_line"
- * V"eol",
-
- literal_block_other = Cmt(V"space"^1, function (s, i, indent)
- warn("lbk-m",
- #indent,
- #state.currentindent,
- #indent >= #state.currentindent,
- i)
- return #indent >= #state.currentindent
- end)
- * V"rest_of_line"
- * V"eol"
- ,
-
- quoted_literal_block_first = Cmt(V"adornment_char", function (s, i, indent)
- warn("qlb-f", #indent, indent, "", i)
- if not indent or
- indent == "" then
- return false
- end
- state.currentindent = indent
- return true
- end)
- * V"rest_of_line"
- * V"eol"
- ,
-
- quoted_literal_block_other = Cmt(V"adornment_char", function (s, i, indent)
- warn("qlb-m",
- #indent,
- #state.currentindent,
- #indent >= #state.currentindent,
- i)
- return #indent >= #state.currentindent
- end)
- * V"rest_of_line"
- * V"eol",
-
---------------------------------------------------------------------------------
--- Lists
---------------------------------------------------------------------------------
-
- list = (V"option_list"
- + V"bullet_list"
- + V"definition_list"
- + V"field_list")
- - V"explicit_markup_start"
- ,
-
---------------------------------------------------------------------------------
--- Option lists
---------------------------------------------------------------------------------
-
- option_list = Cs((V"option_list_item"
- * V"blank_line"^-1)^1)
- /rst.option_list,
-
- option_list_item = Ct(C(V"option_group")
- * Cs(V"option_description"))
- / rst.option_item,
-
- option_description = V"option_desc_next"
- + V"option_desc_more"
- + V"option_desc_single",
-
- option_desc_single = V"space"^2
- --* V"rest_of_line"
- * (1 - V"eol")^1
- * V"eol",
-
- option_desc_more = V"space"^2
- * (1 - V"eol")^1
- * V"eol"
- * V"indented_lines"
- * (V"blank_line" * V"indented_lines")^0,
-
- option_desc_next = V"eol"
- * V"indented_lines"
- * (V"blank_line" * V"indented_lines")^0,
-
- option_group = V"option"
- * (V"comma" * V"space" * V"option")^0,
-
- option = (V"option_posixlong"
- + V"option_posixshort"
- + V"option_dos_vms")
- * V"option_arg"^-1,
-
- option_arg = (V"equals" + V"space")
- * ((V"letter" * (V"letter" + V"digit")^1)
- + (V"angle_left" * (1 - V"angle_right")^1 * V"angle_right")),
-
- option_posixshort = V"dash" * (V"letter" + V"digit"),
-
- option_posixlong = V"double_dash"
- * V"letter"
- * (V"letter" + V"digit" + V"dash")^1,
-
- option_dos_vms = V"slash"
- * V"letter"^1,
-
---------------------------------------------------------------------------------
--- Field lists (for bibliographies etc.)
---------------------------------------------------------------------------------
-
- field_list = Cs(V"field"
- * (V"blank_line"^-1 * V"field")^0)
- * V"end_block"
- / rst.field_list,
-
- field = Ct(V"field_marker"
- * V"whitespace"
- * V"field_body")
- / rst.field,
-
- field_marker = V"colon"
- * C(V"field_name")
- * V"colon",
-
- field_name = (V"escaped_colon" + (1 - V"colon"))^1,
-
- field_body = V"field_single" + V"field_multi",
-
- field_single = C((1 -V"eol")^1) * V"eol",
-
- field_multi = C((1 - V"eol")^0 * V"eol"
- * V"indented_lines"^-1),
-
---------------------------------------------------------------------------------
--- Definition lists
---------------------------------------------------------------------------------
-
- definition_list = Ct((V"definition_item" - V"comment")
- * (V"blank_line" * V"definition_item")^0)
- * V"end_block"
- / rst.deflist
- ,
-
- definition_item = Ct(C(V"definition_term")
- * V"definition_classifiers"
- * V"eol"
- * Ct(V"definition_def"))
- ,
-
- definition_term = #(1 - V"space" - V"field_marker")
- * (1 - V"eol" - V"definition_classifier_separator")^1
- ,
-
- definition_classifier_separator = V"space" * V"colon" * V"space",
-
- definition_classifiers = V"definition_classifier"^0,
-
- definition_classifier = V"definition_classifier_separator"
- * C((1 - V"eol" - V"definition_classifier_separator")^1)
- ,
-
- definition_def = C(V"definition_firstpar") * C(V"definition_par")^0
- ,
-
- definition_indent = Cmt(V"space"^1, function(s, i, indent)
- warn("def-i", #indent, #state.currentindent, indent == state.currentindent, i)
- state.currentindent = indent
- return true
- end),
-
- definition_firstpar = V"definition_parinit"
- * (V"definition_parline" - V"blank_line")^0
- ,
-
- definition_par = V"blank_line"
- * (V"definition_parline" - V"blank_line")^1
- ,
-
- definition_parinit = V"definition_indent"
- * (1 - V"eol")^1
- * V"eol"
- ,
-
- definition_parline = V"definition_match"
- * (1 - V"eol")^1
- * V"eol"
- ,
-
- definition_match = Cmt(V"space"^1, function (s, i, this)
- warn("def-m", #this, #state.currentindent, this == state.currentindent, i)
- return this == state.currentindent
- end),
-
---------------------------------------------------------------------------------
--- Bullet lists and enumerations
---------------------------------------------------------------------------------
-
- -- the next rule handles enumerations as well
- bullet_list = V"bullet_init"
- * (V"blank_line"^-1 * (V"bullet_list" + V"bullet_continue"))^0
- * V"bullet_stop"
- * Cmt(Cc(nil), function (s, i)
- local depth = state.depth
- warn("close", depth)
- state.bullets[depth] = nil -- “pop”
- depth = depth - 1
- state.lastbullet = state.lastbullets[depth]
- state.depth = depth
- return true
- end)
- ,
-
- bullet_stop = V"end_block" / rst.stopitemize,
-
- bullet_init = Ct(C(V"bullet_first") * V"bullet_itemrest")
- / rst.bullet_item
- ,
-
- bullet_first = #Cmt(V"bullet_indent", function (s, i, bullet)
- local depth = state.depth
- local bullets = state.bullets
- local oldbullet = state.bullets[depth]
- local n_spaces = lpegmatch(P" "^0, bullet)
- warn("first",
- depth,
- (depth == 0 and n_spaces >= 1) or (depth > 0 and n_spaces > 1),
- bullet,
- oldbullet,
- helpers.list.conversion(bullet))
-
- if depth == 0 and n_spaces >= 1 then -- first level
- depth = 1 -- “push”
- bullets[1] = bullet
- state.lastbullet = bullet
- bullets.max = bullets.max < depth and depth or bullets.max
- state.depth = depth
- return true
- elseif depth > 0 and n_spaces > 1 then -- sublist (of sublist)^0
- if n_spaces >= utflen(oldbullet) then
- state.lastbullets[depth] = state.lastbullet
- depth = depth + 1
- bullets[depth] = bullet
- state.lastbullet = bullet
- bullets.max = bullets.max < depth and depth or bullets.max
- state.depth = depth
- return true
- end
- end
- return false
- end)
- * V"bullet_indent"
- / rst.startitemize
- ,
-
- bullet_indent = V"space"^0 * V"bullet_expr" * V"space"^1,
-
- bullet_cont = Cmt(V"bullet_indent", function (s, i, bullet)
- local conversion = helpers.list.conversion
- local depth = state.depth
- local bullets = state.bullets
- local lastbullets = state.lastbullets
- warn("conti",
- depth,
- bullet == bullets[depth],
- bullet,
- bullets[depth],
- lastbullets[depth],
- conversion(state.lastbullet),
- conversion(bullet)
- )
-
- if utflen(bullets[depth]) ~= utflen(bullet) then
- return false
- elseif not conversion(bullet) and bullets[depth] == bullet then
- return true
- elseif conversion(state.lastbullet) == conversion(bullet) then -- same type
- local autoconv = conversion(bullet) == "auto"
- local greater = helpers.list.greater (bullet, state.lastbullet)
- state.lastbullet = bullet
- return autoconv or successor or greater
- end
- end)
- ,
-
- bullet_continue = Ct(C(V"bullet_cont") * V"bullet_itemrest")
- /rst.bullet_item
- ,
-
- bullet_itemrest = C(V"bullet_rest" -- first line
- * ((V"bullet_match" * V"bullet_rest")^0 -- any successive lines
- * (V"blank_line"
- * (V"bullet_match" * (V"bullet_rest" - V"bullet_indent"))^1)^0))
- ,
- -- ^^^^^^^^^^^^^
- -- otherwise matches bullet_first
-
- bullet_rest = (1 - V"eol")^1 * V"eol", -- rest of one line
-
- bullet_next = V"space"^1
- ,
-
- bullet_match = Cmt(V"bullet_next", function (s, i, this)
- local t = state
- warn("match",
- t.depth,
- stringlen(this) == utflen(t.bullets[t.depth]),
- utflen(t.bullets[t.depth]), stringlen(this) )
- return stringlen(this) == utflen(t.bullets[t.depth])
- end)
- ,
-
- bullet_expr = V"bullet_char"
- + (P"(" * V"number_char" * P")") --- surrounded by parentheses
- + (V"number_char" * P")") --- suffixed with right parenthesis
- + (V"number_char" * V"dot") * #V"space" --- suffixed with period
- --[[--
- below rule is invalid according to the spec:
- http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#enumerated-lists
- --]]--
- --+ (V"number_char" * #V"space")
- ,
-
- number_char = V"roman_numeral"
- + V"Roman_numeral"
- + P"#"
- + V"digit"^1
- + R"AZ"
- + R"az"
- ,
-
---------------------------------------------------------------------------------
--- Transitions
---------------------------------------------------------------------------------
-
- transition_line = C(V"adornment_char"^4),
-
- transition = V"transition_line" * V"eol"
- * V"end_block"
- / rst.transition
- ,
-
---------------------------------------------------------------------------------
--- Sectioning
---------------------------------------------------------------------------------
-
- section_adorn = V"adornment_char"^1,
-
- section = ((V"section_text" * V"section_once")
- + (V"section_before" * V"section_text" * V"section_after"))
- / rst.section
- * (V"end_block" + V"blank_line")
- ,
-
- -- The whitespace handling after the overline is necessary because headings
- -- without overline aren't allowed to be indented.
- section_before = C(Cmt(V"section_adorn", function(s,i, adorn)
- local adorn_matched = lpegmatch (valid_adornment, adorn)
- state.previousadorn = adorn
- warn ("sec-f", adorn_matched,
- stringsub (adorn, 1,2) .. "...", "", i)
- if adorn_matched then
- return true
- end
- return false
- end))
- * V"whitespace"^0
- * V"eol"
- * V"whitespace"^0
- ,
-
- section_text = C((1 - V"space" - V"eol") * (1 - V"eol")^1) * V"eol",
-
- section_after = C(Cmt(V"section_adorn", function(s,i, adorn)
- local tests = false
- if lpegmatch (valid_adornment, adorn) then
- tests = true
- end
- if state.previousadorn then
- tests = tests and adorn == state.previousadorn
- end
- warn ("sec-a", tests, stringsub (adorn, 1,2) .. "…", "", i)
- state.previousadorn = nil
- return tests
- end))
- * V"whitespace"^0
- ,
-
- section_once = C(Cmt(V"section_adorn", function(s,i, adorn)
- local tests = false
- if lpegmatch (valid_adornment, adorn) then
- tests = true
- end
- warn ("sec-o", tests, stringsub (adorn, 1,2) .. "…", "", i)
- state.previousadorn = nil
- return tests
- end))
- * V"whitespace"^0
- ,
-
---------------------------------------------------------------------------------
--- Target Blocks
---------------------------------------------------------------------------------
-
- tname_normal = C((V"escaped_colon" + 1 - V"colon")^1)
- * V"colon",
-
- tname_bareia = C(V"bareia"
- * (1 - V"eol" - V"bareia")^1
- * V"bareia")
- * V"colon",
-
- target_name = V"double_dot"
- * V"space"
- * V"underscore"
- * (V"tname_bareia" + V"tname_normal"),
-
- target_firstindent = V"eol" * Cg(V"space"^1, "indent"),
-
- target_nextindent = V"eol" * C(V"space"^1),
-
- target_indentmatch = Cmt(V"target_nextindent" -- I ♡ LPEG!
- * Cb("indent"), function (s, i, a, b)
- return a == b
- end),
-
- target_link = ( V"space"^0 * V"target_firstindent"
- * Ct(C(1 - V"whitespace" - V"eol")^1
- * (V"target_indentmatch"
- * C(1 - V"whitespace" - V"eol")^1)^0)
- * V"eol" * #(1 - V"whitespace" - "eol")) / rst.joinindented
- + C((1 - V"eol")^1) * V"eol" * #(V"double_dot" + V"double_underscore" + V"eol")
- + (1 - V"end_block")^0 * Cc(""),
-
- target = Ct((V"target_name" * (V"space"^0 * V"eol" * V"target_name")^0)
- * V"space"^0
- * V"target_link")
- / rst.target,
-
- anonymous_prefix = (V"double_dot" * V"space" * V"double_underscore" * V"colon")
- + (V"double_underscore")
- ,
-
- anonymous_target = V"anonymous_prefix"
- * V"space"^0
- * Ct(Cc"" * V"target_link")
- / rst.target
- ,
-
- target_block = (V"anonymous_target" + V"target")^1
- * V"end_block",
-
---------------------------------------------------------------------------------
--- Paragraphs * Inline Markup
---------------------------------------------------------------------------------
-
- paragraph = Ct(V"par_first"
- * V"par_other"^0) / rst.paragraph
- * V"end_block"
- * V"reset_depth"
- ,
-
- par_first = V"par_setindent"
- * C((1 - V"literal_block_shorthand" - V"eol")^1)
- * (V"included_literal_block" + V"eol")
- ,
-
- par_other = V"par_matchindent"
- * C((1 - V"literal_block_shorthand" - V"eol")^1)
- * (V"included_literal_block" + V"eol")
- ,
-
- par_setindent = Cmt(V"space"^0, function (s, i, indent)
- warn("par-i", #indent, "", "", i)
- state.previousindent = state.currentindent
- state.currentindent = indent
- return true
- end),
-
- par_matchindent = Cmt(V"space"^0, function (s, i, indent)
- warn("par-m", state.currentindent == indent, #indent, #state.currentindent, i)
- return state.currentindent == indent
- end),
-
- included_literal_block = V"literal_block_shorthand"
- * V"literal_block_markerless"
- * Cmt(Cp(), function (s, i, _)
- warn("par-s", "", #state.previousindent, #state.currentindent, i)
- state.currentindent = state.previousindent
- return true
- end)
- ,
-
- literal_block_shorthand = Cs((V"colon" * V"space" * V"double_colon"
- + V"double_colon")
- * V"whitespace"^0
- * V"eol"
- * V"blank_line")
- -- The \unskip is necessary because the lines of a
- -- paragraph get concatenated from a table with a
- -- space as separator. And the literal block is
- -- treated as one such line, hence it would be
- -- preceded by a space. As the ":" character
- -- always follows a non-space this should be a
- -- safe, albeit unpleasant, hack. If you don't
- -- agree then file a bug report and I'll look into
- -- it.
- / "\\\\unskip:"
- ,
-
- literal_block_markerless = Cs(V"literal_block_lines")
- * V"blank_line"
- / rst.included_literal_block
- ,
-
- -- This is needed because lpeg.Cmt() patterns are evaluated even
- -- if they are part of a larger pattern that doesn’t match. The
- -- result is that they confuse the nesting.
- -- Resetting the current nesting depth at every end of block
- -- should be safe because this pattern always matches last.
- reset_depth = Cmt(Cc("nothing") / "", function (s,i, something)
- state.depth = 0
- warn("reset", "", state.depth, #state.currentindent, i)
- return true
- end)
- ,
-
---------------------------------------------------------------------------------
--- Comments
---------------------------------------------------------------------------------
-
- comment_block = V"comment"
- * V"end_block"^-1
- ,
-
- comment = V"double_dot" / ""
- * (V"block_comment" + V"line_comment")
- ,
-
- block_comment = V"whitespace"^0
- * Cs((1 - V"eol")^0 * V"eol"
- * V"indented_lines")
- / rst.block_comment,
-
- line_comment = V"whitespace"^1
- * C((1 - V"eol")^0 * V"eol")
- / rst.line_comment
- ,
-
---------------------------------------------------------------------------------
--- Generic indented block
---------------------------------------------------------------------------------
-
- indented_lines = V"indented_first"
- * (V"indented_other"^0
- * (V"blank_line" * V"indented_other"^1)^0)
- ,
-
- indented_first = Cmt(V"space"^1, function (s, i, indent)
- warn("idt-f", indent, i)
- state.currentindent = indent
- return true
- end) / ""
- * (1 - V"eol")^1
- * V"eol"
- ,
-
- indented_other = Cmt(V"space"^1, function (s, i, indent)
- warn("idt-m", #indent, #state.currentindent, #indent == #state.currentindent, i)
- return indent == state.currentindent
- end) / ""
- * (1 - V"eol")^1
- * V"eol"
- ,
-
---------------------------------------------------------------------------------
--- Urls
---------------------------------------------------------------------------------
- uri = V"url_protocol" * V"url_domain" * (V"slash" * V"url_path")^0,
-
- url_protocol = (P"http" + P"ftp" + P"shttp" + P"sftp") * P"://",
- url_domain_char = 1 - V"dot" - V"spacing" - V"eol" - V"punctuation",
- url_domain = V"url_domain_char"^1 * (V"dot" * V"url_domain_char"^1)^0,
- url_path_char = R("az", "AZ", "09") + S"-_.!~*'()",
- url_path = V"slash" * (V"url_path_char"^1 * V"slash"^-1)^1,
-
---------------------------------------------------------------------------------
--- Terminal Symbols and Low-Level Elements
---------------------------------------------------------------------------------
-
- asterisk = P"*",
- backslash = P"\\",
- bar = P"|",
- bareia = P"`",
- slash = P"/",
- solidus = P"⁄",
- equals = P"=",
-
- --- Punctuation
- -- Some of the following are used for markup as well as for punctuation.
-
- apostrophe = P"’" + P"'",
- comma = P",",
- colon = P":",
- dot = P".",
- interpunct = P"·",
- semicolon = P";",
- underscore = P"_",
- dash = P"-",
- emdash = P"—",
- hyphen = P"‐",
- questionmark = P"?",
- exclamationmark = P"!",
- interrobang = P"‽",
- lsquare = P"[",
- rsquare = P"]",
- ellipsis = P"…" + P"...",
- guillemets = P"«" + P"»",
- quotationmarks = P"‘" + P"’" + P"“" + P"”",
-
- period = V"dot",
- double_dot = V"dot" * V"dot",
- double_colon = V"colon" * V"colon",
- escaped_colon = V"backslash" * V"colon",
- double_underscore = V"underscore" * V"underscore",
- double_dash = V"dash" * V"dash",
- triple_dash = V"double_dash" * V"dash",
- attrib_dash = V"triple_dash" + V"double_dash" + V"emdash", -- begins quote attribution blocks
- dashes = V"dash" + P"‒" + P"–" + V"emdash" + P"―",
-
-
-
- punctuation = V"apostrophe"
- + V"colon"
- + V"comma"
- + V"dashes"
- + V"dot"
- + V"ellipsis"
- + V"exclamationmark"
- + V"guillemets"
- + V"hyphen"
- + V"interpunct"
- + V"interrobang"
- + V"questionmark"
- + V"quotationmarks"
- + V"semicolon"
- + V"slash"
- + V"solidus"
- + V"underscore"
- ,
-
- -- End punctuation
-
- letter = R"az" + R"AZ",
- digit = R"09",
-
- space = P" ",
- spaces = V"space"^1,
- whitespace = (P" " + Cs(P"\t") / " " + Cs(S"\v") / " "),
- spacing = V"whitespace"^1,
- blank_line = V"whitespace"^0 * V"eol",
-
- rest_of_line = (1 - V"eol")^1,
-
- eol = S"\r\n",
- eof = V"eol"^0 * -P(1),
-
- end_block = V"blank_line"^1 * V"eof"^-1
- + V"eof"
- ,
-
- -- diverse markup character sets
- adornment_char = S[[!"#$%&'()*+,-./:;<=>?@[]^_`{|}~]] + P[[\\]], -- headings
- bullet_char = S"*+-" + P"•" + P"‣" + P"⁃", -- bullet lists
-
- roman_numeral = S"ivxlcdm"^1,
- Roman_numeral = S"IVXLCDM"^1,
-
- angle_left = P"<",
- angle_right = P">",
- gartenzaun = P"#",
-
- table_intersection = P"+",
- table_hline = V"dash",
- table_vline = V"bar",
- table_header_hline = P"=",
-}
-
---- 225 rules at 2014-02-28 with lpeg 0.12 and Luatex 0.78.3
---lpeg.print(rst_parser)
---lpeg.ptree(rst_parser)
---os.exit()
-
-local file_helpers = { }
-
-function file_helpers.strip_BOM (raw)
- if stringmatch (raw, "^\239\187\191") then
- return stringsub (raw, 4)
- end
- return raw
-end
-
---- Tab expansion: feature request by Philipp A.
-do
- local shiftwidth = rst.shiftwidth
- local stringrep = string.rep
- local position = 1
-
- local reset_position = function () position = 1 return "\n" end
- local increment_position = function (c) position = position + 1 return c end
- local expand_tab = function ()
- local expand = (shiftwidth - position) % shiftwidth + 1
- position = position + expand
- return stringrep(" ", expand)
- end
-
- local tab = S"\t\v" / expand_tab
- local utfchar = utfchar / increment_position
- local eol = P"\n" / reset_position
- local p_expand = Cs((tab + eol + utfchar)^1)
-
- function file_helpers.expandtab (raw)
- position = 1
- return lpegmatch (p_expand, raw)
- end
-end
-
---- Spotted by Philipp A.
-function file_helpers.insert_blank (raw)
- if not stringfind (raw, "\n%s$") then
- return raw .. "\n\n"
- end
- return raw
-end
-
-function file_helpers.crlf (raw)
- if stringfind (raw, "\r\n") then
- return stringgsub (raw, "\r\n", "\n")
- end
- return raw
-end
-
-local function load_file (name)
- f = assert(ioopen(name, "r"), "Not a file!")
- if not f then return 1 end
- local tmp = f:read("*all")
- f:close()
-
- local fh = file_helpers
- if thirddata.rst.strip_BOM then
- tmp = fh.strip_BOM(tmp)
- end
- if thirddata.rst.crlf then
- tmp = fh.crlf(tmp)
- end
- if thirddata.rst.expandtab then
- tmp = fh.expandtab(tmp)
- end
- return fh.insert_blank(tmp)
-end
-
-local function save_file (name, data)
- f = assert(ioopen(name, "w"), "Could not open file "..name.." for writing! Check its permissions")
- if not f then return 1 end
- f:write(data)
- f:close()
- return 0
-end
-
-local function get_setups (inline)
- local optional_setups = optional_setups
- local setups = ""
- if not inline then
- setups = setups .. [[
-%+-------------------------------------------------------------+%
-%| Setups |%
-%+-------------------------------------------------------------+%
-% General %
-%---------------------------------------------------------------%
-
-]]
- end
-
- setups = setups .. [[
-\setupcolors[state=start]
-%% Interaction is supposed to be handled manually.
-%%\setupinteraction[state=start,focus=standard,color=darkgreen,contrastcolor=darkgreen]
-\setupbodyfontenvironment [default] [em=italic]
-\sethyphenatedurlnormal{:=?&}
-\sethyphenatedurlbefore{?&}
-\sethyphenatedurlafter {:=/-}
-
-\doifundefined{startparagraph}{% -->mkii
- \enableregime[utf]
- \let\startparagraph\relax
- \let\stopparagraph\endgraf
-}
-
-]]
- for item, _ in next, state.addme do
- local f = optional_setups[item]
- setups = f and setups .. f() or setups
- end
- if not inline then
- setups = setups .. [[
-
-
-%+-------------------------------------------------------------+%
-%| Main |%
-%+-------------------------------------------------------------+%
-
-\starttext
-]]
- end
- return setups
-end
-
-function thirddata.rst.standalone (infile, outfile)
- local testdata = load_file(infile)
- if testdata == 1 then return 1 end
-
- local processeddata = lpegmatch (rst_parser, testdata)
- local setups = get_setups(false)
-
- processeddata = setups .. processeddata .. [[
-
-\stoptext
-
-%+-------------------------------------------------------------+%
-%| End of Document |%
-%+-------------------------------------------------------------+%
-
-% vim:ft=context:tw=65:shiftwidth=2:tabstop=2:set expandtab
-]]
-
- if processeddata then
- save_file(outfile, processeddata)
- else
- return 1
- end
- return 0
-end
-
-local p_strip_comments
-do
- local Cs, P = lpeg.Cs, lpeg.P
- local percent = P"%"
- local eol = P"\n"
- local comment = percent * (1 - eol)^0 * eol / "\n"
- p_strip_comments = Cs((comment + 1)^0)
-end
-
-
-local tempfile_count = { } --- map category -> count
-
-local get_tmpfile = function (category)
- local cnt = tempfile_count[category]
- if not cnt then
- cnt = 0
- end
- cnt = cnt + 1
- tempfile_count[category] = cnt
- local filename = stringformat ("%s_rst-%s-%d",
- tex.jobname, category, cnt)
- return luatex.registertempfile (filename,
- true,
- (helpers.rst_debug == true)) --- for debugging generated code
-end
-
-
-function thirddata.rst.do_rst_file(fname)
- local raw_data = load_file(fname)
- local processed = lpegmatch (rst_parser, raw_data)
- local setups = get_setups(false)
- local tmp_file = get_tmpfile "temporary"
- if processed then
- processed = lpegmatch (p_strip_comments, setups..processed.."\n\\stoptext\n")
- save_file(tmp_file, processed)
- context.input("./"..tmp_file)
- end
-end
-
-local rst_inclusions = { }
-local rst_incsetups = { }
-function thirddata.rst.do_rst_inclusion (iname, fname)
- local raw_data = load_file(fname)
- local processed = lpegmatch (rst_parser, raw_data)
- local setups = get_setups(true)
- local tmp_file = get_tmpfile "setup"
-
- if processed then
- processed = lpegmatch (p_strip_comments, processed)
- save_file(tmp_file, processed)
- rst_inclusions[iname] = tmp_file
- rst_incsetups[#rst_incsetups +1] = setups
- end
-end
-
-function thirddata.rst.do_rst_setups ()
- local out = tableconcat(rst_incsetups)
- --context(out) --- why doesn’t this work?
- local tmp_file = get_tmpfile "setup"
- save_file(tmp_file, out)
- context.input(tmp_file)
-end
-
-function thirddata.rst.get_rst_inclusion (iname)
- if rst_inclusions[iname] then
- context.input(rst_inclusions[iname])
- else
- context(stringformat([[{\bf File for inclusion “%s” not found.}\par ]], iname))
- end
-end
-
-function thirddata.rst.do_rst_snippet(txt)
- local processed = lpegmatch (rst_parser, txt)
- local setups = get_setups(true)
- local tmp_file = get_tmpfile "snippet"
- if processed then
- warn("·cs·", txt)
- processed = lpegmatch (p_strip_comments, setups..processed)
- save_file(tmp_file, processed)
- context.input("./" .. tmp_file)
- else
- warn("·cs·", txt)
- context.par()
- context("{\\bf context-rst could not process snippet.\\par}")
- context.type(txt)
- context.par()
- end
-end
-
---- vim:tw=79:et:sw=4:ts=8:sts=4
diff --git a/macros/context/contrib/context-rst/tex/context/third/rst/rst_setups.lua b/macros/context/contrib/context-rst/tex/context/third/rst/rst_setups.lua
deleted file mode 100644
index 31f314e2d9..0000000000
--- a/macros/context/contrib/context-rst/tex/context/third/rst/rst_setups.lua
+++ /dev/null
@@ -1,377 +0,0 @@
-#!/usr/bin/env texlua
---------------------------------------------------------------------------------
--- FILE: rst_setups.lua
--- USAGE: called by rst_parser.lua
--- DESCRIPTION: Complement to the reStructuredText parser
--- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
--- CHANGED: 2013-06-03 18:52:29+0200
---------------------------------------------------------------------------------
---
-
-local optional_setups = { }
-thirddata.rst_setups = optional_setups
-local rst_directives = thirddata.rst_directives
-local rst_context = thirddata.rst
-
-local stringformat = string.format
-local stringstrip = string.strip
-local stringgsub = string.gsub
-
-function optional_setups.footnote_symbol ()
- local setup = [[
-%---------------------------------------------------------------%
-% Footnotes with symbol conversion %
-%---------------------------------------------------------------%
-\definenote[symbolnote][footnote]
-\setupnote [symbolnote][way=bypage,numberconversion=set 2]
-]]
- return setup
-end
-
-function optional_setups.footnotes ()
- local tf = rst_context.state.footnotes
- local fn = [[
-
-%---------------------------------------------------------------%
-% Footnotes %
-%---------------------------------------------------------------%
-]]
- local buffer = [[
-
-%% %s
-\startbuffer[%s]
-%s\stopbuffer
-]]
-
- for nf, note in next, tf.numbered do
- fn = fn .. stringformat(buffer, "Autonumbered footnote", "__footnote_number_"..nf, note)
- end
- for nf, note in next, tf.autolabel do
- fn = fn .. stringformat(buffer, "Labeled footnote", "__footnote_label_"..nf, note)
- end
- for nf, note in next, tf.symbol do
- fn = fn .. stringformat(buffer, "Symbol footnote", "__footnote_symbol_"..nf, note)
- end
- return fn
-end
-
-function optional_setups.references ()
- local refs = rst_context.collected_references
- local crefs = rst_context.context_references
- local arefs = rst_context.anonymous_set
-
- local function urlescape (str)
- return str:gsub("#", "\\#")
- end
-
- local function resolve_indirect (r)
- if r and r:match(".*_$") then -- pointing elsewhere
- local look_me_up = r:match("^`?([^`]*)`?_$")
- local result = resolve_indirect (refs[look_me_up])
- if result then
- return result
- else
- if rst_context.structure_references[look_me_up] then
- -- Internal link, no useURL etc.
- return false
- end
- end
- end
- return r
- end
-
- local refsection = [[
-
-%---------------------------------------------------------------%
-% References %
-%---------------------------------------------------------------%
-
-]]
- local references = {}
- local ref_keys = {}
- for ref, target in next, refs do
- ref_keys[#ref_keys+1] = [[__target_]] .. rst_context.whitespace_to_underscore(ref)
- target = resolve_indirect(target)
- if target ~= false then
- ref_text = ref
- if arefs[ref_text] then
- ref_text = rst_context.anonymous_links[tonumber(arefs[ref_text])]
- end
- references[#references+1] = stringformat([[
-\useURL[__target_%s] [%s] [] [%s] ]], rst_context.whitespace_to_underscore(ref), urlescape(target), ref_text)
- end
- end
- refsection = refsection .. table.concat(references, "\n")
- -- this is needed in order to select the right reference command later
- refsection = refsection .. "\n\n" .. [[\def \RSTexternalreferences{]] .. table.concat(ref_keys, ",") .. [[}
-
-% #1 target name, #2 link text
-\def\RSTchoosegoto#1#2{%
- \rawdoifinsetelse{#1}{\RSTexternalreferences}%
- {\from[#1]}%
- {\goto{#2}[#1]}%
-}
-]]
-
- return refsection
-end
-
-function optional_setups.substitutions ()
- local directives = rst_directives
- local substitutions = [[
-
-%---------------------------------------------------------------%
-% Substitutions %
-%---------------------------------------------------------------%
-]]
- local rs = rst_context.substitutions
- for name, content in next, rs do
- local id, data = content.directive, content.data
- local directive = directives[id]
- if directive then
- substitutions = substitutions .. directive(name, data)
- else
- err(id .. " does not exist.")
- end
- end
- return substitutions
-end
-
-function optional_setups.directive ()
- --local dirstr = [[
-
---%---------------------------------------------------------------%
---% Directives %
---%---------------------------------------------------------------%
---]]
- --return dirstr
- return ""
-end
-
-function optional_setups.blockquote ()
- return [[
-
-%---------------------------------------------------------------%
-% Blockquotes %
-%---------------------------------------------------------------%
-\setupdelimitedtext [blockquote][style={\tfx}] % awful placeholder
-\definedelimitedtext[attribution][blockquote]
-\setupdelimitedtext [attribution][style={\tfx\it}]
-]]
-end
-
-function optional_setups.deflist ()
- return [[
-
-%---------------------------------------------------------------%
-% Definitionlist %
-%---------------------------------------------------------------%
-\def\startRSTdefinitionlist{
- \bgroup
- \def \RSTdeflistterm##1{{\bf ##1}}
- \def\RSTdeflistclassifier##1{\hbox to 1em{\it ##1}}
- \def\RSTdeflistdefinition##1{%
- \startnarrower[left]
- ##1%
- \stopnarrower}
- \def\RSTdeflistparagraph ##1{%
- \startparagraph{%
- \noindentation ##1
- \stopparagraph}
- }
-}
-
-\let\stopRSTdefinitionlist\egroup
-]]
-end
-
-function optional_setups.lines ()
- return [[
-
-%---------------------------------------------------------------%
-% Lines environment (line blocks) %
-%---------------------------------------------------------------%
-
-\setuplines[%
- space=on,%
- before={\startlinecorrection\blank[small]},%
- after={\blank[small]\stoplinecorrection},%
-]
-]]
-end
-
-function optional_setups.breaks ()
- return [[
-
-%---------------------------------------------------------------%
-% Fancy transitions %
-%---------------------------------------------------------------%
-
-% Get Wolfgang’s module at <https://bitbucket.org/wolfs/fancybreak>.
-\usemodule[fancybreak]
-\setupfancybreak[symbol=star]
-]]
-end
-
-function optional_setups.fieldlist ()
- return [[
-
-%---------------------------------------------------------------%
-% Fieldlists %
-%---------------------------------------------------------------%
-
-\def\startRSTfieldlist{%
- \bgroup%
- \unexpanded\def\RSTfieldname##1{\bTR\bTC ##1\eTC}
- \unexpanded\def\RSTfieldbody##1{\bTC ##1\eTC\eTR}
-%
- \setupTABLE[c][first] [background=color, backgroundcolor=grey, style=\bf]
- \setupTABLE[c][2] [align=right]
- \setupTABLE[c][each] [frame=off]
- \setupTABLE[r][each] [frame=off]
- \bTABLE[split=yes,option=stretch]
- \bTABLEhead
- \bTR
- \bTH Field \eTH
- \bTH Body \eTH
- \eTR
- \eTABLEhead
- \bTABLEbody
-}
-
-\def\stopRSTfieldlist{%
- %\eTABLEbody % doesn't work, temporarily moved to rst_context.field_list()
- \eTABLE
- \egroup%
-}
-]]
-end
-
-function optional_setups.dbend ()
- -- There's just no reason for not providing this.
- optional_setups.dbend_done = true
- return [[
-%---------------------------------------------------------------%
-% Dangerous bend %
-%---------------------------------------------------------------%
-
-\loadmapfile [manfnt.map]
-\definefontsynonym [bends] [manfnt]
-
-\def\GetSym#1{\getglyph{bends}{\char#1}}
-
-\startsymbolset [Dangerous Bends]
- \definesymbol [dbend] [\GetSym{127}]
- \definesymbol [lhdbend] [\GetSym{126}]
- \definesymbol [lhdbend] [\GetSym{0}]
-\stopsymbolset
-
-\setupsymbolset [Dangerous Bends]
-
-]]
-end
-
-function optional_setups.caution ()
- local result = ""
- --if not optional_setups.dbend_done then
- --result = result .. optional_setups.dbend()
- --end
- return result .. [[
-%---------------------------------------------------------------%
-% Caution directive %
-%---------------------------------------------------------------%
-
-\usemodule[lettrine]
-
-\setbox0=\hbox{\symbol[dbend]}
-\newskip\RSTbendskip
-\RSTbendskip=\wd0
-\advance\RSTbendskip by 1em % These two lines should add
-\advance\RSTbendskip by 1pt % 13.4pt in mkiv and 13.14983pt in mkii
- % to make the indent equal to the indent
- % of the “danger” directive.
- % (2*(width)dbend + (kern)1pt + 1em
-
-\def\startRSTcaution{%
-\startparagraph
-\dontleavehmode\lettrine[Lines=2,Raise=.6,Findent=\RSTbendskip,Nindent=0pt]{\symbol[dbend]}{}%
-}
-
-\let\stopRSTcaution\stopparagraph
-
-]]
-
-end
-
-function optional_setups.danger ()
- local result = ""
- --if not optional_setups.dbend_done then
- --result = result .. optional_setups.dbend()
- --end
- return result .. [[
-%---------------------------------------------------------------%
-% Danger directive %
-%---------------------------------------------------------------%
-
-\usemodule[lettrine]
-
-\def\startRSTdanger{%
-\startparagraph
-\lettrine[Lines=2,Raise=.6,Findent=1em,Nindent=0pt]{\symbol[dbend]\kern 1pt\symbol[dbend]}{}%
-}
-
-\let\stopRSTdanger\stopparagraph
-
-]]
-
-end
-
-function optional_setups.citations ()
- local cit = [[
-%---------------------------------------------------------------%
-% Citations %
-%---------------------------------------------------------------%
-\setupbibtex[database=\jobname]
-]]
-
-
- return cit
-end
-
-function optional_setups.citator ()
- local cit = [[
-%---------------------------------------------------------------%
-% Citator Options %
-%---------------------------------------------------------------%
-\usemodule[citator]
-\loadbibdb{\jobname.bib}
-\setupcitator[sortmode=authoryear]
-\setupcite[mainmode=authoryear]
-
-\startbuffer[bibliography]
-\chapter{References}
-\setupbodyfont[small]
-\bibbykey{shorthand}{all}{author}
-\stopbuffer
-
-\prependtoks \getbuffer[bibliography] \to \everystoptext
-]]
-
- return cit
-end
-
-function optional_setups.image ()
- local image = [[
-
-%---------------------------------------------------------------%
-% images %
-%---------------------------------------------------------------%
-\setupexternalfigure[location={local,global,default}]
-
-]]
- return image
-end
-
-return optional_setups
-
--- vim:ft=lua:sw=4:ts=4:expandtab:tw=80
diff --git a/macros/context/contrib/context-rst/tex/context/third/rst/t-rst.mkiv b/macros/context/contrib/context-rst/tex/context/third/rst/t-rst.mkiv
deleted file mode 100644
index a69e238ce5..0000000000
--- a/macros/context/contrib/context-rst/tex/context/third/rst/t-rst.mkiv
+++ /dev/null
@@ -1,241 +0,0 @@
-%D \module [
-%D file=t-rst,
-%D version=0.6c ‘It’s the Arts’,
-%D title=\CONTEXT\ User Module,
-%D subtitle=reStructuredText,
-%D author=Philipp Gesang,
-%D date=\currentdate,
-%D copyright=Philipp Gesang,
-%D license=2-clause BSD,
-%D ]
-
-%M \usemodule [rst]
-%M \usemodule [int-load]
-%M \loadsetups [t-letterspace.xml]
-
-%C Read the license conditions in the file \type{COPYING}.
-
-%M \definecolor [gutenred] [x=bf221f] % rubrication from digitized Göttingen Gutenberg bible
-%M \setupinteraction [contrastcolor=gutenred,color=gutenred]
-%M
-%M \define\beautifyshowsetups{%
-%M \unexpanded \def \setupnumfont {\rm}%
-%M \unexpanded \def \setuptxtfont {\rm}%
-%M \unexpanded \def \setupintfont {\rm\sc\Word}%
-%M \unexpanded \def \setupvarfont {\rm\it}%
-%M \unexpanded \def \setupoptfont {\rm\it}%
-%M \unexpanded \def \setupalwcolor {gutenred}%
-%M \unexpanded \def \setupoptcolor {gutenred}%
-%M \defineframedtext [setuptext] [
-%M frame=off,
-%M background=color,
-%M backgroundcolor=gray:2,
-%M width=\hsize,
-%M height=fit,
-%M align=right,
-%M offset=0.75em,
-%M ]%
-%M }
-%M
-%M \let \Oldshowsetup \showsetup
-%M
-%M \define [1] \showsetup {%
-%M \bgroup \beautifyshowsetups%
-%M \Oldshowsetup{#1}%
-%M \egroup%
-%M }
-
-\writestatus{loading}{ConTeXt User Module / reStructuredText}
-
-\unprotect
-
-\startinterface all
- \setinterfacevariable {RST} {RST}
-\stopinterface
-
-\definenamespace [\v!RST] [
- type=module,
- comment=reStructuredText module,
- version=0.6c,
- name=\v!RST,
- style=\v!no,
- command=\v!yes,
- setup=\v!list,
- parent=\v!RST,
-]
-
-%D Loading the reStructuredText parser.
-\ctxloadluafile{rst_parser}
-
-%D Easy way to define a global test setting. Activated
-%D by \type{\usemodule[rst][test=yes]}.
-
-\startmoduletestsection
- \ctxlua{thirddata.rst_helpers.rst_debug = true}
-\stopmoduletestsection
-
-%D To process inline reST markup we’ll have to reset all catcodes
-%D except for grouping, escaping and cs arguments.
-
-\newcatcodetable \RST_catcodes
-\startcatcodetable \RST_catcodes
- \catcode`\^^I = 12
- \catcode`\^^M = 12
- \catcode`\^^L = 12
- \catcode`\ = 12
- \catcode`\^^Z = 12
- \catcode`\\ = 0
- \catcode`\% = 12
- \catcode`\# = 6
- \catcode`\_ = 12
- \catcode`\^ = 12
- \catcode`\& = 12
- \catcode`\| = 12
- \catcode`\{ = 1
- \catcode`\} = 2
- \catcode`\~ = 12
- \catcode`\$ = 12
-\stopcatcodetable
-
-%D \section {User-level Commands}
-%D
-%D \subsection{Typesetting reST-Files}
-%D
-%D \macros
-%D {typesetRSTfile}
-%D
-%D This command loads and processes an \type{*.rst} file.
-%D All necessary setups for the elements to be used (e.g. tables)
-%D have to be specified {\em before} this macro is called.
-%D As \type{\typesetRSTfile} is intended to process a single file
-%D only, it will handle \type{\start|stoptext} automatically.
-%D Thus, the user should never supply any of these manually,
-%D neither before nor after \type{\typesetRSTfile}.
-%D
-%D We now handle rogue utf-8 byte order marks on demand, just set
-%D the optional parameter \type{stripBOM} to {\em true}.
-%D
-%D There also is an option \type{expandtab} to convert tabs
-%D (ascii 0x09) to indents prior to converting reST input. The
-%D expansion width defaults to {\em 4} and can be configured
-%D through the parameter \type{shiftwidth} (takes an integer).
-%D
-%D \showsetup{typesetRSTfile}
-
-\def\do_typeset_RST_file[#1]#2{%
- \iffirstargument
- \getparameters[RST][#1]%
- \doifdefined{RSTstripBOM} {\ctxlua{thirddata.rst.strip_BOM = \RSTstripBOM}}%
- \doifdefined{RSTexpandtab} {\ctxlua{thirddata.rst.expandtab = \RSTexpandtab}}%
- \doifdefined{RSTshiftwidth}{\ctxlua{thirddata.rst.shiftwidth = \RSTshiftwidth}}%
- \fi
- \ctxlua{thirddata.rst.do_rst_file("#2")}%
-}
-
-\def\typesetRSTfile{%
- \dosingleempty\do_typeset_RST_file%
-}
-
-%D \subsection{Typesetting Inline Snippets}
-%D
-%D reST markup can be handy in situations where \CONTEXT\ markup
-%D would result in unappropriately verbose source code, e.g. when
-%D typesetting tables with simple layout.
-%D
-%D \macros
-%D {RST,startRST}
-%D
-%D The environment \type{\[start|stop]RST} and the macro
-%D \type{\RST} allow access to reST-parser from inside a
-%D \CONTEXT\ document when the module is loaded.
-%D
-%D \showsetup{RST}
-%D \showsetup{startRST}
-
-% Wolfgang’s code below.
-
-\unexpanded \def \startRST{%
- \begingroup
- \setcatcodetable \RST_catcodes
- \do_start_RST%
-}
-
-\let \stopRST \relax
-
-\def \do_start_RST#1\stopRST{%
- \endgroup%
- \ctxlua{thirddata.rst.do_rst_snippet(\!!bs#1\!!es)}%
-}
-
-\def \RST{%
- \begingroup
- \setcatcodetable \RST_catcodes
- \do_RST%
-}
-
-\def \do_RST#1{%
- \endgroup%
- \ctxlua{thirddata.rst.do_rst_snippet(\!!bs#1\!!es)}%
-}
-
-%D \subsection{Including multiple reST files}
-%D
-%D \macros
-%D {defineRSTinclusion,startRSTproject,RSTinclusion}
-%D
-%D When content is split among multiple files, these macros allow
-%D for including them in arbitrary order. Note that setups from
-%D previous includes, unless overwritten, will remain defined.
-%D \type{\defineRSTinclusion} takes three arguments: the first one
-%D will be the identifier that can be used to refer to the actual
-%D inclusion, which is specified via the second argument as a
-%D filename. The third optional argument receives the usual
-%D setups \type{stripBOM}, \type{expandtab} and
-%D \type{shiftwidth}.
-%D
-%D Defined inclusions can be typeset only within an the
-%D \type{\startRSTproject} environment using the macro
-%D \type{RSTinclusion}. Between those inclusion all kinds of
-%D \TEX\ code except for \type{\starttext} and \type{\stoptext}
-%D are permitted.
-
-\def\do_define_RST_inclusion[#1][#2][#3]{%
- \ifthirdargument
- \getparameters[RST][#3]%
- \doifdefined{RSTstripBOM} {\ctxlua{thirddata.rst.strip_BOM = \RSTstripBOM}}%
- \doifdefined{RSTexpandtab} {\ctxlua{thirddata.rst.expandtab = \RSTexpandtab}}%
- \doifdefined{RSTshiftwidth}{\ctxlua{thirddata.rst.shiftwidth = \RSTshiftwidth}}%
- \fi
- \ifsecondargument
- \ctxlua{thirddata.rst.do_rst_inclusion("#1", "#2")}%
- \fi%
-}
-
-\def\defineRSTinclusion{%
- \dotripleempty\do_define_RST_inclusion%
-}
-
-\def\do_RST_inclusion[#1]{%
- \iffirstargument
- \ctxlua{thirddata.rst.get_rst_inclusion("#1")}%
- \fi%
-}
-
-\def\do_RST_setups{%
- \ctxlua{thirddata.rst.do_rst_setups()}%
-}
-
-\def\startRSTproject{
- \begingroup
- \def\RSTinclusion{\dosingleempty\do_RST_inclusion}
- \do_RST_setups
- \starttext%
-}
-
-\def\stopRSTproject{
- \stoptext \endgroup \endinput
-}
-
-\protect \endinput
-
-% vim:ft=context:sw=2:ts=2
diff --git a/macros/context/contrib/context-ruby/VERSION b/macros/context/contrib/context-ruby/VERSION
deleted file mode 100644
index eb97e70dd5..0000000000
--- a/macros/context/contrib/context-ruby/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2012.12.01
diff --git a/macros/context/contrib/context-ruby/doc/context/third/ruby/README b/macros/context/contrib/context-ruby/doc/context/third/ruby/README
deleted file mode 100644
index 6e6fcd4ad6..0000000000
--- a/macros/context/contrib/context-ruby/doc/context/third/ruby/README
+++ /dev/null
@@ -1,43 +0,0 @@
-Modulename : t-ruby
-Author : Wolfgang Schuster
-License : Public Domain
-
-
-Description
------------
-
-The 'ruby' module allows users to write ruby annotations in ConTeXt.
-
-
-Usage
------
-
-The module is loaded with the command:
-
- \usemodule[ruby]
-
-Ruby text can be set with the command:
-
- \ruby{base text}{ruy text}
-
-The layout of the base and ruby text could be changed with:
-
- \setupruby
- [basestyle=...,
- basecolor=...,
- textstyle=...,
- textcolor=...]
-
-Whether ruby text overlaps with the surrounding text or not can be configured with:
-
- \setupruby
- [overhang=auto|start|end|none] % default: yes
-
-The last option is the distance between the ruby and the base text:
-
- \setupruby
- [inbetween=...] % default: \blank[small]
-
-All of these parameters can also be changed for a single ruby command:
-
- \ruby[..,..=..,..]{...}{...}
diff --git a/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkii b/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkii
deleted file mode 100644
index 7f2a6e2680..0000000000
--- a/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkii
+++ /dev/null
@@ -1,286 +0,0 @@
-%D \module
-%D [ file=t-ruby,
-%D version=2010.10.10,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Ruby Markup,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\writestatus{loading}{ConTeXt User Module / Ruby Markup}
-
-\unprotect
-
-%D simple ruby:
-%D
-%D \starttyping
-%D <ruby>
-%D <rb>WWW</rb>
-%D <rt>World Wide Web</rt>
-%D </ruby>
-%D \stoptyping
-%D
-%D complex ruby:
-%D
-%D \starttyping
-%D <ruby>
-%D <rbc>
-%D <rb>10</rb>
-%D <rb>31</rb>
-%D <rb>2002</rb>
-%D </rbc>
-%D <rtc>
-%D <rt>Month</rt>
-%D <rt>Day</rt>
-%D <rt>Year</rt>
-%D </rtc>
-%D <rtc>
-%D <rt rbspan="3">Expiration Date</rt>
-%D </rtc>
-%D </ruby>
-%D \stoptyping
-
-%D Constants/variables
-
-\startinterface all
- \setinterfaceconstant {basestyle} {basestyle}
- \setinterfaceconstant {basecolor} {basecolor}
- \setinterfaceconstant {overhang} {overhang}
-\stopinterface
-
-\startinterface all
- \setinterfacevariable {letter} {letter}
- \setinterfacevariable {end} {end}
- \setinterfacevariable {inline} {inline}
-\stopinterface
-
-%D Namespace
-
-\def\????rb{@@@@rb}
-
-%D Additional registers
-
-\newdimen \!!rubywidth
-\newdimen \!!rubyleftmargin
-\newdimen \!!rubyrightmargin
-\newsignal\!!rubysignal
-\newcount \!!rubycount
-\newtoks \!!rubybase
-\newtoks \!!rubytext
-
-%D \macros
-%D {setupruby}
-
-\def\setupruby
- {\dodoubleargument\getparameters[\????rb]}
-
-\def\rubyparameter#1{\csname\????rb#1\endcsname}
-
-%D \macros
-%D {pdfactualtext}
-
-\ifx\pdfactualtext\undefined \let\pdfactualtext\secondoftwoarguments \fi
-
-%D \macros
-%D {bRUBY,eRUBY,bRB,eRB,bRT,eRT}
-
-\def\bRUBY
- {\dosingleempty\dobRUBY}
-
-\def\dobRUBY[#1]%
- {\begingroup
- \iffirstargument
- \setupruby[#1]%
- \fi
- \scratchdimen\lastskip
- \ifdim\scratchdimen=\!!rubysignal\else\global\!!rubywidth\!!zeropoint\fi
- \global\advance\!!rubycount\plusone
- \xypos{rubyposition:\number\!!rubycount}%
- \doifmodeelse\v!first
- {\edef\rubyposition{\the\onepoint}}%
- {\edef\rubyposition{\the\dimexpr\MPx{rubyposition:\number\!!rubycount}-\MPx{text:\the\realpageno}\relax}}}
-
-\def\eRUBY
- {\setbox\scratchboxone\hbox{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\the\!!rubybase}}%
- \setbox\scratchboxtwo\hbox{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\the\!!rubytext}}%
- \scratchdimenone\wd\scratchboxone
- \scratchdimentwo\wd\scratchboxtwo
- %\scratchdimenthree\ifdim\scratchdimenone<\scratchdimentwo\space\scratchdimenone\else\scratchdimentwo\fi
- \scratchdimenthree\scratchdimenone
- \executeifdefined{\????rb:\c!align :\rubyparameter\c!align }{\getvalue{\????rb:\c!align :\v!auto }}%
- \executeifdefined{\????rb:\c!position:\rubyparameter\c!position}{\getvalue{\????rb:\c!position:\v!before}}%
- \executeifdefined{\????rb:\c!overhang:\rubyparameter\c!overhang}{\getvalue{\????rb:\c!overhang:\v!auto }}%
- \hskip\!!rubysignal\relax
- \endgroup}
-
-\def\bRB{\dodoubleempty\dobRB}
-\def\bRT{\dodoubleempty\dobRT}
-
-\def\dobRB[#1][#2]#3\eRB{\!!rubybase{#3}}
-\def\dobRT[#1][#2]#3\eRT{\!!rubytext{#3}}
-
-\def\placerubystrut{\doif{\rubyparameter\c!strut}\v!yes{\setstrut\strut}}
-
-%D Alignment
-
-\def\RUBYdistributespace #1{\processtokens{\hss }{\hss\hss}{\hss }{\hss\hss}{#1}}
-\def\RUBYdistributeletter#1{\processtokens{\relax}{\hss }{\relax}{\hss\hss}{#1}}
-
-\setvalue{\????rb:\c!align:\v!space}%
- {\!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \ifdim\scratchdimenone>\scratchdimentwo
- \setbox\scratchboxone\hbox to \scratchdimenone{\hss\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenone{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributespace\@EA{\the\!!rubytext}}}%
- \else
- \setbox\scratchboxone\hbox to \scratchdimentwo{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\@EA\RUBYdistributespace\@EA{\the\!!rubybase}}}%
- \setbox\scratchboxtwo\hbox to \scratchdimentwo{\hss\box\scratchboxtwo\hss}%
- \fi}
-
-\setvalue{\????rb:\c!align:\v!letter}%
- {\!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \ifdim\scratchdimenone>\scratchdimentwo
- \setbox\scratchboxone\hbox to \scratchdimenone{\hss\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenone{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributeletter\@EA{\the\!!rubytext}}}%
- \else
- \setbox\scratchboxone\hbox to \scratchdimentwo{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\@EA\RUBYdistributeletter\@EA{\the\!!rubybase}}}%
- \setbox\scratchboxtwo\hbox to \scratchdimentwo{\hss\box\scratchboxtwo\hss}%
- \fi}
-
-\setvalue{\????rb:\c!align:\v!auto}% I need special alignments for the begin/end of the line!!!
- {\ifdim\scratchdimenone>\scratchdimentwo
- \getvalue{\????rb:\c!align:\v!space}%
- \else
- \ifdim\rubyposition=\!!zeropoint % begin of the line
- \getvalue{\????rb:\c!align:\v!left}%
- \else\ifdim\rubyposition=\the\dimexpr\textwidth-\scratchdimenthree\relax % end of the line
- \getvalue{\????rb:\c!align:\v!right}%
- \else
- \getvalue{\????rb:\c!align:\v!space}%
- \fi\fi
- \fi}
-
-\setvalue{\????rb:\c!align:\v!left}%
- {\ifdim\scratchdimenone>\scratchdimentwo
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \else
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\dimexpr\scratchdimentwo-\scratchdimenone\relax
- \fi
- \setbox\scratchboxone\hbox to \scratchdimenthree{\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenthree{\box\scratchboxtwo\hss}}
-
-\setvalue{\????rb:\c!align:\v!start}%
- {\getvalue{\????rb:\c!align:\v!left}}
-
-\setvalue{\????rb:\c!align:\v!center}%
- {\ifdim\scratchdimenone>\scratchdimentwo
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \else
- \!!rubyleftmargin \dimexpr(\scratchdimentwo-\scratchdimenone)/2\relax
- \!!rubyrightmargin\dimexpr(\scratchdimentwo-\scratchdimenone)/2\relax
- \fi
- \setbox\scratchboxone\hbox to \scratchdimenthree{\hss\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenthree{\hss\box\scratchboxtwo\hss}}
-
-\setvalue{\????rb:\c!align:\v!right}%
- {\ifdim\scratchdimenone>\scratchdimentwo
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \else
- \!!rubyleftmargin \dimexpr\scratchdimentwo-\scratchdimenone\relax
- \!!rubyrightmargin\zeropoint
- \fi
- \setbox\scratchboxone\hbox to \scratchdimenthree{\hss\box\scratchboxone}%
- \setbox\scratchboxtwo\hbox to \scratchdimenthree{\hss\box\scratchboxtwo}}
-
-\setvalue{\????rb:\c!align:\v!end}%
- {\getvalue{\v!ruby:\c!align:\v!right}}
-
-\setvalue{\????rb:\c!align:\v!edge}% modify to take care of overlap etc.
- {\ifdim\rubyposition=\zeropoint
- \getvalue{\????rb:\c!align:\v!left}%
- \else\ifdim\rubyposition=\the\dimexpr\textwidth-\scratchdimenthree\relax
- \getvalue{\????rb:\c!align:\v!right}%
- \else
- \getvalue{\????rb:\c!align:\v!center}%
- \fi\fi}
-
-%D Positioning
-
-\setvalue{\????rb:\c!position:\v!before}%
- {\setbox\scratchboxthree\vbox
- {\offinterlineskip
- \hbox{\undepthed{\placerubystrut\box\scratchboxtwo}}
- \rubyparameter\c!inbetween
- \hbox{\placerubystrut\box\scratchboxone}}}
-
-\setvalue{\????rb:\c!position:\v!after}%
- {\setbox\scratchboxthree\vtop
- {\offinterlineskip
- \hbox{\undepthed{\placerubystrut\box\scratchboxone}}
- \rubyparameter\c!inbetween
- \hbox{\placerubystrut\box\scratchboxtwo}}}
-
-\setvalue{\????rb:\c!position:\v!inline}% pure text to allow line breaks in the text
- {\setbox\scratchboxthree\box\voidbox
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \the\!!rubybase
- \rubyparameter\c!separator
- \rubyparameter\c!lefttext\the\!!rubytext\rubyparameter\c!righttext}
-
-%D Overhang
-
-\setvalue{\????rb:\c!overhang:\v!auto}%
- {\ifdim\!!rubywidth>\!!zeropoint
- \kern\dimexpr\!!rubyleftmargin+\!!rubywidth\relax
- \fi
- \box\scratchboxthree
- \global\!!rubywidth\!!rubyrightmargin}
-
-\setvalue{\????rb:\c!overhang:\v!start}%
- {\box\scratchboxthree\kern\!!rubyrightmargin
- \global\!!rubywidth\!!rubyrightmargin}
-
-\setvalue{\????rb:\c!overhang:\v!end}%
- {\ifdim\!!rubywidth>\!!zeropoint
- \kern\dimexpr\!!rubyleftmargin+\!!rubywidth\relax
- \else
- \kern\!!rubyleftmargin
- \fi
- \box\scratchboxthree
- \global\!!rubywidth\!!zeropoint}
-
-\setvalue{\????rb:\c!overhang:\v!none}%
- {\kern\!!rubyleftmargin\box\scratchboxthree\kern\!!rubyrightmargin
- \global\!!rubywidth\!!zeropoint}
-
-%D \macros
-%D {ruby}
-
-\def\ruby
- {\dontleavehmode\dosingleempty\doruby}
-
-\def\doruby[#1]#2#3%
- {\dobRUBY[#1]\bRB#2\eRB\bRT#3\eRT\eRUBY}
-
-%D Default values
-
-\setupruby
- [\c!position=\v!before, % before|after|inline
- \c!align=\v!auto, % auto|start|left|center|end|right|distribute-letter|distribute-space|line-edge
- \c!overhang=\v!auto, % auto|start|end|none
- \c!separator={ },
- \c!lefttext=(,
- \c!righttext=),
- \c!strut=\v!no,
- \c!inbetween={\blank[\v!small]},
- \c!textstyle=\txx]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkiv b/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkiv
deleted file mode 100644
index d90330a41b..0000000000
--- a/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkiv
+++ /dev/null
@@ -1,283 +0,0 @@
-%D \module
-%D [ file=t-ruby,
-%D version=2010.11.23,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Ruby Markup,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\writestatus{loading}{ConTeXt User Module / Ruby Markup}
-
-\unprotect
-
-%D simple ruby:
-%D
-%D \starttyping
-%D <ruby>
-%D <rb>WWW</rb>
-%D <rt>World Wide Web</rt>
-%D </ruby>
-%D \stoptyping
-%D
-%D complex ruby:
-%D
-%D \starttyping
-%D <ruby>
-%D <rbc>
-%D <rb>10</rb>
-%D <rb>31</rb>
-%D <rb>2002</rb>
-%D </rbc>
-%D <rtc>
-%D <rt>Month</rt>
-%D <rt>Day</rt>
-%D <rt>Year</rt>
-%D </rtc>
-%D <rtc>
-%D <rt rbspan="3">Expiration Date</rt>
-%D </rtc>
-%D </ruby>
-%D \stoptyping
-
-%D Constants/variables
-
-\startinterface all
- \setinterfaceconstant {basestyle} {basestyle}
- \setinterfaceconstant {basecolor} {basecolor}
- \setinterfaceconstant {overhang} {overhang}
-\stopinterface
-
-\startinterface all
- \setinterfacevariable {letter} {letter}
- \setinterfacevariable {end} {end}
- \setinterfacevariable {inline} {inline}
-\stopinterface
-
-%D Namespace
-
-\def\????rb{@@@@rb}
-
-%D Additional registers
-
-\newdimen \!!rubywidth
-\newdimen \!!rubyleftmargin
-\newdimen \!!rubyrightmargin
-\newsignal\!!rubysignal
-\newcount \!!rubycount
-\newtoks \!!rubybase
-\newtoks \!!rubytext
-
-%D \macros
-%D {setupruby}
-
-\def\setupruby
- {\dodoubleargument\getparameters[\????rb]}
-
-\def\rubyparameter#1{\csname\????rb#1\endcsname}
-
-%D \macros
-%D {bRUBY,eRUBY,bRB,eRB,bRT,eRT}
-
-\def\bRUBY
- {\dosingleempty\dobRUBY}
-
-\def\dobRUBY[#1]%
- {\begingroup
- \iffirstargument
- \setupruby[#1]%
- \fi
- \scratchdimen\lastskip
- \ifdim\scratchdimen=\!!rubysignal\else\global\!!rubywidth\!!zeropoint\fi
- \global\advance\!!rubycount\plusone
- \xypos{rubyposition:\number\!!rubycount}%
- \doifmodeelse\v!first
- {\edef\rubyposition{\the\onepoint}}%
- {\edef\rubyposition{\the\dimexpr\MPx{rubyposition:\number\!!rubycount}-\MPx{text:\the\realpageno}\relax}}}
-
-\def\eRUBY
- {\setbox\scratchboxone\hbox{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\the\!!rubybase}}%
- \setbox\scratchboxtwo\hbox{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\the\!!rubytext}}%
- \scratchdimenone\wd\scratchboxone
- \scratchdimentwo\wd\scratchboxtwo
- %\scratchdimenthree\ifdim\scratchdimenone<\scratchdimentwo\space\scratchdimenone\else\scratchdimentwo\fi
- \scratchdimenthree\scratchdimenone
- \executeifdefined{\????rb:\c!align :\rubyparameter\c!align }{\getvalue{\????rb:\c!align :\v!auto }}%
- \executeifdefined{\????rb:\c!position:\rubyparameter\c!position}{\getvalue{\????rb:\c!position:\v!before}}%
- \executeifdefined{\????rb:\c!overhang:\rubyparameter\c!overhang}{\getvalue{\????rb:\c!overhang:\v!auto }}%
- \hskip\!!rubysignal\relax
- \endgroup}
-
-\def\bRB{\dodoubleempty\dobRB}
-\def\bRT{\dodoubleempty\dobRT}
-
-\def\dobRB[#1][#2]#3\eRB{\!!rubybase{#3}}
-\def\dobRT[#1][#2]#3\eRT{\!!rubytext{#3}}
-
-\def\placerubystrut{\doif{\rubyparameter\c!strut}\v!yes{\setstrut\strut}}
-
-%D Alignment
-
-\def\RUBYdistributespace #1{\processtokens{\hss }{\hss\hss}{\hss }{\hss\hss}{#1}}
-\def\RUBYdistributeletter#1{\processtokens{\relax}{\hss }{\relax}{\hss\hss}{#1}}
-
-\setvalue{\????rb:\c!align:\v!space}%
- {\!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \ifdim\scratchdimenone>\scratchdimentwo
- \setbox\scratchboxone\hbox to \scratchdimenone{\hss\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenone{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributespace\@EA{\the\!!rubytext}}}%
- \else
- \setbox\scratchboxone\hbox to \scratchdimentwo{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\@EA\RUBYdistributespace\@EA{\the\!!rubybase}}}%
- \setbox\scratchboxtwo\hbox to \scratchdimentwo{\hss\box\scratchboxtwo\hss}%
- \fi}
-
-\setvalue{\????rb:\c!align:\v!letter}%
- {\!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \ifdim\scratchdimenone>\scratchdimentwo
- \setbox\scratchboxone\hbox to \scratchdimenone{\hss\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenone{\redoconvertfont\doattributes\????rb\c!textstyle\c!textcolor{\@EA\RUBYdistributeletter\@EA{\the\!!rubytext}}}%
- \else
- \setbox\scratchboxone\hbox to \scratchdimentwo{\redoconvertfont\doattributes\????rb\c!basestyle\c!basecolor{\@EA\RUBYdistributeletter\@EA{\the\!!rubybase}}}%
- \setbox\scratchboxtwo\hbox to \scratchdimentwo{\hss\box\scratchboxtwo\hss}%
- \fi}
-
-\setvalue{\????rb:\c!align:\v!auto}% I need special alignments for the begin/end of the line!!!
- {\ifdim\scratchdimenone>\scratchdimentwo
- \getvalue{\????rb:\c!align:\v!space}%
- \else
- \ifdim\rubyposition=\!!zeropoint % begin of the line
- \getvalue{\????rb:\c!align:\v!left}%
- \else\ifdim\rubyposition=\the\dimexpr\textwidth-\scratchdimenthree\relax % end of the line
- \getvalue{\????rb:\c!align:\v!right}%
- \else
- \getvalue{\????rb:\c!align:\v!space}%
- \fi\fi
- \fi}
-
-\setvalue{\????rb:\c!align:\v!left}%
- {\ifdim\scratchdimenone>\scratchdimentwo
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \else
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\dimexpr\scratchdimentwo-\scratchdimenone\relax
- \fi
- \setbox\scratchboxone\hbox to \scratchdimenthree{\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenthree{\box\scratchboxtwo\hss}}
-
-\setvalue{\????rb:\c!align:\v!start}%
- {\getvalue{\????rb:\c!align:\v!left}}
-
-\setvalue{\????rb:\c!align:\v!center}%
- {\ifdim\scratchdimenone>\scratchdimentwo
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \else
- \!!rubyleftmargin \dimexpr(\scratchdimentwo-\scratchdimenone)/2\relax
- \!!rubyrightmargin\dimexpr(\scratchdimentwo-\scratchdimenone)/2\relax
- \fi
- \setbox\scratchboxone\hbox to \scratchdimenthree{\hss\box\scratchboxone\hss}%
- \setbox\scratchboxtwo\hbox to \scratchdimenthree{\hss\box\scratchboxtwo\hss}}
-
-\setvalue{\????rb:\c!align:\v!right}%
- {\ifdim\scratchdimenone>\scratchdimentwo
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \else
- \!!rubyleftmargin \dimexpr\scratchdimentwo-\scratchdimenone\relax
- \!!rubyrightmargin\zeropoint
- \fi
- \setbox\scratchboxone\hbox to \scratchdimenthree{\hss\box\scratchboxone}%
- \setbox\scratchboxtwo\hbox to \scratchdimenthree{\hss\box\scratchboxtwo}}
-
-\setvalue{\????rb:\c!align:\v!end}%
- {\getvalue{\v!ruby:\c!align:\v!right}}
-
-\setvalue{\????rb:\c!align:\v!edge}% modify to take care of overlap etc.
- {\ifdim\rubyposition=\zeropoint
- \getvalue{\????rb:\c!align:\v!left}%
- \else\ifdim\rubyposition=\the\dimexpr\textwidth-\scratchdimenthree\relax
- \getvalue{\????rb:\c!align:\v!right}%
- \else
- \getvalue{\????rb:\c!align:\v!center}%
- \fi\fi}
-
-%D Positioning
-
-\setvalue{\????rb:\c!position:\v!before}%
- {\setbox\scratchboxthree\vbox
- {\offinterlineskip
- \hbox{\undepthed{\placerubystrut\box\scratchboxtwo}}
- \rubyparameter\c!inbetween
- \hbox{\placerubystrut\box\scratchboxone}}}
-
-\setvalue{\????rb:\c!position:\v!after}%
- {\setbox\scratchboxthree\vtop
- {\offinterlineskip
- \hbox{\undepthed{\placerubystrut\box\scratchboxone}}
- \rubyparameter\c!inbetween
- \hbox{\placerubystrut\box\scratchboxtwo}}}
-
-\setvalue{\????rb:\c!position:\v!inline}% pure text to allow line breaks in the text
- {\setbox\scratchboxthree\box\voidbox
- \!!rubyleftmargin \zeropoint
- \!!rubyrightmargin\zeropoint
- \the\!!rubybase
- \rubyparameter\c!separator
- \rubyparameter\c!lefttext\the\!!rubytext\rubyparameter\c!righttext}
-
-%D Overhang
-
-\setvalue{\????rb:\c!overhang:\v!auto}%
- {\ifdim\!!rubywidth>\!!zeropoint
- \kern\dimexpr\!!rubyleftmargin+\!!rubywidth\relax
- \fi
- \box\scratchboxthree
- \global\!!rubywidth\!!rubyrightmargin}
-
-\setvalue{\????rb:\c!overhang:\v!start}%
- {\box\scratchboxthree\kern\!!rubyrightmargin
- \global\!!rubywidth\!!rubyrightmargin}
-
-\setvalue{\????rb:\c!overhang:\v!end}%
- {\ifdim\!!rubywidth>\!!zeropoint
- \kern\dimexpr\!!rubyleftmargin+\!!rubywidth\relax
- \else
- \kern\!!rubyleftmargin
- \fi
- \box\scratchboxthree
- \global\!!rubywidth\!!zeropoint}
-
-\setvalue{\????rb:\c!overhang:\v!none}%
- {\kern\!!rubyleftmargin\box\scratchboxthree\kern\!!rubyrightmargin
- \global\!!rubywidth\!!zeropoint}
-
-%D \macros
-%D {ruby}
-
-\def\ruby
- {\dontleavehmode\dosingleempty\doruby}
-
-\def\doruby[#1]#2#3%
- {\pdfactualtext
- {\dobRUBY[#1]\bRB#2\eRB\bRT#3\eRT\eRUBY}
- {#2\rubyparameter\c!separator\rubyparameter\c!lefttext#3\rubyparameter\c!righttext}}
-
-%D Default values
-
-\setupruby
- [\c!position=\v!before, % before|after|inline
- \c!align=\v!auto, % auto|start|left|center|end|right|distribute-letter|distribute-space|line-edge
- \c!overhang=\v!auto, % auto|start|end|none
- \c!separator={ },
- \c!lefttext=(,
- \c!righttext=),
- \c!strut=\v!no,
- \c!inbetween={\blank[\v!small]},
- \c!textstyle=\txx]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkvi b/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkvi
deleted file mode 100644
index 21f6ae9a22..0000000000
--- a/macros/context/contrib/context-ruby/tex/context/third/ruby/t-ruby.mkvi
+++ /dev/null
@@ -1,393 +0,0 @@
-%D \module
-%D [ file=t-ruby,
-%D version=2012.12.01,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Ruby Markup,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\writestatus{loading}{ConTeXt User Module / Ruby Markup}
-
-\unprotect
-
-%D simple ruby:
-%D
-%D \starttyping
-%D <ruby>
-%D <rb>WWW</rb>
-%D <rt>World Wide Web</rt>
-%D </ruby>
-%D \stoptyping
-%D
-%D complex ruby:
-%D
-%D \starttyping
-%D <ruby>
-%D <rbc>
-%D <rb>10</rb>
-%D <rb>31</rb>
-%D <rb>2002</rb>
-%D </rbc>
-%D <rtc>
-%D <rt>Month</rt>
-%D <rt>Day</rt>
-%D <rt>Year</rt>
-%D </rtc>
-%D <rtc>
-%D <rt rbspan="3">Expiration Date</rt>
-%D </rtc>
-%D </ruby>
-%D \stoptyping
-
-%D Constants/variables
-
-\startinterface all
- \setinterfaceconstant {basestyle} {basestyle}
- \setinterfaceconstant {basecolor} {basecolor}
- \setinterfaceconstant {rubybase} {rubybase}
- \setinterfaceconstant {rubytext} {rubytext}
-\stopinterface
-
-\startinterface all
- \setinterfacevariable {letter} {letter}
-\stopinterface
-
-%D Lua
-
-\startluacode
-
-thirddata = thirddata or { }
-thirddata.ruby = thirddata.ruby or { }
-
-function thirddata.ruby.doifelsecjk(string)
- local state = true
- for c in unicode.utf8.gmatch(string,".") do
- local n = scripts.hash[utf.byte(c)]
- if not ( n == "chinese" or n == "korean" ) then
- state = false
- break
- end
- end
- commands.doifelse(state)
-end
-
-\stopluacode
-
-%D Namespace
-
-\installnamespace {ruby}
-\installnamespace {rubyalign}
-\installnamespace {rubyalternative}
-\installnamespace {rubyhang}
-
-%D Additional registers
-
-\newdimen \d_ruby_width
-\newdimen \d_ruby_left
-\newdimen \d_ruby_right
-\newdimen \d_ruby_position
-
-\newsignal \s_ruby_signal
-
-\newcount \c_ruby_n
-
-\newtoks \t_ruby_base
-\newtoks \t_ruby_text
-
-\newbox \b_ruby_base
-\newbox \b_ruby_text
-\newbox \b_ruby_box
-
-%D \macros
-%D {defineruby,setupruby}
-
-\installcommandhandler \????ruby {ruby} \????ruby
-
-%D \macros
-%D {ruby}
-
-\unexpanded\def\ruby
- {\dontleavehmode
- \begingroup
- \let\currentruby\empty
- \dosingleempty\ruby_direct_indeed}
-
-\unexpanded\def\ruby_direct#name%
- {\dontleavehmode
- \begingroup
- \edef\currentruby{#name}%
- \dosingleempty\ruby_direct_indeed}
-
-\def\ruby_direct_indeed[#parameters]#rubybase#rubytext%
- {\setupcurrentruby[#parameters,\c!rubybase={#rubybase},\c!rubytext={#rubytext}]%
- %
- \scratchdimen\lastskip
- \ifdim\scratchdimen=\s_ruby_signal\else\global\d_ruby_width\zeropoint\fi
- %
- \global\advance\c_ruby_n\plusone
- %
- \xypos{rubyposition:\number\c_ruby_n}%
- \doifmodeelse\v!first
- {\d_ruby_position\onepoint}
- {\d_ruby_position\dimexpr\MPx{rubyposition:\number\c_ruby_n}-\MPx{text:\number\realpageno}\relax}%
- %
- \setbox\b_ruby_base\hbox{\userubystyleandcolor\c!basestyle\c!basecolor\directrubyparameter\c!rubybase}%
- \setbox\b_ruby_text\hbox{\userubystyleandcolor\c!textstyle\c!textcolor\directrubyparameter\c!rubytext}%
- %
- \edef\p_ruby_align {\rubyparameter\c!align }%
- \edef\p_ruby_alternative{\rubyparameter\c!alternative}%
- \edef\p_ruby_hang {\rubyparameter\c!hang }%
- %
- \ruby_align
- \ruby_alternative
- \ruby_hang
- %
- \hskip\s_ruby_signal\relax
- \endgroup}
-
-\appendtoks
- \setuevalue\currentruby{\ruby_direct{\currentruby}}%
-\to \everydefineruby
-
-%D Alignment
-%D
-%D \startitemize[packed]
-%D \item left
-%D \item middle
-%D \item right
-%D \item auto
-%D \item letter
-%D \item space
-%D \stopitemize
-
-\unexpanded\def\ruby_distribute_space #1{\processtokens{\hss }{\hss\hss}{\hss }{\hss\hss}{#1}}
-\unexpanded\def\ruby_distribute_letter#1{\processtokens{\relax}{\hss }{\relax}{\hss\hss}{#1}}
-
-\def\ruby_align_stretch
- {\d_ruby_left \zeropoint
- \d_ruby_right\zeropoint
- \ifdim\wd\b_ruby_base>\wd\b_ruby_text
- \setbox\b_ruby_base\hbox to \wd\b_ruby_base{\hss\box\b_ruby_base\hss}%
- \setbox\b_ruby_text\hbox to \wd\b_ruby_base{\userubystyleandcolor\c!textstyle\c!textcolor\normalexpanded{\ruby_distribute_space{\directrubyparameter\c!rubytext}}}%
- \else
- \setbox\b_ruby_base\hbox to \wd\b_ruby_text{\userubystyleandcolor\c!basestyle\c!basecolor\normalexpanded{\ruby_distribute_space{\directrubyparameter\c!rubybase}}}%
- \setbox\b_ruby_text\hbox to \wd\b_ruby_text{\hss\box\b_ruby_text\hss}%
- \fi}
-
-\def\ruby_align_letter
- {\d_ruby_left \zeropoint
- \d_ruby_right\zeropoint
- \ifdim\wd\b_ruby_base>\wd\b_ruby_test
- \setbox\b_ruby_base\hbox to \wd\b_ruby_base{\hss\box\b_ruby_base\hss}%
- \setbox\b_ruby_text\hbox to \wd\b_ruby_base{\userubystyleandcolor\c!textstyle\c!textcolor\normalexpanded{\ruby_distribute_letter{\directrubyparameter\c!rubytext}}}%
- \else
- \setbox\b_ruby_base\hbox to \wd\b_ruby_text{\userubystyleandcolor\c!basestyle\c!basecolor\normalexpanded{\ruby_distribute_letter{\directrubyparameter\c!rubybase}}}%
- \setbox\b_ruby_text\hbox to \wd\b_ruby_text{\hss\box\b_ruby_text\hss}%
- \fi}
-
-\def\ruby_align_auto
- {\ifdim\wd\b_ruby_base>\wd\b_ruby_text
- \ctxlua{thirddata.ruby.doifelsecjk("\directrubyparameter\c!rubybase")}\donetrue\donefalse
- \ifdone
- \ruby_align_stretch
- \else
- \ruby_align_middle
- \fi
- \else
- \ifdim\d_ruby_position=\zeropoint % begin of the line
- \ruby_align_left
- \else\ifdim\d_ruby_position=\dimexpr\textwidth-\wd\b_ruby_base\relax % end of the line
- \ruby_align_right
- \else
- \ctxlua{thirddata.ruby.doifelsecjk("\directrubyparameter\c!rubytext")}\donetrue\donefalse
- \ifdone
- \ruby_align_stretch
- \else
- \ruby_align_middle
- \fi
- \fi\fi
- \fi}
-
-\def\ruby_align_left
- {\ifdim\wd\b_ruby_base>\wd\b_ruby_text
- \d_ruby_left \zeropoint
- \d_ruby_right\zeropoint
- \else
- \d_ruby_left \zeropoint
- \d_ruby_right\dimexpr\wd\b_ruby_text-\wd\b_ruby_base\relax
- \fi
- \setbox\b_ruby_base\hbox to \wd\b_ruby_base{\box\b_ruby_base\hss}%
- \setbox\b_ruby_text\hbox to \wd\b_ruby_base{\box\b_ruby_text\hss}}
-
-\def\ruby_align_middle
- {\ifdim\wd\b_ruby_base>\wd\b_ruby_text
- \d_ruby_left \zeropoint
- \d_ruby_right\zeropoint
- \else
- \d_ruby_left \dimexpr(\wd\b_ruby_text-\wd\b_ruby_base)/2\relax
- \d_ruby_right\dimexpr(\wd\b_ruby_text-\wd\b_ruby_base)/2\relax
- \fi
- \setbox\b_ruby_base\hbox to \wd\b_ruby_base{\hss\box\b_ruby_base\hss}%
- \setbox\b_ruby_text\hbox to \wd\b_ruby_base{\hss\box\b_ruby_text\hss}}
-
-\def\ruby_align_right
- {\ifdim\wd\b_ruby_base>\wd\b_ruby_base
- \d_ruby_left \zeropoint
- \d_ruby_right\zeropoint
- \else
- \d_ruby_left \dimexpr\wd\b_ruby_text-\wd\b_ruby_base\relax
- \d_ruby_right\zeropoint
- \fi
- \setbox\b_ruby_base\hbox to \wd\b_ruby_base{\hss\box\b_ruby_base}%
- \setbox\b_ruby_text\hbox to \wd\b_ruby_base{\hss\box\b_ruby_text}}
-
-\def\ruby_align_margin
- {\ifdim\d_ruby_position=\zeropoint
- \ruby_align_left
- \else\ifdim\d_ruby_position=\dimexpr\textwidth-\wd\b_ruby_base\relax
- \ruby_align_right
- \else
- \ruby_align_middle
- \fi\fi}
-
-\def\ruby_align
- {\csname\????rubyalign
- \ifcsname\????rubyalign\p_ruby_align\endcsname\p_ruby_align\else\v!auto\fi
- \endcsname}
-
-\setvalue{\????rubyalign\v!auto }{\ruby_align_auto }
-\setvalue{\????rubyalign\v!left }{\ruby_align_left }
-\setvalue{\????rubyalign\v!right }{\ruby_align_right }
-\setvalue{\????rubyalign\v!middle }{\ruby_align_middle }
-\setvalue{\????rubyalign\v!letter }{\ruby_align_letter }
-\setvalue{\????rubyalign\v!stretch}{\ruby_align_stretch}
-\setvalue{\????rubyalign\v!margin }{\ruby_align_margin }
-
-%D Alternative
-%D
-%D \startitemize[packed]
-%D \item top
-%D \item bottom
-%D \item text
-%D \stopitemize
-
-% \setvalue{\????rubyalternative\v!none}% needed for \pdfactualtext
-% {\directrubyparameter\c!rubybase
-% \rubyparameter\c!separator
-% \rubyparameter\c!lefttext
-% \directrubyparameter\c!rubytext
-% \rubyparameter\c!righttext}
-
-\def\ruby_alternative_top
- {\setbox\b_ruby_box\vbox
- {\doifsomething{\rubyparameter\c!strut}{\setupstrut[\rubyparameter\c!strut]}%
- \offinterlineskip
- \hbox{\undepthed{\begstrut\box\b_ruby_text\endstrut}}
- \rubyparameter\c!inbetween
- \hbox{\begstrut\box\b_ruby_base\endstrut}}}
-
-\def\ruby_alternative_bottom
- {\setbox\b_ruby_box\vtop
- {\doifsomething{\rubyparameter\c!strut}{\setupstrut[\rubyparameter\c!strut]}%
- \offinterlineskip
- \hbox{\undepthed{\begstrut\box\b_ruby_base\endstrut}}
- \rubyparameter\c!inbetween
- \hbox{\begstrut\box\b_ruby_text\endstrut}}}
-
-\def\ruby_alternative_text
- {\setbox\b_ruby_box\box\voidbox
- \d_ruby_left \zeropoint
- \d_ruby_right\zeropoint
- \directrubyparameter\c!rubybase
- \rubyparameter\c!separator
- \rubyparameter\c!lefttext\directrubyparameter\c!rubytext\rubyparameter\c!righttext}
-
-\unexpanded\def\ruby_alternative_vertical_process#text%
- {\setbox\scratchbox\vbox
- {\userubystyleandcolor\c!textstyle\c!textcolor
- \setupinterlinespace[\rubyparameter\c!interlinespace]%
- \handletokens#text\with\hbox
- \par}%
- \lower\dimexpr(\ht\scratchbox+\strutdp-\strutht)/2-\rubyparameter\c!dy\relax\box\scratchbox}
-
-\def\ruby_alternative_vertical
- {\d_ruby_left \zeropoint
- \d_ruby_right\zeropoint
- \setbox\b_ruby_box\hbox\bgroup
- \begingroup
- \userubystyleandcolor\c!basestyle\c!basecolor
- \directrubyparameter\c!rubybase
- \endgroup
- \normalexpanded{\ruby_alternative_vertical_process{\directrubyparameter\c!rubytext}}%
- \egroup}
-
-\def\ruby_alternative
- {\csname\????rubyalternative
- \ifcsname\????rubyalternative\p_ruby_alternative\endcsname\p_ruby_alternative\else\v!text\fi
- \endcsname}
-
-\setvalue{\????rubyalternative\v!top }{\ruby_alternative_top }
-\setvalue{\????rubyalternative\v!bottom}{\ruby_alternative_bottom}
-\setvalue{\????rubyalternative\v!text }{\ruby_alternative_text }
-
-%D Overhang
-%D
-%D \startitemize[packed]
-%D \item left
-%D \item right
-%D \item auto
-%D \item none
-%D \stopitemize
-
-\def\ruby_hang_auto
- {\ifdim\d_ruby_width>\zeropoint
- \kern\dimexpr\d_ruby_left+\d_ruby_width\relax
- \fi
- \box\b_ruby_box
- \global\d_ruby_width\d_ruby_right}
-
-\def\ruby_hang_left
- {\box\b_ruby_box\kern\d_ruby_right
- \global\d_ruby_width\d_ruby_right}
-
-\def\ruby_hang_right
- {\ifdim\d_ruby_width>\zeropoint
- \kern\dimexpr\d_ruby_left+\d_ruby_width\relax
- \else
- \kern\d_ruby_left
- \fi
- \box\b_ruby_box
- \global\d_ruby_width\zeropoint}
-
-\def\ruby_hang_none
- {\kern\d_ruby_left\box\b_ruby_box\kern\d_ruby_right
- \global\d_ruby_width\zeropoint}
-
-\def\ruby_hang
- {\csname\????rubyhang
- \ifcsname\????rubyhang\p_ruby_hang\endcsname\p_ruby_hang\else\v!auto\fi
- \endcsname}
-
-\setvalue{\????rubyhang\v!auto }{\ruby_hang_auto }
-\setvalue{\????rubyhang\v!left }{\ruby_hang_left }
-\setvalue{\????rubyhang\v!right}{\ruby_hang_right}
-\setvalue{\????rubyhang\v!none }{\ruby_hang_none }
-
-%D Default values
-
-\setupruby
- [\c!alternative=\v!top,
- \c!align=\v!auto,
- \c!hang=\v!auto,
- \c!dy=\zeropoint,
- \c!separator={ },
- \c!lefttext={(},
- \c!righttext={)},
- \c!strut=\v!no,
- \c!inbetween={\blank[\v!small]},
- \c!textstyle=\txx]
-
-\protect \endinput
diff --git a/macros/context/contrib/context-simplefonts/VERSION b/macros/context/contrib/context-simplefonts/VERSION
deleted file mode 100644
index c34405eff9..0000000000
--- a/macros/context/contrib/context-simplefonts/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2013.02.24
diff --git a/macros/context/contrib/context-simplefonts/doc/context/third/simplefonts/README b/macros/context/contrib/context-simplefonts/doc/context/third/simplefonts/README
deleted file mode 100644
index a541e0faac..0000000000
--- a/macros/context/contrib/context-simplefonts/doc/context/third/simplefonts/README
+++ /dev/null
@@ -1,40 +0,0 @@
-Modulename : t-simplefonts
-Author : Wolfgang Schuster
-License : GNU General Public License
-
-Description
------------
-
-The 'simplefonts' module provides a interface to use fonts in ConTeXt MkIV
-in similar way as you can do with the 'fontspec' package for XeLaTeX.
-
-Usage
------
-
-The module is loaded in the document with:
-
- \usemodule[simplefonts]
-
-The global fonts can be set with the following three commands:
-
- \setmainfont[...][..,..=..,..]
- \setsansfont[...][..,..=..,..]
- \setmonofont[...][..,..=..,..]
-
-A single typeface can bet set with the command:
-
- \definesimplefonttypeface[...][...][..,..=..,..]
-
-For each a complete typeface switch like \switchtobodyfont but you can use
-
- \simplefonttypeface[...][..,..=..,..]
-
-With the command
-
- \definesimplefont[...][..,..=..,..]
-
-you can define a single font for the use in header or other style elements and the last commmand
-
- \simplefont[...][..,..=..,..]
-
-is for inline use and acts like \definedfont.
diff --git a/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.lua b/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.lua
deleted file mode 100644
index 5c53164fcc..0000000000
--- a/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.lua
+++ /dev/null
@@ -1,228 +0,0 @@
-if not modules then modules = { } end modules ['t-simplefonts'] = {
- version = 1.000,
- comment = "Simplefonts",
- author = "Wolfgang Schuster",
- copyright = "Wolfgang Schuster",
- email = "schuster.wolfgang@googlemail.com",
- license = "GNU General Public License"
-}
-
-local texsprint, ctxcatcodes, prtcatcodes, format, lower, gsub, find = tex.sprint, tex.ctxcatcodes, tex.prtcatcodes, string.format, string.lower, string.gsub, string.find
-
-thirddata = thirddata or { }
-thirddata.simplefonts = thirddata.simplefonts or { }
-
-local simplefonts = thirddata.simplefonts
-
-simplefonts.fontlist = simplefonts.fontlist or { }
-simplefonts.extlist = simplefonts.extlist or { }
-simplefonts.features = simplefonts.features or { }
-simplefonts.scripts = simplefonts.scripts or { }
-simplefonts.languages = simplefonts.languages or { }
-
-simplefonts.fontlist = {
- ["hiraginokakugothicpro"] = -- Hiragino Kaku Gothic Pro
- {
- ["normal"] =
- {
- regular = "hirakakuprow3" ,
- italic = "hirakakuprow3" ,
- bold = "hirakakuprow6" ,
- bolditalic = "hirakakuprow6" ,
- } ,
- } ,
- ["hiraginokakugothicpron"] = -- Hiragino Kaku Gothic ProN
- {
- ["normal"] =
- {
- regular = "hirakakupronw3" ,
- italic = "hirakakupronw3" ,
- bold = "hirakakupronw6" ,
- bolditalic = "hirakakupronw6" ,
- } ,
- } ,
- ["hiraginokakugothicstd"] = -- Hiragino Kaku Gothic Std
- {
- ["normal"] =
- {
- regular = "hirakakustdw8" ,
- italic = "hirakakustdw8" ,
- bold = "hirakakustdw8" ,
- bolditalic = "hirakakustdw8" ,
- } ,
- } ,
- ["hiraginokakugothicstdn"] = -- Hiragino Kaku Gothic StdN
- {
- ["normal"] =
- {
- regular = "hirakakustdnw8" ,
- italic = "hirakakustdnw8" ,
- bold = "hirakakustdnw8" ,
- bolditalic = "hirakakustdnw8" ,
- } ,
- } ,
- ["hiraginomarugothicpro"] = -- Hiragino Maru Gothic Pro
- {
- ["normal"] =
- {
- regular = "hiramaruprow4" ,
- italic = "hiramaruprow4" ,
- bold = "hiramaruprow4" ,
- bolditalic = "hiramaruprow4" ,
- } ,
- } ,
- ["hiraginomarugothicpron"] = -- Hiragino Maru Gothic ProN
- {
- ["normal"] =
- {
- regular = "hiramarupronw4" ,
- italic = "hiramarupronw4" ,
- bold = "hiramarupronw4" ,
- bolditalic = "hiramarupronw4" ,
- } ,
- } ,
- ["hiraginominchopro"] = -- Hiragino Mincho Pro
- {
- ["normal"] =
- {
- regular = "hiraminprow3" ,
- italic = "hiraminprow3" ,
- bold = "hiraminprow6" ,
- bolditalic = "hiraminprow6" ,
- } ,
- } ,
- ["hiraginominchopron"] = -- Hiragino Mincho ProN
- {
- ["normal"] =
- {
- regular = "hiraminpronw3" ,
- italic = "hiraminpronw3" ,
- bold = "hiraminpronw6" ,
- bolditalic = "hiraminpronw6" ,
- } ,
- } ,
- ["latinmodernmono"] = -- Latin Modern Mono
- {
- ["normal"] =
- {
- regular = "lmmono10regular" ,
- bold = "lmmonolt10bold" ,
- italic = "lmmono10italic" ,
- slanted = "lmmono10italic" ,
- bolditalic = "lmmonolt10boldoblique" ,
- boldslanted = "lmmonolt10boldoblique" ,
- caps = "lmmonocaps10regular" ,
- slantedcaps = "lmmonocaps10oblique" ,
- } ,
- } ,
- ["latinmodernroman"] = -- Latin Modern Roman
- {
- ["normal"] =
- {
- regular = "lmroman10regular" ,
- bold = "lmroman10bold" ,
- italic = "lmroman10italic" ,
- slanted = "lmromanslant10regular" ,
- bolditalic = "lmroman10bolditalic" ,
- boldslanted = "lmromanslant10bold" ,
- caps = "lmromancaps10regular" ,
- slantedcaps = "lmromancaps10oblique" ,
- } ,
- } ,
- ["latinmodernsans"] = -- Latin Modern Sans
- {
- ["normal"] =
- {
- regular = "lmsans10regular" ,
- bold = "lmsans10bold" ,
- italic = "lmsans10oblique" ,
- slanted = "lmsans10oblique" ,
- bolditalic = "lmsans10boldoblique" ,
- boldslanted = "lmsans10boldoblique" ,
- } ,
- } ,
-}
-
-function simplefonts.selectfont(font,name,extension,style,weight)
- local fontname = {}
- local truename = name
- local name = lower(gsub(name,"[^a-zA-Z0-9]",""))
- if extension ~= "" then
- ext = find(extension,"*")
- if ext ~= nil then
- fontname = gsub(extension,"*",name)
- else
- fontname = extension
- end
- fontname = "name:" .. lower(gsub(fontname,"[^a-zA-Z0-9]",""))
- else
- if string.match(truename,"file:") then -- can't i check for 'file:' and 'name:' with one string.match?
- fontname = truename
- elseif string.match(truename,"name:") then
- fontname = truename
- elseif simplefonts.fontlist[name] then
- if simplefonts.fontlist[name][weight] then
- if simplefonts.fontlist[name][weight][style] then
- fontname = simplefonts.fontlist[name][weight][style]
- else
- fontname = simplefonts.fontlist[name][weight]["regular"]
- end
- elseif simplefonts.fontlist[name]["normal"] then
- if simplefonts.fontlist[name]["normal"][style] then
- fontname = simplefonts.fontlist[name]["normal"][style]
- else
- fontname = simplefonts.fontlist[name]["normal"]["regular"]
- end
- end
- fontname = "name:" .. fontname
- else
- -- use comma list
- for _, v in ipairs(simplefonts.extlist[weight][style]) do
- fontname = name .. v
- if global.fonts.names.exists(fontname) then
- fontname = "name:" .. fontname
- break
- else
- --~ interfaces.showmessage("simplefonts","1",fontname) -- wrong place
- fontname = "DefaultFont" -- no font is found
- end
- end
- end
- end
- --~ print(fontname)
- if fontname == "DefaultFont" then
- interfaces.showmessage("simplefonts","1",name)
- end
- texsprint(prtcatcodes,format("\\setvalue{\\????sf %s%s}{%s}",font,style,fontname))
-end
-
-function simplefonts.normalizefontname(name)
- local fontname = lower(gsub(name,"[^a-zA-Z0-9]","")) -- remove spaces and hyphens etc. from the user specified name
- texsprint(ctxcatcodes,fontname)
-end
-
-function simplefonts.parameter(key,value,list)
- local feature = simplefonts.features [key]
- local script = simplefonts.scripts [value]
- local language = simplefonts.languages [value]
- if feature then
- texsprint(format("\\addvalue{%s}{%s=%s}",list,feature,value))
- --~ print("feature: " .. feature .. " = " .. value)
- else
- if key == "script" then
- if script then
- texsprint(format("\\addvalue{%s}{%s=%s}",list,key,script))
- --~ print("script: " script)
- else
- interfaces.showmessage("simplefonts","4",value)
- end
- elseif key == "language" then
- if language then
- texsprint(format("\\addvalue{%s}{%s=%s}",list,key,language))
- --~ print("language: " language)
- else
- interfaces.showmessage("simplefonts","5",value)
- end
- end
- end
-end
diff --git a/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkii b/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkii
deleted file mode 100644
index 67e7774d6b..0000000000
--- a/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkii
+++ /dev/null
@@ -1,400 +0,0 @@
-%D \module
-%D [ file=t-simplefonts,
-%D version=2009.11.08,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Simplefonts,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=Public Domain]
-
-\writestatus{loading}{ConTeXt User Module / Simplefonts}
-
-\unprotect
-
-\startmodule[simplefonts]
-
-%D Constants and variables
-
-\startinterface all
- \setinterfaceconstant {regular} {regular}
- \setinterfaceconstant {italic} {italic}
- \setinterfaceconstant {slanted} {slanted}
- \setinterfaceconstant {bold} {bold}
- \setinterfaceconstant {bolditalic} {bolditalic}
- \setinterfaceconstant {boldslanted} {boldslanted}
- \setinterfaceconstant {caps} {caps}
- \setinterfaceconstant {scale} {scale}
- \setinterfaceconstant {features} {features}
- \setinterfaceconstant {regularfont} {regularfont}
- \setinterfaceconstant {italicfont} {italicfont}
- \setinterfaceconstant {slantedfont} {slantedfont}
- \setinterfaceconstant {boldfont} {boldfont}
- \setinterfaceconstant {bolditalicfont} {bolditalicfont}
- \setinterfaceconstant {boldslantedfont} {boldslantedfont}
- \setinterfaceconstant {capsfont} {capsfont}
- \setinterfaceconstant {regularfeatures} {regularfeatures}
- \setinterfaceconstant {italicfeatures} {italicfeatures}
- \setinterfaceconstant {slantedfeatures} {slantedfeatures}
- \setinterfaceconstant {boldfeatures} {boldfeatures}
- \setinterfaceconstant {bolditalicfeatures} {bolditalicfeatures}
- \setinterfaceconstant {boldslantedfeatures} {boldslantedfeatures}
- \setinterfaceconstant {smallcapsfeatures} {smallcapsfeatures}
- \setinterfaceconstant {capsfeatures} {capsfeatures}
- \setinterfaceconstant {typeface} {typeface}
-\stopinterface
-
-\startinterface all
- \setinterfacevariable {simplefonts} {simplefonts}
- \setinterfacevariable {simplefont} {simplefont}
- \setinterfacevariable {style} {style}
- \setinterfacevariable {suffix} {suffix}
- \setinterfacevariable {serif} {serif}
- \setinterfacevariable {sans} {sans}
- \setinterfacevariable {mono} {mono}
- \setinterfacevariable {math} {math}
- \setinterfacevariable {mainfont} {mainfont}
- \setinterfacevariable {sansfont} {sansfont}
- \setinterfacevariable {monofont} {monofont}
- \setinterfacevariable {mathfont} {mathfont}
- \setinterfacevariable {handwritingfont} {handwritingfont}
- \setinterfacevariable {calligraphicfont} {calligraphicfont}
- \setinterfacevariable {handwriting} {handwriting}
- \setinterfacevariable {calligraphy} {calligraphy}
- \setinterfacevariable {fontfamily} {fontfamily}
- \setinterfacevariable {alternative} {alternative}
-\stopinterface
-
-\startinterface all
- \setinterfaceelement {set} {set}
-\stopinterface
-
-%D System constants
-
-\definesystemconstant {Handwriting}
-\definesystemconstant {Calligraphy}
-
-%D Module setup
-
-\setupmodule
- [\c!size=\!!twelvepoint,
- \c!style=\c!rm]
-
-%D Namespace
-
-\def\????sf{@@@@sf}
-
-%D Counter
-
-\newcounter\simplefonts!typeface
-\newcounter\simplefonts!fontfamily
-
-%D Boolean
-
-\newif\if!!donesimplefonts
-
-%D Comma value lists
-
-\def\simplefonts!commands
- {\v!mainfont,\v!sansfont,\v!monofont,\v!mathfont,\v!handwritingfont,\v!calligraphicfont}
-
-\def\simplefonts!alternative
- {\c!regular,\c!italic,\c!slanted,\c!bold,\c!bolditalic,\c!boldslanted,\c!caps}
-
-%D \macros
-%D {simplefontparameter,namedsimplefontparameter,
-%D setupsimplefonts,presetsimplefonts}
-%D
-%D Internal helper macros
-
-\def\simplefontparameter #1{\csname\????sf\currentsimplefont#1\endcsname}
-\def\namedsimplefontparameter#1#2{\csname\????sf #1#2\endcsname}
-
-\def\setupsimplefonts
- {\dosingleempty\dosetupsimplefonts}
-
-\def\dosetupsimplefonts[#1]% first argument is optional
- {\iffirstargument\getparameters[\????sf][#1]\fi
- \if!!donesimplefonts\simplefonts@bodyfont\fi}
-
-\def\presetsimplefonts[#1]%
- {\getparameters
- [#1]
- [\c!regularfont=,
- \c!italicfont=,
- \c!slantedfont=,
- \c!boldfont=,
- \c!bolditalicfont=,
- \c!boldslantedfont=,
- \c!capsfont=,
- \c!features=\@@@@sffeatures,
- \c!regularfeatures=\simplefontparameter\c!features,
- \c!italicfeatures=\simplefontparameter\c!features,
- \c!slantedfeatures=\simplefontparameter\c!features,
- \c!boldfeatures=\simplefontparameter\c!features,
- \c!bolditalicfeatures=\simplefontparameter\c!features,
- \c!boldslantedfeatures=\simplefontparameter\c!features,
- \c!smallcapsfeatures=\@@@@sfsmallcapsfeatures,
- \c!capsfeatures=\simplefontparameter\c!smallcapsfeatures,
- \c!scale=1.0]}
-
-\letvalue{\????sf:\v!style :\v!serif }\c!rm
-\letvalue{\????sf:\v!style :\v!sans }\c!ss
-\letvalue{\????sf:\v!style :\v!mono }\c!tt
-\letvalue{\????sf:\v!style :\v!math }\c!mm
-\letvalue{\????sf:\v!style :\v!handwriting}\c!hw
-\letvalue{\????sf:\v!style :\v!calligraphy}\c!cg
-
-\letvalue{\????sf:\v!suffix:\v!serif }\s!Serif
-\letvalue{\????sf:\v!suffix:\v!sans }\s!Sans
-\letvalue{\????sf:\v!suffix:\v!mono }\s!Mono
-\letvalue{\????sf:\v!suffix:\v!handwriting}\s!Handwriting
-\letvalue{\????sf:\v!suffix:\v!calligraphy}\s!Calligraphy
-
-\setvalue{\????sf:\v!alternative:\c!regular }{}
-\setvalue{\????sf:\v!alternative:\c!italic }{/I}
-\setvalue{\????sf:\v!alternative:\c!slanted }{/I}
-\setvalue{\????sf:\v!alternative:\c!bold }{/B}
-\setvalue{\????sf:\v!alternative:\c!bolditalic }{/BI}
-\setvalue{\????sf:\v!alternative:\c!boldslanted}{/BI}
-\setvalue{\????sf:\v!alternative:\c!caps }{}
-
-\definetypescriptsynonym[latinmodernmath][latin-modern] % do I need more of them
-
-\def\sf@style #1{\csname\????sf:\v!style :#1\endcsname}
-\def\sf@suffix #1{\csname\????sf:\v!suffix :#1\endcsname}
-\def\sf@alternative#1{\csname\????sf:\v!alternative:#1\endcsname}
-
-\starttexdefinition simplefonts@typeface #1#2#3
-
- \definetypeface
- [#1]
- [\sf@style{\namedsimplefontparameter{#3}\c!style}]
- [\namedsimplefontparameter{#3}\c!style]
- [#2]
- [\s!default]
- [rscale=\namedsimplefontparameter{#3}\c!scale]
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@family #1
-
- \simplefonts@typeface{#1}{\v!mainfont }{\v!mainfont }
- \simplefonts@typeface{#1}{\v!sansfont }{\v!sansfont }
- \simplefonts@typeface{#1}{\v!monofont }{\v!monofont }
- \simplefonts@typeface{#1}{\namedsimplefontparameter\v!mathfont\c!typeface}{\v!mathfont }
- \simplefonts@typeface{#1}{\v!handwritingfont }{\v!handwritingfont }
- \simplefonts@typeface{#1}{\v!calligraphicfont }{\v!calligraphicfont}
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@typescript #1#2
-
- \startexpanded
-
- \@NX\starttypescript[#1][#2]
-
- \simplefonts@fontsynonym{\sf@suffix{#1}\empty }{\c!regular }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Italic }{\c!italic }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Slanted }{\c!slanted }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Bold }{\c!bold }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!BoldItalic }{\c!bolditalic }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!BoldSlanted}{\c!boldslanted}
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Caps }{\c!caps }
-
- \@NX\stoptypescript
-
- \stopexpanded
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@scripttypescript #1#2
-
- \startexpanded
-
- \@NX\starttypescript[#1][#2]
-
- \simplefonts@fontsynonym{\sf@suffix{#1}}{\c!regular}
-
- \@NX\stoptypescript
-
- \stopexpanded
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@fontsynonym #1#2
-
- \@NX\definefontsynonym
- [#1]
- [\simplefontparameter{#2}]
- [\s!features=\simplefontparameter{#2\s!features}]
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@bodyfont
-
- \doglobal\increment\simplefonts!typeface
-
- \simplefonts@family{\v!simplefonts:\simplefonts!typeface}
-
- \setupbodyfont[\v!simplefonts:\simplefonts!typeface,\@@@@sfstyle,\@@@@sfsize]
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@definetextfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currenttypeface{#2}
-
- \presetsimplefonts[\????sf\currentsimplefont]
-
- \getparameters[\????sf\currentsimplefont][#4]
-
- \startprocesscommacommand[\simplefonts!alternative]
-
- \doifsomethingelse{\simplefontparameter{##1\s!font}}
- {\doifinstringelse{*}{\simplefontparameter{##1\s!font}}
- {\setevalue{\????sf#1##1}{name:#3\@EAEAEA\gobbleoneargument\csname\????sf\currentsimplefont##1\s!font\endcsname}}
- {\setevalue{\????sf#1##1}{name:\simplefontparameter{##1\s!font}}}}
- {\setevalue{\????sf#1##1}{name:#3\sf@alternative{##1}}}
-
- \stopprocesscommacommand
-
- \simplefonts@typescript{\simplefontparameter\c!style}{#1}
-
- \ifx\currenttypeface\v!simplefonts
-
- % don't create a typeface and set bodyfont when the module is loaded
-
- \if!!donesimplefonts\simplefonts@bodyfont\fi
-
- \else
-
- \simplefonts@typeface{#2}{#1}{#1}
-
- \fi
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@definescriptfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currenttypeface{#2}
-
- \presetsimplefonts[\????sf\currentsimplefont]
-
- \getparameters[\????sf\currentsimplefont][#4]
-
- \startprocesscommacommand[\c!regular]
-
- \setvalue{\????sf#1##1}{name:#3}
-
- \stopprocesscommacommand
-
- \simplefonts@scripttypescript{\simplefontparameter\c!style}{#1}
-
- \ifx\currenttypeface\v!simplefonts
-
- % don't create a typeface and set bodyfont when the module is loaded
-
- \if!!donesimplefonts\simplefonts@bodyfont\fi
-
- \else
-
- \simplefonts@typeface{#2}{#1}{#1}
-
- \fi
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@definemathfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currenttypeface{#2}
-
- \presetsimplefonts[\????sf\currentsimplefont]
-
- \getparameters[\????sf\currentsimplefont][#4]
-
- \lowercase{\unspacestring#3\to\!!simplefont}
-
- \letvalue{\????sf\currentsimplefont\c!typeface}\!!simplefont
-
- \ifx\currenttypeface\v!simplefonts
-
- % don't create a typeface and set bodyfont when the module is loaded
-
- \if!!donesimplefonts\simplefonts@bodyfont\fi
-
- \else
-
- \simplefonts@typeface{#2}{#1}{#1}
-
- \fi
-
-\stoptexdefinition
-
-%D \macros
-%D {definefontcommand}
-
-\def\definefontcommand
- {\dotripleempty\dodefinefontcommand}
-
-\def\dodefinefontcommand[#1][#2][#3]%
- {\getparameters[\????sf#1][\c!style=\v!serif,#3]%
- \processaction
- [\namedsimplefontparameter{#1}\c!style]
- [ \v!serif=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]},
- \v!sans=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]},
- \v!mono=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]},
- \v!math=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definemathfont [#1][#2]},
- \v!handwriting=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definescriptfont[#1][#2]},
- \v!calligraphy=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definescriptfont[#1][#2]},
- \s!unknown=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]}]}
-
-\definefontcommand[\v!mainfont ][\v!simplefonts][\c!style=\v!serif ]
-\definefontcommand[\v!sansfont ][\v!simplefonts][\c!style=\v!sans ]
-\definefontcommand[\v!monofont ][\v!simplefonts][\c!style=\v!mono ]
-\definefontcommand[\v!mathfont ][\v!simplefonts][\c!style=\v!math ]
-\definefontcommand[\v!handwritingfont ][\v!simplefonts][\c!style=\v!handwriting]
-\definefontcommand[\v!calligraphicfont][\v!simplefonts][\c!style=\v!calligraphy]
-
-%D \macros
-%D {definesimplefonttypeface}
-
-\def\definesimplefonttypeface
- {\dotripleempty\dodefinesimplefonttypeface}
-
-\def\dodefinesimplefonttypeface[#1][#2][#3]%
- {\getparameters[\????sf#1][\c!style=\v!serif,#3]%
- \processaction
- [\namedsimplefontparameter{#1}\c!style]
- [ \v!serif=>{\simplefonts@definetextfont [#1][#1][#2][#3]},
- \v!sans=>{\simplefonts@definetextfont [#1][#1][#2][#3]},
- \v!mono=>{\simplefonts@definetextfont [#1][#1][#2][#3]},
- \v!math=>{\simplefonts@definemathfont [#1][#1][#2][#3]},
- \v!math=>{\simplefonts@definemathfont [#1][#1][#2][#3]},
- \v!handwriting=>{\simplefonts@definescriptfont[#1][#1][#2][#3]},
- \v!calligraphy=>{\simplefonts@definescriptfont[#1][#1][#2][#3]},
- \s!unknown=>{\simplefonts@definetextfont [#1][#1][#2][#3]}]}
-
-%D Default setup
-
-\setupsimplefonts
- [\c!size=\moduleparameter\v!simplefonts\c!size,
- \c!style=\moduleparameter\v!simplefonts\c!style,
- \c!features=\v!default,
- \c!smallcapsfeatures=\v!smallcaps]
-
-%D Default fonts
-
-\setmainfont [Latin Modern Roman]
-\setsansfont [Latin Modern Sans]
-\setmonofont [Latin Modern Mono]
-\setmathfont [Latin Modern Math]
-\sethandwritingfont [Latin Modern Roman] % neither handwritten nor calligraphic are available
-\setcalligraphicfont[Latin Modern Roman] % for Latin Modern but I need a default font for them
-
-\!!donesimplefontstrue
-
-\stopmodule
-
-\protect \endinput
diff --git a/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkiv b/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkiv
deleted file mode 100644
index e2e9a339b6..0000000000
--- a/macros/context/contrib/context-simplefonts/tex/context/third/simplefonts/t-simplefonts.mkiv
+++ /dev/null
@@ -1,812 +0,0 @@
-%D \module
-%D [ file=t-simplefonts,
-%D version=2012.01.09,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Simplefonts,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D email=schuster.wolfgang@googlemail.com,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2010 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C (at your option) any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-\writestatus{loading}{ConTeXt User Module / Simplefonts}
-
-\unprotect
-
-\startmodule[simplefonts]
-
-%D Constants and variables
-
-\startinterface all
- \setinterfaceconstant {regular} {regular}
- \setinterfaceconstant {italic} {italic}
- \setinterfaceconstant {slanted} {slanted}
- \setinterfaceconstant {bold} {bold}
- \setinterfaceconstant {bolditalic} {bolditalic}
- \setinterfaceconstant {boldslanted} {boldslanted}
- \setinterfaceconstant {caps} {caps}
- \setinterfaceconstant {italiccaps} {italiccaps}
- \setinterfaceconstant {slantedcaps} {slantedcaps}
- \setinterfaceconstant {boldcaps} {boldcaps}
- \setinterfaceconstant {bolditaliccaps} {bolditaliccaps}
- \setinterfaceconstant {boldslantedcaps} {boldslantedcaps}
- \setinterfaceconstant {scale} {scale}
- \setinterfaceconstant {range} {range}
- \setinterfaceconstant {weight} {weight}
- \setinterfaceconstant {features} {features}
- \setinterfaceconstant {regularfont} {regularfont}
- \setinterfaceconstant {italicfont} {italicfont}
- \setinterfaceconstant {slantedfont} {slantedfont}
- \setinterfaceconstant {boldfont} {boldfont}
- \setinterfaceconstant {bolditalicfont} {bolditalicfont}
- \setinterfaceconstant {boldslantedfont} {boldslantedfont}
- \setinterfaceconstant {capsfont} {capsfont}
- \setinterfaceconstant {italiccapsfont} {italiccapsfont}
- \setinterfaceconstant {slantedcapsfont} {slantedcapsfont}
- \setinterfaceconstant {boldcapsfont} {boldcapsfont}
- \setinterfaceconstant {bolditaliccapsfont} {bolditaliccapsfont}
- \setinterfaceconstant {boldslantedcapsfont} {boldslantedcapsfont}
- \setinterfaceconstant {regularfeatures} {regularfeatures}
- \setinterfaceconstant {italicfeatures} {italicfeatures}
- \setinterfaceconstant {slantedfeatures} {slantedfeatures}
- \setinterfaceconstant {boldfeatures} {boldfeatures}
- \setinterfaceconstant {bolditalicfeatures} {bolditalicfeatures}
- \setinterfaceconstant {boldslantedfeatures} {boldslantedfeatures}
- \setinterfaceconstant {smallcapsfeatures} {smallcapsfeatures}
- \setinterfaceconstant {capsfeatures} {capsfeatures}
- \setinterfaceconstant {italiccapsfeatures} {italiccapsfeatures}
- \setinterfaceconstant {slantedcapsfeatures} {slantedcapsfeatures}
- \setinterfaceconstant {boldcapsfeatures} {boldcapsfeatures}
- \setinterfaceconstant {bolditaliccapsfeatures} {bolditaliccapsfeatures}
- \setinterfaceconstant {boldslantedcapsfeatures} {boldslantedcapsfeatures}
- \setinterfaceconstant {typeface} {typeface}
- \setinterfaceconstant {protrusion} {protrusion}
- \setinterfaceconstant {contextversion} {contextversion}
- \setinterfaceconstant {sf} {sf}
- \setinterfaceconstant {bc} {bc}
- \setinterfaceconstant {mode} {mode}
- \setinterfaceconstant {check} {check}
-\stopinterface
-
-\startinterface all
- \setinterfacevariable {simplefonts} {simplefonts}
- \setinterfacevariable {simplefont} {simplefont}
- \setinterfacevariable {style} {style}
- \setinterfacevariable {suffix} {suffix}
- \setinterfacevariable {serif} {serif}
- \setinterfacevariable {sans} {sans}
- \setinterfacevariable {mono} {mono}
- \setinterfacevariable {math} {math}
- \setinterfacevariable {mainfont} {mainfont}
- \setinterfacevariable {sansfont} {sansfont}
- \setinterfacevariable {monofont} {monofont}
- \setinterfacevariable {mathfont} {mathfont}
- \setinterfacevariable {handwritingfont} {handwritingfont}
- \setinterfacevariable {calligraphicfont} {calligraphicfont}
- \setinterfacevariable {cjk} {cjk}
- \setinterfacevariable {fallback} {fallback}
- \setinterfacevariable {condensed} {condensed}
- \setinterfacevariable {light} {light}
- \setinterfacevariable {heavy} {heavy}
- \setinterfacevariable {feature} {feature}
- \setinterfacevariable {handwriting} {handwriting}
- \setinterfacevariable {calligraphy} {calligraphy}
- \setinterfacevariable {fontfamily} {fontfamily}
- \setinterfacevariable {node} {node}
-\stopinterface
-
-\startinterface all
- \setinterfaceelement {set} {set}
-\stopinterface
-
-%D System constants
-
-\definesystemconstant {Handwriting}
-\definesystemconstant {Calligraphy}
-\definesystemconstant {Simplefont}
-
-%D Messages
-
-\definemessageconstant {simplefonts}
-
-\startinterface all
- \setinterfacemessage{simplefonts}{title}{simplefonts}
- \setinterfacemessage{simplefonts}{1} {font '--' not found}
- \setinterfacemessage{simplefonts}{2} {feature '--' is not defined}
- \setinterfacemessage{simplefonts}{3} {your context is too old, you need at last version '--'}
- \setinterfacemessage{simplefonts}{4} {script '--' is not defined}
- \setinterfacemessage{simplefonts}{5} {language '--' is not defined}
-\stopinterface
-
-%D Module setup
-
-\setupmodule
- [ \c!size=12pt,
- \c!style=rm]
-
-%D Lua code
-
-\ctxloadluafile{t-simplefonts}{}
-
-%D Namespace
-
-\def\????sf{@@@@sf}
-
-%D Counter
-
-\newcounter\simplefonts!typeface
-\newcounter\simplefonts!fontfamily
-
-\newcounter\simplefonts!mainfont
-\newcounter\simplefonts!sansfont
-\newcounter\simplefonts!monofont
-\newcounter\simplefonts!handwritingfont
-\newcounter\simplefonts!calligraphicfont
-
-%D Boolean
-
-\newif\if!!donesimplefonts
-
-%D Tracing
-
-\let\enablesimplefonts \!!donesimplefontstrue
-\let\disablesimplefonts\!!donesimplefontsfalse
-
-%D Comma value lists
-
-\letempty\simplefont!features
-\letempty\simplefont!localfeatures
-\letempty\simplefont!globalfeatures
-
-\def\simplefonts!commands
- {\v!mainfont,\v!sansfont,\v!monofont,\v!mathfont,\v!handwritingfont,\v!calligraphicfont}
-
-\def\simplefonts!weight
- {\v!condensed,\v!light,\v!normal,\v!medium,\v!heavy}
-
-\def\simplefonts!alternative
- {\c!regular,\c!italic,\c!slanted,\c!bold,\c!bolditalic,\c!boldslanted,\c!caps,
- \c!italiccaps,\c!slantedcaps,\c!boldcaps,\c!bolditaliccaps,\c!boldslantedcaps}
-
-%D Simplefont style
-
-\definefontstyle [\c!sf,\v!simplefont] [\c!sf]
-
-\starttypescript [simplefont] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [sf] [default]
-\stoptypescript
-
-\definebodyfont [default] [sf]
- [tf=Simplefont sa 1,
- bf=SimplefontBold sa 1,
- it=SimplefontItalic sa 1,
- sl=SimplefontSlanted sa 1,
- bi=SimplefontBoldItalic sa 1,
- bs=SimplefontBoldSlanted sa 1,
- sc=SimplefontCaps sa 1]
-
-%D \macros
-%D {simplefontparameter,namedsimplefontparameter,
-%D setupsimplefonts,presetsimplefonts}
-%D
-%D Internal helper macros
-
-\def\simplefontparameter #1{\csname\????sf\currentsimplefont#1\endcsname}
-\def\namedsimplefontparameter#1#2{\csname\????sf #1#2\endcsname}
-
-\def\setupsimplefonts
- {\dosingleempty\dosetupsimplefonts}
-
-\def\dosetupsimplefonts[#1]% first argument is optional
- {\iffirstargument
- \getparameters[\????sf][#1]%
- \simplefonts@features{#1}\v!global
- \fi
- \if!!donesimplefonts\simplefonts@bodyfont\fi}
-
-\def\presetsimplefonts[#1]%
- {\getparameters
- [#1]
- [\c!regularfont=,
- \c!italicfont=,
- \c!slantedfont=,
- \c!boldfont=,
- \c!bolditalicfont=,
- \c!boldslantedfont=,
- \c!capsfont=,
- \c!italiccapsfont=,
- \c!slantedcapsfont=,
- \c!boldcapsfont=,
- \c!bolditaliccapsfont=,
- \c!boldslantedcapsfont=,
- \c!features=\@@@@sffeatures,
- \c!regularfeatures=\simplefontparameter\c!features,
- \c!italicfeatures=\simplefontparameter\c!features,
- \c!slantedfeatures=\simplefontparameter\c!features,
- \c!boldfeatures=\simplefontparameter\c!features,
- \c!bolditalicfeatures=\simplefontparameter\c!features,
- \c!boldslantedfeatures=\simplefontparameter\c!features,
- \c!smallcapsfeatures=\@@@@sfsmallcapsfeatures,
- \c!capsfeatures=\simplefontparameter\c!smallcapsfeatures,
- \c!italiccapsfeatures=\simplefontparameter\c!smallcapsfeatures,
- \c!slantedcapsfeatures=\simplefontparameter\c!smallcapsfeatures,
- \c!boldcapsfeatures=\simplefontparameter\c!smallcapsfeatures,
- \c!bolditaliccapsfeatures=\simplefontparameter\c!smallcapsfeatures,
- \c!boldslantedcapsfeatures=\simplefontparameter\c!smallcapsfeatures,
- \c!weight=\v!normal,
- \c!mode=, % the three keys mode, expansion and protrusion
- \c!expansion=, % are reset for font command when you select
- \c!protrusion=, % a new font to avoid conflicts or unwanted effects
- \c!scale=1.0]}
-
-\setvalue{\????sf:\v!style :\v!serif }{rm}
-\setvalue{\????sf:\v!style :\v!sans }{ss}
-\setvalue{\????sf:\v!style :\v!mono }{tt}
-\setvalue{\????sf:\v!style :\v!math }{mm}
-\setvalue{\????sf:\v!style :\v!handwriting}{hw}
-\setvalue{\????sf:\v!style :\v!calligraphy}{cg}
-\setvalue{\????sf:\v!style :\v!simplefont }{sf}
-
-\letvalue{\????sf:\v!suffix:\v!serif }\s!Serif
-\letvalue{\????sf:\v!suffix:\v!sans }\s!Sans
-\letvalue{\????sf:\v!suffix:\v!mono }\s!Mono
-\letvalue{\????sf:\v!suffix:\v!handwriting}\s!Handwriting
-\letvalue{\????sf:\v!suffix:\v!calligraphy}\s!Calligraphy
-\letvalue{\????sf:\v!suffix:\v!simplefont }\s!Simplefont
-
-\definetypescriptsynonym[latinmodernmath][latin-modern]
-\definetypescriptsynonym[asanamath] [asana]
-
-\def\sf@style #1{\csname\????sf:\v!style :#1\endcsname}
-\def\sf@suffix#1{\csname\????sf:\v!suffix:#1\endcsname}
-
-\starttexdefinition simplefonts@typeface #1#2#3
-
- \definetypeface
- [#1]
- [\sf@style{\namedsimplefontparameter{#3}\c!style}]
- [\namedsimplefontparameter{#3}\c!style]
- [#2]
- [\s!default]
- [rscale=\namedsimplefontparameter{#3}\c!scale]
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@family #1
-
- \simplefonts@typeface{#1}{\v!mainfont :\simplefonts!mainfont }{\v!mainfont }
- \simplefonts@typeface{#1}{\v!sansfont :\simplefonts!sansfont }{\v!sansfont }
- \simplefonts@typeface{#1}{\v!monofont :\simplefonts!monofont }{\v!monofont }
- \simplefonts@typeface{#1}{\namedsimplefontparameter\v!mathfont\c!typeface }{\v!mathfont }
- \simplefonts@typeface{#1}{\v!handwritingfont :\simplefonts!handwritingfont }{\v!handwritingfont }
- \simplefonts@typeface{#1}{\v!calligraphicfont :\simplefonts!calligraphicfont}{\v!calligraphicfont}
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@typescript #1#2
-
- \startexpanded
-
- \@NX\starttypescript[#1][#2]
-
- \simplefonts@fontsynonym{\sf@suffix{#1}\empty }{\c!regular }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Italic }{\c!italic }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Slanted }{\c!slanted }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Bold }{\c!bold }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!BoldItalic }{\c!bolditalic }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!BoldSlanted }{\c!boldslanted }
-
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Caps }{\c!caps }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Italic\s!Caps }{\c!italiccaps }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Slanted\s!Caps }{\c!slantedcaps }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!Bold\s!Caps }{\c!boldcaps }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!BoldItalic\s!Caps }{\c!bolditaliccaps }
- \simplefonts@fontsynonym{\sf@suffix{#1}\s!BoldSlanted\s!Caps}{\c!boldslantedcaps}
-
- \@NX\stoptypescript
-
- \stopexpanded
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@scripttypescript #1#2
-
- \startexpanded
-
- \@NX\starttypescript[#1][#2]
-
- \simplefonts@fontsynonym{\sf@suffix{#1}}{\c!regular}
-
- \@NX\stoptypescript
-
- \stopexpanded
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@fontsynonym #1#2
-
- \@NX\definefontsynonym
- [#1]
- [\simplefontparameter{#2}]
- [\s!fallbacks=\currentsimplefont#2\s!fallbacks,
- \s!features=\currentsimplefont#2\s!features ]
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@fontfallback #1#2#3
-
- \definefontfallback
- [#1#3\s!fallbacks]
- [\namedsimplefontparameter{#2}{#3}*#2#3\s!features]
- [\namedsimplefontparameter{#2}\c!range]
- [\s!rscale=\namedsimplefontparameter{#2}\c!scale,
- \c!force=\namedsimplefontparameter{#2}\c!force,
- \c!check=\namedsimplefontparameter{#2}\c!check]
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@bodyfont
-
- \doglobal\increment\simplefonts!typeface
-
- \simplefonts@family{\v!simplefonts:\simplefonts!typeface}
-
- \edef\@@@@sfstyle{\@@@@sfstyle}
- \edef\@@@@sfsize {\@@@@sfsize }
-
- \setupbodyfont
- [\v!simplefonts:\simplefonts!typeface
- \ifx\@@@@sfstyle\empty\else,\@@@@sfstyle\fi
- \ifx\@@@@sfsize \empty\else,\@@@@sfsize \fi]
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@fontfeature #1#2
-
- \letempty\simplefont!features
-
- % expansion and protrusion could bet se either global for all styles or local for only one style
-
- \doifvaluesomething{\????sf\c!mode }{\appendtocommalist{\c!mode =\csname\????sf\c!mode \endcsname }\simplefont!features}
- \doifvaluesomething{\????sf\c!expansion }{\appendtocommalist{\c!expansion =\csname\????sf\c!expansion \endcsname }\simplefont!features}
- \doifvaluesomething{\????sf\c!protrusion }{\appendtocommalist{\c!protrusion=\csname\????sf\c!protrusion\endcsname }\simplefont!features}
-
- \doifvaluesomething{\????sf#1\c!mode }{\appendtocommalist{\c!mode =\csname\????sf#1\c!mode \endcsname }\simplefont!features}
- \doifvaluesomething{\????sf#1\c!expansion }{\appendtocommalist{\c!expansion =\csname\????sf#1\c!expansion \endcsname }\simplefont!features}
- \doifvaluesomething{\????sf#1\c!protrusion}{\appendtocommalist{\c!protrusion=\csname\????sf#1\c!protrusion\endcsname }\simplefont!features}
-
- \appendtocommalist\simplefont!globalfeatures\simplefont!features
- \appendtocommalist\simplefont!localfeatures \simplefont!features
-
- \normalexpanded{\@NX\definefontfeature[#1#2\s!features][\namedsimplefontparameter{#1}{#2\s!features}][\simplefont!features]}
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@features #1#2
-
- \letvalueempty{simplefont!#2features}
-
- \startprocessassignmentcommand[#1]
-
- \ctxlua{thirddata.simplefonts.parameter("##1","##2","simplefont!#2features")}
-
- \stopprocessassignmentcommand
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@definetextfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currenttypeface{#2}
-
- \presetsimplefonts[\????sf\currentsimplefont]
-
- \getparameters[\????sf\currentsimplefont][#4]
-
- \simplefonts@features{#4}\v!local % parse assignment list for font features
-
- \startprocesscommacommand[\simplefonts!alternative]
-
- \simplefonts@fontfeature{#1}{##1}
-
- \ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontparameter{##1\s!font}","##1","\simplefontparameter\c!weight")}
-
- \stopprocesscommacommand
-
- \ifx\currenttypeface\v!simplefonts
-
- \ifx\currentsimplefont\v!mainfont
- \doglobal\increment\simplefonts!mainfont
- \simplefonts@typescript{\simplefontparameter\c!style}{\v!mainfont:\simplefonts!mainfont}
- \else\ifx\currentsimplefont\v!sansfont
- \doglobal\increment\simplefonts!sansfont
- \simplefonts@typescript{\simplefontparameter\c!style}{\v!sansfont:\simplefonts!sansfont}
- \else\ifx\currentsimplefont\v!monofont
- \doglobal\increment\simplefonts!monofont
- \simplefonts@typescript{\simplefontparameter\c!style}{\v!monofont :\simplefonts!monofont}
- \fi\fi\fi
-
- % don't create a typeface and set bodyfont when the module is loaded
-
- \if!!donesimplefonts\simplefonts@bodyfont\fi
-
- \else
-
- \simplefonts@typescript{\simplefontparameter\c!style}{#1}
-
- \simplefonts@typeface{#2}{#1}{#1}
-
- \fi
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@definescriptfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currenttypeface{#2}
-
- \presetsimplefonts[\????sf\currentsimplefont]
-
- \getparameters[\????sf\currentsimplefont][#4]
-
- \simplefonts@features{#4}\v!local % parse assignment list for font features
-
- \startprocesscommacommand[\c!regular]
-
- \simplefonts@fontfeature{#1}{##1}
-
- \ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontparameter{##1\s!font}","##1","\simplefontparameter\c!weight")}
-
- \stopprocesscommacommand
-
- \ifx\currenttypeface\v!simplefonts
-
- \ifx\currentsimplefont\v!handwritingfont
- \doglobal\increment\simplefonts!handwritingfont
- \simplefonts@scripttypescript{\simplefontparameter\c!style}{\v!handwritingfont :\simplefonts!handwritingfont}
- \else\ifx\currentsimplefont\v!calligraphicfont
- \doglobal\increment\simplefonts!calligraphicfont
- \simplefonts@scripttypescript{\simplefontparameter\c!style}{\v!calligraphicfont:\simplefonts!calligraphicfont}
- \fi\fi
-
- % don't create a typeface and set bodyfont when the module is loaded
-
- \if!!donesimplefonts\simplefonts@bodyfont\fi
-
- \else
-
- \simplefonts@scripttypescript{\simplefontparameter\c!style}{#1}
-
- \simplefonts@typeface{#2}{#1}{#1}
-
- \fi
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@definemathfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currenttypeface{#2}
-
- \presetsimplefonts[\????sf\currentsimplefont]
-
- \getparameters[\????sf\currentsimplefont][#4]
-
- % no fonts are searched for the math fonts, all what happens is to normalize
- % the given name and save it in a macro is is later used to load a predefined
- % typescript
-
- \setvalue{\????sf\currentsimplefont\c!typeface}{\ctxlua{thirddata.simplefonts.normalizefontname("#3")}}
-
- \ifx\currenttypeface\v!simplefonts
-
- % don't create a typeface and set bodyfont when the module is loaded
-
- \if!!donesimplefonts\simplefonts@bodyfont\fi
-
- \else
-
- \simplefonts@typeface{#2}{\namedsimplefontparameter\currentsimplefont\c!typeface}{#1}
-
- \fi
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@setfallbackfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currentmainfont{#2}
-
- \presetsimplefonts[\????sf\currentsimplefont]
-
- \getparameters[\????sf\currentsimplefont][#4]
-
- \simplefonts@features{#4}\v!local % parse assignment list for font features
-
- \startprocesscommacommand[\simplefonts!alternative]
-
- \simplefonts@fontfeature{#1}{##1}
-
- \ctxlua{thirddata.simplefonts.selectfont("#1","#3","\simplefontparameter{##1\s!font}","##1","\simplefontparameter\c!weight")}
-
- \simplefonts@fontfallback{#2}{#1}{##1}
-
- \stopprocesscommacommand
-
-\stoptexdefinition
-
-\starttexdefinition simplefonts@definefallbackfont [#1][#2][#3][#4]
-
- \edef\currentsimplefont{#1}\edef\currentmainfont{#2}
-
- % to allow more than one fallback font I save the settings
- % in a token register and set then all fallbacks in one turn
-
- % i should wrap this in a macro which checks if a register
- % is already defined, append the setting and flush all
-
- \unless\ifcsname\currentmainfont\s!fallbacks\endcsname\@EA\newtoks\csname\currentmainfont\s!fallbacks\endcsname\fi
-
- \csname\currentmainfont\s!fallbacks\endcsname\@EA{\the\@EA\csname\currentmainfont\s!fallbacks\endcsname\simplefonts@setfallbackfont[#1][#2][#3][#4]}
-
- \the\@EA\csname\currentmainfont\s!fallbacks\endcsname
-
- % the only way to make fallback fonts working with the module
- % is to create a new typeface and enable it as bodyfont
-
- % don't create a typeface or set the bodyfont when the module code is loaded
-
- \if!!donesimplefonts
-
- \startprocesscommacommand[\simplefonts!commands] % why not \doifinset?
-
- \ifx\currentcommalistitem\currentmainfont\simplefonts@bodyfont\quitcommalist\fi
-
- \stopprocesscommacommand
-
- \fi
-
-\stoptexdefinition
-
-%D \macros
-%D {definefontcommand,definesubfontcommand}
-
-\def\definefontcommand
- {\dotripleempty\dodefinefontcommand}
-
-\def\dodefinefontcommand[#1][#2][#3]%
- {\getparameters[\????sf#1][\c!style=\v!serif,#3]%
- \processaction
- [\namedsimplefontparameter{#1}\c!style]
- [ \v!serif=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]},
- \v!sans=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]},
- \v!mono=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]},
- \v!math=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definemathfont [#1][#2]},
- \v!handwriting=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definescriptfont[#1][#2]},
- \v!calligraphy=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definescriptfont[#1][#2]},
- \s!unknown=>\setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definetextfont [#1][#2]}]}
-
-\definefontcommand[\v!mainfont ][\v!simplefonts][\c!style=\v!serif ]
-\definefontcommand[\v!sansfont ][\v!simplefonts][\c!style=\v!sans ]
-\definefontcommand[\v!monofont ][\v!simplefonts][\c!style=\v!mono ]
-\definefontcommand[\v!mathfont ][\v!simplefonts][\c!style=\v!math ]
-\definefontcommand[\v!handwritingfont ][\v!simplefonts][\c!style=\v!handwriting]
-\definefontcommand[\v!calligraphicfont][\v!simplefonts][\c!style=\v!calligraphy]
-
-\def\definesubfontcommand
- {\dotripleempty\dodefinesubfontcommand}
-
-\def\dodefinesubfontcommand[#1][#2][#3]%
- {\getparameters[\????sf#1][\c!range=,#3]%
- \setvalue{\e!set#1}{\doquadrupleempty\simplefonts@definefallbackfont[#1][#2]}}
-
-\definesubfontcommand[\v!cjk\v!mainfont][\v!mainfont][\c!range={0x00400-0x2FA1F}]
-\definesubfontcommand[\v!cjk\v!sansfont][\v!sansfont][\c!range={0x00400-0x2FA1F}]
-\definesubfontcommand[\v!cjk\v!monofont][\v!monofont][\c!range={0x00400-0x2FA1F}]
-
-\definesubfontcommand[\v!mainfont\v!fallback][\v!mainfont][\c!range=]
-\definesubfontcommand[\v!sansfont\v!fallback][\v!sansfont][\c!range=]
-\definesubfontcommand[\v!monofont\v!fallback][\v!monofont][\c!range=]
-
-%D \macros
-%D {simplefont,definesimplefont}
-
-\def\simplefont
- {\dodoubleempty\dosimplefont}
-
-\def\dosimplefont[#1][#2]%
- {\getparameters[\????sf\v!default][\c!features=\v!default,\c!alternative=\v!regular,\c!weight=\v!normal,\c!size=,#2]%
- \edef\simplefontsize{\namedsimplefontparameter\v!default\c!size}%
- \ifx\simplefontsize\empty\else
- \doifdimenstringelse\simplefontsize
- {\edef\simplefontsize{ at \simplefontsize}}
- {\edef\simplefontsize{ \simplefontsize}}%
- \fi
- \ctxlua{thirddata.simplefonts.selectfont("\v!default","#1","","\@@@@sfdefaultalternative","\@@@@sfdefaultweight")}%
- \expanded{\definedfont[\csname\????sf\v!default\@@@@sfdefaultalternative\endcsname*\@@@@sfdefaultfeatures\simplefontsize]}}
-
-\def\definesimplefont
- {\dotripleempty\dodefinesimplefont}
-
-\def\dodefinesimplefont[#1][#2][#3]%
- {\getparameters[\????sf\v!default][\c!features=\v!default,\c!alternative=\v!regular,\c!weight=\v!normal,\c!size=,#3]%
- \edef\simplefontsize{\namedsimplefontparameter\v!default\c!size}%
- \ifx\simplefontsize\empty\else
- \doifdimenstringelse\simplefontsize
- {\edef\simplefontsize{ at \simplefontsize}}
- {\edef\simplefontsize{ \simplefontsize}}%
- \fi
- \ctxlua{thirddata.simplefonts.selectfont("\v!default","#2","","\@@@@sfdefaultalternative","\@@@@sfdefaultweight")}%
- \expanded{\definefont[#1][\csname\????sf\v!default\@@@@sfdefaultalternative\endcsname*\@@@@sfdefaultfeatures\simplefontsize][#3]}}
-
-%D \macros
-%D {simplefonttypeface,definesimplefonttypeface}
-
-\def\simplefonttypeface
- {\dodoubleempty\dosimplefonttypeface}
-
-\def\dosimplefonttypeface[#1][#2]%
- {\doglobal\increment\simplefonts!fontfamily
- \simplefonts@definetextfont[\v!fontfamily][\v!fontfamily:\simplefonts!fontfamily][#1][\c!style=\v!simplefont,#2]%
- \switchtobodyfont[\v!fontfamily:\simplefonts!fontfamily]}
-
-\def\definesimplefonttypeface
- {\dotripleempty\dodefinesimplefonttypeface}
-
-\def\dodefinesimplefonttypeface[#1][#2][#3]%
- {\getparameters[\????sf#1][\c!style=\v!serif,#3]%
- \processaction
- [\namedsimplefontparameter{#1}\c!style]
- [ \v!serif=>{\simplefonts@definetextfont [#1][#1][#2][#3]},
- \v!sans=>{\simplefonts@definetextfont [#1][#1][#2][#3]},
- \v!mono=>{\simplefonts@definetextfont [#1][#1][#2][#3]},
- \v!math=>{\simplefonts@definemathfont [#1][#1][#2][#3]},
- \v!handwriting=>{\simplefonts@definescriptfont[#1][#1][#2][#3]},
- \v!calligraphy=>{\simplefonts@definescriptfont[#1][#1][#2][#3]},
- \s!unknown=>{\simplefonts@definetextfont [#1][#1][#2][#3]}]}
-
-%D Font extensions
-
-\getparameters
- [\????sf\v!condensed]
- [ \c!regular={condensedregular,condregular,condensed},
- \c!italic={condenseditalic,condensedoblique,conditalic,\namedsimplefontparameter\v!condensed\c!regular},
- \c!slanted={\namedsimplefontparameter\v!condensed\c!italic},
- \c!bold={condensedbold,condbold,\namedsimplefontparameter\v!condensed\c!regular},
- \c!bolditalic={condensedbolditalic,condensedboldoblique,condbolditalic,\namedsimplefontparameter\v!condensed\c!bold},
- \c!boldslanted={\namedsimplefontparameter\v!condensed\c!bolditalic},
- \c!caps={\namedsimplefontparameter\v!condensed\c!regular},
- \c!italiccaps={\namedsimplefontparameter\v!condensed\c!caps},
- \c!slantedcaps={\namedsimplefontparameter\v!condensed\c!italiccaps},
- \c!boldcaps={\namedsimplefontparameter\v!condensed\c!caps},
- \c!bolditaliccaps={\namedsimplefontparameter\v!condensed\c!boldcaps},
- \c!boldslantedcaps={\namedsimplefontparameter\v!condensed\c!bolditaliccaps}]
-
-\getparameters
- [\????sf\v!light]
- [ \c!regular={lightregular,light},
- \c!italic={lightitalic,lightit,lightoblique,\namedsimplefontparameter\v!light\c!regular},
- \c!slanted={\namedsimplefontparameter\v!light\c!italic},
- \c!bold={bookregular,regular,book,\namedsimplefontparameter\v!light\c!regular},
- \c!bolditalic={bookitalic,bookit,italic,oblique,\namedsimplefontparameter\v!light\c!bold},
- \c!boldslanted={\namedsimplefontparameter\v!light\c!bolditalic},
- \c!caps={smallcapslight,\namedsimplefontparameter\v!light\c!regular},
- \c!italiccaps={\namedsimplefontparameter\v!light\c!caps},
- \c!slantedcaps={\namedsimplefontparameter\v!light\c!italiccaps},
- \c!boldcaps={\namedsimplefontparameter\v!light\c!caps},
- \c!bolditaliccaps={\namedsimplefontparameter\v!light\c!boldcaps},
- \c!boldslantedcaps={\namedsimplefontparameter\v!light\c!bolditaliccaps}]
-
-\getparameters
- [\????sf\v!normal]
- [ \c!regular={roman,regular,book,\empty},
- \c!italic={italic,it,oblique,kursiv,bookitalic,bookit,\namedsimplefontparameter\v!normal\c!regular},
- \c!slanted={\namedsimplefontparameter\v!normal\c!italic},
- \c!bold={bold,bd,kraeftig,mediumregular,semibold,demi,\namedsimplefontparameter\v!normal\c!regular},
- \c!bolditalic={bolditalic,boldit,bdit,boldoblique,mediumitalic,semibolditalic,demiitalic,\namedsimplefontparameter\v!normal\c!bold},
- \c!boldslanted={\namedsimplefontparameter\v!normal\c!bolditalic},
- \c!caps={smallcaps,capitals,sc,\namedsimplefontparameter\v!normal\c!regular},
- \c!italiccaps={\namedsimplefontparameter\v!normal\c!caps},
- \c!slantedcaps={\namedsimplefontparameter\v!normal\c!italiccaps},
- \c!boldcaps={scbold,\namedsimplefontparameter\v!normal\c!caps},
- \c!bolditaliccaps={\namedsimplefontparameter\v!normal\c!boldcaps},
- \c!boldslantedcaps={\namedsimplefontparameter\v!normal\c!bolditaliccaps}]
-
-\getparameters
- [\????sf\v!medium]
- [ \c!regular={mediumregular,medregular,medium},
- \c!italic={mediumitalic,meditalic,\namedsimplefontparameter\v!medium\c!regular},
- \c!slanted={\namedsimplefontparameter\v!medium\c!italic},
- \c!bold={heavyregular,heavy,\namedsimplefontparameter\v!medium\c!regular},
- \c!bolditalic={heavyitalic,\namedsimplefontparameter\v!medium\c!bold},
- \c!boldslanted={\namedsimplefontparameter\v!medium\c!bolditalic},
- \c!caps={mediumcaps,\namedsimplefontparameter\v!medium\c!regular},
- \c!italiccaps={\namedsimplefontparameter\v!medium\c!caps},
- \c!slantedcaps={\namedsimplefontparameter\v!medium\c!italiccaps},
- \c!boldcaps={\namedsimplefontparameter\v!medium\c!caps},
- \c!bolditaliccaps={\namedsimplefontparameter\v!medium\c!boldcaps},
- \c!boldslantedcaps={\namedsimplefontparameter\v!medium\c!bolditaliccaps}]
-
-\getparameters
- [\????sf\v!heavy]
- [ \c!regular={heavyregular,heavy},
- \c!italic={heavyitalic,\namedsimplefontparameter\v!heavy\c!regular},
- \c!slanted={\namedsimplefontparameter\v!heavy\c!italic},
- \c!bold={\namedsimplefontparameter\v!heavy\c!regular},
- \c!bolditalic={\namedsimplefontparameter\v!heavy\c!bold},
- \c!boldslanted={\namedsimplefontparameter\v!heavy\c!bolditalic},
- \c!caps={\namedsimplefontparameter\v!heavy\c!regular},
- \c!italiccaps={\namedsimplefontparameter\v!heavy\c!caps},
- \c!slantedcaps={\namedsimplefontparameter\v!heavy\c!italiccaps},
- \c!boldcaps={\namedsimplefontparameter\v!heavy\c!caps},
- \c!bolditaliccaps={\namedsimplefontparameter\v!heavy\c!boldcaps},
- \c!boldslantedcaps={\namedsimplefontparameter\v!heavy\c!bolditaliccaps}]
-
-\startprocesscommacommand[\simplefonts!weight]
-
- \ctxlua{thirddata.simplefonts.extlist["#1"] = { }}
-
- {
-
- \startprocesscommacommand[\simplefonts!alternative]
-
- \ctxlua{thirddata.simplefonts.extlist["#1"]["##1"] = { }}
-
- {
-
- \startprocesscommacommand[\namedsimplefontparameter{#1}{##1}]
-
- \ctxlua{table.insert(thirddata.simplefonts.extlist["#1"]["##1"],"####1")}
-
- \stopprocesscommacommand
-
- }
-
- \stopprocesscommacommand
-
- }
-
-\stopprocesscommacommand
-
-%D Default setup
-
-\enabledirectives[fonts.autoreload]
-
-\setupsimplefonts
- [\c!size=\moduleparameter\v!simplefonts\c!size,
- \c!style=\moduleparameter\v!simplefonts\c!style,
- \c!features=\v!default,
- \c!smallcapsfeatures=\v!smallcaps,
- \c!mode=\v!node,
- \c!force=\v!yes,
- \c!check=\v!no,
- \c!expansion=\v!no,
- \c!protrusion=\v!no]
-
-%D Default fonts
-
-\setmainfont [Latin Modern Roman]
-\setsansfont [Latin Modern Sans]
-\setmonofont [Latin Modern Mono][\s!features=\s!none]
-\setmathfont [Latin Modern Math]
-\sethandwritingfont [Latin Modern Roman] % neither handwritten nor calligraphic are available
-\setcalligraphicfont[Latin Modern Roman] % for Latin Modern but I need a default font for them
-
-\!!donesimplefontstrue
-
-\stopmodule
-
-\protect \endinput
diff --git a/macros/context/contrib/context-squares/LICENSE b/macros/context/contrib/context-squares/LICENSE
new file mode 100644
index 0000000000..abb812c016
--- /dev/null
+++ b/macros/context/contrib/context-squares/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Jairo A. del Rio
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/macros/context/contrib/context-squares/README.md b/macros/context/contrib/context-squares/README.md
new file mode 100644
index 0000000000..9fd88f81d6
--- /dev/null
+++ b/macros/context/contrib/context-squares/README.md
@@ -0,0 +1,43 @@
+# squares
+
+This module only provides two commands:
+
+1. `\magicsquare` typesets a magic square.
+2. `\latinsquare` typesets a Latin square.
+
+Both `\magicsquare` and `\latinsquare` understand the same set of
+parameters:
+
+```tex
+\setupmagicsquare
+ [size=2em,
+ align={middle,lohi},
+ renderingsetup=none,
+ n=5] % and \setupTABLE parameters...
+```
+
+Magic and Latin squares are typesets via natural tables, i.e., by using a
+`\bTABLE` ... `\eTABLE` environment. I'd rather use `setups`, but it'd
+clash with another key already taken by `\setupTABLE`.
+
+Currently only two rendering setups are available: `none` (it does
+nothing), and `color` (cells colorfully painted across the HSV hue range).
+I promise more setups will be available soon, though.
+
+You might be more impatient and want to define your own. So, this is how:
+
+```tex
+\unprotect
+\startsetups[\????magicsquare:\c!renderingsetup:mysetup]
+% Idk, something like this?
+% \setupTABLE[r][odd][background=color,backgroundcolor=red]
+% For natural table tuning, see https://wiki.contextgarden.net/TABLE
+% etc.
+\stopsetups
+\protect
+
+\magicsquare[n=7,renderingsetup=mysetup]
+```
+
+_Caveat emptor_: this module is only for ConTeXt LMTX. I no longer use
+ConTeXt MKIV, so no support is provided, sorry.
diff --git a/macros/context/contrib/context-squares/VERSION b/macros/context/contrib/context-squares/VERSION
new file mode 100644
index 0000000000..5425d1161a
--- /dev/null
+++ b/macros/context/contrib/context-squares/VERSION
@@ -0,0 +1 @@
+2023-08-01
diff --git a/macros/context/contrib/context-squares/tex/context/third/squares/t-squares.lua b/macros/context/contrib/context-squares/tex/context/third/squares/t-squares.lua
new file mode 100644
index 0000000000..c0e613a3e0
--- /dev/null
+++ b/macros/context/contrib/context-squares/tex/context/third/squares/t-squares.lua
@@ -0,0 +1,306 @@
+if not modules then modules = {} end modules["t-squares"] = {
+ version = "2023-08-01",
+ comment = "Magic and Latin squares",
+ author = "Jairo A. del Rio",
+ copyright = "Jairo A. del Rio",
+ license = "MIT License",
+}
+
+local interfaces = interfaces
+local implement = interfaces.implement
+local magic_reporter = logs.reporter("squares", "magic")
+local latin_reporter = logs.reporter("squares", "latin")
+local random = math.random
+
+-- https://www.iupindia.in/910/IJCM_Magic_Square_Construction_Algorithms34.pdf
+-- https://arxiv.org/pdf/1402.3273.pdf
+-- https://en.wikipedia.org/wiki/Conway%27s_LUX_method_for_magic_squares
+
+-- Helpers
+local function init(s)
+ local q = {}
+ for j = 1, s do
+ q[j] = {}
+ local c = q[j]
+ for i = 1, s do
+ c[i] = 0
+ end
+ end
+ return q
+end
+
+-- Odd numbers
+
+local function magic_01(n)
+ local res = init(n)
+ local i, j = 1 + (n >> 1), 1
+ local k, l
+ res[i][j] = 1
+ for key = 2, n * n do
+ k = 2 <= i and i - 1 or n
+ l = 2 <= j and j - 1 or n
+ if res[k][l] > 0 then
+ i = i % n + 1
+ else
+ i, j = k, l
+ end
+ res[i][j] = key
+ end
+ return res
+end
+
+local function magic_02(N)
+ local res = init(N)
+ local n = N // 2
+ local lux = init(n)
+ local L, U, X = 1, 2, 4
+ local x1, x2, x3, x4 = -1, 0, -1, 0
+ for i = 1, n do
+ for j = 1, n // 2 + 1 do
+ lux[i][j] = L
+ end
+ end
+ for i = 1, n do
+ lux[i][n // 2 + 2] = U
+ end
+ for j = n // 2 + 3, n do
+ for i = 1, n do
+ lux[i][j] = X
+ end
+ end
+ lux[n // 2 + 1][n // 2 + 1] = U
+ lux[n // 2 + 1][n // 2 + 2] = L
+ local i, j = 1, 1 + (n >> 1)
+ local k, l
+ res[2 * i + x1][2 * j - 1] = 1
+ res[2 * i + x2][2 * j] = 2
+ res[2 * i + x3][2 * j] = 3
+ res[2 * i + x4][2 * j - 1] = 4
+ for key = 2, n * n do
+ k = 2 <= i and i - 1 or n
+ l = 2 <= j and j - 1 or n
+ if res[2 * k][2 * l] > 0 then
+ i = i % n + 1
+ else
+ i, j = k, l
+ end
+ if lux[i][j] == L then
+ x1, x2, x3, x4 = -1, 0, -1, 0
+ elseif lux[i][j] == U then
+ x1, x2, x3, x4 = 0, 0, -1, -1
+ else
+ x1, x2, x3, x4 = 0, -1, 0, -1
+ end
+ res[2 * i + x1][2 * j] = 4 * (key - 1) + 1
+ res[2 * i + x2][2 * j - 1] = 4 * (key - 1) + 2
+ res[2 * i + x3][2 * j - 1] = 4 * (key - 1) + 3
+ res[2 * i + x4][2 * j] = 4 * key
+ end
+ return res
+end
+
+local function magic_03(n)
+ local res = init(n)
+ for x = 1, n, 4 do
+ for y = 1, n, 4 do
+ local q = 0
+ for i = x, x + 3 do
+ q = q + 1
+ local q1 = 0
+ for j = y, y + 3 do
+ q1 = q1 + 1
+ if i == j or i + j == 5 or q + q1 == 5 or q == q1 then
+ res[i][j] = n * (i - 1) + j
+ else
+ res[i][j] = n * n - ((i - 1) * n + j) + 1
+ end
+ end
+ end
+ end
+ end
+ return res
+end
+
+local currentsquare = nil
+
+local function magicsquare(n)
+ local r = n & 3
+ if r == 0 then
+ return magic_03(n)
+ elseif r == 2 then
+ return magic_02(n)
+ end
+ return magic_01(n)
+end
+
+local bTR, eTR = context.bTR, context.eTR
+local bTD, eTD = context.bTD, context.eTD
+
+implement({
+ name = "magicsquarecell",
+ arguments = { "integer", "integer" },
+ actions = function(x, y)
+ context(currentsquare and currentsquare[x][y] or "")
+ end,
+})
+
+implement({
+ name = "magicsquareinit",
+ arguments = { "integer" },
+ actions = function(n)
+ if n > 0 and n ~= 2 then
+ currentsquare = magicsquare(n)
+ else
+ magic_reporter(("Invalid number %d: nothing will be provided"):format(n))
+ end
+ end,
+})
+
+implement({
+ name = "magicsquarereset",
+ actions = function()
+ currentsquare = nil
+ end,
+})
+
+implement({
+ name = "magicsquare",
+ actions = function()
+ local r = currentsquare
+ if r then
+ local n = #r
+ for i = 1, n do
+ bTR()
+ for j = 1, n do
+ bTD()
+ context(r[i][j])
+ eTD()
+ end
+ eTR()
+ end
+ else
+ magic_reporter("Magic square not initialized...")
+ return
+ end
+ end,
+})
+
+local function rand2(a, b)
+ if random(2) == 1 then
+ return a, b
+ else
+ return b, a
+ end
+end
+
+local function latinsquare(n)
+ local xy, xz, yz = {}, {}, {}
+ local mxy, mxz, myz
+ local m
+ local proper = true
+ local min = n * n * n
+ for i = 1, n do
+ xy[i] = {}
+ yz[i] = {}
+ xz[i] = {}
+ end
+ for i = 1, n do
+ for j = 1, n do
+ local k = (i + j - 2) % n + 1
+ xy[i][j] = k
+ xz[i][k] = j
+ yz[j][k] = i
+ end
+ end
+ for _ = 1, min do
+ local i, j, k, i2, j2, k2, i2_, j2_, k2_
+ if proper then
+ i, j, k = random(n), random(n), random(n)
+ while xy[i][j] == k do
+ i, j, k = random(n), random(n), random(n)
+ end
+ i2 = yz[j][k]
+ j2 = xz[i][k]
+ k2 = xy[i][j]
+ i2_, j2_, k2_ = i, j, k
+ else
+ i, j, k = m[1], m[2], m[3]
+ i2, i2_ = rand2(yz[j][k], myz)
+ j2, j2_ = rand2(xz[i][k], mxz)
+ k2, k2_ = rand2(xy[i][j], mxy)
+ end
+ proper = xy[i2][j2] == k2
+ if not proper then
+ m = { i2, j2, k2 }
+ mxy = xy[i2][j2]
+ myz = yz[j2][k2]
+ mxz = xz[i2][k2]
+ end
+ xy[i][j] = k2_
+ xy[i][j2] = k2
+ xy[i2][j] = k2
+ xy[i2][j2] = k
+
+ yz[j][k] = i2_
+ yz[j][k2] = i2
+ yz[j2][k] = i2
+ yz[j2][k2] = i
+
+ xz[i][k] = j2_
+ xz[i][k2] = j2
+ xz[i2][k] = j2
+ xz[i2][k2] = j
+ end
+ return xy
+end
+
+local currentlatin = nil
+
+implement({
+ name = "latinsquarecell",
+ arguments = { "integer", "integer" },
+ actions = function(x, y)
+ context(currentlatin and currentlatin[x][y] or "")
+ end,
+})
+
+implement({
+ name = "latinsquareinit",
+ arguments = { "integer" },
+ actions = function(n)
+ if n > 0 then
+ currentlatin = latinsquare(n)
+ else
+ latin_reporter(("Invalid number %d: nothing will be provided"):format(n))
+ end
+ end,
+})
+
+implement({
+ name = "latinsquarereset",
+ actions = function()
+ currentlatin = nil
+ end,
+})
+
+implement({
+ name = "latinsquare",
+ actions = function()
+ local r = currentlatin
+ if r then
+ local n = #r
+ for i = 1, n do
+ bTR()
+ for j = 1, n do
+ bTD()
+ context(r[i][j])
+ eTD()
+ end
+ eTR()
+ end
+ else
+ latin_reporter("Latin square not initialized...")
+ return
+ end
+ end,
+})
diff --git a/macros/context/contrib/context-squares/tex/context/third/squares/t-squares.mklx b/macros/context/contrib/context-squares/tex/context/third/squares/t-squares.mklx
new file mode 100644
index 0000000000..967ba97a74
--- /dev/null
+++ b/macros/context/contrib/context-squares/tex/context/third/squares/t-squares.mklx
@@ -0,0 +1,194 @@
+%D \module
+%D [ file=t-squares,
+%D version=2023-08-01,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Squares for ConTeXt,
+%D author=Jairo A. del Rio,
+%D date=\currentdate,
+%D copyright=Jairo A. del Rio,
+%D email=jairoadelrio6@gmail.com,
+%D license=MIT License]
+
+%C Copyright (c) 2023 Jairo A. del Rio
+%C
+%C Permission is hereby granted, free of charge, to any person obtaining
+%C a copy of this software and associated documentation files (the
+%C "Software"), to deal in the Software without restriction, including
+%C without limitation the rights to use, copy, modify, merge, publish,
+%C distribute, sublicense, and/or sell copies of the Software, and to
+%C permit persons to whom the Software is furnished to do so, subject to
+%C the following conditions:
+%C
+%C The above copyright notice and this permission notice shall be
+%C included in all copies or substantial portions of the Software.
+%C
+%C THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+%C EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+%C MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+%C IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+%C CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+%C TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+%C SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+\writestatus{loading}{Squares for ConTeXt!}
+
+\startmodule[squares]
+
+\unprotect
+
+\registerctxluafile{t-squares}{autosuffix}
+
+\installnamespace {magicsquare}
+\installsimplecommandhandler\????magicsquare{magicsquare}\????magicsquare
+
+\startsetups[\????magicsquare:\c!renderingsetup:\v!color]
+\dorecurse{\numexpr\magicsquareparameter\c!n}{
+ \dorecurse{\numexpr\magicsquareparameter\c!n}{
+ \definecolor[\????magicsquare:\v!color:##1:####1]
+ [h=\the\numexpr(360*\clf_magicsquarecell\numexpr##1\relax\numexpr####1\relax):(\magicsquareparameter\c!n*\magicsquareparameter\c!n)\relax,
+ v=1,
+ s=0.5]%
+ \setupTABLE[####1][##1]
+ [\c!background=\v!color,
+ \c!backgroundcolor=\????magicsquare:\v!color:##1:####1]%
+ }
+}
+\stopsetups
+
+\setupmagicsquare
+ [\c!n=5,
+ \c!size=2em,
+ \c!align={\v!middle,\v!lohi},
+ \c!renderingsetup=\v!none]
+
+\tolerant\protected\def\magicsquare[#parameters]%
+{\begingroup%
+ \ifarguments\or
+ \setupmagicsquare[#parameters]%
+ \fi
+ \clf_magicsquareinit\numexpr\magicsquareparameter\c!n\relax%
+ \ifcstok{\magicsquareparameter\c!renderingsetup}\emptytoks
+ \else
+ \directsetup{\????magicsquare:\c!renderingsetup:\magicsquareparameter\c!renderingsetup}%
+ \fi
+ \bTABLE
+ [#parameters,
+ \c!width=\magicsquareparameter\c!size,
+ \c!height=\magicsquareparameter\c!size,
+ \c!align=\magicsquareparameter\c!align]%
+ \clf_magicsquare%
+ \eTABLE%
+ \clf_magicsquarereset%
+ \endgroup}
+
+\installnamespace{latinsquare}
+\installsimplecommandhandler\????latinsquare{latinsquare}\????latinsquare
+
+\startsetups[\????latinsquare:\c!renderingsetup:\v!none]
+\stopsetups
+
+\startsetups[\????latinsquare:\c!renderingsetup:\v!color]
+\dorecurse{\numexpr\latinsquareparameter\c!n}{
+ \definecolor[\????latinsquare:\v!color:##1][h=\the\numexpr(360*##1):(\magicsquareparameter\c!n)\relax,v=1,s=0.5]%
+ \dorecurse{\numexpr\latinsquareparameter\c!n}{
+ \setupTABLE[####1][##1]
+ [\c!background=\v!color,
+ \c!backgroundcolor=\????latinsquare:\v!color:\clf_latinsquarecell\numexpr##1\relax\numexpr####1\relax]%
+ }
+}
+\stopsetups
+
+\setuplatinsquare
+ [\c!n=5,
+ \c!size=2em,
+ \c!align={\v!middle,\v!lohi},
+ \c!renderingsetup=\v!none]
+
+\tolerant\protected\def\latinsquare[#parameters]%
+{\begingroup%
+ \ifarguments\or
+ \setuplatinsquare[#parameters]%
+ \fi
+ \clf_latinsquareinit\numexpr\latinsquareparameter\c!n\relax%
+ \ifcstok{\latinsquareparameter\c!renderingsetup}\emptytoks
+ \else
+ \directsetup{\????latinsquare:\c!renderingsetup:\latinsquareparameter\c!renderingsetup}%
+ \fi
+ \bTABLE
+ [#parameters,
+ \c!width=\latinsquareparameter\c!size,
+ \c!height=\latinsquareparameter\c!size,
+ \c!align=\latinsquareparameter\c!align]%
+ \clf_latinsquare%
+ \eTABLE%
+ \clf_latinsquarereset%
+ \endgroup}
+
+\protect
+
+\stopmodule
+
+\continueifinputfile{t-squares.mklx}
+
+\starttext
+
+\startsection[title=\type{\magicsquare}]
+
+% Magic squares
+
+\startbuffer
+\magicsquare[n=6,renderingsetup=color]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\startbuffer
+\magicsquare[n=7,renderingsetup=color]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\startbuffer
+\magicsquare[n=8,renderingsetup=color]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\startbuffer
+\magicsquare[n=2]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\stopsection
+
+% Latin squares
+
+\startsection[title=\type{\latinsquare}]
+
+\startbuffer
+\latinsquare[n=7]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\startbuffer
+\latinsquare[n=5,renderingsetup=color]
+\stopbuffer
+
+\typebuffer
+
+\getbuffer
+
+\stopsection
+\stoptext
diff --git a/macros/context/contrib/context-title/VERSION b/macros/context/contrib/context-title/VERSION
deleted file mode 100644
index 295009c0aa..0000000000
--- a/macros/context/contrib/context-title/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2017.08.27
diff --git a/macros/context/contrib/context-title/doc/context/third/title/title-doc.pdf b/macros/context/contrib/context-title/doc/context/third/title/title-doc.pdf
deleted file mode 100644
index faa54f573f..0000000000
--- a/macros/context/contrib/context-title/doc/context/third/title/title-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-title/tex/context/interface/third/t-title.xml b/macros/context/contrib/context-title/tex/context/interface/third/t-title.xml
deleted file mode 100644
index 1a06172632..0000000000
--- a/macros/context/contrib/context-title/tex/context/interface/third/t-title.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2011.10.04">
-
-<cd:command name="placetitle" file="t-tile.mkvi">
- <cd:sequence>
- <cd:string value="placetitle"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes" optional="yes">
- <cd:inherit name="setuptitle" n="2"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setuptitle" variant="1" file="t-tile.mkvi">
- <cd:sequence>
- <cd:string value="setuptitle"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments n="1" list="yes">
- <cd:parameter name="author">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="title">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="date">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="spacebefore">
- <cd:inherit name="blank" n="1"/>
- </cd:parameter>
- <cd:parameter name="spaceafter">
- <cd:inherit name="blank" n="1"/>
- </cd:parameter>
- <cd:parameter name="align">
- <cd:inherit name="setupalign" n="1"/>
- </cd:parameter>
- <cd:parameter name="pagestate">
- <cd:constant type="start"/>
- <cd:constant type="stop" default="yes"/>
- </cd:parameter>
- <cd:parameter name="KEY">
- <cd:constant type="VALUE"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setuptitle" variant="2" file="t-tile.mkvi">
- <cd:sequence>
- <cd:string value="setuptitle"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords n="1" list="yes">
- <cd:constant type="cd:name"/>
- </cd:keywords>
- <cd:assignments n="2" list="yes">
- <cd:parameter name="style">
- <cd:resolve name="style"/>
- </cd:parameter>
- <cd:parameter name="color">
- <cd:constant type="cd:name"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="titleelement" file="t-title.mkvi">
- <cd:sequence>
- <cd:string value="titleelement"/>
- </cd:sequence>
- <cd:arguments>
- <cd:content n="1"/>
- </cd:arguments>
-</cd:command>
-
-</cd:interface> \ No newline at end of file
diff --git a/macros/context/contrib/context-title/tex/context/third/title/t-title.mkvi b/macros/context/contrib/context-title/tex/context/third/title/t-title.mkvi
deleted file mode 100644
index b7d72f0120..0000000000
--- a/macros/context/contrib/context-title/tex/context/third/title/t-title.mkvi
+++ /dev/null
@@ -1,130 +0,0 @@
-%D \module
-%D [ file=t-title,
-%D version=2013.02.05,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Document titles,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster,
-%D license=GNU General Public License]
-
-%C Copyright (C) 2011 Wolfgang Schuster
-%C
-%C This program is free software: you can redistribute it and/or modify
-%C it under the terms of the GNU General Public License as published by
-%C the Free Software Foundation, either version 3 of the License, or
-%C (at your option) any later version.
-%C
-%C This program is distributed in the hope that it will be useful,
-%C but WITHOUT ANY WARRANTY; without even the implied warranty of
-%C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-%C GNU General Public License for more details.
-%C
-%C You should have received a copy of the GNU General Public License
-%C along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-%M \loadsetups[t-title.xml]
-
-%D \showsetup{placetitle}
-%D \showsetup{setuptitle}
-%D \showsetup{titleelement}
-
-\writestatus{loading}{ConTeXt User Module / Document titles}
-
-\unprotect
-
-\installnamespace {title}
-\installnamespace {titlealternative}
-\installnamespace {titlerenderings}
-
-\installsimplecommandhandler \????title {title} \????title
-\installcommandhandler \????titlealternative {titlealternative} \????titlealternative
-
-\unexpanded\def\title_place
- {\begingroup
- \dostarttagged\t!division\v!title
- \dosingleempty\title_place_indeed}
-
-\def\title_place_indeed[#parameters]%
- {\let\currenttitle\empty
- \iffirstargument
- \setupcurrenttitle[#parameters]%
- \fi
- \edef\currenttitlealternative{\roottitleparameter\c!alternative}%
- \edef\p_renderingsetup{\titlealternativeparameter\c!renderingsetup}%
- \autosetups\p_renderingsetup
- \dostoptagged
- \doif{\roottitleparameter\c!pagestate}\v!stop{\aftergroup\noheaderandfooterlines}% why here and not after \endgroup?
- \endgroup}
-
-\def\title_parameter#element%
- {\begingroup
- \def\currenttitle{#element}%
- \usetitlestyleandcolor\c!style\c!color
- \dostarttagged\t!construct\currenttitle
- \setupinterlinespace\roottitleparameter\currenttitle\par
- \dostoptagged
- \endgroup}
-
-\let\placetitle \title_place
-\let\titleelement\title_parameter
-
-\definetitlealternative[\s!default][\c!renderingsetup=\????titlerenderings:\s!default]
-
-\startsetups[\????titlerenderings:\s!default]
-
- \blank[\roottitleparameter\c!spacebefore]
-
- \startalignment[\roottitleparameter\c!align]
-
- \titleelement\c!title
-
- \blank[1.5em]
-
- \titleelement\c!author
-
- \blank[1em]
-
- \titleelement\c!date
-
- \stopalignment
-
-
- \blank[\roottitleparameter\c!spaceafter]
-
-\stopsetups
-
-\setuptitle
- [\c!spacebefore={\v!force,2em},
- \c!spaceafter={1.5em},
- \c!align=\v!middle,
- \c!pagestate=\v!stop,
- \c!alternative=\s!default]
-
-\setuptitle
- [\c!title]
- [\c!style=\tfd,
- \c!color=]
-
-\setuptitle
- [\c!author,\c!date]
- [\c!style=\tfa,
- \c!color=]
-
-\protect
-
-\continueifinputfile{t-title.mkvi}
-
-\starttext
-
-\placetitle
- [author=Ben Lee User,
- title=How to write a \tex{placetitle} command,
- date=\currentdate\space\currenttime]
-
-\dorecurse{6}
- {\startparagraph
- \input tufte\par
- \stopparagraph}
-
-\stoptext \ No newline at end of file
diff --git a/macros/context/contrib/context-typearea/VERSION b/macros/context/contrib/context-typearea/VERSION
deleted file mode 100644
index d600ebb715..0000000000
--- a/macros/context/contrib/context-typearea/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2008.04.05
diff --git a/macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-demo.pdf b/macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-demo.pdf
deleted file mode 100644
index abe8cee74b..0000000000
--- a/macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-demo.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-doc.pdf b/macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-doc.pdf
deleted file mode 100644
index f3724f47eb..0000000000
--- a/macros/context/contrib/context-typearea/doc/context/third/typearea/typearea-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-typearea/tex/context/third/typearea/t-typearea.tex b/macros/context/contrib/context-typearea/tex/context/third/typearea/t-typearea.tex
deleted file mode 100644
index 8d429100c8..0000000000
--- a/macros/context/contrib/context-typearea/tex/context/third/typearea/t-typearea.tex
+++ /dev/null
@@ -1,99 +0,0 @@
-%D \module
-%D [ file=t-typearea,
-%D version=2008.04.05,
-%D title=\CONTEXT\ User Module,
-%D subtitle=Something like KOMA-TypeArea,
-%D author=Peter Münster,
-%D date=\currentdate,
-%D copyright={Peter Münster}]
-%C This module is copyrighted by Peter Münster.
-%C Please send any comments to pmrb at free.fr.
-
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-\writestatus{loading}{Something like KOMA-TypeArea}
-
-\unprotect
-
-%D \macros{setupTypeArea}
-%D Setting up some values.
-%D
-%D Default setup:
-%D
-%D \starttyping
-%D \setupTypeArea[bcor=0pt,oneside=no,alphabets=2.6]
-%D \stoptyping
-%D
-%D Example:
-%D
-%D \starttyping
-%D \setupTypeArea[bcor=3mm,oneside=yes,alphabets=3.1]
-%D \stoptyping
-\def\setupTypeArea[#1]{\getparameters[TA@][#1]\doTypeArea}
-
-%D Some internal dimensions:
-\newdimen\PageWidth \newdimen\Back
-\doifundefined{Width}{\newdimen\Width}
-\doifundefined{Height}{\newdimen\Height}
-
-%D This internal macro does the whole work:
-\def\doTypeArea{
-
-%D Set visible page width:
-\PageWidth=\dimexpr\paperwidth-\TA@bcor\relax
-
-%D Determine the paper aspect ratio:
-\edef\Ratio{\withoutpt{\the\dimexpr2\paperheight/(\PageWidth/32768)\relax}}
-
-%D Set the textarea width to X alphabets:
-\setbox\scratchbox\hbox{\dorecurse{26}{\character\recurselevel}}
-\Width=\dimexpr\TA@alphabets\wd\scratchbox\relax
-\ifdim\Width<\PageWidth\else
-\writestatus{error}{line wider than page}\end\fi
-
-%D Set the textarea height proportional to the width:
-\Height=\dimexpr(\Ratio\Width)
-
-%D Set the margin/gutter widths to be equal on a full spread:
-\doifelse\TA@oneside{yes}
- {\Back=\dimexpr(\PageWidth - \Width) / 2 + \TA@bcor\relax}
- {\Back=\dimexpr(\PageWidth - \Width) / 3 + \TA@bcor\relax}
-
-%D Set the top and bottom margins in a 1:2 ratio, ignoring headers:
-\edef\Top{\the\dimexpr(\paperheight - \Height) / 3 - 3\lineheight\relax}
-
-%D Redefine \type{\Height} to include header and footer space:
-\Height=\dimexpr(\Height + 8\lineheight)
-
-%D Set up the page layout using the calculated parameters:
-\setuplayout[
- backspace=\the\Back,
- height=\the\Height,
- width=\the\Width,
- header=2\lineheight,
- headerdistance=\lineheight,
- footer=2\lineheight,
- footerdistance=3\lineheight,
- topspace=\Top]
-}
-\protect
-
-\setupTypeArea[bcor=0pt,oneside=no,alphabets=2.6]
-
-\doifnotmode{demo}{\endinput}
-
-%D Usage example:
-\usemodule[typearea]
-\setupTypeArea[bcor=0mm,alphabets=3.1]
-\setuppagenumbering[alternative=doublesided]
-\starttext
-\dorecurse4{\framed[width=\textwidth,height=\textheight]{test}\page}
-\stoptext
diff --git a/macros/context/contrib/context-urwgaramond/VERSION b/macros/context/contrib/context-urwgaramond/VERSION
deleted file mode 100644
index 0d8e1ffa1c..0000000000
--- a/macros/context/contrib/context-urwgaramond/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-2006.12.23
diff --git a/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.pdf b/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.pdf
deleted file mode 100644
index 6a2e7edc23..0000000000
--- a/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.tex b/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.tex
deleted file mode 100644
index 1da2dfd29b..0000000000
--- a/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/test.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\setupoutput[pdf]
-\usemodule[urwgaramond]
-\starttext
-\rm\input knuth
-
-\it\input knuth
-
-\bf\input knuth
-
-\bi\input knuth
-\stoptext
diff --git a/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/texnansi-urw-garamond.tex b/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/texnansi-urw-garamond.tex
deleted file mode 100644
index 5d7d0861a1..0000000000
--- a/macros/context/contrib/context-urwgaramond/doc/fonts/urw/garamond/texnansi-urw-garamond.tex
+++ /dev/null
@@ -1,80 +0,0 @@
-% output=pdftex interface=en
-
-\usemodule[fnt-01]
-
-\loadmapfile[texnansi-urw-garamond.map]
-
-\starttext
-
-\ShowFont[GaramondNo8-Med][texnansi-ugmm8a][texnansi]
-\ShowFont[GaramondNo8-MedIta][texnansi-ugmmi8a][texnansi]
-\ShowFont[GaramondNo8-Reg][texnansi-ugmr8a][texnansi]
-\ShowFont[GaramondNo8-Ita][texnansi-ugmri8a][texnansi]
-
-\setupheadertexts[\tttf example definitions]
-
-\starttyping
-texfont --encoding=texnansi --fontroot=/home/peter/tmp/garamond/texmf --ma --in --ve=urw --co=garamond --show
-\stoptyping
-
-\starttyping
-/home/peter/tmp/garamond/texmf/fonts/map/pdftex/context/texnansi-urw-garamond.map
-\stoptyping
-
-\starttyping
-\definefontsynonym[GaramondNo8-Med][texnansi-ugmm8a][encoding=texnansi]
-\definefontsynonym[GaramondNo8-MedIta][texnansi-ugmmi8a][encoding=texnansi]
-\definefontsynonym[GaramondNo8-Reg][texnansi-ugmr8a][encoding=texnansi]
-\definefontsynonym[GaramondNo8-Ita][texnansi-ugmri8a][encoding=texnansi]
-\stoptyping
-
-\page
-
-\setupheadertexts[\tttf texnansi-urw-garamond.map]
-
-\starttyping
-texnansi-raw-ugmm8a GaramondNo8-Med 4 < ugmm8a.pfb texnansi.enc
-texnansi-raw-ugmmi8a GaramondNo8-MedIta 4 < ugmmi8a.pfb texnansi.enc
-texnansi-raw-ugmr8a GaramondNo8-Reg 4 < ugmr8a.pfb texnansi.enc
-texnansi-raw-ugmri8a GaramondNo8-Ita 4 < ugmri8a.pfb texnansi.enc
-\stoptyping
-
-
-%appended section
-
-\page
-
-\ShowFont[GaramondNo8-Med][texnansi-ugmm8a][texnansi]
-\ShowFont[GaramondNo8-MedIta][texnansi-ugmmi8a][texnansi]
-\ShowFont[GaramondNo8-Reg][texnansi-ugmr8a][texnansi]
-\ShowFont[GaramondNo8-Ita][texnansi-ugmri8a][texnansi]
-
-\setupheadertexts[\tttf example definitions]
-
-\starttyping
-texfont --encoding=texnansi --fontroot=/home/peter/tmp/garamond/texmf --ma --in --ve=urw --co=garamond --show
-\stoptyping
-
-\starttyping
-/home/peter/tmp/garamond/texmf/fonts/map/pdftex/context/texnansi-urw-garamond.map
-\stoptyping
-
-\starttyping
-\definefontsynonym[GaramondNo8-Med][texnansi-ugmm8a][encoding=texnansi]
-\definefontsynonym[GaramondNo8-MedIta][texnansi-ugmmi8a][encoding=texnansi]
-\definefontsynonym[GaramondNo8-Reg][texnansi-ugmr8a][encoding=texnansi]
-\definefontsynonym[GaramondNo8-Ita][texnansi-ugmri8a][encoding=texnansi]
-\stoptyping
-
-\page
-
-\setupheadertexts[\tttf texnansi-urw-garamond.map]
-
-\starttyping
-texnansi-raw-ugmm8a GaramondNo8-Med 4 < ugmm8a.pfb texnansi.enc
-texnansi-raw-ugmmi8a GaramondNo8-MedIta 4 < ugmmi8a.pfb texnansi.enc
-texnansi-raw-ugmr8a GaramondNo8-Reg 4 < ugmr8a.pfb texnansi.enc
-texnansi-raw-ugmri8a GaramondNo8-Ita 4 < ugmri8a.pfb texnansi.enc
-\stoptyping
-
-\stoptext
diff --git a/macros/context/contrib/context-urwgaramond/fonts/map/pdftex/context/texnansi-urw-garamond.map b/macros/context/contrib/context-urwgaramond/fonts/map/pdftex/context/texnansi-urw-garamond.map
deleted file mode 100644
index 5bb842630f..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/map/pdftex/context/texnansi-urw-garamond.map
+++ /dev/null
@@ -1,14 +0,0 @@
-% This file is generated by the TeXFont Perl script.
-%
-% You need to add the following line to your file:
-%
-% \pdfmapfile{+texnansi-urw-garamond.map}
-%
-% In ConTeXt you can best use:
-%
-% \loadmapfile[texnansi-urw-garamond.map]
-
-texnansi-raw-ugmm8a GaramondNo8-Med "TeXnANSIEncoding ReEncodeFont" <texnansi.enc <ugmm8a.pfb
-texnansi-raw-ugmmi8a GaramondNo8-MedIta "TeXnANSIEncoding ReEncodeFont" <texnansi.enc <ugmmi8a.pfb
-texnansi-raw-ugmr8a GaramondNo8-Reg "TeXnANSIEncoding ReEncodeFont" <texnansi.enc <ugmr8a.pfb
-texnansi-raw-ugmri8a GaramondNo8-Ita "TeXnANSIEncoding ReEncodeFont" <texnansi.enc <ugmri8a.pfb
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmm8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmm8a.tfm
deleted file mode 100644
index f5a3808e56..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmm8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmmi8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmmi8a.tfm
deleted file mode 100644
index 04fa84aed0..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmmi8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmr8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmr8a.tfm
deleted file mode 100644
index 4949188d78..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmr8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmri8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmri8a.tfm
deleted file mode 100644
index 4f03149966..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-raw-ugmri8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmm8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmm8a.tfm
deleted file mode 100644
index a25a5850e9..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmm8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmmi8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmmi8a.tfm
deleted file mode 100644
index acaca4073b..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmmi8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmr8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmr8a.tfm
deleted file mode 100644
index aab12ea71b..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmr8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmri8a.tfm b/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmri8a.tfm
deleted file mode 100644
index f98baff02a..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/tfm/urw/garamond/texnansi-ugmri8a.tfm
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmm8a.vf b/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmm8a.vf
deleted file mode 100644
index cf986ffffe..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmm8a.vf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmmi8a.vf b/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmmi8a.vf
deleted file mode 100644
index e5899f0282..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmmi8a.vf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmr8a.vf b/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmr8a.vf
deleted file mode 100644
index d4a7fc62d9..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmr8a.vf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmri8a.vf b/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmri8a.vf
deleted file mode 100644
index ca5b0cff8e..0000000000
--- a/macros/context/contrib/context-urwgaramond/fonts/vf/urw/garamond/texnansi-ugmri8a.vf
+++ /dev/null
Binary files differ
diff --git a/macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/t-urwgaramond.tex b/macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/t-urwgaramond.tex
deleted file mode 100644
index 71948cf8b6..0000000000
--- a/macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/t-urwgaramond.tex
+++ /dev/null
@@ -1,16 +0,0 @@
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-%texfont --encoding=texnansi --fontroot=%{texmf} --ma --in \
-% --ve=urw --co=garamond --show
-
-\usetypescriptfile[type-urwgaramond]
-\usetypescript[URWGaramond]
-\setupbodyfont[urwgaramond]
diff --git a/macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/type-urwgaramond.tex b/macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/type-urwgaramond.tex
deleted file mode 100644
index 3a72979230..0000000000
--- a/macros/context/contrib/context-urwgaramond/tex/context/third/urwgaramond/type-urwgaramond.tex
+++ /dev/null
@@ -1,94 +0,0 @@
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-
-% This program is distributed in the hope that it will be useful,
-% but without any warranty; without even the implied warranty of
-% merchantability or fitness for a particular purpose. See the
-% GNU General Public License for more details.
-
-% raw fonts
-
-\starttypescript[serif] [garamond] [texnansi]
-
-\definefontsynonym[Garamond] [ugmr8a] [encoding=texnansi]
-\definefontsynonym[GaramondItalic] [ugmri8a] [encoding=texnansi]
-\definefontsynonym[GaramondBold] [ugmm8a] [encoding=texnansi]
-\definefontsynonym[GaramondBoldItalic][ugmmi8a] [encoding=texnansi]
-
-\stoptypescript
-
-% names
-
-\starttypescript [serif] [garamond] [name]
-
-\setups[font:fallback:serif]
-
-\definefontsynonym[Serif] [Garamond]
-\definefontsynonym[SerifBold] [Garamond-Bold]
-\definefontsynonym[SerifItalic] [Garamond-Italic]
-\definefontsynonym[SerifBoldItalic][Garamond-BoldItalic]
-
-\stoptypescript
-
-% synonyms
-
-\starttypescript [serif] [garamond] [texnansi]
-
-\definefontsynonym [Garamond]
-[\typescriptthree-ugmr8a]
-[encoding=\typescriptthree]
-
-\definefontsynonym [Garamond-Italic]
-[\typescriptthree-ugmri8a]
-[encoding=\typescriptthree]
-
-\definefontsynonym [Garamond-Bold]
-[\typescriptthree-ugmm8a]
-[encoding=\typescriptthree]
-
-\definefontsynonym [Garamond-BoldItalic]
-[\typescriptthree-ugmmi8a]
-[encoding=\typescriptthree]
-
-\stoptypescript
-
-% maps
-
-\starttypescript [map] [garamond] [texnansi]
-
-\loadmapfile[texnansi-urw-garamond.map]
-
-\stoptypescript%
-
-% typefaces
-
-\starttypescript [URWGaramond]
-
-\definebodyfontenvironment
- [urwgaramond]
- [default]
- [interlinespace=2.8ex]
-
-\definetypeface [urwgaramond]
-[rm] [serif] [garamond] [default]
-[encoding=texnansi]
-
-\definetypeface [urwgaramond]
-[ss] [sans] [helvetica] [default]
-[encoding=texnansi]
-
-\definetypeface [urwgaramond]
-[mm] [math] [palatino] [default]
-[encoding=texnansi]
-
-\definetypeface [urwgaramond]
-[tt] [mono] [modern] [default]
-[encoding=texnansi]
-
-\stoptypescript
-
-%%% Local Variables:
-%%% mode: context
-%%% End: