summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FILES.byname3468
-rw-r--r--FILES.byname.gzbin2185345 -> 2185601 bytes
-rw-r--r--FILES.last07days2595
-rw-r--r--graphics/asymptote/ChangeLog31
-rw-r--r--graphics/asymptote/GUI/icons_rc.py3502
-rw-r--r--graphics/asymptote/ReleaseNotes6
-rw-r--r--graphics/asymptote/asy-keywords.el2
-rw-r--r--graphics/asymptote/asy.list82
-rw-r--r--graphics/asymptote/asymptote.spec2
-rw-r--r--graphics/asymptote/base/three_tube.asy19
-rwxr-xr-xgraphics/asymptote/configure18
-rw-r--r--graphics/asymptote/configure.ac2
-rw-r--r--graphics/asymptote/doc/CAD.pdfbin167756 -> 167756 bytes
-rw-r--r--graphics/asymptote/doc/FAQ/asy-faq.info2
-rw-r--r--graphics/asymptote/doc/TeXShopAndAsymptote.pdfbin76904 -> 77097 bytes
-rw-r--r--graphics/asymptote/doc/asy-latex.pdfbin194590 -> 194590 bytes
-rw-r--r--graphics/asymptote/doc/asyRefCard.pdfbin121144 -> 121144 bytes
-rw-r--r--graphics/asymptote/doc/asymptote.pdfbin1293632 -> 1293654 bytes
-rw-r--r--graphics/asymptote/doc/png/asymptote.info4
-rw-r--r--graphics/asymptote/examples/cones.asy7
-rw-r--r--graphics/asymptote/examples/hyperboloid.asy2
-rw-r--r--graphics/asymptote/interact.cc6
-rw-r--r--graphics/asymptote/revision.cc2
-rw-r--r--info/biblio/font.bib5
-rw-r--r--info/biblio/typeset.bib7
-rw-r--r--language/spanish/babel/README44
-rw-r--r--language/spanish/babel/base/README58
-rw-r--r--language/spanish/babel/base/spanish.dtx2759
-rw-r--r--language/spanish/babel/base/spanish.ins152
-rw-r--r--language/spanish/babel/base/spanish.pdfbin169856 -> 0 bytes
-rw-r--r--language/spanish/babel/base/spanish2.html295
l---------language/spanish/babel/contrib/spanglish1
-rw-r--r--language/spanish/hyphen-spanish/README (renamed from language/spanish/hyphen/base/README)0
-rw-r--r--language/spanish/hyphen-spanish/division.pdf (renamed from language/spanish/hyphen/base/division.pdf)bin141388 -> 141388 bytes
-rw-r--r--language/spanish/hyphen-spanish/eshyph-make.lua (renamed from language/spanish/hyphen/base/eshyph-make.lua)0
-rw-r--r--language/spanish/hyphen-spanish/eshyph-test.tex (renamed from language/spanish/hyphen/base/eshyph-test.tex)0
-rw-r--r--language/spanish/hyphen-spanish/eshyph.src (renamed from language/spanish/hyphen/base/eshyph.src)0
-rw-r--r--language/spanish/hyphen-spanish/eshyph.tex (renamed from language/spanish/hyphen/base/eshyph.tex)0
-rw-r--r--language/spanish/hyphen/README77
-rw-r--r--language/spanish/sphyphb/README (renamed from language/spanish/hyphen/contrib/sphyphb/README)0
-rw-r--r--language/spanish/sphyphb/sphyphb.tex (renamed from language/spanish/hyphen/contrib/sphyphb/sphyphb.tex)0
-rw-r--r--macros/generic/chemfig/README4
-rw-r--r--macros/generic/chemfig/chemfig-en.pdfbin1075975 -> 1087279 bytes
-rw-r--r--macros/generic/chemfig/chemfig-en.tex640
-rw-r--r--macros/generic/chemfig/chemfig-fr.pdfbin1101807 -> 1115313 bytes
-rw-r--r--macros/generic/chemfig/chemfig-fr.tex614
-rw-r--r--macros/generic/chemfig/chemfig.tex396
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/README.md42
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.bbx73
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.cbx4
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md949
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex12
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdfbin1526661 -> 2452077 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex544
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.bbx2
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx375
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx33
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx30
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx29
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015.tex4
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015ms.tex4
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex4
-rw-r--r--macros/latex/contrib/lwarp/README.txt2
-rw-r--r--macros/latex/contrib/lwarp/lwarp.dtx2359
-rw-r--r--macros/latex/contrib/lwarp/lwarp.ins15
-rw-r--r--macros/latex/contrib/lwarp/lwarp.pdfbin2633200 -> 2685560 bytes
-rwxr-xr-xmacros/latex/contrib/lwarp/lwarpmk.lua6
-rw-r--r--macros/latex/contrib/media9/ChangeLog7
-rw-r--r--macros/latex/contrib/media9/doc/media9.pdfbin3735214 -> 3735211 bytes
-rw-r--r--macros/latex/contrib/media9/media9.sty4
-rw-r--r--macros/latex/contrib/media9/pdfbase.sty9
-rw-r--r--macros/latex/contrib/xsavebox/ChangeLog4
-rw-r--r--macros/latex/contrib/xsavebox/README.md1
-rw-r--r--macros/latex/contrib/xsavebox/xsavebox.pdfbin368416 -> 368610 bytes
-rw-r--r--macros/latex/contrib/xsavebox/xsavebox.sty12
-rw-r--r--macros/latex/contrib/xsavebox/xsavebox.tex2
-rw-r--r--macros/latex/contrib/zref/zref.dtx564
-rw-r--r--macros/latex/contrib/zref/zref.pdfbin686493 -> 671033 bytes
-rw-r--r--obsolete/fonts/aecc/COPYING (renamed from fonts/aecc/COPYING)0
-rw-r--r--obsolete/fonts/aecc/MANIFEST (renamed from fonts/aecc/MANIFEST)0
-rw-r--r--obsolete/fonts/aecc/README (renamed from fonts/aecc/README)0
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm)bin6120 -> 6120 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm)bin6092 -> 6092 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm)bin6128 -> 6128 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm)bin6132 -> 6132 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm)bin6124 -> 6124 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm)bin6108 -> 6108 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm)bin6748 -> 6748 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm)bin6268 -> 6268 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm)bin6272 -> 6272 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm (renamed from fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm)bin7220 -> 7220 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf)bin3176 -> 3176 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf)bin3196 -> 3196 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf)bin3188 -> 3188 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf)bin3180 -> 3180 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf)bin3180 -> 3180 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf)bin3180 -> 3180 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf)bin3368 -> 3368 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf)bin3180 -> 3180 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf)bin3180 -> 3180 bytes
-rw-r--r--obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf (renamed from fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf)bin3180 -> 3180 bytes
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex (renamed from fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx (renamed from fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aesample.tex (renamed from fonts/aecc/src/fonts/contrib/aecc/aesample.tex)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/aet1.etx (renamed from fonts/aecc/src/fonts/contrib/aecc/aet1.etx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/bxittest.tex (renamed from fonts/aecc/src/fonts/contrib/aecc/bxittest.tex)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/clean (renamed from fonts/aecc/src/fonts/contrib/aecc/clean)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/germtest.tex (renamed from fonts/aecc/src/fonts/contrib/aecc/germtest.tex)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/go (renamed from fonts/aecc/src/fonts/contrib/aecc/go)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/install (renamed from fonts/aecc/src/fonts/contrib/aecc/install)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/makepl (renamed from fonts/aecc/src/fonts/contrib/aecc/makepl)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx (renamed from fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx)0
-rw-r--r--obsolete/fonts/aecc/src/fonts/contrib/aecc/slitest.tex (renamed from fonts/aecc/src/fonts/contrib/aecc/slitest.tex)0
-rw-r--r--obsolete/fonts/aecc/tex/latex/contrib/aecc/aecc.sty (renamed from fonts/aecc/tex/latex/contrib/aecc/aecc.sty)0
-rw-r--r--obsolete/fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd (renamed from fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd)0
l---------obsolete/language/greek/bgreek/README (renamed from language/greek/bgreek/README)0
l---------obsolete/language/greek/bgreek/bgman.pdf (renamed from language/greek/bgreek/bgman.pdf)0
-rw-r--r--obsolete/language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT (renamed from language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT)0
-rw-r--r--obsolete/language/greek/bgreek/doc/latex/bgreek/README (renamed from language/greek/bgreek/doc/latex/bgreek/README)0
-rw-r--r--obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.pdf (renamed from language/greek/bgreek/doc/latex/bgreek/bgman.pdf)bin219135 -> 219135 bytes
-rw-r--r--obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.tex (renamed from language/greek/bgreek/doc/latex/bgreek/bgman.tex)0
-rw-r--r--obsolete/language/greek/bgreek/doc/latex/bgreek/bgreek.etx (renamed from language/greek/bgreek/doc/latex/bgreek/bgreek.etx)0
-rw-r--r--obsolete/language/greek/bgreek/doc/latex/bgreek/cbgreek.etx (renamed from language/greek/bgreek/doc/latex/bgreek/cbgreek.etx)0
-rw-r--r--obsolete/language/greek/bgreek/doc/latex/bgreek/qbgreek.etx (renamed from language/greek/bgreek/doc/latex/bgreek/qbgreek.etx)0
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm)bin3688 -> 3688 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm)bin3708 -> 3708 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm)bin3700 -> 3700 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm)bin3676 -> 3676 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm)bin3708 -> 3708 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm)bin3648 -> 3648 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm)bin3680 -> 3680 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm)bin3668 -> 3668 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm)bin3692 -> 3692 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm)bin3680 -> 3680 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm)bin3688 -> 3688 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm)bin3676 -> 3676 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm)bin5192 -> 5192 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm)bin5212 -> 5212 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm)bin5144 -> 5144 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm)bin5168 -> 5168 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm)bin5180 -> 5180 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm)bin5184 -> 5184 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm)bin5192 -> 5192 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm)bin5212 -> 5212 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm)bin5144 -> 5144 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm)bin5168 -> 5168 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm)bin5180 -> 5180 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm)bin5184 -> 5184 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm)bin3712 -> 3712 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm)bin3720 -> 3720 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm)bin3708 -> 3708 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm)bin3684 -> 3684 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm)bin3724 -> 3724 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm)bin3712 -> 3712 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm)bin3720 -> 3720 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm)bin3716 -> 3716 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm)bin3720 -> 3720 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm)bin3724 -> 3724 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm)bin3728 -> 3728 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm)bin3720 -> 3720 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm)bin5224 -> 5224 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm)bin5232 -> 5232 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm)bin5208 -> 5208 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm)bin5232 -> 5232 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm)bin5224 -> 5224 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm)bin5308 -> 5308 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm)bin5280 -> 5280 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm)bin5328 -> 5328 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm)bin5308 -> 5308 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm)bin5328 -> 5328 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm)bin5328 -> 5328 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm)bin5312 -> 5312 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm)bin3692 -> 3692 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm)bin3712 -> 3712 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm)bin3704 -> 3704 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm)bin3680 -> 3680 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm)bin3712 -> 3712 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm)bin3652 -> 3652 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm)bin3684 -> 3684 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm)bin3672 -> 3672 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm)bin3696 -> 3696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm)bin3684 -> 3684 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm)bin3692 -> 3692 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm)bin3680 -> 3680 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm)bin5192 -> 5192 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm)bin5212 -> 5212 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm)bin5144 -> 5144 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm)bin5168 -> 5168 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm)bin5180 -> 5180 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm)bin5184 -> 5184 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm)bin5192 -> 5192 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm)bin5212 -> 5212 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm)bin5144 -> 5144 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm)bin5168 -> 5168 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm)bin5180 -> 5180 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm)bin5188 -> 5188 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm)bin5184 -> 5184 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm)bin3716 -> 3716 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm)bin3724 -> 3724 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm)bin3712 -> 3712 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm)bin3688 -> 3688 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm)bin3728 -> 3728 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm)bin3716 -> 3716 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm)bin3724 -> 3724 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm)bin3720 -> 3720 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm)bin3724 -> 3724 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm)bin3728 -> 3728 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm)bin3732 -> 3732 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm)bin3724 -> 3724 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm)bin5224 -> 5224 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm)bin5176 -> 5176 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm)bin5216 -> 5216 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm)bin5232 -> 5232 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm)bin5228 -> 5228 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm)bin5208 -> 5208 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm)bin5232 -> 5232 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm)bin5224 -> 5224 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm)bin5308 -> 5308 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm)bin5280 -> 5280 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm)bin5328 -> 5328 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm)bin5308 -> 5308 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm)bin5328 -> 5328 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm)bin5328 -> 5328 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm)bin5312 -> 5312 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm (renamed from language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm)bin5324 -> 5324 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf)bin1740 -> 1740 bytes
-rw-r--r--obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf (renamed from language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf)bin1696 -> 1696 bytes
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd (renamed from language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bcgenc.def (renamed from language/greek/bgreek/tex/latex/bgreek/bcgenc.def)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bcglmr.fd (renamed from language/greek/bgreek/tex/latex/bgreek/bcglmr.fd)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd (renamed from language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bcqenc.def (renamed from language/greek/bgreek/tex/latex/bgreek/bcqenc.def)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd (renamed from language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bgfonts.tex (renamed from language/greek/bgreek/tex/latex/bgreek/bgfonts.tex)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.ldf (renamed from language/greek/bgreek/tex/latex/bgreek/bgreek.ldf)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.sty (renamed from language/greek/bgreek/tex/latex/bgreek/bgreek.sty)0
-rw-r--r--obsolete/language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf (renamed from language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf)0
-rw-r--r--obsolete/language/spanish/babel-contrib/spanish-mx/README (renamed from language/spanish/babel/contrib/mexican/README)0
-rw-r--r--obsolete/language/spanish/babel-contrib/spanish-mx/esmx.cfg (renamed from language/spanish/babel/contrib/mexican/esmx.cfg)0
-rw-r--r--obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.ldf (renamed from language/spanish/babel/contrib/mexican/spanishmx.ldf)0
-rw-r--r--obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.sty (renamed from language/spanish/babel/contrib/mexican/spanishmx.sty)0
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/spanglish/README (renamed from macros/latex/contrib/babel-contrib/spanglish/README)0
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf (renamed from macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf)0
-rw-r--r--obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.sty (renamed from macros/latex/contrib/babel-contrib/spanglish/spanglish.sty)0
-rw-r--r--obsolete/macros/latex/contrib/ltxindex/README (renamed from macros/latex/contrib/ltxindex/README)0
-rw-r--r--obsolete/macros/latex/contrib/ltxindex/copying.txt (renamed from macros/latex/contrib/ltxindex/copying.txt)0
-rw-r--r--obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx (renamed from macros/latex/contrib/ltxindex/ltxindex.dtx)0
-rw-r--r--obsolete/macros/latex/contrib/ltxindex/ltxindex.pdf (renamed from macros/latex/contrib/ltxindex/ltxindex.pdf)bin80113 -> 80113 bytes
-rw-r--r--obsolete/macros/latex/contrib/ltxindex/ltxindex.sty (renamed from macros/latex/contrib/ltxindex/ltxindex.sty)0
-rw-r--r--support/arara/README.md107
-rw-r--r--support/arara/doc/arara-manual.pdfbin1840860 -> 1827588 bytes
-rw-r--r--support/arara/doc/arara-manual.tex80
-rw-r--r--support/arara/doc/arara.sty182
-rw-r--r--support/arara/doc/chapters/building.tex117
-rw-r--r--support/arara/doc/chapters/cli.tex154
-rw-r--r--support/arara/doc/chapters/concepts.tex305
-rw-r--r--support/arara/doc/chapters/configuration.tex28
-rw-r--r--support/arara/doc/chapters/deploying.tex96
-rw-r--r--support/arara/doc/chapters/foreword.tex22
-rw-r--r--support/arara/doc/chapters/introduction.tex25
-rw-r--r--support/arara/doc/chapters/license.tex2
-rw-r--r--support/arara/doc/chapters/logging.tex13
-rw-r--r--support/arara/doc/chapters/methods.tex171
-rw-r--r--support/arara/doc/chapters/mvel.tex36
-rw-r--r--support/arara/doc/chapters/prologue.tex27
-rw-r--r--support/arara/doc/chapters/rules.tex434
-rw-r--r--support/arara/doc/chapters/yaml.tex25
-rw-r--r--support/arara/doc/figures/gl.pdf69
-rw-r--r--support/arara/doc/rules/manual.yaml8
-rw-r--r--support/arara/scripts/arara.sh4
-rw-r--r--support/arara/scripts/rules/animate.yaml8
-rw-r--r--support/arara/scripts/rules/asymptote.yaml62
-rw-r--r--support/arara/scripts/rules/bib2gls.yaml11
-rw-r--r--support/arara/scripts/rules/biber.yaml21
-rw-r--r--support/arara/scripts/rules/bibtex.yaml7
-rw-r--r--support/arara/scripts/rules/bibtex8.yaml7
-rw-r--r--support/arara/scripts/rules/bibtexu.yaml7
-rw-r--r--support/arara/scripts/rules/clean.yaml11
-rw-r--r--support/arara/scripts/rules/csplain.yaml6
-rw-r--r--support/arara/scripts/rules/datatooltk.yaml5
-rw-r--r--support/arara/scripts/rules/dvipdfm.yaml9
-rw-r--r--support/arara/scripts/rules/dvipdfmx.yaml9
-rw-r--r--support/arara/scripts/rules/dvips.yaml9
-rw-r--r--support/arara/scripts/rules/dvipspdf.yaml13
-rw-r--r--support/arara/scripts/rules/dvisvgm.yaml4
-rw-r--r--support/arara/scripts/rules/etex.yaml8
-rw-r--r--support/arara/scripts/rules/frontespizio.yaml12
-rw-r--r--support/arara/scripts/rules/halt.yaml7
-rw-r--r--support/arara/scripts/rules/indent.yaml6
-rw-r--r--support/arara/scripts/rules/knitr.yaml58
-rw-r--r--support/arara/scripts/rules/latex.yaml20
-rw-r--r--support/arara/scripts/rules/latexmk.yaml8
-rw-r--r--support/arara/scripts/rules/luahbtex.yaml54
-rw-r--r--support/arara/scripts/rules/lualatex.yaml20
-rw-r--r--support/arara/scripts/rules/luatex.yaml7
-rw-r--r--support/arara/scripts/rules/make.yaml5
-rw-r--r--support/arara/scripts/rules/makeglossaries.yaml10
-rw-r--r--support/arara/scripts/rules/makeglossarieslite.yaml8
-rw-r--r--support/arara/scripts/rules/makeindex.yaml7
-rw-r--r--support/arara/scripts/rules/metapost.yaml50
-rw-r--r--support/arara/scripts/rules/nomencl.yaml10
-rw-r--r--support/arara/scripts/rules/pbibtex.yaml27
-rw-r--r--support/arara/scripts/rules/pdfcsplain.yaml6
-rw-r--r--support/arara/scripts/rules/pdflatex.yaml20
-rw-r--r--support/arara/scripts/rules/pdftex.yaml7
-rw-r--r--support/arara/scripts/rules/pdftk.yaml7
-rw-r--r--support/arara/scripts/rules/platex.yaml60
-rw-r--r--support/arara/scripts/rules/ps2pdf.yaml9
-rw-r--r--support/arara/scripts/rules/ptex.yaml49
-rw-r--r--support/arara/scripts/rules/sketch.yaml8
-rw-r--r--support/arara/scripts/rules/songidx.yaml4
-rw-r--r--support/arara/scripts/rules/tex.yaml7
-rw-r--r--support/arara/scripts/rules/texindy.yaml7
-rw-r--r--support/arara/scripts/rules/tikzmake.yaml6
-rw-r--r--support/arara/scripts/rules/upbibtex.yaml27
-rw-r--r--support/arara/scripts/rules/uplatex.yaml60
-rw-r--r--support/arara/scripts/rules/uptex.yaml49
-rw-r--r--support/arara/scripts/rules/velocity.yaml41
-rw-r--r--support/arara/scripts/rules/xdvipdfmx.yaml9
-rw-r--r--support/arara/scripts/rules/xelatex.yaml20
-rw-r--r--support/arara/scripts/rules/xetex.yaml7
-rw-r--r--support/arara/scripts/rules/xindex.yaml49
-rw-r--r--support/arara/scripts/rules/xindy.yaml7
-rw-r--r--support/arara/source/build.gradle.kts255
-rw-r--r--support/arara/source/pom.java5.xml336
-rw-r--r--support/arara/source/pom.xml336
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/Arara.java205
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/controller/ConfigurationController.java106
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/controller/LanguageController.java120
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/controller/LoggingController.java109
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/controller/SessionController.java124
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/controller/SystemCallController.java153
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/AraraException.java88
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Argument.java125
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Command.java127
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Conditional.java139
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Configuration.java246
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Database.java80
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Directive.java146
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Evaluator.java158
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Extractor.java88
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/FileType.java170
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/FileTypeResource.java84
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Interpreter.java486
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Language.java148
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Messages.java173
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Pair.java92
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java410
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Resource.java291
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Rule.java155
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/RuleCommand.java103
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Session.java122
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/StopWatch.java84
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/model/Trigger.java135
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java166
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/CommonUtils.java954
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/ConfigurationUtils.java239
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/DatabaseUtils.java140
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveAssembler.java106
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveResolver.java59
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveUtils.java438
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/DisplayUtils.java502
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/FileHandlingUtils.java124
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/FileSearchingUtils.java117
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/InterpreterUtils.java257
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/MessageUtils.java313
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/Methods.java1368
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/RuleUtils.java244
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/TeeOutputStream.java109
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/UnsafeUtils.java87
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/VelocityUtils.java157
-rw-r--r--support/arara/source/src/main/java/org/islandoftex/arara/utils/Methods.java1222
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/Arara.kt115
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/CLI.kt171
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt90
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt101
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt157
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt85
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt24
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt97
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt319
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt158
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Language.kt69
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt59
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt106
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt50
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt122
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt50
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/model/FileType.kt110
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt375
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Session.kt119
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt40
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt57
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt67
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt32
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt55
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt312
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt48
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt33
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt140
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt121
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt422
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt415
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt68
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt164
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt70
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt266
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt105
-rw-r--r--support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt66
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/configuration/logback.xml (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/configuration/logback.xml)28
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/configuration/release-notes5
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages.properties (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages.properties)43
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_de.properties (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_de.properties)61
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en.properties (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en.properties)43
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en_QN.properties)43
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_it.properties (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_it.properties)43
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_nl.properties)45
-rw-r--r--support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties (renamed from support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_pt_BR.properties)41
-rw-r--r--support/arara/source/src/test/java/com/github/cereda/arara/tests/LocalizationTest.java115
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt62
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt58
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt102
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt143
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt20
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt76
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt33
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt139
-rw-r--r--support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt23
-rw-r--r--support/arara/source/src/test/resources/executiontests/changes/arara.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/changes/arararc.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/changes/changes.tex3
-rw-r--r--support/arara/source/src/test/resources/executiontests/changes/echoone.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/conditionals/arararc.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/conditionals/conditionals.tex6
-rw-r--r--support/arara/source/src/test/resources/executiontests/conditionals/echofour.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/conditionals/echoone.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/conditionals/echothree.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/conditionals/echotwo.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/directive-with-options/arararc.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/directive-with-options/directive-with-options.tex6
-rw-r--r--support/arara/source/src/test/resources/executiontests/directive-with-options/echoone.yaml36
-rw-r--r--support/arara/source/src/test/resources/executiontests/foreign-extension/arararc.yaml6
-rw-r--r--support/arara/source/src/test/resources/executiontests/foreign-extension/echoone.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.my3
-rw-r--r--support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.xy3
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt-error/arararc.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt-error/echoone.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt-error/echotwo.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt-error/halt-error.tex5
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt-error/halt.yaml16
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt/arararc.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt/echoone.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt/echotwo.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt/halt.tex5
-rw-r--r--support/arara/source/src/test/resources/executiontests/halt/halt.yaml19
-rw-r--r--support/arara/source/src/test/resources/executiontests/invalid-config/arararc.yaml2
-rw-r--r--support/arara/source/src/test/resources/executiontests/invalid-config/invalid-config.tex3
-rw-r--r--support/arara/source/src/test/resources/executiontests/known-extension/arararc.yaml5
-rw-r--r--support/arara/source/src/test/resources/executiontests/known-extension/echoone.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/known-extension/known-extension.tex3
-rw-r--r--support/arara/source/src/test/resources/executiontests/sessions/arararc.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/sessions/sessionrule.yaml16
-rw-r--r--support/arara/source/src/test/resources/executiontests/sessions/sessions.tex3
-rw-r--r--support/arara/source/src/test/resources/executiontests/simple-directive/arararc.yaml3
-rw-r--r--support/arara/source/src/test/resources/executiontests/simple-directive/echoone.yaml10
-rw-r--r--support/arara/source/src/test/resources/executiontests/simple-directive/simple-directive.tex3
-rw-r--r--systems/win32/miktex/tm/packages/files.csv.lzmabin530712 -> 529390 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/files.csv.lzmabin530545 -> 529292 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini6
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--systems/win32/w32tex/ChangeLog27
-rw-r--r--timestamp2
665 files changed, 19133 insertions, 21936 deletions
diff --git a/FILES.byname b/FILES.byname
index dd9e446a44..19cce3c213 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5000,7 +5000,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2020/03/03 | 266583 | FILES.last07days
+2020/03/04 | 381661 | FILES.last07days
2018/06/27 | 99883 | fonts/academicons/academicons.pdf
2018/06/27 | 10779 | fonts/academicons/academicons.sty
2018/06/27 | 5774 | fonts/academicons/academicons.tex
@@ -5152,52 +5152,6 @@
1998/06/15 | 1052 | fonts/adobe-euro/tfm/zpeur.tfm
1998/06/15 | 1044 | fonts/adobe-euro/tfm/zpeurt.tfm
2018/06/03 | 44963 | fonts/adobe-euro.zip
-2007/04/20 | 19110 | fonts/aecc/COPYING
-2012/12/17 | 6120 | fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm
-2012/12/17 | 6092 | fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm
-2012/12/17 | 6128 | fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm
-2012/12/17 | 6132 | fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm
-2012/12/17 | 6124 | fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm
-2012/12/17 | 6108 | fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm
-2012/12/17 | 6748 | fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm
-2012/12/17 | 6268 | fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm
-2012/12/17 | 6272 | fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm
-2012/12/17 | 7220 | fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm
-2012/12/17 | 3176 | fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf
-2012/12/17 | 3196 | fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf
-2012/12/17 | 3188 | fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf
-2012/12/17 | 3180 | fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf
-2012/12/17 | 3180 | fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf
-2012/12/17 | 3180 | fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf
-2012/12/17 | 3368 | fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf
-2012/12/17 | 3180 | fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf
-2012/12/17 | 3180 | fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf
-2012/12/17 | 3180 | fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf
-2012/12/17 | 1503 | fonts/aecc/MANIFEST
-2012/12/17 | 1597 | fonts/aecc/README
-2012/12/17 | 2919 | fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex
-2012/12/13 | 6895 | fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx
-2012/12/13 | 1200 | fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx
-2012/12/13 | 2438 | fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx
-2012/12/13 | 2462 | fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx
-2012/12/13 | 1451 | fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx
-2012/12/13 | 2464 | fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx
-2012/12/13 | 2462 | fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx
-2012/12/13 | 35624 | fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx
-2012/12/13 | 35295 | fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx
-2007/04/20 | 23291 | fonts/aecc/src/fonts/contrib/aecc/aesample.tex
-2007/04/20 | 30104 | fonts/aecc/src/fonts/contrib/aecc/aet1.etx
-2012/12/11 | 499 | fonts/aecc/src/fonts/contrib/aecc/bxittest.tex
-2012/12/17 | 70 | fonts/aecc/src/fonts/contrib/aecc/clean
-2012/12/11 | 1235 | fonts/aecc/src/fonts/contrib/aecc/germtest.tex
-2012/12/17 | 918 | fonts/aecc/src/fonts/contrib/aecc/go
-2012/12/17 | 288 | fonts/aecc/src/fonts/contrib/aecc/install
-2012/12/17 | 1259 | fonts/aecc/src/fonts/contrib/aecc/makepl
-2007/04/20 | 2585 | fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx
-2012/12/11 | 740 | fonts/aecc/src/fonts/contrib/aecc/slitest.tex
-2012/12/11 | 1231 | fonts/aecc/tex/latex/contrib/aecc/aecc.sty
-2012/12/17 | 1423 | fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd
-2012/12/18 | 88528 | fonts/aecc.zip
2007/04/20 | 19110 | fonts/ae/COPYING
2007/04/20 | 1951 | fonts/ae/MANIFEST
2007/04/20 | 2249 | fonts/ae/README
@@ -126340,929 +126294,929 @@
2012/11/17 | 1096 | graphics/AddTeX2Eps/default.tex
2006/04/17 | 836 | graphics/AddTeX2Eps/readme.txt
2012/11/17 | 5620 | graphics/AddTeX2Eps.zip
-2020/03/03 | 472 | graphics/asymptote/absyn.cc
-2020/03/03 | 1030 | graphics/asymptote/absyn.h
-2020/03/03 | 3309 | graphics/asymptote/access.cc
-2020/03/03 | 2976 | graphics/asymptote/access.h
-2020/03/03 | 2278 | graphics/asymptote/align.h
-2020/03/03 | 891 | graphics/asymptote/angle.h
-2020/03/03 | 18591 | graphics/asymptote/application.cc
-2020/03/03 | 9094 | graphics/asymptote/application.h
-2020/03/03 | 4624 | graphics/asymptote/array.cc
-2020/03/03 | 1951 | graphics/asymptote/array.h
-2020/03/03 | 14023 | graphics/asymptote/arrayop.h
-2020/03/03 | 11541 | graphics/asymptote/aspy.py
-2020/03/03 | 4286 | graphics/asymptote/asy.ico
-2020/03/03 | 17785 | graphics/asymptote/asy-keywords.el
-2020/03/03 | 206710 | graphics/asymptote/asy.list
-2020/03/03 | 1612 | graphics/asymptote/asy-list.pl
-2020/03/03 | 6300 | graphics/asymptote/asymptote.nsi
-2020/03/03 | 2937 | graphics/asymptote/asymptote.spec
-2020/03/03 | 770 | graphics/asymptote/asy.rc
-2020/03/03 | 34 | graphics/asymptote/autogen.sh
-2020/03/03 | 12534 | graphics/asymptote/ax_pthread.m4
-2020/03/03 | 42 | graphics/asymptote/base/animate.asy
-2020/03/03 | 5254 | graphics/asymptote/base/animation.asy
-2020/03/03 | 578 | graphics/asymptote/base/annotate.asy
-2020/03/03 | 99 | graphics/asymptote/base/asy_filetype.vim
-2020/03/03 | 268 | graphics/asymptote/base/asy-init.el
-2020/03/03 | 8243 | graphics/asymptote/base/asy-kate.sh
-2020/03/03 | 71223 | graphics/asymptote/base/asy-mode.el
-2020/03/03 | 1276 | graphics/asymptote/base/asymptote.py
-2020/03/03 | 8870 | graphics/asymptote/base/asy.vim
-2020/03/03 | 51 | graphics/asymptote/base/babel.asy
-2020/03/03 | 9566 | graphics/asymptote/base/bezulate.asy
-2020/03/03 | 11482 | graphics/asymptote/base/binarytree.asy
-2020/03/03 | 5440 | graphics/asymptote/base/bsp.asy
-2020/03/03 | 10830 | graphics/asymptote/base/CAD.asy
-2020/03/03 | 174673 | graphics/asymptote/base/colormap.asy
-2020/03/03 | 14660 | graphics/asymptote/base/contour3.asy
-2020/03/03 | 20105 | graphics/asymptote/base/contour.asy
-2020/03/03 | 2109 | graphics/asymptote/base/drawtree.asy
-2020/03/03 | 1183 | graphics/asymptote/base/embed.asy
-2020/03/03 | 1122 | graphics/asymptote/base/external.asy
-2020/03/03 | 21459 | graphics/asymptote/base/feynman.asy
-2020/03/03 | 14311 | graphics/asymptote/base/flowchart.asy
-2020/03/03 | 35 | graphics/asymptote/base/fontsize.asy
-2020/03/03 | 320533 | graphics/asymptote/base/geometry.asy
-2020/03/03 | 68543 | graphics/asymptote/base/graph3.asy
-2020/03/03 | 63886 | graphics/asymptote/base/graph.asy
-2020/03/03 | 314 | graphics/asymptote/base/graph_settings.asy
-2020/03/03 | 7422 | graphics/asymptote/base/graph_splinetype.asy
-2020/03/03 | 13476 | graphics/asymptote/base/grid3.asy
-2020/03/03 | 3944 | graphics/asymptote/base/interpolate.asy
-2020/03/03 | 2465 | graphics/asymptote/base/labelpath3.asy
-2020/03/03 | 729 | graphics/asymptote/base/labelpath.asy
-2020/03/03 | 61 | graphics/asymptote/base/latin1.asy
-2020/03/03 | 24659 | graphics/asymptote/base/lmfit.asy
-2020/03/03 | 7302 | graphics/asymptote/base/markers.asy
-2020/03/03 | 11030 | graphics/asymptote/base/math.asy
-2020/03/03 | 253 | graphics/asymptote/base/metapost.asy
-2020/03/03 | 39 | graphics/asymptote/base/nopapersize.ps
-2020/03/03 | 3279 | graphics/asymptote/base/obj.asy
-2020/03/03 | 15192 | graphics/asymptote/base/ode.asy
-2020/03/03 | 14801 | graphics/asymptote/base/palette.asy
-2020/03/03 | 2615 | graphics/asymptote/base/patterns.asy
-2020/03/03 | 1259 | graphics/asymptote/base/plain_arcs.asy
-2020/03/03 | 19561 | graphics/asymptote/base/plain_arrows.asy
-2020/03/03 | 7193 | graphics/asymptote/base/plain.asy
-2020/03/03 | 21005 | graphics/asymptote/base/plain_bounds.asy
-2020/03/03 | 4128 | graphics/asymptote/base/plain_boxes.asy
-2020/03/03 | 3716 | graphics/asymptote/base/plain_constants.asy
-2020/03/03 | 2187 | graphics/asymptote/base/plain_debugger.asy
-2020/03/03 | 6292 | graphics/asymptote/base/plain_filldraw.asy
-2020/03/03 | 16578 | graphics/asymptote/base/plain_Label.asy
-2020/03/03 | 2552 | graphics/asymptote/base/plain_margins.asy
-2020/03/03 | 11320 | graphics/asymptote/base/plain_markers.asy
-2020/03/03 | 9309 | graphics/asymptote/base/plain_paths.asy
-2020/03/03 | 8661 | graphics/asymptote/base/plain_pens.asy
-2020/03/03 | 46927 | graphics/asymptote/base/plain_picture.asy
-2020/03/03 | 6285 | graphics/asymptote/base/plain_prethree.asy
-2020/03/03 | 5760 | graphics/asymptote/base/plain_scaling.asy
-2020/03/03 | 3992 | graphics/asymptote/base/plain_shipout.asy
-2020/03/03 | 6169 | graphics/asymptote/base/plain_strings.asy
-2020/03/03 | 358 | graphics/asymptote/base/pstoedit.asy
-2020/03/03 | 5003 | graphics/asymptote/base/rational.asy
-2020/03/03 | 9399 | graphics/asymptote/base/rationalSimplex.asy
-2020/03/03 | 657 | graphics/asymptote/base/reload.js
-2020/03/03 | 289 | graphics/asymptote/base/res/notes.txt
-2020/03/03 | 3430 | graphics/asymptote/base/roundedpath.asy
-2020/03/03 | 5277 | graphics/asymptote/base/shaders/fragment.glsl
-2020/03/03 | 630 | graphics/asymptote/base/shaders/vertex.glsl
-2020/03/03 | 8290 | graphics/asymptote/base/simplex.asy
-2020/03/03 | 608 | graphics/asymptote/base/size10.asy
-2020/03/03 | 600 | graphics/asymptote/base/size11.asy
-2020/03/03 | 16138 | graphics/asymptote/base/slide.asy
-2020/03/03 | 2068 | graphics/asymptote/base/slopefield.asy
-2020/03/03 | 56037 | graphics/asymptote/base/smoothcontour3.asy
-2020/03/03 | 12035 | graphics/asymptote/base/solids.asy
-2020/03/03 | 7307 | graphics/asymptote/base/stats.asy
-2020/03/03 | 22971 | graphics/asymptote/base/syzygy.asy
-2020/03/03 | 2277 | graphics/asymptote/base/texcolors.asy
-2020/03/03 | 23791 | graphics/asymptote/base/three_arrows.asy
-2020/03/03 | 85787 | graphics/asymptote/base/three.asy
-2020/03/03 | 3728 | graphics/asymptote/base/three_light.asy
-2020/03/03 | 2764 | graphics/asymptote/base/three_margins.asy
-2020/03/03 | 71605 | graphics/asymptote/base/three_surface.asy
-2020/03/03 | 5676 | graphics/asymptote/base/three_tube.asy
-2020/03/03 | 1375 | graphics/asymptote/base/tree.asy
-2020/03/03 | 5797 | graphics/asymptote/base/trembling.asy
-2020/03/03 | 4991 | graphics/asymptote/base/tube.asy
-2020/03/03 | 51 | graphics/asymptote/base/unicode.asy
-2020/03/03 | 60556 | graphics/asymptote/base/webgl/asygl.js
-2020/03/03 | 4812 | graphics/asymptote/base/x11colors.asy
-2020/03/03 | 3670 | graphics/asymptote/bbox3.h
-2020/03/03 | 4503 | graphics/asymptote/bbox.h
-2020/03/03 | 1851 | graphics/asymptote/beziercurve.cc
-2020/03/03 | 1207 | graphics/asymptote/beziercurve.h
-2020/03/03 | 32262 | graphics/asymptote/bezierpatch.cc
-2020/03/03 | 5273 | graphics/asymptote/bezierpatch.h
+2020/03/04 | 472 | graphics/asymptote/absyn.cc
+2020/03/04 | 1030 | graphics/asymptote/absyn.h
+2020/03/04 | 3309 | graphics/asymptote/access.cc
+2020/03/04 | 2976 | graphics/asymptote/access.h
+2020/03/04 | 2278 | graphics/asymptote/align.h
+2020/03/04 | 891 | graphics/asymptote/angle.h
+2020/03/04 | 18591 | graphics/asymptote/application.cc
+2020/03/04 | 9094 | graphics/asymptote/application.h
+2020/03/04 | 4624 | graphics/asymptote/array.cc
+2020/03/04 | 1951 | graphics/asymptote/array.h
+2020/03/04 | 14023 | graphics/asymptote/arrayop.h
+2020/03/04 | 11541 | graphics/asymptote/aspy.py
+2020/03/04 | 4286 | graphics/asymptote/asy.ico
+2020/03/04 | 17785 | graphics/asymptote/asy-keywords.el
+2020/03/04 | 206710 | graphics/asymptote/asy.list
+2020/03/04 | 1612 | graphics/asymptote/asy-list.pl
+2020/03/04 | 6300 | graphics/asymptote/asymptote.nsi
+2020/03/04 | 2937 | graphics/asymptote/asymptote.spec
+2020/03/04 | 770 | graphics/asymptote/asy.rc
+2020/03/04 | 34 | graphics/asymptote/autogen.sh
+2020/03/04 | 12534 | graphics/asymptote/ax_pthread.m4
+2020/03/04 | 42 | graphics/asymptote/base/animate.asy
+2020/03/04 | 5254 | graphics/asymptote/base/animation.asy
+2020/03/04 | 578 | graphics/asymptote/base/annotate.asy
+2020/03/04 | 99 | graphics/asymptote/base/asy_filetype.vim
+2020/03/04 | 268 | graphics/asymptote/base/asy-init.el
+2020/03/04 | 8243 | graphics/asymptote/base/asy-kate.sh
+2020/03/04 | 71223 | graphics/asymptote/base/asy-mode.el
+2020/03/04 | 1276 | graphics/asymptote/base/asymptote.py
+2020/03/04 | 8870 | graphics/asymptote/base/asy.vim
+2020/03/04 | 51 | graphics/asymptote/base/babel.asy
+2020/03/04 | 9566 | graphics/asymptote/base/bezulate.asy
+2020/03/04 | 11482 | graphics/asymptote/base/binarytree.asy
+2020/03/04 | 5440 | graphics/asymptote/base/bsp.asy
+2020/03/04 | 10830 | graphics/asymptote/base/CAD.asy
+2020/03/04 | 174673 | graphics/asymptote/base/colormap.asy
+2020/03/04 | 14660 | graphics/asymptote/base/contour3.asy
+2020/03/04 | 20105 | graphics/asymptote/base/contour.asy
+2020/03/04 | 2109 | graphics/asymptote/base/drawtree.asy
+2020/03/04 | 1183 | graphics/asymptote/base/embed.asy
+2020/03/04 | 1122 | graphics/asymptote/base/external.asy
+2020/03/04 | 21459 | graphics/asymptote/base/feynman.asy
+2020/03/04 | 14311 | graphics/asymptote/base/flowchart.asy
+2020/03/04 | 35 | graphics/asymptote/base/fontsize.asy
+2020/03/04 | 320533 | graphics/asymptote/base/geometry.asy
+2020/03/04 | 68543 | graphics/asymptote/base/graph3.asy
+2020/03/04 | 63886 | graphics/asymptote/base/graph.asy
+2020/03/04 | 314 | graphics/asymptote/base/graph_settings.asy
+2020/03/04 | 7422 | graphics/asymptote/base/graph_splinetype.asy
+2020/03/04 | 13476 | graphics/asymptote/base/grid3.asy
+2020/03/04 | 3944 | graphics/asymptote/base/interpolate.asy
+2020/03/04 | 2465 | graphics/asymptote/base/labelpath3.asy
+2020/03/04 | 729 | graphics/asymptote/base/labelpath.asy
+2020/03/04 | 61 | graphics/asymptote/base/latin1.asy
+2020/03/04 | 24659 | graphics/asymptote/base/lmfit.asy
+2020/03/04 | 7302 | graphics/asymptote/base/markers.asy
+2020/03/04 | 11030 | graphics/asymptote/base/math.asy
+2020/03/04 | 253 | graphics/asymptote/base/metapost.asy
+2020/03/04 | 39 | graphics/asymptote/base/nopapersize.ps
+2020/03/04 | 3279 | graphics/asymptote/base/obj.asy
+2020/03/04 | 15192 | graphics/asymptote/base/ode.asy
+2020/03/04 | 14801 | graphics/asymptote/base/palette.asy
+2020/03/04 | 2615 | graphics/asymptote/base/patterns.asy
+2020/03/04 | 1259 | graphics/asymptote/base/plain_arcs.asy
+2020/03/04 | 19561 | graphics/asymptote/base/plain_arrows.asy
+2020/03/04 | 7193 | graphics/asymptote/base/plain.asy
+2020/03/04 | 21005 | graphics/asymptote/base/plain_bounds.asy
+2020/03/04 | 4128 | graphics/asymptote/base/plain_boxes.asy
+2020/03/04 | 3716 | graphics/asymptote/base/plain_constants.asy
+2020/03/04 | 2187 | graphics/asymptote/base/plain_debugger.asy
+2020/03/04 | 6292 | graphics/asymptote/base/plain_filldraw.asy
+2020/03/04 | 16578 | graphics/asymptote/base/plain_Label.asy
+2020/03/04 | 2552 | graphics/asymptote/base/plain_margins.asy
+2020/03/04 | 11320 | graphics/asymptote/base/plain_markers.asy
+2020/03/04 | 9309 | graphics/asymptote/base/plain_paths.asy
+2020/03/04 | 8661 | graphics/asymptote/base/plain_pens.asy
+2020/03/04 | 46927 | graphics/asymptote/base/plain_picture.asy
+2020/03/04 | 6285 | graphics/asymptote/base/plain_prethree.asy
+2020/03/04 | 5760 | graphics/asymptote/base/plain_scaling.asy
+2020/03/04 | 3992 | graphics/asymptote/base/plain_shipout.asy
+2020/03/04 | 6169 | graphics/asymptote/base/plain_strings.asy
+2020/03/04 | 358 | graphics/asymptote/base/pstoedit.asy
+2020/03/04 | 5003 | graphics/asymptote/base/rational.asy
+2020/03/04 | 9399 | graphics/asymptote/base/rationalSimplex.asy
+2020/03/04 | 657 | graphics/asymptote/base/reload.js
+2020/03/04 | 289 | graphics/asymptote/base/res/notes.txt
+2020/03/04 | 3430 | graphics/asymptote/base/roundedpath.asy
+2020/03/04 | 5277 | graphics/asymptote/base/shaders/fragment.glsl
+2020/03/04 | 630 | graphics/asymptote/base/shaders/vertex.glsl
+2020/03/04 | 8290 | graphics/asymptote/base/simplex.asy
+2020/03/04 | 608 | graphics/asymptote/base/size10.asy
+2020/03/04 | 600 | graphics/asymptote/base/size11.asy
+2020/03/04 | 16138 | graphics/asymptote/base/slide.asy
+2020/03/04 | 2068 | graphics/asymptote/base/slopefield.asy
+2020/03/04 | 56037 | graphics/asymptote/base/smoothcontour3.asy
+2020/03/04 | 12035 | graphics/asymptote/base/solids.asy
+2020/03/04 | 7307 | graphics/asymptote/base/stats.asy
+2020/03/04 | 22971 | graphics/asymptote/base/syzygy.asy
+2020/03/04 | 2277 | graphics/asymptote/base/texcolors.asy
+2020/03/04 | 23791 | graphics/asymptote/base/three_arrows.asy
+2020/03/04 | 85787 | graphics/asymptote/base/three.asy
+2020/03/04 | 3728 | graphics/asymptote/base/three_light.asy
+2020/03/04 | 2764 | graphics/asymptote/base/three_margins.asy
+2020/03/04 | 71605 | graphics/asymptote/base/three_surface.asy
+2020/03/04 | 5886 | graphics/asymptote/base/three_tube.asy
+2020/03/04 | 1375 | graphics/asymptote/base/tree.asy
+2020/03/04 | 5797 | graphics/asymptote/base/trembling.asy
+2020/03/04 | 4991 | graphics/asymptote/base/tube.asy
+2020/03/04 | 51 | graphics/asymptote/base/unicode.asy
+2020/03/04 | 60556 | graphics/asymptote/base/webgl/asygl.js
+2020/03/04 | 4812 | graphics/asymptote/base/x11colors.asy
+2020/03/04 | 3670 | graphics/asymptote/bbox3.h
+2020/03/04 | 4503 | graphics/asymptote/bbox.h
+2020/03/04 | 1851 | graphics/asymptote/beziercurve.cc
+2020/03/04 | 1207 | graphics/asymptote/beziercurve.h
+2020/03/04 | 32262 | graphics/asymptote/bezierpatch.cc
+2020/03/04 | 5273 | graphics/asymptote/bezierpatch.h
2018/02/02 | 3002325 | graphics/asymptote/binaries/i386-windows/cygwin1.dll
-2020/03/03 | 2505 | graphics/asymptote/binaries/i386-windows/README
-2020/03/03 | 7598080 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
+2020/03/04 | 2505 | graphics/asymptote/binaries/i386-windows/README
+2020/03/04 | 7598080 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
2018/04/05 | 288 | graphics/asymptote/binaries/i386-windows/texlive/README
2018/11/08 | 3339661 | graphics/asymptote/binaries/x86_64-windows/cygwin1.dll
-2020/03/03 | 2505 | graphics/asymptote/binaries/x86_64-windows/README
-2020/03/03 | 7587328 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
+2020/03/04 | 2505 | graphics/asymptote/binaries/x86_64-windows/README
+2020/03/04 | 7587328 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
2019/10/11 | 288 | graphics/asymptote/binaries/x86_64-windows/texlive/README
-2020/03/03 | 255 | graphics/asymptote/BUGS
-2020/03/03 | 1229 | graphics/asymptote/build-scripts/build-asygl
-2020/03/03 | 2482 | graphics/asymptote/build-scripts/build-asymptote
-2020/03/03 | 3449 | graphics/asymptote/build-scripts/build-asymptote.dos
-2020/03/03 | 1907 | graphics/asymptote/build-scripts/HOWTO-MSWindows
-2020/03/03 | 288 | graphics/asymptote/build-scripts/README-binaries
-2020/03/03 | 31244 | graphics/asymptote/builtin.cc
-2020/03/03 | 1637 | graphics/asymptote/builtin.h
-2020/03/03 | 1151 | graphics/asymptote/callable.cc
-2020/03/03 | 1642 | graphics/asymptote/callable.h
-2020/03/03 | 1191 | graphics/asymptote/camperror.cc
-2020/03/03 | 818 | graphics/asymptote/camperror.h
-2020/03/03 | 13339 | graphics/asymptote/camp.l
-2020/03/03 | 127885 | graphics/asymptote/camp.tab.cc
-2020/03/03 | 4089 | graphics/asymptote/camp.tab.h
-2020/03/03 | 20029 | graphics/asymptote/camp.y
-2020/03/03 | 4687 | graphics/asymptote/castop.h
-2020/03/03 | 1399445 | graphics/asymptote/ChangeLog
-2020/03/03 | 7808 | graphics/asymptote/coder.cc
-2020/03/03 | 11658 | graphics/asymptote/coder.h
-2020/03/03 | 1126 | graphics/asymptote/coenv.cc
-2020/03/03 | 908 | graphics/asymptote/coenv.h
-2020/03/03 | 1610 | graphics/asymptote/common.h
-2020/03/03 | 48441 | graphics/asymptote/config.guess
-2020/03/03 | 6871 | graphics/asymptote/config.h.in
-2020/03/03 | 31609 | graphics/asymptote/config.sub
-2020/03/03 | 285989 | graphics/asymptote/configure
-2020/03/03 | 14773 | graphics/asymptote/configure.ac
-2020/03/03 | 3673 | graphics/asymptote/constructor.cc
-2020/03/03 | 20866 | graphics/asymptote/dec.cc
-2020/03/03 | 15845 | graphics/asymptote/dec.h
-2020/03/03 | 5897 | graphics/asymptote/Delaunay.cc
-2020/03/03 | 384 | graphics/asymptote/Delaunay.h
-2020/03/03 | 8045 | graphics/asymptote/doc/asy.1
-2020/03/03 | 1005 | graphics/asymptote/doc/asy.1.begin
-2020/03/03 | 333 | graphics/asymptote/doc/asy.1.end
-2020/03/03 | 2800 | graphics/asymptote/doc/asycolors.sty
-2020/03/03 | 18126 | graphics/asymptote/doc/asy-latex.dtx
-2020/03/03 | 194590 | graphics/asymptote/doc/asy-latex.pdf
-2020/03/03 | 1293632 | graphics/asymptote/doc/asymptote.pdf
-2020/03/03 | 9836 | graphics/asymptote/doc/asymptote.sty
-2020/03/03 | 385350 | graphics/asymptote/doc/asymptote.texi
-2020/03/03 | 121144 | graphics/asymptote/doc/asyRefCard.pdf
-2020/03/03 | 20051 | graphics/asymptote/doc/asyRefCard.tex
-2020/03/03 | 246 | graphics/asymptote/doc/axis3.asy
-2020/03/03 | 416 | graphics/asymptote/doc/bezier2.asy
-2020/03/03 | 81 | graphics/asymptote/doc/bezier.asy
-2020/03/03 | 234 | graphics/asymptote/doc/beziercurve.asy
-2020/03/03 | 41 | graphics/asymptote/doc/bigdiagonal.asy
-2020/03/03 | 306 | graphics/asymptote/doc/binarytreetest.asy
-2020/03/03 | 677 | graphics/asymptote/doc/Bode.asy
-2020/03/03 | 524 | graphics/asymptote/doc/brokenaxis.asy
-2020/03/03 | 1391 | graphics/asymptote/doc/CAD1.asy
-2020/03/03 | 167756 | graphics/asymptote/doc/CAD.pdf
-2020/03/03 | 10196 | graphics/asymptote/doc/CAD.tex
-2020/03/03 | 492 | graphics/asymptote/doc/CDlabel.asy
-2020/03/03 | 4348 | graphics/asymptote/doc/colo-asy.tex
-2020/03/03 | 49 | graphics/asymptote/doc/colons.asy
-2020/03/03 | 1620 | graphics/asymptote/doc/colors.asy
-2020/03/03 | 243 | graphics/asymptote/doc/cube.asy
-2020/03/03 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
-2020/03/03 | 218 | graphics/asymptote/doc/datagraph.asy
-2020/03/03 | 24 | graphics/asymptote/doc/diagonal.asy
-2020/03/03 | 2882 | graphics/asymptote/doc/diatom.asy
-2020/03/03 | 4067 | graphics/asymptote/doc/diatom.csv
-2020/03/03 | 49 | graphics/asymptote/doc/dots.asy
-2020/03/03 | 1051 | graphics/asymptote/doc/eetomumu.asy
-2020/03/03 | 2039 | graphics/asymptote/doc/elliptic.asy
-2020/03/03 | 912 | graphics/asymptote/doc/errorbars.asy
-2020/03/03 | 202 | graphics/asymptote/doc/exp.asy
-2020/03/03 | 343 | graphics/asymptote/doc/externalprc.tex
-2020/03/03 | 19597 | graphics/asymptote/doc/external-proposal.html
-2020/03/03 | 25137 | graphics/asymptote/doc/extra/intro.asy
-2020/03/03 | 40764 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
-2020/03/03 | 63140 | graphics/asymptote/doc/FAQ/asy-faq.info
-2020/03/03 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
-2020/03/03 | 13663 | graphics/asymptote/doc/FAQ/install-sh
-2020/03/03 | 1000 | graphics/asymptote/doc/FAQ/Makefile
-2020/03/03 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
-2020/03/03 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
-2020/03/03 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
-2020/03/03 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
-2020/03/03 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
-2020/03/03 | 238 | graphics/asymptote/doc/filegraph.asy
-2020/03/03 | 26 | graphics/asymptote/doc/filegraph.dat
-2020/03/03 | 604 | graphics/asymptote/doc/flow.asy
-2020/03/03 | 862 | graphics/asymptote/doc/flowchartdemo.asy
-2020/03/03 | 464 | graphics/asymptote/doc/GaussianSurface.asy
-2020/03/03 | 376 | graphics/asymptote/doc/generalaxis3.asy
-2020/03/03 | 277 | graphics/asymptote/doc/generalaxis.asy
-2020/03/03 | 754 | graphics/asymptote/doc/graphmarkers.asy
-2020/03/03 | 426 | graphics/asymptote/doc/grid3xyz.asy
-2020/03/03 | 279 | graphics/asymptote/doc/hatch.asy
-2020/03/03 | 423 | graphics/asymptote/doc/helix.asy
-2020/03/03 | 330 | graphics/asymptote/doc/HermiteSpline.asy
-2020/03/03 | 441 | graphics/asymptote/doc/histogram.asy
-2020/03/03 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
-2020/03/03 | 500 | graphics/asymptote/doc/Hobbydir.asy
-2020/03/03 | 380 | graphics/asymptote/doc/icon.asy
-2020/03/03 | 401 | graphics/asymptote/doc/image.asy
-2020/03/03 | 872 | graphics/asymptote/doc/imagecontour.asy
-2020/03/03 | 13663 | graphics/asymptote/doc/install-sh
-2020/03/03 | 357 | graphics/asymptote/doc/irregularcontour.asy
-2020/03/03 | 442 | graphics/asymptote/doc/join3.asy
-2020/03/03 | 261 | graphics/asymptote/doc/join.asy
-2020/03/03 | 417 | graphics/asymptote/doc/knots.asy
-2020/03/03 | 121 | graphics/asymptote/doc/labelsquare.asy
-2020/03/03 | 144 | graphics/asymptote/doc/latexmkrc
-2020/03/03 | 150 | graphics/asymptote/doc/latexmkrc_asydir
-2020/03/03 | 3106 | graphics/asymptote/doc/latexusage.tex
-2020/03/03 | 1025 | graphics/asymptote/doc/leastsquares.asy
-2020/03/03 | 6318 | graphics/asymptote/doc/leastsquares.dat
-2020/03/03 | 410 | graphics/asymptote/doc/legend.asy
-2020/03/03 | 366 | graphics/asymptote/doc/lineargraph0.asy
-2020/03/03 | 373 | graphics/asymptote/doc/lineargraph.asy
-2020/03/03 | 416 | graphics/asymptote/doc/linetype.asy
-2020/03/03 | 423 | graphics/asymptote/doc/log2graph.asy
-2020/03/03 | 262 | graphics/asymptote/doc/loggraph.asy
-2020/03/03 | 382 | graphics/asymptote/doc/loggrid.asy
-2020/03/03 | 480 | graphics/asymptote/doc/logimage.asy
-2020/03/03 | 619 | graphics/asymptote/doc/logo.asy
-2020/03/03 | 314 | graphics/asymptote/doc/logticks.asy
-2020/03/03 | 3023 | graphics/asymptote/doc/Makefile.in
-2020/03/03 | 293 | graphics/asymptote/doc/makepen.asy
-2020/03/03 | 2653 | graphics/asymptote/doc/markers1.asy
-2020/03/03 | 877 | graphics/asymptote/doc/markers2.asy
-2020/03/03 | 288 | graphics/asymptote/doc/mexicanhat.asy
-2020/03/03 | 374 | graphics/asymptote/doc/monthaxis.asy
-2020/03/03 | 458 | graphics/asymptote/doc/multicontour.asy
-2020/03/03 | 3497 | graphics/asymptote/doc/ocg.sty
-2020/03/03 | 115 | graphics/asymptote/doc/onecontour.asy
-2020/03/03 | 240 | graphics/asymptote/doc/parametricgraph.asy
-2020/03/03 | 498 | graphics/asymptote/doc/penfunctionimage.asy
-2020/03/03 | 219 | graphics/asymptote/doc/penimage.asy
-2020/03/03 | 2771 | graphics/asymptote/doc/pixel.pdf
-2020/03/03 | 354 | graphics/asymptote/doc/planes.asy
-2020/03/03 | 462052 | graphics/asymptote/doc/png/asymptote.info
-2020/03/03 | 1469 | graphics/asymptote/doc/png/Makefile.in
-2020/03/03 | 49 | graphics/asymptote/doc/quartercircle.asy
-2020/03/03 | 354 | graphics/asymptote/doc/reloadpdf.tex
-2020/03/03 | 157 | graphics/asymptote/doc/saddle.asy
-2020/03/03 | 355 | graphics/asymptote/doc/scaledgraph.asy
-2020/03/03 | 821 | graphics/asymptote/doc/secondaryaxis.asy
-2020/03/03 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
-2020/03/03 | 256 | graphics/asymptote/doc/shadedtiling.asy
-2020/03/03 | 154 | graphics/asymptote/doc/slopefield1.asy
-2020/03/03 | 52 | graphics/asymptote/doc/square.asy
-2020/03/03 | 341 | graphics/asymptote/doc/subpictures.asy
-2020/03/03 | 123 | graphics/asymptote/doc/superpath.asy
-2020/03/03 | 76904 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
-2020/03/03 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
-2020/03/03 | 390 | graphics/asymptote/doc/tile.asy
-2020/03/03 | 396 | graphics/asymptote/doc/triangulate.asy
-2020/03/03 | 186 | graphics/asymptote/doc/unitcircle3.asy
-2020/03/03 | 147 | graphics/asymptote/doc/vectorfield.asy
-2020/03/03 | 1746 | graphics/asymptote/doc/westnile.asy
-2020/03/03 | 4727 | graphics/asymptote/doc/westnile.csv
-2020/03/03 | 880 | graphics/asymptote/doc/xasy.1x
-2020/03/03 | 1878 | graphics/asymptote/drawclipbegin.h
-2020/03/03 | 1213 | graphics/asymptote/drawclipend.h
-2020/03/03 | 11384 | graphics/asymptote/drawelement.h
-2020/03/03 | 4619 | graphics/asymptote/drawfill.cc
-2020/03/03 | 6570 | graphics/asymptote/drawfill.h
-2020/03/03 | 496 | graphics/asymptote/drawgrestore.h
-2020/03/03 | 2924 | graphics/asymptote/drawgroup.h
-2020/03/03 | 466 | graphics/asymptote/drawgsave.h
-2020/03/03 | 3042 | graphics/asymptote/drawimage.h
-2020/03/03 | 6865 | graphics/asymptote/drawlabel.cc
-2020/03/03 | 2163 | graphics/asymptote/drawlabel.h
-2020/03/03 | 773 | graphics/asymptote/drawlayer.h
-2020/03/03 | 5949 | graphics/asymptote/drawpath3.cc
-2020/03/03 | 5925 | graphics/asymptote/drawpath3.h
-2020/03/03 | 3522 | graphics/asymptote/drawpath.cc
-2020/03/03 | 674 | graphics/asymptote/drawpath.h
-2020/03/03 | 23632 | graphics/asymptote/drawsurface.cc
-2020/03/03 | 20093 | graphics/asymptote/drawsurface.h
-2020/03/03 | 1279 | graphics/asymptote/drawverbatim.h
-2020/03/03 | 20738 | graphics/asymptote/entry.cc
-2020/03/03 | 14795 | graphics/asymptote/entry.h
-2020/03/03 | 5465 | graphics/asymptote/env.cc
-2020/03/03 | 1142 | graphics/asymptote/envcompleter.cc
-2020/03/03 | 845 | graphics/asymptote/envcompleter.h
-2020/03/03 | 4575 | graphics/asymptote/env.h
-2020/03/03 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
-2020/03/03 | 1753 | graphics/asymptote/errormsg.cc
-2020/03/03 | 5098 | graphics/asymptote/errormsg.h
-2020/03/03 | 9251 | graphics/asymptote/errors
-2020/03/03 | 6911 | graphics/asymptote/errortest.asy
-2020/03/03 | 657 | graphics/asymptote/examples/100d.views
-2020/03/03 | 309 | graphics/asymptote/examples/1overx.asy
-2020/03/03 | 4158 | graphics/asymptote/examples/advection.asy
-2020/03/03 | 245 | graphics/asymptote/examples/alignbox.asy
-2020/03/03 | 2832 | graphics/asymptote/examples/alignedaxis.asy
-2020/03/03 | 946 | graphics/asymptote/examples/animations/cube.asy
-2020/03/03 | 160672 | graphics/asymptote/examples/animations/dice.u3d
-2020/03/03 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
-2020/03/03 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
-2020/03/03 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
-2020/03/03 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
-2020/03/03 | 414 | graphics/asymptote/examples/animations/glmovie.asy
-2020/03/03 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
-2020/03/03 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
-2020/03/03 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
-2020/03/03 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
-2020/03/03 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
-2020/03/03 | 856 | graphics/asymptote/examples/animations/sphere.asy
-2020/03/03 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
-2020/03/03 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
-2020/03/03 | 1120 | graphics/asymptote/examples/animations/wheel.asy
-2020/03/03 | 236 | graphics/asymptote/examples/annotation.asy
-2020/03/03 | 1240 | graphics/asymptote/examples/arrows3.asy
-2020/03/03 | 497 | graphics/asymptote/examples/bars3.asy
-2020/03/03 | 1033 | graphics/asymptote/examples/basealign.asy
-2020/03/03 | 395 | graphics/asymptote/examples/BezierPatch.asy
-2020/03/03 | 581 | graphics/asymptote/examples/BezierSaddle.asy
-2020/03/03 | 1526 | graphics/asymptote/examples/BezierSurface.asy
-2020/03/03 | 199 | graphics/asymptote/examples/BezierTriangle.asy
-2020/03/03 | 154 | graphics/asymptote/examples/billboard.asy
-2020/03/03 | 513 | graphics/asymptote/examples/buildcycle.asy
-2020/03/03 | 233 | graphics/asymptote/examples/cardioid.asy
-2020/03/03 | 485 | graphics/asymptote/examples/cards.asy
-2020/03/03 | 691 | graphics/asymptote/examples/centroidfg.asy
-2020/03/03 | 322 | graphics/asymptote/examples/cheese.asy
-2020/03/03 | 576 | graphics/asymptote/examples/circles.asy
-2020/03/03 | 228 | graphics/asymptote/examples/circumcircle.asy
-2020/03/03 | 762 | graphics/asymptote/examples/clockarray.asy
-2020/03/03 | 264 | graphics/asymptote/examples/coag.asy
-2020/03/03 | 424 | graphics/asymptote/examples/colorpatch.asy
-2020/03/03 | 465 | graphics/asymptote/examples/colorplanes.asy
-2020/03/03 | 739 | graphics/asymptote/examples/condor.asy
-2020/03/03 | 445 | graphics/asymptote/examples/cones.asy
-2020/03/03 | 1780 | graphics/asymptote/examples/conicurv.asy
-2020/03/03 | 255 | graphics/asymptote/examples/contextfonts.asy
-2020/03/03 | 778 | graphics/asymptote/examples/controlsystem.asy
-2020/03/03 | 123 | graphics/asymptote/examples/Coons.asy
-2020/03/03 | 235 | graphics/asymptote/examples/cos2theta.asy
-2020/03/03 | 582 | graphics/asymptote/examples/cos3.asy
-2020/03/03 | 461 | graphics/asymptote/examples/cosaddition.asy
-2020/03/03 | 5740 | graphics/asymptote/examples/cpkcolors.asy
-2020/03/03 | 573 | graphics/asymptote/examples/curvedlabel3.asy
-2020/03/03 | 177 | graphics/asymptote/examples/curvedlabel.asy
-2020/03/03 | 1835 | graphics/asymptote/examples/cyclohexane.asy
-2020/03/03 | 352 | graphics/asymptote/examples/cylinder.asy
-2020/03/03 | 506 | graphics/asymptote/examples/delu.asy
-2020/03/03 | 521 | graphics/asymptote/examples/dimension.asy
-2020/03/03 | 1216 | graphics/asymptote/examples/dragon.asy
-2020/03/03 | 1326 | graphics/asymptote/examples/electromagnetic.asy
-2020/03/03 | 325 | graphics/asymptote/examples/elevation.asy
-2020/03/03 | 398 | graphics/asymptote/examples/epix.asy
-2020/03/03 | 242 | graphics/asymptote/examples/equilateral.asy
-2020/03/03 | 549 | graphics/asymptote/examples/equilchord.asy
-2020/03/03 | 579 | graphics/asymptote/examples/exp3.asy
-2020/03/03 | 519 | graphics/asymptote/examples/extrudedcontour.asy
-2020/03/03 | 498 | graphics/asymptote/examples/fano.asy
-2020/03/03 | 972 | graphics/asymptote/examples/fequlogo.asy
-2020/03/03 | 727 | graphics/asymptote/examples/fermi.asy
-2020/03/03 | 971 | graphics/asymptote/examples/filesurface.asy
-2020/03/03 | 5543 | graphics/asymptote/examples/filesurface.dat
-2020/03/03 | 574 | graphics/asymptote/examples/fillcontour.asy
-2020/03/03 | 4203 | graphics/asymptote/examples/fin.asy
-2020/03/03 | 710 | graphics/asymptote/examples/fjortoft.asy
-2020/03/03 | 581 | graphics/asymptote/examples/floatingdisk.asy
-2020/03/03 | 502 | graphics/asymptote/examples/floor.asy
-2020/03/03 | 683 | graphics/asymptote/examples/fractaltree.asy
-2020/03/03 | 1185 | graphics/asymptote/examples/functionshading.asy
-2020/03/03 | 499 | graphics/asymptote/examples/galleon.asy
-2020/03/03 | 714 | graphics/asymptote/examples/gamma3.asy
-2020/03/03 | 440 | graphics/asymptote/examples/gamma.asy
-2020/03/03 | 679 | graphics/asymptote/examples/genusthree.asy
-2020/03/03 | 1136 | graphics/asymptote/examples/genustwo.asy
-2020/03/03 | 384 | graphics/asymptote/examples/Gouraud.asy
-2020/03/03 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
-2020/03/03 | 76 | graphics/asymptote/examples/grid.asy
-2020/03/03 | 459 | graphics/asymptote/examples/hierarchy.asy
-2020/03/03 | 308 | graphics/asymptote/examples/hyperboloid.asy
-2020/03/03 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
-2020/03/03 | 1140 | graphics/asymptote/examples/imagehistogram.asy
-2020/03/03 | 610 | graphics/asymptote/examples/impact.asy
-2020/03/03 | 605 | graphics/asymptote/examples/integraltest.asy
-2020/03/03 | 4825 | graphics/asymptote/examples/interpolate1.asy
-2020/03/03 | 291 | graphics/asymptote/examples/jump.asy
-2020/03/03 | 1309 | graphics/asymptote/examples/Klein.asy
-2020/03/03 | 182 | graphics/asymptote/examples/label3.asy
-2020/03/03 | 196 | graphics/asymptote/examples/label3ribbon.asy
-2020/03/03 | 187 | graphics/asymptote/examples/label3solid.asy
-2020/03/03 | 546 | graphics/asymptote/examples/label3zoom.asy
-2020/03/03 | 264 | graphics/asymptote/examples/labelbox.asy
-2020/03/03 | 1114 | graphics/asymptote/examples/laserlattice.asy
-2020/03/03 | 136 | graphics/asymptote/examples/latticeshading.asy
-2020/03/03 | 688 | graphics/asymptote/examples/layers.asy
-2020/03/03 | 460 | graphics/asymptote/examples/lever.asy
-2020/03/03 | 654 | graphics/asymptote/examples/limit.asy
-2020/03/03 | 1908 | graphics/asymptote/examples/linearregression.asy
-2020/03/03 | 168 | graphics/asymptote/examples/lines.asy
-2020/03/03 | 980 | graphics/asymptote/examples/lmfit1.asy
-2020/03/03 | 206 | graphics/asymptote/examples/log.asy
-2020/03/03 | 349 | graphics/asymptote/examples/logdown.asy
-2020/03/03 | 1231 | graphics/asymptote/examples/logo3.asy
-2020/03/03 | 196 | graphics/asymptote/examples/lowint.asy
-2020/03/03 | 659 | graphics/asymptote/examples/lowupint.asy
-2020/03/03 | 479 | graphics/asymptote/examples/magnetic.asy
-2020/03/03 | 833 | graphics/asymptote/examples/markregular.asy
-2020/03/03 | 1950 | graphics/asymptote/examples/mergeExample.asy
-2020/03/03 | 5258 | graphics/asymptote/examples/mosaic.asy
-2020/03/03 | 2512 | graphics/asymptote/examples/mosquito.asy
-2020/03/03 | 1569 | graphics/asymptote/examples/near_earth.asy
-2020/03/03 | 649 | graphics/asymptote/examples/NURBScurve.asy
-2020/03/03 | 1020 | graphics/asymptote/examples/NURBSsphere.asy
-2020/03/03 | 1461 | graphics/asymptote/examples/NURBSsurface.asy
-2020/03/03 | 1251 | graphics/asymptote/examples/odetest.asy
-2020/03/03 | 309 | graphics/asymptote/examples/oneoverx.asy
-2020/03/03 | 861 | graphics/asymptote/examples/orthocenter.asy
-2020/03/03 | 254 | graphics/asymptote/examples/parametricelevation.asy
-2020/03/03 | 407 | graphics/asymptote/examples/parametricsurface.asy
-2020/03/03 | 711 | graphics/asymptote/examples/partialsurface.asy
-2020/03/03 | 1055 | graphics/asymptote/examples/partitionExample.asy
-2020/03/03 | 419 | graphics/asymptote/examples/pathintersectsurface.asy
-2020/03/03 | 3344 | graphics/asymptote/examples/pdb.asy
-2020/03/03 | 361 | graphics/asymptote/examples/phase.asy
-2020/03/03 | 22873 | graphics/asymptote/examples/piicon.png
-2020/03/03 | 362 | graphics/asymptote/examples/pipeintersection.asy
-2020/03/03 | 3873 | graphics/asymptote/examples/pipes.asy
-2020/03/03 | 418 | graphics/asymptote/examples/planeproject.asy
-2020/03/03 | 930 | graphics/asymptote/examples/polararea.asy
-2020/03/03 | 628 | graphics/asymptote/examples/polarcircle.asy
-2020/03/03 | 326 | graphics/asymptote/examples/polardatagraph.asy
-2020/03/03 | 643 | graphics/asymptote/examples/p-orbital.asy
-2020/03/03 | 956 | graphics/asymptote/examples/poster.asy
-2020/03/03 | 58 | graphics/asymptote/examples/progrid.asy
-2020/03/03 | 373 | graphics/asymptote/examples/projectelevation.asy
-2020/03/03 | 438 | graphics/asymptote/examples/projectrevolution.asy
-2020/03/03 | 747 | graphics/asymptote/examples/pseudosphere.asy
-2020/03/03 | 557 | graphics/asymptote/examples/Pythagoras.asy
-2020/03/03 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
-2020/03/03 | 734 | graphics/asymptote/examples/quilt.asy
-2020/03/03 | 325 | graphics/asymptote/examples/rainbow.asy
-2020/03/03 | 78 | graphics/asymptote/examples/randompath3.asy
-2020/03/03 | 1537 | graphics/asymptote/examples/refs.bib
-2020/03/03 | 993 | graphics/asymptote/examples/RiemannSphere.asy
-2020/03/03 | 369 | graphics/asymptote/examples/RiemannSurface.asy
-2020/03/03 | 386 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
-2020/03/03 | 141 | graphics/asymptote/examples/ring.asy
-2020/03/03 | 182 | graphics/asymptote/examples/roll.asy
-2020/03/03 | 1310 | graphics/asymptote/examples/roundpath.asy
-2020/03/03 | 288 | graphics/asymptote/examples/sacone3D.asy
-2020/03/03 | 445 | graphics/asymptote/examples/sacone.asy
-2020/03/03 | 341 | graphics/asymptote/examples/sacylinder3D.asy
-2020/03/03 | 400 | graphics/asymptote/examples/sacylinder.asy
-2020/03/03 | 66 | graphics/asymptote/examples/shade.asy
-2020/03/03 | 104 | graphics/asymptote/examples/shadestroke.asy
-2020/03/03 | 1065 | graphics/asymptote/examples/shellmethod.asy
-2020/03/03 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
-2020/03/03 | 410 | graphics/asymptote/examples/Sierpinski.asy
-2020/03/03 | 849 | graphics/asymptote/examples/SierpinskiGasket.asy
-2020/03/03 | 2361 | graphics/asymptote/examples/SierpinskiSponge.asy
-2020/03/03 | 327 | graphics/asymptote/examples/sin1x.asy
-2020/03/03 | 579 | graphics/asymptote/examples/sin3.asy
-2020/03/03 | 591 | graphics/asymptote/examples/sinc.asy
-2020/03/03 | 385 | graphics/asymptote/examples/sinxlex.asy
-2020/03/03 | 3340 | graphics/asymptote/examples/slidedemo.asy
-2020/03/03 | 341 | graphics/asymptote/examples/slidedemo_.bbl
-2020/03/03 | 2043 | graphics/asymptote/examples/slope.asy
-2020/03/03 | 520 | graphics/asymptote/examples/smoothelevation.asy
-2020/03/03 | 2658 | graphics/asymptote/examples/soccerball.asy
-2020/03/03 | 2362 | graphics/asymptote/examples/spectrum.asy
-2020/03/03 | 141 | graphics/asymptote/examples/sphere.asy
-2020/03/03 | 150 | graphics/asymptote/examples/spheresilhouette.asy
-2020/03/03 | 165 | graphics/asymptote/examples/sphereskeleton.asy
-2020/03/03 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
-2020/03/03 | 426 | graphics/asymptote/examples/spiral3.asy
-2020/03/03 | 210 | graphics/asymptote/examples/spiral.asy
-2020/03/03 | 618 | graphics/asymptote/examples/spline.asy
-2020/03/03 | 2180 | graphics/asymptote/examples/splitpatch.asy
-2020/03/03 | 38 | graphics/asymptote/examples/spring0.asy
-2020/03/03 | 43 | graphics/asymptote/examples/spring2.asy
-2020/03/03 | 671 | graphics/asymptote/examples/spring.asy
-2020/03/03 | 674 | graphics/asymptote/examples/sqrtx01.asy
-2020/03/03 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
-2020/03/03 | 145 | graphics/asymptote/examples/star.asy
-2020/03/03 | 170 | graphics/asymptote/examples/stereoscopic.asy
-2020/03/03 | 59 | graphics/asymptote/examples/stroke3.asy
-2020/03/03 | 315 | graphics/asymptote/examples/strokepath.asy
-2020/03/03 | 168 | graphics/asymptote/examples/strokeshade.asy
-2020/03/03 | 198 | graphics/asymptote/examples/tanh.asy
-2020/03/03 | 13739 | graphics/asymptote/examples/teapot.asy
-2020/03/03 | 303 | graphics/asymptote/examples/tensor.asy
-2020/03/03 | 547 | graphics/asymptote/examples/tetra.asy
-2020/03/03 | 312 | graphics/asymptote/examples/textpath.asy
-2020/03/03 | 10210 | graphics/asymptote/examples/thermodynamics.asy
-2020/03/03 | 576 | graphics/asymptote/examples/threeviews.asy
-2020/03/03 | 104 | graphics/asymptote/examples/tiling.asy
-2020/03/03 | 413 | graphics/asymptote/examples/torus.asy
-2020/03/03 | 246 | graphics/asymptote/examples/transparency.asy
-2020/03/03 | 250 | graphics/asymptote/examples/transparentCubes.asy
-2020/03/03 | 602 | graphics/asymptote/examples/treetest.asy
-2020/03/03 | 589 | graphics/asymptote/examples/trefoilknot.asy
-2020/03/03 | 969 | graphics/asymptote/examples/triads.asy
-2020/03/03 | 209 | graphics/asymptote/examples/triangle.asy
-2020/03/03 | 441 | graphics/asymptote/examples/triangles.asy
-2020/03/03 | 251 | graphics/asymptote/examples/triceratops.asy
-2020/03/03 | 291 | graphics/asymptote/examples/trumpet.asy
-2020/03/03 | 2084 | graphics/asymptote/examples/truncatedIcosahedron.asy
-2020/03/03 | 40326 | graphics/asymptote/examples/tvgen.asy
-2020/03/03 | 885 | graphics/asymptote/examples/twistedtubes.asy
-2020/03/03 | 26096 | graphics/asymptote/examples/uhrturm.obj
-2020/03/03 | 322 | graphics/asymptote/examples/unitcircle.asy
-2020/03/03 | 714 | graphics/asymptote/examples/unitoctant.asy
-2020/03/03 | 199 | graphics/asymptote/examples/upint.asy
-2020/03/03 | 525 | graphics/asymptote/examples/vectorfield3.asy
-2020/03/03 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
-2020/03/03 | 839 | graphics/asymptote/examples/venn3.asy
-2020/03/03 | 626 | graphics/asymptote/examples/venn.asy
-2020/03/03 | 784 | graphics/asymptote/examples/vertexshading.asy
-2020/03/03 | 360 | graphics/asymptote/examples/washer.asy
-2020/03/03 | 1010 | graphics/asymptote/examples/washermethod.asy
-2020/03/03 | 628 | graphics/asymptote/examples/wedge.asy
-2020/03/03 | 1036 | graphics/asymptote/examples/workcone.asy
-2020/03/03 | 978 | graphics/asymptote/examples/worksheet.asy
-2020/03/03 | 2633 | graphics/asymptote/examples/worldmap.asy
-2020/03/03 | 1261761 | graphics/asymptote/examples/worldmap.dat
-2020/03/03 | 580 | graphics/asymptote/examples/xsin1x.asy
-2020/03/03 | 3746 | graphics/asymptote/examples/xstitch.asy
-2020/03/03 | 743 | graphics/asymptote/examples/xxsq01.asy
-2020/03/03 | 868 | graphics/asymptote/examples/xxsq01x-1.asy
-2020/03/03 | 827 | graphics/asymptote/examples/xxsq01y.asy
-2020/03/03 | 223 | graphics/asymptote/examples/yingyang.asy
-2020/03/03 | 33877 | graphics/asymptote/exp.cc
-2020/03/03 | 28809 | graphics/asymptote/exp.h
-2020/03/03 | 119 | graphics/asymptote/fftw++asy.cc
-2020/03/03 | 1694 | graphics/asymptote/fftw++.cc
-2020/03/03 | 44894 | graphics/asymptote/fftw++.h
-2020/03/03 | 4063 | graphics/asymptote/fileio.cc
-2020/03/03 | 19984 | graphics/asymptote/fileio.h
-2020/03/03 | 1245 | graphics/asymptote/findsym.pl
-2020/03/03 | 1020 | graphics/asymptote/flatguide.cc
-2020/03/03 | 4231 | graphics/asymptote/flatguide.h
-2020/03/03 | 666 | graphics/asymptote/fpu.h
-2020/03/03 | 2173 | graphics/asymptote/frame.h
-2020/03/03 | 7935 | graphics/asymptote/fundec.cc
-2020/03/03 | 4347 | graphics/asymptote/fundec.h
-2020/03/03 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
-2020/03/03 | 3161 | graphics/asymptote/genv.cc
-2020/03/03 | 1626 | graphics/asymptote/genv.h
-2020/03/03 | 4520 | graphics/asymptote/getopt1.c
-2020/03/03 | 30147 | graphics/asymptote/getopt.c
-2020/03/03 | 6650 | graphics/asymptote/getopt.h
-2020/03/03 | 152 | graphics/asymptote/glew.c
-2020/03/03 | 1235777 | graphics/asymptote/GL/glew.c
-2020/03/03 | 1186601 | graphics/asymptote/GL/glew.h
-2020/03/03 | 73435 | graphics/asymptote/GL/glxew.h
-2020/03/03 | 76801 | graphics/asymptote/gl-matrix-2.4.0-pruned/dist/gl-matrix.js
-2020/03/03 | 1131 | graphics/asymptote/gl-matrix-2.4.0-pruned/LICENSE.js
-2020/03/03 | 44732 | graphics/asymptote/glrender.cc
-2020/03/03 | 8650 | graphics/asymptote/glrender.h
-2020/03/03 | 63314 | graphics/asymptote/GL/wglew.h
-2020/03/03 | 50697 | graphics/asymptote/gsl.cc
-2020/03/03 | 22 | graphics/asymptote/GUI/configs/__init__.py
-2020/03/03 | 1148 | graphics/asymptote/GUI/configs/xasyconfig.cson
-2020/03/03 | 395 | graphics/asymptote/GUI/configs/xasykeymap.cson
-2020/03/03 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
-2020/03/03 | 131 | graphics/asymptote/GUI/DebugFlags.py
-2020/03/03 | 1175 | graphics/asymptote/guide.cc
-2020/03/03 | 298 | graphics/asymptote/guideflags.h
-2020/03/03 | 6783 | graphics/asymptote/guide.h
-2020/03/03 | 1724 | graphics/asymptote/GUI/GuidesManager.py
-2020/03/03 | 164511 | graphics/asymptote/GUI/icons_rc.py
-2020/03/03 | 23 | graphics/asymptote/GUI/__init__.py
-2020/03/03 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
-2020/03/03 | 5151 | graphics/asymptote/GUI/labelEditor.py
-2020/03/03 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
-2020/03/03 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
-2020/03/03 | 9945 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
-2020/03/03 | 6154 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
-2020/03/03 | 2825 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
-2020/03/03 | 7129 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
-2020/03/03 | 2193 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
-2020/03/03 | 4849 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
-2020/03/03 | 4668 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
-2020/03/03 | 56646 | graphics/asymptote/GUI/pyUIClass/window1.py
-2020/03/03 | 57 | graphics/asymptote/GUI/requirements.txt
-2020/03/03 | 361 | graphics/asymptote/GUI/res/icons/anchor.svg
-2020/03/03 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
-2020/03/03 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
-2020/03/03 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
-2020/03/03 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
-2020/03/03 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
-2020/03/03 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
-2020/03/03 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
-2020/03/03 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
-2020/03/03 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
-2020/03/03 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
-2020/03/03 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
-2020/03/03 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
-2020/03/03 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
-2020/03/03 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
-2020/03/03 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
-2020/03/03 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
-2020/03/03 | 589 | graphics/asymptote/GUI/res/icons/bucket.asy
-2020/03/03 | 1492 | graphics/asymptote/GUI/res/icons/bucket.svg
-2020/03/03 | 111 | graphics/asymptote/GUI/res/icons/center.asy
-2020/03/03 | 124 | graphics/asymptote/GUI/res/icons/centerorigin.asy
-2020/03/03 | 1052 | graphics/asymptote/GUI/res/icons/centerorigin.svg
-2020/03/03 | 892 | graphics/asymptote/GUI/res/icons/center.svg
-2020/03/03 | 780 | graphics/asymptote/GUI/res/icons/check.svg
-2020/03/03 | 1013 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
-2020/03/03 | 998 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
-2020/03/03 | 754 | graphics/asymptote/GUI/res/icons/circle.svg
-2020/03/03 | 105 | graphics/asymptote/GUI/res/icons/closedcurve.asy
-2020/03/03 | 1237 | graphics/asymptote/GUI/res/icons/closedcurve.svg
-2020/03/03 | 105 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
-2020/03/03 | 1102 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
-2020/03/03 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
-2020/03/03 | 1194 | graphics/asymptote/GUI/res/icons/code.svg
-2020/03/03 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
-2020/03/03 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
-2020/03/03 | 1967 | graphics/asymptote/GUI/res/icons/filledbucket.svg
-2020/03/03 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
-2020/03/03 | 964 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
-2020/03/03 | 98 | graphics/asymptote/GUI/res/icons/opencurve.asy
-2020/03/03 | 1186 | graphics/asymptote/GUI/res/icons/opencurve.svg
-2020/03/03 | 98 | graphics/asymptote/GUI/res/icons/openpolygon.asy
-2020/03/03 | 1085 | graphics/asymptote/GUI/res/icons/openpolygon.svg
-2020/03/03 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
-2020/03/03 | 1711 | graphics/asymptote/GUI/res/icons.qrc
-2020/03/03 | 673 | graphics/asymptote/GUI/res/icons/save.svg
-2020/03/03 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
-2020/03/03 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
-2020/03/03 | 284 | graphics/asymptote/GUI/res/icons/text.svg
-2020/03/03 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
-2020/03/03 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
-2020/03/03 | 394 | graphics/asymptote/GUI/setup.py
-2020/03/03 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
-2020/03/03 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
-2020/03/03 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
-2020/03/03 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
-2020/03/03 | 72687 | graphics/asymptote/GUI/Window1.py
-2020/03/03 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
-2020/03/03 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
-2020/03/03 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
-2020/03/03 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
-2020/03/03 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
-2020/03/03 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
-2020/03/03 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
-2020/03/03 | 75576 | graphics/asymptote/GUI/windows/window1.ui
-2020/03/03 | 50497 | graphics/asymptote/GUI/xasy2asy.py
-2020/03/03 | 821 | graphics/asymptote/GUI/xasyArgs.py
-2020/03/03 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
-2020/03/03 | 2554 | graphics/asymptote/GUI/xasyFile.py
-2020/03/03 | 5048 | graphics/asymptote/GUI/xasyOptions.py
-2020/03/03 | 503 | graphics/asymptote/GUI/xasy.py
-2020/03/03 | 599 | graphics/asymptote/GUI/xasyStrings.py
-2020/03/03 | 710 | graphics/asymptote/GUI/xasySvg.py
-2020/03/03 | 964 | graphics/asymptote/GUI/xasyTransform.py
-2020/03/03 | 1504 | graphics/asymptote/GUI/xasyUtils.py
-2020/03/03 | 238 | graphics/asymptote/GUI/xasyValidator.py
-2020/03/03 | 12744 | graphics/asymptote/impdatum.cc
-2020/03/03 | 10445 | graphics/asymptote/INSTALL
-2020/03/03 | 15645 | graphics/asymptote/install-sh
-2020/03/03 | 1986 | graphics/asymptote/inst.h
-2020/03/03 | 5295 | graphics/asymptote/interact.cc
-2020/03/03 | 1349 | graphics/asymptote/interact.h
-2020/03/03 | 5857 | graphics/asymptote/item.h
-2020/03/03 | 9065 | graphics/asymptote/jsfile.cc
-2020/03/03 | 1836 | graphics/asymptote/jsfile.h
-2020/03/03 | 609 | graphics/asymptote/keywords.cc
-2020/03/03 | 1253 | graphics/asymptote/keywords.pl
-2020/03/03 | 22355 | graphics/asymptote/knot.cc
-2020/03/03 | 12300 | graphics/asymptote/knot.h
-2020/03/03 | 345 | graphics/asymptote/lexical.h
-2020/03/03 | 83431 | graphics/asymptote/lex.yy.cc
-2020/03/03 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
-2020/03/03 | 35147 | graphics/asymptote/LICENSE
-2020/03/03 | 7639 | graphics/asymptote/LICENSE.LESSER
-2020/03/03 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
-2020/03/03 | 2197 | graphics/asymptote/locate.cc
-2020/03/03 | 577 | graphics/asymptote/locate.h
-2020/03/03 | 5301 | graphics/asymptote/main.cc
-2020/03/03 | 11585 | graphics/asymptote/Makefile.in
-2020/03/03 | 2632 | graphics/asymptote/material.h
-2020/03/03 | 6425 | graphics/asymptote/mathop.h
-2020/03/03 | 5070 | graphics/asymptote/memory.h
-2020/03/03 | 720 | graphics/asymptote/mod.h
-2020/03/03 | 908 | graphics/asymptote/modifier.h
-2020/03/03 | 7445 | graphics/asymptote/name.cc
-2020/03/03 | 5239 | graphics/asymptote/name.h
-2020/03/03 | 4269 | graphics/asymptote/newexp.cc
-2020/03/03 | 1278 | graphics/asymptote/newexp.h
-2020/03/03 | 917 | graphics/asymptote/opcodes.h
-2020/03/03 | 1050 | graphics/asymptote/opsymbols.pl
-2020/03/03 | 5145 | graphics/asymptote/pair.h
-2020/03/03 | 3505 | graphics/asymptote/parser.cc
-2020/03/03 | 852 | graphics/asymptote/parser.h
-2020/03/03 | 5262 | graphics/asymptote/patches/bison.patch
-2020/03/03 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
-2020/03/03 | 1311 | graphics/asymptote/patches/dvipdf
-2020/03/03 | 113 | graphics/asymptote/patches/fixmem.reg
-2020/03/03 | 1524 | graphics/asymptote/patches/flex.patch
-2020/03/03 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
-2020/03/03 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
-2020/03/03 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
-2020/03/03 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
-2020/03/03 | 1082 | graphics/asymptote/patches/README
-2020/03/03 | 38217 | graphics/asymptote/path3.cc
-2020/03/03 | 10604 | graphics/asymptote/path3.h
-2020/03/03 | 34126 | graphics/asymptote/path.cc
-2020/03/03 | 11680 | graphics/asymptote/path.h
-2020/03/03 | 1594 | graphics/asymptote/pen.cc
-2020/03/03 | 28156 | graphics/asymptote/pen.h
-2020/03/03 | 40276 | graphics/asymptote/picture.cc
-2020/03/03 | 3434 | graphics/asymptote/picture.h
-2020/03/03 | 5179 | graphics/asymptote/pipestream.cc
-2020/03/03 | 2624 | graphics/asymptote/pipestream.h
-2020/03/03 | 138 | graphics/asymptote/Pipfile
-2020/03/03 | 2526 | graphics/asymptote/policy.h
-2020/03/03 | 654 | graphics/asymptote/prcfile.h
-2020/03/03 | 974 | graphics/asymptote/prc/Makefile
-2020/03/03 | 70751 | graphics/asymptote/prc/oPRCFile.cc
-2020/03/03 | 51432 | graphics/asymptote/prc/oPRCFile.h
-2020/03/03 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
-2020/03/03 | 2518 | graphics/asymptote/prc/PRCbitStream.h
-2020/03/03 | 177246 | graphics/asymptote/prc/PRCdouble.cc
-2020/03/03 | 3765 | graphics/asymptote/prc/PRCdouble.h
-2020/03/03 | 30208 | graphics/asymptote/prc/PRC.h
-2020/03/03 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
-2020/03/03 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
-2020/03/03 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
-2020/03/03 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
-2020/03/03 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
-2020/03/03 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
-2020/03/03 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
-2020/03/03 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
-2020/03/03 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
-2020/03/03 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
-2020/03/03 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
-2020/03/03 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
-2020/03/03 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
-2020/03/03 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
-2020/03/03 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
-2020/03/03 | 95 | graphics/asymptote/prc/test.asy
-2020/03/03 | 36243 | graphics/asymptote/prc/test.cc
-2020/03/03 | 66751 | graphics/asymptote/prc/writePRC.cc
-2020/03/03 | 48481 | graphics/asymptote/prc/writePRC.h
-2020/03/03 | 116025 | graphics/asymptote/predicates.cc
-2020/03/03 | 986 | graphics/asymptote/predicates.h
-2020/03/03 | 1234 | graphics/asymptote/primitives.h
-2020/03/03 | 25292 | graphics/asymptote/process.cc
-2020/03/03 | 3003 | graphics/asymptote/process.h
-2020/03/03 | 2378 | graphics/asymptote/profile.py
-2020/03/03 | 9892 | graphics/asymptote/profiler.h
-2020/03/03 | 3275 | graphics/asymptote/program.cc
-2020/03/03 | 2562 | graphics/asymptote/program.h
-2020/03/03 | 18964 | graphics/asymptote/psfile.cc
-2020/03/03 | 9306 | graphics/asymptote/psfile.h
-2020/03/03 | 2505 | graphics/asymptote/README
-2020/03/03 | 1704 | graphics/asymptote/record.cc
-2020/03/03 | 2738 | graphics/asymptote/record.h
-2020/03/03 | 1098 | graphics/asymptote/refaccess.cc
-2020/03/03 | 1936 | graphics/asymptote/refaccess.h
-2020/03/02 | 119415 | graphics/asymptote/ReleaseNotes
-2020/03/03 | 62 | graphics/asymptote/revision.cc
-2020/03/03 | 3553 | graphics/asymptote/rounding.h
-2020/03/03 | 73504 | graphics/asymptote/runarray.cc
-2020/03/03 | 1492 | graphics/asymptote/runarray.h
-2020/03/03 | 48669 | graphics/asymptote/runarray.in
-2020/03/03 | 2661 | graphics/asymptote/runbacktrace.cc
-2020/03/03 | 169 | graphics/asymptote/runbacktrace.h
-2020/03/03 | 833 | graphics/asymptote/runbacktrace.in
-2020/03/03 | 17755 | graphics/asymptote/runfile.cc
-2020/03/03 | 969 | graphics/asymptote/runfile.h
-2020/03/03 | 5936 | graphics/asymptote/runfile.in
-2020/03/03 | 8062 | graphics/asymptote/runhistory.cc
-2020/03/03 | 161 | graphics/asymptote/runhistory.h
-2020/03/03 | 5024 | graphics/asymptote/runhistory.in
-2020/03/03 | 16702 | graphics/asymptote/runlabel.cc
-2020/03/03 | 153 | graphics/asymptote/runlabel.h
-2020/03/03 | 12959 | graphics/asymptote/runlabel.in
-2020/03/03 | 21977 | graphics/asymptote/runmath.cc
-2020/03/03 | 269 | graphics/asymptote/runmath.h
-2020/03/03 | 8929 | graphics/asymptote/runmath.in
-2020/03/03 | 16190 | graphics/asymptote/runpair.cc
-2020/03/03 | 299 | graphics/asymptote/runpair.h
-2020/03/03 | 4132 | graphics/asymptote/runpair.in
-2020/03/03 | 25707 | graphics/asymptote/runpath3d.cc
-2020/03/03 | 186 | graphics/asymptote/runpath3d.h
-2020/03/03 | 8016 | graphics/asymptote/runpath3d.in
-2020/03/03 | 26872 | graphics/asymptote/runpath.cc
-2020/03/03 | 177 | graphics/asymptote/runpath.h
-2020/03/03 | 8458 | graphics/asymptote/runpath.in
-2020/03/03 | 56889 | graphics/asymptote/runpicture.cc
-2020/03/03 | 191 | graphics/asymptote/runpicture.h
-2020/03/03 | 19308 | graphics/asymptote/runpicture.in
-2020/03/03 | 18772 | graphics/asymptote/runstring.cc
-2020/03/03 | 188 | graphics/asymptote/runstring.h
-2020/03/03 | 9871 | graphics/asymptote/runstring.in
-2020/03/03 | 12629 | graphics/asymptote/runsystem.cc
-2020/03/03 | 157 | graphics/asymptote/runsystem.h
-2020/03/03 | 5119 | graphics/asymptote/runsystem.in
-2020/03/03 | 1343 | graphics/asymptote/runtimebase.in
-2020/03/03 | 60505 | graphics/asymptote/runtime.cc
-2020/03/03 | 1163 | graphics/asymptote/runtime.h
-2020/03/03 | 20545 | graphics/asymptote/runtime.in
-2020/03/03 | 7230 | graphics/asymptote/runtime.pl
-2020/03/03 | 13628 | graphics/asymptote/runtriple.cc
-2020/03/03 | 320 | graphics/asymptote/runtriple.h
-2020/03/03 | 2675 | graphics/asymptote/runtriple.in
-2020/03/03 | 2113 | graphics/asymptote/seconds.h
-2020/03/03 | 51676 | graphics/asymptote/settings.cc
-2020/03/03 | 2667 | graphics/asymptote/settings.h
-2020/03/03 | 2905 | graphics/asymptote/shaders.cc
-2020/03/03 | 882 | graphics/asymptote/shaders.h
-2020/03/03 | 6660 | graphics/asymptote/simpson.cc
-2020/03/03 | 14448 | graphics/asymptote/stack.cc
-2020/03/03 | 3328 | graphics/asymptote/stack.h
-2020/03/03 | 958 | graphics/asymptote/statistics.h
-2020/03/03 | 12103 | graphics/asymptote/stm.cc
-2020/03/03 | 4400 | graphics/asymptote/stm.h
-2020/03/03 | 8912 | graphics/asymptote/symbol.cc
-2020/03/03 | 2662 | graphics/asymptote/symbol.h
-2020/03/03 | 2697 | graphics/asymptote/table.h
-2020/03/03 | 620 | graphics/asymptote/tests/arith/integer.asy
-2020/03/03 | 449 | graphics/asymptote/tests/arith/pair.asy
-2020/03/03 | 193 | graphics/asymptote/tests/arith/random.asy
-2020/03/03 | 383 | graphics/asymptote/tests/arith/real.asy
-2020/03/03 | 1710 | graphics/asymptote/tests/arith/roots.asy
-2020/03/03 | 639 | graphics/asymptote/tests/arith/transform.asy
-2020/03/03 | 244 | graphics/asymptote/tests/arith/triple.asy
-2020/03/03 | 936 | graphics/asymptote/tests/array/array.asy
-2020/03/03 | 680 | graphics/asymptote/tests/array/delete.asy
-2020/03/03 | 737 | graphics/asymptote/tests/array/determinant.asy
-2020/03/03 | 1927 | graphics/asymptote/tests/array/fields.asy
-2020/03/03 | 4841 | graphics/asymptote/tests/array/slice.asy
-2020/03/03 | 966 | graphics/asymptote/tests/array/solve.asy
-2020/03/03 | 746 | graphics/asymptote/tests/array/sort.asy
-2020/03/03 | 1096 | graphics/asymptote/tests/array/transpose.asy
-2020/03/03 | 276 | graphics/asymptote/tests/bench/6000circles.asy
-2020/03/03 | 2222 | graphics/asymptote/tests/frames/loop.asy
-2020/03/03 | 202 | graphics/asymptote/tests/frames/stat2.asy
-2020/03/03 | 158 | graphics/asymptote/tests/frames/stat.asy
-2020/03/03 | 62 | graphics/asymptote/tests/gc/array.asy
-2020/03/03 | 102 | graphics/asymptote/tests/gc/file.asy
-2020/03/03 | 54 | graphics/asymptote/tests/gc/funcall.asy
-2020/03/03 | 65 | graphics/asymptote/tests/gc/guide.asy
-2020/03/03 | 143 | graphics/asymptote/tests/gc/label.asy
-2020/03/03 | 124 | graphics/asymptote/tests/gc/path.asy
-2020/03/03 | 72 | graphics/asymptote/tests/gc/pen.asy
-2020/03/03 | 193 | graphics/asymptote/tests/gc/shipout.asy
-2020/03/03 | 77 | graphics/asymptote/tests/gc/string.asy
-2020/03/03 | 129 | graphics/asymptote/tests/gc/struct.asy
-2020/03/03 | 70 | graphics/asymptote/tests/gc/transform.asy
-2020/03/03 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
-2020/03/03 | 11907 | graphics/asymptote/tests/gsl/random.asy
-2020/03/03 | 1209 | graphics/asymptote/tests/imp/unravel.asy
-2020/03/03 | 308 | graphics/asymptote/tests/Makefile
-2020/03/03 | 18 | graphics/asymptote/tests/output/circle.asy
-2020/03/03 | 22 | graphics/asymptote/tests/output/line.asy
-2020/03/03 | 1284 | graphics/asymptote/tests/output/Makefile
-2020/03/03 | 1384 | graphics/asymptote/tests/pic/trans.asy
-2020/03/03 | 236 | graphics/asymptote/tests/string/erase.asy
-2020/03/03 | 182 | graphics/asymptote/tests/string/find.asy
-2020/03/03 | 109 | graphics/asymptote/tests/string/insert.asy
-2020/03/03 | 132 | graphics/asymptote/tests/string/length.asy
-2020/03/03 | 187 | graphics/asymptote/tests/string/rfind.asy
-2020/03/03 | 118 | graphics/asymptote/tests/string/substr.asy
-2020/03/03 | 238 | graphics/asymptote/tests/TestLib.asy
-2020/03/03 | 159 | graphics/asymptote/tests/types/cast.asy
-2020/03/03 | 6503 | graphics/asymptote/tests/types/constructor.asy
-2020/03/03 | 155 | graphics/asymptote/tests/types/ecast.asy
-2020/03/03 | 3375 | graphics/asymptote/tests/types/guide.asy
-2020/03/03 | 224 | graphics/asymptote/tests/types/init.asy
-2020/03/03 | 4242 | graphics/asymptote/tests/types/keyword.asy
-2020/03/03 | 4072 | graphics/asymptote/tests/types/order.asy
-2020/03/03 | 2731 | graphics/asymptote/tests/types/resolve.asy
-2020/03/03 | 308 | graphics/asymptote/tests/types/shadow.asy
-2020/03/03 | 1331 | graphics/asymptote/tests/types/spec.asy
-2020/03/03 | 1189 | graphics/asymptote/tests/types/var.asy
-2020/03/03 | 20174 | graphics/asymptote/texfile.cc
-2020/03/03 | 10727 | graphics/asymptote/texfile.h
-2020/03/03 | 1293 | graphics/asymptote/TODO
-2020/03/03 | 6185 | graphics/asymptote/transform.h
-2020/03/03 | 10582 | graphics/asymptote/tr.cc
-2020/03/03 | 3676 | graphics/asymptote/tr.h
-2020/03/03 | 9651 | graphics/asymptote/triple.h
-2020/03/03 | 13884 | graphics/asymptote/types.cc
-2020/03/03 | 15372 | graphics/asymptote/types.h
-2020/03/03 | 9756 | graphics/asymptote/util.cc
-2020/03/03 | 4515 | graphics/asymptote/util.h
-2020/03/03 | 1978 | graphics/asymptote/varinit.cc
-2020/03/03 | 2013 | graphics/asymptote/varinit.h
-2020/03/03 | 901 | graphics/asymptote/virtualfieldaccess.cc
-2020/03/03 | 2328 | graphics/asymptote/virtualfieldaccess.h
-2020/03/03 | 750 | graphics/asymptote/vm.h
-2020/03/03 | 219 | graphics/asymptote/wce
-2020/03/03 | 2146 | graphics/asymptote/webgl/fragment.glsl
-2020/03/03 | 83305 | graphics/asymptote/webgl/gl.js
-2020/03/03 | 815 | graphics/asymptote/webgl/license
-2020/03/03 | 1446 | graphics/asymptote/webgl/vertex.glsl
-2020/03/03 | 6661 | graphics/asymptote/xstream.h
-2020/03/03 | 14662221 | graphics/asymptote.zip
+2020/03/04 | 255 | graphics/asymptote/BUGS
+2020/03/04 | 1229 | graphics/asymptote/build-scripts/build-asygl
+2020/03/04 | 2482 | graphics/asymptote/build-scripts/build-asymptote
+2020/03/04 | 3449 | graphics/asymptote/build-scripts/build-asymptote.dos
+2020/03/04 | 1907 | graphics/asymptote/build-scripts/HOWTO-MSWindows
+2020/03/04 | 288 | graphics/asymptote/build-scripts/README-binaries
+2020/03/04 | 31244 | graphics/asymptote/builtin.cc
+2020/03/04 | 1637 | graphics/asymptote/builtin.h
+2020/03/04 | 1151 | graphics/asymptote/callable.cc
+2020/03/04 | 1642 | graphics/asymptote/callable.h
+2020/03/04 | 1191 | graphics/asymptote/camperror.cc
+2020/03/04 | 818 | graphics/asymptote/camperror.h
+2020/03/04 | 13339 | graphics/asymptote/camp.l
+2020/03/04 | 127885 | graphics/asymptote/camp.tab.cc
+2020/03/04 | 4089 | graphics/asymptote/camp.tab.h
+2020/03/04 | 20029 | graphics/asymptote/camp.y
+2020/03/04 | 4687 | graphics/asymptote/castop.h
+2020/03/04 | 1400333 | graphics/asymptote/ChangeLog
+2020/03/04 | 7808 | graphics/asymptote/coder.cc
+2020/03/04 | 11658 | graphics/asymptote/coder.h
+2020/03/04 | 1126 | graphics/asymptote/coenv.cc
+2020/03/04 | 908 | graphics/asymptote/coenv.h
+2020/03/04 | 1610 | graphics/asymptote/common.h
+2020/03/04 | 48441 | graphics/asymptote/config.guess
+2020/03/04 | 6871 | graphics/asymptote/config.h.in
+2020/03/04 | 31609 | graphics/asymptote/config.sub
+2020/03/04 | 285989 | graphics/asymptote/configure
+2020/03/04 | 14773 | graphics/asymptote/configure.ac
+2020/03/04 | 3673 | graphics/asymptote/constructor.cc
+2020/03/04 | 20866 | graphics/asymptote/dec.cc
+2020/03/04 | 15845 | graphics/asymptote/dec.h
+2020/03/04 | 5897 | graphics/asymptote/Delaunay.cc
+2020/03/04 | 384 | graphics/asymptote/Delaunay.h
+2020/03/04 | 8045 | graphics/asymptote/doc/asy.1
+2020/03/04 | 1005 | graphics/asymptote/doc/asy.1.begin
+2020/03/04 | 333 | graphics/asymptote/doc/asy.1.end
+2020/03/04 | 2800 | graphics/asymptote/doc/asycolors.sty
+2020/03/04 | 18126 | graphics/asymptote/doc/asy-latex.dtx
+2020/03/04 | 194590 | graphics/asymptote/doc/asy-latex.pdf
+2020/03/04 | 1293654 | graphics/asymptote/doc/asymptote.pdf
+2020/03/04 | 9836 | graphics/asymptote/doc/asymptote.sty
+2020/03/04 | 385350 | graphics/asymptote/doc/asymptote.texi
+2020/03/04 | 121144 | graphics/asymptote/doc/asyRefCard.pdf
+2020/03/04 | 20051 | graphics/asymptote/doc/asyRefCard.tex
+2020/03/04 | 246 | graphics/asymptote/doc/axis3.asy
+2020/03/04 | 416 | graphics/asymptote/doc/bezier2.asy
+2020/03/04 | 81 | graphics/asymptote/doc/bezier.asy
+2020/03/04 | 234 | graphics/asymptote/doc/beziercurve.asy
+2020/03/04 | 41 | graphics/asymptote/doc/bigdiagonal.asy
+2020/03/04 | 306 | graphics/asymptote/doc/binarytreetest.asy
+2020/03/04 | 677 | graphics/asymptote/doc/Bode.asy
+2020/03/04 | 524 | graphics/asymptote/doc/brokenaxis.asy
+2020/03/04 | 1391 | graphics/asymptote/doc/CAD1.asy
+2020/03/04 | 167756 | graphics/asymptote/doc/CAD.pdf
+2020/03/04 | 10196 | graphics/asymptote/doc/CAD.tex
+2020/03/04 | 492 | graphics/asymptote/doc/CDlabel.asy
+2020/03/04 | 4348 | graphics/asymptote/doc/colo-asy.tex
+2020/03/04 | 49 | graphics/asymptote/doc/colons.asy
+2020/03/04 | 1620 | graphics/asymptote/doc/colors.asy
+2020/03/04 | 243 | graphics/asymptote/doc/cube.asy
+2020/03/04 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
+2020/03/04 | 218 | graphics/asymptote/doc/datagraph.asy
+2020/03/04 | 24 | graphics/asymptote/doc/diagonal.asy
+2020/03/04 | 2882 | graphics/asymptote/doc/diatom.asy
+2020/03/04 | 4067 | graphics/asymptote/doc/diatom.csv
+2020/03/04 | 49 | graphics/asymptote/doc/dots.asy
+2020/03/04 | 1051 | graphics/asymptote/doc/eetomumu.asy
+2020/03/04 | 2039 | graphics/asymptote/doc/elliptic.asy
+2020/03/04 | 912 | graphics/asymptote/doc/errorbars.asy
+2020/03/04 | 202 | graphics/asymptote/doc/exp.asy
+2020/03/04 | 343 | graphics/asymptote/doc/externalprc.tex
+2020/03/04 | 19597 | graphics/asymptote/doc/external-proposal.html
+2020/03/04 | 25137 | graphics/asymptote/doc/extra/intro.asy
+2020/03/04 | 40764 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
+2020/03/04 | 63140 | graphics/asymptote/doc/FAQ/asy-faq.info
+2020/03/04 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
+2020/03/04 | 13663 | graphics/asymptote/doc/FAQ/install-sh
+2020/03/04 | 1000 | graphics/asymptote/doc/FAQ/Makefile
+2020/03/04 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
+2020/03/04 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
+2020/03/04 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
+2020/03/04 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
+2020/03/04 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
+2020/03/04 | 238 | graphics/asymptote/doc/filegraph.asy
+2020/03/04 | 26 | graphics/asymptote/doc/filegraph.dat
+2020/03/04 | 604 | graphics/asymptote/doc/flow.asy
+2020/03/04 | 862 | graphics/asymptote/doc/flowchartdemo.asy
+2020/03/04 | 464 | graphics/asymptote/doc/GaussianSurface.asy
+2020/03/04 | 376 | graphics/asymptote/doc/generalaxis3.asy
+2020/03/04 | 277 | graphics/asymptote/doc/generalaxis.asy
+2020/03/04 | 754 | graphics/asymptote/doc/graphmarkers.asy
+2020/03/04 | 426 | graphics/asymptote/doc/grid3xyz.asy
+2020/03/04 | 279 | graphics/asymptote/doc/hatch.asy
+2020/03/04 | 423 | graphics/asymptote/doc/helix.asy
+2020/03/04 | 330 | graphics/asymptote/doc/HermiteSpline.asy
+2020/03/04 | 441 | graphics/asymptote/doc/histogram.asy
+2020/03/04 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
+2020/03/04 | 500 | graphics/asymptote/doc/Hobbydir.asy
+2020/03/04 | 380 | graphics/asymptote/doc/icon.asy
+2020/03/04 | 401 | graphics/asymptote/doc/image.asy
+2020/03/04 | 872 | graphics/asymptote/doc/imagecontour.asy
+2020/03/04 | 13663 | graphics/asymptote/doc/install-sh
+2020/03/04 | 357 | graphics/asymptote/doc/irregularcontour.asy
+2020/03/04 | 442 | graphics/asymptote/doc/join3.asy
+2020/03/04 | 261 | graphics/asymptote/doc/join.asy
+2020/03/04 | 417 | graphics/asymptote/doc/knots.asy
+2020/03/04 | 121 | graphics/asymptote/doc/labelsquare.asy
+2020/03/04 | 144 | graphics/asymptote/doc/latexmkrc
+2020/03/04 | 150 | graphics/asymptote/doc/latexmkrc_asydir
+2020/03/04 | 3106 | graphics/asymptote/doc/latexusage.tex
+2020/03/04 | 1025 | graphics/asymptote/doc/leastsquares.asy
+2020/03/04 | 6318 | graphics/asymptote/doc/leastsquares.dat
+2020/03/04 | 410 | graphics/asymptote/doc/legend.asy
+2020/03/04 | 366 | graphics/asymptote/doc/lineargraph0.asy
+2020/03/04 | 373 | graphics/asymptote/doc/lineargraph.asy
+2020/03/04 | 416 | graphics/asymptote/doc/linetype.asy
+2020/03/04 | 423 | graphics/asymptote/doc/log2graph.asy
+2020/03/04 | 262 | graphics/asymptote/doc/loggraph.asy
+2020/03/04 | 382 | graphics/asymptote/doc/loggrid.asy
+2020/03/04 | 480 | graphics/asymptote/doc/logimage.asy
+2020/03/04 | 619 | graphics/asymptote/doc/logo.asy
+2020/03/04 | 314 | graphics/asymptote/doc/logticks.asy
+2020/03/04 | 3023 | graphics/asymptote/doc/Makefile.in
+2020/03/04 | 293 | graphics/asymptote/doc/makepen.asy
+2020/03/04 | 2653 | graphics/asymptote/doc/markers1.asy
+2020/03/04 | 877 | graphics/asymptote/doc/markers2.asy
+2020/03/04 | 288 | graphics/asymptote/doc/mexicanhat.asy
+2020/03/04 | 374 | graphics/asymptote/doc/monthaxis.asy
+2020/03/04 | 458 | graphics/asymptote/doc/multicontour.asy
+2020/03/04 | 3497 | graphics/asymptote/doc/ocg.sty
+2020/03/04 | 115 | graphics/asymptote/doc/onecontour.asy
+2020/03/04 | 240 | graphics/asymptote/doc/parametricgraph.asy
+2020/03/04 | 498 | graphics/asymptote/doc/penfunctionimage.asy
+2020/03/04 | 219 | graphics/asymptote/doc/penimage.asy
+2020/03/04 | 2771 | graphics/asymptote/doc/pixel.pdf
+2020/03/04 | 354 | graphics/asymptote/doc/planes.asy
+2020/03/04 | 462052 | graphics/asymptote/doc/png/asymptote.info
+2020/03/04 | 1469 | graphics/asymptote/doc/png/Makefile.in
+2020/03/04 | 49 | graphics/asymptote/doc/quartercircle.asy
+2020/03/04 | 354 | graphics/asymptote/doc/reloadpdf.tex
+2020/03/04 | 157 | graphics/asymptote/doc/saddle.asy
+2020/03/04 | 355 | graphics/asymptote/doc/scaledgraph.asy
+2020/03/04 | 821 | graphics/asymptote/doc/secondaryaxis.asy
+2020/03/04 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
+2020/03/04 | 256 | graphics/asymptote/doc/shadedtiling.asy
+2020/03/04 | 154 | graphics/asymptote/doc/slopefield1.asy
+2020/03/04 | 52 | graphics/asymptote/doc/square.asy
+2020/03/04 | 341 | graphics/asymptote/doc/subpictures.asy
+2020/03/04 | 123 | graphics/asymptote/doc/superpath.asy
+2020/03/04 | 77097 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+2020/03/04 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
+2020/03/04 | 390 | graphics/asymptote/doc/tile.asy
+2020/03/04 | 396 | graphics/asymptote/doc/triangulate.asy
+2020/03/04 | 186 | graphics/asymptote/doc/unitcircle3.asy
+2020/03/04 | 147 | graphics/asymptote/doc/vectorfield.asy
+2020/03/04 | 1746 | graphics/asymptote/doc/westnile.asy
+2020/03/04 | 4727 | graphics/asymptote/doc/westnile.csv
+2020/03/04 | 880 | graphics/asymptote/doc/xasy.1x
+2020/03/04 | 1878 | graphics/asymptote/drawclipbegin.h
+2020/03/04 | 1213 | graphics/asymptote/drawclipend.h
+2020/03/04 | 11384 | graphics/asymptote/drawelement.h
+2020/03/04 | 4619 | graphics/asymptote/drawfill.cc
+2020/03/04 | 6570 | graphics/asymptote/drawfill.h
+2020/03/04 | 496 | graphics/asymptote/drawgrestore.h
+2020/03/04 | 2924 | graphics/asymptote/drawgroup.h
+2020/03/04 | 466 | graphics/asymptote/drawgsave.h
+2020/03/04 | 3042 | graphics/asymptote/drawimage.h
+2020/03/04 | 6865 | graphics/asymptote/drawlabel.cc
+2020/03/04 | 2163 | graphics/asymptote/drawlabel.h
+2020/03/04 | 773 | graphics/asymptote/drawlayer.h
+2020/03/04 | 5949 | graphics/asymptote/drawpath3.cc
+2020/03/04 | 5925 | graphics/asymptote/drawpath3.h
+2020/03/04 | 3522 | graphics/asymptote/drawpath.cc
+2020/03/04 | 674 | graphics/asymptote/drawpath.h
+2020/03/04 | 23632 | graphics/asymptote/drawsurface.cc
+2020/03/04 | 20093 | graphics/asymptote/drawsurface.h
+2020/03/04 | 1279 | graphics/asymptote/drawverbatim.h
+2020/03/04 | 20738 | graphics/asymptote/entry.cc
+2020/03/04 | 14795 | graphics/asymptote/entry.h
+2020/03/04 | 5465 | graphics/asymptote/env.cc
+2020/03/04 | 1142 | graphics/asymptote/envcompleter.cc
+2020/03/04 | 845 | graphics/asymptote/envcompleter.h
+2020/03/04 | 4575 | graphics/asymptote/env.h
+2020/03/04 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
+2020/03/04 | 1753 | graphics/asymptote/errormsg.cc
+2020/03/04 | 5098 | graphics/asymptote/errormsg.h
+2020/03/04 | 9251 | graphics/asymptote/errors
+2020/03/04 | 6911 | graphics/asymptote/errortest.asy
+2020/03/04 | 657 | graphics/asymptote/examples/100d.views
+2020/03/04 | 309 | graphics/asymptote/examples/1overx.asy
+2020/03/04 | 4158 | graphics/asymptote/examples/advection.asy
+2020/03/04 | 245 | graphics/asymptote/examples/alignbox.asy
+2020/03/04 | 2832 | graphics/asymptote/examples/alignedaxis.asy
+2020/03/04 | 946 | graphics/asymptote/examples/animations/cube.asy
+2020/03/04 | 160672 | graphics/asymptote/examples/animations/dice.u3d
+2020/03/04 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
+2020/03/04 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
+2020/03/04 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
+2020/03/04 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
+2020/03/04 | 414 | graphics/asymptote/examples/animations/glmovie.asy
+2020/03/04 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
+2020/03/04 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
+2020/03/04 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
+2020/03/04 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
+2020/03/04 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
+2020/03/04 | 856 | graphics/asymptote/examples/animations/sphere.asy
+2020/03/04 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
+2020/03/04 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
+2020/03/04 | 1120 | graphics/asymptote/examples/animations/wheel.asy
+2020/03/04 | 236 | graphics/asymptote/examples/annotation.asy
+2020/03/04 | 1240 | graphics/asymptote/examples/arrows3.asy
+2020/03/04 | 497 | graphics/asymptote/examples/bars3.asy
+2020/03/04 | 1033 | graphics/asymptote/examples/basealign.asy
+2020/03/04 | 395 | graphics/asymptote/examples/BezierPatch.asy
+2020/03/04 | 581 | graphics/asymptote/examples/BezierSaddle.asy
+2020/03/04 | 1526 | graphics/asymptote/examples/BezierSurface.asy
+2020/03/04 | 199 | graphics/asymptote/examples/BezierTriangle.asy
+2020/03/04 | 154 | graphics/asymptote/examples/billboard.asy
+2020/03/04 | 513 | graphics/asymptote/examples/buildcycle.asy
+2020/03/04 | 233 | graphics/asymptote/examples/cardioid.asy
+2020/03/04 | 485 | graphics/asymptote/examples/cards.asy
+2020/03/04 | 691 | graphics/asymptote/examples/centroidfg.asy
+2020/03/04 | 322 | graphics/asymptote/examples/cheese.asy
+2020/03/04 | 576 | graphics/asymptote/examples/circles.asy
+2020/03/04 | 228 | graphics/asymptote/examples/circumcircle.asy
+2020/03/04 | 762 | graphics/asymptote/examples/clockarray.asy
+2020/03/04 | 264 | graphics/asymptote/examples/coag.asy
+2020/03/04 | 424 | graphics/asymptote/examples/colorpatch.asy
+2020/03/04 | 465 | graphics/asymptote/examples/colorplanes.asy
+2020/03/04 | 739 | graphics/asymptote/examples/condor.asy
+2020/03/04 | 495 | graphics/asymptote/examples/cones.asy
+2020/03/04 | 1780 | graphics/asymptote/examples/conicurv.asy
+2020/03/04 | 255 | graphics/asymptote/examples/contextfonts.asy
+2020/03/04 | 778 | graphics/asymptote/examples/controlsystem.asy
+2020/03/04 | 123 | graphics/asymptote/examples/Coons.asy
+2020/03/04 | 235 | graphics/asymptote/examples/cos2theta.asy
+2020/03/04 | 582 | graphics/asymptote/examples/cos3.asy
+2020/03/04 | 461 | graphics/asymptote/examples/cosaddition.asy
+2020/03/04 | 5740 | graphics/asymptote/examples/cpkcolors.asy
+2020/03/04 | 573 | graphics/asymptote/examples/curvedlabel3.asy
+2020/03/04 | 177 | graphics/asymptote/examples/curvedlabel.asy
+2020/03/04 | 1835 | graphics/asymptote/examples/cyclohexane.asy
+2020/03/04 | 352 | graphics/asymptote/examples/cylinder.asy
+2020/03/04 | 506 | graphics/asymptote/examples/delu.asy
+2020/03/04 | 521 | graphics/asymptote/examples/dimension.asy
+2020/03/04 | 1216 | graphics/asymptote/examples/dragon.asy
+2020/03/04 | 1326 | graphics/asymptote/examples/electromagnetic.asy
+2020/03/04 | 325 | graphics/asymptote/examples/elevation.asy
+2020/03/04 | 398 | graphics/asymptote/examples/epix.asy
+2020/03/04 | 242 | graphics/asymptote/examples/equilateral.asy
+2020/03/04 | 549 | graphics/asymptote/examples/equilchord.asy
+2020/03/04 | 579 | graphics/asymptote/examples/exp3.asy
+2020/03/04 | 519 | graphics/asymptote/examples/extrudedcontour.asy
+2020/03/04 | 498 | graphics/asymptote/examples/fano.asy
+2020/03/04 | 972 | graphics/asymptote/examples/fequlogo.asy
+2020/03/04 | 727 | graphics/asymptote/examples/fermi.asy
+2020/03/04 | 971 | graphics/asymptote/examples/filesurface.asy
+2020/03/04 | 5543 | graphics/asymptote/examples/filesurface.dat
+2020/03/04 | 574 | graphics/asymptote/examples/fillcontour.asy
+2020/03/04 | 4203 | graphics/asymptote/examples/fin.asy
+2020/03/04 | 710 | graphics/asymptote/examples/fjortoft.asy
+2020/03/04 | 581 | graphics/asymptote/examples/floatingdisk.asy
+2020/03/04 | 502 | graphics/asymptote/examples/floor.asy
+2020/03/04 | 683 | graphics/asymptote/examples/fractaltree.asy
+2020/03/04 | 1185 | graphics/asymptote/examples/functionshading.asy
+2020/03/04 | 499 | graphics/asymptote/examples/galleon.asy
+2020/03/04 | 714 | graphics/asymptote/examples/gamma3.asy
+2020/03/04 | 440 | graphics/asymptote/examples/gamma.asy
+2020/03/04 | 679 | graphics/asymptote/examples/genusthree.asy
+2020/03/04 | 1136 | graphics/asymptote/examples/genustwo.asy
+2020/03/04 | 384 | graphics/asymptote/examples/Gouraud.asy
+2020/03/04 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
+2020/03/04 | 76 | graphics/asymptote/examples/grid.asy
+2020/03/04 | 459 | graphics/asymptote/examples/hierarchy.asy
+2020/03/04 | 315 | graphics/asymptote/examples/hyperboloid.asy
+2020/03/04 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
+2020/03/04 | 1140 | graphics/asymptote/examples/imagehistogram.asy
+2020/03/04 | 610 | graphics/asymptote/examples/impact.asy
+2020/03/04 | 605 | graphics/asymptote/examples/integraltest.asy
+2020/03/04 | 4825 | graphics/asymptote/examples/interpolate1.asy
+2020/03/04 | 291 | graphics/asymptote/examples/jump.asy
+2020/03/04 | 1309 | graphics/asymptote/examples/Klein.asy
+2020/03/04 | 182 | graphics/asymptote/examples/label3.asy
+2020/03/04 | 196 | graphics/asymptote/examples/label3ribbon.asy
+2020/03/04 | 187 | graphics/asymptote/examples/label3solid.asy
+2020/03/04 | 546 | graphics/asymptote/examples/label3zoom.asy
+2020/03/04 | 264 | graphics/asymptote/examples/labelbox.asy
+2020/03/04 | 1114 | graphics/asymptote/examples/laserlattice.asy
+2020/03/04 | 136 | graphics/asymptote/examples/latticeshading.asy
+2020/03/04 | 688 | graphics/asymptote/examples/layers.asy
+2020/03/04 | 460 | graphics/asymptote/examples/lever.asy
+2020/03/04 | 654 | graphics/asymptote/examples/limit.asy
+2020/03/04 | 1908 | graphics/asymptote/examples/linearregression.asy
+2020/03/04 | 168 | graphics/asymptote/examples/lines.asy
+2020/03/04 | 980 | graphics/asymptote/examples/lmfit1.asy
+2020/03/04 | 206 | graphics/asymptote/examples/log.asy
+2020/03/04 | 349 | graphics/asymptote/examples/logdown.asy
+2020/03/04 | 1231 | graphics/asymptote/examples/logo3.asy
+2020/03/04 | 196 | graphics/asymptote/examples/lowint.asy
+2020/03/04 | 659 | graphics/asymptote/examples/lowupint.asy
+2020/03/04 | 479 | graphics/asymptote/examples/magnetic.asy
+2020/03/04 | 833 | graphics/asymptote/examples/markregular.asy
+2020/03/04 | 1950 | graphics/asymptote/examples/mergeExample.asy
+2020/03/04 | 5258 | graphics/asymptote/examples/mosaic.asy
+2020/03/04 | 2512 | graphics/asymptote/examples/mosquito.asy
+2020/03/04 | 1569 | graphics/asymptote/examples/near_earth.asy
+2020/03/04 | 649 | graphics/asymptote/examples/NURBScurve.asy
+2020/03/04 | 1020 | graphics/asymptote/examples/NURBSsphere.asy
+2020/03/04 | 1461 | graphics/asymptote/examples/NURBSsurface.asy
+2020/03/04 | 1251 | graphics/asymptote/examples/odetest.asy
+2020/03/04 | 309 | graphics/asymptote/examples/oneoverx.asy
+2020/03/04 | 861 | graphics/asymptote/examples/orthocenter.asy
+2020/03/04 | 254 | graphics/asymptote/examples/parametricelevation.asy
+2020/03/04 | 407 | graphics/asymptote/examples/parametricsurface.asy
+2020/03/04 | 711 | graphics/asymptote/examples/partialsurface.asy
+2020/03/04 | 1055 | graphics/asymptote/examples/partitionExample.asy
+2020/03/04 | 419 | graphics/asymptote/examples/pathintersectsurface.asy
+2020/03/04 | 3344 | graphics/asymptote/examples/pdb.asy
+2020/03/04 | 361 | graphics/asymptote/examples/phase.asy
+2020/03/04 | 22873 | graphics/asymptote/examples/piicon.png
+2020/03/04 | 362 | graphics/asymptote/examples/pipeintersection.asy
+2020/03/04 | 3873 | graphics/asymptote/examples/pipes.asy
+2020/03/04 | 418 | graphics/asymptote/examples/planeproject.asy
+2020/03/04 | 930 | graphics/asymptote/examples/polararea.asy
+2020/03/04 | 628 | graphics/asymptote/examples/polarcircle.asy
+2020/03/04 | 326 | graphics/asymptote/examples/polardatagraph.asy
+2020/03/04 | 643 | graphics/asymptote/examples/p-orbital.asy
+2020/03/04 | 956 | graphics/asymptote/examples/poster.asy
+2020/03/04 | 58 | graphics/asymptote/examples/progrid.asy
+2020/03/04 | 373 | graphics/asymptote/examples/projectelevation.asy
+2020/03/04 | 438 | graphics/asymptote/examples/projectrevolution.asy
+2020/03/04 | 747 | graphics/asymptote/examples/pseudosphere.asy
+2020/03/04 | 557 | graphics/asymptote/examples/Pythagoras.asy
+2020/03/04 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
+2020/03/04 | 734 | graphics/asymptote/examples/quilt.asy
+2020/03/04 | 325 | graphics/asymptote/examples/rainbow.asy
+2020/03/04 | 78 | graphics/asymptote/examples/randompath3.asy
+2020/03/04 | 1537 | graphics/asymptote/examples/refs.bib
+2020/03/04 | 993 | graphics/asymptote/examples/RiemannSphere.asy
+2020/03/04 | 369 | graphics/asymptote/examples/RiemannSurface.asy
+2020/03/04 | 386 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
+2020/03/04 | 141 | graphics/asymptote/examples/ring.asy
+2020/03/04 | 182 | graphics/asymptote/examples/roll.asy
+2020/03/04 | 1310 | graphics/asymptote/examples/roundpath.asy
+2020/03/04 | 288 | graphics/asymptote/examples/sacone3D.asy
+2020/03/04 | 445 | graphics/asymptote/examples/sacone.asy
+2020/03/04 | 341 | graphics/asymptote/examples/sacylinder3D.asy
+2020/03/04 | 400 | graphics/asymptote/examples/sacylinder.asy
+2020/03/04 | 66 | graphics/asymptote/examples/shade.asy
+2020/03/04 | 104 | graphics/asymptote/examples/shadestroke.asy
+2020/03/04 | 1065 | graphics/asymptote/examples/shellmethod.asy
+2020/03/04 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
+2020/03/04 | 410 | graphics/asymptote/examples/Sierpinski.asy
+2020/03/04 | 849 | graphics/asymptote/examples/SierpinskiGasket.asy
+2020/03/04 | 2361 | graphics/asymptote/examples/SierpinskiSponge.asy
+2020/03/04 | 327 | graphics/asymptote/examples/sin1x.asy
+2020/03/04 | 579 | graphics/asymptote/examples/sin3.asy
+2020/03/04 | 591 | graphics/asymptote/examples/sinc.asy
+2020/03/04 | 385 | graphics/asymptote/examples/sinxlex.asy
+2020/03/04 | 3340 | graphics/asymptote/examples/slidedemo.asy
+2020/03/04 | 341 | graphics/asymptote/examples/slidedemo_.bbl
+2020/03/04 | 2043 | graphics/asymptote/examples/slope.asy
+2020/03/04 | 520 | graphics/asymptote/examples/smoothelevation.asy
+2020/03/04 | 2658 | graphics/asymptote/examples/soccerball.asy
+2020/03/04 | 2362 | graphics/asymptote/examples/spectrum.asy
+2020/03/04 | 141 | graphics/asymptote/examples/sphere.asy
+2020/03/04 | 150 | graphics/asymptote/examples/spheresilhouette.asy
+2020/03/04 | 165 | graphics/asymptote/examples/sphereskeleton.asy
+2020/03/04 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
+2020/03/04 | 426 | graphics/asymptote/examples/spiral3.asy
+2020/03/04 | 210 | graphics/asymptote/examples/spiral.asy
+2020/03/04 | 618 | graphics/asymptote/examples/spline.asy
+2020/03/04 | 2180 | graphics/asymptote/examples/splitpatch.asy
+2020/03/04 | 38 | graphics/asymptote/examples/spring0.asy
+2020/03/04 | 43 | graphics/asymptote/examples/spring2.asy
+2020/03/04 | 671 | graphics/asymptote/examples/spring.asy
+2020/03/04 | 674 | graphics/asymptote/examples/sqrtx01.asy
+2020/03/04 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
+2020/03/04 | 145 | graphics/asymptote/examples/star.asy
+2020/03/04 | 170 | graphics/asymptote/examples/stereoscopic.asy
+2020/03/04 | 59 | graphics/asymptote/examples/stroke3.asy
+2020/03/04 | 315 | graphics/asymptote/examples/strokepath.asy
+2020/03/04 | 168 | graphics/asymptote/examples/strokeshade.asy
+2020/03/04 | 198 | graphics/asymptote/examples/tanh.asy
+2020/03/04 | 13739 | graphics/asymptote/examples/teapot.asy
+2020/03/04 | 303 | graphics/asymptote/examples/tensor.asy
+2020/03/04 | 547 | graphics/asymptote/examples/tetra.asy
+2020/03/04 | 312 | graphics/asymptote/examples/textpath.asy
+2020/03/04 | 10210 | graphics/asymptote/examples/thermodynamics.asy
+2020/03/04 | 576 | graphics/asymptote/examples/threeviews.asy
+2020/03/04 | 104 | graphics/asymptote/examples/tiling.asy
+2020/03/04 | 413 | graphics/asymptote/examples/torus.asy
+2020/03/04 | 246 | graphics/asymptote/examples/transparency.asy
+2020/03/04 | 250 | graphics/asymptote/examples/transparentCubes.asy
+2020/03/04 | 602 | graphics/asymptote/examples/treetest.asy
+2020/03/04 | 589 | graphics/asymptote/examples/trefoilknot.asy
+2020/03/04 | 969 | graphics/asymptote/examples/triads.asy
+2020/03/04 | 209 | graphics/asymptote/examples/triangle.asy
+2020/03/04 | 441 | graphics/asymptote/examples/triangles.asy
+2020/03/04 | 251 | graphics/asymptote/examples/triceratops.asy
+2020/03/04 | 291 | graphics/asymptote/examples/trumpet.asy
+2020/03/04 | 2084 | graphics/asymptote/examples/truncatedIcosahedron.asy
+2020/03/04 | 40326 | graphics/asymptote/examples/tvgen.asy
+2020/03/04 | 885 | graphics/asymptote/examples/twistedtubes.asy
+2020/03/04 | 26096 | graphics/asymptote/examples/uhrturm.obj
+2020/03/04 | 322 | graphics/asymptote/examples/unitcircle.asy
+2020/03/04 | 714 | graphics/asymptote/examples/unitoctant.asy
+2020/03/04 | 199 | graphics/asymptote/examples/upint.asy
+2020/03/04 | 525 | graphics/asymptote/examples/vectorfield3.asy
+2020/03/04 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
+2020/03/04 | 839 | graphics/asymptote/examples/venn3.asy
+2020/03/04 | 626 | graphics/asymptote/examples/venn.asy
+2020/03/04 | 784 | graphics/asymptote/examples/vertexshading.asy
+2020/03/04 | 360 | graphics/asymptote/examples/washer.asy
+2020/03/04 | 1010 | graphics/asymptote/examples/washermethod.asy
+2020/03/04 | 628 | graphics/asymptote/examples/wedge.asy
+2020/03/04 | 1036 | graphics/asymptote/examples/workcone.asy
+2020/03/04 | 978 | graphics/asymptote/examples/worksheet.asy
+2020/03/04 | 2633 | graphics/asymptote/examples/worldmap.asy
+2020/03/04 | 1261761 | graphics/asymptote/examples/worldmap.dat
+2020/03/04 | 580 | graphics/asymptote/examples/xsin1x.asy
+2020/03/04 | 3746 | graphics/asymptote/examples/xstitch.asy
+2020/03/04 | 743 | graphics/asymptote/examples/xxsq01.asy
+2020/03/04 | 868 | graphics/asymptote/examples/xxsq01x-1.asy
+2020/03/04 | 827 | graphics/asymptote/examples/xxsq01y.asy
+2020/03/04 | 223 | graphics/asymptote/examples/yingyang.asy
+2020/03/04 | 33877 | graphics/asymptote/exp.cc
+2020/03/04 | 28809 | graphics/asymptote/exp.h
+2020/03/04 | 119 | graphics/asymptote/fftw++asy.cc
+2020/03/04 | 1694 | graphics/asymptote/fftw++.cc
+2020/03/04 | 44894 | graphics/asymptote/fftw++.h
+2020/03/04 | 4063 | graphics/asymptote/fileio.cc
+2020/03/04 | 19984 | graphics/asymptote/fileio.h
+2020/03/04 | 1245 | graphics/asymptote/findsym.pl
+2020/03/04 | 1020 | graphics/asymptote/flatguide.cc
+2020/03/04 | 4231 | graphics/asymptote/flatguide.h
+2020/03/04 | 666 | graphics/asymptote/fpu.h
+2020/03/04 | 2173 | graphics/asymptote/frame.h
+2020/03/04 | 7935 | graphics/asymptote/fundec.cc
+2020/03/04 | 4347 | graphics/asymptote/fundec.h
+2020/03/04 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
+2020/03/04 | 3161 | graphics/asymptote/genv.cc
+2020/03/04 | 1626 | graphics/asymptote/genv.h
+2020/03/04 | 4520 | graphics/asymptote/getopt1.c
+2020/03/04 | 30147 | graphics/asymptote/getopt.c
+2020/03/04 | 6650 | graphics/asymptote/getopt.h
+2020/03/04 | 152 | graphics/asymptote/glew.c
+2020/03/04 | 1235777 | graphics/asymptote/GL/glew.c
+2020/03/04 | 1186601 | graphics/asymptote/GL/glew.h
+2020/03/04 | 73435 | graphics/asymptote/GL/glxew.h
+2020/03/04 | 76801 | graphics/asymptote/gl-matrix-2.4.0-pruned/dist/gl-matrix.js
+2020/03/04 | 1131 | graphics/asymptote/gl-matrix-2.4.0-pruned/LICENSE.js
+2020/03/04 | 44732 | graphics/asymptote/glrender.cc
+2020/03/04 | 8650 | graphics/asymptote/glrender.h
+2020/03/04 | 63314 | graphics/asymptote/GL/wglew.h
+2020/03/04 | 50697 | graphics/asymptote/gsl.cc
+2020/03/04 | 22 | graphics/asymptote/GUI/configs/__init__.py
+2020/03/04 | 1148 | graphics/asymptote/GUI/configs/xasyconfig.cson
+2020/03/04 | 395 | graphics/asymptote/GUI/configs/xasykeymap.cson
+2020/03/04 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
+2020/03/04 | 131 | graphics/asymptote/GUI/DebugFlags.py
+2020/03/04 | 1175 | graphics/asymptote/guide.cc
+2020/03/04 | 298 | graphics/asymptote/guideflags.h
+2020/03/04 | 6783 | graphics/asymptote/guide.h
+2020/03/04 | 1724 | graphics/asymptote/GUI/GuidesManager.py
+2020/03/04 | 164511 | graphics/asymptote/GUI/icons_rc.py
+2020/03/04 | 23 | graphics/asymptote/GUI/__init__.py
+2020/03/04 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
+2020/03/04 | 5151 | graphics/asymptote/GUI/labelEditor.py
+2020/03/04 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
+2020/03/04 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
+2020/03/04 | 9945 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
+2020/03/04 | 6154 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
+2020/03/04 | 2825 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
+2020/03/04 | 7129 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
+2020/03/04 | 2193 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
+2020/03/04 | 4849 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
+2020/03/04 | 4668 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
+2020/03/04 | 56646 | graphics/asymptote/GUI/pyUIClass/window1.py
+2020/03/04 | 57 | graphics/asymptote/GUI/requirements.txt
+2020/03/04 | 361 | graphics/asymptote/GUI/res/icons/anchor.svg
+2020/03/04 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
+2020/03/04 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
+2020/03/04 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
+2020/03/04 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
+2020/03/04 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
+2020/03/04 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
+2020/03/04 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
+2020/03/04 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
+2020/03/04 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
+2020/03/04 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
+2020/03/04 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
+2020/03/04 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
+2020/03/04 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
+2020/03/04 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
+2020/03/04 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
+2020/03/04 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
+2020/03/04 | 589 | graphics/asymptote/GUI/res/icons/bucket.asy
+2020/03/04 | 1492 | graphics/asymptote/GUI/res/icons/bucket.svg
+2020/03/04 | 111 | graphics/asymptote/GUI/res/icons/center.asy
+2020/03/04 | 124 | graphics/asymptote/GUI/res/icons/centerorigin.asy
+2020/03/04 | 1052 | graphics/asymptote/GUI/res/icons/centerorigin.svg
+2020/03/04 | 892 | graphics/asymptote/GUI/res/icons/center.svg
+2020/03/04 | 780 | graphics/asymptote/GUI/res/icons/check.svg
+2020/03/04 | 1013 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
+2020/03/04 | 998 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
+2020/03/04 | 754 | graphics/asymptote/GUI/res/icons/circle.svg
+2020/03/04 | 105 | graphics/asymptote/GUI/res/icons/closedcurve.asy
+2020/03/04 | 1237 | graphics/asymptote/GUI/res/icons/closedcurve.svg
+2020/03/04 | 105 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
+2020/03/04 | 1102 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
+2020/03/04 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
+2020/03/04 | 1194 | graphics/asymptote/GUI/res/icons/code.svg
+2020/03/04 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
+2020/03/04 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
+2020/03/04 | 1967 | graphics/asymptote/GUI/res/icons/filledbucket.svg
+2020/03/04 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
+2020/03/04 | 964 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
+2020/03/04 | 98 | graphics/asymptote/GUI/res/icons/opencurve.asy
+2020/03/04 | 1186 | graphics/asymptote/GUI/res/icons/opencurve.svg
+2020/03/04 | 98 | graphics/asymptote/GUI/res/icons/openpolygon.asy
+2020/03/04 | 1085 | graphics/asymptote/GUI/res/icons/openpolygon.svg
+2020/03/04 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
+2020/03/04 | 1711 | graphics/asymptote/GUI/res/icons.qrc
+2020/03/04 | 673 | graphics/asymptote/GUI/res/icons/save.svg
+2020/03/04 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
+2020/03/04 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
+2020/03/04 | 284 | graphics/asymptote/GUI/res/icons/text.svg
+2020/03/04 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
+2020/03/04 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
+2020/03/04 | 394 | graphics/asymptote/GUI/setup.py
+2020/03/04 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
+2020/03/04 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
+2020/03/04 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
+2020/03/04 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
+2020/03/04 | 72687 | graphics/asymptote/GUI/Window1.py
+2020/03/04 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
+2020/03/04 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
+2020/03/04 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
+2020/03/04 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
+2020/03/04 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
+2020/03/04 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
+2020/03/04 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
+2020/03/04 | 75576 | graphics/asymptote/GUI/windows/window1.ui
+2020/03/04 | 50497 | graphics/asymptote/GUI/xasy2asy.py
+2020/03/04 | 821 | graphics/asymptote/GUI/xasyArgs.py
+2020/03/04 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
+2020/03/04 | 2554 | graphics/asymptote/GUI/xasyFile.py
+2020/03/04 | 5048 | graphics/asymptote/GUI/xasyOptions.py
+2020/03/04 | 503 | graphics/asymptote/GUI/xasy.py
+2020/03/04 | 599 | graphics/asymptote/GUI/xasyStrings.py
+2020/03/04 | 710 | graphics/asymptote/GUI/xasySvg.py
+2020/03/04 | 964 | graphics/asymptote/GUI/xasyTransform.py
+2020/03/04 | 1504 | graphics/asymptote/GUI/xasyUtils.py
+2020/03/04 | 238 | graphics/asymptote/GUI/xasyValidator.py
+2020/03/04 | 12744 | graphics/asymptote/impdatum.cc
+2020/03/04 | 10445 | graphics/asymptote/INSTALL
+2020/03/04 | 15645 | graphics/asymptote/install-sh
+2020/03/04 | 1986 | graphics/asymptote/inst.h
+2020/03/04 | 5538 | graphics/asymptote/interact.cc
+2020/03/04 | 1349 | graphics/asymptote/interact.h
+2020/03/04 | 5857 | graphics/asymptote/item.h
+2020/03/04 | 9065 | graphics/asymptote/jsfile.cc
+2020/03/04 | 1836 | graphics/asymptote/jsfile.h
+2020/03/04 | 609 | graphics/asymptote/keywords.cc
+2020/03/04 | 1253 | graphics/asymptote/keywords.pl
+2020/03/04 | 22355 | graphics/asymptote/knot.cc
+2020/03/04 | 12300 | graphics/asymptote/knot.h
+2020/03/04 | 345 | graphics/asymptote/lexical.h
+2020/03/04 | 83431 | graphics/asymptote/lex.yy.cc
+2020/03/04 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
+2020/03/04 | 35147 | graphics/asymptote/LICENSE
+2020/03/04 | 7639 | graphics/asymptote/LICENSE.LESSER
+2020/03/04 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
+2020/03/04 | 2197 | graphics/asymptote/locate.cc
+2020/03/04 | 577 | graphics/asymptote/locate.h
+2020/03/04 | 5301 | graphics/asymptote/main.cc
+2020/03/04 | 11585 | graphics/asymptote/Makefile.in
+2020/03/04 | 2632 | graphics/asymptote/material.h
+2020/03/04 | 6425 | graphics/asymptote/mathop.h
+2020/03/04 | 5070 | graphics/asymptote/memory.h
+2020/03/04 | 720 | graphics/asymptote/mod.h
+2020/03/04 | 908 | graphics/asymptote/modifier.h
+2020/03/04 | 7445 | graphics/asymptote/name.cc
+2020/03/04 | 5239 | graphics/asymptote/name.h
+2020/03/04 | 4269 | graphics/asymptote/newexp.cc
+2020/03/04 | 1278 | graphics/asymptote/newexp.h
+2020/03/04 | 917 | graphics/asymptote/opcodes.h
+2020/03/04 | 1050 | graphics/asymptote/opsymbols.pl
+2020/03/04 | 5145 | graphics/asymptote/pair.h
+2020/03/04 | 3505 | graphics/asymptote/parser.cc
+2020/03/04 | 852 | graphics/asymptote/parser.h
+2020/03/04 | 5262 | graphics/asymptote/patches/bison.patch
+2020/03/04 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
+2020/03/04 | 1311 | graphics/asymptote/patches/dvipdf
+2020/03/04 | 113 | graphics/asymptote/patches/fixmem.reg
+2020/03/04 | 1524 | graphics/asymptote/patches/flex.patch
+2020/03/04 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
+2020/03/04 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
+2020/03/04 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
+2020/03/04 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
+2020/03/04 | 1082 | graphics/asymptote/patches/README
+2020/03/04 | 38217 | graphics/asymptote/path3.cc
+2020/03/04 | 10604 | graphics/asymptote/path3.h
+2020/03/04 | 34126 | graphics/asymptote/path.cc
+2020/03/04 | 11680 | graphics/asymptote/path.h
+2020/03/04 | 1594 | graphics/asymptote/pen.cc
+2020/03/04 | 28156 | graphics/asymptote/pen.h
+2020/03/04 | 40276 | graphics/asymptote/picture.cc
+2020/03/04 | 3434 | graphics/asymptote/picture.h
+2020/03/04 | 5179 | graphics/asymptote/pipestream.cc
+2020/03/04 | 2624 | graphics/asymptote/pipestream.h
+2020/03/04 | 138 | graphics/asymptote/Pipfile
+2020/03/04 | 2526 | graphics/asymptote/policy.h
+2020/03/04 | 654 | graphics/asymptote/prcfile.h
+2020/03/04 | 974 | graphics/asymptote/prc/Makefile
+2020/03/04 | 70751 | graphics/asymptote/prc/oPRCFile.cc
+2020/03/04 | 51432 | graphics/asymptote/prc/oPRCFile.h
+2020/03/04 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
+2020/03/04 | 2518 | graphics/asymptote/prc/PRCbitStream.h
+2020/03/04 | 177246 | graphics/asymptote/prc/PRCdouble.cc
+2020/03/04 | 3765 | graphics/asymptote/prc/PRCdouble.h
+2020/03/04 | 30208 | graphics/asymptote/prc/PRC.h
+2020/03/04 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
+2020/03/04 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
+2020/03/04 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
+2020/03/04 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
+2020/03/04 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
+2020/03/04 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
+2020/03/04 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
+2020/03/04 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
+2020/03/04 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
+2020/03/04 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
+2020/03/04 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
+2020/03/04 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
+2020/03/04 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
+2020/03/04 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
+2020/03/04 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
+2020/03/04 | 95 | graphics/asymptote/prc/test.asy
+2020/03/04 | 36243 | graphics/asymptote/prc/test.cc
+2020/03/04 | 66751 | graphics/asymptote/prc/writePRC.cc
+2020/03/04 | 48481 | graphics/asymptote/prc/writePRC.h
+2020/03/04 | 116025 | graphics/asymptote/predicates.cc
+2020/03/04 | 986 | graphics/asymptote/predicates.h
+2020/03/04 | 1234 | graphics/asymptote/primitives.h
+2020/03/04 | 25292 | graphics/asymptote/process.cc
+2020/03/04 | 3003 | graphics/asymptote/process.h
+2020/03/04 | 2378 | graphics/asymptote/profile.py
+2020/03/04 | 9892 | graphics/asymptote/profiler.h
+2020/03/04 | 3275 | graphics/asymptote/program.cc
+2020/03/04 | 2562 | graphics/asymptote/program.h
+2020/03/04 | 18964 | graphics/asymptote/psfile.cc
+2020/03/04 | 9306 | graphics/asymptote/psfile.h
+2020/03/04 | 2505 | graphics/asymptote/README
+2020/03/04 | 1704 | graphics/asymptote/record.cc
+2020/03/04 | 2738 | graphics/asymptote/record.h
+2020/03/04 | 1098 | graphics/asymptote/refaccess.cc
+2020/03/04 | 1936 | graphics/asymptote/refaccess.h
+2020/03/04 | 119657 | graphics/asymptote/ReleaseNotes
+2020/03/04 | 62 | graphics/asymptote/revision.cc
+2020/03/04 | 3553 | graphics/asymptote/rounding.h
+2020/03/04 | 73504 | graphics/asymptote/runarray.cc
+2020/03/04 | 1492 | graphics/asymptote/runarray.h
+2020/03/04 | 48669 | graphics/asymptote/runarray.in
+2020/03/04 | 2661 | graphics/asymptote/runbacktrace.cc
+2020/03/04 | 169 | graphics/asymptote/runbacktrace.h
+2020/03/04 | 833 | graphics/asymptote/runbacktrace.in
+2020/03/04 | 17755 | graphics/asymptote/runfile.cc
+2020/03/04 | 969 | graphics/asymptote/runfile.h
+2020/03/04 | 5936 | graphics/asymptote/runfile.in
+2020/03/04 | 8062 | graphics/asymptote/runhistory.cc
+2020/03/04 | 161 | graphics/asymptote/runhistory.h
+2020/03/04 | 5024 | graphics/asymptote/runhistory.in
+2020/03/04 | 16702 | graphics/asymptote/runlabel.cc
+2020/03/04 | 153 | graphics/asymptote/runlabel.h
+2020/03/04 | 12959 | graphics/asymptote/runlabel.in
+2020/03/04 | 21977 | graphics/asymptote/runmath.cc
+2020/03/04 | 269 | graphics/asymptote/runmath.h
+2020/03/04 | 8929 | graphics/asymptote/runmath.in
+2020/03/04 | 16190 | graphics/asymptote/runpair.cc
+2020/03/04 | 299 | graphics/asymptote/runpair.h
+2020/03/04 | 4132 | graphics/asymptote/runpair.in
+2020/03/04 | 25707 | graphics/asymptote/runpath3d.cc
+2020/03/04 | 186 | graphics/asymptote/runpath3d.h
+2020/03/04 | 8016 | graphics/asymptote/runpath3d.in
+2020/03/04 | 26872 | graphics/asymptote/runpath.cc
+2020/03/04 | 177 | graphics/asymptote/runpath.h
+2020/03/04 | 8458 | graphics/asymptote/runpath.in
+2020/03/04 | 56889 | graphics/asymptote/runpicture.cc
+2020/03/04 | 191 | graphics/asymptote/runpicture.h
+2020/03/04 | 19308 | graphics/asymptote/runpicture.in
+2020/03/04 | 18772 | graphics/asymptote/runstring.cc
+2020/03/04 | 188 | graphics/asymptote/runstring.h
+2020/03/04 | 9871 | graphics/asymptote/runstring.in
+2020/03/04 | 12629 | graphics/asymptote/runsystem.cc
+2020/03/04 | 157 | graphics/asymptote/runsystem.h
+2020/03/04 | 5119 | graphics/asymptote/runsystem.in
+2020/03/04 | 1343 | graphics/asymptote/runtimebase.in
+2020/03/04 | 60505 | graphics/asymptote/runtime.cc
+2020/03/04 | 1163 | graphics/asymptote/runtime.h
+2020/03/04 | 20545 | graphics/asymptote/runtime.in
+2020/03/04 | 7230 | graphics/asymptote/runtime.pl
+2020/03/04 | 13628 | graphics/asymptote/runtriple.cc
+2020/03/04 | 320 | graphics/asymptote/runtriple.h
+2020/03/04 | 2675 | graphics/asymptote/runtriple.in
+2020/03/04 | 2113 | graphics/asymptote/seconds.h
+2020/03/04 | 51676 | graphics/asymptote/settings.cc
+2020/03/04 | 2667 | graphics/asymptote/settings.h
+2020/03/04 | 2905 | graphics/asymptote/shaders.cc
+2020/03/04 | 882 | graphics/asymptote/shaders.h
+2020/03/04 | 6660 | graphics/asymptote/simpson.cc
+2020/03/04 | 14448 | graphics/asymptote/stack.cc
+2020/03/04 | 3328 | graphics/asymptote/stack.h
+2020/03/04 | 958 | graphics/asymptote/statistics.h
+2020/03/04 | 12103 | graphics/asymptote/stm.cc
+2020/03/04 | 4400 | graphics/asymptote/stm.h
+2020/03/04 | 8912 | graphics/asymptote/symbol.cc
+2020/03/04 | 2662 | graphics/asymptote/symbol.h
+2020/03/04 | 2697 | graphics/asymptote/table.h
+2020/03/04 | 620 | graphics/asymptote/tests/arith/integer.asy
+2020/03/04 | 449 | graphics/asymptote/tests/arith/pair.asy
+2020/03/04 | 193 | graphics/asymptote/tests/arith/random.asy
+2020/03/04 | 383 | graphics/asymptote/tests/arith/real.asy
+2020/03/04 | 1710 | graphics/asymptote/tests/arith/roots.asy
+2020/03/04 | 639 | graphics/asymptote/tests/arith/transform.asy
+2020/03/04 | 244 | graphics/asymptote/tests/arith/triple.asy
+2020/03/04 | 936 | graphics/asymptote/tests/array/array.asy
+2020/03/04 | 680 | graphics/asymptote/tests/array/delete.asy
+2020/03/04 | 737 | graphics/asymptote/tests/array/determinant.asy
+2020/03/04 | 1927 | graphics/asymptote/tests/array/fields.asy
+2020/03/04 | 4841 | graphics/asymptote/tests/array/slice.asy
+2020/03/04 | 966 | graphics/asymptote/tests/array/solve.asy
+2020/03/04 | 746 | graphics/asymptote/tests/array/sort.asy
+2020/03/04 | 1096 | graphics/asymptote/tests/array/transpose.asy
+2020/03/04 | 276 | graphics/asymptote/tests/bench/6000circles.asy
+2020/03/04 | 2222 | graphics/asymptote/tests/frames/loop.asy
+2020/03/04 | 202 | graphics/asymptote/tests/frames/stat2.asy
+2020/03/04 | 158 | graphics/asymptote/tests/frames/stat.asy
+2020/03/04 | 62 | graphics/asymptote/tests/gc/array.asy
+2020/03/04 | 102 | graphics/asymptote/tests/gc/file.asy
+2020/03/04 | 54 | graphics/asymptote/tests/gc/funcall.asy
+2020/03/04 | 65 | graphics/asymptote/tests/gc/guide.asy
+2020/03/04 | 143 | graphics/asymptote/tests/gc/label.asy
+2020/03/04 | 124 | graphics/asymptote/tests/gc/path.asy
+2020/03/04 | 72 | graphics/asymptote/tests/gc/pen.asy
+2020/03/04 | 193 | graphics/asymptote/tests/gc/shipout.asy
+2020/03/04 | 77 | graphics/asymptote/tests/gc/string.asy
+2020/03/04 | 129 | graphics/asymptote/tests/gc/struct.asy
+2020/03/04 | 70 | graphics/asymptote/tests/gc/transform.asy
+2020/03/04 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
+2020/03/04 | 11907 | graphics/asymptote/tests/gsl/random.asy
+2020/03/04 | 1209 | graphics/asymptote/tests/imp/unravel.asy
+2020/03/04 | 308 | graphics/asymptote/tests/Makefile
+2020/03/04 | 18 | graphics/asymptote/tests/output/circle.asy
+2020/03/04 | 22 | graphics/asymptote/tests/output/line.asy
+2020/03/04 | 1284 | graphics/asymptote/tests/output/Makefile
+2020/03/04 | 1384 | graphics/asymptote/tests/pic/trans.asy
+2020/03/04 | 236 | graphics/asymptote/tests/string/erase.asy
+2020/03/04 | 182 | graphics/asymptote/tests/string/find.asy
+2020/03/04 | 109 | graphics/asymptote/tests/string/insert.asy
+2020/03/04 | 132 | graphics/asymptote/tests/string/length.asy
+2020/03/04 | 187 | graphics/asymptote/tests/string/rfind.asy
+2020/03/04 | 118 | graphics/asymptote/tests/string/substr.asy
+2020/03/04 | 238 | graphics/asymptote/tests/TestLib.asy
+2020/03/04 | 159 | graphics/asymptote/tests/types/cast.asy
+2020/03/04 | 6503 | graphics/asymptote/tests/types/constructor.asy
+2020/03/04 | 155 | graphics/asymptote/tests/types/ecast.asy
+2020/03/04 | 3375 | graphics/asymptote/tests/types/guide.asy
+2020/03/04 | 224 | graphics/asymptote/tests/types/init.asy
+2020/03/04 | 4242 | graphics/asymptote/tests/types/keyword.asy
+2020/03/04 | 4072 | graphics/asymptote/tests/types/order.asy
+2020/03/04 | 2731 | graphics/asymptote/tests/types/resolve.asy
+2020/03/04 | 308 | graphics/asymptote/tests/types/shadow.asy
+2020/03/04 | 1331 | graphics/asymptote/tests/types/spec.asy
+2020/03/04 | 1189 | graphics/asymptote/tests/types/var.asy
+2020/03/04 | 20174 | graphics/asymptote/texfile.cc
+2020/03/04 | 10727 | graphics/asymptote/texfile.h
+2020/03/04 | 1293 | graphics/asymptote/TODO
+2020/03/04 | 6185 | graphics/asymptote/transform.h
+2020/03/04 | 10582 | graphics/asymptote/tr.cc
+2020/03/04 | 3676 | graphics/asymptote/tr.h
+2020/03/04 | 9651 | graphics/asymptote/triple.h
+2020/03/04 | 13884 | graphics/asymptote/types.cc
+2020/03/04 | 15372 | graphics/asymptote/types.h
+2020/03/04 | 9756 | graphics/asymptote/util.cc
+2020/03/04 | 4515 | graphics/asymptote/util.h
+2020/03/04 | 1978 | graphics/asymptote/varinit.cc
+2020/03/04 | 2013 | graphics/asymptote/varinit.h
+2020/03/04 | 901 | graphics/asymptote/virtualfieldaccess.cc
+2020/03/04 | 2328 | graphics/asymptote/virtualfieldaccess.h
+2020/03/04 | 750 | graphics/asymptote/vm.h
+2020/03/04 | 219 | graphics/asymptote/wce
+2020/03/04 | 2146 | graphics/asymptote/webgl/fragment.glsl
+2020/03/04 | 83305 | graphics/asymptote/webgl/gl.js
+2020/03/04 | 815 | graphics/asymptote/webgl/license
+2020/03/04 | 1446 | graphics/asymptote/webgl/vertex.glsl
+2020/03/04 | 6661 | graphics/asymptote/xstream.h
+2020/03/04 | 14663422 | graphics/asymptote.zip
2014/04/16 | 55108 | graphics/asypictureb/asypictureB.dtx
2014/04/16 | 2401 | graphics/asypictureb/asypictureB.ins
2014/04/15 | 637107 | graphics/asypictureb/asypictureB.pdf
@@ -162320,7 +162274,7 @@
2019/12/15 | 404904 | install/macros/latex/contrib/ltxcmds.tds.zip
2011/03/25 | 10183 | install/macros/latex/contrib/ltxdockit.tds.zip
2020/02/26 | 332761 | install/macros/latex/contrib/luacolor.tds.zip
-2020/02/19 | 3471183 | install/macros/latex/contrib/lwarp.tds.zip
+2020/03/04 | 3555135 | install/macros/latex/contrib/lwarp.tds.zip
2019/11/29 | 336437 | install/macros/latex/contrib/magicnum.tds.zip
2009/09/03 | 125014 | install/macros/latex/contrib/makecmds.tds.zip
2018/08/09 | 330020 | install/macros/latex/contrib/marginnote.tds.zip
@@ -162328,7 +162282,7 @@
2014/06/19 | 690439 | install/macros/latex/contrib/matlab-prettifier.tds.zip
2010/03/26 | 732372 | install/macros/latex/contrib/mattens.tds.zip
2013/07/01 | 1898068 | install/macros/latex/contrib/mdframed.tds.zip
-2020/01/27 | 7429686 | install/macros/latex/contrib/media9.tds.zip
+2020/03/04 | 7429785 | install/macros/latex/contrib/media9.tds.zip
2019/11/21 | 3630558 | install/macros/latex/contrib/memoir.tds.zip
2016/08/08 | 586877 | install/macros/latex/contrib/menukeys.tds.zip
2017/11/14 | 704736 | install/macros/latex/contrib/mfirstuc.tds.zip
@@ -162459,14 +162413,14 @@
2015/05/23 | 564970 | install/macros/latex/contrib/xpiano.tds.zip
2012/12/23 | 1365925 | install/macros/latex/contrib/xpicture.tds.zip
2019/04/07 | 571127 | install/macros/latex/contrib/xpinyin.tds.zip
-2019/11/12 | 377728 | install/macros/latex/contrib/xsavebox.tds.zip
+2020/03/04 | 377976 | install/macros/latex/contrib/xsavebox.tds.zip
2011/07/31 | 387124 | install/macros/latex/contrib/xtab.tds.zip
2009/02/27 | 2323785 | install/macros/latex/contrib/yagusylo.tds.zip
2019/03/28 | 12752758 | install/macros/latex/contrib/yathesis.tds.zip
2012/05/03 | 352839 | install/macros/latex/contrib/ydoc.tds.zip
2018/09/08 | 733096 | install/macros/latex/contrib/zhlipsum.tds.zip
2019/04/07 | 292635 | install/macros/latex/contrib/zhnumber.tds.zip
-2019/11/29 | 738022 | install/macros/latex/contrib/zref.tds.zip
+2020/03/03 | 723658 | install/macros/latex/contrib/zref.tds.zip
2020/02/23 | 22572336 | install/macros/latex-dev/latex-base-dev.tds.zip
2019/11/18 | 2636412 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
2020/02/02 | 2551525 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip
@@ -162505,7 +162459,7 @@
2020/02/01 | 1178383 | install/macros/xetex/latex/xepersian.tds.zip
2008/06/20 | 3954 | install/macros/xetex/plain/xetexfontinfo.tds.zip
2013/01/04 | 36361 | install/support/adhocfilelist.tds.zip
-2019/09/16 | 7288555 | install/support/arara.tds.zip
+2020/03/04 | 16997749 | install/support/arara.tds.zip
2019/11/05 | 310742 | install/support/chklref.tds.zip
2017/04/22 | 51557 | install/support/ctanify.tds.zip
2012/05/08 | 180596 | install/support/ctanupload.tds.zip
@@ -165049,312 +165003,6 @@
1999/04/13 | 25453 | language/german/german.sty
1999/04/13 | 25632 | language/german/ngerman.sty
2012/09/23 | 272884 | language/german.zip
-2009/02/13 | 219135 | language/greek/bgreek/doc/latex/bgreek/bgman.pdf
-2009/02/13 | 23249 | language/greek/bgreek/doc/latex/bgreek/bgman.tex
-2007/03/29 | 31299 | language/greek/bgreek/doc/latex/bgreek/bgreek.etx
-2007/03/29 | 14241 | language/greek/bgreek/doc/latex/bgreek/cbgreek.etx
-2009/02/13 | 4689 | language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT
-2007/03/29 | 31817 | language/greek/bgreek/doc/latex/bgreek/qbgreek.etx
-2009/02/13 | 459 | language/greek/bgreek/doc/latex/bgreek/README
-2004/10/23 | 3688 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm
-2004/10/23 | 3708 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm
-2004/10/23 | 3700 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm
-2004/10/23 | 3676 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm
-2004/10/23 | 3708 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm
-2004/10/23 | 3648 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm
-2004/10/23 | 3680 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm
-2004/10/23 | 3668 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm
-2004/10/23 | 3692 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm
-2004/10/23 | 3680 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm
-2004/10/23 | 3688 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm
-2004/10/23 | 3676 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm
-2004/10/23 | 5192 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm
-2004/10/23 | 5212 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm
-2004/10/23 | 5144 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm
-2004/10/23 | 5168 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm
-2004/10/23 | 5180 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm
-2004/10/23 | 5184 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm
-2004/10/23 | 5192 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm
-2004/10/23 | 5212 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm
-2004/10/23 | 5144 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm
-2004/10/23 | 5168 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm
-2004/10/23 | 5180 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm
-2004/10/23 | 5184 | language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm
-2004/10/23 | 3712 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm
-2004/10/23 | 3720 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm
-2004/10/23 | 3708 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm
-2004/10/23 | 3684 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm
-2004/10/23 | 3724 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm
-2004/10/23 | 3712 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm
-2004/10/23 | 3720 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm
-2004/10/23 | 3716 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm
-2004/10/23 | 3720 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm
-2004/10/23 | 3724 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm
-2004/10/23 | 3728 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm
-2004/10/23 | 3720 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm
-2004/10/23 | 5224 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm
-2004/10/23 | 5232 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm
-2004/10/23 | 5208 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm
-2004/10/23 | 5232 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm
-2004/10/23 | 5224 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm
-2004/10/23 | 5308 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm
-2004/10/23 | 5280 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm
-2004/10/23 | 5328 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm
-2004/10/23 | 5308 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm
-2004/10/23 | 5328 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm
-2004/10/23 | 5328 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm
-2004/10/23 | 5312 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm
-2004/10/23 | 3692 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm
-2004/10/23 | 3712 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm
-2004/10/23 | 3704 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm
-2004/10/23 | 3680 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm
-2004/10/23 | 3712 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm
-2004/10/23 | 3652 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm
-2004/10/23 | 3684 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm
-2004/10/23 | 3672 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm
-2004/10/23 | 3696 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm
-2004/10/23 | 3684 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm
-2004/10/23 | 3692 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm
-2004/10/23 | 3680 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm
-2004/10/23 | 5192 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm
-2004/10/23 | 5212 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm
-2004/10/23 | 5144 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm
-2004/10/23 | 5168 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm
-2004/10/23 | 5180 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm
-2004/10/23 | 5184 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm
-2004/10/23 | 5192 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm
-2004/10/23 | 5212 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm
-2004/10/23 | 5144 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm
-2004/10/23 | 5168 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm
-2004/10/23 | 5180 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm
-2004/10/23 | 5188 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm
-2004/10/23 | 5184 | language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm
-2004/10/23 | 3716 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm
-2004/10/23 | 3724 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm
-2004/10/23 | 3712 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm
-2004/10/23 | 3688 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm
-2004/10/23 | 3728 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm
-2004/10/23 | 3716 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm
-2004/10/23 | 3724 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm
-2004/10/23 | 3720 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm
-2004/10/23 | 3724 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm
-2004/10/23 | 3728 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm
-2004/10/23 | 3732 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm
-2004/10/23 | 3724 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm
-2004/10/23 | 5224 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm
-2004/10/23 | 5176 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm
-2004/10/23 | 5216 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm
-2004/10/23 | 5232 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm
-2004/10/23 | 5228 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm
-2004/10/23 | 5208 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm
-2004/10/23 | 5232 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm
-2004/10/23 | 5224 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm
-2004/10/23 | 5308 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm
-2004/10/23 | 5280 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm
-2004/10/23 | 5328 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm
-2004/10/23 | 5308 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm
-2004/10/23 | 5328 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm
-2004/10/23 | 5328 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm
-2004/10/23 | 5312 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm
-2004/10/23 | 5324 | language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf
-2004/10/23 | 1740 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf
-2004/10/23 | 1696 | language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf
-2004/10/23 | 2241 | language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd
-2007/10/26 | 2018 | language/greek/bgreek/tex/latex/bgreek/bcgenc.def
-2004/07/08 | 2132 | language/greek/bgreek/tex/latex/bgreek/bcglmr.fd
-2004/10/23 | 2242 | language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd
-2009/02/08 | 2015 | language/greek/bgreek/tex/latex/bgreek/bcqenc.def
-2004/08/17 | 2132 | language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd
-2007/03/29 | 10747 | language/greek/bgreek/tex/latex/bgreek/bgfonts.tex
-2009/02/13 | 2517 | language/greek/bgreek/tex/latex/bgreek/bgreek.ldf
-2009/02/13 | 424 | language/greek/bgreek/tex/latex/bgreek/bgreek.sty
-2009/02/17 | 2324 | language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf
-2009/02/18 | 924057 | language/greek/bgreek.zip
1998/05/10 | 32148 | language/greek/BibTeX/hellas.bst
1998/04/02 | 101 | language/greek/BibTeX/test.blg
1998/04/02 | 9872 | language/greek/BibTeX/test.dvi
@@ -172813,29 +172461,16 @@
1996/07/17 | 740 | language/sinhala/README.sinhala_tex
1996/10/28 | 299893 | language/sinhala/sinhala_tex.2.1.1.tar.gz
2007/01/29 | 10466 | language/slovenian/slhyph.tex
-2011/10/06 | 1709 | language/spanish/babel/base/README
-2011/10/06 | 14099 | language/spanish/babel/base/spanish2.html
-2011/10/06 | 90204 | language/spanish/babel/base/spanish.dtx
-2011/10/06 | 5043 | language/spanish/babel/base/spanish.ins
-2011/10/06 | 169856 | language/spanish/babel/base/spanish.pdf
-2011/10/06 | 205756 | language/spanish/babel/base.zip
-2008/06/02 | 3078 | language/spanish/babel/contrib/mexican/esmx.cfg
-2008/06/03 | 1351 | language/spanish/babel/contrib/mexican/README
-2008/06/02 | 3449 | language/spanish/babel/contrib/mexican/spanishmx.ldf
-2008/06/02 | 1978 | language/spanish/babel/contrib/mexican/spanishmx.sty
-2009/01/09 | 4837 | language/spanish/babel/contrib/mexican.zip
-2009/01/08 | 1307 | language/spanish/babel/README
-2008/08/30 | 141388 | language/spanish/hyphen/base/division.pdf
-2009/07/31 | 2004 | language/spanish/hyphen/base/eshyph-make.lua
-2009/07/31 | 13837 | language/spanish/hyphen/base/eshyph.src
-2009/07/31 | 4532 | language/spanish/hyphen/base/eshyph-test.tex
-2009/08/01 | 27743 | language/spanish/hyphen/base/eshyph.tex
-2009/07/31 | 2962 | language/spanish/hyphen/base/README
-2009/08/01 | 146711 | language/spanish/hyphen/base.zip
-2010/02/01 | 2259 | language/spanish/hyphen/contrib/sphyphb/README
-2010/02/01 | 10875 | language/spanish/hyphen/contrib/sphyphb/sphyphb.tex
-2010/02/02 | 5338 | language/spanish/hyphen/contrib/sphyphb.zip
-2009/05/19 | 2811 | language/spanish/hyphen/README
+2008/08/30 | 141388 | language/spanish/hyphen-spanish/division.pdf
+2009/07/31 | 2004 | language/spanish/hyphen-spanish/eshyph-make.lua
+2009/07/31 | 13837 | language/spanish/hyphen-spanish/eshyph.src
+2009/07/31 | 4532 | language/spanish/hyphen-spanish/eshyph-test.tex
+2009/08/01 | 27743 | language/spanish/hyphen-spanish/eshyph.tex
+2009/07/31 | 2962 | language/spanish/hyphen-spanish/README
+2009/08/01 | 146711 | language/spanish/hyphen-spanish.zip
+2010/02/01 | 2259 | language/spanish/sphyphb/README
+2010/02/01 | 10875 | language/spanish/sphyphb/sphyphb.tex
+2010/02/02 | 5338 | language/spanish/sphyphb.zip
2006/11/07 | 144269 | language/staves/doc/staves.pdf
2006/11/07 | 150710 | language/staves/doc/symbols.pdf
2006/11/07 | 35 | language/staves/dvips/icelandic.map
@@ -174795,16 +174430,16 @@
2015/05/22 | 6015 | macros/generic/catcodes/use/catchdq.sty
2012/11/07 | 4853 | macros/generic/catcodes/use/stacklet.sty
2015/11/15 | 557118 | macros/generic/catcodes.zip
-2019/05/21 | 1075975 | macros/generic/chemfig/chemfig-en.pdf
-2019/05/21 | 184998 | macros/generic/chemfig/chemfig-en.tex
-2019/05/21 | 1101807 | macros/generic/chemfig/chemfig-fr.pdf
-2019/05/21 | 199739 | macros/generic/chemfig/chemfig-fr.tex
-2019/05/21 | 109562 | macros/generic/chemfig/chemfigold.tex
-2019/05/21 | 371 | macros/generic/chemfig/chemfig.sty
-2019/05/21 | 110557 | macros/generic/chemfig/chemfig.tex
-2019/05/21 | 1124 | macros/generic/chemfig/README
-2019/05/21 | 200 | macros/generic/chemfig/t-chemfig.tex
-2019/05/21 | 2326343 | macros/generic/chemfig.zip
+2020/03/04 | 1087279 | macros/generic/chemfig/chemfig-en.pdf
+2020/03/04 | 185808 | macros/generic/chemfig/chemfig-en.tex
+2020/03/04 | 1115313 | macros/generic/chemfig/chemfig-fr.pdf
+2020/03/04 | 200049 | macros/generic/chemfig/chemfig-fr.tex
+2020/03/04 | 109562 | macros/generic/chemfig/chemfigold.tex
+2020/03/04 | 371 | macros/generic/chemfig/chemfig.sty
+2020/03/04 | 118815 | macros/generic/chemfig/chemfig.tex
+2020/03/04 | 1125 | macros/generic/chemfig/README
+2020/03/04 | 200 | macros/generic/chemfig/t-chemfig.tex
+2020/03/04 | 2353141 | macros/generic/chemfig.zip
1996/04/17 | 17290 | macros/generic/code128/code128.tex
1996/04/17 | 716 | macros/generic/code128/README
1996/04/17 | 4503 | macros/generic/code128/test128.tex
@@ -179361,10 +178996,6 @@
2013/05/20 | 15055 | macros/latex/contrib/babel-contrib/sorbian/usorbian.dtx
2013/05/20 | 132650 | macros/latex/contrib/babel-contrib/sorbian/usorbian.pdf
2014/02/25 | 264919 | macros/latex/contrib/babel-contrib/sorbian.zip
-2015/05/20 | 1703 | macros/latex/contrib/babel-contrib/spanglish/README
-2015/05/20 | 10026 | macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf
-2015/05/20 | 1689 | macros/latex/contrib/babel-contrib/spanglish/spanglish.sty
-2015/05/20 | 5561 | macros/latex/contrib/babel-contrib/spanglish.zip
2016/03/02 | 1585 | macros/latex/contrib/babel-contrib/spanish/README.md
2016/03/02 | 93118 | macros/latex/contrib/babel-contrib/spanish/spanish.dtx
2016/03/02 | 3103 | macros/latex/contrib/babel-contrib/spanish/spanish.ins
@@ -180396,6 +180027,10 @@
2018/11/17 | 2086 | macros/latex/contrib/biblatex-contrib/biblatex-abnt/tests/test.sh
2018/11/17 | 816 | macros/latex/contrib/biblatex-contrib/biblatex-abnt/tests/texlive.sh
2018/11/17 | 916304 | macros/latex/contrib/biblatex-contrib/biblatex-abnt.zip
+2020/03/04 | 2139 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.bbx
+2020/03/04 | 179 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.cbx
+2020/03/04 | 1750 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/README.md
+2020/03/04 | 2440 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial.zip
2018/09/02 | 60311 | macros/latex/contrib/biblatex-contrib/biblatex-anonymous/biblatex-anonymous.pdf
2018/09/02 | 2990 | macros/latex/contrib/biblatex-contrib/biblatex-anonymous/biblatex-anonymous.sty
2018/09/02 | 6427 | macros/latex/contrib/biblatex-contrib/biblatex-anonymous/biblatex-anonymous.tex
@@ -180820,36 +180455,36 @@
2017/11/21 | 1662 | macros/latex/contrib/biblatex-contrib/biblatex-fiwi/latex/dbx/fiwi.dbx
2017/11/21 | 2941 | macros/latex/contrib/biblatex-contrib/biblatex-fiwi/README
2017/11/21 | 793984 | macros/latex/contrib/biblatex-contrib/biblatex-fiwi.zip
-2019/06/05 | 18983 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex_check.py
-2019/08/29 | 1526661 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
-2019/06/05 | 17067 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex
-2019/06/05 | 168087 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
-2019/06/05 | 66208 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-map.py
-2019/06/05 | 3134 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-map-test.bib
-2019/06/05 | 9189 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.bbx
-2019/06/05 | 5181 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.cbx
-2019/06/05 | 131797 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/example.bib
-2019/08/28 | 152085 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx
-2019/08/28 | 8243 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.cbx
-2019/08/28 | 145237 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx
-2019/08/28 | 8672 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx
-2019/06/05 | 904 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015-gbk.def
-2019/08/28 | 112442 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx
-2019/08/28 | 5557 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.cbx
-2019/08/28 | 131301 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx
-2019/08/28 | 15127 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.cbx
-2019/06/05 | 27685 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714texteg.dat
-2019/06/05 | 54657 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714texttobib.pl
-2019/06/05 | 3502 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015eg.tex
-2019/06/05 | 334 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015fmt.tex
-2019/06/05 | 1571 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015lan.tex
-2019/06/05 | 290 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015ms.tex
-2019/06/05 | 286 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015.tex
-2019/06/05 | 2147 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex
-2019/06/05 | 801 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/readme-BibLatex-Check.md
-2019/06/05 | 4785 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/readme-BibLatex-map.md
-2019/08/28 | 41466 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
-2019/08/29 | 1732558 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015.zip
+2020/01/25 | 18983 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex_check.py
+2020/03/04 | 2452077 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
+2020/02/26 | 17185 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex
+2020/03/01 | 187022 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
+2020/01/25 | 66208 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-map.py
+2020/01/25 | 3134 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-map-test.bib
+2020/01/25 | 9268 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.bbx
+2020/01/25 | 5181 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.cbx
+2020/01/25 | 131797 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/example.bib
+2020/02/26 | 153138 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx
+2020/01/25 | 8243 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.cbx
+2020/02/25 | 154674 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx
+2020/01/25 | 8672 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx
+2020/01/25 | 904 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015-gbk.def
+2020/01/25 | 113466 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx
+2020/01/25 | 5557 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.cbx
+2020/01/25 | 132324 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx
+2020/01/25 | 15127 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.cbx
+2020/01/25 | 27685 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714texteg.dat
+2020/01/25 | 54657 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714texttobib.pl
+2020/01/25 | 3502 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015eg.tex
+2020/01/25 | 334 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015fmt.tex
+2020/01/25 | 1571 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015lan.tex
+2020/02/26 | 391 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015ms.tex
+2020/02/26 | 387 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015.tex
+2020/02/28 | 2150 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex
+2020/01/25 | 801 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/readme-BibLatex-Check.md
+2020/01/25 | 4785 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/readme-BibLatex-map.md
+2020/03/04 | 50127 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
+2020/03/04 | 2470251 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015.zip
2020/02/23 | 338442 | macros/latex/contrib/biblatex-contrib/biblatex-gost/doc/biblatex-gost-examples.bib
2020/02/23 | 634668 | macros/latex/contrib/biblatex-contrib/biblatex-gost/doc/biblatex-gost-examples.pdf
2020/02/23 | 5225 | macros/latex/contrib/biblatex-contrib/biblatex-gost/doc/biblatex-gost-examples.tex
@@ -193015,12 +192650,6 @@
2019/04/15 | 18504 | macros/latex/contrib/ltxguidex/ltxguidex.tex
2019/04/15 | 677 | macros/latex/contrib/ltxguidex/README.md
2019/04/15 | 78572 | macros/latex/contrib/ltxguidex.zip
-1999/08/31 | 18007 | macros/latex/contrib/ltxindex/copying.txt
-2008/06/06 | 18009 | macros/latex/contrib/ltxindex/ltxindex.dtx
-2008/06/06 | 80113 | macros/latex/contrib/ltxindex/ltxindex.pdf
-2008/06/06 | 7448 | macros/latex/contrib/ltxindex/ltxindex.sty
-2007/01/10 | 566 | macros/latex/contrib/ltxindex/README
-2008/06/06 | 85744 | macros/latex/contrib/ltxindex.zip
2012/11/22 | 3940 | macros/latex/contrib/ltxkeys/doc/ltxkeys-guide.cfg
2012/02/06 | 1242289 | macros/latex/contrib/ltxkeys/doc/ltxkeys-guide.pdf
2012/08/13 | 4822 | macros/latex/contrib/ltxkeys/doc/ltxkeys-guide-table1.tex
@@ -193069,15 +192698,15 @@
1999/06/10 | 980 | macros/latex/contrib/lucold/t1hlos.fd
1999/05/25 | 407 | macros/latex/contrib/lucold/test.tex
2005/04/30 | 25682 | macros/latex/contrib/lucold.zip
-2020/02/19 | 719 | macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
-2020/02/19 | 89 | macros/latex/contrib/lwarp/lwarp_baseline_marker.png
-2020/02/19 | 2177642 | macros/latex/contrib/lwarp/lwarp.dtx
-2020/02/19 | 27143 | macros/latex/contrib/lwarp/lwarp.ins
-2020/02/19 | 28612 | macros/latex/contrib/lwarp/lwarpmk.lua
-2020/02/19 | 2633200 | macros/latex/contrib/lwarp/lwarp.pdf
-2020/02/19 | 2947 | macros/latex/contrib/lwarp/lwarp_tutorial.txt
-2020/02/19 | 1623 | macros/latex/contrib/lwarp/README.txt
-2020/02/19 | 3011758 | macros/latex/contrib/lwarp.zip
+2020/03/04 | 719 | macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
+2020/03/04 | 89 | macros/latex/contrib/lwarp/lwarp_baseline_marker.png
+2020/03/04 | 2259480 | macros/latex/contrib/lwarp/lwarp.dtx
+2020/03/04 | 27979 | macros/latex/contrib/lwarp/lwarp.ins
+2020/03/04 | 28734 | macros/latex/contrib/lwarp/lwarpmk.lua
+2020/03/04 | 2685560 | macros/latex/contrib/lwarp/lwarp.pdf
+2020/03/04 | 2947 | macros/latex/contrib/lwarp/lwarp_tutorial.txt
+2020/03/04 | 1623 | macros/latex/contrib/lwarp/README.txt
+2020/03/04 | 3075660 | macros/latex/contrib/lwarp.zip
2006/09/11 | 4093 | macros/latex/contrib/lyx/sikumuna/article-sikumuna.layout
2006/09/11 | 781 | macros/latex/contrib/lyx/sikumuna/README
2006/09/11 | 1806 | macros/latex/contrib/lyx/sikumuna.zip
@@ -193492,7 +193121,7 @@
2008/06/23 | 311275 | macros/latex/contrib/mdwtools/syntax.pdf
1999/03/25 | 19268 | macros/latex/contrib/mdwtools/syntax.sty
2008/06/23 | 1901320 | macros/latex/contrib/mdwtools.zip
-2020/01/27 | 13195 | macros/latex/contrib/media9/ChangeLog
+2020/03/04 | 13406 | macros/latex/contrib/media9/ChangeLog
2019/01/02 | 7152 | macros/latex/contrib/media9/doc/files/3dsystem.fig
2019/01/02 | 5989 | macros/latex/contrib/media9/doc/files/3dsystem.pdf
2019/01/02 | 1550 | macros/latex/contrib/media9/doc/files/3dsystem.tex
@@ -193520,14 +193149,14 @@
2019/01/02 | 1268 | macros/latex/contrib/media9/doc/files/malte.js
2019/01/02 | 105696 | macros/latex/contrib/media9/doc/files/malte.u3d
2019/01/02 | 20206 | macros/latex/contrib/media9/doc/files/random.mp4
-2020/01/27 | 3735214 | macros/latex/contrib/media9/doc/media9.pdf
+2020/03/04 | 3735211 | macros/latex/contrib/media9/doc/media9.pdf
2020/01/27 | 93396 | macros/latex/contrib/media9/doc/media9.tex
2019/01/02 | 29121 | macros/latex/contrib/media9/javascript/3Dmenu.js
2019/01/02 | 972 | macros/latex/contrib/media9/javascript/3Dspintool.js
2019/01/02 | 3307 | macros/latex/contrib/media9/javascript/animation.js
2019/01/02 | 2561 | macros/latex/contrib/media9/javascript/asylabels.js
-2020/01/27 | 79666 | macros/latex/contrib/media9/media9.sty
-2020/01/27 | 49749 | macros/latex/contrib/media9/pdfbase.sty
+2020/03/04 | 79666 | macros/latex/contrib/media9/media9.sty
+2020/03/04 | 49864 | macros/latex/contrib/media9/pdfbase.sty
2019/01/02 | 14420 | macros/latex/contrib/media9/players/APlayer9.mxml
2019/01/02 | 206165 | macros/latex/contrib/media9/players/APlayer9.swf
2019/01/02 | 15323 | macros/latex/contrib/media9/players/APlayer.mxml
@@ -193543,7 +193172,7 @@
2019/01/02 | 12571 | macros/latex/contrib/media9/players/VPlayer.mxml
2019/01/02 | 483412 | macros/latex/contrib/media9/players/VPlayer.swf
2019/05/09 | 2053 | macros/latex/contrib/media9/README.md
-2020/01/27 | 7424396 | macros/latex/contrib/media9.zip
+2020/03/04 | 7424495 | macros/latex/contrib/media9.zip
2015/11/12 | 2413 | macros/latex/contrib/medstarbeamer/beamercolorthemeMedStarColors.sty
2015/11/12 | 1715 | macros/latex/contrib/medstarbeamer/example.tex
2015/11/12 | 3149 | macros/latex/contrib/medstarbeamer/medstarbeamer.cls
@@ -207045,12 +206674,12 @@
2012/05/21 | 1841 | macros/latex/contrib/xpunctuate/xpunctuate.ins
2012/05/23 | 212109 | macros/latex/contrib/xpunctuate/xpunctuate.pdf
2012/05/24 | 204303 | macros/latex/contrib/xpunctuate.zip
-2019/11/12 | 1079 | macros/latex/contrib/xsavebox/ChangeLog
-2018/06/26 | 1566 | macros/latex/contrib/xsavebox/README.md
-2019/11/12 | 368416 | macros/latex/contrib/xsavebox/xsavebox.pdf
-2019/11/12 | 11940 | macros/latex/contrib/xsavebox/xsavebox.sty
-2019/06/24 | 10243 | macros/latex/contrib/xsavebox/xsavebox.tex
-2019/11/12 | 376084 | macros/latex/contrib/xsavebox.zip
+2020/03/04 | 1157 | macros/latex/contrib/xsavebox/ChangeLog
+2020/03/04 | 1589 | macros/latex/contrib/xsavebox/README.md
+2020/03/04 | 368610 | macros/latex/contrib/xsavebox/xsavebox.pdf
+2020/03/04 | 11973 | macros/latex/contrib/xsavebox/xsavebox.sty
+2020/03/04 | 10242 | macros/latex/contrib/xsavebox/xsavebox.tex
+2020/03/04 | 376333 | macros/latex/contrib/xsavebox.zip
2020/02/23 | 7301 | macros/latex/contrib/xsim/code/xsim.auxfile.code.tex
2020/02/23 | 6791 | macros/latex/contrib/xsim/code/xsim.base.code.tex
2020/02/23 | 5840 | macros/latex/contrib/xsim/code/xsim.blanks.code.tex
@@ -207480,10 +207109,10 @@
2013/11/26 | 524 | macros/latex/contrib/ziffer/README
2013/11/26 | 3959 | macros/latex/contrib/ziffer/ziffer.sty
2013/11/30 | 2049 | macros/latex/contrib/ziffer.zip
-2019/11/29 | 393 | macros/latex/contrib/zref/README.md
-2019/11/29 | 701783 | macros/latex/contrib/zref.zip
-2019/11/29 | 197044 | macros/latex/contrib/zref/zref.dtx
-2019/11/29 | 686493 | macros/latex/contrib/zref/zref.pdf
+2020/03/03 | 393 | macros/latex/contrib/zref/README.md
+2020/03/04 | 686954 | macros/latex/contrib/zref.zip
+2020/03/03 | 194826 | macros/latex/contrib/zref/zref.dtx
+2020/03/03 | 671033 | macros/latex/contrib/zref/zref.pdf
2008/02/10 | 19110 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/License.txt
2008/06/15 | 248047 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/zwgetfdate.pdf
2008/06/15 | 3902 | macros/latex/contrib/zwgetfdate/doc/latex/zwgetfdate/zwgetfdate.tex
@@ -218018,6 +217647,52 @@
2001/10/07 | 52648 | obsolete/dviware/vms/dvidis.tar.gz
2001/10/07 | 822076 | obsolete/dviware/vms/dviout.tar.gz
2001/10/07 | 166930 | obsolete/dviware/xdvi-dos.tar.gz
+2007/04/20 | 19110 | obsolete/fonts/aecc/COPYING
+2012/12/17 | 6120 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm
+2012/12/17 | 6092 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm
+2012/12/17 | 6128 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm
+2012/12/17 | 6132 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm
+2012/12/17 | 6124 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm
+2012/12/17 | 6108 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm
+2012/12/17 | 6748 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm
+2012/12/17 | 6268 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm
+2012/12/17 | 6272 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm
+2012/12/17 | 7220 | obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm
+2012/12/17 | 3176 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf
+2012/12/17 | 3196 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf
+2012/12/17 | 3188 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf
+2012/12/17 | 3180 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf
+2012/12/17 | 3180 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf
+2012/12/17 | 3180 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf
+2012/12/17 | 3368 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf
+2012/12/17 | 3180 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf
+2012/12/17 | 3180 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf
+2012/12/17 | 3180 | obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf
+2012/12/17 | 1503 | obsolete/fonts/aecc/MANIFEST
+2012/12/17 | 1597 | obsolete/fonts/aecc/README
+2012/12/17 | 2919 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex
+2012/12/13 | 6895 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx
+2012/12/13 | 1200 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx
+2012/12/13 | 2438 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx
+2012/12/13 | 2462 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx
+2012/12/13 | 1451 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx
+2012/12/13 | 2464 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx
+2012/12/13 | 2462 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx
+2012/12/13 | 35624 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx
+2012/12/13 | 35295 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx
+2007/04/20 | 23291 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aesample.tex
+2007/04/20 | 30104 | obsolete/fonts/aecc/src/fonts/contrib/aecc/aet1.etx
+2012/12/11 | 499 | obsolete/fonts/aecc/src/fonts/contrib/aecc/bxittest.tex
+2012/12/17 | 70 | obsolete/fonts/aecc/src/fonts/contrib/aecc/clean
+2012/12/11 | 1235 | obsolete/fonts/aecc/src/fonts/contrib/aecc/germtest.tex
+2012/12/17 | 918 | obsolete/fonts/aecc/src/fonts/contrib/aecc/go
+2012/12/17 | 288 | obsolete/fonts/aecc/src/fonts/contrib/aecc/install
+2012/12/17 | 1259 | obsolete/fonts/aecc/src/fonts/contrib/aecc/makepl
+2007/04/20 | 2585 | obsolete/fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx
+2012/12/11 | 740 | obsolete/fonts/aecc/src/fonts/contrib/aecc/slitest.tex
+2012/12/11 | 1231 | obsolete/fonts/aecc/tex/latex/contrib/aecc/aecc.sty
+2012/12/17 | 1423 | obsolete/fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd
+2012/12/18 | 88528 | obsolete/fonts/aecc.zip
2001/10/07 | 156695 | obsolete/fonts/armenian.tar.gz
2010/05/11 | 527331 | obsolete/fonts/auto1/Auto1.pdf
2010/05/12 | 704 | obsolete/fonts/auto1/doc/Auto1.bib
@@ -232745,6 +232420,312 @@
2007/06/28 | 3539 | obsolete/language/french/frenchpro/INDEX.french
2007/01/12 | 3211 | obsolete/language/french/index.html
2004/11/25 | 2080 | obsolete/language/french/README
+2009/02/13 | 219135 | obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.pdf
+2009/02/13 | 23249 | obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.tex
+2007/03/29 | 31299 | obsolete/language/greek/bgreek/doc/latex/bgreek/bgreek.etx
+2007/03/29 | 14241 | obsolete/language/greek/bgreek/doc/latex/bgreek/cbgreek.etx
+2009/02/13 | 4689 | obsolete/language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT
+2007/03/29 | 31817 | obsolete/language/greek/bgreek/doc/latex/bgreek/qbgreek.etx
+2009/02/13 | 459 | obsolete/language/greek/bgreek/doc/latex/bgreek/README
+2004/10/23 | 3688 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm
+2004/10/23 | 3708 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm
+2004/10/23 | 3700 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm
+2004/10/23 | 3676 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm
+2004/10/23 | 3708 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm
+2004/10/23 | 3648 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm
+2004/10/23 | 3680 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm
+2004/10/23 | 3668 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm
+2004/10/23 | 3692 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm
+2004/10/23 | 3680 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm
+2004/10/23 | 3688 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm
+2004/10/23 | 3676 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm
+2004/10/23 | 5192 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm
+2004/10/23 | 5212 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm
+2004/10/23 | 5144 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm
+2004/10/23 | 5168 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm
+2004/10/23 | 5180 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm
+2004/10/23 | 5184 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm
+2004/10/23 | 5192 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm
+2004/10/23 | 5212 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm
+2004/10/23 | 5144 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm
+2004/10/23 | 5168 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm
+2004/10/23 | 5180 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm
+2004/10/23 | 5184 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm
+2004/10/23 | 3712 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm
+2004/10/23 | 3720 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm
+2004/10/23 | 3708 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm
+2004/10/23 | 3684 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm
+2004/10/23 | 3724 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm
+2004/10/23 | 3712 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm
+2004/10/23 | 3720 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm
+2004/10/23 | 3716 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm
+2004/10/23 | 3720 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm
+2004/10/23 | 3724 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm
+2004/10/23 | 3728 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm
+2004/10/23 | 3720 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm
+2004/10/23 | 5224 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm
+2004/10/23 | 5232 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm
+2004/10/23 | 5208 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm
+2004/10/23 | 5232 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm
+2004/10/23 | 5224 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm
+2004/10/23 | 5308 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm
+2004/10/23 | 5280 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm
+2004/10/23 | 5328 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm
+2004/10/23 | 5308 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm
+2004/10/23 | 5328 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm
+2004/10/23 | 5328 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm
+2004/10/23 | 5312 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm
+2004/10/23 | 3692 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm
+2004/10/23 | 3712 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm
+2004/10/23 | 3704 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm
+2004/10/23 | 3680 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm
+2004/10/23 | 3712 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm
+2004/10/23 | 3652 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm
+2004/10/23 | 3684 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm
+2004/10/23 | 3672 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm
+2004/10/23 | 3696 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm
+2004/10/23 | 3684 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm
+2004/10/23 | 3692 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm
+2004/10/23 | 3680 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm
+2004/10/23 | 5192 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm
+2004/10/23 | 5212 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm
+2004/10/23 | 5144 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm
+2004/10/23 | 5168 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm
+2004/10/23 | 5180 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm
+2004/10/23 | 5184 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm
+2004/10/23 | 5192 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm
+2004/10/23 | 5212 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm
+2004/10/23 | 5144 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm
+2004/10/23 | 5168 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm
+2004/10/23 | 5180 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm
+2004/10/23 | 5188 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm
+2004/10/23 | 5184 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm
+2004/10/23 | 3716 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm
+2004/10/23 | 3724 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm
+2004/10/23 | 3712 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm
+2004/10/23 | 3688 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm
+2004/10/23 | 3728 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm
+2004/10/23 | 3716 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm
+2004/10/23 | 3724 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm
+2004/10/23 | 3720 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm
+2004/10/23 | 3724 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm
+2004/10/23 | 3728 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm
+2004/10/23 | 3732 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm
+2004/10/23 | 3724 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm
+2004/10/23 | 5224 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm
+2004/10/23 | 5176 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm
+2004/10/23 | 5216 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm
+2004/10/23 | 5232 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm
+2004/10/23 | 5228 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm
+2004/10/23 | 5208 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm
+2004/10/23 | 5232 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm
+2004/10/23 | 5224 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm
+2004/10/23 | 5308 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm
+2004/10/23 | 5280 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm
+2004/10/23 | 5328 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm
+2004/10/23 | 5308 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm
+2004/10/23 | 5328 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm
+2004/10/23 | 5328 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm
+2004/10/23 | 5312 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm
+2004/10/23 | 5324 | obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf
+2004/10/23 | 1740 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf
+2004/10/23 | 1696 | obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf
+2004/10/23 | 2241 | obsolete/language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd
+2007/10/26 | 2018 | obsolete/language/greek/bgreek/tex/latex/bgreek/bcgenc.def
+2004/07/08 | 2132 | obsolete/language/greek/bgreek/tex/latex/bgreek/bcglmr.fd
+2004/10/23 | 2242 | obsolete/language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd
+2009/02/08 | 2015 | obsolete/language/greek/bgreek/tex/latex/bgreek/bcqenc.def
+2004/08/17 | 2132 | obsolete/language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd
+2007/03/29 | 10747 | obsolete/language/greek/bgreek/tex/latex/bgreek/bgfonts.tex
+2009/02/13 | 2517 | obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.ldf
+2009/02/13 | 424 | obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.sty
+2009/02/17 | 2324 | obsolete/language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf
+2009/02/18 | 924057 | obsolete/language/greek/bgreek.zip
1999/03/09 | 8443 | obsolete/language/hyphenation/lahyph7.tex
1999/03/09 | 8384 | obsolete/language/hyphenation/lahyph8.tex
1991/07/03 | 38777 | obsolete/language/hyphenation/nl/nehyph1.tex
@@ -232919,6 +232900,11 @@
2001/04/01 | 9356 | obsolete/language/manju/manjutex/tfm/bthvsm.tfm
2001/04/01 | 9348 | obsolete/language/manju/manjutex/tfm/bthvwb.tfm
2001/04/01 | 9356 | obsolete/language/manju/manjutex/tfm/bthvwm.tfm
+2008/06/02 | 3078 | obsolete/language/spanish/babel-contrib/spanish-mx/esmx.cfg
+2008/06/03 | 1351 | obsolete/language/spanish/babel-contrib/spanish-mx/README
+2008/06/02 | 3449 | obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.ldf
+2008/06/02 | 1978 | obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.sty
+2009/01/09 | 4837 | obsolete/language/spanish/babel-contrib/spanish-mx.zip
2013/03/10 | 7088 | obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkii
2013/03/10 | 8883 | obsolete/macros/context/contrib/context-fixme/tex/context/third/fixme/t-fixme.mkiv
2015/02/16 | 4961 | obsolete/macros/context/contrib/context-fixme.zip
@@ -233294,6 +233280,10 @@
2013/05/20 | 113330 | obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasam.pdf
2013/05/20 | 113271 | obsolete/macros/latex/contrib/babel-contrib/bahasa/bahasa.pdf
2017/02/16 | 234490 | obsolete/macros/latex/contrib/babel-contrib/bahasa.zip
+2015/05/20 | 1703 | obsolete/macros/latex/contrib/babel-contrib/spanglish/README
+2015/05/20 | 10026 | obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf
+2015/05/20 | 1689 | obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.sty
+2015/05/20 | 5561 | obsolete/macros/latex/contrib/babel-contrib/spanglish.zip
2019/01/28 | 108077 | obsolete/macros/latex/contrib/babeltools/babeltools.pdf
2019/01/28 | 8670 | obsolete/macros/latex/contrib/babeltools/babeltools.sty
2019/01/28 | 5630 | obsolete/macros/latex/contrib/babeltools/babeltools.tex
@@ -233379,6 +233369,12 @@
2013/09/13 | 19310 | obsolete/macros/latex/contrib/lgrx/README.html
2013/09/13 | 256361 | obsolete/macros/latex/contrib/lgrx.zip
2001/10/07 | 5423 | obsolete/macros/latex/contrib/LH.tar.gz
+1999/08/31 | 18007 | obsolete/macros/latex/contrib/ltxindex/copying.txt
+2008/06/06 | 18009 | obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx
+2008/06/06 | 80113 | obsolete/macros/latex/contrib/ltxindex/ltxindex.pdf
+2008/06/06 | 7448 | obsolete/macros/latex/contrib/ltxindex/ltxindex.sty
+2007/01/10 | 566 | obsolete/macros/latex/contrib/ltxindex/README
+2008/06/06 | 85744 | obsolete/macros/latex/contrib/ltxindex.zip
2014/10/02 | 8909 | obsolete/macros/latex/contrib/marginal/marginal.dtx
2014/10/02 | 89030 | obsolete/macros/latex/contrib/marginal/marginal.pdf
2016/06/29 | 91171 | obsolete/macros/latex/contrib/marginal.zip
@@ -239813,139 +239809,187 @@
2011/05/01 | 29792 | support/ant-worker-tasks/lib/worker-tools.jar
2011/05/01 | 1107 | support/ant-worker-tasks/README
2011/05/02 | 2079536 | support/ant-worker-tasks.zip
-2019/09/16 | 1840860 | support/arara/doc/arara-manual.pdf
-2019/09/16 | 5601 | support/arara/doc/arara-manual.tex
-2019/09/16 | 39 | support/arara/doc/arararc.yaml
-2019/09/16 | 43292 | support/arara/doc/arara.sty
-2019/09/16 | 12788 | support/arara/doc/chapters/building.tex
-2019/09/16 | 22997 | support/arara/doc/chapters/cli.tex
-2019/09/16 | 46090 | support/arara/doc/chapters/concepts.tex
-2019/09/16 | 19614 | support/arara/doc/chapters/configuration.tex
-2019/09/16 | 14196 | support/arara/doc/chapters/deploying.tex
-2019/09/16 | 1955 | support/arara/doc/chapters/foreword.tex
-2019/09/16 | 13864 | support/arara/doc/chapters/introduction.tex
-2019/09/16 | 2120 | support/arara/doc/chapters/license.tex
-2019/09/16 | 11711 | support/arara/doc/chapters/logging.tex
-2019/09/16 | 85797 | support/arara/doc/chapters/methods.tex
-2019/09/16 | 13717 | support/arara/doc/chapters/mvel.tex
-2019/09/16 | 2116 | support/arara/doc/chapters/prologue.tex
-2019/09/16 | 79315 | support/arara/doc/chapters/rules.tex
-2019/09/16 | 7431 | support/arara/doc/chapters/yaml.tex
-2019/09/16 | 140957 | support/arara/doc/figures/arara.png
-2019/09/16 | 60850 | support/arara/doc/figures/dropdown1.pdf
-2019/09/16 | 59101 | support/arara/doc/figures/dropdown2.pdf
-2019/09/16 | 59941 | support/arara/doc/figures/inputbox1.pdf
-2019/09/16 | 58249 | support/arara/doc/figures/inputbox2.pdf
-2019/09/16 | 54949 | support/arara/doc/figures/messagebox1.pdf
-2019/09/16 | 53224 | support/arara/doc/figures/messagebox2.pdf
-2019/09/16 | 61172 | support/arara/doc/figures/optionbox1.pdf
-2019/09/16 | 59540 | support/arara/doc/figures/optionbox2.pdf
-2019/09/16 | 3026 | support/arara/doc/logos/bird.pdf
-2019/09/16 | 14215 | support/arara/doc/logos/logo1.pdf
-2019/09/16 | 14166 | support/arara/doc/logos/logo2.pdf
-2019/09/16 | 1016 | support/arara/doc/rules/manual.yaml
-2019/09/16 | 6131 | support/arara/README.md
-2019/09/16 | 5120594 | support/arara/scripts/arara.jar
-2019/09/16 | 572 | support/arara/scripts/arara.sh
-2019/09/16 | 1250 | support/arara/scripts/rules/animate.yaml
-2019/09/16 | 5767 | support/arara/scripts/rules/bib2gls.yaml
-2019/09/16 | 602 | support/arara/scripts/rules/biber.yaml
-2019/09/16 | 634 | support/arara/scripts/rules/bibtex8.yaml
-2019/09/16 | 634 | support/arara/scripts/rules/bibtexu.yaml
-2019/09/16 | 605 | support/arara/scripts/rules/bibtex.yaml
-2019/09/16 | 1345 | support/arara/scripts/rules/clean.yaml
-2019/09/16 | 1270 | support/arara/scripts/rules/csplain.yaml
-2019/09/16 | 4117 | support/arara/scripts/rules/datatooltk.yaml
-2019/09/16 | 798 | support/arara/scripts/rules/dvipdfmx.yaml
-2019/09/16 | 794 | support/arara/scripts/rules/dvipdfm.yaml
-2019/09/16 | 1234 | support/arara/scripts/rules/dvipspdf.yaml
-2019/09/16 | 785 | support/arara/scripts/rules/dvips.yaml
-2019/09/16 | 606 | support/arara/scripts/rules/dvisvgm.yaml
-2019/09/16 | 1065 | support/arara/scripts/rules/etex.yaml
-2019/09/16 | 1890 | support/arara/scripts/rules/frontespizio.yaml
-2019/09/16 | 330 | support/arara/scripts/rules/halt.yaml
-2019/09/16 | 2606 | support/arara/scripts/rules/indent.yaml
-2019/09/16 | 1572 | support/arara/scripts/rules/latexmk.yaml
-2019/09/16 | 1277 | support/arara/scripts/rules/latex.yaml
-2019/09/16 | 1289 | support/arara/scripts/rules/lualatex.yaml
-2019/09/16 | 1281 | support/arara/scripts/rules/luatex.yaml
-2019/09/16 | 650 | support/arara/scripts/rules/makeglossarieslite.yaml
-2019/09/16 | 2428 | support/arara/scripts/rules/makeglossaries.yaml
-2019/09/16 | 1507 | support/arara/scripts/rules/makeindex.yaml
-2019/09/16 | 1013 | support/arara/scripts/rules/make.yaml
-2019/09/16 | 848 | support/arara/scripts/rules/nomencl.yaml
-2019/09/16 | 1282 | support/arara/scripts/rules/pdfcsplain.yaml
-2019/09/16 | 1289 | support/arara/scripts/rules/pdflatex.yaml
-2019/09/16 | 1281 | support/arara/scripts/rules/pdftex.yaml
-2019/09/16 | 602 | support/arara/scripts/rules/pdftk.yaml
-2019/09/16 | 795 | support/arara/scripts/rules/ps2pdf.yaml
-2019/09/16 | 639 | support/arara/scripts/rules/sketch.yaml
-2019/09/16 | 822 | support/arara/scripts/rules/songidx.yaml
-2019/09/16 | 1979 | support/arara/scripts/rules/texindy.yaml
-2019/09/16 | 1037 | support/arara/scripts/rules/tex.yaml
-2019/09/16 | 840 | support/arara/scripts/rules/tikzmake.yaml
-2019/09/16 | 841 | support/arara/scripts/rules/velocity.yaml
-2019/09/16 | 813 | support/arara/scripts/rules/xdvipdfmx.yaml
-2019/09/16 | 1187 | support/arara/scripts/rules/xelatex.yaml
-2019/09/16 | 1179 | support/arara/scripts/rules/xetex.yaml
-2019/09/16 | 1980 | support/arara/scripts/rules/xindy.yaml
-2019/09/16 | 11737 | support/arara/source/pom.java5.xml
-2019/09/16 | 11739 | support/arara/source/pom.xml
-2019/09/16 | 10152 | support/arara/source/src/main/java/com/github/cereda/arara/Arara.java
-2019/09/16 | 4135 | support/arara/source/src/main/java/com/github/cereda/arara/controller/ConfigurationController.java
-2019/09/16 | 4809 | support/arara/source/src/main/java/com/github/cereda/arara/controller/LanguageController.java
-2019/09/16 | 4345 | support/arara/source/src/main/java/com/github/cereda/arara/controller/LoggingController.java
-2019/09/16 | 4508 | support/arara/source/src/main/java/com/github/cereda/arara/controller/SessionController.java
-2019/09/16 | 5789 | support/arara/source/src/main/java/com/github/cereda/arara/controller/SystemCallController.java
-2019/09/16 | 3107 | support/arara/source/src/main/java/com/github/cereda/arara/model/AraraException.java
-2019/09/16 | 3702 | support/arara/source/src/main/java/com/github/cereda/arara/model/Argument.java
-2019/09/16 | 4241 | support/arara/source/src/main/java/com/github/cereda/arara/model/Command.java
-2019/09/16 | 4730 | support/arara/source/src/main/java/com/github/cereda/arara/model/Conditional.java
-2019/09/16 | 9563 | support/arara/source/src/main/java/com/github/cereda/arara/model/Configuration.java
-2019/09/16 | 2889 | support/arara/source/src/main/java/com/github/cereda/arara/model/Database.java
-2019/09/16 | 5002 | support/arara/source/src/main/java/com/github/cereda/arara/model/Directive.java
-2019/09/16 | 5831 | support/arara/source/src/main/java/com/github/cereda/arara/model/Evaluator.java
-2019/09/16 | 3542 | support/arara/source/src/main/java/com/github/cereda/arara/model/Extractor.java
-2019/09/16 | 5874 | support/arara/source/src/main/java/com/github/cereda/arara/model/FileType.java
-2019/09/16 | 2721 | support/arara/source/src/main/java/com/github/cereda/arara/model/FileTypeResource.java
-2019/09/16 | 23411 | support/arara/source/src/main/java/com/github/cereda/arara/model/Interpreter.java
-2019/09/16 | 5163 | support/arara/source/src/main/java/com/github/cereda/arara/model/Language.java
-2019/09/16 | 6608 | support/arara/source/src/main/java/com/github/cereda/arara/model/Messages.java
-2019/09/16 | 2953 | support/arara/source/src/main/java/com/github/cereda/arara/model/Pair.java
-2019/09/16 | 14956 | support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java
-2019/09/16 | 7739 | support/arara/source/src/main/java/com/github/cereda/arara/model/Resource.java
-2019/09/16 | 3158 | support/arara/source/src/main/java/com/github/cereda/arara/model/RuleCommand.java
-2019/09/16 | 4551 | support/arara/source/src/main/java/com/github/cereda/arara/model/Rule.java
-2019/09/16 | 4262 | support/arara/source/src/main/java/com/github/cereda/arara/model/Session.java
-2019/09/16 | 2991 | support/arara/source/src/main/java/com/github/cereda/arara/model/StopWatch.java
-2019/09/16 | 4580 | support/arara/source/src/main/java/com/github/cereda/arara/model/Trigger.java
-2019/09/16 | 6130 | support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java
-2019/09/16 | 34988 | support/arara/source/src/main/java/com/github/cereda/arara/utils/CommonUtils.java
-2019/09/16 | 9194 | support/arara/source/src/main/java/com/github/cereda/arara/utils/ConfigurationUtils.java
-2019/09/16 | 5317 | support/arara/source/src/main/java/com/github/cereda/arara/utils/DatabaseUtils.java
-2019/09/16 | 3407 | support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveAssembler.java
-2019/09/16 | 2453 | support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveResolver.java
-2019/09/16 | 17364 | support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveUtils.java
-2019/09/16 | 18281 | support/arara/source/src/main/java/com/github/cereda/arara/utils/DisplayUtils.java
-2019/09/16 | 4250 | support/arara/source/src/main/java/com/github/cereda/arara/utils/FileHandlingUtils.java
-2019/09/16 | 4555 | support/arara/source/src/main/java/com/github/cereda/arara/utils/FileSearchingUtils.java
-2019/09/16 | 10113 | support/arara/source/src/main/java/com/github/cereda/arara/utils/InterpreterUtils.java
-2019/09/16 | 10933 | support/arara/source/src/main/java/com/github/cereda/arara/utils/MessageUtils.java
-2019/09/16 | 53125 | support/arara/source/src/main/java/com/github/cereda/arara/utils/Methods.java
-2019/09/16 | 9866 | support/arara/source/src/main/java/com/github/cereda/arara/utils/RuleUtils.java
-2019/09/16 | 3532 | support/arara/source/src/main/java/com/github/cereda/arara/utils/TeeOutputStream.java
-2019/09/16 | 3432 | support/arara/source/src/main/java/com/github/cereda/arara/utils/UnsafeUtils.java
-2019/09/16 | 6342 | support/arara/source/src/main/java/com/github/cereda/arara/utils/VelocityUtils.java
-2019/09/16 | 2154 | support/arara/source/src/main/resources/com/github/cereda/arara/configuration/logback.xml
-2019/09/16 | 22537 | support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_de.properties
-2019/09/16 | 19370 | support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en.properties
-2019/09/16 | 22324 | support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en_QN.properties
-2019/09/16 | 20413 | support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_it.properties
-2019/09/16 | 20695 | support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_nl.properties
-2019/09/16 | 19370 | support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages.properties
-2019/09/16 | 21497 | support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_pt_BR.properties
-2019/09/16 | 3814 | support/arara/source/src/test/java/com/github/cereda/arara/tests/LocalizationTest.java
-2019/09/16 | 7277487 | support/arara.zip
+2020/03/04 | 1827588 | support/arara/doc/arara-manual.pdf
+2020/03/04 | 3313 | support/arara/doc/arara-manual.tex
+2020/03/04 | 39 | support/arara/doc/arararc.yaml
+2020/03/04 | 33056 | support/arara/doc/arara.sty
+2020/03/04 | 11683 | support/arara/doc/chapters/building.tex
+2020/03/04 | 24998 | support/arara/doc/chapters/cli.tex
+2020/03/04 | 36517 | support/arara/doc/chapters/concepts.tex
+2020/03/04 | 19524 | support/arara/doc/chapters/configuration.tex
+2020/03/04 | 13554 | support/arara/doc/chapters/deploying.tex
+2020/03/04 | 12491 | support/arara/doc/chapters/introduction.tex
+2020/03/04 | 2108 | support/arara/doc/chapters/license.tex
+2020/03/04 | 11402 | support/arara/doc/chapters/logging.tex
+2020/03/04 | 79179 | support/arara/doc/chapters/methods.tex
+2020/03/04 | 13537 | support/arara/doc/chapters/mvel.tex
+2020/03/04 | 98918 | support/arara/doc/chapters/rules.tex
+2020/03/04 | 7355 | support/arara/doc/chapters/yaml.tex
+2020/03/04 | 140957 | support/arara/doc/figures/arara.png
+2020/03/04 | 60850 | support/arara/doc/figures/dropdown1.pdf
+2020/03/04 | 59101 | support/arara/doc/figures/dropdown2.pdf
+2020/03/04 | 1347 | support/arara/doc/figures/gl.pdf
+2020/03/04 | 59941 | support/arara/doc/figures/inputbox1.pdf
+2020/03/04 | 58249 | support/arara/doc/figures/inputbox2.pdf
+2020/03/04 | 54949 | support/arara/doc/figures/messagebox1.pdf
+2020/03/04 | 53224 | support/arara/doc/figures/messagebox2.pdf
+2020/03/04 | 61172 | support/arara/doc/figures/optionbox1.pdf
+2020/03/04 | 59540 | support/arara/doc/figures/optionbox2.pdf
+2020/03/04 | 3026 | support/arara/doc/logos/bird.pdf
+2020/03/04 | 14215 | support/arara/doc/logos/logo1.pdf
+2020/03/04 | 14166 | support/arara/doc/logos/logo2.pdf
+2020/03/04 | 1032 | support/arara/doc/rules/manual.yaml
+2020/03/04 | 4494 | support/arara/README.md
+2020/03/04 | 15897061 | support/arara/scripts/arara.jar
+2020/03/04 | 575 | support/arara/scripts/arara.sh
+2020/03/04 | 1248 | support/arara/scripts/rules/animate.yaml
+2020/03/04 | 1464 | support/arara/scripts/rules/asymptote.yaml
+2020/03/04 | 5754 | support/arara/scripts/rules/bib2gls.yaml
+2020/03/04 | 823 | support/arara/scripts/rules/biber.yaml
+2020/03/04 | 612 | support/arara/scripts/rules/bibtex8.yaml
+2020/03/04 | 612 | support/arara/scripts/rules/bibtexu.yaml
+2020/03/04 | 583 | support/arara/scripts/rules/bibtex.yaml
+2020/03/04 | 1338 | support/arara/scripts/rules/clean.yaml
+2020/03/04 | 1263 | support/arara/scripts/rules/csplain.yaml
+2020/03/04 | 4089 | support/arara/scripts/rules/datatooltk.yaml
+2020/03/04 | 781 | support/arara/scripts/rules/dvipdfmx.yaml
+2020/03/04 | 777 | support/arara/scripts/rules/dvipdfm.yaml
+2020/03/04 | 1227 | support/arara/scripts/rules/dvipspdf.yaml
+2020/03/04 | 768 | support/arara/scripts/rules/dvips.yaml
+2020/03/04 | 598 | support/arara/scripts/rules/dvisvgm.yaml
+2020/03/04 | 1027 | support/arara/scripts/rules/etex.yaml
+2020/03/04 | 1898 | support/arara/scripts/rules/frontespizio.yaml
+2020/03/04 | 321 | support/arara/scripts/rules/halt.yaml
+2020/03/04 | 2599 | support/arara/scripts/rules/indent.yaml
+2020/03/04 | 1432 | support/arara/scripts/rules/knitr.yaml
+2020/03/04 | 1530 | support/arara/scripts/rules/latexmk.yaml
+2020/03/04 | 1600 | support/arara/scripts/rules/latex.yaml
+2020/03/04 | 1267 | support/arara/scripts/rules/luahbtex.yaml
+2020/03/04 | 1618 | support/arara/scripts/rules/lualatex.yaml
+2020/03/04 | 1259 | support/arara/scripts/rules/luatex.yaml
+2020/03/04 | 612 | support/arara/scripts/rules/makeglossarieslite.yaml
+2020/03/04 | 2395 | support/arara/scripts/rules/makeglossaries.yaml
+2020/03/04 | 1485 | support/arara/scripts/rules/makeindex.yaml
+2020/03/04 | 986 | support/arara/scripts/rules/make.yaml
+2020/03/04 | 1260 | support/arara/scripts/rules/metapost.yaml
+2020/03/04 | 815 | support/arara/scripts/rules/nomencl.yaml
+2020/03/04 | 587 | support/arara/scripts/rules/pbibtex.yaml
+2020/03/04 | 1275 | support/arara/scripts/rules/pdfcsplain.yaml
+2020/03/04 | 1618 | support/arara/scripts/rules/pdflatex.yaml
+2020/03/04 | 1259 | support/arara/scripts/rules/pdftex.yaml
+2020/03/04 | 579 | support/arara/scripts/rules/pdftk.yaml
+2020/03/04 | 1508 | support/arara/scripts/rules/platex.yaml
+2020/03/04 | 778 | support/arara/scripts/rules/ps2pdf.yaml
+2020/03/04 | 1153 | support/arara/scripts/rules/ptex.yaml
+2020/03/04 | 637 | support/arara/scripts/rules/sketch.yaml
+2020/03/04 | 810 | support/arara/scripts/rules/songidx.yaml
+2020/03/04 | 1956 | support/arara/scripts/rules/texindy.yaml
+2020/03/04 | 1015 | support/arara/scripts/rules/tex.yaml
+2020/03/04 | 833 | support/arara/scripts/rules/tikzmake.yaml
+2020/03/04 | 591 | support/arara/scripts/rules/upbibtex.yaml
+2020/03/04 | 1514 | support/arara/scripts/rules/uplatex.yaml
+2020/03/04 | 1157 | support/arara/scripts/rules/uptex.yaml
+2020/03/04 | 796 | support/arara/scripts/rules/xdvipdfmx.yaml
+2020/03/04 | 1514 | support/arara/scripts/rules/xelatex.yaml
+2020/03/04 | 1157 | support/arara/scripts/rules/xetex.yaml
+2020/03/04 | 926 | support/arara/scripts/rules/xindex.yaml
+2020/03/04 | 1957 | support/arara/scripts/rules/xindy.yaml
+2020/03/04 | 9320 | support/arara/source/build.gradle.kts
+2020/03/04 | 41230 | support/arara/source/src/main/java/org/islandoftex/arara/utils/Methods.java
+2020/03/04 | 5191 | support/arara/source/src/main/kotlin/org/islandoftex/arara/Arara.kt
+2020/03/04 | 7792 | support/arara/source/src/main/kotlin/org/islandoftex/arara/CLI.kt
+2020/03/04 | 3064 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt
+2020/03/04 | 3841 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt
+2020/03/04 | 5433 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt
+2020/03/04 | 2851 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt
+2020/03/04 | 699 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt
+2020/03/04 | 3081 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt
+2020/03/04 | 10249 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt
+2020/03/04 | 5737 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt
+2020/03/04 | 2372 | support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt
+2020/03/04 | 1939 | support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Language.kt
+2020/03/04 | 3723 | support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt
+2020/03/04 | 1485 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt
+2020/03/04 | 4365 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt
+2020/03/04 | 1652 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt
+2020/03/04 | 3646 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/FileType.kt
+2020/03/04 | 14107 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt
+2020/03/04 | 3907 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Session.kt
+2020/03/04 | 923 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt
+2020/03/04 | 1500 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt
+2020/03/04 | 1977 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt
+2020/03/04 | 1439 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt
+2020/03/04 | 793 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt
+2020/03/04 | 12208 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt
+2020/03/04 | 686 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt
+2020/03/04 | 1059 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt
+2020/03/04 | 4923 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt
+2020/03/04 | 4299 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt
+2020/03/04 | 14747 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt
+2020/03/04 | 13130 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt
+2020/03/04 | 1980 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt
+2020/03/04 | 6126 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt
+2020/03/04 | 2416 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
+2020/03/04 | 8526 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt
+2020/03/04 | 3996 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt
+2020/03/04 | 1680 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt
+2020/03/04 | 2190 | support/arara/source/src/main/resources/org/islandoftex/arara/configuration/logback.xml
+2020/03/04 | 261 | support/arara/source/src/main/resources/org/islandoftex/arara/configuration/release-notes
+2020/03/04 | 16896 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_de.properties
+2020/03/04 | 14615 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en.properties
+2020/03/04 | 16580 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties
+2020/03/04 | 15385 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_it.properties
+2020/03/04 | 15540 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties
+2020/03/04 | 14615 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages.properties
+2020/03/04 | 16119 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties
+2020/03/04 | 2625 | support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt
+2020/03/04 | 2438 | support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt
+2020/03/04 | 3789 | support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt
+2020/03/04 | 3919 | support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt
+2020/03/04 | 529 | support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt
+2020/03/04 | 2012 | support/arara/source/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt
+2020/03/04 | 1149 | support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt
+2020/03/04 | 5201 | support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt
+2020/03/04 | 739 | support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/changes/arararc.yaml
+2020/03/04 | 123 | support/arara/source/src/test/resources/executiontests/changes/arara.yaml
+2020/03/04 | 46 | support/arara/source/src/test/resources/executiontests/changes/changes.tex
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/changes/echoone.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/conditionals/arararc.yaml
+2020/03/04 | 148 | support/arara/source/src/test/resources/executiontests/conditionals/conditionals.tex
+2020/03/04 | 191 | support/arara/source/src/test/resources/executiontests/conditionals/echofour.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/conditionals/echoone.yaml
+2020/03/04 | 193 | support/arara/source/src/test/resources/executiontests/conditionals/echothree.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/conditionals/echotwo.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/directive-with-options/arararc.yaml
+2020/03/04 | 174 | support/arara/source/src/test/resources/executiontests/directive-with-options/directive-with-options.tex
+2020/03/04 | 901 | support/arara/source/src/test/resources/executiontests/directive-with-options/echoone.yaml
+2020/03/04 | 74 | support/arara/source/src/test/resources/executiontests/foreign-extension/arararc.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/foreign-extension/echoone.yaml
+2020/03/04 | 27 | support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.my
+2020/03/04 | 27 | support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.xy
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/halt/arararc.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt/echotwo.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/halt-error/arararc.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt-error/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt-error/echotwo.yaml
+2020/03/04 | 58 | support/arara/source/src/test/resources/executiontests/halt-error/halt-error.tex
+2020/03/04 | 304 | support/arara/source/src/test/resources/executiontests/halt-error/halt.yaml
+2020/03/04 | 58 | support/arara/source/src/test/resources/executiontests/halt/halt.tex
+2020/03/04 | 321 | support/arara/source/src/test/resources/executiontests/halt/halt.yaml
+2020/03/04 | 15 | support/arara/source/src/test/resources/executiontests/invalid-config/arararc.yaml
+2020/03/04 | 26 | support/arara/source/src/test/resources/executiontests/invalid-config/invalid-config.tex
+2020/03/04 | 53 | support/arara/source/src/test/resources/executiontests/known-extension/arararc.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/known-extension/echoone.yaml
+2020/03/04 | 27 | support/arara/source/src/test/resources/executiontests/known-extension/known-extension.tex
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/sessions/arararc.yaml
+2020/03/04 | 364 | support/arara/source/src/test/resources/executiontests/sessions/sessionrule.yaml
+2020/03/04 | 31 | support/arara/source/src/test/resources/executiontests/sessions/sessions.tex
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/simple-directive/arararc.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/simple-directive/echoone.yaml
+2020/03/04 | 28 | support/arara/source/src/test/resources/executiontests/simple-directive/simple-directive.tex
+2020/03/04 | 16982217 | support/arara.zip
2001/08/10 | 19878 | support/arraymaker/arraymaker
2001/08/11 | 1352 | support/arraymaker/README
1995/02/22 | 13087 | support/artex/artex
@@ -267170,7 +267214,7 @@
2019/04/01 | 274474 | systems/win32/miktex/tm/packages/bibexport.tar.lzma
2006/01/01 | 17664 | systems/win32/miktex/tm/packages/bib-fr.cab
2013/09/09 | 34440 | systems/win32/miktex/tm/packages/bibhtml.tar.lzma
-2020/03/03 | 1608 | systems/win32/miktex/tm/packages/biblatex2bibitem.tar.lzma
+2020/03/04 | 131187 | systems/win32/miktex/tm/packages/biblatex2bibitem.tar.lzma
2018/11/22 | 884678 | systems/win32/miktex/tm/packages/biblatex-abnt.tar.lzma
2018/09/04 | 64282 | systems/win32/miktex/tm/packages/biblatex-anonymous.tar.lzma
2019/12/03 | 248023 | systems/win32/miktex/tm/packages/biblatex-apa6.tar.lzma
@@ -267824,7 +267868,7 @@
2016/07/06 | 739388 | systems/win32/miktex/tm/packages/ecgdraw.tar.lzma
2005/06/25 | 3333 | systems/win32/miktex/tm/packages/ecltree.cab
2015/12/31 | 438869 | systems/win32/miktex/tm/packages/ecobiblatex.tar.lzma
-2020/02/28 | 879993 | systems/win32/miktex/tm/packages/econ-bst.tar.lzma
+2020/03/04 | 862540 | systems/win32/miktex/tm/packages/econ-bst.tar.lzma
2016/01/19 | 193601 | systems/win32/miktex/tm/packages/econometrics.tar.lzma
2019/12/09 | 846270 | systems/win32/miktex/tm/packages/economic.tar.lzma
2016/07/15 | 172661 | systems/win32/miktex/tm/packages/eco.tar.lzma
@@ -268031,7 +268075,7 @@
2012/06/11 | 1400409 | systems/win32/miktex/tm/packages/fdsymbol.tar.lzma
2019/04/04 | 1598576 | systems/win32/miktex/tm/packages/fduthesis.tar.lzma
2014/10/21 | 18012017 | systems/win32/miktex/tm/packages/featpost.tar.lzma
-2020/02/11 | 328044 | systems/win32/miktex/tm/packages/fei.tar.lzma
+2020/03/04 | 326930 | systems/win32/miktex/tm/packages/fei.tar.lzma
2011/11/22 | 4244 | systems/win32/miktex/tm/packages/fenixpar.tar.lzma
2017/04/17 | 3782095 | systems/win32/miktex/tm/packages/fetamont.tar.lzma
2018/08/02 | 818521 | systems/win32/miktex/tm/packages/fetchbibpes.tar.lzma
@@ -268056,7 +268100,7 @@
2020/02/04 | 281488 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2020/03/03 | 530712 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/03/04 | 529390 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -268148,7 +268192,7 @@
2019/12/20 | 511687 | systems/win32/miktex/tm/packages/forum.tar.lzma
2013/11/22 | 98134 | systems/win32/miktex/tm/packages/fouridx.tar.lzma
2013/04/08 | 49554 | systems/win32/miktex/tm/packages/fouriernc.tar.lzma
-2020/01/15 | 628378 | systems/win32/miktex/tm/packages/fourier.tar.lzma
+2020/03/04 | 571067 | systems/win32/miktex/tm/packages/fourier.tar.lzma
2006/03/13 | 26361 | systems/win32/miktex/tm/packages/fp.cab
2005/04/09 | 409269 | systems/win32/miktex/tm/packages/fpl.cab
2019/01/04 | 335154 | systems/win32/miktex/tm/packages/fpl.tar.lzma
@@ -268295,7 +268339,7 @@
2018/01/18 | 284778 | systems/win32/miktex/tm/packages/graphbox.tar.lzma
2016/11/04 | 1845 | systems/win32/miktex/tm/packages/graphics-cfg.tar.lzma
2018/01/12 | 10092 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma
-2018/01/18 | 10173 | systems/win32/miktex/tm/packages/graphics-pln.tar.lzma
+2020/03/04 | 10568 | systems/win32/miktex/tm/packages/graphics-pln.tar.lzma
2020/02/03 | 2053449 | systems/win32/miktex/tm/packages/graphics.tar.lzma
2014/01/14 | 985128 | systems/win32/miktex/tm/packages/graphicxbox.tar.lzma
2018/01/30 | 410183 | systems/win32/miktex/tm/packages/graphicxpsd.tar.lzma
@@ -268600,8 +268644,8 @@
2020/02/22 | 774844 | systems/win32/miktex/tm/packages/l3build.tar.lzma
2013/05/29 | 156214 | systems/win32/miktex/tm/packages/l3ctr2e.tar.lzma
2020/01/14 | 3982611 | systems/win32/miktex/tm/packages/l3experimental.tar.lzma
-2020/02/26 | 10544552 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
-2020/02/26 | 1825875 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
+2020/03/04 | 10556453 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
+2020/03/04 | 1869247 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
2008/04/02 | 115132 | systems/win32/miktex/tm/packages/labbook.tar.lzma
2006/11/14 | 45130 | systems/win32/miktex/tm/packages/labelcas.cab
2019/05/15 | 27323 | systems/win32/miktex/tm/packages/labels4easylist.tar.lzma
@@ -269190,9 +269234,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/02/14 | 38792 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/02/14 | 42900 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/03/03 | 197377 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/03/03 | 1181413 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/03/03 | 1100869 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/03/04 | 197415 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/03/04 | 1180733 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/03/04 | 1101005 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/02/14 | 13041 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/02/14 | 14036 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -269338,188 +269382,188 @@
2005/06/25 | 43902 | systems/win32/miktex/tm/packages/newsletr.cab
2007/12/30 | 204631 | systems/win32/miktex/tm/packages/newspaper.tar.lzma
2018/06/08 | 440019 | systems/win32/miktex/tm/packages/newtxsf.tar.lzma
-2020/01/27 | 5363606 | systems/win32/miktex/tm/packages/newtx.tar.lzma
+2020/03/04 | 6506989 | systems/win32/miktex/tm/packages/newtx.tar.lzma
2020/02/17 | 288246 | systems/win32/miktex/tm/packages/newtxtt.tar.lzma
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2019/09/11 | 231430 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2020/03/03 | 530545 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/03/03 | 29254 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/03/03 | 33423 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/03/03 | 937767 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/03/03 | 1041977 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/03/03 | 28531 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/03/03 | 30767 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/03/03 | 29317 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/03/03 | 34842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/03/03 | 49694 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/03/03 | 57188 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/03/03 | 84566 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/03/03 | 94301 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/03/03 | 60323 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/03/03 | 67274 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/03/03 | 26662 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/03/03 | 30229 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/03/03 | 328795 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/03/03 | 391674 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/03/03 | 32242 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/03/03 | 36328 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/03/03 | 49315 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/03/03 | 53988 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/03/03 | 199193 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/03/03 | 215429 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/03/03 | 169210 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/03/03 | 184258 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/03/03 | 52043 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/03/03 | 58859 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/03/03 | 20668 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/03/03 | 22936 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/03/03 | 450320 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
-2020/03/03 | 41033 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/03/03 | 45771 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/03/03 | 272524 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/03/03 | 309613 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/03/03 | 40599 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/03/03 | 44940 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/03/03 | 115595 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/03/03 | 130307 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/03/03 | 1249272 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/03/03 | 1382985 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/03/03 | 33554 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/03/03 | 38892 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/03/03 | 43425 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/03/03 | 47986 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/03/03 | 45468 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/03/03 | 50502 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/03/03 | 56694 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/03/03 | 61700 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/03/03 | 133255 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/03/03 | 152101 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/03/03 | 69854 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/03/03 | 72709 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/03/03 | 68739 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/03/03 | 77342 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/03/03 | 246427 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/03/03 | 281512 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/03/03 | 25304 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/03/03 | 28721 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/03/03 | 100709 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/03/03 | 116662 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/03/03 | 63292 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/03/03 | 72567 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/03/03 | 94108 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/03/03 | 111160 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/03/03 | 57752 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/03/03 | 64381 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/03/03 | 456869 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/03/03 | 544811 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/03/03 | 137120 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/03/03 | 149788 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/03/03 | 92933 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/03/03 | 108873 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/03/03 | 15881 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/03/03 | 17674 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/03/03 | 27783 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/03/03 | 29703 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/03/03 | 615497 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/03/03 | 669502 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/03/03 | 499164 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/03/03 | 561256 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/03/03 | 540297 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/03/03 | 576143 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/03/03 | 93442 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/03/03 | 102518 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/03/03 | 1711483 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/03/03 | 1946009 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/03/03 | 67255 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/03/03 | 73637 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/03/03 | 26875 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/03/03 | 31191 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/03/03 | 7497 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/03/03 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/03/03 | 167815 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/03/03 | 182805 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/03/03 | 247554 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/03/03 | 281322 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/03/03 | 87327 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/03/03 | 92093 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/03/03 | 77831 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/03/03 | 86615 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/03/03 | 164889 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/03/03 | 185327 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/03/03 | 148481 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/03/03 | 167254 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/03/03 | 195007 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/03/03 | 177511 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/03/03 | 80461 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/03/03 | 91384 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/03/03 | 30989 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/03/03 | 34832 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/03/03 | 56417 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/03/03 | 62840 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/03/03 | 41874 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/03/03 | 45691 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/03/03 | 45601 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/03/03 | 52017 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/03/03 | 354437 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
-2020/03/03 | 387426 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
-2020/03/03 | 321906 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/03/03 | 356273 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/03/03 | 186883 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/03/03 | 193653 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/03/03 | 207774 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/03/03 | 243360 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/03/03 | 78018 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/03/03 | 87198 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/03/03 | 932999 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/03/03 | 1042554 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/03/03 | 19892 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/03/03 | 23520 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/03/03 | 31154 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/03/03 | 36616 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/03/03 | 63281 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/03/03 | 71708 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/03/03 | 42572 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/03/03 | 50881 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/03/03 | 1104158 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/03/03 | 1231282 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/03/03 | 41872 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/03/03 | 50855 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/03/03 | 53463 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
-2020/03/03 | 59421 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
-2020/03/03 | 26772 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/03/03 | 29168 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/03/03 | 16046 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/03/03 | 17754 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/03/03 | 63105 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/03/03 | 69211 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/03/03 | 147334 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/03/03 | 160716 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/03/03 | 74350 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/03/03 | 84332 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/03/03 | 91342 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/03/03 | 96319 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/03/03 | 2457971 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/03/03 | 2579568 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/03/03 | 54896 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/03/03 | 61079 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/03/03 | 26503 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/03/03 | 32337 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/03/03 | 61607 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/03/03 | 65092 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/03/03 | 247179 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/03/03 | 276689 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/03/03 | 532965 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/03/03 | 563462 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/03/03 | 39187 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/03/03 | 42926 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/03/03 | 197365 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/03/03 | 1180906 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/03/03 | 1100706 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/03/03 | 13060 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/03/03 | 14048 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/03/04 | 529292 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/03/04 | 29255 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/03/04 | 33424 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/03/04 | 937772 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/03/04 | 1041978 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/03/04 | 28530 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/03/04 | 30768 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/03/04 | 29318 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/03/04 | 34842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/03/04 | 49694 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/03/04 | 57188 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/03/04 | 84564 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/03/04 | 94299 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/03/04 | 60325 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/03/04 | 67274 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/03/04 | 26662 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/03/04 | 30231 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/03/04 | 328799 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/03/04 | 391675 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/03/04 | 32242 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/03/04 | 36329 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/03/04 | 49316 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/03/04 | 53990 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/03/04 | 199195 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/03/04 | 215430 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/03/04 | 169212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/03/04 | 184257 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/03/04 | 52044 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/03/04 | 58862 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/03/04 | 20668 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/03/04 | 22936 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/03/04 | 450320 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2020/03/04 | 41033 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/03/04 | 45773 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/03/04 | 272524 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/03/04 | 309611 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/03/04 | 40600 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/03/04 | 44942 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/03/04 | 115594 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/03/04 | 130308 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/03/04 | 1249277 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/03/04 | 1382986 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/03/04 | 33553 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/03/04 | 38892 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/03/04 | 43426 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/03/04 | 47987 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/03/04 | 45468 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/03/04 | 50503 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/03/04 | 56695 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/03/04 | 61700 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/03/04 | 133255 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/03/04 | 152101 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/03/04 | 69855 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/03/04 | 72710 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/03/04 | 68740 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/03/04 | 77343 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/03/04 | 246428 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/03/04 | 281513 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/03/04 | 25305 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/03/04 | 28721 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/03/04 | 100711 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/03/04 | 116663 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/03/04 | 63294 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/03/04 | 72568 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/03/04 | 94110 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/03/04 | 111161 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/03/04 | 57753 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/03/04 | 64382 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/03/04 | 456868 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/03/04 | 544811 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/03/04 | 137123 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/03/04 | 149790 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/03/04 | 92934 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/03/04 | 108872 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/03/04 | 15882 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/03/04 | 17675 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/03/04 | 27784 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/03/04 | 29705 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/03/04 | 615498 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/03/04 | 669503 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/03/04 | 499162 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/03/04 | 561258 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/03/04 | 540301 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/03/04 | 576144 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/03/04 | 93444 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/03/04 | 102518 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/03/04 | 1711487 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/03/04 | 1946016 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/03/04 | 67255 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/03/04 | 73636 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/03/04 | 26875 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/03/04 | 31192 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/03/04 | 7498 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/03/04 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/03/04 | 167815 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/03/04 | 182806 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/03/04 | 247554 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/03/04 | 281324 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/03/04 | 87325 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/03/04 | 92093 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/03/04 | 77832 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/03/04 | 86613 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/03/04 | 164890 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/03/04 | 185327 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/03/04 | 148481 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/03/04 | 167254 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/03/04 | 195009 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/03/04 | 177510 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/03/04 | 80460 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/03/04 | 91385 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/03/04 | 30987 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/03/04 | 34832 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/03/04 | 56417 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/03/04 | 62841 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/03/04 | 41874 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/03/04 | 45691 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/03/04 | 45603 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/03/04 | 52018 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/03/04 | 354439 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
+2020/03/04 | 387425 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
+2020/03/04 | 321906 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/03/04 | 356275 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/03/04 | 186885 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/03/04 | 193655 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/03/04 | 207775 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/03/04 | 243362 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/03/04 | 78019 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/03/04 | 87199 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/03/04 | 932994 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/03/04 | 1042555 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/03/04 | 19893 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/03/04 | 23520 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/03/04 | 31153 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/03/04 | 36618 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/03/04 | 63284 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/03/04 | 71709 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/03/04 | 42574 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/03/04 | 50882 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/03/04 | 1104160 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/03/04 | 1231284 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/03/04 | 41873 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/03/04 | 50856 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/03/04 | 53464 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2020/03/04 | 59421 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2020/03/04 | 26773 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/03/04 | 29170 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/03/04 | 16048 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/03/04 | 17753 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/03/04 | 63106 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/03/04 | 69211 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/03/04 | 147335 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/03/04 | 160717 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/03/04 | 74352 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/03/04 | 84333 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/03/04 | 91342 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/03/04 | 96320 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/03/04 | 2457969 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/03/04 | 2579568 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/03/04 | 54896 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/03/04 | 61077 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/03/04 | 26501 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/03/04 | 32339 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/03/04 | 61609 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/03/04 | 65093 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/03/04 | 247179 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/03/04 | 276691 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/03/04 | 532966 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/03/04 | 563462 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/03/04 | 39187 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/03/04 | 42928 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/03/04 | 197321 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/03/04 | 1181185 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/03/04 | 1100987 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/03/04 | 13061 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/03/04 | 14049 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2020/03/03 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/03/04 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -269834,7 +269878,7 @@
2008/11/07 | 35981 | systems/win32/miktex/tm/packages/prettyref.tar.lzma
2017/07/26 | 201385 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
-2020/03/03 | 368 | systems/win32/miktex/tm/packages/pr.ini
+2020/03/04 | 363 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -270141,7 +270185,7 @@
2019/08/02 | 256441 | systems/win32/miktex/tm/packages/schedule.tar.lzma
2009/01/22 | 155506 | systems/win32/miktex/tm/packages/schemabloc.tar.lzma
2016/02/02 | 534624 | systems/win32/miktex/tm/packages/schemata.tar.lzma
-2020/01/08 | 1946552 | systems/win32/miktex/tm/packages/scholax.tar.lzma
+2020/03/04 | 1820084 | systems/win32/miktex/tm/packages/scholax.tar.lzma
2018/08/24 | 8995560 | systems/win32/miktex/tm/packages/schule.tar.lzma
2020/02/17 | 199619 | systems/win32/miktex/tm/packages/schulmathematik.tar.lzma
2014/12/22 | 761084 | systems/win32/miktex/tm/packages/schulschriften.tar.lzma
@@ -270959,9 +271003,9 @@
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.euc
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.sjis
2020/02/29 | 4935896 | systems/win32/w32tex/aleph-w32.tar.xz
-2020/02/26 | 64061348 | systems/win32/w32tex/biblatex-biber.tar.xz
+2020/03/02 | 64061892 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/03/02 | 601465 | systems/win32/w32tex/ChangeLog
+2020/03/03 | 602336 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -270971,7 +271015,7 @@
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
2020/02/25 | 139773948 | systems/win32/w32tex/context.tar.xz
2020/01/20 | 902564 | systems/win32/w32tex/cweb-w32.tar.xz
-2019/12/14 | 6274812 | systems/win32/w32tex/datetime2.tar.xz
+2020/03/02 | 6281164 | systems/win32/w32tex/datetime2.tar.xz
2020/01/20 | 838484 | systems/win32/w32tex/dvi2ps-w32.tar.xz
2020/01/20 | 483388 | systems/win32/w32tex/dvi2tty-w32.tar.xz
2020/02/29 | 4650792 | systems/win32/w32tex/dvipdfm-w32.tar.xz
@@ -270985,14 +271029,14 @@
2020/02/29 | 29401516 | systems/win32/w32tex/latex.tar.xz
2020/01/20 | 996420 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2020/02/28 | 392756680 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2020/03/02 | 34381664 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/03/02 | 34383256 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/02/18 | 3871452 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2020/03/01 | 3864092 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/02/18 | 3872752 | systems/win32/w32tex/luajittex-w32.tar.xz
-2020/03/01 | 17624564 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2020/03/01 | 17616732 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/03/03 | 17639484 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2020/03/03 | 17629096 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/03/02 | 17309312 | systems/win32/w32tex/luatexja.tar.xz
-2020/03/01 | 16661840 | systems/win32/w32tex/luatex-w32.tar.xz
+2020/03/03 | 16677552 | systems/win32/w32tex/luatex-w32.tar.xz
2020/02/22 | 1598552 | systems/win32/w32tex/makeindex-w32.tar.xz
2015/05/26 | 1542676 | systems/win32/w32tex/manual.tar.xz
2020/01/31 | 438820 | systems/win32/w32tex/mftools.tar.xz
@@ -271002,7 +271046,7 @@
2020/02/17 | 8193972 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
2020/02/29 | 1233788 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/03/01 | 355876 | systems/win32/w32tex/otfbeta.tar.xz
-2020/03/02 | 20610288 | systems/win32/w32tex/pdftex-w32.tar.xz
+2020/03/02 | 20610020 | systems/win32/w32tex/pdftex-w32.tar.xz
2020/03/02 | 82795016 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
2020/03/02 | 2970172 | systems/win32/w32tex/platex.tar.xz
@@ -271016,14 +271060,14 @@
2019/04/15 | 499188 | systems/win32/w32tex/sam2p-w32.tar.xz
2020/01/24 | 24929772 | systems/win32/w32tex/t1fonts.tar.xz
2020/01/19 | 135584 | systems/win32/w32tex/t1utils-w32.tar.xz
-2020/02/29 | 2475116 | systems/win32/w32tex/tex4htk-w32.tar.xz
+2020/03/02 | 2491008 | systems/win32/w32tex/tex4htk-w32.tar.xz
2018/06/20 | 15940044 | systems/win32/w32tex/tex-gyre.tar.xz
2020/02/14 | 2931868 | systems/win32/w32tex/texinfotools-w32.tar.xz
2020/02/18 | 2050610 | systems/win32/w32tex/texinstwin.zip
2020/01/19 | 97168 | systems/win32/w32tex/tiff2png-w32.tar.xz
2013/04/08 | 308444 | systems/win32/w32tex/timesnew.tar.xz
2020/03/02 | 2014 | systems/win32/w32tex/TLW64/00README.TLW64
-2020/03/02 | 93919096 | systems/win32/w32tex/TLW64/tl-win64.zip
+2020/03/03 | 93919099 | systems/win32/w32tex/TLW64/tl-win64.zip
2020/01/20 | 818648 | systems/win32/w32tex/ttf2pk-w32.tar.xz
2020/01/20 | 830576 | systems/win32/w32tex/ttf2pt1-w32.tar.xz
2017/10/13 | 1773368 | systems/win32/w32tex/tuftelatex.tar.xz
@@ -271036,7 +271080,7 @@
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2019/04/08 | 35478888 | systems/win32/w32tex/w32tex-src.tar.xz
2020/03/02 | 98957028 | systems/win32/w32tex/web2c-lib.tar.xz
-2020/02/29 | 43125468 | systems/win32/w32tex/web2c-w32.tar.xz
+2020/03/03 | 43129520 | systems/win32/w32tex/web2c-w32.tar.xz
2020/02/10 | 810988 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2019/12/09 | 22317480 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
2020/02/18 | 1943236 | systems/win32/w32tex/win64/context-w64.tar.xz
@@ -271054,9 +271098,9 @@
2020/02/18 | 3481248 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
2020/03/01 | 3479720 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
2020/02/18 | 3473796 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
-2020/02/18 | 3114356 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
-2020/03/01 | 3115856 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
-2020/02/18 | 3111128 | systems/win32/w32tex/win64/luatex-w64.tar.xz
+2020/03/03 | 3109624 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
+2020/03/03 | 3125448 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
+2020/03/03 | 3117900 | systems/win32/w32tex/win64/luatex-w64.tar.xz
2020/02/22 | 1069172 | systems/win32/w32tex/win64/makeindex-w64.tar.xz
2020/01/31 | 430816 | systems/win32/w32tex/win64/mftools-w64.tar.xz
2020/01/20 | 376164 | systems/win32/w32tex/win64/mftrace-w64.tar.xz
@@ -271175,7 +271219,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/03/04 | 186 | timestamp
+2020/03/05 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index fb4ec0fee2..0d61513e14 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index c9b2334807..e35c090793 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,126 +1,1385 @@
-2020/03/03 | 99 | graphics/asymptote/base/asy_filetype.vim
-2020/03/03 | 998 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
+2020/03/04 | 99 | graphics/asymptote/base/asy_filetype.vim
+2020/03/04 | 998 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
+2020/03/04 | 9945 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
+2020/03/04 | 993 | graphics/asymptote/examples/RiemannSphere.asy
+2020/03/04 | 98 | graphics/asymptote/GUI/res/icons/openpolygon.asy
+2020/03/04 | 98 | graphics/asymptote/GUI/res/icons/opencurve.asy
+2020/03/04 | 9892 | graphics/asymptote/profiler.h
+2020/03/04 | 98918 | support/arara/doc/chapters/rules.tex
+2020/03/04 | 9871 | graphics/asymptote/runstring.in
+2020/03/04 | 986 | support/arara/scripts/rules/make.yaml
+2020/03/04 | 986 | graphics/asymptote/predicates.h
+2020/03/04 | 9836 | graphics/asymptote/doc/asymptote.sty
+2020/03/04 | 980 | graphics/asymptote/examples/lmfit1.asy
+2020/03/04 | 978 | graphics/asymptote/examples/worksheet.asy
+2020/03/04 | 9756 | graphics/asymptote/util.cc
+2020/03/04 | 974 | graphics/asymptote/prc/Makefile
+2020/03/04 | 972 | graphics/asymptote/examples/fequlogo.asy
+2020/03/04 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
+2020/03/04 | 971 | graphics/asymptote/examples/filesurface.asy
+2020/03/04 | 969 | graphics/asymptote/runfile.h
+2020/03/04 | 969 | graphics/asymptote/examples/triads.asy
+2020/03/04 | 966 | graphics/asymptote/tests/array/solve.asy
+2020/03/04 | 9651 | graphics/asymptote/triple.h
+2020/03/04 | 964 | graphics/asymptote/GUI/xasyTransform.py
+2020/03/04 | 964 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
+2020/03/04 | 96320 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/03/04 | 95 | graphics/asymptote/prc/test.asy
+2020/03/04 | 958 | graphics/asymptote/statistics.h
+2020/03/04 | 956 | graphics/asymptote/examples/poster.asy
+2020/03/04 | 9566 | graphics/asymptote/base/bezulate.asy
+2020/03/04 | 946 | graphics/asymptote/examples/animations/cube.asy
+2020/03/04 | 94299 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/03/04 | 94110 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/03/04 | 9399 | graphics/asymptote/base/rationalSimplex.asy
+2020/03/04 | 937772 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/03/04 | 936 | graphics/asymptote/tests/array/array.asy
+2020/03/04 | 93444 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/03/04 | 932994 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/03/04 | 9320 | support/arara/source/build.gradle.kts
+2020/03/04 | 930 | graphics/asymptote/examples/polararea.asy
+2020/03/04 | 9309 | graphics/asymptote/base/plain_paths.asy
+2020/03/04 | 9306 | graphics/asymptote/psfile.h
+2020/03/04 | 92934 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/03/04 | 926 | support/arara/scripts/rules/xindex.yaml
+2020/03/04 | 9251 | graphics/asymptote/errors
+2020/03/04 | 923 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt
+2020/03/04 | 92093 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/03/04 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
+2020/03/04 | 917 | graphics/asymptote/opcodes.h
+2020/03/04 | 91385 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/03/04 | 91342 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/03/04 | 912 | graphics/asymptote/doc/errorbars.asy
+2020/03/04 | 9094 | graphics/asymptote/application.h
+2020/03/04 | 908 | graphics/asymptote/modifier.h
+2020/03/04 | 908 | graphics/asymptote/coenv.h
+2020/03/04 | 9065 | graphics/asymptote/jsfile.cc
+2020/03/04 | 901 | support/arara/source/src/test/resources/executiontests/directive-with-options/echoone.yaml
+2020/03/04 | 901 | graphics/asymptote/virtualfieldaccess.cc
+2020/03/04 | 89 | macros/latex/contrib/lwarp/lwarp_baseline_marker.png
+2020/03/04 | 892 | graphics/asymptote/GUI/res/icons/center.svg
+2020/03/04 | 8929 | graphics/asymptote/runmath.in
+2020/03/04 | 891 | graphics/asymptote/angle.h
+2020/03/04 | 8912 | graphics/asymptote/symbol.cc
+2020/03/04 | 8870 | graphics/asymptote/base/asy.vim
+2020/03/04 | 885 | graphics/asymptote/examples/twistedtubes.asy
+2020/03/04 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
+2020/03/04 | 882 | graphics/asymptote/shaders.h
+2020/03/04 | 880 | graphics/asymptote/doc/xasy.1x
+2020/03/04 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
+2020/03/04 | 877 | graphics/asymptote/doc/markers2.asy
+2020/03/04 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
+2020/03/04 | 87325 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/03/04 | 872 | graphics/asymptote/doc/imagecontour.asy
+2020/03/04 | 87199 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/03/04 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
+2020/03/04 | 868 | graphics/asymptote/examples/xxsq01x-1.asy
+2020/03/04 | 8661 | graphics/asymptote/base/plain_pens.asy
+2020/03/04 | 86613 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/03/04 | 8650 | graphics/asymptote/glrender.h
+2020/03/04 | 862 | graphics/asymptote/doc/flowchartdemo.asy
+2020/03/04 | 862540 | systems/win32/miktex/tm/packages/econ-bst.tar.lzma
+2020/03/04 | 861 | graphics/asymptote/examples/orthocenter.asy
+2020/03/04 | 85787 | graphics/asymptote/base/three.asy
+2020/03/04 | 856 | graphics/asymptote/examples/animations/sphere.asy
+2020/03/04 | 852 | graphics/asymptote/parser.h
+2020/03/04 | 8526 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt
+2020/03/04 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
+2020/03/04 | 849 | graphics/asymptote/examples/SierpinskiGasket.asy
+2020/03/04 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/03/04 | 845 | graphics/asymptote/envcompleter.h
+2020/03/04 | 8458 | graphics/asymptote/runpath.in
+2020/03/04 | 84564 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/03/04 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
+2020/03/04 | 84333 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/03/04 | 839 | graphics/asymptote/examples/venn3.asy
+2020/03/04 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
+2020/03/04 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
+2020/03/04 | 83431 | graphics/asymptote/lex.yy.cc
+2020/03/04 | 833 | support/arara/scripts/rules/tikzmake.yaml
+2020/03/04 | 833 | graphics/asymptote/runbacktrace.in
+2020/03/04 | 833 | graphics/asymptote/examples/markregular.asy
+2020/03/04 | 83305 | graphics/asymptote/webgl/gl.js
+2020/03/04 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
+2020/03/04 | 8290 | graphics/asymptote/base/simplex.asy
+2020/03/04 | 827 | graphics/asymptote/examples/xxsq01y.asy
+2020/03/04 | 8243 | graphics/asymptote/base/asy-kate.sh
+2020/03/04 | 823 | support/arara/scripts/rules/biber.yaml
+2020/03/04 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
+2020/03/04 | 821 | graphics/asymptote/GUI/xasyArgs.py
+2020/03/04 | 821 | graphics/asymptote/doc/secondaryaxis.asy
+2020/03/04 | 81 | graphics/asymptote/doc/bezier.asy
+2020/03/04 | 818 | graphics/asymptote/camperror.h
+2020/03/04 | 815 | support/arara/scripts/rules/nomencl.yaml
+2020/03/04 | 815 | graphics/asymptote/webgl/license
+2020/03/04 | 810 | support/arara/scripts/rules/songidx.yaml
+2020/03/04 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
+2020/03/04 | 8062 | graphics/asymptote/runhistory.cc
+2020/03/04 | 80460 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/03/04 | 8045 | graphics/asymptote/doc/asy.1
+2020/03/04 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
+2020/03/04 | 8016 | graphics/asymptote/runpath3d.in
+2020/03/04 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
+2020/03/04 | 796 | support/arara/scripts/rules/xdvipdfmx.yaml
+2020/03/04 | 79666 | macros/latex/contrib/media9/media9.sty
+2020/03/04 | 793 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt
+2020/03/04 | 7935 | graphics/asymptote/fundec.cc
+2020/03/04 | 79179 | support/arara/doc/chapters/methods.tex
+2020/03/04 | 78 | graphics/asymptote/examples/randompath3.asy
+2020/03/04 | 784 | graphics/asymptote/examples/vertexshading.asy
+2020/03/04 | 781 | support/arara/scripts/rules/dvipdfmx.yaml
+2020/03/04 | 780 | graphics/asymptote/GUI/res/icons/check.svg
+2020/03/04 | 7808 | graphics/asymptote/coder.cc
+2020/03/04 | 78019 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/03/04 | 77 | graphics/asymptote/tests/gc/string.asy
+2020/03/04 | 7792 | support/arara/source/src/main/kotlin/org/islandoftex/arara/CLI.kt
+2020/03/04 | 778 | support/arara/scripts/rules/ps2pdf.yaml
+2020/03/04 | 778 | graphics/asymptote/examples/controlsystem.asy
+2020/03/04 | 77832 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/03/04 | 777 | support/arara/scripts/rules/dvipdfm.yaml
+2020/03/04 | 773 | graphics/asymptote/drawlayer.h
+2020/03/04 | 77343 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/03/04 | 770 | graphics/asymptote/asy.rc
+2020/03/04 | 77097 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+2020/03/04 | 76 | graphics/asymptote/examples/grid.asy
+2020/03/04 | 768 | support/arara/scripts/rules/dvips.yaml
+2020/03/04 | 76801 | graphics/asymptote/gl-matrix-2.4.0-pruned/dist/gl-matrix.js
+2020/03/04 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
+2020/03/04 | 7639 | graphics/asymptote/LICENSE.LESSER
+2020/03/04 | 762 | graphics/asymptote/examples/clockarray.asy
+2020/03/04 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
+2020/03/04 | 7598080 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
+2020/03/04 | 7587328 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
+2020/03/04 | 75576 | graphics/asymptote/GUI/windows/window1.ui
+2020/03/04 | 754 | graphics/asymptote/GUI/res/icons/circle.svg
+2020/03/04 | 754 | graphics/asymptote/doc/graphmarkers.asy
+2020/03/04 | 750 | graphics/asymptote/vm.h
+2020/03/04 | 74 | support/arara/source/src/test/resources/executiontests/foreign-extension/arararc.yaml
+2020/03/04 | 7498 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/03/04 | 747 | graphics/asymptote/examples/pseudosphere.asy
+2020/03/04 | 746 | graphics/asymptote/tests/array/sort.asy
+2020/03/04 | 7445 | graphics/asymptote/name.cc
+2020/03/04 | 743 | graphics/asymptote/examples/xxsq01.asy
+2020/03/04 | 74352 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/03/04 | 7429785 | install/macros/latex/contrib/media9.tds.zip
+2020/03/04 | 7424495 | macros/latex/contrib/media9.zip
+2020/03/04 | 7422 | graphics/asymptote/base/graph_splinetype.asy
+2020/03/04 | 739 | support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt
+2020/03/04 | 739 | graphics/asymptote/examples/condor.asy
+2020/03/04 | 737 | graphics/asymptote/tests/array/determinant.asy
+2020/03/04 | 73636 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/03/04 | 7355 | support/arara/doc/chapters/yaml.tex
+2020/03/04 | 73504 | graphics/asymptote/runarray.cc
+2020/03/04 | 734 | graphics/asymptote/examples/quilt.asy
+2020/03/04 | 73435 | graphics/asymptote/GL/glxew.h
+2020/03/04 | 7307 | graphics/asymptote/base/stats.asy
+2020/03/04 | 7302 | graphics/asymptote/base/markers.asy
+2020/03/04 | 72 | graphics/asymptote/tests/gc/pen.asy
+2020/03/04 | 729 | graphics/asymptote/base/labelpath.asy
+2020/03/04 | 727 | graphics/asymptote/examples/fermi.asy
+2020/03/04 | 72710 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/03/04 | 72687 | graphics/asymptote/GUI/Window1.py
+2020/03/04 | 72568 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/03/04 | 7230 | graphics/asymptote/runtime.pl
+2020/03/04 | 720 | graphics/asymptote/mod.h
+2020/03/04 | 719 | macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
+2020/03/04 | 7193 | graphics/asymptote/base/plain.asy
+2020/03/04 | 71709 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/03/04 | 71605 | graphics/asymptote/base/three_surface.asy
+2020/03/04 | 714 | graphics/asymptote/examples/unitoctant.asy
+2020/03/04 | 714 | graphics/asymptote/examples/gamma3.asy
+2020/03/04 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
+2020/03/04 | 7129 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
+2020/03/04 | 71223 | graphics/asymptote/base/asy-mode.el
+2020/03/04 | 711 | graphics/asymptote/examples/partialsurface.asy
+2020/03/04 | 710 | graphics/asymptote/GUI/xasySvg.py
+2020/03/04 | 710 | graphics/asymptote/examples/fjortoft.asy
+2020/03/04 | 70 | graphics/asymptote/tests/gc/transform.asy
+2020/03/04 | 70751 | graphics/asymptote/prc/oPRCFile.cc
+2020/03/04 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
+2020/03/04 | 699 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt
+2020/03/04 | 69855 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/03/04 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
+2020/03/04 | 69211 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/03/04 | 691 | graphics/asymptote/examples/centroidfg.asy
+2020/03/04 | 6911 | graphics/asymptote/errortest.asy
+2020/03/04 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
+2020/03/04 | 688 | graphics/asymptote/examples/layers.asy
+2020/03/04 | 68740 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/03/04 | 6871 | graphics/asymptote/config.h.in
+2020/03/04 | 686 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt
+2020/03/04 | 686954 | macros/latex/contrib/zref.zip
+2020/03/04 | 6865 | graphics/asymptote/drawlabel.cc
+2020/03/04 | 68543 | graphics/asymptote/base/graph3.asy
+2020/03/04 | 683 | graphics/asymptote/examples/fractaltree.asy
+2020/03/04 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
+2020/03/04 | 680 | graphics/asymptote/tests/array/delete.asy
+2020/03/04 | 679 | graphics/asymptote/examples/genusthree.asy
+2020/03/04 | 6783 | graphics/asymptote/guide.h
+2020/03/04 | 677 | graphics/asymptote/doc/Bode.asy
+2020/03/04 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
+2020/03/04 | 674 | graphics/asymptote/examples/sqrtx01.asy
+2020/03/04 | 674 | graphics/asymptote/drawpath.h
+2020/03/04 | 673 | graphics/asymptote/GUI/res/icons/save.svg
+2020/03/04 | 67274 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/03/04 | 67255 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/03/04 | 671 | graphics/asymptote/examples/spring.asy
+2020/03/04 | 66 | graphics/asymptote/examples/shade.asy
+2020/03/04 | 669503 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/03/04 | 66751 | graphics/asymptote/prc/writePRC.cc
+2020/03/04 | 666 | graphics/asymptote/fpu.h
+2020/03/04 | 6661 | graphics/asymptote/xstream.h
+2020/03/04 | 6660 | graphics/asymptote/simpson.cc
+2020/03/04 | 6650 | graphics/asymptote/getopt.h
+2020/03/04 | 65 | graphics/asymptote/tests/gc/guide.asy
+2020/03/04 | 659 | graphics/asymptote/examples/lowupint.asy
+2020/03/04 | 657 | graphics/asymptote/examples/100d.views
+2020/03/04 | 657 | graphics/asymptote/base/reload.js
+2020/03/04 | 6570 | graphics/asymptote/drawfill.h
+2020/03/04 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
+2020/03/04 | 654 | graphics/asymptote/prcfile.h
+2020/03/04 | 654 | graphics/asymptote/examples/limit.asy
+2020/03/04 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/03/04 | 65093 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/03/04 | 6506989 | systems/win32/miktex/tm/packages/newtx.tar.lzma
+2020/03/04 | 6503 | graphics/asymptote/tests/types/constructor.asy
+2020/03/04 | 649 | graphics/asymptote/examples/NURBScurve.asy
+2020/03/04 | 643 | graphics/asymptote/examples/p-orbital.asy
+2020/03/04 | 64382 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/03/04 | 6425 | graphics/asymptote/mathop.h
+2020/03/04 | 639 | graphics/asymptote/tests/arith/transform.asy
+2020/03/04 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
+2020/03/04 | 63886 | graphics/asymptote/base/graph.asy
+2020/03/04 | 637 | support/arara/scripts/rules/sketch.yaml
+2020/03/04 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
+2020/03/04 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
+2020/03/04 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
+2020/03/04 | 63314 | graphics/asymptote/GL/wglew.h
+2020/03/04 | 63294 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/03/04 | 63284 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/03/04 | 6318 | graphics/asymptote/doc/leastsquares.dat
+2020/03/04 | 63140 | graphics/asymptote/doc/FAQ/asy-faq.info
+2020/03/04 | 63106 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/03/04 | 630 | graphics/asymptote/base/shaders/vertex.glsl
+2020/03/04 | 6300 | graphics/asymptote/asymptote.nsi
+2020/03/04 | 62 | graphics/asymptote/tests/gc/array.asy
+2020/03/04 | 62 | graphics/asymptote/revision.cc
+2020/03/04 | 6292 | graphics/asymptote/base/plain_filldraw.asy
+2020/03/04 | 628 | graphics/asymptote/examples/wedge.asy
+2020/03/04 | 628 | graphics/asymptote/examples/polarcircle.asy
+2020/03/04 | 6285 | graphics/asymptote/base/plain_prethree.asy
+2020/03/04 | 62841 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/03/04 | 626 | graphics/asymptote/examples/venn.asy
+2020/03/04 | 620 | graphics/asymptote/tests/arith/integer.asy
+2020/03/04 | 61 | graphics/asymptote/base/latin1.asy
+2020/03/04 | 619 | graphics/asymptote/doc/logo.asy
+2020/03/04 | 618 | graphics/asymptote/examples/spline.asy
+2020/03/04 | 6185 | graphics/asymptote/transform.h
+2020/03/04 | 61700 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/03/04 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
+2020/03/04 | 6169 | graphics/asymptote/base/plain_strings.asy
+2020/03/04 | 61609 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/03/04 | 6154 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
+2020/03/04 | 615498 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/03/04 | 612 | support/arara/scripts/rules/makeglossarieslite.yaml
+2020/03/04 | 612 | support/arara/scripts/rules/bibtexu.yaml
+2020/03/04 | 612 | support/arara/scripts/rules/bibtex8.yaml
+2020/03/04 | 6126 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt
+2020/03/04 | 61172 | support/arara/doc/figures/optionbox1.pdf
+2020/03/04 | 610 | graphics/asymptote/examples/impact.asy
+2020/03/04 | 61077 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/03/04 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
+2020/03/04 | 609 | graphics/asymptote/keywords.cc
+2020/03/04 | 608 | graphics/asymptote/base/size10.asy
+2020/03/04 | 60850 | support/arara/doc/figures/dropdown1.pdf
+2020/03/04 | 605 | graphics/asymptote/examples/integraltest.asy
+2020/03/04 | 60556 | graphics/asymptote/base/webgl/asygl.js
+2020/03/04 | 60505 | graphics/asymptote/runtime.cc
+2020/03/04 | 604 | graphics/asymptote/doc/flow.asy
+2020/03/04 | 60325 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/03/04 | 602 | graphics/asymptote/examples/treetest.asy
+2020/03/04 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
+2020/03/04 | 600 | graphics/asymptote/base/size11.asy
+2020/03/04 | 59 | graphics/asymptote/examples/stroke3.asy
+2020/03/04 | 599 | graphics/asymptote/GUI/xasyStrings.py
+2020/03/04 | 59941 | support/arara/doc/figures/inputbox1.pdf
+2020/03/04 | 598 | support/arara/scripts/rules/dvisvgm.yaml
+2020/03/04 | 59540 | support/arara/doc/figures/optionbox2.pdf
+2020/03/04 | 5949 | graphics/asymptote/drawpath3.cc
+2020/03/04 | 59421 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2020/03/04 | 5936 | graphics/asymptote/runfile.in
+2020/03/04 | 5925 | graphics/asymptote/drawpath3.h
+2020/03/04 | 591 | support/arara/scripts/rules/upbibtex.yaml
+2020/03/04 | 591 | graphics/asymptote/examples/sinc.asy
+2020/03/04 | 59101 | support/arara/doc/figures/dropdown2.pdf
+2020/03/04 | 58 | support/arara/source/src/test/resources/executiontests/halt/halt.tex
+2020/03/04 | 58 | support/arara/source/src/test/resources/executiontests/halt-error/halt-error.tex
+2020/03/04 | 58 | graphics/asymptote/examples/progrid.asy
+2020/03/04 | 589 | graphics/asymptote/GUI/res/icons/bucket.asy
+2020/03/04 | 589 | graphics/asymptote/examples/trefoilknot.asy
+2020/03/04 | 5897 | graphics/asymptote/Delaunay.cc
+2020/03/04 | 5886 | graphics/asymptote/base/three_tube.asy
+2020/03/04 | 58862 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/03/04 | 587 | support/arara/scripts/rules/pbibtex.yaml
+2020/03/04 | 5857 | graphics/asymptote/item.h
+2020/03/04 | 583 | support/arara/scripts/rules/bibtex.yaml
+2020/03/04 | 582 | graphics/asymptote/examples/cos3.asy
+2020/03/04 | 58249 | support/arara/doc/figures/inputbox2.pdf
+2020/03/04 | 581 | graphics/asymptote/examples/floatingdisk.asy
+2020/03/04 | 581 | graphics/asymptote/examples/BezierSaddle.asy
+2020/03/04 | 580 | graphics/asymptote/examples/xsin1x.asy
+2020/03/04 | 57 | graphics/asymptote/GUI/requirements.txt
+2020/03/04 | 579 | support/arara/scripts/rules/pdftk.yaml
+2020/03/04 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
+2020/03/04 | 579 | graphics/asymptote/examples/sin3.asy
+2020/03/04 | 579 | graphics/asymptote/examples/exp3.asy
+2020/03/04 | 5797 | graphics/asymptote/base/trembling.asy
+2020/03/04 | 578 | graphics/asymptote/base/annotate.asy
+2020/03/04 | 577 | graphics/asymptote/locate.h
+2020/03/04 | 57753 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/03/04 | 576 | graphics/asymptote/examples/threeviews.asy
+2020/03/04 | 576 | graphics/asymptote/examples/circles.asy
+2020/03/04 | 576144 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/03/04 | 5760 | graphics/asymptote/base/plain_scaling.asy
+2020/03/04 | 575 | support/arara/scripts/arara.sh
+2020/03/04 | 5754 | support/arara/scripts/rules/bib2gls.yaml
+2020/03/04 | 574 | graphics/asymptote/examples/fillcontour.asy
+2020/03/04 | 5740 | graphics/asymptote/examples/cpkcolors.asy
+2020/03/04 | 573 | graphics/asymptote/examples/curvedlabel3.asy
+2020/03/04 | 5737 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt
+2020/03/04 | 57188 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/03/04 | 571067 | systems/win32/miktex/tm/packages/fourier.tar.lzma
+2020/03/04 | 56889 | graphics/asymptote/runpicture.cc
+2020/03/04 | 56695 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/03/04 | 56646 | graphics/asymptote/GUI/pyUIClass/window1.py
+2020/03/04 | 56417 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/03/04 | 563462 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/03/04 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
+2020/03/04 | 561258 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/03/04 | 56037 | graphics/asymptote/base/smoothcontour3.asy
+2020/03/04 | 557 | graphics/asymptote/examples/Pythagoras.asy
+2020/03/04 | 5543 | graphics/asymptote/examples/filesurface.dat
+2020/03/04 | 5538 | graphics/asymptote/interact.cc
+2020/03/04 | 54 | graphics/asymptote/tests/gc/funcall.asy
+2020/03/04 | 549 | graphics/asymptote/examples/equilchord.asy
+2020/03/04 | 54949 | support/arara/doc/figures/messagebox1.pdf
+2020/03/04 | 54896 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/03/04 | 547 | graphics/asymptote/examples/tetra.asy
+2020/03/04 | 546 | graphics/asymptote/examples/label3zoom.asy
+2020/03/04 | 5465 | graphics/asymptote/env.cc
+2020/03/04 | 544811 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/03/04 | 5440 | graphics/asymptote/base/bsp.asy
+2020/03/04 | 5433 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt
+2020/03/04 | 540301 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/03/04 | 53 | support/arara/source/src/test/resources/executiontests/known-extension/arararc.yaml
+2020/03/04 | 53990 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/03/04 | 53464 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2020/03/04 | 532966 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/03/04 | 53224 | support/arara/doc/figures/messagebox2.pdf
+2020/03/04 | 5301 | graphics/asymptote/main.cc
+2020/03/04 | 52 | graphics/asymptote/doc/square.asy
+2020/03/04 | 529 | support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt
+2020/03/04 | 529390 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/03/04 | 529292 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/03/04 | 5277 | graphics/asymptote/base/shaders/fragment.glsl
+2020/03/04 | 5273 | graphics/asymptote/bezierpatch.h
+2020/03/04 | 5262 | graphics/asymptote/patches/bison.patch
+2020/03/04 | 525 | graphics/asymptote/examples/vectorfield3.asy
+2020/03/04 | 5258 | graphics/asymptote/examples/mosaic.asy
+2020/03/04 | 5254 | graphics/asymptote/base/animation.asy
+2020/03/04 | 524 | graphics/asymptote/doc/brokenaxis.asy
+2020/03/04 | 5239 | graphics/asymptote/name.h
+2020/03/04 | 521 | graphics/asymptote/examples/dimension.asy
+2020/03/04 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
+2020/03/04 | 520 | graphics/asymptote/examples/smoothelevation.asy
+2020/03/04 | 52044 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/03/04 | 5201 | support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt
+2020/03/04 | 52018 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/03/04 | 51 | graphics/asymptote/base/unicode.asy
+2020/03/04 | 51 | graphics/asymptote/base/babel.asy
+2020/03/04 | 519 | graphics/asymptote/examples/extrudedcontour.asy
+2020/03/04 | 5191 | support/arara/source/src/main/kotlin/org/islandoftex/arara/Arara.kt
+2020/03/04 | 5179 | graphics/asymptote/pipestream.cc
+2020/03/04 | 51676 | graphics/asymptote/settings.cc
+2020/03/04 | 5151 | graphics/asymptote/GUI/labelEditor.py
+2020/03/04 | 5145 | graphics/asymptote/pair.h
+2020/03/04 | 51432 | graphics/asymptote/prc/oPRCFile.h
+2020/03/04 | 513 | graphics/asymptote/examples/buildcycle.asy
+2020/03/04 | 5119 | graphics/asymptote/runsystem.in
+2020/03/04 | 5098 | graphics/asymptote/errormsg.h
+2020/03/04 | 50882 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/03/04 | 50856 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/03/04 | 5070 | graphics/asymptote/memory.h
+2020/03/04 | 506 | graphics/asymptote/examples/delu.asy
+2020/03/04 | 50697 | graphics/asymptote/gsl.cc
+2020/03/04 | 50503 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/03/04 | 50497 | graphics/asymptote/GUI/xasy2asy.py
+2020/03/04 | 5048 | graphics/asymptote/GUI/xasyOptions.py
+2020/03/04 | 503 | graphics/asymptote/GUI/xasy.py
+2020/03/04 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
+2020/03/04 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
+2020/03/04 | 502 | graphics/asymptote/examples/floor.asy
+2020/03/04 | 5024 | graphics/asymptote/runhistory.in
+2020/03/04 | 50127 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
+2020/03/04 | 500 | graphics/asymptote/doc/Hobbydir.asy
+2020/03/04 | 5003 | graphics/asymptote/base/rational.asy
+2020/03/04 | 49 | graphics/asymptote/doc/quartercircle.asy
+2020/03/04 | 49 | graphics/asymptote/doc/dots.asy
+2020/03/04 | 49 | graphics/asymptote/doc/colons.asy
+2020/03/04 | 499 | graphics/asymptote/examples/galleon.asy
+2020/03/04 | 4991 | graphics/asymptote/base/tube.asy
+2020/03/04 | 499162 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/03/04 | 498 | graphics/asymptote/examples/fano.asy
+2020/03/04 | 498 | graphics/asymptote/doc/penfunctionimage.asy
+2020/03/04 | 49864 | macros/latex/contrib/media9/pdfbase.sty
+2020/03/04 | 497 | graphics/asymptote/examples/bars3.asy
+2020/03/04 | 496 | graphics/asymptote/drawgrestore.h
+2020/03/04 | 49694 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/03/04 | 495 | graphics/asymptote/examples/cones.asy
+2020/03/04 | 49316 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/03/04 | 492 | graphics/asymptote/doc/CDlabel.asy
+2020/03/04 | 4923 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt
+2020/03/04 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
+2020/03/04 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
+2020/03/04 | 48669 | graphics/asymptote/runarray.in
+2020/03/04 | 485 | graphics/asymptote/examples/cards.asy
+2020/03/04 | 4849 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
+2020/03/04 | 48481 | graphics/asymptote/prc/writePRC.h
+2020/03/04 | 48441 | graphics/asymptote/config.guess
+2020/03/04 | 4841 | graphics/asymptote/tests/array/slice.asy
+2020/03/04 | 4825 | graphics/asymptote/examples/interpolate1.asy
+2020/03/04 | 4812 | graphics/asymptote/base/x11colors.asy
+2020/03/04 | 480 | graphics/asymptote/doc/logimage.asy
+2020/03/04 | 479 | graphics/asymptote/examples/magnetic.asy
+2020/03/04 | 47987 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/03/04 | 472 | graphics/asymptote/absyn.cc
+2020/03/04 | 4727 | graphics/asymptote/doc/westnile.csv
+2020/03/04 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
+2020/03/04 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
+2020/03/04 | 46 | support/arara/source/src/test/resources/executiontests/changes/changes.tex
+2020/03/04 | 46927 | graphics/asymptote/base/plain_picture.asy
+2020/03/04 | 4687 | graphics/asymptote/castop.h
+2020/03/04 | 466 | graphics/asymptote/drawgsave.h
+2020/03/04 | 4668 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
+2020/03/04 | 465 | graphics/asymptote/examples/colorplanes.asy
+2020/03/04 | 464 | graphics/asymptote/doc/GaussianSurface.asy
+2020/03/04 | 4624 | graphics/asymptote/array.cc
+2020/03/04 | 462052 | graphics/asymptote/doc/png/asymptote.info
+2020/03/04 | 461 | graphics/asymptote/examples/cosaddition.asy
+2020/03/04 | 4619 | graphics/asymptote/drawfill.cc
+2020/03/04 | 460 | graphics/asymptote/examples/lever.asy
+2020/03/04 | 459 | graphics/asymptote/examples/hierarchy.asy
+2020/03/04 | 458 | graphics/asymptote/doc/multicontour.asy
+2020/03/04 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
+2020/03/04 | 45773 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/03/04 | 4575 | graphics/asymptote/env.h
+2020/03/04 | 45691 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/03/04 | 456868 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/03/04 | 45603 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/03/04 | 45468 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/03/04 | 4520 | graphics/asymptote/getopt1.c
+2020/03/04 | 4515 | graphics/asymptote/util.h
+2020/03/04 | 4503 | graphics/asymptote/bbox.h
+2020/03/04 | 450320 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2020/03/04 | 449 | graphics/asymptote/tests/arith/pair.asy
+2020/03/04 | 4494 | support/arara/README.md
+2020/03/04 | 44942 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/03/04 | 44894 | graphics/asymptote/fftw++.h
+2020/03/04 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
+2020/03/04 | 44732 | graphics/asymptote/glrender.cc
+2020/03/04 | 445 | graphics/asymptote/examples/sacone.asy
+2020/03/04 | 442 | graphics/asymptote/doc/join3.asy
+2020/03/04 | 441 | graphics/asymptote/examples/triangles.asy
+2020/03/04 | 441 | graphics/asymptote/doc/histogram.asy
+2020/03/04 | 440 | graphics/asymptote/examples/gamma.asy
+2020/03/04 | 4400 | graphics/asymptote/stm.h
+2020/03/04 | 43 | graphics/asymptote/examples/spring2.asy
+2020/03/04 | 438 | graphics/asymptote/examples/projectrevolution.asy
+2020/03/04 | 4365 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt
+2020/03/04 | 4348 | graphics/asymptote/doc/colo-asy.tex
+2020/03/04 | 4347 | graphics/asymptote/fundec.h
+2020/03/04 | 43426 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/03/04 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
+2020/03/04 | 42 | graphics/asymptote/base/animate.asy
+2020/03/04 | 4299 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt
+2020/03/04 | 42928 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/03/04 | 4286 | graphics/asymptote/asy.ico
+2020/03/04 | 426 | graphics/asymptote/examples/spiral3.asy
+2020/03/04 | 426 | graphics/asymptote/doc/grid3xyz.asy
+2020/03/04 | 4269 | graphics/asymptote/newexp.cc
+2020/03/04 | 42574 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/03/04 | 424 | graphics/asymptote/examples/colorpatch.asy
+2020/03/04 | 4242 | graphics/asymptote/tests/types/keyword.asy
+2020/03/04 | 423 | graphics/asymptote/doc/log2graph.asy
+2020/03/04 | 423 | graphics/asymptote/doc/helix.asy
+2020/03/04 | 4231 | graphics/asymptote/flatguide.h
+2020/03/04 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
+2020/03/04 | 4203 | graphics/asymptote/examples/fin.asy
+2020/03/04 | 41 | graphics/asymptote/doc/bigdiagonal.asy
+2020/03/04 | 419 | graphics/asymptote/examples/pathintersectsurface.asy
+2020/03/04 | 418 | graphics/asymptote/examples/planeproject.asy
+2020/03/04 | 41874 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/03/04 | 41873 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/03/04 | 417 | graphics/asymptote/doc/knots.asy
+2020/03/04 | 416 | graphics/asymptote/doc/linetype.asy
+2020/03/04 | 416 | graphics/asymptote/doc/bezier2.asy
+2020/03/04 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
+2020/03/04 | 4158 | graphics/asymptote/examples/advection.asy
+2020/03/04 | 414 | graphics/asymptote/examples/animations/glmovie.asy
+2020/03/04 | 413 | graphics/asymptote/examples/torus.asy
+2020/03/04 | 4132 | graphics/asymptote/runpair.in
+2020/03/04 | 4128 | graphics/asymptote/base/plain_boxes.asy
+2020/03/04 | 41230 | support/arara/source/src/main/java/org/islandoftex/arara/utils/Methods.java
+2020/03/04 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
+2020/03/04 | 410 | graphics/asymptote/examples/Sierpinski.asy
+2020/03/04 | 410 | graphics/asymptote/doc/legend.asy
+2020/03/04 | 41033 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/03/04 | 4089 | support/arara/scripts/rules/datatooltk.yaml
+2020/03/04 | 4089 | graphics/asymptote/camp.tab.h
+2020/03/04 | 407 | graphics/asymptote/examples/parametricsurface.asy
+2020/03/04 | 40764 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
+2020/03/04 | 4072 | graphics/asymptote/tests/types/order.asy
+2020/03/04 | 4067 | graphics/asymptote/doc/diatom.csv
+2020/03/04 | 4063 | graphics/asymptote/fileio.cc
+2020/03/04 | 40600 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/03/04 | 40326 | graphics/asymptote/examples/tvgen.asy
+2020/03/04 | 40276 | graphics/asymptote/picture.cc
+2020/03/04 | 401 | graphics/asymptote/doc/image.asy
+2020/03/04 | 400 | graphics/asymptote/examples/sacylinder.asy
+2020/03/04 | 39 | support/arara/doc/arararc.yaml
+2020/03/04 | 39 | graphics/asymptote/base/nopapersize.ps
+2020/03/04 | 3996 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt
+2020/03/04 | 3992 | graphics/asymptote/base/plain_shipout.asy
+2020/03/04 | 398 | graphics/asymptote/examples/epix.asy
+2020/03/04 | 396 | graphics/asymptote/doc/triangulate.asy
+2020/03/04 | 395 | graphics/asymptote/GUI/configs/xasykeymap.cson
+2020/03/04 | 395 | graphics/asymptote/examples/BezierPatch.asy
+2020/03/04 | 394 | graphics/asymptote/GUI/setup.py
+2020/03/04 | 3944 | graphics/asymptote/base/interpolate.asy
+2020/03/04 | 3919 | support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt
+2020/03/04 | 39187 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/03/04 | 391675 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/03/04 | 390 | graphics/asymptote/doc/tile.asy
+2020/03/04 | 3907 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Session.kt
+2020/03/04 | 38 | graphics/asymptote/examples/spring0.asy
+2020/03/04 | 38892 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/03/04 | 387425 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
+2020/03/04 | 3873 | graphics/asymptote/examples/pipes.asy
+2020/03/04 | 386 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
+2020/03/04 | 385 | graphics/asymptote/examples/sinxlex.asy
+2020/03/04 | 385350 | graphics/asymptote/doc/asymptote.texi
+2020/03/04 | 384 | graphics/asymptote/examples/Gouraud.asy
+2020/03/04 | 384 | graphics/asymptote/Delaunay.h
+2020/03/04 | 3841 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt
+2020/03/04 | 383 | graphics/asymptote/tests/arith/real.asy
+2020/03/04 | 382 | graphics/asymptote/doc/loggrid.asy
+2020/03/04 | 38217 | graphics/asymptote/path3.cc
+2020/03/04 | 380 | graphics/asymptote/doc/icon.asy
+2020/03/04 | 3789 | support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt
+2020/03/04 | 377976 | install/macros/latex/contrib/xsavebox.tds.zip
+2020/03/04 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
+2020/03/04 | 376 | graphics/asymptote/doc/generalaxis3.asy
+2020/03/04 | 3765 | graphics/asymptote/prc/PRCdouble.h
+2020/03/04 | 376333 | macros/latex/contrib/xsavebox.zip
+2020/03/04 | 374 | graphics/asymptote/doc/monthaxis.asy
+2020/03/04 | 3746 | graphics/asymptote/examples/xstitch.asy
+2020/03/04 | 373 | graphics/asymptote/examples/projectelevation.asy
+2020/03/04 | 373 | graphics/asymptote/doc/lineargraph.asy
+2020/03/04 | 3735211 | macros/latex/contrib/media9/doc/media9.pdf
+2020/03/04 | 3728 | graphics/asymptote/base/three_light.asy
+2020/03/04 | 3723 | support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt
+2020/03/04 | 371 | macros/generic/chemfig/chemfig.sty
+2020/03/04 | 3716 | graphics/asymptote/base/plain_constants.asy
+2020/03/04 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
+2020/03/04 | 369 | graphics/asymptote/examples/RiemannSurface.asy
+2020/03/04 | 368610 | macros/latex/contrib/xsavebox/xsavebox.pdf
+2020/03/04 | 3676 | graphics/asymptote/tr.h
+2020/03/04 | 3673 | graphics/asymptote/constructor.cc
+2020/03/04 | 3670 | graphics/asymptote/bbox3.h
+2020/03/04 | 366 | graphics/asymptote/doc/lineargraph0.asy
+2020/03/04 | 36618 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/03/04 | 36517 | support/arara/doc/chapters/concepts.tex
+2020/03/04 | 364 | support/arara/source/src/test/resources/executiontests/sessions/sessionrule.yaml
+2020/03/04 | 3646 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/FileType.kt
+2020/03/04 | 363 | systems/win32/miktex/tm/packages/pr.ini
+2020/03/04 | 36329 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/03/04 | 362 | graphics/asymptote/examples/pipeintersection.asy
+2020/03/04 | 36243 | graphics/asymptote/prc/test.cc
+2020/03/04 | 361 | graphics/asymptote/GUI/res/icons/anchor.svg
+2020/03/04 | 361 | graphics/asymptote/examples/phase.asy
+2020/03/04 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
+2020/03/04 | 360 | graphics/asymptote/examples/washer.asy
+2020/03/04 | 35 | graphics/asymptote/base/fontsize.asy
+2020/03/04 | 358 | graphics/asymptote/base/pstoedit.asy
+2020/03/04 | 357 | graphics/asymptote/doc/irregularcontour.asy
+2020/03/04 | 356275 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/03/04 | 355 | graphics/asymptote/doc/scaledgraph.asy
+2020/03/04 | 3555135 | install/macros/latex/contrib/lwarp.tds.zip
+2020/03/04 | 3553 | graphics/asymptote/rounding.h
+2020/03/04 | 354 | graphics/asymptote/doc/reloadpdf.tex
+2020/03/04 | 354 | graphics/asymptote/doc/planes.asy
+2020/03/04 | 354439 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
+2020/03/04 | 352 | graphics/asymptote/examples/cylinder.asy
+2020/03/04 | 3522 | graphics/asymptote/drawpath.cc
+2020/03/04 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
+2020/03/04 | 35147 | graphics/asymptote/LICENSE
+2020/03/04 | 3505 | graphics/asymptote/parser.cc
+2020/03/04 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
+2020/03/04 | 34 | graphics/asymptote/autogen.sh
+2020/03/04 | 349 | graphics/asymptote/examples/logdown.asy
+2020/03/04 | 3497 | graphics/asymptote/doc/ocg.sty
+2020/03/04 | 34842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/03/04 | 34832 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/03/04 | 345 | graphics/asymptote/lexical.h
+2020/03/04 | 3449 | graphics/asymptote/build-scripts/build-asymptote.dos
+2020/03/04 | 343 | graphics/asymptote/doc/externalprc.tex
+2020/03/04 | 3434 | graphics/asymptote/picture.h
+2020/03/04 | 3430 | graphics/asymptote/base/roundedpath.asy
+2020/03/04 | 341 | graphics/asymptote/examples/slidedemo_.bbl
+2020/03/04 | 341 | graphics/asymptote/examples/sacylinder3D.asy
+2020/03/04 | 341 | graphics/asymptote/doc/subpictures.asy
+2020/03/04 | 34126 | graphics/asymptote/path.cc
+2020/03/04 | 33877 | graphics/asymptote/exp.cc
+2020/03/04 | 3375 | graphics/asymptote/tests/types/guide.asy
+2020/03/04 | 33553 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/03/04 | 3344 | graphics/asymptote/examples/pdb.asy
+2020/03/04 | 33424 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/03/04 | 3340 | graphics/asymptote/examples/slidedemo.asy
+2020/03/04 | 333 | graphics/asymptote/doc/asy.1.end
+2020/03/04 | 3328 | graphics/asymptote/stack.h
+2020/03/04 | 3313 | support/arara/doc/arara-manual.tex
+2020/03/04 | 330 | graphics/asymptote/doc/HermiteSpline.asy
+2020/03/04 | 3309 | graphics/asymptote/access.cc
+2020/03/04 | 33056 | support/arara/doc/arara.sty
+2020/03/04 | 328799 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/03/04 | 327 | graphics/asymptote/examples/sin1x.asy
+2020/03/04 | 3279 | graphics/asymptote/base/obj.asy
+2020/03/04 | 3275 | graphics/asymptote/program.cc
+2020/03/04 | 326 | graphics/asymptote/examples/polardatagraph.asy
+2020/03/04 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
+2020/03/04 | 326930 | systems/win32/miktex/tm/packages/fei.tar.lzma
+2020/03/04 | 325 | graphics/asymptote/examples/rainbow.asy
+2020/03/04 | 325 | graphics/asymptote/examples/elevation.asy
+2020/03/04 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
+2020/03/04 | 32339 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/03/04 | 322 | graphics/asymptote/examples/unitcircle.asy
+2020/03/04 | 322 | graphics/asymptote/examples/cheese.asy
+2020/03/04 | 32262 | graphics/asymptote/bezierpatch.cc
+2020/03/04 | 32242 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/03/04 | 321 | support/arara/source/src/test/resources/executiontests/halt/halt.yaml
+2020/03/04 | 321 | support/arara/scripts/rules/halt.yaml
+2020/03/04 | 321906 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/03/04 | 320 | graphics/asymptote/runtriple.h
+2020/03/04 | 320533 | graphics/asymptote/base/geometry.asy
+2020/03/04 | 31 | support/arara/source/src/test/resources/executiontests/sessions/sessions.tex
+2020/03/04 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
+2020/03/04 | 3161 | graphics/asymptote/genv.cc
+2020/03/04 | 31609 | graphics/asymptote/config.sub
+2020/03/04 | 315 | graphics/asymptote/examples/strokepath.asy
+2020/03/04 | 315 | graphics/asymptote/examples/hyperboloid.asy
+2020/03/04 | 314 | graphics/asymptote/doc/logticks.asy
+2020/03/04 | 314 | graphics/asymptote/base/graph_settings.asy
+2020/03/04 | 312 | graphics/asymptote/examples/textpath.asy
+2020/03/04 | 31244 | graphics/asymptote/builtin.cc
+2020/03/04 | 31192 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/03/04 | 31153 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/03/04 | 3106 | graphics/asymptote/doc/latexusage.tex
+2020/03/04 | 309 | graphics/asymptote/examples/oneoverx.asy
+2020/03/04 | 309 | graphics/asymptote/examples/1overx.asy
+2020/03/04 | 30987 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/03/04 | 309611 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/03/04 | 308 | graphics/asymptote/tests/types/shadow.asy
+2020/03/04 | 308 | graphics/asymptote/tests/Makefile
+2020/03/04 | 3081 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt
+2020/03/04 | 30768 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/03/04 | 3075660 | macros/latex/contrib/lwarp.zip
+2020/03/04 | 306 | graphics/asymptote/doc/binarytreetest.asy
+2020/03/04 | 3064 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt
+2020/03/04 | 304 | support/arara/source/src/test/resources/executiontests/halt-error/halt.yaml
+2020/03/04 | 3042 | graphics/asymptote/drawimage.h
+2020/03/04 | 303 | graphics/asymptote/examples/tensor.asy
+2020/03/04 | 3026 | support/arara/doc/logos/bird.pdf
+2020/03/04 | 3023 | graphics/asymptote/doc/Makefile.in
+2020/03/04 | 30231 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/03/04 | 30208 | graphics/asymptote/prc/PRC.h
+2020/03/04 | 30147 | graphics/asymptote/getopt.c
+2020/03/04 | 3003 | graphics/asymptote/process.h
+2020/03/04 | 299 | graphics/asymptote/runpair.h
+2020/03/04 | 298 | graphics/asymptote/guideflags.h
+2020/03/04 | 2976 | graphics/asymptote/access.h
+2020/03/04 | 29705 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/03/04 | 2947 | macros/latex/contrib/lwarp/lwarp_tutorial.txt
+2020/03/04 | 293 | graphics/asymptote/doc/makepen.asy
+2020/03/04 | 2937 | graphics/asymptote/asymptote.spec
+2020/03/04 | 29318 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/03/04 | 29255 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/03/04 | 2924 | graphics/asymptote/drawgroup.h
+2020/03/04 | 291 | graphics/asymptote/examples/trumpet.asy
+2020/03/04 | 291 | graphics/asymptote/examples/jump.asy
+2020/03/04 | 29170 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/03/04 | 2905 | graphics/asymptote/shaders.cc
+2020/03/04 | 28 | support/arara/source/src/test/resources/executiontests/simple-directive/simple-directive.tex
+2020/03/04 | 289 | graphics/asymptote/base/res/notes.txt
+2020/03/04 | 288 | graphics/asymptote/examples/sacone3D.asy
+2020/03/04 | 288 | graphics/asymptote/doc/mexicanhat.asy
+2020/03/04 | 288 | graphics/asymptote/build-scripts/README-binaries
+2020/03/04 | 2882 | graphics/asymptote/doc/diatom.asy
+2020/03/04 | 28809 | graphics/asymptote/exp.h
+2020/03/04 | 28734 | macros/latex/contrib/lwarp/lwarpmk.lua
+2020/03/04 | 28721 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/03/04 | 285989 | graphics/asymptote/configure
+2020/03/04 | 28530 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/03/04 | 2851 | support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt
+2020/03/04 | 284 | graphics/asymptote/GUI/res/icons/text.svg
+2020/03/04 | 2832 | graphics/asymptote/examples/alignedaxis.asy
+2020/03/04 | 2825 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
+2020/03/04 | 28156 | graphics/asymptote/pen.h
+2020/03/04 | 281513 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/03/04 | 281324 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/03/04 | 2800 | graphics/asymptote/doc/asycolors.sty
+2020/03/04 | 27 | support/arara/source/src/test/resources/executiontests/known-extension/known-extension.tex
+2020/03/04 | 27 | support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.xy
+2020/03/04 | 27 | support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.my
+2020/03/04 | 279 | graphics/asymptote/doc/hatch.asy
+2020/03/04 | 27979 | macros/latex/contrib/lwarp/lwarp.ins
+2020/03/04 | 277 | graphics/asymptote/doc/generalaxis.asy
+2020/03/04 | 27784 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/03/04 | 2771 | graphics/asymptote/doc/pixel.pdf
+2020/03/04 | 276 | graphics/asymptote/tests/bench/6000circles.asy
+2020/03/04 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
+2020/03/04 | 276691 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/03/04 | 2764 | graphics/asymptote/base/three_margins.asy
+2020/03/04 | 2738 | graphics/asymptote/record.h
+2020/03/04 | 2731 | graphics/asymptote/tests/types/resolve.asy
+2020/03/04 | 272524 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/03/04 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
+2020/03/04 | 26 | support/arara/source/src/test/resources/executiontests/invalid-config/invalid-config.tex
+2020/03/04 | 26 | graphics/asymptote/doc/filegraph.dat
+2020/03/04 | 269 | graphics/asymptote/runmath.h
+2020/03/04 | 2697 | graphics/asymptote/table.h
+2020/03/04 | 268 | graphics/asymptote/base/asy-init.el
+2020/03/04 | 26875 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/03/04 | 26872 | graphics/asymptote/runpath.cc
+2020/03/04 | 2685560 | macros/latex/contrib/lwarp/lwarp.pdf
+2020/03/04 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
+2020/03/04 | 26773 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/03/04 | 2675 | graphics/asymptote/runtriple.in
+2020/03/04 | 2667 | graphics/asymptote/settings.h
+2020/03/04 | 26662 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/03/04 | 2662 | graphics/asymptote/symbol.h
+2020/03/04 | 2661 | graphics/asymptote/runbacktrace.cc
+2020/03/04 | 2658 | graphics/asymptote/examples/soccerball.asy
+2020/03/04 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
+2020/03/04 | 2653 | graphics/asymptote/doc/markers1.asy
+2020/03/04 | 26501 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/03/04 | 264 | graphics/asymptote/examples/labelbox.asy
+2020/03/04 | 264 | graphics/asymptote/examples/coag.asy
+2020/03/04 | 2633 | graphics/asymptote/examples/worldmap.asy
+2020/03/04 | 2632 | graphics/asymptote/material.h
+2020/03/04 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
+2020/03/04 | 262 | graphics/asymptote/doc/loggraph.asy
+2020/03/04 | 2625 | support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt
+2020/03/04 | 2624 | graphics/asymptote/pipestream.h
+2020/03/04 | 261 | support/arara/source/src/main/resources/org/islandoftex/arara/configuration/release-notes
+2020/03/04 | 261 | graphics/asymptote/doc/join.asy
+2020/03/04 | 2615 | graphics/asymptote/base/patterns.asy
+2020/03/04 | 26096 | graphics/asymptote/examples/uhrturm.obj
+2020/03/04 | 2599 | support/arara/scripts/rules/indent.yaml
+2020/03/04 | 2579568 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/03/04 | 25707 | graphics/asymptote/runpath3d.cc
+2020/03/04 | 256 | graphics/asymptote/doc/shadedtiling.asy
+2020/03/04 | 2562 | graphics/asymptote/program.h
+2020/03/04 | 255 | graphics/asymptote/examples/contextfonts.asy
+2020/03/04 | 255 | graphics/asymptote/BUGS
+2020/03/04 | 2554 | graphics/asymptote/GUI/xasyFile.py
+2020/03/04 | 2552 | graphics/asymptote/base/plain_margins.asy
+2020/03/04 | 254 | graphics/asymptote/examples/parametricelevation.asy
+2020/03/04 | 253 | graphics/asymptote/base/metapost.asy
+2020/03/04 | 25305 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/03/04 | 25292 | graphics/asymptote/process.cc
+2020/03/04 | 2526 | graphics/asymptote/policy.h
+2020/03/04 | 251 | graphics/asymptote/examples/triceratops.asy
+2020/03/04 | 2518 | graphics/asymptote/prc/PRCbitStream.h
+2020/03/04 | 25137 | graphics/asymptote/doc/extra/intro.asy
+2020/03/04 | 2512 | graphics/asymptote/examples/mosquito.asy
+2020/03/04 | 250 | graphics/asymptote/examples/transparentCubes.asy
+2020/03/04 | 2505 | graphics/asymptote/README
+2020/03/04 | 2505 | graphics/asymptote/binaries/x86_64-windows/README
+2020/03/04 | 2505 | graphics/asymptote/binaries/i386-windows/README
+2020/03/04 | 24 | graphics/asymptote/doc/diagonal.asy
+2020/03/04 | 24998 | support/arara/doc/chapters/cli.tex
+2020/03/04 | 2482 | graphics/asymptote/build-scripts/build-asymptote
+2020/03/04 | 247554 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/03/04 | 247179 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/03/04 | 2470251 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015.zip
+2020/03/04 | 246 | graphics/asymptote/examples/transparency.asy
+2020/03/04 | 246 | graphics/asymptote/doc/axis3.asy
+2020/03/04 | 2465 | graphics/asymptote/base/labelpath3.asy
+2020/03/04 | 24659 | graphics/asymptote/base/lmfit.asy
+2020/03/04 | 246428 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/03/04 | 245 | graphics/asymptote/examples/alignbox.asy
+2020/03/04 | 2457969 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/03/04 | 2452077 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
+2020/03/04 | 244 | graphics/asymptote/tests/arith/triple.asy
+2020/03/04 | 2440 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial.zip
+2020/03/04 | 243 | graphics/asymptote/doc/cube.asy
+2020/03/04 | 2438 | support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt
+2020/03/04 | 243362 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/03/04 | 242 | graphics/asymptote/examples/equilateral.asy
+2020/03/04 | 2416 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
+2020/03/04 | 240 | graphics/asymptote/doc/parametricgraph.asy
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/simple-directive/arararc.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/sessions/arararc.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/halt-error/arararc.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/halt/arararc.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/directive-with-options/arararc.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/conditionals/arararc.yaml
+2020/03/04 | 23 | support/arara/source/src/test/resources/executiontests/changes/arararc.yaml
+2020/03/04 | 23 | graphics/asymptote/GUI/__init__.py
+2020/03/04 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
+2020/03/04 | 2395 | support/arara/scripts/rules/makeglossaries.yaml
+2020/03/04 | 238 | graphics/asymptote/tests/TestLib.asy
+2020/03/04 | 238 | graphics/asymptote/GUI/xasyValidator.py
+2020/03/04 | 238 | graphics/asymptote/doc/filegraph.asy
+2020/03/04 | 23791 | graphics/asymptote/base/three_arrows.asy
+2020/03/04 | 2378 | graphics/asymptote/profile.py
+2020/03/04 | 2372 | support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt
+2020/03/04 | 236 | graphics/asymptote/tests/string/erase.asy
+2020/03/04 | 236 | graphics/asymptote/examples/annotation.asy
+2020/03/04 | 23632 | graphics/asymptote/drawsurface.cc
+2020/03/04 | 2362 | graphics/asymptote/examples/spectrum.asy
+2020/03/04 | 2361 | graphics/asymptote/examples/SierpinskiSponge.asy
+2020/03/04 | 235 | graphics/asymptote/examples/cos2theta.asy
+2020/03/04 | 2353141 | macros/generic/chemfig.zip
+2020/03/04 | 23520 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/03/04 | 234 | graphics/asymptote/doc/beziercurve.asy
+2020/03/04 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
+2020/03/04 | 233 | graphics/asymptote/examples/cardioid.asy
+2020/03/04 | 2328 | graphics/asymptote/virtualfieldaccess.h
+2020/03/04 | 22 | graphics/asymptote/tests/output/line.asy
+2020/03/04 | 22 | graphics/asymptote/GUI/configs/__init__.py
+2020/03/04 | 22971 | graphics/asymptote/base/syzygy.asy
+2020/03/04 | 22936 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/03/04 | 228 | graphics/asymptote/examples/circumcircle.asy
+2020/03/04 | 22873 | graphics/asymptote/examples/piicon.png
+2020/03/04 | 2278 | graphics/asymptote/align.h
+2020/03/04 | 2277 | graphics/asymptote/base/texcolors.asy
+2020/03/04 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
+2020/03/04 | 2259480 | macros/latex/contrib/lwarp/lwarp.dtx
+2020/03/04 | 224 | graphics/asymptote/tests/types/init.asy
+2020/03/04 | 223 | graphics/asymptote/examples/yingyang.asy
+2020/03/04 | 22355 | graphics/asymptote/knot.cc
+2020/03/04 | 2222 | graphics/asymptote/tests/frames/loop.asy
+2020/03/04 | 219 | graphics/asymptote/wce
+2020/03/04 | 219 | graphics/asymptote/doc/penimage.asy
+2020/03/04 | 2197 | graphics/asymptote/locate.cc
+2020/03/04 | 21977 | graphics/asymptote/runmath.cc
+2020/03/04 | 2193 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
+2020/03/04 | 2190 | support/arara/source/src/main/resources/org/islandoftex/arara/configuration/logback.xml
+2020/03/04 | 218 | graphics/asymptote/doc/datagraph.asy
+2020/03/04 | 2187 | graphics/asymptote/base/plain_debugger.asy
+2020/03/04 | 2180 | graphics/asymptote/examples/splitpatch.asy
+2020/03/04 | 2173 | graphics/asymptote/frame.h
+2020/03/04 | 2163 | graphics/asymptote/drawlabel.h
+2020/03/04 | 215430 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/03/04 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
+2020/03/04 | 2146 | graphics/asymptote/webgl/fragment.glsl
+2020/03/04 | 21459 | graphics/asymptote/base/feynman.asy
+2020/03/04 | 2139 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.bbx
+2020/03/04 | 2113 | graphics/asymptote/seconds.h
+2020/03/04 | 210 | graphics/asymptote/examples/spiral.asy
+2020/03/04 | 2109 | graphics/asymptote/base/drawtree.asy
+2020/03/04 | 2108 | support/arara/doc/chapters/license.tex
+2020/03/04 | 21005 | graphics/asymptote/base/plain_bounds.asy
+2020/03/04 | 209 | graphics/asymptote/examples/triangle.asy
+2020/03/04 | 20866 | graphics/asymptote/dec.cc
+2020/03/04 | 2084 | graphics/asymptote/examples/truncatedIcosahedron.asy
+2020/03/04 | 207775 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/03/04 | 20738 | graphics/asymptote/entry.cc
+2020/03/04 | 206 | graphics/asymptote/examples/log.asy
+2020/03/04 | 2068 | graphics/asymptote/base/slopefield.asy
+2020/03/04 | 206710 | graphics/asymptote/asy.list
+2020/03/04 | 20668 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/03/04 | 20545 | graphics/asymptote/runtime.in
+2020/03/04 | 2043 | graphics/asymptote/examples/slope.asy
+2020/03/04 | 2039 | graphics/asymptote/doc/elliptic.asy
+2020/03/04 | 202 | graphics/asymptote/tests/frames/stat2.asy
+2020/03/04 | 202 | graphics/asymptote/doc/exp.asy
+2020/03/04 | 20174 | graphics/asymptote/texfile.cc
+2020/03/04 | 2013 | graphics/asymptote/varinit.h
+2020/03/04 | 2012 | support/arara/source/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt
+2020/03/04 | 20105 | graphics/asymptote/base/contour.asy
+2020/03/04 | 200 | macros/generic/chemfig/t-chemfig.tex
+2020/03/04 | 20093 | graphics/asymptote/drawsurface.h
+2020/03/04 | 20051 | graphics/asymptote/doc/asyRefCard.tex
+2020/03/04 | 20029 | graphics/asymptote/camp.y
+2020/03/04 | 200049 | macros/generic/chemfig/chemfig-fr.tex
+2020/03/04 | 199 | graphics/asymptote/examples/upint.asy
+2020/03/04 | 199 | graphics/asymptote/examples/BezierTriangle.asy
+2020/03/04 | 19984 | graphics/asymptote/fileio.h
+2020/03/04 | 199195 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/03/04 | 198 | graphics/asymptote/examples/tanh.asy
+2020/03/04 | 19893 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/03/04 | 1986 | graphics/asymptote/inst.h
+2020/03/04 | 1980 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt
+2020/03/04 | 1978 | graphics/asymptote/varinit.cc
+2020/03/04 | 1977 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt
+2020/03/04 | 197415 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/03/04 | 197321 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/03/04 | 196 | graphics/asymptote/examples/lowint.asy
+2020/03/04 | 196 | graphics/asymptote/examples/label3ribbon.asy
+2020/03/04 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
+2020/03/04 | 1967 | graphics/asymptote/GUI/res/icons/filledbucket.svg
+2020/03/04 | 19597 | graphics/asymptote/doc/external-proposal.html
+2020/03/04 | 1957 | support/arara/scripts/rules/xindy.yaml
+2020/03/04 | 1956 | support/arara/scripts/rules/texindy.yaml
+2020/03/04 | 19561 | graphics/asymptote/base/plain_arrows.asy
+2020/03/04 | 19524 | support/arara/doc/chapters/configuration.tex
+2020/03/04 | 1951 | graphics/asymptote/array.h
+2020/03/04 | 1950 | graphics/asymptote/examples/mergeExample.asy
+2020/03/04 | 195009 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/03/04 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
+2020/03/04 | 1946016 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/03/04 | 194590 | graphics/asymptote/doc/asy-latex.pdf
+2020/03/04 | 193 | support/arara/source/src/test/resources/executiontests/conditionals/echothree.yaml
+2020/03/04 | 193 | graphics/asymptote/tests/gc/shipout.asy
+2020/03/04 | 193 | graphics/asymptote/tests/arith/random.asy
+2020/03/04 | 1939 | support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Language.kt
+2020/03/04 | 1936 | graphics/asymptote/refaccess.h
+2020/03/04 | 193655 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/03/04 | 19308 | graphics/asymptote/runpicture.in
+2020/03/04 | 1927 | graphics/asymptote/tests/array/fields.asy
+2020/03/04 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
+2020/03/04 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
+2020/03/04 | 191 | support/arara/source/src/test/resources/executiontests/conditionals/echofour.yaml
+2020/03/04 | 191 | graphics/asymptote/runpicture.h
+2020/03/04 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
+2020/03/04 | 1908 | graphics/asymptote/examples/linearregression.asy
+2020/03/04 | 1907 | graphics/asymptote/build-scripts/HOWTO-MSWindows
+2020/03/04 | 18 | graphics/asymptote/tests/output/circle.asy
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/simple-directive/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/known-extension/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt-error/echotwo.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt-error/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt/echotwo.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/halt/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/foreign-extension/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/conditionals/echotwo.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/conditionals/echoone.yaml
+2020/03/04 | 189 | support/arara/source/src/test/resources/executiontests/changes/echoone.yaml
+2020/03/04 | 1898 | support/arara/scripts/rules/frontespizio.yaml
+2020/03/04 | 18964 | graphics/asymptote/psfile.cc
+2020/03/04 | 188 | graphics/asymptote/runstring.h
+2020/03/04 | 187 | graphics/asymptote/tests/string/rfind.asy
+2020/03/04 | 187 | graphics/asymptote/examples/label3solid.asy
+2020/03/04 | 1878 | graphics/asymptote/drawclipbegin.h
+2020/03/04 | 18772 | graphics/asymptote/runstring.cc
+2020/03/04 | 186 | graphics/asymptote/runpath3d.h
+2020/03/04 | 186 | graphics/asymptote/doc/unitcircle3.asy
+2020/03/04 | 1869247 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
+2020/03/04 | 186885 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/03/04 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
+2020/03/04 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
+2020/03/04 | 18591 | graphics/asymptote/application.cc
+2020/03/04 | 185808 | macros/generic/chemfig/chemfig-en.tex
+2020/03/04 | 185327 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/03/04 | 1851 | graphics/asymptote/beziercurve.cc
+2020/03/04 | 184257 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/03/04 | 1836 | graphics/asymptote/jsfile.h
+2020/03/04 | 1835 | graphics/asymptote/examples/cyclohexane.asy
+2020/03/04 | 182 | graphics/asymptote/tests/string/find.asy
+2020/03/04 | 182 | graphics/asymptote/examples/roll.asy
+2020/03/04 | 182 | graphics/asymptote/examples/label3.asy
+2020/03/04 | 182806 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/03/04 | 1827588 | support/arara/doc/arara-manual.pdf
+2020/03/04 | 1820084 | systems/win32/miktex/tm/packages/scholax.tar.lzma
+2020/03/04 | 18126 | graphics/asymptote/doc/asy-latex.dtx
+2020/03/04 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
+2020/03/04 | 179 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.cbx
+2020/03/04 | 1780 | graphics/asymptote/examples/conicurv.asy
+2020/03/04 | 177 | graphics/asymptote/runpath.h
+2020/03/04 | 177 | graphics/asymptote/examples/curvedlabel.asy
+2020/03/04 | 17785 | graphics/asymptote/asy-keywords.el
+2020/03/04 | 17755 | graphics/asymptote/runfile.cc
+2020/03/04 | 17753 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/03/04 | 177510 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/03/04 | 177246 | graphics/asymptote/prc/PRCdouble.cc
+2020/03/04 | 17675 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/03/04 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
+2020/03/04 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
+2020/03/04 | 1753 | graphics/asymptote/errormsg.cc
+2020/03/04 | 1750 | macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/README.md
+2020/03/04 | 174 | support/arara/source/src/test/resources/executiontests/directive-with-options/directive-with-options.tex
+2020/03/04 | 1746 | graphics/asymptote/doc/westnile.asy
+2020/03/04 | 174673 | graphics/asymptote/base/colormap.asy
+2020/03/04 | 1724 | graphics/asymptote/GUI/GuidesManager.py
+2020/03/04 | 1711 | graphics/asymptote/GUI/res/icons.qrc
+2020/03/04 | 1711487 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/03/04 | 1710 | graphics/asymptote/tests/arith/roots.asy
+2020/03/04 | 170 | graphics/asymptote/examples/stereoscopic.asy
+2020/03/04 | 1704 | graphics/asymptote/record.cc
+2020/03/04 | 169 | graphics/asymptote/runbacktrace.h
+2020/03/04 | 16997749 | install/support/arara.tds.zip
+2020/03/04 | 16982217 | support/arara.zip
+2020/03/04 | 1694 | graphics/asymptote/fftw++.cc
+2020/03/04 | 169212 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/03/04 | 168 | graphics/asymptote/examples/strokeshade.asy
+2020/03/04 | 168 | graphics/asymptote/examples/lines.asy
+2020/03/04 | 16896 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_de.properties
+2020/03/04 | 1680 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt
+2020/03/04 | 167815 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/03/04 | 167756 | graphics/asymptote/doc/CAD.pdf
+2020/03/04 | 167254 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/03/04 | 16702 | graphics/asymptote/runlabel.cc
+2020/03/04 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
+2020/03/04 | 165 | graphics/asymptote/examples/sphereskeleton.asy
+2020/03/04 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
+2020/03/04 | 16580 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties
+2020/03/04 | 16578 | graphics/asymptote/base/plain_Label.asy
+2020/03/04 | 1652 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt
+2020/03/04 | 164890 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/03/04 | 164511 | graphics/asymptote/GUI/icons_rc.py
+2020/03/04 | 1642 | graphics/asymptote/callable.h
+2020/03/04 | 1637 | graphics/asymptote/builtin.h
+2020/03/04 | 1626 | graphics/asymptote/genv.h
+2020/03/04 | 1623 | macros/latex/contrib/lwarp/README.txt
+2020/03/04 | 1620 | graphics/asymptote/doc/colors.asy
+2020/03/04 | 161 | graphics/asymptote/runhistory.h
+2020/03/04 | 16190 | graphics/asymptote/runpair.cc
+2020/03/04 | 1618 | support/arara/scripts/rules/pdflatex.yaml
+2020/03/04 | 1618 | support/arara/scripts/rules/lualatex.yaml
+2020/03/04 | 16138 | graphics/asymptote/base/slide.asy
+2020/03/04 | 1612 | graphics/asymptote/asy-list.pl
+2020/03/04 | 16119 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties
+2020/03/04 | 1610 | graphics/asymptote/common.h
+2020/03/04 | 160717 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/03/04 | 160672 | graphics/asymptote/examples/animations/dice.u3d
+2020/03/04 | 16048 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/03/04 | 1600 | support/arara/scripts/rules/latex.yaml
+2020/03/04 | 15 | support/arara/source/src/test/resources/executiontests/invalid-config/arararc.yaml
+2020/03/04 | 159 | graphics/asymptote/tests/types/cast.asy
+2020/03/04 | 1594 | graphics/asymptote/pen.cc
+2020/03/04 | 158 | graphics/asymptote/tests/frames/stat.asy
+2020/03/04 | 1589 | macros/latex/contrib/xsavebox/README.md
+2020/03/04 | 15897061 | support/arara/scripts/arara.jar
+2020/03/04 | 15882 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/03/04 | 15845 | graphics/asymptote/dec.h
+2020/03/04 | 157 | graphics/asymptote/runsystem.h
+2020/03/04 | 157 | graphics/asymptote/doc/saddle.asy
+2020/03/04 | 1569 | graphics/asymptote/examples/near_earth.asy
+2020/03/04 | 15645 | graphics/asymptote/install-sh
+2020/03/04 | 155 | graphics/asymptote/tests/types/ecast.asy
+2020/03/04 | 15540 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties
+2020/03/04 | 154 | graphics/asymptote/examples/billboard.asy
+2020/03/04 | 154 | graphics/asymptote/doc/slopefield1.asy
+2020/03/04 | 153 | graphics/asymptote/runlabel.h
+2020/03/04 | 15385 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_it.properties
+2020/03/04 | 1537 | graphics/asymptote/examples/refs.bib
+2020/03/04 | 15372 | graphics/asymptote/types.h
+2020/03/04 | 1530 | support/arara/scripts/rules/latexmk.yaml
+2020/03/04 | 152 | graphics/asymptote/glew.c
+2020/03/04 | 1526 | graphics/asymptote/examples/BezierSurface.asy
+2020/03/04 | 1524 | graphics/asymptote/patches/flex.patch
+2020/03/04 | 152101 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/03/04 | 15192 | graphics/asymptote/base/ode.asy
+2020/03/04 | 1514 | support/arara/scripts/rules/xelatex.yaml
+2020/03/04 | 1514 | support/arara/scripts/rules/uplatex.yaml
+2020/03/04 | 150 | graphics/asymptote/examples/spheresilhouette.asy
+2020/03/04 | 150 | graphics/asymptote/doc/latexmkrc_asydir
+2020/03/04 | 1508 | support/arara/scripts/rules/platex.yaml
+2020/03/04 | 1504 | graphics/asymptote/GUI/xasyUtils.py
+2020/03/04 | 1500 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt
+2020/03/04 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
+2020/03/04 | 149790 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/03/04 | 1492 | graphics/asymptote/runarray.h
+2020/03/04 | 1492 | graphics/asymptote/GUI/res/icons/bucket.svg
+2020/03/04 | 148 | support/arara/source/src/test/resources/executiontests/conditionals/conditionals.tex
+2020/03/04 | 1485 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt
+2020/03/04 | 1485 | support/arara/scripts/rules/makeindex.yaml
+2020/03/04 | 148481 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/03/04 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
+2020/03/04 | 14801 | graphics/asymptote/base/palette.asy
+2020/03/04 | 147 | graphics/asymptote/doc/vectorfield.asy
+2020/03/04 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
+2020/03/04 | 14795 | graphics/asymptote/entry.h
+2020/03/04 | 14773 | graphics/asymptote/configure.ac
+2020/03/04 | 14747 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt
+2020/03/04 | 147335 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/03/04 | 1469 | graphics/asymptote/doc/png/Makefile.in
+2020/03/04 | 14663422 | graphics/asymptote.zip
+2020/03/04 | 14660 | graphics/asymptote/base/contour3.asy
+2020/03/04 | 1464 | support/arara/scripts/rules/asymptote.yaml
+2020/03/04 | 1461 | graphics/asymptote/examples/NURBSsurface.asy
+2020/03/04 | 14615 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages.properties
+2020/03/04 | 14615 | support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en.properties
+2020/03/04 | 145 | graphics/asymptote/examples/star.asy
+2020/03/04 | 144 | graphics/asymptote/doc/latexmkrc
+2020/03/04 | 1446 | graphics/asymptote/webgl/vertex.glsl
+2020/03/04 | 14448 | graphics/asymptote/stack.cc
+2020/03/04 | 143 | graphics/asymptote/tests/gc/label.asy
+2020/03/04 | 1439 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt
+2020/03/04 | 1432 | support/arara/scripts/rules/knitr.yaml
+2020/03/04 | 14311 | graphics/asymptote/base/flowchart.asy
+2020/03/04 | 14215 | support/arara/doc/logos/logo1.pdf
+2020/03/04 | 141 | graphics/asymptote/examples/sphere.asy
+2020/03/04 | 141 | graphics/asymptote/examples/ring.asy
+2020/03/04 | 14166 | support/arara/doc/logos/logo2.pdf
+2020/03/04 | 14107 | support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt
+2020/03/04 | 140957 | support/arara/doc/figures/arara.png
+2020/03/04 | 14049 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/03/04 | 14023 | graphics/asymptote/arrayop.h
+2020/03/04 | 1400333 | graphics/asymptote/ChangeLog
+2020/03/04 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
+2020/03/04 | 1391 | graphics/asymptote/doc/CAD1.asy
+2020/03/04 | 138 | graphics/asymptote/Pipfile
+2020/03/04 | 13884 | graphics/asymptote/types.cc
+2020/03/04 | 1384 | graphics/asymptote/tests/pic/trans.asy
+2020/03/04 | 1382986 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/03/04 | 1375 | graphics/asymptote/base/tree.asy
+2020/03/04 | 13739 | graphics/asymptote/examples/teapot.asy
+2020/03/04 | 137123 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/03/04 | 136 | graphics/asymptote/examples/latticeshading.asy
+2020/03/04 | 13663 | graphics/asymptote/doc/install-sh
+2020/03/04 | 13663 | graphics/asymptote/doc/FAQ/install-sh
+2020/03/04 | 13628 | graphics/asymptote/runtriple.cc
+2020/03/04 | 13554 | support/arara/doc/chapters/deploying.tex
+2020/03/04 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
+2020/03/04 | 13537 | support/arara/doc/chapters/mvel.tex
+2020/03/04 | 1349 | graphics/asymptote/interact.h
+2020/03/04 | 1347 | support/arara/doc/figures/gl.pdf
+2020/03/04 | 13476 | graphics/asymptote/base/grid3.asy
+2020/03/04 | 1343 | graphics/asymptote/runtimebase.in
+2020/03/04 | 13406 | macros/latex/contrib/media9/ChangeLog
+2020/03/04 | 1338 | support/arara/scripts/rules/clean.yaml
+2020/03/04 | 13339 | graphics/asymptote/camp.l
+2020/03/04 | 133255 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/03/04 | 1331 | graphics/asymptote/tests/types/spec.asy
+2020/03/04 | 132 | graphics/asymptote/tests/string/length.asy
+2020/03/04 | 1326 | graphics/asymptote/examples/electromagnetic.asy
+2020/03/04 | 131 | graphics/asymptote/GUI/DebugFlags.py
+2020/03/04 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
+2020/03/04 | 13130 | support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt
+2020/03/04 | 1311 | graphics/asymptote/patches/dvipdf
+2020/03/04 | 131187 | systems/win32/miktex/tm/packages/biblatex2bibitem.tar.lzma
+2020/03/04 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
+2020/03/04 | 1310 | graphics/asymptote/examples/roundpath.asy
+2020/03/04 | 1309 | graphics/asymptote/examples/Klein.asy
+2020/03/04 | 13061 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/03/04 | 130308 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/03/04 | 129 | graphics/asymptote/tests/gc/struct.asy
+2020/03/04 | 12959 | graphics/asymptote/runlabel.in
+2020/03/04 | 1293 | graphics/asymptote/TODO
+2020/03/04 | 1293654 | graphics/asymptote/doc/asymptote.pdf
+2020/03/04 | 1284 | graphics/asymptote/tests/output/Makefile
+2020/03/04 | 1279 | graphics/asymptote/drawverbatim.h
+2020/03/04 | 1278 | graphics/asymptote/newexp.h
+2020/03/04 | 127885 | graphics/asymptote/camp.tab.cc
+2020/03/04 | 1276 | graphics/asymptote/base/asymptote.py
+2020/03/04 | 1275 | support/arara/scripts/rules/pdfcsplain.yaml
+2020/03/04 | 12744 | graphics/asymptote/impdatum.cc
+2020/03/04 | 1267 | support/arara/scripts/rules/luahbtex.yaml
+2020/03/04 | 1263 | support/arara/scripts/rules/csplain.yaml
+2020/03/04 | 12629 | graphics/asymptote/runsystem.cc
+2020/03/04 | 1261761 | graphics/asymptote/examples/worldmap.dat
+2020/03/04 | 1260 | support/arara/scripts/rules/metapost.yaml
+2020/03/04 | 1259 | support/arara/scripts/rules/pdftex.yaml
+2020/03/04 | 1259 | support/arara/scripts/rules/luatex.yaml
+2020/03/04 | 1259 | graphics/asymptote/base/plain_arcs.asy
+2020/03/04 | 1253 | graphics/asymptote/keywords.pl
+2020/03/04 | 12534 | graphics/asymptote/ax_pthread.m4
+2020/03/04 | 1251 | graphics/asymptote/examples/odetest.asy
+2020/03/04 | 124 | graphics/asymptote/tests/gc/path.asy
+2020/03/04 | 124 | graphics/asymptote/GUI/res/icons/centerorigin.asy
+2020/03/04 | 1249277 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/03/04 | 12491 | support/arara/doc/chapters/introduction.tex
+2020/03/04 | 1248 | support/arara/scripts/rules/animate.yaml
+2020/03/04 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
+2020/03/04 | 1245 | graphics/asymptote/findsym.pl
+2020/03/04 | 1240 | graphics/asymptote/examples/arrows3.asy
+2020/03/04 | 123 | support/arara/source/src/test/resources/executiontests/changes/arara.yaml
+2020/03/04 | 123 | graphics/asymptote/examples/Coons.asy
+2020/03/04 | 123 | graphics/asymptote/doc/superpath.asy
+2020/03/04 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
+2020/03/04 | 1237 | graphics/asymptote/GUI/res/icons/closedcurve.svg
+2020/03/04 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
+2020/03/04 | 1235777 | graphics/asymptote/GL/glew.c
+2020/03/04 | 1234 | graphics/asymptote/primitives.h
+2020/03/04 | 1231 | graphics/asymptote/examples/logo3.asy
+2020/03/04 | 1231284 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/03/04 | 12300 | graphics/asymptote/knot.h
+2020/03/04 | 1229 | graphics/asymptote/build-scripts/build-asygl
+2020/03/04 | 1227 | support/arara/scripts/rules/dvipspdf.yaml
+2020/03/04 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
+2020/03/04 | 12208 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt
+2020/03/04 | 121 | graphics/asymptote/doc/labelsquare.asy
+2020/03/04 | 1216 | graphics/asymptote/examples/dragon.asy
+2020/03/04 | 1213 | graphics/asymptote/drawclipend.h
+2020/03/04 | 121144 | graphics/asymptote/doc/asyRefCard.pdf
+2020/03/04 | 12103 | graphics/asymptote/stm.cc
+2020/03/04 | 1209 | graphics/asymptote/tests/imp/unravel.asy
+2020/03/04 | 1207 | graphics/asymptote/beziercurve.h
+2020/03/04 | 12035 | graphics/asymptote/base/solids.asy
+2020/03/04 | 119 | graphics/asymptote/fftw++asy.cc
+2020/03/04 | 11973 | macros/latex/contrib/xsavebox/xsavebox.sty
+2020/03/04 | 119657 | graphics/asymptote/ReleaseNotes
+2020/03/04 | 1194 | graphics/asymptote/GUI/res/icons/code.svg
+2020/03/04 | 1191 | graphics/asymptote/camperror.cc
+2020/03/04 | 11907 | graphics/asymptote/tests/gsl/random.asy
+2020/03/04 | 118 | graphics/asymptote/tests/string/substr.asy
+2020/03/04 | 1189 | graphics/asymptote/tests/types/var.asy
+2020/03/04 | 118815 | macros/generic/chemfig/chemfig.tex
+2020/03/04 | 1186 | graphics/asymptote/GUI/res/icons/opencurve.svg
+2020/03/04 | 1186601 | graphics/asymptote/GL/glew.h
+2020/03/04 | 1185 | graphics/asymptote/examples/functionshading.asy
+2020/03/04 | 1183 | graphics/asymptote/base/embed.asy
+2020/03/04 | 1181185 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/03/04 | 1180733 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/03/04 | 1175 | graphics/asymptote/guide.cc
+2020/03/04 | 11683 | support/arara/doc/chapters/building.tex
+2020/03/04 | 11680 | graphics/asymptote/path.h
+2020/03/04 | 116663 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/03/04 | 11658 | graphics/asymptote/coder.h
+2020/03/04 | 1163 | graphics/asymptote/runtime.h
+2020/03/04 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
+2020/03/04 | 116025 | graphics/asymptote/predicates.cc
+2020/03/04 | 115 | graphics/asymptote/doc/onecontour.asy
+2020/03/04 | 11585 | graphics/asymptote/Makefile.in
+2020/03/04 | 1157 | support/arara/scripts/rules/xetex.yaml
+2020/03/04 | 1157 | support/arara/scripts/rules/uptex.yaml
+2020/03/04 | 1157 | macros/latex/contrib/xsavebox/ChangeLog
+2020/03/04 | 115594 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/03/04 | 11541 | graphics/asymptote/aspy.py
+2020/03/04 | 1153 | support/arara/scripts/rules/ptex.yaml
+2020/03/04 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
+2020/03/04 | 1151 | graphics/asymptote/callable.cc
+2020/03/04 | 1149 | support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt
+2020/03/04 | 1148 | graphics/asymptote/GUI/configs/xasyconfig.cson
+2020/03/04 | 11482 | graphics/asymptote/base/binarytree.asy
+2020/03/04 | 1142 | graphics/asymptote/envcompleter.cc
+2020/03/04 | 1140 | graphics/asymptote/examples/imagehistogram.asy
+2020/03/04 | 11402 | support/arara/doc/chapters/logging.tex
+2020/03/04 | 113 | graphics/asymptote/patches/fixmem.reg
+2020/03/04 | 11384 | graphics/asymptote/drawelement.h
+2020/03/04 | 1136 | graphics/asymptote/examples/genustwo.asy
+2020/03/04 | 11320 | graphics/asymptote/base/plain_markers.asy
+2020/03/04 | 1131 | graphics/asymptote/gl-matrix-2.4.0-pruned/LICENSE.js
+2020/03/04 | 1126 | graphics/asymptote/coenv.cc
+2020/03/04 | 1125 | macros/generic/chemfig/README
+2020/03/04 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
+2020/03/04 | 1122 | graphics/asymptote/base/external.asy
+2020/03/04 | 1120 | graphics/asymptote/examples/animations/wheel.asy
+2020/03/04 | 111 | graphics/asymptote/GUI/res/icons/center.asy
+2020/03/04 | 1115313 | macros/generic/chemfig/chemfig-fr.pdf
+2020/03/04 | 1114 | graphics/asymptote/examples/laserlattice.asy
+2020/03/04 | 111161 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/03/04 | 1104160 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/03/04 | 11030 | graphics/asymptote/base/math.asy
+2020/03/04 | 1102 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
+2020/03/04 | 1101005 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/03/04 | 1100987 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/03/04 | 109 | graphics/asymptote/tests/string/insert.asy
+2020/03/04 | 1098 | graphics/asymptote/refaccess.cc
+2020/03/04 | 1096 | graphics/asymptote/tests/array/transpose.asy
+2020/03/04 | 109562 | macros/generic/chemfig/chemfigold.tex
+2020/03/04 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
+2020/03/04 | 108872 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/03/04 | 1087279 | macros/generic/chemfig/chemfig-en.pdf
+2020/03/04 | 1085 | graphics/asymptote/GUI/res/icons/openpolygon.svg
+2020/03/04 | 10830 | graphics/asymptote/base/CAD.asy
+2020/03/04 | 1082 | graphics/asymptote/patches/README
+2020/03/04 | 10727 | graphics/asymptote/texfile.h
+2020/03/04 | 1065 | graphics/asymptote/examples/shellmethod.asy
+2020/03/04 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
+2020/03/04 | 10604 | graphics/asymptote/path3.h
+2020/03/04 | 105 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
+2020/03/04 | 105 | graphics/asymptote/GUI/res/icons/closedcurve.asy
+2020/03/04 | 1059 | support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt
+2020/03/04 | 10582 | graphics/asymptote/tr.cc
+2020/03/04 | 10568 | systems/win32/miktex/tm/packages/graphics-pln.tar.lzma
+2020/03/04 | 1055 | graphics/asymptote/examples/partitionExample.asy
+2020/03/04 | 10556453 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
+2020/03/04 | 1052 | graphics/asymptote/GUI/res/icons/centerorigin.svg
+2020/03/04 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
+2020/03/04 | 1051 | graphics/asymptote/doc/eetomumu.asy
+2020/03/04 | 1050 | graphics/asymptote/opsymbols.pl
+2020/03/04 | 104 | graphics/asymptote/examples/tiling.asy
+2020/03/04 | 104 | graphics/asymptote/examples/shadestroke.asy
+2020/03/04 | 10445 | graphics/asymptote/INSTALL
+2020/03/04 | 1042555 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/03/04 | 1041978 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/03/04 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
+2020/03/04 | 1036 | graphics/asymptote/examples/workcone.asy
+2020/03/04 | 1033 | graphics/asymptote/examples/basealign.asy
+2020/03/04 | 1032 | support/arara/doc/rules/manual.yaml
+2020/03/04 | 1030 | graphics/asymptote/absyn.h
+2020/03/04 | 102 | graphics/asymptote/tests/gc/file.asy
+2020/03/04 | 1027 | support/arara/scripts/rules/etex.yaml
+2020/03/04 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
+2020/03/04 | 1025 | graphics/asymptote/doc/leastsquares.asy
+2020/03/04 | 102518 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/03/04 | 10249 | support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt
+2020/03/04 | 10242 | macros/latex/contrib/xsavebox/xsavebox.tex
+2020/03/04 | 10210 | graphics/asymptote/examples/thermodynamics.asy
+2020/03/04 | 1020 | graphics/asymptote/flatguide.cc
+2020/03/04 | 1020 | graphics/asymptote/examples/NURBSsphere.asy
+2020/03/04 | 10196 | graphics/asymptote/doc/CAD.tex
+2020/03/04 | 1015 | support/arara/scripts/rules/tex.yaml
+2020/03/04 | 1013 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
+2020/03/04 | 1010 | graphics/asymptote/examples/washermethod.asy
+2020/03/04 | 100711 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/03/04 | 1005 | graphics/asymptote/doc/asy.1.begin
+2020/03/04 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
+2020/03/04 | 1000 | graphics/asymptote/doc/FAQ/Makefile
2020/03/03 | 99541 | macros/latex/contrib/l3packages/xtemplate.dtx
-2020/03/03 | 9945 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
-2020/03/03 | 993 | graphics/asymptote/examples/RiemannSphere.asy
2020/03/03 | 992 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-ot1G.vf
2020/03/03 | 992 | fonts/scholax/vf/TeXGyreScholaX-BoldItalic-tlf-ot1G.vf
-2020/03/03 | 98 | graphics/asymptote/GUI/res/icons/openpolygon.asy
-2020/03/03 | 98 | graphics/asymptote/GUI/res/icons/opencurve.asy
-2020/03/03 | 9892 | graphics/asymptote/profiler.h
2020/03/03 | 988 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tlf-ot1G.vf
2020/03/03 | 988 | fonts/scholax/vf/TeXGyreScholaX-Regular-tlf-ot1G.vf
2020/03/03 | 988 | fonts/scholax/vf/TeXGyreScholaX-Italic-tlf-ot1G.vf
-2020/03/03 | 9871 | graphics/asymptote/runstring.in
-2020/03/03 | 986 | graphics/asymptote/predicates.h
2020/03/03 | 984 | fonts/scholax/vf/TeXGyreScholaX-Bold-tlf-ot1G.vf
-2020/03/03 | 9836 | graphics/asymptote/doc/asymptote.sty
-2020/03/03 | 980 | graphics/asymptote/examples/lmfit1.asy
-2020/03/03 | 978 | graphics/asymptote/examples/worksheet.asy
2020/03/03 | 9772 | macros/latex/contrib/l3kernel/l3docstrip.dtx
-2020/03/03 | 9756 | graphics/asymptote/util.cc
-2020/03/03 | 974 | graphics/asymptote/prc/Makefile
-2020/03/03 | 972 | graphics/asymptote/examples/fequlogo.asy
-2020/03/03 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
-2020/03/03 | 971 | graphics/asymptote/examples/filesurface.asy
-2020/03/03 | 969 | graphics/asymptote/runfile.h
-2020/03/03 | 969 | graphics/asymptote/examples/triads.asy
2020/03/03 | 967 | macros/plain/graphics/picture.tex
-2020/03/03 | 966 | graphics/asymptote/tests/array/solve.asy
2020/03/03 | 9656 | macros/latex/contrib/l3kernel/l3unicode.dtx
-2020/03/03 | 9651 | graphics/asymptote/triple.h
-2020/03/03 | 964 | graphics/asymptote/GUI/xasyTransform.py
-2020/03/03 | 964 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
-2020/03/03 | 96319 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/03/03 | 95 | graphics/asymptote/prc/test.asy
-2020/03/03 | 958 | graphics/asymptote/statistics.h
-2020/03/03 | 956 | graphics/asymptote/examples/poster.asy
-2020/03/03 | 9566 | graphics/asymptote/base/bezulate.asy
2020/03/03 | 9548 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-ly1.tfm
2020/03/03 | 9544 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-ly1.tfm
2020/03/03 | 9540 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-ly1.tfm
2020/03/03 | 951 | fonts/fourier-GUT/afm/fourier-alt.afm
2020/03/03 | 9512 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-ly1.tfm
-2020/03/03 | 946 | graphics/asymptote/examples/animations/cube.asy
2020/03/03 | 9450 | macros/latex/contrib/l3kernel/l3flag.dtx
-2020/03/03 | 94301 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/03/03 | 94108 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/03/03 | 9399 | graphics/asymptote/base/rationalSimplex.asy
-2020/03/03 | 937767 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/03/03 | 936 | graphics/asymptote/tests/array/array.asy
-2020/03/03 | 93442 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/03/03 | 93919099 | systems/win32/w32tex/TLW64/tl-win64.zip
2020/03/03 | 933352 | fonts/fourier-GUT.zip
-2020/03/03 | 932999 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
2020/03/03 | 9324 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-ly1.tfm
2020/03/03 | 9320 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-ly1.tfm
2020/03/03 | 9316 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-sc-ly1.tfm
-2020/03/03 | 930 | graphics/asymptote/examples/polararea.asy
-2020/03/03 | 9309 | graphics/asymptote/base/plain_paths.asy
-2020/03/03 | 9306 | graphics/asymptote/psfile.h
-2020/03/03 | 92933 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
2020/03/03 | 9288 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-ly1.tfm
2020/03/03 | 9268 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-sc-ly1.tfm
2020/03/03 | 9260 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-sc-ly1.tfm
-2020/03/03 | 9251 | graphics/asymptote/errors
2020/03/03 | 9240 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-sc-ly1.tfm
2020/03/03 | 9236 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-ly1.tfm
2020/03/03 | 9224 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-ly1.tfm
2020/03/03 | 9212 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-sc-ly1.tfm
-2020/03/03 | 92093 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/03/03 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
2020/03/03 | 9192 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-ly1.tfm
-2020/03/03 | 917 | graphics/asymptote/opcodes.h
2020/03/03 | 9160 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-ly1.tfm
-2020/03/03 | 91384 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
2020/03/03 | 9136 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-ly1.tfm
-2020/03/03 | 91342 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2020/03/03 | 9132 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-ly1.tfm
-2020/03/03 | 912 | graphics/asymptote/doc/errorbars.asy
2020/03/03 | 9128 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-sc-ly1.tfm
2020/03/03 | 9104 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-ly1.tfm
-2020/03/03 | 9094 | graphics/asymptote/application.h
-2020/03/03 | 908 | graphics/asymptote/modifier.h
-2020/03/03 | 908 | graphics/asymptote/coenv.h
-2020/03/03 | 9065 | graphics/asymptote/jsfile.cc
-2020/03/03 | 901 | graphics/asymptote/virtualfieldaccess.cc
2020/03/03 | 8932 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-ly1.tfm
-2020/03/03 | 892 | graphics/asymptote/GUI/res/icons/center.svg
2020/03/03 | 892 | fonts/fourier-GUT/afm/fourier-alt-semi.afm
-2020/03/03 | 8929 | graphics/asymptote/runmath.in
2020/03/03 | 8928 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-ly1.tfm
2020/03/03 | 8928 | fonts/newtx/tex/newtxtext.sty
2020/03/03 | 8924 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-ly1.tfm
-2020/03/03 | 891 | graphics/asymptote/angle.h
-2020/03/03 | 8912 | graphics/asymptote/symbol.cc
2020/03/03 | 8900 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-ly1.tfm
-2020/03/03 | 8870 | graphics/asymptote/base/asy.vim
-2020/03/03 | 885 | graphics/asymptote/examples/twistedtubes.asy
-2020/03/03 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
-2020/03/03 | 882 | graphics/asymptote/shaders.h
2020/03/03 | 8829 | macros/latex/contrib/fei/referencias.bib
2020/03/03 | 88271 | macros/latex/contrib/l3kernel/l3int.dtx
-2020/03/03 | 880 | graphics/asymptote/doc/xasy.1x
-2020/03/03 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
-2020/03/03 | 877 | graphics/asymptote/doc/markers2.asy
-2020/03/03 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
-2020/03/03 | 87327 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/03/03 | 872 | graphics/asymptote/doc/imagecontour.asy
-2020/03/03 | 87198 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/03/03 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
-2020/03/03 | 868 | graphics/asymptote/examples/xxsq01x-1.asy
2020/03/03 | 8680 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-ly1.tfm
2020/03/03 | 8672 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-ly1.tfm
2020/03/03 | 8672 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-ly1.tfm
-2020/03/03 | 8661 | graphics/asymptote/base/plain_pens.asy
-2020/03/03 | 86615 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/03/03 | 8650 | graphics/asymptote/glrender.h
2020/03/03 | 864 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tosf-sc-ot1.vf
2020/03/03 | 864 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-sc-ot1.vf
2020/03/03 | 864 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-osf-sc-ot1.vf
2020/03/03 | 864 | fonts/scholax/vf/TeXGyreScholaX-BoldItalic-tosf-sc-ot1.vf
2020/03/03 | 8644 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-ly1.tfm
-2020/03/03 | 862 | graphics/asymptote/doc/flowchartdemo.asy
-2020/03/03 | 861 | graphics/asymptote/examples/orthocenter.asy
2020/03/03 | 8612 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-ly1.tfm
2020/03/03 | 860 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-sc-ot1.vf
2020/03/03 | 860 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tlf-sc-ot1.vf
@@ -135,9 +1394,7 @@
2020/03/03 | 860 | fonts/scholax/vf/TeXGyreScholaX-BoldItalic-lf-sc-ot1.vf
2020/03/03 | 8604 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-ly1.tfm
2020/03/03 | 8600 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ly1.tfm
-2020/03/03 | 85787 | graphics/asymptote/base/three.asy
2020/03/03 | 8572 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-ly1.tfm
-2020/03/03 | 856 | graphics/asymptote/examples/animations/sphere.asy
2020/03/03 | 856 | fonts/scholax/vf/TeXGyreScholaX-Slanted-lf-sc-ot1.vf
2020/03/03 | 856 | fonts/scholax/vf/TeXGyreScholaX-Regular-lf-sc-ot1.vf
2020/03/03 | 856 | fonts/scholax/vf/TeXGyreScholaX-Italic-tlf-sc-ot1.vf
@@ -148,43 +1405,27 @@
2020/03/03 | 856 | fonts/scholax/vf/TeXGyreScholaX-Bold-osf-sc-ot1.vf
2020/03/03 | 856 | fonts/scholax/vf/TeXGyreScholaX-Bold-lf-sc-ot1.vf
2020/03/03 | 85507 | macros/latex/contrib/l3kernel/l3coffins.dtx
-2020/03/03 | 852 | graphics/asymptote/parser.h
2020/03/03 | 851 | fonts/fourier-GUT/afm/fourier-alt-semiita.afm
-2020/03/03 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
2020/03/03 | 850 | fonts/fourier-GUT/afm/fourier-alt-boldita.afm
-2020/03/03 | 849 | graphics/asymptote/examples/SierpinskiGasket.asy
2020/03/03 | 84830 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
-2020/03/03 | 8471 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/03/03 | 845 | graphics/asymptote/envcompleter.h
-2020/03/03 | 8458 | graphics/asymptote/runpath.in
-2020/03/03 | 84566 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/03/03 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
2020/03/03 | 8444 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-ly1.tfm
2020/03/03 | 8444 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-ly1.tfm
2020/03/03 | 84370 | biblio/bibtex/contrib/econ-bst/econ-econometrica.bst
2020/03/03 | 8436 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-ly1.tfm
2020/03/03 | 8436 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-ly1.tfm
-2020/03/03 | 84332 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
2020/03/03 | 8432 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-ly1.tfm
2020/03/03 | 8412 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ly1.tfm
2020/03/03 | 8408 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-ly1.tfm
-2020/03/03 | 839 | graphics/asymptote/examples/venn3.asy
2020/03/03 | 8396 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-ly1.tfm
2020/03/03 | 8392 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-ly1.tfm
-2020/03/03 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
2020/03/03 | 8388 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-ly1.tfm
2020/03/03 | 8384 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-ly1.tfm
2020/03/03 | 8384 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-ly1.tfm
2020/03/03 | 837 | fonts/fourier-GUT/afm/fourier-alt-ita.afm
2020/03/03 | 8376 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-ly1.tfm
-2020/03/03 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
2020/03/03 | 8363 | fonts/fourier-GUT/README
2020/03/03 | 8356 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-ly1.tfm
2020/03/03 | 8348 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-ly1.tfm
-2020/03/03 | 83431 | graphics/asymptote/lex.yy.cc
-2020/03/03 | 833 | graphics/asymptote/runbacktrace.in
-2020/03/03 | 833 | graphics/asymptote/examples/markregular.asy
-2020/03/03 | 83305 | graphics/asymptote/webgl/gl.js
2020/03/03 | 832 | macros/latex/contrib/biblatex2bibitem/biblatex2bibitem-examples.bib
2020/03/03 | 832 | fonts/fourier-GUT/afm/fourier-alt-black.afm
2020/03/03 | 83221 | biblio/bibtex/contrib/econ-bst/econ-aea.bst
@@ -192,25 +1433,15 @@
2020/03/03 | 83135 | biblio/bibtex/contrib/econ-bst/econ-b.bst
2020/03/03 | 8312 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-ly1.tfm
2020/03/03 | 83001 | biblio/bibtex/contrib/econ-bst/econ-a.bst
-2020/03/03 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
-2020/03/03 | 8290 | graphics/asymptote/base/simplex.asy
2020/03/03 | 828 | fonts/fourier-GUT/afm/fourier-alt-bold.afm
2020/03/03 | 82814 | biblio/bibtex/contrib/econ-bst/econ-no-sort.bst
2020/03/03 | 82814 | biblio/bibtex/contrib/econ-bst/econ.bst
-2020/03/03 | 827 | graphics/asymptote/examples/xxsq01y.asy
2020/03/03 | 82760 | biblio/bibtex/contrib/econ-bst/econ-jie.bst
2020/03/03 | 82738 | biblio/bibtex/contrib/econ-bst/econ-old.bst
2020/03/03 | 82562 | macros/latex/contrib/l3kernel/l3seq.dtx
2020/03/03 | 8255108 | fonts/newtx.zip
-2020/03/03 | 8243 | graphics/asymptote/base/asy-kate.sh
-2020/03/03 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
-2020/03/03 | 821 | graphics/asymptote/GUI/xasyArgs.py
-2020/03/03 | 821 | graphics/asymptote/doc/secondaryaxis.asy
2020/03/03 | 820328 | systems/win32/miktex/tm/packages/arabluatex.tar.lzma
-2020/03/03 | 81 | graphics/asymptote/doc/bezier.asy
-2020/03/03 | 818 | graphics/asymptote/camperror.h
2020/03/03 | 816 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tosf-ts1.vf
-2020/03/03 | 815 | graphics/asymptote/webgl/license
2020/03/03 | 812 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-ts1.vf
2020/03/03 | 812 | fonts/scholax/vf/TeXGyreScholaX-Regular-tosf-ts1.vf
2020/03/03 | 812 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-ts1.vf
@@ -233,967 +1464,237 @@
2020/03/03 | 808 | fonts/scholax/vf/TeXGyreScholaX-Bold-tosf-ts1.vf
2020/03/03 | 808 | fonts/scholax/vf/TeXGyreScholaX-Bold-tlf-ts1.vf
2020/03/03 | 808 | fonts/scholax/vf/TeXGyreScholaX-Bold-osf-ts1.vf
-2020/03/03 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
-2020/03/03 | 8062 | graphics/asymptote/runhistory.cc
2020/03/03 | 804 | fonts/scholax/vf/TeXGyreScholaX-Bold-lf-ts1.vf
-2020/03/03 | 80461 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/03/03 | 8045 | graphics/asymptote/doc/asy.1
-2020/03/03 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
-2020/03/03 | 8016 | graphics/asymptote/runpath3d.in
-2020/03/03 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
-2020/03/03 | 7935 | graphics/asymptote/fundec.cc
-2020/03/03 | 78 | graphics/asymptote/examples/randompath3.asy
-2020/03/03 | 784 | graphics/asymptote/examples/vertexshading.asy
-2020/03/03 | 780 | graphics/asymptote/GUI/res/icons/check.svg
-2020/03/03 | 7808 | graphics/asymptote/coder.cc
-2020/03/03 | 78018 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/03/03 | 77 | graphics/asymptote/tests/gc/string.asy
-2020/03/03 | 778 | graphics/asymptote/examples/controlsystem.asy
-2020/03/03 | 77831 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/03/03 | 773 | graphics/asymptote/drawlayer.h
-2020/03/03 | 77342 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
2020/03/03 | 77128 | macros/latex/contrib/l3kernel/l3box.dtx
-2020/03/03 | 770 | graphics/asymptote/asy.rc
-2020/03/03 | 76 | graphics/asymptote/examples/grid.asy
-2020/03/03 | 76904 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
-2020/03/03 | 76801 | graphics/asymptote/gl-matrix-2.4.0-pruned/dist/gl-matrix.js
-2020/03/03 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
-2020/03/03 | 7639 | graphics/asymptote/LICENSE.LESSER
-2020/03/03 | 762 | graphics/asymptote/examples/clockarray.asy
2020/03/03 | 76080 | biblio/bibtex/contrib/econ-bst/customization/econ-a.pdf
-2020/03/03 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
-2020/03/03 | 7598080 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
2020/03/03 | 7593 | systems/win32/miktex/tm/packages/autofancyhdr.tar.lzma
2020/03/03 | 75907 | macros/latex/contrib/l3kernel/l3skip.dtx
-2020/03/03 | 7587328 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
-2020/03/03 | 75576 | graphics/asymptote/GUI/windows/window1.ui
-2020/03/03 | 754 | graphics/asymptote/GUI/res/icons/circle.svg
-2020/03/03 | 754 | graphics/asymptote/doc/graphmarkers.asy
-2020/03/03 | 750 | graphics/asymptote/vm.h
-2020/03/03 | 7497 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/03/03 | 747 | graphics/asymptote/examples/pseudosphere.asy
-2020/03/03 | 746 | graphics/asymptote/tests/array/sort.asy
-2020/03/03 | 7445 | graphics/asymptote/name.cc
-2020/03/03 | 743 | graphics/asymptote/examples/xxsq01.asy
-2020/03/03 | 74350 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
2020/03/03 | 74349 | macros/latex/contrib/l3kernel/l3clist.dtx
2020/03/03 | 74230 | macros/latex/contrib/l3kernel/l3prefixes.pdf
-2020/03/03 | 7422 | graphics/asymptote/base/graph_splinetype.asy
-2020/03/03 | 739 | graphics/asymptote/examples/condor.asy
2020/03/03 | 73859 | macros/latex/contrib/l3kernel/l3fp-trig.dtx
-2020/03/03 | 737 | graphics/asymptote/tests/array/determinant.asy
-2020/03/03 | 73637 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/03/03 | 73504 | graphics/asymptote/runarray.cc
-2020/03/03 | 734 | graphics/asymptote/examples/quilt.asy
-2020/03/03 | 73435 | graphics/asymptote/GL/glxew.h
-2020/03/03 | 7307 | graphics/asymptote/base/stats.asy
2020/03/03 | 7306 | fonts/fourier-GUT/afm/fourier-ms.afm
-2020/03/03 | 7302 | graphics/asymptote/base/markers.asy
-2020/03/03 | 72 | graphics/asymptote/tests/gc/pen.asy
-2020/03/03 | 729 | graphics/asymptote/base/labelpath.asy
2020/03/03 | 72855 | macros/latex/contrib/l3kernel/l3str.dtx
-2020/03/03 | 727 | graphics/asymptote/examples/fermi.asy
-2020/03/03 | 72709 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/03/03 | 72687 | graphics/asymptote/GUI/Window1.py
-2020/03/03 | 72567 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/03/03 | 7230 | graphics/asymptote/runtime.pl
-2020/03/03 | 720 | graphics/asymptote/mod.h
+2020/03/03 | 723658 | install/macros/latex/contrib/zref.tds.zip
2020/03/03 | 71 | macros/plain/graphics/exmplcol.tex
-2020/03/03 | 7193 | graphics/asymptote/base/plain.asy
-2020/03/03 | 71708 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
2020/03/03 | 71688 | macros/latex/contrib/l3kernel/l3msg.dtx
-2020/03/03 | 71605 | graphics/asymptote/base/three_surface.asy
-2020/03/03 | 714 | graphics/asymptote/examples/unitoctant.asy
-2020/03/03 | 714 | graphics/asymptote/examples/gamma3.asy
-2020/03/03 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
-2020/03/03 | 7129 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
-2020/03/03 | 71223 | graphics/asymptote/base/asy-mode.el
-2020/03/03 | 711 | graphics/asymptote/examples/partialsurface.asy
-2020/03/03 | 710 | graphics/asymptote/GUI/xasySvg.py
-2020/03/03 | 710 | graphics/asymptote/examples/fjortoft.asy
-2020/03/03 | 70 | graphics/asymptote/tests/gc/transform.asy
-2020/03/03 | 70751 | graphics/asymptote/prc/oPRCFile.cc
2020/03/03 | 70305 | macros/latex/contrib/l3kernel/l3fp.dtx
-2020/03/03 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
2020/03/03 | 6990 | macros/latex/contrib/l3packages/xfp.dtx
2020/03/03 | 69886 | fonts/newtx/doc/newtxdoc.tex
-2020/03/03 | 69854 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
2020/03/03 | 6970 | macros/latex/contrib/l3kernel/l3fp-assign.dtx
-2020/03/03 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
-2020/03/03 | 69211 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/03/03 | 691 | graphics/asymptote/examples/centroidfg.asy
-2020/03/03 | 6911 | graphics/asymptote/errortest.asy
-2020/03/03 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
-2020/03/03 | 688 | graphics/asymptote/examples/layers.asy
-2020/03/03 | 68739 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/03/03 | 6871 | graphics/asymptote/config.h.in
-2020/03/03 | 6865 | graphics/asymptote/drawlabel.cc
-2020/03/03 | 68543 | graphics/asymptote/base/graph3.asy
-2020/03/03 | 683 | graphics/asymptote/examples/fractaltree.asy
2020/03/03 | 68329 | macros/latex/contrib/l3kernel/l3candidates.dtx
-2020/03/03 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
-2020/03/03 | 680 | graphics/asymptote/tests/array/delete.asy
-2020/03/03 | 679 | graphics/asymptote/examples/genusthree.asy
-2020/03/03 | 6783 | graphics/asymptote/guide.h
-2020/03/03 | 677 | graphics/asymptote/doc/Bode.asy
-2020/03/03 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
-2020/03/03 | 674 | graphics/asymptote/examples/sqrtx01.asy
-2020/03/03 | 674 | graphics/asymptote/drawpath.h
-2020/03/03 | 673 | graphics/asymptote/GUI/res/icons/save.svg
-2020/03/03 | 67274 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/03/03 | 67255 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/03/03 | 671 | graphics/asymptote/examples/spring.asy
-2020/03/03 | 66 | graphics/asymptote/examples/shade.asy
-2020/03/03 | 669502 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/03/03 | 66751 | graphics/asymptote/prc/writePRC.cc
-2020/03/03 | 666 | graphics/asymptote/fpu.h
-2020/03/03 | 6661 | graphics/asymptote/xstream.h
-2020/03/03 | 6660 | graphics/asymptote/simpson.cc
-2020/03/03 | 6650 | graphics/asymptote/getopt.h
-2020/03/03 | 65 | graphics/asymptote/tests/gc/guide.asy
-2020/03/03 | 659 | graphics/asymptote/examples/lowupint.asy
-2020/03/03 | 657 | graphics/asymptote/examples/100d.views
-2020/03/03 | 657 | graphics/asymptote/base/reload.js
-2020/03/03 | 6570 | graphics/asymptote/drawfill.h
-2020/03/03 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
-2020/03/03 | 654 | graphics/asymptote/prcfile.h
-2020/03/03 | 654 | graphics/asymptote/examples/limit.asy
-2020/03/03 | 652 | systems/win32/miktex/tm/packages/next/pr.ini
-2020/03/03 | 65092 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/03/03 | 6503 | graphics/asymptote/tests/types/constructor.asy
-2020/03/03 | 649 | graphics/asymptote/examples/NURBScurve.asy
+2020/03/03 | 671033 | macros/latex/contrib/zref/zref.pdf
2020/03/03 | 646 | macros/plain/graphics/graphicx.tex
-2020/03/03 | 643 | graphics/asymptote/examples/p-orbital.asy
-2020/03/03 | 64381 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
2020/03/03 | 64264 | macros/latex/contrib/l3kernel/l3prg.dtx
-2020/03/03 | 6425 | graphics/asymptote/mathop.h
-2020/03/03 | 639 | graphics/asymptote/tests/arith/transform.asy
-2020/03/03 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
-2020/03/03 | 63886 | graphics/asymptote/base/graph.asy
-2020/03/03 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
-2020/03/03 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
-2020/03/03 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
-2020/03/03 | 63314 | graphics/asymptote/GL/wglew.h
-2020/03/03 | 63292 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/03/03 | 63281 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/03/03 | 6318 | graphics/asymptote/doc/leastsquares.dat
-2020/03/03 | 63140 | graphics/asymptote/doc/FAQ/asy-faq.info
-2020/03/03 | 63105 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/03/03 | 630 | graphics/asymptote/base/shaders/vertex.glsl
-2020/03/03 | 6300 | graphics/asymptote/asymptote.nsi
-2020/03/03 | 62 | graphics/asymptote/tests/gc/array.asy
-2020/03/03 | 62 | graphics/asymptote/revision.cc
-2020/03/03 | 6292 | graphics/asymptote/base/plain_filldraw.asy
-2020/03/03 | 628 | graphics/asymptote/examples/wedge.asy
-2020/03/03 | 628 | graphics/asymptote/examples/polarcircle.asy
-2020/03/03 | 6285 | graphics/asymptote/base/plain_prethree.asy
-2020/03/03 | 62840 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/03/03 | 626 | graphics/asymptote/examples/venn.asy
2020/03/03 | 6267 | macros/latex/contrib/l3kernel/l3syntax-changes.tex
2020/03/03 | 6236 | macros/latex/contrib/l3kernel/l3alloc.dtx
-2020/03/03 | 620 | graphics/asymptote/tests/arith/integer.asy
2020/03/03 | 6205 | fonts/fourier-GUT/doc/fourier-orns-doc.tex
2020/03/03 | 6203 | macros/latex/contrib/l3kernel/l3color-base.dtx
-2020/03/03 | 61 | graphics/asymptote/base/latin1.asy
-2020/03/03 | 619 | graphics/asymptote/doc/logo.asy
-2020/03/03 | 618 | graphics/asymptote/examples/spline.asy
-2020/03/03 | 6185 | graphics/asymptote/transform.h
2020/03/03 | 61725 | macros/latex/contrib/l3kernel/expl3.dtx
-2020/03/03 | 61700 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/03/03 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
-2020/03/03 | 6169 | graphics/asymptote/base/plain_strings.asy
-2020/03/03 | 61607 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/03/03 | 6154 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
-2020/03/03 | 615497 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/03/03 | 610 | graphics/asymptote/examples/impact.asy
-2020/03/03 | 61079 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/03/03 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
-2020/03/03 | 609 | graphics/asymptote/keywords.cc
-2020/03/03 | 608 | graphics/asymptote/base/size10.asy
-2020/03/03 | 605 | graphics/asymptote/examples/integraltest.asy
-2020/03/03 | 60556 | graphics/asymptote/base/webgl/asygl.js
-2020/03/03 | 60505 | graphics/asymptote/runtime.cc
-2020/03/03 | 604 | graphics/asymptote/doc/flow.asy
-2020/03/03 | 60323 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/03/03 | 602 | graphics/asymptote/examples/treetest.asy
-2020/03/03 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
-2020/03/03 | 600 | graphics/asymptote/base/size11.asy
-2020/03/03 | 59 | graphics/asymptote/examples/stroke3.asy
-2020/03/03 | 599 | graphics/asymptote/GUI/xasyStrings.py
-2020/03/03 | 5949 | graphics/asymptote/drawpath3.cc
-2020/03/03 | 59421 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
-2020/03/03 | 5936 | graphics/asymptote/runfile.in
-2020/03/03 | 5925 | graphics/asymptote/drawpath3.h
-2020/03/03 | 591 | graphics/asymptote/examples/sinc.asy
-2020/03/03 | 58 | graphics/asymptote/examples/progrid.asy
-2020/03/03 | 589 | graphics/asymptote/GUI/res/icons/bucket.asy
-2020/03/03 | 589 | graphics/asymptote/examples/trefoilknot.asy
-2020/03/03 | 5897 | graphics/asymptote/Delaunay.cc
-2020/03/03 | 58859 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/03/03 | 5857 | graphics/asymptote/item.h
+2020/03/03 | 602336 | systems/win32/w32tex/ChangeLog
2020/03/03 | 584343 | macros/latex/contrib/l3kernel/expl3.pdf
-2020/03/03 | 582 | graphics/asymptote/examples/cos3.asy
-2020/03/03 | 581 | graphics/asymptote/examples/floatingdisk.asy
-2020/03/03 | 581 | graphics/asymptote/examples/BezierSaddle.asy
-2020/03/03 | 580 | graphics/asymptote/examples/xsin1x.asy
-2020/03/03 | 57 | graphics/asymptote/GUI/requirements.txt
-2020/03/03 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
-2020/03/03 | 579 | graphics/asymptote/examples/sin3.asy
-2020/03/03 | 579 | graphics/asymptote/examples/exp3.asy
-2020/03/03 | 5797 | graphics/asymptote/base/trembling.asy
-2020/03/03 | 578 | graphics/asymptote/base/annotate.asy
-2020/03/03 | 577 | graphics/asymptote/locate.h
2020/03/03 | 5779050 | macros/latex/contrib/l3kernel/source3.pdf
-2020/03/03 | 57752 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/03/03 | 576 | graphics/asymptote/examples/threeviews.asy
-2020/03/03 | 576 | graphics/asymptote/examples/circles.asy
-2020/03/03 | 576143 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/03/03 | 5760 | graphics/asymptote/base/plain_scaling.asy
-2020/03/03 | 574 | graphics/asymptote/examples/fillcontour.asy
-2020/03/03 | 5740 | graphics/asymptote/examples/cpkcolors.asy
-2020/03/03 | 573 | graphics/asymptote/examples/curvedlabel3.asy
-2020/03/03 | 57188 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/03/03 | 56889 | graphics/asymptote/runpicture.cc
-2020/03/03 | 5676 | graphics/asymptote/base/three_tube.asy
-2020/03/03 | 56694 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/03/03 | 56646 | graphics/asymptote/GUI/pyUIClass/window1.py
-2020/03/03 | 56417 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/03/03 | 563462 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/03/03 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
-2020/03/03 | 561256 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/03/03 | 56037 | graphics/asymptote/base/smoothcontour3.asy
-2020/03/03 | 557 | graphics/asymptote/examples/Pythagoras.asy
-2020/03/03 | 5543 | graphics/asymptote/examples/filesurface.dat
2020/03/03 | 551983 | systems/win32/miktex/tm/packages/nomencl.tar.lzma
-2020/03/03 | 54 | graphics/asymptote/tests/gc/funcall.asy
-2020/03/03 | 549 | graphics/asymptote/examples/equilchord.asy
-2020/03/03 | 54896 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/03/03 | 547 | graphics/asymptote/examples/tetra.asy
-2020/03/03 | 546 | graphics/asymptote/examples/label3zoom.asy
-2020/03/03 | 5465 | graphics/asymptote/env.cc
-2020/03/03 | 544811 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/03/03 | 5440 | graphics/asymptote/base/bsp.asy
-2020/03/03 | 540297 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/03/03 | 53988 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/03/03 | 53463 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
2020/03/03 | 533 | macros/latex/contrib/biblatex2bibitem/biblatex2bibitem-mwe.tex
-2020/03/03 | 532965 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2020/03/03 | 530 | macros/plain/graphics/color.tex
-2020/03/03 | 530712 | systems/win32/miktex/tm/packages/files.csv.lzma
-2020/03/03 | 530545 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/03/03 | 5301 | graphics/asymptote/main.cc
-2020/03/03 | 52 | graphics/asymptote/doc/square.asy
-2020/03/03 | 5295 | graphics/asymptote/interact.cc
-2020/03/03 | 5277 | graphics/asymptote/base/shaders/fragment.glsl
-2020/03/03 | 5273 | graphics/asymptote/bezierpatch.h
-2020/03/03 | 5262 | graphics/asymptote/patches/bison.patch
-2020/03/03 | 525 | graphics/asymptote/examples/vectorfield3.asy
-2020/03/03 | 5258 | graphics/asymptote/examples/mosaic.asy
-2020/03/03 | 5254 | graphics/asymptote/base/animation.asy
-2020/03/03 | 524 | graphics/asymptote/doc/brokenaxis.asy
-2020/03/03 | 5239 | graphics/asymptote/name.h
-2020/03/03 | 521 | graphics/asymptote/examples/dimension.asy
-2020/03/03 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
-2020/03/03 | 520 | graphics/asymptote/examples/smoothelevation.asy
-2020/03/03 | 52043 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/03/03 | 52017 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/03/03 | 51 | graphics/asymptote/base/unicode.asy
-2020/03/03 | 51 | graphics/asymptote/base/babel.asy
-2020/03/03 | 519 | graphics/asymptote/examples/extrudedcontour.asy
-2020/03/03 | 5179 | graphics/asymptote/pipestream.cc
-2020/03/03 | 51676 | graphics/asymptote/settings.cc
-2020/03/03 | 5151 | graphics/asymptote/GUI/labelEditor.py
-2020/03/03 | 5145 | graphics/asymptote/pair.h
-2020/03/03 | 51432 | graphics/asymptote/prc/oPRCFile.h
-2020/03/03 | 513 | graphics/asymptote/examples/buildcycle.asy
2020/03/03 | 51377 | macros/latex/contrib/l3kernel/l3text-case.dtx
-2020/03/03 | 5119 | graphics/asymptote/runsystem.in
2020/03/03 | 51073 | macros/latex/contrib/l3kernel/l3fp-extended.dtx
-2020/03/03 | 5098 | graphics/asymptote/errormsg.h
-2020/03/03 | 50881 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/03/03 | 50855 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/03/03 | 5070 | graphics/asymptote/memory.h
-2020/03/03 | 506 | graphics/asymptote/examples/delu.asy
-2020/03/03 | 50697 | graphics/asymptote/gsl.cc
2020/03/03 | 505523 | macros/latex/contrib/l3packages/xparse.pdf
-2020/03/03 | 50502 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/03/03 | 50497 | graphics/asymptote/GUI/xasy2asy.py
-2020/03/03 | 5048 | graphics/asymptote/GUI/xasyOptions.py
-2020/03/03 | 503 | graphics/asymptote/GUI/xasy.py
-2020/03/03 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
-2020/03/03 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
-2020/03/03 | 502 | graphics/asymptote/examples/floor.asy
-2020/03/03 | 5024 | graphics/asymptote/runhistory.in
-2020/03/03 | 500 | graphics/asymptote/doc/Hobbydir.asy
-2020/03/03 | 5003 | graphics/asymptote/base/rational.asy
-2020/03/03 | 49 | graphics/asymptote/doc/quartercircle.asy
-2020/03/03 | 49 | graphics/asymptote/doc/dots.asy
-2020/03/03 | 49 | graphics/asymptote/doc/colons.asy
-2020/03/03 | 499 | graphics/asymptote/examples/galleon.asy
-2020/03/03 | 4991 | graphics/asymptote/base/tube.asy
-2020/03/03 | 499164 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/03/03 | 498 | graphics/asymptote/examples/fano.asy
-2020/03/03 | 498 | graphics/asymptote/doc/penfunctionimage.asy
2020/03/03 | 4980 | fonts/fourier-GUT/latex/fourier-orns.sty
-2020/03/03 | 497 | graphics/asymptote/examples/bars3.asy
-2020/03/03 | 496 | graphics/asymptote/drawgrestore.h
-2020/03/03 | 49694 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
2020/03/03 | 49619 | macros/latex/contrib/l3kernel/l3prop.dtx
2020/03/03 | 49394 | macros/latex/contrib/l3kernel/l3fp-expo.dtx
-2020/03/03 | 49315 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/03/03 | 492 | graphics/asymptote/doc/CDlabel.asy
-2020/03/03 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
-2020/03/03 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
-2020/03/03 | 48669 | graphics/asymptote/runarray.in
-2020/03/03 | 485 | graphics/asymptote/examples/cards.asy
-2020/03/03 | 4849 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
-2020/03/03 | 48481 | graphics/asymptote/prc/writePRC.h
-2020/03/03 | 48441 | graphics/asymptote/config.guess
-2020/03/03 | 4841 | graphics/asymptote/tests/array/slice.asy
2020/03/03 | 48352 | fonts/fourier-GUT/doc/fourier-orns-doc.pdf
-2020/03/03 | 4825 | graphics/asymptote/examples/interpolate1.asy
-2020/03/03 | 4812 | graphics/asymptote/base/x11colors.asy
-2020/03/03 | 480 | graphics/asymptote/doc/logimage.asy
2020/03/03 | 480943 | macros/latex/contrib/l3packages/xfrac.pdf
-2020/03/03 | 479 | graphics/asymptote/examples/magnetic.asy
-2020/03/03 | 47986 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/03/03 | 472 | graphics/asymptote/absyn.cc
-2020/03/03 | 4727 | graphics/asymptote/doc/westnile.csv
2020/03/03 | 47215 | macros/latex/contrib/l3kernel/l3fp-aux.dtx
-2020/03/03 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
-2020/03/03 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
-2020/03/03 | 46927 | graphics/asymptote/base/plain_picture.asy
-2020/03/03 | 4687 | graphics/asymptote/castop.h
-2020/03/03 | 466 | graphics/asymptote/drawgsave.h
-2020/03/03 | 4668 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
-2020/03/03 | 465 | graphics/asymptote/examples/colorplanes.asy
-2020/03/03 | 464 | graphics/asymptote/doc/GaussianSurface.asy
-2020/03/03 | 4624 | graphics/asymptote/array.cc
-2020/03/03 | 462052 | graphics/asymptote/doc/png/asymptote.info
-2020/03/03 | 461 | graphics/asymptote/examples/cosaddition.asy
-2020/03/03 | 4619 | graphics/asymptote/drawfill.cc
-2020/03/03 | 460 | graphics/asymptote/examples/lever.asy
-2020/03/03 | 459 | graphics/asymptote/examples/hierarchy.asy
-2020/03/03 | 458 | graphics/asymptote/doc/multicontour.asy
-2020/03/03 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
-2020/03/03 | 45771 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/03/03 | 4575 | graphics/asymptote/env.h
-2020/03/03 | 45691 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/03/03 | 456869 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/03/03 | 45601 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/03/03 | 45468 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/03/03 | 4520 | graphics/asymptote/getopt1.c
-2020/03/03 | 4515 | graphics/asymptote/util.h
-2020/03/03 | 4503 | graphics/asymptote/bbox.h
-2020/03/03 | 450320 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
-2020/03/03 | 449 | graphics/asymptote/tests/arith/pair.asy
-2020/03/03 | 44940 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/03/03 | 44894 | graphics/asymptote/fftw++.h
-2020/03/03 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
-2020/03/03 | 44732 | graphics/asymptote/glrender.cc
2020/03/03 | 4464 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-ot1.tfm
-2020/03/03 | 445 | graphics/asymptote/examples/sacone.asy
-2020/03/03 | 445 | graphics/asymptote/examples/cones.asy
2020/03/03 | 4456 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-ot1.tfm
2020/03/03 | 4456 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-ot1.tfm
-2020/03/03 | 442 | graphics/asymptote/doc/join3.asy
2020/03/03 | 4428 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-ot1.tfm
-2020/03/03 | 441 | graphics/asymptote/examples/triangles.asy
-2020/03/03 | 441 | graphics/asymptote/doc/histogram.asy
-2020/03/03 | 440 | graphics/asymptote/examples/gamma.asy
-2020/03/03 | 4400 | graphics/asymptote/stm.h
-2020/03/03 | 43 | graphics/asymptote/examples/spring2.asy
-2020/03/03 | 438 | graphics/asymptote/examples/projectrevolution.asy
2020/03/03 | 438409 | macros/latex/contrib/fei/fei.pdf
2020/03/03 | 4356 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-sc-ot1.tfm
-2020/03/03 | 4348 | graphics/asymptote/doc/colo-asy.tex
-2020/03/03 | 4347 | graphics/asymptote/fundec.h
2020/03/03 | 4344 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-ot1.tfm
-2020/03/03 | 43425 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
2020/03/03 | 4340 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-sc-ot1.tfm
2020/03/03 | 4336 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-sc-ot1.tfm
2020/03/03 | 4336 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-ot1.tfm
-2020/03/03 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
2020/03/03 | 4328 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-sc-ot1.tfm
+2020/03/03 | 43129520 | systems/win32/w32tex/web2c-w32.tar.xz
2020/03/03 | 4308 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-ot1.tfm
-2020/03/03 | 42 | graphics/asymptote/base/animate.asy
2020/03/03 | 4292 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-sc-ot1.tfm
-2020/03/03 | 42926 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/03/03 | 4286 | graphics/asymptote/asy.ico
-2020/03/03 | 426 | graphics/asymptote/examples/spiral3.asy
-2020/03/03 | 426 | graphics/asymptote/doc/grid3xyz.asy
-2020/03/03 | 4269 | graphics/asymptote/newexp.cc
2020/03/03 | 4260 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-ot1.tfm
-2020/03/03 | 42572 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/03/03 | 424 | graphics/asymptote/examples/colorpatch.asy
-2020/03/03 | 4242 | graphics/asymptote/tests/types/keyword.asy
2020/03/03 | 4240 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-ot1.tfm
-2020/03/03 | 423 | graphics/asymptote/doc/log2graph.asy
-2020/03/03 | 423 | graphics/asymptote/doc/helix.asy
2020/03/03 | 4236 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-ot1.tfm
-2020/03/03 | 4231 | graphics/asymptote/flatguide.h
2020/03/03 | 4228 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-ot1.tfm
2020/03/03 | 4228 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-sc-ot1.tfm
2020/03/03 | 42147 | macros/latex/contrib/l3kernel/l3debug.dtx
-2020/03/03 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
2020/03/03 | 4208 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-ot1.tfm
-2020/03/03 | 4203 | graphics/asymptote/examples/fin.asy
2020/03/03 | 4200 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-ot1.tfm
-2020/03/03 | 41 | graphics/asymptote/doc/bigdiagonal.asy
-2020/03/03 | 419 | graphics/asymptote/examples/pathintersectsurface.asy
-2020/03/03 | 418 | graphics/asymptote/examples/planeproject.asy
-2020/03/03 | 41874 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/03/03 | 41872 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/03/03 | 417 | graphics/asymptote/doc/knots.asy
2020/03/03 | 4176 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-ot1.tfm
-2020/03/03 | 416 | graphics/asymptote/doc/linetype.asy
-2020/03/03 | 416 | graphics/asymptote/doc/bezier2.asy
-2020/03/03 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
2020/03/03 | 416042 | macros/latex/contrib/l3packages/xtemplate.pdf
-2020/03/03 | 4158 | graphics/asymptote/examples/advection.asy
-2020/03/03 | 414 | graphics/asymptote/examples/animations/glmovie.asy
2020/03/03 | 4140 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-ot1.tfm
-2020/03/03 | 413 | graphics/asymptote/examples/torus.asy
-2020/03/03 | 4132 | graphics/asymptote/runpair.in
2020/03/03 | 4132 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-ot1.tfm
2020/03/03 | 4132 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-ot1.tfm
-2020/03/03 | 4128 | graphics/asymptote/base/plain_boxes.asy
2020/03/03 | 4120 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-ot1.tfm
-2020/03/03 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
2020/03/03 | 4112 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-ot1.tfm
2020/03/03 | 4112 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-ot1.tfm
-2020/03/03 | 410 | graphics/asymptote/examples/Sierpinski.asy
-2020/03/03 | 410 | graphics/asymptote/doc/legend.asy
2020/03/03 | 4104 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-ot1.tfm
-2020/03/03 | 41033 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
2020/03/03 | 410307 | systems/win32/miktex/tm/packages/asmeconf.tar.lzma
2020/03/03 | 4096 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-ot1.tfm
2020/03/03 | 40930 | macros/latex/contrib/l3kernel/l3sort.dtx
-2020/03/03 | 4089 | graphics/asymptote/camp.tab.h
2020/03/03 | 4088 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-ot1.tfm
2020/03/03 | 4084 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-ot1.tfm
2020/03/03 | 4084 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ot1.tfm
-2020/03/03 | 407 | graphics/asymptote/examples/parametricsurface.asy
-2020/03/03 | 40764 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
-2020/03/03 | 4072 | graphics/asymptote/tests/types/order.asy
2020/03/03 | 40709 | macros/latex/contrib/l3kernel/l3tl-analysis.dtx
-2020/03/03 | 4067 | graphics/asymptote/doc/diatom.csv
-2020/03/03 | 4063 | graphics/asymptote/fileio.cc
-2020/03/03 | 40599 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
2020/03/03 | 4056 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-ot1.tfm
-2020/03/03 | 40326 | graphics/asymptote/examples/tvgen.asy
-2020/03/03 | 40276 | graphics/asymptote/picture.cc
-2020/03/03 | 401 | graphics/asymptote/doc/image.asy
-2020/03/03 | 400 | graphics/asymptote/examples/sacylinder.asy
2020/03/03 | 4000 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-ot1.tfm
-2020/03/03 | 39 | graphics/asymptote/base/nopapersize.ps
-2020/03/03 | 3992 | graphics/asymptote/base/plain_shipout.asy
-2020/03/03 | 398 | graphics/asymptote/examples/epix.asy
2020/03/03 | 3988 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-ot1.tfm
-2020/03/03 | 396 | graphics/asymptote/doc/triangulate.asy
2020/03/03 | 3964 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ot1.tfm
-2020/03/03 | 395 | graphics/asymptote/GUI/configs/xasykeymap.cson
-2020/03/03 | 395 | graphics/asymptote/examples/BezierPatch.asy
-2020/03/03 | 394 | graphics/asymptote/GUI/setup.py
-2020/03/03 | 3944 | graphics/asymptote/base/interpolate.asy
2020/03/03 | 3941 | fonts/scholax/enc/zcs_y6waxr.enc
2020/03/03 | 3940 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-ot1.tfm
+2020/03/03 | 393 | macros/latex/contrib/zref/README.md
2020/03/03 | 39276 | macros/latex/contrib/l3packages/xfrac.dtx
2020/03/03 | 3920 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-ot1.tfm
-2020/03/03 | 39187 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/03/03 | 391674 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/03/03 | 390 | graphics/asymptote/doc/tile.asy
2020/03/03 | 3904 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-ot1.tfm
-2020/03/03 | 38 | graphics/asymptote/examples/spring0.asy
2020/03/03 | 3890 | fonts/scholax/enc/zcs_tpfstq.enc
-2020/03/03 | 38892 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
2020/03/03 | 38840 | macros/latex/contrib/l3kernel/l3deprecation.dtx
2020/03/03 | 3876 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-ot1.tfm
2020/03/03 | 3876 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-ot1.tfm
-2020/03/03 | 387426 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-x64-2.9.tar.lzma
-2020/03/03 | 3873 | graphics/asymptote/examples/pipes.asy
2020/03/03 | 3872 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-ot1.tfm
-2020/03/03 | 386 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
2020/03/03 | 3868 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-ot1.tfm
2020/03/03 | 3868 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-ot1.tfm
2020/03/03 | 3868 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-ot1.tfm
2020/03/03 | 3864 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-ot1.tfm
-2020/03/03 | 385 | graphics/asymptote/examples/sinxlex.asy
-2020/03/03 | 385350 | graphics/asymptote/doc/asymptote.texi
-2020/03/03 | 384 | graphics/asymptote/examples/Gouraud.asy
-2020/03/03 | 384 | graphics/asymptote/Delaunay.h
2020/03/03 | 384356 | macros/latex/contrib/l3kernel/l3news.pdf
2020/03/03 | 3840 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-ot1.tfm
2020/03/03 | 3840 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-ot1.tfm
-2020/03/03 | 383 | graphics/asymptote/tests/arith/real.asy
2020/03/03 | 3836 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-ot1.tfm
-2020/03/03 | 382 | graphics/asymptote/doc/loggrid.asy
-2020/03/03 | 38217 | graphics/asymptote/path3.cc
-2020/03/03 | 380 | graphics/asymptote/doc/icon.asy
2020/03/03 | 3788 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-ot1G.tfm
2020/03/03 | 377 | macros/plain/graphics/exmplpfg.tex
-2020/03/03 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
-2020/03/03 | 376 | graphics/asymptote/doc/generalaxis3.asy
-2020/03/03 | 3765 | graphics/asymptote/prc/PRCdouble.h
2020/03/03 | 3764 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ot1G.tfm
-2020/03/03 | 374 | graphics/asymptote/doc/monthaxis.asy
-2020/03/03 | 3746 | graphics/asymptote/examples/xstitch.asy
-2020/03/03 | 373 | graphics/asymptote/examples/projectelevation.asy
-2020/03/03 | 373 | graphics/asymptote/doc/lineargraph.asy
-2020/03/03 | 3728 | graphics/asymptote/base/three_light.asy
2020/03/03 | 3723 | macros/plain/graphics/README.md
-2020/03/03 | 3716 | graphics/asymptote/base/plain_constants.asy
-2020/03/03 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
-2020/03/03 | 369 | graphics/asymptote/examples/RiemannSurface.asy
-2020/03/03 | 368 | systems/win32/miktex/tm/packages/pr.ini
-2020/03/03 | 3676 | graphics/asymptote/tr.h
-2020/03/03 | 3673 | graphics/asymptote/constructor.cc
-2020/03/03 | 3670 | graphics/asymptote/bbox3.h
-2020/03/03 | 366 | graphics/asymptote/doc/lineargraph0.asy
-2020/03/03 | 36616 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
2020/03/03 | 3639 | fonts/scholax/enc/zcs_kqv4hm.enc
2020/03/03 | 3636 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ot1G.tfm
-2020/03/03 | 36328 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/03/03 | 362 | graphics/asymptote/examples/pipeintersection.asy
-2020/03/03 | 36243 | graphics/asymptote/prc/test.cc
-2020/03/03 | 361 | graphics/asymptote/GUI/res/icons/anchor.svg
-2020/03/03 | 361 | graphics/asymptote/examples/phase.asy
-2020/03/03 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
-2020/03/03 | 360 | graphics/asymptote/examples/washer.asy
-2020/03/03 | 35 | graphics/asymptote/base/fontsize.asy
2020/03/03 | 359948 | fonts/scholax/doc/scholax-doc.pdf
-2020/03/03 | 358 | graphics/asymptote/base/pstoedit.asy
-2020/03/03 | 357 | graphics/asymptote/doc/irregularcontour.asy
-2020/03/03 | 356273 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/03/03 | 355 | graphics/asymptote/doc/scaledgraph.asy
-2020/03/03 | 3553 | graphics/asymptote/rounding.h
-2020/03/03 | 354 | graphics/asymptote/doc/reloadpdf.tex
-2020/03/03 | 354 | graphics/asymptote/doc/planes.asy
-2020/03/03 | 354437 | systems/win32/miktex/tm/packages/next/miktex-omega-bin-2.9.tar.lzma
2020/03/03 | 3540 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-ot1G.tfm
2020/03/03 | 3540 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-ot1G.tfm
2020/03/03 | 3536 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-ot1G.tfm
-2020/03/03 | 352 | graphics/asymptote/examples/cylinder.asy
-2020/03/03 | 3522 | graphics/asymptote/drawpath.cc
-2020/03/03 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
-2020/03/03 | 35147 | graphics/asymptote/LICENSE
2020/03/03 | 35068 | biblio/bibtex/contrib/econ-bst/econ-example.bib
-2020/03/03 | 3505 | graphics/asymptote/parser.cc
-2020/03/03 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
2020/03/03 | 3503 | fonts/fourier-GUT/afm/fourier-mlb.afm
-2020/03/03 | 34 | graphics/asymptote/autogen.sh
-2020/03/03 | 349 | graphics/asymptote/examples/logdown.asy
-2020/03/03 | 3497 | graphics/asymptote/doc/ocg.sty
2020/03/03 | 3489 | fonts/fourier-GUT/afm/fourier-ml.afm
-2020/03/03 | 34842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/03/03 | 34832 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
2020/03/03 | 347184 | macros/latex/contrib/l3packages/l3keys2e.pdf
2020/03/03 | 3467 | fonts/scholax/enc/zcs_hbutsy.enc
2020/03/03 | 34625 | fonts/newtx/README
-2020/03/03 | 345 | graphics/asymptote/lexical.h
-2020/03/03 | 3449 | graphics/asymptote/build-scripts/build-asymptote.dos
-2020/03/03 | 343 | graphics/asymptote/doc/externalprc.tex
2020/03/03 | 3436 | fonts/scholax/enc/zcs_zwynml.enc
-2020/03/03 | 3434 | graphics/asymptote/picture.h
-2020/03/03 | 3430 | graphics/asymptote/base/roundedpath.asy
2020/03/03 | 3425 | fonts/scholax/enc/zcs_litts3.enc
-2020/03/03 | 341 | graphics/asymptote/examples/slidedemo_.bbl
-2020/03/03 | 341 | graphics/asymptote/examples/sacylinder3D.asy
-2020/03/03 | 341 | graphics/asymptote/doc/subpictures.asy
-2020/03/03 | 34126 | graphics/asymptote/path.cc
2020/03/03 | 3406 | macros/latex/contrib/l3packages/README.md
2020/03/03 | 3404 | fonts/scholax/enc/zcs_c3rnvk.enc
2020/03/03 | 340344 | macros/latex/contrib/fei.zip
2020/03/03 | 3394 | fonts/scholax/enc/zcs_jkq3qs.enc
-2020/03/03 | 33877 | graphics/asymptote/exp.cc
-2020/03/03 | 3375 | graphics/asymptote/tests/types/guide.asy
2020/03/03 | 3373 | fonts/scholax/enc/zcs_ioc2dx.enc
2020/03/03 | 3358339 | systems/win32/miktex/tm/packages/luatexja.tar.lzma
-2020/03/03 | 33554 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/03/03 | 3344 | graphics/asymptote/examples/pdb.asy
2020/03/03 | 3344 | fonts/scholax/enc/zcs_x5uxyb.enc
-2020/03/03 | 33423 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/03/03 | 3340 | graphics/asymptote/examples/slidedemo.asy
-2020/03/03 | 333 | graphics/asymptote/doc/asy.1.end
-2020/03/03 | 3328 | graphics/asymptote/stack.h
2020/03/03 | 3314 | fonts/scholax/enc/zcs_dodlyj.enc
-2020/03/03 | 330 | graphics/asymptote/doc/HermiteSpline.asy
-2020/03/03 | 3309 | graphics/asymptote/access.cc
2020/03/03 | 3295 | fonts/scholax/enc/zcs_c5ugpk.enc
-2020/03/03 | 328795 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/03/03 | 327 | graphics/asymptote/examples/sin1x.asy
-2020/03/03 | 3279 | graphics/asymptote/base/obj.asy
2020/03/03 | 32769 | fonts/scholax/map/ScholaX.map
-2020/03/03 | 3275 | graphics/asymptote/program.cc
-2020/03/03 | 326 | graphics/asymptote/examples/polardatagraph.asy
-2020/03/03 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
2020/03/03 | 3265 | fonts/scholax/enc/zcs_wlo5nq.enc
-2020/03/03 | 325 | graphics/asymptote/examples/rainbow.asy
-2020/03/03 | 325 | graphics/asymptote/examples/elevation.asy
-2020/03/03 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
-2020/03/03 | 32337 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/03/03 | 322 | graphics/asymptote/examples/unitcircle.asy
-2020/03/03 | 322 | graphics/asymptote/examples/cheese.asy
-2020/03/03 | 32262 | graphics/asymptote/bezierpatch.cc
-2020/03/03 | 32242 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/03/03 | 321906 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/03/03 | 320 | graphics/asymptote/runtriple.h
-2020/03/03 | 320533 | graphics/asymptote/base/geometry.asy
-2020/03/03 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
-2020/03/03 | 3161 | graphics/asymptote/genv.cc
2020/03/03 | 31612 | fonts/fourier-GUT/opentype/FourierOrns-BoldItalic.otf
-2020/03/03 | 31609 | graphics/asymptote/config.sub
-2020/03/03 | 315 | graphics/asymptote/examples/strokepath.asy
2020/03/03 | 31544 | fonts/fourier-GUT/opentype/FourierOrns-Italic.otf
2020/03/03 | 3151 | fonts/scholax/enc/zcs_zgzte3.enc
-2020/03/03 | 314 | graphics/asymptote/doc/logticks.asy
-2020/03/03 | 314 | graphics/asymptote/base/graph_settings.asy
2020/03/03 | 31436 | fonts/fourier-GUT/opentype/FourierOrns-Regular.otf
2020/03/03 | 31388 | fonts/fourier-GUT/opentype/FourierOrns-Bold.otf
-2020/03/03 | 312 | graphics/asymptote/examples/textpath.asy
2020/03/03 | 3129 | fonts/scholax/enc/zcs_6ln7pl.enc
-2020/03/03 | 31244 | graphics/asymptote/builtin.cc
+2020/03/03 | 3125448 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
2020/03/03 | 3122 | fonts/scholax/enc/zcs_heobe3.enc
2020/03/03 | 3120 | fonts/scholax/enc/zcs_wylu46.enc
-2020/03/03 | 31191 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/03/03 | 31154 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/03/03 | 3106 | graphics/asymptote/doc/latexusage.tex
+2020/03/03 | 3117900 | systems/win32/w32tex/win64/luatex-w64.tar.xz
+2020/03/03 | 3109624 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
2020/03/03 | 31058 | macros/latex/contrib/l3kernel/l3text.dtx
2020/03/03 | 3100 | fonts/scholax/enc/zcs_mnnbkz.enc
-2020/03/03 | 309 | graphics/asymptote/examples/oneoverx.asy
-2020/03/03 | 309 | graphics/asymptote/examples/1overx.asy
2020/03/03 | 3098 | fonts/scholax/enc/zcs_ibl2ck.enc
-2020/03/03 | 30989 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/03/03 | 309613 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2020/03/03 | 309529 | macros/latex/contrib/l3packages/xfp.pdf
-2020/03/03 | 308 | graphics/asymptote/tests/types/shadow.asy
-2020/03/03 | 308 | graphics/asymptote/tests/Makefile
-2020/03/03 | 308 | graphics/asymptote/examples/hyperboloid.asy
2020/03/03 | 3080 | fonts/scholax/enc/zcs_7xuij4.enc
2020/03/03 | 30768 | biblio/bibtex/contrib/econ-bst/econ-example.tex
-2020/03/03 | 30767 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/03/03 | 306 | graphics/asymptote/doc/binarytreetest.asy
2020/03/03 | 3069 | fonts/scholax/enc/zcs_2ulndi.enc
2020/03/03 | 3061 | fonts/scholax/enc/zcs_mett7y.enc
2020/03/03 | 304937 | systems/win32/miktex/tm/packages/expkv-def.tar.lzma
2020/03/03 | 3048 | fonts/scholax/enc/zcs_cpzha2.enc
-2020/03/03 | 3042 | graphics/asymptote/drawimage.h
2020/03/03 | 3040 | macros/latex/contrib/biblatex2bibitem/README.md
-2020/03/03 | 303 | graphics/asymptote/examples/tensor.asy
-2020/03/03 | 3023 | graphics/asymptote/doc/Makefile.in
-2020/03/03 | 30229 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/03/03 | 30208 | graphics/asymptote/prc/PRC.h
2020/03/03 | 3019 | fonts/scholax/enc/zcs_ra2vxf.enc
-2020/03/03 | 30147 | graphics/asymptote/getopt.c
2020/03/03 | 3012 | fonts/scholax/enc/zcs_qfh2v7.enc
2020/03/03 | 3003 | macros/latex/contrib/l3packages/CHANGELOG.md
-2020/03/03 | 3003 | graphics/asymptote/process.h
-2020/03/03 | 299 | graphics/asymptote/runpair.h
2020/03/03 | 2999 | fonts/scholax/enc/zcs_7awbtq.enc
2020/03/03 | 2997 | macros/latex/contrib/l3kernel/README.md
2020/03/03 | 2991 | fonts/scholax/enc/zcs_dstn3c.enc
-2020/03/03 | 298 | graphics/asymptote/guideflags.h
-2020/03/03 | 2976 | graphics/asymptote/access.h
2020/03/03 | 2970 | fonts/scholax/enc/zcs_aisocu.enc
-2020/03/03 | 29703 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
2020/03/03 | 2960 | fonts/scholax/enc/zcs_7e5ds2.enc
2020/03/03 | 2955 | fonts/scholax/enc/zcs_6ff7e3.enc
2020/03/03 | 2950727 | install/fonts/scholax.tds.zip
-2020/03/03 | 293 | graphics/asymptote/doc/makepen.asy
-2020/03/03 | 2937 | graphics/asymptote/asymptote.spec
-2020/03/03 | 29317 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/03/03 | 29254 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/03/03 | 2924 | graphics/asymptote/drawgroup.h
-2020/03/03 | 291 | graphics/asymptote/examples/trumpet.asy
-2020/03/03 | 291 | graphics/asymptote/examples/jump.asy
-2020/03/03 | 29168 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
2020/03/03 | 2910 | fonts/scholax/enc/zcs_b3lkzu.enc
-2020/03/03 | 2905 | graphics/asymptote/shaders.cc
2020/03/03 | 2904435 | fonts/scholax.zip
-2020/03/03 | 289 | graphics/asymptote/base/res/notes.txt
-2020/03/03 | 288 | graphics/asymptote/examples/sacone3D.asy
-2020/03/03 | 288 | graphics/asymptote/doc/mexicanhat.asy
-2020/03/03 | 288 | graphics/asymptote/build-scripts/README-binaries
2020/03/03 | 288454 | systems/win32/miktex/tm/packages/icite.tar.lzma
-2020/03/03 | 2882 | graphics/asymptote/doc/diatom.asy
-2020/03/03 | 28809 | graphics/asymptote/exp.h
2020/03/03 | 2879 | biblio/bibtex/contrib/econ-bst/customization/README.md
-2020/03/03 | 28721 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
2020/03/03 | 2861 | fonts/scholax/enc/zcs_oun2tw.enc
2020/03/03 | 286022 | systems/win32/miktex/tm/packages/biblatex-bookinother.tar.lzma
-2020/03/03 | 285989 | graphics/asymptote/configure
-2020/03/03 | 28531 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/03/03 | 284 | graphics/asymptote/GUI/res/icons/text.svg
-2020/03/03 | 2832 | graphics/asymptote/examples/alignedaxis.asy
-2020/03/03 | 2825 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
-2020/03/03 | 28156 | graphics/asymptote/pen.h
-2020/03/03 | 281512 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/03/03 | 281322 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/03/03 | 2800 | graphics/asymptote/doc/asycolors.sty
-2020/03/03 | 279 | graphics/asymptote/doc/hatch.asy
2020/03/03 | 279688 | macros/latex/contrib/l3kernel/l3styleguide.pdf
-2020/03/03 | 277 | graphics/asymptote/doc/generalaxis.asy
-2020/03/03 | 27783 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/03/03 | 2771 | graphics/asymptote/doc/pixel.pdf
-2020/03/03 | 276 | graphics/asymptote/tests/bench/6000circles.asy
-2020/03/03 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
-2020/03/03 | 276689 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/03/03 | 2764 | graphics/asymptote/base/three_margins.asy
-2020/03/03 | 2738 | graphics/asymptote/record.h
-2020/03/03 | 2731 | graphics/asymptote/tests/types/resolve.asy
-2020/03/03 | 272524 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/03/03 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
2020/03/03 | 2711 | fonts/fourier-GUT/afm/fourier-mlitb.afm
2020/03/03 | 2702 | fonts/fourier-GUT/afm/fourier-mlit.afm
-2020/03/03 | 26 | graphics/asymptote/doc/filegraph.dat
-2020/03/03 | 269 | graphics/asymptote/runmath.h
-2020/03/03 | 2697 | graphics/asymptote/table.h
-2020/03/03 | 268 | graphics/asymptote/base/asy-init.el
2020/03/03 | 2689 | biblio/bibtex/contrib/econ-bst/README.md
-2020/03/03 | 26875 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/03/03 | 26872 | graphics/asymptote/runpath.cc
-2020/03/03 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
-2020/03/03 | 26772 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/03/03 | 2675 | graphics/asymptote/runtriple.in
-2020/03/03 | 2667 | graphics/asymptote/settings.h
-2020/03/03 | 26662 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/03/03 | 2662 | graphics/asymptote/symbol.h
-2020/03/03 | 2661 | graphics/asymptote/runbacktrace.cc
2020/03/03 | 26601 | macros/latex/contrib/l3kernel/l3sys.dtx
-2020/03/03 | 2658 | graphics/asymptote/examples/soccerball.asy
-2020/03/03 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
-2020/03/03 | 2653 | graphics/asymptote/doc/markers1.asy
-2020/03/03 | 26503 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/03/03 | 264 | graphics/asymptote/examples/labelbox.asy
-2020/03/03 | 264 | graphics/asymptote/examples/coag.asy
-2020/03/03 | 2633 | graphics/asymptote/examples/worldmap.asy
-2020/03/03 | 2632 | graphics/asymptote/material.h
-2020/03/03 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
-2020/03/03 | 262 | graphics/asymptote/doc/loggraph.asy
2020/03/03 | 262916 | macros/latex/contrib/l3kernel/l3docstrip.pdf
-2020/03/03 | 2624 | graphics/asymptote/pipestream.h
-2020/03/03 | 261 | graphics/asymptote/doc/join.asy
-2020/03/03 | 2615 | graphics/asymptote/base/patterns.asy
-2020/03/03 | 26096 | graphics/asymptote/examples/uhrturm.obj
-2020/03/03 | 2579568 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
2020/03/03 | 2576 | macros/latex/contrib/biblatex2bibitem/biblatex2bibitem.sty
2020/03/03 | 25753 | macros/latex/contrib/l3kernel/l3fp-random.dtx
-2020/03/03 | 25707 | graphics/asymptote/runpath3d.cc
-2020/03/03 | 256 | graphics/asymptote/doc/shadedtiling.asy
-2020/03/03 | 2562 | graphics/asymptote/program.h
-2020/03/03 | 255 | graphics/asymptote/examples/contextfonts.asy
-2020/03/03 | 255 | graphics/asymptote/BUGS
-2020/03/03 | 2554 | graphics/asymptote/GUI/xasyFile.py
-2020/03/03 | 2552 | graphics/asymptote/base/plain_margins.asy
-2020/03/03 | 254 | graphics/asymptote/examples/parametricelevation.asy
2020/03/03 | 254548 | systems/win32/miktex/tm/packages/diagbox.tar.lzma
-2020/03/03 | 253 | graphics/asymptote/base/metapost.asy
-2020/03/03 | 25304 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/03/03 | 25292 | graphics/asymptote/process.cc
-2020/03/03 | 2526 | graphics/asymptote/policy.h
-2020/03/03 | 251 | graphics/asymptote/examples/triceratops.asy
-2020/03/03 | 2518 | graphics/asymptote/prc/PRCbitStream.h
-2020/03/03 | 25137 | graphics/asymptote/doc/extra/intro.asy
-2020/03/03 | 2512 | graphics/asymptote/examples/mosquito.asy
-2020/03/03 | 250 | graphics/asymptote/examples/transparentCubes.asy
2020/03/03 | 250949 | macros/latex/contrib/l3kernel/l3regex.dtx
-2020/03/03 | 2505 | graphics/asymptote/README
-2020/03/03 | 2505 | graphics/asymptote/binaries/x86_64-windows/README
-2020/03/03 | 2505 | graphics/asymptote/binaries/i386-windows/README
-2020/03/03 | 24 | graphics/asymptote/doc/diagonal.asy
2020/03/03 | 2484 | macros/latex/contrib/l3kernel/l3legacy.dtx
-2020/03/03 | 2482 | graphics/asymptote/build-scripts/build-asymptote
-2020/03/03 | 247554 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
2020/03/03 | 2472 | fonts/scholax/tex/OT1TeXGyreScholaX-Sup.fd
2020/03/03 | 2472 | fonts/scholax/tex/OT1TeXGyreScholaX-Inf.fd
2020/03/03 | 2472 | fonts/scholax/tex/LY1TeXGyreScholaX-Sup.fd
2020/03/03 | 2472 | fonts/scholax/tex/LY1TeXGyreScholaX-Inf.fd
-2020/03/03 | 247179 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/03/03 | 246 | graphics/asymptote/examples/transparency.asy
-2020/03/03 | 246 | graphics/asymptote/doc/axis3.asy
-2020/03/03 | 2465 | graphics/asymptote/base/labelpath3.asy
-2020/03/03 | 24659 | graphics/asymptote/base/lmfit.asy
-2020/03/03 | 246427 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/03/03 | 245 | graphics/asymptote/examples/alignbox.asy
-2020/03/03 | 2457971 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/03/03 | 244 | graphics/asymptote/tests/arith/triple.asy
2020/03/03 | 2448 | fonts/scholax/tex/T1TeXGyreScholaX-Sup.fd
2020/03/03 | 2448 | fonts/scholax/tex/T1TeXGyreScholaX-Inf.fd
-2020/03/03 | 243 | graphics/asymptote/doc/cube.asy
-2020/03/03 | 243360 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/03/03 | 242 | graphics/asymptote/examples/equilateral.asy
-2020/03/03 | 240 | graphics/asymptote/doc/parametricgraph.asy
2020/03/03 | 240652 | macros/latex/contrib/l3kernel/l3news09.pdf
-2020/03/03 | 23 | graphics/asymptote/GUI/__init__.py
-2020/03/03 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
-2020/03/03 | 238 | graphics/asymptote/tests/TestLib.asy
-2020/03/03 | 238 | graphics/asymptote/GUI/xasyValidator.py
-2020/03/03 | 238 | graphics/asymptote/doc/filegraph.asy
-2020/03/03 | 23791 | graphics/asymptote/base/three_arrows.asy
-2020/03/03 | 2378 | graphics/asymptote/profile.py
-2020/03/03 | 236 | graphics/asymptote/tests/string/erase.asy
-2020/03/03 | 236 | graphics/asymptote/examples/annotation.asy
-2020/03/03 | 23632 | graphics/asymptote/drawsurface.cc
-2020/03/03 | 2362 | graphics/asymptote/examples/spectrum.asy
-2020/03/03 | 2361 | graphics/asymptote/examples/SierpinskiSponge.asy
-2020/03/03 | 235 | graphics/asymptote/examples/cos2theta.asy
-2020/03/03 | 23520 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/03/03 | 234 | graphics/asymptote/doc/beziercurve.asy
-2020/03/03 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
-2020/03/03 | 233 | graphics/asymptote/examples/cardioid.asy
2020/03/03 | 233 | fonts/fourier-GUT/latex/fmxfutm.fd
-2020/03/03 | 2328 | graphics/asymptote/virtualfieldaccess.h
2020/03/03 | 23068 | macros/latex/contrib/l3kernel/l3fp-logic.dtx
-2020/03/03 | 22 | graphics/asymptote/tests/output/line.asy
-2020/03/03 | 22 | graphics/asymptote/GUI/configs/__init__.py
-2020/03/03 | 22971 | graphics/asymptote/base/syzygy.asy
-2020/03/03 | 22936 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/03/03 | 228 | graphics/asymptote/examples/circumcircle.asy
-2020/03/03 | 22873 | graphics/asymptote/examples/piicon.png
2020/03/03 | 227980 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
-2020/03/03 | 2278 | graphics/asymptote/align.h
-2020/03/03 | 2277 | graphics/asymptote/base/texcolors.asy
-2020/03/03 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
2020/03/03 | 22562 | macros/latex/contrib/fei/fei-template-sublist.tex
-2020/03/03 | 224 | graphics/asymptote/tests/types/init.asy
-2020/03/03 | 223 | graphics/asymptote/examples/yingyang.asy
-2020/03/03 | 22355 | graphics/asymptote/knot.cc
-2020/03/03 | 2222 | graphics/asymptote/tests/frames/loop.asy
-2020/03/03 | 219 | graphics/asymptote/wce
-2020/03/03 | 219 | graphics/asymptote/doc/penimage.asy
-2020/03/03 | 2197 | graphics/asymptote/locate.cc
-2020/03/03 | 21977 | graphics/asymptote/runmath.cc
-2020/03/03 | 2193 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
-2020/03/03 | 218 | graphics/asymptote/doc/datagraph.asy
-2020/03/03 | 2187 | graphics/asymptote/base/plain_debugger.asy
2020/03/03 | 2184 | biblio/bibtex/contrib/econ-bst/customization/econ-numbers.tex
2020/03/03 | 21817 | macros/latex/contrib/l3kernel/l3quark.dtx
-2020/03/03 | 2180 | graphics/asymptote/examples/splitpatch.asy
2020/03/03 | 2177 | fonts/fourier-GUT/afm/fourier-orns.afm
-2020/03/03 | 2173 | graphics/asymptote/frame.h
2020/03/03 | 2165824 | install/macros/latex/contrib/l3packages.tds.zip
-2020/03/03 | 2163 | graphics/asymptote/drawlabel.h
-2020/03/03 | 215429 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
2020/03/03 | 2153 | macros/latex/contrib/l3kernel/source3.tex
-2020/03/03 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
-2020/03/03 | 2146 | graphics/asymptote/webgl/fragment.glsl
-2020/03/03 | 21459 | graphics/asymptote/base/feynman.asy
2020/03/03 | 21391 | macros/latex/contrib/fei/fei-template.tex
2020/03/03 | 213702 | fonts/scholax/type1/TeXGyreScholaX-BoldItalic.pfb
2020/03/03 | 2135115 | macros/latex/contrib/l3packages.zip
2020/03/03 | 2131 | biblio/bibtex/contrib/econ-bst/customization/cited-part.tex
2020/03/03 | 212285 | fonts/scholax/type1/TeXGyreScholaX-BoldSlanted.pfb
-2020/03/03 | 2113 | graphics/asymptote/seconds.h
-2020/03/03 | 210 | graphics/asymptote/examples/spiral.asy
-2020/03/03 | 2109 | graphics/asymptote/base/drawtree.asy
2020/03/03 | 21086 | macros/latex/contrib/l3kernel/CHANGELOG.md
-2020/03/03 | 21005 | graphics/asymptote/base/plain_bounds.asy
-2020/03/03 | 209 | graphics/asymptote/examples/triangle.asy
-2020/03/03 | 20866 | graphics/asymptote/dec.cc
-2020/03/03 | 2084 | graphics/asymptote/examples/truncatedIcosahedron.asy
2020/03/03 | 208150 | fonts/scholax/type1/TeXGyreScholaX-Slanted.pfb
-2020/03/03 | 207774 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/03/03 | 20738 | graphics/asymptote/entry.cc
-2020/03/03 | 206 | graphics/asymptote/examples/log.asy
-2020/03/03 | 2068 | graphics/asymptote/base/slopefield.asy
-2020/03/03 | 206710 | graphics/asymptote/asy.list
-2020/03/03 | 20668 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/03/03 | 20545 | graphics/asymptote/runtime.in
-2020/03/03 | 2043 | graphics/asymptote/examples/slope.asy
-2020/03/03 | 2039 | graphics/asymptote/doc/elliptic.asy
-2020/03/03 | 202 | graphics/asymptote/tests/frames/stat2.asy
-2020/03/03 | 202 | graphics/asymptote/doc/exp.asy
-2020/03/03 | 20174 | graphics/asymptote/texfile.cc
-2020/03/03 | 2013 | graphics/asymptote/varinit.h
-2020/03/03 | 20105 | graphics/asymptote/base/contour.asy
-2020/03/03 | 20093 | graphics/asymptote/drawsurface.h
-2020/03/03 | 20051 | graphics/asymptote/doc/asyRefCard.tex
-2020/03/03 | 20029 | graphics/asymptote/camp.y
-2020/03/03 | 199 | graphics/asymptote/examples/upint.asy
-2020/03/03 | 199 | graphics/asymptote/examples/BezierTriangle.asy
-2020/03/03 | 19984 | graphics/asymptote/fileio.h
-2020/03/03 | 199193 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/03/03 | 198 | graphics/asymptote/examples/tanh.asy
-2020/03/03 | 19892 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/03/03 | 1986 | graphics/asymptote/inst.h
-2020/03/03 | 1978 | graphics/asymptote/varinit.cc
2020/03/03 | 1976 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-t1.tfm
2020/03/03 | 1976 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-ly1.tfm
2020/03/03 | 197530 | macros/latex/contrib/l3kernel/l3news12.pdf
-2020/03/03 | 197377 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/03/03 | 197365 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
2020/03/03 | 1972 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-t1--base.tfm
-2020/03/03 | 196 | graphics/asymptote/examples/lowint.asy
-2020/03/03 | 196 | graphics/asymptote/examples/label3ribbon.asy
-2020/03/03 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
2020/03/03 | 19693 | macros/latex/contrib/l3kernel/l3intarray.dtx
-2020/03/03 | 1967 | graphics/asymptote/GUI/res/icons/filledbucket.svg
2020/03/03 | 19661 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
2020/03/03 | 1960 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-ly1.tfm
-2020/03/03 | 19597 | graphics/asymptote/doc/external-proposal.html
-2020/03/03 | 19561 | graphics/asymptote/base/plain_arrows.asy
2020/03/03 | 1952 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-t1.tfm
-2020/03/03 | 1951 | graphics/asymptote/array.h
-2020/03/03 | 1950 | graphics/asymptote/examples/mergeExample.asy
-2020/03/03 | 195007 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
2020/03/03 | 1948 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-t1--base.tfm
-2020/03/03 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
-2020/03/03 | 1946009 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/03/03 | 194590 | graphics/asymptote/doc/asy-latex.pdf
-2020/03/03 | 193 | graphics/asymptote/tests/gc/shipout.asy
-2020/03/03 | 193 | graphics/asymptote/tests/arith/random.asy
-2020/03/03 | 1936 | graphics/asymptote/refaccess.h
-2020/03/03 | 193653 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/03/03 | 194826 | macros/latex/contrib/zref/zref.dtx
2020/03/03 | 19309 | macros/latex/contrib/l3kernel/l3bootstrap.dtx
-2020/03/03 | 19308 | graphics/asymptote/runpicture.in
-2020/03/03 | 1927 | graphics/asymptote/tests/array/fields.asy
-2020/03/03 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
-2020/03/03 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
2020/03/03 | 1920 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-t1.tfm
-2020/03/03 | 191 | graphics/asymptote/runpicture.h
-2020/03/03 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
2020/03/03 | 1916 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-t1--base.tfm
2020/03/03 | 19110 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
2020/03/03 | 19106 | macros/latex/contrib/biblatex2bibitem/LICENSE.txt
2020/03/03 | 1909 | macros/latex/contrib/l3kernel/interface3.tex
-2020/03/03 | 1908 | graphics/asymptote/examples/linearregression.asy
-2020/03/03 | 1907 | graphics/asymptote/build-scripts/HOWTO-MSWindows
2020/03/03 | 1904 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-ly1.tfm
2020/03/03 | 190003 | biblio/bibtex/contrib/econ-bst/econ-example.pdf
-2020/03/03 | 18 | graphics/asymptote/tests/output/circle.asy
-2020/03/03 | 18964 | graphics/asymptote/psfile.cc
2020/03/03 | 1892 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-ly1.tfm
2020/03/03 | 1892 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-ot1.tfm
-2020/03/03 | 188 | graphics/asymptote/runstring.h
2020/03/03 | 1888 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-t1.tfm
2020/03/03 | 1884 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-t1--base.tfm
-2020/03/03 | 187 | graphics/asymptote/tests/string/rfind.asy
-2020/03/03 | 187 | graphics/asymptote/examples/label3solid.asy
-2020/03/03 | 1878 | graphics/asymptote/drawclipbegin.h
-2020/03/03 | 18772 | graphics/asymptote/runstring.cc
2020/03/03 | 186 | macros/plain/graphics/exmplpic.tex
-2020/03/03 | 186 | graphics/asymptote/runpath3d.h
-2020/03/03 | 186 | graphics/asymptote/doc/unitcircle3.asy
2020/03/03 | 186931 | macros/latex/contrib/l3packages/xparse.dtx
-2020/03/03 | 186883 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
2020/03/03 | 1864 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-ot1.tfm
-2020/03/03 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
2020/03/03 | 186192 | macros/latex/contrib/l3kernel/l3term-glossary.pdf
-2020/03/03 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
2020/03/03 | 18605 | macros/latex/contrib/l3kernel/l3fp-round.dtx
2020/03/03 | 1859 | macros/latex/contrib/fei/README
-2020/03/03 | 18591 | graphics/asymptote/application.cc
-2020/03/03 | 185327 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/03/03 | 1851 | graphics/asymptote/beziercurve.cc
-2020/03/03 | 184258 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/03/03 | 1836 | graphics/asymptote/jsfile.h
-2020/03/03 | 1835 | graphics/asymptote/examples/cyclohexane.asy
-2020/03/03 | 182 | graphics/asymptote/tests/string/find.asy
-2020/03/03 | 182 | graphics/asymptote/examples/roll.asy
-2020/03/03 | 182 | graphics/asymptote/examples/label3.asy
-2020/03/03 | 182805 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/03/03 | 18126 | graphics/asymptote/doc/asy-latex.dtx
-2020/03/03 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
2020/03/03 | 18012 | macros/latex/contrib/l3kernel/l3luatex.dtx
2020/03/03 | 1796 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-ot1.tfm
2020/03/03 | 1792 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-ot1.tfm
@@ -1202,26 +1703,17 @@
2020/03/03 | 1784 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-ly1--base.tfm
2020/03/03 | 1784 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-sc-ly1--base.tfm
2020/03/03 | 1784 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-sc-ly1--base.tfm
-2020/03/03 | 1780 | graphics/asymptote/examples/conicurv.asy
2020/03/03 | 1780 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-ot1--base.tfm
2020/03/03 | 1780 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-ot1--base.tfm
2020/03/03 | 1780 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-ly1--base.tfm
-2020/03/03 | 177 | graphics/asymptote/runpath.h
-2020/03/03 | 177 | graphics/asymptote/examples/curvedlabel.asy
-2020/03/03 | 17785 | graphics/asymptote/asy-keywords.el
-2020/03/03 | 17755 | graphics/asymptote/runfile.cc
-2020/03/03 | 17754 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/03/03 | 177511 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
2020/03/03 | 1772 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-ot1--base.tfm
2020/03/03 | 1772 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-ot1--base.tfm
-2020/03/03 | 177246 | graphics/asymptote/prc/PRCdouble.cc
2020/03/03 | 1770595 | systems/win32/miktex/tm/packages/platex.tar.lzma
-2020/03/03 | 17674 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/03/03 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
2020/03/03 | 1764 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-t1--base.tfm
2020/03/03 | 1764 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-t1--base.tfm
2020/03/03 | 1764 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-ly1--base.tfm
-2020/03/03 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
+2020/03/03 | 17639484 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2020/03/03 | 17629096 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/03/03 | 1760 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-ly1--base.tfm
2020/03/03 | 1760 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-ly1--base.tfm
2020/03/03 | 1760 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-ly1--base.tfm
@@ -1231,7 +1723,6 @@
2020/03/03 | 1756 | fonts/scholax/tfm/TeXGyreScholaX-Bold-sup-t1.tfm
2020/03/03 | 1756 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-ly1--base.tfm
2020/03/03 | 1756 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-sc-t1--base.tfm
-2020/03/03 | 1753 | graphics/asymptote/errormsg.cc
2020/03/03 | 1752 | fonts/scholax/tfm/TeXGyreScholaX-Bold-sup-t1--base.tfm
2020/03/03 | 1752 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-ot1--base.tfm
2020/03/03 | 1752 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-sc-ot1--base.tfm
@@ -1240,8 +1731,6 @@
2020/03/03 | 1748 | fonts/scholax/tfm/TeXGyreScholaX-Regular-sup-ly1.tfm
2020/03/03 | 1748 | fonts/scholax/tfm/TeXGyreScholaX-Bold-sup-ly1.tfm
2020/03/03 | 1748 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-sc-ot1--base.tfm
-2020/03/03 | 1746 | graphics/asymptote/doc/westnile.asy
-2020/03/03 | 174673 | graphics/asymptote/base/colormap.asy
2020/03/03 | 1744 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-ot1--base.tfm
2020/03/03 | 1744 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-ot1--base.tfm
2020/03/03 | 1744 | fonts/scholax/tfm/TeXGyreScholaX-Regular-sup-t1.tfm
@@ -1276,7 +1765,6 @@
2020/03/03 | 1728 | fonts/scholax/vf/TeXGyreScholaX-Italic-osf-t1.vf
2020/03/03 | 1728 | fonts/scholax/vf/TeXGyreScholaX-Italic-lf-t1.vf
2020/03/03 | 1728 | fonts/scholax/vf/TeXGyreScholaX-Bold-tosf-t1.vf
-2020/03/03 | 1724 | graphics/asymptote/GUI/GuidesManager.py
2020/03/03 | 1724 | fonts/scholax/vf/TeXGyreScholaX-Bold-tlf-t1.vf
2020/03/03 | 1724 | fonts/scholax/vf/TeXGyreScholaX-Bold-osf-t1.vf
2020/03/03 | 1724 | fonts/scholax/vf/TeXGyreScholaX-Bold-lf-t1.vf
@@ -1292,16 +1780,11 @@
2020/03/03 | 1716 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-inf-t1--base.tfm
2020/03/03 | 1716 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-inf-ly1.tfm
2020/03/03 | 1712 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-t1--base.tfm
-2020/03/03 | 1711 | graphics/asymptote/GUI/res/icons.qrc
-2020/03/03 | 1711483 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/03/03 | 1710 | graphics/asymptote/tests/arith/roots.asy
-2020/03/03 | 170 | graphics/asymptote/examples/stereoscopic.asy
2020/03/03 | 1708 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tosf-sc-t1.vf
2020/03/03 | 1708 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-t1--base.tfm
2020/03/03 | 1708 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-sc-t1--base.tfm
2020/03/03 | 1708 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-sc-t1--base.tfm
2020/03/03 | 1708 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-t1--base.tfm
-2020/03/03 | 1704 | graphics/asymptote/record.cc
2020/03/03 | 1704 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-sc-t1.vf
2020/03/03 | 1704 | fonts/scholax/vf/TeXGyreScholaX-Regular-tosf-sc-t1.vf
2020/03/03 | 1704 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-sc-t1.vf
@@ -1340,7 +1823,6 @@
2020/03/03 | 1700 | fonts/scholax/vf/TeXGyreScholaX-BoldItalic-inf-t1.vf
2020/03/03 | 1700 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-ly1--base.tfm
2020/03/03 | 1700 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-sc-ot1--base.tfm
-2020/03/03 | 169 | graphics/asymptote/runbacktrace.h
2020/03/03 | 1696 | fonts/scholax/vf/TeXGyreScholaX-Italic-sup-t1.vf
2020/03/03 | 1696 | fonts/scholax/vf/TeXGyreScholaX-Italic-inf-t1.vf
2020/03/03 | 1696 | fonts/scholax/vf/TeXGyreScholaX-Bold-sup-t1.vf
@@ -1349,18 +1831,12 @@
2020/03/03 | 1696 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-t1--base.tfm
2020/03/03 | 1696 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-t1--base.tfm
2020/03/03 | 1696 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-ly1--base.tfm
-2020/03/03 | 1694 | graphics/asymptote/fftw++.cc
2020/03/03 | 1692 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-ts1.tfm
2020/03/03 | 1692 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-ts1.tfm
2020/03/03 | 169261 | fonts/scholax/type1/TeXGyreScholaX-Italic.pfb
-2020/03/03 | 169210 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/03/03 | 168 | graphics/asymptote/examples/strokeshade.asy
-2020/03/03 | 168 | graphics/asymptote/examples/lines.asy
2020/03/03 | 1684 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-ts1--base.tfm
2020/03/03 | 1684 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-ts1--base.tfm
2020/03/03 | 1680 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tosf-sc-ly1.vf
-2020/03/03 | 167815 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/03/03 | 167756 | graphics/asymptote/doc/CAD.pdf
2020/03/03 | 1676 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-sc-ly1.vf
2020/03/03 | 1676 | fonts/scholax/vf/TeXGyreScholaX-Regular-tosf-sc-ly1.vf
2020/03/03 | 1676 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-sc-ly1.vf
@@ -1389,100 +1865,68 @@
2020/03/03 | 1672 | fonts/scholax/tfm/TeXGyreScholaX-Bold-sup-ot1.tfm
2020/03/03 | 1672 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-inf-t1--base.tfm
2020/03/03 | 1672 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-inf-ly1.tfm
-2020/03/03 | 167254 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/03/03 | 16702 | graphics/asymptote/runlabel.cc
2020/03/03 | 166961 | fonts/scholax/type1/TeXGyreScholaX-Bold.pfb
2020/03/03 | 1668 | fonts/scholax/vf/TeXGyreScholaX-Bold-lf-sc-ly1.vf
2020/03/03 | 1668 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-ts1--base.tfm
2020/03/03 | 1668 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-ts1--base.tfm
2020/03/03 | 1668 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-ts1.tfm
2020/03/03 | 1668 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ts1.tfm
-2020/03/03 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
+2020/03/03 | 16677552 | systems/win32/w32tex/luatex-w32.tar.xz
2020/03/03 | 166576 | systems/win32/miktex/tm/packages/uptex-fonts.tar.lzma
2020/03/03 | 1664 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-ts1.tfm
2020/03/03 | 1664 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-ts1.tfm
2020/03/03 | 1660 | fonts/scholax/tfm/TeXGyreScholaX-Regular-sup-ot1.tfm
2020/03/03 | 1660 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-ot1--base.tfm
-2020/03/03 | 165 | graphics/asymptote/examples/sphereskeleton.asy
-2020/03/03 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
2020/03/03 | 1658295 | systems/win32/miktex/tm/packages/erewhon-math.tar.lzma
-2020/03/03 | 16578 | graphics/asymptote/base/plain_Label.asy
2020/03/03 | 1656 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-ot1--base.tfm
2020/03/03 | 1656 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-t1--base.tfm
2020/03/03 | 1652 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-t1--base.tfm
2020/03/03 | 1648 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-t1--base.tfm
2020/03/03 | 1648 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-ts1--base.tfm
2020/03/03 | 1648 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ts1--base.tfm
-2020/03/03 | 164889 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2020/03/03 | 164884 | fonts/scholax/opentype/TeXGyreScholaX-BoldSlanted.otf
2020/03/03 | 1647 | fonts/fourier-GUT/afm/fourier-bb.afm
2020/03/03 | 1647318 | systems/doc/pdftex.zip
-2020/03/03 | 164511 | graphics/asymptote/GUI/icons_rc.py
2020/03/03 | 1644 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-t1--base.tfm
2020/03/03 | 164321 | macros/latex/contrib/l3kernel/l3news11.pdf
2020/03/03 | 1642 | macros/latex/contrib/l3kernel/l3term-glossary.tex
-2020/03/03 | 1642 | graphics/asymptote/callable.h
2020/03/03 | 1640 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-ts1--base.tfm
2020/03/03 | 1640 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-ts1--base.tfm
2020/03/03 | 1640 | fonts/scholax/tfm/TeXGyreScholaX-Italic-inf-t1.tfm
2020/03/03 | 163968 | fonts/scholax/opentype/TeXGyreScholaX-Slanted.otf
-2020/03/03 | 1637 | graphics/asymptote/builtin.h
2020/03/03 | 1636 | fonts/scholax/tfm/TeXGyreScholaX-Italic-inf-t1--base.tfm
2020/03/03 | 1636 | fonts/scholax/tfm/TeXGyreScholaX-Italic-inf-ly1.tfm
2020/03/03 | 1632 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-inf-ot1.tfm
-2020/03/03 | 1626 | graphics/asymptote/genv.h
2020/03/03 | 1624 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-ts1.tfm
2020/03/03 | 1624 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-ts1.tfm
-2020/03/03 | 1620 | graphics/asymptote/doc/colors.asy
-2020/03/03 | 161 | graphics/asymptote/runhistory.h
-2020/03/03 | 16190 | graphics/asymptote/runpair.cc
2020/03/03 | 1618 | fonts/scholax/README
2020/03/03 | 1618 | fonts/fourier-GUT/afm/fourier-mcl.afm
2020/03/03 | 1616 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-ts1.tfm
2020/03/03 | 1616 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-ts1.tfm
2020/03/03 | 1616 | fonts/scholax/tfm/TeXGyreScholaX-Italic-inf-ot1.tfm
-2020/03/03 | 16138 | graphics/asymptote/base/slide.asy
-2020/03/03 | 1612 | graphics/asymptote/asy-list.pl
2020/03/03 | 1612 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-t1--base.tfm
-2020/03/03 | 1610 | graphics/asymptote/common.h
-2020/03/03 | 1608 | systems/win32/miktex/tm/packages/biblatex2bibitem.tar.lzma
2020/03/03 | 1608 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-t1--base.tfm
-2020/03/03 | 160716 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/03/03 | 160672 | graphics/asymptote/examples/animations/dice.u3d
-2020/03/03 | 16046 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
2020/03/03 | 1600999 | biblio/bibtex/contrib/econ-bst.zip
-2020/03/03 | 159 | graphics/asymptote/tests/types/cast.asy
-2020/03/03 | 1594 | graphics/asymptote/pen.cc
2020/03/03 | 1592 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-ts1--base.tfm
2020/03/03 | 1592 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-ts1--base.tfm
2020/03/03 | 1590 | biblio/bibtex/contrib/econ-bst/customization/econ-aea.tex
-2020/03/03 | 158 | graphics/asymptote/tests/frames/stat.asy
2020/03/03 | 1588 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-ts1--base.tfm
2020/03/03 | 1588 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-ts1--base.tfm
-2020/03/03 | 15881 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/03/03 | 15845 | graphics/asymptote/dec.h
2020/03/03 | 1580 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-ly1--base.tfm
2020/03/03 | 1580 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-ts1.tfm
2020/03/03 | 1580 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ts1.tfm
-2020/03/03 | 157 | graphics/asymptote/runsystem.h
-2020/03/03 | 157 | graphics/asymptote/doc/saddle.asy
2020/03/03 | 1576 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-ot1--base.tfm
2020/03/03 | 1576 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-ot1--base.tfm
2020/03/03 | 1576 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-ly1--base.tfm
2020/03/03 | 157420 | fonts/scholax/opentype/TeXGyreScholaX-BoldItalic.otf
2020/03/03 | 15708 | macros/latex/contrib/l3kernel/l3final.dtx
-2020/03/03 | 1569 | graphics/asymptote/examples/near_earth.asy
2020/03/03 | 1564 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-sc-ly1--base.tfm
2020/03/03 | 1564 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-ly1--base.tfm
-2020/03/03 | 15645 | graphics/asymptote/install-sh
-2020/03/03 | 155 | graphics/asymptote/tests/types/ecast.asy
2020/03/03 | 1556 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-ts1.tfm
2020/03/03 | 1556 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-ts1.tfm
2020/03/03 | 1552 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-ly1--base.tfm
2020/03/03 | 1552 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-t1--base.tfm
2020/03/03 | 1552 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-t1--base.tfm
-2020/03/03 | 154 | graphics/asymptote/examples/billboard.asy
-2020/03/03 | 154 | graphics/asymptote/doc/slopefield1.asy
2020/03/03 | 1548 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-ot1--base.tfm
2020/03/03 | 1548 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-ot1--base.tfm
2020/03/03 | 1548 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-ly1--base.tfm
@@ -1494,38 +1938,27 @@
2020/03/03 | 1544 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-t1--base.tfm
2020/03/03 | 1544 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-t1--base.tfm
2020/03/03 | 1540601 | macros/latex/contrib/l3kernel/interface3.pdf
-2020/03/03 | 153 | graphics/asymptote/runlabel.h
-2020/03/03 | 1537 | graphics/asymptote/examples/refs.bib
-2020/03/03 | 15372 | graphics/asymptote/types.h
2020/03/03 | 1536 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-ly1--base.tfm
2020/03/03 | 1536 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-ly1--base.tfm
2020/03/03 | 1532 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-sc-t1--base.tfm
2020/03/03 | 1532 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-t1--base.tfm
-2020/03/03 | 152 | graphics/asymptote/glew.c
2020/03/03 | 1528 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-ts1--base.tfm
2020/03/03 | 1528 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-ts1--base.tfm
2020/03/03 | 15272237 | systems/win32/miktex/tm/packages/pgfplots.tar.lzma
-2020/03/03 | 1526 | graphics/asymptote/examples/BezierSurface.asy
-2020/03/03 | 1524 | graphics/asymptote/patches/flex.patch
2020/03/03 | 1524 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-t1--base.tfm
2020/03/03 | 1524 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-t1--base.tfm
2020/03/03 | 1524 | fonts/scholax/tfm/TeXGyreScholaX-Bold-inf-t1.tfm
2020/03/03 | 152472 | macros/latex/contrib/l3kernel/l3news08.pdf
2020/03/03 | 152200 | fonts/scholax/opentype/TeXGyreScholaX-Italic.otf
-2020/03/03 | 152101 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2020/03/03 | 1520 | fonts/scholax/tfm/TeXGyreScholaX-Bold-inf-t1--base.tfm
2020/03/03 | 1520 | fonts/scholax/tfm/TeXGyreScholaX-Bold-inf-ot1.tfm
2020/03/03 | 15200 | fonts/fourier-GUT/latex/fourier.sty
-2020/03/03 | 15192 | graphics/asymptote/base/ode.asy
2020/03/03 | 1516 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-ot1--base.tfm
2020/03/03 | 1516 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-ot1--base.tfm
2020/03/03 | 1512 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-t1--base.tfm
2020/03/03 | 1512 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-t1--base.tfm
2020/03/03 | 1512 | fonts/scholax/tfm/TeXGyreScholaX-Bold-inf-ly1.tfm
-2020/03/03 | 150 | graphics/asymptote/examples/spheresilhouette.asy
-2020/03/03 | 150 | graphics/asymptote/doc/latexmkrc_asydir
2020/03/03 | 1508 | biblio/bibtex/contrib/econ-bst/customization/econ-abbr.tex
-2020/03/03 | 1504 | graphics/asymptote/GUI/xasyUtils.py
2020/03/03 | 1504 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-t1--base.tfm
2020/03/03 | 1504 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-t1--base.tfm
2020/03/03 | 1504 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-ts1.tfm
@@ -1538,319 +1971,130 @@
2020/03/03 | 1500 | fonts/scholax/tfm/TeXGyreScholaX-Regular-inf-ot1.tfm
2020/03/03 | 1500 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-ts1.tfm
2020/03/03 | 1500 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-ts1.tfm
-2020/03/03 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
-2020/03/03 | 149788 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2020/03/03 | 1496 | biblio/bibtex/contrib/econ-bst/customization/econ-no-sort.tex
-2020/03/03 | 1492 | graphics/asymptote/runarray.h
-2020/03/03 | 1492 | graphics/asymptote/GUI/res/icons/bucket.svg
2020/03/03 | 149288 | fonts/scholax/opentype/TeXGyreScholaX-Bold.otf
2020/03/03 | 149136 | macros/latex/contrib/l3kernel/l3doc.dtx
-2020/03/03 | 148481 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/03/03 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
2020/03/03 | 1480 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-ts1--base.tfm
2020/03/03 | 1480 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-ts1--base.tfm
-2020/03/03 | 14801 | graphics/asymptote/base/palette.asy
-2020/03/03 | 147 | graphics/asymptote/doc/vectorfield.asy
-2020/03/03 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
-2020/03/03 | 14795 | graphics/asymptote/entry.h
2020/03/03 | 14785 | macros/plain/graphics/miniltx.tex
-2020/03/03 | 14773 | graphics/asymptote/configure.ac
2020/03/03 | 1476 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-t1--base.tfm
2020/03/03 | 1476 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-t1--base.tfm
2020/03/03 | 1476 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-ts1--base.tfm
2020/03/03 | 1476 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-ts1--base.tfm
-2020/03/03 | 147334 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
2020/03/03 | 1472 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-ts1.tfm
2020/03/03 | 1472 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-ts1.tfm
-2020/03/03 | 1469 | graphics/asymptote/doc/png/Makefile.in
2020/03/03 | 1468 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-ts1.tfm
2020/03/03 | 1468 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-ts1.tfm
-2020/03/03 | 14662221 | graphics/asymptote.zip
-2020/03/03 | 14660 | graphics/asymptote/base/contour3.asy
-2020/03/03 | 1461 | graphics/asymptote/examples/NURBSsurface.asy
-2020/03/03 | 145 | graphics/asymptote/examples/star.asy
2020/03/03 | 1459 | biblio/bibtex/contrib/econ-bst/customization/econ-jet.tex
2020/03/03 | 1456 | biblio/bibtex/contrib/econ-bst/customization/econ-econometrica.tex
2020/03/03 | 145452 | macros/latex/contrib/l3kernel/l3news10.pdf
2020/03/03 | 1453 | biblio/bibtex/contrib/econ-bst/customization/econ-jie.tex
-2020/03/03 | 144 | graphics/asymptote/doc/latexmkrc
2020/03/03 | 1448 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-ts1--base.tfm
2020/03/03 | 1448 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-ts1--base.tfm
-2020/03/03 | 1446 | graphics/asymptote/webgl/vertex.glsl
2020/03/03 | 1446 | biblio/bibtex/contrib/econ-bst/customization/econ-jpe.tex
2020/03/03 | 1444 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-ts1--base.tfm
2020/03/03 | 1444 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-ts1--base.tfm
-2020/03/03 | 14448 | graphics/asymptote/stack.cc
2020/03/03 | 144060 | fonts/scholax/opentype/TeXGyreScholaX-Regular.otf
-2020/03/03 | 143 | graphics/asymptote/tests/gc/label.asy
2020/03/03 | 143130 | macros/latex/contrib/l3kernel/l3news03.pdf
-2020/03/03 | 14311 | graphics/asymptote/base/flowchart.asy
2020/03/03 | 142 | macros/plain/graphics/exmplgrf.tex
2020/03/03 | 1428 | biblio/bibtex/contrib/econ-bst/customization/econ-old.tex
2020/03/03 | 1425 | biblio/bibtex/contrib/econ-bst/customization/econ-default.tex
-2020/03/03 | 141 | graphics/asymptote/examples/sphere.asy
-2020/03/03 | 141 | graphics/asymptote/examples/ring.asy
2020/03/03 | 140805 | macros/latex/contrib/l3kernel/l3news06.pdf
2020/03/03 | 140784 | macros/latex/contrib/l3kernel/l3news02.pdf
-2020/03/03 | 14048 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2020/03/03 | 14023 | graphics/asymptote/arrayop.h
-2020/03/03 | 1399445 | graphics/asymptote/ChangeLog
2020/03/03 | 13992 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-t1.tfm
2020/03/03 | 13976 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-t1.tfm
2020/03/03 | 13968 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-t1.tfm
2020/03/03 | 13940 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-t1.tfm
-2020/03/03 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
-2020/03/03 | 1391 | graphics/asymptote/doc/CAD1.asy
-2020/03/03 | 138 | graphics/asymptote/Pipfile
-2020/03/03 | 13884 | graphics/asymptote/types.cc
-2020/03/03 | 1384 | graphics/asymptote/tests/pic/trans.asy
2020/03/03 | 1383 | biblio/bibtex/contrib/econ-bst/customization/econ-b.tex
2020/03/03 | 1383 | biblio/bibtex/contrib/econ-bst/customization/econ-a.tex
-2020/03/03 | 1382985 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
2020/03/03 | 13798 | macros/plain/graphics/autopict.sty
2020/03/03 | 13760 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-t1.tfm
-2020/03/03 | 1375 | graphics/asymptote/base/tree.asy
2020/03/03 | 13744 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-t1.tfm
-2020/03/03 | 13739 | graphics/asymptote/examples/teapot.asy
2020/03/03 | 13736 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-sc-t1.tfm
-2020/03/03 | 137120 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
2020/03/03 | 13708 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-t1.tfm
-2020/03/03 | 136 | graphics/asymptote/examples/latticeshading.asy
-2020/03/03 | 13663 | graphics/asymptote/doc/install-sh
-2020/03/03 | 13663 | graphics/asymptote/doc/FAQ/install-sh
-2020/03/03 | 13628 | graphics/asymptote/runtriple.cc
-2020/03/03 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
2020/03/03 | 13532 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-sc-t1.tfm
2020/03/03 | 13520 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-sc-t1.tfm
2020/03/03 | 13516 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-sc-t1.tfm
-2020/03/03 | 1349 | graphics/asymptote/interact.h
2020/03/03 | 13484 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-t1.tfm
-2020/03/03 | 13476 | graphics/asymptote/base/grid3.asy
2020/03/03 | 13472 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-t1.tfm
2020/03/03 | 13472 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-sc-t1.tfm
2020/03/03 | 13440 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-t1.tfm
-2020/03/03 | 1343 | graphics/asymptote/runtimebase.in
2020/03/03 | 13408 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-t1.tfm
-2020/03/03 | 13339 | graphics/asymptote/camp.l
-2020/03/03 | 133255 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/03/03 | 1331 | graphics/asymptote/tests/types/spec.asy
-2020/03/03 | 132 | graphics/asymptote/tests/string/length.asy
2020/03/03 | 13272 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-sc-t1.tfm
-2020/03/03 | 1326 | graphics/asymptote/examples/electromagnetic.asy
2020/03/03 | 13256 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-t1.tfm
2020/03/03 | 13248 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-t1.tfm
2020/03/03 | 132286 | macros/latex/contrib/l3kernel/l3tl.dtx
2020/03/03 | 13220 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-t1.tfm
-2020/03/03 | 131 | graphics/asymptote/GUI/DebugFlags.py
-2020/03/03 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
-2020/03/03 | 1311 | graphics/asymptote/patches/dvipdf
-2020/03/03 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
-2020/03/03 | 1310 | graphics/asymptote/examples/roundpath.asy
-2020/03/03 | 1309 | graphics/asymptote/examples/Klein.asy
2020/03/03 | 130703 | macros/latex/contrib/biblatex2bibitem.zip
2020/03/03 | 13064 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-t1.tfm
-2020/03/03 | 13060 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
2020/03/03 | 13048 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-t1.tfm
2020/03/03 | 13040 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-t1.tfm
-2020/03/03 | 130307 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2020/03/03 | 13012 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-t1.tfm
-2020/03/03 | 129 | graphics/asymptote/tests/gc/struct.asy
2020/03/03 | 12979 | macros/latex/contrib/l3kernel/l3fp-traps.dtx
-2020/03/03 | 12959 | graphics/asymptote/runlabel.in
-2020/03/03 | 1293 | graphics/asymptote/TODO
-2020/03/03 | 1293632 | graphics/asymptote/doc/asymptote.pdf
-2020/03/03 | 1284 | graphics/asymptote/tests/output/Makefile
-2020/03/03 | 1279 | graphics/asymptote/drawverbatim.h
-2020/03/03 | 1278 | graphics/asymptote/newexp.h
-2020/03/03 | 127885 | graphics/asymptote/camp.tab.cc
-2020/03/03 | 1276 | graphics/asymptote/base/asymptote.py
-2020/03/03 | 12744 | graphics/asymptote/impdatum.cc
2020/03/03 | 12738 | macros/plain/graphics.zip
2020/03/03 | 127038 | macros/latex/contrib/l3kernel/l3basics.dtx
2020/03/03 | 126798 | macros/latex/contrib/l3kernel/l3file.dtx
2020/03/03 | 12656 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-t1.tfm
2020/03/03 | 12648 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-t1.tfm
2020/03/03 | 12648 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-t1.tfm
-2020/03/03 | 12629 | graphics/asymptote/runsystem.cc
2020/03/03 | 12620 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-t1.tfm
-2020/03/03 | 1261761 | graphics/asymptote/examples/worldmap.dat
-2020/03/03 | 1259 | graphics/asymptote/base/plain_arcs.asy
-2020/03/03 | 1253 | graphics/asymptote/keywords.pl
-2020/03/03 | 12534 | graphics/asymptote/ax_pthread.m4
-2020/03/03 | 1251 | graphics/asymptote/examples/odetest.asy
-2020/03/03 | 124 | graphics/asymptote/tests/gc/path.asy
-2020/03/03 | 124 | graphics/asymptote/GUI/res/icons/centerorigin.asy
-2020/03/03 | 1249272 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
2020/03/03 | 12488 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-t1.tfm
2020/03/03 | 12480 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-t1.tfm
2020/03/03 | 12476 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-t1.tfm
-2020/03/03 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
-2020/03/03 | 1245 | graphics/asymptote/findsym.pl
2020/03/03 | 12448 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-t1.tfm
2020/03/03 | 12420 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-t1.tfm
2020/03/03 | 12412 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-t1.tfm
2020/03/03 | 12412 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-t1.tfm
-2020/03/03 | 1240 | graphics/asymptote/examples/arrows3.asy
2020/03/03 | 12408 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-t1.tfm
-2020/03/03 | 123 | graphics/asymptote/examples/Coons.asy
-2020/03/03 | 123 | graphics/asymptote/doc/superpath.asy
2020/03/03 | 12396 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-t1.tfm
-2020/03/03 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
2020/03/03 | 12384 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-t1.tfm
-2020/03/03 | 1237 | graphics/asymptote/GUI/res/icons/closedcurve.svg
2020/03/03 | 12372 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-t1.tfm
-2020/03/03 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
-2020/03/03 | 1235777 | graphics/asymptote/GL/glew.c
-2020/03/03 | 1234 | graphics/asymptote/primitives.h
2020/03/03 | 12348 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-t1.tfm
-2020/03/03 | 1231 | graphics/asymptote/examples/logo3.asy
-2020/03/03 | 1231282 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/03/03 | 12300 | graphics/asymptote/knot.h
-2020/03/03 | 1229 | graphics/asymptote/build-scripts/build-asygl
2020/03/03 | 12280 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-t1.tfm
2020/03/03 | 12272 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-t1.tfm
-2020/03/03 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
2020/03/03 | 12268 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-t1.tfm
2020/03/03 | 12240 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-t1.tfm
2020/03/03 | 12228 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-t1.tfm
2020/03/03 | 12216 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-t1.tfm
-2020/03/03 | 121 | graphics/asymptote/doc/labelsquare.asy
2020/03/03 | 12184 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-t1.tfm
-2020/03/03 | 1216 | graphics/asymptote/examples/dragon.asy
2020/03/03 | 121534 | biblio/bibtex/contrib/econ-bst/customization/econ-b.pdf
2020/03/03 | 12152 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-t1.tfm
-2020/03/03 | 1213 | graphics/asymptote/drawclipend.h
-2020/03/03 | 121144 | graphics/asymptote/doc/asyRefCard.pdf
2020/03/03 | 121138 | biblio/bibtex/contrib/econ-bst/customization/econ-aea.pdf
2020/03/03 | 121133 | macros/latex/contrib/biblatex2bibitem/biblatex2bibitem-mwe.pdf
-2020/03/03 | 12103 | graphics/asymptote/stm.cc
-2020/03/03 | 1209 | graphics/asymptote/tests/imp/unravel.asy
-2020/03/03 | 1207 | graphics/asymptote/beziercurve.h
-2020/03/03 | 12035 | graphics/asymptote/base/solids.asy
-2020/03/03 | 119 | graphics/asymptote/fftw++asy.cc
-2020/03/03 | 1194 | graphics/asymptote/GUI/res/icons/code.svg
-2020/03/03 | 1191 | graphics/asymptote/camperror.cc
2020/03/03 | 119100 | macros/latex/contrib/l3kernel/l3news07.pdf
-2020/03/03 | 11907 | graphics/asymptote/tests/gsl/random.asy
-2020/03/03 | 118 | graphics/asymptote/tests/string/substr.asy
-2020/03/03 | 1189 | graphics/asymptote/tests/types/var.asy
2020/03/03 | 11884 | macros/latex/contrib/l3kernel/l3styleguide.tex
-2020/03/03 | 1186 | graphics/asymptote/GUI/res/icons/opencurve.svg
-2020/03/03 | 1186601 | graphics/asymptote/GL/glew.h
-2020/03/03 | 1185 | graphics/asymptote/examples/functionshading.asy
-2020/03/03 | 1183 | graphics/asymptote/base/embed.asy
2020/03/03 | 11826 | macros/latex/contrib/l3kernel/l3fparray.dtx
-2020/03/03 | 1181413 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/03/03 | 1180906 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/03/03 | 1175 | graphics/asymptote/guide.cc
2020/03/03 | 11759782 | install/macros/latex/contrib/l3kernel.tds.zip
2020/03/03 | 1173057 | fonts/newtx/doc/newtxdoc.pdf
-2020/03/03 | 11680 | graphics/asymptote/path.h
-2020/03/03 | 116662 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/03/03 | 11658 | graphics/asymptote/coder.h
-2020/03/03 | 1163 | graphics/asymptote/runtime.h
2020/03/03 | 116350 | biblio/bibtex/contrib/econ-bst/customization/econ-econometrica.pdf
2020/03/03 | 11607 | macros/latex/contrib/l3packages/l3keys2e.dtx
-2020/03/03 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
-2020/03/03 | 116025 | graphics/asymptote/predicates.cc
-2020/03/03 | 115 | graphics/asymptote/doc/onecontour.asy
2020/03/03 | 115988 | biblio/bibtex/contrib/econ-bst/econ-jpe.bst
-2020/03/03 | 11585 | graphics/asymptote/Makefile.in
-2020/03/03 | 115595 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/03/03 | 11541 | graphics/asymptote/aspy.py
2020/03/03 | 11537360 | macros/latex/contrib/l3kernel.zip
-2020/03/03 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
-2020/03/03 | 1151 | graphics/asymptote/callable.cc
-2020/03/03 | 1148 | graphics/asymptote/GUI/configs/xasyconfig.cson
-2020/03/03 | 11482 | graphics/asymptote/base/binarytree.asy
-2020/03/03 | 1142 | graphics/asymptote/envcompleter.cc
2020/03/03 | 114128 | biblio/bibtex/contrib/econ-bst/econ-abbr.bst
-2020/03/03 | 1140 | graphics/asymptote/examples/imagehistogram.asy
2020/03/03 | 114012 | biblio/bibtex/contrib/econ-bst/econ-jet.bst
-2020/03/03 | 113 | graphics/asymptote/patches/fixmem.reg
-2020/03/03 | 11384 | graphics/asymptote/drawelement.h
-2020/03/03 | 1136 | graphics/asymptote/examples/genustwo.asy
2020/03/03 | 113536 | macros/latex/contrib/l3kernel/l3news01.pdf
2020/03/03 | 11335 | fonts/fourier-GUT/afm/fourier-mex.afm
-2020/03/03 | 11320 | graphics/asymptote/base/plain_markers.asy
-2020/03/03 | 1131 | graphics/asymptote/gl-matrix-2.4.0-pruned/LICENSE.js
2020/03/03 | 113189 | macros/latex/contrib/l3kernel/l3names.dtx
2020/03/03 | 113122 | biblio/bibtex/contrib/econ-bst/customization/econ-old.pdf
-2020/03/03 | 1126 | graphics/asymptote/coenv.cc
2020/03/03 | 112695 | biblio/bibtex/contrib/econ-bst/customization/econ-default.pdf
-2020/03/03 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
-2020/03/03 | 1122 | graphics/asymptote/base/external.asy
-2020/03/03 | 1120 | graphics/asymptote/examples/animations/wheel.asy
2020/03/03 | 112011 | biblio/bibtex/contrib/econ-bst/customization/econ-abbr.pdf
-2020/03/03 | 111 | graphics/asymptote/GUI/res/icons/center.asy
2020/03/03 | 111927 | biblio/bibtex/contrib/econ-bst/customization/econ-no-sort.pdf
-2020/03/03 | 1114 | graphics/asymptote/examples/laserlattice.asy
2020/03/03 | 111368 | biblio/bibtex/contrib/econ-bst/customization/econ-numbers.pdf
-2020/03/03 | 111160 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
2020/03/03 | 110866 | macros/latex/contrib/fei/fei.dtx
-2020/03/03 | 1104158 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
2020/03/03 | 110347 | biblio/bibtex/contrib/econ-bst/customization/econ-jpe.pdf
-2020/03/03 | 11030 | graphics/asymptote/base/math.asy
-2020/03/03 | 1102 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
-2020/03/03 | 1100869 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2020/03/03 | 1100706 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/03/03 | 109 | graphics/asymptote/tests/string/insert.asy
-2020/03/03 | 1098 | graphics/asymptote/refaccess.cc
2020/03/03 | 109736 | macros/latex/contrib/l3kernel/l3str-convert.dtx
-2020/03/03 | 1096 | graphics/asymptote/tests/array/transpose.asy
2020/03/03 | 10969 | biblio/bibtex/contrib/econ-bst/CHANGES.md
-2020/03/03 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
2020/03/03 | 108899 | macros/latex/contrib/l3kernel/l3token.dtx
-2020/03/03 | 108873 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/03/03 | 1085 | graphics/asymptote/GUI/res/icons/openpolygon.svg
-2020/03/03 | 10830 | graphics/asymptote/base/CAD.asy
-2020/03/03 | 1082 | graphics/asymptote/patches/README
2020/03/03 | 1079773 | systems/win32/miktex/tm/packages/datetime2.tar.lzma
-2020/03/03 | 10727 | graphics/asymptote/texfile.h
2020/03/03 | 107130 | macros/latex/contrib/l3kernel/l3news04.pdf
2020/03/03 | 106742 | macros/latex/contrib/l3kernel/l3expan.dtx
-2020/03/03 | 1065 | graphics/asymptote/examples/shellmethod.asy
-2020/03/03 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
-2020/03/03 | 10604 | graphics/asymptote/path3.h
-2020/03/03 | 105 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
-2020/03/03 | 105 | graphics/asymptote/GUI/res/icons/closedcurve.asy
-2020/03/03 | 10582 | graphics/asymptote/tr.cc
2020/03/03 | 105629 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
-2020/03/03 | 1055 | graphics/asymptote/examples/partitionExample.asy
2020/03/03 | 105524 | macros/latex/contrib/l3kernel/l3keys.dtx
-2020/03/03 | 1052 | graphics/asymptote/GUI/res/icons/centerorigin.svg
-2020/03/03 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
-2020/03/03 | 1051 | graphics/asymptote/doc/eetomumu.asy
-2020/03/03 | 1050 | graphics/asymptote/opsymbols.pl
2020/03/03 | 105095 | macros/latex/contrib/l3kernel/l3news05.pdf
-2020/03/03 | 104 | graphics/asymptote/examples/tiling.asy
-2020/03/03 | 104 | graphics/asymptote/examples/shadestroke.asy
-2020/03/03 | 10445 | graphics/asymptote/INSTALL
-2020/03/03 | 1042554 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/03/03 | 1041977 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/03/03 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
2020/03/03 | 103734 | biblio/bibtex/contrib/econ-bst/customization/econ-jet.pdf
-2020/03/03 | 1036 | graphics/asymptote/examples/workcone.asy
-2020/03/03 | 1033 | graphics/asymptote/examples/basealign.asy
-2020/03/03 | 1030 | graphics/asymptote/absyn.h
-2020/03/03 | 102 | graphics/asymptote/tests/gc/file.asy
-2020/03/03 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
2020/03/03 | 1025 | macros/plain/graphics/psfrag.tex
-2020/03/03 | 1025 | graphics/asymptote/doc/leastsquares.asy
-2020/03/03 | 102518 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/03/03 | 10210 | graphics/asymptote/examples/thermodynamics.asy
-2020/03/03 | 1020 | graphics/asymptote/flatguide.cc
-2020/03/03 | 1020 | graphics/asymptote/examples/NURBSsphere.asy
-2020/03/03 | 10196 | graphics/asymptote/doc/CAD.tex
-2020/03/03 | 1013 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
-2020/03/03 | 1010 | graphics/asymptote/examples/washermethod.asy
-2020/03/03 | 100709 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/03/03 | 1005 | graphics/asymptote/doc/asy.1.begin
-2020/03/03 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
-2020/03/03 | 1000 | graphics/asymptote/doc/FAQ/Makefile
2020/03/02 | 98957028 | systems/win32/w32tex/web2c-lib.tar.xz
2020/03/02 | 9665 | systems/doc/pdftex/manual/ChangeLog
-2020/03/02 | 93919096 | systems/win32/w32tex/TLW64/tl-win64.zip
2020/03/02 | 930933 | systems/doc/pdftex/manual/pdftex-a.pdf
2020/03/02 | 920 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/example-bookinjournal.dot
2020/03/02 | 8385660 | systems/win32/w32tex/uptex-w32.tar.xz
@@ -1860,10 +2104,11 @@
2020/03/02 | 689514 | macros/latex/contrib/datetime2/datetime2.pdf
2020/03/02 | 677 | systems/doc/pdftex/tests/10-moddate/Makefile
2020/03/02 | 6408 | systems/doc/pdftex/tests/06-pkmap/cmr10.360pk
+2020/03/02 | 64061892 | systems/win32/w32tex/biblatex-biber.tar.xz
2020/03/02 | 6365056 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/03/02 | 6287632 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
+2020/03/02 | 6281164 | systems/win32/w32tex/datetime2.tar.xz
2020/03/02 | 61979 | macros/latex/contrib/datetime2/samples/datetime2-sample-hyperref.pdf
-2020/03/02 | 601465 | systems/win32/w32tex/ChangeLog
2020/03/02 | 599 | systems/doc/pdftex/tests/06-pkmap/Makefile
2020/03/02 | 5943 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/example-bookininarticle.dot
2020/03/02 | 565 | macros/latex/contrib/datetime2/README
@@ -1887,7 +2132,7 @@
2020/03/02 | 4004 | fonts/newtx/tfm/ntxsups-Regular-t1.tfm
2020/03/02 | 39770 | systems/doc/pdftex/NEWS
2020/03/02 | 367 | systems/doc/pdftex/tests/12-pdf2/test-compress2.tex
-2020/03/02 | 34381664 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/03/02 | 34383256 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/03/02 | 335 | systems/doc/pdftex/manual/pdftex-w.tex
2020/03/02 | 3351 | fonts/newtx/enc/ntxdenoms_OT1.enc
2020/03/02 | 319 | systems/doc/pdftex/tests/12-pdf2/test-doc2incl2.tex
@@ -1905,6 +2150,7 @@
2020/03/02 | 257097 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/biblatex-bookinother.pdf
2020/03/02 | 2552 | macros/latex/contrib/datetime2/samples/datetime2-sample-journal.tex
2020/03/02 | 2503 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/example-bookinarticle.dot
+2020/03/02 | 2491008 | systems/win32/w32tex/tex4htk-w32.tar.xz
2020/03/02 | 248 | fonts/newtx/tfm/ntxdenoms-Regular-t1.tfm
2020/03/02 | 2411 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/bookinother.dbx
2020/03/02 | 240 | systems/doc/pdftex/tests/10-moddate/test-moddate-abs.tex
@@ -1918,7 +2164,7 @@
2020/03/02 | 215 | systems/doc/pdftex/tests/09-fontobjnum/Makefile
2020/03/02 | 20848 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/example-bookininproceedings.pdf
2020/03/02 | 207 | systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-ok.tex
-2020/03/02 | 20610288 | systems/win32/w32tex/pdftex-w32.tar.xz
+2020/03/02 | 20610020 | systems/win32/w32tex/pdftex-w32.tar.xz
2020/03/02 | 2014 | systems/win32/w32tex/TLW64/00README.TLW64
2020/03/02 | 20118 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/example-bookininbook.pdf
2020/03/02 | 19623 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/example-bookinincollection.pdf
@@ -1941,7 +2187,6 @@
2020/03/02 | 1404 | systems/doc/pdftex/tests/12-pdf2/Makefile
2020/03/02 | 1390 | systems/doc/pdftex/tests/06-pkmap/test-pkmap.tex
2020/03/02 | 13077 | macros/latex/contrib/biblatex-contrib/biblatex-bookinother/documentation/biblatex-bookinother.tex
-2020/03/02 | 119415 | graphics/asymptote/ReleaseNotes
2020/03/02 | 11934 | systems/doc/pdftex/manual/pdftex-syntax.txt
2020/03/02 | 118227 | fonts/newtx/tex/newtxmath.sty
2020/03/02 | 1175432 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
@@ -2207,7 +2452,6 @@
2020/03/01 | 3124 | fonts/newtx/tfm/ntx-Bold-osf-scl-ot1.tfm
2020/03/01 | 3120 | fonts/newtx/tfm/ntx-Italic-osf-ot1.tfm
2020/03/01 | 3116 | fonts/newtx/tfm/ntx-BoldItalic-osf-ot1.tfm
-2020/03/01 | 3115856 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
2020/03/01 | 3112 | fonts/newtx/tfm/ntx-BoldItalic-lf-ot1.tfm
2020/03/01 | 3100 | macros/luatex/generic/luatexja/tool/table_jisx0208.tex
2020/03/01 | 3095 | graphics/pgf/contrib/pgfplots/tex/pgfplotssysgeneric.code.tex
@@ -2289,6 +2533,7 @@
2020/03/01 | 18950 | macros/luatex/generic/luatexja/src/ltj-adjust.lua
2020/03/01 | 189433 | macros/luatex/generic/luatexja/src/ltjsclasses.dtx
2020/03/01 | 18861 | graphics/pgf/contrib/pgfplots/tex/pgfplotsmatrix.code.tex
+2020/03/01 | 187022 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
2020/03/01 | 18702006 | systems/texlive/tlnet/install-tl-windows.exe
2020/03/01 | 1869 | graphics/pgf/contrib/pgfplots/tex/pgfplots.lua
2020/03/01 | 185476 | fonts/newtx/opentype/TeXGyreTermesX-Regular.otf
@@ -2303,8 +2548,6 @@
2020/03/01 | 17756 | graphics/pgf/contrib/pgfplots/tex/parser.lua
2020/03/01 | 176639 | macros/luatex/generic/luatexja/src/ltjclasses.dtx
2020/03/01 | 17662 | graphics/pgf/contrib/pgfplots/tex/pgfplotstexio.lua
-2020/03/01 | 17624564 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2020/03/01 | 17616732 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/03/01 | 17465 | graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorescopes.code.tex
2020/03/01 | 17447 | graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.colormaps.code.tex
2020/03/01 | 17375854 | install/graphics/pgf/contrib/pgfplots.tds.zip
@@ -2312,7 +2555,6 @@
2020/03/01 | 17141 | macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty
2020/03/01 | 1691 | macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty
2020/03/01 | 1685308 | systems/texlive/tlnet/archive/luatex.doc.r53977.tar.xz
-2020/03/01 | 16661840 | systems/win32/w32tex/luatex-w32.tar.xz
2020/03/01 | 1661 | macros/luatex/generic/luatexja/src/ltj-inputbuf.lua
2020/03/01 | 16601 | fonts/newtx/afm/ntxsups-Regular.afm
2020/03/01 | 1659 | graphics/pgf/contrib/pgfplots/tex/binary.lua
@@ -2574,7 +2816,6 @@
2020/02/29 | 4380 | fonts/uptex-fonts/README_ASCII_Corp.txt
2020/02/29 | 432 | fonts/uptex-fonts/tfm/uprml-h.tfm
2020/02/29 | 432 | fonts/uptex-fonts/tfm/upgbm-h.tfm
-2020/02/29 | 43125468 | systems/win32/w32tex/web2c-w32.tar.xz
2020/02/29 | 4252 | fonts/uptex-fonts/source/upjisr-h-hk.pl
2020/02/29 | 42316 | macros/latex/contrib/icite/samples/icite-minimal.pdf
2020/02/29 | 419 | fonts/uptex-fonts/source/uprml-h.pl
@@ -2661,7 +2902,6 @@
2020/02/29 | 2500 | language/japanese/uptex-base/samples/simple-sjis.tex
2020/02/29 | 2495 | fonts/erewhon-math/README.md
2020/02/29 | 2493 | language/japanese/uptex-base/samples/simple-euc.tex
-2020/02/29 | 2475116 | systems/win32/w32tex/tex4htk-w32.tar.xz
2020/02/29 | 244804 | macros/latex/contrib/diagbox/diagbox.pdf
2020/02/29 | 2421 | language/japanese/platex/plnewsc12.tex
2020/02/29 | 237 | language/japanese/uptex-base/samples/jstr-uptex.mp
@@ -2868,7 +3108,6 @@
2020/02/28 | 8894 | support/bib2gls/src/bib2gls.pod
2020/02/28 | 88745 | macros/latex/contrib/zwpagelayout/adjusthead.pdf
2020/02/28 | 8864 | macros/latex/base/ltnews17.tex
-2020/02/28 | 879993 | systems/win32/miktex/tm/packages/econ-bst.tar.lzma
2020/02/28 | 87971 | macros/latex/base/lttextcomp.dtx
2020/02/28 | 8770 | macros/latex/base/format.ins
2020/02/28 | 8737 | macros/latex/base/ltthm.dtx
@@ -3816,6 +4055,7 @@
2020/02/28 | 2160 | language/japanese/japanese-otf-uptex/vf/utftgrm-h.vf
2020/02/28 | 215600 | macros/latex/base/ltxdoc.pdf
2020/02/28 | 21559 | language/japanese/japanese-otf-uptex/test/uplatex/sp_cns_utf.tex
+2020/02/28 | 2150 | macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex
2020/02/28 | 2149 | macros/latex/contrib/babel-contrib/greek/Makefile
2020/02/28 | 214708 | macros/latex/base/slifonts.pdf
2020/02/28 | 2104852 | language/greek/greek-fontenc.zip
@@ -4559,12 +4799,10 @@
2020/02/27 | 4032 | fonts/junicode/latex/TS3Junicode-TLF.fd
2020/02/27 | 4032 | fonts/junicode/latex/OT1Junicode-TLF.fd
2020/02/27 | 4032 | fonts/junicode/latex/LY1Junicode-TLF.fd
-2020/02/27 | 4025 | macros/latex/contrib/nameauth/README
2020/02/27 | 4024 | systems/texlive/tlnet/archive/luacolor.r53933.tar.xz
2020/02/27 | 3984 | fonts/junicode/latex/T3Junicode-TLF.fd
2020/02/27 | 3984 | fonts/junicode/latex/T1Junicode-TLF.fd
2020/02/27 | 3924 | fonts/junicode/tfm/Junicode-Italic-tosf-swash-ot1.tfm
-2020/02/27 | 382436 | macros/latex/contrib/nameauth/nameauth.dtx
2020/02/27 | 3820 | fonts/junicode/tfm/Junicode-Italic-tlf-swash-ot1.tfm
2020/02/27 | 370832 | install/macros/generic/expkv.tds.zip
2020/02/27 | 3676 | fonts/junicode/tfm/Junicode-Italic-tosf-sc-t3.tfm
@@ -5011,132 +5249,3 @@
2020/02/27 | 1160 | fonts/junicode/vf/Junicode-BoldItalic-sup-t3.vf
2020/02/27 | 115452 | systems/texlive/tlnet/archive/optex.r53927.tar.xz
2020/02/27 | 1137413 | macros/latex/contrib/nameauth.zip
-2020/02/27 | 1049659 | macros/latex/contrib/nameauth/nameauth.pdf
-2020/02/26 | 997724 | systems/texlive/tlnet/archive/biblatex-gost.doc.r53916.tar.xz
-2020/02/26 | 9955484 | systems/texlive/tlnet/archive/l3kernel.doc.r53913.tar.xz
-2020/02/26 | 980 | systems/texlive/tlnet/archive/pdfpc.doc.r53902.tar.xz
-2020/02/26 | 957272 | systems/texlive/tlnet/archive/suftesi.doc.r53903.tar.xz
-2020/02/26 | 949 | macros/luatex/optex/README
-2020/02/26 | 9322 | graphics/pstricks/contrib/pst-eucl/Changes
-2020/02/26 | 8950308 | systems/win32/miktex/tm/packages/noto-emoji.tar.lzma
-2020/02/26 | 769841 | systems/win32/miktex/tm/packages/siunitx.tar.lzma
-2020/02/26 | 759086 | systems/win32/miktex/tm/packages/beilstein.tar.lzma
-2020/02/26 | 752 | systems/texlive/tlnet/archive/collection-latexrecommended.r53921.tar.xz
-2020/02/26 | 7242 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.tex
-2020/02/26 | 712 | systems/texlive/tlnet/archive/twemoji-colr.doc.r53908.tar.xz
-2020/02/26 | 6932 | systems/texlive/tlnet/archive/xetex.r53917.tar.xz
-2020/02/26 | 692077 | install/macros/latex/contrib/biblatex-contrib/biblatex-ieee.tds.zip
-2020/02/26 | 690786 | macros/latex/contrib/biblatex-contrib/biblatex-ieee.zip
-2020/02/26 | 676 | systems/texlive/tlnet/archive/collection-latex.r53921.tar.xz
-2020/02/26 | 663890 | systems/win32/miktex/tm/packages/els-cas-templates.tar.lzma
-2020/02/26 | 64880 | systems/texlive/tlnet/archive/l3packages.source.r53913.tar.xz
-2020/02/26 | 647 | macros/latex/contrib/import/README
-2020/02/26 | 6460 | systems/texlive/tlnet/archive/plautopatch.r53906.tar.xz
-2020/02/26 | 64061348 | systems/win32/w32tex/biblatex-biber.tar.xz
-2020/02/26 | 629508 | systems/texlive/tlnet/archive/siunitx.doc.r53914.tar.xz
-2020/02/26 | 616888 | systems/texlive/tlnet/archive/xetex.doc.r53917.tar.xz
-2020/02/26 | 60801 | macros/luatex/optex/doc/optex-doc.tex
-2020/02/26 | 6044 | systems/texlive/tlnet/archive/collection-latexextra.r53921.tar.xz
-2020/02/26 | 5674 | macros/latex/contrib/elteikthesis/chapters/impl.tex
-2020/02/26 | 547240 | systems/texlive/tlnet/archive/els-cas-templates.doc.r53910.tar.xz
-2020/02/26 | 5426 | macros/latex/contrib/import/import.sty
-2020/02/26 | 530008 | systems/texlive/tlnet/archive/l3kernel.source.r53913.tar.xz
-2020/02/26 | 51696 | systems/texlive/tlnet/archive/acmart.source.r53899.tar.xz
-2020/02/26 | 5091 | macros/latex/contrib/import/import.tex
-2020/02/26 | 502240 | systems/win32/miktex/tm/packages/twemoji-colr.tar.lzma
-2020/02/26 | 50109 | macros/latex/contrib/nameauth/examples.tex
-2020/02/26 | 500840 | systems/texlive/tlnet/archive/twemoji-colr.r53908.tar.xz
-2020/02/26 | 4891 | macros/latex/contrib/l3kernel/l3news.tex
-2020/02/26 | 48732 | systems/texlive/tlnet/archive/fmtcount.source.r53912.tar.xz
-2020/02/26 | 480 | macros/latex/contrib/elteikthesis/settings.tex
-2020/02/26 | 463376 | graphics/pstricks/contrib/pst-eucl/tex/pst-eucl.tex
-2020/02/26 | 461186 | macros/latex/contrib/elteikthesis/thesis.pdf
-2020/02/26 | 4424 | macros/luatex/optex/fams-ini.opm
-2020/02/26 | 43532 | systems/texlive/tlnet/archive/exframe.source.r53911.tar.xz
-2020/02/26 | 4317 | fonts/domitian/doc/domitian-doc.tex
-2020/02/26 | 420 | systems/texlive/tlnet/archive/stage.source.r53915.tar.xz
-2020/02/26 | 4209 | macros/luatex/optex/fonts-catalog.opm
-2020/02/26 | 401556 | systems/texlive/tlnet/archive/exframe.doc.r53911.tar.xz
-2020/02/26 | 4012 | fonts/oldstandard/README
-2020/02/26 | 4008 | systems/texlive/tlnet/archive/cases.r53909.tar.xz
-2020/02/26 | 400372 | systems/texlive/tlnet/archive/fmtcount.doc.r53912.tar.xz
-2020/02/26 | 383413 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.pdf
-2020/02/26 | 3818908 | systems/texlive/tlnet/archive/acmart.doc.r53899.tar.xz
-2020/02/26 | 36872 | systems/texlive/tlnet/archive/acmart.r53899.tar.xz
-2020/02/26 | 36724 | systems/texlive/tlnet/archive/suftesi.source.r53903.tar.xz
-2020/02/26 | 3598341 | install/fonts/oldstandard.tds.zip
-2020/02/26 | 3578525 | fonts/oldstandard.zip
-2020/02/26 | 34760 | systems/texlive/tlnet/archive/siunitx.r53914.tar.xz
-2020/02/26 | 344095 | systems/win32/miktex/tm/packages/cases.tar.lzma
-2020/02/26 | 3402 | macros/latex/contrib/elteikthesis/thesis.tex
-2020/02/26 | 338244 | systems/texlive/tlnet/archive/cases.doc.r53909.tar.xz
-2020/02/26 | 3353 | support/latex-git-log/README.md
-2020/02/26 | 332761 | install/macros/latex/contrib/luacolor.tds.zip
-2020/02/26 | 327433 | macros/latex/contrib/luacolor.zip
-2020/02/26 | 32263 | macros/latex/contrib/luacolor/luacolor.dtx
-2020/02/26 | 322070 | macros/latex/contrib/luacolor/luacolor.pdf
-2020/02/26 | 3103 | graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.bib
-2020/02/26 | 3032 | macros/latex/contrib/elteikthesis/README_hu.md
-2020/02/26 | 292980 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.pdf
-2020/02/26 | 285856 | fonts/oldstandard/opentype/OldStandard-BoldItalic.otf
-2020/02/26 | 284717108 | systems/win32/w32tex/pstricks.tar.xz
-2020/02/26 | 2841 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.cbx
-2020/02/26 | 2824 | systems/texlive/tlnet/archive/stage.r53915.tar.xz
-2020/02/26 | 2759 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.tex
-2020/02/26 | 2750 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.bbx
-2020/02/26 | 2745 | macros/latex/contrib/elteikthesis/README.md
-2020/02/26 | 26612 | systems/texlive/tlnet/archive/fmtcount.r53912.tar.xz
-2020/02/26 | 26532 | systems/texlive/tlnet/archive/luamplib.source.r53904.tar.xz
-2020/02/26 | 2605048 | systems/win32/w32tex/dvitools-w32.tar.xz
-2020/02/26 | 2572 | systems/texlive/tlnet/archive/pdfpc.source.r53902.tar.xz
-2020/02/26 | 2501 | macros/latex/contrib/elteikthesis/appendices/sim.tex
-2020/02/26 | 243633 | macros/latex/contrib/import/import.pdf
-2020/02/26 | 240060 | macros/latex/contrib/import.zip
-2020/02/26 | 2385887 | macros/generic/xint.zip
-2020/02/26 | 235409 | graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.tex
-2020/02/26 | 2327652 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
-2020/02/26 | 23251 | macros/luatex/optex/fonts-select.opm
-2020/02/26 | 231252 | fonts/oldstandard/opentype/OldStandard-Bold.otf
-2020/02/26 | 230264 | fonts/oldstandard/opentype/OldStandard-Italic.otf
-2020/02/26 | 227684 | fonts/oldstandard/opentype/OldStandard-Regular.otf
-2020/02/26 | 2272 | systems/texlive/tlnet/archive/pdfpc.r53902.tar.xz
-2020/02/26 | 2265 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/magyar-ieee.lbx
-2020/02/26 | 2252 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.cbx
-2020/02/26 | 21124 | systems/texlive/tlnet/archive/biblatex-gost.r53916.tar.xz
-2020/02/26 | 202375 | fonts/domitian/doc/domitian-doc.pdf
-2020/02/26 | 20164 | systems/texlive/tlnet/archive/els-cas-templates.r53910.tar.xz
-2020/02/26 | 19868 | systems/texlive/tlnet/archive/l3packages.r53913.tar.xz
-2020/02/26 | 19746 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.bbx
-2020/02/26 | 1888 | fonts/domitian/latex/domitian.sty
-2020/02/26 | 1825875 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
-2020/02/26 | 1800 | systems/texlive/tlnet/archive/collection-fontsextra.r53908.tar.xz
-2020/02/26 | 1739508 | systems/texlive/tlnet/archive/l3packages.doc.r53913.tar.xz
-2020/02/26 | 1714126 | graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.pdf
-2020/02/26 | 1655062 | macros/luatex/optex.zip
-2020/02/26 | 15768 | macros/latex/contrib/elteikthesis/elteikthesis.cls
-2020/02/26 | 156393 | macros/latex/contrib/elteikthesis/README_hu.pdf
-2020/02/26 | 153640 | systems/texlive/tlnet/archive/stage.doc.r53915.tar.xz
-2020/02/26 | 152304 | systems/texlive/tlnet/archive/luamplib.doc.r53904.tar.xz
-2020/02/26 | 151924 | macros/latex/contrib/elteikthesis/README.pdf
-2020/02/26 | 1512 | macros/latex/contrib/elteikthesis/thesis.bib
-2020/02/26 | 150405 | macros/luatex/optex/doc/optex-doc.pdf
-2020/02/26 | 148956 | systems/texlive/tlnet/archive/l3kernel.r53913.tar.xz
-2020/02/26 | 14490 | macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.bib
-2020/02/26 | 143512 | systems/win32/miktex/tm/packages/plautopatch.tar.lzma
-2020/02/26 | 1424 | macros/latex/contrib/elteikthesis/LICENSE
-2020/02/26 | 13772 | systems/texlive/tlnet/archive/suftesi.r53903.tar.xz
-2020/02/26 | 136668 | systems/texlive/tlnet/archive/plautopatch.doc.r53906.tar.xz
-2020/02/26 | 1338615 | graphics/pstricks/contrib/pst-eucl.zip
-2020/02/26 | 12820 | macros/luatex/optex/unimath-codes.opm
-2020/02/26 | 1211 | macros/latex/contrib/elteikthesis/chapters/intro.tex
-2020/02/26 | 118 | macros/latex/contrib/luacolor/README.md
-2020/02/26 | 11886 | macros/latex/contrib/elteikthesis/chapters/user.tex
-2020/02/26 | 11692 | systems/texlive/tlnet/archive/luamplib.r53904.tar.xz
-2020/02/26 | 11646 | support/latex-git-log/latex-git-log
-2020/02/26 | 1093458 | macros/latex/contrib/elteikthesis/images/elte_cimer_szines.eps
-2020/02/26 | 10848 | systems/texlive/tlnet/archive/exframe.r53911.tar.xz
-2020/02/26 | 1074 | macros/latex/contrib/elteikthesis/chapters/sum.tex
-2020/02/26 | 10544552 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
-2020/02/26 | 1043199 | macros/latex/contrib/elteikthesis.zip
-2020/02/26 | 103376 | systems/texlive/tlnet/archive/siunitx.source.r53914.tar.xz
-2020/02/26 | 1016 | fonts/domitian/README
diff --git a/graphics/asymptote/ChangeLog b/graphics/asymptote/ChangeLog
index 4d64ee4b99..e1e04f44eb 100644
--- a/graphics/asymptote/ChangeLog
+++ b/graphics/asymptote/ChangeLog
@@ -1,3 +1,34 @@
+commit df95759c3752e7fc902894ce73ba86d91e16a5e9
+Merge: 396d060c ae3dc713
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Mar 3 16:52:03 2020 -0700
+
+ Merge branch 'master' of github.com:vectorgraphics/asymptote.
+
+commit 396d060c5a4b0d2b5782889fd83f191c0d0de7a4
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Mar 3 16:50:54 2020 -0700
+
+ Work around incorrect declaration in NetBSD readline.h v1.33.
+
+commit ae3dc713aa789672c931474e467bcca82ae4a73f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Mar 3 14:44:10 2020 -0700
+
+ Add memory to rmf tube basis.
+
+commit 23f160e092e1fb7bebe4f3f7e131242791816987
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Mar 3 00:51:52 2020 -0700
+
+ Update examples.
+
+commit 52ad58d7c865f029f162f1f40e9c87a09a5ecf4d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Mar 2 23:36:16 2020 -0700
+
+ Increment version to 2.64.
+
commit 6df59d64acb38ad48002d1cae4350ca5cede5267
Author: John Bowman <bowman@ualberta.ca>
Date: Mon Mar 2 22:15:59 2020 -0700
diff --git a/graphics/asymptote/GUI/icons_rc.py b/graphics/asymptote/GUI/icons_rc.py
index 8694bd060b..682e118d74 100644
--- a/graphics/asymptote/GUI/icons_rc.py
+++ b/graphics/asymptote/GUI/icons_rc.py
@@ -9,7 +9,39 @@
from PyQt5 import QtCore
qt_resource_data = b"\
-\x00\x00\x04\xd5\
+\x00\x00\x01\xdd\
+\x00\
+\x00\x06\xe4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\x13\x29\xff\
+\x61\xba\xb7\x4a\xec\x17\xc4\xd4\xa6\xa6\x51\xfd\x21\xcb\x52\x9a\
+\x58\x6a\xea\xaa\xa7\x0a\xc3\x16\x50\x28\x20\x58\xc0\xce\xaf\xef\
+\xee\x92\x54\x51\x95\xfa\x18\xfb\xb0\x33\xda\x79\x6f\xde\xbc\x65\
+\x24\xa6\xd7\xfb\xdf\x39\x74\xa2\x6e\xb2\xb2\x08\x10\x27\x0c\x81\
+\x28\xa2\x32\xce\x8a\x24\x40\xad\xfc\x85\xc7\xe8\xfa\xd3\xe5\xc5\
+\xf4\x1d\xc6\xb0\x12\x85\xa8\x43\x59\xd6\x3e\x7c\x8e\xcb\x9d\x80\
+\x75\x9e\xb7\x8d\x34\x25\xe0\x1e\x71\x08\xb7\xe1\xeb\x76\x05\xcb\
+\x7d\x55\xd6\x12\x36\x79\x9b\xe0\x75\x01\xc4\x14\xb7\xc3\x10\x1f\
+\x3c\xc2\x18\xcc\xda\x2c\x8f\x81\xbd\x07\xc0\xd8\xe8\x2f\xee\xe6\
+\xf7\x3f\x36\x4b\x68\xba\x04\x36\xdf\x66\x37\xeb\x39\x20\x4c\xe9\
+\x77\x77\x4e\xe9\xe2\x7e\x61\x24\x38\xe1\x94\x2e\x6f\x11\xa0\x54\
+\xca\xca\xa7\xb4\xef\x7b\xd2\xbb\xa4\xac\x13\xba\xaa\xc3\x2a\xcd\
+\xa2\x86\x2a\x22\xd5\x44\xd5\x44\x95\x18\xe7\x24\x96\x31\xd2\x33\
+\xb4\xf4\x8b\xa7\x72\x04\x59\x1c\xa0\x9b\xf0\x20\xea\x9f\xea\xa2\
+\xbe\x44\xd1\x04\xaf\x48\x3b\x8c\x31\x2d\xf5\x44\xf1\xf7\x79\x56\
+\x3c\xbc\x46\xe4\x93\xc9\x84\x1a\x54\x51\x03\xc4\xaa\x3d\x82\xc3\
+\x90\x2f\x2f\x2c\xe8\xb3\x58\xa6\x01\x1a\x71\x47\x03\xa9\xc8\x92\
+\x54\xfe\xbd\x76\x99\xe8\x67\xa5\xee\x02\x06\xaa\xa6\x0f\x82\x46\
+\x1e\x72\x11\x20\x51\x84\xbb\x5c\xe0\x5d\x18\x3d\x24\x75\xd9\x16\
+\xb1\x5f\x88\x1e\x5e\x30\x3f\x1a\x6f\x7e\x53\x85\x91\xa2\x57\xb5\
+\x68\x44\xdd\x09\xf3\xea\x44\x05\x6b\x88\xd6\xb4\x0a\x65\x0a\xea\
+\xd1\x5f\xb8\xc7\x6c\x3e\x72\x89\x1b\x31\xdb\x25\x1f\xb0\x6b\x7b\
+\x2a\xaa\xa3\x73\x8a\x47\x8c\x8c\x22\xac\x00\x9b\xe9\x22\x76\xf1\
+\x13\xdc\x0d\x10\x33\x98\xfb\xdc\xa0\x73\x6a\x00\xd3\xa2\x4b\xb6\
+\x51\xd4\x67\x6b\xe6\x3c\xea\x4f\x60\x59\xf4\x1f\x1f\xce\x78\x7c\
+\x16\x3e\xae\xb8\x77\x3a\x1f\x53\xfa\xff\x25\x39\x63\xfe\x26\xa6\
+\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x71\x6c\x49\x57\x6c\
+\xf2\x26\xa6\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x31\x2c\
+\xe9\x39\xaa\x7f\xb6\xca\x7f\x00\x99\x18\x96\x19\
+\x00\x00\x04\x3d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
@@ -33,63 +65,78 @@ qt_resource_data = b"\
\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
-\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x32\
-\x2e\x32\x38\x39\x32\x32\x20\x2d\x33\x39\x2e\x33\x31\x31\x33\x20\
-\x36\x2e\x33\x36\x37\x30\x32\x20\x2d\x34\x36\x2e\x32\x33\x38\x36\
-\x20\x31\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\
-\x39\x43\x20\x32\x39\x2e\x36\x36\x38\x37\x20\x2d\x36\x37\x2e\x35\
-\x35\x36\x38\x20\x35\x35\x2e\x32\x32\x39\x32\x20\x2d\x36\x30\x2e\
-\x36\x34\x32\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\
-\x35\x30\x32\x32\x43\x20\x35\x36\x2e\x36\x31\x33\x36\x20\x2d\x33\
-\x33\x2e\x34\x33\x38\x31\x20\x34\x39\x2e\x31\x31\x33\x32\x20\x2d\
-\x32\x36\x2e\x35\x39\x35\x39\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
-\x2d\x32\x32\x2e\x35\x32\x38\x31\x43\x20\x32\x35\x2e\x33\x39\x39\
-\x35\x20\x2d\x31\x35\x2e\x31\x35\x38\x32\x20\x37\x2e\x31\x39\x39\
-\x33\x35\x20\x2d\x31\x38\x2e\x31\x34\x33\x36\x20\x33\x2e\x39\x35\
-\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\
-\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\
-\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
+\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x4c\x20\x31\
+\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\x39\x4c\
+\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\x35\x30\x32\
+\x32\x4c\x20\x34\x30\x2e\x36\x37\x39\x34\x20\x2d\x32\x32\x2e\x35\
+\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\
\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
-\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\
-\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
-\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
-\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
-\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\
-\x35\x37\x33\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\
-\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
-\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
-\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\
-\x39\x30\x33\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\
-\x33\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\
-\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
-\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\
-\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
-\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
-\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\
-\x36\x2e\x31\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\
-\x35\x30\x32\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\
-\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
-\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\
-\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\
-\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
-\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\
-\x27\x34\x30\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\
-\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
-\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\
-\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
-\x73\x76\x67\x3e\
-\x00\x00\x03\xeb\
+\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\
+\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\
+\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\
+\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
+\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\
+\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\x35\x27\x20\x63\x79\
+\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\
+\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
+\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\
+\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\x36\x27\x20\x63\x79\
+\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\x20\x66\x69\x6c\x6c\
+\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\
+\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
+\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\
+\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\
+\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\
+\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
+\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\x35\x32\x33\x27\x20\
+\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\x32\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\
+\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\
+\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\
+\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\
+\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\x2e\x36\x37\x39\x34\
+\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\x20\
+\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\
+\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x01\x69\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
+\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
+\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
+\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
+\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
+\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
+\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
+\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
+\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
+\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
+\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
+\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
+\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
+\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
+\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
+\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x52\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -116,141 +163,215 @@ qt_resource_data = b"\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x32\x35\x36\x2c\x31\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\
-\x2d\x31\x34\x35\x2e\x37\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\
-\x31\x32\x38\x63\x36\x37\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\
-\x34\x2c\x31\x32\x38\x2c\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\
-\x2e\x39\x2c\x30\x2c\x31\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\
-\x32\x32\x34\x2d\x31\x32\x36\x2e\x36\x0d\x0a\x09\x09\x43\x34\x32\
-\x38\x2e\x32\x2c\x31\x39\x38\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\
-\x31\x32\x38\x2c\x32\x35\x36\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\
-\x36\x2c\x33\x34\x37\x2e\x33\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\
-\x38\x39\x2e\x36\x2d\x34\x31\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\
-\x33\x63\x30\x2d\x35\x30\x2e\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\
-\x2e\x33\x2c\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\
-\x36\x2c\x34\x31\x2c\x38\x39\x2e\x36\x2c\x39\x31\x2e\x33\x0d\x0a\
-\x09\x09\x43\x33\x34\x35\x2e\x36\x2c\x33\x30\x36\x2e\x34\x2c\x33\
-\x30\x35\x2e\x34\x2c\x33\x34\x37\x2e\x33\x2c\x32\x35\x36\x2c\x33\
-\x34\x37\x2e\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\
-\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\
-\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\x32\x2e\x39\x2d\x31\x35\
-\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\x37\x63\x2d\x32\x2e\x35\
-\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\x2d\x37\x2e\x36\x2d\x30\
-\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\x2d\x35\x32\x2e\x33\x2c\
-\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x63\x30\
-\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\x2c\x35\x33\x2e\x33\x2c\
-\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0d\x0a\x09\x09\x09\x73\x35\
-\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\x2e\x33\x2d\x35\x33\
-\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\x32\x2d\x34\x2e\x36\
-\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\x2e\x35\x2c\x34\x2e\
-\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\x31\x39\x2e\x38\x2c\
-\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\x35\x36\x2c\x32\x35\
-\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\x2c\x32\x32\x34\x7a\
-\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\
-\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x05\xd4\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\
+\x32\x35\x36\x2e\x30\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\
+\x34\x38\x48\x37\x34\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\
+\x2c\x39\x36\x2c\x33\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\
+\x32\x2c\x31\x33\x38\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\
+\x36\x43\x33\x32\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\
+\x31\x39\x37\x2c\x34\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\
+\x31\x36\x68\x33\x36\x32\x2e\x36\x36\x38\x0d\x0a\x09\x43\x34\x36\
+\x30\x2e\x38\x30\x33\x2c\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\
+\x36\x2e\x38\x30\x32\x2c\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\
+\x33\x56\x31\x38\x36\x2e\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\
+\x33\x2e\x31\x39\x38\x2c\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\
+\x34\x2c\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\
+\x34\x34\x38\x2c\x33\x37\x33\x2e\x33\x33\x33\x0d\x0a\x09\x63\x30\
+\x2c\x35\x2e\x37\x38\x32\x2d\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\
+\x36\x36\x37\x2d\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
+\x37\x48\x37\x34\x2e\x36\x36\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\
+\x33\x38\x34\x2c\x36\x34\x2c\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\
+\x34\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x37\x36\x68\x33\x37\
+\x33\x2e\x33\x33\x34\x63\x35\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\
+\x2e\x36\x36\x36\x2c\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\
+\x36\x2c\x31\x30\x2e\x36\x36\x37\x0d\x0a\x09\x56\x33\x37\x33\x2e\
+\x33\x33\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
+\x0a\
+\x00\x00\x02\xf2\
\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
-\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
-\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
-\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
-\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
-\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\
-\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\
-\x34\x2e\x38\x39\x32\x36\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\x43\
-\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x34\x33\x2e\x39\x30\x33\
-\x32\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x2d\x34\x37\x2e\x33\x30\
-\x31\x37\x20\x33\x32\x2e\x31\x32\x20\x2d\x34\x37\x2e\x33\x30\x31\
-\x37\x43\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x2d\x34\x37\x2e\x33\
-\x30\x31\x37\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x34\x33\x2e\
-\x39\x30\x33\x32\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x33\x39\
-\x2e\x37\x31\x30\x39\x43\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\
-\x33\x35\x2e\x35\x31\x38\x35\x20\x31\x39\x2e\x35\x34\x33\x31\x20\
-\x2d\x33\x32\x2e\x31\x32\x20\x33\x32\x2e\x31\x32\x20\x2d\x33\x32\
-\x2e\x31\x32\x43\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x2d\x33\x32\
-\x2e\x31\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x33\x35\x2e\
-\x35\x31\x38\x35\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x33\x39\
-\x2e\x37\x31\x30\x39\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\
-\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\
-\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\
-\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\
-\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\
-\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x33\x2e\
-\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
-\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
-\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\
-\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x36\x2e\x34\x30\x39\x34\
-\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x70\x61\x74\
-\x68\x20\x64\x3d\x27\x4d\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\
-\x33\x39\x2e\x37\x31\x30\x39\x4c\x20\x39\x2e\x33\x34\x37\x34\x32\
-\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x4c\x20\x39\x2e\x33\x34\x37\
-\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x43\x20\x39\x2e\x33\
-\x34\x37\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x20\x39\x2e\
-\x33\x34\x37\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x20\x39\
-\x2e\x33\x34\x37\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x43\
-\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x35\x2e\x31\x35\x35\x31\
-\x31\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x2d\x31\x2e\x37\x35\x36\
-\x35\x36\x20\x33\x32\x2e\x31\x32\x20\x2d\x31\x2e\x37\x35\x36\x35\
-\x36\x43\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x2d\x31\x2e\x37\x35\
-\x36\x35\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x35\x2e\x31\
-\x35\x35\x31\x31\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x39\x2e\
-\x33\x34\x37\x34\x32\x4c\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\
-\x39\x2e\x33\x34\x37\x34\x32\x4c\x20\x35\x34\x2e\x38\x39\x32\x36\
-\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\x27\x20\x66\x69\x6c\x6c\x3d\
-\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\
-\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\
-\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\
-\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\
-\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\
-\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\
-\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\
-\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\
-\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\
-\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x36\x2e\x34\
-\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\
-\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\
-\x36\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\x43\x20\x35\x34\x2e\x38\
-\x39\x32\x36\x20\x2d\x35\x32\x2e\x32\x38\x37\x38\x20\x34\x34\x2e\
-\x36\x39\x36\x39\x20\x2d\x36\x32\x2e\x34\x38\x33\x34\x20\x33\x32\
-\x2e\x31\x32\x20\x2d\x36\x32\x2e\x34\x38\x33\x34\x43\x20\x31\x39\
-\x2e\x35\x34\x33\x31\x20\x2d\x36\x32\x2e\x34\x38\x33\x34\x20\x39\
-\x2e\x33\x34\x37\x34\x32\x20\x2d\x35\x32\x2e\x32\x38\x37\x38\x20\
-\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\
-\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\
-\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\
-\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
-\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\
-\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x77\x69\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\
-\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\
-\x76\x67\x3e\
-\x00\x00\x02\xb7\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\
+\x22\x20\x79\x3d\x22\x35\x31\x32\x70\x78\x22\x0d\x0a\x09\x20\x76\
+\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\
+\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\
+\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\
+\x20\x30\x29\x27\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x31\x30\x2c\x30\x2e\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\x2e\
+\x34\x2c\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\
+\x31\x30\x43\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\x2e\
+\x36\x39\x38\x2c\x31\x39\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\x36\
+\x63\x35\x2e\x33\x30\x31\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\x32\
+\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x30\x31\x0d\x0a\x09\x43\
+\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\
+\x31\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\
+\x30\x2c\x31\x37\x2e\x35\x39\x39\x63\x2d\x34\x2e\x31\x39\x37\x2c\
+\x30\x2d\x37\x2e\x36\x2d\x33\x2e\x34\x30\x32\x2d\x37\x2e\x36\x2d\
+\x37\x2e\x36\x53\x35\x2e\x38\x30\x32\x2c\x32\x2e\x34\x2c\x31\x30\
+\x2c\x32\x2e\x34\x63\x34\x2e\x31\x39\x37\x2c\x30\x2c\x37\x2e\x36\
+\x30\x31\x2c\x33\x2e\x34\x30\x32\x2c\x37\x2e\x36\x30\x31\x2c\x37\
+\x2e\x36\x0d\x0a\x09\x53\x31\x34\x2e\x31\x39\x37\x2c\x31\x37\x2e\
+\x35\x39\x39\x2c\x31\x30\x2c\x31\x37\x2e\x35\x39\x39\x7a\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
+\x0a\
+\x00\x00\x03\xc4\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4d\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\
+\x73\x73\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\
+\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
+\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\
+\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x79\x3d\x22\
+\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
+\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\x0a\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\
+\x2e\x34\x36\x37\x6c\x2d\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\
+\x39\x63\x30\x2e\x35\x37\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\
+\x39\x38\x2d\x32\x2e\x30\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\
+\x2e\x32\x31\x63\x30\x2d\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\
+\x31\x2d\x36\x2e\x33\x37\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\
+\x33\x37\x37\x0d\x0a\x09\x43\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\
+\x2c\x32\x2e\x31\x2c\x34\x2e\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\
+\x32\x38\x37\x63\x30\x2c\x33\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\
+\x31\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\
+\x33\x37\x37\x63\x31\x2e\x31\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\
+\x30\x2e\x33\x30\x39\x2c\x33\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\
+\x34\x6c\x33\x2e\x37\x39\x39\x2c\x33\x2e\x38\x30\x31\x0d\x0a\x09\
+\x63\x30\x2e\x33\x37\x32\x2c\x30\x2e\x33\x37\x31\x2c\x30\x2e\x39\
+\x37\x35\x2c\x30\x2e\x33\x37\x31\x2c\x31\x2e\x33\x34\x36\x2c\x30\
+\x6c\x30\x2e\x39\x34\x33\x2d\x30\x2e\x39\x34\x33\x43\x31\x38\x2e\
+\x30\x35\x31\x2c\x31\x36\x2e\x33\x30\x37\x2c\x31\x37\x2e\x39\x31\
+\x36\x2c\x31\x35\x2e\x38\x33\x38\x2c\x31\x37\x2e\x35\x34\x35\x2c\
+\x31\x35\x2e\x34\x36\x37\x7a\x20\x4d\x34\x2e\x30\x30\x34\x2c\x38\
+\x2e\x32\x38\x37\x0d\x0a\x09\x63\x30\x2d\x32\x2e\x33\x36\x36\x2c\
+\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\
+\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\x2e\x33\x36\x36\x2c\x30\x2c\
+\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\x30\x37\x2c\x34\x2e\x34\x37\
+\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\x2c\x32\x2e\x33\x36\x35\x2d\
+\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\x38\x33\x2d\x34\x2e\x32\x38\
+\x33\x2c\x34\x2e\x32\x38\x33\x0d\x0a\x09\x43\x36\x2e\x31\x31\x31\
+\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\x30\x34\x2c\x31\x30\x2e\
+\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x7a\
+\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0d\x0a\
+\x00\x00\x03\xf5\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
+\x64\x5f\x6c\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
+\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\
+\x32\x2c\x36\x2e\x37\x37\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x37\x2d\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
+\x2d\x30\x2e\x37\x31\x2c\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\
+\x36\x34\x31\x63\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\
+\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\
+\x37\x31\x37\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\
+\x0a\x09\x63\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\
+\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\
+\x30\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\
+\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\
+\x37\x4c\x39\x2c\x31\x30\x6c\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\
+\x30\x36\x43\x31\x31\x2e\x34\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\
+\x31\x31\x2e\x34\x39\x38\x2c\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\
+\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x7a\x0d\x0a\x09\x20\x4d\x31\
+\x30\x2c\x30\x2e\x34\x63\x2d\x35\x2e\x33\x30\x32\x2c\x30\x2d\x39\
+\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2d\x39\x2e\x36\x2c\x39\x2e\x36\
+\x63\x30\x2c\x35\x2e\x33\x30\x33\x2c\x34\x2e\x32\x39\x38\x2c\x39\
+\x2e\x36\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x73\x39\x2e\x36\x2d\x34\
+\x2e\x32\x39\x37\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x43\x31\x39\x2e\
+\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x32\x2c\x30\
+\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\
+\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x2d\x34\x2e\x36\x31\x35\x2c\
+\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2d\x38\x2e\x33\
+\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\
+\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\
+\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x34\x2e\x36\x31\x33\x2c\x30\
+\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\
+\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x38\x2e\x33\x35\
+\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\x34\x2e\x36\x31\x33\x2c\
+\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
+\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\
+\x67\x3e\x0d\x0a\
+\x00\x00\x02\x7d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -282,21 +403,377 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x35\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
-\x6e\x74\x73\x3d\x22\x34\x30\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\
-\x20\x33\x37\x35\x2e\x32\x30\x32\x2c\x31\x30\x37\x20\x32\x35\x36\
-\x2c\x32\x32\x36\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
-\x2c\x31\x30\x37\x20\x31\x30\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\
-\x20\x32\x32\x36\x2e\x32\x30\x32\x2c\x32\x35\x36\x20\x31\x30\x37\
-\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
-\x2c\x34\x30\x35\x20\x32\x35\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\
-\x20\x0d\x0a\x09\x09\x09\x33\x37\x35\x2e\x32\x30\x32\x2c\x34\x30\
-\x35\x20\x34\x30\x35\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x32\x38\
-\x35\x2e\x37\x39\x38\x2c\x32\x35\x36\x20\x09\x09\x22\x2f\x3e\x0d\
-\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\
+\x2c\x32\x37\x37\x2e\x33\x37\x35\x68\x32\x35\x39\x2e\x37\x30\x34\
+\x4c\x32\x32\x35\x2e\x30\x30\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\
+\x4c\x32\x35\x36\x2c\x34\x32\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\
+\x4c\x32\x35\x36\x2c\x38\x35\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\
+\x32\x39\x2e\x39\x32\x34\x6c\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\
+\x31\x39\x2e\x37\x30\x31\x48\x38\x35\x56\x32\x37\x37\x2e\x33\x37\
+\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x6c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x0d\x0a\x09\x09\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x31\x37\x38\
+\x2e\x38\x34\x36\x22\x20\x79\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\
+\x69\x78\x28\x2d\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\
+\x37\x31\x20\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\
+\x31\x20\x32\x32\x34\x2e\x33\x34\x37\x36\x20\x36\x33\x31\x2e\x31\
+\x34\x39\x38\x29\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\
+\x2e\x30\x38\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x35\
+\x34\x2e\x30\x34\x39\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\
+\x33\x39\x33\x6c\x2d\x34\x38\x2e\x31\x31\x35\x2d\x34\x38\x2e\x31\
+\x31\x34\x63\x2d\x31\x31\x2e\x37\x32\x33\x2d\x31\x31\x2e\x37\x32\
+\x34\x2d\x33\x31\x2e\x35\x35\x38\x2d\x31\x30\x2e\x38\x39\x36\x2d\
+\x34\x34\x2e\x33\x30\x34\x2c\x31\x2e\x38\x35\x6c\x2d\x34\x35\x2e\
+\x32\x30\x32\x2c\x34\x35\x2e\x32\x30\x33\x6c\x39\x30\x2e\x35\x36\
+\x39\x2c\x39\x30\x2e\x35\x36\x38\x6c\x34\x35\x2e\x32\x30\x32\x2d\
+\x34\x35\x2e\x32\x30\x32\x0d\x0a\x09\x09\x43\x34\x38\x32\x2e\x36\
+\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\x32\x2c\x34\x38\x33\x2e\x34\
+\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\x36\x2c\x34\x37\x31\x2e\x37\
+\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\
+\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\
+\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\x33\x2e\x32\x35\x32\x20\
+\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\x2e\x37\x33\x37\x2c\x34\
+\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\xaa\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\
+\x3d\x22\x32\x34\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
+\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\
+\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
+\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\
+\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\
+\x2c\x31\x34\x2e\x37\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\
+\x30\x2e\x34\x37\x34\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\
+\x34\x2d\x30\x2e\x32\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\
+\x30\x6c\x35\x2e\x33\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\
+\x37\x34\x38\x2c\x34\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\
+\x2e\x39\x32\x32\x2c\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\
+\x0d\x0a\x09\x63\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\
+\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\
+\x2c\x31\x2e\x34\x31\x32\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\
+\x33\x2e\x33\x37\x38\x2c\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\
+\x33\x2c\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\
+\x39\x39\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x0d\x0a\
+\x09\x43\x36\x2e\x32\x36\x39\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\
+\x2e\x39\x39\x34\x2c\x31\x34\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\
+\x2c\x31\x34\x2e\x37\x35\x7a\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\
+\x31\x34\x2e\x37\x34\x38\x4c\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\
+\x6c\x2d\x35\x2e\x30\x36\x2d\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\
+\x34\x31\x33\x2d\x30\x2e\x33\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\
+\x30\x2e\x33\x33\x2d\x31\x2e\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\
+\x0d\x0a\x09\x63\x2d\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\
+\x2d\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2c\x30\x2e\x30\x38\
+\x33\x2c\x31\x2e\x34\x31\x32\x4c\x31\x36\x2e\x39\x39\x35\x2c\x31\
+\x30\x6c\x2d\x33\x2e\x36\x35\x39\x2c\x33\x2e\x32\x35\x32\x63\x2d\
+\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\x2d\x30\x2e\x34\x35\
+\x2c\x30\x2e\x39\x39\x39\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\
+\x31\x32\x43\x31\x33\x2e\x34\x35\x2c\x31\x34\x2e\x38\x38\x37\x2c\
+\x31\x33\x2e\x37\x32\x35\x2c\x31\x35\x2c\x31\x34\x2c\x31\x35\x0d\
+\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\x2c\x31\x35\x2c\x31\x34\x2e\
+\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\x37\x2c\x31\x34\x2e\x36\x36\
+\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\x20\x4d\x39\x2e\x39\x38\x36\
+\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\x2d\x31\x32\x63\x30\x2e\x30\
+\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\x30\x2e\x32\x37\x37\x2d\x31\
+\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\x2d\x31\x2e\x31\x35\x31\x0d\
+\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\x30\x2e\x30\x39\x32\x2d\
+\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\x37\x2d\x31\x2e\x31\x35\
+\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\x31\x32\x63\x2d\x30\x2e\
+\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\x30\x2e\x32\x37\x37\x2c\
+\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\x2c\x31\x2e\x31\x35\x31\
+\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\x39\x39\x36\x2c\x38\x2e\
+\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\x30\x31\x2c\x31\x37\x0d\
+\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\x2c\x39\x2e\x39\x30\
+\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\x39\x38\x36\x2c\x31\
+\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\
+\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x36\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\
+\x22\x33\x39\x36\x2e\x37\x39\x35\x2c\x33\x39\x36\x2e\x38\x20\x33\
+\x32\x30\x2c\x33\x39\x36\x2e\x38\x20\x33\x32\x30\x2c\x34\x34\x38\
+\x20\x34\x34\x38\x2c\x34\x34\x38\x20\x34\x34\x38\x2c\x33\x32\x30\
+\x20\x33\x39\x36\x2e\x37\x39\x35\x2c\x33\x32\x30\x20\x09\x22\x2f\
+\x3e\x0d\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x33\x39\x36\x2e\x38\x2c\x31\x31\x35\x2e\x32\
+\x30\x35\x20\x33\x39\x36\x2e\x38\x2c\x31\x39\x32\x20\x34\x34\x38\
+\x2c\x31\x39\x32\x20\x34\x34\x38\x2c\x36\x34\x20\x33\x32\x30\x2c\
+\x36\x34\x20\x33\x32\x30\x2c\x31\x31\x35\x2e\x32\x30\x35\x20\x09\
+\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
+\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\x35\x2e\x32\x30\x35\x2c\x31\
+\x31\x35\x2e\x32\x20\x31\x39\x32\x2c\x31\x31\x35\x2e\x32\x20\x31\
+\x39\x32\x2c\x36\x34\x20\x36\x34\x2c\x36\x34\x20\x36\x34\x2c\x31\
+\x39\x32\x20\x31\x31\x35\x2e\x32\x30\x35\x2c\x31\x39\x32\x20\x09\
+\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
+\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\x35\x2e\x32\x2c\x33\x39\x36\
+\x2e\x37\x39\x35\x20\x31\x31\x35\x2e\x32\x2c\x33\x32\x30\x20\x36\
+\x34\x2c\x33\x32\x30\x20\x36\x34\x2c\x34\x34\x38\x20\x31\x39\x32\
+\x2c\x34\x34\x38\x20\x31\x39\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\
+\x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
+\x00\x00\x07\x80\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\
+\x2c\x32\x34\x39\x2e\x30\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\
+\x2e\x36\x37\x2c\x37\x2e\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\
+\x31\x31\x2e\x35\x38\x36\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\
+\x2e\x39\x32\x34\x2c\x32\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\
+\x63\x34\x2e\x35\x30\x33\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\
+\x2e\x36\x31\x37\x2c\x31\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\
+\x34\x0d\x0a\x09\x09\x63\x31\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\
+\x33\x2c\x33\x33\x2e\x33\x34\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\
+\x33\x33\x2e\x33\x34\x35\x2d\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\
+\x30\x2e\x38\x32\x32\x76\x2d\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\
+\x32\x34\x2e\x38\x33\x32\x2d\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\
+\x34\x38\x34\x2d\x34\x36\x2e\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\
+\x36\x0d\x0a\x09\x09\x63\x2d\x31\x35\x2e\x39\x33\x31\x2d\x32\x2e\
+\x36\x32\x34\x2d\x33\x39\x2e\x32\x35\x38\x2d\x33\x2e\x38\x32\x37\
+\x2d\x35\x35\x2e\x30\x38\x39\x2d\x33\x2e\x37\x34\x39\x63\x2d\x31\
+\x35\x2e\x38\x32\x39\x2c\x30\x2e\x30\x38\x36\x2d\x33\x30\x2e\x39\
+\x38\x31\x2c\x31\x2e\x34\x30\x34\x2d\x34\x34\x2e\x32\x37\x37\x2c\
+\x33\x2e\x37\x34\x39\x43\x31\x36\x37\x2e\x31\x34\x33\x2c\x37\x34\
+\x2e\x35\x37\x36\x2c\x31\x36\x30\x2c\x38\x38\x2e\x39\x32\x38\x2c\
+\x31\x36\x30\x2c\x31\x31\x35\x2e\x33\x35\x39\x56\x31\x34\x34\x68\
+\x39\x36\x0d\x0a\x09\x09\x76\x31\x36\x48\x31\x32\x38\x2e\x38\x32\
+\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\x30\x2d\x36\x34\x2e\x35\x33\
+\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\x36\x34\x2e\x38\x31\x33\x2c\
+\x39\x35\x2e\x32\x34\x32\x43\x36\x34\x2e\x30\x30\x35\x2c\x32\x35\
+\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\x32\x35\x35\x2e\x37\x34\x37\
+\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x39\x2e\x35\x32\x33\x2c\
+\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\x32\x2c\x32\x2e\x36\x38\x35\
+\x2c\x32\x37\x2e\x34\x30\x34\x0d\x0a\x09\x09\x43\x37\x34\x2e\x36\
+\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\x39\x39\x2e\x34\x35\x31\
+\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\x32\x2c\x33\x35\x32\x48\
+\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\x76\x2d\x34\x33\x2e\x32\
+\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\x2e\x32\x33\x38\x2c\x31\
+\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\x2e\x33\x33\x32\x2c\x31\
+\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\x35\x36\x7a\x20\x4d\
+\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x0d\
+\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\x30\x2d\x31\x37\x2e\
+\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\x37\x2e\x33\x38\x34\
+\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\x2e\x36\x36\x34\x2c\
+\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\x2c\x31\x37\x2e\x33\
+\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\x35\x37\x34\x2c\x30\
+\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\x35\x35\x2c\x31\x37\
+\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0d\x0a\x09\x09\x43\x32\
+\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\x31\x37\x2c\x32\
+\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x2c\x32\
+\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x7a\x22\
+\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\x33\x43\x34\
+\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\x2c\x34\x31\
+\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\x2e\x31\x38\
+\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\x36\x76\x33\
+\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\x35\x2d\x32\
+\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\x34\x39\x2e\
+\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0d\x0a\x09\x09\x63\x2d\
+\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\x34\x38\
+\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\x30\x2e\
+\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\x2e\x35\
+\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\x38\x34\
+\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\x31\x37\
+\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\x36\x30\
+\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\x2e\x32\
+\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0d\x0a\x09\x09\x76\x35\x34\
+\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\x34\
+\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\x34\
+\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\x37\
+\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\x30\
+\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\x32\
+\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\x32\
+\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\x34\
+\x2e\x34\x36\x33\x56\x33\x36\x38\x0d\x0a\x09\x09\x68\x2d\x39\x36\
+\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
+\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
+\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
+\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
+\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
+\x32\x35\x36\x0d\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\
+\x32\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\
+\x39\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\
+\x35\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\
+\x32\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\
+\x38\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\
+\x31\x37\x2e\x34\x0d\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\
+\x37\x2e\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\
+\x33\x38\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\
+\x37\x2c\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\
+\x2d\x31\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\
+\x39\x30\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\
+\x38\x2e\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\
+\x2e\x38\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0d\
+\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\xf7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\
+\x2c\x32\x32\x34\x48\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\
+\x31\x36\x2e\x39\x2d\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\
+\x32\x2d\x33\x30\x2e\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\
+\x32\x2c\x31\x33\x2e\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\
+\x32\x34\x48\x39\x34\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\
+\x2c\x36\x34\x2c\x32\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\
+\x0d\x0a\x09\x63\x30\x2c\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\
+\x33\x32\x2c\x33\x30\x2e\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\
+\x32\x39\x2e\x34\x63\x30\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\
+\x2c\x33\x30\x2e\x36\x2c\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\
+\x2e\x37\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\
+\x33\x30\x2e\x36\x56\x32\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\
+\x36\x2e\x39\x2c\x30\x2c\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\
+\x33\x30\x2e\x36\x2d\x33\x32\x0d\x0a\x09\x43\x34\x34\x38\x2c\x32\
+\x33\x38\x2e\x33\x2c\x34\x33\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\
+\x31\x37\x2e\x34\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\
\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x04\xa2\
+\x00\x00\x04\xd5\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
@@ -320,59 +797,62 @@ qt_resource_data = b"\
\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
-\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x34\
-\x2e\x31\x35\x35\x35\x36\x20\x2d\x33\x39\x2e\x32\x37\x34\x35\x20\
-\x36\x2e\x39\x38\x34\x37\x33\x20\x2d\x34\x36\x2e\x31\x30\x34\x37\
+\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x32\
+\x2e\x32\x38\x39\x32\x32\x20\x2d\x33\x39\x2e\x33\x31\x31\x33\x20\
+\x36\x2e\x33\x36\x37\x30\x32\x20\x2d\x34\x36\x2e\x32\x33\x38\x36\
\x20\x31\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\
-\x39\x43\x20\x32\x37\x2e\x34\x34\x31\x31\x20\x2d\x36\x37\x2e\x37\
-\x32\x36\x39\x20\x35\x33\x2e\x33\x30\x32\x31\x20\x2d\x36\x31\x2e\
-\x35\x34\x30\x35\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\
-\x2e\x35\x30\x32\x32\x43\x20\x35\x37\x2e\x36\x32\x37\x20\x2d\x33\
-\x32\x2e\x36\x35\x31\x39\x20\x35\x30\x2e\x35\x38\x35\x36\x20\x2d\
-\x32\x33\x2e\x35\x36\x32\x31\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
-\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
-\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
-\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
-\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
-\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
-\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
-\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
-\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\
-\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\
-\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\
-\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
-\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
-\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\
-\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\
-\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
-\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
-\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
-\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\
-\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\
-\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\
-\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\
-\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
-\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\
-\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\
-\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\
-\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\
-\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\
-\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\
-\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\
-\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
-\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
-\x3e\
+\x39\x43\x20\x32\x39\x2e\x36\x36\x38\x37\x20\x2d\x36\x37\x2e\x35\
+\x35\x36\x38\x20\x35\x35\x2e\x32\x32\x39\x32\x20\x2d\x36\x30\x2e\
+\x36\x34\x32\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\
+\x35\x30\x32\x32\x43\x20\x35\x36\x2e\x36\x31\x33\x36\x20\x2d\x33\
+\x33\x2e\x34\x33\x38\x31\x20\x34\x39\x2e\x31\x31\x33\x32\x20\x2d\
+\x32\x36\x2e\x35\x39\x35\x39\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
+\x2d\x32\x32\x2e\x35\x32\x38\x31\x43\x20\x32\x35\x2e\x33\x39\x39\
+\x35\x20\x2d\x31\x35\x2e\x31\x35\x38\x32\x20\x37\x2e\x31\x39\x39\
+\x33\x35\x20\x2d\x31\x38\x2e\x31\x34\x33\x36\x20\x33\x2e\x39\x35\
+\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\
+\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\
+\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
+\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\
+\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
+\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
+\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
+\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\
+\x35\x37\x33\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
+\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
+\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\
+\x39\x30\x33\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\
+\x33\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\
+\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\
+\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
+\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\
+\x36\x2e\x31\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\
+\x35\x30\x32\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\
+\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\
+\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\
+\x27\x34\x30\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\
+\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\
+\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\
\x00\x00\x04\x1c\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -441,77 +921,151 @@ qt_resource_data = b"\
\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x04\x4e\
+\x00\x00\x02\xc9\
\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
-\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
-\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
-\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
-\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
-\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
-\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
-\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x4c\x20\x31\
-\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\x39\x4c\
-\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\x35\x30\x32\
-\x32\x4c\x20\x34\x30\x2e\x36\x37\x39\x34\x20\x2d\x32\x32\x2e\x35\
-\x32\x38\x31\x4c\x20\x33\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\
-\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\
-\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
-\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\
-\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\
-\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\
-\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
-\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\
-\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\
-\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\x35\x27\x20\x63\
-\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\
-\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\
-\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\
-\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
-\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\
-\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\
-\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\x36\x27\x20\x63\
-\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\x20\x66\x69\x6c\
-\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\
-\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
+\x3d\x22\x34\x38\x30\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\
+\x30\x20\x33\x38\x34\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\
+\x36\x20\x32\x37\x36\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\
+\x38\x20\x32\x35\x36\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\
+\x20\x32\x33\x36\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\
+\x20\x31\x32\x38\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\
+\x20\x33\x32\x2c\x32\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\
+\x0d\x0a\x09\x31\x32\x38\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\
+\x37\x36\x20\x32\x33\x36\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\
+\x38\x34\x20\x32\x35\x36\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\
+\x38\x34\x20\x32\x37\x35\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\
+\x2e\x34\x2c\x32\x37\x35\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\
+\x2e\x38\x20\x33\x38\x34\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x22\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\
+\x20\x63\x79\x3d\x22\x32\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\
+\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x34\x30\x2c\x39\x36\x68\x2d\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\
+\x48\x31\x39\x32\x6c\x2d\x33\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\
+\x32\x32\x2e\x30\x39\x32\x2c\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\
+\x30\x38\x2d\x34\x30\x2c\x34\x30\x76\x32\x37\x32\x63\x30\x2c\x32\
+\x32\x2e\x30\x39\x32\x2c\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\
+\x34\x30\x2c\x34\x30\x68\x33\x36\x38\x63\x32\x32\x2e\x30\x39\x32\
+\x2c\x30\x2c\x34\x30\x2d\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\
+\x34\x30\x0d\x0a\x09\x09\x56\x31\x33\x36\x43\x34\x38\x30\x2c\x31\
+\x31\x33\x2e\x39\x30\x38\x2c\x34\x36\x32\x2e\x30\x39\x32\x2c\x39\
+\x36\x2c\x34\x34\x30\x2c\x39\x36\x7a\x20\x4d\x32\x35\x36\x2c\x33\
+\x39\x32\x63\x2d\x36\x31\x2e\x38\x35\x35\x2c\x30\x2d\x31\x31\x32\
+\x2d\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2d\x31\x31\x32\x73\
+\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2c\x31\x31\x32\x2d\x31\
+\x31\x32\x73\x31\x31\x32\x2c\x35\x30\x2e\x31\x34\x35\x2c\x31\x31\
+\x32\x2c\x31\x31\x32\x0d\x0a\x09\x09\x53\x33\x31\x37\x2e\x38\x35\
+\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\x2c\x33\x39\x32\x7a\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
+\x0a\
+\x00\x00\x02\xa1\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x53\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\
+\x79\x3d\x22\x35\x31\x32\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\
+\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\
+\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\
+\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\
+\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\
\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
-\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\
-\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\
-\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\
-\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\x35\x32\x33\x27\
-\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\x32\x27\x20\x66\
-\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\
-\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
-\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
-\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\x2e\x36\x37\x39\
-\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\
-\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
-\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\
+\x29\x27\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\
+\x35\x2e\x31\x37\x33\x2c\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\
+\x32\x2c\x32\x2c\x32\x2e\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\
+\x2c\x31\x2e\x31\x2c\x30\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\
+\x68\x31\x32\x63\x31\x2e\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\
+\x39\x2c\x32\x2d\x32\x56\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\
+\x37\x33\x2c\x32\x7a\x20\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\
+\x35\x34\x39\x2d\x30\x2e\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\
+\x0d\x0a\x09\x43\x36\x2e\x34\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\
+\x34\x39\x2c\x36\x2c\x38\x56\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\
+\x33\x2c\x34\x68\x2d\x32\x76\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\
+\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\
\x00\x00\x02\x7f\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -554,6 +1108,156 @@ qt_resource_data = b"\
\x2e\x39\x20\x33\x36\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0d\
\x0a\x09\x34\x31\x36\x2c\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\
\x20\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\xe6\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
+\x64\x5f\x72\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\
+\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
+\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\
+\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\
+\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
+\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\
+\x30\x4c\x38\x2e\x36\x39\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\
+\x2d\x30\x2e\x35\x31\x39\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\
+\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\
+\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\x0a\x09\x63\x30\x2e\x31\
+\x39\x36\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\
+\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\
+\x30\x37\x2c\x32\x2e\x38\x36\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\
+\x30\x2e\x31\x39\x39\x2d\x30\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\
+\x38\x2d\x30\x2e\x37\x31\x2c\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\
+\x30\x2e\x31\x39\x37\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\
+\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\
+\x20\x4d\x31\x30\x2c\x30\x2e\x34\x0d\x0a\x09\x63\x35\x2e\x33\x30\
+\x32\x2c\x30\x2c\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\
+\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\x2d\x34\x2e\
+\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x53\
+\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x33\x2c\x30\x2e\x34\x2c\x31\
+\x30\x43\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x34\x2e\x36\x39\
+\x38\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\
+\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x34\x2e\x36\x31\
+\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2c\x38\
+\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\
+\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\x38\x2e\x33\x35\x34\x2d\x38\
+\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x2d\x34\x2e\x36\x31\
+\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2d\x38\
+\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x2e\
+\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\x2c\x35\x2e\x33\x38\x35\
+\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\
+\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
+\x00\x00\x05\x27\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x31\x32\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
+\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
+\x35\x36\x2c\x36\x34\x43\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\
+\x2c\x36\x34\x2c\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\
+\x35\x36\x63\x30\x2c\x31\x30\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\
+\x34\x30\x31\x2c\x31\x39\x32\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\
+\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\
+\x36\x34\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\
+\x38\x2e\x35\x33\x31\x2d\x33\x2e\x31\x39\x38\x2d\x31\x36\x2d\x38\
+\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x33\x63\x2d\x35\x2e\x33\
+\x33\x33\x2d\x35\x2e\x33\x33\x34\x2d\x38\x2e\x35\x33\x31\x2d\x31\
+\x32\x2e\x38\x30\x33\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\
+\x33\x34\x63\x30\x2d\x31\x38\x2e\x31\x33\x35\x2c\x31\x33\x2e\x38\
+\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x68\x33\x38\x2e\x33\
+\x39\x36\x0d\x0a\x09\x09\x09\x63\x35\x38\x2e\x36\x36\x37\x2c\x30\
+\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x34\x38\x2c\x31\x30\x36\x2e\
+\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\x36\x36\x43\x34\x34\x38\x2c\
+\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\x36\x31\x2e\x36\x30\x34\x2c\
+\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\x7a\x20\x4d\x31\x33\x38\x2e\
+\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\
+\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\
+\x32\x0d\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
+\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x53\
+\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\x36\x2c\x31\x33\x38\x2e\
+\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\x32\x30\x32\x2e\x36\x36\
+\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\x2e\x31\x33\
+\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\
+\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\
+\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\
+\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\
+\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x32\x33\x34\x2e\x36\
+\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x32\x30\x2e\x38\
+\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x32\x30\x32\x2e\x36\
+\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\x33\x30\x39\
+\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\
+\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\
+\x2d\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\x31\x38\
+\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\
+\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\
+\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x33\x34\
+\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x33\x32\
+\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x33\x30\
+\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\
+\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0d\x0a\x09\x09\x09\
+\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\
+\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\
+\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\
+\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\
+\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\x35\x36\x2c\
+\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\x2f\x3e\x0d\
+\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x04\x64\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -672,7 +1376,7 @@ qt_resource_data = b"\
\x48\x39\x36\x76\x33\x32\x68\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\
\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
\x0a\
-\x00\x00\x02\x79\
+\x00\x00\x03\x4c\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -704,48 +1408,29 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x67\x3e\x0d\x0a\x09\x09\x09\x3c\x70\x6f\x6c\
-\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x38\x36\
-\x2e\x33\x30\x31\x2c\x33\x33\x39\x2e\x38\x39\x33\x20\x39\x36\x2c\
-\x32\x34\x39\x2e\x34\x36\x31\x20\x36\x34\x2c\x32\x37\x39\x2e\x39\
-\x36\x38\x20\x31\x38\x36\x2e\x33\x30\x31\x2c\x34\x30\x32\x20\x34\
-\x34\x38\x2c\x31\x34\x30\x2e\x35\x30\x36\x20\x34\x31\x36\x2c\x31\
-\x31\x30\x20\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x09\x3c\x2f\x67\
-\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x01\xdd\
-\x00\
-\x00\x06\xe4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\x13\x29\xff\
-\x61\xba\xb7\x4a\xec\x17\xc4\xd4\xa6\xa6\x51\xfd\x21\xcb\x52\x9a\
-\x58\x6a\xea\xaa\xa7\x0a\xc3\x16\x50\x28\x20\x58\xc0\xce\xaf\xef\
-\xee\x92\x54\x51\x95\xfa\x18\xfb\xb0\x33\xda\x79\x6f\xde\xbc\x65\
-\x24\xa6\xd7\xfb\xdf\x39\x74\xa2\x6e\xb2\xb2\x08\x10\x27\x0c\x81\
-\x28\xa2\x32\xce\x8a\x24\x40\xad\xfc\x85\xc7\xe8\xfa\xd3\xe5\xc5\
-\xf4\x1d\xc6\xb0\x12\x85\xa8\x43\x59\xd6\x3e\x7c\x8e\xcb\x9d\x80\
-\x75\x9e\xb7\x8d\x34\x25\xe0\x1e\x71\x08\xb7\xe1\xeb\x76\x05\xcb\
-\x7d\x55\xd6\x12\x36\x79\x9b\xe0\x75\x01\xc4\x14\xb7\xc3\x10\x1f\
-\x3c\xc2\x18\xcc\xda\x2c\x8f\x81\xbd\x07\xc0\xd8\xe8\x2f\xee\xe6\
-\xf7\x3f\x36\x4b\x68\xba\x04\x36\xdf\x66\x37\xeb\x39\x20\x4c\xe9\
-\x77\x77\x4e\xe9\xe2\x7e\x61\x24\x38\xe1\x94\x2e\x6f\x11\xa0\x54\
-\xca\xca\xa7\xb4\xef\x7b\xd2\xbb\xa4\xac\x13\xba\xaa\xc3\x2a\xcd\
-\xa2\x86\x2a\x22\xd5\x44\xd5\x44\x95\x18\xe7\x24\x96\x31\xd2\x33\
-\xb4\xf4\x8b\xa7\x72\x04\x59\x1c\xa0\x9b\xf0\x20\xea\x9f\xea\xa2\
-\xbe\x44\xd1\x04\xaf\x48\x3b\x8c\x31\x2d\xf5\x44\xf1\xf7\x79\x56\
-\x3c\xbc\x46\xe4\x93\xc9\x84\x1a\x54\x51\x03\xc4\xaa\x3d\x82\xc3\
-\x90\x2f\x2f\x2c\xe8\xb3\x58\xa6\x01\x1a\x71\x47\x03\xa9\xc8\x92\
-\x54\xfe\xbd\x76\x99\xe8\x67\xa5\xee\x02\x06\xaa\xa6\x0f\x82\x46\
-\x1e\x72\x11\x20\x51\x84\xbb\x5c\xe0\x5d\x18\x3d\x24\x75\xd9\x16\
-\xb1\x5f\x88\x1e\x5e\x30\x3f\x1a\x6f\x7e\x53\x85\x91\xa2\x57\xb5\
-\x68\x44\xdd\x09\xf3\xea\x44\x05\x6b\x88\xd6\xb4\x0a\x65\x0a\xea\
-\xd1\x5f\xb8\xc7\x6c\x3e\x72\x89\x1b\x31\xdb\x25\x1f\xb0\x6b\x7b\
-\x2a\xaa\xa3\x73\x8a\x47\x8c\x8c\x22\xac\x00\x9b\xe9\x22\x76\xf1\
-\x13\xdc\x0d\x10\x33\x98\xfb\xdc\xa0\x73\x6a\x00\xd3\xa2\x4b\xb6\
-\x51\xd4\x67\x6b\xe6\x3c\xea\x4f\x60\x59\xf4\x1f\x1f\xce\x78\x7c\
-\x16\x3e\xae\xb8\x77\x3a\x1f\x53\xfa\xff\x25\x39\x63\xfe\x26\xa6\
-\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x71\x6c\x49\x57\x6c\
-\xf2\x26\xa6\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x31\x2c\
-\xe9\x39\xaa\x7f\xb6\xca\x7f\x00\x99\x18\x96\x19\
+\x22\x49\x63\x6f\x6e\x5f\x32\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
+\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
+\x35\x36\x2c\x31\x35\x32\x63\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\
+\x30\x34\x2c\x34\x36\x2e\x38\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\
+\x34\x36\x2e\x38\x2c\x31\x30\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\
+\x73\x31\x30\x34\x2d\x34\x36\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\
+\x34\x53\x33\x31\x33\x2e\x32\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\
+\x31\x35\x32\x7a\x20\x4d\x32\x35\x36\x2c\x34\x38\x0d\x0a\x09\x09\
+\x09\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\
+\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\
+\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\
+\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\
+\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\
+\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\
+\x2e\x34\x0d\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\
+\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\x34\x2e\x38\x38\x33\x2d\x31\
+\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\x34\x53\x31\x36\x34\x2e\x34\
+\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\
+\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\
+\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\
+\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\
+\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x02\xfc\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -796,202 +1481,7 @@ qt_resource_data = b"\
\x2e\x33\x39\x39\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\x39\
\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\x7d\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\
-\x2c\x32\x37\x37\x2e\x33\x37\x35\x68\x32\x35\x39\x2e\x37\x30\x34\
-\x4c\x32\x32\x35\x2e\x30\x30\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\
-\x4c\x32\x35\x36\x2c\x34\x32\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\
-\x4c\x32\x35\x36\x2c\x38\x35\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\
-\x32\x39\x2e\x39\x32\x34\x6c\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\
-\x31\x39\x2e\x37\x30\x31\x48\x38\x35\x56\x32\x37\x37\x2e\x33\x37\
-\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xf7\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\
-\x2c\x32\x32\x34\x48\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\
-\x31\x36\x2e\x39\x2d\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\
-\x32\x2d\x33\x30\x2e\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\
-\x32\x2c\x31\x33\x2e\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\
-\x32\x34\x48\x39\x34\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\
-\x2c\x36\x34\x2c\x32\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\
-\x0d\x0a\x09\x63\x30\x2c\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\
-\x33\x32\x2c\x33\x30\x2e\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\
-\x32\x39\x2e\x34\x63\x30\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\
-\x2c\x33\x30\x2e\x36\x2c\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\
-\x2e\x37\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\
-\x33\x30\x2e\x36\x56\x32\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\
-\x36\x2e\x39\x2c\x30\x2c\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\
-\x33\x30\x2e\x36\x2d\x33\x32\x0d\x0a\x09\x43\x34\x34\x38\x2c\x32\
-\x33\x38\x2e\x33\x2c\x34\x33\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\
-\x31\x37\x2e\x34\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x26\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\
-\x38\x63\x2d\x37\x32\x2e\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\
-\x35\x39\x2e\x34\x30\x35\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\
-\x2d\x37\x32\x2e\x36\x30\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\
-\x33\x32\x2c\x31\x33\x32\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\
-\x30\x2c\x36\x39\x2e\x32\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\
-\x2e\x34\x30\x36\x2c\x33\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\
-\x32\x33\x34\x68\x31\x35\x34\x56\x38\x30\x0d\x0a\x09\x09\x6c\x2d\
-\x35\x31\x2e\x36\x39\x38\x2c\x35\x31\x2e\x37\x30\x32\x43\x33\x34\
-\x38\x2e\x34\x30\x36\x2c\x39\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\
-\x2e\x34\x30\x36\x2c\x38\x30\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\
-\x39\x36\x2e\x37\x39\x37\x2c\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\
-\x32\x30\x33\x2d\x31\x37\x36\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\
-\x39\x34\x2c\x31\x37\x36\x2c\x31\x37\x36\x2c\x31\x37\x36\x0d\x0a\
-\x09\x09\x63\x38\x31\x2e\x30\x34\x35\x2c\x30\x2c\x31\x34\x38\x2e\
-\x32\x38\x37\x2d\x35\x34\x2e\x31\x33\x34\x2c\x31\x36\x39\x2e\x34\
-\x30\x31\x2d\x31\x32\x38\x48\x33\x37\x38\x2e\x38\x35\x43\x33\x36\
-\x30\x2e\x31\x30\x35\x2c\x33\x35\x33\x2e\x35\x36\x31\x2c\x33\x31\
-\x31\x2e\x37\x31\x32\x2c\x33\x38\x38\x2c\x32\x35\x36\x2c\x33\x38\
-\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
-\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xf2\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
-\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
-\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
-\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
-\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\
-\x22\x20\x79\x3d\x22\x35\x31\x32\x70\x78\x22\x0d\x0a\x09\x20\x76\
-\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\
-\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\
-\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\
-\x20\x30\x29\x27\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x31\x30\x2c\x30\x2e\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\x2e\
-\x34\x2c\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\
-\x31\x30\x43\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\x2e\
-\x36\x39\x38\x2c\x31\x39\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\x36\
-\x63\x35\x2e\x33\x30\x31\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\x32\
-\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x30\x31\x0d\x0a\x09\x43\
-\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\
-\x31\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\
-\x30\x2c\x31\x37\x2e\x35\x39\x39\x63\x2d\x34\x2e\x31\x39\x37\x2c\
-\x30\x2d\x37\x2e\x36\x2d\x33\x2e\x34\x30\x32\x2d\x37\x2e\x36\x2d\
-\x37\x2e\x36\x53\x35\x2e\x38\x30\x32\x2c\x32\x2e\x34\x2c\x31\x30\
-\x2c\x32\x2e\x34\x63\x34\x2e\x31\x39\x37\x2c\x30\x2c\x37\x2e\x36\
-\x30\x31\x2c\x33\x2e\x34\x30\x32\x2c\x37\x2e\x36\x30\x31\x2c\x37\
-\x2e\x36\x0d\x0a\x09\x53\x31\x34\x2e\x31\x39\x37\x2c\x31\x37\x2e\
-\x35\x39\x39\x2c\x31\x30\x2c\x31\x37\x2e\x35\x39\x39\x7a\x22\x2f\
-\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
-\x0a\
-\x00\x00\x02\x7d\
+\x00\x00\x02\x79\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1023,139 +1513,93 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\
-\x37\x2c\x32\x33\x34\x2e\x36\x32\x35\x48\x31\x36\x37\x2e\x32\x39\
-\x36\x6c\x31\x31\x39\x2e\x37\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\
-\x32\x4c\x32\x35\x36\x2c\x38\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\
-\x31\x37\x31\x2c\x31\x37\x31\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\
-\x39\x2e\x39\x32\x34\x4c\x31\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\
-\x37\x2e\x33\x37\x35\x48\x34\x32\x37\x56\x32\x33\x34\x2e\x36\x32\
-\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x0c\
+\x22\x49\x63\x6f\x6e\x5f\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x67\x3e\x0d\x0a\x09\x09\x09\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x38\x36\
+\x2e\x33\x30\x31\x2c\x33\x33\x39\x2e\x38\x39\x33\x20\x39\x36\x2c\
+\x32\x34\x39\x2e\x34\x36\x31\x20\x36\x34\x2c\x32\x37\x39\x2e\x39\
+\x36\x38\x20\x31\x38\x36\x2e\x33\x30\x31\x2c\x34\x30\x32\x20\x34\
+\x34\x38\x2c\x31\x34\x30\x2e\x35\x30\x36\x20\x34\x31\x36\x2c\x31\
+\x31\x30\x20\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x09\x3c\x2f\x67\
+\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\xa2\
\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
+\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
-\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
-\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
-\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
-\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
-\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\
-\x2e\x34\x33\x35\x2c\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\
-\x30\x33\x2d\x31\x2e\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\
-\x2e\x36\x31\x2c\x31\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\
-\x35\x2d\x30\x2e\x36\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\
-\x34\x38\x36\x2c\x30\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0d\x0a\
-\x09\x63\x30\x2e\x36\x31\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\
-\x34\x38\x38\x2d\x30\x2e\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\
-\x30\x2e\x32\x37\x6c\x32\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\
-\x6c\x35\x2e\x39\x31\x31\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\
-\x30\x37\x2d\x30\x2e\x36\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\
-\x2e\x38\x35\x32\x2c\x31\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\
-\x0d\x0a\x09\x63\x30\x2e\x36\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\
-\x30\x2e\x38\x35\x34\x2c\x31\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\
-\x36\x2c\x31\x2e\x39\x32\x4c\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\
-\x33\x34\x63\x2d\x30\x2e\x32\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\
-\x30\x2e\x36\x36\x31\x2c\x30\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\
-\x2c\x30\x2e\x36\x35\x36\x43\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\
-\x39\x39\x38\x2c\x38\x2e\x33\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\
-\x2c\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x00\x6c\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
-\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
-\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\xc4\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4d\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\
-\x73\x73\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\
-\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
-\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\
-\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x79\x3d\x22\
-\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
-\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\x0a\x3c\x70\x61\
-\x74\x68\x20\x64\x3d\x22\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\
-\x2e\x34\x36\x37\x6c\x2d\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\
-\x39\x63\x30\x2e\x35\x37\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\
-\x39\x38\x2d\x32\x2e\x30\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\
-\x2e\x32\x31\x63\x30\x2d\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\
-\x31\x2d\x36\x2e\x33\x37\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\
-\x33\x37\x37\x0d\x0a\x09\x43\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\
-\x2c\x32\x2e\x31\x2c\x34\x2e\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\
-\x32\x38\x37\x63\x30\x2c\x33\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\
-\x31\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\
-\x33\x37\x37\x63\x31\x2e\x31\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\
-\x30\x2e\x33\x30\x39\x2c\x33\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\
-\x34\x6c\x33\x2e\x37\x39\x39\x2c\x33\x2e\x38\x30\x31\x0d\x0a\x09\
-\x63\x30\x2e\x33\x37\x32\x2c\x30\x2e\x33\x37\x31\x2c\x30\x2e\x39\
-\x37\x35\x2c\x30\x2e\x33\x37\x31\x2c\x31\x2e\x33\x34\x36\x2c\x30\
-\x6c\x30\x2e\x39\x34\x33\x2d\x30\x2e\x39\x34\x33\x43\x31\x38\x2e\
-\x30\x35\x31\x2c\x31\x36\x2e\x33\x30\x37\x2c\x31\x37\x2e\x39\x31\
-\x36\x2c\x31\x35\x2e\x38\x33\x38\x2c\x31\x37\x2e\x35\x34\x35\x2c\
-\x31\x35\x2e\x34\x36\x37\x7a\x20\x4d\x34\x2e\x30\x30\x34\x2c\x38\
-\x2e\x32\x38\x37\x0d\x0a\x09\x63\x30\x2d\x32\x2e\x33\x36\x36\x2c\
-\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\
-\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\x2e\x33\x36\x36\x2c\x30\x2c\
-\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\x30\x37\x2c\x34\x2e\x34\x37\
-\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\x2c\x32\x2e\x33\x36\x35\x2d\
-\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\x38\x33\x2d\x34\x2e\x32\x38\
-\x33\x2c\x34\x2e\x32\x38\x33\x0d\x0a\x09\x43\x36\x2e\x31\x31\x31\
-\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\x30\x34\x2c\x31\x30\x2e\
-\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x7a\
-\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
-\x3e\x0d\x0a\
+\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
+\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
+\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
+\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
+\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
+\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x34\
+\x2e\x31\x35\x35\x35\x36\x20\x2d\x33\x39\x2e\x32\x37\x34\x35\x20\
+\x36\x2e\x39\x38\x34\x37\x33\x20\x2d\x34\x36\x2e\x31\x30\x34\x37\
+\x20\x31\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\
+\x39\x43\x20\x32\x37\x2e\x34\x34\x31\x31\x20\x2d\x36\x37\x2e\x37\
+\x32\x36\x39\x20\x35\x33\x2e\x33\x30\x32\x31\x20\x2d\x36\x31\x2e\
+\x35\x34\x30\x35\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\
+\x2e\x35\x30\x32\x32\x43\x20\x35\x37\x2e\x36\x32\x37\x20\x2d\x33\
+\x32\x2e\x36\x35\x31\x39\x20\x35\x30\x2e\x35\x38\x35\x36\x20\x2d\
+\x32\x33\x2e\x35\x36\x32\x31\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
+\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
+\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
+\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
+\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
+\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
+\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\
+\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\
+\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
+\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
+\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\
+\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\
+\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
+\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
+\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
+\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\
+\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\
+\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\
+\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\
+\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
+\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\
+\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\
+\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\
+\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\
+\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\
+\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\
+\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\
+\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\
\x00\x00\x04\xca\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -1235,13 +1679,13 @@ qt_resource_data = b"\
\x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
\x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\xaa\
+\x00\x00\x03\x26\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
@@ -1253,65 +1697,41 @@ qt_resource_data = b"\
\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\
-\x3d\x22\x32\x34\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
-\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
-\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
-\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
-\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\
-\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
-\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\
-\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\
-\x2c\x31\x34\x2e\x37\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\
-\x30\x2e\x34\x37\x34\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\
-\x34\x2d\x30\x2e\x32\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\
-\x30\x6c\x35\x2e\x33\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\
-\x37\x34\x38\x2c\x34\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\
-\x2e\x39\x32\x32\x2c\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\
-\x0d\x0a\x09\x63\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\
-\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\
-\x2c\x31\x2e\x34\x31\x32\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\
-\x33\x2e\x33\x37\x38\x2c\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\
-\x33\x2c\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\
-\x39\x39\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x0d\x0a\
-\x09\x43\x36\x2e\x32\x36\x39\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\
-\x2e\x39\x39\x34\x2c\x31\x34\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\
-\x2c\x31\x34\x2e\x37\x35\x7a\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\
-\x31\x34\x2e\x37\x34\x38\x4c\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\
-\x6c\x2d\x35\x2e\x30\x36\x2d\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\
-\x34\x31\x33\x2d\x30\x2e\x33\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\
-\x30\x2e\x33\x33\x2d\x31\x2e\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\
-\x0d\x0a\x09\x63\x2d\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\
-\x2d\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2c\x30\x2e\x30\x38\
-\x33\x2c\x31\x2e\x34\x31\x32\x4c\x31\x36\x2e\x39\x39\x35\x2c\x31\
-\x30\x6c\x2d\x33\x2e\x36\x35\x39\x2c\x33\x2e\x32\x35\x32\x63\x2d\
-\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\x2d\x30\x2e\x34\x35\
-\x2c\x30\x2e\x39\x39\x39\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\
-\x31\x32\x43\x31\x33\x2e\x34\x35\x2c\x31\x34\x2e\x38\x38\x37\x2c\
-\x31\x33\x2e\x37\x32\x35\x2c\x31\x35\x2c\x31\x34\x2c\x31\x35\x0d\
-\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\x2c\x31\x35\x2c\x31\x34\x2e\
-\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\x37\x2c\x31\x34\x2e\x36\x36\
-\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\x20\x4d\x39\x2e\x39\x38\x36\
-\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\x2d\x31\x32\x63\x30\x2e\x30\
-\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\x30\x2e\x32\x37\x37\x2d\x31\
-\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\x2d\x31\x2e\x31\x35\x31\x0d\
-\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\x30\x2e\x30\x39\x32\x2d\
-\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\x37\x2d\x31\x2e\x31\x35\
-\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\x31\x32\x63\x2d\x30\x2e\
-\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\x30\x2e\x32\x37\x37\x2c\
-\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\x2c\x31\x2e\x31\x35\x31\
-\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\x39\x39\x36\x2c\x38\x2e\
-\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\x30\x31\x2c\x31\x37\x0d\
-\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\x2c\x39\x2e\x39\x30\
-\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\x39\x38\x36\x2c\x31\
-\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\
-\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\
+\x38\x63\x2d\x37\x32\x2e\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\
+\x35\x39\x2e\x34\x30\x35\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\
+\x2d\x37\x32\x2e\x36\x30\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\
+\x33\x32\x2c\x31\x33\x32\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\
+\x30\x2c\x36\x39\x2e\x32\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\
+\x2e\x34\x30\x36\x2c\x33\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\
+\x32\x33\x34\x68\x31\x35\x34\x56\x38\x30\x0d\x0a\x09\x09\x6c\x2d\
+\x35\x31\x2e\x36\x39\x38\x2c\x35\x31\x2e\x37\x30\x32\x43\x33\x34\
+\x38\x2e\x34\x30\x36\x2c\x39\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\
+\x2e\x34\x30\x36\x2c\x38\x30\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\
+\x39\x36\x2e\x37\x39\x37\x2c\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\
+\x32\x30\x33\x2d\x31\x37\x36\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\
+\x39\x34\x2c\x31\x37\x36\x2c\x31\x37\x36\x2c\x31\x37\x36\x0d\x0a\
+\x09\x09\x63\x38\x31\x2e\x30\x34\x35\x2c\x30\x2c\x31\x34\x38\x2e\
+\x32\x38\x37\x2d\x35\x34\x2e\x31\x33\x34\x2c\x31\x36\x39\x2e\x34\
+\x30\x31\x2d\x31\x32\x38\x48\x33\x37\x38\x2e\x38\x35\x43\x33\x36\
+\x30\x2e\x31\x30\x35\x2c\x33\x35\x33\x2e\x35\x36\x31\x2c\x33\x31\
+\x31\x2e\x37\x31\x32\x2c\x33\x38\x38\x2c\x32\x35\x36\x2c\x33\x38\
+\x38\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
\x00\x00\x05\xca\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -1407,99 +1827,7 @@ qt_resource_data = b"\
\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\x2c\x34\x35\
\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\x2f\x3e\x0d\
\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xa1\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x53\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\
-\x79\x3d\x22\x35\x31\x32\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\
-\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\
-\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\
-\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\
-\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\
-\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
-\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\
-\x29\x27\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\
-\x35\x2e\x31\x37\x33\x2c\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\
-\x32\x2c\x32\x2c\x32\x2e\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\
-\x2c\x31\x2e\x31\x2c\x30\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\
-\x68\x31\x32\x63\x31\x2e\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\
-\x39\x2c\x32\x2d\x32\x56\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\
-\x37\x33\x2c\x32\x7a\x20\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\
-\x35\x34\x39\x2d\x30\x2e\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\
-\x0d\x0a\x09\x43\x36\x2e\x34\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\
-\x34\x39\x2c\x36\x2c\x38\x56\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\
-\x33\x2c\x34\x68\x2d\x32\x76\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\
-\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\
-\x00\x00\x02\xc9\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
-\x3d\x22\x34\x38\x30\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\
-\x30\x20\x33\x38\x34\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\
-\x36\x20\x32\x37\x36\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\
-\x38\x20\x32\x35\x36\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\
-\x20\x32\x33\x36\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\
-\x20\x31\x32\x38\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\
-\x20\x33\x32\x2c\x32\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\
-\x0d\x0a\x09\x31\x32\x38\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\
-\x37\x36\x20\x32\x33\x36\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\
-\x38\x34\x20\x32\x35\x36\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\
-\x38\x34\x20\x32\x37\x35\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\
-\x2e\x34\x2c\x32\x37\x35\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\
-\x2e\x38\x20\x33\x38\x34\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0d\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x07\x80\
+\x00\x00\x02\x7d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1530,337 +1858,89 @@ qt_resource_data = b"\
\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\
-\x2c\x32\x34\x39\x2e\x30\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\
-\x2e\x36\x37\x2c\x37\x2e\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\
-\x31\x31\x2e\x35\x38\x36\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\
-\x2e\x39\x32\x34\x2c\x32\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\
-\x63\x34\x2e\x35\x30\x33\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\
-\x2e\x36\x31\x37\x2c\x31\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\
-\x34\x0d\x0a\x09\x09\x63\x31\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\
-\x33\x2c\x33\x33\x2e\x33\x34\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\
-\x33\x33\x2e\x33\x34\x35\x2d\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\
-\x30\x2e\x38\x32\x32\x76\x2d\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\
-\x32\x34\x2e\x38\x33\x32\x2d\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\
-\x34\x38\x34\x2d\x34\x36\x2e\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\
-\x36\x0d\x0a\x09\x09\x63\x2d\x31\x35\x2e\x39\x33\x31\x2d\x32\x2e\
-\x36\x32\x34\x2d\x33\x39\x2e\x32\x35\x38\x2d\x33\x2e\x38\x32\x37\
-\x2d\x35\x35\x2e\x30\x38\x39\x2d\x33\x2e\x37\x34\x39\x63\x2d\x31\
-\x35\x2e\x38\x32\x39\x2c\x30\x2e\x30\x38\x36\x2d\x33\x30\x2e\x39\
-\x38\x31\x2c\x31\x2e\x34\x30\x34\x2d\x34\x34\x2e\x32\x37\x37\x2c\
-\x33\x2e\x37\x34\x39\x43\x31\x36\x37\x2e\x31\x34\x33\x2c\x37\x34\
-\x2e\x35\x37\x36\x2c\x31\x36\x30\x2c\x38\x38\x2e\x39\x32\x38\x2c\
-\x31\x36\x30\x2c\x31\x31\x35\x2e\x33\x35\x39\x56\x31\x34\x34\x68\
-\x39\x36\x0d\x0a\x09\x09\x76\x31\x36\x48\x31\x32\x38\x2e\x38\x32\
-\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\x30\x2d\x36\x34\x2e\x35\x33\
-\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\x36\x34\x2e\x38\x31\x33\x2c\
-\x39\x35\x2e\x32\x34\x32\x43\x36\x34\x2e\x30\x30\x35\x2c\x32\x35\
-\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\x32\x35\x35\x2e\x37\x34\x37\
-\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x39\x2e\x35\x32\x33\x2c\
-\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\x32\x2c\x32\x2e\x36\x38\x35\
-\x2c\x32\x37\x2e\x34\x30\x34\x0d\x0a\x09\x09\x43\x37\x34\x2e\x36\
-\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\x39\x39\x2e\x34\x35\x31\
-\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\x32\x2c\x33\x35\x32\x48\
-\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\x76\x2d\x34\x33\x2e\x32\
-\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\x2e\x32\x33\x38\x2c\x31\
-\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\x2e\x33\x33\x32\x2c\x31\
-\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\x35\x36\x7a\x20\x4d\
-\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x0d\
-\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\x30\x2d\x31\x37\x2e\
-\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\x37\x2e\x33\x38\x34\
-\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\x2e\x36\x36\x34\x2c\
-\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\x2c\x31\x37\x2e\x33\
-\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\x35\x37\x34\x2c\x30\
-\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\x35\x35\x2c\x31\x37\
-\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0d\x0a\x09\x09\x43\x32\
-\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\x31\x37\x2c\x32\
-\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x2c\x32\
-\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x7a\x22\
-\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
-\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\x33\x43\x34\
-\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\x2c\x34\x31\
-\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\x2e\x31\x38\
-\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\x36\x76\x33\
-\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\x35\x2d\x32\
-\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\x34\x39\x2e\
-\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0d\x0a\x09\x09\x63\x2d\
-\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\x34\x38\
-\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\x30\x2e\
-\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\x2e\x35\
-\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\x38\x34\
-\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\x31\x37\
-\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\x36\x30\
-\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\x2e\x32\
-\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0d\x0a\x09\x09\x76\x35\x34\
-\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\x34\
-\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\x34\
-\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\x37\
-\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\x30\
-\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\x32\
-\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\x32\
-\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\x34\
-\x2e\x34\x36\x33\x56\x33\x36\x38\x0d\x0a\x09\x09\x68\x2d\x39\x36\
-\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
-\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
-\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
-\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
-\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
-\x32\x35\x36\x0d\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\
-\x32\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\
-\x39\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\
-\x35\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\
-\x32\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\
-\x38\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\
-\x31\x37\x2e\x34\x0d\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\
-\x37\x2e\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\
-\x33\x38\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\
-\x37\x2c\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\
-\x2d\x31\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\
-\x39\x30\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\
-\x38\x2e\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\
-\x2e\x38\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0d\
-\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\xe6\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\
+\x37\x2c\x32\x33\x34\x2e\x36\x32\x35\x48\x31\x36\x37\x2e\x32\x39\
+\x36\x6c\x31\x31\x39\x2e\x37\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\
+\x32\x4c\x32\x35\x36\x2c\x38\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\
+\x31\x37\x31\x2c\x31\x37\x31\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\
+\x39\x2e\x39\x32\x34\x4c\x31\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\
+\x37\x2e\x33\x37\x35\x48\x34\x32\x37\x56\x32\x33\x34\x2e\x36\x32\
+\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\x4e\
\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
-\x64\x5f\x72\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
+\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\
-\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
-\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
-\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\
-\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\
-\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
-\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
-\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\
-\x30\x4c\x38\x2e\x36\x39\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\
-\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\
-\x2d\x30\x2e\x35\x31\x39\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\
-\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\
-\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\
-\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\x0a\x09\x63\x30\x2e\x31\
-\x39\x36\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\
-\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\
-\x30\x37\x2c\x32\x2e\x38\x36\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\
-\x30\x2e\x31\x39\x39\x2d\x30\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\
-\x38\x2d\x30\x2e\x37\x31\x2c\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\
-\x30\x2e\x31\x39\x37\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\
-\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\
-\x20\x4d\x31\x30\x2c\x30\x2e\x34\x0d\x0a\x09\x63\x35\x2e\x33\x30\
-\x32\x2c\x30\x2c\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\
-\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\x2d\x34\x2e\
-\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x53\
-\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x33\x2c\x30\x2e\x34\x2c\x31\
-\x30\x43\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x34\x2e\x36\x39\
-\x38\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\
-\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x34\x2e\x36\x31\
-\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2c\x38\
-\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\
-\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\x38\x2e\x33\x35\x34\x2d\x38\
-\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x2d\x34\x2e\x36\x31\
-\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2d\x38\
-\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x2e\
-\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\x2c\x35\x2e\x33\x38\x35\
-\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\
-\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
-\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x4c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x32\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
-\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
-\x35\x36\x2c\x31\x35\x32\x63\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\
-\x30\x34\x2c\x34\x36\x2e\x38\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\
-\x34\x36\x2e\x38\x2c\x31\x30\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\
-\x73\x31\x30\x34\x2d\x34\x36\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\
-\x34\x53\x33\x31\x33\x2e\x32\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\
-\x31\x35\x32\x7a\x20\x4d\x32\x35\x36\x2c\x34\x38\x0d\x0a\x09\x09\
-\x09\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\
-\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\
-\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\
-\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\
-\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\
-\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\
-\x2e\x34\x0d\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\
-\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\x34\x2e\x38\x38\x33\x2d\x31\
-\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\x34\x53\x31\x36\x34\x2e\x34\
-\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\
-\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\
-\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\
-\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\
-\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x22\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\
-\x20\x63\x79\x3d\x22\x32\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\
-\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
-\x34\x30\x2c\x39\x36\x68\x2d\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\
-\x48\x31\x39\x32\x6c\x2d\x33\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\
-\x32\x32\x2e\x30\x39\x32\x2c\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\
-\x30\x38\x2d\x34\x30\x2c\x34\x30\x76\x32\x37\x32\x63\x30\x2c\x32\
-\x32\x2e\x30\x39\x32\x2c\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\
-\x34\x30\x2c\x34\x30\x68\x33\x36\x38\x63\x32\x32\x2e\x30\x39\x32\
-\x2c\x30\x2c\x34\x30\x2d\x31\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\
-\x34\x30\x0d\x0a\x09\x09\x56\x31\x33\x36\x43\x34\x38\x30\x2c\x31\
-\x31\x33\x2e\x39\x30\x38\x2c\x34\x36\x32\x2e\x30\x39\x32\x2c\x39\
-\x36\x2c\x34\x34\x30\x2c\x39\x36\x7a\x20\x4d\x32\x35\x36\x2c\x33\
-\x39\x32\x63\x2d\x36\x31\x2e\x38\x35\x35\x2c\x30\x2d\x31\x31\x32\
-\x2d\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2d\x31\x31\x32\x73\
-\x35\x30\x2e\x31\x34\x35\x2d\x31\x31\x32\x2c\x31\x31\x32\x2d\x31\
-\x31\x32\x73\x31\x31\x32\x2c\x35\x30\x2e\x31\x34\x35\x2c\x31\x31\
-\x32\x2c\x31\x31\x32\x0d\x0a\x09\x09\x53\x33\x31\x37\x2e\x38\x35\
-\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\x2c\x33\x39\x32\x7a\x22\x2f\
-\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
-\x0a\
-\x00\x00\x03\xf5\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
-\x64\x5f\x6c\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
-\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\
-\x32\x2c\x36\x2e\x37\x37\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
-\x2e\x31\x39\x37\x2d\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
-\x2d\x30\x2e\x37\x31\x2c\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\
-\x36\x34\x31\x63\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\
-\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\
-\x37\x31\x37\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\
-\x0a\x09\x63\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\
-\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\
-\x30\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\
-\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\
-\x37\x4c\x39\x2c\x31\x30\x6c\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\
-\x30\x36\x43\x31\x31\x2e\x34\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\
-\x31\x31\x2e\x34\x39\x38\x2c\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\
-\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x7a\x0d\x0a\x09\x20\x4d\x31\
-\x30\x2c\x30\x2e\x34\x63\x2d\x35\x2e\x33\x30\x32\x2c\x30\x2d\x39\
-\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2d\x39\x2e\x36\x2c\x39\x2e\x36\
-\x63\x30\x2c\x35\x2e\x33\x30\x33\x2c\x34\x2e\x32\x39\x38\x2c\x39\
-\x2e\x36\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x73\x39\x2e\x36\x2d\x34\
-\x2e\x32\x39\x37\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x43\x31\x39\x2e\
-\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x32\x2c\x30\
-\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\
-\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x2d\x34\x2e\x36\x31\x35\x2c\
-\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2d\x38\x2e\x33\
-\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\
-\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\
-\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x34\x2e\x36\x31\x33\x2c\x30\
-\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\
-\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x38\x2e\x33\x35\
-\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\x34\x2e\x36\x31\x33\x2c\
-\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
-\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\
-\x67\x3e\x0d\x0a\
-\x00\x00\x03\x52\
+\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
+\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
+\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
+\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
+\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
+\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x4c\x20\x31\
+\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\x39\x4c\
+\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\x35\x30\x32\
+\x32\x4c\x20\x34\x30\x2e\x36\x37\x39\x34\x20\x2d\x32\x32\x2e\x35\
+\x32\x38\x31\x4c\x20\x33\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\
+\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\
+\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
+\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\
+\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\
+\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\
+\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
+\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\
+\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\
+\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\x35\x27\x20\x63\
+\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\
+\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\
+\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\
+\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
+\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\
+\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\
+\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\x36\x27\x20\x63\
+\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\x20\x66\x69\x6c\
+\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
+\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\
+\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\
+\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\x35\x32\x33\x27\
+\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\x32\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\
+\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
+\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
+\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\x2e\x36\x37\x39\
+\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\
+\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
+\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\xeb\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1887,35 +1967,44 @@ qt_resource_data = b"\
\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\
-\x32\x35\x36\x2e\x30\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\
-\x34\x38\x48\x37\x34\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\
-\x2c\x39\x36\x2c\x33\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\
-\x32\x2c\x31\x33\x38\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\
-\x36\x43\x33\x32\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\
-\x31\x39\x37\x2c\x34\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\
-\x31\x36\x68\x33\x36\x32\x2e\x36\x36\x38\x0d\x0a\x09\x43\x34\x36\
-\x30\x2e\x38\x30\x33\x2c\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\
-\x36\x2e\x38\x30\x32\x2c\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\
-\x33\x56\x31\x38\x36\x2e\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\
-\x33\x2e\x31\x39\x38\x2c\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\
-\x34\x2c\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\
-\x34\x34\x38\x2c\x33\x37\x33\x2e\x33\x33\x33\x0d\x0a\x09\x63\x30\
-\x2c\x35\x2e\x37\x38\x32\x2d\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\
-\x36\x36\x37\x2d\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
-\x37\x48\x37\x34\x2e\x36\x36\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\
-\x33\x38\x34\x2c\x36\x34\x2c\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\
-\x34\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x37\x36\x68\x33\x37\
-\x33\x2e\x33\x33\x34\x63\x35\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\
-\x2e\x36\x36\x36\x2c\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\
-\x36\x2c\x31\x30\x2e\x36\x36\x37\x0d\x0a\x09\x56\x33\x37\x33\x2e\
-\x33\x33\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
-\x0a\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x32\x35\x36\x2c\x31\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\
+\x2d\x31\x34\x35\x2e\x37\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\
+\x31\x32\x38\x63\x36\x37\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\
+\x34\x2c\x31\x32\x38\x2c\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\
+\x2e\x39\x2c\x30\x2c\x31\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\
+\x32\x32\x34\x2d\x31\x32\x36\x2e\x36\x0d\x0a\x09\x09\x43\x34\x32\
+\x38\x2e\x32\x2c\x31\x39\x38\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\
+\x31\x32\x38\x2c\x32\x35\x36\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\
+\x36\x2c\x33\x34\x37\x2e\x33\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\
+\x38\x39\x2e\x36\x2d\x34\x31\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\
+\x33\x63\x30\x2d\x35\x30\x2e\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\
+\x2e\x33\x2c\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\
+\x36\x2c\x34\x31\x2c\x38\x39\x2e\x36\x2c\x39\x31\x2e\x33\x0d\x0a\
+\x09\x09\x43\x33\x34\x35\x2e\x36\x2c\x33\x30\x36\x2e\x34\x2c\x33\
+\x30\x35\x2e\x34\x2c\x33\x34\x37\x2e\x33\x2c\x32\x35\x36\x2c\x33\
+\x34\x37\x2e\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\
+\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\
+\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\x32\x2e\x39\x2d\x31\x35\
+\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\x37\x63\x2d\x32\x2e\x35\
+\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\x2d\x37\x2e\x36\x2d\x30\
+\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\x2d\x35\x32\x2e\x33\x2c\
+\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x63\x30\
+\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\x2c\x35\x33\x2e\x33\x2c\
+\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0d\x0a\x09\x09\x09\x73\x35\
+\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\x2e\x33\x2d\x35\x33\
+\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\x32\x2d\x34\x2e\x36\
+\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\x2e\x35\x2c\x34\x2e\
+\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\x31\x39\x2e\x38\x2c\
+\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\x35\x36\x2c\x32\x35\
+\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\x2c\x32\x32\x34\x7a\
+\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\
+\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x03\x7c\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -1974,6 +2063,66 @@ qt_resource_data = b"\
\x20\x2d\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\
\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x00\x6c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
+\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
+\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\x0c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
+\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
+\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
+\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
+\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
+\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\
+\x2e\x34\x33\x35\x2c\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\
+\x30\x33\x2d\x31\x2e\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\
+\x2e\x36\x31\x2c\x31\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\
+\x35\x2d\x30\x2e\x36\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\
+\x34\x38\x36\x2c\x30\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0d\x0a\
+\x09\x63\x30\x2e\x36\x31\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\
+\x34\x38\x38\x2d\x30\x2e\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\
+\x30\x2e\x32\x37\x6c\x32\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\
+\x6c\x35\x2e\x39\x31\x31\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\
+\x30\x37\x2d\x30\x2e\x36\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\
+\x2e\x38\x35\x32\x2c\x31\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\
+\x0d\x0a\x09\x63\x30\x2e\x36\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\
+\x30\x2e\x38\x35\x34\x2c\x31\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\
+\x36\x2c\x31\x2e\x39\x32\x4c\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\
+\x33\x34\x63\x2d\x30\x2e\x32\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\
+\x30\x2e\x36\x36\x31\x2c\x30\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\
+\x2c\x30\x2e\x36\x35\x36\x43\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\
+\x39\x39\x38\x2c\x38\x2e\x33\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\
+\x2c\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x03\x46\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -2029,250 +2178,7 @@ qt_resource_data = b"\
\x34\x35\x31\x2e\x35\x2c\x34\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\
\x35\x2c\x33\x38\x36\x2e\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\
\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\x21\
-\x00\
-\x00\x07\xaf\x78\x9c\xdd\x55\x4d\x6f\x9c\x30\x10\xbd\xf7\x57\x4c\
-\xd5\x83\xdb\x03\xc6\xdf\x86\x28\x24\x52\x57\xea\x29\xbd\x25\x97\
-\xde\x68\xf0\x82\x9b\x5d\x58\x01\x5d\xb6\xff\xbe\x66\xd7\x60\x4a\
-\xaa\xf4\x92\x43\x15\x90\x30\xf3\x18\xbf\x99\xe7\xf1\x98\xeb\xdb\
-\xd3\x7e\x07\x47\xd3\x76\xb6\xa9\x33\x44\x31\x41\x60\xea\xc7\xa6\
-\xb0\x75\x99\xa1\x87\xfb\x2f\x51\x82\x6e\x6f\xde\x5d\xbf\x8f\x22\
-\xb8\xaf\x6c\x07\x5b\xbb\x33\x30\xe4\x1d\x94\xa6\x36\x6d\xde\x9b\
-\x02\xbe\xff\x82\xe2\x68\xbb\x63\xb9\x07\x86\x13\x88\x22\xe7\xef\
-\xac\x25\x2b\x45\xe0\xe2\xd4\x5d\x86\xaa\xbe\x3f\x5c\xc5\xf1\x30\
-\x0c\x78\xe0\xb8\x69\xcb\x98\x11\x42\x62\xe7\xef\x5d\xae\x4e\x3b\
-\x5b\x3f\xfd\xcd\x91\xa6\x69\x1a\x9f\xbf\x22\x18\x6c\xd1\x57\x19\
-\x52\x1c\x3b\x50\x1d\x7a\x04\x95\xb1\x65\xd5\x4f\x90\x1e\xa1\xa3\
-\x35\xc3\xe7\xe6\x94\x21\xa9\xb0\x20\xa9\x00\xc9\x71\x22\x13\x0e\
-\x7e\x9a\x1f\x35\x72\x09\x97\x60\x8b\x0c\x1d\xf2\xd2\xd0\x8b\xd9\
-\xb7\x79\xdd\x6d\x9b\x76\x9f\xa1\x7d\xde\xb7\xf6\xf4\x91\x38\x67\
-\xc5\x94\x00\x32\xde\x93\x31\x71\x53\xaa\x47\xf2\x4f\xe3\xec\x43\
-\xde\x57\xe0\xe8\xbe\x42\x8a\xb9\xd0\x82\x41\xc4\x38\x26\x94\xde\
-\x05\xc0\xbf\x3c\x47\x36\xcf\x90\x7f\x03\x8b\x39\x12\x53\x29\x29\
-\x05\x9a\x62\x29\x38\x85\x88\x62\x2d\x95\x54\xc0\x19\xa6\x6c\x36\
-\x37\x20\x04\x56\xa9\x4a\x83\x83\x14\x38\x49\x99\x0a\x14\x33\x30\
-\xe7\xfa\x02\x32\x09\x9c\x01\xae\xb0\xd2\x42\x6e\x02\x22\x08\x4e\
-\x94\x4a\x42\x64\xf7\xc2\x94\x14\x53\x6a\xde\xdc\x84\xdc\x27\x87\
-\x59\xdd\x44\x31\x03\x3e\xca\xdd\x7a\xa5\xbf\xa1\x71\xab\xee\x32\
-\xf4\x41\x6f\xc7\x1b\xc5\xae\x2e\x71\xf9\x8a\xa5\x0d\x42\x53\xac\
-\x29\x49\x97\x42\xdd\xbe\x22\x9c\x2d\x84\x6a\xcc\x09\xd5\xb3\xd0\
-\x8b\xb9\x14\xea\x1d\x82\x50\x4f\x11\x84\x4e\x51\x02\x22\xb1\xa4\
-\x89\x0c\x24\x17\x76\x1f\xe3\x3c\x2c\xaa\x7c\x81\x43\xd2\x7e\xf2\
-\x5a\xc5\xbc\x6e\x75\x53\x1b\x04\x5d\xdf\x36\x4f\xc6\xad\x22\x39\
-\x5f\x13\x10\xb9\x2e\x34\x8f\xf9\x21\x43\x6d\xf3\xb3\x2e\xfe\x80\
-\x7f\x34\xb6\x5e\xe3\x7b\xdb\x9b\x76\x67\xdd\xe0\x4e\x03\x82\x09\
-\xd7\x72\xfe\xe6\x5b\x99\xbb\x7c\x38\x65\xaf\x5f\xa7\xf5\x0a\xbe\
-\xe1\x1e\xf4\x0a\xdf\x5c\x09\x5f\x68\x35\xc9\x30\x4b\xf4\xe2\x4c\
-\x51\x0c\x8b\x84\xcf\x67\x8a\x37\x17\xad\x36\x39\x84\x6a\x79\x8a\
-\xf5\x46\xf9\x6f\x96\xf1\xf2\x70\xbf\xc8\x9b\xdf\xf9\x80\xe2\xe1\
-\
-\x00\x00\x01\x69\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
-\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
-\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
-\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
-\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
-\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
-\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
-\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
-\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
-\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
-\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
-\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
-\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
-\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
-\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
-\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
-\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
-\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
-\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\x3d\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
-\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
-\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
-\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
-\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
-\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
-\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
-\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x4c\x20\x31\
-\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\x39\x4c\
-\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\x35\x30\x32\
-\x32\x4c\x20\x34\x30\x2e\x36\x37\x39\x34\x20\x2d\x32\x32\x2e\x35\
-\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\
-\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
-\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\
-\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\
-\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\
-\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
-\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\
-\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
-\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\
-\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\x35\x27\x20\x63\x79\
-\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
-\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
-\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\
-\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
-\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\
-\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\x36\x27\x20\x63\x79\
-\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\x20\x66\x69\x6c\x6c\
-\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\
-\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
-\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\
-\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\
-\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\
-\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
-\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\x35\x32\x33\x27\x20\
-\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\x32\x27\x20\x66\x69\
-\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
-\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\
-\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\
-\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\x36\
-\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\x69\
-\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\x2e\x36\x37\x39\x34\
-\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\x20\
-\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\
-\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\
-\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\x6c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x0d\x0a\x09\x09\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x31\x37\x38\
-\x2e\x38\x34\x36\x22\x20\x79\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\
-\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\
-\x69\x78\x28\x2d\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\
-\x37\x31\x20\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\
-\x31\x20\x32\x32\x34\x2e\x33\x34\x37\x36\x20\x36\x33\x31\x2e\x31\
-\x34\x39\x38\x29\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\
-\x2e\x30\x38\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x35\
-\x34\x2e\x30\x34\x39\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\
-\x33\x39\x33\x6c\x2d\x34\x38\x2e\x31\x31\x35\x2d\x34\x38\x2e\x31\
-\x31\x34\x63\x2d\x31\x31\x2e\x37\x32\x33\x2d\x31\x31\x2e\x37\x32\
-\x34\x2d\x33\x31\x2e\x35\x35\x38\x2d\x31\x30\x2e\x38\x39\x36\x2d\
-\x34\x34\x2e\x33\x30\x34\x2c\x31\x2e\x38\x35\x6c\x2d\x34\x35\x2e\
-\x32\x30\x32\x2c\x34\x35\x2e\x32\x30\x33\x6c\x39\x30\x2e\x35\x36\
-\x39\x2c\x39\x30\x2e\x35\x36\x38\x6c\x34\x35\x2e\x32\x30\x32\x2d\
-\x34\x35\x2e\x32\x30\x32\x0d\x0a\x09\x09\x43\x34\x38\x32\x2e\x36\
-\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\x32\x2c\x34\x38\x33\x2e\x34\
-\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\x36\x2c\x34\x37\x31\x2e\x37\
-\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\
-\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\
-\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\x33\x2e\x32\x35\x32\x20\
-\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\x2e\x37\x33\x37\x2c\x34\
-\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x36\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\
-\x22\x33\x39\x36\x2e\x37\x39\x35\x2c\x33\x39\x36\x2e\x38\x20\x33\
-\x32\x30\x2c\x33\x39\x36\x2e\x38\x20\x33\x32\x30\x2c\x34\x34\x38\
-\x20\x34\x34\x38\x2c\x34\x34\x38\x20\x34\x34\x38\x2c\x33\x32\x30\
-\x20\x33\x39\x36\x2e\x37\x39\x35\x2c\x33\x32\x30\x20\x09\x22\x2f\
-\x3e\x0d\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
-\x6e\x74\x73\x3d\x22\x33\x39\x36\x2e\x38\x2c\x31\x31\x35\x2e\x32\
-\x30\x35\x20\x33\x39\x36\x2e\x38\x2c\x31\x39\x32\x20\x34\x34\x38\
-\x2c\x31\x39\x32\x20\x34\x34\x38\x2c\x36\x34\x20\x33\x32\x30\x2c\
-\x36\x34\x20\x33\x32\x30\x2c\x31\x31\x35\x2e\x32\x30\x35\x20\x09\
-\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
-\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\x35\x2e\x32\x30\x35\x2c\x31\
-\x31\x35\x2e\x32\x20\x31\x39\x32\x2c\x31\x31\x35\x2e\x32\x20\x31\
-\x39\x32\x2c\x36\x34\x20\x36\x34\x2c\x36\x34\x20\x36\x34\x2c\x31\
-\x39\x32\x20\x31\x31\x35\x2e\x32\x30\x35\x2c\x31\x39\x32\x20\x09\
-\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
-\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\x35\x2e\x32\x2c\x33\x39\x36\
-\x2e\x37\x39\x35\x20\x31\x31\x35\x2e\x32\x2c\x33\x32\x30\x20\x36\
-\x34\x2c\x33\x32\x30\x20\x36\x34\x2c\x34\x34\x38\x20\x31\x39\x32\
-\x2c\x34\x34\x38\x20\x31\x39\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\
-\x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
-\x76\x67\x3e\x0d\x0a\
-\x00\x00\x05\x27\
+\x00\x00\x02\xb7\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -2304,57 +2210,18 @@ qt_resource_data = b"\
\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x31\x32\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
-\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
-\x35\x36\x2c\x36\x34\x43\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\
-\x2c\x36\x34\x2c\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\
-\x35\x36\x63\x30\x2c\x31\x30\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\
-\x34\x30\x31\x2c\x31\x39\x32\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\
-\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\
-\x36\x34\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\
-\x38\x2e\x35\x33\x31\x2d\x33\x2e\x31\x39\x38\x2d\x31\x36\x2d\x38\
-\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x33\x63\x2d\x35\x2e\x33\
-\x33\x33\x2d\x35\x2e\x33\x33\x34\x2d\x38\x2e\x35\x33\x31\x2d\x31\
-\x32\x2e\x38\x30\x33\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\
-\x33\x34\x63\x30\x2d\x31\x38\x2e\x31\x33\x35\x2c\x31\x33\x2e\x38\
-\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x68\x33\x38\x2e\x33\
-\x39\x36\x0d\x0a\x09\x09\x09\x63\x35\x38\x2e\x36\x36\x37\x2c\x30\
-\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x34\x38\x2c\x31\x30\x36\x2e\
-\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\x36\x36\x43\x34\x34\x38\x2c\
-\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\x36\x31\x2e\x36\x30\x34\x2c\
-\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\x7a\x20\x4d\x31\x33\x38\x2e\
-\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\x31\x38\x2e\x31\x33\x36\x2c\
-\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\
-\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\
-\x32\x0d\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
-\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x53\
-\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\x36\x2c\x31\x33\x38\x2e\
-\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\x32\x30\x32\x2e\x36\x36\
-\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\x2e\x31\x33\
-\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\
-\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\
-\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\
-\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\
-\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x32\x33\x34\x2e\x36\
-\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x32\x30\x2e\x38\
-\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x32\x30\x32\x2e\x36\
-\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\x33\x30\x39\
-\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\
-\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\
-\x2d\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\x31\x38\
-\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\
-\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\
-\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x33\x34\
-\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x33\x32\
-\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x33\x30\
-\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\
-\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0d\x0a\x09\x09\x09\
-\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\
-\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\
-\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\
-\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\
-\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\x35\x36\x2c\
-\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\x2f\x3e\x0d\
+\x22\x49\x63\x6f\x6e\x5f\x35\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x34\x30\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\
+\x20\x33\x37\x35\x2e\x32\x30\x32\x2c\x31\x30\x37\x20\x32\x35\x36\
+\x2c\x32\x32\x36\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
+\x2c\x31\x30\x37\x20\x31\x30\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\
+\x20\x32\x32\x36\x2e\x32\x30\x32\x2c\x32\x35\x36\x20\x31\x30\x37\
+\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
+\x2c\x34\x30\x35\x20\x32\x35\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\
+\x20\x0d\x0a\x09\x09\x09\x33\x37\x35\x2e\x32\x30\x32\x2c\x34\x30\
+\x35\x20\x34\x30\x35\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x32\x38\
+\x35\x2e\x37\x39\x38\x2c\x32\x35\x36\x20\x09\x09\x22\x2f\x3e\x0d\
\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
\x73\x76\x67\x3e\x0d\x0a\
\x00\x00\x01\x1c\
@@ -2377,6 +2244,139 @@ qt_resource_data = b"\
\x63\x2e\x35\x35\x20\x30\x20\x31\x20\x2e\x34\x35\x20\x31\x20\x31\
\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\x7a\x22\x20\x2f\x3e\x0a\x3c\
\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\xd4\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
+\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
+\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
+\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
+\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
+\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\
+\x34\x2e\x38\x39\x32\x36\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\x43\
+\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x34\x33\x2e\x39\x30\x33\
+\x32\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x2d\x34\x37\x2e\x33\x30\
+\x31\x37\x20\x33\x32\x2e\x31\x32\x20\x2d\x34\x37\x2e\x33\x30\x31\
+\x37\x43\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x2d\x34\x37\x2e\x33\
+\x30\x31\x37\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x34\x33\x2e\
+\x39\x30\x33\x32\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x33\x39\
+\x2e\x37\x31\x30\x39\x43\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\
+\x33\x35\x2e\x35\x31\x38\x35\x20\x31\x39\x2e\x35\x34\x33\x31\x20\
+\x2d\x33\x32\x2e\x31\x32\x20\x33\x32\x2e\x31\x32\x20\x2d\x33\x32\
+\x2e\x31\x32\x43\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x2d\x33\x32\
+\x2e\x31\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x33\x35\x2e\
+\x35\x31\x38\x35\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x33\x39\
+\x2e\x37\x31\x30\x39\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\
+\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\
+\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\
+\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\
+\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\
+\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x33\x2e\
+\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
+\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\
+\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x36\x2e\x34\x30\x39\x34\
+\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x27\x4d\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\
+\x33\x39\x2e\x37\x31\x30\x39\x4c\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x4c\x20\x39\x2e\x33\x34\x37\
+\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x43\x20\x39\x2e\x33\
+\x34\x37\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x20\x39\x2e\
+\x33\x34\x37\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x20\x39\
+\x2e\x33\x34\x37\x34\x32\x20\x2d\x39\x2e\x33\x34\x37\x34\x32\x43\
+\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x35\x2e\x31\x35\x35\x31\
+\x31\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x2d\x31\x2e\x37\x35\x36\
+\x35\x36\x20\x33\x32\x2e\x31\x32\x20\x2d\x31\x2e\x37\x35\x36\x35\
+\x36\x43\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x2d\x31\x2e\x37\x35\
+\x36\x35\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x35\x2e\x31\
+\x35\x35\x31\x31\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\x39\x2e\
+\x33\x34\x37\x34\x32\x4c\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x2d\
+\x39\x2e\x33\x34\x37\x34\x32\x4c\x20\x35\x34\x2e\x38\x39\x32\x36\
+\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\x27\x20\x66\x69\x6c\x6c\x3d\
+\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\
+\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\
+\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\
+\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\
+\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\
+\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\
+\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\
+\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x36\x2e\x34\
+\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\
+\x36\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\x43\x20\x35\x34\x2e\x38\
+\x39\x32\x36\x20\x2d\x35\x32\x2e\x32\x38\x37\x38\x20\x34\x34\x2e\
+\x36\x39\x36\x39\x20\x2d\x36\x32\x2e\x34\x38\x33\x34\x20\x33\x32\
+\x2e\x31\x32\x20\x2d\x36\x32\x2e\x34\x38\x33\x34\x43\x20\x31\x39\
+\x2e\x35\x34\x33\x31\x20\x2d\x36\x32\x2e\x34\x38\x33\x34\x20\x39\
+\x2e\x33\x34\x37\x34\x32\x20\x2d\x35\x32\x2e\x32\x38\x37\x38\x20\
+\x39\x2e\x33\x34\x37\x34\x32\x20\x2d\x33\x39\x2e\x37\x31\x30\x39\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\
+\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
+\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\
+\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x77\x69\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\
+\x76\x67\x3e\
+\x00\x00\x02\x21\
+\x00\
+\x00\x07\xaf\x78\x9c\xdd\x55\x4d\x6f\x9c\x30\x10\xbd\xf7\x57\x4c\
+\xd5\x83\xdb\x03\xc6\xdf\x86\x28\x24\x52\x57\xea\x29\xbd\x25\x97\
+\xde\x68\xf0\x82\x9b\x5d\x58\x01\x5d\xb6\xff\xbe\x66\xd7\x60\x4a\
+\xaa\xf4\x92\x43\x15\x90\x30\xf3\x18\xbf\x99\xe7\xf1\x98\xeb\xdb\
+\xd3\x7e\x07\x47\xd3\x76\xb6\xa9\x33\x44\x31\x41\x60\xea\xc7\xa6\
+\xb0\x75\x99\xa1\x87\xfb\x2f\x51\x82\x6e\x6f\xde\x5d\xbf\x8f\x22\
+\xb8\xaf\x6c\x07\x5b\xbb\x33\x30\xe4\x1d\x94\xa6\x36\x6d\xde\x9b\
+\x02\xbe\xff\x82\xe2\x68\xbb\x63\xb9\x07\x86\x13\x88\x22\xe7\xef\
+\xac\x25\x2b\x45\xe0\xe2\xd4\x5d\x86\xaa\xbe\x3f\x5c\xc5\xf1\x30\
+\x0c\x78\xe0\xb8\x69\xcb\x98\x11\x42\x62\xe7\xef\x5d\xae\x4e\x3b\
+\x5b\x3f\xfd\xcd\x91\xa6\x69\x1a\x9f\xbf\x22\x18\x6c\xd1\x57\x19\
+\x52\x1c\x3b\x50\x1d\x7a\x04\x95\xb1\x65\xd5\x4f\x90\x1e\xa1\xa3\
+\x35\xc3\xe7\xe6\x94\x21\xa9\xb0\x20\xa9\x00\xc9\x71\x22\x13\x0e\
+\x7e\x9a\x1f\x35\x72\x09\x97\x60\x8b\x0c\x1d\xf2\xd2\xd0\x8b\xd9\
+\xb7\x79\xdd\x6d\x9b\x76\x9f\xa1\x7d\xde\xb7\xf6\xf4\x91\x38\x67\
+\xc5\x94\x00\x32\xde\x93\x31\x71\x53\xaa\x47\xf2\x4f\xe3\xec\x43\
+\xde\x57\xe0\xe8\xbe\x42\x8a\xb9\xd0\x82\x41\xc4\x38\x26\x94\xde\
+\x05\xc0\xbf\x3c\x47\x36\xcf\x90\x7f\x03\x8b\x39\x12\x53\x29\x29\
+\x05\x9a\x62\x29\x38\x85\x88\x62\x2d\x95\x54\xc0\x19\xa6\x6c\x36\
+\x37\x20\x04\x56\xa9\x4a\x83\x83\x14\x38\x49\x99\x0a\x14\x33\x30\
+\xe7\xfa\x02\x32\x09\x9c\x01\xae\xb0\xd2\x42\x6e\x02\x22\x08\x4e\
+\x94\x4a\x42\x64\xf7\xc2\x94\x14\x53\x6a\xde\xdc\x84\xdc\x27\x87\
+\x59\xdd\x44\x31\x03\x3e\xca\xdd\x7a\xa5\xbf\xa1\x71\xab\xee\x32\
+\xf4\x41\x6f\xc7\x1b\xc5\xae\x2e\x71\xf9\x8a\xa5\x0d\x42\x53\xac\
+\x29\x49\x97\x42\xdd\xbe\x22\x9c\x2d\x84\x6a\xcc\x09\xd5\xb3\xd0\
+\x8b\xb9\x14\xea\x1d\x82\x50\x4f\x11\x84\x4e\x51\x02\x22\xb1\xa4\
+\x89\x0c\x24\x17\x76\x1f\xe3\x3c\x2c\xaa\x7c\x81\x43\xd2\x7e\xf2\
+\x5a\xc5\xbc\x6e\x75\x53\x1b\x04\x5d\xdf\x36\x4f\xc6\xad\x22\x39\
+\x5f\x13\x10\xb9\x2e\x34\x8f\xf9\x21\x43\x6d\xf3\xb3\x2e\xfe\x80\
+\x7f\x34\xb6\x5e\xe3\x7b\xdb\x9b\x76\x67\xdd\xe0\x4e\x03\x82\x09\
+\xd7\x72\xfe\xe6\x5b\x99\xbb\x7c\x38\x65\xaf\x5f\xa7\xf5\x0a\xbe\
+\xe1\x1e\xf4\x0a\xdf\x5c\x09\x5f\x68\x35\xc9\x30\x4b\xf4\xe2\x4c\
+\x51\x0c\x8b\x84\xcf\x67\x8a\x37\x17\xad\x36\x39\x84\x6a\x79\x8a\
+\xf5\x46\xf9\x6f\x96\xf1\xf2\x70\xbf\xc8\x9b\xdf\xf9\x80\xe2\xe1\
+\
"
qt_resource_name = b"\
@@ -2384,40 +2384,99 @@ qt_resource_name = b"\
\x00\x6f\xa6\x53\
\x00\x69\
\x00\x63\x00\x6f\x00\x6e\x00\x73\
+\x00\x08\
+\x08\xf7\x57\x07\
+\x00\x67\
+\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0f\
-\x04\xf2\xa7\x87\
+\x07\x0e\xc4\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0f\x68\x53\xe7\
+\x00\x61\
+\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x07\x87\x48\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
+\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\x2d\x1b\xc7\
\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x07\
-\x0c\xf8\x5a\x07\
+\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x14\
+\x0f\xa5\xe0\xc7\
+\x00\x6d\
+\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
+\x00\x73\x00\x76\x00\x67\
+\x00\x1c\
+\x04\x66\xe1\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x19\
+\x0a\x43\x45\xc7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
+\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\x07\x57\xa7\
\x00\x65\
-\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x01\xca\x6d\x87\
-\x00\x62\
-\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x0c\xdb\x38\xe7\
+\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x05\xa8\x57\x87\
+\x00\x63\
+\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x04\xb2\x21\x47\
\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x11\
+\x01\x60\xbc\x47\
+\x00\x73\
+\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
\
-\x00\x0d\
-\x05\x20\xce\x87\
-\x00\x6f\
-\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x0f\xcb\xd5\xc7\
+\x00\x70\
+\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x04\xf2\xa7\x87\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x10\
\x08\x89\xfa\x47\
\x00\x63\
\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x0c\xa7\xc7\x47\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
+\x00\x0e\
+\x05\xed\x38\x67\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x08\x79\x97\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x08\
+\x08\xc8\x55\xe7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x10\
\x0c\x57\x65\x47\
\x00\x61\
\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1d\
+\x06\xec\xf4\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x19\
+\x0f\xef\x7b\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
+\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x12\
\x0c\x5e\xd4\xa7\
\x00\x61\
@@ -2428,191 +2487,132 @@ qt_resource_name = b"\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
\x00\x67\
-\x00\x10\
-\x08\xe4\xaf\x47\
+\x00\x1b\
+\x0e\xb5\x68\xe7\
\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x08\xf7\x57\x07\
-\x00\x67\
-\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x1c\
\x08\x8a\x79\x07\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x19\
-\x0a\x43\x45\xc7\
+\x00\x10\
+\x08\xe4\xaf\x47\
\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
-\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0e\
-\x0f\xcb\xd5\xc7\
-\x00\x70\
-\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0d\
+\x05\x20\xce\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x06\xc6\x02\xa7\
+\x00\x74\
+\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
+\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x13\
\x03\x24\x75\x47\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\
\x00\x76\x00\x67\
-\x00\x0a\
-\x0a\x2d\x1b\xc7\
-\x00\x63\
-\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x06\xe3\xaf\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x16\
\x01\xfb\x76\x27\
\x00\x61\
\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x09\
-\x0b\x9e\x89\x07\
+\x00\x11\
+\x0c\xa7\xc7\x47\
\x00\x63\
-\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x07\
+\x0c\xf8\x5a\x07\
+\x00\x65\
+\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\xc8\x62\x67\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x15\
\x0f\xc4\x59\xe7\
\x00\x73\
\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x14\
-\x0f\xa5\xe0\xc7\
-\x00\x6d\
-\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
-\x00\x73\x00\x76\x00\x67\
-\x00\x17\
-\x06\xc6\x02\xa7\
-\x00\x74\
-\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
-\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x05\xa8\x57\x87\
-\x00\x63\
-\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x06\xe3\xaf\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x08\xc8\x55\xe7\
-\x00\x73\
-\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0e\
-\x05\xed\x38\x67\
-\x00\x61\
-\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x01\x60\xbc\x47\
-\x00\x73\
-\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x1d\
-\x06\xec\xf4\xc7\
-\x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1b\
-\x0e\xb5\x68\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
-\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x08\x79\x97\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x1c\
-\x04\x66\xe1\x67\
-\x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x17\
-\x07\x87\x48\x27\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
-\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0a\xc8\x62\x67\
+\x00\x09\
+\x0b\x9e\x89\x07\
\x00\x63\
-\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0f\
\x09\x76\x60\xc7\
\x00\x63\
\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x04\xa9\x22\xc7\
-\x00\x66\
-\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0f\x68\x53\xe7\
-\x00\x61\
-\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0f\
-\x07\x0e\xc4\x87\
-\x00\x6f\
-\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x0b\x07\x57\xa7\
-\x00\x65\
-\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x04\xb2\x21\x47\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x19\
-\x0f\xef\x7b\xe7\
+\x00\x11\
+\x0c\xdb\x38\xe7\
\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
-\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
\x00\x08\
\x0c\xf7\x55\x87\
\x00\x74\
\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x01\xca\x6d\x87\
+\x00\x62\
+\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x04\xa9\x22\xc7\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
"
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x29\x00\x00\x00\x02\
-\x00\x00\x03\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x59\x83\
-\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x08\xc8\
-\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xfe\
-\x00\x00\x02\x46\x00\x00\x00\x00\x00\x01\x00\x00\x34\xde\
-\x00\x00\x04\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x6b\x67\
-\x00\x00\x05\x5a\x00\x01\x00\x00\x00\x01\x00\x00\x79\x80\
-\x00\x00\x05\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x84\xc3\
-\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x11\x5b\
-\x00\x00\x03\x68\x00\x00\x00\x00\x00\x01\x00\x00\x49\x95\
-\x00\x00\x03\xba\x00\x00\x00\x00\x00\x01\x00\x00\x56\xb6\
-\x00\x00\x03\x34\x00\x00\x00\x00\x00\x01\x00\x00\x44\xc7\
-\x00\x00\x03\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x43\
-\x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x00\x61\x07\
-\x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x7d\x12\
-\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x60\
-\x00\x00\x01\x48\x00\x00\x00\x00\x00\x01\x00\x00\x25\x5e\
-\x00\x00\x04\x80\x00\x00\x00\x00\x00\x01\x00\x00\x68\x41\
-\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x16\x01\
-\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x62\
-\x00\x00\x03\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x54\x11\
-\x00\x00\x01\x72\x00\x00\x00\x00\x00\x01\x00\x00\x28\x04\
-\x00\x00\x01\x98\x00\x01\x00\x00\x00\x01\x00\x00\x2a\x81\
-\x00\x00\x05\x36\x00\x00\x00\x00\x00\x01\x00\x00\x76\x36\
-\x00\x00\x02\x72\x00\x00\x00\x00\x00\x01\x00\x00\x38\x08\
-\x00\x00\x01\xec\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x62\
-\x00\x00\x05\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x72\xb6\
-\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x81\x53\
-\x00\x00\x02\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x3d\x7f\
-\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x73\
-\x00\x00\x01\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x20\xf6\
-\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x21\
-\x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xa0\
-\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x28\
-\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x04\xd9\
-\x00\x00\x04\x44\x00\x00\x00\x00\x00\x01\x00\x00\x64\xf1\
-\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xa5\
-\x00\x00\x03\x06\x00\x00\x00\x00\x00\x01\x00\x00\x40\xff\
-\x00\x00\x02\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x40\x8f\
-\x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x00\x31\xe3\
-\x00\x00\x05\xfe\x00\x00\x00\x00\x00\x01\x00\x00\x87\xfd\
+\x00\x00\x01\xac\x00\x00\x00\x00\x00\x01\x00\x00\x23\x75\
+\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x86\x4b\
+\x00\x00\x04\xda\x00\x00\x00\x00\x00\x01\x00\x00\x6d\x64\
+\x00\x00\x04\x88\x00\x00\x00\x00\x00\x01\x00\x00\x64\x6c\
+\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x11\xa3\
+\x00\x00\x06\x26\x00\x01\x00\x00\x00\x01\x00\x00\x8c\x23\
+\x00\x00\x01\x82\x00\x00\x00\x00\x00\x01\x00\x00\x20\x3b\
+\x00\x00\x01\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xf4\
+\x00\x00\x04\x34\x00\x00\x00\x00\x00\x01\x00\x00\x5a\xf8\
+\x00\x00\x01\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x8d\
+\x00\x00\x02\x40\x00\x00\x00\x00\x00\x01\x00\x00\x36\xed\
+\x00\x00\x04\x54\x00\x00\x00\x00\x00\x01\x00\x00\x5f\x9e\
+\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x67\x96\
+\x00\x00\x02\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x42\x08\
+\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x01\xe1\
+\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x07\x8f\
+\x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x4f\x85\
+\x00\x00\x02\x62\x00\x00\x00\x00\x00\x01\x00\x00\x39\xba\
+\x00\x00\x02\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x32\xcd\
+\x00\x00\x03\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x7b\
+\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x3c\xe0\
+\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x58\x7b\
+\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x05\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x26\
+\x00\x00\x00\x98\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xe5\
+\x00\x00\x01\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x15\x9c\
+\x00\x00\x05\x48\x00\x00\x00\x00\x00\x01\x00\x00\x78\x26\
+\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\x18\x1d\
+\x00\x00\x05\x92\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x16\
+\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x85\
+\x00\x00\x03\x40\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x1d\
+\x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x6f\xe5\
+\x00\x00\x05\xce\x00\x00\x00\x00\x00\x01\x00\x00\x82\x70\
+\x00\x00\x05\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x85\x2b\
+\x00\x00\x05\x34\x00\x00\x00\x00\x00\x01\x00\x00\x74\x37\
+\x00\x00\x03\x94\x00\x00\x00\x00\x00\x01\x00\x00\x52\x2b\
+\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x06\x22\
+\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xdb\
+\x00\x00\x05\x62\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xa6\
+\x00\x00\x01\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xf9\
+\x00\x00\x03\x08\x00\x00\x00\x00\x00\x01\x00\x00\x45\xf2\
"
qt_resource_struct_v2 = b"\
@@ -2620,88 +2620,88 @@ qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x29\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x03\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x59\x83\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x08\xc8\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xfe\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x02\x46\x00\x00\x00\x00\x00\x01\x00\x00\x34\xde\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x04\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x6b\x67\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x05\x5a\x00\x01\x00\x00\x00\x01\x00\x00\x79\x80\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x05\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x84\xc3\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x11\x5b\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x03\x68\x00\x00\x00\x00\x00\x01\x00\x00\x49\x95\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x03\xba\x00\x00\x00\x00\x00\x01\x00\x00\x56\xb6\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x03\x34\x00\x00\x00\x00\x00\x01\x00\x00\x44\xc7\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x03\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x43\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x00\x61\x07\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x7d\x12\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x60\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x01\x48\x00\x00\x00\x00\x00\x01\x00\x00\x25\x5e\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x04\x80\x00\x00\x00\x00\x00\x01\x00\x00\x68\x41\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x16\x01\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x62\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x03\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x54\x11\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x01\x72\x00\x00\x00\x00\x00\x01\x00\x00\x28\x04\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x01\x98\x00\x01\x00\x00\x00\x01\x00\x00\x2a\x81\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x05\x36\x00\x00\x00\x00\x00\x01\x00\x00\x76\x36\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x02\x72\x00\x00\x00\x00\x00\x01\x00\x00\x38\x08\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x01\xec\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x62\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x05\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x72\xb6\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x81\x53\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x02\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x3d\x7f\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x73\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x01\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x20\xf6\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x21\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xa0\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x28\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x04\xd9\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x04\x44\x00\x00\x00\x00\x00\x01\x00\x00\x64\xf1\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xa5\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
-\x00\x00\x03\x06\x00\x00\x00\x00\x00\x01\x00\x00\x40\xff\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x02\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x40\x8f\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x00\x31\xe3\
-\x00\x00\x01\x70\x9e\xd3\x06\xe0\
-\x00\x00\x05\xfe\x00\x00\x00\x00\x00\x01\x00\x00\x87\xfd\
-\x00\x00\x01\x70\x9e\xd3\x06\xdf\
+\x00\x00\x01\xac\x00\x00\x00\x00\x00\x01\x00\x00\x23\x75\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x86\x4b\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x04\xda\x00\x00\x00\x00\x00\x01\x00\x00\x6d\x64\
+\x00\x00\x01\x70\xa3\x66\x98\xf0\
+\x00\x00\x04\x88\x00\x00\x00\x00\x00\x01\x00\x00\x64\x6c\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x11\xa3\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x06\x26\x00\x01\x00\x00\x00\x01\x00\x00\x8c\x23\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x01\x82\x00\x00\x00\x00\x00\x01\x00\x00\x20\x3b\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x01\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xf4\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x04\x34\x00\x00\x00\x00\x00\x01\x00\x00\x5a\xf8\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x01\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x8d\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x02\x40\x00\x00\x00\x00\x00\x01\x00\x00\x36\xed\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x04\x54\x00\x00\x00\x00\x00\x01\x00\x00\x5f\x9e\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x67\x96\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x02\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x42\x08\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x01\xe1\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x07\x8f\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x4f\x85\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x02\x62\x00\x00\x00\x00\x00\x01\x00\x00\x39\xba\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x02\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x32\xcd\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x03\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x7b\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x02\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x3c\xe0\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x58\x7b\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x05\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x26\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x00\x98\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xe5\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x01\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x15\x9c\
+\x00\x00\x01\x70\xa3\x66\x98\xf0\
+\x00\x00\x05\x48\x00\x00\x00\x00\x00\x01\x00\x00\x78\x26\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\x18\x1d\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x05\x92\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x16\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x85\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x03\x40\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x1d\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x6f\xe5\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x05\xce\x00\x00\x00\x00\x00\x01\x00\x00\x82\x70\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x05\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x85\x2b\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x05\x34\x00\x00\x00\x00\x00\x01\x00\x00\x74\x37\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x03\x94\x00\x00\x00\x00\x00\x01\x00\x00\x52\x2b\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
+\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x06\x22\
+\x00\x00\x01\x70\xa3\x66\x98\xf0\
+\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xdb\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x05\x62\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xa6\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x01\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xf9\
+\x00\x00\x01\x70\xa3\x66\x98\xf2\
+\x00\x00\x03\x08\x00\x00\x00\x00\x00\x01\x00\x00\x45\xf2\
+\x00\x00\x01\x70\xa3\x66\x98\xf1\
"
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
diff --git a/graphics/asymptote/ReleaseNotes b/graphics/asymptote/ReleaseNotes
index 1eb7c02e2e..be1f4713ed 100644
--- a/graphics/asymptote/ReleaseNotes
+++ b/graphics/asymptote/ReleaseNotes
@@ -1,3 +1,9 @@
+Release Notes for Version 2.64
+
+Discontinuities were removed from the rotating minimizing frame used for
+constructing tubes. A work around was implemented for an incorrect
+declaration in obsolete versions of the NetBSD readline header file.
+
Release Notes for Version 2.63
A race condition in the AsyGL library was fixed. Emissive and
diff --git a/graphics/asymptote/asy-keywords.el b/graphics/asymptote/asy-keywords.el
index 0b120cc6c5..04913ec639 100644
--- a/graphics/asymptote/asy-keywords.el
+++ b/graphics/asymptote/asy-keywords.el
@@ -2,7 +2,7 @@
;; This file is automatically generated by asy-list.pl.
;; Changes will be overwritten.
;;
-(defvar asy-keywords-version "2.63")
+(defvar asy-keywords-version "2.64")
(defvar asy-keyword-name '(
and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
diff --git a/graphics/asymptote/asy.list b/graphics/asymptote/asy.list
index f22515923f..c649e040ad 100644
--- a/graphics/asymptote/asy.list
+++ b/graphics/asymptote/asy.list
@@ -254,18 +254,18 @@ int search(int[] a, int key);
int search(real[] a, real key);
int search(string[] a, string key);
int search(void()()[] a, void key()(), bool less(void()(), void()()));
-int search(picture[] a, picture key, bool less(picture, picture));
int search(real[] a, real key, bool less(real, real));
int search(guide[] a, guide key, bool less(guide, guide));
int search(object[] a, object key, bool less(object, object));
+int search(Legend[] a, Legend key, bool less(Legend, Legend));
int search(pair[] a, pair key, bool less(pair, pair));
int search(coord[] a, coord key, bool less(coord, coord));
int search(Label[] a, Label key, bool less(Label, Label));
int search(frame[] a, frame key, bool less(frame, frame));
int search(coord[] a, coord key, bool less(coord, coord));
-int search(Legend[] a, Legend key, bool less(Legend, Legend));
int search(int[] a, int key, bool less(int, int));
int search(bool3[] a, bool3 key, bool less(bool3, bool3));
+int search(picture[] a, picture key, bool less(picture, picture));
int search(string[] a, string key, bool less(string, string));
int search(path[] a, path key, bool less(path, path));
int search(pen[] a, pen key, bool less(pen, pen));
@@ -576,9 +576,9 @@ pen palered;
real[] map(real f(pair), pair[] a);
int[] map(int f(real), real[] a);
bool3[] map(bool3 f(bool3), bool3[] a);
+picture[] map(picture f(picture), picture[] a);
frame[] map(frame f(frame), frame[] a);
coord[] map(coord f(coord), coord[] a);
-Legend[] map(Legend f(Legend), Legend[] a);
pen[][] map(pen[] f(pen[]), pen[][] a);
triple[] map(triple f(triple), triple[] a);
pen[] map(pen f(pen), pen[] a);
@@ -586,8 +586,8 @@ coord[] map(coord f(coord), coord[] a);
Label[] map(Label f(Label), Label[] a);
pair[] map(pair f(pair), pair[] a);
object[] map(object f(object), object[] a);
+Legend[] map(Legend f(Legend), Legend[] a);
string[] map(string f(string), string[] a);
-picture[] map(picture f(picture), picture[] a);
void()()[] map(void f()()(void()()), void()()[] a);
pair[][] map(pair[] f(pair[]), pair[][] a);
real[] map(real f(real), real[] a);
@@ -884,13 +884,13 @@ void write(file file=<default>, string s=<default>, guide x, void suffix(file)=<
void write(file file=<default>, string s=<default>, pen x, void suffix(file)=<default> ... pen[]);
void write(file file, string s=<default>, explicit guide[] x, void suffix(file)=<default>);
void write(string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
+void write(pairOrTriple a);
void write(string s=<default>, explicit path[] x, void suffix(file)=<default>);
void write(file file, void suffix(file)=<default>);
void write(file file=<default>, string s=<default>, pen[] p);
void write(void suffix(file)=<default>);
void write(file file, string s=<default>, explicit path[] x, void suffix(file)=<default>);
void write(file file=<default>, align align, void suffix(file)=<default>);
-void write(pairOrTriple a);
void write(file file, string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
void write(string s=<default>, bool3 b, void suffix(file)=<default>);
void write(file file, string s=<default>, bool3 b, void suffix(file)=<default>);
@@ -949,18 +949,18 @@ arrowhead HookHead;
arrowhead HookHead(real dir=<default>, real barb=<default>);
marker[] concat(... marker[][]);
real[] concat(... real[][]);
-picture[] concat(... picture[][]);
pair[] concat(... pair[][]);
object[] concat(... object[][]);
+Legend[] concat(... Legend[][]);
pen[] concat(... pen[][]);
coord[] concat(... coord[][]);
Label[] concat(... Label[][]);
path[] concat(... path[][]);
coord[] concat(... coord[][]);
-Legend[] concat(... Legend[][]);
int[] concat(... int[][]);
void()()[] concat(... void()()[][]);
bool3[] concat(... bool3[][]);
+picture[] concat(... picture[][]);
string[] concat(... string[][]);
triple[] concat(... triple[][]);
frame[] concat(... frame[][]);
@@ -976,34 +976,35 @@ bool alias(marginT a, marginT b);
bool alias(coord[] a, coord[] b);
bool alias(light a, light b);
bool alias(align a, align b);
-bool alias(Legend[] a, Legend[] b);
bool alias(processtime a, processtime b);
bool alias(pair[] a, pair[] b);
bool alias(scaling a, scaling b);
bool alias(coord a, coord b);
bool alias(coords3 a, coords3 b);
-bool alias(node a, node b);
+bool alias(ScaleT a, ScaleT b);
bool alias(Label a, Label b);
bool alias(int[] a, int[] b);
bool alias(string[][] a, string[][] b);
bool alias(slice a, slice b);
bool alias(freezableBounds a, freezableBounds b);
bool alias(transformation a, transformation b);
-bool alias(scaleT a, scaleT b);
+bool alias(pairOrTriple a, pairOrTriple b);
bool alias(object[] a, object[] b);
bool alias(marker a, marker b);
+bool alias(Legend[] a, Legend[] b);
bool alias(real[][] a, real[][] b);
bool alias(bool3 a, bool3 b);
bool alias(bool3[] a, bool3[] b);
-bool alias(autoscaleT a, autoscaleT b);
-bool alias(ScaleT a, ScaleT b);
+bool alias(scaleT a, scaleT b);
+bool alias(picture a, picture b);
bool alias(side a, side b);
+bool alias(picture[] a, picture[] b);
bool alias(cputime a, cputime b);
bool alias(string[] a, string[] b);
bool alias(frame[] a, frame[] b);
bool alias(coords2 a, coords2 b);
bool alias(scaling a, scaling b);
-bool alias(pairOrTriple a, pairOrTriple b);
+bool alias(Legend a, Legend b);
bool alias(object a, object b);
bool alias(marker[] a, marker[] b);
bool alias(bool[] a, bool[] b);
@@ -1019,14 +1020,13 @@ bool alias(path[] a, path[] b);
bool alias(triple[] a, triple[] b);
bool alias(coord a, coord b);
bool alias(bounds a, bounds b);
-bool alias(Legend a, Legend b);
+bool alias(autoscaleT a, autoscaleT b);
bool alias(position a, position b);
bool alias(real[] a, real[] b);
bool alias(pen[] a, pen[] b);
bool alias(hsv a, hsv b);
bool alias(coords2 a, coords2 b);
-bool alias(picture a, picture b);
-bool alias(picture[] a, picture[] b);
+bool alias(node a, node b);
real pi;
int getint(string name=<default>, int default=<default>, string prompt=<default>, bool store=<default>);
int bitreverse(int a, int bits);
@@ -1370,13 +1370,13 @@ triple operator *(triple v, real x);
path3 operator *(real[][] t, path3 g);
side operator *(real x, side s);
Label operator *(real[][] t, Label L);
-picture operator *(transform t, picture orig);
+picture operator *(real[][] t, picture orig);
object operator *(transform t, explicit object F);
path[] operator *(transform t, explicit path[] p);
Label operator *(transform t, Label L);
pair[] operator *(transform t, pair[] z);
bounds operator *(transform t, bounds b);
-picture operator *(real[][] t, picture orig);
+picture operator *(transform t, picture orig);
bool operator init();
int operator init();
real operator init();
@@ -1400,27 +1400,27 @@ projection operator init();
arrowhead operator init();
slice operator init();
transformation operator init();
-scaleT operator init();
+pairOrTriple operator init();
marker operator init();
hsv operator init();
coords2 operator init();
-picture operator init();
+node operator init();
coords2 operator init();
scaling operator init();
-pairOrTriple operator init();
+Legend operator init();
object operator init();
scaling operator init();
coord operator init();
coords3 operator init();
-node operator init();
+ScaleT operator init();
Label operator init();
coord operator init();
bounds operator init();
-Legend operator init();
+autoscaleT operator init();
position operator init();
bool3 operator init();
-autoscaleT operator init();
-ScaleT operator init();
+scaleT operator init();
+picture operator init();
side operator init();
cputime operator init();
real operator cast(int);
@@ -1466,8 +1466,6 @@ guide operator cast(curlSpecifier spec);
guide operator cast(tensionSpecifier t);
align operator cast(side side);
guide[] operator cast(path[] g);
-pair operator cast(pairOrTriple a);
-triple operator cast(pairOrTriple a);
frame operator cast(object F);
hsv operator cast(pen p);
bool3[] operator cast(bool[] b);
@@ -1485,6 +1483,8 @@ path[] operator cast(pair[] z);
align operator cast(triple dir);
path[] operator cast(path p);
bool[] operator cast(bool3[] b);
+pair operator cast(pairOrTriple a);
+triple operator cast(pairOrTriple a);
bool3 operator cast(bool b);
position operator cast(int x);
object operator cast(string s);
@@ -1595,13 +1595,13 @@ bool operator ==(file a, file b);
bool operator ==(path a, path b);
bool operator ==(path3 a, path3 b);
bool operator ==(bool3 a, bool3 b);
-bool operator ==(autoscaleT a, autoscaleT b);
-bool operator ==(ScaleT a, ScaleT b);
+bool operator ==(scaleT a, scaleT b);
+bool operator ==(picture a, picture b);
bool operator ==(side a, side b);
bool operator ==(cputime a, cputime b);
bool operator ==(coords2 a, coords2 b);
bool operator ==(scaling a, scaling b);
-bool operator ==(pairOrTriple a, pairOrTriple b);
+bool operator ==(Legend a, Legend b);
bool operator ==(object a, object b);
bool operator ==(filltype a, filltype b);
bool operator ==(simplex a, simplex b);
@@ -1609,11 +1609,11 @@ bool operator ==(projection a, projection b);
bool operator ==(arrowhead a, arrowhead b);
bool operator ==(coord a, coord b);
bool operator ==(bounds a, bounds b);
-bool operator ==(Legend a, Legend b);
+bool operator ==(autoscaleT a, autoscaleT b);
bool operator ==(position a, position b);
bool operator ==(hsv a, hsv b);
bool operator ==(coords2 a, coords2 b);
-bool operator ==(picture a, picture b);
+bool operator ==(node a, node b);
bool operator ==(bool3 a, bool b);
bool operator ==(marginT a, marginT b);
bool operator ==(light a, light b);
@@ -1622,13 +1622,13 @@ bool operator ==(processtime a, processtime b);
bool operator ==(scaling a, scaling b);
bool operator ==(coord a, coord b);
bool operator ==(coords3 a, coords3 b);
-bool operator ==(node a, node b);
+bool operator ==(ScaleT a, ScaleT b);
bool operator ==(Label a, Label b);
bool operator ==(bool a, bool3 b);
bool operator ==(slice a, slice b);
bool operator ==(freezableBounds a, freezableBounds b);
bool operator ==(transformation a, transformation b);
-bool operator ==(scaleT a, scaleT b);
+bool operator ==(pairOrTriple a, pairOrTriple b);
bool operator ==(marker a, marker b);
bool operator !=(bool a, bool b);
bool[] operator !=(bool a, bool[] b);
@@ -1667,13 +1667,13 @@ bool operator !=(file a, file b);
bool operator !=(path a, path b);
bool operator !=(path3 a, path3 b);
bool operator !=(bool3 a, bool3 b);
-bool operator !=(autoscaleT a, autoscaleT b);
-bool operator !=(ScaleT a, ScaleT b);
+bool operator !=(scaleT a, scaleT b);
+bool operator !=(picture a, picture b);
bool operator !=(side a, side b);
bool operator !=(cputime a, cputime b);
bool operator !=(coords2 a, coords2 b);
bool operator !=(scaling a, scaling b);
-bool operator !=(pairOrTriple a, pairOrTriple b);
+bool operator !=(Legend a, Legend b);
bool operator !=(object a, object b);
bool operator !=(filltype a, filltype b);
bool operator !=(simplex a, simplex b);
@@ -1681,11 +1681,11 @@ bool operator !=(projection a, projection b);
bool operator !=(arrowhead a, arrowhead b);
bool operator !=(coord a, coord b);
bool operator !=(bounds a, bounds b);
-bool operator !=(Legend a, Legend b);
+bool operator !=(autoscaleT a, autoscaleT b);
bool operator !=(position a, position b);
bool operator !=(hsv a, hsv b);
bool operator !=(coords2 a, coords2 b);
-bool operator !=(picture a, picture b);
+bool operator !=(node a, node b);
bool operator !=(bool3 a, bool b);
bool operator !=(marginT a, marginT b);
bool operator !=(light a, light b);
@@ -1694,13 +1694,13 @@ bool operator !=(processtime a, processtime b);
bool operator !=(scaling a, scaling b);
bool operator !=(coord a, coord b);
bool operator !=(coords3 a, coords3 b);
-bool operator !=(node a, node b);
+bool operator !=(ScaleT a, ScaleT b);
bool operator !=(Label a, Label b);
bool operator !=(bool a, bool3 b);
bool operator !=(slice a, slice b);
bool operator !=(freezableBounds a, freezableBounds b);
bool operator !=(transformation a, transformation b);
-bool operator !=(scaleT a, scaleT b);
+bool operator !=(pairOrTriple a, pairOrTriple b);
bool operator !=(marker a, marker b);
bool operator <(int a, int b);
bool[] operator <(int a, int[] b);
diff --git a/graphics/asymptote/asymptote.spec b/graphics/asymptote/asymptote.spec
index f4bbf26275..5f4161a07b 100644
--- a/graphics/asymptote/asymptote.spec
+++ b/graphics/asymptote/asymptote.spec
@@ -3,7 +3,7 @@
%global __python %{__python3}
Name: asymptote
-Version: 2.63
+Version: 2.64
Release: 1%{?dist}
Summary: Descriptive vector graphics language
diff --git a/graphics/asymptote/base/three_tube.asy b/graphics/asymptote/base/three_tube.asy
index 86451b97fa..a5b8f3cc89 100644
--- a/graphics/asymptote/base/three_tube.asy
+++ b/graphics/asymptote/base/three_tube.asy
@@ -16,9 +16,12 @@ struct rmf {
// http://www.cs.hku.hk/research/techreps/document/TR-2007-07.pdf
rmf[] rmf(path3 g, real[] t)
{
+ static triple s0;
+ triple T=dir(g,0);
+ triple Tp=cross(s0,T);
+ Tp=abs(Tp) < sqrtEpsilon ? perp(T) : unit(Tp);
rmf[] R=new rmf[t.length];
- triple d=dir(g,0);
- R[0]=rmf(point(g,0),perp(d),d);
+ R[0]=rmf(point(g,0),Tp,T);
for(int i=1; i < t.length; ++i) {
rmf Ri=R[i-1];
real t=t[i];
@@ -37,14 +40,17 @@ rmf[] rmf(path3 g, real[] t)
} else
R[i]=R[i-1];
}
+ s0=R[t.length-1].s;
return R;
}
rmf[] rmf(triple z0, triple c0, triple c1, triple z1, real[] t)
{
+ static triple s0;
+
real norm=sqrtEpsilon*max(abs(z0),abs(c0),abs(c1),abs(z1));
-// Special case of dir for t in (0,1].
+ // Special case of dir for t in (0,1].
triple dir(real t) {
if(t == 1) {
triple dir=z1-c1;
@@ -63,7 +69,6 @@ rmf[] rmf(triple z0, triple c0, triple c1, triple z1, real[] t)
return unit(a);
}
- rmf[] R=new rmf[t.length];
triple T=c0-z0;
if(abs(T) < norm) {
T=z0-2*c0+c1;
@@ -71,8 +76,11 @@ rmf[] rmf(triple z0, triple c0, triple c1, triple z1, real[] t)
T=z1-z0+3.0*(c0-c1);
}
T=unit(T);
- triple Tp=perp(T);
+ triple Tp=cross(s0,T);
+ Tp=abs(Tp) < sqrtEpsilon ? perp(T) : unit(Tp);
+ rmf[] R=new rmf[t.length];
R[0]=rmf(z0,Tp,T);
+
for(int i=1; i < t.length; ++i) {
rmf Ri=R[i-1];
real t=t[i];
@@ -91,6 +99,7 @@ rmf[] rmf(triple z0, triple c0, triple c1, triple z1, real[] t)
} else
R[i]=R[i-1];
}
+ s0=R[t.length-1].s;
return R;
}
diff --git a/graphics/asymptote/configure b/graphics/asymptote/configure
index 31b84ca505..73e272ca56 100755
--- a/graphics/asymptote/configure
+++ b/graphics/asymptote/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Asymptote 2.63.
+# Generated by GNU Autoconf 2.69 for Asymptote 2.64.
#
# Report bugs to <http://sourceforge.net/projects/asymptote>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Asymptote'
PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.63'
-PACKAGE_STRING='Asymptote 2.63'
+PACKAGE_VERSION='2.64'
+PACKAGE_STRING='Asymptote 2.64'
PACKAGE_BUGREPORT='http://sourceforge.net/projects/asymptote'
PACKAGE_URL=''
@@ -1287,7 +1287,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Asymptote 2.63 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.64 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1352,7 +1352,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Asymptote 2.63:";;
+ short | recursive ) echo "Configuration of Asymptote 2.64:";;
esac
cat <<\_ACEOF
@@ -1469,7 +1469,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Asymptote configure 2.63
+Asymptote configure 2.64
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2055,7 +2055,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Asymptote $as_me 2.63, which was
+It was created by Asymptote $as_me 2.64, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -9267,7 +9267,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Asymptote $as_me 2.63, which was
+This file was extended by Asymptote $as_me 2.64, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9329,7 +9329,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-Asymptote config.status 2.63
+Asymptote config.status 2.64
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/graphics/asymptote/configure.ac b/graphics/asymptote/configure.ac
index 8f028af08f..9ae48266e7 100644
--- a/graphics/asymptote/configure.ac
+++ b/graphics/asymptote/configure.ac
@@ -3,7 +3,7 @@
# this file.
AC_PREREQ(2)
-AC_INIT([Asymptote],[2.63],[http://sourceforge.net/projects/asymptote])
+AC_INIT([Asymptote],[2.64],[http://sourceforge.net/projects/asymptote])
VERSION=$PACKAGE_VERSION
AC_SUBST(VERSION)
m4_include([ax_pthread.m4])
diff --git a/graphics/asymptote/doc/CAD.pdf b/graphics/asymptote/doc/CAD.pdf
index 069c76e08c..42b065fcfc 100644
--- a/graphics/asymptote/doc/CAD.pdf
+++ b/graphics/asymptote/doc/CAD.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/FAQ/asy-faq.info b/graphics/asymptote/doc/FAQ/asy-faq.info
index 7cd97b0e59..56a9edb0b5 100644
--- a/graphics/asymptote/doc/FAQ/asy-faq.info
+++ b/graphics/asymptote/doc/FAQ/asy-faq.info
@@ -10,7 +10,7 @@ END-INFO-DIR-ENTRY
File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
ASYMPTOTE FREQUENTLY ASKED QUESTIONS
- 02 Mar 2020
+ 03 Mar 2020
This is the list of Frequently Asked Questions about Asymptote (asy).
diff --git a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
index 3149f8360a..4fb27df1e5 100644
--- a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+++ b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asy-latex.pdf b/graphics/asymptote/doc/asy-latex.pdf
index 66cef1793c..dadab9c3f0 100644
--- a/graphics/asymptote/doc/asy-latex.pdf
+++ b/graphics/asymptote/doc/asy-latex.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asyRefCard.pdf b/graphics/asymptote/doc/asyRefCard.pdf
index fc4991af75..4a1603627d 100644
--- a/graphics/asymptote/doc/asyRefCard.pdf
+++ b/graphics/asymptote/doc/asyRefCard.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asymptote.pdf b/graphics/asymptote/doc/asymptote.pdf
index 0aff63e5c6..da152377f1 100644
--- a/graphics/asymptote/doc/asymptote.pdf
+++ b/graphics/asymptote/doc/asymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/png/asymptote.info b/graphics/asymptote/doc/png/asymptote.info
index 03ea489302..9aa184a0bb 100644
--- a/graphics/asymptote/doc/png/asymptote.info
+++ b/graphics/asymptote/doc/png/asymptote.info
@@ -1,7 +1,7 @@
This is asymptote.info, produced by makeinfo version 6.6 from
asymptote.texi.
-This file documents 'Asymptote', version 2.63.
+This file documents 'Asymptote', version 2.64.
<https://asymptote.sourceforge.io>
@@ -22,7 +22,7 @@ File: asymptote.info, Node: Top, Next: Description, Prev: (dir), Up: (dir)
Asymptote
*********
-This file documents 'Asymptote', version 2.63.
+This file documents 'Asymptote', version 2.64.
<https://asymptote.sourceforge.io>
diff --git a/graphics/asymptote/examples/cones.asy b/graphics/asymptote/examples/cones.asy
index e63a428125..fdc900e498 100644
--- a/graphics/asymptote/examples/cones.asy
+++ b/graphics/asymptote/examples/cones.asy
@@ -4,15 +4,16 @@ size(200);
currentprojection=orthographic(5,4,2);
render render=render(compression=Low,merge=true);
+pen skeletonpen=blue+0.15mm;
revolution upcone=cone(-Z,1,1);
revolution downcone=cone(Z,1,-1);
draw(surface(upcone),green,render);
draw(surface(downcone),green,render);
-draw(upcone,5,blue,longitudinalpen=nullpen);
-draw(downcone,5,blue,longitudinalpen=nullpen);
+draw(upcone,5,skeletonpen,longitudinalpen=nullpen);
+draw(downcone,5,skeletonpen,longitudinalpen=nullpen);
revolution cone=shift(2Y-2X)*cone(1,1);
draw(surface(cone),green,render);
-draw(cone,5,blue);
+draw(cone,5,skeletonpen);
diff --git a/graphics/asymptote/examples/hyperboloid.asy b/graphics/asymptote/examples/hyperboloid.asy
index 22f3b3d80b..32c0ff52e0 100644
--- a/graphics/asymptote/examples/hyperboloid.asy
+++ b/graphics/asymptote/examples/hyperboloid.asy
@@ -5,4 +5,4 @@ currentprojection=perspective(4,4,3);
revolution hyperboloid=revolution(graph(new triple(real z) {
return (sqrt(1+z*z),0,z);},-2,2,20,operator ..),axis=Z);
draw(surface(hyperboloid),green,render(compression=Low,merge=true));
-draw(hyperboloid,6,blue,longitudinalpen=nullpen);
+draw(hyperboloid,6,blue+0.15mm,longitudinalpen=nullpen);
diff --git a/graphics/asymptote/interact.cc b/graphics/asymptote/interact.cc
index 84d6b00ce7..e7551fd72f 100644
--- a/graphics/asymptote/interact.cc
+++ b/graphics/asymptote/interact.cc
@@ -24,11 +24,15 @@
#include <readline/history.h>
#else
#ifdef HAVE_LIBEDIT
+// Work around incorrect declaration in NetBSD readline.h v1.33
+#define rl_completion_entry_function rl_completion_entry_function_declaration
#ifdef HAVE_EDITLINE_READLINE_H
#include <editline/readline.h>
#else
#include <readline/readline.h>
#endif
+#undef rl_completion_entry_function
+extern "C" rl_compentry_func_t *rl_completion_entry_function;
#endif
#endif
#endif
@@ -187,7 +191,7 @@ void addToHistory(string line) {
}
string getLastHistoryLine() {
-#if defined(HAVE_READLINE) && defined(HAVE_LIBCURSES)
+#if defined(HAVE_LIBREADLINE) && defined(HAVE_LIBCURSES)
if(tty && history_length > 0) {
HIST_ENTRY *entry=history_list()[history_length-1];
if(!entry) {
diff --git a/graphics/asymptote/revision.cc b/graphics/asymptote/revision.cc
index a987606ebb..4fdadcdbc9 100644
--- a/graphics/asymptote/revision.cc
+++ b/graphics/asymptote/revision.cc
@@ -1,2 +1,2 @@
-const char *REVISION="2.63";
+const char *REVISION="2.64";
const char *AsyGLVersion="1.00";
diff --git a/info/biblio/font.bib b/info/biblio/font.bib
index b6099ebf5a..7de7ff6c2f 100644
--- a/info/biblio/font.bib
+++ b/info/biblio/font.bib
@@ -14,7 +14,7 @@
%%% telephone = "+1 801 581 5254",
%%% FAX = "+1 801 581 4148",
%%% URL = "http://www.math.utah.edu/~beebe",
-%%% checksum = "41997 23570 108214 1028204",
+%%% checksum = "53393 23571 108215 1028268",
%%% email = "beebe at math.utah.edu, beebe at acm.org,
%%% beebe at computer.org (Internet)",
%%% codetable = "ISO/ASCII",
@@ -863,7 +863,8 @@
ISBN-13 = "978-0-486-23928-6, 978-0-486-23929-3",
LCCN = "Z250.A2 U6 1937",
bibdate = "Mon Nov 18 17:55:28 MST 2019",
- bibsource = "fsz3950.oclc.org:210/WorldCat",
+ bibsource = "fsz3950.oclc.org:210/WorldCat;
+ http://www.math.utah.edu/pub/tex/bib/font.bib",
URL = "http://catdir.loc.gov/catdir/toc/fy1002/37032668.html",
acknowledgement = ack-nhfb,
author-dates = "1860--1941",
diff --git a/info/biblio/typeset.bib b/info/biblio/typeset.bib
index 51da76b8d6..c01617f415 100644
--- a/info/biblio/typeset.bib
+++ b/info/biblio/typeset.bib
@@ -14,7 +14,7 @@
%%% telephone = "+1 801 581 5254",
%%% FAX = "+1 801 581 4148",
%%% URL = "http://www.math.utah.edu/~beebe",
-%%% checksum = "40807 25366 121878 1141317",
+%%% checksum = "53565 25367 121879 1141386",
%%% email = "beebe at math.utah.edu, beebe at acm.org,
%%% beebe at computer.org (Internet)",
%%% codetable = "ISO/ASCII",
@@ -23193,7 +23193,7 @@
visually appealing layout? The most well-known and used
optimising typesetting software is \TeX{}, which solves
the line breaking problem according to an internal
- function of a paragraph s ``badness.''\par
+ function of a paragraph's ``badness.''\par
We propose an alternative formulation of the problem in
which the quality of a candidate paragraph is measured
@@ -24171,7 +24171,7 @@
@Article{Anonymous:2019:HWO,
author = "Anonymous",
- title = "How the world s old printing presses are being brought
+ title = "How the world's old printing presses are being brought
back to life: Digital printing almost wiped out the
world's letterpresses 40 years ago, but the art refuses
to die",
@@ -24186,6 +24186,7 @@
ISSN = "0013-0613 (print), 1476-8860 (electronic)",
ISSN-L = "0013-0613",
bibdate = "Tue Dec 24 07:05:52 2019",
+ bibsource = "http://www.math.utah.edu/pub/tex/bib/typeset.bib",
URL = "https://www.economist.com/christmas-specials/2019/12/18/how-the-worlds-old-printing-presses-are-being-brought-back-to-life",
acknowledgement = ack-dw # " and " # ack-nhfb,
fjournal = "The Economist",
diff --git a/language/spanish/babel/README b/language/spanish/babel/README
deleted file mode 100644
index 31506dbf45..0000000000
--- a/language/spanish/babel/README
+++ /dev/null
@@ -1,44 +0,0 @@
-Spanish for babel
-=================
-
-Este directorio es un lugar permanente para la última versión
-oficial del estilo babel para la lengua castellana. Hay que
-advertir que los archivos incluídos en la distribución de babel,
-pueden estar desfasados, y a menudo lo están.
-
-El directorio contrib, como su nombre sugiere, no es parte del
-lote oficial.
-
-------------------
-
-This directory is a permanent place for the latest official release
-of the babel style for the Spanish language. Note the files bundled
-with the babel distribution could be, and very often are, outdated.
-
-The contrib directory, as its name implies, is not part of the
-official bundle.
-
-History
-~~~~~~~
-
-5.0a. 2007-02-21 (in babel: 2008-03-18)
-Reimplemented in full, which some parts rewritten from scratch. Added
-the es- mechanism and the mexico option. Many bug fixes
-
-5.0d. 2008-05-25
-Fixed two bugs: misplaced subscripts with lim and the like; problem
-with \roman and hyperref
-
-5.0e. 2008-07-06 (in babel: 2008-07-06)
-Fixed '', which gobbled the space following.
-
-[5.0f. Internal.]
-
-5.0g. 2008-07-19 (in babel: never)
-Fixed '', which killed the preceding kerning
-
-5.0h. 2009-01-02 (in babel: pending)
-Added two package options: es-noenumerate, es-noitemize.
-
-----------
-2009-01-02
diff --git a/language/spanish/babel/base/README b/language/spanish/babel/base/README
deleted file mode 100644
index 7538df5a85..0000000000
--- a/language/spanish/babel/base/README
+++ /dev/null
@@ -1,58 +0,0 @@
-Spanish for babel
-=================
-
-Este directorio es un lugar permanente para la última versión
-oficial del estilo babel para la lengua castellana. Hay que
-advertir que los archivos incluidos en la distribución de babel,
-pueden estar desfasados, y a menudo lo están (a veces incluso
-casi año y medio).
-
-El directorio contrib, como su nombre sugiere, no es parte del
-lote oficial.
-
-------------------
-
-This directory is a permanent place for the latest official release
-of the babel style for the Spanish language. Note the files bundled
-with the babel distribution could be, and very often are, outdated
-(sometimes even almost a year and a half).
-
-The contrib directory, as its name implies, is not part of the
-official bundle.
-
-History
-~~~~~~~
-
-5.0a. 2007-02-21 (in babel: 2008-03-18)
-Reimplemented in full, which some parts rewritten from scratch. Added
-the es- mechanism and the mexico option. Many bug fixes
-
-5.0d. 2008-05-25
-Fixed two bugs: misplaced subscripts with lim and the like; problem
-with \roman and hyperref
-
-5.0e. 2008-07-06 (in babel: 2008-07-06)
-Fixed '', which gobbled the space following.
-
-[5.0f. Internal.]
-
-5.0g. 2008-07-19 (in babel: never)
-Fixed '' again, which killed the preceding kerning
-
-5.0h. 2009-01-02 (in babel: 2009-09-24)
-Added two package options: es-noenumerate, es-noitemize.
-As of 2010-05-22 this obsolete version is still the one bundled with babel.
-
-5.0i. 2009-05-11 (in babel: never)
-Fixed bug with romanidx.
-
-5.0j. 2010-05-23 (in babel: never)
-Fixed a babel bug for spanish to work with french.
-Fixed a bug with ifthen.
-Fixed a bug with \... and \.
-
-5.0k. 2011-10-06
-Fixed an error when . had mathcode "8000 before loading spanish
-
-----------
-2011-10-06
diff --git a/language/spanish/babel/base/spanish.dtx b/language/spanish/babel/base/spanish.dtx
deleted file mode 100644
index fba4c78f4b..0000000000
--- a/language/spanish/babel/base/spanish.dtx
+++ /dev/null
@@ -1,2759 +0,0 @@
-% \iffalse meta-comment
-%
-% Copyright 1989-2008 Johannes L. Braams and any individual authors
-% listed elsewhere in this file. All rights reserved.
-%
-% This file is part of the Babel system.
-% --------------------------------------
-%
-% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2003/12/01 or later.
-%
-% This work has the LPPL maintenance status "maintained".
-%
-% The Current Maintainer of this work is Johannes Braams.
-%
-% The list of all files belonging to the Babel system is
-% given in the file `manifest.bbl. See also `legal.bbl' for additional
-% information.
-%
-% The list of derived (unpacked) files belonging to the distribution
-% and covered by LPPL is defined by the unpacking scripts (with
-% extension .ins) which are part of the distribution.
-% \fi
-%
-% \ProvidesFile{spanish.dtx}
-% [2011/10/06 v5.0k Spanish support from the babel system]
-%\iffalse
-%% File `spanish.dtx'
-%% Babel package for LaTeX version 2e
-%% Copyright (C) 1989 - 2011
-%% by Johannes Braams, TeXniek
-%
-%% Spanish Language Definition File
-%% Copyright (C) 1997 - 2011
-%% Javier Bezos (www.tex-tipografia.com)
-%% and
-%% CervanTeX (www.cervantex.es)
-%
-%% Please report errors to: Javier Bezos (preferably)
-%% www.tex-tipografia.com
-%% J.L. Braams
-%% www.latex-project.org
-%
-% This file is part of the babel system, it provides the source
-% code for the Spanish language definition file.
-% The original version of this file was written by Javier Bezos.
-% The latest release is available on CTAN:/language/spanish/
-% \fi
-%
-% \iffalse
-%<*filedriver>
-\let\ooverb\verb
-\documentclass[spanish,a4paper]{ltxdoc}
-\let\verb\ooverb
-\usepackage{babel}
-\usepackage{hyperref}
-
-\let\meta\emph
-
-\usepackage{pslatex,mathptmx,color}
-\usepackage[cp1252]{inputenc}
-\usepackage[T1]{fontenc}
-\newcommand\act[1]{%
- \\%
- \makebox[1.5pc][l]{\textcolor{green}{$\surd$}}%
- \textsf{#1}\ignorespaces}
-\newcommand\deact[1]{%
- \\%
- \makebox[1.5pc][l]{\textcolor{red}{$\times$}}%
- \texttt{#1}\ignorespaces}
-\newcommand\txt{\makebox[1.5pc][l]{\textcolor{blue}{$\Rightarrow$}}\ignorespaces}
-\newcommand\con{\makebox[1.5pc][l]{\textcolor{magenta}{$\star$}}\ignorespaces}
-\newcommand\alw{%
- \\%
- \makebox[1.5pc][l]{\textcolor{green}{$\surd$}}%
- Se define siempre, sin depender de un grupo.}
-\newcommand\opp{\qquad Opcin de paquete}
-
-\newcommand*\babel{\textsf{babel}}
-\newcommand*\file[1]{\texttt{#1}}
-
-\setlength{\arrayrulewidth}{2\arrayrulewidth}
-\newcommand\toprule[1]{\cline{1-#1}\\[-2ex]}
-\newcommand\botrule[1]{\\[.6ex]\cline{1-#1}}
-\newcommand\hmk{$\string|$}
-
-\newenvironment{decl}[1][]%
- {\par\small\addvspace{4.5ex plus 1ex}%
- \vskip-\parskip
- \ifx\relax#1\relax
- \def\@decl@date{}%
- \else
- \def\@decl@date{\NEWfeature{#1}}%
- \fi
- \noindent
- \begin{tabular}{|l|}\hline\ignorespaces}%
- {\\\hline\end{tabular}\nobreak\@decl@date\par\nobreak
- \vspace{2.3ex}\vskip-\parskip}
-
-\newcommand\New[1]{%
- \leavevmode\marginpar{\raggedleft\sffamily Nuevo en #1}}
-
-\newcommand\nm[1]{\unskip\,$^{#1}$}
-\newcommand\nt[1]{\quad$^{#1}$\,\ignorespaces}
-
-\makeatletter
- \renewcommand\@biblabel{}
-\makeatother
-
-\newcommand\DOT[1]{\lsc{DOT},~#1}
-\newcommand\DTL[1]{\lsc{DTL},~#1}
-\newcommand\MEA[1]{\lsc{MEA},~#1}
-
-\raggedright
-\setlength{\parindent}{0em}
-\setlength{\parskip}{3pt}
-
-\addtolength{\oddsidemargin}{-4pc}
-\addtolength{\textwidth}{7pc}
-
-\OnlyDescription
-\begin{document}
- \DocInput{spanish.dtx}
-\end{document}
-%</filedriver>
-%\fi
-%
-% \begingroup
-% \ifx\langdeffile\undefined
-%
-%^^A ======= Beginning of text as typeset by spanish.dtx =========
-%
-%
-% \title{Estilo \textsf{spanish}\\
-% para el sistema \babel.\footnote{Este
-% archivo est actualmente en la versin
-% 5.0k con fecha 6 de octubre del 2011. ^^A@#
-% Esta copia del manual se compuso el~\today.}}
-%
-% \author{Javier Bezos\footnote{Por favor, enven comentarios y
-% sugerencias en http://www.tex-tipografia.com/spanish.html. Han
-% colaborado de una u otra forma muchas personas, a las cuales
-% agradezco sus comentarios y sugerencias; en particular, han sido muy
-% activos Juan Luis Varona y Jos Luis Rivera. Para ms informacin
-% sobre los criterios seguidos, vase la referencia: Javier Bezos,
-% \textit{Tipografa espaola con \TeX.} Para informacin sobre
-% actualizaciones: http://www.cervantex.es/}}
-%
-% \date{6 de octubre del 2011} ^^A@#
-%
-% \maketitle
-%
-% {\small\tableofcontents}
-%
-% \section*{Smbolos empleados}
-%
-% \begin{itemize}
-% \item[\textcolor{blue}{$\Rightarrow$}] Macros para
-% ser usadas en el texto (generan texto o lo estructuran).
-% \item[\textcolor{magenta}{$\star$}] Macros de
-% configuracin y preferencias.
-% \item[\textcolor{green}{$\surd$}] Grupo que
-% activa la orden.
-% \item[\textcolor{red}{$\times$}] Opciones de
-% paquete que anulan la orden. En redonda van las destinadas
-% especficamente a anular ese punto, y en cursiva las que adems
-% anulan otros aspectos del estilo.
-% \end{itemize}
-%
-% \section{Uso de \textsf{spanish} para babel}
-%
-% El estilo \textsf{spanish} para babel adapta una serie de elementos
-% de los documentos de \LaTeX\ al castellano, tanto en las
-% traducciones como en la tipografa. Para usarlo, basta con dar
-% la opcin \textsf{spanish} al cargar babel: \begin{verbatim}
-% \usepackage[spanish]{babel} \end{verbatim}
-%
-% Esto es todo lo que hace falta para conseguir que el documento tenga
-% un aspecto espaol. En caso de estar en Mxico, vase, adems, el
-% apartado \ref{paises} (<<Opciones por pases>>):\footnote{En prximas
-% versiones se aadirn ms pases.}
-%\begin{verbatim}
-%\usepackage[spanish,mexico]{babel}
-%\end{verbatim}
-%
-% El estilo \textsf{spanish} se puede cargar junto con otras lenguas (vase el
-% manual de babel). Si \textsf{spanish} es la ltima de las lenguas cargadas,
-% entonces se considera la lengua principal y se hacen una serie de
-% ajustes tipogrficos adicionales. En particular, se modifican
-% rdenes y entornos como:
-%\begin{center}
-%\begin{tabular}{lll}
-% |enumerate| & |\roman| & |\section|\\
-% |itemize| & |\fnsymbol| & |\subsection|\\
-% |\%| & |\alph| & |\subsubsection|\\
-% & |\Alph| & \\
-%\end{tabular}
-%\end{center}
-%
-% El estilo est pensado para que sea muy configurable. Para ello, se
-% proporcionan una serie de opciones de paquete, que en caso de
-% emplearse deben ir \textit{despus} de \textsf{spanish}. Por
-% ejemplo:
-% \begin{verbatim}
-% \usepackage[french,spanish,es-noindentfirst]{babel} \end{verbatim}
-% carga los estilos para el francs y el espaol, esta ltima como
-% lengua principal; adems, evita que \textsf{spanish} sangre el
-% primer prrafo tras un ttulo. Otras opciones se pueden ajustar por
-% medio de macros, en particular aquellas que se puede desear cambiar
-% en medio del documento (por ejemplo, el formato de la fecha).
-%
-% Los cambios estn organizados en una serie de grupos:
-% \textsf{captions, date, text, math} y \textsf{shorthands}.
-% Los tres ultimos corresponden a lo que en babel sera normalmente
-% \textsf{extras}.
-%
-% \section{\textsf{spanish} como lengua principal}
-%
-% Si la lengua principal es \textsf{spanish}, se introducen una serie de
-% cambios en el momento de cargar la lengua para adaptar varios
-% elementos a los usos tipogrficos espaoles. Estos cambios
-% funcionan con las clases estndar "+--con otras tal vez alguno de
-% ellos no tenga efecto--- y persisten durante todo el documento.
-% Ninguno de ellos es necesario para componer el documento, aunque
-% naturalmente el resultado ser distinto.
-%
-% \subsection{Listas}
-%
-% \begin{decl} \txt |\begin{enumerate} ... \end{enumerate}|%
-% \deact{es-nolists, es-noenumerate, \textit{es-nolayout, es-minimal,
-% es-sloppy}} \end{decl}
-%
-% Usa la siguiente secuencia:\\
-% \quad 1.\\
-% \qquad \emph{a})\\
-% \quad\qquad 1)\\
-% \qquad\qquad \emph{a$'$})
-%
-% \begin{decl} \txt |\begin{itemize} ... \end{itemize}|%
-% \deact{es-nolists, es-noitemize, \textit{es-nolayout, es-minimal,
-% es-sloppy}} \end{decl}
-%
-% Usa la siguiente secuencia:\\
-% \quad\leavevmode\hbox to 1.2ex
-% {\hss\vrule height .95ex width .8ex depth -.15ex\hss}\\
-% \qquad\textbullet\\
-% \quad\qquad $\circ$\\
-% \qquad\qquad $\diamond$
-%
-% \begin{decl}
-% \con |\spanishdashitems \spanishsignitems|
-% \end{decl}
-%
-% Dos rdenes para cambiar a otros estilos en
-% |itemize|: rayas en todos los niveles y \textbullet{} $\circ$
-% $\diamond$ $\triangleright$, respectivamente.
-%
-% \begin{decl}
-% \con |es-nolists|\opp
-% \end{decl}
-%
-% Desactiva los cambios en las listas (aunque |\es@enumerate| y
-% |\es@itemize| siguen disponibles).
-%
-% \subsection{Contadores}
-%
-% \begin{decl}
-% \txt |\alph \Alph|\deact{\textit{es-nolayout, es-sloppy}}
-% \end{decl}
-%
-% Incluyen la ee.
-%
-% \begin{decl}
-% \txt |\fnsymbol|\deact{\textit{es-nolayout, es-sloppy}}
-% \end{decl}
-%
-% Se emplean uno, dos, tres... asteriscos (*, **, ***, etc.),
-% en lugar de la sucesin angloamericana de cruces, barras,
-% etc.\footnote{\DOT{162}.}
-%
-% \begin{decl}
-% \txt |\roman|\deact{es-ucroman, es-lcroman, \textit{es-nolayout, es-minimal, es-sloppy}}
-% \end{decl}
-%
-% Como en castellano no se usan nmeros romanos en minscula,
-% |\roman| se redefine para que los d en
-% versalitas.\footnote{\DTL{197}.} La opcin de paquete
-% |es-minimal| los desactiva con |es-ucroman|, y |es-sloppy|
-% con |es-lcroman|.
-
-% \begin{decl}
-% \con |es-ucroman|\opp
-% \end{decl}
-%
-% Opcin de paquete adicional, que pasa todos los romanos a versales,
-% en caso de que no se quiera la versalita o por incompatibilidad con
-% algn paquete que use de forma indebida |\roman|.\footnote{En
-% el momento de escribir esto, como mnimo son: \textsf{dramatist,
-% epiolmec, flashcards, lipsum, ntheorem, ntheorem-hyper,
-% texmate.} Otros paquetes como \textsf{hyperref, easy} y \textsf{exam}
-% ya han sido corregidos.}
-%
-% \begin{decl}
-% \con |es-lcroman|\opp
-% \end{decl}
-%
-% Como ltimo recurso, de haber problemas con el valor predeterminado
-% o con |es-ucroman|, con esta opcin de paquete puede dejarse la
-% definicin de \LaTeX, aunque en espaol los romanos en minscula
-% sean una falta ortogrfica.
-%
-% \begin{decl}
-% \con |es-preindex|\opp
-% \end{decl}
-%
-% \textit{MakeIndex} no puede entender la forma en que |\roman|
-% escribe el nmero de pgina, por lo que elimina las lneas
-% afectadas. Por ello el archivo |.idx| ha de ser convertido antes de
-% procesarlo con \textit{MakeIndex}. Con este paquete se proporciona
-% la utilidad |romanidx.sty| que se encarga de ello. Simplemente se
-% compone ese archivo con \LaTeX{} y a continuacin se responde a las
-% preguntas que se formulan; el archivo resultante, es decir, el que
-% hay que procesar con \textit{MakeIndex,} tiene la extensin
-% \texttt{eix}. Este proceso no es necesario si no se introdujo
-% ninguna entrada de ndice en pginas numeradas con |\roman| (lo
-% cual ser lo ms normal). Si un smbolo propio de
-% \emph{MakeIndex} generara problemas, debe encerrarse entre llaves:
-% \verb={"|}=.
-%
-% Con la opcin de paquete |es-preindex| se llama desde el
-% documento |romanidx.sty|, de forma que no es necesaria su ejecucin
-% aparte. Tampoco pide ningn dato, sino que ha de darse en el
-% documento principal con la siguiente orden.
-%
-% \begin{decl}
-% \con |\spanishindexchars|\marg{encap}\marg{open\_range}\marg{close\_range}
-% \end{decl}
-%
-% De usarse |es-preindex| con un estilo de ndice que no tiene los
-% valores predeterminados de estos tres caracteres especiales, hay que
-% darlos con esta orden (es decir, por omisin es
-% \verb+\spanishindexchars{|}{(}{)}+).
-%
-% \begin{decl}
-% \con |\spanishscroman \spanishlcroman \spanishucroman|
-% \end{decl}
-%
-% Finalmente, tres macros permiten cambios temporales en el
-% documento de |\roman| a versalitas, minsculas y maysculas,
-% respectivamente.
-%
-% \subsection{Otros}
-%
-% \begin{decl}
-% \txt |\guillemotleft \guillemotright|\deact{\textit{es-nolayout, es-sloppy}}
-% \end{decl}
-%
-% Las comillas latinas para |OT1| son menos angulosas y se generan
-% con unas puntas de flecha de |lasy|. En T1 no hay cambios.
-%
-% \begin{decl}
-% \txt |\section|, |\subsection|, etc.,
-% |\tableofcontents|\deact{es-nosectiondot, es-noindentfirst, \textit{es-nolayout,
-% es-mininal, es-sloppy}}
-% \end{decl}
-%
-% Los nmeros en los ttulos estn seguidos de un punto
-% tanto en el texto como en el ndice. Adems,
-% el primer prrafo tras el ttulo no elimina la sangra.
-%
-% \begin{decl}
-% \con |es-nolayout|\opp
-% \end{decl}
-%
-% Si no se desea ninguno de estos cambios, basta con usar esta opcin
-% de paquete.
-%
-% \section{Traducciones}
-%
-% \subsection{Nombres}
-%
-% \begin{decl}
-% \txt |\refname|, |\tablename|, |\contentsname|, etc.\\
-% \con |\spanishrefname|, |\spanishtablename|, |\spanishcontentsname|, etc.
-% \act{captions}
-% \end{decl}
-%
-% Establecen las traducciones al castellano de algunos trminos,
-% tal y como se describe en el cuadro 1. Para cambiar el texto
-% de ellas, conviene redefinir la forma que empieza con
-% |\spanish...|, ya que, al contrario que las rdenes
-% |\refname|, |\abstractname|, etc., se pueden redefinir cuando
-% se desee y entran en accin al momento y de forma permanente, sin
-% necesidad de |\addto|.
-%
-% \begin{table}
-% \center\small
-% \newcommand\name[2]{%
-% \texttt{\textbackslash#1name}&%
-% \texttt{\textbackslash spanish#1name}&}
-% \caption{Traducciones}
-% \vspace{1.5ex}
-% \begin{tabular}{l@{\hspace{3em}}l@{\hspace{3em}}l}
-% \toprule3
-% \name{ref} & Referencias\\
-% \name{abstract} & Resumen\\
-% \name{bib} & Bibliografa\\
-% \name{chapter} & Captulo\\
-% \name{appendix} & Apndice\\
-% \name{contents} & ndice general\nm{a}\\
-% \name{listfigure} & ndice de figuras\\
-% \name{listtable} & ndice de cuadros\\
-% \name{index} & ndice alfabtico\\
-% \name{figure} & Figura\\
-% \name{table} & Cuadro\\
-% \name{part} & Parte\\
-% \name{encl} & Adjunto\\
-% \name{cc} & Copia a\\
-% \name{headto} & A\\
-% \name{page} & pgina\\
-% \name{see} & vase\\
-% \name{also} & vase tambin\\
-% \name{proof} & Demostracin
-% \botrule3
-% \end{tabular}
-%
-% \vspace{1.5ex}
-%
-% \begin{minipage}{10cm}\footnotesize
-% \nt{a} Pero slo <<ndice>> en \textsf{article}.
-% \end{minipage}
-% \end{table}
-%
-% \begin{decl}
-% \con |es-uppernames|\opp
-% \end{decl}
-%
-% Aunque sea un anglicismo,\footnote{\DOT{197}.} con esta opcin de
-% paquete los sustantivos tienen mayscula inicial.
-%
-% \begin{decl}
-% \con |es-tabla|\opp
-% \end{decl}
-%
-% En caso de que todos los cuadros sean tablas, esta opcin permite
-% cambiar \textit{cuadro} por \textit{tabla} (en cierto modo,
-% \textit{cuadro} es a \textit{tabla} lo que \texttt{table} es a
-% \texttt{tabular}).
-%
-% \subsection{Fechas}
-%
-% \begin{decl}
-% \txt |\today \Today|
-% \act{date}
-% \end{decl}
-%
-% Fecha actual, en la forma \textit{1 de enero de
-% 2004.} Con |\Today| el mes va en mayscula.
-%
-% \begin{decl}
-% \con |\spanishdatedel \spanishdatede|
-% \end{decl}
-%
-% Con la primera se cambia el formato para que a partir del 2000 se
-% emplee \textit{del} y no \textit{de} (recomendado). La segunda
-% hace justo lo contrario (predeterminado).
-%
-% \begin{decl}
-% \con |\spanishreverseddate|
-% \end{decl}
-%
-% Cambia el formato de |\today| a la forma
-% \textit{enero 1 del 2004.} Con |\Today| el mes va en
-% mayscula.
-%
-% \section{Abreviaciones (\textit{shorthands})}
-%
-% La lista completa se puede encontrar en el cuadro 2. En los
-% siguientes apartados se darn ms detalles sobre algunas de
-% ellas.
-%
-% \begin{table}[!t]
-% \center\small
-% \caption{Abreviaciones}
-% \vspace{1.5ex}
-% \begin{tabular}{l@{\hspace{3em}}l@{\hspace{3em}}l}
-% \toprule2
-% | | & \\
-% | | & \\
-% | | & \nm{a}\\
-% |"u "U| & "u "U\\
-% |"i "I| & "i "I\\
-% |"a "A "o "O| & Ordinales: 1"a, 1"A, 1"o, 1"O\\
-% |"er "ER| & Ordinales: 1"er, 1"ER\\
-% |"c "C| & "c "C\\
-% |"rr "RR| & rr, pero -r cuando se divide\\
-% |"y| & El antiguo signo para <<y>>\\
-% |"-| & Como |\-|, pero permite ms divisiones\\
-% |"=| & Como |-|, pero permite mas divisiones\nm{b}\\
-% |"~| & Guin estilstico\nm{c}\\
-% |"+ "+- "+--| & Como |-|, |--| y |---|, pero sin divisin\\
-% |~- ~-- ~---| & Lo mismo que el anterior.\\
-% |""| & Permite mas divisiones antes y despus\nm{d}\\
-% |"/| & Una barra algo ms baja\\
-% \verb+"|+ & Divide un logotipo\nm{e}\\
-% |"< ">| & "< ">\\
-% |"` "'| & |\begin{quoting}| |\end{quoting}|\nm{f}\\
-% |<< >>| & Lo mismo que el anterior.\\
-% |?` !`| & ?` !`\nm{g}\\
-%|"? "!| & "? "! alineados con la linea base\nm{h}
-% \botrule2
-% \end{tabular}
-%
-% \vspace{1.5ex}
-%
-% \begin{minipage}{11cm}
-% \footnotesize
-% \nt{a} La forma |~n| no est activada por omisin a partir de
-% la versin 5.
-% \nt{b} |"=| viene a ser lo mismo que |""-""|.
-% \nt{c} Esta abreviacin tiene un uso distinto
-% en otras lenguas de babel.
-% \nt{d} Como en <<entrada/salida>>.
-% \nt{e} Carece de uso en castellano.
-% \nt{f} Vase sec.~2.7.
-% \nt{g} No proporcionadas por este paquete, sino por cada tipo;
-% figuran aqu como simple recordatorio.
-% \nt{h} tiles en rtulos en maysculas.
-% \end{minipage}
-% \end{table}
-%
-% Los caracteres usados como abreviaciones se comportan
-% como otras rdenes de \TeX{} y por tanto se hace caso
-% omiso de los espacios que le puedan seguir: \verb*|' a| es lo mismo
-% que ||. Eso tambin implica que tras esos caracteres no
-% puede ir una llave de cierre y que deber escribirse
-% |{... '{}}| en lugar de |{... '}|; en modo matemtico no hay
-% ningn problema y |$x^{a'}$| ($x^{a'}$) es vlido.
-%
-% \begin{decl}
-% \con |activeacute|\opp
-% \end{decl}
-%
-% Para poder usar apstrofos como abreviaciones de acentos es
-% necesaria esta opcin en |\usepackage|. Puede cambiarse este
-% comportamiento con |\es@acuteactive| en el archivo de
-% configuracin |spanish.cfg|; en ese caso los apstrofos se activan
-% siempre.
-%
-% \begin{decl}
-% \con |es-tilden|\opp
-% \end{decl}
-%
-% Esta orden activa las abreviaciones |~n| y |~N| por compatibilidad
-% con versiones anteriores de \textsf{spanish} (y siempre que no se
-% empleado tambin |es-notilde|). En la versin 5 no estn
-% activadas de forma predeterminada.
-%
-% \begin{decl}
-% \con |\spanishdeactivate|\marg{caracteres}
-% \end{decl}
-%
-% Permite desactivar las abreviaciones correspondientes a los
-% caracteres dados. Para evitar entrar en conflicto con otras lenguas,
-% al salir de \textsf{spanish} se reactivan,\footnote{El punto para
-% los decimales no es estrictamente una abreviacin y no se
-% reactiva.} por lo que si se desea que
-% persistan hay que aadir la orden a |\shorthandsspanish| con
-%|\addto|. La orden |\renewcommand\shorthandsspanish{}| es una
-% variante optimizada de
-%\begin{verbatim}
-% \addto\shorthandsspanish{\spanishdeactivate{.'"~<>}}
-%\end{verbatim}
-%
-% \begin{decl}
-% \con |es-noshorthands|\opp
-% \end{decl}
-%
-% No activa ninguna abreviacin.
-%
-% \subsection{Coma decimal}
-%
-% \begin{decl}
-% \txt |.|\textit{nmero}\act{shorthands}\deact{es-nodecimaldot,
-% \textit{es-noshorthands, es-minimal, es-sloppy}}
-% \end{decl}
-%
-% En \textsf{spanish}, el punto en matemticas sirve como marca decimal
-% genrica que puede representarse como coma o punto; funciona
-% por tanto como marcado lgico del signo para decimales. Por
-% omisin, se siguen las normas internacionales ISO y la legislacin
-% de diversos pases (como de Espaa y Mxico) de emplear la coma.
-% Ya que \TeX\ usa la coma como separador en intervalos o expresiones
-% similares, lo que aade un espacio fino, \textsf{spanish}
-% interpreta todo punto en modo matemtico de esta forma siempre
-% que est seguido de una cifra, pero no en otras circunstancias:
-% \begin{quote}\small\begin{tabbing}
-% |$1\,234.567\,890$| \quad \= $1\,234.567\,890$\\
-% |$f(1,2)=12.34.$| \> $f(1,2)=12.34.$\\
-% |$1{.}000$| \> $1{.}000$, pero\\
-% |1.000| \> 1.000, pues no es modo matemtico.
-% \end{tabbing}\end{quote}
-%
-%
-% \begin{decl}
-% \con |\decimalcomma \decimalpoint \spanishdecimal|\marg{math}
-% \end{decl}
-%
-% Las dos primeras establecen si se usa una coma (predeterminado)
-% o un punto, mientras que |\spanishdecimal|\marg{math}
-% permite darle una definicin arbitraria.
-%
-% \begin{decl}
-% \con |es-nodecimaldot|\opp
-% \end{decl}
-%
-% Cancela el mecanismo del punto decimal.
-%
-% \subsection{Divisin de palabras}
-%
-% \textsf{Spanish} comprueba la codificacin en el momento en que se
-% usa un acento: si es |OT1|, se toman medidas para facilitar la
-% divisin, que pese a todo nunca ser perfecta, y si es |T1|,
-% se accede directamente al carcter correspondiente.
-%
-% \begin{decl}
-% \txt |"- "= "~|\act{shorthands}
-% \deact{\textit{es-noshorthands, es-sloppy}}
-% \end{decl}
-%
-% Para matizar la divisin de palabras hay cuatro posibilidades, dos
-% de ellas con el mtodo de abreviaciones:
-% \begin{itemize}
-% \item |\-| es un guin opcional que no permite
-% ms divisiones,
-%
-% \item |"-| es similar pero permite ms divisiones,
-%
-% \item |-| es un guin que no permite ms divisiones ni
-% antes ni despus, y
-%
-% \item |"=| es el equivalente que s las permite,\footnote{No
-% es una buena idea usar esta orden, pero en
-% medidas muy cortas puede resultar necesario.}
-%
-% \end{itemize}
-% Por ejemplo (con las posibles divisiones marcadas con \hmk):
-% \begin{quote}\small\begin{tabbing}
-% |Zaragoza-Barcelona|\qquad \= Zaragoza-\hmk Barcelona\\
-% |Zaragoza"=Barcelona| \>
-% Za\hmk ra\hmk go\hmk za-\hmk Bar\hmk ce\hmk lo\hmk na\\
-% |semi\-abierto| \> semi\hmk abierto\\
-% |semi"-abierto| \> se\hmk mi\hmk abier\hmk to.\footnotemark
-% \end{tabbing}\footnotetext{Justo antes y despus de
-% {\ttfamily\string"\string-} y {\ttfamily\string"\string=} se
-% aplican los correspondientes
-% valores de {\ttfamily\string\...hyphenmin} lo que implica que la
-% divisn semia\hmk bierto no es posible.
-% ste es un comportamiento correcto.}
-% \end{quote}
-%
-% Con la abreviacin |"~|, el guin
-% tambin aparece al comienzo de la siguiente lnea. Por ejemplo:
-% \begin{quote}\small\begin{tabbing}
-% |infra"~rojo| \quad \= in\hmk fra-ro\hmk jo, pero infra-\hmk-rojo.
-% \end{tabbing}\end{quote}
-%
-% \begin{decl}
-%\txt |"+ "+- "+--|\act{shorthands}\deact{\emph{no-shorthands,
-% es-sloppy}}
-% \end{decl}
-%\vskip-1.5pc\vskip0pt
-% \begin{decl}
-% \txt |~- ~-- ~---|\act{shorthands}\deact{es-notilde, \emph{no-shorthands,
-% es-minimal, es-sloppy}}
-% \end{decl}
-
-% Evitan divisiones: |~-|, que resulta til para expresar una serie
-% de nmeros sin que el guin los divida (12~-14, |12~-14|), y
-% |~---|, que es la forma que debe usarse para abrir incisos con
-% rayas, ya que de lo contrario puede haber una divisin entre la
-% raya de abrir y la palabra que le sigue:
-% \begin{quote}\small\begin{tabbing}
-%|Los conciertos ~---o % academias--- que organiz...|
-% \end{tabbing}\end{quote}
-%
-% Tambin pueden emplearse para esta misma funcin las abreviaciones
-% |"+|, |"+-| y |"+---|. Mientras que este guin evita toda posible
-% divisin en los elementos que une, la raya (---) y la semirraya
-% (--) las permiten en las palabras que le precedan o le sigan.
-%
-% Otra abreviacin es |"rr| que sirve para el
-% nico cambio de escritura del castellano en caso de haber divisin.
-% La \lsc{RAE} indica que al aadir un prefijo que termina en vocal a
-% una palabra que comienza con \emph{r}, sta ltima debe
-% doblarse a menos que se unan por un guin. Por ejemplo:
-% \begin{quote}\small\begin{tabbing}
-% |extra"rradio| \quad \= ex\hmk trarra\hmk dio, pero extra-\hmk
-% radio.
-% \end{tabbing}\end{quote}
-% No hay acuerdo sobre si esta regla y otras similares han de
-% aplicarse o no, aunque la opinin mayoritaria actual est en
-% contra.
-%
-% \subsection{Otros}
-%
-% \begin{decl}
-% \txt |"/|\act{shorthands}\deact{\textit{es-noshorthands, es-sloppy}}
-% \end{decl}
-%
-% Es una utilidad tipogrfica ms que especficamente espaola.
-% En ciertos tipos, como Times, el extremo inferior de la barra est
-% en la lnea de base y expresiones como <<am/pm>> resultan poco
-% estticas. |"/| produce una barra que, de ser necesario, se baja
-% ligeramente. Computer Modern tiene una barra bien diseada y no es
-% posible ilustrar aqu este punto, pero se escribira
-% |am"/pm|.
-%
-% \begin{decl}
-% \txt |"y|\act{shorthand}\deact{\textit{es-noshorthands, es-sloppy}}
-% \end{decl}
-%
-% El signo \textit{et tironiano}, que en espaol se emple muy a
-% menudo, se puede <<imitar>> con |"y|, siempre que se haya cargado el
-% paquete |graphics|; de no ser as, se usa la letra $\tau$, aunque
-% la variante normal de \TeX{} no es demasiado apropiada.
-%
-% \section{Funciones de texto y matemticas}
-%
-% \subsection{Abreviaturas}
-%
-% \begin{decl}
-% \txt |\sptext|\marg{texto}\act{text}\deact{\textit{es-sloppy}}
-% \end{decl}
-%
-% Pone un punto y le sigue el argumento en voladitas. Para
-% abreviaturas como |adm\sptext{n}| que da adm\sptext{n}. Hay seis
-% abreviaciones asociadas a ordinales: |"a|, |"A|, |"o|, |"O|, |"er| y
-% |"ER| que equivalen a |\sptext{a}|, etc. Muchos tipos
-% aaden un pequeo subrayado que debe evitarse, y por tanto no se
-% deben escribir los ordinales con \textsf{inputenc}.
-%
-% Para ajustar el tamao lo mejor posible, se usa el de
-% ndices en curso. Esto funciona bien salvo para tamaos muy
-% grandes o muy pequeos, donde los resultados son meramente
-% aceptables.
-%
-% En Plain \TeX{} se ejecuta |\sptextfont| para la
-% letra voladita, de forma que |{\bf\let\sptextfont\bf 1"o}| da el
-% resultado correcto (|\mit| si es para cursiva). Para usar un tipo
-% nuevo con |\sptext| hay que definir tambin las variantes
-% matemticas con |\newfam|.
-%
-% \subsection{Espaciado}
-%
-% El espaciado espaol difiere relativamente poco del ingls, con
-% alguna excepcin; una de ellas es que en \textsf{spanish}
-% |\frenchspacing| est activo.
-%
-% \begin{decl}
-% \txt |\...|\act{text}\deact{\textit{es-sloppy}}
-% \end{decl}
-%
-% Puntos suspensivos menos espaciados que |\dots|. El espacio
-% que sigue se conserva:
-% \begin{quote}\small\begin{tabbing}
-% |\... y solo estaba\... ella.|\quad\=\... y solo estaba\... ella.
-% \end{tabbing}\end{quote}
-% Tambin podran escribirse los tres puntos sin ms |...|, y en
-% la prctica no hay diferencia, a menos que se cambie el
-% valor del espacio tras punto; en ese caso, la forma con barra
-% da los valores apropiados \emph{dentro} de una sentencia, y
-% los tres puntos \emph{al final} de ella. Esta orden no
-% interfiere con el valor original de |\.| (un punto suprascrito).
-%
-% \begin{decl}
-% \txt |\%|\act{text}\deact{\textit{es-minimal, es-sloppy}}
-% \end{decl}
-%
-% Se aade un espacio fino antes del signo (en concreto |\,|), con
-% lo cual se puede "<recuperar"> con su opuesto |\!| si |\%| no sigue
-% a una cifra; tambin se puede emplear |\percentsign|).
-%
-% \begin{decl}
-% \con |\spanishplainpercent|
-% \end{decl}
-%
-% Orden para que |\%| no aada el espacio fino. Puede ser til
-% en cuadros, si |\%| aparece siempre entre parntesis.
-%
-% \subsection{Fuentes}
-%
-% \begin{decl}
-% \txt |\lsc|\marg{texto}\act{text}\deact{\textit{es-sloppy}}
-% \end{decl}
-%
-% Pasa \textit{texto} a versalitas:
-% \begin{quote}\small\begin{tabbing}
-% |\lsc{RAE}| \quad \= \lsc{RAE}\\
-% |\lsc{ReNFe}| \quad \= \lsc{ReNFe}.\\
-% |siglo \lsc{XVII}| \quad \= siglo \lsc{XVII}\\
-% |captulo \lsc{II}| \quad \= captulo \lsc{II}.
-% \end{tabbing}\end{quote}
-%
-% Para evitar que con un tipo que carece de versalitas acabe
-% apareciendo (por substitucin) un texto de minsculas se intenta
-% usar en estos casos las versales \emph{reales} de un tamao menor
-% (\LaTeX\ tiende a sustituir versalitas por versalitas, pero hay
-% excepciones, como con las negritas).
-%
-% \begin{decl}
-% \txt |\|\alw
-% \end{decl}
-%
-% Lo mismo que ||.
-%
-% \subsection{Entrecomillados}
-%
-% \begin{decl}
-% \txt |\begin{quoting} ... \end{quoting}|\alw
-% \end{decl}
-%
-% El entorno |quoting| entrecomilla un texto, aadiendo comillas de
-% seguir al comienzo de cada prrafo en su interior.\footnote{Se puede
-% encontrar una detallada exposicin de las comillas en \DTL{44 ss.}
-% De ah se ha tomado algn ejemplo.}
-%
-% \begin{decl}
-% \txt |<< >>|\act{shorthands}\deact{es-noquoting, \textit{es-noshorthands, es-minimal,
-% es-sloppy}}
-% \end{decl}
-%\vskip-1.5pc\vskip0pt
-% \begin{decl}
-% \txt |"` "'|\act{shorthands}\deact{\textit{es-noshorthands, es-sloppy}}
-% \end{decl}
-%
-% Tambin se pueden emplear las abreviaciones |<<| y |>>| (o
-% alternativamente |"`| y |"'|) que se limitan a llamar a |quoting|,
-% que por ser entorno considera sus cambios internos como locales.
-% (Es decir, |<< ... >>| implica |{<< ... >>}|.) Las abreviaciones
-% |"<| y |">| continan dando sin ms los caracteres de comillas de
-% abrir y cerrar, respectivamente.
-%
-% Por ejemplo:
-%\begin{verbatim}
-% <<Se llaman <<comillas de seguir>> a las que son de cierre,
-% pero se colocan al comienzo de cada prrafo cuando se transcribe
-% un texto entrecomillado con ms de un prrafo.
-%
-% En su interior, como de costumbre, se usan inglesas.>>
-%\end{verbatim}
-% cuyo resultado es:
-% \begin{quotation}\small
-% <<Se llaman <<comillas de seguir>> a las que son de cierre,
-% pero se colocan al comienzo de cada prrafo cuando se transcribe
-% un texto entrecomillado con ms de un prrafo.
-%
-% En su interior, como de costumbre, se usan inglesas.>>
-% \end{quotation}
-%
-% Tambin se aaden comillas de seguir en listas, excepto con la
-% opcin \texttt{es-nolists} o cualquier otra que las desactive.
-%
-% Este entorno se puede redefinir, como por ejemplo:
-%\begin{verbatim}
-% \renewenvironment{quoting}{\itshape}{}
-%\end{verbatim}
-% pero en principio no implica un nuevo prrafo, ya que
-% est pensado para ser usado tambin en el texto.
-%
-% \begin{decl}
-% \con |\lquoti| |\rquoti| |\lquotii| |\rquotii| |\lquotiii|
-% |\rquotiii|
-% \end{decl}
-%
-% Controlan las comillas en |quoting|, segn el
-% nivel en que nos encontremos. |\lquoti| son las comillas de abrir
-% ms exteriores, |\lquotii| las de segundo nivel, etc., y lo mismo
-% para las de cerrar con |\rquoti|... Para las de seguir siempre se
-% usan las de cerrar. Los valores predefinidos estn en el cuadro 3.
-% \begin{table}
-% \center\small
-% \caption{Entrecomillados}
-% \vspace{1.5ex}
-% \begin{tabular}{l@{\hspace{5em}}l}
-% \toprule2
-% |\lquoti| &|"<|\\
-% |\rquoti| &|">|\\
-% |\lquotii| &|``|\\
-% |\rquotii| &|''|\\
-% |\lquotiii| &|`|\\
-% |\rquotiii| &|'|
-% \botrule2
-% \end{tabular}
-% \end{table}
-%
-% \begin{decl}
-% \con |\activatequoting \deactivatequoting|
-% \end{decl}
-%
-% Las incompatibilidades potenciales de estas abreviaciones son
-% enormes. Por ejemplo, en \textsf{ifthen} se cancelan las
-% comparaciones entre nmeros;\,\footnote{Y en \texttt{\textbackslash
-% ifnum},
-% \texttt{\textbackslash ifdim}, etc., usado por los desarrolladores en
-% los paquetes.} tambin
-% resultan inoperantes |@>>>| y |@<<<| de
-% \textsf{amstex}.\footnote{Aunque en
-% este caso cabe usar los sinnimos |@)))| y |@(((|.}
-% Por ello, se da la posibilidad de cancelarlas y reactivarlas con
-% estas rdenes, aunque si se est usando
-% \textsf{xmltex} ya se
-% desactivan por completo de forma automtica. El entorno
-% |quoting| siempre permanece disponible.\footnote{Algunos tipos
-% disponen de esta ligadura de forma interna para
-% generar los caracteres de comillas, por lo que en ellos tambin
-% podemos usarlos siempre, aunque los ajustes proporcionados por
-% \textsf{spanish} se pueden perder; por otra parte, tampoco se
-% usan demasiado a menudo.}
-%
-% \subsection{Funciones matemticas}
-%
-% \begin{decl}
-% \txt |\lim \limsup \liminf \bmod \pmod \sen \tg|
-% etc.\act{math}\deact{\textit{es-minimal, es-sloppy}}
-% \end{decl}
-%
-% Tradicionalmente, las abreviaciones de lo que en \TeX\ se conocen
-% como operadores se han formado a partir del nombre castellano, lo
-% que implica la presencia del acento en lm (en sus tres formas
-% |\lim|, |\limsup| y |\liminf|), mx, mn, nf y md (en sus dos
-% formas |\bmod| y |\pmod|).
-%
-% Con \textsf{spanish} pueden seguirse varias convenciones con ayuda
-% de las siguientes rdenes:
-% \begin{decl} \con |\accentedoperators| |\unaccentedoperators|
-% \end{decl}
-% Activa o desactiva los acentos.
-% Por omisin se acentan, como por ejemplo: $\lim_{x\to 0}(1/x)$
-% (|$\lim_{x\to 0}(1/x)$|).
-%
-% \begin{decl}
-% \con |\spacedoperators| |\unspacedoperators|
-% \end{decl}
-% Activa o desactiva el espacio entre "<arc"> y la funcin.
-% Lo habitual ha sido con espacio; as pues, por omisin
-% se espacia.
-%
-% Tambin se aaden |\sen|, |\arcsen|, |\tg| y |\arctg|,
-% que dan las funciones respectivas.
-% \begin{decl}
-% \con |\spanishoperators|
-% \end{decl}
-%
-% Otras funciones trigonomtricas se encuentran almacenadas en el
-% parmetro |\spanishoperators|, que inicialmente incluye cotg,
-% cosec, senh y tgh. La razn por la que estas funciones se han
-% separado es porque su forma no est normalizada en el mbito
-% hispanohablante. De esta forma se puede cambiar por otras con, por
-% ejemplo:
-%\begin{verbatim}
-% \renewcommand{\spanishoperators}{ctg arc\,ctg sh ch th}
-%\end{verbatim}
-% (separadas con espacio). Cuando se selecciona \textsf{spanish} se crean
-% rdenes con esos nombres
-% y que dan esas funciones (siempre con |\nolimits|). Adems de
-% las letras sin acentuar se aceptan las rdenes |\,| y |\acute|, que
-% se pasan por alto para formar el nombre. Por ejemplo, |arc\,ctg|
-% se escribe en el documento con
-% |\arcctg|, |M\acute{a}x| como |\Max| y |cr\acute{i}t| como |\crit|
-% (hay que usar |i| y no |\dotlessi|).
-% La orden |\,| responde a |\|(|un|)|spacedoperators|, y |\acute|
-% a |\|(|un|)|accentedoperators|.
-%
-% Conviene que |\spanishoperators| est en el prembulo del
-% documento en s, antes de |\selectspanish| o de
-% |\begin{document}|.
-%
-% \begin{decl}
-% \txt |\dotlessi|\act{math}\deact{\textit{es-sloppy}}
-% \end{decl}
-%
-% La \textit{i} sin punto tambin es accesible directamente en modo
-% matemtico con |\dotlessi|, de forma que se puede escribir
-% |\acute{\dotlessi}|. Por ejemplo,
-% |$V_{\mathbf{cr\acute{\dotlessi}t}}$| da
-% $V_{\mathbf{cr\acute{\dotlessi}t}}$.
-%
-%
-% \section{Opciones generales}
-%
-% Estn pensadas principalmente para documentos basados en una clase
-% o un estilo editorial muy preciso que no debe tocarse. Para conocer
-% los cambios exactos, vanse las diferentes entradas que describen
-% las funciones de \textsf{spanish}.
-%
-% \begin{decl}
-% \con |es-minimal|\opp
-% \end{decl}
-%
-% Anula la mayora de los cambios pero deja unas cuantas utilidades
-% que pueden resultar utiles en el momento de escribir el texto.
-%
-% \begin{decl}
-% \con |es-sloppy|\opp
-% \end{decl}
-%
-% Anula, adems, todas las ligaduras sin excepcin, la ee en listas y los
-% grupos \textsf{text} y \textsf{math}.
-%
-% \section{Seleccin}
-%
-% \begin{decl}
-% |\selectspanish|
-% \end{decl}
-%
-% Por omisin, \babel{} deja <<dormidas>> las lenguas hasta que se
-% llega a |\begin{document}| con el fin de evitar conflictos por
-% las abreviaciones; a cambio,
-% se priva de la posibilidad de usar las lenguas en el prembulo
-% en rdenes como |\savebox|, |\title|, |\newtheorem|, etc.
-%
-% La orden |\selectspanish| permite activar \textsf{spanish} con sus
-% extensiones y abreviaciones antes de
-% |\begin{document}|.\footnote{Algunos detalles, que
-% apenas afectan a \textsf{spanish}, siguen sin activarse hasta el
-% comienzo del documento.}
-% De esta forma, podramos decir
-%\begin{verbatim}
-% \documentclass{book}
-% \usepackage[T1]{fontenc}
-% \usepackage[cp1252]{inputenc}
-% \usepackage[spanish,activeacute,es-notilde]{babel}
-% ... % Mas paquetes
-%
-% \selectspanish
-%
-% \title{Ttulo}
-% \author{Autor}
-% \newcommand{\pste}{para"-psicolgicamente}
-% ... % Mas definiciones
-%
-% \begin{document}
-%\end{verbatim}
-%
-% \section{Adaptacin}
-%
-% \subsection{Opciones por pases}
-% \label{paises}
-%
-% % \begin{decl} \con |mexico| \quad |mexico-com|
-% \end{decl}
-%
-% La primera cambia \textit{cuadro} a \textit{tabla} y desactiva tanto
-% |<||<>||>| como el punto decimal. Tambin cambia
-% |"`| y |"'| a ``\,`\,"<\,">\,'\,''. Es decir, aparte de
-% redefinir las comillas, equivale a:
-% a:
-%\begin{verbatim}
-%\usepackage[spanish,es-nodecimaldot,es-tabla,es-noquoting]{spanish}
-%\end{verbatim}
-% La segunda es similar
-% pero s activa el punto decimal. (Obsrvese que no van precedidas
-% de |es-|.)
-%
-% Probablemente, esta opcin tambin sea apropiada en algunos
-% pases de Amrica Central y del Sur.
-%
-% \subsection{Configuracin}
-%
-% En sus ltimas versiones, \babel{} ofrece la posibilidad
-% de cargar automticamente un archivo con el mismo nombre que
-% el principal, pero con extensin |.cfg|. \textsf{Spanish}
-% proporciona unas pocas rdenes para ser usadas en este archivo:
-%
-% \begin{decl}
-% \con |\es@activeacute|
-% \end{decl}
-% Activa las abreviaciones con apstrofos, sin que sea
-% necesario incluir |activeacute| como opcin en |\usepackage|.
-%
-% \begin{decl} \con |\es@enumerate{<leveli>}|%
-% |{<levelii>}{<leveliii>}{<leveliv>}|\alw
-% \end{decl}
-% Cambia los valores preestablecidos por \textsf{spanish} para
-% |enumerate|. \textit{leveln} consiste en una letra, que
-% indica qu formato tendr el nmero, seguida
-% de cualquier texto. La letra tiene que ser: |1| (arbigo),
-% |a| (minscula \emph{cursiva}\,\footnote{La letra es cursiva
-% pero no los signos que le puedan seguir. Ms bien debera
-% decirse destacada, ya que se usa |\string\emph|.
-% Vase \DTL{11}.}), |A| (versal),
-% |i| (romano \emph{versalita}), |I| (romano versal) o
-% finalmente |o| (ordinal\,\footnote{Lo normal es no aadir ningn
-% signo tras ordinal.}).
-%
-% Esta orden no est pensada para hacer cambios elaborados, sino
-% slo meros reajustes. Los valores preestablecidos
-% equivalen a
-%\begin{verbatim}
-% \es@enumerate{1.}{a)}{1)}{a$'$)}
-%\end{verbatim}
-%
-% \begin{decl} \con |\es@itemize{<leveli>}|%
-% |{<levelii>}{<leveliii>}{<leveliv>}|\alw
-% \end{decl}
-% Lo mismo para |itemize|, slo que los argumentos se
-% usan de forma literal. Los valores originales de \LaTeX{} son
-% similares a
-%\begin{verbatim}
-% \es@itemize{\textbullet}{\normalfont\bfseries\textendash}
-% {\textasteriskcentered}{\textperiodcentered}
-%\end{verbatim}
-%
-% \begin{decl}\con |\es@operators|\act{math}
-% \end{decl}
-% Todo lo relativo a operadores se cancela con
-%\begin{verbatim}
-% \let\es@operators\relax
-%\end{verbatim}
-% Es buena idea incluirlo si no se van a usar, ya que ahorra memoria.
-%
-% Otros ajustes tiles en este contexto son |\spanishoperators|,
-% |\selectspanish| y |\deactivatequoting|.
-%
-%
-% Recordemos que todos los cambios
-% operados desde este archivo restan compatibilidad al
-% documento, por lo que si se distribuye conviene adjuntarlo
-% con el entorno |filecontents|.
-%
-% \subsection{Pasar opciones desde un paquete o clase}
-%
-% \begin{decl} \con |\spanishoptions|
-% \end{decl}
-%
-% Como |\PassOptionsToPackage| aade opciones al comienzo y
-% las opciones especficas de \textsf{spanish} han de ir al final, definiendo
-% esta macro se puede controlar el comportamiento de \textsf{spanish} antes
-% de su carga.
-%
-% \subsection{Otros cambios}
-%
-% Las adaptaciones se encuentran organizadas en varios grupos, a los
-% que corresponden sendas macros:
-% |\textspanish|, |\mathspanish|,
-% |\shorthandsspanish|, |\datespanish| y |\captionsspanish|. Pueden
-% cancelarse con:
-%\begin{verbatim}
-% \renewcommand\textspanish{}
-%\end{verbatim}
-%
-% \section{Plain \TeX}
-%
-% Con Plain hay que hacer:
-%\begin{verbatim}
-% \input spanish.sty
-%\end{verbatim}
-%
-% Se incluyen: traducciones, casi todas las abreviaciones, coma
-% decimal, utilidades para divisin de palabras, ordinales en una
-% versin simplificada (y no muy elegante), funciones matemticas,
-% |\| y espaciado. La seleccin de la lengua es inmediata al
-% cargar el archivo.
-%
-% En cambio no estn disponibles: entrecomillados,
-% |\lsc| ni las adaptaciones de lengua principal.
-%
-% \section{Compatibilidad con versiones anteriores}
-%
-% En versiones de \textsf{babel} bastante antiguas, las abreviaciones
-% con |'| se activaban por omisin, mientras que ahora es necesario
-% |activeacute|.
-%
-% En la versin 4, la abreviacin |~n| se consider para extinguir.
-% En la versin 5 sigue estando, pero \textit{no} se activa por
-% omisin, sino que hay que emplear |es-tilden|.
-%
-% En la versin 5 el grupo \textsf{layout} no se retrasa a
-% |\begin{document}|, como en la 4, sino que se ejecuta
-% inmediatamente. Esto permite cambios en el prembulo con otros
-% paquetes. Con ello, adems, |\selectspanish*| carece de utilidad.
-% La opcin de paquete |es-delayed| restaura el comportamiento
-% anterior, por si hubiera alguna incompatibilidad.
-%
-% La compatibilidad con la versin 2.09 de \LaTeX{} se ha suprimido.
-%
-% \section*{Referencias}
-% \addcontentsline{toc}{section}{Referencias}
-%
-% \begingroup
-% \small
-% \leftskip1.5cm \parindent-1.5cm
-%
-% \makebox[1.5cm][l]{\lsc{DRAE}}\textit{Diccionario de la Academia
-% Espaola}, Madrid, Espasa-Calpe, 21"a ed., 1992.
-%
-% \makebox[1.5cm][l]{\lsc{DOT}}Jos Martnez de Sousa,
-% \textit{Diccionario de ortografa tcnica},
-% Madrid, Germn Snchez Ruiprez/Pirmide, 1987.
-% (Biblioteca del libro.)
-%
-% \makebox[1.5cm][l]{\lsc{DTL}}Jos Martnez de Sousa,
-% \textit{Diccionario de tipografa y del libro},
-% Madrid, Paraninfo, 3"a ed., 1992.
-%
-% \makebox[1.5cm][l]{\lsc{MEA}}Jos Martnez de Sousa,
-% \textit{Manual de edicin y autoedicin},
-% Madrid, Pirmide, 1994.
-%
-% \leftskip0pt \parindent0pt \vspace{6pt}
-%
-% {\itshape
-% Para otras cuestiones tipogrficas, las referencias
-% usadas son, entre otras:}
-%
-% \parindent-1.5pc \leftskip1.5pc \vspace{3pt}
-%
-% Asociacin de Academias de la Lengua Espaola,
-% \textit{Diccionario panhispnico de dudas}, Madrid, Santillana, 2005.
-%
-% Javier Bezos,
-% \textit{Tipografa espaola con \TeX}, documento electrnico
-% disponible en
-% \textsf{http://perso.wanadoo.es/jbezos/tipografia.html}.
-%
-% Javier Bezos,
-% \textit{Tipografa y notaciones cientficas}, Gijn,
-% Trea, 2008.
-%
-% Bureau International des Poids et mesures,
-% \textit{Le Sist\`{e}me international dnits},
-% 8"a ed., Pars, {\footnotesize BIPM}, 2006,
-% \textsf{http://www.bipm.org/""fr/""si/""si\_brochure/}, 2006-11-10.
-%
-% Jorge de Buen,
-% \textit{Manual de diseo editorial,} Mxico, Santillana, 2000.
-%
-%
-% \textit{The Chicago Manual of Style}, Chicago, University of
-% Chicago Press, 14"a~ed., 1993, esp.~pgs.~333~-335.
-%
-% Jos Fernndez Castillo,
-% \textit{Normas para correctores y compositores tipgrafos},
-% Madrid, Espasa-Calpe, 1959.
-%
-% IRANOR [AENOR], Normas \lsc{UNE} nmeros 5010 (<<Signos
-% matemticos>>), 5028 (<<Smbolos
-% geomtricos>>) y 5029 (<<Impresin de los
-% smbolos de magnitudes y unidades y de los nmeros>>).
-% [Obsoletas.]
-%
-% Llerena, Mario,
-% \textit{Un manual de estilo,} Miami, Unilit, 1999.
-%
-% Real Academia Espaola,
-% \textit{Esbozo de una nueva gramtica de la
-% lengua espaola}, Madrid, Espasa-Calpe, 1973.
-%
-% V.\ Martnez Sicluna,
-% \textit{Teora y prctica de la tipografa},
-% Barcelona, Gustavo Gili, 1945.
-%
-% Jos Martnez de Sousa,
-% \textit{Diccionario de ortografa de la lengua espaola},
-% Madrid, Paraninfo, 1996.
-%
-% Juan Martnez Val, \textit{Tipografa prctica}, Madrid,
-% Laberinto, 2002.
-%
-% Juan Jos Morato, \textit{Gua prctica del compositor
-% tipogrfico}, Madrid, Hernando, 2"a ed., 1908 (1"a ed., 1900,
-% 3"a ed., 1933).
-%
-% Marion Neubauer,
-% <<Feinheiten bei wissenschaftlichen Publikationen>>,
-% \textit{Die \TeX nisches Kom\"odie}, parte I, vol. 8, n"o 4, 1996,
-% pgs. 23-40; parte II, vol. 9, n"o 1, 1997, pgs.~25~-44.
-%
-% Notimex, \textit{Manual de operacin y estilo editorial}, Mxico,
-% Notimex, 1999.
-%
-% Jos Polo,
-% \textit{Ortografa y ciencia del lenguaje}, Madrid, Paraninfo,
-% 1974.
-%
-% Siglo 21, \textit{Libro de estilo}, Mxico, Alda,
-% $\mathrm{^s}\!$/$\mathrm{_f}$
-% (impr. 1995).
-%
-% Pedro Valle,
-% \textit{Cmo corregir sin ofender}, Buenos Aires, Lumen, 1998.
-%
-% Hugh C. Wolfe, <<Smbolos, unidades y nomenclatura>>,
-% \textit{Enciclopedia de Fsica}, dir. Rita G. Lerner y George L.
-% Trigg, Madrid, Alianza, 1987, t.~2, pgs.~1423~-1451.
-%
-%\endgroup
-%
-% \else
-%
-%^^A ======= Beginning of text as typeset by user.drv =========
-%
-% \GetFileInfo{spanish.dtx}
-%
-% \section{The Spanish language}
-%
-% The file \file{\filename}\footnote{The file described in this
-% section has version number \fileversion\ and was last revised on
-% \filedate. The maintainer from v4.0 on is Javier Bezos
-% (http://www.tex-tipografia.com). Previous
-% versions were made by Julio S\'anchez. The English documentation
-% has been improved by José Luis Rivera; thanks to him it is now a lot
-% clearer.} defines all the language-specific macros for the Spanish
-% language.
-%
-% Spanish support is implemented following mainly the guidelines given
-% by Jos\'e Mart\'\i nez de Sousa. You may get the the full
-% documentation (more comprehensive, but regrettably only in Spanish)
-% by typesetting |spanish.dtx| directly. There are examples and some
-% additional features documented in the Spanish version only.
-% Cross-references in this section point to that document.
-%
-% \paragraph{Features} This style provides:
-%
-% \begin{itemize}
-% \item Translations following the International \LaTeX{}
-% conventions, as well as |\today|.
-%
-% \item Shorthands listed in Table~\ref{tab:spanish-quote-def}.
-% Examples in subsection~3.4 are illustrative. Notice that |"~| has a
-% special meaning in \textsf{spanish} different to other languages,
-% and is used mainly in linguistic contexts.
-%
-% \begin{table}[htb]
-% \centering
-% \begin{tabular}{lp{8cm}}
-% |'a| & Acute accented a. Works for e, i, o, u, too (both
-% lowercase and uppercase).\\
-% |'n| & \~n (uppercase too).\\
-% |"i| & \"i (uppercase too).\\
-% |"u| & \"u (uppercase too).\\
-% |"a| |"o| & Ordinal numbers (uppercase |"A|, |"O| too).\\
-% |"er "ER| & Ordinal 1.\textsuperscript{er} 1.\textsuperscript{\textsc{er}}\\
-% |"c| & \c{c} (uppercase too).\\
-% |"rr| & rr, but -r when hyphenated.\\
-% |"y| & An old ligature for ``et'' (like the English \&).\\
-% |"-| & Like |\-|, but allowing hyphenation in the rest
-% the word.\\
-% |"=| & Like |-|, but allowing hyphenation in the rest
-% the word.\\
-% |"~| & The hyphen is repeated at the very beginning of
-% the next line if the word is hyphenated at this
-% point.\\
-% |""| & Like |"-| but producing no hyphen sign.\\
-% |~-| & Like |"-| but with no break after the hyphen. Works for
-% en-dashes (|~--|) and em-dashes (|~---|). |"+|, |"+-|
-% and |"+--| are synonymous.\\
-% |"/| & A slash slightly lowered, if necessary.\\
-% \verb+"|+ & Disable ligatures at this point.\\
-% |"<| & Left guillemets.\\
-% |">| & Right guillemets.\\
-% |<<| |>>| & |\begin{quoting}| and |\end{quoting}|. (See below.)
-% |"`| and |"'| are synonymous.\\
-% |"? "!| & Opening question and exlamation marks (?`!`)
-% aligned on the baseline, useful for all-caps headings, etc.
-% \end{tabular}
-% \caption{Extra definitions made by file \file{spanish.ldf}}
-% \label{tab:spanish-quote-def}
-% \end{table}
-%
-% \item |\frenchspacing|.
-%
-% \item \emph{In math mode}, a dot followed by a digit is replaced
-% by a decimal comma.
-%
-% \item Spanish ordinals and abbreviations with the |\sptext|\marg{text}
-% command as, for instance, |1\sptext{er}|. The preceptive dot is included.
-%
-% \item Accented (l\'\i m, m\'ax, m\'\i n, m\'od) and spaced
-% (arc\,cos, etc.) functions.
-%
-% \item |\dotlessi| is provided for use in math mode.
-%
-% \item A |quoting| environment and a related pair of shorthands |<<|
-% and |>>|. Useful for traditional spanish multi-paragraph quoting.
-%
-% \item There is a small space before the percent |\%| sign.
-%
-% \item |\lsc| provides lowercase small caps. (See subsection~3.10.)
-%
-% \item Ellipsis is best typed as |...| or, within a sentence, as |\...|
-%
-% \end{itemize}
-%
-% If \textsf{spanish} is the main language, the command
-% |\layoutspanish| is added to the main group, modifying the standard
-% classes throughout the whole document in the following way:
-%
-% \begin{itemize}
-%
-% \item Paragraphs are set with |\indentfirst|.
-%
-% \item Both |enumerate| and |itemize| are adapted to Spanish rules.
-%
-% \item Both |\alph| and |\Alph| include \textit{\~n} after \textit{n}.
-%
-% \item Symbol footmarks are one, two, three, etc., asterisks.
-%
-% \item |OT1| guillemets are generated with two |lasy| symbols instead
-% of small |\ll| and |\gg|.
-%
-% \item |\roman| is redefined to write small caps Roman numerals, since
-% lowercase Roman numerals are discouraged (see below).
-%
-% \item There is a dot after section numbers in titles, headings, and toc.
-%
-% \end{itemize}
-%
-% A subset of these features is implemented for Plain \TeX{}
-% (accesible with the command |\input spanish.sty|). Most
-% significantly, |\lsc|, the |quoting| environment, and features
-% provided by |\layoutspanish| are missing.
-%
-% \paragraph{Customization}
-%
-% Beginning with version 5.0, customization is made following two paths:
-% via |options| or via |commands|; these options and commands override
-% the layout for Spanish documents at different levels: options are meant for
-% use at the preamble only, while commands may be used in the configuration
-% file or at document level.
-%
-% Global options control the overall appearance of the document, and may
-% be set on the |{babel}| call, right after calling |spanish|, or
-% shortly before the call to |{babel}|, to ensure their proper loading
-% at runtime. Thus, the following calls are roughly equivalent:
-%
-% \begin{verbatim}
-% \usepackage[...,spanish,es-nosectiondot,es-nodecimaldot,...]{babel}
-%
-% \def\spanishoptions{es-nosectiondot,es-nodecimaldot}
-% \usepackage[...,spanish,...]{babel}
-% \end{verbatim}
-%
-% \begin{table}
-% \centering
-% \begin{tabular}{cccc}\hline
-% Basic Options & |es-minimal| & |es-sloppy| & |es-noshorthands| \\\hline
-% |es-noindentfirst| & X & X & \\
-% |es-nosectiondot| & X & X & \\
-% |es-nolists| & X & X & \\
-% |es-noquoting| & X & X & X \\
-% |es-notilde| & X & X & X \\
-% |es-nodecimaldot| & X & X & X \\
-% |es-nolayout| & & X & \\
-% |es-ucroman| & X & & \\
-% |es-lcroman| & X & X & \\\hline
-% \end{tabular}
-% \caption{Spanish Customization Options}
-% \label{tab:SpanishCustomizationOptions}
-% \end{table}
-%
-% Some global options are built upon lower level options, and may be
-% used as shorthand for more global customizations.
-% Table~\ref{tab:SpanishCustomizationOptions} gives an overview of the
-% global options constructed this way. Most of these options are
-% self-explanatory: they disable the changes made to the basic \LaTeX\
-% layout by |spanish|. |es-lcroman| however, and a few others, need a
-% bit of explanation, and they may be described as follows:
-%
-% \begin{itemize}
-%
-% \item Traditional Spanish typography discourages the use of
-% lowercase Roman numerals; instead, a smallcaps variant is
-% implemented. However, since |Makeindex| seems to choke on the code
-% implementing lowercase Roman numerals (via the |\lsc| macro), two
-% workarounds are implemented: the |es-ucroman| option converts all
-% Roman numerals to uppercase, and the |es-lcroman| option turns all
-% Roman numerals to lowercase; the former should be preferred over the
-% latter. Three macros control local changes to Roman numbers:
-% |\spanishscroman|, |\spanishucroman|, and |\spanishlcroman|.
-%
-% \item The |es-preindex| option calls the |romanidx.sty| package
-% automatically to fix index entries in smallcaps roman form. An
-% additional macro,
-% |\spanishindexchars|\marg{encap}\marg{openrange}\marg{closerange}
-% determines the characters delimiting index entries. Defaults are
-% \verb=\spanishindexchars{|}{(}{)}=.
-%
-% \item The |es-tilden| option restores the old tilde |~| shorthand
-% for \~n. This shorthand is however \emph{strongly} deprecated.
-%
-% \item The |es-nolayout| option disables layout changes in the
-% document when |spanish| is the main language. These changes affect
-% enumerated and itemized lists, enumerations (alphabetic order
-% excludes \~n), and symbolic footnotes.
-%
-% \item The |es-noshorthands| disables the shorthand mechanism
-% completely: neither |"| nor |'| nor |<| nor |>| nor |~| nor |.| work
-% at all.
-%
-% \item The |es-noquoting| option disables the macros |<<| and |>>|
-% calling the |quoting| environment; the alternative macros |"`| and
-% |"'| are still available.
-%
-% \item The |es-uppernames| option makes uppercase versions of
-% captions for chapter, tablename, etc.
-%
-% \item The |es-tabla| option changes ``cuadro'' for ``tabla'' in
-% captions.
-%
-% \end{itemize}
-%
-% Finally, the Spanish 5 series begins the implementation of national
-% variations of Spanish typography, beginning with Mexico. Thus the
-% global options |mexico| and |mexico-com| are adapted to practices
-% spread in Mexico, and perhaps Central America, the Caribbean, and
-% some countries in South America.\footnote{The main difference is
-% that |mexico| disables the |decimaldot| mechanism, while
-% |mexico-com| keeps it enabled; both change the |quoting|
-% environment, disabling the use of guillemets.}
-%
-% Many of the global options are implemented via macros, which may be
-% included in the configuration file |spanish.cfg|, in the preamble,
-% after the call to |babel|, and in the body of the document. These
-% macros are the following.
-%
-% \begin{itemize}
-%
-% \item The macros |\spanishdashitems| and |\spanishsignitems| change
-% the values of itemized lists to a series of dashes or an alternative
-% series of symbols, respectively.
-%
-% \item The command |\deactivatequoting| deactivates the |<<| and |>>|
-% shorthands if you want to use |<| and |>| in numerical comparisons
-% and some AMS\TeX\ commands.
-%
-% \item You may kill the space in spaced operators with
-% |\unspacedoperators|.
-%
-% \item You may kill the accents on accented operators with
-% |\unaccentedoperators|.
-%
-% \item The command |\decimalpoint| resets the decimal separator to
-% its default (dot) value, while |\spanishdecimal|\marg{symbol} allows
-% for an arbitrary definition.
-%
-% \item |\spanishplainpercent| prevents the addition of a thinspace before
-% the percent sign in texts. This might be useful for parenthesized percent
-% signs in tables, etc.
-%
-% \item The macros |\spanishdatedel| and |\spanishdatede| control the
-% if the article is given in years (|del| or |de|).
-%
-% \item The macro |\spanishreverseddate| sets the date of the format
-% ``Month Day del Year''.
-%
-% \item The macro |\Today| gives months in uppercase.
-%
-% \item The macros |\spanish|\textit{caption} change the value of the \emph{caption}
-% automatically (no need to add an |\addto|).
-%
-% \item The command |\spanishdeactivate|\marg{characters} disables the
-% shorthand characters listed in the argument. Elegible characters
-% are the set |.'"~<>|. These shorthand characters may be globally
-% deactivated for Spanish adding this command to |\shorthandsspanish|.
-%
-% \item Extras are divided in groups controlled by the commands
-% |\textspanish|, |\mathspanish|, |\shorthandsspanish| y
-% |\layoutspanish|; their values may be cancelled typing
-% |\renewcommand|\marg{command}|{}|, or changed at will (check the
-% Spanish documentation or the code for details).
-%
-% \item The command |\spanishoperators|\marg{operators} defines
-% command names for operators in Spanish. There is no standard name
-% for some of them, so they may be created or changed at will. For
-% instance, the command
-% |\renewcommand{\spanishoperators}{arc\,ctg m\acute{i}n}|
-% creates commands for these functions. The command
-% |\,| adds thinspaces at the appropriate places for spaced operators
-% (like |\arcctg| in this case), and the command |\acute|\marg{letter}
-% adds an accent to the letter included in the definition (thus,
-% |m\acute{i}n| defines the accented function |\min| (m\'\i{}n);
-% please notice that |\dotlessi| is not necessary).
-%
-% \item The commands
-% |\lquoti|\marg{string} |\rquoti|\marg{string}
-% |\lquotii|\marg{string} |\rquotii|\marg{string}
-% |\lquotiii|\marg{string} |\rquotiii|\marg{string}
-% set the quoting signs in the |quoting| environment,
-% nested from outside in. They may be |\renew|ed at will.
-% Default values are shown in table~\ref{tab:spanish-quote-ref}.
-% \begin{table}
-% \center\small
-% \vspace{1.5ex}
-% \begin{tabular}{l@{\hspace{5em}}l}
-% |\lquoti| &|"<|\\
-% |\rquoti| &|">|\\
-% |\lquotii| &|``|\\
-% |\rquotii| &|''|\\
-% |\lquotiii| &|`|\\
-% |\rquotiii| &|'|
-% \end{tabular}
-% \caption{Default quoting signs set for the \texttt{quoting} environment.}
-% \label{tab:spanish-quote-ref}
-% \end{table}
-%
-% \item The command |\selectspanish*| is obsolete: if |spanish| is the
-% main language, all its features are available right after loading
-% |babel|. The |es-delayed| option is provided to restore the
-% previous behavior and macros for backwards compatibility.
-%
-% \end{itemize}
-%
-% \fi
-% \endgroup
-%
-% \StopEventually{}
-%
-%^^A ========== End of manual ===============
-%
-% \ifx\langdeffile\undefined
-%
-% \section{The Code}
-%
-% \else
-%
-% \subsection{The Code}
-%
-% \fi
-%
-% \changes{spanish~5.0a}{2007/02/21}{Reimplemented in full, which some
-% parts rewritten from scratch. Added the es- mechanism and the mexico
-% option. Many bug fixes.}
-% \changes{spanish~5.0d}{2008/05/25}{Fixed two bugs: misplaced
-% subscripts with lim and the like; problem with \cs{roman} and hyperref.}
-% \changes{spanish~5.0h}{2009/01/02}{Removed unnecessary \cs{string}s
-% with two acutes. Added es-noenumerate, es-noitemize.}
-% \changes{spanish~5.0i}{2009/05/11}{romanidx not working. Some \cs{es@roman}
-% replaced with \cs{es@scroman}.}
-% \changes{spanish~5.0j}{2010/01/06}{Overdot \cs{.} was not robust.}
-% \changes{spanish~5.0j}{2010/04/04}{Colon in saved catcodes, because
-% babel doesn't restore it after french}
-% \changes{spanish~5.0k}{2011/08/08}{When saving ., check if
-% \cs{mathcode} is 8000}
-%
-% This file is for both \LaTeXe{} and Plain formats.
-%
-% \begin{macrocode}
-%<*code>
-\ProvidesLanguage{spanish.ldf}
- [2011/10/06 v5.0k Spanish support from the babel system]
-\LdfInit{spanish}\captionsspanish
-
-\edef\es@savedcatcodes{%
- \catcode`\noexpand\~=\the\catcode`\~
- \catcode`\noexpand\"=\the\catcode`\"
- \catcode`\noexpand\:=\the\catcode`\:}
-\catcode`\~=\active
-\catcode`\"=12
-\catcode`\:=12
-
-\ifx\undefined\l@spanish
- \@nopatterns{Spanish}
- \adddialect\l@spanish0
-\fi
-
-\def\es@sdef#1{\babel@save#1\def#1}
-\def\es@sDRC#1{\babel@save#1\DeclareRobustCommand*#1}
-
-\@ifundefined{documentclass}
- {\let\ifes@latex\iffalse}
- {\let\ifes@latex\iftrue}
-% \end{macrocode}
-%
-% Package options for spanish. To avoid error messages dummy
-% options are created on the fly when neccessary.
-%
-% \begin{macrocode}
-\ifes@latex
-
-\@ifundefined{spanishoptions}{}
-{\PassOptionsToPackage{\spanishoptions}{babel}}
-
-\def\es@genoption#1#2#3{%
- \DeclareOption{#1}{}%
- \@ifpackagewith{babel}{#1}%
- {\def\es@a{#1}%
- \expandafter\let\expandafter\es@b\csname opt@babel.sty\endcsname
- \addto\es@b{,#2}%
- \expandafter\let\csname opt@babel.sty\endcsname\es@b
- \AtEndOfPackage{#3}}%
- {}}
-
-\es@genoption{es-minimal}
- {es-ucroman,es-noindentfirst,es-nosectiondot,es-noenumerate,%
- es-noitemize,es-noquoting,es-notilde,es-nodecimaldot}
- {\spanishplainpercent
- \let\es@operators\relax}
-\es@genoption{es-nolists}
- {es-noenumerate,es-noitemize}{}
-\es@genoption{es-sloppy}
- {es-nolayout,es-noshorthands}{}
-\es@genoption{es-noshorthands}
- {es-noquoting,es-nodecimaldot,es-notilde}{}
-\es@genoption{mexico}
- {mexico-com,es-nodecimaldot}{}
-\es@genoption{mexico-com}
- {es-tabla,es-noquoting}
- {\def\lquoti{``}\def\rquoti{''}%
- \def\lquotii{`}\def\rquotii{'}%
- \def\lquotiii{\guillemotleft{}}%
- \def\rquotiii{\guillemotright{}}}
-
-\def\es@ifoption#1#2#3{%
- \DeclareOption{es-#1}{}%
- \@ifpackagewith{babel}{es-#1}{#2}{#3}}%
-
-\def\es@optlayout#1#2{\es@ifoption{#1}{}{\addto\layoutspanish{#2}}}
-
-\else
-
-\def\es@ifoption#1#2#3{\@namedef{spanish#1}{#2}}
-
-\fi
-
-\let\es@uclc\@secondoftwo
-\es@ifoption{uppernames}{\let\es@uclc\@firstoftwo}{}
-
-\def\es@tablename{Ccuadro}
-\es@ifoption{tabla}{\def\es@tablename{Ttabla}}{}
-\es@ifoption{cuadro}{\def\es@tablename{Ccuadro}}{}
-% \end{macrocode}
-%
-% Captions follow a two step schema, so that, say, |\refname| is
-% defined as |\spanishrefname| which in turn contains the string
-% to be printed. The final definition of |\captionsspanish|
-% is built below.
-%
-% \begin{macrocode}
-\def\captionsspanish{%
- \es@a{preface}{Prefacio}%
- \es@a{ref}{Referencias}%
- \es@a{abstract}{Resumen}%
- \es@a{bib}{Bibliograf\'{\i}a}%
- \es@a{chapter}{Cap\'{\i}tulo}%
- \es@a{appendix}{Ap\'{e}ndice}%
- \es@a{listfigure}{\'{I}ndice de \es@uclc Ffiguras}%
- \es@a{listtable}{\'{I}ndice de \expandafter\es@uclc\es@tablename s}%
- \es@a{index}{\'{I}ndice \es@uclc Aalfab\'{e}tico}%
- \es@a{figure}{Figura}%
- \es@a{table}{\expandafter\@firstoftwo\es@tablename}%
- \es@a{part}{Parte}%
- \es@a{encl}{Adjunto}%
- \es@a{cc}{Copia a}%
- \es@a{headto}{A}%
- \es@a{page}{p\'{a}gina}%
- \es@a{see}{v\'{e}ase}%
- \es@a{also}{v\'{e}ase tambi\'{e}n}%
- \es@a{proof}{Demostraci\'{o}n}%
- \es@a{glossary}{Glosario}%
- \@ifundefined{chapter}
- {\es@a{contents}{\'Indice}}%
- {\es@a{contents}{\'Indice \es@uclc Ggeneral}}}
-
-\def\es@a#1{\@namedef{spanish#1name}}
-\captionsspanish
-\def\es@a#1#2{%
- \def\expandafter\noexpand\csname#1name\endcsname
- {\expandafter\noexpand\csname spanish#1name\endcsname}}
-\edef\captionsspanish{\captionsspanish}
-% \end{macrocode}
-%
-% Now two macros for dates (upper and lowercase).
-%
-% \begin{macrocode}
-\def\es@month#1{%
- \expandafter#1\ifcase\month\or Eenero\or Ffebrero\or
- Mmarzo\or Aabril\or Mmayo\or Jjunio\or Jjulio\or Aagosto\or
- Sseptiembre\or Ooctubre\or Nnoviembre\or Ddiciembre\fi}
-
-\def\es@today#1{%
- \ifcase\es@datefmt
- \the\day~de \es@month#1%
- \else
- \es@month#1~\the\day
- \fi
- \ de\ifnum\year>1999\es@yearl\fi~\the\year}
-
-\def\datespanish{%
- \def\today{\es@today\@secondoftwo}%
- \def\Today{\es@today\@firstoftwo}}
-\newcount\es@datefmt
-\def\spanishreverseddate{\es@datefmt\@ne}
-\def\spanishdatedel{\def\es@yearl{l}}
-\def\spanishdatede{\let\es@yearl\@empty}
-\spanishdatede
-% \end{macrocode}
-%
-% The basic macros to select the language in the preamble or the
-% config file. Use of |\selectlanguage| should be avoided at this
-% early stage because the active chars are not yet
-% active. |\selectspanish| makes them active.
-%
-% \begin{macrocode}
-\def\selectspanish{%
- \def\selectspanish{%
- \def\selectspanish{%
- \PackageWarning{spanish}{Extra \string\selectspanish ignored}}%
- \es@select}}
-\@onlypreamble\selectspanish
-\def\es@select{%
- \let\es@select\@undefined
- \selectlanguage{spanish}}
-
-\let\es@shlist\@empty
-% \end{macrocode}
-%
-% Instead of joining all the extras directly in |\extrasspanish|,
-% we subdivide them in three further groups.
-%
-% \begin{macrocode}
-\def\extrasspanish{%
- \textspanish
- \mathspanish
- \ifx\shorthandsspanish\@empty
- \expandafter\spanishdeactivate\expandafter{\es@shlist}%
- \languageshorthands{none}%
- \else
- \shorthandsspanish
- \fi}
-\def\noextrasspanish{%
- \ifx\textspanish\@empty\else
- \notextspanish
- \fi
- \ifx\mathspanish\@empty\else
- \nomathspanish
- \fi
- \ifx\shorthandsspanish\@empty\else
- \noshorthandsspanish
- \fi
- \csname es@restorelist\endcsname}
-
-\addto\textspanish{\es@sDRC\sptext{\es@sptext}}
-
-\def\es@orddot{.}
-% \end{macrocode}
-%
-% The definition of |\sptext| is more elaborated than that of
-% |\textsuperscript|. With uppercase superscript text
-% the scriptscriptsize is used. The mandatory dot is already
-% included. There are two versions, depending on the
-% format.
-%
-% \begin{macrocode}
-\ifes@latex
- \def\es@sptext#1{%
- {\es@orddot
- \setbox\z@\hbox{8}\dimen@\ht\z@
- \csname S@\f@size\endcsname
- \edef\@tempa{\def\noexpand\@tempc{#1}%
- \lowercase{\def\noexpand\@tempb{#1}}}\@tempa
- \ifx\@tempb\@tempc
- \fontsize\sf@size\z@
- \selectfont
- \advance\dimen@-1.15ex
- \else
- \fontsize\ssf@size\z@
- \selectfont
- \advance\dimen@-1.5ex
- \fi
- \math@fontsfalse\raise\dimen@\hbox{#1}}}
-\else
- \let\sptextfont\rm
- \def\es@sptext#1{%
- {\es@orddot
- \setbox\z@\hbox{8}\dimen@\ht\z@
- \edef\@tempa{\def\noexpand\@tempc{#1}%
- \lowercase{\def\noexpand\@tempb{#1}}}\@tempa
- \ifx\@tempb\@tempc
- \advance\dimen@-0.75ex
- \raise\dimen@\hbox{$\scriptstyle\sptextfont#1$}%
- \else
- \advance\dimen@-0.8ex
- \raise\dimen@\hbox{$\scriptscriptstyle\sptextfont#1$}%
- \fi}}
-\fi
-% \end{macrocode}
-%
-% Lowercase small caps. We check if the current font has small
-% caps. If not, we fakes them. \cs{selectfont} in \cs{es@lsc}
-% seems redundant, but it's not. An intermediate macro allows
-% using an optimized variant for Roman numerals.
-%
-% \begin{macrocode}
-\ifes@latex
- \addto\textspanish{\es@sDRC\lsc{\es@lsc}}
- \def\es@lsc{\es@xlsc\MakeUppercase\MakeLowercase}
- \def\es@xlsc#1#2#3{%
- \leavevmode
- \hbox{%
- \scshape\selectfont
- \expandafter\ifx\csname\f@encoding/\f@family/\f@series
- /n/\f@size\expandafter\endcsname
- \csname\curr@fontshape/\f@size\endcsname
- \csname S@\f@size\endcsname
- \fontsize\sf@size\z@\selectfont
- \PackageWarning{spanish}{Replacing `\curr@fontshape' by
- \MessageBreak faked small caps}%
- #1{#3}%
- \else
- #2{#3}%
- \fi}}
-\fi
-% \end{macrocode}
-%
-% The |quoting| environment (not available in Plain). Overriding
-% the default |\everypar| is a bit tricky.
-%
-% \begin{macrocode}
-\newif\ifes@listquot
-
-\ifes@latex
- \csname newtoks\endcsname\es@quottoks
- \csname newcount\endcsname\es@quotdepth
- \newenvironment{quoting}
- {\leavevmode
- \advance\es@quotdepth\@ne
- \csname lquot\romannumeral\es@quotdepth\endcsname%
- \ifnum\es@quotdepth=\@ne
- \es@listquotfalse
- \let\es@quotpar\everypar
- \let\everypar\es@quottoks
- \everypar\expandafter{\the\es@quotpar}%
- \es@quotpar{\the\everypar
- \ifes@listquot\global\es@listquotfalse\else\es@quotcont\fi}%
- \fi
- \toks@\expandafter{\es@quotcont}%
- \edef\es@quotcont{\the\toks@
- \expandafter\noexpand
- \csname rquot\romannumeral\es@quotdepth\endcsname}}
- {\csname rquot\romannumeral\es@quotdepth\endcsname}
- \def\lquoti{\guillemotleft{}}
- \def\rquoti{\guillemotright{}}
- \def\lquotii{``}
- \def\rquotii{''}
- \def\lquotiii{`}
- \def\rquotiii{'}
- \let\es@quotcont\@empty
-% \end{macrocode}
-%
-% If there is a marginpar inside quoting, we don't add the
-% quotes. |\es@listqout| stores the quotes to be used before
-% item labels; otherwise they could appear after the labels.
-%
-% \begin{macrocode}
- \addto\@marginparreset{\let\es@quotcont\@empty}
- \DeclareRobustCommand\es@listquot{%
- \csname rquot\romannumeral\es@quotdepth\endcsname
- \global\es@listquottrue}
-\fi
-% \end{macrocode}
-%
-% |\frenchspacing|, |\...| and |\%|.
-%
-% \begin{macrocode}
-\addto\textspanish{\bbl@frenchspacing}
-\addto\notextspanish{\bbl@nonfrenchspacing}
-\addto\textspanish{%
- \let\es@save@dot\.%
- \es@sDRC\.{\@ifnextchar.{\es@dots}{\es@save@dot}}}
-\def\es@dots..{\leavevmode\hbox{...}\spacefactor\@M}
-\def\es@sppercent{\unskip\textormath{$\m@th\,$}{\,}}
-\def\spanishplainpercent{\let\es@sppercent\@empty}
-\addto\textspanish{%
- \let\percentsign\%%
- \es@sDRC\%{\es@sppercent\percentsign{}}}
-% \end{macrocode}
-%
-% Now, the math group. It's not easy to add an accent to an
-% operator, because we must avoid using text (that is, |\mbox|)
-% where we have no control on font and size, and at the same time
-% we need |\i|, which is forbidden in math mode. |\dotlessi| must
-% be converted to uppercase if necessary in \LaTeXe. There are two
-% versions, depending on the format.
-%
-% \begin{macrocode}
-\addto\mathspanish{\es@sDRC\dotlessi{\es@dotlessi}}
-\let\nomathspanish\relax
-
-\ifes@latex
- \def\es@texti{\i}
- \addto\@uclclist{\dotlessi\es@texti}
-\fi
-
-\ifes@latex
- \def\es@dotlessi{%
- \ifmmode
- {\ifnum\mathgroup=\m@ne
- \imath
- \else
- \count@\escapechar \escapechar=\m@ne
- \expandafter\expandafter\expandafter
- \split@name\expandafter\string\the\textfont\mathgroup\@nil
- \escapechar=\count@
- \@ifundefined{\f@encoding\string\i}%
- {\edef\f@encoding{\string?}}{}%
- \expandafter\count@\the\csname\f@encoding\string\i\endcsname
- \advance\count@"7000
- \mathchar\count@
- \fi}%
- \else
- \i
- \fi}
-\else
- \def\es@dotlessi{\textormath{\i}{\mathchar"7010}}
-\fi
-
-\def\accentedoperators{%
- \def\es@op@ac##1{\acute{\if i##1\dotlessi\else##1\fi}}}
-\def\unaccentedoperators{%
- \def\es@op@ac##1{##1}}
-\accentedoperators
-\def\spacedoperators{\let\es@op@sp\,}
-\def\unspacedoperators{\let\es@op@sp\@empty}
-\spacedoperators
-\addto\mathspanish{\es@operators}
-
-\ifes@latex\else
- \let\operator@font\rm
-\fi
-% \end{macrocode}
-%
-% Operators are stored in |\es@operators|, which is
-% included in the math group. Since |\operator@font| is
-% defined in \LaTeXe{} only, we define it in the plain variant.
-%
-% \begin{macrocode}
-\def\es@operators{%
- \es@sdef\bmod{\nonscript\mskip-\medmuskip\mkern5mu
- \mathbin{\operator@font m\es@op@ac od}\penalty900\mkern5mu
- \nonscript\mskip-\medmuskip}%
- \@ifundefined{@amsmath@err}%
- {\es@sdef\pmod##11{\allowbreak\mkern18mu
- ({\operator@font m\es@op@ac od}\,\,##11)}}%
- {\es@sdef\mod##1{\allowbreak\if@display\mkern18mu
- \else\mkern12mu\fi{\operator@font m\es@op@ac od}\,\,##1}%
- \es@sdef\pmod##1{\pod{{\operator@font m\es@op@ac od}%
- \mkern6mu##1}}}%
- \def\es@a##1 {%
- \if^##1^% empty? continue
- \bbl@afterelse
- \es@a
- \else
- \bbl@afterfi
- {\if&##1% &? finish
- \else
- \bbl@afterfi
- \begingroup
- \let\,\@empty % ignore when def'ing name
- \let\acute\@firstofone % id
- \edef\es@b{\expandafter\noexpand\csname##1\endcsname}%
- \def\,{\noexpand\es@op@sp}%
- \def\acute{\noexpand\es@op@ac}%
- \edef\es@a{\endgroup
- \noexpand\es@sdef\expandafter\noexpand\es@b{%
- \mathop{\noexpand\operator@font##1}\es@c}}%
- \es@a % restores itself
- \es@a
- \fi}%
- \fi}%
- \let\es@b\spanishoperators
- \addto\es@b{ }%
- \let\es@c\@empty
- \expandafter\es@a\es@b l\acute{i}m l\acute{i}m\,sup
- l\acute{i}m\,inf m\acute{a}x \acute{i}nf m\acute{i}n & %
- \def\es@c{\nolimits}%
- \expandafter\es@a\es@b sen tg arc\,sen arc\,cos arc\,tg & }
-\def\spanishoperators{cotg cosec senh tgh }
-% \end{macrocode}
-%
-% Now comes the text shorthands. They are grouped in
-% |\shorthandsspanish| and this style performs some
-% operations before the babel shortands are called.
-% The aims are to allow espression like |$a^{x'}$|
-% and to deactivate shorthands by making them of
-% category `other.' After providing a |\'i| shorthand,
-% the new macros are defined.
-%
-% \begin{macrocode}
-\DeclareTextCompositeCommand{\'}{OT1}{i}{\@tabacckludge'{\i}}
-
-\def\es@set@shorthand#1{%
- \expandafter\edef\csname es@savecat\string#1\endcsname
- {\the\catcode`#1}%
- \initiate@active@char{#1}%
- \catcode`#1=\csname es@savecat\string#1\endcsname\relax
- \if.#1\else
- \addto\es@restorelist{\es@restore{#1}}%
- \addto\es@select{\shorthandon{#1}}%
- \addto\shorthandsspanish{\es@activate{#1}}%
- \addto\es@shlist{#1}%
- \fi}
-
-\def\es@use@shorthand{%
- \if@safe@actives
- \bbl@afterelse
- \string
- \else
- \bbl@afterfi
- {\ifx\thepage\relax
- \bbl@afterelse
- \string
- \else
- \bbl@afterfi
- \es@use@sh
- \fi}%
- \fi}
-
-\def\es@use@sh#1{%
- \ifx\protect\@unexpandable@protect
- \bbl@afterelse
- \noexpand#1%
- \else%
- \bbl@afterfi
- \textormath
- {\csname active@char\string#1\endcsname}%
- {\csname normal@char\string#1\endcsname}%
- \fi}
-
-\gdef\es@activate#1{%
- \begingroup
- \lccode`\~=`#1
- \lowercase{%
- \endgroup
- \def~{\es@use@shorthand~}}}
-
-\def\spanishdeactivate#1{%
- \@tfor\@tempa:=#1\do{\expandafter\es@spdeactivate\@tempa}}
-
-\def\es@spdeactivate#1{%
- \if.#1%
- \mathcode`\.=\es@period@math\relax
- \begingroup\lccode`\~=`\.\lowercase{\endgroup\let~\es@period@code}%
- \else
- \begingroup
- \lccode`\~=`#1
- \lowercase{%
- \endgroup
- \expandafter\let\expandafter~%
- \csname normal@char\string#1\endcsname}%
- \catcode`#1=\csname es@savecat\string#1\endcsname\relax
- \fi}
-% \end{macrocode}
-%
-% |\es@restore| is used in the list |\es@restorelist|, which in
-% turn restores all shorthands as defined by \babel. The latter
-% macros also has |\es@quoting|.
-%
-% \begin{macrocode}
-\def\es@restore#1{%
- \shorthandon{#1}%
- \begingroup
- \lccode`\~=`#1
- \lowercase{%
- \endgroup
- \bbl@deactivate{~}}}
-% \end{macrocode}
-%
-% To selectively define the shorthands we have a couple of
-% macros, which defines a certain combination if the first
-% character has been activated as a shorthand. The second
-% one is intended for a few shorthands with an alternative
-% form.
-%
-% \begin{macrocode}
-\def\es@declare#1{%
- \@ifundefined{es@savecat\expandafter\string\@firstoftwo#1}%
- {\@gobble}%
- {\declare@shorthand{spanish}{#1}}}
-\def\es@declarealt#1#2#3{%
- \es@declare{#1}{#3}%
- \es@declare{#2}{#3}}
-
-\ifes@latex\else
- \def\@tabacckludge#1{\csname\string#1\endcsname}
-\fi
-
-\@ifundefined{add@accent}{\def\add@accent#1#2{\accent#1 #2}}{}
-% \end{macrocode}
-%
-% Instead of redefining |\'|, we redefine the internal
-% macro for the OT1 encoding.
-%
-% \begin{macrocode}
-\ifes@latex
- \def\es@accent#1#2#3{%
- \expandafter\@text@composite
- \csname OT1\string#1\endcsname#3\@empty\@text@composite
- {\bbl@allowhyphens\add@accent{#2}{#3}\bbl@allowhyphens
- \setbox\@tempboxa\hbox{#3%
- \global\mathchardef\accent@spacefactor\spacefactor}%
- \spacefactor\accent@spacefactor}}
-\else
- \def\es@accent#1#2#3{%
- \bbl@allowhyphens\add@accent{#2}{#3}\bbl@allowhyphens
- \spacefactor\sfcode`#3 }
-\fi
-
-\addto\shorthandsspanish{\languageshorthands{spanish}}%
-\es@ifoption{noshorthands}{}{\es@set@shorthand{"}}
-% \end{macrocode}
-%
-% We override the default |"| of babel, intended for german.
-%
-% \begin{macrocode}
-\def\es@umlaut#1{%
- \bbl@allowhyphens\add@accent{127}#1\bbl@allowhyphens
- \spacefactor\sfcode`#1 }
-
-\addto\shorthandsspanish{%
- \babel@save\bbl@umlauta
- \let\bbl@umlauta\es@umlaut}
-\let\noshorthandsspanish\relax
-
-\ifes@latex
-\addto\shorthandsspanish{%
- \expandafter\es@sdef\csname OT1\string\~\endcsname{\es@accent\~{126}}%
- \expandafter\es@sdef\csname OT1\string\'\endcsname{\es@accent\'{19}}}
-\else
-\addto\shorthandsspanish{%
- \es@sdef\~{\es@accent\~{126}}%
- \es@sdef\'#1{\if#1i\es@accent\'{19}\i\else\es@accent\'{19}{#1}\fi}}
-\fi
-
-\def\es@sptext@r#1#2{\es@sptext{#1#2}}
-\es@declare{"a}{\sptext{a}}
-\es@declare{"A}{\sptext{A}}
-\es@declare{"o}{\sptext{o}}
-\es@declare{"O}{\sptext{O}}
-\es@declare{"e}{\protect\es@sptext@r{e}}
-\es@declare{"E}{\protect\es@sptext@r{E}}
-\es@declare{"u}{\"u}
-\es@declare{"U}{\"U}
-\es@declare{"i}{\"{\i}}
-\es@declare{"I}{\"I}
-\es@declare{"c}{\c{c}}
-\es@declare{"C}{\c{C}}
-\es@declare{"<}{\guillemotleft{}}
-\es@declare{">}{\guillemotright{}}
-\def\es@chf{\char\hyphenchar\font}
-\es@declare{"-}{\bbl@allowhyphens\-\bbl@allowhyphens}
-\es@declare{"=}{\bbl@allowhyphens\es@chf\hskip\z@skip}
-\es@declare{"~}
- {\bbl@allowhyphens
- \discretionary{\es@chf}{\es@chf}{\es@chf}%
- \bbl@allowhyphens}
-\es@declare{"r}
- {\bbl@allowhyphens
- \discretionary{\es@chf}{}{r}%
- \bbl@allowhyphens}
-\es@declare{"R}
- {\bbl@allowhyphens
- \discretionary{\es@chf}{}{R}%
- \bbl@allowhyphens}
-\es@declare{"y}
- {\@ifundefined{scalebox}%
- {\ensuremath{\tau}}%
- {\raisebox{1ex}{\scalebox{-1}{\resizebox{.45em}{1ex}{2}}}}}
-\es@declare{""}{\hskip\z@skip}
-\es@declare{"/}
- {\setbox\z@\hbox{/}%
- \dimen@\ht\z@
- \advance\dimen@-1ex
- \advance\dimen@\dp\z@
- \dimen@.31\dimen@
- \advance\dimen@-\dp\z@
- \ifdim\dimen@>0pt
- \kern.01em\lower\dimen@\box\z@\kern.03em
- \else
- \box\z@
- \fi}
-\es@declare{"?}
- {\setbox\z@\hbox{?`}%
- \leavevmode\raise\dp\z@\box\z@}
-\es@declare{"!}
- {\setbox\z@\hbox{!`}%
- \leavevmode\raise\dp\z@\box\z@}
-
-\def\spanishdecimal#1{\def\es@decimal{{#1}}}
-\def\decimalcomma{\spanishdecimal{,}}
-\def\decimalpoint{\spanishdecimal{.}}
-\decimalcomma
-\es@ifoption{nodecimaldot}{}
- {\AtBeginDocument{\bgroup\@fileswfalse}%
- \begingroup\lccode`\~=`\.\lowercase{\endgroup
- \let\es@period@code~%
- \es@set@shorthand{.}%
- \let~\es@period@code}%
- \AtBeginDocument{\egroup}%
- \@namedef{normal@char\string.}{%
- \@ifnextchar\egroup
- {\es@period@code}%
- {\csname active@char\string.\endcsname}}%
- \declare@shorthand{system}{.}{\es@period@code}%
- \addto\shorthandsspanish{%
- \babel@savevariable{\mathcode`\.}%
- \edef\es@period@math{\the\mathcode`\.}%
- \babel@save\es@period@code
- \ifnum\es@period@math="8000
- \begingroup\lccode`\~=`\.\lowercase{\endgroup\let\es@period@code~}%
- \else
- \mathchardef\es@period@code\es@period@math\relax
- \mathcode`\.="8000 %
- \fi
- \begingroup\lccode`\~=`\.\lowercase{\endgroup\babel@save~}%
- \es@activate{.}}%
- \def\es@a#1{\es@declare{.#1}{\es@decimal#1}}%
- \es@a1\es@a2\es@a3\es@a4\es@a5\es@a6\es@a7\es@a8\es@a9\es@a0}
-
-
-\es@ifoption{notilde}{}{\es@set@shorthand{~}}
-\def\deactivatetilden{%
- \expandafter\let\csname spanish@sh@\string~@n@\endcsname\relax
- \expandafter\let\csname spanish@sh@\string~@N@\endcsname\relax}
-\es@ifoption{tilden}
- {\es@declare{~n}{\~n}%
- \es@declare{~N}{\~N}}
- {\let\deactivatetilden\relax}
-\es@declarealt{~-}{"+}{%
- \leavevmode
- \bgroup
- \let\@sptoken\es@dashes % Changes \@ifnextchar behaviour
- \@ifnextchar-%
- {\es@dashes}%
- {\hbox{\es@chf}\egroup}}
-\def\es@dashes-{%
- \@ifnextchar-%
- {\bbl@allowhyphens\hbox{---}\bbl@allowhyphens\egroup\@gobble}%
- {\bbl@allowhyphens\hbox{--}\bbl@allowhyphens\egroup}}
-
-\es@ifoption{noquoting}%
- {\let\es@quoting\relax
- \let\activatequoting\relax
- \let\deactivatequoting\relax}
- {\@ifundefined{XML@catcodes}%
- {\es@set@shorthand{<}%
- \es@set@shorthand{>}%
- \declare@shorthand{system}{<}{\csname normal@char\string<\endcsname}%
- \declare@shorthand{system}{>}{\csname normal@char\string>\endcsname}%
- \addto\es@restorelist{\es@quoting}%
- \addto\es@select{\es@quoting}%
- \ifes@latex
- \AtBeginDocument{%
- \es@quoting
- \if@filesw
- \immediate\write\@mainaux{\string\@nameuse{es@quoting}}%
- \fi}%
- \fi
- \def\activatequoting{%
- \shorthandon{<>}%
- \let\es@quoting\activatequoting}%
- \def\deactivatequoting{%
- \shorthandoff{<>}%
- \let\es@quoting\deactivatequoting}}{}}
-
-\es@declarealt{<<}{"`}{\begin{quoting}}
-\es@declarealt{>>}{"'}{\end{quoting}}
-% \end{macrocode}
-%
-% Acute accent shorthands are stored in a macro. If |activeacute|
-% was set as an option it's executed. If not is not deleted for a
-% possible later use in the |cfg| file. In non \LaTeXe{} formats
-% it's always executed.
-%
-% \changes{spanish~5.0e}{2008/07/06}{Two acutes in a row should be
-% turned into a double right quote}
-% \changes{spanish~5.0g}{2008/07/20}{Fixed bad kerning before two
-% acutes}
-%
-% \begin{macrocode}
-\begingroup
-\catcode`\'=12
-\gdef\es@activeacute{%
- \es@set@shorthand{'}%
- \def\es@a##1{\es@declare{'##1}{\@tabacckludge'##1}}%
- \es@a a\es@a e\es@a i\es@a o\es@a u%
- \es@a A\es@a E\es@a I\es@a O\es@a U%
- \es@declare{'n}{\~n}%
- \es@declare{'N}{\~N}%
- \es@declare{''}{''}%
-% \end{macrocode}
-%
-% But \textsf{spanish} allows two category codes for |'|,
-% so both should be taken into account in \cs{bbl@pr@m@s}.
-%
-% \begin{macrocode}
- \let\es@pr@m@s\bbl@pr@m@s
- \def\bbl@pr@m@s{%
- \ifx'\@let@token
- \bbl@afterelse
- \pr@@@s
- \else
- \bbl@afterfi
- \es@pr@m@s
- \fi}%
- \let\es@activeacute\relax}
-\endgroup
-
-\ifes@latex
- \@ifpackagewith{babel}{activeacute}{\es@activeacute}{}
-\else
- \es@activeacute
-\fi
-% \end{macrocode}
-%
-% And the customization. By default these macros only
-% store the values and do nothing.
-%
-% \begin{macrocode}
-\def\es@enumerate#1#2#3#4{\def\es@enum{{#1}{#2}{#3}{#4}}}
-\def\es@itemize#1#2#3#4{\def\es@item{{#1}{#2}{#3}{#4}}}
-
-\ifes@latex
-\es@enumerate{1.}{a)}{1)}{a$'$}
-\def\spanishdashitems{\es@itemize{---}{---}{---}{---}}
-\def\spanishsymbitems{%
- \es@itemize
- {\leavevmode\hbox to 1.2ex
- {\hss\vrule height .9ex width .7ex depth -.2ex\hss}}%
- {\textbullet}%
- {$\m@th\circ$}%
- {$\m@th\diamond$}}
-\def\spanishsignitems{%
- \es@itemize{\textbullet}%
- {$\m@th\circ$}%
- {$\m@th\diamond$}%
- {$\m@th\triangleright$}}
-\spanishsymbitems
-\def\es@enumdef#1#2#3\@@{%
- \if#21%
- \@namedef{theenum#1}{\arabic{enum#1}}%
- \else\if#2a%
- \@namedef{theenum#1}{\emph{\alph{enum#1}}}%
- \else\if#2A%
- \@namedef{theenum#1}{\Alph{enum#1}}%
- \else\if#2i%
- \@namedef{theenum#1}{\roman{enum#1}}%
- \else\if#2I%
- \@namedef{theenum#1}{\Roman{enum#1}}%
- \else\if#2o%
- \@namedef{theenum#1}{\arabic{enum#1}\sptext{o}}%
- \fi\fi\fi\fi\fi\fi
- \toks@\expandafter{\csname theenum#1\endcsname}%
- \expandafter\edef\csname labelenum#1\endcsname
- {\noexpand\es@listquot\the\toks@#3}}
-\def\es@guillemot#1#2{%
- \ifmmode#1%
- \else
- \save@sf@q{\penalty\@M
- \leavevmode\hbox{\usefont{U}{lasy}{m}{n}%
- \char#2 \kern-0.19em\char#2 }}%
- \fi}
-\def\layoutspanish{%
- \let\layoutspanish\@empty
- \DeclareTextCommand{\guillemotleft}{OT1}{\es@guillemot\ll{40}}%
- \DeclareTextCommand{\guillemotright}{OT1}{\es@guillemot\gg{41}}%
- \def\@fnsymbol##1%
- {\ifcase##1\or*\or**\or***\or****\or
- *****\or******\else\@ctrerr\fi}%
- \def\@alph##1%
- {\ifcase##1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
- k\or l\or m\or n\or \~n\or o\or p\or q\or r\or s\or t\or u\or v\or
- w\or x\or y\or z\else\@ctrerr\fi}%
- \def\@Alph##1%
- {\ifcase##1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
- K\or L\or M\or N\or \~N\or O\or P\or Q\or R\or S\or T\or U\or V\or
- W\or X\or Y\or Z\else\@ctrerr\fi}}
-
-\es@optlayout{noenumerate}{%
- \def\es@enumerate#1#2#3#4{%
- \es@enumdef{i}#1\@empty\@empty\@@
- \es@enumdef{ii}#2\@empty\@empty\@@
- \es@enumdef{iii}#3\@empty\@empty\@@
- \es@enumdef{iv}#4\@empty\@empty\@@}%
- \def\p@enumii{\theenumi}%
- \def\p@enumiii{\p@enumii\theenumii}%
- \def\p@enumiv{\p@enumiii\theenumiii}%
- \expandafter\es@enumerate\es@enum}
-\es@optlayout{noitemize}{%
- \def\es@itemize#1#2#3#4{%
- \def\labelitemi{\es@listquot#1}%
- \def\labelitemii{\es@listquot#2}%
- \def\labelitemiii{\es@listquot#3}%
- \def\labelitemiv{\es@listquot#4}}%
- \expandafter\es@itemize\es@item}
-\let\esromanindex\@secondoftwo
-\es@ifoption{ucroman}
- {\def\es@romandef{%
- \def\esromanindex##1##2{##1{\uppercase{##2}}}%
- \def\@roman{\@Roman}}}
- {\def\es@romandef{%
- \def\esromanindex##1##2{##1{\es@scroman{##2}}}%
- \def\@roman##1{\es@roman{\number##1}}%
- \def\es@roman##1{\es@scroman{\romannumeral##1}}%
- \DeclareRobustCommand\es@scroman{\es@xlsc\uppercase\@firstofone}}}
-\es@optlayout{lcroman}{\es@romandef}
-\newcommand\spanishlcroman{\def\@roman##1{\romannumeral##1}}
-\newcommand\spanishucroman{\def\@roman{\@Roman}}
-\newcommand\spanishscroman{\def\@roman##1{\es@roman{\romannumeral##1}}}
-\es@optlayout{noindentfirst}{%
- \let\@afterindentfalse\@afterindenttrue
- \@afterindenttrue}
-\es@optlayout{nosectiondot}{%
- \def\@seccntformat#1{\csname the#1\endcsname.\quad}%
- \def\numberline#1{\hb@xt@\@tempdima{#1\if&#1&\else.\fi\hfil}}}
-\es@ifoption{nolayout}{\let\layoutspanish\relax}{}
-\es@ifoption{sloppy}{\let\textspanish\relax\let\mathspanish\relax}{}
-\es@ifoption{delayed}{}{\def\es@layoutspanish{\layoutspanish}}
-\es@ifoption{preindex}{\AtEndOfPackage{\RequirePackage{romanidx}}}{}
-% \end{macrocode}
-%
-% We need to execute the following code when babel has been
-% run, in order to see if |spanish| is the main language.
-%
-% \begin{macrocode}
-\AtEndOfPackage{%
-\let\es@activeacute\@undefined
-\def\bbl@tempa{spanish}%
-\ifx\bbl@main@language\bbl@tempa
- \@nameuse{es@layoutspanish}%
- \addto\es@select{%
- \@ifstar{\PackageError{spanish}%
- {Old syntax--use es-nolayout}%
- {If you don't want changes in layout\MessageBreak
- use the es-nolayout package option}}%
- {}}%
- \AtBeginDocument{\layoutspanish}%
-\fi
-\selectspanish}
-\fi
-% \end{macrocode}
-%
-% After restoring the catcode of |~| and setting the minimal
-% values for hyphenation, the |.ldf| is finished.
-%
-% \begin{macrocode}
-\es@savedcatcodes
-\providehyphenmins{\CurrentOption}{\tw@\tw@}
-\ifes@latex\else
- \es@select
-\fi
-\ldf@finish{spanish}
-\csname activatequoting\endcsname
-%</code>
-% \end{macrocode}
-% That's all in the main file.
-%
-% The |spanish| option writes a macro in the page field of
-% \textit{MakeIndex} in entries with small caps number, and they
-% are rejected. This program is a preprocessor which moves this
-% macro to the entry field. It can be called from the main
-% document as a package or with the package option |es-preindex|.
-%
-% \begin{macrocode}
-%<*indexes>
-\makeatletter
-
-\@ifundefined{es@idxfile}
- {\def\spanishindexchars#1#2#3{%
- \edef\es@encap{`\expandafter\noexpand\csname\string#1\endcsname}%
- \edef\es@openrange{`\expandafter\noexpand\csname\string#2\endcsname}%
- \edef\es@closerange{`\expandafter\noexpand\csname\string#3\endcsname}}%
- \spanishindexchars{|}{(}{)}%
- \ifx\documentclass\@twoclasseserror
- \edef\es@idxfile{\jobname}%
- \AtEndDocument{%
- \addto\@defaultsubs{%
- \immediate\closeout\@indexfile
- \input{romanidx.sty}}}%
- \expandafter\endinput
- \fi}{}
-
-\newcount\es@converted
-\newcount\es@processed
-
-\def\es@split@file#1.#2\@@{#1}
-\def\es@split@ext#1.#2\@@{#2}
-
-\@ifundefined{es@idxfile}
- {\typein[\answer]{^^JArchivo que convertir^^J%
- (extension por omision .idx):}}
- {\let\answer\es@idxfile}
-
-\@expandtwoargs\in@{.}{\answer}
-\ifin@
- \edef\es@input@file{\expandafter\es@split@file\answer\@@}
- \edef\es@input@ext{\expandafter\es@split@ext\answer\@@}
-\else
- \edef\es@input@file{\answer}
- \def\es@input@ext{idx}
-\fi
-
-\@ifundefined{es@idxfile}
- {\typein[\answer]{^^JArchivo de destino^^J%
- (archivo por omision: \es@input@file.eix,^^J%
- extension por omision .eix):}}
- {\let\answer\es@idxfile}
-\ifx\answer\@empty
- \edef\es@output{\es@input@file.eix}
-\else
- \@expandtwoargs\in@{.}{\answer}
- \ifin@
- \edef\es@output{\answer}
- \else
- \edef\es@output{\answer.eix}
- \fi
-\fi
-
-\@ifundefined{es@idxfile}
- {\typein[\answer]{%
- ^^J?Se ha usado algun esquema especial de controles^^J%
- de MakeIndex para encap, open_range o close_range?^^J%
- [s/n] (n por omision)}}
- {\def\answer{n}}
-
-\if s\answer
- \typein[\answer]{^^JCaracter para 'encap'^^J%
- (\string| por omision)}
- \ifx\answer\@empty\else
- \edef\es@encap{%
- `\expandafter\noexpand\csname\expandafter\string\answer\endcsname}
- \fi
- \typein[\answer]{^^JCaracter para 'open_range'^^J%
- (\string( por omision)}
- \ifx\answer\@empty\else
- \edef\es@openrange{%
- `\expandafter\noexpand\csname\expandafter\string\answer\endcsname}
- \fi
- \typein[\answer]{^^JCaracter para 'close_range'^^J%
- (\string) por omision)}
- \ifx\answer\@empty\else
- \edef\es@closerange{%
- `\expandafter\noexpand\csname\expandafter\string\answer\endcsname}
- \fi
-\fi
-
-\newwrite\es@indexfile
-\immediate\openout\es@indexfile=\es@output
-
-\newif\ifes@encapsulated
-
-\def\es@scroman#1{#1}
-\edef\es@slash{\expandafter\@gobble\string\\}
-
-\def\indexentry{%
- \begingroup
- \@sanitize
- \es@indexentry}
-
-\begingroup
-
-\catcode`\|=12 \lccode`\|=\es@encap\relax
-\catcode`\(=12 \lccode`\(=\es@openrange\relax
-\catcode`\)=12 \lccode`\)=\es@closerange\relax
-
-\lowercase{
-\gdef\es@indexentry#1{%
- \endgroup
- \advance\es@processed\@ne
- \es@encapsulatedfalse
- \es@bar@idx#1|\@@
- \es@idxentry}%
-}
-
-\lowercase{
-\gdef\es@idxentry#1{%
- \in@{\es@scroman}{#1}%
- \ifin@
- \advance\es@converted\@ne
- \immediate\write\es@indexfile{%
- \string\indexentry{\es@b|\ifes@encapsulated\es@p\fi esromanindex%
- {\ifx\es@a\@empty\else\es@slash\es@a\fi}}{#1}}%
- \else
- \immediate\write\es@indexfile{%
- \string\indexentry{\es@b\ifes@encapsulated|\es@p\es@a\fi}{#1}}%
- \fi}
-}
-
-\lowercase{
-\gdef\es@bar@idx#1|#2\@@{%
- \def\es@b{#1}\def\es@a{#2}%
- \ifx\es@a\@empty\else\es@encapsulatedtrue\es@bar@eat#2\fi}
-}
-
-\lowercase{
-\gdef\es@bar@eat#1#2|{\def\es@p{#1}\def\es@a{#2}%
- \edef\es@t{(}\ifx\es@t\es@p
- \else\edef\es@t{)}\ifx\es@t\es@p
- \else
- \edef\es@a{\es@p\es@a}\let\es@p\@empty%
- \fi\fi}
-}
-
-\endgroup
-
-\input \es@input@file.\es@input@ext
-
-\immediate\closeout\es@indexfile
-
-\typeout{*****************}
-\typeout{Se ha procesado: \es@input@file.\es@input@ext }
-\typeout{Lineas leidas: \the\es@processed}
-\typeout{Lineas convertidas: \the\es@converted}
-\typeout{Resultado en: \es@output}
-\ifnum\es@converted>\z@
- \typeout{Genere el indice a partir de ese archivo}
-\else
- \typeout{No se ha convertido nada. Se puede generar}
- \typeout{el .ind directamente de \es@input@file.\es@input@ext}
-\fi
-\typeout{*****************}
-
-\@ifundefined{es@sdef}{\@@end}{}
-
-\endinput
-%</indexes>
-% \end{macrocode}
-%
-% \Finale
-%
-%%
-%% \CharacterTable
-%% {Upper-case \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
-%% Lower-case \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
-%% Digits \0\1\2\3\4\5\6\7\8\9
-%% Exclamation \! Double quote \" Hash (number) \#
-%% Dollar \$ Percent \% Ampersand \&
-%% Acute accent \' Left paren \( Right paren \)
-%% Asterisk \* Plus \+ Comma \,
-%% Minus \- Point \. Solidus \/
-%% Colon \: Semicolon \; Less than \<
-%% Equals \= Greater than \> Question mark \?
-%% Commercial at \@ Left bracket \[ Backslash \\
-%% Right bracket \] Circumflex \^ Underscore \_
-%% Grave accent \` Left brace \{ Vertical bar \|
-%% Right brace \} Tilde \~}
-%%
-\endinput
-
-
-
-
-
diff --git a/language/spanish/babel/base/spanish.ins b/language/spanish/babel/base/spanish.ins
deleted file mode 100644
index bd7876dde6..0000000000
--- a/language/spanish/babel/base/spanish.ins
+++ /dev/null
@@ -1,152 +0,0 @@
-%%
-%% This file will generate fast loadable files and documentation
-%% driver files from the doc files in this package when run through
-%% LaTeX or TeX.
-%%
-%% Copyright 1989-2008 Johannes L. Braams and any individual authors
-%% listed elsewhere in this file. All rights reserved.
-%%
-%% This file is part of the Babel system.
-%% --------------------------------------
-%%
-%% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
-%% of this license or (at your option) any later version.
-%% The latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2003/12/01 or later.
-%%
-%% This work has the LPPL maintenance status "maintained".
-%%
-%% The Current Maintainer of this work is Johannes Braams.
-%%
-%% The list of all files belonging to the LaTeX base distribution is
-%% given in the file `manifest.bbl. See also `legal.bbl' for additional
-%% information.
-%%
-%% The list of derived (unpacked) files belonging to the distribution
-%% and covered by LPPL is defined by the unpacking scripts (with
-%% extension .ins) which are part of the distribution.
-%%
-%% --------------- start of docstrip commands ------------------
-%%
-\def\batchfile{spanish.ins}
-\def\filedate{2007/02/21}
-\input docstrip.tex
-
-\tracingmacros2
-
-{\ifx\generate\undefined
- \Msg{**********************************************}
- \Msg{*}
- \Msg{* This installation requires docstrip}
- \Msg{* version 2.3c or later.}
- \Msg{*}
- \Msg{* An older version of docstrip has been input}
- \Msg{*}
- \Msg{**********************************************}
- \errhelp{Move or rename old docstrip.tex.}
- \errmessage{Old docstrip in input path}
- \batchmode
- \csname @@end\endcsname
-\fi}
-
-\declarepreamble\mainpreamble
-This is a generated file.
-
-Copyright 1989-2008 Johannes L. Braams and any individual authors
-listed elsewhere in this file. All rights reserved.
-
-This file was generated from file(s) of the Babel system.
----------------------------------------------------------
-
-It may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
-of this license or (at your option) any later version.
-The latest version of this license is in
- http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2003/12/01 or later.
-
-This work has the LPPL maintenance status "maintained".
-
-The Current Maintainer of this work is Johannes Braams.
-
-This file may only be distributed together with a copy of the Babel
-system. You may however distribute the Babel system without
-such generated files.
-
-The list of all files belonging to the Babel distribution is
-given in the file `manifest.bbl'. See also `legal.bbl for additional
-information.
-
-The list of derived (unpacked) files belonging to the distribution
-and covered by LPPL is defined by the unpacking scripts (with
-extension .ins) which are part of the distribution.
-\endpreamble
-
-\declarepreamble\fdpreamble
-This is a generated file.
-
-Copyright 1989-2008 Johannes L. Braams and any individual authors
-listed elsewhere in this file. All rights reserved.
-
-This file was generated from file(s) of the Babel system.
----------------------------------------------------------
-
-It may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
-of this license or (at your option) any later version.
-The latest version of this license is in
- http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
-version 2003/12/01 or later.
-
-This work has the LPPL maintenance status "maintained".
-
-The Current Maintainer of this work is Johannes Braams.
-
-This file may only be distributed together with a copy of the Babel
-system. You may however distribute the Babel system without
-such generated files.
-
-The list of all files belonging to the Babel distribution is
-given in the file `manifest.bbl'. See also `legal.bbl for additional
-information.
-
-In particular, permission is granted to customize the declarations in
-this file to serve the needs of your installation.
-
-However, NO PERMISSION is granted to distribute a modified version
-of this file under its original name.
-
-\endpreamble
-
-\keepsilent
-
-\usedir{tex/generic/babel}
-
-\keepsilent
-
-\usepreamble\mainpreamble
-\generate{\file{spanish.ldf}{\from{spanish.dtx}{code}}%
- \file{romanidx.sty}{\from{spanish.dtx}{indexes}}}
-\usepreamble\fdpreamble
-
-\ifToplevel{
-\Msg{***********************************************************}
-\Msg{*}
-\Msg{* To finish the installation you have to move the following}
-\Msg{* files into a directory searched by TeX:}
-\Msg{*}
-\Msg{* \space\space All *.def, *.fd, *.ldf, *.sty}
-\Msg{*}
-\Msg{* To produce the documentation run the files ending with}
-\Msg{* '.dtx' and `.fdd' through LaTeX.}
-\Msg{*}
-\Msg{* Happy TeXing}
-\Msg{***********************************************************}
-}
-
-\endinput
diff --git a/language/spanish/babel/base/spanish.pdf b/language/spanish/babel/base/spanish.pdf
deleted file mode 100644
index 16ef12129c..0000000000
--- a/language/spanish/babel/base/spanish.pdf
+++ /dev/null
Binary files differ
diff --git a/language/spanish/babel/base/spanish2.html b/language/spanish/babel/base/spanish2.html
deleted file mode 100644
index 7a2c1ad765..0000000000
--- a/language/spanish/babel/base/spanish2.html
+++ /dev/null
@@ -1,295 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
-<head>
-<title>Decisiones en spanish para babel | TeX y tipograf&iacute;a</title>
-<meta name="description" lang="es"
-content="Decisiones en spanish para babel: punto y coma decimal, traducci&oacute;nes para cuadro (table) e &iacute;ndices, n&uacute;meros romanos en versalitas..." />
-<meta name="keywords" lang="es"
-content="TeX,LaTeX,tipograf&iacute;a,ortotipografia,maquetacion,composicion,ortografia" />
-<meta name="keywords" lang="en"
-content="TeX,LaTeX,typography,typesetting,orthography,style" />
-<link href="http://www.tex-tipografia.com/texytipo.css" rel="stylesheet" type="text/css" />
-</head>
-
-<body>
-
-<div class="page">
-<div class="head">
- <a href="http://www.tex-tipografia.com/">
- TeX y tipografa
- </a>
-</div>
-<div class="article">
-<div class="body">
-
-<h1>Decisiones en spanish para babel</h1>
-
-<p>
-<small>Revisado: 2010-05-23</small>
-</p>
-
-<p>
-Algunas de las decisiones tomadas en el estilo para espa&ntilde;ol causan
-cierta sorpresa y a menudo se pregunta por qu&eacute; spanish ha decidido
-alterar el comportamiento de lo que se considera el estilo est&aacute;ndar
-de LaT<small>E</small>X. La raz&oacute;n en todas es simple: se trata de adaptar
-LaT<small>E</small>X a las convenciones ortotipogr&aacute;ficas hispanas, lo que
-conlleva eliminar aquellos aspectos que m&aacute;s claramente evidencian
-la influencia de las normas angloamericanas en las que basan los
-estilos est&aacute;ndar y otros muchos. Igual que cada lengua tiene su
-ortograf&iacute;a, tambi&eacute;n tiene su ortotipograf&iacute;a.
-</p>
-
-<p>
-Algunos puntos estil&iacute;sticos dependen, en realidad, del dise&ntilde;o del
-libro, pero es claro que el punto de partida (los ajustes
-predeterminados sobre los que crear ese dise&ntilde;o) ha de ser un estilo
-conforme a las reglas m&aacute;s habituales y tradicionales en espa&ntilde;ol. El
-estilo spanish ofrece muchas posibilidades de reconfiguraci&oacute;n (puede
-que sea una de las lenguas de babel m&aacute;s abiertas en este aspecto), por
-lo que los ajustes necesarios para un cierto estilo pueden llevarse a
-cabo con relativa facilidad, como se explica en el manual y en:
-</p>
-
-<ul>
-<li><a href="http://www.tex-tipografia.com/spanishopt.html">Opciones de paquete de spanish</a>.</li>
-</ul>
-
-<h2>Traducci&oacute;n de <i>table</i> como <i>cuadro</i></h2>
-<p>
-A pesar de su similitud, el ingl&eacute;s <i>table</i> no es el espa&ntilde;ol <i>tabla</i> (se
-trata de <i>falsos amigos</i>, es decir, palabras similares en dos lenguas
-pero con significados distintos). Las definiciones de Academia de
-estas palabras son:
-</p>
-
-<p>
-<i>Cuadro:</i>
-Conjunto de nombres cifras u otros datos presentados gr&aacute;ficamente
-de forma que se advierta la relaci&oacute;n existente entre ellos.
-</p>
-
-<p>
-<i>Tabla:</i>
-Cuadro o cat&aacute;logo de n&uacute;meros de especie determinada,
-dispuestos en forma adecuada para facilitar los c&aacute;lculos.
-</p>
-
-<p>
-Tradicionalmente, y a&uacute;n sigue siendo una costumbre mayoritaria, el
-nombre empleado en espa&ntilde;ol para las partes de un libro o un texto que
-muestran datos de forma gr&aacute;fica es <i>cuadro</i>, como queda reflejado en
-las obras de tipograf&iacute;a de Morato, Mart&iacute;nez Sicluna o Mart&iacute;nez de
-Sousa. Como se puede ver de la definici&oacute;n, una tabla es un tipo de
-cuadro. En cierto modo, se puede decir que cuadro es a tabla lo que en
-LaT<small>E</small>X table es a tabular, por lo que un libro puede contener un
-cuadro que sea, digamos, la tabla de multiplicar. O dicho en otras
-palabras: <i>cuadro</i> va a la funci&oacute;n y <i>tabla</i> a una cierta disposici&oacute;n.
-</p>
-
-<p>
-La creencia de que <i>cuadro</i> no es m&aacute;s que una forma marginal
-y desusada se da sobre todo en matem&aacute;ticas, f&iacute;sica e inform&aacute;tica por
-una raz&oacute;n doble: muchos cuadros son tablas y la influencia del ingl&eacute;s
-es muy notable. En ciencias sociales o de la vida y en obras de
-referencia la forma predominante sigue siendo la tradicional en
-espa&ntilde;ol, es decir, <i>cuadro</i>. A pocas personas de historia se les
-ocurrir&iacute;a, por ejemplo, hablar de una tabla con la dinast&iacute;a de los
-Austrias. Aunque Google no demuestra nada, puede ser ilustrativo:
-a 2007-03-17 y en p&aacute;ginas en espa&ntilde;ol, "cuadro 20" da 91.100
-resultados y "tabla 20" da 66.500.
-</p>
-
-<h2>N&uacute;meros romanos en versalitas</h2>
-<p>
-Aunque si retrocedemos varios siglos podemos encontrar n&uacute;meros romanos
-en min&uacute;sculas en textos espa&ntilde;oles, en los siglos XVIII y XIX, cuando
-se fij&oacute; buena parte de la actual ortotipograf&iacute;a, los n&uacute;meros romanos
-en min&uacute;sculas desaparecieron para dar paso a los n&uacute;meros en
-versalitas, es decir, letras con la forma de las may&uacute;sculas y de
-tama&ntilde;o similar a las min&uacute;sculas.
-El <i>Diccionario panhisp&aacute;nico de dudas</i> de las academias
-de la lengua (2005), sanciona las versalitas
-en los n&uacute;meros romanos y censura las min&uacute;sculas: &#171;Aunque en texto
-antiguos se usaban a veces las letras min&uacute;sculas paras representar lo
-n&uacute;meros romanos, hoy deben utilizarse letras con forma may&uacute;scula.
-Cuando se refieran a sustantivos escritos en min&uacute;scula, se recomienda
-escribirlos en versalitas&#187; (<i>n&uacute;meros</i>, 3.1<i>a</i>). La min&uacute;scula en este
-caso es tan falta de ortograf&iacute;a como, por ejemplo, tras punto.
-</p>
-
-<p>
-Por influencia del ingl&eacute;s, se ven ahora n&uacute;meros romanos en min&uacute;scula,
-y, las cosas como son, buena parte de la culpa de este anglicismo la
-tiene LaT<small>E</small>X. En libros de matem&aacute;ticas anteriores a los a&ntilde;os sesenta y
-setenta es dif&iacute;cil encontrar esta pr&aacute;ctica, pero los matem&aacute;ticos,
-en textos m&aacute;s recientes, lo usan porque as&iacute; viene en LaT<small>E</small>X, siguiendo
-los convenios el ingl&eacute;s americano.
-</p>
-
-<h2>Marca decimal</h2>
-<p>
-Tal vez una de las funciones de la versi&oacute;n 4 que m&aacute;s apoyo recibi&oacute;
-y que al tiempo es una de las m&aacute;s controvertidas. Al cargar spanish,
-el punto en una f&oacute;rmula se interpreta como un marcador decimal
-gen&eacute;rico, de manera que puede adoptar la forma de punto o de coma
-sin apenas cambios en el documento.
-</p>
-
-<p>
-El objetivo de esta marca decimal gen&eacute;rica es doble:
-</p>
-
-<p>
-1. Aunque las normas internacionales de la ISO establecen el uso de
-la coma para los decimales (la ISO 31, para ser exactos; el SI decidi&oacute;
-en el 2003 no tomar partido y dejar este detalle a otras normas), en
-la pr&aacute;ctica el punto se emplea mucho en algunos pa&iacute;ses de
-Hispanoam&eacute;rica, incluso si legalmente es obligatorio el uso de la coma
-(principalmente M&eacute;xico y Centroam&eacute;rica).
-</p>
-
-<p>
-2. La coma tiene una funci&oacute;n asignada en matem&aacute;ticas como separador
-en enumeraciones, mientras que el punto no tiene usos reales en
-espa&ntilde;ol (recordemos que los miles deben separarse con espacios finos).
-Como la coma en su funci&oacute;n principal no sirve para el decimal, ya que
-a&ntilde;ade un espacio detr&aacute;s, se puede hacer que el punto sea una marca
-decimal gen&eacute;rica y que se comporte correctamente como tal, sea cual
-sea el signo elegido.
-</p>
-
-<p>
-No ser&iacute;a el primer caso que LaT<small>E</small>X d&eacute; un comportamiento como el que
-da spanish al punto: por ejemplo, el ap&oacute;strofo en matem&aacute;ticas no da
-ese car&aacute;cter, sino que se convierte en una prima.
-</p>
-
-<p>
-El hecho de que la marca decimal sea &uacute;nica y que funcione como
-marcado l&oacute;gico y no visual, ayuda al intercambio de documentos
-de un pa&iacute;s a otro cuando tengan diferentes pr&aacute;cticas al respecto.
-</p>
-
-<h2>Apartados</h2>
-<p>
-La primera versi&oacute;n del actual spanish (por entonces llamado spanishb),
-establec&iacute;a itemize con rayas, que es lo m&aacute;s habitual. Sin embargo,
-dado que se objet&oacute; que la raya puede confundirse con el menos, se
-cambi&oacute; a otro esquema basado en topos que evitaba la semirraya (signo
-ajeno al espa&ntilde;ol) y el punto centrado. El esquema actual es en buena
-medida arbitrario, como tambi&eacute;n lo es el original de LaT<small>E</small>X, pero al
-menos se evitan las idiosincrasias originales, extra&ntilde;as incluso en
-ingl&eacute;s. Un &uacute;ltimo paso se dio con un esquema alternativo, ya que el
-cuadradito del primer nivel no ha sido del agrado de algunos usuarios
-del estilo.
-</p>
-
-<h2>Traducciones de los &iacute;ndices</h2>
-<p>
-Por desgracia, no existe un referencia m&iacute;nimamente oficial que
-facilite una terminolog&iacute;a unificada. Por ejemplo, <i>&iacute;ndice de materias</i> lo
-usan algunos para el sumario de cap&iacute;tulos, mientras que
-otros lo aplican al &iacute;ndice alfab&eacute;tico final; por ello la he
-descartado. El DRAE dice que <i>tabla</i> es el &#171;&iacute;ndice de materias en los
-libros&#187; aunque modernamente no ha tenido uso alguno
-(s&oacute;lo antiguamente) ni tampoco aclara m&aacute;s. Tambi&eacute;n es arcaico
-<i>tabla de contenido</i>, aunque la f&oacute;rmula m&aacute;s escueta de <i>contenido</i> me parece
-mejor. En todo caso, no debe ser nunca <i>de contenidos</i> (en plural),
-que es un crudo anglicismo. Tal vez <i>&iacute;ndice general</i> es lo que m&aacute;s se
-usa, as&iacute; que a &eacute;l me atengo salvo en article, donde se compone como
-secci&oacute;n y por tanto resulta algo ostentoso. (Al contrario que en
-ingl&eacute;s, en castellano el &iacute;ndice por antonomasia es el general.) Otras
-posibilidades ser&iacute;an <i>&iacute;ndice tem&aacute;tico</i> o <i>&iacute;ndice sumario</i>.
-</p>
-
-<p>
-Para el &iacute;ndice alfab&eacute;tico hay quien ha empleado <i>&iacute;ndice de materias</i>
-aunque parece que <i>&iacute;ndice anal&iacute;tico</i> tiene m&aacute;s seguidores. Pero
-estrictamente hablando, ninguno de los dos es apropiado, ya que estos
-&iacute;ndices no solamente suelen incluir materias, sino tambi&eacute;n nombres.
-Con un paquete para diferenciar varios tipos de &iacute;ndices podemos
-indicar si es de materias (<i>anal&iacute;tico</i>) o de nombres (<i>onom&aacute;stico</i>).
-Creo que <i>&iacute;ndice alfab&eacute;tico</i> es ajustado y preciso y me parece lo
-mejor.
-</p>
-
-<p>
-Obs&eacute;rvese igualmente el <a href="http://www.tex-tipografia.com/uso_minusculas_mayusculas.html">uso
-de las min&uacute;sculas</a> de modo predeterminado, que se corresponde con
-la pr&aacute;ctica tradicional.
-</p>
-
-</div>
-<div class="extra">
-<p class="small"><b><span style="color:#cc6600">Sobre el autor</span></b><br />
-Soy b&aacute;sicamente un tip&oacute;grafo t&eacute;cnico y ortotip&oacute;grafo al que le
-apasiona la programaci&oacute;n de computadoras y que procede del campo de
-las ciencias. He participado como autor en dos manuales de estilo
-(una radio y una empresa el&eacute;ctrica), he escrito art&iacute;culos para varias
-revistas de estilo y espa&ntilde;ol (<i>Panacea, Donde dice..., Espa&ntilde;ol Actual</i>)
-y mis escritos aparecen citados en, por ejemplo, el manual de
-estilo de Canal Sur y en el reciente
-<i>Diccionario de uso de las may&uacute;sculas y las min&uacute;sculas</i> de Jos&eacute;
-Mart&iacute;nez de Sousa. En la
-actualidad trabajo en la <a href="http://www.fundeu.es">Fund&eacute;u BBVA</a>
-y colaboro con Real Academia Espa&ntilde;ola en la pr&oacute;xima edici&oacute;n de la
-Ortograf&iacute;a.
-</p>
-
-<p class="small"><b><span style="color:#cc6600">Sobre el estilo spanish</span></b><br />
-Para su desarrollo he tenido en cuenta las obras cl&aacute;sicas de
-tipograf&iacute;a (Morato, Mart&iacute;nez Sicluna, Ramos Mart&iacute;nez...) y he
-investigado en multitud de tratados cient&iacute;fico-t&eacute;cnicos y de otras
-materias para ver el uso real de las diferentes normas y t&eacute;rminos
-aplicados en la pr&aacute;ctica.
-</p>
-
-</div>
-<div class="toc">
-
-<p>
-<a class="toplink" href="http://www.tex-tipografia.com/index.html">Portada</a>&nbsp;&nbsp;<br />
-
-<a class="toplink" href="http://www.tex-tipografia.com/tex.html">T<small>E</small>X / LaT<small>E</small>X / XML</a>&nbsp;&nbsp;<br />
-
-<a class="toplink" href="http://www.tex-tipografia.com/packages.html">Packages (English)</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/titlesec.html" style="color:#666666">Titlesec</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/enumitem.html" style="color:#666666">Enumitem</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/spanish.html" style="color:#666666">Spanish</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/tensind.html" style="color:#666666">Tensind</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/accents.html" style="color:#666666">Accents</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/mlaleph.html" style="color:#666666">Mem</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/gloss.html" style="color:#666666">Gloss</a>&nbsp;&nbsp;<br />
-
-<a class="sublink" href="http://www.tex-tipografia.com/esindex.html" style="color:#666666">Esindex</a>&nbsp;&nbsp;<br />
-
-<a class="toplink" href="http://www.tex-tipografia.com/ortotipografia_estilo.html">Estilo y tipograf&iacute;a</a>&nbsp;&nbsp;<br />
-
-<a class="toplink" href="http://www.tex-tipografia.com/contact.html">Contact / Contacto</a>&nbsp;&nbsp;<br />
-
-<a class="toplink" href="http://www.tex-tipografia.com/notaciones_cientificas.html">Libro</a>&nbsp;&nbsp;<br />
-
-<a class="toplink" href="http://www.tex-tipografia.com/other.html">&Aacute;rea personal</a>&nbsp;&nbsp;<br />
-
-</p>
-
-<p class="credits">
-Made with T<small>E</small>X on<br />
-22/5/2010<br /><br />
-&#169; 2000-2010<br />Javier Bezos<br />All Rights Reserved</p>
-
-</div>
-</div>
-</div>
-</body>
-</html>
diff --git a/language/spanish/babel/contrib/spanglish b/language/spanish/babel/contrib/spanglish
deleted file mode 120000
index ccbfe28c56..0000000000
--- a/language/spanish/babel/contrib/spanglish
+++ /dev/null
@@ -1 +0,0 @@
-../../../../macros/latex/contrib/babel-contrib/spanglish \ No newline at end of file
diff --git a/language/spanish/hyphen/base/README b/language/spanish/hyphen-spanish/README
index 9529767ad4..9529767ad4 100644
--- a/language/spanish/hyphen/base/README
+++ b/language/spanish/hyphen-spanish/README
diff --git a/language/spanish/hyphen/base/division.pdf b/language/spanish/hyphen-spanish/division.pdf
index 6dd9739513..6dd9739513 100644
--- a/language/spanish/hyphen/base/division.pdf
+++ b/language/spanish/hyphen-spanish/division.pdf
Binary files differ
diff --git a/language/spanish/hyphen/base/eshyph-make.lua b/language/spanish/hyphen-spanish/eshyph-make.lua
index 4fd0193295..4fd0193295 100644
--- a/language/spanish/hyphen/base/eshyph-make.lua
+++ b/language/spanish/hyphen-spanish/eshyph-make.lua
diff --git a/language/spanish/hyphen/base/eshyph-test.tex b/language/spanish/hyphen-spanish/eshyph-test.tex
index fe7156b509..fe7156b509 100644
--- a/language/spanish/hyphen/base/eshyph-test.tex
+++ b/language/spanish/hyphen-spanish/eshyph-test.tex
diff --git a/language/spanish/hyphen/base/eshyph.src b/language/spanish/hyphen-spanish/eshyph.src
index 912f287322..912f287322 100644
--- a/language/spanish/hyphen/base/eshyph.src
+++ b/language/spanish/hyphen-spanish/eshyph.src
diff --git a/language/spanish/hyphen/base/eshyph.tex b/language/spanish/hyphen-spanish/eshyph.tex
index c34a311625..c34a311625 100644
--- a/language/spanish/hyphen/base/eshyph.tex
+++ b/language/spanish/hyphen-spanish/eshyph.tex
diff --git a/language/spanish/hyphen/README b/language/spanish/hyphen/README
deleted file mode 100644
index 7eb4063fc9..0000000000
--- a/language/spanish/hyphen/README
+++ /dev/null
@@ -1,77 +0,0 @@
-DIVISI'ON DE PALABRAS
-~~~~~~~~~~~~~~~~~~~~~
-
-The file eshyph.tex under /base is the base for the Spanish patters.
-It is intended mainly for backward compatibility. New systems are
-best based on CTAN:language/hyph-utf8/, which has the same patterns.
-
-Why 4.x? Well, I know at least other three files with the same name,
-so this one is the fourth (there were at least 6 or 7 patterns files).
-The others should vanish as soon as posible.
-
-(c) Javier Bezos 1993 1997.
-(c) Javier Bezos and CervanTeX 2001-2009
-Some parts, (c) by Francesc Carmona
-Licence: LPPL
-
-- division.pdf is a draft of an article (in Spanish) explaining the
-rules to be applied and how they are being translated into TeX in a
-unified set of patterns (somewhat outdated).
-- eshyph-make.lua generates the patterns, with eshyph.src for prefixes
-and special cases.
-- eshyph-test.tex makes a comparison with strict syllabic rules. It
-requires a file spanish-words.txt (not supplied) with a list of word,
-one per line. You can (should) filter the words.
-
-For bug reports and comments:
-
- http://www.tex-tipografia.com/spanish_hyphen.html
-
-I would like to thanks Francesc Carmona for his permission
-to steal parts of his work without restrictions.
-
-The contrib directory, as its name implies, is not part of the
-official bundle. It has a different set of patterns, but it does not
-follow the rules by the Spanish Academy (despite its claims).
-
-What's new in 4.4 (2009-05-19)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Some bad patterns fixed.
-
-What's new in 4.3 (2009-05-14)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Some patterns fixed, particularly for "familia", "superar", "sub-" and
-final consonants. Patterns are now generated with the help of a few
-lua/luatex files (whose status is alpha).
-
-What's new in 4.2
-~~~~~~~~~~~~~~~~~
-
-The encoding is UTF-8, so that it can be used with LuaTeX. Yet, it
-works without changes with standard TeX.
-
-What's new in 4.1
-~~~~~~~~~~~~~~~~~
-
-- Thanks to a list of about 750000 words and extensive
-tests, wrong hyphenations have been reduced dramatically
-and the number of patterns has been almost duplicated.
-
-- Since the Spanish Academy rules of 1999 are very vague,
-incomplete and even contradictory, they had to be
-completed with some traditional ones. The Academy has
-published new rules in November 2005 including many of
-the traditional ones employed here and therefore only
-minor adjustments have been necessary.
-
-- Patterns for a few verbal endings are necessary, and
-now the "voseo" forms (used in many countries of Central
-and South America) have been included.
-
-2009-05-19
-_____________________________________________________________
-Javier Bezos | http://www.cervantex.es/
-.............................................................
-TeX y tipografia | http://www.tex-tipografia.com/ \ No newline at end of file
diff --git a/language/spanish/hyphen/contrib/sphyphb/README b/language/spanish/sphyphb/README
index 17a86e8294..17a86e8294 100644
--- a/language/spanish/hyphen/contrib/sphyphb/README
+++ b/language/spanish/sphyphb/README
diff --git a/language/spanish/hyphen/contrib/sphyphb/sphyphb.tex b/language/spanish/sphyphb/sphyphb.tex
index 4f86212422..4f86212422 100644
--- a/language/spanish/hyphen/contrib/sphyphb/sphyphb.tex
+++ b/language/spanish/sphyphb/sphyphb.tex
diff --git a/macros/generic/chemfig/README b/macros/generic/chemfig/README
index 03bea23c3e..affbe56f2d 100644
--- a/macros/generic/chemfig/README
+++ b/macros/generic/chemfig/README
@@ -2,9 +2,9 @@ ___________________________________
The
Chemfig package
- v1.41
+ v1.5
- 2019/05/21
+ 2020/03/05
___________________________________
Maintainer: Christian Tellechea
diff --git a/macros/generic/chemfig/chemfig-en.pdf b/macros/generic/chemfig/chemfig-en.pdf
index be0feb42f6..745d8bf7be 100644
--- a/macros/generic/chemfig/chemfig-en.pdf
+++ b/macros/generic/chemfig/chemfig-en.pdf
Binary files differ
diff --git a/macros/generic/chemfig/chemfig-en.tex b/macros/generic/chemfig/chemfig-en.tex
index 5b247b3c09..8d29f8403a 100644
--- a/macros/generic/chemfig/chemfig-en.tex
+++ b/macros/generic/chemfig/chemfig-en.tex
@@ -126,7 +126,7 @@
\if\string b\detokenize\expandafter{\f@series}%
\lower0.01em\hbox{\itshape f}\kern-0.06em
\else
- \lower0.045em\hbox{\kern-0.05em \itshape f}\kern0.026em
+ \lower0.048em\hbox{\kern-0.04em \itshape f}\kern0.03em
\fi ig%
}%
\xspace
@@ -144,6 +144,7 @@
\newcommand*\CFval[1]{{\color{teal}\textlangle\textit{#1}\textrangle}}
\newcommand*\CFkv[2]{\CFkey{#1}{\color{teal}${}={}$}\CFval{#2}}
\newcommand*\CFparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}\relax \textlangle\textit{empty}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}}\fi\\}
+\newcommand*\Chargeparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[charge]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[charge]{#1}}}\fi}
\newcommand*\CFdelimparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}}\fi}
\usepackage[plainpages=false,pdfpagelabels,bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=magenta,pdfauthor={Christian TELLECHEA},pdftitle={ChemFig},pdfsubject={Draw 2D molecule with LaTeX},pdfkeywords={ChemFig},pdfcreator={LaTeX}]{hyperref}
@@ -194,8 +195,8 @@
\chemleft[{\subscheme[90]{%
\chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
\arrow{<->}[,0.75]
- \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}}\chemright]
- \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemfig{R'-\charge{90=\:}{N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\charge{0=\:,90=\:}{O}}]}[,1.1]
\chemmove[red,-stealth,red,shorten <=3pt]{
\draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
\chemfig{*6(R\rlap{$'$}-N=(-R)-\chemabove{O}{\scriptstyle\oplus} H_2)}
@@ -215,54 +216,42 @@
\setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt}
\part{Introduction}
-\section{New in v1.4}
-\subsection{Primitive \texttt{\textbackslash expanded}}
-\fbox{\vbox{\hsize\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax\textbf{Important}: As of version 1.41, \CF requires a \TeX{} engine that provides the \texttt{\string\expanded} primitive. If this is not available, an error message will be issued and version 1.4 will be loaded (last version working without the primitive \texttt{\string\expanded}); it is strongly recommended that you update your \LaTeX{} distribution in order to take advantage of the newer \TeX{} engines that provide for the use of this new primitive.}}\medbreak
-
-\subsection{Position and rotation of delimiters}
-The new key \CFkey{h align} for delimiters allows, when set to \CFval{false}, to no longer automatically align delimiters horizontally. When the delimiters are no longer on the same horizontal, they can be rotated automatically by setting the key \CFkey{auto rotate} to \CFval{true}. You can override this automatic setting and choose the rotation angle with the key \CFkey{rotate}. See page~\pageref{polymerdelim}.
-
-\subsection{Private char}
-In the code of \CF, the character used in the name of private macros is "\verb|_|" (underscore) and no longer "\verb|@|" (arobe): the prefix of private macros of \CF is "\verb|\CF_|". The majority of \CF users should not be affected by this change, but the development or maintenance of specific codes such as those presented in the "Arrow customization" section on page~\pageref{definearrow} which uses private macros should take this catcode change into account; this will require an \emph{update of macros names} for those who have used private macros from \CF. To allow "\verb|_|" in macro names, we must execute the order "\verb|\catcode`\_=11|" and then, to return to a normal state run "\verb|\catcode`\_=8|".
-
-\subsection{Char \#}
-All those who program in \TeX{} know the extreme precautions that must be taken before using the "\verb|#|" character. This character is allowed in the code representing the molecule, but for internal operating reasons at \TeX, it will be doubled if the command \verb|\chemfig| is in the argument of a macro (like \verb|\fbox| in the example below). To avoid this doubling, we can write \verb|\#| or use the macro \verb|\CFhash|:
-
-\exemple{Char \#}/\setchemfig{atom sep=5em}\fboxsep=1pt
-1) \chemfig{A#-B_#-C^#}\par
-2) \fbox{\chemfig{A#-B_#-C^#}}\par
-3) \fbox{\chemfig{A\#-B_\#-C^\#}}\par
-4) \fbox{\chemfig{A\CFhash-B_\CFhash-C^\CFhash}}/
-
-For the macro \verb|\definesubmol|, the character \verb|#| is also allowed, but its use is more complex because it covers several cases that are examined on page~\pageref{definesubmol}.
-
-\subsection{Old macros and new syntax}
-Macros previously used to set the parameters of \CF are abandoned, are no longer defined and therefore, \emph{will result in a compilation error} if they are executed:
-\begin{center}
- \begin{tabular}{*3l}
- \verb-\setcrambond-&\verb-\setatomsep-&\verb-\enablefixedbondlength-\\
- \verb-\disablefixedbondlength-&\verb-\setbondoffset-&\verb-\setdoublesep-\\
- \verb-\setangleincrement-&\verb-\setnodestyle-&\verb-\setbondstyle-\\
- \verb-\setlewis-&\verb-\setlewisdist-&\verb-\setstacksep-\\
- \verb-\setcompoundstyle-&\verb-\setarrowdefault-&\verb-\setandsign-\\
- \verb-\setarrowoffset-&\verb-\setcompoundsep-&\verb-\setarrowlabelsep-\\
- \verb-\enablebondjoin-&\verb-\disablebondjoin-&\verb-\schemedebug-
- \end{tabular}
- \end{center}
-Now, to set the parameters of \CF we have the choice:
+\section{New in v1.5}
+\subsection{The macro \texttt{\protect\textbackslash charge}}
+Version 1.5 implements the macros \verb|\charge| and \verb|\Charge| (see page~\pageref{charge}) whose purpose is to place arbitrary elements around an atom that can be placed with great precision. These macros will replace the \verb|\lewis| and \verb|\Lewis| macros because they are much more powerful and configurable, even if more verbose. It is therefore important to note that the macros \verb|\lewis| and \verb|\Lewis| \textcolor{red}{\bfseries are no longer documented and will be removed from the \CF package}.
+
+\exemple{La macro \string\charge}/Simple charges around A :
+\Charge{0=\:,
+ 0:3pt[anchor=180]=$\color{red}\scriptstyle\delta^+$,
+ 120={\"["width=2pt,"style={draw=green,fill=gray}]},
+ 210=\|
+ }{A}
+\par
+Complex charges aroud "B" :
+\Charge{%
+ 30:10pt={\chemfig[atom sep=6pt,double bond sep=1.5pt]{[:20]*6(=-=-=-)}},
+ 120:5pt[scale=0.4,rotate=30,anchor=center]=\chemfig{CH_2=CH_2},
+ -45[anchor=west,rotate=\chargeangle]={%
+ \begin{tikzpicture}
+ \node[anchor=mid west](a){$\oplus$};\draw[-stealth](a)--(-.5,0);
+ \end{tikzpicture}}%
+ }{B}/
+
+\subsection{Consecutive bonds}
+As of version 1.5, two bonds are joined if the atom between them has all its dimensions equal to zero (i.e. width, height and depth in the sense of \TeX). Previously, two bonds were joined if the atom was \emph{empty}, which was more restrictive.
+
+Together with the use of the macro \verb|\charge|, this new feature makes it possible to place charges in a chain without using invisible bonds.
+\exemple{Consecutive bonds}/\chemfig{[:30]-\charge{90=\:}{}
+-[:-30]\charge{-90=\"}{}-\charge{90:2pt=$\delta^+$}{}-[:-30]}/
+
+\subsection{Manual Update}
+More detailed explanations are given on:
\begin{itemize}
- \item the macro \Verb|\setchemfig{<keys>=<values>}| sets the parameters according to the key/value method for the rest of the document;
- \item the macro \Verb|\chemfig[<keys>=<values>]| receives in its optional argument the parameters valid only for this molecule;
- \item the macro \verb|\resetchemfig| restores the parameters to their default values.
+ \item the role played by the first atom encountered in the placement of the whole molecule (page~\pageref{premieratome1} and \pageref{premieratome});
+ \item how \CF places the atoms in a group of atoms (page~\pageref{placementatomes});
+ \item how a bond joins two atoms (page~\pageref{liaisonatomes}).
\end{itemize}
-The complete list of parameters and their default values is shown page~\pageref{listeparametres}.
-
-Starred syntax \verb|\chemfig*| is no longer allowed. To specify a constant length of bonds, use the key \CFkey{fixed length} and set it to \CFval{true}, see page~\pageref{longueur.liaison}.
-
-\subsection{Macros \texttt{\textbackslash lewis} and \texttt{\textbackslash Lewis}}
-These two macros also have a slight syntax change. Their optional argument between brackets is no longer intended to receive the diagonal spacing coefficient, but \Verb|<<key>=values>| so that the parameters can be set for each macro call. See page~\pageref{lewis}.
-
\section{Presenting \protect\CF}
To use this package, start by adding the following code to the preamble:
\begin{itemize}
@@ -327,7 +316,7 @@ Here is the complete list of parameters as well as their default values\label{li
\end{minipage}\hfill
\begin{minipage}[t]{.45\linewidth}
\begin{longtable}{rl}\hline
- \chevrons{clés} & \chevrons{valeurs} par défaut\\\hline\endhead
+ \chevrons{keys} & default \chevrons{values}\\\hline\endhead
\CFparam{lewis radius}
\CFparam{lewis diag coeff}
\CFparam{cycle radius coeff}
@@ -359,8 +348,6 @@ The \Verb|<molecule code>| contains instructions for drawing the molecule accord
\item macros.
\end{itemize}
-In any case, \CF will place \emph{on the current baseline the first atom encountered}, whether it is empty or not. In the examples in this document, the baseline is drawn in light grey.
-
\section{Groups of atoms}
Drawing a molecule consists inherently of connecting groups of atoms with lines. Thus, in the molecule \chemfig{O=O}, there are two groups of atoms, each consisting of a single atom ``O''.
@@ -375,6 +362,13 @@ Therefore the first group of atoms ``$\mathrm{H_3C}$'' is split into two atoms:
A space is ignored when at the beginning of a group of atoms.
+\section{First atom's role}\label{premieratome1}
+It is important to understand that the placement of the entire molecule depends on the first atom placed, i.e. the first atom of the first group of atoms. For this first atom, its \TIKZ anchor "\verb|base east|" is placed on the baseline of the current line (drawn in gray in the examples of this manual).
+
+\exemple{Influence of the first atom}/\chemfig{A-B}\qquad
+\chemfig{-B}\qquad
+\chemfig{A^1-B}/
+
\section{Different types of bonds}
For \CF, bonds between two atoms are one of nine types, represented by the characters \boxedfalseverb-, \boxedfalseverb=, \boxedfalseverb~, \boxedfalseverb>, \boxedfalseverb<, \boxedfalseverb{>:}, \boxedfalseverb{<:}, \boxedfalseverb{>|} and \boxedfalseverb{<|} :\label{types.liaisons}
\begin{center}
@@ -821,10 +815,10 @@ The optional argument \Verb-<opt>- of the \verb-\chemmove- command will be added
\subsection{Mesomeric effects}
To make these concepts concrete, let's take the example of a mesomeric effect involving a double bond and non-bonding lone pair conjugate. Let's begin with the possible delocalization of electrons from the double bond. We will place a node named ``db'' (double bond) in the middle of the double bond and a node named ``a1'' on the end of the double bond.
-Les macros \verb|\schemestart|, \verb|\schemestop|, \verb|\arrow| et \verb|\+| sont exposées
+The macros \verb|\schemestart|, \verb|\schemestop|, \verb|\arrow| and \verb|\+| are explained in the chapter \ref{schemas}, starting on page \pageref{schemas}.
\exemple{Mesomeric effect 1}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[::-60]\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[::-60]\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -840,7 +834,7 @@ To link the nodes ``db'' and ``a1'' we have used the following syntax:
For arrows in \verb|\chemmove|, the default tip is ``CF''.In this example we ask for an arrow (\verb/[->]/) and we use two \falseverb{control points}\footnote{To find all the ways of connecting two nodes with \TIKZ, read the documentation for that package.}. These will be located using polar coordinates at 80\degres{} and 8~mm from ``db'' for the first and at 145\degres{} and 8~mm from ``a1'' for the second. Though this syntax may seem complicated at first reading, one need not be alarmed because its use will usually be a matter of copying and pasting. Only the names and coordinates of the control points need be changed, as can be verified from the example below, where an arrow has been added from the lone pair (node ``dnl'' to the single bond (node ``sb'').
\exemple{Mesomeric effect 2}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -851,7 +845,7 @@ For arrows in \verb|\chemmove|, the default tip is ``CF''.In this example we ask
For our new arrow we have set the \falseverb{control points} as follows: 4~mm at an angle of 90\degres{} from ``dnl'' and 4~mm at an angle of 45\degres{} from ``sb''. But we are not completely satisfied, since we would like the arrow not to touch the line segment representing the lone pair. To do this we will add some options to our arrow.
\exemple{Mesomeric effect 3}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -865,7 +859,7 @@ The option ``\verb|shorten <=3pt|'' indicates that the tail of the arrow is to b
We can use all the power of \TIKZ instructions to modify the style of the arrow. Here we change the head of the arrow leaving the double bound and set it to ``\verb|-stealth|'', and we draw the arrow with a fine dashed red line. We also add the letter $\pi$ above the middle of the arrow:
\exemple{Mesomeric effect 4}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -878,25 +872,25 @@ We can use all the power of \TIKZ instructions to modify the style of the arrow.
(dnl).. controls +(90:4mm) and +(45:4mm).. (sb);}/
In the following example, we'll see how to indicate the position of the departure or arrival anchor points of the arrow. If we write
-\exemple{Departure or arrival anchor point 1}/\chemfig{@{x1}\lewis{1:,X}}
+\exemple{Departure or arrival anchor point 1}/\chemfig{@{x1}\charge{45=\:}{X}}
\hspace{2cm}
-\chemfig{@{x2}\lewis{2|,X}}
-\chemmove{\draw[shorten >=4pt]
- (x1).. controls +(90:1cm) and +(90:1cm).. (x2);}/
+\chemfig{@{x2}\charge{90=\|}{X}}
+\chemmove{
+ \draw[shorten >=4pt](x1).. controls +(90:1cm) and +(90:1cm).. (x2);}/
Note that the tail of the arrow does not leave correctly from our electrons; it leaves from the middle of the upper edge of the node. Indeed, we chose a departure angle of 90~\degres{} and so \TIKZ makes the arrow leave from the anchor ``x1.90'' which corresponds to the intersection of the ray leaving from the center of node ``x1'' at a 90\degres{} angle relative to the horizontal and of the edge of the rectangular node. To get the arrow departure angle that we want, we must specify its position. After some trial and error, it is ``x1.57'':
-\exemple{Departure or arrival anchor point 2}/\chemfig{@{x1}\lewis{1:,X}}
+\exemple{Departure or arrival anchor point 2}/\chemfig{@{x1}\charge{45=\:}{X}}
\hspace{2cm}
-\chemfig{@{x2}\lewis{2|,X}}
-\chemmove{\draw[shorten <=4pt,shorten >=4pt]
- (x1.57).. controls +(60:1cm) and +(120:1cm).. (x2);}/
+\chemfig{@{x2}\charge{90=\|}{X}}
+\chemmove[shorten <=4pt,shorten >=4pt]{
+ \draw(x1.57).. controls +(60:1cm) and +(120:1cm).. (x2.90);}/
In some cases it will be easier to use Cartesian coordinated for the \falseverb{control points}. Here we use just one control point placed 1~cm to the right of and 1.5~cm above ``x1'':
-\exemple{A single control point}/\chemfig{@{x1}\lewis{1:,X}}
+\exemple{A single control point}/\chemfig{@{x1}\charge{45=\:}{X}}
\hspace{2cm}
-\chemfig{@{x2}\lewis{2|,X}}
-\chemmove{\draw[shorten <=4pt,shorten >=4pt]
- (x1.57).. controls +(1cm,1.5cm).. (x2);}/
+\chemfig{@{x2}\charge{90=\|}{X}}
+\chemmove[shorten <=4pt,shorten >=4pt]{
+ \draw(x1.57).. controls +(1cm,.8cm).. (x2.90);}/
All the graphics drawn by means of the command \verb|\chemmove| are superimposed and will not be included in the bounding boxes. We can see this in the preceding example.
@@ -904,18 +898,18 @@ All the graphics drawn by means of the command \verb|\chemmove| are superimposed
Thanks to the option \verb|remenber picture| which is passed to all the ``tikzpicture'' environments we can easily draw arrows indicating reaction mechanisms. Let's take for example the first step of the esterification reaction.
\exemple{Esterification: step 1}/\setchemfig{atom sep=7mm}
\schemestart
- \chemfig{R-@{dnl}\lewis{26,O}-H}
+ \chemfig{R-@{dnl}\charge{90=\|,-90=\|}{O}-H}
\+
\chemfig{R-@{atoc}C([6]-OH)=[@{db}]O}
\arrow(.mid east--){<->[\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}]}
\schemestop
\chemmove[shorten <=2pt]{
- \draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
- \draw[shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}/
+ \draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
+ \draw[shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}/
The use of the \Verb|\chemabove{<code>}{<materiel>}| command does not change the dimensions of the \falseverb{bounding box} of \Verb|<code>|. For this reason we can run into some difficulty in pointing to the symbol representing the charge carried ($\oplus$ or $\ominus$). In the example above the solution is to create a control point with an angle of 110\degres{} at 1~cm from ``atoh'' and to shorten the arrow by 6pt. In the following example, the second step of the esterification reaction, we can see that the arrow can take more complicated forms without complicating the code.
\exemple{Esterification: step 2}/\setchemfig{atom sep=7mm}
-\chemfig{R-O-C(-[2]R)(-[6]OH)-@{dnl}\lewis{26,O}H}\hspace{1cm}
+\chemfig{R-O-C(-[2]R)(-[6]OH)-@{dnl}\charge{90=\|,-90=\|}{O}H}\hspace{1cm}
\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}
\chemmove{
\draw[shorten <=2pt, shorten >=7pt]
@@ -1037,64 +1031,6 @@ With \CFkey{node style}, one can choose the colour of nodes drawn by \TIKZ, chan
\setchemfig{atom style={rotate=20}}\chemfig{A-B-[2]C}\par\medskip
\setchemfig{atom style={scale=0.5}}\chemfig{A-B-[2]C}/
-\section{Vertical alignment}\label{alignement.vertical}
-In some cases with condensed structural diagram of molecules having horizontal bonds, the placement of groups of atoms is incorrect.
-
-Careful study of the following example shows that the groups of atoms are not correctly aligned on the \falseverb{baseline}:
-\exemple*{Vertical placement}/\Huge\setchemfig{atom sep=2em}
-\chemfig{A^1-B-C-D}\qquad
-\chemfig{E_1-F-G-H}/
-
-Surprisingly, the second atom is correctly aligned while the last two undergo a vertical shift which seems to be the results of the different height of the bounding box of the atoms ``\verb-A^1-'' and ``\verb-E_1''-.
-
-In order to understand this phenomenon, we need to consider how \CF places groups of atoms relative to each other. Let us limit ourselves to the case of horizontal bonds in order to simplify terminology, although the algorithm is the same for other bonds. A horizontal bond leaves from the middle of the right side of the bounding box of the departure atom of this bond. The arrival atom is positioned in such a way that the middle of the left side of its bounding box is at the end of the bond. It follows that the vertical placement of the arrival atom depends on the height of the departure atom. To limit this phenomenon, \CF adds to each arrival atom the \falseverb{\vphantom} of the departure atom, but does not include it in the contents of the arrival atom; this \falseverb{\vphantom} is not intended to affect the following atoms. The atoms remaining in each group are aligned so that their baseline coincides with the baseline of the preceding atom.
-
-The defective alignment can thus be explained. The atoms ``\verb-B-'' and ``\verb-F-'' are aligned correctly as they reflect the height of the atoms before them because of their \falseverb{\vphantom}. For the atoms ``\verb-C-'' and ``\verb-F-'', the heights of the immediately preceding atoms are taken into account, but those of the atoms ``\verb-A^1-'' and ``\verb-E_1-'' are ignored! It follows that these atoms are a little too high or too low, depending on the height of these bonds.
-
-We can show this by making visible the bounding boxes of the atoms; one sees clearly that the atoms ``\verb-B-'' and ``\verb-F-'' have bounding boxes that reflect the heights of the immediately preceding atoms:
-\exemple*{Vertical placement and bounding boxes}/\Huge\setchemfig{atom sep=2em}
-\fboxsep=0pt
-\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm#1}}}
-\chemfig{A^1-B-C-D}\qquad
-\chemfig{E_1-F-G-H}/
-
-Since there is no satisfactory manual solution, this problem can be worked around manually by putting \emph{inside} the third atom a \falseverb{\vphantom} having the same height as the first, so that the height affects the following atoms:
-\exemple*{Vertical placement workaround}/\Huge\setchemfig{atom sep=2em}
-\chemfig{A^1-B-{\vphantom{A^1}C}-D}\qquad
-\chemfig{E_1-F-{\vphantom{E_1}G}-H}/
-
-\label{chemskipalign}For any group of atoms it is possible to temporarily deactivate the alignment adjustment mechanism and thus neutralize the \falseverb{\vphantom}. Simply place the \falseverb{\chemskipalign} command in the group of atoms; the alignment will resume in the following group of atoms as if the group of atoms containing \falseverb{\chemskipalign} had never existed. The following example shows the effects of this instruction: the reference point of the box containing the first atom is placed at the level of the bond which arrives from the left. The bounding boxes of the atoms are drawn in the second line.
-
-\exemple[60]{Deactivation of the alignment mechanism}/\large
-\chemfig{A-.-B}\quad
-\chemfig{A-\chemskipalign.-B}\par\bigskip
-\fboxsep=0pt
-\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
-\chemfig{A-.-B}\quad
-\chemfig{A-\chemskipalign.-B}/
-
-This command is to be used with caution lest the alignment of atoms in the next group be disrupted. In general, all will be well if the group of atoms featuring \falseverb{\chemskipalign} contains \emph{a single atom} whose height and depth are \emph{less} than those of the preceding and following atoms, and if the preceding and following atoms have identical heights and depths. Here is an example of the mess that results when the group of atoms contains two atoms, here ``\verb-\chemskipalign.-'' and ``\verb-B-'':
-\exemple{Consequence of the \string\chemskipalign command}/\large
-\fboxsep=0pt
-\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
-\chemfig{A-\chemskipalign.B-C}/
-
-This feature can sometimes be useful. Suppose we want to draw the following molecule
-\begin{center}
- \catcode`;12
- \def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}%
- \def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}%
- \chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}%
-\end{center}
-We can define commands which will draw the empty and full disks with \TIKZ. To ensure that these disks are at the right height, namely the height of the bond arriving at them, we will use the command \falseverb{\chemskipalign}. In the second line below the bonds are ``stuck'' to the disks by using the ability to change the bond shortening with the ``\verb-#-'' character, a feature seen on page~\pageref{modif.retrait}.
-\begingroup\catcode`;12 \catcode`#12
-\exemple{Use of \string\chemskipalign\ and #}/\def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}
-\def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}
-\chemfig{A-\emptydisk-\fulldisk-B}\par
-\chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}
-/\endgroup
-
-
\section{Shifted double bonds}
All double bonds are made up of two line segments, and these segments are drawn on either side of the imaginary line along which a single bond would be drawn. It is possible to shift a double bond so that one of the line segments lies on the imaginary line. The other segment is then shifted above or below the bond. Actually, it is more correct to say ``left'' or ``right'' of the imaginary line, as the bond is traversed in the direction of drawing.
@@ -1195,94 +1131,233 @@ It should be noted that if the \Verb|<number>| of arguments is incorrect (negati
Except in cases where the character "\verb|#|" is followed by a number between 1 and \Verb|<number>| in which case it represents an argument, "\verb|#|" are allowed in the sub-molecule codes.
-\exemple{Use of \#}/\definesubmol\X2{#1-#2-#2-#3-###(3pt,3pt)#4}
+\exemple{Use of \#}/\definesubmol\X2{#1-#2-#3-#(3pt,3pt)#4}
\chemfig{A-!\X{M}{N}-B}/
In this example, only \verb|#1| and \verb|#2| are understood as the arguments of the sub molecule \verb|\X|. The other "\verb|#|" are displayed as they are in the molecule (case of \verb|#3| and \verb|#4|) or understood as the character specifying the fine adjustment of the offset of the bonds.
-\section{Decorations}
-\subsection{Lewis diagrams}\label{lewis}
-The macro \falseverb{\lewis} allows placement of pairs of electrons, of single electrons, or of empty slots. This syntax is used:
+\section{Placement of Atoms}
+\subsection{First Atom}\label{premieratome}
+As explained on page~\pageref{first atom}, the first atom encountered (whether empty or not) is the one that is placed on the baseline, represented in gray on the examples of this manual. The choice of this first atom thus conditions the placement of all the others and often influences the placement of the whole molecule.
+
+\exemple{First atom}/\chemfig{H-[7]C(-[5]H)=C(-[1]H)-[7]H}\qquad
+\chemfig{C(-[3]H)(-[5]H)=C(-[1]H)-[7]H}/
+
+\subsection{Groups of atoms}\label{placementatomes}
+In a group of atoms, the atoms are placed one after the other in a well-established order:
+\begin{itemize}
+ \item the first one which is placed (which we will call "reference atom") is the one on which the bond arrives; in the case of the beginning of the molecule, the atom on the left is the reference atom;
+ \item the atoms to the right of the reference atom are then placed from left to right;
+ \item atoms to the left of the reference atom are finally placed from right to left.
+\end{itemize}
+
+In the group of atoms thus formed, the baselines of each atom are on \emph{the same horizontal line}, in other words, the atoms are all aligned on the same horizontal line.
+
+In the example below whose code would be "\verb|\chemfig{A[:-60,,,3]BCDEF}|" the reference atom of the 2nd{} group of atoms is "D" because the bond is requested to arrive on the 3rd{} atom. Below each atom of this group is the sequence number in which the atom is displayed:
\begin{center}
- \Verb|\lewis{<n1><n2>...<ni>,<atom>}|
+ \def\0#1#2{%
+ \vtop{%
+ \def\tempprintatom##1{\ensuremath{\mathrm{##1}}}%
+ \setbox0\hbox{\tempprintatom{#1}}%
+ \def\tempvrule{\vrule height.33ex width.4pt}%
+ \offinterlineskip\copy0 \kern2pt
+ \hbox to\wd0{\kern.5pt \tempvrule\hrulefill\tempvrule\kern.5pt}\kern2pt
+ \hbox to\wd0{\hss$\scriptstyle#2$\hss}}}
+ \chemfig{A-[:-60,,,3]\0{B}{5}|\0{C}{4}|\0{D}{1}|\0{E}{2}|\0{F}{3}}
\end{center}
-where the \Verb-<n1>-\dots\Verb-<ni>- represent the desired positions (in multiples of 45\degres) around the \Verb-<atom>-. These whole numbers must be between 0 and 7.
-This command can also be used inside the argument of \verb-\chemfig-:
-\exemple{The \string\lewis\ macro}|\lewis{0246,A}\par\medskip
-\lewis{1357,B}\par\medskip
-\chemfig{H-\lewis{26,O}-S(=[2]\lewis{13,O})
- (=[6]\lewis{57,O})-\lewis{26,O}-H}|
+\subsection{Bonds between atoms}\label{liaisonentreatomes}
+A bond starting from an atom would, if extended, pass through the centre of its bounding box. The atom placed at the end of the bond has its center of its bounding box is in the extension of the bond. Therefore, a bond between two atoms extends through the centers of their bounding boxes, as shown in this example:
+\begin{center}
+\fboxsep=.25pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\setchemfig{chemfig style={line width=1pt}}
+\Large
+\chemfig{A@ABC-[:65,,2,3]DE@BFG}
+\chemmove{%
+ \draw[red,fill=red] (A.center)circle(.2ex);
+ \draw[blue,fill=blue](B.center)circle(.2ex);
+ \draw[gray,-,dashed,shorten <=-1.5em, shorten >=-1.5em](A.center)--(B.center);
+}
+\end{center}
+This mechanism can create misalignments between groups of atoms that are particularly visible when the bonds are horizontal. Everything works well when the atoms have the same vertical dimensions; however, if a departure atom is high (with exponent) or deep (with subscript) and the arrival atom has a different vertical dimension, the alignment is broken.
+\exemple*{Horizontal alignment}/\Huge\setchemfig{atom sep=2em}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
-If one wishes to draw two electrons instead of a line, follow the integer with a ``\verb-:-''. If one wishes to draw a single electron, follow it with a ``\verb-.-''. To draw a lacuna, follow it with a ``\verb-|-'':
-\exemple{Lewis diagrams}*\lewis{0:2:4:6:,C}\qquad\lewis{1:3:5:7:,C}\par\bigskip
-\lewis{0.2.4.6.,C}\qquad\lewis{1.3.5.7.,C}\par\bigskip
-\lewis{0:2.4|,X}\par\bigskip
-Hydronium ion: \chemfig{H-\lewis{5|7,O^+}(-[2]H)-H}*
+It is surprising that the second atom is correctly aligned when the last two are vertically shifted. This is because \CF adds in front of each arrival atom the \falseverb{\vphantom} of the departure atom, but without including it in the content of this arrival atom: this \falseverb{\vphantom} is thus not intended to be reflected on the following atoms. This phenomenon can be shown by making visible the bounding boxes of the atoms where it appears that the atoms "\verb-B-" and "\verb-F-" have bounding boxes whose height takes into account the heights of the preceding atom:
+\exemple*{Horizontal placement and bounbding boxes}/\Huge\setchemfig{atom sep=2em}
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm#1}}}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
-All the decorations drawn by \falseverb{\lewis} are not included in the \falseverb{bounding box} of the atom; they are drawn afterwards. A consequence of this is seen in the two examples above, where the frame does not appear to be properly fitted to the drawing of the molecule, which extends downward slightly. This will be seen more often in this the ``Decorations'' chapter, which presents commands which do not change the bounding box.
+Since no automatic solution is satisfactory, we can manually get around this problem by creating an departure atom being a "strut" equal to \verb|\vphantom{X}|: thus, the starting atom has a "normal" height and no shift will be reflected on the next group of atoms. A sub-molecule is used here for brevity.
+\exemple*{Bypassing vertical placement}/\Huge\setchemfig{atom sep=2em}
+\definesubmol\I{\vphantom{X}}
+\chemfig{A^1|!\I-B-C-D}\qquad
+\chemfig{E_1|!\I-F-G-H}/
+The disadvantage is that the first bond is too long because the departure atom now has a zero horizontal dimension.
+
+If we are \emph{really sure} to understand the consequences that this will have on the molecule and especially if it lends itself to it, we can redefine \verb|\printatom| so that it forces the atom's bounding box to have fixed vertical dimensions; for example that of "$\mathrm{X^1_1}$".
+\exemple*{Redefinition of \string\printatom}/\Huge\setchemfig{atom sep=2em}
+\let\oldprintatom\printatom
+\renewcommand\printatom[1]{%
+ \begingroup
+ \setbox0\hbox{\oldprintatom{X^1_1}}%
+ \edef\tmp{\ht0=\the\ht0\relax\dp0=\the\dp0\box0 }%
+ \setbox0\hbox{\oldprintatom{#1}}%
+ \ifnum1\ifdim\ht0=0pt0\fi\ifdim\dp0=0pt0\fi\ifdim\wd0=0pt0\fi<1000
+ \tmp
+ \fi
+ \endgroup
+}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
-\label{Lewis}The \falseverb{\Lewis} macro works the same way as \verb-\lewis- but decorations are taken into account in the bounding box.
+\subsection{La macro \texttt{\char`\\chemskipalign}}\label{chemskipalign}
+For any group of atoms it is possible to temporarily deactivate the alignment adjustment mechanism and thus neutralize the \falseverb{\vphantom}. Simply place the \falseverb{\chemskipalign} command in the group of atoms; the alignment will resume in the following group of atoms as if the group of atoms containing \falseverb{\chemskipalign} had never existed. The following example shows the effects of this instruction: the reference point of the box containing the first atom is placed at the level of the bond which arrives from the left. The bounding boxes of the atoms are drawn in the second line.
-This can be seen more clearly by drawing an \verb-\fbox- around decorated atoms:
-\exemple{Bounding box and the \string\lewis\ macro}*\fboxsep0pt
-\fbox{\lewis{0.2.4.6.,A}}\quad\fbox{\Lewis{0.2.4.6.,A}}\par\medskip
-\fbox{\lewis{13,B}}\quad\fbox{\Lewis{13,B}}*
+\exemple[60]{Deactivation of the alignment mechanism}/\large
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}\par\bigskip
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}/
-\label{setlewis}Several parameters can be set with the help of these \chevrons{keys}
-\begin{itemize}
- \item \CFkv{lewis | width}{dim}is the width of the rectangle which represents the empty slot obtained whith the character ``|'';
- \item \CFkv{lewis sep}{dim} is the distance between the bounding box and the decoration. It is 0.2ex by default;
- \item \CFkv{lewis length}{dim} is the length of the line segment representing a pair of electrons. It is 1.5ex by default;
- \item \CFkv{lewis style}{code tikz} is code which is passed directly to \TIKZ. This code is empty by default.
- \item \CFkv{lewis dist}{dim}: is the distance between 2 discs drawn with "\string:. This distance is set to \CFval{0.3em} by default;
- \item \CFkv{lewis radius}{dim}: is the radius of the disc drawn with "." or "\string:". Its default value is \CFval{0.15ex};
- \item \CFkv{lewis diag coeff}{decimal}: is the diagonal spacing factor and its default value is \CFval{1}.
-\end{itemize}
+This command is to be used with caution lest the alignment of atoms in the next group be disrupted. In general, all will be well if the group of atoms featuring \falseverb{\chemskipalign} contains \emph{a single atom} whose height and depth are \emph{less} than those of the preceding and following atoms, and if the preceding and following atoms have identical heights and depths. Here is an example of the mess that results when the group of atoms contains two atoms, here ``\verb-\chemskipalign.-'' and ``\verb-B-'':
+\exemple{Consequence of the \string\chemskipalign command}/\large
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-\chemskipalign.B-C}/
-It should be noted that the parameters specific to Lewis decorations can be passed by
+This feature can sometimes be useful. Suppose we want to draw the following molecule
+\begin{center}
+ \catcode`;12
+ \def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}%
+ \def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}%
+ \chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}%
+\end{center}
+We can define commands which will draw the empty and full disks with \TIKZ. To ensure that these disks are at the right height, namely the height of the bond arriving at them, we will use the command \falseverb{\chemskipalign}. In the second line below the bonds are ``stuck'' to the disks by using the ability to change the bond shortening with the ``\verb-#-'' character, a feature seen on page~\pageref{modif.retrait}.
+\begingroup\catcode`;12 \catcode`#12
+\exemple{Use of \string\chemskipalign\ and #}/\def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}
+\def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}
+\chemfig{A-\emptydisk-\fulldisk-B}\par
+\chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}
+/\endgroup
+
+\section{The macro \texttt{\char`\\charge}}\label{charge}
+\subsection{Overview}
+The macro \verb| load|, which requires two mandatory arguments, allows to arrange elements (called \chevrons{charges}) around an \chevrons{atome}; its syntax is
+\begin{center}
+ \Verb|\charge{[<general parameters>]<position>[<tikz code>]=<charge>}{<atom>}|
+\end{center}
+where:
\begin{itemize}
- \item \Verb|\setchemfig{<keys>=<values>}| so that they last for the rest of the document;
- \item \Verb|\chemfig[<keys>=<values>]| and in this case, the settings are effective in the current molecule;
- \item \Verb|\lewis[<keys>=<values>]| so that the parameters are specific to this execution of the macro \verb|\lewis|.
+ \item the \chevrons{atom} is usually one or two letters, but it can also be empty;
+ \item the \chevrons{charge} is an arbitrary content that will be placed around the atom. Few constraints exist on this content: it can be text (in math mode if needed), or even \TIKZ code or a molecule drawn with \verb|chemfig|;
+ \item the \chevrons{general parameters} (optional) are a list of key/values specifying the options that this execution of the macro must satisfy. These keys/values are described below;
+ \item the \chevrons{position} is "\chevrons{angle}\verb-:-\chevrons{shift}", but it is possible to specify only the \chevrons{angle}, in which case, the \chevrons{shift} will be equal to \verb|0pt|;
+ \item the optionnal \chevrons{tikz code} sets the options given to the \TIKZ macro \verb|\node|, which places the \chevrons{charge}.
\end{itemize}
-The last way, of course, allows individual settings, but must be used with caution when the macro \verb|\lewis| is in the argument of \verb|\chemfig|. Indeed, the signs \verb-=- of the \Verb|<key>=<values>| should not be interpreted as a double bond and to do so, the macro \verb|\lewis|, its optional and mandatory argument \emph{must} be inside braces:
+\subsection{Parameters}
+The \chevrons{keys}${}={}$\chevrons{values} available in the \chevrons{general parameters} are:
+
+\begin{longtable}{rlp{8.5cm}}\hline
+ \chevrons{keys} & default \chevrons{values} & Description\\\hline\endhead
+ \Chargeparam{debug} & boolean which, when \CFval{true}, draws the outlines of the nodes receiving the \chevrons{atoms} (in green), the \chevrons{loads} (in blue) and the \chevrons{charge} (in red).\\
+ \Chargeparam{macro atom}&macro receiving the \chevrons{atom} as argument.\\
+ \Chargeparam{circle} & boolean which, when \CFval{true}, puts the \chevrons{atom} in a circular node; otherwise, the node is rectangular.\\
+ \Chargeparam{macro charge}&macro (e.g., \verb|\printatom| or \verb|\ensuremath|) receiving each charge as an argument.\\
+ \Chargeparam{extra sep} & node size increment of the \chevrons{atom} to put the \chevrons{charges}: it is the value passed to the \CFkey{inner sep} of \TIKZ.\\
+ \Chargeparam{overlay} & boolean which, when \CFval{true}, draws the \chevrons{charges} "overlay", i.e. outside the final bounding box.\\
+ \Chargeparam{shortcuts}&boolean which, when \CFval{true}, activates the shortcuts"\verb-\.-," "\verb-\:-," "\verb-\|- and "\verb-\"-" to draw Lewis formuas.\\
+ \Chargeparam{lewisautorot}&booleann which, when \CFval{true}, automatically rotates "\verb-\:-," "\verb-\|- and "\verb-\"-".\\
+ \Chargeparam{.radius}&radius of the point used to plot "\verb|\.|" and "\verb|\:|".\\
+ \Chargeparam{:sep} & separation between the two dots of "\verb|\:|".\\
+ \Chargeparam{.style}&\TIKZ style used to draw the "\verb|\.|" and "\verb|\:|" dots.\\
+ \Chargeparam{"length}&length of the rectangle "\verb-\- "and the line "\verb-\|-".\\
+ \Chargeparam{"width}&width of the rectangle \verb-\"-.\\
+ \Chargeparam{"style}&\TIKZ style used to draw the rectangle \verb-\"-.\\
+ \Chargeparam{|style}&TIKZ style used to draw the line \verb-\|-.\\\hline
+\end{longtable}
+
+It is possible to set some (or all) of these parameters by running the macro
+\begin{center}
+ \Verb|\setcharge{<keys>=<values>}|
+\end{center}
+and reset all parameters to their default values with
+\begin{center}
+ \verb|\resetcharge|
+\end{center}
+The \verb|\charge| macro places the \chevrons{charges} out of the bounding box (unless otherwise specified in the \chevrons{parameters}) while \verb|\Charge| places them into the bounding box.
+\medbreak
-\exemple{Optional argument of \string\lewis}/\chemfig{{\lewis[lewis style=red]{1:3:5:7:,X}}-{\lewis[lewis style=blue]{0:2:4:6:,Y}}}/
+The \chevrons{angle} is the location on the boundary of the node where the \chevrons{charge} is placed. This \chevrons{angle} can be expressed in degrees or it can be a boundary anchor in the sense of \TIKZ, like "south east." The \chevrons{shift} is a \TeX-dimension and represents an additional length between the boundary of the node containing the \chevrons{atom} and the place where the \chevrons{charge} is placed. Unless otherwise specified in the \chevrons{tikz code}, the \emph{center} anchor of \chevrons{charges}.
+\medbreak
-Here are some examples of customization:
+In the two following examples, \CFkey{debug} will be set to \CFval{true} in order to better perceive the changes induced by the modification of the parameters. In addition, the macro \verb|\Charge| will be used so that the bounding boxes take into account the charges. Here we see the influence of the node shape on the placement of the charges:
+\exemple{Generic example}|\setcharge{debug}
+Default then circle:
+\Charge{30=\:,120=$\ominus$,210=$\delta^+$}{Fe}\qquad
+\Charge{[circle]30=\:,120=$\ominus$,210=$\delta^+$}{Fe}|
-\exemple{Parameters for the \string\lewis\ macro}*\setchemfig{lewis sep=4pt,lewis length=1.5em,lewis style=red}
-\chemfig{A-\lewis{26,B}-C}\bigbreak
+To place the loads $\ominus$ and $\delta^+$ further away, we can play on the \chevrons{shift} or better, on the anchor: the \chevrons{angle} where the load is placed is stored in the macro \verb|\chargeangle|, so it is wise to choose the anchor \verb|180+\chargeangle|. It is also possible to specify a circular node to place the charge.
-\chemfig[lewis style={line width=0.4pt}]{A-\lewis{2|,B}-C}\bigbreak
+\exemple{Fine positioning}|\setcharge{debug}
+\Charge{30=\:,120:3pt=$\ominus$,210:5pt=$\delta^+$}{Fe}\qquad
+\Charge{[circle]30=\:,
+ 120[circle,anchor=180+\chargeangle]=$\ominus$,
+ 210[anchor=180+\chargeangle]=$\delta^+$}{Fe}|
-\Lewis{1:3:5:7:,X}\qquad\Lewis{0:2:4:6:,X}\bigbreak
+It is important to note that circular nodes have dimensions \emph{sometimes very different} from the "classic" rectangular nodes, especially in terms of horizontal and vertical extent. It is therefore advisable to set \CFval{true} the boolean key \CFkey{circle} knowingly.
-\Lewis[lewis dist=0.2em]{1:3:5:7:,X}\qquad
-\Lewis[lewis dist=0.2em]{0:2:4:6:,X}\bigbreak
+\exemple{Circular nodes}/\chemfig{\charge{90=\.}{N}H_3} : rectangle nodes\smallbreak
+\chemfig{\charge{[circle]90=\.}{N}H_3} : circle node/
-\Lewis[lewis dist=4pt,lewis radius=1.5pt]{1:3:5:7:,X}\qquad
-\Lewis[lewis dist=4pt,lewis radius=1.5pt]{0:2:4:6:,X}*
+\subsection{Lewis formula}
+When \CFkey{shortcut} is \CFval{true}, the shortcuts "\verb|\.|», "\verb|\:|», "\verb-\|- and "\verb-\"-» are actgive to draw Lewis formulas {\setcharge{extra sep=0pt}"\Charge{0=\.}{\vphantom{A}}», "\Charge{0=\:}{\vphantom{A}}», "\Charge{0=\|}{\vphantom{A}}» et "\Charge{0=\"}{\vphantom{A}}»}. You can deactivate them at any time with the \verb|\disableshortcuts| macro and reactivate them with \verb|\enableshortcuts|.
+
+When the boolean \CFkey{shortcut} is \CFval{false} or the shortcuts have been disabled with \verb|\disableshortcuts|, shortcuts "\verb|\:|", "\verb-\|-" and "\verb-\"-" are no longer programmed to draw Lewis formulas, so the macros \verb|\chargedot|, \verb|\chargeddot|, \verb|\chargeline| and \verb|\chargerect| must be used instead.
+\medbreak
-A problem sometimes occurs with the decorations of Lewis in the odd directions. In the example below with the atom ``O'', the decoration in position 1 seems farther from the atom than the decoration in position 4:
-\exemple{Odd directions}/\huge
-\Lewis{1|4|,O}/
-However, it is not the case as shown below by drawing the bounding box of the atom:
-\exemple{Optical illusion}/\huge
-\fboxsep0pt
-\def\printatom#1{\fbox{$\mathrm{#1}$}}
-\Lewis{1|4|,O}/
-\label{opt.lewis}The impression of greater distance is due to the shape of the letter ``O'' which is farther from the one of the bounding box in the corners, that is to say, in odd directions.
+The key \CFkey{lewisautorot}, which is \CFval{true} by default, acts on {\setcharge{extra sep=0pt}"\Charge{0=\:}{\vphantom{A}}", "\Charge{0=\|}{\vphantom{A}}" and "\Charge{0=\"}{\vphantom{A}}"} and rotates them.
-To move nearer (or farther) the Lewis drawings in odd directions, the \chevrons{clé} \CFkv{lewis diag coeff}{decimal} sets the factor which multiplies the gap between the bounding box and decoration Lewis. For the letter ``O'', it seems that 0.5 is the appropriated value:
-\exemple*{Optional argument of \string\lewis}/\huge
-\Lewis{1|4|,O}\quad \Lewis[lewis diag coeff=0.5]{1|4|,O}
+\exemple{Autorot}/\Charge{60=\:,150=\"}{A} et
+\Charge{[lewisautorot=false]60=\:,150=\"}{A}/
-\Lewis{0:5:,O}\quad \Lewis[lewis diag coeff=2]{0:5:,O}\quad \Lewis[lewis diag coeff=0.5]{0:5:,O}/
+The \verb|lewis| and \verb|Lewis| macros are still functional, but are no longer maintained or documented, and \textcolor{red}{\bfseries will be removed in a future version}, so it is advisable to prefer the \verb|\charge| and \verb|\Charge| macros, which give comparable results as shown below, while being much more powerful and configurable:
-\subsection{Stacking characters}
+\exemple{Comparison with \string\Lewis}/\Lewis{1:3.5|,X}\quad\Lewis{0:2.3|,X}\qquad(avec \string\Lewis)\par
+\Charge{45=\:,135=\.,225=\"}{X}\quad\Charge{0=\:,90=\.,135=\"}{X}%
+\qquad(avec \string\Charge)/
+
+The customization of Lewis' formulas is done via the macro \verb|\setcharge| or via the optional argument of \verb|\charge| by acting on the keys \CFkey{.radius}, \CFkey{:sep}, \CFkey{.style}, \CFkey{|style}, \CFkey{"length}, \CFkey{"width} and \CFkey{"style}. It is also possible to modify these keys for each formula with their optional argument which receives a list of \CFkey{keys}${}={}$\chevrons{values}.
+
+\exemple{Ccustomization}/\Charge{[.radius=1.5pt,.style={draw=gray}]
+ 45 =\.[{.style={draw=none,fill=red}}],
+ 135 =\.[{.style={draw=none,fill=blue}}],
+ -45 =\.[{.style={draw=none,fill=green}}],
+ -135=\.}{A}\quad
+\Charge{
+ 45 =\"[{"style={draw=red,fill=gray}}],
+ 135=\"[{"width=3pt,"style={line width=.8pt,draw=blue,fill=cyan}}]}{A}/
+
+\subsection{Integration in \CF}
+A macro \verb|\charge| can take the place of an atom, just like it did with \verb|\lewis|.
+
+\exemple{Charge in \CF}*\chemfig{H-\chemabove{\lewis{5|7,O}}{\quad\scriptstyle+}(-[2]H)-H}
+\qquad
+\chemfig{H-\charge{45:1.5pt=$\scriptstyle+$,-45=\|,-135=\"}{O}(-[2]H)-H}*
+
+However, \CF has been modified so that the bonds are \emph{joined} when the dimensions of an atom is zero, that is, if its width, height and depth are all \verb|0pt|. This was previously only the case if the atom was empty. This new feature makes it easy to place charges in carbon chains.
+
+\exemple{Charge in chain}/\chemfig{[:30]-\charge{90=\:}{}
+-[:-30]\charge{-90=\"}{}-\charge{90:2pt=$\delta^+$}{}-[:-30]}/
+
+\section{Stacking}
The macros\label{chemabove}
\begin{center}
\Verb|\chemabove[<dim>]{<code>}{<stuff>}|
@@ -1298,11 +1373,18 @@ These commands are independent of the macro \verb-\chemfig- and can be used eith
They are especially useful in rings, if care is taken to put braces around the letters A, B, C and D in order to prevent \CF from starting a new atom on these letters:
\exemple{Staking in rings}|\chemfig{*5(-\chembelow{A}{B}--\chemabove{C}{D}--)}|
-They are sometimes useful for placing pseudo-exponents which do not change the bounding box of the atoms, so that the bonds do not end up being too short:
-\exemple{Hydronium ion}*\chemfig{H-\chemabove{\lewis{5|7,O}}{\quad\scriptstyle+}(-[2]H)-H}*
-
\label{Chemabove}The \falseverb{\Chemabove} and \falseverb{\Chembelow} commands work in the same way, except that the bounding box takes into account the \Verb-<stuff>- placed above or below.
+What's the difference between \verb|\chemabove| and \verb|\charge| for placing one item above or below another?
+\exemple{\string\chemabove\space or \string\charge}/\chemfig{*5(----\chemabove{A}{\oplus}-)}
+\chemfig{*5(----\charge{90[anchor=-90]=$\oplus$}{A}-)}/
+
+By default, the two macros give very similar results. However, there are differences in their use:
+\begin{itemize}
+ \item \verb|\chemabove| and \verb|\chemabelow| can only be used in the argument of \verb|chemfig|, which is not the case for \verb|\charge|;
+ \item the \verb|\charge| macro requires \TIKZ, whereas \verb|\chemabove| and \verb|\chemabelow| use low-level \TeX{} primitives and are therefore fast and independent of any package.
+\end{itemize}
+
\section{Using {\protect\ttfamily\protect\textbackslash chemfig} in the {\protect\ttfamily tikzpicture} environment}
It is possible to call the \falseverb{\chemfig} inside a {\ttfamily\falseverb{tikzpicture}} environment:
\exemple{\textbackslash chemfig inside tikzpicture}|\begin{tikzpicture}[help lines/.style={thin,draw=black!50}]
@@ -1313,23 +1395,6 @@ It is possible to call the \falseverb{\chemfig} inside a {\ttfamily\falseverb{ti
\node[draw,red,anchor=base] at(3,2){\chemfig{X>[2,,,,blue]Y}};
\end{tikzpicture}|
-\section{Beyond chemistry}\label{style.noeuds}
-At heart \CF is a tool for drawing graphs, and this tool has been programmed to adapt it for chemistry. In some ways it is possible to return \CF to its roots to draw organization charts or other diagrams represented by graphs.
-
-Each atom is contained in a \TIKZ node. By default these nodes have an ``inner sep'' and an ``outer sep'' equal to 0pt. They are rectangular as seen on page~\pageref{longueur.liaison}. These defaults can be overwritten with the \chevrons{key} \CFkey{node style}, the argument of which is passed to \TIKZ and specifies the style of the nodes containing the atoms.
-
-In this example we specify only ``draw,inner sep=2pt'', which has the effect of drawing the outline of the nodes and separating the outline and node contents by 2pt. We also specify \CFkv{bond offset}{0pt} so that the bonds touch the edges of the nodes. The interatomic spacing is increased to 75pt. Finally, the command \falseverb{\printatom} is made as simple as possible so that math mode is no longer used and spaces are thus preserved.
-\exemple*{An organization chart}/\setchemfig{node style={draw,inner sep=2pt},bond offset=0pt,atom sep=75pt}
-\renewcommand\printatom[1]{#1}
-\chemfig{The boss-[6]Me(-[4]Them(-[6]The others)(-[7,2]Group 1))-You(-[:-120,0.5]Him)(-[:-60,0.5]Her)}/
-
-Here is another organization chart where the nodes are circular and coloured cyan:
-\exemple*{Family diagram}/\setchemfig{bond offset=0pt,atom sep=80pt,node style={draw,circle,fill=cyan,minimum size=25pt}}
-\renewcommand\printatom[1]{\textsf{#1}}
-\chemfig{Me(-[:-50,1.2]Brother)(-[:-10]Brother(-[:15]Niece)(-[:-35]Niece))
-(-[:-155,0.8]Sister-[:-80]Nephew)(-[:95,1.25]Father(-[:-25,0.8]Uncle)(-[:-65,0.8]Aunt))
-(-[:135]Mother-[:-95,0.5]Uncle)}/
-
\section{Annotated examples}\label{exemples.commentes}
In this chapter, several molecules will be drawn, putting into use the methods previously described. The aim here is to show a logical order for putting together a molecule so that the user unfamiliar with \CF will learn how to construct complex molecules. The construction steps will be shown to help with this learning process.
@@ -1511,15 +1576,13 @@ Adding a \falseverb{charge} to an atom with a mathematical exponent implies that
\exemple{Charge and bond}/\chemfig{A^+-[2]B}
\qquad
\chemfig{A\rlap{${}^+$}-[2]B}/
-If you want to use the command \verb-\oplus- which displays ``$\oplus$'', some could find that the charge is too low: $\mathrm{A^\oplus}$. In that case, why not use \falseverb{\chemabove} to put as precisely as you will, both vertically and horizontally the charge:
-\exemple{Charge et \string\chemabove}/\chemfig{\chemabove[0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}-[2]B}
-\qquad
-\chemfig{{\chemabove[-0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}}-[2]B}/
-We notice an additional level of braces for the second molecule. Indeed, as we specify ``\verb/-0.5pt/'' for the optional argument of \falseverb{\chemabove} to lower the charge, it is necessary to prevent \CF to understand the sign ``\verb/-/'' as a single bond.
-To add a load near the vertex of a cycle , the best method is to attach an invisible bond to this vertex, which is done here with \falseverb{\definesubmol} with a bond with a length coefficient equal to 0.2:
-\exemple{Charges and cycles}/\definesubmol\nobond{-[,0.2,,,draw=none]}
-\chemfig{*5(---(!\nobond\scriptstyle\oplus)-(!\nobond\scriptstyle{-})-)}/
+The macro \verb|\charge| allows this task to be performed simply and accurately.
+\exemple{Placing charges}/\chemfig{\charge{[extra sep=0pt]45[anchor=180+\chargeangle]=%
+$\scriptstyle\oplus$}{A}-[2]B}
+\qquad
+\chemfig{*5(---\charge{90:2pt=$\scriptstyle\oplus$}{}-%
+\charge{135:2pt=$\scriptstyle-$}{}-)}/
\subsection{Draw a curve bond}
We have already seen that with the \TIKZ library ``\verb-decorations.pathmorphing-'', we can draw a wavy bond:
@@ -1542,7 +1605,7 @@ For more flexibility, you can also define nodes using the character ``\verb-@-''
\chemmove{\draw[-](a)..controls +(60:3em) and +(30:1em)..
++(20:2em) ..controls +(210:3em) and +(-120:4em) ..(b);}/
-\subsection{Draw a ploymer element}\label{polymerdelim}
+\subsection{Draw a polymer element}\label{polymerdelim}
The macro \verb|\polymerdelim|, until now undocumented and in the test phase, becomes officially released in \CF with version 1.33. Its syntax is as follows:
\begin{center}
\Verb|\polymerdelim[<keys>=<values>]{<node1>}<node2>}|
@@ -1556,7 +1619,7 @@ The effect, after possibly \emph{two} compilations, is to place vertical delimit
\CFdelimparam{height} & Defines the height (above the node) of the delimiters.\\
\CFdelimparam{depth} & Defines the depth (below the node) of the delimiters. If the \chevrons{value} is empty, then the depth is equal to the height.\\
\CFdelimparam{h align}&Boolean which, when \CFval{false}, places the 2nd delimiter on the 2nd node, at the risk that the delimiters are not on the same horizontal line.\\
- \CFdelimparam{auto rotate}&Booléen which, when \CFval{true} and \CFkv{h align}{false}, automatically turns the delimiters to be perpendicular to the line that connects the two nodes.\\
+ \CFdelimparam{auto rotate}&Boolean which, when \CFval{true} and \CFkv{h align}{false}, automatically turns the delimiters to be perpendicular to the line that connects the two nodes.\\
\CFdelimparam{rotate}&When \CFkv{h align}{false} and \CFkv{auto rotate}{false}, sets the rotation angle of the two delimiters.\\
\CFdelimparam{open xshift}& Defines the horizontal offset of the opening delimiter.\\
\CFdelimparam{close xshift}& Defines the horizontal offset of the closing delimiter. If the \chevrons{value} is empty, then this offset becomes opposite to the offset of the opening delimiter.\\
@@ -1583,7 +1646,7 @@ Polycaprolactame
\polymerdelim[height = 5pt, indice = \!\!n]{left}{right}
\bigskip
-Polyphénylène sulfide:
+Polyphenyl sulfide:
\chemfig{\vphantom{S}-[@{op,.75}]S-(**6(---(-[@{cl,0.25}])---))}
\polymerdelim[delimiters = (), height = 15pt, indice = {}]{op}{cl}
\bigskip
@@ -1647,39 +1710,6 @@ Water molecule rotated 30\textdegree: \chemfig{[:30]@1H-[::37.775,2]@2O-[::-75.5
\namebond23{\footnotesize0.9584 \angstrom}
\arclabel{0.5cm}{1}{2}{3}{\footnotesize104.45\textdegree}|
-\subsection{Schéma de Lewis à l'angle près}
-In some very special cases, it is sometimes necessary to position Lewis diagrams to the nearest degree and no longer to multiples of 45 degrees.
-
-For this, it is relatively easy to write a macro \verb-\mylewis-, admitting an optional argument (the length of the doublet) which is 2ex and two mandatory arguments; the first being the name of the atom and the second being the list of angles separated by commas.
-
-The trick is to create an invisible circular node that contains the atom and draw the dipoles at the desired angles so that they are tangent to this circle:
-
-\exemple*{Doublets au degrés prés}|\catcode`\_11
-\newcommand\mylewis[3][2ex]{% #1=longueur, #2=atome #3=liste des angles
- \tikzpicture[baseline,anchor=base]%
- \node[inner sep=0pt,outer sep=1pt,circle,overlay](atom@@)at(0,0){\phantom{#2}};%
- \node[inner sep=0pt,outer sep=0pt]at(0,0){#2};%
- \def\list_angle{#3,}%
- \loop
- \expandafter\grab_angle\list_angle\_nil
- \pgfextractx\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimax{\the\CF_dim}%
- \pgfextracty\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimay{\the\CF_dim}%
- \pgfmathparse{#1*sin(\current_angle)/2}\let\offset_xx\pgfmathresult
- \pgfmathparse{#1*cos(\current_angle)/2}\let\offset_yy\pgfmathresult
- \draw[line width=.4pt,overlay]
- (\CF_dimax-\offset_xx,\CF_dimay+\offset_yy)--(\CF_dimax+\offset_xx,\CF_dimay-\offset_yy);%
- \unless\ifx\empty\list_angle
- \repeat
- \endtikzpicture
-}
-\def\grab_angle#1,#2\_nil{\def\current_angle{#1}\def\list_angle{#2}}
-\catcode`\_8
-Essai : \mylewis{Cl}{15}\qquad \mylewis[3ex]{Cl}{-60}\qquad \mylewis[1.5ex]{Cl}{60,120,240,300}
-\bigskip
-
-\chemfig{P(-[:72]\mylewis{Cl}{-18,72,162})(-[:-72]Cl)
-(-[:144]Cl)(-[:-144]Cl)-\mylewis{Cl}{0,90,-90}}|
-
\subsection{Dessiner des liaisons multiples}
Again, the ``decorations.markings'' library allows to draw multiple bonds:
@@ -2369,28 +2399,28 @@ A common problem can be the misalignment of the ``+'' sign with the molecules be
\schemestart
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop/
-Here, the ``+'' sign sits on the same baseline as the compound before it, and this baseline is that of the top carbon atom. One may shift the ``+'' sign, but this would not change the vertical position of ``\kern0.3333em\chemfig{\lewis{246,Br}-\lewis{026,Br}}\kern0.3333em''. In fact, the ``+'' sign does not prevent \CF from reading a compound, as shown in the example above where everything is included in the compound `` c1''. Therefore, one must stop the compound right after the first molecule with a \verb-\arrow{0}[,0]- that will draw an invisible, zero-length arrow. In order to vertically center the whole scheme, one must also set the the anchor of the first compound as ``west'' (or ``180'', which is a synonym) with the second optional argument of the \verb-\schemestart- command:
+Here, the ``+'' sign sits on the same baseline as the compound before it, and this baseline is that of the top carbon atom. One may shift the ``+'' sign, but this would not change the vertical position of ``\kern0.3333em\chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}\kern0.3333em''. In fact, the ``+'' sign does not prevent \CF from reading a compound, as shown in the example above where everything is included in the compound `` c1''. Therefore, one must stop the compound right after the first molecule with a \verb-\arrow{0}[,0]- that will draw an invisible, zero-length arrow. In order to vertically center the whole scheme, one must also set the the anchor of the first compound as ``west'' (or ``180'', which is a synonym) with the second optional argument of the \verb-\schemestart- command:
\exemple{+ sign alignment}/\setchemfig{scheme debug=true}
\schemestart[][west]
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\arrow{0}[,0]\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop/
Thus, the first compound `` c1'' consists of the first molecule and the second compound consists of everything else, i.e. the ``+'' sign and the second molecule. Alternatively, one can play with anchors or styles via the \verb-\arrow- command to move the second compound to another location. Here, for example, the second compound is shifted downwards by 10pt in the first case. In the second case, the ``south east'' anchor of the first compound matches the ``south west'' anchor of the second one:
\exemple{+ sign alignment}/\setchemfig{scheme debug=true}
\schemestart[][west]
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\arrow(--[yshift=-10pt]){0}[,0]\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop
\medskip
\schemestart[][west]
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\arrow(.south east--.south west){0}[,0]\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop/
\newpage
@@ -2417,12 +2447,12 @@ The commands created by \CF are:
\item \CFkv{node style} {{}}: style of atoms
\item \CFkv{bond style} {{}}: style of bonds
\item \CFkv{lewis | width} {0.3ex}: width of the rectangle Lewis "|"
- \item \CFkv{lewis sep} {0.4ex}: space between atom and Lewis decorations
- \item \CFkv{lewis length} {1.5ex}: length of Lewis decorations
- \item \CFkv{lewis style} {{}}: style of Lewis decorations
- \item \CFkv{lewis dist} {0.3em}: space between discs of the ":" Lewis decoration
- \item \CFkv{lewis radius} {0.15ex}: radius of discs for Lewis decorations
- \item \CFkv{lewis diag coeff} {1}: factor that multiplies the distance to Lewis decorations in odd directions
+ \item \CFkv{lewis sep} {0.4ex}: space between atom and Lewis formulas
+ \item \CFkv{lewis length} {1.5ex}: length of Lewis formulas
+ \item \CFkv{lewis style} {{}}: style of Lewis formulas
+ \item \CFkv{lewis dist} {0.3em}: space between discs of the ":" Lewis formulas
+ \item \CFkv{lewis radius} {0.15ex}: radius of discs for Lewis formulas
+ \item \CFkv{lewis diag coeff} {1}: factor that multiplies the distance to Lewis formulas in odd directions
\item \CFkv{cycle radius coeff} {0.75}: shrinkage ratio of the circle or arc inside cycles
\item \CFkv{stack sep} {1.5pt}: vertical gap between arguments of \verb-\chemabove- and \verb-\chembelow- macros
\item \CFkv{compound style} {{}}: style of compounds
@@ -2449,8 +2479,8 @@ The commands created by \CF are:
\falseverb\chemskipalign& tells the vertical alignment mechanism to ignore the current group of atoms. See page~\pageref{chemskipalign}.\\
\Verb-\redefinesubmol{<name>}<n>[<code1>]{<code2>}- & replaces a preexisting alias \Verb-!<name>- with the new \Verb-<code>-. See page~\pageref{redefinesubmol}\\[2ex]\hline
&\\
-\Verb-\lewis[coeff]{<codes>,<atom>}-& displays the \Verb-<atom>- and places Lewis dot decorations as specified in the \Verb-<code>-. The dots drawn do not change the bounding box. See page~\pageref{lewis}\\
-\Verb-\Lewis[coeff]{<codes>,<atom>}-& displays the \Verb-<atom>- and places Lewis dot decorations as specified in the \Verb-<code>-. See page~\pageref{lewis}\\
+\Verb-\charge{[<parameters>]<pos>[<tikz>]}{<atom>}-& prints \Verb-<atome>- and places the charges according to their \Verb-<positions>-. The charges are places out of the bounding box of the \Verb-<atome>-. See page~\pageref{charge}\\
+\Verb-\Charge{[<parameters>]<pos>[<tikz>]}{<atom>}-& Same behaviour as \verb|\charge|, but the final bounding box takes the charges into account.\\
\Verb-\chemmove[<tikz options>]<tikz code>-& Makes a \verb-tikzpicture- environment, adding to it the \verb-<tikz options>-. Uses the \Verb-<tikz code>- to join the nodes specified in the molecules with the help pf the ``\verb-@-'' character. See page~\pageref{mecanismes-reactionnels}.\\[2ex]\hline
&\\
\Verb-\chemabove[<dim>]{<txt1>}{txt2}- & writes \Verb-<txt1>- and places \Verb-<txt2>- above, leaving \Verb-<dim>- of vertical space. This command does not change the bounding box of \Verb-<txt1>-. See page~\pageref{chemabove}\\
@@ -2559,11 +2589,28 @@ $\star\quad\star$
\exemple*{Codeine}/\chemfig{[:-30]**6(-(-OH)-?-*6(-(-[3]-[2,2]-[0,.5])*6(-(<:[:-150,1.155]O?)
-(<:OH)-=-)-(<:[1]H)-(-[2]NCH_3)--)---)}/
-\exemple*{A dye (red)}/\chemfig{**6(--*6(-(-NO_2)=-(-\lewis{26,O}-[0]H)=(-\lewis{4,N}=[0]\lewis{2,N}-[0]Ar)-)----)}/
+\exemple*{A dye (red)}/\chemfig{**6(--*6(-(-NO_2)=-(-\charge{90=\|,-90=\|}{O}-[0]H)=(-\charge{180=\|}{N}=[0]\charge{90=\|}{N}-[0]Ar)-)----)}/
-\exemple*{Menthone}/\chemfig{CH_3-?(-[2]H)(-[::-30,2]-[::+60](=[1]\lewis{20,O})
+\exemple*{Menthone}/\chemfig{CH_3-?(-[2]H)(-[::-30,2]-[::+60](=[1]\charge{0=\|,90=\|}{O})
-[::-150,1.5](-[:20]CH(-[1]CH_3)(-[7]CH_3))(-[6]H)-[::-90,2]-[::+60]?)}/
+\exemple*{Fullerene}/\definesubmol\fragment1{
+ (-[:#1,0.85,,,draw=none]
+ -[::126]-[::-54](=_#(2pt,2pt)[::180])
+ -[::-70](-[::-56.2,1.07]=^#(2pt,2pt)[::180,1.07])
+ -[::110,0.6](-[::-148,0.60](=^[::180,0.35])-[::-18,1.1])
+ -[::50,1.1](-[::18,0.60]=_[::180,0.35])
+ -[::50,0.6]
+ -[::110])
+}
+\chemfig{
+ !\fragment{18}
+ !\fragment{90}
+ !\fragment{162}
+ !\fragment{234}
+ !\fragment{306}
+}/% https://tex.stackexchange.com/questions/506293/how-to-draw-a-fullerene
+
\exemple*{Fischer indole synthesis}/\schemestart
\chemfig{*6(=-*6(-\chembelow{N}{H}-NH_2)=-=-)}
\+
@@ -2572,29 +2619,28 @@ $\star\quad\star$
\chemfig{*6(-=*5(-\chembelow{N}{H}-(-R_2)=(-R_1)-)-=-=)}
\schemestop/
-\exemple*{Reaction mechanisms: carbonyl group}/
-\schemestart
- \chemfig{C([3]-)([5]-)=[@{db,.5}]@{atoo}\lewis{06,O}}
+\exemple*{Reaction mechanisms: carbonyl group}/\schemestart
+ \chemfig{C([3]-)([5]-)=[@{db,.5}]@{atoo}\charge{0=\|,-90=\|}{O}}
\arrow(.mid east--.mid west){<->}
- \chemfig{\chemabove{C}{\scriptstyle\oplus}([3]-)([5]-)-\chemabove
- {\lewis{026,O}}{\hspace{5mm}\scriptstyle\ominus}}
+ \chemfig{\charge{90:3pt=$\scriptstyle\oplus$}{C}([3]-)([5]-)-%
+ \charge{0=\|,90=\|,-90=\|,45:3pt=$\scriptstyle\ominus$}{O}}
\schemestop
\chemmove{\draw[shorten <=2pt, shorten >=2pt](db) ..controls +(up:5mm) and +(up:5mm)..(atoo);}/
\exemple*{Reaction mechanisms: nitro group}/\schemestart
- \chemfig{R-\chembelow{N}{\hspace{-5mm}\scriptstyle\oplus}([1]=[@{db}]@{atoo1}O)([7]-[@{sb}]@{atoo2}
- \chemabove{\lewis{157,O}}{\hspace{7mm}\scriptstyle\ominus})}
+ \chemfig{R-\charge{225:3pt=$\scriptstyle\oplus$}{N}([1]=[@{db}]@{atoo1}O)([7]-[@{sb}]@{atoo2}
+ \charge{45=\|,-45=\|,-135=\|,45:5pt=$\scriptstyle\ominus$}{O})}
\arrow(.mid east--.mid west){<->}
- \chemfig{R-\chemabove{N}{\hspace{-5mm}\scriptstyle\oplus}([1]-\chemabove{O}{\scriptstyle\ominus})([7]=O)}
+ \chemfig{R-\charge{135:3pt=$\scriptstyle\oplus$}{N}([1]-\charge{90:3pt=$\scriptstyle\ominus$}{O})([7]=O)}
\schemestop
\chemmove{
- \draw[shorten <=2pt, shorten >=2pt](db) ..controls +(120:5mm) and +(120:5mm)..(atoo1);
+ \draw[shorten <=2pt, shorten >=2pt](db) ..controls +(120:5mm) and +(120:7mm)..(atoo1);
\draw[shorten <=3pt, shorten >=2pt](atoo2) ..controls +(225:10mm) and +(225:10mm)..(sb);
}/
\exemple*{Nucleophilic addition. Primary amines}/\setchemfig{atom sep=2.5em,compound sep=5em}
\schemestart
- \chemfig{R-@{aton}\lewis{2,N}H_2}
+ \chemfig{R-@{aton}\charge{90=\|}{N}H_2}
\+
\chemfig{@{atoc}C([3]-CH_3)([5]-CH_3)=[@{atoo1}]O}
\chemfig{@{atoo2}\chemabove{H}{\scriptstyle\oplus}}
@@ -2610,13 +2656,13 @@ $\star\quad\star$
\par
\schemestart
\arrow{<=>}
- \chemfig{R-@{aton}\lewis{2,N}([6]-[@{sbh}]H)-[@{sb}]C(-[2]CH_3)(-[6]CH_3)-[@{sbo}]@{atoo}
+ \chemfig{R-@{aton}\charge{90=\|}{N}([6]-[@{sbh}]H)-[@{sb}]C(-[2]CH_3)(-[6]CH_3)-[@{sbo}]@{atoo}
\chemabove{O}{\scriptstyle\oplus}(-[1]H)(-[7]H)}
\chemmove[-stealth,shorten <=3pt,shorten >=2pt,dash pattern= on 1pt off 1pt,thin]{
\draw(aton) ..controls +(up:5mm) and +(up:5mm)..(sb);
\draw(sbh) ..controls +(left:5mm) and +(south west:5mm)..(aton);
\draw(sbo) ..controls +(up:5mm) and +(north west:5mm)..(atoo);}
- \arrow{<=>[\tiny élimination]}\chemfig{R-N=C(-[1]CH_3)(-[7]CH_3)}
+ \arrow{<=>[\tiny elimination]}\chemfig{R-N=C(-[1]CH_3)(-[7]CH_3)}
\+
\chemfig{H_3\chemabove{O}{\scriptstyle\oplus}}
\schemestop/
@@ -2652,9 +2698,9 @@ $\star\quad\star$
\arrow{<->}
\chemfig{*6(-=-(!+)-(-[:120]Br)(-[:60]H)-=)}}\chemright]
\arrow(@c2--){<-[*0\chemfig{{-}AlBr_4|^\ominus}][*0\chemfig{Br_2/Al_2Br_3}]}[90,1.5]
- \chemname{\chemfig{*6(-=-=-=-)}}{Benzène 1}
+ \chemname{\chemfig{*6(-=-=-=-)}}{Benzene 1}
\arrow(@c4--){->[*0\chemfig{{-}H^\oplus}]}[90,1.5]
- \chemname{\chemfig{*6(-=-=(-Br)-=-)}}{Bromobenzène 2}
+ \chemname{\chemfig{*6(-=-=(-Br)-=-)}}{Bromobenzne 2}
\arrow(@c5.mid east--@c6.mid west)
\schemestop
\chemnameinit{}Z
@@ -2662,11 +2708,11 @@ $\star\quad\star$
\exemple*{Reaction mechanism of chlorination}/\scriptsize\setchemfig{bond offset=1pt,atom sep=2em,compound sep=4em}
\schemestart
\chemfig{Cl-[4]@{a0}(=[@{a1}:120]@{a2}O)-[:-120](=[:-60]O)-[4]Cl}\+\chemfig{*6(-=-=(-@{oh1}OH)-=)}\arrow
- \chemfig{*6((-O-[:150](-[@{o0}:150]@{o1}\lewis{6.,O})(-[@{cl0}:60]@{cl1}Cl)-[:240](-[4]Cl)=[6]O)=-=-=-)}
+ \chemfig{*6((-O-[:150](-[@{o0}:150]@{o1}\charge{-90=\.}{O})(-[@{cl0}:60]@{cl1}Cl)-[:240](-[4]Cl)=[6]O)=-=-=-)}
\arrow\chemfig{*6((-O-[:150](=[2]O)-[:-150](=[6]O)-[:150]Cl)=-=-=-)}\+\chemfig{HCl}
\arrow(@c1--){0}[-90,0.5]
\chemfig{*6(-=*6(-O-*6(-@{o2}(=[@{o3}]@{o4}O)-Cl)=)-=-=)}\+\chemfig{*6(-=-=(-@{oh2}OH)-=)}\arrow
- \chemfig{*6(-=*6(-O-(-(-[@{cl2}:60]@{cl3}Cl)(-[@{o5}:-120]@{o6}\lewis{6.,O})-O-[::-40]*6(=-=-=-))=)-=-=)}
+ \chemfig{*6(-=*6(-O-(-(-[@{cl2}:60]@{cl3}Cl)(-[@{o5}:-120]@{o6}\charge{-90=\.}{O})-O-[::-40]*6(=-=-=-))=)-=-=)}
\kern-3em \arrow\chemfig{[:30]*6(=-(-O-[:-60](=O)-[:-120](=[4]O)-[:-60]O-*6(=-=-=-))=-=-)}
\kern-3em \+\chemfig{HCl}
\schemestop
@@ -2718,8 +2764,8 @@ $\star\quad\star$
\chemleft[\subscheme[90]{%
\chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
\arrow{<->}[,0.75]
- \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}\chemright]
- \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemfig{R'-\charge{90=\:}{N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\charge{0=\:,90=\:}{O}}]}[,1.1]
\chemmove[red,-stealth,red,shorten <=3pt]{
\draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
\arrow(@c1--){0}[-90,0.333]
@@ -2770,21 +2816,21 @@ $\star\quad\star$
\exemple*{Electrophilic addition of halogen to olefin}/\schemestart
\subscheme{%
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
- \arrow{0}[,0]\+\chemfig{\lewis{246,Br}-\lewis{026,Br}}}
+ \arrow{0}[,0]\+\chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{90=\|,0=\|,270=\|}{Br}}}
\arrow(@c1--olefin){<=>[*{0}rapide]}[-90]
\chemfig{>[:-20]C(<[:40])=[@{db}6]C(<[:-130])<[:-20]}
\arrow(--bromonium){0}[-90]
- \chemname{\chemfig{C*3((<)(<:[:-155])-\raise1.5pt\llap{$\scriptstyle\oplus$}\lewis{17,Br}-C(<:)(<[:155])-)}}
+ \chemname{\chemfig{C*3((<)(<:[:-155])-\charge{45=\|,-45=\|,180:3pt=$\scriptstyle\oplus$}{Br}-C(<:)(<[:155])-)}}
{bromonium ion}
\arrow(--carbeniumA){<<->}[,1.5]
\chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<:[:-150])(<[:-100])-[:-30]
- \lewis{157,Br}}}{Xarbenium ion}
+ \charge{45=\|,-45=\|,225=\|}{Br}}}{Xarbenium ion}
\arrow(@bromonium--carbeniumB){<<->}[180,1.5]
\chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<[:-150])
- (<:[:-100])-[:-30]\lewis{137,Br}}}{carbenium ion}
+ (<:[:-100])-[:-30]\charge{45=\|,-45=\|,135=\|}{Br}}}{carbenium ion}
\arrow(@olefin--){0}[,.25]
- \chemfig{@{Br1}\chemabove[3pt]{\lewis{246,Br}}{\scriptstyle\delta\oplus}-[@{b2}]@{Br2}
- \chemabove[3pt]{\lewis{026,Br}}{\scriptstyle\delta\ominus}}
+ \chemfig{@{Br1}\charge{90=\|,180=\|,270=\|,90:5pt=$\scriptstyle\delta\oplus$}{Br}-[@{b2}]@{Br2}
+ \charge{90=\|,0=\|,270=\|,90:5pt=$\scriptstyle\delta\ominus$}{Br}}
\arrow(@olefin--[left]){0}[180,0]
$\pi$ complexe
\arrow(@carbeniumA--@olefin){<=>[lent, \chemfig{{-}Br^\ominus}]}
@@ -2799,7 +2845,7 @@ $\star\quad\star$
\definesubmol{so2oh}{S(=[::90]O)(=[::-90]O)-OH}
\setchemfig{atom sep=2.5em}
\schemestart[,1.5]
- \chemname{\chemfig{*6(=-*6(-=-=-)=-=-)}}{Naphtalène}\+\chemfig{H_2SO_4}
+ \chemname{\chemfig{*6(=-*6(-=-=-)=-=-)}}{Naphtalene}\+\chemfig{H_2SO_4}
\arrow(nph.mid east--.south west){->[80\degres C]}[45]
\chemname{\chemfig{*6(=-*6(-=-(!\cycleoplus)-(-SO_3H)-)=-=-)}}{Ion 1-arenium}
\arrow(.mid east--.mid west)
@@ -2816,8 +2862,8 @@ $\star\quad\star$
\hspace{10em}
\tikz[remember picture]\node(n0){\chemname{}{Attacks\\nucleophiles}};\par
\vspace{2ex}\hspace{15em}
- \chemfig{R^2-(-[:-60]@{a0}H)-[:60]@{a1}(-[:120]R^1)(-[1,0.25,,,draw=none]\scriptstyle\color{red}\delta+)
- =[@{a2}]@{a3}\lewis{1:7:,O}-[1,0.5,,,draw=none]\scriptstyle\color{red}\delta{-}}
+ \chemfig{R^2-(-[:-60]@{m3}H)-[:60]@{m0}\charge{45:5pt=$\scriptstyle\color{red}\delta+$}{}(-[:120]R^1)
+ =[@{m1}]@{m2}\charge {45=\:,-45=\:,45:7pt=$\scriptstyle\color{red}\delta-$}{O}}
\hspace{5em}
\chemname[-15ex]{}{\tikz[remember picture]\node(n1){};Addition reactions}\kern1em
\chemname{}{\tikz[remember picture]\node(n2){};Basic properties}\par
diff --git a/macros/generic/chemfig/chemfig-fr.pdf b/macros/generic/chemfig/chemfig-fr.pdf
index 1528fd19ac..f288d655fe 100644
--- a/macros/generic/chemfig/chemfig-fr.pdf
+++ b/macros/generic/chemfig/chemfig-fr.pdf
Binary files differ
diff --git a/macros/generic/chemfig/chemfig-fr.tex b/macros/generic/chemfig/chemfig-fr.tex
index c0b65b52d1..392f6dd8f8 100644
--- a/macros/generic/chemfig/chemfig-fr.tex
+++ b/macros/generic/chemfig/chemfig-fr.tex
@@ -126,7 +126,7 @@
\if\string b\detokenize\expandafter{\f@series}%
\lower0.01em\hbox{\itshape f}\kern-0.06em
\else
- \lower0.045em\hbox{\kern-0.05em \itshape f}\kern0.026em
+ \lower0.048em\hbox{\kern-0.04em \itshape f}\kern0.03em
\fi ig%
}%
\xspace
@@ -144,6 +144,7 @@
\newcommand*\CFval[1]{{\color{teal}\textlangle\textit{#1}\textrangle}}
\newcommand*\CFkv[2]{\CFkey{#1}{\color{teal}${}={}$}\CFval{#2}}
\newcommand*\CFparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[chemfig]{#1}}}\fi\\}
+\newcommand*\Chargeparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[charge]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[charge]{#1}}}\fi}
\newcommand*\CFdelimparam[1]{\CFkey{#1}&\ifcat\relax\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}\relax \textlangle\textit{vide}\textrangle\else\texttt{\detokenize\expandafter\expandafter\expandafter{\useKV[CFdelimiters]{#1}}}\fi}
\usepackage[plainpages=false,pdfpagelabels,bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=magenta,pdfauthor={Christian TELLECHEA},pdftitle={ChemFig},pdfsubject={Dessiner des molécules 2D avec LaTeX},pdfkeywords={ChemFig},pdfcreator={LaTeX}]{hyperref}
@@ -194,8 +195,8 @@
\chemleft[{\subscheme[90]{%
\chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
\arrow{<->}[,0.75]
- \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}}\chemright]
- \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemfig{R'-\charge{90=\:}{N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\charge{0=\:,90=\:}{O}}]}[,1.1]
\chemmove[red,-stealth,red,shorten <=3pt]{
\draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
\chemfig{*6(R\rlap{$'$}-N=(-R)-\chemabove{O}{\scriptstyle\oplus} H_2)}
@@ -215,54 +216,42 @@
\setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt,label=--}
\part{Introduction}
-\section{Nouveau dans la v1.4}
-\subsection{Primitive \texttt{\textbackslash expanded}}
-\fbox{\vbox{\hsize\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax\textbf{Important} : à partir de la version 1.41, \CF nécessite un moteur \TeX{} fournissant la primitive \texttt{\string\expanded}. Si ce n'est pas le cas, un message d'erreur sera émis et la version 1.4 sera chargée (dernière version fonctionnant sans la primitive \texttt{\string\expanded}) : il est vivement conseillé de mettre à jour sa distribution \LaTeX{} afin de profiter d'un moteur \TeX{} récent permettant l'utilisation de cette nouvelle primitive.}}\medbreak
-
-\subsection{Position et rotation des délimiteurs}
-La nouvelle clé \CFkey{h align} pour les délimiteurs permet, lorsqu'elle est mise à \CFval{false} de ne plus aligner automatiquement les délimiteurs horizontalement. Lorsque les délimiteurs ne sont plus sur une même horizontale, on peut les faire pivoter automatiquement en rendant la clé \CFkey{auto rotate} égale à \CFval{true}. On peut passer outre ce réglage automatique et choisir l'angle de rotation avec la clé \CFkey{rotate}. Voir page~\pageref{polymerdelim}.
-
-\subsection{Caractère privé}
-Dans le code de \CF, le caractère utilisé dans le nom des macros privées est «\verb|_|» (underscore) et non plus «\verb|@|» (arobe) : le préfixe des macros privées de \CF est «\verb|\CF_|». La majorité des utilisateurs de \CF ne doit pas devrait pas être concernée par ce changement, mais l'élaboration ou la maintenance de codes spécifiques tel que ceux présentés à la section «Créer ses propres flèches» à la page~\pageref{definearrow} qui font appel à des macros privées doit conduire à tenir compte de ce changement de catcode; cela va donc nécessiter une \emph{mise à jour du nom des macros} pour ceux qui ont eu recours aux macros privées de \CF. Pour rendre possible l'utilisation de «\verb|_|» dans les noms des macros, on doit exécuter l'ordre «\verb|\catcode`\_=11|» et pour revenir à un l'état normal «\verb|\catcode`\_=8|».
-
-\subsection{Caractère \#}
-Tous ceux qui programment en \TeX{} connaissent les extrêmes précautions qui doivent être prises avant d'utiliser le caractère «\verb|#|». Ce caractère est autorisé dans le code représentant la molécule, mais pour des raisons de fonctionnement interne à \TeX, il sera doublé si la commande \verb|\chemfig| se trouve dans l'argument d'une macro (comme \verb|\fbox| dans l'exemple ci-dessous). Pour éviter ce doublement, on peut écrire \verb|\#| ou avoir recours à la macro \verb|\CFhash| :
-
-\exemple{Caractère \#}/\setchemfig{atom sep=5em}\fboxsep=1pt
-1) \chemfig{A#-B_#-C^#}\par
-2) \fbox{\chemfig{A#-B_#-C^#}}\par
-3) \fbox{\chemfig{A\#-B_\#-C^\#}}\par
-4) \fbox{\chemfig{A\CFhash-B_\CFhash-C^\CFhash}}/
-
-Pour la macro \verb|\definesubmol|, le caractère \verb|#| est également autorisé, mais son emploi est plus complexe car il recouvre plusieurs cas qui sont examinés à la page~\pageref{definesubmol}.
-
-\subsection{Anciennes macros, nouvelle syntaxe}
-Les macros auparavant utilisées pour régler les paramètres de \CF sont abandonnées, ne sont plus définies et donc, \emph{produiront à une erreur de compilation} si elles sont exécutées:
-\begin{center}
- \begin{tabular}{*3l}
- \verb-\setcrambond-&\verb-\setatomsep-&\verb-\enablefixedbondlength-\\
- \verb-\disablefixedbondlength-&\verb-\setbondoffset-&\verb-\setdoublesep-\\
- \verb-\setangleincrement-&\verb-\setnodestyle-&\verb-\setbondstyle-\\
- \verb-\setlewis-&\verb-\setlewisdist-&\verb-\setstacksep-\\
- \verb-\setcompoundstyle-&\verb-\setarrowdefault-&\verb-\setandsign-\\
- \verb-\setarrowoffset-&\verb-\setcompoundsep-&\verb-\setarrowlabelsep-\\
- \verb-\enablebondjoin-&\verb-\disablebondjoin-&\verb-\schemedebug-
- \end{tabular}
-\end{center}
-Désormais, pour régler les paramètres de \CF on a le choix entre :
+\section{Nouveau dans la v1.5}
+\subsection{La macro \texttt{\protect\textbackslash charge}}
+La version 1.5 met en place les macros \verb|\charge| et \verb|\Charge| (voir page~\pageref{charge}) dont le but est de placer atour d'un atome des éléments arbitraires avec une grande précision. Ces macros remplaceront, à terme, les macros \verb|\lewis| et \verb|\Lewis| car elles sont bien plus puissantes et configurables, même si plus verbeuses quant à leur emploi. Il est donc important de noter que les macros \verb|\lewis| et \verb|\Lewis| \textcolor{red}{\bfseries ne sont plus documentées et seront supprimées de l'extension \CF}.
+
+\exemple{La macro \string\charge}/Charges simples autour de A :
+\Charge{0=\:,
+ 0:3pt[anchor=180]=$\color{red}\scriptstyle\delta^+$,
+ 120={\"["width=2pt,"style={draw=green,fill=gray}]},
+ 210=\|
+ }{A}
+\par
+Charges complexes autour de "B" :
+\Charge{%
+ 30:10pt={\chemfig[atom sep=6pt,double bond sep=1.5pt]{[:20]*6(=-=-=-)}},
+ 120:5pt[scale=0.4,rotate=30,anchor=center]=\chemfig{CH_2=CH_2},
+ -45[anchor=west,rotate=\chargeangle]={%
+ \begin{tikzpicture}
+ \node[anchor=mid west](a){$\oplus$};\draw[-stealth](a)--(-.5,0);
+ \end{tikzpicture}}%
+ }{B}/
+
+\subsection{Liaisons jointives}
+À partir de la version 1.5, deux liaisons sont jointives si l'atome qui se trouve entre-elles a toutes ses dimensions nulles (c'est-à-dire sa largeur, sa hauteur et sa profondeur au sens de \TeX). Auparavant, deux liaisons étaient jointives si l'atome était \emph{vide}, ce qui était plus restrictif.
+
+Conjointement à l'utilisation de la macro \verb|\charge|, cette nouvelle fonctionnalité rend possible de placer des charges dans une chaine sans avoir recours à des liaisons invisibles.
+\exemple{Liaisons jointives}/\chemfig{[:30]-\charge{90=\:}{}
+-[:-30]\charge{-90=\"}{}-\charge{90:2pt=$\delta^+$}{}-[:-30]}/
+
+\subsection{Mise à jour du manuel}
+Des explications plus détaillées sont données sur:
\begin{itemize}
- \item la macro \Verb|\setchemfig{<clés>=<valeurs>}| règle les paramètres selon la méthode de clés/valeurs pour le reste du document;
- \item la macro \Verb|\chemfig[<clés>=<valeurs>]| reçoit dans son argument optionnel les paramètres valables uniquement pour cette molécule;
- \item la macro \verb|\resetchemfig| restaure les paramètres à leurs valeurs par défaut.
+ \item le rôle que joue le premier atome rencontré dans le placement de la molécule dans son ensemble (page~\pageref{premieratome1} et \pageref{premieratome});
+ \item la façon dont \CF place les atomes dans un groupe d'atome (page~\pageref{placementatomes});
+ \item comment une liaison joint deux atomes (page~\pageref{liaisonentreatomes}).
\end{itemize}
-La liste des paramètres et leurs valeurs par défaut est présentée à la page~\pageref{listeparametres}.
-
-La syntaxe étoilée \verb|\chemfig*| n'est plus autorisée. Pour spécifier une longueur constante de liaisons, il faut utiliser la clé \CFkey{fixed length} et la positionner à \CFval{true}, voir page~\pageref{longueur.liaison}.
-
-\subsection{Les macros \texttt{\textbackslash lewis} et \texttt{\textbackslash Lewis}}
-Ces deux macros subissent également un léger changement de syntaxe. Leur argument optionnel entre crochets n'est plus destiné à recevoir le coefficient d'espacement diagonal, mais des \Verb|<clés>=<valeurs>| afin que les paramètres puissent être spécifiés individuellement pour chaque appel de la macro \verb|\lewix| ou \verb|\Lewis|. Voir page~\pageref{lewis}.
-
\section{Présentation}
Pour charger \CF, il faut écrire :
\begin{itemize}
@@ -359,8 +348,6 @@ Le \Verb|<code molécule>| contient les instructions pour tracer la molécule se
\item des macros.
\end{itemize}
-Dans tous les cas, \CF placera \emph{sur la ligne de base courante le premier atome rencontré}, qu'il soit vide ou pas. Dans les exemples figurant dans ce document, la ligne de base est tracée en gris clair.
-
\section{Groupes d'atomes}
Intrinsèquement, le dessin d'une molécule chimique consiste à relier par des traits de différents types des groupes d'atomes. Ainsi, dans la molécule \chemfig{O=O}, il y a 2 groupes d'atomes, chacun constitué d'un seul atome «O».
@@ -375,6 +362,13 @@ Par conséquent, le premier groupe d'atomes «$\mathrm{H_3C}$» est découpé en
Un espace est ignoré s'il est au début d'un groupe d'atomes.
+\section{Rôle du premier atome}\label{premieratome1}
+Il est important de comprendre que le placement de la molécule entière dépend du premier atome placé, c'est-à-dire le premier atome du premier groupement d'atomes. Pour ce premier atome, l'ancre d'attache de \TIKZ «\verb|base east|» est placé sur la ligne de base de la ligne en cours (représentée en gris dans les exemples de ce manuel).
+
+\exemple{Influence du premier atome}/\chemfig{A-B}\qquad
+\chemfig{-B}\qquad
+\chemfig{A^1-B}/
+
\section{Différents types de liaisons}
Pour \CF, les liaisons entre 2 atomes sont de 9 types, correspondant aux caractères \boxedfalseverb-, \boxedfalseverb=, \boxedfalseverb~, \boxedfalseverb>, \boxedfalseverb<, \boxedfalseverb{>:}, \boxedfalseverb{<:}, \boxedfalseverb{>|} et \boxedfalseverb{<|} :\label{types.liaisons}
\begin{center}
@@ -824,7 +818,7 @@ Pour fixer les idées prenons l'exemple d'un effet mésomère impliquant une dou
Les macros \verb|\schemestart|, \verb|\schemestop|, \verb|\arrow| et \verb|\+| sont exposées au chapitre \ref{schemas}, à partir de la page \pageref{schemas}.
\exemple{Effet mésomère 1}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[::-60]\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[::-60]\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -840,7 +834,7 @@ Pour relier les nœuds «db» et «a1», nous avons utilisé la syntaxe suivante
Le style de flèche par défaut dans \verb|\chemmove| est «CF». Dans cet exemple nous demandons une flèche (\verb/[->]/) et nous utilisons 2 points de contrôle\footnote{Pour connaître toutes les façons de relier deux nœuds avec \TIKZ, lire la documentation de ce package.}. Ceux-ci seront situés en coordonnées polaires à 100\degres{} et 5~mm de «db» pour le premier et à 145\degres{} et 5~mm de «a1» pour le second. Il ne faut pas être effrayé par cette syntaxe qui peut paraître compliquée en première lecture car son utilisation se réduit dans la plupart des cas à un simple copier-coller dans lequel on modifie juste le nom des nœuds et les coordonnées polaires des points de contrôle. Ce que nous allons vérifier tout de suite avec l'ajout d'une flèche partant du doublet non liant (nœud «dnl») vers la liaison simple (nœud «sb»).
\exemple{Effet mésomère 2}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -851,7 +845,7 @@ Le style de flèche par défaut dans \verb|\chemmove| est «CF». Dans cet exemp
Pour notre nouvelle flèche nous avons fixé les points de contrôle comme suit : un angle de 90\degres{} à 4~mm de «dnl» et un angle de 45\degres{} à 4~mm de «sb». Mais nous ne sommes pas entièrement satisfaits car nous aimerions que la flèche ne touche pas le trait représentant le doublet non liant. Pour cela nous allons ajouter quelques options à notre flèche.
\exemple{Effet mésomère 3}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -865,7 +859,7 @@ L'option «\verb|shorten <=3pt|» indique que le point de départ de la flèche
On peut utiliser toute la puissance des instructions de \TIKZ pour modifier le dessin de la flèche. Ici, nous changeons l'extrémité de la flèche partant de la double liaison en «\verb|-stealth|», nous la dessinons en pointillés d'épaisseur fine et rouge. Nous rajoutons également la lettre $\pi$ au dessus de la flèche en son milieu :
\exemple{Effet mésomère 4}/\schemestart
- \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\lewis{2,X}}
+ \chemfig{@{a1}=_[@{db}::30]-[@{sb}::-60]@{dnl}\charge{90=\|}{X}}
\arrow{<->}
\chemfig{\chemabove{\vphantom{X}}{\ominus}-[::30]=_[::-60]
\chemabove{X}{\scriptstyle\oplus}}
@@ -878,25 +872,25 @@ On peut utiliser toute la puissance des instructions de \TIKZ pour modifier le d
(dnl).. controls +(90:4mm) and +(45:4mm).. (sb);}/
Dans l'exemple suivant nous allons voir comment indiquer la position de l'ancre de départ ou d'arrivée. Si nous écrivons
-\exemple{Ancre de départ et d'arrivée 1}/\chemfig{@{x1}\lewis{1:,X}}
+\exemple{Ancre de départ et d'arrivée 1}/\chemfig{@{x1}\charge{45=\:}{X}}
\hspace{2cm}
-\chemfig{@{x2}\lewis{2|,X}}
+\chemfig{@{x2}\charge{90=\|}{X}}
\chemmove{
\draw[shorten >=4pt](x1).. controls +(90:1cm) and +(90:1cm).. (x2);}/
Nous constatons que l'ancre de départ de notre flèche ne pointe pas correctement sur nos électrons. La flèche part du milieu du bord supérieur du nœud. En effet, nous avons choisi un angle de départ de 90\degres{} et \TIKZ fait donc partir la flèche de l’ancre «x1.90» qui correspond à l’intersection de la demi droite partant du centre du nœud «x1» et faisant un angle avec l’horizontale de 90\degres{} avec le bord du nœud qui est un rectangle. Pour obtenir le départ de la flèche d’où nous voulons, nous devons spécifier sa position. Après quelques tâtonnements, c’est «x1.57» :
-\exemple{Ancres de départ et d'arrivée 2}/\chemfig{@{x1}\lewis{1:,X}}
+\exemple{Ancres de départ et d'arrivée 2}/\chemfig{@{x1}\charge{45=\:}{X}}
\hspace{2cm}
-\chemfig{@{x2}\lewis{2|,X}}
+\chemfig{@{x2}\charge{90=\|}{X}}
\chemmove[shorten <=4pt,shorten >=4pt]{
- \draw(x1.57).. controls +(60:1cm) and +(120:1cm).. (x2);}/
+ \draw(x1.57).. controls +(60:1cm) and +(120:1cm).. (x2.90);}/
Dans certains cas il sera plus facile d'utiliser les coordonnées cartésiennes pour les points de contrôle. Ici, nous n'utilisons qu'un seul point de contrôle situé à 1~cm horizontalement de «x1» et 1,5~cm verticalement :
-\exemple{Un seul point de contrôle}/\chemfig{@{x1}\lewis{1:,X}}
+\exemple{Un seul point de contrôle}/\chemfig{@{x1}\charge{45=\:}{X}}
\hspace{2cm}
-\chemfig{@{x2}\lewis{2|,X}}
+\chemfig{@{x2}\charge{90=\|}{X}}
\chemmove[shorten <=4pt,shorten >=4pt]{
- \draw(x1.57).. controls +(1cm,1.5cm).. (x2);}/
+ \draw(x1.57).. controls +(1cm,.8cm).. (x2.90);}/
Dans ce cas nous plaçons un point de contrôle à 1~cm horizontalement et 2~cm verticalement de «x1». Tous les objets graphiques dessinées par l’intermédiaire de la commande \verb|\chemmove| sont faits en surimpression et ne seront pas comptés dans les boîtes englobantes. On peut le constater sur l’exemple précédent.
@@ -904,18 +898,18 @@ Dans ce cas nous plaçons un point de contrôle à 1~cm horizontalement et 2~cm
Grâce à l'option \verb|remember picture| qui est passée à tous les environnements «tikzpicture» nous pouvons facilement dessiner les flèches indiquant les mécanismes réactionnels. Prenons comme exemple la première étape de la réaction d'estérification.
\exemple*{Estérification: étape 1}/\setchemfig{atom sep=7mm}
\schemestart
- \chemfig{R-@{dnl}\lewis{26,O}-H}
+ \chemfig{R-@{dnl}\charge{90=\|,-90=\|}{O}-H}
\+
\chemfig{R-@{atoc}C([6]-OH)=[@{db}]O}
\arrow(.mid east--){<->[\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}]}
\schemestop
\chemmove[shorten <=2pt]{
- \draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
- \draw[shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}/
+ \draw(dnl)..controls +(90:1cm)and+(north:1cm)..(atoc);
+ \draw[shorten >=6pt](db)..controls +(north:5mm)and+(100:1cm)..(atoh);}/
L'utilisation de la commande \Verb|\chemabove{<code>}{<matériel>}| ne change pas les dimensions de la boîte englobante du \Verb|<code>|. Pour cette raison on peut rencontrer certaines difficultés pour pointer sur le matériel indiquant la charge portée ($\oplus$ ou $\ominus$). Dans l'exemple ci-dessus la solution est de créer un point de contrôle avec un angle de 110\degres{} à 1~cm de «atoh» et de raccourcir la flèche de 6pt. Dans l'exemple suivant, seconde étape de la réaction d'estérification, on peut voir que la flèche peut prendre des formes plus compliquées sans forcément surcharger le code.
\exemple{Estérification: étape 2}/\setchemfig{atom sep=7mm}
-\chemfig{R-O-C(-[2]R)(-[6]OH)-@{dnl}\lewis{26,O}H}\hspace{1cm}
+\chemfig{R-O-C(-[2]R)(-[6]OH)-@{dnl}\charge{90=\|,-90=\|}{O}H}\hspace{1cm}
\chemfig{@{atoh}\chemabove{H}{\scriptstyle\oplus}}
\chemmove{
\draw[shorten <=2pt, shorten >=7pt]
@@ -1037,65 +1031,7 @@ Avec \CFkey{node style}, on peut choisir la couleur des nœud dessinés par \TIK
\setchemfig{atom style={rotate=20}}\chemfig{A-B-[2]C}\par\medskip
\setchemfig{atom style={scale=0.5}}\chemfig{A-B-[2]C}/
-\section{Alignement vertical}\label{alignement.vertical}
-Dans certains cas de molécules semi développées dont les liaisons sont horizontales, le placement des groupes d'atomes est incorrect.
-
-Un examen attentif de l'exemple suivant révèle que les groupes d'atomes ne sont pas correctement alignés sur la \falseverb{ligne de base} :
-\exemple*{Placement horizontal}/\Huge\setchemfig{atom sep=2em}
-\chemfig{A^1-B-C-D}\qquad
-\chemfig{E_1-F-G-H}/
-
-Il est étonnant que le deuxième atome soit correctement aligné alors que les deux derniers subissent un décalage vertical qui semblent être la conséquence de la hauteur différente de la boîte englobant le premier atome «\verb-A^1-» et «\verb-E_1-».
-
-Pour comprendre ce phénomène, il faut examiner comment \CF place les groupes d'atomes les uns par rapport aux autres. Pour cela, limitons nous aux liaisons horizontales ce qui permet d'employer un vocabulaire particulier, mais l'algorithme est le même pour les autres inclinaisons. En fait, une liaison horizontale part du milieu du côté droit de la boîte englobant l'atome d'où part cette liaison. L'atome d'arrivée est positionné de telle sorte que le milieu du côté gauche de sa boîte englobante soit à l'extrémité de la liaison. Il en découle que le placement vertical de l'atome d'arrivée dépend de l'encombrement vertical de l'atome de départ. Pour limiter ce phénomène, \CF ajoute devant chaque atome d'arrivée le \falseverb{\vphantom} de l'atome de départ, mais sans l'inclure dans le contenu de cet atome d'arrivée : ce \falseverb{\vphantom} n'est donc pas destiné à se répercuter sur les atomes suivants. Les atomes qui restent dans chaque groupe sont alignés de telle sorte que leur ligne de base coïncide avec la ligne de base de l'atome précédent.
-
-On peut donc mieux expliquer l'alignement défectueux constaté. Les atomes «\verb-B-» et «\verb-F-» sont correctement alignés car ils tiennent compte de la hauteur des atomes qui les précèdent grâce à leur \falseverb\vphantom. Pour les atomes «\verb-C-» et «\verb-F-», la hauteur des atomes précédents est prise en compte, mais celle des atomes «\verb-A^1-» et «\verb-E_1-» est oubliée ! Il en résulte que, dépendant de l'altitude de ces liaisons, ces atomes sont un peu trop haut ou trop bas.
-
-On peut mettre en évidence ce phénomène en rendant visible les boîtes englobantes des atomes où l'on voit clairement que les atomes «\verb-B-» et «\verb-F-» ont des boîtes englobantes dont la hauteur qui tient compte des hauteurs des atomes précédents :
-\exemple*{Placement horizontal et boîtes englobantes}/\Huge\setchemfig{atom sep=2em}
-\fboxsep=0pt
-\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm#1}}}
-\chemfig{A^1-B-C-D}\qquad
-\chemfig{E_1-F-G-H}/
-
-Aucune solution automatique n'étant satisfaisante, on peut contourner manuellement ce problème en plaçant \emph{à l'intérieur} du troisième atome un \falseverb{\vphantom} ayant la même hauteur que le premier pour que cette hauteur se répercute sur les suivants :
-\exemple*{Contournement du placement vertical}/\Huge\setchemfig{atom sep=2em}
-\chemfig{A^1-B-{\vphantom{A^1}C}-D}\qquad
-\chemfig{E_1-F-{\vphantom{E_1}G}-H}/
-
-\label{chemskipalign}Il est possible pour n'importe quel groupe d'atomes de désactiver momentanément le mécanisme d'ajustement d'alignement et neutraliser le \falseverb\vphantom. Il suffit pour cela de placer dans le groupe d'atomes la commande \falseverb{\chemskipalign} : l'alignement reprendra au groupe d'atomes suivant comme si le groupe d'atome contenant \falseverb{\chemskipalign} n'avait pas existé. On peut se rendre compte sur l'exemple suivant de l'effet de cette instruction qui a pour effet de placer le point de référence de la boîte contenant le premier atome au niveau de la liaison qui arrive de gauche. Les boîtes englobant les atomes ont été dessinées à la seconde ligne :
-
-\exemple[60]{Désactivation du mécanisme d'alignement}/\large
-\chemfig{A-.-B}\quad
-\chemfig{A-\chemskipalign.-B}\par\bigskip
-\fboxsep=0pt
-\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
-\chemfig{A-.-B}\quad
-\chemfig{A-\chemskipalign.-B}/
-
-Cette commande est à utiliser avec précaution car l'alignement des atomes dans le groupe d'atomes à venir peut être perturbé. En règle générale, tout se passera bien si le groupe d'atomes dans lequel figure \falseverb{\chemskipalign} contient \emph{un seul atome} dont la hauteur et la profondeur sont \emph{inférieures} à celles de l'atome qui précède et qui suit, et si les atomes qui précèdent et suivent ont leur profondeur et hauteur égales. Voici par exemple la mésaventure qui arrive lorsque le groupe d'atomes contient 2 atomes, ici «\verb-\chemskipalign.-» et «\verb-B-» :
-\exemple{Conséquence de la commande \string\chemskipalign}/\large
-\fboxsep=0pt
-\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
-\chemfig{A-\chemskipalign.B-C}/
-
-Cette fonctionnalité peut parfois s'avérer utile. Mettons que l'on veuille dessiner la molécule
-\begin{center}
- \catcode`;12
- \def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}%
- \def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}%
- \chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}%
-\end{center}
-On peut définir les commandes qui vont dessiner les disques vides et pleins avec \TIKZ. Afin que ces disques soit à la bonne hauteur, c'est-à-dire à la hauteur de la liaison qui leur arrive dessus, on se servira de la commande \falseverb{\chemskipalign}. Pour que, à la deuxième ligne de l'exemple ci dessous, les liaisons «collent» aux disques, nous utiliserons la possibilité de modifier le retrait d'une liaison avec le caractère «\verb-#-»\, fonctionnalité qui a été vue à la page~\pageref{modif.retrait}. Pour les utilisateurs ayant chargé le package babel avec l'option «frenchb», il est nécessaire de désactiver le caractère actif «\verb-;-» qui marque la fin d'une instruction \TIKZ et qui sinon ne serait pas reconnu en tant que tel. C'est pourquoi on se place dans un groupe où l'on écrit l'instruction \verb-\shorthandoff{;}- :
-\begingroup\catcode`;12 \catcode`#12
-\exemple{Utilisation de \string\chemskipalign\ et #}/\begingroup
-\shorthandoff{;}
-\def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}
-\def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}
-\chemfig{A-\emptydisk-\fulldisk-B}\par
-\chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}
-\endgroup/\endgroup
-
+definesubmol
\section{Liaisons doubles déportées}
Toutes les liaisons doubles sont composées de 2 traits et ces traits sont tracés de part et d'autre de la ligne théorique que prendrait la liaison simple. Il est possible de déporter cette liaison double de telle sorte qu'un des deux traits soit sur cette ligne théorique. L'autre trait étant alors au dessus ou au dessous de la liaison. En fait, il est plus rigoureux de dire «à gauche» ou «à droite» de la ligne théorique lorsqu'on parcourt la liaison dans le sens du tracé.
@@ -1200,89 +1136,228 @@ En dehors des cas où le caractère «\verb|#|» est suivi d'un chiffre compris
Dans cet exemple, seuls \verb|#1| et \verb|#2| sont compris comme les arguments de la sous molécule \verb|\X|. Les autres «\verb|#|» sont affichés tels quels dans la molécule (cas de \verb|#3| et \verb|#4|) ou compris comme le caractère spécifiant le réglage fin du retrait des liaisons.
-\section{Décorations}
-\subsection{Formule de Lewis}\label{lewis}
-La macro \falseverb{\lewis} permet de placer des paires d'électrons, des électrons ou une lacune. On utilise cette syntaxe :
+\section{Placement des atomes}
+\subsection{Premier atome}\label{premieratome}
+Comme expliqué à la page~\pageref{premieratome1}, le premier atome rencontré (qu'il soit vide ou pas) est celui qui est placé sur la ligne de base, représentée en gris sur les exemples de ce manuel. Le choix de ce premier atome conditionne donc le placement de tous les autres relativement à lui et influe souvent sur le placement de la molécule toute entière.
+
+\exemple{Premier atome}/\chemfig{H-[7]C(-[5]H)=C(-[1]H)-[7]H}\qquad
+\chemfig{C(-[3]H)(-[5]H)=C(-[1]H)-[7]H}/
+
+\subsection{Groupe d'atomes}\label{placementatomes}
+Dans un groupe d'atomes, les atomes sont placés les uns après les autres, dans un ordre bien établi:
+\begin{itemize}
+ \item le premier qui est placé (que l'on va appeler «atome référence») est celui sur lequel arrive la liaison; dans le cas du début de la molécule, c'est l'atome de gauche est l'atome référence;
+ \item les atomes se trouvant à droite de l'atome référence sont ensuite placés de gauche à droite;
+ \item les atomes se trouvant à gauche de l'atome de référence sont finalement placés de droite à gauche.
+\end{itemize}
+
+Dans le groupe d'atomes ainsi formé, les lignes de base de chaque atome sont sur \emph{une même horizontale}, autrement dit, les atomes sont tous alignés sur une même ligne horizontale.
+
+Dans l'exemple ci-dessous dont le code serait «\verb|\chemfig{A[:-60,,,3]BCDEF}|» l'atome de référence du 2\ieme{} groupe d'atomes est «D» car on demande que la liaison arrive sur le 3\ieme{} atome. Sous chaque atome de ce groupe figure le numéro d'ordre dans lequel l'atome est affiché:
\begin{center}
- \Verb|\lewis{<n1><n2>...<ni>,<atome>}|
+ \def\0#1#2{%
+ \vtop{%
+ \def\tempprintatom##1{\ensuremath{\mathrm{##1}}}%
+ \setbox0\hbox{\tempprintatom{#1}}%
+ \def\tempvrule{\vrule height.33ex width.4pt}%
+ \offinterlineskip\copy0 \kern2pt
+ \hbox to\wd0{\kern.5pt \tempvrule\hrulefill\tempvrule\kern.5pt}\kern2pt
+ \hbox to\wd0{\hss$\scriptstyle#2$\hss}}}
+ \chemfig{A-[:-60,,,3]\0{B}{5}|\0{C}{4}|\0{D}{1}|\0{E}{2}|\0{F}{3}}
\end{center}
-où les \Verb-<n1>-\ldots\Verb-<ni>- représentent les positions (en multiples de 45\degres) désirées autour de l'\Verb-<atome>-. Ces entiers doivent être compris entre 0 et 7.
-Cette commande peut également être utilisée en dehors de l'argument de \verb-\chemfig- :
-\exemple{La macro \string\lewis}|\lewis{0246,A}\par\medskip
-\lewis{1357,B}\par\medskip
-\chemfig{H-\lewis{26,O}-S(=[2]\lewis{13,O})
-(=[6]\lewis{57,O})-\lewis{26,O}-H}|
+\subsection{Liaisons entre atomes}\label{liaisonentreatomes}
+Une liaison partant d'un atome passerait, si on la prolongeait, par le centre de sa boite englobante. L'atome d'arrivée est placé au bout de la liaison de telle sorte que le centre de sa boite englobante soit dans le prolongement de la liaison. Par conséquent, une liaison entre deux atomes passe, par prolongement, par les centres de leurs boites englobantes, comme l'illustre cet exemple:
+\begin{center}
+\fboxsep=.25pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\setchemfig{chemfig style={line width=1pt}}
+\Large
+\chemfig{A@ABC-[:65,,2,3]DE@BFG}
+\chemmove{%
+ \draw[red,fill=red] (A.center)circle(.2ex);
+ \draw[blue,fill=blue](B.center)circle(.2ex);
+ \draw[gray,-,dashed,shorten <=-1.5em, shorten >=-1.5em](A.center)--(B.center);
+}
+\end{center}
+Ce mécanisme peut créer des défauts d'alignements entre groupes d'atomes, particulièrement visibles lorsque les liaisons sont horizontales. Tout se passe bien lorsque les atomes ont les mêmes dimensions verticales; en revanche, il suffit qu'un atome de départ soit haut (avec exposant) ou profond (avec indice) et que l'atome d'arrivée ait une dimension verticale différente pour que l'alignement soit cassé.
+\exemple*{Placement horizontal}/\Huge\setchemfig{atom sep=2em}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
+
+Il est étonnant que le deuxième atome soit correctement aligné alors que les deux derniers subissent un décalage vertical. L'explication tient au fait que \CF ajoute devant chaque atome d'arrivée le \falseverb{\vphantom} de l'atome de départ, mais sans l'inclure dans le contenu de cet atome d'arrivée : ce \falseverb{\vphantom} n'est donc pas destiné à se répercuter sur les atomes suivants. On peut mettre en évidence ce phénomène en rendant visible les boîtes englobantes des atomes où l'on voit clairement que les atomes «\verb-B-» et «\verb-F-» ont des boîtes englobantes dont la hauteur qui tient compte des hauteurs des atomes précédents :
+\exemple*{Placement horizontal et boîtes englobantes}/\Huge\setchemfig{atom sep=2em}
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm#1}}}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
-Si au lieu d'une paire représentée par une ligne, on souhaite deux points, on fait suivre l'entier par «\verb-:-». Si on veut dessiner un électron, il suffit de le faire suivre par un «\verb-.-». Pour dessiner une lacune, on le fait suivre d'un «\verb-|-» :
-\exemple{Décorations de Lewis}*\lewis{0:2:4:6:,C}\qquad\lewis{1:3:5:7:,C}\par\bigskip
-\lewis{0.2.4.6.,C}\qquad\lewis{1.3.5.7.,C}\par\bigskip
-\lewis{0:2.4|,X}\par\bigskip
-Ion oxonuim : \chemfig{H-\lewis{5|7,O^+}(-[2]H)-H}*
+Aucune solution automatique n'étant satisfaisante, on peut contourner manuellement ce problème en créant un atome de fin étant un «strut» égal à \verb|\vphantom{X}|: ainsi, l'atome de départ a une hauteur «normale» et aucun décalage ne se répercutera sur le groupe d'atomes suivant. On utilise ici une sous-molécule pour plus de concision.
+\exemple*{Contournement du placement vertical}/\Huge\setchemfig{atom sep=2em}
+\definesubmol\I{\vphantom{X}}
+\chemfig{A^1|!\I-B-C-D}\qquad
+\chemfig{E_1|!\I-F-G-H}/
+L'inconvénient est que la première liaison est trop longue car l'atome de départ a désormais une dimension horizontale nulle.
+
+Si l'on est \emph{vraiment certain} de mesurer les conséquences que cela aura sur la molécule et surtout si elle s'y prête, on peut redéfinir \verb|\printatom| pour qu'il force la boite englobante de l'atome a avoir des dimensions verticales fixées; par exemple celle de «$\mathrm{X^1_1}$».
+\exemple*{Redéfinition de \string\printatom}/\Huge\setchemfig{atom sep=2em}
+\let\oldprintatom\printatom
+\renewcommand\printatom[1]{%
+ \begingroup
+ \setbox0\hbox{\oldprintatom{X^1_1}}%
+ \edef\tmp{\ht0=\the\ht0\relax\dp0=\the\dp0\box0 }%
+ \setbox0\hbox{\oldprintatom{#1}}%
+ \ifnum1\ifdim\ht0=0pt0\fi\ifdim\dp0=0pt0\fi\ifdim\wd0=0pt0\fi<1000
+ \tmp
+ \fi
+ \endgroup
+}
+\chemfig{A^1-B-C-D}\qquad
+\chemfig{E_1-F-G-H}/
-Toutes les décorations dessinées par l'intermédiaire de \falseverb{\lewis} ne sont pas comptabilisées dans la boîte englobante de l'atome. Les décorations sont faites en surimpression. On en voit une conséquence dans les deux exemples ci-dessus où les cadre ne semblent ne plus être correctement ajustés au dessin de la molécule qui dépasse légèrement vers le bas. Ceci sera parfois observable dans ce chapitre «Décorations» où l'on présente des commandes qui ne modifient pas la boîte englobante.
+\subsection{La macro \texttt{\char`\\chemskipalign}}\label{chemskipalign}
+Il est possible pour n'importe quel groupe d'atomes de désactiver momentanément le mécanisme d'ajustement d'alignement et neutraliser le \falseverb\vphantom. Il suffit pour cela de placer dans le groupe d'atomes la commande \falseverb{\chemskipalign} : l'alignement reprendra au groupe d'atomes suivant comme si le groupe d'atome contenant \falseverb{\chemskipalign} n'avait pas existé. On peut se rendre compte sur l'exemple suivant de l'effet de cette instruction qui a pour effet de placer le point de référence de la boîte contenant le premier atome au niveau de la liaison qui arrive de gauche. Les boîtes englobant les atomes ont été dessinées à la seconde ligne :
-\label{Lewis}Il faut noter que la macro \falseverb{\Lewis} fonctionne de la même façon que la macro \verb-\lewis- mais les décorations seront \emph{prises en compte} dans la boîte englobante.
+\exemple[60]{Désactivation du mécanisme d'alignement}/\large
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}\par\bigskip
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-.-B}\quad
+\chemfig{A-\chemskipalign.-B}/
-On peut le constater de façon plus évidente en traçant une \verb-\fbox- autour des atomes décorés :
-\exemple{Boîte englobante et macro \string\lewis}*\fboxsep0pt
-\fbox{\lewis{0.2.4.6.,A}}\quad\fbox{\Lewis{0.2.4.6.,A}}\par\medskip
-\fbox{\lewis{13,B}}\quad\fbox{\Lewis{13,B}}*
+Cette commande est à utiliser avec précaution car l'alignement des atomes dans le groupe d'atomes à venir peut être perturbé. En règle générale, tout se passera bien si le groupe d'atomes dans lequel figure \falseverb{\chemskipalign} contient \emph{un seul atome} dont la hauteur et la profondeur sont \emph{inférieures} à celles de l'atome qui précède et qui suit, et si les atomes qui précèdent et suivent ont leur profondeur et hauteur égales. Voici par exemple la mésaventure qui arrive lorsque le groupe d'atomes contient 2 atomes, ici «\verb-\chemskipalign.-» et «\verb-B-» :
+\exemple{Conséquence de la commande \string\chemskipalign}/\large
+\fboxsep=0pt
+\renewcommand\printatom[1]{\fbox{\ensuremath{\mathrm{#1}}}}
+\chemfig{A-\chemskipalign.B-C}/
-\label{setlewis}On peut régler plusieurs paramètres à l'aide des \chevrons{clés} suivantes :
-\begin{itemize}
- \item \CFkv{lewis | width}{dim} : est la largeur du rectangle représentant une lacune obtenue avec «|». Elle vaut \CFval{0.3ex} par défaut;
- \item \CFkv{lewis sep}{dim}: est la distance entre la boîte englobant l'atome et la décoration. Elle vaut \CFval{0.4ex} par défaut;
- \item \CFkv{lewis length}{dim} : est la longueur du trait représentant la paire d'électrons. Elle vaut \CFval{1.5ex} par défaut;
- \item \CFkv{lewis style}{code tikz} : est le code qui sera passé directement à \TIKZ. Ce code est \CFval{vide} par défaut;
- \item \CFkv{lewis dist}{dim} : est la distance entre les deux disques dessinés avec «\string:». Cette distance vaut \CFval{0.3em} par défaut;
- \item \CFkv{lewis radius}{dim} : est le rayon du disque d'une décoration de Lewis «.» ou «\string:». Il vaut \CFval{0.15ex} par défaut;
- \item \CFkv{lewis diag coeff}{décimal} : est le coefficient d'espacement diagonal qui vaut \CFval{1} par défaut.
-\end{itemize}
+Cette fonctionnalité peut parfois s'avérer utile. Supposons que l'on veuille dessiner la molécule
+\begin{center}
+ \catcode`;12
+ \def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}%
+ \def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}%
+ \chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}%
+\end{center}
+On peut définir les commandes qui vont dessiner les disques vides et pleins avec \TIKZ. Afin que ces disques soit à la bonne hauteur, c'est-à-dire à la hauteur de la liaison qui leur arrive dessus, on se servira de la commande \falseverb{\chemskipalign}. Pour que, à la deuxième ligne de l'exemple ci dessous, les liaisons «collent» aux disques, nous utiliserons la possibilité de modifier le retrait d'une liaison avec le caractère «\verb-#-»\, fonctionnalité qui a été vue à la page~\pageref{modif.retrait}.
+\begingroup\catcode`;12 \catcode`#12
+\exemple{Use of \string\chemskipalign\ and #}/\def\emptydisk{\chemskipalign\tikz\draw(0,0)circle(2pt);}
+\def\fulldisk{\chemskipalign\tikz\fill(0,0)circle(2pt);}
+\chemfig{A-\emptydisk-\fulldisk-B}\par
+\chemfig{A-#(,0pt)\emptydisk-#(0pt,0pt)\fulldisk-#(0pt)B}
+/\endgroup
-Il faut noter que les paramètres spécifiques aux décorations de Lewis peuvent être passées par
+\section{La macro \texttt{\char`\\charge}}\label{charge}
+\subsection{Présentation}
+La macro \verb|\charge|, qui requiert deux argument obligatoires, permet de disposer des éléments ---~que l'on appellera \chevrons{charges}~--- autour d'un \chevrons{atome}; sa syntaxe est la suivante
+\begin{center}
+ \Verb|\charge{[<paramètres généraux>]<position>[<code tikz>]=<charge>}{<atome>}|
+\end{center}
+où:
\begin{itemize}
- \item \Verb|\setchemfig{<clés>=<valeurs>}| afin qu'ils perdurent pour la suite du document;
- \item \Verb|\chemfig[<clés>=<valeurs>]| et dans ce cas, les réglages sont effectifs dans la molécule en cours;
- \item \Verb|\lewis[<clés>=<valeurs>]| pour que les paramètres soient spécifiques à cette exécution de la macro \verb|\lewis|.
+ \item l'\chevrons{atome} est à priori constitué d'une ou deux lettres, mais peut également être vide;
+ \item la \chevrons{charge} est un contenu \emph{arbitraire} qui sera placé autour de l'\chevrons{atome}. Peu de contraintes existent sur cette \chevrons{charge}, il peut donc être du texte (en mode math si besoin), voire même du code \TIKZ ou une molécule dessinée avec \verb|\chemfig|;
+ \item les \chevrons{paramètres généraux>} (optionnels) sont une liste de \chevrons{clés}${}={}$\chevrons{valeurs} spécifiant les options que doit satisfaire cette exécution de la macro \verb|\charge|. Ces \chevrons{clés} et \chevrons{valeurs} sont décrites plus bas;
+ \item la \chevrons{position} est de la forme \chevrons{angle}\verb-:-\chevrons{décalage}, mais il est possible de ne spécifier que l'\chevrons{angle}, auquel cas, le \chevrons{décalage} sera pris égal à \verb|0pt|;
+ \item le \chevrons{code tikz}, optionnel, contient les options passées à la macro \verb|\node| de \TIKZ, chargée de placer la \chevrons{charge}.
\end{itemize}
-La dernière façon de faire, certes permet des réglages individuels, mais doit être utilisée avec précaution lorsque la macro \verb|\lewis| se trouve dans l'argument de \verb|\chemfig|. En effet, les signes \verb-=- des \Verb|<clés>=<valeurs>| ne doivent pas être interprétés comme double liaison et pour ce faire, la macro \verb|\lewis|, son argument optionnel et obligatoire \emph{doivent} être entre accolades:
+\subsection{Paramètres}
+Les \chevrons{clés}${}={}$\chevrons{valeurs} disponibles dans les \chevrons{paramètres généraux} sont:
+
+\begin{longtable}{rlp{8.5cm}}\hline
+ \chevrons{clés} & \chevrons{valeurs} par défaut & Description\\\hline\endhead
+ \Chargeparam{debug}& Booléen qui lorsque \CFval{true}, dessine les contours du nœud recevant l'\chevrons{atome} (en vert), de celui où sont placées les \chevrons{charges} (en bleu) et ceux recevant les \chevrons{charges} (en rouge).\\
+ \Chargeparam{macro atom}&Macro qui prend comme argument l'\chevrons{atome}.\\
+ \Chargeparam{circle}&Booléen qui lorsque \CFval{true}, met l'\chevrons{atome} dans un nœud circulaire; dans le cas contraire, le nœud est rectangulaire.\\
+ \Chargeparam{macro charge}&Macro (\verb|\printatom| ou \verb|\ensuremath|, par exemple) qui prend comme argument chaque charge.\\
+ \Chargeparam{extra sep}&Augmentation de la taille du nœud (cercle ou rectangle) pour la position des charges: c'est la valeur passée à la clé \CFkey{inner sep} de \TIKZ.\\
+ \Chargeparam{overlay}&Booléen qui lorsque \CFval{true}, dessine les charges en «surimpression», c'est-à-dire hors de la boite englobante finale.\\
+ \Chargeparam{shortcuts}&Booléen qui lorsque \CFval{true}, active les raccourcis «\verb|\.|», «\verb|\:|», «\verb-\|- et «\verb-\"-» pour tracer des formules de Lewis.\\
+ \Chargeparam{lewisautorot}&Booléen qui lorsque \CFval{true}, effectue une rotation automatique de «\verb|\:|» et «\verb-\"-».\\
+ \Chargeparam{.radius}&Rayon du point utilisé pour tracer «\verb|\.|» et «\verb|\:|»\\
+ \Chargeparam{:sep}&Séparation entre les deux points de «\verb|\:|».\\
+ \Chargeparam{.style}&Style \TIKZ utilisé pour tracer les points «\verb|\.|» et «\verb|\:|».\\
+ \Chargeparam{"length}&Longueur du rectangle \verb-\"-. et de la ligne \verb-\|-\\
+ \Chargeparam{"width}&Largeur du rectangle \verb-\"-.\\
+ \Chargeparam{"style}&Style \TIKZ utilisé pour tracer le rectangle \verb-\"-.\\
+ \Chargeparam{|style}&Style \TIKZ utilisé pour tracer la ligne \verb-\|-.\\\hline
+\end{longtable}
+
+Il est possible de modifier certains de ces paramètres (ou tous) par l'exécution de la macro
+\begin{center}
+ \Verb|\setcharge{<clés>=<valeurs>}|
+\end{center}
+et réinitialiser tous les paramètres à leurs valeurs par défaut avec
+\begin{center}
+ \verb|\resetcharge|
+\end{center}
+La macro \verb|\charge| place les \chevrons{charges} hors de la boite englobante (sauf spécification contraire dans les \chevrons{paramètres}) alors que \verb|\Charge| les place \emph{dans} la boite englobante.
+\medbreak
+
+L'\chevrons{angle} est l'endroit sur la frontière du nœud où sera placée la \chevrons{charge}. Cet \chevrons{angle} peut-être exprimé en degrés ou bien être un ancre de frontière au sens de \TIKZ, comme «\verb|south east|». Le \chevrons{décalage} est une dimension au sens de \TeX{} et représente une longueur additionnelle entre la frontière du nœud contenant l'\chevrons{atome} et l'endroit où est placé la \chevrons{charge}. Sauf indication contraire dans le \chevrons{code tikz}, le placement concerne le \emph{centre} du nœud contenant la charge.
+\medbreak
+
+Dans les deux exemples qui suivent, \CFkey{debug} sera mise à \CFval{true} afin de mieux percevoir les changements induits par la modification des paramètres. De plus, la macro \verb|\Charge| sera utilisée afin que les boites englobantes tiennent compte des charges. On voit ici l'influence de la forme du nœud sur le placement des charges:
+\exemple{Exemple générique}|\setcharge{debug}
+Défaut puis cercle :
+\Charge{30=\:,120=$\ominus$,210=$\delta^+$}{Fe}\qquad
+\Charge{[circle]30=\:,120=$\ominus$,210=$\delta^+$}{Fe}|
-\exemple*{Argument optionnel de \string\lewis}/\chemfig{{\lewis[lewis style=red]{1:3:5:7:,X}}-{\lewis[lewis style=blue]{0:2:4:6:,Y}}}/
+Pour éloigner les charges $\ominus$ et $\delta^+$, on peut jouer sur le \chevrons{décalage} ou mieux, sur l'ancre d'attache : l'\chevrons{angle} où est placé la \chevrons{charge} est stocké dans la macro \verb|chargeangle|; il est donc judicieux de choisir l'ancre d'attache égal à \verb|180+\chargeangle|. Il est également possible de spécifier un nœud circulaire pour y placer la \chevrons{charge}.
-Voici quelques exemple de personnalisation:
+\exemple{Position fine}|\setcharge{debug}
+\Charge{30=\:,120:3pt=$\ominus$,210:5pt=$\delta^+$}{Fe}\qquad
+\Charge{[circle]30=\:,
+ 120[circle,anchor=180+\chargeangle]=$\ominus$,
+ 210[anchor=180+\chargeangle]=$\delta^+$}{Fe}|
-\exemple{Les paramètres de la macro \string\lewis}*\setchemfig{lewis sep=4pt,lewis length=1.5em,lewis style=red}
-\chemfig{A-\lewis{26,B}-C}\bigbreak
+Il est important de noter que les nœuds circulaires ont des encombrements \emph{parfois très différents} des nœuds «classiques» rectangulaires, notamment en ce qui concerne l'étendue horizontale et verticale. Il convient donc de rendre \CFval{true} la clé booléenne \CFkey{circle} en connaissance de cause.
-\chemfig[lewis style={line width=0.4pt}]{A-\lewis{2|,B}-C}\bigbreak
+\exemple{Nœuds circulaires}/\chemfig{\charge{90=\.}{N}H_3} : nœud rectangulaire\smallbreak
+\chemfig{\charge{[circle]90=\.}{N}H_3} : nœud circulaire/
-\Lewis{1:3:5:7:,X}\qquad\Lewis{0:2:4:6:,X}\bigbreak
+\subsection{Formules de Lewis}
+Lorsque le booléen \CFkey{shortcut} est \CFval{true}, les raccourcis «\verb|\.|», «\verb|\:|», «\verb-\|- et «\verb-\"-» sont disponibles pour tracer les formules de Lewis respectives {\setcharge{extra sep=0pt}«\Charge{0=\.}{\vphantom{A}}», «\Charge{0=\:}{\vphantom{A}}», «\Charge{0=\|}{\vphantom{A}}» et «\Charge{0=\"}{\vphantom{A}}»}. On peut à tout moment les désactiver avec la macro \verb|\disableshortcuts| et les ré-activer avec \verb|\enableshortcuts|.
-\Lewis[lewis dist=0.2em]{1:3:5:7:,X}\qquad
-\Lewis[lewis dist=0.2em]{0:2:4:6:,X}\bigbreak
+Lorsque le booléen \CFkey{shortcut} est \CFval{false} ou que les raccourcis ont été désactivés avec \verb|\disableshortcuts|, «\verb|\.|», «\verb|\:|», «\verb-\|- et «\verb-\"-» ne sont plus programmés pour tracer les formules de Lewis et il faut alors leur substituer les macros \verb|\chargedot|, \verb|\chargeddot|, \verb|\chargeline| et \verb|\chargerect|.
+\medbreak
-\Lewis[lewis dist=4pt,lewis radius=1.5pt]{1:3:5:7:,X}\qquad
-\Lewis[lewis dist=4pt,lewis radius=1.5pt]{0:2:4:6:,X}*
+La clé \CFkey{lewisautorot}, qui est \CFval{true} par défaut agit sur {\setcharge{extra sep=0pt}«\Charge{0=\:}{\vphantom{A}}», «\Charge{0=\|}{\vphantom{A}}» et «\Charge{0=\"}{\vphantom{A}}»} et les tourne de telle sorte que leur axe longitudinal soit perpendiculaire au vecteur d'inclinaison \chevrons{angle} avec l'horizontale.
-Un problème concernant les décorations de Lewis dans les directions obliques peut parfois survenir. Pour l'atome «O» dans l'exemple ci-dessous, il semble que la décoration en position 1 soit plus éloignée de l'atome que celle en position 4 :
-\exemple{Directions obliques}/\huge
-\Lewis{1|4|,O}/
-Or, il n'en en rien comme on peut le voir en traçant la boîte englobante de l'atome :
-\exemple{Illusion d'optique}/\huge
-\fboxsep0pt
-\def\printatom#1{\fbox{$\mathrm{#1}$}}
-\Lewis{1|4|,O}/
-\label{opt.lewis}L'impression de plus grand éloignement est dû au fait que les contours de la lettre «O» sont plus éloignés de ceux de la boîte englobante dans les coins, c'est-à-dire dans les directions impaires.
+\exemple{Autorot}/\Charge{60=\:,150=\"}{A} et
+\Charge{[lewisautorot=false]60=\:,150=\"}{A}/
-Pour rapprocher (ou éloigner) les décorations de Lewis dans les directions impaires, la \chevrons{clé} \CFkv{lewis diag coeff}{decimal} spécifie le coefficient qui vient multiplier le décalage entre la boite englobante et la décoration de Lewis. Pour la lettre «O», il semble que la valeur 0.5 soit satisfaisante pour ce coefficient :
-\exemple*{Argument optionnel de \string\lewis}/\huge
-\Lewis{1|4|,O}\quad \Lewis[lewis diag coeff=0.5]{1|4|,O}
+Les macros \verb|\lewis| et \verb|\Lewis| sont encore fonctionnelles, mais ne sont plus maintenues ni documentées et \textcolor{red}{\bfseries seront retirées dans une future version}; il est donc conseillé de leur préférer les macros \verb|\charge| et \verb|\Charge| qui donnent des résultats comparables comme on le voit ci-dessous, tout en étant bien plus puissantes et configurables:
-\Lewis{0:5:,O}\quad \Lewis[lewis diag coeff=2]{0:5:,O}\quad \Lewis[lewis diag coeff=0.5]{0:5:,O}/
+\exemple{Comparaison avec \string\Lewis}/\Lewis{1:3.5|,X}\quad\Lewis{0:2.3|,X}\qquad(avec \string\Lewis)\par
+\Charge{45=\:,135=\.,225=\"}{X}\quad\Charge{0=\:,90=\.,135=\"}{X}%
+\qquad(avec \string\Charge)/
-\subsection{Empilement de caractères}
+La personnalisation des formules de Lewis s'effectue via la macro \verb|\setcharge| ou par l'intermédiaire de l'argument optionnel de \verb|\charge| en agissant sur les clés \CFkey{.radius}, \CFkey{:sep}, \CFkey{.style}, \CFkey{|style}, \CFkey{"length}, \CFkey{"width} et \CFkey{"style}. Il est également possible de modifier ces clés pour chaque formule avec leur argument optionnel qui reçoit une liste de \chevrons{clés}${}={}$\chevrons{valeurs}.
+
+\exemple{Personnalisation}/\Charge{[.radius=1.5pt,.style={draw=gray}]
+ 45 =\.[{.style={draw=none,fill=red}}],
+ 135 =\.[{.style={draw=none,fill=blue}}],
+ -45 =\.[{.style={draw=none,fill=green}}],
+ -135=\.}{A}\quad
+\Charge{
+ 45 =\"[{"style={draw=red,fill=gray}}],
+ 135=\"[{"width=3pt,"style={line width=.8pt,draw=blue,fill=cyan}}]}{A}/
+
+\subsection{Intégration dans \CF}
+Une macro \verb|\charge| peut tenir lieu d'atome, tout comme c'était le cas avec \verb|\lewis|.
+
+\exemple{Charge dans \CF}*\chemfig{H-\chemabove{\lewis{5|7,O}}{\quad\scriptstyle+}(-[2]H)-H}
+\qquad
+\chemfig{H-\charge{45:1.5pt=$\scriptstyle+$,-45=\|,-135=\"}{O}(-[2]H)-H}*
+
+Cependant, \CF a été modifié pour que les liaisons soient \emph{jointives} lorsque l'encombrement d'un atome est nul, c'est-à-dire si sa largeur, hauteur et profondeur sont toutes nulles. Ce n'était le cas auparavant que si l'atome était vide. Cette nouvelle fonctionnalité permet de placer facilement des charges dans des chaines.
+
+\exemple{Charge dans chaine}/\chemfig{[:30]-\charge{90=\:}{}
+-[:-30]\charge{-90=\"}{}-\charge{90:2pt=$\delta^+$}{}-[:-30]}/
+
+\section{Empilement de caractères}
Les macros\label{chemabove}
\begin{center}
\Verb|\chemabove[<dim>]{<code>}{<matériel>}|
@@ -1298,11 +1373,18 @@ Ces commandes sont indépendantes de la macro \verb-\chemfig- et peuvent aussi b
On peut les utiliser notamment dans les cycles en prenant soin de mettre des accolades autour des lettres A, B, C et D pour éviter que \CF ne stoppe la lecture de l'atome sur ces lettres :
\exemple{Superposition dans les cycles}|\chemfig{*5(-\chembelow{A}{B}--\chemabove{C}{D}--)}|
-Elles sont parfois utiles pour placer des pseudo exposants tenant lieu de charge qui ne changent pas la boîte englobante de l'atome, de façon à ce que les liaisons n'en soient pas trop éloignées :
-\exemple{ion oxonium}*\chemfig{H-\chemabove{\lewis{5|7,O}}{\quad\scriptstyle+}(-[2]H)-H}*
-
Les commandes \falseverb{\Chemabove} et \falseverb{\Chembelow} fonctionnent de la même façon sauf que la boîte englobante \emph{tient compte} du \Verb-<matériel>- placé au dessus ou au dessous.
+Quelle différence y a-t-il entre \verb|\chemabove| et \verb|\charge| lorsqu'il s'agit de placer un contenu au-dessus ou au-dessous d'un autre?
+\exemple{\string\chemabove\space ou \string\charge}/\chemfig{*5(----\chemabove{A}{\oplus}-)}
+\chemfig{*5(----\charge{90[anchor=-90]=$\oplus$}{A}-)}/
+
+Par défaut, les deux macros donnent des résultats très proches. Des différences quant à leur utilisation existent cependant:
+\begin{itemize}
+ \item \verb|\chemabove| et \verb|\chemabelow| ne peuvent être utilisées que dans l'argument de \verb|\chemfig|, ce qui n'est pas le cas de \verb|\charge|;
+ \item la macro \verb|\charge| requiert l'extension \TIKZ alors que \verb|\chemabove| et \verb|\chemabelow| sont codées avec des primitives de bas niveau de \TeX{} et sont donc \emph{rapides} et indépendantes de toute extension.
+\end{itemize}
+
\section{Utilisation de {\protect\ttfamily\protect\textbackslash chemfig} dans l'environnement \protect\ttfamily tikzpicture}
Il est possible d'appeler la commande \falseverb{\chemfig} à l'intérieur d'un environnement {\ttfamily\falseverb{tikzpicture}} :
\exemple{\textbackslash chemfig dans tikzpicture}|\begin{tikzpicture}[help lines/.style={thin,draw=black!50}]
@@ -1313,23 +1395,6 @@ Il est possible d'appeler la commande \falseverb{\chemfig} à l'intérieur d'un
\node[draw,red,anchor=base] at(3,2){\chemfig{X>[2,,,,blue]Y}};
\end{tikzpicture}|
-\section{Au delà de la chimie}\label{style.noeuds}
-Intrinsèquement, \CF est un outil pour tracer des graphes, et cet outil a été programmé pour qu'il soit adapté à la chimie. Dans une certaine mesure, il est possible de détourner \CF de son usage premier pour tracer des organigrammes ou autres schémas se ramenant à des graphes.
-
-Chaque atome est contenu dans un nœud de \TIKZ. Par défaut, ces nœuds ont un «inner sep» et un «outer sep» égal à 0pt. Ils sont rectangulaires comme on l'a vu page~\pageref{longueur.liaison}. Ces valeurs par défaut peuvent être écrasées avec la \chevrons{clé} \CFkey{node style} dont l'argument est passé à \TIKZ et spécifie le style des nœuds contenant les atomes.
-
-Dans cet exemple, on spécifie simplement «draw,inner sep=2pt» ce qui a pour effet de tracer le contour des nœuds et espacer de 2pt leur contour de leur contenu. On spécifie également \CFkv{bond offset}{0pt} pour que les liaisons touchent les frontières des nœuds. L'espace interatome est allongé à 75pt. Enfin, la commande \falseverb{\printatom} est réduite à sa plus simple expression de façon à ne plus se placer en mode mathématique pour afficher les atomes et donc tenir compte des espaces :
-\exemple*{Un organigramme}/\setchemfig{node style={draw,inner sep=2pt},bond offset=0pt,atom sep=75pt}
-\renewcommand\printatom[1]{#1}
-\chemfig{Le chef-[6]Moi(-[4]Eux(-[6]Les autres)(-[7,2]Groupe 1))-Toi(-[:-120,0.5]Lui)(-[:-60,0.5]Elle)}/
-
-Voici un autre organigramme où les nœuds sont circulaires et colorés en bleu cyan :
-\exemple*{Schéma de famille}/\setchemfig{bond offset=0pt,atom sep=80pt,node style={draw,circle,fill=cyan,minimum size=25pt}}
-\renewcommand\printatom[1]{\textsf{#1}}
-\chemfig{Moi(-[:-50,1.2]Frère)(-[:-10]Frère(-[:15]Nièce)(-[:-35]Nièce))
-(-[:-155,0.8]Sœur-[:-80]Neveu)(-[:95,1.25]Père(-[:-25,0.8]Oncle)(-[:-65,0.8]Tante))
-(-[:135]Mère-[:-95,0.5]Oncle)}/
-
\section{Exemples commentés}\label{exemples.commentes}
Dans ce chapitre, plusieurs molécules seront dessinées en mettant en œuvre les méthodes précédemment exposées. Le but recherché ici est de montrer dans quel ordre logique peut se construire une molécule de façon à ce que l'utilisateur peu familier avec \CF acquière une méthode pour construire des molécules complexes. Pour l'y aider, les étapes de la construction seront montrées.
@@ -1511,15 +1576,13 @@ Ajouter une \falseverb{charge} sous forme d'exposant mathématique à un atome i
\exemple{Charge et liaison}/\chemfig{A^+-[2]B}
\qquad
\chemfig{A\rlap{${}^+$}-[2]B}/
-Si l'on veut utiliser la commande \verb-\oplus- qui affiche «$\oplus$», on peut trouver que la charge est trop basse : $\mathrm{A^\oplus}$. Dans ce cas, pourquoi ne pas se servir de \falseverb{\chemabove} pour placer aussi précisément que l'on veut, aussi bien verticalement qu'horizontalement la charge :
-\exemple{Charge et \string\chemabove}/\chemfig{\chemabove[0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}-[2]B}
-\qquad
-\chemfig{{\chemabove[-0.5pt]{A}{\scriptstyle\hspace{3.5mm}\oplus}}-[2]B}/
-On remarque un niveau d'accolades supplémentaire pour la seconde molécule. En effet, comme on spécifie «\verb/-0.5pt/» pour l'argument optionnel de \falseverb{\chemabove} pour descendre la charge, il faut éviter que \CF ne comprenne ce signe «\verb/-/» comme une liaison simple.
-Pour ajouter une charge près du sommet d'un cycle, la meilleure méthode est de créer une liaison invisible qui parte de ce sommet, ce qu'on fait ici avec \falseverb\definesubmol{} avec une liaison ayant un coefficient de longueur égal à 0.2 :
-\exemple{Charges et cycles}/\definesubmol\nobond{-[,0.2,,,draw=none]}
-\chemfig{*5(---(!\nobond\scriptstyle\oplus)-(!\nobond\scriptstyle{-})-)}/
+La macro \verb|\charge| permet d'effectuer cette tâche de façon simple et précise.
+\exemple{Placement de charges}/\chemfig{\charge{[extra sep=0pt]45[anchor=180+\chargeangle]=%
+$\scriptstyle\oplus$}{A}-[2]B}
+\qquad
+\chemfig{*5(---\charge{90:2pt=$\scriptstyle\oplus$}{}-%
+\charge{135:2pt=$\scriptstyle-$}{}-)}/
\subsection{Dessiner une liaison courbe}
Nous avons déjà vu qu'avec la librairie «\verb-decorations.pathmorphing-» de \TIKZ, on peut dessiner une liaison ondulée :
@@ -1647,39 +1710,6 @@ Molécule d'eau pivotée de +30\textdegree : \chemfig{[:30]@1H-[::37.775,2]@2O-[
\namebond23{\footnotesize0,9584 \angstrom}
\arclabel{0.5cm}{1}{2}{3}{\footnotesize104,45\textdegree}|
-\subsection{Schéma de Lewis à l'angle près}
-Pour quelques cas très particuliers, il est parfois nécessaire de positionner des schémas de Lewis au degrés près et non plus à des multiples de 45 degrés.
-
-Pour cela, il est relativement facile d'écrire une macro \verb-\mylewis-, admettant un argument optionnel (la longueur du doublet) qui vaut ici 2ex et deux arguments obligatoires; le premier étant le nom de l'atome et le second étant la liste des angles séparés par des virgules.
-
-L'astuce consiste à créer un n\oe ud invisible circulaire qui contient l'atome et tracer les doublets aux angles désirés de façon à ce qu'ils soient tangents à ce cercle :
-
-\exemple*{Doublets au degrés prés}|\catcode`\_11
-\newcommand\mylewis[3][2ex]{% #1=longueur, #2=atome #3=liste des angles
- \tikzpicture[baseline,anchor=base]%
- \node[inner sep=0pt,outer sep=1pt,circle,overlay](atom@@)at(0,0){\phantom{#2}};%
- \node[inner sep=0pt,outer sep=0pt]at(0,0){#2};%
- \def\list_angle{#3,}%
- \loop
- \expandafter\grab_angle\list_angle\_nil
- \pgfextractx\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimax{\the\CF_dim}%
- \pgfextracty\CF_dim{\pgfpointanchor{atom@@}\current_angle}\edef\CF_dimay{\the\CF_dim}%
- \pgfmathparse{#1*sin(\current_angle)/2}\let\offset_xx\pgfmathresult
- \pgfmathparse{#1*cos(\current_angle)/2}\let\offset_yy\pgfmathresult
- \draw[line width=.4pt,overlay]
- (\CF_dimax-\offset_xx,\CF_dimay+\offset_yy)--(\CF_dimax+\offset_xx,\CF_dimay-\offset_yy);%
- \unless\ifx\empty\list_angle
- \repeat
- \endtikzpicture
-}
-\def\grab_angle#1,#2\_nil{\def\current_angle{#1}\def\list_angle{#2}}
-\catcode`\_8
-Essai : \mylewis{Cl}{15}\qquad \mylewis[3ex]{Cl}{-60}\qquad \mylewis[1.5ex]{Cl}{60,120,240,300}
-\bigskip
-
-\chemfig{P(-[:72]\mylewis{Cl}{-18,72,162})(-[:-72]Cl)
-(-[:144]Cl)(-[:-144]Cl)-\mylewis{Cl}{0,90,-90}}|
-
\subsection{Dessiner des liaisons multiples}
Là encore, la librairie «decorations.markings» permet de tracer des liaisons multiples :
@@ -2369,28 +2399,28 @@ Il peut arriver que l'alignement du signe «+» avec les molécules qui précèd
\schemestart
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop/
-Ce qui se passe est que le signe «+» est sur la même ligne de base que le composé qui précède, et cette ligne de base est celle de l'atome «C» du haut. On pourrait bien sûr décaler le signe «+» mais cela ne changerait pas la position verticale de «\kern0.3333em\chemfig{\lewis{246,Br}-\lewis{026,Br}}\kern0.3333em». En fait, le signe «+» ne stoppe pas la lecture d'un composé pour \CF ce que l'on constate dans l'exemple ci-dessus où tout est englobé dans le composé «c1». On va donc être obligé de stopper le composé après la première molécule avec un \verb-\arrow{0}[,0]- qui produira une flèche invisible de longueur nulle. Pour centrer verticalement le tout, on va également préciser que l'ancre du premier composé doit être «west» (ou «180» qui est un synonyme) avec le deuxième argument optionnel de la commande \verb-\schemestart- :
+Ce qui se passe est que le signe «+» est sur la même ligne de base que le composé qui précède, et cette ligne de base est celle de l'atome «C» du haut. On pourrait bien sûr décaler le signe «+» mais cela ne changerait pas la position verticale de «\kern0.3333em\chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}\kern0.3333em». En fait, le signe «+» ne stoppe pas la lecture d'un composé pour \CF ce que l'on constate dans l'exemple ci-dessus où tout est englobé dans le composé «c1». On va donc être obligé de stopper le composé après la première molécule avec un \verb-\arrow{0}[,0]- qui produira une flèche invisible de longueur nulle. Pour centrer verticalement le tout, on va également préciser que l'ancre du premier composé doit être «west» (ou «180» qui est un synonyme) avec le deuxième argument optionnel de la commande \verb-\schemestart- :
\exemple{Alignement du signe +}/\setchemfig{scheme debug=true}
\schemestart[][west]
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\arrow{0}[,0]\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop/
De cette façon, le premier composé «c1» est la première molécule et le second composé est le reste, c'est-à-dire le signe «+» et la seconde molécule. On aurait pû jouer sur les ancres ou les styles via la commande \verb-\arrow- pour placer le second composé à un autre endroit. Ici, par exemple on décale le second composé de 10pt vers le bas dans le premier cas et on fait coïncider l'ancre «south east» du premier composé avec l'ancre «south west» du second dans le deuxième cas :
\exemple{Alignement du signe +}/\setchemfig{scheme debug=true}
\schemestart[][west]
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\arrow(--[yshift=-10pt]){0}[,0]\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop
\medskip
\schemestart[][west]
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
\arrow(.south east--.south west){0}[,0]\+
- \chemfig{\lewis{246,Br}-\lewis{026,Br}}
+ \chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{0=\|,90=\|,-90=\|}{Br}}
\schemestop/
\newpage
@@ -2416,12 +2446,12 @@ Les commandes créées par \CF sont :
\item \CFkv{angle increment} {45}: incrément de l'angle des liaisons
\item \CFkv{node style} {{}}: style des atomes
\item \CFkv{bond style} {{}}: style des liaisons
- \item \CFkv{lewis | width} {0.3ex}: largeur du rectangle pour la décoration | de Lewis
- \item \CFkv{lewis sep} {0.4ex}: espacement entre l'atome et les décorations de Lewis
- \item \CFkv{lewis length} {1.5ex}: longueur des décorations de Lewis
- \item \CFkv{lewis style} {{}}: style des décorations de Lewis
- \item \CFkv{lewis dist} {0.3em}: espacement entre les disques pour la décoration «\string:»
- \item \CFkv{lewis radius} {0.15ex}: rayon des disques des décorations de Lewis
+ \item \CFkv{lewis | width} {0.3ex}: largeur du rectangle pour la formules | de Lewis
+ \item \CFkv{lewis sep} {0.4ex}: espacement entre l'atome et les formule de Lewis
+ \item \CFkv{lewis length} {1.5ex}: longueur des formule de Lewis
+ \item \CFkv{lewis style} {{}}: style des formules de Lewis
+ \item \CFkv{lewis dist} {0.3em}: espacement entre les disques pour la formule «\string:»
+ \item \CFkv{lewis radius} {0.15ex}: rayon des disques des formules de Lewis
\item \CFkv{lewis diag coeff} {1}: coefficient multiplicatif de la distance dans les directions impaires
\item \CFkv{cycle radius coeff} {0.75}: coefficient du cercle ou de l'arc de cercle tracé dans les cycles
\item \CFkv{stack sep} {1.5pt}: espacement vertical pour les arguments des macros \verb-\chemabove- et \verb-\chembelow-
@@ -2449,8 +2479,8 @@ Les commandes créées par \CF sont :
\falseverb\chemskipalign & Ignore le groupe d'atomes en cours pour le mécanisme d'alignement vertical. Voir page~\pageref{chemskipalign}.\\
\Verb-\redefinesubmol{<nom>}<n>[<code1>]{<code2>}-& remplace l'alias déjà existant \Verb-!<nom>- par le nouveau \Verb-<code>-. Voir page~\pageref{redefinesubmol}\\[2ex]\hline
&\\
-\Verb-\lewis[<paramètres>]{<codes>,<atome>}-& affiche l'\Verb-<atome>- et positionne les décorations de Lewis selon ce qui est spécifié dans le \Verb-<code>-. Les décorations dessinées ne modifient pas la boîte englobante de l'\Verb-<atome>-. Voir page~\pageref{lewis}\\
-\Verb-\Lewis[<paramètres>]{<codes>,<atome>}-& affiche l'\Verb-<atome>- et positionne les décorations de Lewis selon ce qui est spécifié dans le \Verb-<code>-. Voir page~\pageref{Lewis}\\
+\Verb-\charge{[<paramètres>]<pos>[<tikz>]}{<atome>}-& affiche l'\Verb-<atome>- et positionne les charges selon leurs \Verb-<positions>-. Les charges dessinées sont hors de la boîte englobante de l'\Verb-<atome>-. Voir page~\pageref{charge}\\
+\Verb-\Charge{[<paramètres>]<pos>[<tikz>]}{<atome>}-& Identique à \verb|\charge|, mais les charges sont comptabilisées dans la boite englobante.\\
\Verb-\chemmove[<options tikz>]<code tikz>-& Ouvre un environnement \verb-tikzpicture- en y ajoutant à celles qui existent déjà les \Verb-<options tikz>-, et relie avec le \Verb-<code tikz>- les nœuds posés dans les molécules à l'aide du caractère «\verb-@-». Voir page~\pageref{mecanismes-reactionnels}.\\[2ex]\hline
&\\
\Verb-\chemabove[<dim>]{<txt1>}{txt2}- & écrit le \Verb-<txt1>- et positionne le \Verb-<txt2>- au dessus en laissant \Verb-<dim>- d'espacement vertical. Cette commande ne change pas la boîte englobante de \Verb-<txt1>-. Voir page~\pageref{chemabove}\\
@@ -2559,11 +2589,28 @@ $\star\quad\star$
\exemple*{Codéïne}/\chemfig{[:-30]**6(-(-OH)-?-*6(-(-[3]-[2,2]-[0,.5])*6(-(<:[:-150,1.155]O?)
-(<:OH)-=-)-(<:[1]H)-(-[2]NCH_3)--)---)}/
-\exemple*{Colorant(rouge)}/\chemfig{**6(--*6(-(-NO_2)=-(-\lewis{26,O}-[0]H)=(-\lewis{4,N}=[0]\lewis{2,N}-[0]Ar)-)----)}/
+\exemple*{Colorant(rouge)}/\chemfig{**6(--*6(-(-NO_2)=-(-\charge{90=\|,-90=\|}{O}-[0]H)=(-\charge{180=\|}{N}=[0]\charge{90=\|}{N}-[0]Ar)-)----)}/
-\exemple*{Menthone}/\chemfig{CH_3-?(-[2]H)(-[::-30,2]-[::+60](=[1]\lewis{20,O})
+\exemple*{Menthone}/\chemfig{CH_3-?(-[2]H)(-[::-30,2]-[::+60](=[1]\charge{0=\|,90=\|}{O})
-[::-150,1.5](-[:20]CH(-[1]CH_3)(-[7]CH_3))(-[6]H)-[::-90,2]-[::+60]?)}/
+\exemple*{Fullerène}/\definesubmol\fragment1{
+ (-[:#1,0.85,,,draw=none]
+ -[::126]-[::-54](=_#(2pt,2pt)[::180])
+ -[::-70](-[::-56.2,1.07]=^#(2pt,2pt)[::180,1.07])
+ -[::110,0.6](-[::-148,0.60](=^[::180,0.35])-[::-18,1.1])
+ -[::50,1.1](-[::18,0.60]=_[::180,0.35])
+ -[::50,0.6]
+ -[::110])
+}
+\chemfig{
+ !\fragment{18}
+ !\fragment{90}
+ !\fragment{162}
+ !\fragment{234}
+ !\fragment{306}
+}/% https://tex.stackexchange.com/questions/506293/how-to-draw-a-fullerene
+
\exemple*{Synthèse de Fischer de l'indole}/\schemestart
\chemfig{*6(=-*6(-\chembelow{N}{H}-NH_2)=-=-)}
\+
@@ -2572,29 +2619,28 @@ $\star\quad\star$
\chemfig{*6(-=*5(-\chembelow{N}{H}-(-R_2)=(-R_1)-)-=-=)}
\schemestop/
-\exemple*{Mécanisme réactionnel : groupement carbonyle}/
-\schemestart
- \chemfig{C([3]-)([5]-)=[@{db,.5}]@{atoo}\lewis{06,O}}
+\exemple*{Mécanisme réactionnel : groupement carbonyle}/\schemestart
+ \chemfig{C([3]-)([5]-)=[@{db,.5}]@{atoo}\charge{0=\|,-90=\|}{O}}
\arrow(.mid east--.mid west){<->}
- \chemfig{\chemabove{C}{\scriptstyle\oplus}([3]-)([5]-)-\chemabove
- {\lewis{026,O}}{\hspace{5mm}\scriptstyle\ominus}}
+ \chemfig{\charge{90:3pt=$\scriptstyle\oplus$}{C}([3]-)([5]-)-%
+ \charge{0=\|,90=\|,-90=\|,45:3pt=$\scriptstyle\ominus$}{O}}
\schemestop
\chemmove{\draw[shorten <=2pt, shorten >=2pt](db) ..controls +(up:5mm) and +(up:5mm)..(atoo);}/
\exemple*{Mécanismes réactionnels : dérivés nitrés}/\schemestart
- \chemfig{R-\chembelow{N}{\hspace{-5mm}\scriptstyle\oplus}([1]=[@{db}]@{atoo1}O)([7]-[@{sb}]@{atoo2}
- \chemabove{\lewis{157,O}}{\hspace{7mm}\scriptstyle\ominus})}
+ \chemfig{R-\charge{225:3pt=$\scriptstyle\oplus$}{N}([1]=[@{db}]@{atoo1}O)([7]-[@{sb}]@{atoo2}
+ \charge{45=\|,-45=\|,-135=\|,45:5pt=$\scriptstyle\ominus$}{O})}
\arrow(.mid east--.mid west){<->}
- \chemfig{R-\chemabove{N}{\hspace{-5mm}\scriptstyle\oplus}([1]-\chemabove{O}{\scriptstyle\ominus})([7]=O)}
+ \chemfig{R-\charge{135:3pt=$\scriptstyle\oplus$}{N}([1]-\charge{90:3pt=$\scriptstyle\ominus$}{O})([7]=O)}
\schemestop
\chemmove{
- \draw[shorten <=2pt, shorten >=2pt](db) ..controls +(120:5mm) and +(120:5mm)..(atoo1);
+ \draw[shorten <=2pt, shorten >=2pt](db) ..controls +(120:5mm) and +(120:7mm)..(atoo1);
\draw[shorten <=3pt, shorten >=2pt](atoo2) ..controls +(225:10mm) and +(225:10mm)..(sb);
}/
\exemple*{Addition nucléophile. Amines primaires}/\setchemfig{atom sep=2.5em,compound sep=5em}
\schemestart
- \chemfig{R-@{aton}\lewis{2,N}H_2}
+ \chemfig{R-@{aton}\charge{90=\|}{N}H_2}
\+
\chemfig{@{atoc}C([3]-CH_3)([5]-CH_3)=[@{atoo1}]O}
\chemfig{@{atoo2}\chemabove{H}{\scriptstyle\oplus}}
@@ -2610,7 +2656,7 @@ $\star\quad\star$
\par
\schemestart
\arrow{<=>}
- \chemfig{R-@{aton}\lewis{2,N}([6]-[@{sbh}]H)-[@{sb}]C(-[2]CH_3)(-[6]CH_3)-[@{sbo}]@{atoo}
+ \chemfig{R-@{aton}\charge{90=\|}{N}([6]-[@{sbh}]H)-[@{sb}]C(-[2]CH_3)(-[6]CH_3)-[@{sbo}]@{atoo}
\chemabove{O}{\scriptstyle\oplus}(-[1]H)(-[7]H)}
\chemmove[-stealth,shorten <=3pt,shorten >=2pt,dash pattern= on 1pt off 1pt,thin]{
\draw(aton) ..controls +(up:5mm) and +(up:5mm)..(sb);
@@ -2662,11 +2708,11 @@ $\star\quad\star$
\exemple*{Mécanismes réactionnels de la chloration}/\scriptsize\setchemfig{bond offset=1pt,atom sep=2em,compound sep=4em}
\schemestart
\chemfig{Cl-[4]@{a0}(=[@{a1}:120]@{a2}O)-[:-120](=[:-60]O)-[4]Cl}\+\chemfig{*6(-=-=(-@{oh1}OH)-=)}\arrow
- \chemfig{*6((-O-[:150](-[@{o0}:150]@{o1}\lewis{6.,O})(-[@{cl0}:60]@{cl1}Cl)-[:240](-[4]Cl)=[6]O)=-=-=-)}
+ \chemfig{*6((-O-[:150](-[@{o0}:150]@{o1}\charge{-90=\.}{O})(-[@{cl0}:60]@{cl1}Cl)-[:240](-[4]Cl)=[6]O)=-=-=-)}
\arrow\chemfig{*6((-O-[:150](=[2]O)-[:-150](=[6]O)-[:150]Cl)=-=-=-)}\+\chemfig{HCl}
\arrow(@c1--){0}[-90,0.5]
\chemfig{*6(-=*6(-O-*6(-@{o2}(=[@{o3}]@{o4}O)-Cl)=)-=-=)}\+\chemfig{*6(-=-=(-@{oh2}OH)-=)}\arrow
- \chemfig{*6(-=*6(-O-(-(-[@{cl2}:60]@{cl3}Cl)(-[@{o5}:-120]@{o6}\lewis{6.,O})-O-[::-40]*6(=-=-=-))=)-=-=)}
+ \chemfig{*6(-=*6(-O-(-(-[@{cl2}:60]@{cl3}Cl)(-[@{o5}:-120]@{o6}\charge{-90=\.}{O})-O-[::-40]*6(=-=-=-))=)-=-=)}
\kern-3em \arrow\chemfig{[:30]*6(=-(-O-[:-60](=O)-[:-120](=[4]O)-[:-60]O-*6(=-=-=-))=-=-)}
\kern-3em \+\chemfig{HCl}
\schemestop
@@ -2718,8 +2764,8 @@ $\star\quad\star$
\chemleft[\subscheme[90]{%
\chemfig{R'-\chemabove{N}{\scriptstyle\oplus}~C-R}
\arrow{<->}[,0.75]
- \chemfig{R'-\lewis{2:,N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}\chemright]
- \arrow{<=>[\chemfig{H_2@{a0}\lewis{0:2:,O}}]}[,1.1]
+ \chemfig{R'-\charge{90=\:}{N}=@{a1}\chemabove{C}{\scriptstyle\oplus}-R}}\chemright]
+ \arrow{<=>[\chemfig{H_2@{a0}\charge{0=\:,90=\:}{O}}]}[,1.1]
\chemmove[red,-stealth,red,shorten <=3pt]{
\draw(a0)..controls+(90:10mm)and+(45:10mm)..([yshift=6pt]a1.45);}
\arrow(@c1--){0}[-90,0.333]
@@ -2770,21 +2816,21 @@ $\star\quad\star$
\exemple*{Addition électrophile d'halogène sur l'oléfine}/\schemestart
\subscheme{%
\chemfig{C(<[:40])(<[:160])=[6]C(<[:-130])<[:-20]}
- \arrow{0}[,0]\+\chemfig{\lewis{246,Br}-\lewis{026,Br}}}
+ \arrow{0}[,0]\+\chemfig{\charge{90=\|,180=\|,270=\|}{Br}-\charge{90=\|,0=\|,270=\|}{Br}}}
\arrow(@c1--olefin){<=>[*{0}rapide]}[-90]
\chemfig{>[:-20]C(<[:40])=[@{db}6]C(<[:-130])<[:-20]}
\arrow(--bromonium){0}[-90]
- \chemname{\chemfig{C*3((<)(<:[:-155])-\raise1.5pt\llap{$\scriptstyle\oplus$}\lewis{17,Br}-C(<:)(<[:155])-)}}
+ \chemname{\chemfig{C*3((<)(<:[:-155])-\charge{45=\|,-45=\|,180:3pt=$\scriptstyle\oplus$}{Br}-C(<:)(<[:155])-)}}
{bromonium ion}
\arrow(--carbeniumA){<<->}[,1.5]
\chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<:[:-150])(<[:-100])-[:-30]
- \lewis{157,Br}}}{Xarbenium ion}
+ \charge{45=\|,-45=\|,225=\|}{Br}}}{Xarbenium ion}
\arrow(@bromonium--carbeniumB){<<->}[180,1.5]
\chemname{\chemfig{-[:-30]\chemabove{C}{\scriptstyle\oplus}(-[:30])-[6]C(<[:-150])
- (<:[:-100])-[:-30]\lewis{137,Br}}}{carbenium ion}
+ (<:[:-100])-[:-30]\charge{45=\|,-45=\|,135=\|}{Br}}}{carbenium ion}
\arrow(@olefin--){0}[,.25]
- \chemfig{@{Br1}\chemabove[3pt]{\lewis{246,Br}}{\scriptstyle\delta\oplus}-[@{b2}]@{Br2}
- \chemabove[3pt]{\lewis{026,Br}}{\scriptstyle\delta\ominus}}
+ \chemfig{@{Br1}\charge{90=\|,180=\|,270=\|,90:5pt=$\scriptstyle\delta\oplus$}{Br}-[@{b2}]@{Br2}
+ \charge{90=\|,0=\|,270=\|,90:5pt=$\scriptstyle\delta\ominus$}{Br}}
\arrow(@olefin--[left]){0}[180,0]
$\pi$ complexe
\arrow(@carbeniumA--@olefin){<=>[lent, \chemfig{{-}Br^\ominus}]}
@@ -2816,8 +2862,8 @@ $\star\quad\star$
\hspace{10em}
\tikz[remember picture]\node(n0){\chemname{}{Attaques\\nucléophiles}};\par
\vspace{2ex}\hspace{15em}
- \chemfig{R^2-(-[:-60]@{m3}H)-[:60]@{m0}(-[:120]R^1)(-[1,0.25,,,draw=none]\scriptstyle\color{red}\delta+)
- =[@{m1}]@{m2}\lewis{1:7:,O}-[1,0.5,,,draw=none]\scriptstyle\color{red}\delta{-}}
+ \chemfig{R^2-(-[:-60]@{m3}H)-[:60]@{m0}\charge{45:5pt=$\scriptstyle\color{red}\delta+$}{}(-[:120]R^1)
+ =[@{m1}]@{m2}\charge {45=\:,-45=\:,45:7pt=$\scriptstyle\color{red}\delta-$}{O}}
\hspace{5em}
\chemname[-15ex]{}{\tikz[remember picture]\node(n1){};Réactions d'addition}\kern1em
\chemname{}{\tikz[remember picture]\node(n2){};Propriétés basiques}\par
diff --git a/macros/generic/chemfig/chemfig.tex b/macros/generic/chemfig/chemfig.tex
index 046428adc6..10e9b1224e 100644
--- a/macros/generic/chemfig/chemfig.tex
+++ b/macros/generic/chemfig/chemfig.tex
@@ -4,9 +4,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
\def\CFname {chemfig} %
-\def\CFver {1.41} %
+\def\CFver {1.5} %
% %
-\def\CFdate {2019/05/21} %
+\def\CFdate {2020/03/05} %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -17,7 +17,7 @@
% Package URL: https://www.ctan.org/pkg/chemfig |
% Bug tracker: https://framagit.org/unbonpetit/chemfig/issues |
% Repository : https://framagit.org/unbonpetit/chemfig/tree/master |
-% Copyright : Christian Tellechea 2010-2019 |
+% Copyright : Christian Tellechea 2010-2020 |
% Licence : Released under the LaTeX Project Public License v1.3c |
% or later, see http://www.latex-project.org/lppl.txt |
% Files : 1) chemfig.tex |
@@ -53,6 +53,7 @@
%-------------------- Vrification des prrequis ---------------------
\def\CF_error#1{\errmessage{Package \CFname\space Error: #1.}}
+\def\CF_warning#1{\immediate\write-1{Package \CFname\space Warning: #1^^J}}
\def\CF_checkprimitive#1#2#3{% Vrifie que #1 est une primitive et sinon, met le message #2 et excute #3
\begingroup
\edef\__tempa{\meaning#1}\edef\__tempb{\string#1}\expandafter
@@ -104,6 +105,8 @@
\newbox\CF_boxlewis
\newbox\CF_box
\newbox\CF_boxstuff
+\newbox\CF_testbox
+\newbox\CF_chargebox
\newtoks\CF_substtoks
@@ -124,6 +127,11 @@
\def\CF_ifx#1#2{\ifx#1#2\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
\def\CF_ifempty#1{\ifx\empty#1\empty\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
\def\CF_ifnum#1{\ifnum#1\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_ifinsidetikz{\ifdefined\pgfpictureid\expandafter\CF_execfirst\else\expandafter\CF_execsecond\fi}
+\def\CF_ifzerodim#1{%
+ \setbox\CF_testbox\hbox{\printatom{#1}}%
+ \CF_ifnum{1\ifdim\wd\CF_testbox=\CF_zero0\fi\ifdim\ht\CF_testbox=\CF_zero0\fi\ifdim\dp\CF_testbox=\CF_zero0\fi=1000 }
+}
\def\CF_doifempty#1{\ifx\empty#1\empty\expandafter\CF_id\else\expandafter\CF_gobarg\fi}
\def\CF_doifnotempty#1{\ifx\empty#1\empty\expandafter\CF_gobarg\else\expandafter\CF_id\fi}
\def\CF_gobtonil#1\_nil{}
@@ -167,7 +175,6 @@
\expandafter\def\expandafter\CF_ifnextcharb\space{\futurelet\CF_temptok\CF_ifnextchara}
\def\CF_ifstar#1{\CF_ifnextchar*{\CF_execfirst{#1}}}
\def\CF_testopt#1#2{\CF_ifnextchar[{#1}{#1[{#2}]}}
-\def\CF_warning#1{\immediate\write-1{Package \CFname\space Warning: #1^^J}}
\def\CF_ifinteger#1{%
\begingroup
\afterassignment\CF_afterinteger
@@ -206,10 +213,10 @@
\CF_ifinstra#1\__nil#2\_nil
}
\def\CF_afterspace#1 #2\_nil{#2}
-\def\CF_valuetomacro#1[#2]#3{% #1= macro #2=valeur dfaut #3=cl
- \CF_eexpsecond{\def#1}{\useKV[chemfig]{#3}}%
- \CF_ifx#1\empty
- {\def#1{#2}}
+\def\CF_valuetomacro[#1]#2[#3]#4{% #1=trousseau #2= macro #3=valeur dfaut #4=cl
+ \CF_eexpsecond{\def#2}{\useKV[#1]{#4}}%
+ \CF_ifx#2\empty
+ {\def#2{#3}}
{}%
}
@@ -405,6 +412,8 @@
\CF_makeother\|\CF_makeother\#\CF_makeother\@%
}
+\def\printatom#1{\ifmmode\rm#1\else$\rm#1$\fi}
+
\def\CF_nodecontent{\CF_expsecond\printatom{\csname atom_\number\CF_cntatom\endcsname\CF_nodestrut}}
\def\chemskipalign{%
@@ -413,8 +422,6 @@
\let\CF_nodestrut\empty
}
-\def\CF_emptynode{{}}
-
\def\definesubmol{\CF_definesubmoltrue\def_submol}
\def\redefinesubmol{\CF_definesubmolfalse\def_submol}
@@ -532,12 +539,18 @@
{\CF_eaddtomacro#2{\expandafter{\CF_firsttonil#1\_nil}}%
\CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
}%
- {\CF_iffirsttokina{-=(*<>!~}%
- {\def#3{#1}%
- }%
- {\CF_eaddtomacro#2{\CF_firsttonil#1\_nil}%
- \CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
- }%
+ {\CF_ifx!\CF_toksa% Bugfix v1.5
+ {\def\CF_seeksubmloltemp{#1}%
+ \CF_seeksubmola
+ \CF_expsecond\CF_seeknodea\CF_seeksubmloltemp#2#3%
+ }
+ {\CF_iffirsttokina{-=(*<>~}%
+ {\def#3{#1}%
+ }%
+ {\CF_eaddtomacro#2{\CF_firsttonil#1\_nil}%
+ \CF_expsecond\CF_seeknodea{\CF_gobarg#1}#2#3%
+ }%
+ }
}%
}%
}%
@@ -693,29 +706,35 @@
\CF_expsecond{\def#2}{\CF_gobarg#1}%
}
-\def\CF_seeksubmol{%
- \CF_expsecond{\def\CF_molecule}{\romannumeral-`\.\expandafter\noexpand\CF_molecule}%
- \CF_expsecond\CF_iffirsttokmatch{\CF_molecule}!%
- {\CF_eexpsecond{\def\CF_molecule}{\expandafter\CF_gobarg\CF_molecule}% enlve le "!"
- \CF_ifx\empty\CF_molecule
+\def\CF_seeksubmol#1#2{% cherche et remplace ! au dbut de #1. #1=code #2=macro recevant le rsultat
+ \def\CF_seeksubmloltemp{#1}%
+ \CF_seeksubmola
+ \let#2\CF_seeksubmloltemp
+}
+
+\def\CF_seeksubmola{%
+ \CF_expsecond{\def\CF_seeksubmloltemp}{\romannumeral-`\.\expandafter\noexpand\CF_seeksubmloltemp}%
+ \CF_expsecond\CF_iffirsttokmatch{\CF_seeksubmloltemp}!%
+ {\CF_eexpsecond{\def\CF_seeksubmloltemp}{\expandafter\CF_gobarg\CF_seeksubmloltemp}% enlve le "!"
+ \CF_ifx\empty\CF_seeksubmloltemp
{\CF_error{no submol name found after "!"}}
{}%
- \ifcat\relax\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule*\_nil
- \expandafter\CF_seeksubmola\CF_molecule\_nil
+ \ifcat\relax\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_seeksubmloltemp*\_nil
+ \expandafter\CF_seeksubmolb\CF_seeksubmloltemp\_nil
\else
- \expandafter\CF_seeksubmolb\CF_molecule\_nil
+ \expandafter\CF_seeksubmolc\CF_seeksubmloltemp\_nil
\fi
- \CF_seeksubmol
+ \CF_seeksubmola
}%
{}%
}
-\def\CF_seeksubmola#1{\CF_seeksubmolc#1\relax}
+\def\CF_seeksubmolb#1{\CF_seeksubmold#1\relax}
-\def\CF_seeksubmolb#1{\expandafter\CF_seeksubmolc\csname CF__#1\endcsname\relax}% nom de la sous molcule
+\def\CF_seeksubmolc#1{\expandafter\CF_seeksubmold\csname CF__#1\endcsname\relax}% nom de la sous molcule
-\def\CF_seeksubmolc#1#2\_nil{%#1=macro de la sous molcule #2=reste du code commenant par \relax
- \CF_expsecond{\CF_eexpsecond{\def\CF_molecule}}{\expandafter#1\CF_gobarg#2}% supprime le \relax puis ajoute la macro au dbut et la 2-dveloppe
+\def\CF_seeksubmold#1#2\_nil{%#1=macro de la sous molcule #2=reste du code commenant par \relax
+ \CF_expsecond{\CF_eexpsecond{\def\CF_seeksubmloltemp}}{\expandafter#1\CF_gobarg#2}% supprime le \relax puis ajoute la macro au dbut et la 2-dveloppe
}
\def\CF_insertemptygroup#1{% insre {} au dbut de la sc #1
@@ -734,6 +753,12 @@
\endgroup
\begingroup
\setchemfig{#3}%
+ \CF_ifinsidetikz
+ {\pgfinterruptpicture
+ \let\CF_atendofchemfig\endpgfinterruptpicture
+ }
+ {\let\CF_atendofchemfig\relax
+ }%
\expanded{% dbut du tikzpicture
\unexpanded{#1}[%
remember picture,%
@@ -750,7 +775,6 @@
}%
\begingroup% \endgroup rajout en sortie de trac par \CF_chemfigd
\let\CF_hooklist\empty
- \CF_expsecond\setchemfig{#3}%
\ifboolKV[chemfig]{fixed length}
{\CF_macrofixedbondlengthtrue}
{\CF_macrofixedbondlengthfalse}%
@@ -760,17 +784,17 @@
\ifboolKV[chemfig]{cram rectangle}
{\let\CF_clipcramornot\CF_gobtikzinstruction}
{\let\CF_clipcramornot\clip}%
- \CF_valuetomacro\CF_crambasewidth [1.5ex]{cram width}%
- \CF_valuetomacro\CF_cramdashlength [1pt]{cram dash width}%
- \CF_valuetomacro\CF_cramdashsep [2pt]{cram dash sep}%
- \CF_valuetomacro\CF_atomsep [3em]{atom sep}% espacement des atomes lis
- \CF_valuetomacro\CF_bondoffset [2pt]{bond offset}%
- \CF_valuetomacro\CF_doublesep [2pt]{double bond sep}%
- \CF_valuetomacro\CF_angleincrement [45]{angle increment}%
- \CF_valuetomacro\CF_nodestyle []{node style}%
- \CF_valuetomacro\CF_bondstyle []{bond style}%
- \CF_valuetomacro\CF_stacksep [1.5pt]{stack sep}%
- \CF_valuetomacro\CF_cycleradiuscoeff[0.75]{cycle radius coeff}% coeff multiplicateur du rayon des arcs dans les cycles
+ \CF_valuetomacro[chemfig]\CF_crambasewidth [1.5ex]{cram width}%
+ \CF_valuetomacro[chemfig]\CF_cramdashlength [1pt]{cram dash width}%
+ \CF_valuetomacro[chemfig]\CF_cramdashsep [2pt]{cram dash sep}%
+ \CF_valuetomacro[chemfig]\CF_atomsep [3em]{atom sep}% espacement des atomes lis
+ \CF_valuetomacro[chemfig]\CF_bondoffset [2pt]{bond offset}%
+ \CF_valuetomacro[chemfig]\CF_doublesep [2pt]{double bond sep}%
+ \CF_valuetomacro[chemfig]\CF_angleincrement [45]{angle increment}%
+ \CF_valuetomacro[chemfig]\CF_nodestyle []{node style}%
+ \CF_valuetomacro[chemfig]\CF_bondstyle []{bond style}%
+ \CF_valuetomacro[chemfig]\CF_stacksep [1.5pt]{stack sep}%
+ \CF_valuetomacro[chemfig]\CF_cycleradiuscoeff[0.75]{cycle radius coeff}% coeff multiplicateur du rayon des arcs dans les cycles
\CF_incyclefalse
\CF_cntgroup0
\let\CF_lastaction\CF_zero% 0=dbut du dessin 1=trac d'un noeud 2=trac d'une liaison
@@ -794,6 +818,7 @@
\CF_expsecond\CF_chemfigc{\CF_molecule}%
%\endgroup <-- rajout par \CF_chemfigd
#2% fin du tikzpicture
+ \CF_atendofchemfig
\endgroup
\let\CF_flipstate\CF_zero
}
@@ -813,7 +838,7 @@
\fi
\let\CF_currentangle\CF_defaultangle
\def\CF_molecule{#1}%
- \CF_seeksubmol% alias en premier ?
+ \CF_expsecond\CF_seeksubmol\CF_molecule\CF_molecule% alias en premier ?
\if[\CF_threeea\noexpand\expandafter\CF_firsttonil\CF_molecule\_nil
\expandafter\CF_analyseoptarg\CF_molecule\_nil\CF_molecule
\CF_expsecond\CF_setbondangle{\CF_currentstringangle}\CF_currentangle
@@ -824,7 +849,7 @@
\CF_doifnotempty\CF_currentfromatom {\let\CF_defaultfromatom\CF_currentfromatom}%
\CF_doifnotempty\CF_currenttoatom {\let\CF_defaulttoatom\CF_currenttoatom}%
\CF_doifnotempty\CF_currenttikz {\let\CF_defaulttikz\CF_currenttikz}%
- \CF_seeksubmol
+ \CF_expsecond\CF_seeksubmol\CF_molecule\CF_molecule
\fi
\edef\CF_defaultstringangle{:\CF_defaultangle}%
\let\CF_currentlength\CF_defaultlength
@@ -859,8 +884,7 @@
\CF_ifx\CF_molecule\empty
{\let\CF_nextaction\endgroup
}
- {\CF_seeksubmol
- \CF_expsecond\CF_seeknode{\CF_molecule}\CF_currentatomgroup\CF_molecule
+ {\CF_expsecond\CF_seeknode{\CF_molecule}\CF_currentatomgroup\CF_molecule
\CF_ifx\empty\CF_currentatomgroup% pas de noeud pour commencer ?
{\def\CF_bondoutnode{%
n\CF_lastgroupnumber-%
@@ -959,9 +983,9 @@
\CF_cntcycle0
\edef\CF_hookcycle{\CF_bondoutnode}%
\let\CF_hookatomgroup\CF_previousatomgroup
- \CF_ifx\CF_hookatomgroup\CF_emptynode
+ \CF_ifzerodim\CF_hookatomgroup
{\def\CF_cyclejoinlast{1}}% joindre le dernier
- {\def\CF_cyclejoinlast{0}}
+ {\def\CF_cyclejoinlast{0}}%
\CF_incycletrue
\ifnum\CF_lastaction=3
\pgfmathsetmacro\CF_initcycleangle{360/\CF_lastcyclenum-180}% c'est un cycle dans un cycle
@@ -1052,29 +1076,26 @@
}%
}
+\def\CF_distancebetweenpoints#1#2#3#4#5{%
+ \pgfextractx\CF_dim{\pgfpointanchor{#1}{#2}}\edef\CF_dimax{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#1}{#2}}\edef\CF_dimay{\the\CF_dim}%
+ \pgfextractx\CF_dim{\pgfpointanchor{#3}{#4}}\edef\CF_dimbx{\the\CF_dim}%
+ \pgfextracty\CF_dim{\pgfpointanchor{#3}{#4}}\edef\CF_dimby{\the\CF_dim}%
+ \pgfmathsetmacro#5{veclen(\CF_dimbx-\CF_dimax,\CF_dimby-\CF_dimay)}%
+}
+
\def\CF_computenodevect#1#2{%
- \pgfextractx\CF_dim{\pgfpointanchor{#1}{center}}\edef\CF_dimax{\the\CF_dim}%
- \pgfextracty\CF_dim{\pgfpointanchor{#1}{center}}\edef\CF_dimay{\the\CF_dim}%
- \pgfextractx\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_dimbx{\the\CF_dim}%
- \pgfextracty\CF_dim{\pgfpointanchor{#2}{center}}\edef\CF_dimby{\the\CF_dim}%
- \pgfmathsetmacro\CF_vectorlen{veclen(\CF_dimbx-\CF_dimax,\CF_dimby-\CF_dimay)}%
+ \CF_distancebetweenpoints{#1}{center}{#2}{center}\CF_vectorlen
\pgfmathsetmacro\CF_normx{(\CF_dimay-\CF_dimby)/\CF_vectorlen}%
\pgfmathsetmacro\CF_normy{(\CF_dimbx-\CF_dimax)/\CF_vectorlen}%
}
\def\CF_setoffset#1#2{%
- \CF_doifempty#1%
- {\edef#1{%
- \ifx#2\CF_emptynode
- 0pt%
- \else
- \ifx#2\empty
- 0pt%
- \else
- \CF_bondoffset
- \fi
- \fi}%
- }%
+ \CF_doifempty#1{%
+ \CF_ifzerodim{#2}
+ {\def#1{0pt}}
+ {\edef#1{\CF_bondoffset}}%
+ }%
}
\def\CF_drawbond#1#2#3#4#5{% #1=type de liaison #2 et #3:nom de noeuds de dbut et fin #4 et #5: contenu des atomes de dbut et fin
@@ -1209,7 +1230,7 @@
\else
\CF_ifx\CF_previoustikz\CF_currenttikz
{\def\CF_joinbond{1}%
- \CF_ifx\CF_previousatomgroup\CF_emptynode
+ \CF_ifzerodim\CF_previousatomgroup
{\CF_ifx\CF_previousbondangle\empty% si dbut molcule
{\CF_drawbonda(#1@@)--(#2@@);
}
@@ -1321,7 +1342,7 @@
\CF_ifinstr{#3}?%
{\CF_removehook\CF_currentatomgroup
\ifcat\relax\detokenize\expandafter{\romannumeral-`\.\expandafter\noexpand\CF_currentatomgroup}\relax
- \let\CF_currentatomgroup\CF_emptynode
+ \let\CF_currentatomgroup\empty
\fi
}%
{}%
@@ -1350,7 +1371,7 @@
}%
}%
\CF_cntatom\CF_hookatomnumber
- \CF_ifx\CF_currentatomgroup\CF_emptynode
+ \CF_ifzerodim\CF_currentatomgroup
{\let\CF_nodestrut\empty
}
{\CF_ifx\empty\CF_bondoutcontentsaved
@@ -1552,12 +1573,195 @@
\def\CF_removehookb#1?[#2]#3\_nil#4{\CF_expsecond{\def#4}{\CF_gobarg#1#3}}
+\def\setcharge#{\setKV[charge]}
+\def\resetcharge{%
+ \setKVdefault[charge]{%
+ debug = false,% trace les contours des noeuds
+ macro atom = \printatom,%macro qui prendra comme argument l'atome recevant la charge
+ circle = false,% false => noeud atome = rectangle
+ macro charge = ,% macro attendue (\printatom ou \ensuremath, par exemple) qui prendra comme argument la charge
+ extra sep = 1.5pt,% sparation additionnelle entre le noeud (cercle ou rectangle) et la position des charges
+ overlay = true,% charges en "surimpression"
+ shortcuts = true,% raccourcis \. \: \| et \" actifs pour Lewis
+ lewisautorot = true,% rotation auto charge Lewis
+ .radius = 0.15ex,% rayon du point
+ :sep = 0.3em,% sparation des deux points
+ .style = {fill=black},% style des points
+ "length = 1.5ex,% longueur rectangle
+ "width = .3ex,% largeur rectangle
+ "style = {black,line width=0.4pt},% style rectangle
+ |style = {black,line width=0.4pt},% style ligne
+ }%
+}
+\resetcharge
+\def\chargedot{\CF_testopt\chargedot_a{}}
+\def\chargedot_a[#1]{%
+ \begingroup
+ \setKV[charge]{#1}%
+ \CF_valuetomacro[charge]\CF_dotradius[0.15ex]{.radius}%
+ \CF_eexpsecond{\tikz\draw[}{\useKV[charge]{.style}}](0,0)circle(\CF_dotradius);%
+ \endgroup
+}
+\def\chargeddot{\CF_testopt\chargeddot_a{}}
+\def\chargeddot_a[#1]{%
+ \begingroup
+ \setKV[charge]{#1}%
+ \CF_valuetomacro[charge]\CF_dotsep [0.5ex] {:sep}%
+ \CF_valuetomacro[charge]\CF_dotradius[.15ex]{.radius}%
+ \ifboolKV[charge]{lewisautorot}
+ {\pgfmathsetmacro\CF_lewisrot{90+\chargeangle}}
+ {\def\CF_lewisrot{0}}%
+ \pgfmathsetmacro\CF_halfsep{\CF_dotsep/2}%
+ \tikzpicture[anchor=center,rotate=\CF_lewisrot]%
+ \CF_eexpsecond{\draw[}{\useKV[charge]{.style}}]%
+ (-\CF_halfsep pt,0)circle(\CF_dotradius)%
+ (\CF_halfsep pt,0)circle(\CF_dotradius);%
+ \endtikzpicture
+ \endgroup
+}
+\def\chargerect{\CF_testopt\chargerect_a{}}
+\def\chargerect_a[#1]{%
+ \begingroup
+ \setKV[charge]{#1}%
+ \CF_valuetomacro[charge]\CF_rectlength[1.5ex]{"length}%
+ \CF_valuetomacro[charge]\CF_rectwidth [0.3ex]{"width}%
+ \ifboolKV[charge]{lewisautorot}
+ {\pgfmathsetmacro\CF_lewisrot{90+\chargeangle}}
+ {\def\CF_lewisrot{0}}%
+ \pgfmathsetmacro\CF_halfwidth{\CF_rectwidth/2}%
+ \pgfmathsetmacro\CF_halflength{\CF_rectlength/2}%
+ \tikzpicture[anchor=center,rotate=\CF_lewisrot]%
+ \CF_eexpsecond{\draw[}{\useKV[charge]{"style}}](-\CF_halflength pt,-\CF_halfwidth pt)rectangle(\CF_halflength pt,\CF_halfwidth pt);%
+ \endtikzpicture
+ \endgroup
+}
+\def\chargeline{\CF_testopt\chargeline_a{}}
+\def\chargeline_a[#1]{%
+ \begingroup
+ \setKV[charge]{#1}%
+ \CF_valuetomacro[charge]\CF_linelength[1.5ex]{"length}%
+ \ifboolKV[charge]{lewisautorot}
+ {\pgfmathsetmacro\CF_lewisrot{90+\chargeangle}}
+ {\def\CF_lewisrot{0}}%
+ \pgfmathsetmacro\CF_halflength{\CF_linelength/2}%
+ \tikzpicture[anchor=center,rotate=\CF_lewisrot]%
+ \CF_eexpsecond{\draw[}{\useKV[charge]{|style}}](-\CF_halflength pt,0)--(\CF_halflength pt,0);%
+ \endtikzpicture
+ \endgroup
+}
+\def\CF_enableshortcuts{%
+ \let\CF_saveddot \.\let\.\chargedot
+ \let\CF_savedddot\:\let\:\chargeddot
+ \let\CF_savedrect\"\let\"\chargerect
+ \let\CF_savedline\|\let\|\chargeline
+ \let\enableshortcuts\relax
+ \let\disableshortcuts\CF_disableshortcuts
+}
+\def\CF_disableshortcuts{%
+ \let\.\CF_saveddot
+ \let\:\CF_savedddot
+ \let\"\CF_savedrect
+ \let\|\CF_savedline
+ \let\enableshortcuts\CF_enableshortcuts
+ \let\disableshortcuts\relax
+}
+\def\charge{%
+ \begingroup
+ \catcode`\: 12
+ \charge_a{true}%
+}
+\def\Charge{%
+ \begingroup
+ \catcode`\: 12
+ \charge_a{false}%
+}
+\def\charge_a#1#2{% #1=TF #2=liste emplacements
+ \CF_testopt{\charge_b{#1}}{}#2\_nil
+}
+\def\charge_b#1[#2]#3\_nil{%
+ \charge_c{#1}[#2]{#3}%
+}
+\def\charge_c#1[#2]#3#4{% #1=TF pour overlay, #2= rglages, #3=liste d'emplacements, #4=atome
+ \setcharge{overlay=#1,#2}%
+ \setbox\CF_chargebox\hbox{\useKV[charge]{macro atom}{#4}}%
+ \CF_ifinsidetikz
+ {\pgfinterruptpicture
+ \let\CF_atendofcharge\endpgfinterruptpicture
+ }
+ {\let\CF_atendofcharge\relax
+ }%
+ \expanded{\noexpand
+ \tikzpicture[every node/.style={%
+ \ifboolKV[charge]{debug}{draw=red,}{}%
+ anchor=base,%
+ inner sep=0pt,%
+ outer sep=0pt,%
+ minimum size=0pt},%
+ baseline]}%
+ \expanded{\noexpand
+ \node[%
+ \ifboolKV[charge]{circle}{circle,}{}%
+ \ifboolKV[charge]{debug}{draw=green,}{}%
+ anchor=base%
+ ]}%
+ (atombox)at(0,0)%
+ {\copy\CF_chargebox};% noeud contenant l'atome
+ \expanded{\noexpand
+ \node[%
+ \ifboolKV[charge]{circle}{circle,}{}%
+ \ifboolKV[charge]{debug}{draw=blue,}{}%
+ anchor=base,%
+ inner sep=\useKV[charge]{extra sep},%
+ overlay%
+ ]}%
+ (atom)at(0,0){%
+ \vrule width0pt height\ht\CF_chargebox depth\dp\CF_chargebox
+ \vrule width\wd\CF_chargebox height\CF_zero depth\CF_zero};% noeud pour placer les charges
+ \let\enableshortcuts\relax
+ \let\disableshortcuts\relax
+ \ifboolKV[charge]{shortcuts}\CF_enableshortcuts{}% l'atome n'est _PAS_ concern par les racourcis
+ \charge_d#3,\CF_quark=%
+ \endtikzpicture
+ \CF_atendofcharge
+ \endgroup
+}
+\def\charge_d#1={%
+ \CF_ifx\CF_quark{#1}%
+ {}
+ {\expandafter\charge_e\expanded{\skv_removelastspaces{#1}}=}%
+}
+\def\charge_e#1={%
+ \CF_ifinstr{#1}[
+ {\charge_f#1=}
+ {\charge_f#1[]=}%
+}
+\def\charge_f#1[#2]={%
+ \CF_ifinstr{#1}:
+ {\charge_g#1[#2]=}
+ {\charge_g#1:0pt[#2]=}%
+}
+\def\charge_g#1:#2[#3]=#4,{% #1=angle, #2=offset, #3=code tikz charge, #4=charge
+ \CF_eexpsecond\CF_ifinteger{\skv_removeextremespaces{#1}}
+ {\pgfmathsetmacro\chargeangle{mod(#1,360)}%
+ }
+ {\pgfmathanglebetweenpoints{\pgfpointanchor{atom}{center}}{\pgfpointanchor{atom}{\skv_removeextremespaces{#1}}}%
+ \let\chargeangle\pgfmathresult% incorrect si (atom.center==atom.#1) && (extra sep==0) TODO: mettre un warning ?
+ }%
+ \edef\CF_offset{\the\dimexpr#2+0pt}%
+ \CF_distancebetweenpoints{atom}{center}{atom}{\skv_removeextremespaces{#1}}\CF_chargedistance
+ \CF_eexpafter{\node[anchor=center,}{\ifboolKV[charge]{overlay}{overlay,}{}}#3]%
+ at([shift=(\chargeangle:\CF_chargedistance pt+\CF_offset)]atom.center){\useKV[charge]{macro charge}{#4}};%
+ \charge_d
+}
+
\def\Lewis{%
+ \CF_warning{\string\Lewis\space is unmaintained and is likely to be removed in a near future. Please, use \string\Charge.}%
\CF_lewisoverlayfalse
\CF_testopt\CF_lewisa{}%
}
\def\lewis{%
+ \CF_warning{\string\lewis\space is unmaintained and is likely to be removed in a near future. Please, use \string\charge.}%
\CF_lewisoverlaytrue
\CF_testopt\CF_lewisa{}%
}
@@ -1565,13 +1769,13 @@
\def\CF_lewisa[#1]{%
\begingroup
\CF_doifnotempty{#1}{\setchemfig{#1}}%
- \CF_valuetomacro\CF_lewiswidthdouble[0.3ex]{lewis | width}%
- \CF_valuetomacro\CF_lewisoffset [0.4ex]{lewis sep}%
- \CF_valuetomacro\CF_lewislength [1.5ex]{lewis length}%
- \CF_valuetomacro\CF_lewisstyle []{lewis style}%
- \CF_valuetomacro\CF_lewisdist [0.3em]{lewis dist}%
- \CF_valuetomacro\CF_lewisradius [0.15ex]{lewis radius}%
- \CF_valuetomacro\CF_lewisdiagcoeff [1]{lewis diag coeff}%
+ \CF_valuetomacro[chemfig]\CF_lewiswidthdouble[0.3ex]{lewis | width}%
+ \CF_valuetomacro[chemfig]\CF_lewisoffset [0.4ex]{lewis sep}%
+ \CF_valuetomacro[chemfig]\CF_lewislength [1.5ex]{lewis length}%
+ \CF_valuetomacro[chemfig]\CF_lewisstyle []{lewis style}%
+ \CF_valuetomacro[chemfig]\CF_lewisdist [0.3em]{lewis dist}%
+ \CF_valuetomacro[chemfig]\CF_lewisradius [0.15ex]{lewis radius}%
+ \CF_valuetomacro[chemfig]\CF_lewisdiagcoeff [1]{lewis diag coeff}%
\ifCF_lewisoverlay
\CF_addtomacro\CF_lewisstyle{,overlay}%
\fi
@@ -1585,6 +1789,12 @@
\def\CF_lewisc#1,#2\_nil{%
\setbox\CF_boxlewis\hbox{\printatom{#2}}% mettre en dehors de tikzpicture (si \printatom ne passe pas en mode math)
+ \CF_ifinsidetikz
+ {\pgfinterruptpicture
+ \let\CF_atendoflewis\endpgfinterruptpicture
+ }
+ {\let\CF_atendoflewis\relax
+ }%
\tikzpicture[every node/.style={anchor=base,inner sep=0pt,outer sep=0pt,minimum size=0pt},baseline]%
\CF_makeother;\CF_makeother:%
\node(CF_lewis@anchor){};
@@ -1637,6 +1847,7 @@
\repeat
\node[anchor=base west]at(CF_lewis@anchor){\box\CF_boxlewis};%
\endtikzpicture
+ \CF_atendoflewis
}
\def\Chembelow{\begingroup\let\CF_temp\CF_gobarg\CF_chembelowa}
@@ -1778,9 +1989,9 @@
\def\CF_andb#1{%
\CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_signspaceante\CF_signspacepost\CF_signvshift
- \CF_doifempty\CF_signspaceante{\CF_valuetomacro\CF_signspaceante[0.5em]{+ sep left}}%
- \CF_doifempty\CF_signspacepost{\CF_valuetomacro\CF_signspacepost[0.5em]{+ sep right}}%
- \CF_doifempty\CF_signvshift{\CF_valuetomacro\CF_signvshift[0pt]{+ vshift}}%
+ \CF_doifempty\CF_signspaceante{\CF_valuetomacro[chemfig]\CF_signspaceante[0.5em]{+ sep left}}%
+ \CF_doifempty\CF_signspacepost{\CF_valuetomacro[chemfig]\CF_signspacepost[0.5em]{+ sep right}}%
+ \CF_doifempty\CF_signvshift{\CF_valuetomacro[chemfig]\CF_signvshift[0pt]{+ vshift}}%
\raise\CF_signvshift\hbox{\kern\CF_signspaceante$+$\kern\CF_signspacepost}%
}
@@ -1791,23 +2002,23 @@
}
\def\CF_schemestarta[#1]{%
- \CF_valuetomacro\CF_defaultcompoundstyle[]{compound style}%
+ \CF_valuetomacro[chemfig]\CF_defaultcompoundstyle[]{compound style}%
\CF_setstyle#1,\CF_quark,\CF_quark\_nil\CF_arrowangle\CF_arrowlength\CF_arrowstyle
- \CF_doifempty\CF_arrowangle{\CF_valuetomacro\CF_arrowangle[0]{arrow angle}}%
- \CF_doifempty\CF_arrowlength{\CF_valuetomacro\CF_arrowlength[1]{arrow coeff}}%
- \CF_valuetomacro\CF_defaultarrowstyle[]{arrow style}%
- \CF_valuetomacro\CF_arrowoffset[1em]{arrow offset}%
- \CF_valuetomacro\CF_compoundsep[5em]{compound sep}%
- \CF_valuetomacro\CF_arrowlabelsep[3pt]{arrow label sep}%
- \CF_valuetomacro\CF_arrowhead[-CF]{arrow head}%
+ \CF_doifempty\CF_arrowangle{\CF_valuetomacro[chemfig]\CF_arrowangle[0]{arrow angle}}%
+ \CF_doifempty\CF_arrowlength{\CF_valuetomacro[chemfig]\CF_arrowlength[1]{arrow coeff}}%
+ \CF_valuetomacro[chemfig]\CF_defaultarrowstyle[]{arrow style}%
+ \CF_valuetomacro[chemfig]\CF_arrowoffset[1em]{arrow offset}%
+ \CF_valuetomacro[chemfig]\CF_compoundsep[5em]{compound sep}%
+ \CF_valuetomacro[chemfig]\CF_arrowlabelsep[3pt]{arrow label sep}%
+ \CF_valuetomacro[chemfig]\CF_arrowhead[-CF]{arrow head}%
\CF_eexpsecond{\def\CF_arrowtip}{\expandafter\CF_gobarg\CF_arrowhead}%
\CF_eexpsecond{\CF_preaddtomacro\CF_defaultarrowstyle}{\useKV[chemfig]{arrow head},}%
\CF_ifx\empty\CF_arrowstyle
{\let\CF_arrowstyle\CF_defaultarrowstyle}
{\CF_expsecond{\CF_preaddtomacro\CF_arrowstyle}{\CF_defaultarrowstyle,}}% se rajoute aprs le style par dfaut
- \CF_valuetomacro\CF_arrowdoublesep[2pt]{arrow double sep}%
+ \CF_valuetomacro[chemfig]\CF_arrowdoublesep[2pt]{arrow double sep}%
\pgfmathsetmacro\CF_arrowdoublesep{\CF_arrowdoublesep/2}%
- \CF_valuetomacro\CF_arrowdoubleposstart[0.6]{arrow double coeff}%
+ \CF_valuetomacro[chemfig]\CF_arrowdoubleposstart[0.6]{arrow double coeff}%
\pgfmathsetmacro\CF_arrowdoubleposstart{(1-\CF_arrowdoubleposstart)/2}%
\pgfmathsetmacro\CF_arrowdoubleposend{1-\CF_arrowdoubleposstart}%
\ifboolKV[chemfig]{scheme debug}
@@ -2843,4 +3054,13 @@ v1.41 2019/05/21
les dlimiteurs sont automatiquement inclins
- nouvelle cl "rotate" qui n'a de sens que si halign=false ET
auto rotate=false : l'inclinaison des dlimiteurs peut tre
- choisie \ No newline at end of file
+ choisie
+----------------------------------------------------------------------
+v1.5 2020/03/05
+ - nouvelles macros \charge et \Charge. Les macros \lewis et \Lewis
+ sont obsoltes et amenes disparaitre moyen terme (au moins
+ 9 mois), soit fin 2020
+ - prise en compte de la dimension d'un groupe d'atome pour tracer
+ des liaisons jointives
+ - bug corrig dans \CF_seeknode
+ - ajout d'une section dans le manuel (placement des atomes) \ No newline at end of file
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/README.md b/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/README.md
new file mode 100644
index 0000000000..4959b4cd89
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/README.md
@@ -0,0 +1,42 @@
+# biblatex-ajc2020unofficial
+
+An *unofficial* `biblatex` style files for Australasian Journal of Combinatorics.
+Note that the journal (as for 01 March 2020) does not accept `biblatex`,
+so you probably want to use [`biblatex2bibitem`](https://gitlab.com/Nickkolok/biblatex2bibitem).
+
+This is de-facto fork of [`biblatex-math`](https://github.com/konn/biblatex-math).
+
+## License
+
+LPPL - LaTeX Project Public License v1.3c+, DFSG compat.
+
+## Options
+
+<dl>
+<dt><code>sentencedtitle</code> (default: <code>false</code>)</dt>
+<dd>
+Whether to make title alphabet sentence-style or not.
+If <code>true</code>, for example, <code>The Proof of Riemann Hypothesis</code> will be rendered as "The proof of riemann hypothesis". To prevent letters to be downcased, you can use braces: <code>The Proof of {Riemann} Hypothesis</code> will result in <code>The proof of Riemann hypothesis</code>.
+You also have to embrace maths with <code>{</code> and <code>}</code>, as in <code>A short proof of {$1 + 1 \neq 2$}</code>, otherwise LaTeX halts with an error.
+</dd>
+<dt><code>dashed</code> (default: <code>false</code>)</dt>
+<dd>Whether to omit the same author(s) by <code>_____</code>, as in <code>amsrefs</code>.
+**Not recommended for AJC, but left here for compatibility reasons.**</dd>
+</dl>
+
+## Usage
+
+1. Copy the two files ( `biblatex-ajc2020unofficial.bbx` and `biblatex-ajc2020unofficial.cbx` ) into the folder with your paper
+or install them globally (manually or from CTAN);
+
+2. Use `biblatex` with `style=ajc2020unofficial` option, e.g.
+```latex
+\usepackage[backend=biber,style=ajc2020unofficial]{biblatex}
+
+```
+
+## Project pages
+
++ [GitLab](https://gitlab.com/Nickkolok/biblatex-ajc2020unofficial)
+
++ [CTAN](https://ctan.org/pkg/biblatex-ajc2020unofficial)
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.bbx
new file mode 100644
index 0000000000..7b52892aae
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.bbx
@@ -0,0 +1,73 @@
+\ProvidesFile{ajc2020unofficial.bbx}[2020/03/03 v0.0.1 unofficial biblatex bibliography style for Australasian Journal of Combinatorics]
+
+\RequireBibliographyStyle{numeric}
+\RequireCitationStyle{numeric}
+
+\ExecuteBibliographyOptions{labelnumber,firstinits=true,sorting=nyt}
+
+
+\RequireBibliographyStyle{standard}
+\newbibmacro*{bbx:savehash}{%
+ \savefield{fullhash}{\bbx@lasthash}}
+\DeclareBibliographyOption[boolean]{dashed}[false]{%
+ \ifstrequal{#1}{true}{
+ \ExecuteBibliographyOptions{pagetracker}%
+ \renewbibmacro*{bbx:savehash}{\savefield{fullhash}{\bbx@lasthash}}
+ }{
+ \renewbibmacro*{bbx:savehash}{}
+ }
+}
+\DeclareBibliographyOption[boolean]{sentencetitle}[false]{%
+ \ifstrequal{#1}{true}{%
+ \DeclareFieldFormat{titlecase}{\MakeSentenceCase*{##1}}%
+ }{
+ \DeclareFieldFormat{titlecase}{{##1}}%
+ }%
+}
+\ExecuteBibliographyOptions{sentencetitle,dashed}
+
+\renewcommand*{\bibfont}{\footnotesize}
+\renewcommand*{\subtitlepunct}{\textup{\addcolon}\space}
+\renewcommand*{\newunitpunct}{\addcomma\space}
+\renewcommand*{\mkbibquote}[1]{\mkbibemph{#1}}
+\renewcommand*{\labelnamepunct}{\addcomma\space}
+\renewbibmacro*{in:}{}
+\renewbibmacro*{author}{%
+ \ifboolexpr{
+ test \ifuseauthor
+ and
+ not test {\ifnameundef{author}}
+ }
+ {\usebibmacro{bbx:dashcheck}
+ {\bibnamedash}
+ {\printnames{author}%
+ \setunit{\addcomma\space}%
+ \usebibmacro{bbx:savehash}}%
+ \usebibmacro{authorstrg}}
+ {\global\undef\bbx@lasthash}}
+
+\DeclareFieldFormat{journaltitle}{\textup{#1}}
+\DeclareFieldFormat{booktitle}{\textup{#1}}
+\DeclareFieldFormat[article]{number}{\mkbibbold{#1}}
+\DeclareFieldFormat[book]{number}{\mkbibbold{#1}}
+\DeclareFieldFormat
+ [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
+ {title}{\mkbibemph{#1\isdot}}
+
+\newbibmacro*{bbx:dashcheck}[2]{%
+ \ifboolexpr{
+ test {\iffieldequals{fullhash}{\bbx@lasthash}}
+ and
+ not test \iffirstonpage
+ }
+ {#1}
+ {#2}}
+\renewcommand*{\bibnamedash}{\rule{3em}{0.4pt}\hspace*{.16667em}\addcomma\addspace}
+
+
+\DeclareFieldFormat{pages}{#1}
+\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}\isdot}
+\DeclareFieldFormat*{title}{#1}
+
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.cbx
new file mode 100644
index 0000000000..77c0589e7c
--- /dev/null
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-ajc2020unofficial/ajc2020unofficial.cbx
@@ -0,0 +1,4 @@
+\ProvidesFile{ajc2020unofficial.cbx}[2020/03/03 v0.0.1 unofficial biblatex bibliography style for Australasian Journal of Combinatorics]
+\RequireCitationStyle{numeric}
+
+\endinput
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
index a0bb4f301c..c3f3656ea0 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md
@@ -1,4 +1,4 @@
-<b>Date of last change: 2019-08-28 to version v1.0s</b>
+<b>Date of last change: 2020-03-04 to version v1.0t</b>
# biblatex-gb7714-2015: a biblatex style package
@@ -22,211 +22,25 @@ A biblatex implementation of the `GB/T 7714-2015` bibliography style for Chinese
The biblatex-gb7714-2015 package provides an implementation of the bibliography style of the `GB/T 7714-2015` bibliography style. This implementation follows `GB/T 7714-2015` standard, and can be used simply by loading biblatex with the appropriate option
----------------------------------------------------------
-
-## Need to do:
-
- * special characters in all fields?
- * entry without author: the delimiter between title and year?
- * TEST FOR texlive 2015,2016,2017
-
-
-
-## Usage
-* for numerical sequence style: gb7714-2015
-
- `\usepackage[backend=biber,style=gb7714-2015]{biblatex}`
-
- - add an option `gbalign` to control the align style of the numerical label:
-
- `gbalign=right` for the label ragged left in a list environment, this is the default setting.
-
- `gbalign=center` for the same width label in a list environment with the number centered in a wrapper like bracket []
-
- `gbalign=left` for the label ragged right in list environment
-
- `gbalign=gb7714-2015` for the label in paragraph with same separation space between label and content of the reference entry
-
- `\usepackage[backend=biber,style=gb7714-2015,gbalign=gb7714-2015]{biblatex}`
-
- - add an option `gbpub` for dealing publishing items (This option is also for author-year style):
-
- `gbpub = true` for gb7714 style, to print `[出版者不详]` and the like when publisher or address is absent, this is the default setting.
-
- `gbpub = false` for standard style, not to print the additional infomation.
-
- `\usepackage[backend=biber,style=gb7714-2015,gbpub=true]{biblatex}`
-
- - add an option `gbnamefmt` for dealing author name's letter case (This option is also for author-year style):
-
- `gbnamefmt = uppercase` for gb7714 style, to capitalize all the letters of the name, like: ZHANG M L, this is the default setting.
-
- `gbnamefmt = lowercase` for gb7714 style, do no case switch of the name, like: Zhang M L
-
- `gbnamefmt = givenahead` for standard style, given-family style, like: M. L. Zhang as the ieee style
-
- `gbnamefmt = familyahead` for standard style, family-given style, like: Zhang, M. L. as the apa style.
-
- `gbnamefmt = pinyin` for a common Chinese style, like: ZHANG Min-li, YI Shi-he and so on.
-
- `gbnamefmt = reserveorder` for standard style:family-given/given-family style
-
- the name format can be set per-entry using a field `nameformat`, add this field like `nameformat={pinyin}` to an entry in the bib file to set the entry's name format.
-
- `\usepackage[backend=biber,style=gb7714-2015,gbnamefmt=uppercase]{biblatex}`
-
- - add an option `gbbiblabel` to control the format of the numerical label:
-
- `gbbiblabel=bracket` for the numerical number in the label wrapped by bracket, like: [1], this is the default setting.
-
- `gbbiblabel=parens` for the numerical number in the label wrapped by parenthesis, like: (1)
-
- `gbbiblabel=plain` for the numerical number in the label wrapped by nothing, like: 1
-
- `gbbiblabel=dot` for the numerical number in the label followed with dot, like: 1.
-
- `gbbiblabel=box` for the numerical number in the label wrapped by box which generated by `\framebox`
-
- `gbbiblabel=circle` for the numerical number in the label wrapped by circle which generated by `\textcircled`
-
- `\usepackage[backend=biber,style=gb7714-2015,gbbiblabel=bracket]{biblatex}`
-
- - add an option `gbtype` to control the output of the reference type and carrier identifier like [J/OL] (This option is also for author year style):
-
- `gbtype = true` for gb7714 style, print a title with the identifier, like: `an on-line article [J/OL]`, this is the default setting.
-
- `gbtype = false` for none identifier, print a title without identifier, like: `an on-line article`
-
- `\usepackage[backend=biber,style=gb7714-2015,gbtype=true]{biblatex}`
-
- - add an option `gbfieldtype` to control the output of field type:
-
- `gbfieldtype = true` to print type field, like the thesis type: `PHD thesis` or `博士学位论文`。please use `\DefineBibliographyStrings{english}{mathesis={str you want}}`,`\DefineBibliographyStrings{english}{phdthesis={str you want}}`,
- `\DefineBibliographyStrings{english}{mathesiscn={str you want}}`,`\DefineBibliographyStrings{english}{phdthesiscn={str you want}}` to
- define the output string, or set it in bibfile like: `type={str you want},`
-
- `gbfieldtype = false` not to print type field.
+biblatex-gb7714-2015 宏包是中文参考文献著录/标注标准 `GB/T 7714-2015` 的 biblatex 实现。它本质上是一个样式包,提供了顺序编码制和著者年份制样式,在 tex 文档中配合 biblatex 宏包使用,以生成满足《GB/T 7714-2015 信息与文献 参考文献著录规则》要求的参考文献。除了具备 biblatex 提供的不同于传统基于 bibtex 的参考文献解决方案的特点外,还具有如下特点:
- `\usepackage[backend=biber,style=gb7714-2015,gbfieldtype=true]{biblatex}`
-
-
- - add an option `gbpunctin` to control the output of `//` before bookauthor for entrytypes like inbook/incollection/inproceedings(This option is also for author year style):
-
- `gbpunctin=true` for gb7714 style, to output `//`, this is the default setting
-
- `gbpunctin=false` for standard style, to output a bibstring, for English it is `IN:`, If you want to eliminate it at all, please redefine the bibstring like `\DefineBibliographyStrings{english}{in={}}` and `\DefineBibliographyStrings{english}{incn={}}`in the preamble.
+* 较强的兼容性。能够兼容 biblatex v2.8 以上版本;能够兼容国标样式的一些常用条目类型、数据域。
- `\usepackage[backend=biber,style=gb7714-2015,gbpunctin=true]{biblatex}`
-
- - add an option `gbctexset` to control the bibliography heading's setting method (This option is also for author year style):
-
- `gbctexset=true` , the bibliography heading can be set by `\bibname` or `\refname`, this is the default setting.
-
- `gbpunctin=false`, the heading can be set by bibstring like `\DefineBibliographyStrings{english}{bibliography={title you want}}` or `\DefineBibliographyStrings{english}{references={title you want}}`
-
- or alternatively, it can also be set through the printbibliography option `title`, like `printbibliography[title=title you want]`.
-
- `\usepackage[backend=biber,style=gb7714-2015,gbctexset=true]{biblatex}`
-
- - add an option `gbcodegbk` to deal the tex source file encoded with GBK (This option is also for author year style):
-
- `gbcodegbk=true` , if you want to compile the GBK encoded source file with pdflatex or latex
-
- `gbcodegbk=false`, if you want to compile the utf-8 endcoded source file with xelatex, this is the default setting.
-
- `\usepackage[backend=biber,style=gb7714-2015,gbcodegbk=true]{biblatex}`
-
- - add an option `gbtitlelink` to control the hyperlink of title field (This option is also for author year style):
-
- `gbtitlelink = false` not to add hyperlink, this is the default setting.
-
- `gbtitlelink = true` to set the title as a hyperlink.
-
- `\usepackage[backend=biber,style=gb7714-2015,gbtitlelink=true]{biblatex}`
-
- - add an option `gbfootbib` to control the bibliography in footnote (This option is also for author year style):
-
- `gbfootbib = true` make patches to match the standard, this is the default setting.
-
- `gbfootbib = false` not to patch.
-
- `\usepackage[backend=biber,style=gb7714-2015,gbtitlelink=true]{biblatex}`
-
- - add options `gbcitelocal` `gbbiblocal` to control the local strings in citation and bibliography respectively, the `gblocal` set the both options (These options are also for author year style):
-
- `gbcitelocal = gb7714-2015` to output local strings according to the reference's language, this is the default setting.
-
- `gbcitelocal = chinese` to output local strings with chinese language word like "等".
-
- `gbcitelocal = english` to output local strings with western language word like "et al.".
-
- `\usepackage[backend=biber,style=gb7714-2015,gbcitelocal = chinese]{biblatex}`
-
- - add an option `gbstrict` to control the output of some unnecessary fields for GB/T7714-2015 (This option is also for author year style).
-
- `gbstrict=true`, not to print those fields such as language, eprint, this is the default setting.
-
- `gbstrict=false`, to output them as the standard style
-
- `\usepackage[backend=biber,style=gb7714-2015,gbstrict=true]{biblatex}`
-
- - add an option `gbfieldstd` to control the format of some fields such as title, url and pages (This option is also for author year style):
-
- `gbfieldstd = false` for gb7714 style, format of the fields follows the GB/T7714-2015 standard, this is the default setting.
-
- `gbfieldstd = true` for standard style.
-
- `\usepackage[backend=biber,style=gb7714-2015,gbfieldstd=true]{biblatex}`
-
+* 较高的易用性。标注/著录格式完全由样式实现,不必为排序、多语言等问题手动处理bib文件;提供了丰富的标注(引用)命令,包括一些中文中习惯的命令;提供了多语言对照,多语言文献表等功能。
-
-* for multi-style: gb7714-2015ms
+* 较大的灵活性。提供丰富的选项来帮助用户进行排序调整、著录项(姓名、出版项、文献标识符、标题超链接)格式调整、文献表格式(标签对齐、标签格式、条目格式、字体、段落格式)调整、编码兼容。
- In order to use two styles in a tex file, add a style gb7714-2015ms. option `gbstyle` is added to control the using mode. `gbstyle=true` means all references are printed with GB/T7714-2015 style, and `gbstyle=false` means the chinese references are printed with GB/T7714-2015 style while the other references are printed with standard style shipped by biblatex, and `gbstyle=true` is the default set. all the options for numerical sequence style gb7714-2015 can also be used in gb7714-2015ms.
-
- `\usepackage[backend=biber,style=gb7714-2015ms,gbstyle=false]{biblatex}`
+* 较好的维护性。样式代码主要是在标准样式基础上提供的中文国标解决方案,保持与标准样式一致的结构、风格和习惯,并提供详尽的注释,用户可轻松理解,并可在其基础上进一步修改以实现其它要求的样式,比如宏包附带的chinese-erj样式,就是基于本样式实现的经济学研究期刊的参考文献样式。
-* for author year style: gb7714-2015ay
+简单使用说明见:[使用入门](#jumptotutorial)
- `\usepackage[backend=biber,style=gb7714-2015ay,gbpub=true]{biblatex}`
-
- - add an option `gbnoauthor` for dealing undefined author:
-
- `gbnoauthor = true` for gb7714 style, to print `佚名` or `Anon` when the author of the entry is absent.
-
- `gbnoauthor = false` for standard style, not to pring anything, this is the default setting.
-
- `\usepackage[backend=biber,style=gb7714-2015ay,gbnoauthor=true]{biblatex}`
-
- - add an option value `mergedate=none` to control the date in bibliography:
-
- `mergedate=true` to output date only after author,like:LAMPORT L, (1986). Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA.
-
- `mergedate=false` to output date after author and in publish items,like:LAMPORT L, (1986). Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA, 1986.
-
- `mergedate=none` to output date only in publish items,like:LAMPORT L. Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA, 1986.
-
- do not set mergedate output like:LAMPORT L, 1986. Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA.
-
- `\usepackage[backend=biber,style=gb7714-2015ay,mergedate=none]{biblatex}`
-
- - add an option `gblanorder` to control sequence of reference groups of different languagesin the bibliography:
-
- `gblanorder=chineseahead` to set the sequence as: cn;jp;kr;en;fr;ru
-
- `gblanorder=englishahead` to set the sequence as: en;fr;ru;cn;jp;kr
-
- `gblanorder=user defined string like: cn;en;jp;kr;fr;ru` to set the sequence as: cn;en;jp;kr;fr;ru.
-
- `\usepackage[backend=biber,style=gb7714-2015ay,gblanorder=cn;en;jp;fr;kr;ru]{biblatex}`
-
-* for perl script transformation tool(only for the numerical style)
-
- `perl gb7714texttobib.pl in=textfilename out=bibfilename`
+---------------------------------------------------------
-A demonstration database is provided to show how to format input for the style. The biblatex-gb7714-2015 style works with texlive2014, texlive2015, texlive2016, texlive2017 , texlive2018 and so on.
+## Need to do:
-please see the file 'biblatex-gb7714-2015.pdf' for further information!
+ * special characters in all fields?
+ * entry without author: the delimiter between title and year?
+ * TEST FOR texlive 2015,2016,2017
## Applications
@@ -246,8 +60,6 @@ please see the file 'biblatex-gb7714-2015.pdf' for further information!
* [...]
-
-
## Related Links
* [Biblatex 宏包](https://github.com/plk/biblatex)
@@ -265,12 +77,54 @@ please see the file 'biblatex-gb7714-2015.pdf' for further information!
---------------------------------------------------------
<h2 id="jumptotutorial">Tutorial/使用入门</h2>
+[//]: # "这里这种方式不适合可能主要是因为标题所导致,因此用上面的方式进行处理"
-[comment]: # (这里这种方式不适合可能主要是因为标题所导致,因此用上面的方式进行处理
-<span id="jumptotutorial">## Tutorial/使用入门</span>)
+<h3 id="jumptopkgload">0. pacakge usage/宏包加载方式</h3>
+样式包配合biblatex使用,即在biblatex调用时加载样式包:
+
+* 使用顺序编码制:
+
+```
+ \usepackage[backend=biber,style=gb7714-2015]{biblatex}
+```
+
+* 使用著者-出版年制:
+
+```
+ \usepackage[backend=biber,style=gb7714-2015ay]{biblatex}
+```
+
+* 使用宏包提供的选项:
+
+```
+ %设置gbalign选项以改变文献表序号标签对齐方式,
+ %设置gbpub=false取消缺省出版项自填补信息,比如:
+ \usepackage[backend=biber,style=gb7714-2015,gbalign=gb7714-2015,gbpub=false]{biblatex}
+```
+
+* 使用同一文献表中不同语言区分著录格式的样式(gb7714-2015ms):
+
+```
+ %设置gbstyle=false,中文文献使用GB/T 7714-2015著录格式,而其它语言文献使用biblatex标准样式
+ \usepackage[backend=biber,style=gb7714-2015ms,gbstyle=false]{biblatex}
+```
+
+* 同一文档中不同文献分节区分不同著录格式的样式(gb7714-2015mx):
+
+```
+ %gb7714-2015mx默认使用顺序编码制样式
+ \usepackage[backend=biber,style=gb7714-2015mx]{biblatex}
+ %如需在某一参考文件分节使用著者年份制样式,比如第2个refsection中使用时,则在导言区设置:
+ \setaystylesection{2}
+```
+
+更多宏包选项的说明见:[biblatex-gb7714-2015.pdf](biblatex-gb7714-2015.pdf)
+
+宏包加载的完整文档示例见:[tex文档一般结构](#jumptotexsrcf)
<h3 id="jumptotexsrcf">1. Tex source file/tex文档一般结构</h3>
+注意其中加载biblatex宏包的代码:
```
\documentclass{article}%文档类%导言区开始:
@@ -299,7 +153,7 @@ citestyle=gb7714-2015%,backref=true%%其中后端backend使用biber
}
@Book{蔡敏2006--,
- Title = {UML基础和Rose建模教程},
+ Title = {UML基础和Rose建模教程},27
Address = {北京},
Author = {蔡敏 and 徐慧慧 and 黄柄强},
Publisher = {人民邮电出版社},
@@ -330,7 +184,7 @@ citestyle=gb7714-2015%,backref=true%%其中后端backend使用biber
4. 顺序编码制中同时输出作者和顺序编码标签,比如:\\
见\citeauthor{蔡敏2006--}\cite{蔡敏2006--}\\
- 见\authornumcite{蔡敏2006--}\\
+ 见\authornu*mcite{蔡敏2006--}\\
见\textcite{蔡敏2006--} (顺序编码标签不上标)
5. 作者年制文中已有作者还需要年份和页码(顺序编码制与pagescite作用相同,作者年制年份行内页码上标):\\
@@ -373,7 +227,7 @@ citestyle=gb7714-2015%,backref=true%%其中后端backend使用biber
### 3. Recommended environment/推荐使用环境
-
+
- Texlive+Winedt
- Texlive+Texstudio
- texlive及其它发行版安装见[安装指南](https://github.com/sjtug/SJTUThesis/wiki/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97)
@@ -385,58 +239,89 @@ citestyle=gb7714-2015%,backref=true%%其中后端backend使用biber
* <b>怎么利用biblatex生成国标GB/T 7714-2015格式的参考文献表?</b>
-> (1)在导言区加载biblatex宏包,并使用gb7714-2015样式:
+(1)在导言区加载biblatex宏包,并使用gb7714-2015样式:
-```\usepackage[backend=biber,style=gb7714-2015]{biblatex}```
+``` \usepackage[backend=biber,style=gb7714-2015]{biblatex}```
-> (2)正文中引用参考文献:
+(2)正文中引用参考文献:
-```见文献\cite{referencbibtexkey}```
+``` 见文献\cite{referencbibtexkey}```
-> (3)在需要的地方打印参考文献表:
+(3)在需要的地方打印参考文献表:
```\printbibliography```
-
更直接的例子见前述的[tex源文档](#jumptotexsrcf)
+
* <b>请问我应该怎么安装和更新biblatex-gb7714-2015宏包?</b>
-> biblatex-gb7714-2015宏包是基于biblatex的样式宏包,目前texlive,miktex都已收录,因此可以直接使用,一般不需要安装。如果使用时,系统提示找不gb7714-2015.bbx或gb7714-2015ay.bbx文件的错误,说明当前tex系统未安装biblatex-gb7714-2015样式包,这时需要安装它。最简单的方法是从本项目源码中下载 gb7714-2015.bbx, gb7714-2015ay.bbx, gb7714-2015.cbx, gb7714-2015ay.cbx 四个文件放到你要编译的主文档所在目录,如果需要使用gbk编码,则还需复制 gb7714-2015-gbk.def 文件。对于已经安装的用户需要更新到最新版,则可以下载这些文件替换系统已经安装的文件。
+
+biblatex-gb7714-2015宏包是基于biblatex的样式宏包,目前texlive,miktex都已收录,因此可以直接使用,一般不需要安装。
+
+如果使用时,系统提示找不gb7714-2015.bbx或gb7714-2015ay.bbx文件的错误,说明当前tex系统未安装biblatex-gb7714-2015样式包,这时需要安装它。
+
+最简单的方法是从本项目源码中下载 gb7714-2015.bbx, gb7714-2015ay.bbx, gb7714-2015.cbx, gb7714-2015ay.cbx 四个文件放到你要编译的主文档所在目录,如果需要使用gbk编码,则还需复制 gb7714-2015-gbk.def 文件。对于已经安装的用户需要更新到最新版,也可以下载这些文件替换系统已经安装的文件。
+
+
+
+* <b>请问使用时biblatex-gb7714-2015宏包时出现错误“ Package xkeyval Error: gb****** ' undefined in families blx@opt@pre'. [\blx@processoptions] ”?</b>
+
+
+
+因为宏包的功能不断增加和完善,当在tex源文档中,使用新版中的一些选项时,而系统中的biblatex-gb7714-2015宏包是旧版时,就会出现`gb****`选项未定义的错误。解决方法就是更新biblatex-gb7714-2015宏包。更新方法见上一个问题。
* <b>为什么我之前使用样式`style=caspervector`进行编译没有问题,换成`style=gb7714-2015`后,编译就出现错误?</b>
-
-> 可能有三个原因:
-> 1. 辅助文件没有清理导致,当采用caspervector样式时编译产生的辅助文件中可能带有该样式的一些特有信息,由此产生一些不兼容。因此需要的操作是,清除辅助文件,然后再进行编译。清除命令为(下面的命令是windows下的,linux下的是类似的只需把删除命令换成`rm -f`):
+可能有三个原因:
+
+(1) 辅助文件没有清理导致,当采用caspervector样式时编译产生的辅助文件中可能带有该样式的一些特有信息,由此产生一些不兼容。因此需要的操作是,清除辅助文件,然后再进行编译。清除命令为(下面的命令是windows下的,linux下的是类似的只需把删除命令换成`rm -f`):
```del /q *.aux *.bbl *.blg *.log *.out *.toc *.bcf *.xml *.synctex *.nlo *.nls *.bak *.ind *.idx *.ilg *.lof *.lot *.ent-x *.tmp *.ltx *.los *.lol *.loc *.listing *.gz *.synctex(busy) *.nav *.snm *.vrb *.fls *.xdv *.fdb_latexmk```
-> 2. biblatex-gb7714-2015 版本过于陈旧,旧版本对于一些特殊情况可能考虑不全面。因此需要的操作是更新biblatex-gb7714-2015,方法见上一个问题。
+(2) biblatex-gb7714-2015 版本过于陈旧,旧版本对于一些特殊情况可能考虑不全面。因此需要的操作是更新biblatex-gb7714-2015,方法见上一个问题。
+
+(3) 编译命令问题,通常情况下tex文档和bib文档是utf8编码的,因此最好采用xelatex编译,而不用pdflatex。因此如果编译时用pdflatex出现错误,请换成xelatex。
-> 3. 编译命令问题,通常情况下tex文档和bib文档是utf8编码的,因此最好采用xelatex编译,而不用pdflatex。因此如果编译时用pdflatex出现错误,请换成xelatex。
+* <b>为什么我编译文档后没有出现参考文献表?</b>
+
+当编译过程出现错误时,那么检查错误的原因,并解决它。
+当编译过程没有出现错误,那么很有可能是没有采用正确的命令进行文献编译,比如采用了传统的bibtex而不是biber。那么采用正确的编译命令重新编译即可:
+```
+xelatex jobname.tex
+biber jobname
+xelatex jobname.tex
+```
* <b>为什么利用 ctex2.9 套装进行编译时,出现错误?</b>
-> 由于ctex2.9套装多年未更新,其中的biblatex宏包过于陈旧,所以需要更新 biblatex。
-
-
-
+
+由于ctex2.9套装多年未更新,其中的biblatex宏包过于陈旧,所以需要更新 biblatex。
+
+
+
* <b>请问除了利用xelatex进行编译外,能不能用pdflatex进行编译?</b>
-> 能用pdflatex进行编译,但要注意的是因为某些样式比如authoryear等使用了xstring宏包中的一些命令,所以会产生错误,但numeric类样式通常没有问题。这一问题在biblatex更新到3.12版本后取消xstring宏包后得以解决。
-> 中文用户需要注意一些编码的问题。utf-8编码的文档,采用xelatex编译没有任何注意事项,但使用pdflatex编译时,需要给ctex宏包加载UTF8选项,比如`\usepackage[UTF8]{ctex}`或者在文档类加载时给出也可以比如`\documentclass[[UTF8]{article}`,同时引用文献时使用的引用关键词应使用英文。当文档使用其他编码时,xelatex编译通常需要指定一个文档编码,比如windows环境下的GB2312编码的文档需要指定`\XeTeXinputencoding "GBK"`, 否则显示乱码。使用pdflatex进行编译,如果biblatex不能正确的处理编码问题,那么需要为其明确的指定texencoding和bibencoding选项。比如windows环境下的GB2312编码的文档,需要指定`\usepackge[texencoding=GBK]{biblatex}`。
+能用pdflatex进行编译。但要注意的是因为某些样式比如authoryear等使用了xstring宏包中的一些命令,所以会产生错误,但numeric类样式通常没有问题。这一问题在biblatex更新到3.12版本后取消xstring宏包后得以解决。
+
+中文用户需要注意一些编码的问题:
+
+utf-8编码的文档,采用xelatex编译没有任何注意事项,但使用pdflatex编译时,需要给ctex宏包加载UTF8选项,比如`\usepackage[UTF8]{ctex}`或者在文档类加载时给出也可以比如`\documentclass[[UTF8]{article}`,同时引用文献时使用的引用关键词应使用英文。
+
+当文档使用其他编码时,xelatex编译通常需要指定一个文档编码,比如windows环境下的GB2312编码的文档需要指定`\XeTeXinputencoding "GBK"`, 否则显示乱码。使用pdflatex进行编译,如果biblatex不能正确的处理编码问题,那么需要为其明确的指定texencoding和bibencoding选项。比如windows环境下的GB2312编码的文档,需要指定`\usepackge[texencoding=GBK]{biblatex}`。
* <b>请问使用backref=true选项后,某个反向超链接总是链接到封面页是怎么回事?</b>
-> 对页码进行正确超链接需要一个前提是,当前链接的页码是唯一的。当有两页具有相同的页码时,超链接总是链接到第一各具有该页码的页面上。比如封面页页码是1,正文第一页页码也是1,那么到正文第一页的反向超链接总会链接到封面页上。解决该问题就是要解决页码的唯一性问题。当页码的表示形式不是同一种时,那么也会得到正确的区分。比如封面页用罗马字母I表示,而正文第一页用阿拉伯数字1表示,那么就能得到正确的反向超链接。类似于:
+
+对页码进行正确超链接需要一个前提是,当前链接的页码是唯一的。当有两页具有相同的页码时,超链接总是链接到第一各具有该页码的页面上。比如封面页页码是1,正文第一页页码也是1,那么到正文第一页的反向超链接总会链接到封面页上。解决该问题就是要解决页码的唯一性问题。当页码的表示形式不是同一种时,那么也会得到正确的区分。比如封面页用罗马字母I表示,而正文第一页用阿拉伯数字1表示,那么就能得到正确的反向超链接。类似于:
+
```
\pagenumbering{roman}
\title{title}
@@ -446,25 +331,29 @@ citestyle=gb7714-2015%,backref=true%%其中后端backend使用biber
\pagenumbering{arabic}
\section{文献表}
```
-
-
+
+
* <b>我希望参考文献表中的文献不是按引用顺序而是以文献作者的字母顺序排序,怎么实现?</b>
-> 一般情况下文献表是按引用顺序进行排列,标签是顺序的数字,这种方式称为顺序编码制。
-> 如果要以文献作者字母顺序排列,那么可以换一种编制方式,称为作者年制:
-
+
+一般情况下文献表是按引用顺序进行排列,标签是顺序的数字,这种方式称为顺序编码制。
+如果要以文献作者字母顺序排列,那么可以换一种编制方式,称为作者年制:
+
```\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}```
-> 如果要求使用顺序编码制文献表,又要以文献作者字母顺序排列,那么可以增加排序选项`sorting=nyt`:
-
+如果要求使用顺序编码制文献表,又要以文献作者字母顺序排列,那么可以增加排序选项`sorting=nyt`,意为按照姓名、年份、标题的字母顺序进行排序:
+
```\usepackage[backend=biber,style=gb7714-2015,sorting=nyt]{biblatex}```
* <b>作者年制中英文文献能按字母顺序排列,那么中文文献能否以拼音或者笔画进行排序呢?</b>
-> 能,可以通过编译时给biber设置选项来实现:
-
+
+能,有两种方式实现:
+
+(1)通过编译时给biber设置选项来实现:
+
```
%按拼音排序,biber命令
biber -l zh__pinyin jobname
@@ -472,51 +361,71 @@ biber -l zh__pinyin jobname
biber -l zh__stroke jobname
```
-> 或者,也可以通过增加 biblatex 选项来实现(此时biber编译无需另加选项),比如:
+(2)通过增加 biblatex 选项来实现(此时biber编译无需另加选项),比如:
```\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__pinyin]{biblatex}```
-
-
+
+
* <b>作者年制参考文献表目前的排序时升序排列,能不能改成降序排序?</b>
-> 能,这需要通过修改gb7714-2015ay.bbx中的代码来实现,找到:
-```\sort{%[direction=descending]```
+能,通过修改sorting选项实现:
+
+
+```\usepackage[backend=biber,style=gb7714-2015ay,sorting=gbnytd]{biblatex}```
+
+可用的选项值包括:
+```
+nty 按照姓名、标题、年份排序。
+nyt 按照姓名、年份、标题排序。
+nyvt 按照姓名、年份、卷数、标题排序。
+anyt 按照字母标签、姓名、年份、标题排序。
+anyvt 按照字母标签、姓名、年份、卷数、标题排序。
+ynt 按照年份、姓名、标题排序。
+ydnt 按照年份(降序)、姓名、标题排序。
+none 不进行排序。所有的条目按照引用顺序处理。
+gb7714-2015 以语言、作者、年份、标题、升序排列
+gbnytd 以语言、作者、年份、标题、降序排列
+gbynta 以语言、年份、作者、标题、升序排列
+gbyntd 以语言、年份、作者、标题、降序排列
+```
+
+* <b>如果我还希望顺序编码的文献著录表以拼音排序,请问该怎么操作?</b>
+
+顺序编码文献著录表默认是按引用顺序排序,但可以通过设置sorting选项进行调整,比如sorting=nyt表示按作者姓名年份以及文献标题进行排序。要使中文能按拼音排序,可以设置本地化排序调整方案,即sortlocale选项,比如:
+
+```\usepackage[backend=biber,citestyle=gb7714-2015ay,bibstyle=gb7714-2015,sorting=nyt,sortlocale=zh__pinyin]{biblatex}```
-> 修改为:
-```\sort[direction=descending]{%```
* <b>我希望文献表以阿拉伯数字编号,而正文中的引用标签使用作者和年份标注而不是数字,请问我该如何处理?</b>
-> 可以设置不同的标注和著录样式,比如标注样式用作者年制,而著录样式用顺序编码制,比如:
+可以设置不同的标注和著录样式,比如标注样式用作者年制,而著录样式用顺序编码制,比如:
```\usepackage[backend=biber,citestyle=gb7714-2015ay,bibstyle=gb7714-2015]{biblatex}```
-> 参见:[issue:参考文献的顺序](https://github.com/sjtug/SJTUThesis/issues/300)
+参见:[issue:参考文献的顺序](https://github.com/sjtug/SJTUThesis/issues/300)
-* <b>如果我还希望顺序编码的文献著录表以拼音排序,请问该怎么操作?</b>
-> 顺序编码文献著录表默认是按引用顺序排序,但可以通过设置sorting选项进行调整,比如sorting=nyt表示按作者姓名年份以及文献标题进行排序。要使中文能按拼音排序,可以设置本地化排序调整方案,即sortlocale选项,比如:
-```\usepackage[backend=biber,citestyle=gb7714-2015ay,bibstyle=gb7714-2015,sorting=nyt,sortlocale=zh__pinyin]{biblatex}```
-
-
+​
* <b>请问如果参考文献中存在一些特殊字符比如&或者一些特殊命令比如\LaTex{}等,是不是会出现问题?</b>
-> 通常不会出现问题,直接输入即可,当出现问题时可以手动调整比如修改为`\&`和`{\LaTex{}}`
+
+通常不会出现问题,直接输入即可,当出现问题时可以手动调整比如修改为`\&`和`{\LaTex{}}`
* <b>如果希望在参考文献中直接使用一些unicode字符比如希腊字母等而不想用数学环境中的命令,请问该怎么处理?</b>
-> 直接显示希腊字母等unicode字符需要字体的支持,比如CMU Serif等,可以在整个文档全局使用该字体,也可以仅在文献表中使用该字体,比如:
+
+直接显示希腊字母等unicode字符需要字体的支持,比如CMU Serif等,可以在整个文档全局使用该字体,也可以仅在文献表中使用该字体,比如:
```
{
@@ -526,82 +435,192 @@ biber -l zh__stroke jobname
}
```
-> 当然字体设置需要fontspec宏包的支持。
-
-
-
+当然字体设置需要fontspec宏包的支持。
+
+
+
+* <b>如何修改参考文献文献表的垂直间距(竖直间距)?</b>
+
+设置如下尺寸即可
+
+```
+% 间距的控制
+\setlength{\bibitemsep}{0ex}
+\setlength{\bibnamesep}{0ex}
+\setlength{\bibinitsep}{0ex}
+
+```
+其中itemsep设置各条文献之间的间隔,一般够用,后面两个常在西文中使用。具体意义参考biblatex-zh-cn
+
+
+
+* <b>如何修参考文献表的缩进?</b>
+
+对于著者-出版年制文献表,设置如下尺寸即可:
+```
+% 文献表中各条文献的缩进控制
+\setlength{\bibitemindent}{0em} % bibitemindent表示一条文献中第一行相对后面各行的缩进
+\setlength{\bibhang}{0pt} % 著者-出版年制中 bibhang 表示的各行起始位置到页边的距离
+```
+
+对于顺序编码制文献表,可以采用如下方法:
+
+由于顺序编码制存在数字标签,且其宽度与参考文献数量相关的,在biblatex中这个宽度是一个动态变量,不是提前设定的,而是在文献表生成时给出,所以设定缩进需要更复杂的操作。
+
+对于采用list环境的文献表,即设置gbalign=left、right、center时,那么需要修改文献表环境来设定缩进,比如:
+
+```
+%调整顺序标签与文献内容的间距
+\setlength{\biblabelsep}{2mm}
+%修改对齐环境-使不缩进
+\defbibenvironment{bibliography}
+ {\list
+ {\printtext[labelnumberwidth]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}}}
+ {%这里是所做的调整,通过设置\bibitemindent,\bibhang调整缩进
+ \addtolength{\bibitemindent}{\labelnumberwidth}%
+ \addtolength{\bibitemindent}{\biblabelsep}%
+ \addtolength{\bibhang}{-\labelnumberwidth} %
+ \addtolength{\bibhang}{-\biblabelsep}%
+ %以下是默认的设置
+ \setlength{\labelwidth}{\labelnumberwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \setlength{\leftmargin}{\bibhang}%
+ \addtolength{\leftmargin}{\labelnumberwidth}%
+ \setlength{\itemindent}{\bibitemindent}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}
+ {\endlist}
+ {\item}
+```
+
+对于不采用list环境的文献表,即设置gbalign=gb7714-2015时,可以采用如下设定:
+
+```
+%调整顺序标签与文献内容的间距
+\setlength{\biblabelsep}{2mm}
+%修改对齐环境-使不缩进
+\renewcommand{\itemcmd}{%
+\settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
+%%这里是所做的调整,以下两句通过调整\lengthid来调整缩进
+\setlength{\lengthid}{0pt}
+\addtolength{\lengthid}{-\biblabelsep}
+%如下是默认设置
+\addtolength{\lengthid}{\biblabelsep}
+\setlength{\lengthlw}{\textwidth}
+\addtolength{\lengthlw}{-\lengthid}
+\addvspace{\bibitemsep}%恢复\bibitemsep的作用
+%\parshape 2 0em \textwidth \lengthid \lengthlw
+\hangindent\lengthid
+\mkgbnumlabel{\printfield{labelnumber}}%
+\hspace{\biblabelsep}}
+```
+
+示例见:https://github.com/hushidong/biblatex-gb7714-2015/issues/62
+
+
+
+
+* <b>如何修改参考文献表的字体字号?</b>
+
+通过修改如下命令实现
+
+```
+% 字体的控制: \textit, sl, emph-楷体, \textbf, sf-黑体, \texttt-仿宋, \textsc, md, up-宋体
+% 全局字体
+\renewcommand{\bibfont}{\zihao{-5}}%\fangsong
+% 题名字体
+\renewcommand{\bibauthorfont}{\bfseries\color{teal}}%
+\renewcommand{\bibtitlefont}{\ttfamily\color{blue}}%
+\renewcommand{\bibpubfont}{\itshape\color{violet}}%
+% url和doi字体
+\def\UrlFont{\ttfamily} %\urlstyle{sf} %\def\UrlFont{\bfseries}
+```
+
+​
* <b>我习惯用传统的bst文件来生成参考文献,有没有GB/T 7714-2015标准的实现版本?</b>
-> GB/T 7714-2015标准实现的bst版本,已经由[zeping lee](https://github.com/zepinglee/gbt7714-bibtex-style)开发完毕,直接使用即可。
-
-
-
+
+GB/T 7714-2015标准实现的bst版本,已经由[zeping lee](https://github.com/zepinglee/gbt7714-bibtex-style)开发完毕,直接使用即可。
+
+
+
* <b>我在使用过程中遇到了一些无法理解和无法解决的问题,怎么办?</b>
-> 请邮件联系hzzmail@163.com或在项目内发issue提问即可。
-
-
+
+请邮件联系hzzmail@163.com或在项目内发issue提问即可。
+
+
#### 4.2 Bibliography format/文献表著录格式
* <b>请问可以在参考文献表中实现类似于word那样的与文献内容等间距标签对齐格式么?</b>
-> 可以,latex的列表通常用list来实现,因此一般列表的内容都是对齐的,
-> 此时如果标签右对齐的,那么标签和内容等间距,但标签左侧是不对齐的。
-> 如果标签是左对齐的,那么标签和内容的间距不相等。
-> 如果要求标签左侧对齐,且标签与内容等间距必须放弃使用list。
-> biblatex-7714-2015的顺序编码制样式特别设计了这样的环境,以保持和word一致。通过设置选项gbalign来实现:
-
+
+可以,latex的列表通常用list来实现,因此一般列表的内容都是对齐的,
+此时如果标签右对齐的,那么标签和内容等间距,但标签左侧是不对齐的。
+如果标签是左对齐的,那么标签和内容的间距不相等。
+如果要求标签左侧对齐,且标签与内容等间距必须放弃使用list。
+biblatex-7714-2015的顺序编码制样式特别设计了这样的环境,以保持和word一致。通过设置选项gbalign来实现:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,gbalign=gb7714-2015]{biblatex}```
-
-
+
+
* <b>如果不希望在参考文献表中出现类似“出版地不详”“出版者不详”等信息时,请问该怎么处理?</b>
-> 设置选项gbpub可以实现,当gbpub=false时,biblatex-gb7714-2015宏包会放弃国标的要求,不使用“出版地不详”等补充信息:
-
+
+设置选项gbpub可以实现,当gbpub=false时,biblatex-gb7714-2015宏包会放弃国标的要求,不使用“出版地不详”等补充信息:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,gbpub=false]{biblatex}```
-
-
+
+​
* <b>我觉得文献表中英文作者全部用大写不好看,请问能换一种大小写方式么?</b>
-> 能,通过设置gbnamefmt可以实现,默认情况下gbnamefmt=uppercase,作者姓名字母全部大写。
-> 当设置gbnamefmt=lowercase时,biblatex-gb7714-2015宏包对于bib文件中的作者姓名的大小写不做改变,
-> 这时可以在bib文件中手动设置想要的大小写方式。
-> 当要实现类似ZHAO Yu-xin这样的拼音方式,则可以设置gbnamefmt=pinyin:
-
+
+能,通过设置gbnamefmt可以实现,默认情况下gbnamefmt=uppercase,作者姓名字母全部大写。
+当设置gbnamefmt=lowercase时,biblatex-gb7714-2015宏包对于bib文件中的作者姓名的大小写不做改变,
+这时可以在bib文件中手动设置想要的大小写方式。
+当要实现类似ZHAO Yu-xin这样的拼音方式,则可以设置gbnamefmt=pinyin:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,gbnamefmt=lowercase]{biblatex}```
* <b>如果不希望在参考文献表中出现类似“[M]”“[J]”等文献类型标识符时,请问该怎么处理?</b>
-> 可通过设置选项gbtype=false实现:
-
+
+可通过设置选项gbtype=false实现:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,gbtype=false]{biblatex}```
* <b>如果不希望在参考文献表中出现网址信息时,请问该怎么处理?</b>
-> 可通过设置选项url=false实现:
-
+
+可通过设置选项url=false实现:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,url=false]{biblatex}```
* <b>如果不希望在参考文献表中出现DOI信息时,请问该怎么处理?</b>
-> 可通过设置选项doi=false实现:
-
+
+可通过设置选项doi=false实现:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,doi=false]{biblatex}```
-
+
* <b>如果对当前文献中的url或doi显示效果(包括间距和断行)不满意,能否进行调整?</b>
-> 能,可以通过设置三个计数器的值来调整,取值范围0到9999,计数器的值越大则越容易在相应的内容后断行:
-
+
+能,可以通过设置三个计数器的值来调整,取值范围0到9999,计数器的值越大则越容易在相应的内容后断行:
+
```
\setcounter{biburlnumpenalty}{100}%大于0允许在数字后面断行
\setcounter{biburlucpenalty}{100}%大于0允许在大写字母后面断行
@@ -610,141 +629,164 @@ biber -l zh__stroke jobname
```
-
+​
* <b>当参考文献没有作者时,希望用佚名或Anon代替作者时,请问该怎么处理?</b>
-> 可通过设置选项gbnoauthor=true实现,注意该处理主要用在作者年制中:
-
+
+可通过设置选项gbnoauthor=true实现,注意该处理主要用在作者年制中:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,gbnoauthor=true]{biblatex}```
* <b>如果希望参考文献表中文献作者数量超过国标规定的3个时,请问该怎么处理?</b>
-> 可通过设置选项maxbibnames,minbibnames实现,比如下面的设置用于显示5个作者:
-
+
+可通过设置选项maxbibnames,minbibnames实现,比如下面的设置用于显示5个作者:
+
```\usepackage[backend=biber,bibstyle=gb7714-2015,maxbibnames=5,minbibnames=5]{biblatex}```
* <b>请问如何将作者之间的分隔符调整为and而不是用逗号?</b>
-> 可以通过重设两个分隔符来实现,分别是multinamedelim和finalnamedelim。低版本的biblatex直接重定义命令`\multinamedelim`和`\finalnamedelim`,高版本的biblatex可以使用分隔符环境,这样可以在标注、文献表等不同位置直接使用不同的分隔符,而不像低版本biblatex那样只能在不同的位置修改局部定义。比如:
-
+
+可以通过重设两个分隔符来实现,分别是multinamedelim和finalnamedelim。低版本的biblatex直接重定义命令`\multinamedelim`和`\finalnamedelim`,高版本的biblatex可以使用分隔符环境,这样可以在标注、文献表等不同位置直接使用不同的分隔符,而不像低版本biblatex那样只能在不同的位置修改局部定义。比如:
+
```
\DeclareDelimFormat[bib]{multinamedelim}{\addspace and \addspace}
\DeclareDelimFormat[bib]{finalnamedelim}{\addspace and \addspace}
\DeclareDelimFormat[cite]{multinamedelim}{\addcomma\addspace}
\DeclareDelimFormat[cite]{finalnamedelim}{\addcomma\addspace}
```
-
-
-
+
+
+​
* <b>请问如何使文献表中文献标题的是句首字母大写而其它所有字母均小写?</b>
-> 默认情况下,biblatex-gb7714-2015不对标题的字母大小写做处理,因此要得到想要的字母大小写格式,
-> 需要在bib文件输入参考文献信息时给出需要的大小写格式。
-
-
-
+
+默认情况下,biblatex-gb7714-2015仅对标题首字母做调整,使其变成为大写,而其他字母大小写不做处理,因此要得到想要的字母大小写格式,需要在bib文件输入参考文献信息时给出需要的除首字母外的其它字母的大小写格式。
+
+若有特殊情况,需要首字母为小写,可采用如下两种方法:
+
+(1)根据字符大小写更换命令比如
+
+`{\MakeLowercase i}FogSim title contents`
+
+(2)修改titlecase域格式,即将如下命令放到导言区中,放biblatex后面
+
+```
+\DeclareFieldFormat{titlecase}{\iftoggle{bbx:titlelink}{%
+\iffieldundef{url}{#1}{%
+\href{\thefield{url}}{#1}}}{#1}}%重设标题格式,将去除首字母大写
+```
+
+​
* <b>请问如何使文献表中的期刊名是单词首字母大写的?</b>
-> 默认情况下,biblatex-gb7714-2015不对期刊名的字母大小写做处理,
-> 因此需要在bib文件输入参考文献信息时给出需要的大小写格式。
-
-
-
+
+默认情况下,biblatex-gb7714-2015不对期刊名的字母大小写做处理,
+因此需要在bib文件输入参考文献信息时给出需要的大小写格式。
+
+
+​
* <b>我想得到中英文对照的双语参考文献,请问该如何处理?</b>
-> biblatex-gb7714-2015设计了两种多语言对照参考文献的实现方式,
-> 一种是利用条目集的概念,另一种是利用关联条目的概念。
-> 因此有两种方法:
-> 方法一,动态定义条目集:
-> 在导言区或正文中定义:
+biblatex-gb7714-2015设计了两种多语言对照参考文献的实现方式,
+一种是利用条目集的概念,另一种是利用关联条目的概念。
+因此有两种方法:
+
+(1)方法一,动态定义条目集:
+在导言区或正文中定义:
```\defbibentryset{易仕和,等,2013}{易仕和2013--,Yi2013--}```
-> 在正文中引用:
-``双语文献引用\cite{易仕和,等,2013}```
+在正文中引用:
+```双语文献引用\cite{易仕和,等,2013}```
-> 方法二,动态定义关联条目:
-> 在导言区定义:
+(2)方法二,动态定义关联条目:
+在导言区定义:
```\defdoublelangentry{易仕和2013--}{Yi2013--}```
-> 在正文中引用:
+在正文中引用:
```双语文献引用\cite{易仕和2013--}```
+
+
* <b>我想修改文献条目的日期项诸如格式,请问该如何处理?</b>
参考文献中日期格式主要有四种修改方式:
-1. 利用biblatex选项全局的修改日期格式
-2. 修改日期输出宏,使根据条目类型输出不同的日期格式
-3. 修改日期输出宏,使根据具体条目输出不同的日期格式
-4. 修改参考文献信息,使当前条目原样输出需要的格式
+(1) 利用biblatex选项全局的修改日期格式
+(2) 修改日期输出宏,使根据条目类型输出不同的日期格式
+(3) 修改日期输出宏,使根据具体条目输出不同的日期格式
+(4) 修改参考文献信息,使当前条目原样输出需要的格式
具体示例见:[biblatex中如何修改参考文献中日期的著录格式](https://blog.csdn.net/xenonhu/article/details/86933525)
-
-
+
+​
#### 4.3 Citation format/正文引用的标注格式
* <b>我希望在正文中同时使用上标和非上标的引用标签,请问该怎么操作?</b>
-> 可以使用不同的命令来实现上标和非上标的标签,
-> 上标标签的命令为`\cite{bibtexkey}`,非上标标签的命令为`\parencite{bibtexkey}`。
-> 当希望上标的标签也给出国标要求的页码时,则可以使用`\pagescite[50-55]{bibtexkey}`给出指定页码
-> 或者`\pagescite{bibtexkey}`直接使用bib文件中的页码。
-
-
-
+
+可以使用不同的命令来实现上标和非上标的标签,
+上标标签的命令为`\cite{bibtexkey}` ,非上标标签的命令为 `\parencite{bibtexkey}`。
+当希望上标的标签也给出国标要求的页码时,则可以使用`\cite[50-55]{bibtexkey}`、`\pagescite[50-55]{bibtexkey}`给出指定页码 或者`\pagescite{bibtexkey}` 直接使用bib文件中的页码。
+
+
+​
* <b>我在引用文献时已经给出作者信息,希望引用标签仅包含年份和页码信息或者仅包含年份信息时,该怎么操作?</b>
-> 需要给出年份的标签是作者年制的标签,可以使用命令`\yearpagescite{bibtexkey}`给出包含年份和页码信息的标签,
-> 使用命令`\yearcite{bibtexkey}`给出仅包含年份的标签。
+
+ 需要给出年份的标签是作者年制的标签,可以使用命令`\yearpagescite{bibtexkey}`给出包含年份和页码信息的标签,
+ 使用命令`\yearcite{bibtexkey}`给出仅包含年份的标签。
* <b>在使用作者年制时,我希望文献表是按作者年份标题排序,而正文某处一个cite命令引用多个参考文献,且这些文献的标签是按年份作者标题排序,该怎么操作?</b>
-> 有两种方法:
-> 一是自动排序
+ 有两种方法:
+
+(1) 一是自动排序
-> 宏包加载时使用:
+ 宏包加载时使用:
```\usepackage[backend=biber,style=gb7714-2015ay,sortcites,sorting=ynt]{biblatex}```
-> 正文中引用:
+ 正文中引用:
```\cite{refa2010,refb2008,refc2009}```
-> 然后在文献打印前加
+ 然后在文献打印前加
```\newrefcontext[sorting=nyt]```
-> 二是手动给出排序
+(2) 二是手动给出排序
-> 宏包加载时使用
+ 宏包加载时使用
```\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}```
-> 引用多个文献时按照年份顺序给出引用关键字,即正文中引用:
+ 引用多个文献时按照年份顺序给出引用关键字,即正文中引用:
```\cite{refb2008,refc2009,refa2010}```
-> 参考:[issue:citation的顺序和bibliography的顺序如何不关联](https://github.com/hushidong/biblatex-gb7714-2015/issues/30)
+ 参考:[issue:citation的顺序和bibliography的顺序如何不关联](https://github.com/hushidong/biblatex-gb7714-2015/issues/30)
* <b>在使用作者年制时,我希望文献表同一位置引用同一作者的不同的文献实现作者姓名的压缩,该怎么操作?</b>
-> 可以通过将gb7714-2015ay.cbx 中的引用的基础样式authoryear更换成authoryear-comp。
+可以通过将gb7714-2015ay.cbx 中的引用的基础样式authoryear更换成authoryear-comp。
-
+​
* <b>请问希望正文中作者年制的标注(引用)标签中作者数量超过国标规定的1个时,该怎么处理?</b>
-> 可通过设置选项maxcitenames,mincitenames实现,比如下面的设置用于显示5个作者:
+
+可通过设置选项maxcitenames,mincitenames实现,比如下面的设置用于显示5个作者:
```\usepackage[backend=biber,style=gb7714-2015ay,maxcitenames=5,mincitenames=5]{biblatex}```
@@ -752,7 +794,8 @@ biber -l zh__stroke jobname
* <b>请问希望正文中作者年制的标注(引用)标签中作者数量只能是1个,而不管是否存在歧义时,该怎么处理?</b>
-> 可通过设置选项uniquelist=false实现,该设置标签中的作者只会是指定的1个:
+
+可通过设置选项uniquelist=false实现,该设置标签中的作者只会是指定的1个:
```\usepackage[backend=biber,style=gb7714-2015ay,uniquelist=false]{biblatex}```
@@ -760,7 +803,8 @@ biber -l zh__stroke jobname
* <b>请问希望正文中作者年制的标注(引用)标签中作者数量只能是1个,且只用其作者的姓而不管是否存在歧义时,该怎么处理?</b>
-> 可通过设置选项uniquelist=false, uniquename=false实现,该设置标签中的作者只会是指定的1个且只用该作者的姓:
+
+可通过设置选项uniquelist=false, uniquename=false实现,该设置标签中的作者只会是指定的1个且只用该作者的姓:
```\usepackage[backend=biber,style=gb7714-2015ay,uniquelist=false,uniquename=false]{biblatex}```
@@ -769,7 +813,8 @@ biber -l zh__stroke jobname
* <b>请问上标的标注(引用)标签过长导致行溢出,该怎么处理?</b>
-> 上标的标注与行内的标注不一样,因此采用了上标的处理,所以上标的标注无法自动断行,因此在页边附近的长标注很有可能会溢出。由于上标标注的断行国标中并没有什么明确要求和说明,因此只能按照自己的方式进行处理,通常是将一个长标注手动分成两个短的标注,比如将:
+
+上标的标注与行内的标注不一样,因此采用了上标的处理,所以上标的标注无法自动断行,因此在页边附近的长标注很有可能会溢出。由于上标标注的断行国标中并没有什么明确要求和说明,因此只能按照自己的方式进行处理,通常是将一个长标注手动分成两个短的标注,比如将:
```\cite{key1,key2,key3,key4,key5,key6,key7}```
@@ -783,7 +828,8 @@ biber -l zh__stroke jobname
* <b>在顺序编码制标签中,希望数字编码从两个连续编码就开始压缩,比如[1,2]压缩成[1-2],该怎么处理?</b>
-> biblatex中处理顺序数字编码压缩的代码默认从3个连续编码开始压缩,比如[1,2,3]压缩成[1-3]。如果要修改为从2个连续编码开始压缩,只需要做一个很简单的修改即可:
+
+biblatex中处理顺序数字编码压缩的代码默认从3个连续编码开始压缩,比如[1,2,3]压缩成[1-3]。如果要修改为从2个连续编码开始压缩,只需要做一个很简单的修改即可:
```
%该宏的目的是抛弃压缩内部的编号,而仅输出最后一个编号,主要通过cbx@tempcnta来控制
@@ -809,7 +855,8 @@ biber -l zh__stroke jobname
* <b>在正文中的某一部分,希望取消顺序编码标签中的压缩,而其他部分保持这种压缩,该怎么处理?</b>
-> 顺序数字编码压缩的代码,主要有cite:comp:comp宏控制,因此需要局部取消压缩,可以局部的修改该宏。修改很简单,只需要注释掉其中的一行,在需要取消压缩的环境中,重定义该宏,比如:
+
+顺序数字编码压缩的代码,主要有cite:comp:comp宏控制,因此需要局部取消压缩,可以局部的修改该宏。修改很简单,只需要注释掉其中的一行,在需要取消压缩的环境中,重定义该宏,比如:
```
\renewbibmacro*{cite:comp:comp}{%
@@ -837,10 +884,9 @@ biber -l zh__stroke jobname
```
-
-
-
+​
### 5. Examples/著录和标注结果示例
+
* 顺序编码制
![示例a](example/fig-style-numeric.png)
@@ -854,6 +900,7 @@ biber -l zh__stroke jobname
对于bib文件中的如下条目,有:
+```
@Article{Zhang2007-500-503,
Title = {The design and experimental investigations of supersonic length shorted nozzle},
Author = {Zhang, Min-li and Yi, Shi-he and Zhao, Yu-xin},
@@ -887,13 +934,210 @@ biber -l zh__stroke jobname
Publisher = {China Astronautic Publishing House},
Year = {2003}
}
-
+```
![示例c](example/fig-nameformat.png)
---------------------------------------------------------
+
+## Usage
+* for numerical sequence style: gb7714-2015
+
+ `\usepackage[backend=biber,style=gb7714-2015]{biblatex}`
+
+ - add an option `gbalign` to control the align style of the numerical label:
+
+ `gbalign=right` for the label ragged left in a list environment, this is the default setting.
+
+ `gbalign=center` for the same width label in a list environment with the number centered in a wrapper like bracket []
+
+ `gbalign=left` for the label ragged right in list environment
+
+ `gbalign=gb7714-2015` for the label in paragraph with same separation space between label and content of the reference entry
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbalign=gb7714-2015]{biblatex}`
+
+ - add an option `gbpub` for dealing publishing items (This option is also for author-year style):
+
+ `gbpub = true` for gb7714 style, to print `[出版者不详]` and the like when publisher or address is absent, this is the default setting.
+
+ `gbpub = false` for standard style, not to print the additional infomation.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbpub=true]{biblatex}`
+
+ - add an option `gbnamefmt` for dealing author name's letter case (This option is also for author-year style):
+
+ `gbnamefmt = uppercase` for gb7714 style, to capitalize all the letters of the name, like: ZHANG M L, this is the default setting.
+
+ `gbnamefmt = lowercase` for gb7714 style, do no case switch of the name, like: Zhang M L
+
+ `gbnamefmt = givenahead` for standard style, given-family style, like: M. L. Zhang as the ieee style
+
+ `gbnamefmt = familyahead` for standard style, family-given style, like: Zhang, M. L. as the apa style.
+
+ `gbnamefmt = pinyin` for a common Chinese style, like: ZHANG Min-li, YI Shi-he and so on.
+
+ `gbnamefmt = reserveorder` for standard style:family-given/given-family style
+
+ the name format can be set per-entry using a field `nameformat`, add this field like `nameformat={pinyin}` to an entry in the bib file to set the entry's name format.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbnamefmt=uppercase]{biblatex}`
+
+ - add an option `gbbiblabel` to control the format of the numerical label:
+
+ `gbbiblabel=bracket` for the numerical number in the label wrapped by bracket, like: [1], this is the default setting.
+
+ `gbbiblabel=parens` for the numerical number in the label wrapped by parenthesis, like: (1)
+
+ `gbbiblabel=plain` for the numerical number in the label wrapped by nothing, like: 1
+
+ `gbbiblabel=dot` for the numerical number in the label followed with dot, like: 1.
+
+ `gbbiblabel=box` for the numerical number in the label wrapped by box which generated by `\framebox`
+
+ `gbbiblabel=circle` for the numerical number in the label wrapped by circle which generated by `\textcircled`
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbbiblabel=bracket]{biblatex}`
+
+ - add an option `gbtype` to control the output of the reference type and carrier identifier like [J/OL] (This option is also for author year style):
+
+ `gbtype = true` for gb7714 style, print a title with the identifier, like: `an on-line article [J/OL]`, this is the default setting.
+
+ `gbtype = false` for none identifier, print a title without identifier, like: `an on-line article`
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbtype=true]{biblatex}`
+
+ - add an option `gbfieldtype` to control the output of field type:
+
+ `gbfieldtype = true` to print type field, like the thesis type: `PHD thesis` or `博士学位论文`。please use `\DefineBibliographyStrings{english}{mathesis={str you want}}`,`\DefineBibliographyStrings{english}{phdthesis={str you want}}`,
+ `\DefineBibliographyStrings{english}{mathesiscn={str you want}}`,`\DefineBibliographyStrings{english}{phdthesiscn={str you want}}` to
+ define the output string, or set it in bibfile like: `type={str you want},`
+
+ `gbfieldtype = false` not to print type field.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbfieldtype=true]{biblatex}`
+
+ - add an option `gbpunctin` to control the output of `//` before bookauthor for entrytypes like inbook/incollection/inproceedings(This option is also for author year style):
+
+ `gbpunctin=true` for gb7714 style, to output `//`, this is the default setting
+
+ `gbpunctin=false` for standard style, to output a bibstring, for English it is `IN:`, If you want to eliminate it at all, please redefine the bibstring like `\DefineBibliographyStrings{english}{in={}}` and `\DefineBibliographyStrings{english}{incn={}}`in the preamble.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbpunctin=true]{biblatex}`
+
+ - add an option `gbctexset` to control the bibliography heading's setting method (This option is also for author year style):
+
+ `gbctexset=true` , the bibliography heading can be set by `\bibname` or `\refname`, this is the default setting.
+
+ `gbpunctin=false`, the heading can be set by bibstring like `\DefineBibliographyStrings{english}{bibliography={title you want}}` or `\DefineBibliographyStrings{english}{references={title you want}}`
+
+ or alternatively, it can also be set through the printbibliography option `title`, like `printbibliography[title=title you want]`.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbctexset=true]{biblatex}`
+
+ - add an option `gbcodegbk` to deal the tex source file encoded with GBK (This option is also for author year style):
+
+ `gbcodegbk=true` , if you want to compile the GBK encoded source file with pdflatex or latex
+
+ `gbcodegbk=false`, if you want to compile the utf-8 endcoded source file with xelatex, this is the default setting.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbcodegbk=true]{biblatex}`
+
+ - add an option `gbtitlelink` to control the hyperlink of title field (This option is also for author year style):
+
+ `gbtitlelink = false` not to add hyperlink, this is the default setting.
+
+ `gbtitlelink = true` to set the title as a hyperlink.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbtitlelink=true]{biblatex}`
+
+ - add an option `gbfootbib` to control the bibliography in footnote (This option is also for author year style):
+
+ `gbfootbib = true` make patches to match the standard, this is the default setting.
+
+ `gbfootbib = false` not to patch.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbtitlelink=true]{biblatex}`
+
+ - add options `gbcitelocal` `gbbiblocal` to control the local strings in citation and bibliography respectively, the `gblocal` set the both options (These options are also for author year style):
+
+ `gbcitelocal = gb7714-2015` to output local strings according to the reference's language, this is the default setting.
+
+ `gbcitelocal = chinese` to output local strings with chinese language word like "等".
+
+ `gbcitelocal = english` to output local strings with western language word like "et al.".
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbcitelocal = chinese]{biblatex}`
+
+ - add an option `gbstrict` to control the output of some unnecessary fields for GB/T7714-2015 (This option is also for author year style).
+
+ `gbstrict=true`, not to print those fields such as language, eprint, this is the default setting.
+
+ `gbstrict=false`, to output them as the standard style
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbstrict=true]{biblatex}`
+
+ - add an option `gbfieldstd` to control the format of some fields such as title, url and pages (This option is also for author year style):
+
+ `gbfieldstd = false` for gb7714 style, format of the fields follows the GB/T7714-2015 standard, this is the default setting.
+
+ `gbfieldstd = true` for standard style.
+
+ `\usepackage[backend=biber,style=gb7714-2015,gbfieldstd=true]{biblatex}`
+
+
+* for multi-style: gb7714-2015ms
+
+ In order to use two styles in a tex file, add a style gb7714-2015ms. option `gbstyle` is added to control the using mode. `gbstyle=true` means all references are printed with GB/T7714-2015 style, and `gbstyle=false` means the chinese references are printed with GB/T7714-2015 style while the other references are printed with standard style shipped by biblatex, and `gbstyle=true` is the default set. all the options for numerical sequence style gb7714-2015 can also be used in gb7714-2015ms.
+
+
+ `\usepackage[backend=biber,style=gb7714-2015ms,gbstyle=false]{biblatex}`
+
+* for author year style: gb7714-2015ay
+
+ `\usepackage[backend=biber,style=gb7714-2015ay,gbpub=true]{biblatex}`
+
+ - add an option `gbnoauthor` for dealing undefined author:
+
+ `gbnoauthor = true` for gb7714 style, to print `佚名` or `Anon` when the author of the entry is absent.
+
+ `gbnoauthor = false` for standard style, not to pring anything, this is the default setting.
+
+ `\usepackage[backend=biber,style=gb7714-2015ay,gbnoauthor=true]{biblatex}`
+
+ - add an option value `mergedate=none` to control the date in bibliography:
+
+ `mergedate=true` to output date only after author,like:LAMPORT L, (1986). Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA.
+
+ `mergedate=false` to output date after author and in publish items,like:LAMPORT L, (1986). Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA, 1986.
+
+ `mergedate=none` to output date only in publish items,like:LAMPORT L. Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA, 1986.
+
+ do not set mergedate output like:LAMPORT L, 1986. Document Preparation System[M]. [S.l.]: Addison-Wesley Reading, MA.
+
+ `\usepackage[backend=biber,style=gb7714-2015ay,mergedate=none]{biblatex}`
+
+ - add an option `gblanorder` to control sequence of reference groups of different languagesin the bibliography:
+
+ `gblanorder=chineseahead` to set the sequence as: cn;jp;kr;en;fr;ru
+
+ `gblanorder=englishahead` to set the sequence as: en;fr;ru;cn;jp;kr
+
+ `gblanorder=user defined string like: cn;en;jp;kr;fr;ru` to set the sequence as: cn;en;jp;kr;fr;ru.
+
+ `\usepackage[backend=biber,style=gb7714-2015ay,gblanorder=cn;en;jp;fr;kr;ru]{biblatex}`
+
+* for perl script transformation tool(only for the numerical style)
+
+ `perl gb7714texttobib.pl in=textfilename out=bibfilename`
+
+A demonstration database is provided to show how to format input for the style. The biblatex-gb7714-2015 style works with texlive2014, texlive2015, texlive2016, texlive2017 , texlive2018 and so on.
+
+please see the file 'biblatex-gb7714-2015.pdf' for further information!
+
+
## Version history:
* 2016/05/20 v1.0
@@ -916,6 +1160,7 @@ biber -l zh__stroke jobname
* 2019/03/28 v1.0r
* 2019/03/29 v1.0rm,rename erj to chinese-erj,ctan
* 2019/08/28 v1.0s
+* 2020/03/04 v1.0t,ctan
---------------------------------------------------------
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex
index fbf92f0fea..e5ff2178e6 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex
@@ -13,8 +13,10 @@
\setmonofont[Ligatures=TeX]{TeX Gyre Pagella}
%\usepackage{unicode-math}
%\setmathfont[math-style=ISO,bold-style=ISO]{TeX Gyre Pagella Math}
-\setCJKmainfont
-[BoldFont=SourceHanSansSC-Regular.otf, ItalicFont=simkai.ttf]{SourceHanSerifSC-Regular.otf}
+
+\setmainfont{CMU Serif}
+\IfFileExists{SourceHanSerifSC-Regular.otf}
+{\setCJKmainfont[BoldFont=SourceHanSansSC-Regular.otf, ItalicFont=simkai.ttf]{SourceHanSerifSC-Regular.otf}}{}
\usepackage[dvipsnames]{xcolor}
\colorlet{examplefill}{yellow!80!black}
@@ -92,7 +94,9 @@
%超链接书签功能,选项去掉链接红色方框
\usepackage[colorlinks=true,%
-pdfstartview=FitH,allcolors=gbemphcolor]{hyperref}
+pdfstartview=FitH,allcolors=gbemphcolor,
+bookmarksopenlevel=4,%
+bookmarksdepth=4,]{hyperref}
%linkcolor=gbblue,anchorcolor=gbblue,citecolor=gbblue
%linkcolor=black,linkcolor=green,blue,red,cyan, magenta,
%yellow, black, gray,white, darkgray, lightgray, brown,
@@ -124,7 +128,7 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref}
%目录,图/表/例目录,图表题注
-\usepackage{subfigure}
+\usepackage[bf]{subfigure}
\usepackage[subfigure]{tocloft} %注意其与titletoc共用时分页会有问题
\usepackage{ccaption}
\captiondelim{. } %图序图题中间的间隔符号
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
index 6da5621607..a0dae26ec4 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
index 72ec1e17c6..d0513bffb8 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
@@ -1,11 +1,15 @@
\documentclass[11pt]{article} %用draft选项找到badbox的位置 twoside,
\input{biblatex-gb7714-2015-preamble} %宏包和一些格式设置
+\usepackage{microtype}
+%\usepackage[russian,french,english]{babel}
+%\DefineHyphenationExceptions{english}{conf-erence}
\begin{document}
\hyphenpenalty=100 %断词阈值,值越大越不容易出现断词
\tolerance=9000 %丑度,10000为最大无溢出盒子,参考the texbook 第6章
+
%------------------------------------------------------------
% 标题和目录
%------------------------------------------------------------
@@ -271,15 +275,21 @@ latexmk -xelatex jobname.tex
\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
-\deflength{\textparwd}{\linewidth-1cm}
-\parbox{\textparwd}{%\raggedright
-\hyphenpenalty=50 %断词阈值,值越大越不容易出现断词
-\tolerance=9500 %丑度,10000为最大无溢出盒子,参考the texbook 第6章
-详见文献\cite{Peebles2001-100-100}\parencite{Babu2014--}
-另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014--}
-\renewcommand{\bibfont}{\zihao{-5}}
-\printbibliography[heading=subbibliography,title=参考文献]
-}
+\includegraphics*[page=1,viewport=0cm 0.4cm 14cm 6.1cm,clip=true]{egfigure/egmwe.pdf}
+%\deflength{\textparwd}{\linewidth-1.5cm}
+%\begin{minipage}{\textparwd}
+%\fbox{\parbox{\textparwd}{%\raggedright
+%详见文献\cite{Peebles2001-100-100}\parencite{Babu2014--}
+%另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014--}
+%\renewcommand{\bibfont}{\zihao{-5}}
+%{
+%\hyphenation{conference}
+%\hyphenpenalty=100 %断词阈值,值越大越不容易出现断词
+%\tolerance=100 %丑度,10000为最大无溢出盒子,参考the texbook 第6章
+%\printbibliography[heading=subbibliography,title=参考文献]
+%\par}
+%}}
+%\end{minipage}
\end{tcolorbox}
\caption{最小工作示例编译生成的PDF文档}\label{fig:eg:ref}
\end{figure}
@@ -290,8 +300,11 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\subsection{样式及选项加载}
+\subsubsection{几种样式}
+
例\ref{code:doc:structrue}中给出了宏包和样式的基本加载方式,选项的加载也类似。比如:
+\pdfbookmark[4]{gb7714-2015}{stygb7714-2015}
\begin{example}{顺序编码制(gb7714-2015)加载方式}{eg:gb7714numeric}
\begin{texlist}
%简单方式:
@@ -303,6 +316,8 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\end{texlist}
\end{example}
+
+\pdfbookmark[4]{gb7714-2015ay}{stygb7714-2015ay}
\begin{example}{著者-出版年制(gb7714-2015ay)加载方式}{eg:gb7714authoryear}
\begin{texlist}
%简单方式:
@@ -312,6 +327,8 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\end{texlist}
\end{example}
+
+\pdfbookmark[4]{gb7714-2015ms}{stygb7714-2015ms}
\begin{example}{同一文献表中不同语言区分著录格式的样式(gb7714-2015ms)}{eg:gb7714ms}
\begin{texlist}
%默认方式,所有文献使用一种著录格式,即GB/T 7714-2015样式
@@ -320,7 +337,10 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\usepackage[backend=biber,style=gb7714-2015ms,gbstyle=false]{biblatex}
\end{texlist}
\end{example}
+格式效果如图\ref{fig:eg:ms}所示。
+
+\pdfbookmark[4]{gb7714-2015mx}{stygb7714-2015mx}
\begin{example}{同一文档中不同文献分节区分不同著录格式的样式(gb7714-2015mx)}{eg:gb7714mx}
\begin{texlist}
%默认方式使用顺序编码制样式
@@ -329,6 +349,8 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\setaystylesection{2}
\end{texlist}
\end{example}
+格式效果如图\ref{fig:eg:mx}所示。
+
\begin{example}{参考文献文本转换为bib文件perl脚本使用方式}{eg:transtobib}
\begin{texlist}
@@ -336,11 +358,24 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\end{texlist}
\end{example}
-其中,v1.0m版本增加的gb7714-2015ms样式文件,主要是为了在一个文献表中针对不同语言使用不同多种样式,比如中文文献使用GB/T 7714-2015规定的著录格式,而其它语言文献使用biblatex提供的标准样式。v1.0r版本增加了gb7714-2015mx样式,主要是为了在一个文档中针对不同参考文献分节使用不同的参考文献样式,比如某些节使用著者年份制,某些节使用顺序编码制。尽管这些方式不常用,但偶尔也有需求,所以都做了实现。另外应ddswhu要求,v1.0r版本增加了chinese-erj样式用于生成经济研究期刊的文献。且在egthesis文件夹内,针对国内一些大学的学位论文文献要求,基于国标样式做了一些定制和测试。
+其中,v1.0m版本增加的gb7714-2015ms样式文件,主要是为了在一个文献表中针对不同语言使用不同多种样式,比如中文文献使用GB/T 7714-2015规定的著录格式,而其它语言文献使用biblatex提供的标准样式。v1.0r版本增加了gb7714-2015mx样式,主要是为了在一个文档中针对不同参考文献分节使用不同的参考文献样式,比如某些节使用著者年份制,某些节使用顺序编码制。尽管这些方式不常用,但偶尔也有需求,所以都做了实现。
+
+另外应ddswhu要求,v1.0r版本增加了chinese-erj样式用于生成经济研究期刊的文献。且在egthesis文件夹内,针对国内一些大学的学位论文文献要求,基于国标样式做了一些定制和测试。
+
+\pdfbookmark[4]{chinese-erj}{chinese-erj}
+\begin{example}{经济研究期刊文献样式(chinese-erj)}{eg:gbchineseerj}
+\begin{texlist}
+%使用经济研究期刊文献样式
+\usepackage[backend=biber,style=chinese-erj]{biblatex}
+\end{texlist}
+\end{example}
+
\subsubsection{新增选项}\label{sec:added:opt}
样式包新增了一些选项,用于标签对齐方式、出版项缺省处理、责任者(作者)缺省处理等功能的控制,其使用方式与biblatex宏包选项完全相同:
\begin{description}
+
+ \pdfbookmark[4]{gbalign}{gbalign}
\item[gbalign]=\textbf{right},left,center,gb7714-2015. \hfill default is right
为顺序编码制增加的选项,用于选择参考文献表序号标签的对齐方式。
@@ -357,8 +392,22 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\href{run:./example/opt-gbalign-left.tex}{opt-gbalign-left.tex},
项对齐(标签与内容等间距)见:
\href{run:./example/opt-gbalign-gb.tex}{opt-gbalign-gb.tex}。
+ 效果示例如图\ref{fig:eg:optgbalign}所示。
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbalign=right 即右对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-right.pdf}}}
+\subfigure[\heiti gbalign=left 即左对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-left.pdf}}}\\
+\subfigure[\heiti gbalign=center 即中对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-center.pdf}}}
+\subfigure[\heiti gbalign=gb7714-2015 即项对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-gb.pdf}}}
+\end{tcolorbox}
+\caption{文献表标签对齐选项gbalign效果}\label{fig:eg:optgbalign}
+\end{figure}
+ \pdfbookmark[4]{gbpub}{gbpub}
\item[gbpub]=\textbf{true},false. \hfill default is true
为控制出版信息缺失处理增加的选项。
@@ -369,8 +418,44 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
顺序编码制测试(著者年份制类似)见:
\href{run:./example/opt-gbpub-true.tex}{opt-gbpub-true.tex},
\href{run:./example/opt-gbpub-false.tex}{opt-gbpub-false.tex}。
+ 效果示例如图\ref{fig:eg:optgbpub}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbpub=false 出版项缺省]{\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0cm 9cm 4.5cm,clip=true]{egphoto/opt-gbpub-false.pdf}}}
+\subfigure[\heiti gbpub=true 出版项补充]{\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0cm 10cm 4.5cm,clip=true]{egphoto/opt-gbpub-true.pdf}}}
+\end{tcolorbox}
+\caption{文献表出版项缺失处理选项gbpub效果}\label{fig:eg:optgbpub}
+\end{figure}
+
+ \pdfbookmark[4]{gbnoauthor}{gbnoauthor}
+ \item[gbnoauthor]=true,\textbf{false}. \hfill default is false
+
+ 为著者年份制增加的选项,用于控制责任者缺失时的处理。
+ \begin{itemize}
+ \item gbnoauthor=false,当作者信息缺失时默认不做处理,使用标准样式的处理方式;
+ \item gbnoauthor=true,则根据GB/T 7714-2015 的要求进行处理,中文文献使用“佚名”来代替author,英文文献用“Anon”来代替author。
+ \end{itemize}
+ 测试结果见:
+ \href{run:./example/opt-gbnoauthor-true.tex}{opt-gbnoauthor-true.tex},
+ \href{run:./example/opt-gbnoauthor-false.tex}{opt-gbnoauthor-false.tex}。
+ 效果示例如图\ref{fig:eg:optgbnoauthor}所示。
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbnoauthor=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.4cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbnoauthor-true.pdf}}}
+\subfigure[\heiti gbnoauthor=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.4cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbnoauthor-false.pdf}}}
+\end{tcolorbox}
+\caption{文献表作者缺失处理选项gbnoauthor效果}\label{fig:eg:optgbnoauthor}
+\end{figure}
+ \pdfbookmark[4]{gbbiblabel}{gbbiblabel}
\item[gbbiblabel]=\textbf{bracket},parens,plain,dot,box,circle. \hfill default is bracket
为顺序编码制增加的选项,用于选择参考文献表序号数字的格式。
@@ -382,19 +467,25 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\item gbbiblabel=box,序号数字由方框包围,比如\framebox{1};
\item gbbiblabel=circle,序号数字由圆圈包围,比如\textcircled{1}。
\end{itemize}
+ 效果示例如图\ref{fig:eg:optgbbiblabel}所示。
- \item[gbnoauthor]=true,\textbf{false}. \hfill default is false
-
- 为著者年份制增加的选项,用于控制责任者缺失时的处理。
- \begin{itemize}
- \item gbnoauthor=false,当作者信息缺失时默认不做处理,使用标准样式的处理方式;
- \item gbnoauthor=true,则根据GB/T 7714-2015 的要求进行处理,中文文献使用“佚名”来代替author,英文文献用“Anon”来代替author。
- \end{itemize}
- 测试结果见:
- \href{run:./example/opt-gbnoauthor-true.tex}{opt-gbnoauthor-true.tex},
- \href{run:./example/opt-gbnoauthor-false.tex}{opt-gbnoauthor-false.tex}。
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbbiblabel=box] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabela.pdf}}}
+\subfigure[\heiti gbbiblabel=bracket] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabelb.pdf}}}\\
+\subfigure[\heiti gbbiblabel=parens] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabelc.pdf}}}
+\subfigure[\heiti gbbiblabel=dot] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabeld.pdf}}}\\
+\subfigure[\heiti gbbiblabel=plain] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabele.pdf}}}
+\subfigure[\heiti gbbiblabel=circle] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabelf.pdf}}}\\
+\end{tcolorbox}
+\caption{文献表标签数字格式选项gbbiblabel效果}\label{fig:eg:optgbbiblabel}
+\end{figure}
+ \pdfbookmark[4]{gbnamefmt}{gbnamefmt}
\item[gbnamefmt]=\textbf{uppercase},lowercase,givenahead,familyahead,pinyin. \hfill default is uppercase
为姓名大小写格式控制增加的选项。
@@ -411,8 +502,25 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
测试结果见:
\href{run:./example/opt-gbnamefmt.tex}{opt-gbnamefmt.tex},
\href{run:./example/opt-gbnamefmt-default.tex}{opt-gbnamefmt-default.tex}。
+ 效果示例如图\ref{fig:eg:optgbnamefmt}所示。
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbnamefmt=uppercase] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-a.pdf}}}
+\subfigure[\heiti gbnamefmt=lowercase] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-b.pdf}}}\\
+\subfigure[\heiti gbnamefmt=givenahead] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-c.pdf}}}
+\subfigure[\heiti gbnamefmt=familyahead] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-d.pdf}}}\\
+\subfigure[\heiti gbnamefmt=pinyin] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-e.pdf}}}
+\subfigure[\heiti gbnamefmt=reverseorder] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-f.pdf}}}\\
+\end{tcolorbox}
+\caption{文献表姓名格式选项gbnamefmt效果}\label{fig:eg:optgbnamefmt}
+\end{figure}
+
+ \pdfbookmark[4]{gbtype}{gbtype}
\item[gbtype]=\textbf{true},false. \hfill default is true
为控制是否输出题名后面的文献类型和载体标识符而增加的选项。
@@ -420,7 +528,44 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\item gbtype=true,根据GB/T 7714-2015 要求输出标识符,例如“在线的期刊析出文献题名[J/OL]”。
\item gbtype=false,则不输出标识符,例如“在线的期刊析出文献题名”。
\end{itemize}
+ 效果示例如图\ref{fig:eg:optgbtype}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbtype=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbtype-true.pdf}}}
+\subfigure[\heiti gbtype=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbtype-false.pdf}}}
+\end{tcolorbox}
+\caption{文献类型标识符输出控制选项}\label{fig:eg:optgbtype}
+\end{figure}
+
+
+ \pdfbookmark[4]{gbmedium}{gbmedium}
+ \item[gbmedium]=\textbf{true},false. \hfill default is true
+
+ 为控制是否输出题名后面的文献载体标识符而增加的选项。
+ \begin{itemize}
+ \item gbmedium=true,根据GB/T 7714-2015 要求输出载体标识符,例如“在线的期刊析出文献题名[J/OL]”。
+ \item gbmedium=false,则不输出标识符,例如“在线的期刊析出文献题名[J]”。
+ \end{itemize}
+ 注意:gbtype选项是更大范围的控制,包括了gbmedium。当gbtype=false时,无所谓gbmedium设置什么,因为整个文献类型和载体标识符整个都不显示,而gbmedium只是设置载体标识的。
+ 效果示例如图\ref{fig:eg:optgbmedium}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbmedium=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbmedium-true.pdf}}}
+\subfigure[\heiti gbmedium=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbmedium-false.pdf}}}
+\end{tcolorbox}
+\caption{文献载体标识符输出控制选项}\label{fig:eg:optgbmedium}
+\end{figure}
+
+ \pdfbookmark[4]{gbfieldtype}{gbfieldtype}
\item[gbfieldtype]=true,\textbf{false}. \hfill default is false
为控制是否输出type域而增加的选项。
@@ -438,8 +583,20 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
二是设置type域,比如在bib文件直接设置需要输出的字符,比如type=\{[博士学位论文]\}。
\end{itemize}
+ 效果示例如图\ref{fig:eg:optgbfieldtype}所示。
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbfieldtype=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=8cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-gbfieldtype-true.pdf}}}
+\subfigure[\heiti gbfieldtype=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=8cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-gbfieldtype-false.pdf}}}
+\end{tcolorbox}
+\caption{文献表类型(type)域输出控制选项}\label{fig:eg:optgbfieldtype}
+\end{figure}
+ \pdfbookmark[4]{gbpunctin}{gbpunctin}
\item[gbpunctin]=\textbf{true},false. \hfill default is true
为控制inbook,incollection,inproceedings中析出来源文献前的\texttt{//}符号而增加的选项。
@@ -450,7 +607,149 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\lstinline!\DefineBibliographyStrings{english}{in={}}!,\lstinline!\DefineBibliographyStrings{english}{incn={}}!。
之所以用加cn的本地化字符串是为了适应某些样式对中英文文献的区别设置。
\end{itemize}
+ 效果示例如图\ref{fig:eg:optgbpunctin}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbpunctin=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbpunctin-true.pdf}}}
+\subfigure[\heiti gbpunctin=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbpunctin-false.pdf}}}
+\end{tcolorbox}
+\caption{析出文献标识符号控制选项}\label{fig:eg:optgbpunctin}
+\end{figure}
+
+ \pdfbookmark[4]{gbtitlelink}{gbtitlelink}
+ \item[gbtitlelink]=true,\textbf{false}. \hfill default is false
+
+ 为设置标题的超链接增加的选项。
+ \begin{itemize}
+ \item gbtitlelink=false,即默认不给标题设置超链接。
+ \item gbtitlelink=true,当文献存在url 域时为文献标题设置超链接。
+ \end{itemize}
+ 测试文件见:
+ \href{run:example/opt-gbtitlelink.tex}{opt-gbtitlelink.tex}。
+ 效果示例如图\ref{fig:eg:optgbtitlelink}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbtitlelink=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbtitlelink-true.pdf}}}
+\subfigure[\heiti gbtitlelink=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbtitlelink-false.pdf}}}
+\end{tcolorbox}
+\caption{文献标题超链接控制选项}\label{fig:eg:optgbtitlelink}
+\end{figure}
+
+ \pdfbookmark[4]{gblocal}{gblocal}
+ \item[gblocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015
+ \item[gbcitelocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015
+ \item[gbbiblocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015
+
+ 为设置引用标注标签和文献表中的本地化字符串而增加的选项。其中gbcitelocal 用于控制标注中的本地化字符串,而gbbiblocal用于控制文献表中的本地化字符串,gblocal选项等价于同时设置gbcitelocal 和 gbbiblocal。
+ 配合\lstinline[breaklines=true]!\DefineBibliographyStrings!命令对本地化字符串进行设置可以实现一些特殊的效果。图\ref{fig:content:fmtc}就是该选项的一个使用示例。
+ \begin{itemize}
+ \item gblocal=gb7714-2015,即默认区分中英文,不同语言采用不同的字符串比如中文使用“等”“和”,而英文使用“et al.”“and”。
+ \item gblocal=chinese,强制设置所有的本地化字符串使用中文。
+ \item gblocal=english,强制设置所有的本地化字符串使用英文。
+ \end{itemize}
+ 测试文件见:
+ \href{run:egfigure/egcontentfmtc.tex}{egcontentfmtc.tex}。
+ 效果示例如图\ref{fig:eg:optgblocal}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\centering
+\subfigure[\heiti gblocal=gb7714-2015] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gblocal-gb.pdf}}}\hfill
+\subfigure[\heiti gblocal=chinese] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gblocal-chinese.pdf}}}\\
+\subfigure[\heiti gblocal=english] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gblocal-english.pdf}}}
+\end{tcolorbox}
+\caption{常用本地化字符串的中英文控制选项}\label{fig:eg:optgblocal}
+\end{figure}
+
+ \pdfbookmark[4]{mergedate}{mergedate}
+ \item[mergedate]=true,false,none.
+
+ 为著者年份制是否在文献表中作者后面输出日期信息而增加了选项值none。
+ \begin{itemize}
+ \item mergedate=true,著者年份制文献表仅在作者后输出日期
+ \item mergedate=false,著者年份制文献表在作者后和出版项中输出日期
+ \item mergedate=none,著者年份制文献表仅在出版项中输出日期。该选项用于满足中科院大学的著者年份制格式要求。
+ \item no mergedate,即不给出该选项,这是gb7714-2015ay默认的情况,仅在作者后输出日期且已经根据国标格式化。
+ \end{itemize}
+ 效果示例如图\ref{fig:eg:optmergedate}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti mergedate 不给出] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-a.pdf}}}\\
+\subfigure[\heiti mergedate=true] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-b.pdf}}}\\
+\subfigure[\heiti mergedate=false] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-c.pdf}}}\\
+\subfigure[\heiti mergedate=none] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-d.pdf}}}\\
+\end{tcolorbox}
+\caption{作者年制文献表年份格式控制选项}\label{fig:eg:optmergedate}
+\end{figure}
+
+
+ \pdfbookmark[4]{gblanorder}{gblanorder}
+ \item[gblanorder]=\textbf{chineseahead},englishahead,userdefinedstr like:cn;en;ru;fr;jp;kr . \hfill default is chineseahead
+
+ 为著者年份制文献不同文种分集排序而增加的选项。
+ \begin{itemize}
+ \item gblanorder=chineseahead,即默认做中文文献在前英文文献在后的排序,各语言顺序为: cn;jp;kr;en;fr;ru。
+ \item gblanorder=englishahead,做英文在前中文文献在后的排序,各语言顺序为: en;fr;ru;cn;jp;kr。
+ \item gblanorder=自定义字符串,比如cn;en;ru;fr;jp;kr。这是一个用分号分隔的语言缩写名构成的字符串,缩写名的前后顺序代表文献表中文种分集的顺序。
+ \end{itemize}
+
+ 测试文档见:\href{run:./example/opt-gblanorder.tex}{opt-gblanorder.tex}。
+ 效果示例如图\ref{fig:eg:optgblanorder}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\centering
+\subfigure[\heiti gblanorder=chineseahead] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 4.0cm,clip=true]{egphoto/opt-gblanorder-chineseahead.pdf}}}\hfill
+\subfigure[\heiti gblanorder=englishahead] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 4.0cm,clip=true]{egphoto/opt-gblanorder-englishahead.pdf}}}\\
+\subfigure[\heiti gblanorder=cn;en;ru;fr;jp;kr] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 4.0cm,clip=true]{egphoto/opt-gblanorder-udf.pdf}}}
+\end{tcolorbox}
+\caption{多语言文献表语言排序控制选项}\label{fig:eg:optgblanorder}
+\end{figure}
+
+
+ \pdfbookmark[4]{gbannote}{gbannote}
+ \item[gbannote]=true,\textbf{false}. \hfill default is false
+
+ 为控制是否在文献条目后面输出由annotation或annote域提供的注释信息而增加的选项。
+ \begin{itemize}
+ \item gbannote=false,即默认不输出。
+ \item gbannote=true,输出注释信息。
+ \end{itemize}
+
+ 测试文档见:\href{run:./example/opt-gbannote.tex}{opt-gbannote.tex}。
+ 效果示例如图\ref{fig:eg:optgbannote}所示。
+
+\begin{figure}[!htb]
+\centering
+\begin{tcolorbox}[left skip=0pt,right skip=0pt,%
+width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,%
+leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
+\subfigure[\heiti gbannote=true] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 16cm 2.8cm,clip=true]{egphoto/opt-gbannote-true.pdf}}}\\
+\subfigure[\heiti gbannote=false] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 16cm 2.8cm,clip=true]{egphoto/opt-gbannote-false.pdf}}}
+\end{tcolorbox}
+\caption{文献的附加注释输出控制选项}\label{fig:eg:optgbannote}
+\end{figure}
+
+ \pdfbookmark[4]{gbctexset}{gbctexset}
\item[gbctexset]=\textbf{true},false. \hfill default is true
为控制参考文献标题内容的设置方式增加的选项。
@@ -467,6 +766,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\lstinline[breaklines=true]!\printbibliography[title=title you want]!。
+ \pdfbookmark[4]{gbcodegbk}{gbcodegbk}
\item[gbcodegbk]=true,\textbf{false}. \hfill default is false
为兼容GBK编码的文档增加的选项。
@@ -477,37 +777,11 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
当在源文档前面增加 XeTeX 原语:\lstinline!\XeTeXinputencoding "GBK"! 后,GBK编码的文档也可以使用xelatex编译,这时应设置为false或不给出该选项。测试文件见:
\href{run:example/codeopt-gbcodegbk.tex}{codeopt-gbcodegbk.tex}。
- \item[gbstrict]=\textbf{true},false. \hfill default is true
-
- 为避免输出bib文件中多余的域信息而增加选项,目的是为了兼容一些bib文件,因为某些bst样式文件进行中英文判断需要在bib文件中增加类似language这样的域作为支撑,而其中某些域在标准的biblatex样式文件中是默认输出的。
- \begin{itemize}
- \item gbstrict=true,即默认不输出。
- \item gbstrict=false,需要还原标准样式的输出情况时使用。
- \end{itemize}
-
-
- \item[gbfieldstd]=true,\textbf{false}. \hfill default is false
-
- 为控制一些域如标题,网址,卷域的格式而增加选项。目的是使用一些标准样式的处理来增加格式多样性。
- \begin{itemize}
- \item gbfieldstd=false,即默认使用GB/T 7714-2015要求的样式。
- \item gbfieldstd=true,即还原使用标准样式的格式,比如使用引号,字体,加引导词等。当然要调整这些格式也可采用biblatex提供的更为直接的设置域格式的方式。
- \end{itemize}
-
-
- \item[gbtitlelink]=true,\textbf{false}. \hfill default is false
-
- 为设置标题的超链接增加的选项。
- \begin{itemize}
- \item gbtitlelink=false,即默认不给标题设置超链接。
- \item gbtitlelink=true,当文献存在url 域时为文献标题设置超链接。
- \end{itemize}
- 测试文件见:
- \href{run:example/opt-gbtitlelink.tex}{opt-gbtitlelink.tex}。
+ \pdfbookmark[4]{gbstyle}{gbstyle}
\item[gbstyle]=\textbf{true},false. \hfill default is true
- 为实现多种样式并存而增加的选项。
+ 为实现多种样式并存而增加的选项。仅用于gb7714-2015ms样式中。
\begin{itemize}
\item gbstyle=true,即默认全部文献使用gb7714-2015样式。
\item gbstyle=false,仅中文文献使用gb7714-2015样式,其它语言文献使用biblatex默认样式。
@@ -515,21 +789,8 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
该选项的实现原理是把所有国标格式设置局部化到每一条文献打印时,处理时首先判断gbstyle 选项及文献的语言,当满足要求则使用这些局部化格式,否则使用默认的标准样式。这种实现为一篇文档内实现两种样式提供解决思路,尽管目前非中文语言文献的著录格式是标准样式,但只要对标准样式做进一步的修改就可以形成符合某种格式规范的样式,比如像ieee,nature等的样式。因此存在中文使用GB/T 7714-2015 著录格式,而英文文献使用ieee等著录格式的可能性。测试文档见:\href{run:./example/opt-gbstyle.tex}{opt-gbstyle.tex}。
- \item[gblocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015
- \item[gbcitelocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015
- \item[gbbiblocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015
-
- 为设置引用标注标签和文献表中的本地化字符串而增加的选项。其中gbcitelocal 用于控制标注中的本地化字符串,而gbbiblocal用于控制文献表中的本地化字符串,gblocal选项等价于同时设置gbcitelocal 和 gbbiblocal。
- 配合\lstinline[breaklines=true]!\DefineBibliographyStrings!命令对本地化字符串进行设置可以实现一些特殊的效果。图\ref{fig:content:fmtc}就是该选项的一个使用示例。
- \begin{itemize}
- \item gblocal=gb7714-2015,即默认区分中英文,不同语言采用不同的字符串比如中文使用“等”“和”,而英文使用“et al.”“and”。
- \item gblocal=chinese,强制设置所有的本地化字符串使用中文。
- \item gblocal=english,强制设置所有的本地化字符串使用英文。
- \end{itemize}
- 测试文件见:
- \href{run:egfigure/egcontentfmtc.tex}{egcontentfmtc.tex}。
-
+ \pdfbookmark[4]{gbfootbib}{gbfootbib}
\item[gbfootbib]=true,\textbf{false}. \hfill default is false
为实现国标样式的脚注文献表格式而增加的选项。
@@ -582,7 +843,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
对于表格环境中的引用无法产生脚注文献表的问题,可以将其置于小页环境中实现或者采用前述图标标题中的类似处理方式。
注意:latex核心代码参考latex.ltx,而hyperref代码参考hyperref.STY。
-
+ \pdfbookmark[4]{gbfnperpage}{gbfnperpage}
\item[gbfnperpage]=true,\textbf{false}. \hfill default is false
为脚注计数器根据页码更新而增加的选项。
@@ -594,37 +855,23 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
注意,若要让脚注计数器与其它计数器比如chapter等关联,那么采用latex的常规方法就能解决,比如使用latex内核常用的\verb|\@addtoreset|命令。
- \item[mergedate]=true,false,none.
-
- 为著者年份制是否在文献表中作者后面输出日期信息而增加了选项值none。
- \begin{itemize}
- \item mergedate=true,著者年份制文献表仅在作者后输出日期
- \item mergedate=false,著者年份制文献表在作者后和出版项中输出日期
- \item mergedate=none,著者年份制文献表仅在出版项中输出日期。该选项用于满足中科院大学的著者年份制格式要求。
- \item no mergedate,即不给出该选项,这是gb7714-2015ay默认的情况,仅在作者后输出日期且已经根据国标格式化。
- \end{itemize}
-
- \item[gblanorder]=\textbf{chineseahead},englishahead,userdefinedstr like:cn;en;ru;fr;jp;kr . \hfill default is chineseahead
+ \item[gbstrict]=\textbf{true},false. \hfill default is true
- 为著者年份制文献不同文种分集排序而增加的选项。
+ 为避免输出bib文件中多余的域信息而增加选项,目的是为了兼容一些bib文件,因为某些bst样式文件进行中英文判断需要在bib文件中增加类似language这样的域作为支撑,而其中某些域在标准的biblatex样式文件中是默认输出的。
\begin{itemize}
- \item gblanorder=chineseahead,即默认做中文文献在前英文文献在后的排序,各语言顺序为: cn;jp;kr;en;fr;ru。
- \item gblanorder=englishahead,做英文在前中文文献在后的排序,各语言顺序为: en;fr;ru;cn;jp;kr。
- \item gblanorder=自定义字符串,比如cn;en;ru;fr;jp;kr。这是一个用分号分隔的语言缩写名构成的字符串,缩写名的前后顺序代表文献表中文种分集的顺序。
+ \item gbstrict=true,即默认不输出。
+ \item gbstrict=false,需要还原标准样式的输出情况时使用。
\end{itemize}
- 测试文档见:\href{run:./example/opt-gblanorder.tex}{opt-gblanorder.tex}。
- \item[gbannote]=true,\textbf{false}. \hfill default is false
+ \item[gbfieldstd]=true,\textbf{false}. \hfill default is false
- 为控制是否在文献条目后面输出由annotation或annote域提供的注释信息而增加的选项。
+ 为控制一些域如标题,网址,卷域的格式而增加选项。目的是使用一些标准样式的处理来增加格式多样性。
\begin{itemize}
- \item gbannote=false,即默认不输出。
- \item gbannote=true,输出注释信息。
+ \item gbfieldstd=false,即默认使用GB/T 7714-2015要求的样式。
+ \item gbfieldstd=true,即还原使用标准样式的格式,比如使用引号,字体,加引导词等。当然要调整这些格式也可采用biblatex提供的更为直接的设置域格式的方式。
\end{itemize}
- 测试文档见:\href{run:./example/opt-gbannote.tex}{opt-gbannote.tex}。
-
\end{description}
@@ -857,7 +1104,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\begin{table}[!htb]
\centering
\caption{著者年份制常用命令示例}\label{tab:cite:authoryear}
-\hspace{-1cm}{\parbox{\linewidth}{\includegraphics[scale=0.95]{egciteaytab.pdf}}}
+\hspace{-1cm}{\parbox{\linewidth}{\includegraphics[scale=0.95,page=2]{egciteaytab.pdf}}}
\end{table}
@@ -965,9 +1212,9 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
用法具体见例\ref{eg:biblist:fontset},结果如图\ref{fig:par:fmt}所示。
测试用例见\href{run:example/testfontinbiblio.tex}{testfontinbiblio.tex}。
-\begin{example}{文献表段落格式、字体、颜色、间距控制}{eg:biblist:fontset}
+\begin{example}{文献表段落格式、字体、颜色}{eg:biblist:fontset}
\begin{texlist}
-% 换行的控制
+% 文献项之间的间隔符控制(比如是否换行)
% 选项 block=none , space , par , nbpar , ragged
% 或\renewcommand*{\newblockpunct}{\par\nobreak}
% 字体的控制:\textit,sl,emph-楷体,\textbf,sf-黑体,\texttt-仿宋,\textsc,md,up-宋体
@@ -979,14 +1226,6 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename
\renewcommand{\bibpubfont}{\itshape\color{violet}}%
% url和doi字体
\def\UrlFont{\ttfamily} %\urlstyle{sf} %\def\UrlFont{\bfseries}
-
-% 间距的控制
-\setlength{\bibitemsep}{0ex}\setlength{\bibnamesep}{0ex}\setlength{\bibinitsep}{0ex}
-% 文献表中各条文献的缩进控制
-%\setlength{\bibitemindent}{0em} % bibitemindent表示一条文献中第一行相对后面各行的缩进
-%\setlength{\bibhang}{0pt} % 著者-出版年制中 bibhang 表示的各行起始位置到页边的距离,顺序编码制中 bibhang+labelnumberwidth 表示各行起始位置到页边的距离
-
-% 标点类型的控制(全局字体能控制标点的字体)
\end{texlist}
\end{example}
@@ -1001,6 +1240,105 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\caption{文献表段落格式示例}\label{fig:par:fmt}
\end{figure}
+文献表各条目之间的竖直间距控制如例\ref{eg:biblist:vspace}所示:
+
+\begin{example}{文献表竖直间距控制}{eg:biblist:vspace}
+\begin{texlist}
+% 竖直间距的控制
+\setlength{\bibitemsep}{0ex}
+\setlength{\bibnamesep}{0ex}
+\setlength{\bibinitsep}{0ex}
+\end{texlist}
+\end{example}
+
+文献表的水平缩进控制,两种编制方式下是不同的。对于著者-出版年制文献表,bibitemindent表示一条文献中第一行相对后面各行的缩进,bibhang 表示页边到文献各行起始位置的距离。因此要调整缩进就是要设置这两尺寸。
+
+对于顺序编码制文献表,由于存在数字标签,且其宽度与参考文献数量相关,所以这个宽度是动态变的,无能提前设定的,而是在文献表生成时给出,所以调整缩进需要在文献表输出环境中调整。由于顺序编码样式使用了两类输出环境,所以需要根据设定的选项区分处理:
+
+一是采用list环境的文献表,即设置gbalign=left、right、center时(即顺序编码标签是左对齐、右对齐和居中对齐的情况),在重定义的文献表环境中,调整bibitemindent和bibhang两个尺寸,默认情况下bibhang+labelnumberwidth的长度是页边到各行起始位置的距离。
+
+二是采用正常段落环境的文献表,即设置gbalign=gb7714-2015时(即项对齐情况,就是各条文献是自身对齐的情况),在重定义的命令中通过调整lengthid尺寸来设置每条参考文献第二行开始的缩进距离。
+调整方法见例\ref{eg:biblist:hspace}。
+
+\begin{example}{文献表水平缩进控制}{eg:biblist:hspace}
+\begin{texlist}
+% 著者-出版年制文献表缩进控制
+\setlength{\bibitemindent}{0em} % bibitemindent表示一条文献中第一行相对后面各行的缩进
+\setlength{\bibhang}{0pt} % 著者-出版年制中 bibhang 表示的各行起始位置到页边的距离
+
+% 顺序编码制文献表缩进控制
+% 调整顺序标签与文献内容的间距
+\setlength{\biblabelsep}{2mm}
+
+% 调整各条文献的缩进:
+%-1-----gbalign=left、right、center时,重定义 bibenvironment
+\defbibenvironment{bibliography}%修改对齐环境-调整缩进
+ {\list
+ {\printtext[labelnumberwidth]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}}}
+{%
+%这里是所做的调整,通过设置\bibitemindent,\bibhang调整缩进
+\addtolength{\bibitemindent}{\labelnumberwidth}%
+\addtolength{\bibitemindent}{\biblabelsep}%
+\addtolength{\bibhang}{-\labelnumberwidth} %
+\addtolength{\bibhang}{-\biblabelsep}%
+ %
+ %以下是默认的设置
+ \setlength{\labelwidth}{\labelnumberwidth}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \setlength{\leftmargin}{\bibhang}%
+ \addtolength{\leftmargin}{\labelnumberwidth}%
+ \setlength{\itemindent}{\bibitemindent}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}
+ {\endlist}
+ {\item}
+
+%-2-----gbalign=gb7714-2015时,重定义 \itemcmd命令
+\renewcommand{\itemcmd}{%%修改对齐环境-调整缩进
+\settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}}
+%
+%%这里是所做的调整,以下两句通过调整\lengthid来调整缩进
+\setlength{\lengthid}{0pt}
+\addtolength{\lengthid}{-\biblabelsep}
+%
+%如下是默认设置
+\addtolength{\lengthid}{\biblabelsep}
+\setlength{\lengthlw}{\textwidth}
+\addtolength{\lengthlw}{-\lengthid}
+\addvspace{\bibitemsep}%恢复\bibitemsep的作用
+%\parshape 2 0em \textwidth \lengthid \lengthlw
+\hangindent\lengthid
+\mkgbnumlabel{\printfield{labelnumber}}%
+\hspace{\biblabelsep}}
+\end{texlist}
+\end{example}
+
+文献表中有时需要调整标点为中文的全角标点,可以通过不同机制下的标点设置来调整。
+调整方式如例\ref{eg:biblist:separator}所示。有时在本地化字符串中也可以实现标点调整,比如and,in等本地化字符串。有时在域格式中也可能出现标点调整,比如title域格式。而且因为不同语言的处理,可能内部也存在标点的调整。具体情况是比较复杂的,这里不再一一列举,一些修改示例可以参考:
+\href{run:./chinese-erj.bbx}{chinese-erj.bbx},
+\href{run:./egthesis/thesis-uibe-numeric.tex}{thesis-uibe-numeric.tex}。具体的标点命令的意义详见biblatex手册。
+
+\begin{example}{文献表常见标点控制}{eg:biblist:separator}
+\begin{texlist}
+% 标点类型的控制(注意:全局字体能控制标点的字体)
+
+%文献表各条文献中各单元间隔标点设置(与异步标点机制相关的)
+\renewcommand*{\newunitpunct}{,}%\addcomma\space %,
+\renewcommand*{\finentrypunct}{\iffieldequalstr{userd}{chinese}{。}{\adddot}}
+
+%姓名格式相关的标点
+\DeclareDelimFormat{nameyeardelim}{,}%\addcomma\addspace
+%\DeclareDelimFormat[bib,biblist]{nameyeardelim}{,}%\addcomma\addspace
+\DeclareDelimFormat{multinamedelim}{,}%[bib,biblist]
+\DeclareDelimFormat{finalnamedelim}{,}
+\DeclareDelimFormat{andothersdelim}{,}
+\renewcommand*{\revsdnamepunct}{,}%
+\end{texlist}
+\end{example}
+
\subsubsection{条目著录格式控制}\label{sec:entry:fmt}
文献表输出的格式即参考文献著录样式,除了整体的段落格式外,还有条目内部的格式可以控制,条目内部的这些项称为著录项,这些著录项的格式通常可由选项控制。可用选项除了biblatex 提供的标准选项外,也包括样式包提供的选项。
@@ -1132,7 +1470,7 @@ sorting=gb7714-2015,gblanorder=chineseahead,sortlocale=zh__pinyin
文献表中文献的排序通常是由处理bib文件的后端程序实施的,比如bibtex或biber程序。通常biblatex选择biber作为后端程序来实现更灵活的排序机制。biber在处理过程中读取bib文件信息并根据biblatex宏包和文献样式在bcf文件中输出设置信息执行排序。而bibtex程序则在读取bib文件后根据bst样式进行排序,尽管可以让bibtex读入特殊格式bib文件来提供一些设置参数,但总的来说基于bibtex的文献排序是由bst样式决定的。而biber程序则是提供了一套工具,具体的排序方式是由biblatex宏包和样式文件中的设置决定的,biber根据这些设置执行特定的逻辑来实现排序。
-biblatex通过sorting选项选择排序模板来进行排序,而排序模板是可以自定义的。
+biblatex通过sorting选项选择排序模板来进行排序,而排序模板是可以自定义的。gb7714-2015及
gb7714-2015ay样式提供了gblanorder选项来选择文种的排列顺序,其本质是对排序模板中与语言相关的域进行设置,因此它是与sorting选项选择的排序模板密切相关的,biblatex提供的标准样式排序模板并不支持该选项。
而sortlocale选项则是针对字符排序选择本地化调整方案,比如选项zh\_\_pinyin就是选择针对中文字符根据拼音进行排序。本地化调整方案是由perl模块提供,中文字符排序的可用选项值详见前面的sortlocale选项说明。需要注意的是本地化字符排序调整方案设置也可以通过biber命令行选项提供,biblatex设置和biber命令行设置两种方式见例\ref{eg:sort:opts}、例\ref{eg:sort:bibercmd}。
@@ -1173,7 +1511,7 @@ biber -l zh__stroke jobname
\item[none] 不进行排序。所有的条目按照引用顺序处理。
\end{description}
-而gb7741-2015ay样式提供了4个排序模板:
+而gb7741-2015和gb7741-2015ay样式提供了4个排序模板:
\begin{description}
\item[gb7714-2015] 以语言、作者、年份、标题、升序排列
@@ -1182,7 +1520,7 @@ biber -l zh__stroke jobname
\item[gbyntd] 以语言、年份、作者、标题、降序排列
\end{description}
-在使用gb7714-2015ay样式时可以使用上述排序模板。用户也可以增加自定义模板,比如为了处理多音字的问题,用户可以手动设置key域用来对中文文献进行排序,定义如下的排序模板:
+在使用gb7714-2015和gb7714-2015ay样式时可以使用上述排序模板。用户也可以增加自定义模板,比如为了处理多音字的问题,用户可以手动设置key域用来对中文文献进行排序,定义如下的排序模板:
\begin{example}{针对多音字问题的排序模板}{eg:sort:multipinyin}
\begin{texlist}
@@ -1474,7 +1812,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt]
\deflength{\textparwd}{\linewidth-1cm}
\includegraphics[width=\textparwd]{egmsindfrefsec.pdf}
\end{tcolorbox}
-\caption{不同参考文献分节采用不同著录样式}\label{fig:eg:ms}
+\caption{不同参考文献分节采用不同著录样式}\label{fig:eg:mx}
\end{figure}
测试见文档\href{run:egfigure/egmsindfrefsec.tex}{egmsindfrefsec.tex}。
@@ -1818,7 +2156,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建
\subsection{GB/T 7714-2015 标准示例}
-详见文档:\href{run:./stdGBT7714-2015.pdf}{GBT7714-2015std}
+详见文档:\href{run:./stdGBT7714-2015.pdf}{stdGBT7714-2015.pdf}
\subsection{多语言支持相关测试示例}
@@ -1869,7 +2207,7 @@ beamer类示例,参见: \href{run:./example/egbeamer.tex}{顺序编码制};
\href{run:./example/testallformat.tex}{testallformat.tex}。
详见文档:
-\href{run:./example/stdGBT7714-2015eg.pdf}{GBT7714-2015egstd},
+\href{run:./example/stdGBT7714-2015eg.pdf}{stdGBT7714-2015eg.pdf},
\href{run:./example/stdgbT7714-2015fmt.pdf}{stdgbT7714-2015fmt.pdf}。
@@ -2104,7 +2442,7 @@ author.title[usera].organization/instiution,date或year:pages(date/enddate/event
\begin{refentry}{}{}
会议文集的biblatex的entrytype为:proceedings。文献类型标识用C表示。
-\paragraph{其著录格式为} 采用与book类似的格式。
+\bibliofmt{其著录格式为} 采用与book类似的格式。
\end{refentry}
\subsubsection{会议文集中析出的文献/inproceedings}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.bbx
index 7a0646b562..dbb03b854a 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/chinese-erj.bbx
@@ -75,7 +75,7 @@
%为标注和文献表中标点格式,重设and本地化字符串
%==================================================
\DefineBibliographyStrings{english}{
- and = { and },
+ and = { and},%and后面的空格在finalnamedelim已经加过了,所以这里去掉20191009
andcn = {、},
andincitecn = {和},%将标注中的分开,便于与文献表中的区分
andincite = {\&},
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx
index 7bc20e9163..2178050a45 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx
@@ -199,12 +199,28 @@
\DeclareDatamodelFields[type=field,datatype=literal]{shortbooktitle}
\DeclareDatamodelFields[type=field,datatype=literal]{lansortorder}
+ %因为biblatex更新3.14版本以后,biber对于为声明数据模型的条目类型
+ %不再默认读取,而是以空字符串作为条目类型名,自然在条目定义alias时
+ %就会出现问题,因此显式的声明一下newspaper,然后保留后面采用alias的方式
+ %而standard类型则是采用另一种方式直接在sourcemap中转换为其它类型。
+ \@ifpackagelater{biblatex}{2019/11/30}{%2019/12/01 v3.14
+ \DeclareDatamodelEntrytypes{newspaper}%
+ }{}
+
%=====================================================================
% 设置宏包选项
%=====================================================================
%
+ % 增加一个控制是否输出文献载体的选项
+ % 20191125,v1,0s,hzz
+ \newtoggle{bbx:gbmedium}
+ \DeclareBibliographyOption{gbmedium}[true]{%biblatex低版本
+ \settoggle{bbx:gbmedium}{#1}}
+ \ExecuteBibliographyOptions{gbmedium}
+
+ %
% 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息
% 20190509,v1,0s,hzz
\newtoggle{bbx:gbannote}
@@ -606,7 +622,39 @@
% numeric样式,不使用该选项,这里给出仅为兼容性考虑
% v1.0q,20190307,hzz
%
- \DeclareBibliographyOption[string]{gblanorder}[chineseahead]{}
+ % 增加不同语言排序的切换选项
+ % gblanorder=chineseahead的顺序为cn,jp,kr,en,fr,ru
+ % gblanorder=englishahead的顺序为en,fr,ru,cn,jp,kr
+ % gblanorder=cn;en;ru;fr;jp;kr的顺序为指定的cn;en;ru;fr;jp;kr,自定义内容可以随意写以分号分隔
+ % v1.0q,20190307,hzz
+ %
+ \DeclareBibliographyOption[string]{gblanorder}[chineseahead]{%
+ \ifstrequal{#1}{chineseahead}%%中文在前的顺序
+ {\gdef\lancnorder{1}\gdef\lanjporder{2}\gdef\lankrorder{3}%
+ \gdef\lanenorder{4}\gdef\lanfrorder{5}\gdef\lanruorder{6}}%
+ {%
+ \ifstrequal{#1}{englishahead}%
+ {\execlanodeah\dealsortlan}%
+ {\execlanodudf{#1}\dealsortlan}%
+ }%
+ }
+ \ExecuteBibliographyOptions{gblanorder}
+
+ \def\execlanodeah{%中文在后的顺序
+ \gdef\lancnorder{4}
+ \gdef\lanjporder{5}
+ \gdef\lankrorder{6}
+ \gdef\lanenorder{1}
+ \gdef\lanfrorder{2}
+ \gdef\lanruorder{3}}
+
+ \newcounter{lanordernum}
+ \newcommand{\execlanodudf}[1]{%like:cn;en;ru;fr;jp;kr
+ \setcounter{lanordernum}{0}
+ \DeclareListParser{\parsinglanorder}{;}
+ \renewcommand*{\do}[1]{\stepcounter{lanordernum}\csxdef{lan##1order}{\thelanordernum}}
+ \parsinglanorder{#1}
+ }
%
% 增加本地化字符串的中英文切换选项
@@ -670,7 +718,7 @@
}
{% 针对biblatex<3.3版本的选项设置
% 增加不同语言排序的切换选项
- % numeric样式,不使用该选项,这里给出仅为兼容性考虑
+ % numeric样式, biblatex 3.4及以下版本不能使用多个stylesourcemap,所以不使用该选项
% v1.0q,20190307,hzz
%
\DeclareBibliographyOption{gblanorder}[chineseahead]{}
@@ -1237,26 +1285,32 @@
\map{%当文献给出language域时,设置文献要使用的本地化字符串的语言
\step[fieldsource=language,match=\regexp{(e|E)(n|N)(g|G)(l|L)(i|I)(s|S)(h|H)},final]
\step[fieldset=langid,fieldvalue={english}]
+ \step[fieldset=lansortorder,fieldvalue=\lanenorder]
}
\map{
\step[fieldsource=language,match=\regexp{(r|R)(u|U)(s|S)(s|S)(i|I)(a|A)(n|N)},final]
\step[fieldset=langid,fieldvalue={russian}]
+ \step[fieldset=lansortorder,fieldvalue=\lanruorder]
}
\map{%
\step[fieldsource=language,match=\regexp{(f|F)(r|R)(e|E)(n|N)(c|C)(h|H)},final]
\step[fieldset=langid,fieldvalue={french}]
+ \step[fieldset=lansortorder,fieldvalue=\lanfrorder]
}
\map{%
\step[fieldsource=language,match=\regexp{(c|C)(h|H)(i|I)(n|N)(e|E)(s|S)(e|E)},final]%中日韩语目前都用english,
\step[fieldset=langid,fieldvalue={english}]
+ \step[fieldset=lansortorder,fieldvalue=\lancnorder]
}
\map{%
\step[fieldsource=language,match=\regexp{(j|J)(a|A)(p|P)(a|A)(n|N)(e|E)(s|S)(e|E)},final]%中日韩语目前都用english,
\step[fieldset=langid,fieldvalue={english}]
+ \step[fieldset=lansortorder,fieldvalue=\lanjporder]
}
\map{%
\step[fieldsource=language,match=\regexp{(k|K)(o|O)(r|R)(e|E)(a|A)(n|N)},final]%中日韩语目前都用english,
\step[fieldset=langid,fieldvalue={english}]
+ \step[fieldset=lansortorder,fieldvalue=\lankrorder]
}
}
}
@@ -1562,6 +1616,42 @@
{\switchversion{3.0}{map}}%%当采用biblatex<=3.2版本时
{\switchversion{3.4}{map}}%%当采用3.3<=biblatex版本时
+
+%
+% 不同语言分集调整的实现方式
+%
+% 原理方法:利用样式层的动态数据修改lansortorder域来实现排序
+\def\dealsortlan{
+ \DeclareStyleSourcemap{
+ \maps[datatype=bibtex]{
+ \map[overwrite]{%当文献给出language域时,设置文献要使用的本地化字符串的语言
+ \step[fieldsource=language,match=english,final]
+ \step[fieldset=lansortorder,fieldvalue=\lanenorder]
+ }
+ \map[overwrite]{
+ \step[fieldsource=language,match=russian,final]
+ \step[fieldset=lansortorder,fieldvalue=\lanruorder]
+ }
+ \map[overwrite]{%
+ \step[fieldsource=language,match=french,final]
+ \step[fieldset=lansortorder,fieldvalue=\lanfrorder]
+ }
+ \map[overwrite]{%
+ \step[fieldsource=language,match=chinese,final]%中日韩语目前都用english,
+ \step[fieldset=lansortorder,fieldvalue=\lancnorder]
+ }
+ \map[overwrite]{%
+ \step[fieldsource=language,match=japanese,final]%中日韩语目前都用english,
+ \step[fieldset=lansortorder,fieldvalue=\lanjporder]
+ }
+ \map[overwrite]{%
+ \step[fieldsource=language,match=korean,final]%中日韩语目前都用english,
+ \step[fieldset=lansortorder,fieldvalue=\lankrorder]
+ }
+ }
+ }
+}
+
%
%驱动别名等价于驱动层映射
%
@@ -1579,7 +1669,274 @@
\DeclareBibliographyAlias{map}{manual}
\DeclareBibliographyAlias{archive}{manual}
+%=====================================================================
+% 设置排序格式
+%=====================================================================
+%
+% 排序格式,用降序,及userb域,针对biblatex3.7及以下版本
+%
+\defversion{3.7}{sort}{%这是3.4版的,3.7版略有差异,但不大,后面有注释
+ \DeclareSortingScheme{gb7714-2015}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort{%[direction=descending]
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field[padside=left,padwidth=4,padchar=0]{volume}%3.7版是\field{volume}
+ \literal{0000}%3.7版是\literal{0}
+ }
+ }
+ %降序的nyt
+ \DeclareSortingScheme{gbnytd}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort[direction=descending]{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field[padside=left,padwidth=4,padchar=0]{volume}%3.7版是\field{volume}
+ \literal{0000}%3.7版是\literal{0}
+ }
+ }
+
+ %降序的ynt
+ \DeclareSortingScheme{gbyntd}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort[direction=descending]{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field[padside=left,padwidth=4,padchar=0]{volume}%3.7版是\field{volume}
+ \literal{0000}%3.7版是\literal{0}
+ }
+ }
+
+ %升序的ynt
+ \DeclareSortingScheme{gbynta}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field[padside=left,padwidth=4,padchar=0]{volume}%3.7版是\field{volume}
+ \literal{0000}%3.7版是\literal{0}
+ }
+ }
+}
+
+
+%
+% 排序格式,用降序,及userb域,针对biblatex3.8及以上版本
+%
+\defversion{3.8}{sort}{
+ \DeclareSortingTemplate{gb7714-2015}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort{%[direction=descending]
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+ }
+
+ %降序的nyt
+ \DeclareSortingTemplate{gbnytd}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort[direction=descending]{%
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+ }
+
+ %降序的ynt
+ \DeclareSortingTemplate{gbyntd}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort[direction=descending]{
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{%
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+ }
+
+ %升序的ynt
+ \DeclareSortingTemplate{gbynta}{
+ \sort{
+ \field{presort}
+ }
+ \sort[final]{
+ \field{sortkey}
+ }
+ \sort{
+ \field{lansortorder}%language
+ }
+ \sort{%[direction=ascending]
+ \field{sortyear}
+ \field{year}
+ }
+ \sort{%
+ \field{sortname}
+ \field{author}
+ \field{editor}
+ \field{translator}
+ }
+ \sort{
+ \field{sorttitle}
+ \field{title}
+ }
+ \sort{
+ \field{volume}
+ \literal{0}
+ }
+ }
+}
+
+
+\ifboolexpr{
+test {\iftoggle{iftlfive}}
+or
+test {\iftoggle{iftlsix}}
+or
+test {\iftoggle{iftlseven}}%biblatex<=3.7
+}{\switchversion{3.7}{sort}}{\switchversion{3.8}{sort}}%3.8<=biblatex
%=====================================================================
% 参考文献表环境
@@ -1708,7 +2065,8 @@
% 而[]中间的内容,从4.6.2节的例子看也是可以分割的,因此内部的nobreak也可以去掉
%
\DeclareFieldFormat{gbtypeflag}{%
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
@@ -1716,31 +2074,36 @@
{\ifentrytype{online}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
- }%
+ }}%
+ {\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}%
}
%
% 新增用于报纸的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflagn}{%用于报纸newspaper
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak N\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}%
}
%
% 新增用于标准的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflags}{%用于标准standard
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak S\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}%
}
%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx
index e0609f60a1..d6d9a84174 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx
@@ -196,12 +196,26 @@
\DeclareDatamodelFields[type=field,datatype=literal]{shortbooktitle}
\DeclareDatamodelFields[type=field,datatype=literal]{lansortorder}
-
+ %因为biblatex更新3.14版本以后,biber对于为声明数据模型的条目类型
+ %不再默认读取,而是以空字符串作为条目类型名,自然在条目定义alias时
+ %就会出现问题,因此显式的声明一下newspaper,然后保留后面采用alias的方式
+ %而standard类型则是采用另一种方式直接在sourcemap中转换为其它类型。
+ \@ifpackagelater{biblatex}{2019/11/30}{%2019/12/01 v3.14
+ \DeclareDatamodelEntrytypes{newspaper}%
+ }{}
%=====================================================================
% 设置宏包选项
%=====================================================================
%
+ % 增加一个控制是否输出文献载体的选项
+ % 20191125,v1,0s,hzz
+ \newtoggle{bbx:gbmedium}
+ \DeclareBibliographyOption{gbmedium}[true]{%biblatex低版本
+ \settoggle{bbx:gbmedium}{#1}}
+ \ExecuteBibliographyOptions{gbmedium}
+
+ %
% 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息
% 20190509,v1,0s,hzz
\newtoggle{bbx:gbannote}
@@ -1805,6 +1819,7 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7
\setlength{\bibhang}{1em}
\newlength{\bibitemindent}
\setlength{\bibitemindent}{-\bibhang}
+\setlength{\bibitemsep}{4.5pt}
\defbibenvironment{bibliography}
{\list
{}
@@ -1841,7 +1856,8 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7
% 而[]中间的内容,从4.6.2节的例子看也是可以分割的,因此内部的nobreak也可以去掉
%
\DeclareFieldFormat{gbtypeflag}{%
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
@@ -1849,33 +1865,36 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7
{\ifentrytype{online}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
- }%
+ }}%
+ {\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}%
}
-
%
% 新增用于报纸的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflagn}{%用于报纸newspaper
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak N\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}%
}
-
%
% 新增用于标准的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflags}{%用于标准standard
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak S\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}%
}
%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx
index 13d158fd93..0efdddd18d 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ms.bbx
@@ -87,12 +87,26 @@
\DeclareDatamodelFields[type=field,datatype=literal]{shortbooktitle}
\DeclareDatamodelFields[type=field,datatype=literal]{lansortorder}
-
+ %因为biblatex更新3.14版本以后,biber对于为声明数据模型的条目类型
+ %不再默认读取,而是以空字符串作为条目类型名,自然在条目定义alias时
+ %就会出现问题,因此显式的声明一下newspaper,然后保留后面采用alias的方式
+ %而standard类型则是采用另一种方式直接在sourcemap中转换为其它类型。
+ \@ifpackagelater{biblatex}{2019/11/30}{%2019/12/01 v3.14
+ \DeclareDatamodelEntrytypes{newspaper}%
+ }{}
%=====================================================================
% 设置宏包选项
%=====================================================================
%
+ % 增加一个控制是否输出文献载体的选项
+ % 20191125,v1,0s,hzz
+ \newtoggle{bbx:gbmedium}
+ \DeclareBibliographyOption{gbmedium}[true]{%biblatex低版本
+ \settoggle{bbx:gbmedium}{#1}}
+ \ExecuteBibliographyOptions{gbmedium}
+
+ %
% 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息
% 20190509,v1,0s,hzz
\newtoggle{bbx:gbannote}
@@ -1302,7 +1316,8 @@
% 而[]中间的内容,从4.6.2节的例子看也是可以分割的,因此内部的nobreak也可以去掉
%
\DeclareFieldFormat{gbtypeflag}{%
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
@@ -1310,31 +1325,36 @@
{\ifentrytype{online}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
- }%
+ }}%
+ {\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}%
}
%
% 新增用于报纸的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflagn}{%用于报纸newspaper
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak N\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}%
}
%
% 新增用于标准的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflags}{%用于标准standard
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak S\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}%
}
%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx
index d92ac1daf9..81cf2b95b8 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015mx.bbx
@@ -27,6 +27,13 @@
% 功能函数
%=====================================================================
%
+ % 增加一个控制是否输出文献载体的选项
+ % 20191125,v1,0s,hzz
+ \newtoggle{bbx:gbmedium}
+ \DeclareBibliographyOption{gbmedium}[true]{%biblatex低版本
+ \settoggle{bbx:gbmedium}{#1}}
+ \ExecuteBibliographyOptions{gbmedium}
+ %
% 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息
% 20190509,v1,0s,hzz
\newtoggle{bbx:gbannote}
@@ -110,7 +117,13 @@
\DeclareDatamodelFields[type=field,datatype=integer]{aysections}
\DeclareDatamodelFields[type=field,datatype=literal]{styleaysection}
-
+ %因为biblatex更新3.14版本以后,biber对于为声明数据模型的条目类型
+ %不再默认读取,而是以空字符串作为条目类型名,自然在条目定义alias时
+ %就会出现问题,因此显式的声明一下newspaper,然后保留后面采用alias的方式
+ %而standard类型则是采用另一种方式直接在sourcemap中转换为其它类型。
+ \@ifpackagelater{biblatex}{2019/11/30}{%2019/12/01 v3.14
+ \DeclareDatamodelEntrytypes{newspaper}%
+ }{}
@@ -1591,7 +1604,8 @@
% 而[]中间的内容,从4.6.2节的例子看也是可以分割的,因此内部的nobreak也可以去掉
%
\DeclareFieldFormat{gbtypeflag}{%
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
@@ -1599,31 +1613,36 @@
{\ifentrytype{online}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}%
{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}}%
- }%
+ }}%
+ {\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}%
}
%
% 新增用于报纸的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflagn}{%用于报纸newspaper
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak N\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak N\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}%
}
%
% 新增用于标准的文献类型标识符的格式
%
\DeclareFieldFormat{gbtypeflags}{%用于标准standard
-\iftoggle{bbx:url}%
+\iftoggle{bbx:gbmedium}%
+{\iftoggle{bbx:url}%
{\iffieldundef{url}%当存在url时,增加一个OL标识符
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
{\nobreak\printtext{[}\nobreak S\printtext{\texttt{/}OL]}\nobreak}%
}%
{\nobreak\printtext{[}\nobreak S\printtext{\iffieldundef{medium}{}{\texttt{/}\thefield{medium}}]}\nobreak}%
+}{\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}%
}
%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015.tex b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015.tex
index 06a16f4e33..b495abd4d8 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015.tex
@@ -6,7 +6,9 @@
\includepdf[pages=-]{egfigure/tgbcitation.pdf}
-\includepdf[pages=-]{egfigure/tgbcitationay.pdf}
+\IfFileExists{egfigure/tngbcitationay.pdf}
+{\includepdf[pages=-]{egfigure/tngbcitationay.pdf}}
+{\includepdf[pages=-]{egfigure/tngbcitationaynew.pdf}}
\includepdf[pages=-]{egfigure/tgbbiblio.pdf}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015ms.tex b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015ms.tex
index 2a53a7ed9f..ffc76f6e26 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015ms.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015ms.tex
@@ -6,7 +6,9 @@
\includepdf[pages=-]{egfigure/tgbcitationms.pdf}
-\includepdf[pages=-]{egfigure/tgbcitationay.pdf}
+\IfFileExists{egfigure/tngbcitationay.pdf}
+{\includepdf[pages=-]{egfigure/tngbcitationay.pdf}}
+{\includepdf[pages=-]{egfigure/tngbcitationaynew.pdf}}
\includepdf[pages=-]{egfigure/tgbbiblioms.pdf}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex
index 7c12dc47a9..80ede4a301 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gbT7714-2015thesis.tex
@@ -44,8 +44,8 @@
\includepdf[pages=-,addtotoc={1,section,1,UCAS-m,eg:UCASm}]{egthesis/thesis-ucas-m.pdf}
-%\addcontentsline{toc}{section}{UCAS}
-\includepdf[pages=-,addtotoc={1,section,1,UCAS-x,eg:UCASx}]{egthesis/thesis-ucas-x.pdf}
+%\addcontentsline{toc}{section}{UIBE}
+\includepdf[pages=-,addtotoc={1,section,1,UIBE,eg:UIBE}]{egthesis/thesis-uibe-numeric.pdf}
%\addcontentsline{toc}{section}{USTC}
diff --git a/macros/latex/contrib/lwarp/README.txt b/macros/latex/contrib/lwarp/README.txt
index 12e0d44443..c18fff0ffe 100644
--- a/macros/latex/contrib/lwarp/README.txt
+++ b/macros/latex/contrib/lwarp/README.txt
@@ -1,5 +1,5 @@
-LaTeX lwarp package v0.80 README.txt
+LaTeX lwarp package v0.81 README.txt
Files included are:
diff --git a/macros/latex/contrib/lwarp/lwarp.dtx b/macros/latex/contrib/lwarp/lwarp.dtx
index e80de5d4ad..d0f16200b9 100644
--- a/macros/latex/contrib/lwarp/lwarp.dtx
+++ b/macros/latex/contrib/lwarp/lwarp.dtx
@@ -16,7 +16,7 @@
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{lwarp}
-%<package> [2020/02/19 v0.80 Allows LaTeX to directly produce HTML5 output.]
+%<package> [2020/03/04 v0.81 Allows LaTeX to directly produce HTML5 output.]
%
%<*driver>
\documentclass{ltxdoc}
@@ -272,6 +272,8 @@ Keywords={LaTeX, HTML, conversion}%
\newcommand*{\goesto}{$\Rightarrow$}
+\newcommand*{\orelse}{---\,\textit{or}\,---}
+
\newcommand*{\AV}{\acro{A}\Slash\acro{V}}
\makeatletter
@@ -306,7 +308,9 @@ Keywords={LaTeX, HTML, conversion}%
\newcommand{\epkg}[1]{\textcolor[Hsb]{300,1,.5}{\pkg{#1}}}% package emulated for HTML
\newcommand{\ipkg}[1]{\textcolor[Hsb]{0,0,.5}{\pkg{#1}}}% package ignored
\newcommand{\wpkg}[1]{\textcolor[Hsb]{0,1,.5}{\pkg{#1}}}% package warning special case
-\newcommand{\sjax}{\textsuperscript{\textcolor{orange!70!black}{MJ}}}
+\newcommand{\sjax}{\textsuperscript{\textcolor[Hsb]{120,1,.4}{MJ}}}
+\newcommand{\ejax}{\textsuperscript{\textcolor[Hsb]{300,1,.5}{MJ}}}
+\newcommand{\ijax}{\textsuperscript{\textcolor[Hsb]{0,0,.5}{MJ}}}
% green/cyan/blue/magenta
% \newcommand{\spkg}[1]{\textcolor[Hsb]{120,1,.4}{\pkg{#1}}}% package supported as-is
@@ -1089,7 +1093,7 @@ exactly, in which case a label may be shifted by one space.
\newcommand{\limitslateximagefontsize}{%
For the \env{lateximage} environment,
the size of the math and text used
-\margintag{SVG image font size}
+\margintag{\SVG\ image font size}
in the \SVG\ image may be adjusted
\gindex{font>size>lateximage}%
\gindex{font>size>math, SVG}%
@@ -1122,25 +1126,27 @@ Math may be rendered
as \SVG\ graphics or using the \brand{MathJax} JavaScript display engine.
\gindex{JavaScript=\brand{JavaScript}>MathJax=\brand{MathJax}}
-Rendering math as images creates a new \SVG\ file for each expression, \margintag{SVG files}
+Rendering math as images creates a new \SVG\ file for each expression,
+\margintag{\SVG\ files}
except that an MD5 hash is used to combine identical duplicates of the same
inline math expression into a single file, which must be converted to \SVG\ only once.
Display math is still handled as individual files, since it may contain labels
or references which are likely to change.
-The \SVG\ images are currently stored separately, \margintag{SVG inline}
+The \SVG\ images are currently stored separately,
+\margintag{\SVG\ inline}
but they could be encoded in-line directly into the \HTML\ document.
This may reduce the number of files and potentially speed loading the images,
but slows the display of the rest of the document before the images are loaded.
Others \LaTeX-to-\HTML\ converters have used \PNG\ files,
-\margintag{PNG files}
+\margintag{\PNG\ files}
sometimes pre-scaled for print resolution but displayed
on-screen at a scaled down size. This allows high-quality print output at the expense
of larger files, but \SVG\ files are the preferred approach for scalable graphics.
Conversion to \MathML\ might be a better approach,
-\margintag{MathML}
+\margintag{\MathML}
among other things allowing a more compact representation of math than \SVG\ drawings.
Problems with \MathML\ include limited browser support and some
issues with the fine control of the appearance of the result.
@@ -1149,7 +1155,7 @@ Also see \cref{sec:epub} regarding \EPUB\ output with \brand{MathJax}.
\subsubsection{\SVG\ option}
For \SVG\ math,
-\margintag{SVG math option}
+\margintag{\SVG\ math option}
math is rendered as usual by \LaTeX{} into the initial \PDF\ file using the
\gindex{math>SVG summary}%
\gindex{SVG>math summary}%
@@ -1165,7 +1171,7 @@ math, allowing copy/paste of the \LaTeX{} math expression into other documents.
\limitslateximagefontsize
For \SVG\ math, text copy/paste from the \HTML\ \element{alt} tags lists the
-\margintag{SVG math copy/paste}
+\margintag{\SVG\ math copy/paste}
equation number or tag for single equations, along with the \LaTeX\ code
for the math expression.
For \AmS\ environments with multiple numbers in the same environment,
@@ -1173,8 +1179,17 @@ only the first and last is copy/pasted, as a range.
No tags are listed inside a starred \AmS\ environment, although the \cs{tag}
macro will still appear inside the \LaTeX\ math expression.
-SVG math does not work inside \TeX\ boxes, since a \cs{newpage} is required
-\trouble[SVG math in \TeX\ boxes]{math>in \TeX\ boxes}
+\SVG\ math sizing and baselines are improved if the \pkg{graphics} or \pkg{graphicx}
+\trouble[\SVG\ math size, baseline]{math>size incorrect}
+\trouble{math>baseline incorrect}
+\trouble{image>svg=\SVG\ math size and baseline}
+\trouble{SVG image>math size and baseline}
+package is loaded. An almost-invisible marker is placed at either end of the image
+to assist in cropping and computing the baseline. A warning is issued at the
+end of the compile if \pkg{graphics} or \pkg{graphicx} are not used.
+
+\SVG\ math does not work inside \TeX\ boxes, since a \cs{newpage} is required
+\trouble[\SVG\ math in \TeX\ boxes]{math>in \TeX\ boxes}
before and after each image.
\subsubsection{\brand{MathJax} option}
@@ -2878,7 +2893,7 @@ This boolean may be tested by the user for later use.
%<*package>
% \fi
%
-% \CheckSum{37579}
+% \CheckSum{42916}
%
% \CharacterTable
% {Upper-case \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
@@ -3001,6 +3016,7 @@ This boolean may be tested by the user for later use.
% \changes{v0.78}{2019/11/07}{\ 2019/11/07}
% \changes{v0.79}{2020/02/01}{\ 2020/02/01}
% \changes{v0.80}{2020/02/19}{\ 2020/02/19}
+% \changes{v0.81}{2020/03/04}{\ 2020/03/04}
@@ -3033,7 +3049,8 @@ This boolean may be tested by the user for later use.
% The \pkg{lwarp} package converts \LaTeX\ to \HTML\ by using \LaTeX\ to process the
% user's document and directly generate \HTML\ tags. External utility programs are only
% used for the final conversion of text and images. Math may be represented
-% by \SVG\ images or MathJax. Hundreds of \LaTeX\ packages are supported.
+% by \SVG\ images or \brand{MathJax}. Hundreds of \LaTeX\ packages are supported,
+% including dozens with \brand{MathJax} emulation.
%
% Documents may be produced by \DVI\ or \PDF\ \LaTeX, Lua\LaTeX, \XeLaTeX;
% by several CJK engines, classes, and packages;
@@ -3222,6 +3239,28 @@ This boolean may be tested by the user for later use.
%
% \begin{description}
% \needspace{2\baselineskip}
+% \item[v0.81:] \brand{MathJax} speedup and additional emulations.
+% \begin{itemize}
+% \item Improved warning regarding \SVG\ math sizing \Slash baselines and
+% \margintag{core}
+% \pkg{graphics} \Slash \pkg{graphicx}. See \cref{sec:limitsmath}.
+% \item Improved \brand{MathJax} emulation processing speed.
+% \margintag{\brand{MathJax}}
+% \item Added \brand{MathJax} emulation for \pkg{accsupp}, \pkg{axessibiltiy},
+% \pkg{colonequals},
+% \pkg{decimal}, \pkg{dotlessi}, \pkg{econometrics}, \pkg{engtlc},
+% \pkg{multiobjective}, \pkg{physunits}, \pkg{SIunits}, \pkg{stackrel},
+% \pkg{statmath}.
+% \item \pkg{axessibility}: Updated to 2020/01/08 version.
+% \margintag{packages}
+% \item \pkg{gridset}: Updated to v0.3.
+% \item \pkg{SIunits}: Fixed for math mode.
+% \item Added \pkg{DotArrow}, \pkg{nolbreaks}, \pkg{luamplib}, \pkg{returntogrid},
+% \pkg{statex2}, \pkg{tagpdf}.
+% \item Verified to work as-is with \pkg{icomma}, \pkg{mathpunctspace},
+% \pkg{textualicomma}.
+% \end{itemize}
+% \needspace{2\baselineskip}
% \item[v0.80:] \brand{MathJax}, \pkg{biblatex}.
% \begin{itemize}
% \item Added docs and warning/info messages
@@ -4978,7 +5017,9 @@ This boolean may be tested by the user for later use.
% as print output in \SVG\ math or \env{lateximage} environments.
% \item[\epkg{name}:] Emulated for \HTML\ output.
% \item[\ipkg{name}:] Ignored for \HTML\ output, but provides source-level compatibility.
-% \item[\sjax:] Emulated for \brand{MathJax}, subject to limitations.
+% \item[\sjax:] Supported as-is for \brand{MathJax}, subject to limitations.
+% \item[\ejax:] Emulated for \brand{MathJax} using custom macros, subject to limitations.
+% \item[\ijax:] Ignored by \brand{MathJax}, but may be used in the document source.
% \end{description}
%
% \renewcommand{\arraystretch}{1.5}
@@ -5056,7 +5097,7 @@ This boolean may be tested by the user for later use.
% \ipkg{ltxgrid}, \ipkg{nccfancyhdr}, \ipkg{notespages}, \ipkg{nowidow},
% \ipkg{pagegrid}, \ipkg{pagesel}, \epkg{parallel}, \epkg{parcolumns},
% \ipkg{pdfcolparallel}, \ipkg{pdfcolparcolumns}, \ipkg{pdfcrypt}, \ipkg{pdfprivacy},
-% \ipkg{preview}, \epkg{ragged2e}, \ipkg{rmpage},
+% \ipkg{preview}, \epkg{ragged2e}, \ipkg{returntogrid}, \ipkg{rmpage},
% \epkg{scrlayer-scrpage}, \epkg{scrpage2}, \epkg{setspace},
% \ipkg{textarea}, \ipkg{threadcol},
% \ipkg{thumb}, \ipkg{thumbs}, \ipkg{titleps}, \ipkg{tocenter},
@@ -5127,7 +5168,7 @@ This boolean may be tested by the user for later use.
% Math: & Converted to \SVG\ images with \HTML\ \element{alt} tags containing the
% \LaTeX\ source for the math expression.
% \brand{MathJax} supported as an alternative.
-% \mpkg{amsmath}\sjax: \AmS\ environments are supported.
+% \mpkg{amsmath}\ejax: \AmS\ environments are supported.
% User-defined macros are available during converson,
% due to native \LaTeX\ processing.\\
%
@@ -5135,18 +5176,23 @@ This boolean may be tested by the user for later use.
% \mpkg{amsthm}, \mpkg{ntheorem}, \mpkg{theorem}. \\
%
% Additional math: & Math fonts via \SVG\ images,
-% \spkg{amscd}, \spkg{autobreak}\sjax, \ipkg{autonum},
-% \mpkg{backnaur}, \mpkg{bm}\sjax, \spkg{braket}\sjax,
-% \mpkg{breqn}, \mpkg{cases}, \spkg{centernot}\sjax,
-% \spkg{delarray}, \spkg{extarrows}\sjax, \spkg{fouridx}\sjax,
-% \spkg{guass}, \spkg{jkmath},
-% \spkg{leftidx}\sjax, \spkg{mathcomp}\sjax, \spkg{mathdots}\sjax, \spkg{mathfixs}\sjax,
-% \spkg{mathspec}, \mpkg{mathtools}\sjax, \mpkg{mismath}\sjax,
-% \mpkg{nccmath}\sjax,
-% \spkg{nicematrix}, \spkg{noitcrul}\sjax, \spkg{pb-diagram},
-% \ipkg{resizegather}, \spkg{rmathbr}\sjax, \spkg{subsupscripts}\sjax,
-% \spkg{unicode-math}\sjax, \mpkg{witharrows}\sjax,
-% \mpkg{xfakebold}\sjax, \mpkg{xy}.
+% \spkg{amscd}, \spkg{autobreak}\ejax, \ipkg{autonum},
+% \mpkg{backnaur}, \mpkg{bm}\ejax, \spkg{braket}\ejax,
+% \mpkg{breqn}, \mpkg{cases}, \spkg{centernot}\ejax, \spkg{colonequals}\ejax,
+% \spkg{decimal}\ejax,
+% \spkg{delarray}, \mpkg{DotArrow}\ejax, \spkg{dotlessi}\ejax, \spkg{dotlessj}\sjax,
+% \spkg{extarrows}\ejax, \spkg{fouridx}\ejax,
+% \spkg{guass}, \spkg{icomma}\ijax, \spkg{jkmath},
+% \spkg{leftidx}\ejax, \spkg{mathcomp}\ejax, \spkg{mathdots}\ejax,
+% \spkg{mathfixs}\ejax, \spkg{mathpunctspace}\ijax,
+% \spkg{mathspec}, \mpkg{mathtools}\ejax, \mpkg{mismath}\ejax,
+% \spkg{multiobjective}\ejax, \mpkg{nccmath}\ejax,
+% \spkg{nicematrix}, \spkg{noitcrul}\ejax, \spkg{pb-diagram},
+% \ipkg{resizegather}, \spkg{rmathbr}\ejax, \spkg{stackrel}\ejax,
+% \mpkg{statex2}\ejax, \spkg{statmath}\ejax,
+% \spkg{subsupscripts}\ejax, \spkg{textualicomma}\ijax,
+% \spkg{unicode-math}\ejax, \mpkg{witharrows}\ejax,
+% \mpkg{xfakebold}\ejax, \mpkg{xy}.
% Many others work as-is. \\
%
% Display math with \cs{displaymathother}: & %
@@ -5155,8 +5201,8 @@ This boolean may be tested by the user for later use.
% \midrule
%
% Units and fractions: &
-% \mpkg{nicefrac}\sjax, \mpkg{SIunits}, \mpkg{siunitx}\sjax,
-% \mpkg{units}\sjax, \mpkg{unitsdef}, \mpkg{xfrac}\sjax. \\
+% \mpkg{nicefrac}\ejax, \mpkg{SIunits}\ejax, \mpkg{siunitx}\ejax,
+% \mpkg{units}\ejax, \mpkg{unitsdef}, \mpkg{xfrac}\ejax. \\
%
% \midrule
%
@@ -5173,11 +5219,11 @@ This boolean may be tested by the user for later use.
% \midrule
%
% Tabular: &
-% \env{tabular} environment, \mpkg{array}\sjax, \epkg{arydshln}\sjax,
-% \mpkg{bigdelim}\sjax, \mpkg{bigstrut}\sjax, \mpkg{booktabs}\sjax,
-% \mpkg{colortbl}, \mpkg{ctable}, \mpkg{diagbox}, \mpkg{hhline}\sjax, \epkg{longtable},
+% \env{tabular} environment, \mpkg{array}\ejax, \epkg{arydshln}\ejax,
+% \mpkg{bigdelim}\ejax, \mpkg{bigstrut}\ejax, \mpkg{booktabs}\ejax,
+% \mpkg{colortbl}, \mpkg{ctable}, \mpkg{diagbox}, \mpkg{hhline}\ejax, \epkg{longtable},
% \epkg{ltablex}, \epkg{ltxtable},
-% \mpkg{multirow}\sjax, \epkg{supertabular}, \epkg{tabularx}, \epkg{tabulary},
+% \mpkg{multirow}\ejax, \epkg{supertabular}, \epkg{tabularx}, \epkg{tabulary},
% \epkg{threeparttable}, \mpkg{threeparttablex},
% \epkg{widetable}, \epkg{xltabular}, \epkg{xtab}. \\
%
@@ -5195,7 +5241,8 @@ This boolean may be tested by the user for later use.
% \mpkg{asymptote}, \spkg{curves}, \spkg{datatool},
% \spkg{eepic}, \epkg{epsfig}, \spkg{epstopdf},
% \epkg{figsize}, \ipkg{fitbox},
-% \spkg{grffile}, \epkg{media9}, \epkg{movie15}, \epkg{multimedia}, \mpkg{overpic},
+% \spkg{grffile}, \mpkg{luamplib}, \epkg{media9},
+% \epkg{movie15}, \epkg{multimedia}, \mpkg{overpic},
% \mpkg{psfrag}, \mpkg{psfragx}, \mpkg{pst-eps}, \mpkg{pstool}, \mpkg{pstricks},
% \spkg{rviewport}, \mpkg{svg}, \spkg{svg-extract}, \spkg{tikz-3dplot}. \\
%
@@ -5245,9 +5292,10 @@ This boolean may be tested by the user for later use.
% \cs{bfseries}, etc.\ are only supported in some cases.
% \mpkg{cancel}, \epkg{ellipsis}, \mpkg{embrac}, \spkg{enparen},
% \ipkg{hyphenat}, \epkg{lettrine}, \epkg{lips},
-% \ipkg{lua-check-hyphen}, \ipkg{luacolor}, \epkg{magaz}, \ipkg{normalcolor},
+% \ipkg{lua-check-hyphen}, \ipkg{luacolor}, \epkg{magaz}, \epkg{nolbreaks},
+% \ipkg{normalcolor},
% \ipkg{pdfcol}, \ipkg{pdfcolmk},
-% \ipkg{pdfrender}, \epkg{realscripts}, \mpkg{relsize}\sjax,
+% \ipkg{pdfrender}, \epkg{realscripts}, \mpkg{relsize}\ejax,
% \ipkg{scalefnt}, \epkg{soul}, \epkg{soulpos}, \epkg{soulutf8}, \mpkg{stackengine},
% \epkg{textfit}, \epkg{thinsp}, \ipkg{trimclip}, \ipkg{truncate},
% \mpkg{ulem}, \mpkg{umoline}, \ipkg{underscore}, \ipkg{uspace},
@@ -5282,8 +5330,8 @@ This boolean may be tested by the user for later use.
%
% Symbols: & Native \LaTeX\ diacriticals, \mpkg{academicons}, \mpkg{bbding},
% \mpkg{chemgreek}, \mpkg{dingbat}, \spkg{euro}, \mpkg{eurosym},
-% \mpkg{fontawesome}, \mpkg{fontawesome5}, \spkg{gensymb}\sjax, \mpkg{marvosym},
-% \spkg{mathcomp}\sjax, \mpkg{metalogo}, \mpkg{metalogox},
+% \mpkg{fontawesome}, \mpkg{fontawesome5}, \spkg{gensymb}\ejax, \mpkg{marvosym},
+% \spkg{mathcomp}\ejax, \mpkg{metalogo}, \mpkg{metalogox},
% \mpkg{pifont}, \spkg{textalpha},
% \mpkg{textcomp}, \spkg{textgreek}, \mpkg{typicons}, \mpkg{xunicode}.
% \\
@@ -5298,18 +5346,18 @@ This boolean may be tested by the user for later use.
% \midrule
%
% Science and engineering: &
-% \mpkg{algorithm2e}, \mpkg{algorithmicx}, \mpkg{ar}\sjax, \spkg{askmaps},
+% \mpkg{algorithm2e}, \mpkg{algorithmicx}, \mpkg{ar}\ejax, \spkg{askmaps},
% \mpkg{axodraw2}, \mpkg{bitpattern}, \spkg{blochsphere}, \spkg{bodegraph},
% \spkg{bohr}, \mpkg{bytefield},
% \mpkg{chemfig}, \mpkg{chemformula}, \mpkg{chemgreek},
% \mpkg{chemmacros}, \mpkg{chemnum},
-% \spkg{circuitikz}, \spkg{elements}, \spkg{engtlc}, \spkg{fast-diagram},
-% \mpkg{ghsystem},
+% \spkg{circuitikz}, \spkg{econometrics}\ejax, \spkg{elements},
+% \mpkg{engtlc}\ejax, \spkg{fast-diagram}, \mpkg{ghsystem},
% \spkg{hepnicenames}, \spkg{heppennames}, \spkg{karnaughmap}, \mpkg{karnaugh-map},
% \mpkg{listings}, \spkg{linop}, \mpkg{mhchem}\sjax, \spkg{pgfgantt},
-% \mpkg{phfqit}, \spkg{physics}\sjax, \spkg{qcircuit},
+% \mpkg{phfqit}, \spkg{physics}\ejax, \spkg{physunits}\ejax, \spkg{qcircuit},
% \mpkg{register}, \spkg{simpler-wick},
-% \spkg{slashed}\sjax, \mpkg{steinmetz}\sjax, \spkg{structmech}, \mpkg{struktex}.
+% \spkg{slashed}\ejax, \mpkg{steinmetz}\ejax, \spkg{structmech}, \mpkg{struktex}.
% \spkg{tikz-karnaugh}, \spkg{tikzcodeblocks} \\
%
% \midrule
@@ -5327,14 +5375,15 @@ This boolean may be tested by the user for later use.
% Editorial: & \ipkg{changebar}, \spkg{changelog}, \mpkg{changes},
% \mpkg{easy-todo}, \spkg{easyReview}, \mpkg{ed}, \mpkg{errata}, \mpkg{fixme},
% \mpkg{fixmetodonotes},
-% \ipkg{pdfcomment}\sjax, \ipkg{pdfmarginpar},
+% \ipkg{pdfcomment}\ejax, \ipkg{pdfmarginpar},
% \mpkg{todo}, \mpkg{todonotes}, \epkg{tram}, \ipkg{xechangebar}.
% \\
%
% \midrule
%
-% Accessibility: & \epkg{accessibility}\sjax, \ipkg{accsupp}, \ipkg{axessibility},
-% \ipkg{pdfcomment}\sjax. \\
+% Accessibility: & \epkg{accessibility}\ijax, \ipkg{accsupp}\ijax,
+% \ipkg{axessibility}\ijax,
+% \ipkg{pdfcomment}\ijax, \ipkg{tagpdf}. \\
%
% \midrule
%
@@ -6382,7 +6431,7 @@ This boolean may be tested by the user for later use.
%
% \item Use \prog{xelatex} or \prog{lualatex} to compile the printed version
% a single time.
-% \userentry{xelatex tutorial.tex} \quad -or-
+% \userentry{xelatex tutorial.tex} \quad \orelse
% \userentry{lualatex tutorial.tex}
%
% When the compile occurs,
@@ -6873,9 +6922,9 @@ This boolean may be tested by the user for later use.
% See the next section regarding index encoding.
%
% \XeLaTeX{} and \LuaLaTeX{} users must use the \pkg{fontspec} package.
-% \trouble[\prog{xelatex} and \prog{lualatex}]{xelatex=xe\LaTeX}
+% \trouble[\prog{xelatex}, \prog{lualatex}, \pkg{fontspec}]{xelatex=xe\LaTeX}
% \trouble{lualatex=lua\LaTeX}
-% \trouble{fontspec=\pkg{fontspec}}
+% \trouble{fontspec=\pkg{fontspec}>xelatex=with \XeLaTeX, \LuaLaTeX.}
% Do NOT use \pkg{fontenc}!
%
% Place \pkg{fontspec} or \pkg{fontenc}, \pkg{xunicode}, and other font and UTF-8 related commands
@@ -6927,10 +6976,16 @@ This boolean may be tested by the user for later use.
% \item |\input glyphtounicode-cmr.tex% from the pdfx package|
% \item |\pdfgentounicode=1|
% \end{enumerate}
-% \item Another option to assist with the \PDF-\HTML\ conversion:
+% \item Another option to assist with the \PDF-\HTML\ conversion, such
+% as the dotless j (\cs{j}):
+% \trouble[dotless j]{dotless j}
+% \trouble{j=\cs{j}}
% \begin{itemize}
-% \item |\usepackage{cmap}|
+% \item |\usepackage{cmap}| \qquad \orelse
% \DescribePackage{cmap}
+% \item |\usepackage{mmap}| \qquad \orelse
+% \DescribePackage{mmap}
+% \item |\usepackage[noTeX]{mmap}|
% \end{itemize}
% \item |\usepackage{textcomp}|
% \DescribePackage{textcomp}
@@ -6943,14 +6998,15 @@ This boolean may be tested by the user for later use.
% ^^A \gindex{ligatures}\gindex{font>ligatures}
% \end{enumerate}
% \end{itemize}
-% \item |\usepackage{lwarp}| (\cref{sec:loading}) goes after any of the above, followed by:
+% \item |\usepackage{lwarp}| (\cref{sec:loading}) is placed after any of the above, followed by:
% \item |\usepackage{newtxmath}| or other math-related font packages.
% Many of these load \pkg{amsmath}, which must be loaded after \pkg{lwarp},
% so they must also be loaded after \pkg{lwarp}.
% \item |\setmonofont{TeX Gyre Cursor}| or similar may be required if using
-% \trouble[\pkg{fontspec} with traditional font packages]{font>monospace}
+% \trouble[\pkg{fontspec} with monospaced fonts]{font>monospace}
% \trouble{font>ligatures}
% \trouble{ligatures}
+% \trouble{fontspec=\pkg{fontspec}>mono=with monospaced fonts}
% \XeLaTeX\ or \LuaLaTeX\ and \pkg{fontspec} along with
% traditional font packages such as \pkg{txfonts}, \pkg{newtxtext}, etc.
% This is required to turn off the monospaced font's ligatures
@@ -10578,7 +10634,7 @@ This boolean may be tested by the user for later use.
% Each |lwarp-*| package should first call either of:
% \begin{sourcedisplay}
% \cs{LWR@ProvidesPackage\textblue{Drop}} \\
-% \fquad \textrm{-or-} \\
+% \fquad \textrm{\orelse} \\
% \cs{LWR@ProvidesPackage\textblue{Pass}}
% \end{sourcedisplay}
% If ``|Drop|''ped, the original print-version
@@ -10804,7 +10860,7 @@ This boolean may be tested by the user for later use.
% \item[(width,height) missing a comma:] \cs{makebox} and \cs{framebox} can accept
% a parenthesis-delimited width and height, which must be separated by a comma.
% \item[``Load graphicx or graphics for improved SVG math baselines.'':] \SVG\ math
-% baselines are improved if either of these packages are used.
+% sizing and baselines are improved if either of these packages are used.
% \item[``Load graphicx or graphics for improved XeTeX logo.'':] If these packages
% are loaded, the \XeLaTeX\ logo can use the reversed ``E''.
% \item[``It is recommended to use \texttt{[width=xx\cs{linewidth}]}
@@ -10839,6 +10895,9 @@ This boolean may be tested by the user for later use.
% the characters |&|, |<|, and |>|.
% \end{itemize}
%
+% \item [Dotless j (\cs{j}):] See \cref{sec:fonts} regarding \pkg{cmap}, \pkg{mmap}.
+% \trouble[\pkg{dotlessj}]{dotlessj=\pkg{dotlessj}}
+%
% \item [Undefined \HTML\ settings:] \
% \trouble{HTML>settings>undefined}
% \begin{itemize}
@@ -10955,11 +11014,11 @@ This boolean may be tested by the user for later use.
% may not compile in \pkg{lwarp}'s normal math emulation.
% Insert
% \begin{sourcedisplay}
-% \cs{displaymathother} \textrm{-or-} \cs{inlinemathother}
+% \cs{displaymathother} \textrm{\orelse} \cs{inlinemathother}
% \end{sourcedisplay}
% before the math, and then
% \begin{sourcedisplay}
-% \cs{displaymathnormal} \textrm{-or-} \cs{inlinemathnormal}
+% \cs{displaymathnormal} \textrm{\orelse} \cs{inlinemathnormal}
% \end{sourcedisplay}
% when displaying ``normal'' math.
% See \cref{sec:displaymathother}.
@@ -11663,6 +11722,7 @@ This boolean may be tested by the user for later use.
% \pkg{picinpar}, \pkg{picins}, \pkg{sistyle}, \pkg{ucs}.}
% \changes{v0.68}{2019/02/26}{Prevented \pkg{alg}, \pkg{algorithmic}, \pkg{fncylab}, \pkg{pdfcprot}.}
% \changes{v0.80}{2020/02/15}{Prevented \pkg{formula}, \pkg{shadethm}, \pkg{slashbox}.}
+% \changes{v0.81}{2020/02/15}{Prevented \pkg{statex}.}
%
% \begin{macrocode}
\LWR@earlyclassloadnever{jarticle}{ujarticle}
@@ -11697,6 +11757,7 @@ This boolean may be tested by the user for later use.
\LWR@earlyloadnever{si}{siunitx}
\LWR@earlyloadnever{sistyle}{siunitx}
\LWR@earlyloadnever{slashbox}{diagbox}
+\LWR@earlyloadnever{statex}{statex2}
\LWR@earlyloadnever{t1enc}{fontenc, inputenc, inputenx}
\LWR@earlyloadnever{ucs}{inputenc, inputencx}
\LWR@earlyloadnever{wasysym}{textcomp, amssymb, amsfonts, mnsymbol, fdsymbol}
@@ -11794,7 +11855,9 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{caption}
\LWR@loadafter{caption2}
\LWR@loadafter{cases}
+% catoptions is supported by the lwarp core
% \LWR@loadafter{ccaption}% may be preloaded by memoir
+\LWR@loadafter{centernot}
\LWR@loadafter{changebar}
\LWR@loadafter{changelayout}
\LWR@notmemoirloadafter{changepage}
@@ -11810,6 +11873,7 @@ This boolean may be tested by the user for later use.
\LWR@notmemoirloadafter{chngpage}
\LWR@loadafter{cite}
\LWR@loadafter{cmdtrack}
+\LWR@loadafter{colonequals}
\LWR@loadafter{color}
\LWR@loadafter{colortbl}
\LWR@loadafter{continue}
@@ -11822,14 +11886,18 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{dblfloatfix}
\LWR@loadafter{dblfnote}
\LWR@notmemoirloadafter{dcolumn}
+\LWR@loadafter{decimal}
\LWR@loadafter{diagbox}
\LWR@loadafter{dingbat}
+\LWR@loadafter{DotArrow}
+\LWR@loadafter{dotlessi}
\LWR@loadafter{dprogress}
\LWR@loadafter{draftcopy}
\LWR@loadafter{draftfigure}
\LWR@loadafter{draftwatermark}
\LWR@loadafter{easy-todo}
\LWR@loadafter{ebook}
+\LWR@loadafter{econometrics}
\LWR@loadafter{ed}
\LWR@loadafter{ellipsis}
\LWR@loadafter{embrac}
@@ -11837,6 +11905,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{endfloat}
\LWR@loadafter{endheads}
\LWR@loadafter{endnotes}
+\LWR@loadafter{engtlc}
\LWR@notmemoirloadafter{enumerate}
\LWR@loadafter{enumitem}
\LWR@notmemoirloadafter{epigraph}
@@ -11951,6 +12020,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{lua-check-hyphen}
\LWR@loadafter{lua-visual-debug}
\LWR@loadafter{luacolor}
+\LWR@loadafter{luamplib}
\LWR@loadafter{luatodonotes}
\LWR@loadafter{lyluatex}
\LWR@loadafter{magaz}
@@ -11961,6 +12031,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{marginnote}
\LWR@loadafter{marvosym}
\LWR@loadafter{mathcomp}
+\LWR@loadafter{mathdots}
\LWR@loadafter{mathfixs}
\LWR@loadafter{mathtools}
\LWR@loadafter{mcaption}
@@ -11985,6 +12056,7 @@ This boolean may be tested by the user for later use.
%\LWR@loadafter{multicol}% loaded by ltxdoc
\LWR@loadafter{multicolrule}
\LWR@loadafter{multimedia}
+\LWR@loadafter{multiobjective}
\LWR@loadafter{multirow}
\LWR@loadafter{multitoc}
\LWR@loadafter{musicography}
@@ -12001,6 +12073,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{nicefrac}
\LWR@loadafter{niceframe}
\LWR@loadafter{noitcrul}
+\LWR@loadafter{nolbreaks}
\LWR@loadafter{nomencl}
\LWR@loadafter{nonfloat}
\LWR@loadafter{nonumonpart}
@@ -12039,6 +12112,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{pfnote}
\LWR@loadafter{phfqit}
\LWR@loadafter{physics}
+\LWR@loadafter{physunits}
\LWR@loadafter{pifont}
\LWR@loadafter{placeins}
\LWR@loadafter{plarray}
@@ -12068,6 +12142,7 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{relsize}
\LWR@loadafter{repeatindex}
\LWR@loadafter{resizegather}
+\LWR@loadafter{returntogrid}
\LWR@loadafter{rmathbr}
\LWR@loadafter{rmpage}
\LWR@loadafter{romanbar}
@@ -12108,6 +12183,9 @@ This boolean may be tested by the user for later use.
\LWR@loadafter{srctex}
\LWR@loadafter{stabular}
\LWR@loadafter{stackengine}
+\LWR@loadafter{stackrel}
+\LWR@loadafter{statex2}
+\LWR@loadafter{statmath}
\LWR@loadafter{steinmetz}
\LWR@notltjloadafter{stfloats}
\LWR@loadafter{struktex}
@@ -12124,6 +12202,7 @@ This boolean may be tested by the user for later use.
\LWR@notmemoirloadafter{tabularx}
\LWR@loadafter{tabulary}
\LWR@loadafter{tascmac}
+\LWR@loadafter{tagpdf}
\LWR@loadafter{textarea}
% \LWR@loadafter{textcomp}% maybe before lwarp with font packages
\LWR@loadafter{textfit}
@@ -14079,6 +14158,7 @@ This boolean may be tested by the user for later use.
% \changes{v0.68}{2019/02/26}{Prevented \pkg{alg}, \pkg{algorithmic}, \pkg{fncylab}, \pkg{pdfcprot}.}
% \changes{v0.79}{2020/01/09}{Prevented \pkg{bxcjkjatype}, \pkg{hangul}.}
% \changes{v0.80}{2020/02/15}{Prevented \pkg{formula}, \pkg{shadethm}, \pkg{slashbox}.}
+% \changes{v0.81}{2020/02/28}{Prevented \pkg{statex}.}
%
% The following should never be loaded:
% \begin{macrocode}
@@ -14109,6 +14189,7 @@ This boolean may be tested by the user for later use.
\LWR@checkloadnever{#1}{si}{siunitx}
\LWR@checkloadnever{#1}{sistyle}{siunitx}
\LWR@checkloadnever{#1}{slashbox}{diagbox}
+\LWR@checkloadnever{#1}{statex}{statex2}
\LWR@checkloadnever{#1}{t1enc}{fontenc, inputenc, inputenx}
\LWR@checkloadnever{#1}{ucs}{inputenc, inputencx}
\LWR@checkloadnever{#1}{wasysym}{textcomp, amssymb, amsfonts, mnsymbol, fdsymbol}
@@ -15872,6 +15953,7 @@ This boolean may be tested by the user for later use.
% \changes{v0.75}{2019/09/22}{\filenm{lwarp.css}: Improved marginblock.}
% \changes{v0.76}{2019/10/02}{\filenm{lwarp.css}: Fix for small caps.}
% \changes{v0.79}{2020/01/17}{\filenm{lwarp.css}: Fix: Nested \env{tabular}s.}
+% \changes{v0.81}{2020/02/22}{\filenm{lwarp.css}: Added \pkg{nolbreaks}.}
%
% ^^A *lwarp.css
%
@@ -17351,6 +17433,10 @@ div.notesicon {
div.notescontents { font-style: italic }
+/* nolbreaks package: */
+span.nolbreaks { white-space: nowrap ; }
+
+
/*
For CSS LaTeX and related logos:
Based on spacing demonstrated by the metafont package.
@@ -18425,6 +18511,7 @@ src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js?config=TeX-
% displays the print command to recompile.}%
% \changes{v0.74}{2019/08/05}{\prog{lwarpmk}: \cmds{lwarpmk clean} removes add'l files.}%
% \changes{v0.74}{2019/08/14}{\prog{lwarpmk}: \cmds{lwarpmk epstopdf} and \cmds{pdftosvg} honor directories.}%
+% \changes{v0.81}{2020/03/04}{\prog{lwarpmk}: Improved error if in \pkg{lwarp} source directory.}%
%
% The following is only generated if the \optn{lwarpmk} option
% was given to \pkg{lwarp}.
@@ -18440,7 +18527,7 @@ src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js?config=TeX-
-- Copyright 2016-2020 Brian Dunn
-printversion = "v0.80"
+printversion = "v0.81"
requiredconfversion = "2" -- also at *lwarpmk.conf
function printhelp ()
@@ -18672,7 +18759,9 @@ if sourcename=="lwarp" then
print ("lwarpmk: ===")
print ("lwarpmk: lwarp.sty has recently been recompiled in this directory,")
print ("lwarpmk: and \"lwarpmk.conf\" is no longer set for your own project.")
- print ("lwarpmk: Recompile your own project using pdf/lua/xelatex <projectname>.")
+ print ("lwarpmk: (Perhaps you are not in your project's directory?)")
+ print ("lwarpmk: In your project directory, recompile your project")
+ print ("lwarpmk: using pdf/lua/xelatex <projectname>.")
print ("lwarpmk: After a recompile, \"lwarpmk.conf\" will be set for your project,")
print ("lwarpmk: and you may again use lwarpmk.")
print ("lwarpmk: ===")
@@ -22530,6 +22619,37 @@ end -- not --version
% inside an \HTML\ \element{alt} tag, so must convert them to \HTML\ entities.
%
%
+% \begin{macro}{\LWR@replacestrings} \marg{search} \marg{replace}
+%
+% Replaces strings inside \cs{tmpb}.
+%
+% Modified from the original by \textsc{Petr Olsak}, from the \pkg{opmac} package.
+%
+% \changes{v0.81}{2020/02/24}{Added.}
+% \begin{macrocode}
+\bgroup
+\catcode`!=3 \catcode`?=3
+
+\long\gdef\LWR@replacestrings@addto#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+\gdef\LWR@replacestrings#1#2{%
+ \long\def\LWR@replacestringsA##1#1{\def\tmpb{##1}\LWR@replacestringsB}%
+ \long\def\LWR@replacestringsB##1#1{%
+ \ifx!##1\relax \else\LWR@replacestrings@addto\tmpb{#2##1}%
+ \expandafter\LWR@replacestringsB\fi%
+ }% improved version <May 2016> inspired
+ \expandafter\LWR@replacestringsA\tmpb?#1!#1% from pysyntax.tex by Petr Krajnik
+ \long\def\LWR@replacestringsA##1?{%
+ \def\tmpb{##1}%
+ }\expandafter\LWR@replacestringsA\tmpb%
+}
+\egroup
+% \end{macrocode}
+% \end{macro}
+
+
% \begin{macro}{\LWR@subHTMLsanitize}
%
% \cs{LWR@strresult} must first be set by \cs{LWR@HTMLsanitize},
@@ -22538,26 +22658,23 @@ end -- not --version
% \changes{v0.36}{2017/08/16}{Fix for \pkg{babel-french}.}
% \changes{v0.51}{2018/03/07}{Fix: Escapes double quotes.}
% \changes{v0.79}{2020/01/27}{Fix: \cs{\&}. Factored.}
+% \changes{v0.81}{2020/02/24}{Faster.}
% \begin{macrocode}
+\catcode`\#=12
+\catcode`\&=12
\newcommand{\LWR@subHTMLsanitize}{%
% \end{macrocode}
% The |&|, |<|, and |>| may be interpreted by the browser:
+%
% \begin{macrocode}
- \protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
- {\detokenize{&}}{\detokenize{&amp;}}[\LWR@strresult]%
-% \end{macrocode}
-% \begin{macrocode}
- \protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
- {\detokenize{<}}{\detokenize{&lt;}}[\LWR@strresult]%
-% \end{macrocode}
-% \begin{macrocode}
- \protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
- {\detokenize{>}}{\detokenize{&gt;}}[\LWR@strresult]%
+ \edef\tmpb{\detokenize\expandafter{\LWR@strresult}}%
+ \LWR@replacestrings{&}{&amp;}%
+ \LWR@replacestrings{<}{&lt;}%
+ \LWR@replacestrings{>}{&gt;}%
% \end{macrocode}
% The double quote occasionally causes problems.
% \begin{macrocode}
- \protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
- {\detokenize{"}}{\detokenize{&quot;}}[\LWR@strresult]%
+ \LWR@replacestrings{"}{&quot;}%
% \end{macrocode}
% MathJax allows expressions to be defined with \cs{newcommand}.
% These expressions would appear with |##| for each argument,
@@ -22565,11 +22682,11 @@ end -- not --version
% This must be done after all the above changes.
% Attempting another conversion after this causes an error upon further expansion.
% \begin{macrocode}
- \protect\StrSubstitute{\detokenize\expandafter{\LWR@strresult}}%
- {\detokenize{##}}{\LWR@origpound}[\LWR@strresult]%
-% \end{macrocode}
-% \begin{macrocode}
+ \LWR@replacestrings{##}{#}%
+ \edef\LWR@strresult{\detokenize\expandafter{\tmpb}}%
}
+\catcode`\#=6
+\catcode`\&=4
% \end{macrocode}
% \end{macro}
@@ -22703,8 +22820,10 @@ end -- not --version
% \changes{v0.80}{2020/02/06}{Add: Info message.}
% \begin{macrocode}
\newcommand*{\LWR@infoprocessingmathjax}[1]{%
+\typeout{---}
\typeout{Package lwarp: Processing MathJax customizations for #1.}
\typeout{\space\space This may take a moment.}
+\typeout{---}
}
% \end{macrocode}
% \end{macro}
@@ -25595,7 +25714,7 @@ end -- not --version
% \changes{v0.25}{2017/03/17}{Basic \LaTeX\ theorems: improved \CSS.}
%
%
-% \DescribeMacro{\newtheorem} \marg{text} \oarg{counter} -or- \oarg{oldname} \marg{text}
+% \DescribeMacro{\newtheorem} \marg{text} \oarg{counter} \orelse\ \oarg{oldname} \marg{text}
%
% A few minor changes are made to supply \HTML\ tags.
%
@@ -27754,7 +27873,7 @@ end -- not --version
% \subsection{Printing @ or ! tags}
-% \begin{macro}{\LWR@printatbang} \marg{at -or- bang} \marg{index}
+% \begin{macro}{\LWR@printatbang} \marg{at \orelse\ bang} \marg{index}
%
% \changes{v0.41}{2017/09/28}{Add: \cs{cmidrule} trims.}
% \changes{v0.41}{2017/10/02}{Add: Mute at and bang columns for \cs{bottomrule}.}
@@ -32735,6 +32854,7 @@ end -- not --version
% or if graphicx/s not loaded.}
% \changes{v0.59}{2018/09/02}{Uses \filenm{.eps} if \DVI\ \prog{latex}.}
% \changes{v0.73}{2019/06/30}{Improved warning messages.}
+% \changes{v0.81}{2020/02/29}{Improved warning messages.}
% \begin{macrocode}
\AtBeginDocument{
@@ -32760,19 +32880,31 @@ end -- not --version
\LWR@origincludegraphics{\LWR@baselinename}%
}
}{
- \PackageWarningNoLine{lwarp}{Load graphicx or graphics
- for improved\MessageBreak
- SVG math baselines%
+ \newcommand*{\LWR@addbaselinemarker}{%
+ \global\booltrue{LWR@warnbaselinemarker}%
+ }
+ \AtEndDocument{
+ \ifbool{LWR@warnbaselinemarker}{
+ \PackageWarningNoLine{lwarp}{%
+ Load graphicx or graphics for improved\MessageBreak
+ SVG math sizing and baselines%
+ }
+ }{}
}
- \newcommand*{\LWR@addbaselinemarker}{}
}
}
}{% lwarp_baseline_marker.png or .eps is not present
- \PackageWarningNoLine{lwarp}{%
- File \LWR@baselinename\space is not installed\MessageBreak
- alongside the lwarp-*.sty files,\MessageBreak
- so SVG math baselines may not be accurate}
- \newcommand*{\LWR@addbaselinemarker}{}
+ \newcommand*{\LWR@addbaselinemarker}{%
+ \global\booltrue{LWR@warnbaselinemarker}%
+ }
+ \AtEndDocument{
+ \ifbool{LWR@warnbaselinemarker}{
+ \PackageWarningNoLine{lwarp}{%
+ File \LWR@baselinename\space is not installed\MessageBreak
+ alongside the lwarp-*.sty files, so\MessageBreak
+ SVG math sizing and baselines may not be accurate}
+ }{}
+ }
}
}% AtBeginDocument
@@ -32780,6 +32912,16 @@ end -- not --version
% \end{macro}
+% \DescribeBoolean{LWR@warnbaselinemarker}
+% True if the math baseline marker was ever called for, but
+% \pkg{graphics} or \pkg{graphicx} were not loaded.
+% \begin{macrocode}
+\newbool{LWR@warnbaselinemarker}
+\boolfalse{LWR@warnbaselinemarker}
+% \end{macrocode}
+
+
+
% \DescribeBoolean{LWR@unknownmathsize}
% If \tikz\ or other objects are used inside math mode, the resulting
% image may exceed the \TeX\ box, resulting in an incorrect measurement of
@@ -33343,9 +33485,12 @@ end -- not --version
\renewcommand{\@ensuredmath}[1]{%
\ifbool{mathjax}{%
- \LWR@subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}{%
+ \LWR@subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}%
+ {%
\protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}%
- }{\relax%
+ }%
+ {%
+ \relax%
\LWR@origensuredmath{#1}%
}%
}{% SVG math
@@ -38933,6 +39078,15 @@ color:\LWR@origpound\LWR@tempcolor%
\newcommand*{\EndAccSupp}[1]{}
% \end{macrocode}
%
+% For \brand{MathJax}:
+% \changes{v0.80}{2020/02/20}{\pkg{accsupp}: Added \brand{MathJax} emulation.}
+% \begin{macrocode}
+\begin{warpMathJax}
+\CustomizeMathJax{\newcommand{\BeginAccSupp}[1]{}}
+\CustomizeMathJax{\newcommand{\EndAccSupp}[1]{}}
+\end{warpMathJax}
+% \end{macrocode}
+%
% \iffalse
%</accsupp>
% \fi
@@ -41255,15 +41409,49 @@ span style="width:\LWR@printlength{\ALG@thistlm}; display:inline-block;"%
% \pkg{axessibility} is ignored.
%
% \changes{v0.59}{2018/07/25}{\pkg{axessibility}: Added.}
+% \changes{v0.81}{2020/02/20}{\pkg{axessibility}: Updated to 2020/01/08 version.}
%
% \codehtml
%
% \begin{macrocode}
-\LWR@ProvidesPackageDrop{axessibility}
+\PackageInfo{lwarp}{Using the lwarp version of package `axessibility'.}%
+\ProvidesPackage{lwarp-axessibility}% no date is declared by the original
+
+\newif\iftagpdfopt
+
+\DeclareOption{accsupp}{
+ \tagpdfoptfalse
+}
+
+\DeclareOption{tagpdf}{
+ \tagpdfopttrue
+}
+
+\ProcessOptions\relax
+
+\iftagpdfopt
+ \RequirePackage{tagpdf}
+\else
+ \RequirePackage{accsupp}
+\fi
% \end{macrocode}
%
% \begin{macrocode}
-\newcommand{\wrap}[1]{}
+\long\def\wrap#1{}
+\long\def\wrapml#1{}
+\long\def\wrapmlstar#1{}
+\long\def\wrapmlalt#1{}
+% \end{macrocode}
+%
+% For \brand{MathJax}. These usually will not be needed.
+% \changes{v0.81}{2020/02/20}{\pkg{axessibility}: Added \brand{MathJax} emulation.}
+% \begin{macrocode}
+\begin{warpMathJax}
+\CustomizeMathJax{\newcommand{\wrap}[1]{}}
+\CustomizeMathJax{\newcommand{\wrapml}[1]{}}
+\CustomizeMathJax{\newcommand{\wrapmlstar}[1]{}}
+\CustomizeMathJax{\newcommand{\wrapmlalt}[1]{}}
+\end{warpMathJax}
% \end{macrocode}
%
% \iffalse
@@ -41271,6 +41459,8 @@ span style="width:\LWR@printlength{\ALG@thistlm}; display:inline-block;"%
% \fi
%
%
+%
+%
% \iffalse
%<*axodraw2>
% \fi
@@ -45424,6 +45614,66 @@ name = \chemmacros_translate:n {scheme-name}
%
%
%
+% \iffalse
+%<*colonequals>
+% \fi
+%
+% \part{lwarp-colonequals.sty}
+%
+% \section{colonequals}
+%
+% \credits{Heiko Oberdiek}
+%
+% \DescribePackage{colonequals}
+% \pkg{colonequals} is used as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% Since \brand{Unicode} symbols are not available for each of the following,
+% only two are used for the single and double colons, and the other symbols
+% are derived in a consistent manner. Occasional negative space is added as well.
+% This may need to be undone for some fonts.
+%
+% \changes{v0.81}{2020/03/03}{\pkg{colonequals}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{colonequals}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{warpMathJax}
+\LWR@infoprocessingmathjax{colonequals}
+
+\CustomizeMathJax{\newcommand{\ratio}{\unicode{x2236}}}
+\CustomizeMathJax{\newcommand{\coloncolon}{\unicode{x2237}}}
+\CustomizeMathJax{\newcommand{\colonequals}{\coloncolon=}}
+\CustomizeMathJax{\newcommand{\coloncolonequals}{\coloncolon=}}
+\CustomizeMathJax{\newcommand{\equalscolon}{=\!\ratio}}
+\CustomizeMathJax{\newcommand{\equalscoloncolon}{=\!\coloncolon}}
+\CustomizeMathJax{\newcommand{\colonminus}{\ratio-}}
+\CustomizeMathJax{\newcommand{\coloncolonminus}{\coloncolon-}}
+\CustomizeMathJax{\newcommand{\minuscolon}{-\ratio}}
+\CustomizeMathJax{\newcommand{\minuscoloncolon}{-\coloncolon}}
+\CustomizeMathJax{\newcommand{\colonapprox}{\ratio\approx}}
+\CustomizeMathJax{\newcommand{\coloncolonapprox}{\coloncolon\approx}}
+\CustomizeMathJax{\newcommand{\approxcolon}{\approx\!\ratio}}
+\CustomizeMathJax{\newcommand{\approxcoloncolon}{\approx\!\coloncolon}}
+\CustomizeMathJax{\newcommand{\colonsim}{\ratio\sim}}
+\CustomizeMathJax{\newcommand{\coloncolonsim}{\coloncolon\sim}}
+\CustomizeMathJax{\newcommand{\simcolon}{\sim\!\ratio}}
+\CustomizeMathJax{\newcommand{\simcoloncolon}{\sim\!\coloncolon}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</colonequals>
+% \fi
+%
+%
+%
+%
+%
%
% \iffalse
%<*color>
@@ -46061,6 +46311,42 @@ name = \chemmacros_translate:n {scheme-name}
%
%
%
+%
+% \iffalse
+%<*decimal>
+% \fi
+%
+% \part{lwarp-decimal.sty}
+%
+% \section{decimal}
+%
+% \credits{A.\,Syropoulos and R.\,W.\,D.\,Nickalls}
+%
+% \DescribePackage{decimal}
+% \pkg{decimal} works as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% \changes{v0.81}{2020/02/22}{\pkg{decimal}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{decimal}[2011/06/03]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{warpMathJax}
+\CustomizeMathJax{\def\.{\mbox{.}}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</decimal>
+% \fi
+%
+%
+%
+%
% \iffalse
%<*diagbox>
% \fi
@@ -46249,6 +46535,90 @@ name = \chemmacros_translate:n {scheme-name}
%
%
%
+%
+% \iffalse
+%<*DotArrow>
+% \fi
+%
+% \part{lwarp-DotArrow.sty}
+%
+% \section{DotArrow}
+%
+% \credits{Sven Schneider}
+%
+% \DescribePackage{DotArrow}
+% \pkg{DotArrow} is patched for use by \pkg{lwarp},
+% and emulated for \brand{MathJax}.
+%
+% \changes{v0.81}{2020/03/03}{\pkg{DotArrow}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{DotArrow}[2007/02/12]
+% \end{macrocode}
+%
+% The width must be recomputed each time, depending on print or \HTML\ output.
+% \begin{macrocode}
+\xpretocmd{\dotarrow}{\settowidth{\oneWidth}{\onePartX}}{}{}
+
+\begin{warpMathJax}
+\CustomizeMathJax{\newcommand{\dotarrow}[1]{\stackrel{#1}{\unicode{x21E2}}}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</DotArrow>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
+%<*dotlessi>
+% \fi
+%
+% \part{lwarp-dotlessi.sty}
+%
+% \section{dotlessi}
+%
+% \credits{Javier Bezos}
+%
+% \DescribePackage{dotlessi}
+% \pkg{dotlessi} is used as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% Use |\usepackage{cmap}| if \cs{dotlessj} does not appear in \HTML\ in text mode.
+% \watchout[\HTML\ \cs{dotlessj}]
+% See \cref{sec:fonts}.
+%
+% For \brand{MathJax}, use \cs{boldsymbol} instead of \cs{mathbf}.
+% \watchout[not bold]
+%
+% \changes{v0.81}{2020/02/21}{\pkg{dotlessi}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{dotlessi}[1999/10/12]
+% \end{macrocode}
+%
+% For \brand{MathJax}:
+% \begin{macrocode}
+\begin{warpMathJax}
+\CustomizeMathJax{\let\dotlessi\imath}
+\CustomizeMathJax{\let\dotlessj\jmath}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</dotlessi>
+% \fi
+%
+%
+%
+%
% \iffalse
%<*dprogress>
% \fi
@@ -46503,6 +46873,246 @@ name = \chemmacros_translate:n {scheme-name}
%
%
%
+% \iffalse
+%<*econometrics>
+% \fi
+%
+% \part{lwarp-econometrics.sty}
+%
+% \section{econometrics}
+%
+% \credits{Erik Kole}
+%
+% \DescribePackage{econometrics}
+% \pkg{econometrics} is used as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% \changes{v0.81}{2020/03/01}{\pkg{econometrics}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{econometrics}% no date specified in the original
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{warpMathJax}
+\LWR@infoprocessingmathjax{econometrics}
+
+\CustomizeMathJax{\newcommand{\SC}{\mathbb{C}}}
+\CustomizeMathJax{\newcommand{\SN}{\mathbb{N}}}
+\CustomizeMathJax{\newcommand{\SQ}{\mathbb{Q}}}
+\CustomizeMathJax{\newcommand{\SR}{\mathbb{R}}}
+\CustomizeMathJax{\newcommand{\SZ}{\mathbb{Z}}}
+
+\CustomizeMathJax{\newcommand{\calA}{\mathcal{A}}}
+\CustomizeMathJax{\newcommand{\calB}{\mathcal{B}}}
+\CustomizeMathJax{\newcommand{\calC}{\mathcal{C}}}
+\CustomizeMathJax{\newcommand{\calD}{\mathcal{D}}}
+\CustomizeMathJax{\newcommand{\calE}{\mathcal{E}}}
+\CustomizeMathJax{\newcommand{\calF}{\mathcal{F}}}
+\CustomizeMathJax{\newcommand{\calG}{\mathcal{G}}}
+\CustomizeMathJax{\newcommand{\calH}{\mathcal{H}}}
+\CustomizeMathJax{\newcommand{\calI}{\mathcal{I}}}
+\CustomizeMathJax{\newcommand{\calJ}{\mathcal{J}}}
+\CustomizeMathJax{\newcommand{\calK}{\mathcal{K}}}
+\CustomizeMathJax{\newcommand{\calL}{\mathcal{L}}}
+\CustomizeMathJax{\newcommand{\calM}{\mathcal{M}}}
+\CustomizeMathJax{\newcommand{\calN}{\mathcal{N}}}
+\CustomizeMathJax{\newcommand{\calO}{\mathcal{O}}}
+\CustomizeMathJax{\newcommand{\calP}{\mathcal{P}}}
+\CustomizeMathJax{\newcommand{\calQ}{\mathcal{Q}}}
+\CustomizeMathJax{\newcommand{\calR}{\mathcal{R}}}
+\CustomizeMathJax{\newcommand{\calS}{\mathcal{S}}}
+\CustomizeMathJax{\newcommand{\calT}{\mathcal{T}}}
+\CustomizeMathJax{\newcommand{\calU}{\mathcal{U}}}
+\CustomizeMathJax{\newcommand{\calV}{\mathcal{V}}}
+\CustomizeMathJax{\newcommand{\calW}{\mathcal{W}}}
+\CustomizeMathJax{\newcommand{\calX}{\mathcal{X}}}
+\CustomizeMathJax{\newcommand{\calY}{\mathcal{Y}}}
+\CustomizeMathJax{\newcommand{\calZ}{\mathcal{Z}}}
+
+\CustomizeMathJax{\newcommand{\mA}{\bm A}}
+\CustomizeMathJax{\newcommand{\va}{\bm a}}
+\CustomizeMathJax{\newcommand{\mB}{\bm B}}
+\CustomizeMathJax{\newcommand{\vb}{\bm b}}
+\CustomizeMathJax{\newcommand{\mC}{\bm C}}
+\CustomizeMathJax{\newcommand{\vc}{\bm c}}
+\CustomizeMathJax{\newcommand{\mD}{\bm D}}
+\CustomizeMathJax{\newcommand{\vd}{\bm d}}
+\CustomizeMathJax{\newcommand{\mE}{\bm E}}
+\CustomizeMathJax{\newcommand{\ve}{\bm e}}
+\CustomizeMathJax{\newcommand{\mF}{\bm F}}
+\CustomizeMathJax{\newcommand{\vf}{\bm f}}
+\CustomizeMathJax{\newcommand{\mG}{\bm G}}
+\CustomizeMathJax{\newcommand{\vg}{\bm g}}
+\CustomizeMathJax{\newcommand{\mH}{\bm H}}
+\CustomizeMathJax{\newcommand{\vh}{\bm h}}
+\CustomizeMathJax{\newcommand{\mI}{\bm I}}
+\CustomizeMathJax{\newcommand{\vi}{\bm i}}
+\CustomizeMathJax{\newcommand{\mJ}{\bm J}}
+\CustomizeMathJax{\newcommand{\vj}{\bm j}}
+\CustomizeMathJax{\newcommand{\mK}{\bm K}}
+\CustomizeMathJax{\newcommand{\vk}{\bm k}}
+\CustomizeMathJax{\newcommand{\mL}{\bm L}}
+\CustomizeMathJax{\newcommand{\vl}{\bm l}}
+\CustomizeMathJax{\newcommand{\mM}{\bm M}}
+\CustomizeMathJax{\newcommand{\vm}{\bm m}}
+\CustomizeMathJax{\newcommand{\mN}{\bm N}}
+\CustomizeMathJax{\newcommand{\vn}{\bm n}}
+\CustomizeMathJax{\newcommand{\mO}{\bm O}}
+\CustomizeMathJax{\newcommand{\vo}{\bm o}}
+\CustomizeMathJax{\newcommand{\mP}{\bm P}}
+\CustomizeMathJax{\newcommand{\vp}{\bm p}}
+\CustomizeMathJax{\newcommand{\mQ}{\bm Q}}
+\CustomizeMathJax{\newcommand{\vq}{\bm q}}
+\CustomizeMathJax{\newcommand{\mR}{\bm R}}
+\CustomizeMathJax{\newcommand{\vr}{\bm r}}
+\CustomizeMathJax{\newcommand{\mS}{\bm S}}
+\CustomizeMathJax{\newcommand{\vs}{\bm s}}
+\CustomizeMathJax{\newcommand{\mT}{\bm T}}
+\CustomizeMathJax{\newcommand{\vt}{\bm t}}
+\CustomizeMathJax{\newcommand{\mU}{\bm U}}
+\CustomizeMathJax{\newcommand{\vu}{\bm u}}
+\CustomizeMathJax{\newcommand{\mV}{\bm V}}
+\CustomizeMathJax{\newcommand{\vv}{\bm v}}
+\CustomizeMathJax{\newcommand{\mW}{\bm W}}
+\CustomizeMathJax{\newcommand{\vw}{\bm w}}
+\CustomizeMathJax{\newcommand{\mX}{\bm X}}
+\CustomizeMathJax{\newcommand{\vx}{\bm x}}
+\CustomizeMathJax{\newcommand{\mY}{\bm Y}}
+\CustomizeMathJax{\newcommand{\vy}{\bm y}}
+\CustomizeMathJax{\newcommand{\mZ}{\bm Z}}
+\CustomizeMathJax{\newcommand{\vz}{\bm z}}
+
+\CustomizeMathJax{\newcommand{\valpha}{\bm \alpha}}
+\CustomizeMathJax{\newcommand{\vbeta}{\bm \beta}}
+\CustomizeMathJax{\newcommand{\vgamma}{\bm \gamma}}
+\CustomizeMathJax{\newcommand{\vdelta}{\bm \delta}}
+\CustomizeMathJax{\newcommand{\vepsi}{\bm \epsi}}
+\CustomizeMathJax{\newcommand{\vvarepsilon}{\bm \varepsilon}}
+\CustomizeMathJax{\newcommand{\vzeta}{\bm \zeta}}
+\CustomizeMathJax{\newcommand{\veta}{\bm \eta}}
+\CustomizeMathJax{\newcommand{\vtheta}{\bm \theta}}
+\CustomizeMathJax{\newcommand{\viota}{\bm \iota}}
+\CustomizeMathJax{\newcommand{\vkappa}{\bm \kappa}}
+\CustomizeMathJax{\newcommand{\vlambda}{\bm \lambda}}
+\CustomizeMathJax{\newcommand{\vmu}{\bm \mu}}
+\CustomizeMathJax{\newcommand{\vnu}{\bm \nu}}
+\CustomizeMathJax{\newcommand{\vxi}{\bm \xi}}
+\CustomizeMathJax{\newcommand{\vpi}{\bm \pi}}
+\CustomizeMathJax{\newcommand{\vrho}{\bm \rho}}
+\CustomizeMathJax{\newcommand{\vsigma}{\bm \sigma}}
+\CustomizeMathJax{\newcommand{\vtau}{\bm \tau}}
+\CustomizeMathJax{\newcommand{\vupsilon}{\bm \upsilon}}
+\CustomizeMathJax{\newcommand{\vphi}{\bm \phi}}
+\CustomizeMathJax{\newcommand{\vchi}{\bm \chi}}
+\CustomizeMathJax{\newcommand{\vpsi}{\bm \psi}}
+\CustomizeMathJax{\newcommand{\vomega}{\bm \omega}}
+
+\CustomizeMathJax{\newcommand{\mGamma}{\bm \varGamma}}
+\CustomizeMathJax{\newcommand{\mDelta}{\bm \varDelta}}
+\CustomizeMathJax{\newcommand{\mTheta}{\bm \varTheta}}
+\CustomizeMathJax{\newcommand{\mLambda}{\bm \varLambda}}
+\CustomizeMathJax{\newcommand{\mXi}{\bm \varXi}}
+\CustomizeMathJax{\newcommand{\mPi}{\bm \varPi}}
+\CustomizeMathJax{\newcommand{\mSigma}{\bm \varSigma}}
+\CustomizeMathJax{\newcommand{\mUpsilon}{\bm \varUpsilon}}
+\CustomizeMathJax{\newcommand{\mPhi}{\bm \varPhi}}
+\CustomizeMathJax{\newcommand{\mPsi}{\bm \varPsi}}
+\CustomizeMathJax{\newcommand{\mOmega}{\bm \varOmega}}
+
+\CustomizeMathJax{\newcommand{\rb}{\mathrm{b}}}
+\CustomizeMathJax{\newcommand{\rB}{\mathrm{B}}}
+\CustomizeMathJax{\newcommand{\rC}{\mathrm{C}}}
+\CustomizeMathJax{\newcommand{\rD}{\mathrm{D}}}
+\CustomizeMathJax{\newcommand{\rf}{\mathrm{f}}}
+\CustomizeMathJax{\newcommand{\rF}{\mathrm{F}}}
+\CustomizeMathJax{\newcommand{\rH}{\mathrm{H}}}
+\CustomizeMathJax{\newcommand{\rL}{\mathrm{L}}}
+\CustomizeMathJax{\newcommand{\rN}{\mathrm{N}}}
+\CustomizeMathJax{\newcommand{\rt}{\mathrm{t}}}
+\CustomizeMathJax{\newcommand{\rU}{\mathrm{U}}}
+\CustomizeMathJax{\newcommand{\rGam}{\mathrm{Gam}}}
+\CustomizeMathJax{\newcommand{\rBeta}{\mathrm{Beta}}}
+
+\CustomizeMathJax{\newcommand{\Bin}{\mathrm{Bin}}}
+\CustomizeMathJax{\newcommand{\eu}{\mathrm{e}}}
+\CustomizeMathJax{\newcommand{\iu}{\mathrm{i}}}
+\CustomizeMathJax{\newcommand{\LN}{\mathrm{LN}}}
+\CustomizeMathJax{\newcommand{\IN}{\mathrm{IN}}}
+
+\CustomizeMathJax{\newcommand{\Poi}{\mathrm{Poi}}}
+
+\CustomizeMathJax{\newcommand{\ped}[1]{_\mathrm{#1}}}
+\CustomizeMathJax{\newcommand{\ap}[1]{^\mathrm{#1}}}
+\CustomizeMathJax{\renewcommand{\Re}{\mathrm{Re}}{\nolimits}}
+\CustomizeMathJax{\renewcommand{\Im}{\mathrm{Im}}{\nolimits}}
+
+\CustomizeMathJax{\newcommand{\deriv}[3][]{%
+ \frac{\mathrm{d}^{#1}#2}{\mathrm{d}\,#3^{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\pderiv}[3][]{%
+ \frac{\partial^{#1}#2}{\partial #3^{#1}}%
+}}
+
+\CustomizeMathJax{\newcommand{\bias}{\operatorname{bias}}}
+\CustomizeMathJax{\newcommand{\col}{\operatorname{col}}}
+\CustomizeMathJax{\newcommand{\corr}{\operatorname{corr}}}
+\CustomizeMathJax{\newcommand{\cov}{\operatorname{cov}}}
+\CustomizeMathJax{\newcommand{\dg}{\operatorname{dg}}}
+\CustomizeMathJax{\newcommand{\diag}{\operatorname{diag}}}
+\CustomizeMathJax{\newcommand{\E}{\operatorname{E}}}
+\CustomizeMathJax{\newcommand{\etr}{\operatorname{etr}}}
+\CustomizeMathJax{\newcommand{\ip}{\mathrm{int}}{\nolimits}}
+\CustomizeMathJax{\newcommand{\kur}{\operatorname{kur}}}
+\CustomizeMathJax{\newcommand{\MSE}{\operatorname{MSE}}}
+\CustomizeMathJax{\newcommand{\MSFE}{\operatorname{MSFE}}}
+\CustomizeMathJax{\newcommand{\OLS}{\operatorname{OLS}}}
+\CustomizeMathJax{\newcommand{\plim}{\operatorname{plim}}}
+\CustomizeMathJax{\newcommand{\resid}{\operatorname{resid}}}
+\CustomizeMathJax{\newcommand{\rk}{\operatorname{rk}}}
+\CustomizeMathJax{\newcommand{\SE}{\operatorname{SE}}}
+\CustomizeMathJax{\newcommand{\sgn}{\operatorname{sgn}}}
+\CustomizeMathJax{\newcommand{\tr}{\operatorname{tr}}}
+\CustomizeMathJax{\newcommand{\var}{\operatorname{var}}}
+\CustomizeMathJax{\renewcommand{\vec}{\operatorname{vec}}}
+\CustomizeMathJax{\newcommand{\vech}{\operatorname{vech}}}
+
+\CustomizeMathJax{\newcommand{\distr}{\sim}}
+\CustomizeMathJax{\newcommand{\adistr}{\stackrel{a}{\distr}}}
+\CustomizeMathJax{\newcommand{\diff}{\Delta}}
+\CustomizeMathJax{\newcommand{\fdiff}{\diff_{\rf}}}
+\CustomizeMathJax{\newcommand{\bdiff}{\diff_{\rb}}}
+
+\CustomizeMathJax{\newcommand{\eps}{\epsilon}}
+\CustomizeMathJax{\newcommand{\epsi}{\varepsilon}}
+
+\CustomizeMathJax{\newcommand{\longto}{\longrightarrow}}
+\CustomizeMathJax{\newcommand{\pto}{\stackrel{p}{\longrightarrow}}}
+\CustomizeMathJax{\newcommand{\dto}{\stackrel{d}{\longrightarrow}}}
+\CustomizeMathJax{\newcommand{\wto}{\stackrel{w}{\longrightarrow}}}
+
+\CustomizeMathJax{\newcommand{\Infmat}{\bm\calI}}
+\CustomizeMathJax{\newcommand{\Hesmat}{\bm\calH}}
+\CustomizeMathJax{\newcommand{\bcdot}{\bullet}}
+
+\CustomizeMathJax{\newcommand{\vones}{\bm\imath}}
+\CustomizeMathJax{\newcommand{\vzeros}{\boldsymbol{0}}}
+\CustomizeMathJax{\newcommand{\mZeros}{\mathbf{O}}}
+
+\CustomizeMathJax{\newcommand{\e}{\eu}}
+\CustomizeMathJax{\newcommand{\mply}{\cdot}}
+\CustomizeMathJax{\newcommand{\rW}{\ensuremath{\mathrm{W}}}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</econometrics>
+% \fi
+%
+%
+%
%
% \iffalse
%<*ed>
@@ -46832,6 +47442,267 @@ name = \chemmacros_translate:n {scheme-name}
%
%
%
+% \iffalse
+%<*engtlc>
+% \fi
+%
+% \part{lwarp-engtlc.sty}
+%
+% \section{engtlc}
+%
+% \credits{Claudio Fiandrino}
+%
+% \DescribePackage{engtlc}
+% \pkg{engtlc} is patched for use by \pkg{lwarp}.
+% \brand{MathJax} is emulated.
+%
+% For \brand{MathJax}, \cs{signt}, \cs{signf}, \cs{signn}, and \cs{signz}
+% \watchout
+% do not force letter case as they do in \SVG\ math.
+%
+% \changes{v0.81}{2020/02/25}{\pkg{engtlc}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{engtlc}[2012/12/18]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\LWR@HTML@finees}{%
+ \begin{BlockClass}[text-align:right]{exerend}%
+ \HTMLunicode{220E}%
+ \end{BlockClass}%
+}
+\LWR@formatted{finees}
+
+\newcommand{\LWR@HTML@exerend}{\finees}
+\LWR@formatted{exerend}
+
+\begin{warpMathJax}
+\LWR@infoprocessingmathjax{engtlc}
+
+\CustomizeMathJax{\newcommand{\unit}[1]{\,\mathrm{#1}}}
+\CustomizeMathJax{\newcommand{\micro}{\mathrm{\unicode{x00B5}}}}
+%
+\CustomizeMathJax{\newcommand{\ho}{\unit{h}}}
+\CustomizeMathJax{\newcommand{\s}{\unit{s}}}
+\CustomizeMathJax{\newcommand{\ms}{\unit{ms}}}
+\CustomizeMathJax{\newcommand{\us}{\unit{\micro s}}}
+\CustomizeMathJax{\newcommand{\ns}{\unit{ns}}}
+\CustomizeMathJax{\newcommand{\ps}{\unit{ps}}}
+%
+\CustomizeMathJax{\newcommand{\um}{\unit{\micro m}}}
+\CustomizeMathJax{\newcommand{\mm}{\unit{mm}}}
+\CustomizeMathJax{\newcommand{\cm}{\unit{cm}}}
+\CustomizeMathJax{\newcommand{\dm}{\unit{dm}}}
+\CustomizeMathJax{\newcommand{\m}{\unit{m}}}
+\CustomizeMathJax{\newcommand{\km}{\unit{km}}}
+%
+\CustomizeMathJax{\newcommand{\MA}{\unit{MA}}}
+\CustomizeMathJax{\newcommand{\kA}{\unit{kA}}}
+\CustomizeMathJax{\newcommand{\A}{\unit{A}}}
+\CustomizeMathJax{\newcommand{\mA}{\unit{mA}}}
+\CustomizeMathJax{\newcommand{\uA}{\unit{\micro A}}}
+\CustomizeMathJax{\newcommand{\nA}{\unit{nA}}}
+%
+\CustomizeMathJax{\newcommand{\MV}{\unit{MV}}}
+\CustomizeMathJax{\newcommand{\kV}{\unit{kV }}}
+\CustomizeMathJax{\newcommand{\V}{\unit{V}}}
+\CustomizeMathJax{\newcommand{\mV}{\unit{mV}}}
+\CustomizeMathJax{\newcommand{\uV}{\unit{\micro V}}}
+%
+\CustomizeMathJax{\newcommand{\mohm}{\unit{m\Omega}}}
+\CustomizeMathJax{\newcommand{\ohm}{\unit{\Omega}}}
+\CustomizeMathJax{\newcommand{\kohm}{\unit{k\Omega}}}
+\CustomizeMathJax{\newcommand{\Mohm}{\unit{M\Omega}}}
+%
+\CustomizeMathJax{\newcommand{\pSi}{\unit{pS}}}
+\CustomizeMathJax{\newcommand{\nSi}{\unit{nS}}}
+\CustomizeMathJax{\newcommand{\uSi}{\unit{\micro S}}}
+\CustomizeMathJax{\newcommand{\mSi}{\unit{mS}}}
+\CustomizeMathJax{\newcommand{\Si}{\unit{S}}}
+\CustomizeMathJax{\newcommand{\kSi}{\unit{kS}}}
+\CustomizeMathJax{\newcommand{\MSi}{\unit{MS}}}
+%
+\CustomizeMathJax{\newcommand{\fFa}{\unit{fF}}}
+\CustomizeMathJax{\newcommand{\pFa}{\unit{pF}}}
+\CustomizeMathJax{\newcommand{\nFa}{\unit{nF}}}
+\CustomizeMathJax{\newcommand{\uFa}{\unit{\micro F}}}
+\CustomizeMathJax{\newcommand{\mFa}{\unit{mF}}}
+\CustomizeMathJax{\newcommand{\Fa}{\unit{F}}}
+%
+\CustomizeMathJax{\newcommand{\fHe}{\unit{fH}}}
+\CustomizeMathJax{\newcommand{\pHe}{\unit{pH}}}
+\CustomizeMathJax{\newcommand{\nHe}{\unit{nH}}}
+\CustomizeMathJax{\newcommand{\uHe}{\unit{\micro H}}}
+\CustomizeMathJax{\newcommand{\mHe}{\unit{mH}}}
+\CustomizeMathJax{\newcommand{\He}{\unit{H}}}
+%
+\CustomizeMathJax{\newcommand{\dB}{\unit{dB}}}
+\CustomizeMathJax{\newcommand{\dBm}{\unit{dBm}}}
+%
+\CustomizeMathJax{\newcommand{\uW}{\unit{\micro W}}}
+\CustomizeMathJax{\newcommand{\mW}{\unit{mW}}}
+\CustomizeMathJax{\newcommand{\W}{\unit{W}}}
+\CustomizeMathJax{\newcommand{\kW}{\unit{kW}}}
+\CustomizeMathJax{\newcommand{\MW}{\unit{MW}}}
+%
+\CustomizeMathJax{\newcommand{\Hz}{\unit{Hz}}}
+\CustomizeMathJax{\newcommand{\kHz}{\unit{kHz}}}
+\CustomizeMathJax{\newcommand{\MHz}{\unit{MHz}}}
+\CustomizeMathJax{\newcommand{\GHz}{\unit{GHz}}}
+\CustomizeMathJax{\newcommand{\THz}{\unit{THz}}}
+%
+\CustomizeMathJax{\newcommand{\bit}{\unit{bit}}}
+\CustomizeMathJax{\newcommand{\kbit}{\unit{Kib}}}
+\CustomizeMathJax{\newcommand{\Mbit}{\unit{Mib}}}
+\CustomizeMathJax{\newcommand{\Byte}{\unit{B}}}
+\CustomizeMathJax{\newcommand{\kByte}{\unit{KiB}}}
+\CustomizeMathJax{\newcommand{\MByte}{\unit{Mib}}}
+\CustomizeMathJax{\newcommand{\GByte}{\unit{GiB}}}
+\CustomizeMathJax{\newcommand{\TByte}{\unit{TiB}}}
+\CustomizeMathJax{\newcommand{\bits}{\unit{bit/s}}}
+\CustomizeMathJax{\newcommand{\kbits}{\unit{Kib/s}}}
+\CustomizeMathJax{\newcommand{\Mbits}{\unit{Mib/s}}}
+\CustomizeMathJax{\newcommand{\Bytes}{\unit{B/s}}}
+\CustomizeMathJax{\newcommand{\kBytes}{\unit{KiB/s}}}
+\CustomizeMathJax{\newcommand{\MBytes}{\unit{MiB/s}}}
+\CustomizeMathJax{\newcommand{\GBytes}{\unit{GiB/s}}}
+\CustomizeMathJax{\newcommand{\TBytes}{\unit{TiB/s}}}
+\CustomizeMathJax{\newcommand{\chips}{\unit{chip/s}}}
+\CustomizeMathJax{\newcommand{\kchips}{\unit{Ki\mkern2mu chip/s}}}
+\CustomizeMathJax{\newcommand{\Mchips}{\unit{Mi\mkern2mu chip/s}}}
+\CustomizeMathJax{\newcommand{\chipsubit}{\unit{chip/bit}}}
+%
+\CustomizeMathJax{\newcommand{\frecciadex}[1][0.5]{%
+ \hspace{.25cm}\Longrightarrow \hspace{.25cm}}%
+}
+\CustomizeMathJax{\newcommand{\varianzarumore}{\frac{N_0}{2}}}
+%
+\CustomizeMathJax{\newcommand{\etsymbolbracearg}[2]{%
+ #1\mathopen{}\left\lbrace#2\right\rbrace\mathclose{}}%
+}
+\CustomizeMathJax{\newcommand{\fourier}[1]{\etsymbolbracearg{\mathcal{F}}{#1}}}
+\CustomizeMathJax{\newcommand{\invfourier}[1]{\etsymbolbracearg{\mathcal{F}^{-1}}{#1}}}
+\CustomizeMathJax{\newcommand{\partereale}[1]{\etsymbolbracearg{\textbf{Re}}{#1}}}
+\CustomizeMathJax{\newcommand{\parteimm}[1]{\etsymbolbracearg{\textbf{Im}}{#1}}}
+\CustomizeMathJax{\newcommand{\Info}[1]{I\left(#1\right)}}
+\CustomizeMathJax{\newcommand{\versore}[1]{\hat{#1}}}
+\CustomizeMathJax{\newcommand{\vettore}[1]{\overrightarrow{#1}}}
+\CustomizeMathJax{\newcommand{\coseno}[1]{\cos\left(2\pi#1t\right)}}
+\CustomizeMathJax{\newcommand{\seno}[1]{\sin\left(2\pi#1t\right)}}
+\CustomizeMathJax{\newcommand{\energia}[1]{\mathcal{E}_{#1}}}
+\CustomizeMathJax{\newcommand{\moduloexp}[2]{\left\vert#1\right\vert^{#2}}}
+\CustomizeMathJax{\newcommand{\modulo}[1]{\left\vert#1\right\vert}}
+\CustomizeMathJax{\newcommand{\indB}[1]{%
+ \mathopen{}\left.#1\right\vert_{\mathrm{dB}}\mathclose{}}}%
+\CustomizeMathJax{\newcommand{\for}[2]{\left. #1 \right\vert_{#2}}}
+\CustomizeMathJax{\newcommand{\massimo}[1]{\etsymbolbracearg{\max}{#1}}}
+\CustomizeMathJax{\newcommand{\minimo}[1]{\etsymbolbracearg{\min}{#1}}}
+\CustomizeMathJax{\newcommand{\valc}{3\cdot 10^8}}
+\CustomizeMathJax{\newcommand{\loga}[2]{\log_{#1}#2}}
+\CustomizeMathJax{\newcommand{\analitic}[1]{\mathring{#1}}}
+\CustomizeMathJax{\newcommand{\diff}{\mathop{}\mathopen{\mathrm{d}}}}
+\CustomizeMathJax{\newcommand{\intinf}[1]{\int_{-\infty}^{+\infty}{#1}}}
+\CustomizeMathJax{\newcommand{\deltain}[1]{\delta\left(#1\right)}}
+\CustomizeMathJax{\newcommand{\iu}{\mathrm{j}}}
+\CustomizeMathJax{\newcommand{\ex}[1]{\mathrm{e}^{#1}}}
+%
+\CustomizeMathJax{\newcommand{\gammatens}{{}^{\mathrm{V}}\Gamma}}
+\CustomizeMathJax{\newcommand{\gammacorr}{{}^{\mathrm{I}}\Gamma}}
+\CustomizeMathJax{\newcommand{\gammatensin}[1]{{}^{\mathrm{V}}\Gamma_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\gammacorrin}[1]{{}^{\mathrm{I}}\Gamma_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\gammain}[1]{\Gamma_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\gammak}{{}^{\mathrm{k}}\Gamma}}
+%
+\CustomizeMathJax{\newcommand{\lbvt}{\lambda_0}}
+\CustomizeMathJax{\newcommand{\lbg}{\lambda_g}}
+\CustomizeMathJax{\newcommand{\lbgvt}{\lambda_{g_0}}}
+%
+\CustomizeMathJax{\newcommand{\potin}[1]{P_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\potdisp}[1][]{P_{\mathrm{disp}}^{#1}}}
+\CustomizeMathJax{\newcommand{\potDC}[1][]{P_{\mathrm{DC}}^{#1}}}
+\CustomizeMathJax{\newcommand{\potCC}[1][]{P_{\mathrm{CC}}^{#1}}}
+\CustomizeMathJax{\newcommand{\potirr}[1][]{P_{\mathrm{irr}}^{#1}}}
+\CustomizeMathJax{\newcommand{\potdiss}[1][]{P_{\mathrm{diss}}^{#1}}}
+\CustomizeMathJax{\newcommand{\potinc}[1][]{P_{\mathrm{inc}}^{#1}}}
+%
+\CustomizeMathJax{\newcommand{\z}[1]{Z_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\znorm}[1]{z_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\y}[1]{Y_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\ynorm}[1]{y_{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\zinf}[1][]{Z_{\infty#1}}}
+\CustomizeMathJax{\newcommand{\zinfn}[1]{\zinf[#1]}}
+\CustomizeMathJax{\newcommand{\yinf}[1][]{Y_{\infty#1}}}
+\CustomizeMathJax{\newcommand{\yinfn}[1]{\yinf[#1]}}
+\CustomizeMathJax{\newcommand{\zvt}{Z_0}}
+\CustomizeMathJax{\newcommand{\yvt}{Y_0}}
+%
+\CustomizeMathJax{\newcommand{\campoe}{\underline{\mathcal{E}}(\underline{r},t)}}
+\CustomizeMathJax{\newcommand{\campoefas}{\underline{E}(\underline{r})}}
+\CustomizeMathJax{\newcommand{\campoh}{\underline{\mathcal{H}}(\underline{r},t)}}
+\CustomizeMathJax{\newcommand{\campohfas}{\underline{H}(\underline{r})}}
+%
+\CustomizeMathJax{\newcommand{\signt}[1]{{#1}(t)}}
+\CustomizeMathJax{\newcommand{\signf}[1]{{#1}(f)}}
+\CustomizeMathJax{\newcommand{\signn}[1]{{#1}(n)}}
+\CustomizeMathJax{\newcommand{\signz}[1]{{#1}(z)}}
+%
+\CustomizeMathJax{\newcommand{\prob}[1]{\mathcal{P}\left(#1\right)}}
+\CustomizeMathJax{\newcommand{\valatt}[1]{\mathbb{E}\left[#1\right]}}
+\CustomizeMathJax{\newcommand{\var}[1]{\mathrm{Var}\left[#1\right]}}
+\CustomizeMathJax{\newcommand{\comma}{\, , \,}}
+\CustomizeMathJax{\newcommand{\dato}{\,|\,}}
+%
+\CustomizeMathJax{\let\bfRe\partereale}
+\CustomizeMathJax{\let\bfIm\parteimm}
+\CustomizeMathJax{\let\noisevar\varianzarumore}
+% \CustomizeMathJax{\let\exerend\finees}
+\CustomizeMathJax{\let\Spimplies\frecciadex}
+\CustomizeMathJax{\let\Downimplies\frecciadown}
+\CustomizeMathJax{\let\unitvec\versore}
+\CustomizeMathJax{\let\vector\vettore}
+\CustomizeMathJax{\let\cosine\coseno}
+\CustomizeMathJax{\let\sine\seno}
+\CustomizeMathJax{\let\energy\energia}
+\CustomizeMathJax{\let\Abs\modulo}
+\CustomizeMathJax{\let\AbsPow\moduloexp}
+\CustomizeMathJax{\let\Max\massimo}
+\CustomizeMathJax{\let\Min\minimo}
+\CustomizeMathJax{\let\clight\valc}
+\CustomizeMathJax{\let\Log\loga}
+\CustomizeMathJax{\let\analytic\analitic}
+\CustomizeMathJax{\let\infint\intinf}
+\CustomizeMathJax{\let\deltaimp\deltain}
+\CustomizeMathJax{\let\Vgamma\gammatens}
+\CustomizeMathJax{\let\Cgamma\gammacorr}
+\CustomizeMathJax{\let\Vgammain\gammatensin}
+\CustomizeMathJax{\let\Cgammain\gammacorrin}
+\CustomizeMathJax{\let\Kgamma\gammak}
+\CustomizeMathJax{\let\powerin\potin}
+\CustomizeMathJax{\let\availpow\potdisp}
+\CustomizeMathJax{\let\irrpow\potirr}
+\CustomizeMathJax{\let\disspow\potdiss}
+\CustomizeMathJax{\let\incpow\potinc}
+\CustomizeMathJax{\let\potalim\potCC}
+\CustomizeMathJax{\let\potDC\potCC}
+\CustomizeMathJax{\let\Efield\campoe}
+\CustomizeMathJax{\let\Hfield\campoh}
+\CustomizeMathJax{\let\phasorEfield\campoefas}
+\CustomizeMathJax{\let\phasorHfiled\campohfas}
+\CustomizeMathJax{\let\given\dato}
+\CustomizeMathJax{\let\expval\valatt}
+\CustomizeMathJax{\let\rmexp\ex}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</engtlc>
+% \fi
+%
+%
+%
%
%
% \iffalse
@@ -52021,22 +52892,26 @@ solid {\FancyVerbRuleColor{\LWR@origpound\LWR@tempcolor}} ; % space
% \pkg{gridset} is ignored.
%
% \changes{v0.54}{2018/04/11}{\pkg{gridset}: Added.}
+% \changes{v0.81}{2020/02/21}{\pkg{gridset}: Updated to v0.3.}
%
% \codehtml
%
% \begin{macrocode}
-\LWR@ProvidesPackageDrop{gridset}
+\LWR@ProvidesPackageDrop{gridset}[2020-02-12]
% \end{macrocode}
%
% \begin{macrocode}
\newcommand*{\gridbase}{}
\newcommand*{\gridinterval}{}
-\newcommand*{\savepos}[1]{}
-\newcounter{gridcnt}
+\newcommand*{\SavePos}[1]{}
+\ifLuaTeX
+\else
+\let\savepos\SavePos
+\fi
\newcommand*{\vskipnextgrid}{}
-\newcommand*{\thegridinfo}[1]{}
-\newcommand*{\theposinfo}[1]{}
-\newcommand*{\theypos}[1]{}
+\newcommand*{\thegridinfo}[1]{(thegridinfo)}
+\newcommand*{\theposinfo}[1]{(theposinfo)}
+\newcommand*{\theypos}[1]{(theypos)}
% \end{macrocode}
%
% \iffalse
@@ -52666,6 +53541,15 @@ do not attempt to patch lwarp's version of `hyperref'.)\MessageBreak}
% \end{noindmacro}
+% \begin{noindmacro}{\pdfstringdefDisableCommands} \marg{commands}
+%
+% \changes{v0.81}{2020/03/04}{\pkg{hyperref}: Added \cs{pdfstringdefDisableCommands}.}
+% \begin{macrocode}
+\newcommand{\pdfstringdefDisableCommands}[1]{}
+% \end{macrocode}
+% \end{noindmacro}
+
+
% \begin{noindmacro}{\hypercalcbp} \marg{dimen} \quad
% From \pkg{hyperref}.
%
@@ -55415,6 +56299,41 @@ do not attempt to patch lwarp's version of `hyperref'.)\MessageBreak}
%
%
%
+%
+% \iffalse
+%<*luamplib>
+% \fi
+%
+% \part{lwarp-luamplib.sty}
+%
+% \section{luamplib}
+%
+% \credits{Hans Hagen, Taco Hoekwater, Elie Roux, Philipp Gesang, Kim Dohyun}
+%
+% \DescribePackage{luamplib}
+% \pkg{luamplib} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.81}{2020/02/27}{\pkg{luamplib}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{luamplib}[2020/02/24]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\BeforeBeginEnvironment{mplibcode}{%
+ \begin{lateximage}[-mplibcode-~\PackageDiagramAltText]%
+}
+\AfterEndEnvironment{mplibcode}{\end{lateximage}}
+% \end{macrocode}
+%
+% \iffalse
+%</luamplib>
+% \fi
+%
+%
+%
% \iffalse
%<*luatodonotes>
% \fi
@@ -56854,7 +57773,7 @@ background:
%
%
% \begin{noindmacro}{\LWR@mdfsubtitlecommon}
-% \marg{sub -or- subsub} \oarg{options} \marg{title}
+% \marg{sub \orelse\ subsub} \oarg{options} \marg{title}
%
% Common code for \cs{LWR@mdfsubtitle} and \cs{LWR@mdfsubsubtitle}.
%
@@ -58420,6 +59339,67 @@ background:
%
%
%
+% \iffalse
+%<*multiobjective>
+% \fi
+%
+% \part{lwarp-multiobjective.sty}
+%
+% \section{multiobjective}
+%
+% \credits{Luis Mart\'{i}}
+%
+% \DescribePackage{multiobjective}
+% \pkg{multiobjective} is used as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% \changes{v0.81}{2020/03/03}{\pkg{multiobjective}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{multiobjective}[2008/08/19]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{warpMathJax}
+\CustomizeMathJax{\newcommand{\dom}{\prec}}
+\CustomizeMathJax{\newcommand{\negdom}{\not\prec}}
+\CustomizeMathJax{\newcommand{\weakdom}{\preccurlyeq}}
+\CustomizeMathJax{\newcommand{\negweakdom}{\not\preccurlyeq}}
+\CustomizeMathJax{\newcommand{\strictdom}{\prec\!\!\!\prec}}
+\CustomizeMathJax{\newcommand{\negstrictdom}{\not\prec\!\!\!\prec}}
+\CustomizeMathJax{\newcommand{\multepsilondom}{\preccurlyeq_{\epsilon\cdot}}}
+\CustomizeMathJax{\newcommand{\addiepsilondom}{\preccurlyeq_{\epsilon +}}}
+\CustomizeMathJax{\newcommand{\better}{\triangleleft}}
+\CustomizeMathJax{\def\vec#1{%
+ \mathchoice%
+ {{\displaystyle\boldsymbol{#1}}}%
+ {{\textstyle\boldsymbol{#1}}}%
+ {{\scriptstyle\boldsymbol{#1}}}%
+ {{\scriptscriptstyle\boldsymbol{#1}}}%
+}}
+
+\CustomizeMathJax{\newcommand{\set}[1]{%
+ \mathchoice%
+ {{\displaystyle\mathcal{#1}}}%
+ {{\textstyle\mathcal{#1}}}%
+ {{\scriptstyle\mathcal{#1}}}%
+ {{\scriptscriptstyle\mathcal{#1}}}%
+}}
+\CustomizeMathJax{\def\argmax{\mathop{{\mathrm{arg}}\,\max}}}
+\CustomizeMathJax{\def\argmin{\mathop{{\mathrm{arg}}\,\min}
+}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</multiobjective>
+% \fi
+%
+%
+%
+%
%
% \iffalse
%<*multirow>
@@ -59886,6 +60866,40 @@ do not attempt to patch lwarp's version of `nameref'.)\MessageBreak
%
%
%
+%
+%
+% \iffalse
+%<*nolbreaks>
+% \fi
+%
+% \part{lwarp-nolbreaks.sty}
+%
+% \section{nolbreaks}
+%
+% \credits{Donald Arseneau}
+%
+% \DescribePackage{nolbreaks}
+% \pkg{nolbreaks} is emulated.
+%
+% \changes{v0.81}{2020/02/22}{\pkg{nolbreaks}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{nolbreaks}[2012/05/31]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\nolbreaks}{s m}{\InlineClass{nolbreaks}{#2}}
+% \end{macrocode}
+%
+% \iffalse
+%</nolbreaks>
+% \fi
+%
+%
+%
+%
% \iffalse
%<*nomencl>
% \fi
@@ -62653,6 +63667,122 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
%
%
% \iffalse
+%<*physunits>
+% \fi
+%
+% \part{lwarp-physunits.sty}
+%
+% \section{physunits}
+%
+% \credits{Brian W. Mulligan}
+%
+% \DescribePackage{physunits}
+% \pkg{physunits} is supported as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% \changes{v0.81}{2020/02/29}{\pkg{physunits}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{physunits}[2020/01/26]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{warpMathJax}
+\LWR@infoprocessingmathjax{physunits}
+
+\CustomizeMathJax{\newcommand{\micro}{\mu}}
+\CustomizeMathJax{\newcommand{\V}[1][ ]{\,\mathrm{#1V}}}
+\CustomizeMathJax{\newcommand{\Volt}[1][ ]{\,\mathrm{#1V}}}
+\CustomizeMathJax{\newcommand{\Coulomb}[1][ ]{\,\mathrm{#1C}}}
+\CustomizeMathJax{\newcommand{\esu}{\,\mathrm{esu}}}
+\CustomizeMathJax{\newcommand{\Ohm}[1][ ]{\,\mathrm{#1\Omega}}}
+\CustomizeMathJax{\newcommand{\Amp}[1][ ]{\,\mathrm{#1A}}}
+\CustomizeMathJax{\newcommand{\Farad}[1][ ]{\,\mathrm{#1F}}}
+\CustomizeMathJax{\newcommand{\Tesla}[1][ ]{\,\mathrm{#1T}}}
+\CustomizeMathJax{\newcommand{\Gauss}[1][ ]{\,\mathrm{#1G}}}
+\CustomizeMathJax{\newcommand{\Henry}[1][ ]{\,\mathrm{#1H}}}
+\CustomizeMathJax{\newcommand{\eV}[1][ ]{\,\mathrm{#1eV}}}
+\CustomizeMathJax{\newcommand{\keV}{\,\mathrm{keV}}}
+\CustomizeMathJax{\newcommand{\MeV}{\,\mathrm{MeV}}}
+\CustomizeMathJax{\newcommand{\J}[1][ ]{\,\mathrm{#1J}}}
+\CustomizeMathJax{\newcommand{\Joule}[1][ ]{\,\mathrm{#1J}}}
+\CustomizeMathJax{\newcommand{\erg}{\,\mathrm{erg}}}
+\CustomizeMathJax{\newcommand{\kcal}[1]{\,\mathrm{kcal}}}% bug
+\CustomizeMathJax{\newcommand{\Cal}{\,\mathrm{Cal}}}
+\CustomizeMathJax{\newcommand{\calorie}[1][ ]{\,\mathrm{#1cal}}}
+\CustomizeMathJax{\newcommand{\BTU}{\,\mathrm{BTU}}}
+\CustomizeMathJax{\newcommand{\tnt}{\,\mathrm{ton\, of\, TNT}}}
+\CustomizeMathJax{\newcommand{\Watt}[1][ ]{\,\mathrm{#1W}}}
+\CustomizeMathJax{\newcommand{\hpi}{\,\mathrm{hp(I)}}}
+\CustomizeMathJax{\newcommand{\hpm}{\,\mathrm{hp(M)}}}
+\CustomizeMathJax{\newcommand{\hp}{\,\mathrm{hp}}}
+\CustomizeMathJax{\newcommand{\meter}[1][ ]{\,\mathrm{#1m}}}
+\CustomizeMathJax{\newcommand{\m}[1][ ]{\,\mathrm{#1m}}}
+\CustomizeMathJax{\newcommand{\km}{\,\mathrm{km}}}
+\CustomizeMathJax{\newcommand{\au}{\,\mathrm{au}}}
+\CustomizeMathJax{\newcommand{\pc}[1][ ]{\,\mathrm{#1pc}}}
+\CustomizeMathJax{\newcommand{\ly}[1][ ]{\,\mathrm{#1ly}}}
+\CustomizeMathJax{\newcommand{\cm}{\,\mathrm{cm}}}
+\CustomizeMathJax{\newcommand{\nm}{\,\mathrm{nm}}}
+\CustomizeMathJax{\newcommand{\ft}{\,\mathrm{ft}}}
+\CustomizeMathJax{\newcommand{\inch}{\,\mathrm{in}}}
+\CustomizeMathJax{\newcommand{\mi}{\,\mathrm{mi}}}
+\CustomizeMathJax{\newcommand{\s}[1][ ]{\,\mathrm{#1s}}}
+\CustomizeMathJax{\newcommand{\Sec}[1][ ]{\,\mathrm{#1s}}}
+\CustomizeMathJax{\newcommand{\Min}{\,\mathrm{min}}}
+\CustomizeMathJax{\newcommand{\h}{\,\mathrm{h}}}
+\CustomizeMathJax{\newcommand{\y}[1][ ]{\,\mathrm{#1y}}}
+\CustomizeMathJax{\newcommand{\Day}{\,\mathrm{d}}}
+
+\CustomizeMathJax{\newcommand{\gm}[1][ ]{\,\mathrm{#1g}}}
+\CustomizeMathJax{\newcommand{\kg}{\,\mathrm{kg}}}
+\CustomizeMathJax{\newcommand{\lb}{\,\mathrm{lb}}}
+\CustomizeMathJax{\newcommand{\amu}{\,\mathrm{amu}}}
+\CustomizeMathJax{\newcommand{\N}[1][ ]{\,\mathrm{#1N}}}
+\CustomizeMathJax{\newcommand{\Newton}[1][ ]{\,\mathrm{#1N}}}
+\CustomizeMathJax{\newcommand{\dyne}[1][ ]{\,\mathrm{#1dyn}}}
+\CustomizeMathJax{\newcommand{\lbf}{\,\mathrm{lbf}}}
+\CustomizeMathJax{\newcommand{\kmps}{\,\mathrm{km}\,\mathrm{s}^{-1}}}
+\CustomizeMathJax{\newcommand{\kmph}{\,\mathrm{km}\,\mathrm{h}^{-1}}}
+\CustomizeMathJax{\newcommand{\mps}[1][ ]{\,\mathrm{#1m}\,\mathrm{s}^{-1}}}
+\CustomizeMathJax{\newcommand{\miph}{\,\mathrm{mi}\,\mathrm{h}^{-1}}}
+\CustomizeMathJax{\newcommand{\kts}{\,\mathrm{kts}}}
+
+\CustomizeMathJax{\newcommand{\mpss}[1][ ]{\,\mathrm{#1m}\,\mathrm{s}^{-2}}}
+\CustomizeMathJax{\newcommand{\gacc}{\,\mathrm{g}}}
+\CustomizeMathJax{\newcommand{\ftpss}{\,\mathrm{ft}\,\mathrm{s}^{-2}}}
+\CustomizeMathJax{\newcommand{\K}[1][ ]{\,\mathrm{#1K}}}
+\CustomizeMathJax{\newcommand{\Kelvin}[1][ ]{\,\mathrm{#1K}}}
+\CustomizeMathJax{\newcommand{\Celcius}{^\circ{\,\mathrm{C}}}}% move space
+\CustomizeMathJax{\newcommand{\Rankine}{^\circ{\,\mathrm{R}}}}% move space
+\CustomizeMathJax{\newcommand{\Fahrenheit}{^\circ{\,\mathrm{F}}}}% move space
+
+\CustomizeMathJax{\newcommand{\rpm}{\,\mathrm{rev}\,\Min^{-1}}}
+
+\CustomizeMathJax{\newcommand{\Hz}[1][ ]{\,\mathrm{#1Hz}}}
+\CustomizeMathJax{\newcommand{\barP}[1][ ]{\,\mathrm{#1bar}}}
+\CustomizeMathJax{\newcommand{\atm}{\,\mathrm{atm}}}
+\CustomizeMathJax{\newcommand{\Pa}[1][ ]{\,\mathrm{#1Pa}}}
+\CustomizeMathJax{\newcommand{\mmHg}{\,\mathrm{mmHg}}}
+\CustomizeMathJax{\newcommand{\inHg}{\,\mathrm{inHg}}}
+\CustomizeMathJax{\newcommand{\lbsi}{\,\mathrm{psi}}}
+\CustomizeMathJax{\newcommand{\lbsf}{\,\mathrm{psf}}}
+\CustomizeMathJax{\newcommand{\Ba}[1][ ]{\,\mathrm{#1Ba}}}
+\CustomizeMathJax{\newcommand{\Torr}[1][ ]{\,\mathrm{#1Torr}}}
+\CustomizeMathJax{\newcommand{\mol}{\,\mathrm{mol}}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</physunits>
+% \fi
+%
+%
+%
+%
+% \iffalse
%<*pifont>
% \fi
%
@@ -63867,6 +64997,40 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
%
%
% \iffalse
+%<*returntogrid>
+% \fi
+%
+% \part{lwarp-returntogrid.sty}
+%
+% \section{returntogrid}
+%
+% \DescribePackage{returntogrid}
+% \pkg{returntogrid} is ignored.
+%
+% \changes{v0.81}{2020/02/21}{\pkg{returntogrid}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{returntogrid}[2018/08/21]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand\returntogrid{ O {} }{}
+\NewDocumentCommand\returntogridsetup { m } {}
+\NewDocumentCommand\showdebugpagegrid {} {}
+% \end{macrocode}
+%
+% \iffalse
+%</returntogrid>
+% \fi
+%
+%
+%
+%
+%
+%
+% \iffalse
%<*rmathbr>
% \fi
%
@@ -65408,7 +66572,7 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% \DescribePackage{SIunits}
% \pkg{SIunits} is patched for use by \pkg{lwarp}.
%
-% It is recommended to use \cs{unit} where possible, which
+% For \SVG\ math, it is recommended to use \cs{unit} where possible, which
% combines the entire expression into a single \env{lateximage},
% and adds the \attribute{alt} tag containing the \LaTeX\ code, allowing for
% copy/paste. When units are used outside of the \cs{unit} macro,
@@ -65416,7 +66580,16 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
% and each will have the \attribute{alt} tag set according to \cs{MathImageAltText},
% which defaults to \optn{(math image)}.
%
+% For \brand{MathJax}, individual units used in text will appear as \SVG\ images,
+% since \cs{ensuremath} is used in the original defintions,
+% and \cs{ensuremath} often has expressions which do not work well in \brand{MathJax},
+% so it is always forced to an \SVG\ image.
+% If, however, \cs{unit} is used, the result is expressed with \brand{MathJax}
+% instead of an \SVG\ image.
+%
% \changes{v0.59}{2018/07/11}{\pkg{SIunits}: Added.}
+% \changes{v0.81}{2020/02/23}{\pkg{SIunits}: Improved \cs{unit}. Fixed in math mode.
+% Added \brand{MathJax} emulation.}
%
% \codehtml
%
@@ -65426,21 +66599,393 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
%
% Patched for copy/paste with the \HTML\ \attribute{alt} tag:
% \begin{macrocode}
-\DeclareRobustCommand{\unit}[2]{%
-\@inunitcommandtrue% original
-\LWR@subsingledollar*% lwarp
-{% alt tag
- \textbackslash{}unit\{\LWR@HTMLsanitize{#1}\}%
- \{ \LWR@HTMLsanitize{#2}\}% extra space
-}%
-{SIunits}% add'l hashing
-{%
- \LWR@origensuredmath{% lwarp modification
- \SI@fstyle{#1\@qsk\period@active{#2}}% original
- }%
-}% contents
-\@inunitcommandfalse% original
-}
+\ifbool{mathjax}{
+ \DeclareRobustCommand{\LWR@HTML@unit}[2]{%
+ \LWR@subsingledollar*% lwarp
+ {% alt tag
+ \textbackslash{}unit\{\LWR@HTMLsanitize{#1}\}%
+ \{ \LWR@HTMLsanitize{#2}\}% extra space
+ }%
+ {SIunits}% add'l hashing
+ {%
+ #1\,{#2}%
+ }% contents
+ }
+}{% not MathJax
+ \DeclareRobustCommand{\LWR@HTML@unit}[2]{%
+ \@inunitcommandtrue% original
+ \LWR@subsingledollar*% lwarp
+ {% alt tag
+ \textbackslash{}unit\{\LWR@HTMLsanitize{#1}\}%
+ \{ \LWR@HTMLsanitize{#2}\}% extra space
+ }%
+ {SIunits}% add'l hashing
+ {%
+ \LWR@origensuredmath{% lwarp modification
+ \SI@fstyle{%
+ {#1}\@qsk\period@active{#2}%
+ }% original
+ }%
+ }% contents
+ \@inunitcommandfalse% original
+ }
+}% not MathJax
+\LWR@formatted{unit}
+% \end{macrocode}
+%
+%
+% For \brand{MathJax}:
+% \begin{macrocode}
+\begin{warpMathJax}
+\LWR@infoprocessingmathjax{SIunits}
+
+\CustomizeMathJax{\newcommand{\one}{}}
+\CustomizeMathJax{\newcommand{\meter}{\metre}}
+\CustomizeMathJax{\newcommand{\deka}{\deca}}
+\CustomizeMathJax{\newcommand{\dekad}{\decad}}
+\CustomizeMathJax{\newcommand{\per}{/}}
+\CustomizeMathJax{\newcommand{\usk}{\;}}
+\CustomizeMathJax{\newcommand{\unit}[2]{#1\,{#2}}}
+\CustomizeMathJax{\newcommand{\power}[2]{#1^{#2}}}
+
+\AtBeginDocument{%
+ \if@redefsquare
+ \CustomizeMathJax{\renewcommand{\square}[1]{\power{#1}{2}}}
+ \else
+ \if@defsquaren
+ \CustomizeMathJax{\newcommand{\squaren}[1]{\power{#1}{2}}}
+ \else
+ \CustomizeMathJax{\renewcommand{\square}[1]{\power{#1}{2}}}
+ \fi %\if@defsquaren
+ \fi %\if@redefsquare
+} %\AtBeginDocument
+
+\CustomizeMathJax{\newcommand{\squared}{^{2}}}
+\CustomizeMathJax{\newcommand{\cubic}[1]{\power{#1}{3}}}
+\CustomizeMathJax{\newcommand{\cubed}{^{3}}}
+\CustomizeMathJax{\newcommand{\fourth}[1]{\power{#1}{4}}}
+\CustomizeMathJax{\newcommand{\reciprocal}[1]{\power{#1}{-1}}}
+\CustomizeMathJax{\newcommand{\rp}{\reciprocal}}
+\CustomizeMathJax{\newcommand{\rpsquare}[1]{\power{#1}{-2}}}
+\CustomizeMathJax{\newcommand{\rpsquared}{^{-2}}}
+\CustomizeMathJax{\newcommand{\rpcubic}[1]{\power{#1}{-3}}}
+\CustomizeMathJax{\newcommand{\rpcubed}{^{-3}}}
+\CustomizeMathJax{\newcommand{\rpfourth}[1]{\power{#1}{-4}}}
+\CustomizeMathJax{\newcommand{\yocto}{\mathrm{y}}}
+\CustomizeMathJax{\newcommand{\zepto}{\mathrm{z}}}
+\CustomizeMathJax{\newcommand{\atto}{\mathrm{a}}}
+\CustomizeMathJax{\newcommand{\femto}{\mathrm{f}}}
+\CustomizeMathJax{\newcommand{\pico}{\mathrm{p}}}
+\CustomizeMathJax{\newcommand{\nano}{\mathrm{n}}}
+\CustomizeMathJax{\newcommand{\micro}{\mathrm{\unicode{x00B5}}}}
+\CustomizeMathJax{\newcommand{\milli}{\mathrm{m}}}
+\CustomizeMathJax{\newcommand{\centi}{\mathrm{c}}}
+\CustomizeMathJax{\newcommand{\deci}{\mathrm{d}}}
+\CustomizeMathJax{\newcommand{\deca}{\mathrm{da}}}
+\CustomizeMathJax{\newcommand{\hecto}{\mathrm{h}}}
+\CustomizeMathJax{\newcommand{\kilo}{\mathrm{k}}}
+\CustomizeMathJax{\newcommand{\mega}{\mathrm{M}}}
+\CustomizeMathJax{\newcommand{\giga}{\mathrm{G}}}
+\CustomizeMathJax{\newcommand{\tera}{\mathrm{T}}}
+\CustomizeMathJax{\newcommand{\peta}{\mathrm{P}}}
+\CustomizeMathJax{\newcommand{\exa}{\mathrm{E}}}
+\CustomizeMathJax{\newcommand{\zetta}{\mathrm{Z}}}
+\CustomizeMathJax{\newcommand{\yotta}{\mathrm{Y}}}
+\CustomizeMathJax{\newcommand{\yoctod}{\power{10}{-24}}}
+\CustomizeMathJax{\newcommand{\zeptod}{\power{10}{-21}}}
+\CustomizeMathJax{\newcommand{\attod}{\power{10}{-18}}}
+\CustomizeMathJax{\newcommand{\femtod}{\power{10}{-15}}}
+\CustomizeMathJax{\newcommand{\picod}{\power{10}{-12}}}
+\CustomizeMathJax{\newcommand{\nanod}{\power{10}{-9}}}
+\CustomizeMathJax{\newcommand{\microd}{\power{10}{-6}}}
+\CustomizeMathJax{\newcommand{\millid}{\power{10}{-3}}}
+\CustomizeMathJax{\newcommand{\centid}{\power{10}{-2}}}
+\CustomizeMathJax{\newcommand{\decid}{\power{10}{-1}}}
+\CustomizeMathJax{\newcommand{\decad}{\power{10}{1}}}
+\CustomizeMathJax{\newcommand{\hectod}{\power{10}{2}}}
+\CustomizeMathJax{\newcommand{\kilod}{\power{10}{3}}}
+\CustomizeMathJax{\newcommand{\megad}{\power{10}{6}}}
+\CustomizeMathJax{\newcommand{\gigad}{\power{10}{9}}}
+\CustomizeMathJax{\newcommand{\terad}{\power{10}{12}}}
+\CustomizeMathJax{\newcommand{\petad}{\power{10}{15}}}
+\CustomizeMathJax{\newcommand{\exad}{\power{10}{18}}}
+\CustomizeMathJax{\newcommand{\zettad}{\power{10}{21}}}
+\CustomizeMathJax{\newcommand{\yottad}{\power{10}{24}}}
+\CustomizeMathJax{\newcommand{\gram}{\mathrm{g}}}
+\CustomizeMathJax{\newcommand{\metre}{\mathrm{m}}}
+\CustomizeMathJax{\newcommand{\kilogram}{\kilo\gram}}
+\CustomizeMathJax{\newcommand{\second}{\mathrm{s}}}
+\CustomizeMathJax{\newcommand{\ampere}{\mathrm{A}}}
+\CustomizeMathJax{\newcommand{\kelvin}{\mathrm{K}}}
+\CustomizeMathJax{\newcommand{\mole}{\mathrm{mol}}}
+\CustomizeMathJax{\newcommand{\candela}{\mathrm{cd}}}
+\CustomizeMathJax{\newcommand{\radian}{\mathrm{rad}}}
+\CustomizeMathJax{\newcommand{\steradian}{\mathrm{sr}}}
+\CustomizeMathJax{\newcommand{\hertz}{\mathrm{Hz}}}
+\CustomizeMathJax{\newcommand{\newton}{\mathrm{N}}}
+\CustomizeMathJax{\newcommand{\pascal}{\mathrm{Pa}}}
+\CustomizeMathJax{\newcommand{\joule}{\mathrm{J}}}
+\CustomizeMathJax{\newcommand{\watt}{\mathrm{W}}}
+\CustomizeMathJax{\newcommand{\coulomb}{\mathrm{C}}}
+\CustomizeMathJax{\newcommand{\volt}{\mathrm{V}}}
+\CustomizeMathJax{\newcommand{\farad}{\mathrm{F}}}
+\CustomizeMathJax{\newcommand{\ohm}{\mathrm{\Omega}}}
+\CustomizeMathJax{\newcommand{\siemens}{\mathrm{S}}}
+\CustomizeMathJax{\newcommand{\weber}{\mathrm{Wb}}}
+\CustomizeMathJax{\newcommand{\tesla}{\mathrm{T}}}
+\CustomizeMathJax{\newcommand{\henry}{\mathrm{H}}}
+\CustomizeMathJax{\newcommand{\degreecelsius}{\mathrm{\unicode{x2103}}}}
+\CustomizeMathJax{\newcommand{\celsius}{\degreecelsius}}
+\CustomizeMathJax{\newcommand{\lumen}{\mathrm{lm}}}
+\CustomizeMathJax{\newcommand{\lux}{\mathrm{lx}}}
+\CustomizeMathJax{\newcommand{\becquerel}{\mathrm{Bq}}}
+\CustomizeMathJax{\newcommand{\sievert}{\mathrm{Sv}}}
+\CustomizeMathJax{\newcommand{\katal}{\mathrm{kat}}}
+
+\ifdef{\radianbase}{
+\CustomizeMathJax{\newcommand{\radianbase}%
+ {\metre\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\steradianbase}%
+ {\squaremetre\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\hertzbase}%
+ {\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\newtonbase}%
+ {\metre\usk\kilogram\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\pascalbase}%
+ {\reciprocal\metre\usk\kilogram\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\joulebase}%
+ {\squaremetre\usk\kilogram\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\wattbase}%
+ {\squaremetre\usk\kilogram\usk\rpcubic\second}}
+\CustomizeMathJax{\newcommand{\coulombbase}%
+ {\ampere\usk\second}}
+\CustomizeMathJax{\newcommand{\voltbase}%
+ {\squaremetre\usk\kilogram\usk\rpcubic\second\usk\reciprocal\ampere}}
+\CustomizeMathJax{\newcommand{\faradbase}%
+ {\rpsquare\metre\usk\reciprocal\kilogram\usk\fourth\second\usk\ampere\squared}}
+\CustomizeMathJax{\newcommand{\ohmbase}%
+ {\squaremetre\usk\kilogram\usk\rpcubic\second\usk\rpsquare\ampere}}
+\CustomizeMathJax{\newcommand{\siemensbase}%
+ {\rpsquare\metre\usk\reciprocal\kilogram\usk\cubic\second\usk\ampere\squared}}
+\CustomizeMathJax{\newcommand{\weberbase}%
+ {\squaremetre\usk\kilogram\usk\second\rpsquared\usk\reciprocal\ampere}}
+\CustomizeMathJax{\newcommand{\teslabase}%
+ {\kilogram\usk\second\rpsquared\usk\reciprocal\ampere}}
+\CustomizeMathJax{\newcommand{\henrybase}%
+ {\squaremetre\usk\kilogram\usk\second\rpsquared\usk\rpsquare\ampere}}
+\CustomizeMathJax{\newcommand{\celsiusbase}%
+ {\kelvin}}
+\CustomizeMathJax{\newcommand{\lumenbase}%
+ {\candela\usk\squaremetre\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\luxbase}%
+ {\candela\usk\squaremetre\usk\rpfourth\metre}}
+\CustomizeMathJax{\newcommand{\becquerelbase}%
+ {\hertzbase}}
+\CustomizeMathJax{\newcommand{\graybase}%
+ {\squaremetre\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\sievertbase}%
+ {\graybase}}
+\CustomizeMathJax{\newcommand{\katalbase}%
+ {\rp\second\usk\mole }}
+}{}
+
+\ifdef{\derradian}{
+\CustomizeMathJax{\newcommand{\derradian}%
+ {\metre\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\dersteradian}%
+ {\squaremetre\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\derhertz}%
+ {\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\dernewton}%
+ {\metre\usk\kilogram\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\derpascal}%
+ {\newton\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\derjoule}%
+ {\newton\usk\metre}}
+\CustomizeMathJax{\newcommand{\derwatt}%
+ {\joule\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\dercoulomb}%
+ {\ampere\usk\second}}
+\CustomizeMathJax{\newcommand{\dervolt}%
+ {\watt\usk\reciprocal\ampere}}
+\CustomizeMathJax{\newcommand{\derfarad}%
+ {\coulomb\usk\reciprocal\volt}}
+\CustomizeMathJax{\newcommand{\derohm}%
+ {\volt\usk\reciprocal\ampere}}
+\CustomizeMathJax{\newcommand{\dersiemens}%
+ {\ampere\usk\reciprocal\volt}}
+\CustomizeMathJax{\newcommand{\derweber}%
+ {\squaremetre\usk\kilogram\usk\second\rpsquared\usk\reciprocal\ampere}}
+\CustomizeMathJax{\newcommand{\dertesla}%
+ {\weber\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\derhenry}%
+ {\weber\usk\reciprocal\ampere}}
+\CustomizeMathJax{\newcommand{\dercelsius}%
+ {\kelvin}}
+\CustomizeMathJax{\newcommand{\derlumen}%
+ {\candela\usk\steradian}}
+\CustomizeMathJax{\newcommand{\derlux}%
+ {\lumen\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\derbecquerel}%
+ {\derhertz}}
+\CustomizeMathJax{\newcommand{\dergray}%
+ {\joule\usk\reciprocal\kilogram}}
+\CustomizeMathJax{\newcommand{\dersievert}%
+ {\dergray}}
+\CustomizeMathJax{\newcommand{\derkatal}%
+ {\katalbase}}
+}{}
+
+\CustomizeMathJax{\newcommand{\minute}{\mathrm{min}}}
+\CustomizeMathJax{\newcommand{\hour}{\mathrm{h}}}
+\CustomizeMathJax{\newcommand{\dday}{\mathrm{d}}}
+\CustomizeMathJax{\newcommand{\degree}{\mathrm{^\circ}}}
+\CustomizeMathJax{\newcommand{\paminute}{^\prime}}
+\CustomizeMathJax{\newcommand{\arcminute}{^\prime}}
+\CustomizeMathJax{\newcommand{\pasecond}{^{\prime\prime}}}
+\CustomizeMathJax{\newcommand{\arcsecond}{^{\prime\prime}}}
+\CustomizeMathJax{\newcommand{\ton}{\mathrm{t}}}
+\CustomizeMathJax{\newcommand{\tonne}{\mathrm{t}}}
+\CustomizeMathJax{\newcommand{\liter}{\mathrm{L}}}
+\CustomizeMathJax{\newcommand{\litre}{\mathrm{l}}}
+\CustomizeMathJax{\newcommand{\neper}{\mathrm{Np}}}
+\CustomizeMathJax{\newcommand{\bel}{\mathrm{B}}}
+\CustomizeMathJax{\newcommand{\curie}{\mathrm{Ci}}}
+\CustomizeMathJax{\newcommand{\rad}{\mathrm{rad}}}
+\CustomizeMathJax{\newcommand{\arad}{\mathrm{rd}}}
+\CustomizeMathJax{\newcommand{\rem}{\mathrm{rem}}}
+\CustomizeMathJax{\newcommand{\roentgen}{\mathrm{R}}}
+\CustomizeMathJax{\newcommand{\electronvolt}{\mathrm{\mathrm{eV}}}}
+\CustomizeMathJax{\newcommand{\atomicmass}{\mathrm{u}}}
+\CustomizeMathJax{\newcommand{\atomicmassunit}{\mathrm{u}}}
+\CustomizeMathJax{\newcommand{\dalton}{\mathrm{Da}}}
+\CustomizeMathJax{\newcommand{\are}{\mathrm{a}}}
+\CustomizeMathJax{\newcommand{\hectare}{\mathrm{\hecto\are}}}
+\CustomizeMathJax{\newcommand{\barn}{\mathrm{b}}}
+\CustomizeMathJax{\newcommand{\bbar}{\mathrm{bar}}}
+\CustomizeMathJax{\newcommand{\gal}{\mathrm{Gal}}}
+\CustomizeMathJax{\newcommand{\angstrom}{\mathrm{\unicode{x00C5}}}}
+\CustomizeMathJax{\newcommand{\rperminute}{\mathrm{r}\per\minute}}
+\CustomizeMathJax{\newcommand{\rpersecond}{\mathrm{r}\per\second}}
+\CustomizeMathJax{\newcommand{\squaremetre}{\power{\metre}{2}}}
+\CustomizeMathJax{\newcommand{\cubicmetre}{\cubic\metre}}
+\CustomizeMathJax{\newcommand{\graypersecond}{\gray\per\second}}
+\CustomizeMathJax{\newcommand{\graypersecondnp}{\gray\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\metrepersquaresecond}{\metre\per\second\squared}}
+\CustomizeMathJax{\newcommand{\metrepersquaresecondnp}{\metre\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\joulepermole}{\joule\per\mole}}
+\CustomizeMathJax{\newcommand{\joulepermolenp}{\joule\usk\reciprocal\mole}}
+\CustomizeMathJax{\newcommand{\molepercubicmetre}{\mole\per\cubic\metre}}
+\CustomizeMathJax{\newcommand{\molepercubicmetrenp}{\mole\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\radianpersquaresecond}{\radian\per\second\squared}}
+\CustomizeMathJax{\newcommand{\radianpersquaresecondnp}{\radian\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\kilogramsquaremetrepersecond}{\kilogram\usk\squaremetre\per\second}}
+\CustomizeMathJax{\newcommand{\kilogramsquaremetrepersecondnp}{\kilogram\usk\squaremetre\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\radianpersecond}{\radian\per\second}}
+\CustomizeMathJax{\newcommand{\radianpersecondnp}{\radian\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\squaremetrepercubicmetre}{\squaremetre\per\cubic\metre}}
+\CustomizeMathJax{\newcommand{\squaremetrepercubicmetrenp}{\squaremetre\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\katalpercubicmetre}{\katal\per\cubic\metre}}
+\CustomizeMathJax{\newcommand{\katalpercubicmetrenp}{\katal\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\coulombpermol}{\coulomb\per\mole}}
+\CustomizeMathJax{\newcommand{\coulombpermolnp}{\coulomb\usk\reciprocal\mole}}
+\CustomizeMathJax{\newcommand{\amperepersquaremetre}{\ampere\per\squaremetre}}
+\CustomizeMathJax{\newcommand{\amperepersquaremetrenp}{\ampere\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\kilogrampercubicmetre}{\kilogram\per\cubic\metre}}
+\CustomizeMathJax{\newcommand{\kilogrampercubicmetrenp}{\kilogram\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\squaremetrepernewtonsecond}{\squaremetre\per\newton\usk\second}}
+\CustomizeMathJax{\newcommand{\squaremetrepernewtonsecondnp}{\squaremetre\usk\reciprocal\newton\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\pascalsecond}{\pascal\usk\second}}
+\CustomizeMathJax{\newcommand{\coulombpercubicmetre}{\coulomb\per\cubic\metre}}
+\CustomizeMathJax{\newcommand{\coulombpercubicmetrenp}{\coulomb\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\amperemetresecond}{\ampere\usk\metre\usk\second}}
+\CustomizeMathJax{\newcommand{\voltpermetre}{\volt\per\metre}}
+\CustomizeMathJax{\newcommand{\voltpermetrenp}{\volt\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\coulombpersquaremetre}{\coulomb\per\squaremetre}}
+\CustomizeMathJax{\newcommand{\coulombpersquaremetrenp}{\coulomb\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\faradpermetre}{\farad\per\metre}}
+\CustomizeMathJax{\newcommand{\faradpermetrenp}{\farad\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\ohmmetre}{\ohm\usk\metre}}
+\CustomizeMathJax{\newcommand{\kilowatthour}{\kilo\watt\hour}}
+\CustomizeMathJax{\newcommand{\wattpersquaremetre}{\watt\per\squaremetre}}
+\CustomizeMathJax{\newcommand{\wattpersquaremetrenp}{\watt\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\joulepersquaremetre}{\joule\per\squaremetre}}
+\CustomizeMathJax{\newcommand{\joulepersquaremetrenp}{\joule\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\newtonpercubicmetre}{\newton\per\cubic\metre}}
+\CustomizeMathJax{\newcommand{\newtonpercubicmetrenp}{\newton\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\newtonperkilogram}{\newton\per\kilogram}}
+\CustomizeMathJax{\newcommand{\newtonperkilogramnp}{\newton\usk\reciprocal\kilogram}}
+\CustomizeMathJax{\newcommand{\jouleperkelvin}{\joule\per\kelvin}}
+\CustomizeMathJax{\newcommand{\jouleperkelvinnp}{\joule\usk\reciprocal\kelvin}}
+\CustomizeMathJax{\newcommand{\jouleperkilogram}{\joule\per\kilogram}}
+\CustomizeMathJax{\newcommand{\jouleperkilogramnp}{\joule\usk\reciprocal\kilogram}}
+\CustomizeMathJax{\newcommand{\coulombperkilogram}{\coulomb\per\kilogram}}
+\CustomizeMathJax{\newcommand{\coulombperkilogramnp}{\coulomb\usk\reciprocal\kilogram}}
+\CustomizeMathJax{\newcommand{\squaremetrepersecond}{\squaremetre\per\second}}
+\CustomizeMathJax{\newcommand{\squaremetrepersecondnp}{\squaremetre\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\squaremetrepersquaresecond}{\squaremetre\per\second\squared}}
+\CustomizeMathJax{\newcommand{\squaremetrepersquaresecondnp}{\squaremetre\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\kilogrammetrepersecond}{\kilogram\usk\metre\per\second}}
+\CustomizeMathJax{\newcommand{\kilogrammetrepersecondnp}{\kilogram\usk\metre\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\candelapersquaremetre}{\candela\per\squaremetre}}
+\CustomizeMathJax{\newcommand{\candelapersquaremetrenp}{\candela\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\amperepermetre}{\ampere\per\metre}}
+\CustomizeMathJax{\newcommand{\amperepermetrenp}{\ampere\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\joulepertesla}{\joule\per\tesla}}
+\CustomizeMathJax{\newcommand{\jouleperteslanp}{\joule\usk\reciprocal\tesla}}
+\CustomizeMathJax{\newcommand{\henrypermetre}{\henry\per\metre}}
+\CustomizeMathJax{\newcommand{\henrypermetrenp}{\henry\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\kilogrampersecond}{\kilogram\per\second}}
+\CustomizeMathJax{\newcommand{\kilogrampersecondnp}{\kilogram\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\kilogrampersquaremetresecond}{\kilogram\per\squaremetre\usk\second}}
+\CustomizeMathJax{\newcommand{\kilogrampersquaremetresecondnp}{\kilogram\usk\rpsquare\metre\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\kilogrampersquaremetre}{\kilogram\per\squaremetre}}
+\CustomizeMathJax{\newcommand{\kilogrampersquaremetrenp}{\kilogram\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\kilogrampermetre}{\kilogram\per\metre}}
+\CustomizeMathJax{\newcommand{\kilogrampermetrenp}{\kilogram\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\joulepermolekelvin}{\joule\per\mole\usk\kelvin}}
+\CustomizeMathJax{\newcommand{\joulepermolekelvinnp}{\joule\usk\reciprocal\mole\usk\reciprocal\kelvin}}
+\CustomizeMathJax{\newcommand{\kilogramperkilomole}{\kilogram\per\kilo\mole}}
+\CustomizeMathJax{\newcommand{\kilogramperkilomolenp}{\kilogram\usk\kilo\reciprocal\mole}}
+\CustomizeMathJax{\newcommand{\kilogramsquaremetre}{\kilogram\usk\squaremetre}}
+\CustomizeMathJax{\newcommand{\kilogramsquaremetrenp}{\kilogramsquaremetre}}
+\CustomizeMathJax{\newcommand{\kilogrammetrepersquaresecond}{\kilogram\usk\metre\per\second\squared}}
+\CustomizeMathJax{\newcommand{\kilogrammetrepersquaresecondnp}{\kilogram\usk\metre\usk\second\rpsquared}}
+\CustomizeMathJax{\newcommand{\newtonpersquaremetre}{\newton\per\squaremetre}}
+\CustomizeMathJax{\newcommand{\newtonpersquaremetrenp}{\newton\usk\rpsquare\metre}}
+\CustomizeMathJax{\newcommand{\persquaremetresecond}{1\per\squaremetre\usk\second}}
+\CustomizeMathJax{\newcommand{\persquaremetresecondnp}{\rpsquare\metre\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\wattperkilogram}{\watt\per\kilogram}}
+\CustomizeMathJax{\newcommand{\wattperkilogramnp}{\watt\usk\reciprocal\kilogram}}
+\CustomizeMathJax{\newcommand{\wattpercubicmetre}{\watt\per\cubic\metre}}
+\CustomizeMathJax{\newcommand{\wattpercubicmetrenp}{\watt\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\wattpersquaremetresteradian}{\watt\per\squaremetre\usk\steradian}}
+\CustomizeMathJax{\newcommand{\wattpersquaremetresteradiannp}{\watt\usk\rpsquare\metre\usk\rp\steradian}}
+\CustomizeMathJax{\newcommand{\jouleperkilogramkelvin}{\joule\per\kilogram\usk\kelvin}}
+\CustomizeMathJax{\newcommand{\jouleperkilogramkelvinnp}{\joule\usk\reciprocal\kilogram\usk\reciprocal\kelvin}}
+\CustomizeMathJax{\newcommand{\squaremetreperkilogram}{\squaremetre\per\kilogram}}
+\CustomizeMathJax{\newcommand{\rpsquaremetreperkilogram}{\squaremetre\usk\reciprocal\kilogram}}
+\CustomizeMathJax{\newcommand{\cubicmetreperkilogram}{\cubic\metre\per\kilogram}}
+\CustomizeMathJax{\newcommand{\rpcubicmetreperkilogram}{\cubic\metre\usk\reciprocal\kilogram}}
+\CustomizeMathJax{\newcommand{\newtonpermetre}{\newton\per\metre}}
+\CustomizeMathJax{\newcommand{\newtonpermetrenp}{\newton\usk\reciprocal\metre}}
+\CustomizeMathJax{\newcommand{\Celsius}{\unicode{x2103}}}
+\CustomizeMathJax{\newcommand{\wattpermetrekelvin}{\watt\per\metre\usk\kelvin}}
+\CustomizeMathJax{\newcommand{\wattpermetrekelvinnp}{\watt\usk\reciprocal\metre\usk\reciprocal\kelvin}}
+\CustomizeMathJax{\newcommand{\newtonmetre}{\newton\usk\metre} \CustomizeMathJax{\newcommand{\newtonmetrenp}{\newtonmetre}}}
+\CustomizeMathJax{\newcommand{\squaremetrepercubicsecond}{\squaremetre\per\cubic\second}}
+\CustomizeMathJax{\newcommand{\squaremetrepercubicsecondnp}{\squaremetre\usk\rpcubic\second}}
+\CustomizeMathJax{\newcommand{\metrepersecond}{\metre\per\second}}
+\CustomizeMathJax{\newcommand{\metrepersecondnp}{\metre\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\joulepercubicmetre}{\joule\per\cubicmetre}}
+\CustomizeMathJax{\newcommand{\joulepercubicmetrenp}{\joule\usk\rpcubic\metre}}
+\CustomizeMathJax{\newcommand{\kilogrampercubicmetrecoulomb}{\kilogram\per\cubic\metre\usk\coulomb}}
+\CustomizeMathJax{\newcommand{\kilogrampercubicmetrecoulombnp}{\kilogram\usk\rpcubic\metre\usk\reciprocal\coulomb}}
+\CustomizeMathJax{\newcommand{\cubicmetrepersecond}{\cubicmetre\per\second}}
+\CustomizeMathJax{\newcommand{\rpcubicmetrepersecond}{\cubicmetre\usk\reciprocal\second}}
+\CustomizeMathJax{\newcommand{\kilogrampersecondcubicmetre}{\kilogram\per\second\usk\cubicmetre}}
+\CustomizeMathJax{\newcommand{\kilogrampersecondcubicmetrenp}{\kilogram\usk\reciprocal\second\usk\rpcubic\metre}}
+\end{warpMathJax}
% \end{macrocode}
%
% \iffalse
@@ -66661,6 +68206,444 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
%
%
% \iffalse
+%<*stackrel>
+% \fi
+%
+% \part{lwarp-stackrel.sty}
+%
+% \section{stackrel}
+%
+% \credits{Heiko Oberdiek}
+%
+% \DescribePackage{stackrel}
+% \pkg{stackrel} is used as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% \changes{v0.81}{2020/03/03}{\pkg{stackrel}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{stackrel}[2016/05/16]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{warpMathJax}
+\CustomizeMathJax{\renewcommand{\stackrel}[3][]{%
+ \mathrel{\mathop{#3}\limits_{#1}^{#2}}%
+}}
+
+\CustomizeMathJax{\newcommand{\stackbin}[3][]{%
+ \mathbin{\mathop{#3}\limits_{#1}^{#2}}%
+}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</stackrel>
+% \fi
+%
+%
+%
+% \iffalse
+%<*statex2>
+% \fi
+%
+% \part{lwarp-statex2.sty}
+%
+% \section{statex2}
+%
+% \credits{Rodney A Sparapani}
+%
+% \DescribePackage{statex2}
+% \pkg{statex2} is patched for use by \pkg{lwarp},
+% and emulated for \brand{MathJax}.
+%
+% As of this version, option \optn{autobold} does not appear to work for \PDF\ output.
+% \watchout
+%
+% For \brand{MathJax}, the tilde character |~| does not create \cs{sim}.
+% \watchout
+% Use \cs{sim} directly.
+%
+% Because \brand{MathJax} has limited conditional processing:
+% \watchout
+% \begin{itemize}
+% \item \cs{wrap} only creates square braces, no matter what its optional arguments.
+% \item \cs{P}, \cs{pCau}, \cs{pN}, and \cs{pU} do not handle special cases.
+% \end{itemize}
+%
+% To have \cs{and} work if using \cs{maketitle},
+% \watchout[\cs{and}]
+% place the following after the start of the document:
+% \begin{sourceverb}
+% \newcommand*{\and}{%
+% \relax\ifmmode%
+% \expandafter\;\mb{\mathrm{and}}\;%
+% \else%
+% \expandafter\STATEXand%
+% \fi%
+% }
+% \end{sourceverb}
+%
+% \changes{v0.81}{2020/02/28}{\pkg{statex2}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{statex2}[2011/09/14]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\LWR@HTML@Alpha}[1][]{%
+ \fcolorbox{black}{ForestGreen}{\textcolor{white}{\textsf{ALPHA}}}%
+ \textbf{\textcolor{ForestGreen}{\textsf{#1}}}%
+}
+\LWR@formatted{Alpha}
+
+\newcommand*{\LWR@HTML@List}[1]{%
+ \textbf{\textcolor{Dandelion}{\textsf{L}\textsubscript{\textit{#1}}}}%
+}
+\LWR@formatted{List}
+
+\newcommand*{\LWR@HTML@Snd}[1][]{%
+ \fcolorbox{black}{Dandelion}{\textcolor{white}{\textsf{2nd}}}%
+ \textbf{\textcolor{Dandelion}{\textsf{#1}}}%
+}
+\LWR@formatted{Snd}
+
+\begin{warpMathJax}
+\LWR@infoprocessingmathjax{statex2}
+
+\CustomizeMathJax{\newcommand{\cpi}{\boldsymbol{\pi}}}
+\CustomizeMathJax{\newcommand{\c}[1]{\boldsymbol{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\sfsl}[1]{\mathsf#1}}% not slanted
+
+\if@manualbold
+\CustomizeMathJax{\newcommand{\mb}[1]{#1}}
+\else
+\CustomizeMathJax{\newcommand{\mb}[1]{\boldsymbol{#1}}}
+\fi
+
+\CustomizeMathJax{\newcommand{\diag}{\mb{\mathrm{diag}}}}
+\CustomizeMathJax{\newcommand{\blockdiag}{\mb{\mathrm{blockdiag}}}}
+\CustomizeMathJax{\newcommand{\erf}{\mb{\mathrm{erf}}}}
+\CustomizeMathJax{\newcommand{\logit}{\mb{\mathrm{logit}}}}
+\CustomizeMathJax{\newcommand{\trace}{\mb{\mathrm{trace}}}}
+
+\CustomizeMathJax{\newcommand{\chisq}{{\mb{\chi^2}}}}
+\CustomizeMathJax{\newcommand{\deriv}[2]{\mb{\frac{\d{}}{\d{#1}}}\wrap{\mb{#2}}}}
+\CustomizeMathJax{\newcommand{\derivf}[2]{\mb{\frac{\d{}}{\d{#2}}}\wrap{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\e}[1]{\mb{\mathrm{e}^{#1}}}}
+\CustomizeMathJax{\newcommand{\E}[2][]{\mb{\mathrm{E}}_{\mb{#1}} \wrap{\mb{#2}}}}
+\CustomizeMathJax{\newcommand{\ha}{{\mb{\frac{\alpha}{2}}}}}
+\CustomizeMathJax{\newcommand{\I}[2][]{%
+ \mb{\mathrm{I}}_{\mb{#1}} \LWRwrapparen{\mb{#2}}%
+}}
+\CustomizeMathJax{\newcommand{\IBeta}[2]{%
+ \mb{\frac{\Gamma[#1+#2]}{\Gamma[#1]\Gamma[#2]}}%
+}}
+\CustomizeMathJax{\newcommand{\If}{\;\mb{\mathrm{if}}\;}}
+\CustomizeMathJax{\newcommand{\im}{\mb{\mathrm{i}}}}
+\CustomizeMathJax{\newcommand{\ol}{\overline}}
+\CustomizeMathJax{\newcommand{\ow}{\;\mb{\mathrm{otherwise}}\;}}
+\CustomizeMathJax{\newcommand{\pderiv}[2]{%
+ \mb{\frac{\partial}{\partial #1}}\wrap{\mb{#2}}%
+}}
+\CustomizeMathJax{\newcommand{\pderivf}[2]{%
+ \mb{\frac{\partial}{\partial #2}}\wrap{\mb{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\sd}{\mb{\sigma}}}
+\CustomizeMathJax{\newcommand{\ul}{\underline}}
+\CustomizeMathJax{\newcommand{\V}[2][]{\mb{\mathrm{V}}_{\mb{#1}} \wrap{\mb{#2}}}}
+\CustomizeMathJax{\newcommand{\vs}{\;\mb{\mathrm{vs.}}\;}}
+\CustomizeMathJax{\newcommand{\where}{\;\mb{\mathrm{where}}\;}}
+\CustomizeMathJax{\newcommand{\wrap}[2][]{\left[ #2 \right]}}% only []
+\CustomizeMathJax{\newcommand{\LWRwrapparen}[1]{\left( #1 \right)}}% lwarp
+
+% \CustomizeMathJax{\renewcommand{~}{\mb{\sim}}}% doesn't work,
+% replace <space>~<space> with <space>\sim<space>
+
+\CustomizeMathJax{\newcommand{\iid}{\;\stackrel{\mb{\mathrm{iid}}}{\sim}\;}}
+\CustomizeMathJax{\newcommand{\ind}{\;\stackrel{\mb{\mathrm{ind}}}{\sim}\;}}
+\CustomizeMathJax{\newcommand{\indpr}{%
+ \;\stackrel{\mb{\mathrm{ind}}}{\stackrel{\mb{\mathrm{prior}}}{\sim}}\;%
+}}
+\CustomizeMathJax{\newcommand{\post}{\;\stackrel{\mb{\mathrm{post}}}{\sim}\;}}
+\CustomizeMathJax{\newcommand{\prior}{\;\stackrel{\mb{\mathrm{prior}}}{\sim}\;}}
+
+\CustomizeMathJax{\let\STATEXGamma=\Gamma}
+\CustomizeMathJax{\renewcommand{\Gamma}[1][]{\mb{\STATEXGamma}\LWRwrapparen{\mb{#1}}}}
+%
+\CustomizeMathJax{\renewcommand{\and}{\;\mb{\mathrm{and}}\;}}
+%
+\CustomizeMathJax{\newcommand{\H}{\mb{\mathrm{H}}}}
+%
+\CustomizeMathJax{\newcommand{\P}[2][]{\mb{\mathrm{P}}_{\mb{#1}}\wrap{\mb{#2}}}}
+%
+\CustomizeMathJax{\newcommand{\|}{\mb{\mid}}}
+
+\CustomizeMathJax{\newcommand{\B}[1]{\mb{\mathrm{B}}\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\BB}[1]{\mb{\mathrm{BetaBin}}\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\Bin}[2]{\mb{\mathrm{Bin}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\newcommand{\Dir}[1]{\mb{\mathrm{Dirichlet}}\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\HG}[3]{%
+ \mb{\mathrm{Hypergeometric}}\LWRwrapparen{\mb{#1,\ #2,\ #3}}%
+}}
+\CustomizeMathJax{\newcommand{\M}[2]{%
+ \mb{\mathrm{Multinomial}}\LWRwrapparen{\mb{#1,\ #2}}%
+}}
+\CustomizeMathJax{\newcommand{\NB}[2]{\mb{\mathrm{NegBin}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\newcommand{\Poi}[1]{\mb{\mathrm{Poisson}}\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\let\Poisson=\Poi}
+
+\CustomizeMathJax{\newcommand{\pBB}[4][x]{%
+ \mb{\frac{\Gamma[#2+1]\Gamma[#3+#1]\Gamma[#2+#4-#1]\Gamma[#3+#4]}%
+ {\Gamma[#1+1]\Gamma[#2-#1+1]\Gamma[#2+#3+#4]\Gamma[#3]\Gamma[#4]}%
+ \I[#1]{\{0, 1,\., #2\}}, \where #3>0,\; #4>0 \and n=1, 2,\.}%
+}}
+\CustomizeMathJax{\newcommand{\pBin}[3][x]{%
+ \mb{\binom{#2}{#1}#3^#1} \LWRwrapparen{\mb{{1-#3}^{#2-#1}}}%
+ \mb{\I[#1]{\{0,1,\.,#2\}}, \where p \in (0, 1) \and n=1, 2,\.}%
+}}
+\CustomizeMathJax{\newcommand{\pPoi}[2][x]{%
+ \mb{\frac{1}{#1!}#2^{#1}\e{-#2}\I[#1]{\{0, 1,\.\}}, \where #2>0}%
+}}
+
+\CustomizeMathJax{\newcommand{\Cau}[2]{\mb{\mathrm{Cauchy}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\let\Cauchy=\Cau}
+\CustomizeMathJax{\newcommand{\Chi}[2][]{%
+ \chisq_{\mb{#1}}\LWRwrapparen{\mb{#2}}%
+}}
+\CustomizeMathJax{\let\Chisq=\Chi}
+\CustomizeMathJax{\newcommand{\Bet}[2]{\mb{\mathrm{Beta}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\let\Beta=\Bet}
+\CustomizeMathJax{\newcommand{\Exp}[1]{\mb{\mathrm{Exp}}\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\F}[2]{\mb{\mathrm{F}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\newcommand{\Gam}[2]{\mb{\mathrm{Gamma}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\newcommand{\IC}[1]{\mb{\mathrm{\chi^{-2}}}\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\IG}[2]{%
+ \mb{\mathrm{Gamma^{-1}}}\LWRwrapparen{\mb{#1,\ #2}}%
+}}
+\CustomizeMathJax{\newcommand{\IW}[2]{%
+ \mb{\mathrm{Wishart^{-1}}}\LWRwrapparen{\mb{#1,\ #2}}%
+}}
+\CustomizeMathJax{\newcommand{\Log}[2]{%
+\mb{\mathrm{Logistic}}\LWRwrapparen{\mb{#1,\ #2}}%
+}}
+\CustomizeMathJax{\newcommand{\LogN}[2]{%
+ \mb{\mathrm{Log\!-\!N}}\LWRwrapparen{\mb{#1,\ #2}}%
+}}
+\CustomizeMathJax{\newcommand{\N}[3][]{%
+ \mb{\mathrm{N}}_{\mb{#1}}\LWRwrapparen{\mb{#2,\ #3}}%
+}}
+\CustomizeMathJax{\newcommand{\Par}[2]{\mb{\mathrm{Pareto}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\let\Pareto=\Par}
+\CustomizeMathJax{\newcommand{\Tsq}[2]{\mb{\mathrm{T^2}}\LWRwrapparen{\mb{#1,\ #2}}}}
+\CustomizeMathJax{\newcommand{\U}[1]{\mb{\mathrm{U}}\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\W}[2]{\mb{\mathrm{Wishart}}\LWRwrapparen{\mb{#1,\ #2}}}}
+
+\CustomizeMathJax{\renewcommand{\t}[1]{\mb{\mathrm{t}}\LWRwrapparen{\mb{#1}}}}
+
+\CustomizeMathJax{\newcommand{\pBet}[3][x]{%
+ \IBeta{#2}{#3}%
+ #1^{#2-1}\LWRwrapparen{1-#1}^{#3-1}\I[#1]{0,\ 1}, \where #2>0 \and #3>0%
+}}
+\CustomizeMathJax{\newcommand{\pCau}[3][x]{%
+% \ifthenelse{\equal{#2, #3}{0, 1}}{\frac{1}{\cpi\LWRwrapparen{1+#1}^2}}%
+ {\frac{1}{#3\cpi\left\{1+\wrap{\LWRwrapparen{x-#2}/#3}^2\right\}}, \where #3>0}%
+}}% no special case for 0,1
+\CustomizeMathJax{\newcommand{\pChi}[2][x]{%
+ \frac{2^{-#2/2}}{\Gamma[#2/2]}#1^{#2/2-1}\e{-#1/2}%
+ \I[#1]{0,\infty}, \where #2>0%
+}}
+\CustomizeMathJax{\newcommand{\pExp}[2][x]{%
+ \frac{1}{#2}\e{-#1/#2}\I[#1]{0,\infty},%
+ \where #2>0%
+}}
+\CustomizeMathJax{\newcommand{\pGam}[3][x]{%
+ \frac{#3^{#2}}{\Gamma[#2]}#1^{#2-1}\e{-#3#1}%
+ \I[#1]{0,\infty}, \where #2>0 \and #3>0%
+}}
+\CustomizeMathJax{\newcommand{\pN}[3][x]{%
+% \ifthenelse{\equal{#2, #3}{0, 1}}%
+% {\frac{1}{\sqrt{2\cpi}}\e{-#1^2/2}}%
+ {\frac{1}{\sqrt{2\cpi \cdot #3}}\e{-\LWRwrapparen{#1-#2}^2/2 \cdot #3}}%
+}}% no test for 0,1, must add \cdot
+\CustomizeMathJax{\newcommand{\pPar}[3][x]{%
+ \frac{#3}{#2\LWRwrapparen{1+#1/#2}^{#3+1}}\I[#1]{0,\infty},%
+ \where #2>0 \and #3>0%
+}}
+\CustomizeMathJax{\newcommand{\pU}[3][x]{%
+% \ifthenelse{\equal{#2, #3}{0, 1}}{\I[#1]{0,\ 1}}%
+ {\frac{1}{#3-#2}\I[#1]{#2,\ #3}, \where #2<#3}%
+}}% no special case for 0,1
+
+\CustomizeMathJax{\newcommand{\=}[1]{\bar{#1}}}
+\CustomizeMathJax{\let\^\widehat}
+\CustomizeMathJax{\let\~\widetilde}
+\CustomizeMathJax{\newcommand{\'}[1]{\LWRwrapparen{\mb{#1}}}}
+\CustomizeMathJax{\newcommand{\b}[1]{\bar{#1}}}
+\CustomizeMathJax{\newcommand{\c}[1]{\mb{\mathrm{#1}}}}
+\CustomizeMathJax{\newcommand{\d}[1]{\,\mb{\mathrm{d}{#1}}}}
+\CustomizeMathJax{\newcommand{\.}{\mb{\ldots}}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</statex2>
+% \fi
+%
+%
+%
+%
+% \iffalse
+%<*statmath>
+% \fi
+%
+% \part{lwarp-statmath.sty}
+%
+% \section{statmath}
+%
+% \credits{Sebastian Ankargren}
+%
+% \DescribePackage{statmath}
+% \pkg{statmath} is used as-is for \SVG\ math, and
+% is emulated for \brand{MathJax}.
+%
+% \changes{v0.81}{2020/02/28}{\pkg{statmath}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackagePass{statmath}[2018/03/08]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\begin{warpMathJax}
+\LWR@infoprocessingmathjax{statmath}
+
+\CustomizeMathJax{\let\abcbf\mathbf}
+\CustomizeMathJax{\newcommand{\greekbf}[1]{\boldsymbol{#1}}}
+\CustomizeMathJax{\newcommand{\bfA}{\abcbf A}}
+\CustomizeMathJax{\newcommand{\bfB}{\abcbf B}}
+\CustomizeMathJax{\newcommand{\bfC}{\abcbf C}}
+\CustomizeMathJax{\newcommand{\bfD}{\abcbf D}}
+\CustomizeMathJax{\newcommand{\bfE}{\abcbf E}}
+\CustomizeMathJax{\newcommand{\bfF}{\abcbf F}}
+\CustomizeMathJax{\newcommand{\bfG}{\abcbf G}}
+\CustomizeMathJax{\newcommand{\bfH}{\abcbf H}}
+\CustomizeMathJax{\newcommand{\bfI}{\abcbf I}}
+\CustomizeMathJax{\newcommand{\bfJ}{\abcbf J}}
+\CustomizeMathJax{\newcommand{\bfK}{\abcbf K}}
+\CustomizeMathJax{\newcommand{\bfL}{\abcbf L}}
+\CustomizeMathJax{\newcommand{\bfM}{\abcbf M}}
+\CustomizeMathJax{\newcommand{\bfN}{\abcbf N}}
+\CustomizeMathJax{\newcommand{\bfO}{\abcbf O}}
+\CustomizeMathJax{\newcommand{\bfP}{\abcbf P}}
+\CustomizeMathJax{\newcommand{\bfQ}{\abcbf Q}}
+\CustomizeMathJax{\newcommand{\bfR}{\abcbf R}}
+\CustomizeMathJax{\newcommand{\bfS}{\abcbf S}}
+\CustomizeMathJax{\newcommand{\bfT}{\abcbf T}}
+\CustomizeMathJax{\newcommand{\bfU}{\abcbf U}}
+\CustomizeMathJax{\newcommand{\bfV}{\abcbf V}}
+\CustomizeMathJax{\newcommand{\bfW}{\abcbf W}}
+\CustomizeMathJax{\newcommand{\bfX}{\abcbf X}}
+\CustomizeMathJax{\newcommand{\bfY}{\abcbf Y}}
+\CustomizeMathJax{\newcommand{\bfZ}{\abcbf Z}}
+\CustomizeMathJax{\newcommand{\bfa}{\abcbf a}}
+\CustomizeMathJax{\newcommand{\bfb}{\abcbf b}}
+\CustomizeMathJax{\newcommand{\bfc}{\abcbf c}}
+\CustomizeMathJax{\newcommand{\bfd}{\abcbf d}}
+\CustomizeMathJax{\newcommand{\bfe}{\abcbf e}}
+\CustomizeMathJax{\newcommand{\bff}{\abcbf f}}
+\CustomizeMathJax{\newcommand{\bfg}{\abcbf g}}
+\CustomizeMathJax{\newcommand{\bfh}{\abcbf h}}
+\CustomizeMathJax{\newcommand{\bfi}{\abcbf i}}
+\CustomizeMathJax{\newcommand{\bfj}{\abcbf j}}
+\CustomizeMathJax{\newcommand{\bfk}{\abcbf k}}
+\CustomizeMathJax{\newcommand{\bfl}{\abcbf l}}
+\CustomizeMathJax{\newcommand{\bfm}{\abcbf m}}
+\CustomizeMathJax{\newcommand{\bfn}{\abcbf n}}
+\CustomizeMathJax{\newcommand{\bfo}{\abcbf o}}
+\CustomizeMathJax{\newcommand{\bfp}{\abcbf p}}
+\CustomizeMathJax{\newcommand{\bfq}{\abcbf q}}
+\CustomizeMathJax{\newcommand{\bfr}{\abcbf r}}
+\CustomizeMathJax{\newcommand{\bfs}{\abcbf s}}
+\CustomizeMathJax{\newcommand{\bft}{\abcbf t}}
+\CustomizeMathJax{\newcommand{\bfu}{\abcbf u}}
+\CustomizeMathJax{\newcommand{\bfv}{\abcbf v}}
+\CustomizeMathJax{\newcommand{\bfw}{\abcbf w}}
+\CustomizeMathJax{\newcommand{\bfx}{\abcbf x}}
+\CustomizeMathJax{\newcommand{\bfy}{\abcbf y}}
+\CustomizeMathJax{\newcommand{\bfz}{\abcbf z}}
+\CustomizeMathJax{\newcommand{\bfalpha}{\greekbf \alpha}}
+\CustomizeMathJax{\newcommand{\bfbeta}{\greekbf \beta}}
+\CustomizeMathJax{\newcommand{\bfdelta}{\greekbf \delta}}
+\CustomizeMathJax{\newcommand{\bfepsilon}{\greekbf \epsilon}}
+\CustomizeMathJax{\newcommand{\bfvarepsilon}{\greekbf \varepsilon}}
+\CustomizeMathJax{\newcommand{\bfzeta}{\greekbf \zeta}}
+\CustomizeMathJax{\newcommand{\bfeta}{\greekbf \eta}}
+\CustomizeMathJax{\newcommand{\bftheta}{\greekbf \theta}}
+\CustomizeMathJax{\newcommand{\bfvartheta}{\greekbf \vartheta}}
+\CustomizeMathJax{\newcommand{\bfgamma}{\greekbf \gamma}}
+\CustomizeMathJax{\newcommand{\bfkappa}{\greekbf \kappa}}
+\CustomizeMathJax{\newcommand{\bflambda}{\greekbf \lambda}}
+\CustomizeMathJax{\newcommand{\bfmu}{\greekbf \mu}}
+\CustomizeMathJax{\newcommand{\bfnu}{\greekbf \nu}}
+\CustomizeMathJax{\newcommand{\bfxi}{\greekbf \xi}}
+\CustomizeMathJax{\newcommand{\bfpi}{\greekbf \pi}}
+\CustomizeMathJax{\newcommand{\bfvarpi}{\greekbf \varpi}}
+\CustomizeMathJax{\newcommand{\bfrho}{\greekbf \rho}}
+\CustomizeMathJax{\newcommand{\bfvarrho}{\greekbf \varrho}}
+\CustomizeMathJax{\newcommand{\bfsigma}{\greekbf \sigma}}
+\CustomizeMathJax{\newcommand{\bfvarsigma}{\greekbf \varsigma}}
+\CustomizeMathJax{\newcommand{\bftau}{\greekbf \tau}}
+\CustomizeMathJax{\newcommand{\bfupsilon}{\greekbf \upsilon}}
+\CustomizeMathJax{\newcommand{\bfphi}{\greekbf \phi}}
+\CustomizeMathJax{\newcommand{\bfvarphi}{\greekbf \varphi}}
+\CustomizeMathJax{\newcommand{\bfchi}{\greekbf \chi}}
+\CustomizeMathJax{\newcommand{\bfpsi}{\greekbf \psi}}
+\CustomizeMathJax{\newcommand{\bfomega}{\greekbf \omega}}
+\CustomizeMathJax{\newcommand{\bfiota}{\greekbf \iota}}
+\CustomizeMathJax{\newcommand{\bfGamma}{\greekbf \Gamma}}
+\CustomizeMathJax{\newcommand{\bfDelta}{\greekbf \Delta}}
+\CustomizeMathJax{\newcommand{\bfTheta}{\greekbf \Theta}}
+\CustomizeMathJax{\newcommand{\bfLambda}{\greekbf \Lambda}}
+\CustomizeMathJax{\newcommand{\bfXi}{\greekbf \Xi}}
+\CustomizeMathJax{\newcommand{\bfPi}{\greekbf \Pi}}
+\CustomizeMathJax{\newcommand{\bfSigma}{\greekbf \Sigma}}
+\CustomizeMathJax{\newcommand{\bfUpsilon}{\greekbf \Upsilon}}
+\CustomizeMathJax{\newcommand{\bfPhi}{\greekbf \Phi}}
+\CustomizeMathJax{\newcommand{\bfPsi}{\greekbf \Psi}}
+\CustomizeMathJax{\newcommand{\bfOmega}{\greekbf \Omega}}
+\CustomizeMathJax{\newcommand{\bfzero}{\greekbf 0}}
+\CustomizeMathJax{\DeclareMathOperator{\cov}{Cov}}
+\CustomizeMathJax{\DeclareMathOperator{\E}{E}}
+\CustomizeMathJax{\DeclareMathOperator{\V}{V}}
+\CustomizeMathJax{\newcommand{\inas}{\overset{a.s.}{\to}}}
+\CustomizeMathJax{\newcommand{\indist}{\overset{d}{\to}}}
+\CustomizeMathJax{\newcommand{\inprob}{\overset{p}{\to}}}
+\CustomizeMathJax{\DeclareMathOperator{\plim}{plim}}
+\CustomizeMathJax{\DeclareMathOperator{\tr}{tr}}
+\CustomizeMathJax{\DeclareMathOperator{\vc}{vec}}
+\CustomizeMathJax{\DeclareMathOperator{\vcs}{vecs}}
+\CustomizeMathJax{\DeclareMathOperator{\vch}{vech}}
+\CustomizeMathJax{\DeclareMathOperator{\diag}{diag}}
+\CustomizeMathJax{\DeclareMathOperator{\argmin}{arg\,min}}
+\CustomizeMathJax{\DeclareMathOperator{\argmax}{arg\,max}}
+\end{warpMathJax}
+% \end{macrocode}
+%
+% \iffalse
+%</statmath>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
%<*steinmetz>
% \fi
%
@@ -67659,6 +69642,147 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
%
%
%
+% \iffalse
+%<*tagpdf>
+% \fi
+%
+% \part{lwarp-tagpdf.sty}
+%
+% \section{tagpdf}
+%
+% \DescribePackage{tagpdf}
+% \pkg{tagpdf} is mostly ignored, but emulates alt text, for images only.
+% (\HTML\ only has alternate text for images.)
+%
+% (If left enabled for \HTML\ output, \pkg{tagpdf} errors when producing \HTML,
+% somehow due to the \HTML\ page numbers.)
+%
+% \changes{v0.80}{2020/02/20}{\pkg{tagpdf}: Added.}
+%
+% \codehtml
+%
+% \begin{macrocode}
+\LWR@ProvidesPackageDrop{tagpdf}[2019/07/02]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+
+\tl_new:N \l__uftag_mc_key_label_tl
+
+\keys_define:nn { uftag / mc }
+ {
+ tag .code:n = % the name (H,P,Span etc
+ {},
+ raw .code:n =
+ {}
+ ,
+ alttext .code:n = % Alt property
+ {
+ \gdef\LWR@ThisAltText{\detokenize\expandafter{#1}}%
+ },
+ alttext-o .code:n = % Alt property
+ {
+ \gdef\LWR@ThisAltText{\detokenize\expandafter{#1}}%
+ },
+ actualtext .code:n = % ActualText property
+ {},
+ actualtext-o .code:n = % ActualText property
+ {},
+ label .tl_set:N = \l__uftag_mc_key_label_tl,
+ artifact .code:n = {},
+ artifact .default:n = {notype}
+ }
+
+\keys_define:nn { uftag / struct }
+ {
+ label .tl_set:N = \l__uftag_struct_key_label_tl,
+ stash .bool_set:N = \l__uftag_struct_elem_stash_bool,
+ tag .code:n = % S property
+ {},
+ title .code:n = % T property
+ {},
+ title-o .code:n = % T property
+ {},
+ alttext .code:n = % Alt property
+ {
+ \gdef\LWR@ThisAltText{\detokenize\expandafter{#1}}%
+ },
+ alttext-o .code:n = % Alt property
+ {
+ \gdef\LWR@ThisAltText{\detokenize\expandafter{#1}}%
+ },
+ actualtext .code:n = % ActualText property
+ {},
+ actualtext-o .code:n = % ActualText property
+ {},
+}
+
+\NewDocumentCommand \tagpdfsetup { m }{}
+
+\cs_set_eq:NN\tagpdfifluatexTF \sys_if_engine_luatex:TF
+\cs_set_eq:NN\tagpdfifluatexT \sys_if_engine_luatex:T
+\cs_set_eq:NN\tagpdfifpdftexT \sys_if_engine_pdftex:T
+\cs_new:Npn \tagpdfget #1 {}
+\cs_new:Npn \uftag_get:n #1 {}
+
+\NewDocumentCommand \tagmcifinTF { m m }{}
+
+\NewDocumentCommand \tagmcbegin { m }{\uftag_mc_begin:n {#1}\ignorespaces}
+\cs_new_protected:Nn \uftag_mc_begin:n {
+ \group_begin:
+ \keys_set:nn { uftag / mc } {#1}
+ \group_end:
+}
+
+\NewDocumentCommand \tagmcend {}{\ThisAltText{}}
+
+\cs_new_protected:Nn \uftag_mc_end: {\ThisAltText{}}
+
+\NewDocumentCommand \tagmcuse { m }{}
+
+\cs_new_protected:Nn \uftag_mc_use:n {}
+
+\NewDocumentCommand \tagstructbegin { m }{
+ \uftag_struct_begin:n {#1}
+}
+
+\cs_new_protected:Nn \uftag_struct_begin:n
+{
+ \group_begin:
+ \keys_set:nn {uftag / struct} { #1 }
+ \group_end:
+}
+
+\NewDocumentCommand \tagstructend { }{\ThisAltText{}}
+
+\cs_new_protected:Nn \uftag_struct_end: {\ThisAltText{}}
+
+\NewDocumentCommand \tagstructuse { m }{}
+
+% \NewDocumentCommand\showtagpdfmcdata { O {\__uftag_get_mc_abs_cnt:} }{}
+% What is the second argument?
+
+\NewDocumentCommand\showtagpdfattributes { }{}
+
+\sys_if_engine_luatex:T
+{
+ \NewDocumentCommand\pdffakespace { }
+ {
+ \__uftag_fakespace:
+ }
+}
+
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \iffalse
+%</tagpdf>
+% \fi
+%
+%
+%
+%
%
% \iffalse
%<*tascmac>
@@ -71207,7 +73331,9 @@ remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
%
% \DescribePackage{unicode-math}
% \pkg{unicode-math} is supported as-is for \HTML\ with \SVG math.
-% For \brand{MathJax}, many characters do not seem to be encoded correctly,
+%
+% For \brand{MathJax}, many characters may not be read correctly,
+% such as bold letters,
% and so are not read correctly by \prog{pdftotext} for \HTML.
% Symbol font commands are emulated, but not all combinations are
% supported by MathJax.
@@ -72696,6 +74822,7 @@ padding:\LWR@printlength{\fboxsep}%
% Converted into an \HTML\ hex color span.
%
% \changes{v0.57}{2018/06/02}{\pkg{xcolor}: New system for switching print and \HTML\ outputs.}
+% \changes{v0.81}{2020/02/28}{\pkg{xcolor}: \cs{textcolor}: Spurrious space.}
% \begin{macrocode}
\NewDocumentCommand{\LWR@HTML@textcolor}{o m m}{%
\begingroup%
@@ -72703,7 +74830,7 @@ padding:\LWR@printlength{\fboxsep}%
\color[#1]{#2}%
}{%
\color{#2}%
-}
+}%
\InlineClass[color:\LWR@currenttextcolor]{textcolor}{#3}%
\endgroup%
}%
diff --git a/macros/latex/contrib/lwarp/lwarp.ins b/macros/latex/contrib/lwarp/lwarp.ins
index 5c9f591ed7..395ee2af8f 100644
--- a/macros/latex/contrib/lwarp/lwarp.ins
+++ b/macros/latex/contrib/lwarp/lwarp.ins
@@ -116,6 +116,7 @@ version 2005/12/01 or later.
\file{lwarp-CJKutf8.sty}{\from{lwarp.dtx}{CJKutf8}}
\file{lwarp-clrdblpg.sty}{\from{lwarp.dtx}{clrdblpg}}
\file{lwarp-cmdtrack.sty}{\from{lwarp.dtx}{cmdtrack}}
+\file{lwarp-colonequals.sty}{\from{lwarp.dtx}{colonequals}}
\file{lwarp-color.sty}{\from{lwarp.dtx}{color}}
\file{lwarp-colortbl.sty}{\from{lwarp.dtx}{colortbl}}
\file{lwarp-continue.sty}{\from{lwarp.dtx}{continue}}
@@ -127,14 +128,18 @@ version 2005/12/01 or later.
\file{lwarp-dblfloatfix.sty}{\from{lwarp.dtx}{dblfloatfix}}
\file{lwarp-dblfnote.sty}{\from{lwarp.dtx}{dblfnote}}
\file{lwarp-dcolumn.sty}{\from{lwarp.dtx}{dcolumn}}
+\file{lwarp-decimal.sty}{\from{lwarp.dtx}{decimal}}
\file{lwarp-diagbox.sty}{\from{lwarp.dtx}{diagbox}}
\file{lwarp-dingbat.sty}{\from{lwarp.dtx}{dingbat}}
+\file{lwarp-DotArrow.sty}{\from{lwarp.dtx}{DotArrow}}
+\file{lwarp-dotlessi.sty}{\from{lwarp.dtx}{dotlessi}}
\file{lwarp-dprogress.sty}{\from{lwarp.dtx}{dprogress}}
\file{lwarp-draftcopy.sty}{\from{lwarp.dtx}{draftcopy}}
\file{lwarp-draftfigure.sty}{\from{lwarp.dtx}{draftfigure}}
\file{lwarp-draftwatermark.sty}{\from{lwarp.dtx}{draftwatermark}}
\file{lwarp-easy-todo.sty}{\from{lwarp.dtx}{easy-todo}}
\file{lwarp-ebook.sty}{\from{lwarp.dtx}{ebook}}
+\file{lwarp-econometrics.sty}{\from{lwarp.dtx}{econometrics}}
\file{lwarp-ed.sty}{\from{lwarp.dtx}{ed}}
\file{lwarp-ellipsis.sty}{\from{lwarp.dtx}{ellipsis}}
\file{lwarp-embrac.sty}{\from{lwarp.dtx}{embrac}}
@@ -142,6 +147,7 @@ version 2005/12/01 or later.
\file{lwarp-endfloat.sty}{\from{lwarp.dtx}{endfloat}}
\file{lwarp-endheads.sty}{\from{lwarp.dtx}{endheads}}
\file{lwarp-endnotes.sty}{\from{lwarp.dtx}{endnotes}}
+\file{lwarp-engtlc.sty}{\from{lwarp.dtx}{engtlc}}
\file{lwarp-enumerate.sty}{\from{lwarp.dtx}{enumerate}}
\file{lwarp-enumitem.sty}{\from{lwarp.dtx}{enumitem}}
\file{lwarp-epigraph.sty}{\from{lwarp.dtx}{epigraph}}
@@ -253,6 +259,7 @@ version 2005/12/01 or later.
\file{lwarp-lua-check-hyphen.sty}{\from{lwarp.dtx}{lua-check-hyphen}}
\file{lwarp-lua-visual-debug.sty}{\from{lwarp.dtx}{lua-visual-debug}}
\file{lwarp-luacolor.sty}{\from{lwarp.dtx}{luacolor}}
+\file{lwarp-luamplib.sty}{\from{lwarp.dtx}{luamplib}}
\file{lwarp-luatodonotes.sty}{\from{lwarp.dtx}{luatodonotes}}
\file{lwarp-lyluatex.sty}{\from{lwarp.dtx}{lyluatex}}
\file{lwarp-magaz.sty}{\from{lwarp.dtx}{magaz}}
@@ -288,6 +295,7 @@ version 2005/12/01 or later.
\file{lwarp-multicol.sty}{\from{lwarp.dtx}{multicol}}
\file{lwarp-multicolrule.sty}{\from{lwarp.dtx}{multicolrule}}
\file{lwarp-multimedia.sty}{\from{lwarp.dtx}{multimedia}}
+\file{lwarp-multiobjective.sty}{\from{lwarp.dtx}{multiobjective}}
\file{lwarp-multirow.sty}{\from{lwarp.dtx}{multirow}}
\file{lwarp-multitoc.sty}{\from{lwarp.dtx}{multitoc}}
\file{lwarp-musicography.sty}{\from{lwarp.dtx}{musicography}}
@@ -302,6 +310,7 @@ version 2005/12/01 or later.
\file{lwarp-nicefrac.sty}{\from{lwarp.dtx}{nicefrac}}
\file{lwarp-niceframe.sty}{\from{lwarp.dtx}{niceframe}}
\file{lwarp-noitcrul.sty}{\from{lwarp.dtx}{noitcrul}}
+\file{lwarp-nolbreaks.sty}{\from{lwarp.dtx}{nolbreaks}}
\file{lwarp-nomencl.sty}{\from{lwarp.dtx}{nomencl}}
\file{lwarp-nonfloat.sty}{\from{lwarp.dtx}{nonfloat}}
\file{lwarp-nonumonpart.sty}{\from{lwarp.dtx}{nonumonpart}}
@@ -340,6 +349,7 @@ version 2005/12/01 or later.
\file{lwarp-pfnote.sty}{\from{lwarp.dtx}{pfnote}}
\file{lwarp-phfqit.sty}{\from{lwarp.dtx}{phfqit}}
\file{lwarp-physics.sty}{\from{lwarp.dtx}{physics}}
+\file{lwarp-physunits.sty}{\from{lwarp.dtx}{physunits}}
\file{lwarp-pifont.sty}{\from{lwarp.dtx}{pifont}}
\file{lwarp-placeins.sty}{\from{lwarp.dtx}{placeins}}
\file{lwarp-plarydshln.sty}{\from{lwarp.dtx}{plarydshln}}
@@ -367,6 +377,7 @@ version 2005/12/01 or later.
\file{lwarp-relsize.sty}{\from{lwarp.dtx}{relsize}}
\file{lwarp-repeatindex.sty}{\from{lwarp.dtx}{repeatindex}}
\file{lwarp-resizegather.sty}{\from{lwarp.dtx}{resizegather}}
+\file{lwarp-returntogrid.sty}{\from{lwarp.dtx}{returntogrid}}
\file{lwarp-rmathbr.sty}{\from{lwarp.dtx}{rmathbr}}
\file{lwarp-rmpage.sty}{\from{lwarp.dtx}{rmpage}}
\file{lwarp-romanbar.sty}{\from{lwarp.dtx}{romanbar}}
@@ -407,6 +418,9 @@ version 2005/12/01 or later.
\file{lwarp-srctex.sty}{\from{lwarp.dtx}{srctex}}
\file{lwarp-stabular.sty}{\from{lwarp.dtx}{stabular}}
\file{lwarp-stackengine.sty}{\from{lwarp.dtx}{stackengine}}
+\file{lwarp-stackrel.sty}{\from{lwarp.dtx}{stackrel}}
+\file{lwarp-statex2.sty}{\from{lwarp.dtx}{statex2}}
+\file{lwarp-statmath.sty}{\from{lwarp.dtx}{statmath}}
\file{lwarp-steinmetz.sty}{\from{lwarp.dtx}{steinmetz}}
\file{lwarp-stfloats.sty}{\from{lwarp.dtx}{stfloats}}
\file{lwarp-struktex.sty}{\from{lwarp.dtx}{struktex}}
@@ -422,6 +436,7 @@ version 2005/12/01 or later.
\file{lwarp-tabls.sty}{\from{lwarp.dtx}{tabls}}
\file{lwarp-tabularx.sty}{\from{lwarp.dtx}{tabularx}}
\file{lwarp-tabulary.sty}{\from{lwarp.dtx}{tabulary}}
+\file{lwarp-tagpdf.sty}{\from{lwarp.dtx}{tagpdf}}
\file{lwarp-tascmac.sty}{\from{lwarp.dtx}{tascmac}}
\file{lwarp-textarea.sty}{\from{lwarp.dtx}{textarea}}
\file{lwarp-textcomp.sty}{\from{lwarp.dtx}{textcomp}}
diff --git a/macros/latex/contrib/lwarp/lwarp.pdf b/macros/latex/contrib/lwarp/lwarp.pdf
index de944bc2ac..2b838cf756 100644
--- a/macros/latex/contrib/lwarp/lwarp.pdf
+++ b/macros/latex/contrib/lwarp/lwarp.pdf
Binary files differ
diff --git a/macros/latex/contrib/lwarp/lwarpmk.lua b/macros/latex/contrib/lwarp/lwarpmk.lua
index afa450930a..a862d7f8bb 100755
--- a/macros/latex/contrib/lwarp/lwarpmk.lua
+++ b/macros/latex/contrib/lwarp/lwarpmk.lua
@@ -2,7 +2,7 @@
-- Copyright 2016-2020 Brian Dunn
-printversion = "v0.80"
+printversion = "v0.81"
requiredconfversion = "2" -- also at *lwarpmk.conf
function printhelp ()
@@ -228,7 +228,9 @@ if sourcename=="lwarp" then
print ("lwarpmk: ===")
print ("lwarpmk: lwarp.sty has recently been recompiled in this directory,")
print ("lwarpmk: and \"lwarpmk.conf\" is no longer set for your own project.")
- print ("lwarpmk: Recompile your own project using pdf/lua/xelatex <projectname>.")
+ print ("lwarpmk: (Perhaps you are not in your project's directory?)")
+ print ("lwarpmk: In your project directory, recompile your project")
+ print ("lwarpmk: using pdf/lua/xelatex <projectname>.")
print ("lwarpmk: After a recompile, \"lwarpmk.conf\" will be set for your project,")
print ("lwarpmk: and you may again use lwarpmk.")
print ("lwarpmk: ===")
diff --git a/macros/latex/contrib/media9/ChangeLog b/macros/latex/contrib/media9/ChangeLog
index e69d741450..7f0efbbb69 100644
--- a/macros/latex/contrib/media9/ChangeLog
+++ b/macros/latex/contrib/media9/ChangeLog
@@ -1,3 +1,10 @@
+2020-03-04
+ * v1.06 : media9.sty
+ * v0.37 : pdfbase.sty
+ * fix : pdfbase.sty, dvisvgm driver: fixed behaviour of
+ \pbs_pdfrefxform:n under rotation/scaling, \pbs_pdfxform:nnnnn not changing
+ page bbox anymore
+
2020-01-27
* v1.05 : media9.sty
* v0.36 : pdfbase.sty
diff --git a/macros/latex/contrib/media9/doc/media9.pdf b/macros/latex/contrib/media9/doc/media9.pdf
index 982d811758..9750cd8a7d 100644
--- a/macros/latex/contrib/media9/doc/media9.pdf
+++ b/macros/latex/contrib/media9/doc/media9.pdf
Binary files differ
diff --git a/macros/latex/contrib/media9/media9.sty b/macros/latex/contrib/media9/media9.sty
index 14ba62ef41..0126bcbc21 100644
--- a/macros/latex/contrib/media9/media9.sty
+++ b/macros/latex/contrib/media9/media9.sty
@@ -37,8 +37,8 @@
\RequirePackage{xparse}
\RequirePackage{atbegshi}
-\def\g@mix@date@tl{2020/01/27}
-\def\g@mix@version@tl{1.05}
+\def\g@mix@date@tl{2020/03/04}
+\def\g@mix@version@tl{1.06}
\ProvidesExplPackage{media9}{\g@mix@date@tl}{\g@mix@version@tl}
{acrobat-9/X compatible media}
diff --git a/macros/latex/contrib/media9/pdfbase.sty b/macros/latex/contrib/media9/pdfbase.sty
index a791da1eee..f03a11ac24 100644
--- a/macros/latex/contrib/media9/pdfbase.sty
+++ b/macros/latex/contrib/media9/pdfbase.sty
@@ -159,8 +159,8 @@
\RequirePackage{expl3}
\RequirePackage{l3keys2e}
-\def\g@pbs@date@tl{2020/01/27}
-\def\g@pbs@version@tl{0.36}
+\def\g@pbs@date@tl{2020/03/04}
+\def\g@pbs@version@tl{0.37}
\ProvidesExplPackage{pdfbase}{\g@pbs@date@tl}{\g@pbs@version@tl}
{driver independent access to low-level PDF features}
@@ -751,7 +751,9 @@
id='pbs@obj\int_use:N\g_pbs_obj_int'~class='xform'
>
}
+ \special{dvisvgm:bbox~lock}
\box_use_drop:N#5
+ \special{dvisvgm:bbox~unlock}
\special{dvisvgm:raw~{?nl}</g>{?nl}</defs>}
}
}
@@ -760,7 +762,8 @@
}
\cs_new_protected_nopar:Nn\pbs_pdfrefxform:n{
- \special{dvisvgm:raw~{?nl}<use~x='{?x}'~y='{?y}'~xlink:href='#1'/>}
+ \special{dvisvgm:raw~{?nl}
+ <use~x='{?x}'~y='{?y}'~transform='{?matrix}'~xlink:href='#1'/>}
}
}{
%dvips
diff --git a/macros/latex/contrib/xsavebox/ChangeLog b/macros/latex/contrib/xsavebox/ChangeLog
index c039533f0d..b2097c7004 100644
--- a/macros/latex/contrib/xsavebox/ChangeLog
+++ b/macros/latex/contrib/xsavebox/ChangeLog
@@ -1,3 +1,7 @@
+2020-03-04
+ * v0.16
+ * fix: dvisvgm-special `bbox' option `transform' added
+
2019-11-12
* v0.15
* fix: output driver set-up
diff --git a/macros/latex/contrib/xsavebox/README.md b/macros/latex/contrib/xsavebox/README.md
index 61d91bfa99..89ff617c37 100644
--- a/macros/latex/contrib/xsavebox/README.md
+++ b/macros/latex/contrib/xsavebox/README.md
@@ -14,6 +14,7 @@ All common TeX engines and back-ends are supported:
* pdfLaTeX, LuaLaTeX
* LaTeX &rArr; dvips &rArr; ps2pdf/Distiller
* (Xe)LaTeX &rArr; (x)dvipdfmx
+* LaTeX &rArr; dvisvgm
## User commands
diff --git a/macros/latex/contrib/xsavebox/xsavebox.pdf b/macros/latex/contrib/xsavebox/xsavebox.pdf
index 0c2d0fb2e9..9f8d52ba89 100644
--- a/macros/latex/contrib/xsavebox/xsavebox.pdf
+++ b/macros/latex/contrib/xsavebox/xsavebox.pdf
Binary files differ
diff --git a/macros/latex/contrib/xsavebox/xsavebox.sty b/macros/latex/contrib/xsavebox/xsavebox.sty
index 686640aaa9..2f3fac684f 100644
--- a/macros/latex/contrib/xsavebox/xsavebox.sty
+++ b/macros/latex/contrib/xsavebox/xsavebox.sty
@@ -28,8 +28,8 @@
% \xusebox{<name>}
% \the<name> %short form of \xusebox{<name>} for <name> composed of [a-zA-Z]
%
-% Supports all known engines and backends including
-% pdflatex, latex+dvips+ps2pdf, xelatex, latex+dvipdfmx, lualatex.
+% Supports all known engines and backends including pdflatex,
+% latex+dvips+ps2pdf, xelatex, latex+dvipdfmx, lualatex, latex+dvisvgm.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -48,8 +48,8 @@
\RequirePackage{xparse}
\RequirePackage{l3keys2e}
-\def\g@xsb@version@tl{0.15}
-\def\g@xsb@date@tl{2019/11/12}
+\def\g@xsb@version@tl{0.16}
+\def\g@xsb@date@tl{2020/03/04}
\ProvidesExplPackage{xsavebox}{\g@xsb@date@tl}{\g@xsb@version@tl}
{saveboxes for repeating content without code replication}
@@ -121,7 +121,9 @@
\bool_if:NTF\g_xsb_dvisvgm_bool{
\tl_gset:Nn\g_xsb_margin_tl{0pt}
- \cs_new_protected_nopar:Nn\xsb_updatebbox:nnn{\special{dvisvgm:bbox~#1~#2~#3}}
+ \cs_new_protected_nopar:Nn\xsb_updatebbox:nnn{
+ \special{dvisvgm:bbox~#1~#2~#3~transform}
+ }
}{
\cs_new_protected_nopar:Nn\xsb_updatebbox:nnn{}
}
diff --git a/macros/latex/contrib/xsavebox/xsavebox.tex b/macros/latex/contrib/xsavebox/xsavebox.tex
index 1739f1f072..b7d437cfb0 100644
--- a/macros/latex/contrib/xsavebox/xsavebox.tex
+++ b/macros/latex/contrib/xsavebox/xsavebox.tex
@@ -32,7 +32,7 @@
pdftitle={The xsavebox Package},
pdfsubject={Documentation},
pdfauthor={Alexander Grahn},
- pdfkeywords={PDF features, XObject, savebox, LaTeX, dvips, repeated content, repeated graphics, eps, PostScript, ps2pdf, XeLaTeX, pdfLaTeX, LuaLaTeX, dvipdfmx, dvisvgmx},
+ pdfkeywords={PDF features, XObject, savebox, LaTeX, dvips, repeated content, repeated graphics, eps, PostScript, ps2pdf, XeLaTeX, pdfLaTeX, LuaLaTeX, dvipdfmx, dvisvgm},
citebordercolor={0 0 1},
filebordercolor={0 0 1},
linkbordercolor={0 0 1},
diff --git a/macros/latex/contrib/zref/zref.dtx b/macros/latex/contrib/zref/zref.dtx
index c1c76e7210..d7a5b0863e 100644
--- a/macros/latex/contrib/zref/zref.dtx
+++ b/macros/latex/contrib/zref/zref.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
% File: zref.dtx
-% Version: 2019/11/29 v2.28
+% Version: 2020-03-03 v2.29
% Info: A new reference scheme for LaTeX
%
% Copyright (C)
@@ -95,10 +95,6 @@
% TDS:doc/latex/zref/zref-example.tex
% TDS:doc/latex/zref/zref-example-lastpage.tex
% TDS:doc/latex/zref/zref-example-nextpage.tex
-% TDS:doc/latex/zref/test/zref-test1.tex
-% TDS:doc/latex/zref/test/zref-test-base.tex
-% TDS:doc/latex/zref/test/zref-test-runs.tex
-% TDS:doc/latex/zref/test/zref-test-titleref-memoir.tex
% TDS:source/latex/zref/zref.dtx
%
%<*ignore>
@@ -116,7 +112,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: zref 2019/11/29 v2.28 A new reference scheme for LaTeX (HO)}
+\Msg{* Package: zref 2020-03-03 v2.29 A new reference scheme for LaTeX (HO)}
\Msg{************************************************************************}
\keepsilent
@@ -128,11 +124,11 @@
This is a generated file.
Project: zref
-Version: 2019/11/29 v2.28
+Version: 2020-03-03 v2.29
Copyright (C)
2006-2012 Heiko Oberdiek
- 2016-2019 Oberdiek Package Support Group
+ 2016-2020 Oberdiek Package Support Group
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
@@ -202,10 +198,6 @@ and the derived files
% \file{zref-test-base.tex}{\from{zref.dtx}{test-base}}%
% \file{zref-test-runs.tex}{\from{zref.dtx}{test-runs}}%
% \file{zref-test-titleref-memoir.tex}{\from{zref.dtx}{test-titleref-memoir}}%
- \nopreamble
- \nopostamble
-% \usedir{source/latex/zref/catalogue}%
-% \file{zref.xml}{\from{zref.dtx}{catalogue}}%
}
\catcode32=13\relax% active space
@@ -238,7 +230,7 @@ and the derived files
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{zref.drv}%
- [2019/11/29 v2.28 A new reference scheme for LaTeX (HO)]%
+ [2020-03-03 v2.29 A new reference scheme for LaTeX (HO)]%
\documentclass{ltxdoc}
\usepackage{holtxdoc}[2011/11/22]
\setlength{\emergencystretch}{1em}
@@ -249,26 +241,11 @@ and the derived files
% \fi
%
%
-% \CharacterTable
-% {Upper-case \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
-% Lower-case \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
-% Digits \0\1\2\3\4\5\6\7\8\9
-% Exclamation \! Double quote \" Hash (number) \#
-% Dollar \$ Percent \% Ampersand \&
-% Acute accent \' Left paren \( Right paren \)
-% Asterisk \* Plus \+ Comma \,
-% Minus \- Point \. Solidus \/
-% Colon \: Semicolon \; Less than \<
-% Equals \= Greater than \> Question mark \?
-% Commercial at \@ Left bracket \[ Backslash \\
-% Right bracket \] Circumflex \^ Underscore \_
-% Grave accent \` Left brace \{ Vertical bar \|
-% Right brace \} Tilde \~}
%
% \GetFileInfo{zref.drv}
%
% \title{The \xpackage{zref} package}
-% \date{2019/11/29 v2.28}
+% \date{2020-03-03 v2.29}
% \author{Heiko Oberdiek\thanks
% {Please report any issues at \url{https://github.com/ho-tex/zref/issues}}}
%
@@ -878,6 +855,10 @@ and the derived files
%
% With the help of package \xpackage{atbegshi}
% a new counter |abspage| with absolute page numbers is provided.
+% For technical and historical reasons the counter itself is zero based:
+% if you use it directly on the first page, e.g
+% with |\arabic{abspage}| you will get 0 as value. When using |\zref|
+% the first page will be page 1 as expected.
% Also a new property |abspage| is defined and added to the
% main property list. Thus you can reference the absolute
% page number:
@@ -1339,6 +1320,46 @@ and the derived files
% The property list |savepos| contains the properties |posx|
% and |posy|.
%
+% \subsection{Module \xmodule{abspos}}
+% Module \xmodule{abspos} allows to get various values of the page layout. There is no user
+% command, only a number of internal commands. For example:
+% \begin{quote}
+% |\zref@absposx{|\meta{label}|}{|\meta{value}|}{|\meta{position}|}|\\
+% |\zref@absposy{|\meta{label}|}{|\meta{value}|}{|\meta{position}|}|
+% \end{quote}
+%
+% The return value is like in the module \xmodule{savepos} a number representing a length in sp.
+% The length are measured from the bottom left of the page.
+%
+% \meta{label} is a label set with \cs{zlabel} or \cs{zsavepos} that allows to retrieve the
+% absolute page number.
+%
+% \meta{position} is for the x-command one of |left|, |right| or |center|. For the y-command
+% it is one of |top|, |bottom|, |center|.
+%
+% The possible content of \meta{value} can be seen in the following table. Be aware that the code
+% makes some assumptions which are perhaps not always true -- for example that the left of
+% the head is identical to the left of the body.
+%
+% \medskip
+% \begin{tabular}{lll}
+% \textbf{value} & \textbf{axis} & \textbf{comments}\\\hline
+% media & x & left=0, right=\cs{pdfpagewidth} \\
+% paper & x & left=0, right=\cs{paperwidth}\\
+% stock & x & derived from paper\\
+% media & y & bottom=0, top=\cs{pdfpageheigh}\\
+% paper & y & top=\cs{pdfpageheight}, bottom=top-\cs{paperheight}\\
+% stock & y & top derived from paper\\
+% head & x & calculated with hoffset, horigin, etc\\
+% head & y & calculated\\
+% body & x & = head value\\%
+% body & y & = head bottom - \cs{headsep}\\
+% foot & x & = head\\
+% foot & y & calculated from body bottom and \cs{footskip}\\
+% marginpar & x &different on odd/even pages! \\
+% marginpar & y & = body %
+% \end{tabular}
+%
% \subsection{Module \xmodule{dotfill}}
%
% \begin{declcs}{zdotfill}
@@ -1433,6 +1454,17 @@ and the derived files
% this macro as extension. \cs{XR@ext} is used if
% \xpackage{hyperref} is loaded, otherwise |pdf|.
%
+% \subsection{Module \xmodule{pageattr}}
+%
+% This module allows to recover the content of the register
+% \cs{pdfpageattr} and \cs{pdfpagesattr} in pdftex and the equivalent register
+% in luatex. There is no user command. Programmer commands are
+%
+% \begin{quote}
+% |\zref@pdfpageattr{|\meta{absolute page number}|}|
+%
+% |\zref@pdfpagesattr{|\meta{absolute page number}|}|
+% \end{quote}
% \section{ToDo}\label{sec:todo}
%
% Among other things the following issues are left for future work:
@@ -1631,7 +1663,7 @@ the height difference of the two baselines is
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref}
- [2019/11/29 v2.28 A new reference scheme for LaTeX (HO)]%
+ [2020-03-03 v2.29 A new reference scheme for LaTeX (HO)]%
% \end{macrocode}
%
% \subsubsection{Load basic module}
@@ -1718,7 +1750,7 @@ the height difference of the two baselines is
%<*base>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-base}%
- [2019/11/29 v2.28 Module base for zref (HO)]%
+ [2020-03-03 v2.29 Module base for zref (HO)]%
% \end{macrocode}
%
% \subsubsection{Utilities}
@@ -3025,7 +3057,7 @@ the height difference of the two baselines is
%<*user>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-user}%
- [2019/11/29 v2.28 Module user for zref (HO)]%
+ [2020-03-03 v2.29 Module user for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3116,7 +3148,7 @@ the height difference of the two baselines is
%<*abspage>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-abspage}%
- [2019/11/29 v2.28 Module abspage for zref (HO)]%
+ [2020-03-03 v2.29 Module abspage for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3164,7 +3196,7 @@ the height difference of the two baselines is
%<*counter>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-counter}%
- [2019/11/29 v2.28 Module counter for zref (HO)]%
+ [2020-03-03 v2.29 Module counter for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3204,7 +3236,7 @@ the height difference of the two baselines is
%<*lastpage>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-lastpage}%
- [2019/11/29 v2.28 Module lastpage for zref (HO)]%
+ [2020-03-03 v2.29 Module lastpage for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\RequirePackage{zref-abspage}[2019/11/29]
\RequirePackage{atveryend}[2009/12/07]
@@ -3276,7 +3308,7 @@ the height difference of the two baselines is
%<*thepage>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-thepage}%
- [2019/11/29 v2.28 Module thepage for zref (HO)]%
+ [2020-03-03 v2.29 Module thepage for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3351,7 +3383,7 @@ the height difference of the two baselines is
%<*nextpage>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-nextpage}%
- [2019/11/29 v2.28 Module nextpage for zref (HO)]%
+ [2020-03-03 v2.29 Module nextpage for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3455,7 +3487,7 @@ the height difference of the two baselines is
%<*totpages>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-totpages}%
- [2019/11/29 v2.28 Module totpages for zref (HO)]%
+ [2020-03-03 v2.29 Module totpages for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3497,7 +3529,7 @@ the height difference of the two baselines is
%<*pagelayout>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-pagelayout}%
- [2019/11/29 v2.28 Module pagelayout for zref (HO)]%
+ [2020-03-03 v2.29 Module pagelayout for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3511,39 +3543,6 @@ the height difference of the two baselines is
\RequirePackage{atveryend}[2010/03/24]
% \end{macrocode}
%
-% \subsubsection{Support for \hologo{LuaTeX}}
-%
-% \begin{macrocode}
-\ifluatex
- \ifnum\luatexversion<39 %
- \else
- \begingroup
- \escapechar=-1 %
- \def\ZREF@temp#1{%
- \ltx@IfUndefined{\string#1}{%
- \let#1\ltx@undefined
- \directlua{%
- if tex.enableprimitives then %
- tex.enableprimitives('', {'\string#1'})%
- end%
- }%
- \ltx@ifundefined{\string#1}{%
- }{%
- \global#1=#1%
- \@PackageInfoNoLine{zref-pagelayout}{%
- \string#1 enabled%
- }%
- }%
- }{}%
- }%
- \ZREF@temp\pdfpagewidth
- \ZREF@temp\pdfpageheight
- \ZREF@temp\pdfhorigin
- \ZREF@temp\pdfvorigin
- \endgroup
- \fi
-\fi
-% \end{macrocode}
%
% \subsubsection{Define layout properties}
%
@@ -3569,10 +3568,29 @@ the height difference of the two baselines is
\ZREF@temp\stockheight % memoir.cls, crop.sty
\ZREF@temp\mediawidth % VTeX
\ZREF@temp\mediaheight % VTeX
+\ifluatex
+\zref@newprop*{pdfvorigin}%
+ [\number\pdfvariable vorigin]% hash-ok
+ {\number\pdfvariable vorigin}%
+\zref@addprop{thepage}{pdfvorigin}
+\zref@newprop*{pdfhorigin}%
+ [\number\pdfvariable horigin]% hash-ok
+ {\number\pdfvariable horigin}%
+\zref@addprop{thepage}{pdfhorigin}
+\zref@newprop*{pdfpageheight}%
+ [\number\pageheight]% hash-ok
+ {\number\pageheight}%
+\zref@addprop{thepage}{pdfpageheight}
+\zref@newprop*{pdfpagewidth}%
+ [\number\pagewidth]% hash-ok
+ {\number\pagewidth}%
+\zref@addprop{thepage}{pdfpagewidth}
+\else
\ZREF@temp\pdfpagewidth
\ZREF@temp\pdfpageheight
\ZREF@temp\pdfhorigin
\ZREF@temp\pdfvorigin
+\fi
\ZREF@temp\hoffset
\ZREF@temp\voffset
\ZREF@temp\topmargin
@@ -3739,7 +3757,7 @@ the height difference of the two baselines is
%<*pageattr>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-pageattr}%
- [2019/11/29 v2.28 Module pageattr for zref (HO)]%
+ [2020-03-03 v2.29 Module pageattr for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -3751,61 +3769,48 @@ the height difference of the two baselines is
\RequirePackage{iftex}[2019/11/07]%
% \end{macrocode}
%
-% \begin{macrocode}
-\ifluatex
- \ifnum\luatexversion<39 %
- \else
- \begingroup
- \escapechar=-1 %
- \def\ZREF@temp#1{%
- \ltx@IfUndefined{\string#1}{%
- \let#1\ltx@undefined
- \directlua{%
- if tex.enableprimitives then %
- tex.enableprimitives('', {'\string#1'})%
- end%
- }%
- \ltx@ifundefined{\string#1}{%
- }{%
- \global#1=#1%
- \@PackageInfoNoLine{zref-pageattr}{%
- \string#1 enabled%
- }%
- }%
- }{}%
- }%
- \ZREF@temp\pdfpageattr
- \ZREF@temp\pdfpagesattr
- \endgroup
- \fi
-\fi
-% \end{macrocode}
%
% \begin{macrocode}
\let\ZREF@temp=N%
-\ltx@IfUndefined{pdfpageattr}{%
+\ifluatex
+\expandafter\@firstoftwo
+\else
+\expandafter\@secondoftwo
+\fi
+{%luatex
+ \RequirePackage{zref-thepage}[2019/11/29]
+ \RequirePackage{zref-lastpage}[2019/11/29]%
+ \zref@newprop*{pdfpageattr}[]{\zref@hex{\the\pdfvariable pageattr}}%
+ \zref@addprop{thepage}{pdfpageattr}%
+ \zref@newprop*{pdfpagesattr}[]{\zref@hex{\the\pdfvariable pagesattr}}%
+ \zref@addprop{LastPage}{pdfpagesattr}%
+ \let\ZREF@temp=Y%
+}
+{%other
+ \ltx@IfUndefined{pdfpageattr}{%
\@PackageInfoNoLine{zref-pageattr}{%
\string\pdfpageattr\space is not available%
}%
\def\zref@pdfpageattr#1{}%
\def\zref@pdfpageattr@used#1{}%
-}{%
+ }{%
\RequirePackage{zref-thepage}[2019/11/29]%
\zref@newprop*{pdfpageattr}[]{\zref@hex{\the\pdfpageattr}}%
\zref@addprop{thepage}{pdfpageattr}%
\let\ZREF@temp=Y%
-}
-\ltx@IfUndefined{pdfpagesattr}{%
+ }
+ \ltx@IfUndefined{pdfpagesattr}{%
\@PackageInfoNoLine{zref-pageattr}{%
\string\pdfpagesattr\space is not available%
}%
\def\zref@pdfpagesattr{}%
\def\zref@pdfpagesattr@used{}%
-}{%
+ }{%
\RequirePackage{zref-lastpage}[2019/11/29]%
\zref@newprop*{pdfpagesattr}[]{\zref@hex{\the\pdfpagesattr}}%
\zref@addprop{LastPage}{pdfpagesattr}%
\let\ZREF@temp=Y%
+ }%
}%
% \end{macrocode}
% \begin{macrocode}
@@ -3863,12 +3868,23 @@ the height difference of the two baselines is
% \end{macro}
% \begin{macro}{\ZREF@pa@AtVeryEnd}
% \begin{macrocode}
-\ltx@IfUndefined{pdfpageattr}{%
+\let\ZREF@temp=Y%
+\ltx@IfUndefined{pdfpageattr}{}{\let\ZREF@temp=N}
+\ifluatex \let\ZREF@temp=N \fi
+\ifx\ZREF@temp Y
+ \expandafter\@firstoftwo
+\else
+ \expandafter\@secondoftwo
+\fi
+ {%
\def\ZREF@pa@AtVeryEnd{}%
-}{%
+ }
+ {%
\def\ZREF@pa@AtVeryEnd{%
\begingroup
- \toks@{List of \ltx@backslashchar pdfpageattr:\MessageBreak}%
+ \toks@{List of \ltx@backslashchar
+ \ifluatex pdfvariable\else pdf\fi
+ pdfpageattr:\MessageBreak}%
\count@=1 %
\ZREF@pa@ListPage
\edef\x{\endgroup
@@ -3882,11 +3898,13 @@ the height difference of the two baselines is
% \end{macro}
% \begin{macro}{\zref@pageattr}
% \begin{macrocode}
-\def\zref@pageattr#1{%
+\def\zref@pdfpageattr#1{%
\zref@unhex{%
\zref@extract{thepage\ZREF@number{#1}}{pdfpageattr}%
}%
}
+% compability, \zref@pageattr was defined in older versions
+\let\zref@pageattr\zref@pdfpageattr
% \end{macrocode}
% \end{macro}
% \begin{macro}{\zref@pageattr@used}
@@ -3921,8 +3939,13 @@ the height difference of the two baselines is
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
-\ltx@IfUndefined{pdfpagesattr}{%
-}{%
+\let\ZREF@temp=Y%
+\ltx@IfUndefined{pdfpagesattr}{}{\let\ZREF@temp=N}
+\ifluatex \let\ZREF@temp=N \fi
+\ifx\ZREF@temp N
+ \expandafter\@firstofone
+\fi
+ {%
% \end{macrocode}
% \begin{macro}{\zref@pdfpagesattr}
% \begin{macrocode}
@@ -3943,7 +3966,9 @@ the height difference of the two baselines is
% \begin{macrocode}
\ltx@LocalAppendToMacro\ZREF@pa@AtVeryEnd{%
\@PackageInfoNoLine{zref-pageattr}{%
- \ltx@backslashchar pdfpagesattr:\MessageBreak
+ \ltx@backslashchar
+ \ifluatex pdfvariable\else pdf\fi
+ pagesattr:\MessageBreak
<<\zref@pdfpagesattr>>%
\MessageBreak
}%
@@ -3964,7 +3989,7 @@ the height difference of the two baselines is
%<*marks>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-marks}%
- [2019/11/29 v2.28 Module marks for zref (HO)]%
+ [2020-03-03 v2.29 Module marks for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -4070,7 +4095,7 @@ the height difference of the two baselines is
%<*runs>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-runs}%
- [2019/11/29 v2.28 Module runs for zref (HO)]%
+ [2020-03-03 v2.29 Module runs for zref (HO)]%
% \end{macrocode}
%
% \begin{macro}{\zruns}
@@ -4102,7 +4127,7 @@ the height difference of the two baselines is
%<*perpage>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-perpage}%
- [2019/11/29 v2.28 Module perpage for zref (HO)]%
+ [2020-03-03 v2.29 Module perpage for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -4284,7 +4309,7 @@ the height difference of the two baselines is
%<*titleref>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-titleref}%
- [2019/11/29 v2.28 Module titleref for zref (HO)]%
+ [2020-03-03 v2.29 Module titleref for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -4697,7 +4722,7 @@ the height difference of the two baselines is
%<*xr>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-xr}%
- [2019/11/29 v2.28 Module xr for zref (HO)]%
+ [2020-03-03 v2.29 Module xr for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -5233,7 +5258,7 @@ the height difference of the two baselines is
%<*hyperref>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-hyperref}%
- [2019/11/29 v2.28 Module hyperref for zref (HO)]%
+ [2020-03-03 v2.29 Module hyperref for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -5263,26 +5288,19 @@ the height difference of the two baselines is
%<*savepos>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-savepos}%
- [2019/11/29 v2.28 Module savepos for zref (HO)]%
+ [2020-03-03 v2.29 Module savepos for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
\expandafter\endinput
\fi
% \end{macrocode}
-% LuaTeX compatibility
-% \begin{macrocode}
-\ifx\pdfsavepos\@undefined
- \let\pdfsavepos \savepos
- \let\pdflastxpos \lastxpos
- \let\pdflastypos \lastypos
-\fi
-% \end{macrocode}
%
% \subsubsection{Availability}
%
% First we check, whether the feature is available.
% \begin{macrocode}
+\ifx\directlua\@undefined
\ltx@IfUndefined{pdfsavepos}{%
\PackageError\ZREF@name{%
\string\pdfsavepos\space is not supported.\MessageBreak
@@ -5290,13 +5308,13 @@ the height difference of the two baselines is
}\ZREF@UpdatePdfTeX
\endinput
}{}%
+\fi
% \end{macrocode}
% In PDF mode we are done. However support for DVI mode
% was added later in version 1.40.0. In earlier versions
% \cs{pdfsavepos} is defined, but its execution raises
% an error. Note that \hologo{XeTeX} also provides \cs{pdfsavepos}.
% \begin{macrocode}
-\RequirePackage{ifpdf}
\ifpdf
\else
\ltx@IfUndefined{pdftexversion}{%
@@ -5317,8 +5335,13 @@ the height difference of the two baselines is
%
% \begin{macrocode}
\zref@newlist{savepos}
-\zref@newprop*{posx}[0]{\the\pdflastxpos}
-\zref@newprop*{posy}[0]{\the\pdflastypos}
+\ifx\directlua\@undefined
+ \zref@newprop*{posx}[0]{\the\pdflastxpos}
+ \zref@newprop*{posy}[0]{\the\pdflastypos}
+\else
+ \zref@newprop*{posx}[0]{\the\lastxpos}
+ \zref@newprop*{posy}[0]{\the\lastypos}
+\fi
\zref@addprops{savepos}{posx,posy}
% \end{macrocode}
%
@@ -5326,11 +5349,19 @@ the height difference of the two baselines is
%
% \begin{macro}{\zref@savepos}
% \begin{macrocode}
-\def\zref@savepos{%
- \if@filesw
- \pdfsavepos
- \fi
-}
+\ifx\directlua\@undefined
+ \def\zref@savepos{%
+ \if@filesw
+ \pdfsavepos
+ \fi
+ }
+\else
+ \def\zref@savepos{%
+ \if@filesw
+ \savepos
+ \fi
+ }
+\fi
% \end{macrocode}
% \end{macro}
%
@@ -5430,7 +5461,7 @@ the height difference of the two baselines is
%<*abspos>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-abspos}%
- [2019/11/29 v2.28 Module abspos for zref (HO)]%
+ [2020-03-03 v2.29 Module abspos for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -5450,10 +5481,6 @@ the height difference of the two baselines is
\zref@addprop{savepos}{abspage}
% \end{macrocode}
%
-% \begin{macrocode}
-\RequirePackage{ifpdf}[2010/09/13]
-% \end{macrocode}
-%
% \begin{macro}{\zref@absposx}
% \begin{macrocode}
\newcommand*{\zref@absposx}[3]{%
@@ -5655,6 +5682,9 @@ the height difference of the two baselines is
pdfpagewidth%
}%
}
+\ifluatex
+\def\ZREF@abspos@media@width{pdfpagewidth}%
+\fi
% \end{macrocode}
% \end{macro}
% \begin{macro}{\ZREF@abspos@media@height}
@@ -5682,6 +5712,18 @@ the height difference of the two baselines is
\noexpand\fi
}%
}
+\ifluatex
+\edef\ZREF@abspos@media@height{%
+ \noexpand\ifcase\pageheight
+ \ltx@ifundefined{stockheight}{%
+ paperheight%
+ }{%
+ stockheight%
+ }%
+ \noexpand\else
+ pdfpageheight%
+ \noexpand\fi}%
+\fi
% \end{macrocode}
% \end{macro}
%
@@ -5778,14 +5820,22 @@ the height difference of the two baselines is
%
% \subsubsection{Origin}
%
+% There doesn't seem a good reason to make these tests depend on pdf mode
+% in current engines, so comment out the \verb|\ifpdf| tests.
% \begin{macro}{\ZREF@abspos@origin@x}
% \begin{macrocode}
\let\ZREF@temp\ltx@two
\ltx@IfUndefined{pdfhorigin}{}{%
- \ifpdf
+% \ifpdf
\let\ZREF@temp\ltx@zero
- \fi
+% \fi
}
+\ifluatex
+% \ifpdf
+ \let\ZREF@temp\ltx@zero
+% \fi
+\fi
+
\ifx\ZREF@temp\ltx@two
\ifnum\mag=1000 %
\let\ZREF@temp\ltx@one
@@ -5810,10 +5860,15 @@ the height difference of the two baselines is
% \begin{macrocode}
\let\ZREF@temp\ltx@two
\ltx@IfUndefined{pdfvorigin}{}{%
- \ifpdf
+% \ifpdf
\let\ZREF@temp\ltx@zero
- \fi
+% \fi
}
+\ifluatex
+% \ifpdf
+ \let\ZREF@temp\ltx@zero
+% \fi
+\fi
\ifx\ZREF@temp\ltx@two
\ifnum\mag=1000 %
\let\ZREF@temp\ltx@one
@@ -6059,7 +6114,7 @@ the height difference of the two baselines is
%<*dotfill>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-dotfill}%
- [2019/11/29 v2.28 Module dotfill for zref (HO)]%
+ [2020-03-03 v2.29 Module dotfill for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -6159,7 +6214,7 @@ the height difference of the two baselines is
%<*env>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{zref-env}%
- [2019/11/29 v2.28 Module env for zref (HO)]%
+ [2020-03-03 v2.29 Module env for zref (HO)]%
\RequirePackage{zref-base}[2019/11/29]
\ifx\ZREF@base@ok Y%
\else
@@ -6195,201 +6250,7 @@ the height difference of the two baselines is
%</env>
% \end{macrocode}
%
-%
-% \section{Test}
-%
-% \subsection{\cs{zref@localaddprop}}
-%
-% \begin{macrocode}
-%<*test1>
-\NeedsTeXFormat{LaTeX2e}
-\nofiles
-\documentclass{article}
-\usepackage{zref-base}[2019/11/29]
-\usepackage{qstest}
-\IncludeTests{*}
-\LogTests{log}{*}{*}
-
-\makeatletter
-\def\ExpectList#1#2{%
- \expandafter\expandafter\expandafter\Expect
- \expandafter\expandafter\expandafter{\csname Z@L@#1\endcsname}{#2}%
-}
-\begin{qstest}{localaddprop}{localaddprop}
- \ExpectList{main}{\default\page}%
- \Expect{undefined}*{\meaning\foobar}%
- \zref@newprop{foobar}{FOO}%
- \Expect{undefined}*{\meaning\foobar}%
- \zref@newlist{alist}%
- \ExpectList{alist}{}%
- \begingroup
- \zref@localaddprop{main}{foobar}%
- \Expect{undefined}*{\meaning\foobar}%
- \ExpectList{main}{\default\page\foobar}%
- \zref@localaddprop{alist}{page}%
- \ExpectList{alist}{\page}%
- \endgroup
- \ExpectList{main}{\default\page}%
- \ExpectList{alist}{}%
- \zref@addprop{alist}{foobar}%
- \ExpectList{alist}{\foobar}%
- \Expect{undefined}*{\meaning\foobar}%
-\end{qstest}
-\@@end
-%</test1>
-% \end{macrocode}
-%
-% \subsection{Module \xmodule{base}}
-%
-% \begin{macrocode}
-%<*test-base>
-\NeedsTeXFormat{LaTeX2e}
-\documentclass{article}
-\usepackage{zref-base,zref-titleref}[2019/11/29]
-\usepackage{qstest}
-\IncludeTests{*}
-\LogTests{log}{*}{*}
-
-\makeatletter
-\newcommand*{\DefExpand}[2]{%
- \expandafter\expandafter\expandafter\def
- \expandafter\expandafter\expandafter#1%
- \expandafter\expandafter\expandafter{#2}%
- \@onelevel@sanitize#1%
-}
-\newcommand*{\Test}[3]{%
- \Expect{#2}*{#1}%
- \zref@wrapper@unexpanded{%
- \Expect*{#3}*{#1}%
- }%
- \DefExpand\x{#1}%
- \Expect*{#3}*{\x}%
-}
-\makeatother
-
-\begin{document}
-\section{\textit{Hello} \textbf{World}}
-\label{sec:hello}
-\makeatletter
-\zref@newprop{foo}[\@empty D\@empty efault]{\@empty V\@empty alue}
-\begin{qstest}{getcurrent}{getcurrent}
- \Test{\zref@getcurrent{foo}}%
- {Value}{\noexpand\@empty V\noexpand\@empty alue}%
- \Test{\zref@getcurrent{xy}}{}{}%
-\end{qstest}
-\begin{qstest}{extract}{extract}
- \def\textbf#1{<#1>}%
- \def\textit#1{[#1]}% hash-ok
- \Test{\zref@extractdefault{xy}{page}{\@empty D\@empty efault}}%
- {Default}{\noexpand\@empty D\noexpand\@empty efault}%
- \Test{\zref@extractdefault{sec:hello}{foo}{\@empty A\@empty B}}%
- {AB}{\noexpand\@empty A\noexpand\@empty B}%
- \Test{\zref@extract{sec:hello}{foo}}%
- {Default}{\noexpand\@empty D\noexpand\@empty efault}%
- \zref@ifrefundefined{sec:hello}{%
- }{%
- \Test{\zref@extract{sec:hello}{default}}{1}{1}%
- \Test{\zref@extract{sec:hello}{title}}%
- {[Hello] <World>}%
- {\noexpand\textit{Hello} \noexpand\textbf{World}}%
- }%
-\end{qstest}
-\end{document}
-%</test-base>
-% \end{macrocode}
-%
-% \subsection{Module \xmodule{runs}}
-%
-% \begin{macrocode}
-%<*test-runs>
-\NeedsTeXFormat{LaTeX2e}
-\documentclass{article}
-\usepackage{zref-runs}[2019/11/29]
-\usepackage{qstest}
-\IncludeTests{*}
-\LogTests{log}{*}{*}
-
-\begin{qstest}{zruns-preamble}{zruns-preamble}
- \Expect{0}*{\zruns}%
-\end{qstest}
-
-\AtBeginDocument{%
- \begin{qstest}{zruns-atbegindocument}{zruns-atbegindocument}%
- \Expect*{\number\ExpectRuns}*{\zruns}%
- \end{qstest}%
-}
-
-\begin{document}
-\begin{qstest}{zruns-document}{zruns-document}
- \Expect*{\number\ExpectRuns}*{\zruns}%
-\end{qstest}
-\end{document}
-%</test-runs>
-% \end{macrocode}
-%
-% \subsection{Module \xmodule{titleref}}
-%
-% \begin{macrocode}
-%<*test-titleref-memoir>
-\NeedsTeXFormat{LaTeX2e}
-\documentclass{memoir}
-\usepackage{zref-titleref}[2019/11/29]
-\usepackage{qstest}
-\IncludeTests{*}
-\LogTests{log}{*}{*}
-\begin{document}
-\makeatletter
-\def\List{}
-\def\Label#1{%
- \zref@label{#1}%
- \g@addto@macro\List{%
- \par
- #1: [\ztitleref{#1}]%
- }%
- \mbox{}%
- \zref@refused{#1}%
- \zref@ifrefundefined{#1}{%
- }{%
- \begingroup
- \edef\x{\zref@extract{#1}{title}}%
- \Expect{OK/}*{\expandafter\ltx@carthree\x{}{}{}\@nil}%
- \endgroup
- }%
-}
-\def\Test#1{%
- \csname#1\endcsname*{OK/#1}%
- \Label{#1*}%
- \csname#1\endcsname{OK/#1}%
- \Label{#1}%
- \csname#1\endcsname[OK/#1-toc]%
- {WRONG-in-titleref/#1-toc-2}%
- \Label{#1-toc}%
- \expandafter\ifx\csname#1\endcsname\part
- \else
- \headnamereffalse
- \csname#1\endcsname[OK/#1-th-toc]%
- [WRONG-in-titleref/#1-th-toc-2]%
- {WRONG-in-titleref/#1-th-toc-3}%
- \Label{#1-th-toc}%
- \headnamereftrue
- \csname#1\endcsname[WRONG-in-titleref/#1-th-head-1]%
- [OK/#1-th-head]%
- {WRONG-in-titleref/#1-th-head-3}%
- \Label{#1-th-head}%
- \fi
-}
-\begin{qstest}{section}{section}
- \@for\x:=part,chapter,section,subsection,subsubsection\do{%
- \expandafter\Test\expandafter{\x}%
- }%
-\end{qstest}
-\newpage
-\List
-\end{document}
-%</test-titleref-memoir>
-% \end{macrocode}
-%
-% \section{Installation}
+%% \section{Installation}
%
% \subsection{Download}
%
@@ -6462,10 +6323,6 @@ the height difference of the two baselines is
% zref-example.tex & doc/latex/zref/zref-example.tex\\
% zref-example-lastpage.tex & doc/latex/zref/zref-example-lastpage.tex\\
% zref-example-nextpage.tex & doc/latex/zref/zref-example-nextpage.tex\\
-% test/zref-test1.tex & doc/latex/zref/test/zref-test1.tex\\
-% test/zref-test-base.tex & doc/latex/zref/test/zref-test-base.tex\\
-% test/zref-test-runs.tex & doc/latex/zref/test/zref-test-runs.tex\\
-% test/zref-test-titleref-memoir.tex & doc/latex/zref/test/zref-test-titleref-memoir.tex\\
% zref.dtx & source/latex/zref/zref.dtx\\
% \end{tabular}^^A
% }^^A
@@ -6865,6 +6722,19 @@ the height difference of the two baselines is
% \item
% Use \xpackage{iftex} directly.
% \end{Version}
+% \begin{Version}{2020-03-03 v2.29}
+% \item
+% adapted in module zref-pagelayout the properties pdfhorigin, pdfvorigin,
+% pdfpagewidth, pdfpageheight for luatex to the right primitives.
+% \item
+% Removed no longer needed code for older lualatex versions.
+% \item added some documentation of the abspos module.
+% \item adapted the abspos module to the new luatex primitives.
+% \item adapted pageattr module to the new luatex primitives.
+% \item added short documentation for pageattr module
+% \item use luatex command names directly in zref-savepos rather than defining pdftex compatibility names.
+% \item allow zref-abspos to use \verb|\pdf[vh]origin| in dvi mode.
+% \end{Version}
% \end{History}
%
% \PrintIndex
diff --git a/macros/latex/contrib/zref/zref.pdf b/macros/latex/contrib/zref/zref.pdf
index fee81c695c..79542ad086 100644
--- a/macros/latex/contrib/zref/zref.pdf
+++ b/macros/latex/contrib/zref/zref.pdf
Binary files differ
diff --git a/fonts/aecc/COPYING b/obsolete/fonts/aecc/COPYING
index 90e5e3ab79..90e5e3ab79 100644
--- a/fonts/aecc/COPYING
+++ b/obsolete/fonts/aecc/COPYING
diff --git a/fonts/aecc/MANIFEST b/obsolete/fonts/aecc/MANIFEST
index a966adbee0..a966adbee0 100644
--- a/fonts/aecc/MANIFEST
+++ b/obsolete/fonts/aecc/MANIFEST
diff --git a/fonts/aecc/README b/obsolete/fonts/aecc/README
index f113190942..f113190942 100644
--- a/fonts/aecc/README
+++ b/obsolete/fonts/aecc/README
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm
index 4258559df0..4258559df0 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr10.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm
index fa91a1ffe1..fa91a1ffe1 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr5.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm
index 85216e5403..85216e5403 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr6.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm
index 8c2cd12f0d..8c2cd12f0d 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr7.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm
index 5794930fa5..5794930fa5 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr8.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm
index 627c7f4085..627c7f4085 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccr9.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm
index 1bd1efb69e..1bd1efb69e 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsc10.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm
index e3a3a91f0d..e3a3a91f0d 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl10.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm
index a22dd740d0..a22dd740d0 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccsl9.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm
index b24c79010a..b24c79010a 100644
--- a/fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm
+++ b/obsolete/fonts/aecc/fonts/tfm/contrib/aecc/aeccti10.tfm
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf
index 498d95b1b1..498d95b1b1 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr10.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf
index 6bd8384cf7..6bd8384cf7 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr5.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf
index 19ee04ff0c..19ee04ff0c 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr6.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf
index 4ec98d7377..4ec98d7377 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr7.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf
index f1f11bf1ae..f1f11bf1ae 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr8.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf
index fb409b6e7d..fb409b6e7d 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccr9.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf
index d1ef59e4c0..d1ef59e4c0 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsc10.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf
index 0987a3f8b6..0987a3f8b6 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl10.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf
index 10fa7a7d33..10fa7a7d33 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccsl9.vf
Binary files differ
diff --git a/fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf
index b855e1e345..b855e1e345 100644
--- a/fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf
+++ b/obsolete/fonts/aecc/fonts/vf/contrib/aecc/aeccti10.vf
Binary files differ
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex
index b41f731ed3..b41f731ed3 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aeccfonts.tex
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx
index 3f92d0bba3..3f92d0bba3 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aefonts.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx
index bc4d6adeec..bc4d6adeec 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehax5.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx
index 5f4c5c00f6..5f4c5c00f6 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxit.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx
index 04f3c5bad5..04f3c5bad5 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxrm.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx
index d841258c8e..d841258c8e 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsc.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx
index b0f02e0171..b0f02e0171 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxsl.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx
index 261b9f2447..261b9f2447 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aehaxss.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx
index cb4554641c..cb4554641c 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatin.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx
index a3b57860d7..a3b57860d7 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aelatint.mtx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aesample.tex b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aesample.tex
index 16b37f5d2c..16b37f5d2c 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aesample.tex
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aesample.tex
diff --git a/fonts/aecc/src/fonts/contrib/aecc/aet1.etx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aet1.etx
index 6fe6337118..6fe6337118 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/aet1.etx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/aet1.etx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/bxittest.tex b/obsolete/fonts/aecc/src/fonts/contrib/aecc/bxittest.tex
index 788fcb4f7c..788fcb4f7c 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/bxittest.tex
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/bxittest.tex
diff --git a/fonts/aecc/src/fonts/contrib/aecc/clean b/obsolete/fonts/aecc/src/fonts/contrib/aecc/clean
index 7455fef0cd..7455fef0cd 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/clean
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/clean
diff --git a/fonts/aecc/src/fonts/contrib/aecc/germtest.tex b/obsolete/fonts/aecc/src/fonts/contrib/aecc/germtest.tex
index d8e4851bfa..d8e4851bfa 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/germtest.tex
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/germtest.tex
diff --git a/fonts/aecc/src/fonts/contrib/aecc/go b/obsolete/fonts/aecc/src/fonts/contrib/aecc/go
index c2c8dacd44..c2c8dacd44 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/go
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/go
diff --git a/fonts/aecc/src/fonts/contrib/aecc/install b/obsolete/fonts/aecc/src/fonts/contrib/aecc/install
index b271039e56..b271039e56 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/install
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/install
diff --git a/fonts/aecc/src/fonts/contrib/aecc/makepl b/obsolete/fonts/aecc/src/fonts/contrib/aecc/makepl
index b4f1afc517..b4f1afc517 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/makepl
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/makepl
diff --git a/fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx b/obsolete/fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx
index 24b1028c4c..24b1028c4c 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/ot1tt.etx
diff --git a/fonts/aecc/src/fonts/contrib/aecc/slitest.tex b/obsolete/fonts/aecc/src/fonts/contrib/aecc/slitest.tex
index 742497f533..742497f533 100644
--- a/fonts/aecc/src/fonts/contrib/aecc/slitest.tex
+++ b/obsolete/fonts/aecc/src/fonts/contrib/aecc/slitest.tex
diff --git a/fonts/aecc/tex/latex/contrib/aecc/aecc.sty b/obsolete/fonts/aecc/tex/latex/contrib/aecc/aecc.sty
index 998aa41f5c..998aa41f5c 100644
--- a/fonts/aecc/tex/latex/contrib/aecc/aecc.sty
+++ b/obsolete/fonts/aecc/tex/latex/contrib/aecc/aecc.sty
diff --git a/fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd b/obsolete/fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd
index b86594417e..b86594417e 100644
--- a/fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd
+++ b/obsolete/fonts/aecc/tex/latex/contrib/aecc/t1aeccr.fd
diff --git a/language/greek/bgreek/README b/obsolete/language/greek/bgreek/README
index c2d573c1aa..c2d573c1aa 120000
--- a/language/greek/bgreek/README
+++ b/obsolete/language/greek/bgreek/README
diff --git a/language/greek/bgreek/bgman.pdf b/obsolete/language/greek/bgreek/bgman.pdf
index bfe4fbb770..bfe4fbb770 120000
--- a/language/greek/bgreek/bgman.pdf
+++ b/obsolete/language/greek/bgreek/bgman.pdf
diff --git a/language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT b/obsolete/language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT
index 37d18853ff..37d18853ff 100644
--- a/language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT
+++ b/obsolete/language/greek/bgreek/doc/latex/bgreek/MANIFEST.TXT
diff --git a/language/greek/bgreek/doc/latex/bgreek/README b/obsolete/language/greek/bgreek/doc/latex/bgreek/README
index 608136597c..608136597c 100644
--- a/language/greek/bgreek/doc/latex/bgreek/README
+++ b/obsolete/language/greek/bgreek/doc/latex/bgreek/README
diff --git a/language/greek/bgreek/doc/latex/bgreek/bgman.pdf b/obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.pdf
index f6a7f07e4f..f6a7f07e4f 100644
--- a/language/greek/bgreek/doc/latex/bgreek/bgman.pdf
+++ b/obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.pdf
Binary files differ
diff --git a/language/greek/bgreek/doc/latex/bgreek/bgman.tex b/obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.tex
index dd15f561cd..dd15f561cd 100644
--- a/language/greek/bgreek/doc/latex/bgreek/bgman.tex
+++ b/obsolete/language/greek/bgreek/doc/latex/bgreek/bgman.tex
diff --git a/language/greek/bgreek/doc/latex/bgreek/bgreek.etx b/obsolete/language/greek/bgreek/doc/latex/bgreek/bgreek.etx
index d6b0bf99f6..d6b0bf99f6 100644
--- a/language/greek/bgreek/doc/latex/bgreek/bgreek.etx
+++ b/obsolete/language/greek/bgreek/doc/latex/bgreek/bgreek.etx
diff --git a/language/greek/bgreek/doc/latex/bgreek/cbgreek.etx b/obsolete/language/greek/bgreek/doc/latex/bgreek/cbgreek.etx
index bddf679daf..bddf679daf 100644
--- a/language/greek/bgreek/doc/latex/bgreek/cbgreek.etx
+++ b/obsolete/language/greek/bgreek/doc/latex/bgreek/cbgreek.etx
diff --git a/language/greek/bgreek/doc/latex/bgreek/qbgreek.etx b/obsolete/language/greek/bgreek/doc/latex/bgreek/qbgreek.etx
index 55a963a910..55a963a910 100644
--- a/language/greek/bgreek/doc/latex/bgreek/qbgreek.etx
+++ b/obsolete/language/greek/bgreek/doc/latex/bgreek/qbgreek.etx
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm
index cb73d512db..cb73d512db 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm
index 2a72ddda10..2a72ddda10 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm
index 6be6e8830b..6be6e8830b 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm
index a04cf6d4a1..a04cf6d4a1 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm
index fcefb724c3..fcefb724c3 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm
index 76aa1428a4..76aa1428a4 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm
index f876a8aba0..f876a8aba0 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm
index 3bed1c8001..3bed1c8001 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm
index cb509fec8d..cb509fec8d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm
index 67170a73ff..67170a73ff 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm
index 537c78fb7f..537c78fb7f 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm
index 2f5461d526..2f5461d526 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmc2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm
index 88f4a561f8..88f4a561f8 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm
index 14abfb986d..14abfb986d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm
index 9df8799df5..9df8799df5 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm
index 81b98cdee8..81b98cdee8 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm
index c49944cbc4..c49944cbc4 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm
index 140fe82c2f..140fe82c2f 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm
index 85a02b42e6..85a02b42e6 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm
index a28d6d911e..a28d6d911e 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm
index 665a5d87b8..665a5d87b8 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm
index e23594709e..e23594709e 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm
index 6afc850a5d..6afc850a5d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm
index ee611870de..ee611870de 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmn2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm
index 88f4a561f8..88f4a561f8 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm
index 14abfb986d..14abfb986d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm
index 9df8799df5..9df8799df5 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm
index 81b98cdee8..81b98cdee8 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm
index c49944cbc4..c49944cbc4 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm
index 140fe82c2f..140fe82c2f 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm
index 85a02b42e6..85a02b42e6 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm
index a28d6d911e..a28d6d911e 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm
index 665a5d87b8..665a5d87b8 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm
index e23594709e..e23594709e 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm
index 6afc850a5d..6afc850a5d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm
index ee611870de..ee611870de 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgmo2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm
index efffe1507f..efffe1507f 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm
index 08e1cbba9d..08e1cbba9d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm
index 9e3a64f8bf..9e3a64f8bf 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm
index 8bbbc9889c..8bbbc9889c 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm
index 0e2a0affcc..0e2a0affcc 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm
index 37a2e5bb14..37a2e5bb14 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm
index c6326dcc78..c6326dcc78 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm
index d326fbe62f..d326fbe62f 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm
index c2500ba801..c2500ba801 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm
index 85445dd806..85445dd806 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm
index 0ea96f249d..0ea96f249d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm
index 56bc5ffa03..56bc5ffa03 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxc2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm
index 5ed0eb7966..5ed0eb7966 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm
index 59902b3d48..59902b3d48 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm
index 7cae1b85f1..7cae1b85f1 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm
index 70b8926b34..70b8926b34 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm
index c6d88f7a81..c6d88f7a81 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm
index ab1dd33c31..ab1dd33c31 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm
index f391f51d7c..f391f51d7c 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm
index 43e3c9d537..43e3c9d537 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm
index 6ee48eeb64..6ee48eeb64 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm
index eccb7fb426..eccb7fb426 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm
index 4fdb8edcf3..4fdb8edcf3 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm
index 2626c117f7..2626c117f7 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxn2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm
index 6e4f86bb6c..6e4f86bb6c 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm
index a08b96984f..a08b96984f 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm
index 3000839f76..3000839f76 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm
index 546f8dc78d..546f8dc78d 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm
index aef882fa77..aef882fa77 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm
index 264f1a2920..264f1a2920 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm
index 7b2c1d2973..7b2c1d2973 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm
index 511f9cc1ac..511f9cc1ac 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm
index 869db6e04c..869db6e04c 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm
index ed89bc92cc..ed89bc92cc 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm
index 13121e75f2..13121e75f2 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm
index 4165b26194..4165b26194 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bgxo2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm
index 994c4cbc01..994c4cbc01 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm
index f603880ba6..f603880ba6 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm
index 800875125b..800875125b 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm
index 6ac0716ce4..6ac0716ce4 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm
index 55089b5944..55089b5944 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm
index 63f3a6033f..63f3a6033f 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm
index 489c79c1fd..489c79c1fd 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm
index 29d2f00223..29d2f00223 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm
index a6947a76a5..a6947a76a5 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm
index 89a93ffd49..89a93ffd49 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm
index 7514896426..7514896426 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm
index 6ebf93cf32..6ebf93cf32 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmc2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm
index 0b962b4041..0b962b4041 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm
index b0fc6d1043..b0fc6d1043 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm
index fa0cc002ae..fa0cc002ae 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm
index f90f7c99e4..f90f7c99e4 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm
index 6c2220df38..6c2220df38 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm
index eafe12bfee..eafe12bfee 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm
index 90262538ef..90262538ef 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm
index 2c802a37d7..2c802a37d7 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm
index 300942de26..300942de26 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm
index 9e6a11e8cd..9e6a11e8cd 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm
index da34589629..da34589629 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm
index 4c255dbe2e..4c255dbe2e 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmn2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm
index 0b962b4041..0b962b4041 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm
index b0fc6d1043..b0fc6d1043 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm
index fa0cc002ae..fa0cc002ae 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm
index f90f7c99e4..f90f7c99e4 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm
index 6c2220df38..6c2220df38 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm
index eafe12bfee..eafe12bfee 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm
index 90262538ef..90262538ef 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm
index 2c802a37d7..2c802a37d7 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm
index 300942de26..300942de26 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm
index 9e6a11e8cd..9e6a11e8cd 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm
index da34589629..da34589629 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm
index 4c255dbe2e..4c255dbe2e 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqmo2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm
index b751d8681a..b751d8681a 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm
index 75a9e7166c..75a9e7166c 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm
index 2aded9c442..2aded9c442 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm
index 5a6ab52b68..5a6ab52b68 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm
index 22a8720836..22a8720836 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm
index 7b098cb923..7b098cb923 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm
index cf2a59e997..cf2a59e997 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm
index a25af2c700..a25af2c700 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm
index 7cb738dd46..7cb738dd46 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm
index e77c45b3bc..e77c45b3bc 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm
index a7e3adf8ed..a7e3adf8ed 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm
index 0860219756..0860219756 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxc2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm
index 5dbabbab11..5dbabbab11 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm
index e3bf48a8ee..e3bf48a8ee 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm
index d9db87941a..d9db87941a 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm
index c49d696c17..c49d696c17 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm
index 38012ef0c9..38012ef0c9 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm
index 6af56f6544..6af56f6544 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm
index b10d31aaf2..b10d31aaf2 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm
index 11bcb629c3..11bcb629c3 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm
index 882eafecb1..882eafecb1 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm
index 2055672897..2055672897 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm
index a9b5db9222..a9b5db9222 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm
index db6f90da48..db6f90da48 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxn2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm
index 20eea573f2..20eea573f2 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0500.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm
index 65d5b60e43..65d5b60e43 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0600.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm
index 8681517387..8681517387 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0700.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm
index 49cf7bb810..49cf7bb810 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0800.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm
index f69fb8dd93..f69fb8dd93 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo0900.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm
index d1100a0171..d1100a0171 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1000.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm
index b6d36f05fb..b6d36f05fb 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1095.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm
index 6a494923b8..6a494923b8 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1200.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm
index f417a8c08b..f417a8c08b 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1440.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm
index 8a11bcac9c..8a11bcac9c 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo1728.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm
index 034000c7ee..034000c7ee 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2074.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm
index 5d4c755095..5d4c755095 100644
--- a/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm
+++ b/obsolete/language/greek/bgreek/fonts/tfm/public/bgreek/bqxo2488.tfm
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf
index 5a79ce790c..5a79ce790c 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf
index da0920e15c..da0920e15c 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf
index 42c01042a4..42c01042a4 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf
index fc2a350554..fc2a350554 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf
index 1d4de5a8ef..1d4de5a8ef 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf
index c879d4e92e..c879d4e92e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf
index 585b6f9157..585b6f9157 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf
index b66248d244..b66248d244 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf
index 05e678cef3..05e678cef3 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf
index 3a0fc8b0ef..3a0fc8b0ef 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf
index 1f37df276e..1f37df276e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf
index b654b1f5e4..b654b1f5e4 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmc2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf
index ee8bc5785f..ee8bc5785f 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf
index 55e1435230..55e1435230 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf
index fb79fe01f4..fb79fe01f4 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf
index 5237e5244d..5237e5244d 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf
index 8344da9ee3..8344da9ee3 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf
index 6782033dc6..6782033dc6 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf
index dd5427ded4..dd5427ded4 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf
index 0538136d86..0538136d86 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf
index 34394d8c04..34394d8c04 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf
index 091f99192f..091f99192f 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf
index 3c5f4e67d0..3c5f4e67d0 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf
index 51c7cd0573..51c7cd0573 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmn2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf
index 0b50948342..0b50948342 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf
index 488bbaa558..488bbaa558 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf
index ea0ec063d7..ea0ec063d7 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf
index 823fb9fd88..823fb9fd88 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf
index 433f8dc7fb..433f8dc7fb 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf
index 76fcd5a8c1..76fcd5a8c1 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf
index 68e61bd069..68e61bd069 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf
index f874ab48e3..f874ab48e3 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf
index 573160454a..573160454a 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf
index e5d9ad956d..e5d9ad956d 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf
index d57165c542..d57165c542 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf
index 8e684f7816..8e684f7816 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgmo2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf
index 2b0cfb530a..2b0cfb530a 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf
index 7459994c77..7459994c77 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf
index a286255c03..a286255c03 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf
index fa0962c497..fa0962c497 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf
index 819f988529..819f988529 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf
index ac7cd1d39e..ac7cd1d39e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf
index 268aba1004..268aba1004 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf
index ea3945457d..ea3945457d 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf
index 032b2922f6..032b2922f6 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf
index 236ef1c752..236ef1c752 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf
index 6f32702d06..6f32702d06 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf
index 7472c470b1..7472c470b1 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxc2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf
index aa5a89f377..aa5a89f377 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf
index 8e8cfe3d09..8e8cfe3d09 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf
index a6c810c790..a6c810c790 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf
index 0f4048d468..0f4048d468 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf
index 27a09e3655..27a09e3655 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf
index bbb6dd2b02..bbb6dd2b02 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf
index dfbbeff041..dfbbeff041 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf
index a6b7fe71dc..a6b7fe71dc 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf
index 21f06f1328..21f06f1328 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf
index 0f76ae1a5b..0f76ae1a5b 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf
index 7849859da1..7849859da1 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf
index 033c7e6ad8..033c7e6ad8 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxn2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf
index 24552b40b8..24552b40b8 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf
index c603bd29f5..c603bd29f5 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf
index 104a571693..104a571693 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf
index 40ac073952..40ac073952 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf
index 3ab4ab359f..3ab4ab359f 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf
index c4c9c979a5..c4c9c979a5 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf
index 3ffd3a42e2..3ffd3a42e2 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf
index 4df32effc5..4df32effc5 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf
index 1ac88c3ce1..1ac88c3ce1 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf
index 535f47e6bc..535f47e6bc 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf
index d21e98fdcf..d21e98fdcf 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf
index a17707ff69..a17707ff69 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bgxo2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf
index c3ce9d5352..c3ce9d5352 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf
index 73dad52fe0..73dad52fe0 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf
index 64eeced82d..64eeced82d 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf
index 3b32f78bb0..3b32f78bb0 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf
index f7913784eb..f7913784eb 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf
index c523630c22..c523630c22 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf
index 4975ec5465..4975ec5465 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf
index 9e63de7834..9e63de7834 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf
index 57ead95d6d..57ead95d6d 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf
index f8a0c2b6c1..f8a0c2b6c1 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf
index d39f628898..d39f628898 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf
index 324d79c71c..324d79c71c 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmc2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf
index 6097299dd4..6097299dd4 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf
index 673098ad1b..673098ad1b 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf
index c93e046b07..c93e046b07 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf
index cdac968a15..cdac968a15 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf
index def60a5a4e..def60a5a4e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf
index 5722dbb9a5..5722dbb9a5 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf
index 3a30d51182..3a30d51182 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf
index 7bacefb37a..7bacefb37a 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf
index ccf51657d4..ccf51657d4 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf
index addbec5f65..addbec5f65 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf
index ad9b42d539..ad9b42d539 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf
index 95164fa437..95164fa437 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmn2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf
index 9709d4f72c..9709d4f72c 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf
index 2d1d536c04..2d1d536c04 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf
index 490c217bb3..490c217bb3 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf
index faf2659646..faf2659646 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf
index 7bb2def3af..7bb2def3af 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf
index edfa27f4bc..edfa27f4bc 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf
index fe39b4a0bb..fe39b4a0bb 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf
index 82b35825cd..82b35825cd 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf
index a2a325c23c..a2a325c23c 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf
index f0af97dedc..f0af97dedc 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf
index a42838e431..a42838e431 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf
index b892f4b542..b892f4b542 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqmo2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf
index fef9421eab..fef9421eab 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf
index cd9e6d0a34..cd9e6d0a34 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf
index 3395b9b5a7..3395b9b5a7 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf
index 83c4e43e9f..83c4e43e9f 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf
index 0dd2208f7b..0dd2208f7b 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf
index 709c0f2dc9..709c0f2dc9 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf
index f4aed98de8..f4aed98de8 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf
index 1222a2009e..1222a2009e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf
index 772d68131b..772d68131b 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf
index 5a026c6f1e..5a026c6f1e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf
index e464d22bea..e464d22bea 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf
index 7107cdf97b..7107cdf97b 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxc2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf
index b4a113ef74..b4a113ef74 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf
index b99043ea8b..b99043ea8b 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf
index 3edcce650c..3edcce650c 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf
index d824a2b395..d824a2b395 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf
index fc4a6eea19..fc4a6eea19 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf
index 1557ffc27c..1557ffc27c 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf
index c50d035aa8..c50d035aa8 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf
index 4be2807e9e..4be2807e9e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf
index 96883a548e..96883a548e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf
index 7e50f5391e..7e50f5391e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf
index 8b24a2581e..8b24a2581e 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf
index 27d849606a..27d849606a 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxn2488.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf
index 2fd4267781..2fd4267781 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0500.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf
index 538b27656d..538b27656d 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0600.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf
index 79520c4c55..79520c4c55 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0700.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf
index b467963993..b467963993 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0800.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf
index 619a09384d..619a09384d 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo0900.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf
index d66278a261..d66278a261 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1000.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf
index cd3a2a0270..cd3a2a0270 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1095.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf
index 77bb79a791..77bb79a791 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1200.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf
index 7baf158bba..7baf158bba 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1440.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf
index 51b78607ff..51b78607ff 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo1728.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf
index 2451326722..2451326722 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2074.vf
Binary files differ
diff --git a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf
index f94cce7459..f94cce7459 100644
--- a/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf
+++ b/obsolete/language/greek/bgreek/fonts/vf/public/bgreek/bqxo2488.vf
Binary files differ
diff --git a/language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd
index 37b956cac6..37b956cac6 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcgcmr.fd
diff --git a/language/greek/bgreek/tex/latex/bgreek/bcgenc.def b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcgenc.def
index 04bd7dba3c..04bd7dba3c 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bcgenc.def
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcgenc.def
diff --git a/language/greek/bgreek/tex/latex/bgreek/bcglmr.fd b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcglmr.fd
index 8c7a359478..8c7a359478 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bcglmr.fd
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcglmr.fd
diff --git a/language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd
index 4fe459a4a0..4fe459a4a0 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcqcmr.fd
diff --git a/language/greek/bgreek/tex/latex/bgreek/bcqenc.def b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcqenc.def
index 3fea334855..3fea334855 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bcqenc.def
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcqenc.def
diff --git a/language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd
index 8a9b8f1bdc..8a9b8f1bdc 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bcqlmr.fd
diff --git a/language/greek/bgreek/tex/latex/bgreek/bgfonts.tex b/obsolete/language/greek/bgreek/tex/latex/bgreek/bgfonts.tex
index ae5d49d63b..ae5d49d63b 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bgfonts.tex
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bgfonts.tex
diff --git a/language/greek/bgreek/tex/latex/bgreek/bgreek.ldf b/obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.ldf
index 2b880f9a46..2b880f9a46 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bgreek.ldf
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.ldf
diff --git a/language/greek/bgreek/tex/latex/bgreek/bgreek.sty b/obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.sty
index 72a8270250..72a8270250 100644
--- a/language/greek/bgreek/tex/latex/bgreek/bgreek.sty
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/bgreek.sty
diff --git a/language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf b/obsolete/language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf
index d1fd4472c6..d1fd4472c6 100644
--- a/language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf
+++ b/obsolete/language/greek/bgreek/tex/latex/bgreek/ibygreek.ldf
diff --git a/language/spanish/babel/contrib/mexican/README b/obsolete/language/spanish/babel-contrib/spanish-mx/README
index 32fbe6211d..32fbe6211d 100644
--- a/language/spanish/babel/contrib/mexican/README
+++ b/obsolete/language/spanish/babel-contrib/spanish-mx/README
diff --git a/language/spanish/babel/contrib/mexican/esmx.cfg b/obsolete/language/spanish/babel-contrib/spanish-mx/esmx.cfg
index 4ccc999ce7..4ccc999ce7 100644
--- a/language/spanish/babel/contrib/mexican/esmx.cfg
+++ b/obsolete/language/spanish/babel-contrib/spanish-mx/esmx.cfg
diff --git a/language/spanish/babel/contrib/mexican/spanishmx.ldf b/obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.ldf
index 338e341538..338e341538 100644
--- a/language/spanish/babel/contrib/mexican/spanishmx.ldf
+++ b/obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.ldf
diff --git a/language/spanish/babel/contrib/mexican/spanishmx.sty b/obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.sty
index 1929ada219..1929ada219 100644
--- a/language/spanish/babel/contrib/mexican/spanishmx.sty
+++ b/obsolete/language/spanish/babel-contrib/spanish-mx/spanishmx.sty
diff --git a/macros/latex/contrib/babel-contrib/spanglish/README b/obsolete/macros/latex/contrib/babel-contrib/spanglish/README
index 65b38855de..65b38855de 100644
--- a/macros/latex/contrib/babel-contrib/spanglish/README
+++ b/obsolete/macros/latex/contrib/babel-contrib/spanglish/README
diff --git a/macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf b/obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf
index 0c7a7f0e23..0c7a7f0e23 100644
--- a/macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf
+++ b/obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.ldf
diff --git a/macros/latex/contrib/babel-contrib/spanglish/spanglish.sty b/obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.sty
index cfd269ff65..cfd269ff65 100644
--- a/macros/latex/contrib/babel-contrib/spanglish/spanglish.sty
+++ b/obsolete/macros/latex/contrib/babel-contrib/spanglish/spanglish.sty
diff --git a/macros/latex/contrib/ltxindex/README b/obsolete/macros/latex/contrib/ltxindex/README
index 61df56b47f..61df56b47f 100644
--- a/macros/latex/contrib/ltxindex/README
+++ b/obsolete/macros/latex/contrib/ltxindex/README
diff --git a/macros/latex/contrib/ltxindex/copying.txt b/obsolete/macros/latex/contrib/ltxindex/copying.txt
index 60549be514..60549be514 100644
--- a/macros/latex/contrib/ltxindex/copying.txt
+++ b/obsolete/macros/latex/contrib/ltxindex/copying.txt
diff --git a/macros/latex/contrib/ltxindex/ltxindex.dtx b/obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx
index b82a959c3c..b82a959c3c 100644
--- a/macros/latex/contrib/ltxindex/ltxindex.dtx
+++ b/obsolete/macros/latex/contrib/ltxindex/ltxindex.dtx
diff --git a/macros/latex/contrib/ltxindex/ltxindex.pdf b/obsolete/macros/latex/contrib/ltxindex/ltxindex.pdf
index 1734c08649..1734c08649 100644
--- a/macros/latex/contrib/ltxindex/ltxindex.pdf
+++ b/obsolete/macros/latex/contrib/ltxindex/ltxindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/ltxindex/ltxindex.sty b/obsolete/macros/latex/contrib/ltxindex/ltxindex.sty
index a8436e3403..a8436e3403 100644
--- a/macros/latex/contrib/ltxindex/ltxindex.sty
+++ b/obsolete/macros/latex/contrib/ltxindex/ltxindex.sty
diff --git a/support/arara/README.md b/support/arara/README.md
index dc4cc359ee..bc89923eed 100644
--- a/support/arara/README.md
+++ b/support/arara/README.md
@@ -2,18 +2,27 @@
# arara
-![Version: 4.0](https://img.shields.io/badge/current_version-4.0-blue.svg?style=flat-square)
-![Revision: 2](https://img.shields.io/badge/revision-2-blue.svg?style=flat-square)
-![Language: Java](https://img.shields.io/badge/language-Java-blue.svg?style=flat-square)
-![Minimum JRE: 5.0](https://img.shields.io/badge/minimum_JRE-5.0-blue.svg?style=flat-square)
-[![License: New BSD](https://img.shields.io/badge/license-New_BSD-blue.svg?style=flat-square)](https://opensource.org/licenses/bsd-license)
-![CTAN packaging: 4.0.7](https://img.shields.io/badge/CTAN_packaging-4.0.7-blue.svg?style=flat-square)
+![Language: Kotlin](https://img.shields.io/badge/Language-Kotlin-blue.svg?style=flat-square)
+![Minimum JRE: 8.0](https://img.shields.io/badge/Minimum_JRE-8-blue.svg?style=flat-square)
-`arara` is a TeX automation tool based on rules and directives. It gives you a way to enhance your TeX experience. The tool is an effort to provide a concise way to automate the daily TeX workflow for users and also package writers. Users might write their own rules when the provided ones do not suffice.
+`arara` is a TeX automation tool based on rules and directives. It gives you a
+way to enhance your TeX experience. The tool is an effort to provide a concise
+way to automate the daily TeX workflow for users and also package writers. Users
+might write their own rules when the provided ones do not suffice.
+
+Current stable version: 5.0.0
+
+> Please note that `arara` recently moved. We are proud to announce that
+> `arara` is now part of the [Island of TeX](https://gitlab.com/islandoftex).
+> The new address is https://gitlab.com/islandoftex/arara. The old GitHub
+> repository will be used as mirror but development happens on GitLab. Please
+> open relevant issues and merge requests there.
## Basic use
-To use `arara`, you need to tell it what to do. Unlike most other tools, you give `arara` these _directives_ in the document itself – usually near the top. So to run `pdflatex` once on your document, you should say something like:
+To use `arara`, you need to tell it what to do. Unlike most other tools, you
+give `arara` these _directives_ in the document itself – usually near the top.
+So to run `pdflatex` once on your document, you should say something like:
```tex
% arara: pdflatex
@@ -23,52 +32,70 @@ Hello, world!
\end{document}
```
-Now when you run `arara myfile`, that directive (`% arara: ...`) will be seen and carried out as described by the `pdflatex` rule. You can read more about rules and directives in the user manual available in our [releases](https://github.com/cereda/arara/releases) section. In addition to documenting all of the rules that come standard with `arara`, the manual gives a detailed explanation of how `arara` works, as well as how to create and use your own rules.
-
-## Versions
-
-![Current version: 4.0](https://img.shields.io/badge/current_version-4.0-blue.svg?style=flat-square)
-![Development version: 5.0](https://img.shields.io/badge/development_version-5.0-red.svg?style=flat-square)
-
-The stable major version of `arara` is the 4.0 series (note that revision numbers may vary). Please refer to the development branch for more information on the upcoming 5.0 series release. The master branch always refers to the stable version (including potential revisions). The CTAN packaging for the current version is 4.0.7 (for internal use).
-
-For historical purposes, the source code for older versions of `arara` is available in the [releases](https://github.com/cereda/arara/releases) section of our repository. However, be mindful that these versions are unsupported.
-
-## Build status
-
-[![Version: 4.0](https://img.shields.io/badge/version-4.0-blue.svg?style=flat-square)](https://travis-ci.org/cereda/arara/)
-![Travis CI for 4.0](https://img.shields.io/travis/cereda/arara.svg?style=flat-square)
-[![Version: 5.0](https://img.shields.io/badge/version-5.0-red.svg?style=flat-square)](https://travis-ci.org/cereda/arara/branches)
-![Travis CI for 5.0](https://img.shields.io/travis/cereda/arara/development.svg?style=flat-square)
-
-`arara` uses [Travis CI](https://travis-ci.org) as a hosted continuous integration service. For each and every commit, we can see in real time the build status of our application checked against a range of Java VM vendors. It is worth noting that the current series is designed and built to be Java 5.0 compliant, so if you have an old JVM, it is almost sure that you will be able to run `arara` in it without any problems.
-
+Now when you run `arara myfile`, that directive (`% arara: ...`) will be seen
+and carried out as described by the `pdflatex` rule. You can read more about
+rules and directives in the user manual available in our
+[releases](https://gitlab.com/islandoftex/arara/-/releases) section. In addition
+to documenting all of the rules that come standard with `arara`, the manual
+gives a detailed explanation of how `arara` works, as well as how to create and
+use your own rules.
+
+## Getting the latest and greatest arara
+
+`arara` is continuously built by the GitLab CI. For each and every commit, it is
+ ensured that a green tick means `arara` passes the test suite and is ready to
+ be tested. However, that is *not* meant you can use the executable artifacts of
+ the builds *for productive use*.
+
+ Development of `arara` takes place in the development branch. Feel free to be
+ one of our testers and enjoy the latest features and bug fixes by building from
+ there.
+
## Support
-[![Gitter chatroom](https://img.shields.io/badge/gitter-join_chat-blue.svg?style=flat-square)](https://gitter.im/cereda/arara)
-[![GitHub issues](https://img.shields.io/badge/github-issues-blue.svg?style=flat-square)](https://github.com/cereda/arara/issues)
-
-We use a [Gitter](https://gitter.im/cereda/arara) chatroom for discussing things related to `arara`. You are more than welcome to come join the fun and say *hi!* to us. We also have the [issues](https://github.com/cereda/arara/issues) section in our repository as a valid channel to report problems, bugs and suggest improvements.
+We use a [Gitter](https://gitter.im/cereda/arara) chatroom for discussing things
+related to `arara`. You are more than welcome to come join the fun and say *hi!*
+to us. We also have the [issues](https://gitlab.com/islandoftex/arara/issues)
+section in our repository as a valid channel to report problems, bugs and
+suggest improvements.
## Localization
-Would you like to make `arara` speak your own language? Splendid! We would love to have you in the team! Just send us an e-mail, join our dedicated chatroom or open an issue about it. The localization process is quite straightforward, we can help you! Any language is welcome!
+Would you like to make `arara` speak your own language? Splendid! We would love
+to have you in the team! Just send us an e-mail, join our dedicated chatroom or
+open an issue about it. The localization process is quite straightforward, we
+can help you! Any language is welcome!
-A big thanks to our translators Marco Daniel, Clemens Niederberger, Ulrike Fischer, Gert Fischer, Enrico Gregorio and Marijn Schraagen for the awesome localization work!
+A big thanks to our translators Marco Daniel, Clemens Niederberger, Ulrike
+Fischer, Gert Fischer, Enrico Gregorio and Marijn Schraagen for the awesome
+localization work!
## Downloads
-[![Download from GitHub](https://img.shields.io/badge/github-4.0-blue.svg?style=flat-square)](https://github.com/cereda/arara/releases)
-[![Download from Bintray](https://img.shields.io/badge/bintray-4.0-blue.svg?style=flat-square)](https://bintray.com/cereda/arara)
+[![Download from GitLab](https://img.shields.io/badge/dynamic/json.svg?color=blue&label=Latest%20release&query=%24.0.name&url=https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%2Fprojects%2F14349047%2Frepository%2Ftags&style=flat-square)](https://gitlab.com/islandoftex/arara/-/releases)
-From the 4.0 series on, the team decided to not release cross-platform installers any more. Our tool is available out of the shelf on all major TeX distributions, including TeX Live and MiKTeX, which makes manual installation unnecessary given the significant coverage of such distributions. Chances are you already have `arara` in your system!
+Our tool is available out of the shelf on all major TeX distributions,
+including TeX Live and MiKTeX, which makes manual installation unnecessary
+given the significant coverage of such distributions. Chances are
+you already have `arara` in your system!
-You can obtain the official package available in the [releases](https://github.com/cereda/arara/releases) section of our project repository, as well as the [Bintray](https://bintray.com/cereda/arara) software distribution service. Please refer to the documentation on how to manually deploy our tool.
+You can obtain the official package available in the
+[releases](https://gitlab.com/islandoftex/arara/-/releases) section of our
+project repository. Please refer to the documentation on how to
+manually deploy our tool.
## License
-This application is licensed under the [New BSD License](http://www.opensource.org/licenses/bsd-license.php). Please note that the New BSD License has been verified as a GPL-compatible free software license by the [Free Software Foundation](http://www.fsf.org/), and has been vetted as an open source license by the [Open Source Initiative](http://www.opensource.org/).
+This application is licensed under the
+[New BSD License](https://opensource.org/licenses/BSD-3-Clause). Please
+note that the New BSD License has been verified as a GPL-compatible free
+software license by the [Free Software Foundation](http://www.fsf.org/), and
+has been vetted as an open source license by the
+[Open Source Initiative](http://www.opensource.org/).
## The team
-`arara`, the cool TeX automation tool, is brought to you by Paulo Cereda, Marco Daniel, Brent Longborough and Nicola Talbot. If you want to support TeX development by a donation, the best way to do this is donating to the [TeX Users Group](https://www.tug.org/donate.html).
+`arara`, the cool TeX automation tool, is brought to you by Paulo Cereda, Marco
+Daniel, Brent Longborough, Nicola Talbot and Ben Frank. If you want to support
+TeX development by a donation, the best way to do this is donating to the
+[TeX Users Group](https://www.tug.org/donate.html).
diff --git a/support/arara/doc/arara-manual.pdf b/support/arara/doc/arara-manual.pdf
index bb3f7be953..e7e719e6af 100644
--- a/support/arara/doc/arara-manual.pdf
+++ b/support/arara/doc/arara-manual.pdf
Binary files differ
diff --git a/support/arara/doc/arara-manual.tex b/support/arara/doc/arara-manual.tex
index 5045c97cb6..d9926240c3 100644
--- a/support/arara/doc/arara-manual.tex
+++ b/support/arara/doc/arara-manual.tex
@@ -1,7 +1,7 @@
% arara: manual
% Arara, the cool TeX automation tool
-% Copyright (c) 2012 -- 2018, Paulo Roberto Massa Cereda
+% Copyright (c) 2012 -- 2020, Island of TeX
% All rights reserved.
%
% Redistribution and use in source and binary forms, with or without
@@ -41,63 +41,8 @@
\usepackage[utf8]{inputenc}
\usepackage[margin=2.5cm]{geometry}
\usepackage{arara}
-\usepackage[record,postpunc=dot]{glossaries-extra}
-
-\newcommand{\araraversion}{4.0}
-
-\glssetcategoryattribute{abbreviation}{glossdesc}{firstuc}
-\glssetcategoryattribute{general}{glossname}{firstuc}
-\glssetcategoryattribute{general}{glossdesc}{firstuc}
-
-\setabbreviationstyle{short-nolong-desc}
-\renewcommand{\glsxtrshortdescname}{%
- \protect\glsabbrvfont{\the\glsshorttok} (\the\glslongtok)%
-}
-
- \newabbreviation
- [description={an interface that allows users to interact
-through graphical components, such as buttons and menus}]
- {GUI}{GUI}{Graphical User Interface}
-
- \newabbreviation
- [description={an organisation that develops and promotes Internet standards}]
- {IETF}{IETF}{Internet Engineering Task Force}
-
- \newabbreviation
- [description={a virtual machine that enables Java programs to be run}]
- {JVM}{JVM}{Java Virtual Machine}
-
- \newabbreviation
- [description={a hybrid, dynamic, statically typed, embeddable
- expression language and runtime for the Java platform},
- location={(See Chapter~\ref{chap:mvel}.)}]
- {MVEL}{MVEL}{MVFLEX Expression Language}
-
-\newglossaryentry{orb-tag}{name={orb tag},
- description={a dynamic element of an \gls{MVEL} template which is
- evaluated at runtime},
- location={(See Section~\ref{sec:mvelbasictemplating}.)}}
-
-\newabbreviation
- [description={a simple computer programming environment that takes
- a single expression (input), evaluates it and results the result}]
- {REPL}{REPL}{Read--Eval--Print Loop}
-
-\newabbreviation
- [description={a database language}]
- {SQL}{SQL}{Structured Query Language}
-
-\newabbreviation
- [description={a markup language that defines a set of rules for
-encoding documents in a format that is both human-readable and
-machine-readable}]
- {XML}{XML}{Extensible Markup Language}
-
-\newabbreviation
- [description={human-friendly data, commonly used for configuration
-files but also used for data storage or transmission},
- location={(See Chapter~\ref{chap:yaml}.)}]
- {YAML}{YAML}{YAML Ain't Markup Language}
+
+\newcommand{\araraversion}{5.0}
\begin{document}
@@ -124,14 +69,11 @@ files but also used for data storage or transmission},
\vspace{6em}
-{\large\em Paulo Cereda, Marco Daniel,\\
-Brent Longborough, and Nicola Talbot\par}
+{\large\em The Island of \TeX\par}
\vspace{3em}
-\href{mailto:cereda.paulo@gmail.com}{\fpemail{0.4}}%
-\quad\href{https://github.com/cereda/arara}{\fpgithub{0.4}}%
-\quad\href{http://twitter.com/paulocereda}{\fptwitter{0.4}}
+\href{https://gitlab.com/islandoftex/arara}{\includegraphics[scale=.3]{figures/gl}}
\vfill
@@ -157,19 +99,7 @@ Version \araraversion}
\em No birds were harmed in the making of this manual.
\end{flushright}
-\include{chapters/foreword}
-\include{chapters/prologue}
\include{chapters/license}
-\printunsrtglossary
-
-\cleardoublepage
-
-\vspace*{25em}
-
-\thispagestyle{empty}
-\begin{flushright}
-\em To Marco's son Niclas.
-\end{flushright}
\cleardoublepage
diff --git a/support/arara/doc/arara.sty b/support/arara/doc/arara.sty
index c366a2528f..5cc02225e5 100644
--- a/support/arara/doc/arara.sty
+++ b/support/arara/doc/arara.sty
@@ -1,5 +1,5 @@
% Arara, the cool TeX automation tool
-% Copyright (c) 2012 -- 2018, Paulo Roberto Massa Cereda
+% Copyright (c) 2012 -- 2020, Island of TeX
% All rights reserved.
%
% Redistribution and use in source and binary forms, with or without
@@ -30,7 +30,7 @@
% WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
% POSSIBILITY OF SUCH DAMAGE.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{arara}[2018/04/11 Arara User Manual Configuration]
+\ProvidesPackage{arara}[2020/03/01 Arara User Manual Configuration]
\RequirePackage{tikz}
\RequirePackage{xcolor}
@@ -57,6 +57,7 @@
\RequirePackage[regular]{sourcecodepro}
\RequirePackage{adforn}
+\RequirePackage{fontawesome}
\RequirePackage{forest}
\useforestlibrary{edges}
@@ -862,8 +863,7 @@
\vspace{.5em}
\end{minipage}}
-\newcommand{\rulebox}[2]{\rbox{#1}%
-\hfill{\normalfont\em#2}}
+\newcommand{\rulebox}[1]{\rbox{#1}}
\newcommand{\rpbox}[2]{\abox{#1}\hfill%
{\normalfont\itshape default:} \rbox[cyan]{#2}}
\newcommand{\rpsbox}[1]{\abox{#1}~%
@@ -871,177 +871,3 @@
\newcommand{\povalue}[1]{\rbox[cyan]{#1}}
\newcommand{\rqbox}{\rbox[araracolour]{R}}
-
-\newcommand{\fpemail}[1]{%
-\begin{tikzpicture}[
- y=0.80pt,
- x=0.80pt,
- yscale=-1.000000,
- xscale=1.000000,
- inner sep=0pt,
- outer sep=0pt,
- scale=#1]
-\begin{scope}[shift={(-45.96191,-71.72619)}]
- \path[cm={{0.26458,0.0,0.0,0.26458,(45.96191,71.72619)}},fill=araracolour,line
- width=0.800pt] (138.0000,0.0000) .. controls (61.8000,0.0000) and
- (0.0000,61.8000) .. (0.0000,138.0000) -- (0.0000,374.0000) .. controls
- (0.0000,450.2000) and (61.8000,512.0000) .. (138.0000,512.0000) --
- (374.0000,512.0000) .. controls (450.2000,512.0000) and (512.0000,450.2000) ..
- (512.0000,374.0000) -- (512.0000,138.0000) .. controls (512.0000,61.8000) and
- (450.2000,0.0000) .. (374.0000,0.0000) -- (138.0000,0.0000) --
- cycle(105.3535,154.1797) -- (406.6426,154.1797) .. controls
- (407.1626,154.1797) and (407.6487,154.4501) .. (407.9355,154.8457) --
- (269.4844,269.0977) -- (263.6836,273.8984) .. controls (263.5691,273.9744) and
- (263.4561,274.0383) .. (263.3477,274.1094) -- (262.8496,274.4277) .. controls
- (261.0136,275.6408) and (258.7436,276.3086) .. (256.4473,276.3086) --
- (256.3828,276.3086) .. controls (253.6418,276.3086) and (251.0365,275.4472) ..
- (249.2109,273.9355) -- (104.3555,154.5410) .. controls (104.6316,154.3135) and
- (104.9799,154.1797) .. (105.3535,154.1797) -- cycle(103.7441,170.3691) --
- (207.5117,255.9004) -- (103.7441,339.7246) -- (103.7441,170.3691) --
- cycle(408.2559,170.9316) -- (408.2559,339.7695) -- (304.5957,256.4688) --
- (408.2559,170.9316) -- cycle(217.4394,264.0840) -- (241.2070,283.6836) ..
- controls (245.3284,287.0581) and (250.7281,288.9160) .. (256.4258,288.9160) ..
- controls (262.1020,288.9160) and (267.5064,287.0487) .. (271.6387,283.6582) --
- (294.6582,264.6582) -- (408.2559,355.9316) -- (408.2559,356.2012) .. controls
- (408.2559,357.0788) and (407.5127,357.8203) .. (406.6465,357.8203) --
- (105.3750,357.8203) .. controls (104.4923,357.8203) and (103.7441,357.0793) ..
- (103.7441,356.2070) -- (103.7441,355.9141) -- (217.4394,264.0840) -- cycle;
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
- \begin{scope}[cm={{0.13993,0.0,0.0,0.13993,(71.62036,95.57808)}},fill=white]
- \end{scope}
-\end{scope}
-\end{tikzpicture}}
-
-\newcommand{\fptwitter}[1]{%
-\begin{tikzpicture}[
- y=0.80pt,
- x=0.80pt,
- yscale=-1.000000,
- xscale=1.000000,
- inner sep=0pt,
- outer sep=0pt,
- scale=#1]
-\begin{scope}[shift={(-45.96191,-71.72619)}]
- \path[fill=araracolour,line width=0.212pt] (144.9161,71.7262) -- (82.4744,71.7262) ..
- controls (62.3132,71.7262) and (45.9619,88.0774) .. (45.9619,108.2387) --
- (45.9619,170.6804) .. controls (45.9619,190.8416) and (62.3132,207.1929) ..
- (82.4744,207.1929) -- (144.9161,207.1929) .. controls (165.0773,207.1929) and
- (181.4286,190.8416) .. (181.4286,170.6804) -- (181.4286,108.2387) .. controls
- (181.4286,88.0774) and (165.0773,71.7262) .. (144.9161,71.7262) --
- cycle(146.6623,124.7222) -- (146.7152,126.7066) .. controls
- (146.7152,147.0795) and (131.2106,170.5745) .. (102.8473,170.5745) .. controls
- (94.1425,170.5745) and (86.0463,168.0081) .. (79.2200,163.6424) .. controls
- (80.4371,163.7747) and (81.6542,163.8541) .. (82.8977,163.8541) .. controls
- (90.1208,163.8541) and (96.7883,161.3935) .. (102.0536,157.2660) .. controls
- (95.3067,157.1337) and (89.6181,152.6622) .. (87.6602,146.5504) .. controls
- (88.6127,146.7356) and (89.5652,146.8414) .. (90.5706,146.8414) .. controls
- (91.9994,146.8414) and (93.3091,146.6562) .. (94.6055,146.3122) .. controls
- (87.5676,144.9099) and (82.2098,138.6658) .. (82.2098,131.2045) --
- (82.2098,131.0193) .. controls (84.3265,132.1835) and (86.7209,132.8714) ..
- (89.2345,132.9508) .. controls (85.1070,130.1991) and (82.4016,125.4631) ..
- (82.4016,120.1185) .. controls (82.4016,117.2874) and (83.1787,114.6416) ..
- (84.5016,112.3662) .. controls (92.0952,121.7060) and (103.4773,127.8443) ..
- (116.2831,128.4793) .. controls (116.0185,127.3416) and (115.8886,126.1774) ..
- (115.8886,124.9604) .. controls (115.8886,116.4408) and (122.7956,109.5351) ..
- (131.3151,109.5351) .. controls (135.7337,109.5351) and (139.7559,111.4137) ..
- (142.5605,114.4035) .. controls (146.0794,113.7156) and (149.3605,112.4456) ..
- (152.3503,110.6729) .. controls (151.1861,114.2712) and (148.7522,117.2874) ..
- (145.5772,119.1924) .. controls (148.6993,118.8220) and (151.6627,117.9754) ..
- (154.4408,116.7583) .. controls (152.3773,119.8539) and (149.7579,122.5791) ..
- (146.6623,124.7222) -- cycle;
-\end{scope}
-\end{tikzpicture}}
-
-\newcommand{\fpgithub}[1]{%
-\begin{tikzpicture}[
- y=0.80pt,
- x=0.80pt,
- yscale=-1.000000,
- xscale=1.000000,
- inner sep=0pt,
- outer sep=0pt,
- scale=#1]
-\begin{scope}[shift={(69.24524,-3.99286)}]
- \path[fill=araracolour,line width=0.212pt] (29.7089,3.9929) -- (-32.7327,3.9929) ..
- controls (-52.8940,3.9929) and (-69.2452,20.3441) .. (-69.2452,40.5054) --
- (-69.2452,102.9470) .. controls (-69.2452,123.1083) and (-52.8940,139.4595) ..
- (-32.7327,139.4595) -- (29.7089,139.4595) .. controls (49.8702,139.4595) and
- (66.2214,123.1083) .. (66.2214,102.9470) -- (66.2214,40.5054) .. controls
- (66.2214,20.3441) and (49.8702,3.9929) .. (29.7089,3.9929) --
- cycle(32.5929,74.8218) .. controls (32.3283,81.0660) and (31.0583,86.9397) ..
- (27.0102,91.9404) .. controls (24.2056,95.3799) and (20.5808,97.5760) ..
- (16.4004,98.9518) .. controls (12.2200,100.3012) and (7.9073,100.6981) ..
- (3.5416,100.6716) .. controls (-0.8240,100.6451) and (-5.1632,100.7774) ..
- (-9.5288,100.6187) .. controls (-14.3707,100.4600) and (-19.0802,99.5604) ..
- (-23.4194,97.2850) .. controls (-28.6846,94.5068) and (-32.2036,90.2206) ..
- (-34.0027,84.5320) .. controls (-35.1934,80.8279) and (-35.7225,77.0443) ..
- (-35.6432,73.1550) .. controls (-35.5638,68.6041) and (-34.2938,64.4502) ..
- (-31.4892,60.8518) .. controls (-30.6690,59.7670) and (-30.2457,58.8410) ..
- (-30.3515,57.3064) .. controls (-30.5367,54.8723) and (-30.1663,52.3587) ..
- (-29.7694,49.9245) .. controls (-29.4254,47.8873) and (-28.7640,45.9029) ..
- (-28.1819,43.8920) .. controls (-28.1290,43.6804) and (-28.0232,43.4687) ..
- (-27.8909,43.2835) .. controls (-27.7057,42.9660) and (-26.8854,42.8602) ..
- (-26.0917,43.0718) .. controls (-20.8265,44.4741) and (-16.1434,46.9612) ..
- (-11.6454,49.8716) .. controls (-11.1957,50.1627) and (-10.4813,50.2685) ..
- (-9.9257,50.1627) .. controls (-5.9834,49.4748) and (-2.0411,49.3689) ..
- (1.9277,49.5541) .. controls (3.5416,49.6335) and (5.1027,50.0304) ..
- (6.7166,50.1362) .. controls (7.4046,50.1891) and (8.1983,50.0568) ..
- (8.7539,49.7129) .. controls (12.8814,47.1200) and (17.1941,44.8975) ..
- (21.8243,43.3629) .. controls (22.2477,43.2041) and (22.7239,43.0983) ..
- (23.2266,42.9925) .. controls (24.0204,42.8337) and (24.8671,43.3100) ..
- (25.1581,44.0773) .. controls (25.5285,45.0827) and (25.9254,46.1145) ..
- (26.1106,47.1993) .. controls (26.6662,50.3214) and (27.3541,53.4964) ..
- (27.3012,56.6185) .. controls (27.2748,58.7087) and (27.9098,60.0581) ..
- (29.0210,61.6720) .. controls (31.8256,65.5879) and (32.8046,70.0593) ..
- (32.5929,74.8218) -- cycle;
- \path[fill=araracolour,line width=0.212pt] (17.7233,72.0172) .. controls
- (15.7918,71.1441) and (13.5164,70.7472) .. (11.3733,70.6149) .. controls
- (9.0185,70.4826) and (6.6108,71.0383) .. (4.2296,71.0118) .. controls
- (-0.9827,70.9589) and (-6.1950,70.6943) .. (-11.4073,70.6414) .. controls
- (-13.4975,70.6149) and (-15.5613,70.8795) .. (-17.6250,71.0118) .. controls
- (-19.5036,71.1176) and (-21.0911,71.8849) .. (-22.5198,73.1020) .. controls
- (-28.1025,77.8381) and (-27.2559,86.5164) .. (-23.8692,91.0672) .. controls
- (-21.7525,93.9247) and (-18.7098,95.2476) .. (-15.3761,96.0414) .. controls
- (-10.8517,97.1262) and (-6.2744,97.4172) .. (-1.6177,97.2056) .. controls
- (3.0918,97.4172) and (7.7750,97.1526) .. (12.3787,96.0414) .. controls
- (14.7335,95.4858) and (17.0089,94.7185) .. (18.8875,93.1045) .. controls
- (22.9885,89.5591) and (24.0468,84.9289) .. (23.2531,79.7960) .. controls
- (22.7239,76.3829) and (20.9777,73.4460) .. (17.7233,72.0172) --
- cycle(-13.3388,89.8237) .. controls (-16.0859,89.8237) and (-18.3129,86.8503)
- .. (-18.3129,83.1826) .. controls (-18.3129,79.5150) and (-16.0859,76.5416) ..
- (-13.3388,76.5416) .. controls (-10.5916,76.5416) and (-8.3646,79.5150) ..
- (-8.3646,83.1826) .. controls (-8.3646,86.8503) and (-10.5916,89.8237) ..
- (-13.3388,89.8237) -- cycle(10.3943,89.8237) .. controls (7.6472,89.8237) and
- (5.4202,86.8503) .. (5.4202,83.1826) .. controls (5.4202,79.5150) and
- (7.6472,76.5416) .. (10.3943,76.5416) .. controls (13.1415,76.5416) and
- (15.3685,79.5150) .. (15.3685,83.1826) .. controls (15.3685,86.8503) and
- (13.1415,89.8237) .. (10.3943,89.8237) -- cycle;
-\end{scope}
-\end{tikzpicture}}
diff --git a/support/arara/doc/chapters/building.tex b/support/arara/doc/chapters/building.tex
index 8400a433dc..9c9b27c124 100644
--- a/support/arara/doc/chapters/building.tex
+++ b/support/arara/doc/chapters/building.tex
@@ -2,7 +2,7 @@
\chapter{Building from source}
\label{chap:buildingfromsource}
-\arara\ is a Java application licensed under the \href{http://www.opensource.org/licenses/bsd-license.php}{New BSD License}, a verified GPL-compatible free software license, and the source code is available in the project repository at \href{https://github.com/cereda/arara}{GitHub}. This chapter provides detailed instructions on how to build our tool from source.
+\arara\ is a Kotlin and Java application licensed under the \href{http://www.opensource.org/licenses/bsd-license.php}{New BSD License}, a verified GPL-compatible free software license, and the source code is available in the project repository at \href{https://gitlab.com/islandoftex/arara}{GitLab}. This chapter provides detailed instructions on how to build our tool from source.
\section{Requirements}
\label{sec:requirements}
@@ -10,7 +10,7 @@
In order to build our tool from source, we need to ensure that our development environment has the minimum requirements for a proper compilation. Make sure the following items are available:
\begin{itemize}[label={\cbyes{-2}}]
-\item On account of our project being hosted at \href{https://github.com}{GitHub}, an online source code repository, we highly recommend the installation of \rbox{git}, a version control system for tracking changes in computer files and coordinating work on those files among multiple people. Alternatively, you can directly obtain the source code by requesting a \href{https://github.com/cereda/arara/archive/master.zip}{source code download} in the repository. In order to check if \rbox{git} is available in your operating system, run the following command in the terminal (version numbers might vary):
+\item On account of our project being hosted at \href{https://gitlab.com/}{GitLab}, an online source code repository, we highly recommend the installation of \rbox{git}, a version control system for tracking changes in computer files and coordinating work on those files among multiple people. Alternatively, you can directly obtain the source code by requesting a \href{https://gitlab.com/islandoftex/arara/-/archive/master/arara-master.zip}{source code download} in the repository. In order to check if \rbox{git} is available in your operating system, run the following command in the terminal (version numbers might vary):
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ git --version
@@ -19,7 +19,7 @@ git version 2.17.1
Please refer to the \rbox{git} \href{https://git-scm.com/}{project website} in order to obtain specific installation instructions for your operating system. In general, most recent Unix systems have \rbox{git} installed out of the shelf.
-\item Our tool is written in the Java programming language, so we need a proper Java Development Kit, a collection of programming tools for the Java platform. Our source code is known to be compliant with several vendors, including Oracle, OpenJDK, and Azul Systems. In order to check if your operating system has the proper tools, run the following command in the terminal (version numbers might vary):
+\item Our tool is written in the Java programming language, so we need a proper Java Development Kit, a collection of programming tools for the Java platform. Our source code is known to be compliant with several vendors, including Oracle, OpenJDK, and Azul Systems. In order to check if your operating system has the proper tools, run the following command in the terminal (version numbers might vary):
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ javac -version
@@ -28,30 +28,34 @@ javac 1.8.0_171
The previous command, as the name suggests, refers to the \rbox{javac} tool, which is the Java compiler itself. The most common Java Development Kit out there is from \href{http://www.oracle.com/technetwork/java/javase/downloads/index.html}{Oracle}. However, several Linux distributions (as well as some developers, yours truly included) favour the OpenJDK vendor, so your mileage may vary. Please refer to the corresponding website of the vendor of your choice in order to obtain specific installation instructions for your operating system.
-\item As a means to provide a straightforward and simplified compilation workflow, \arara\ relies on Apache Maven, a software project management and comprehension tool. Based on the concept of a project object model, Maven can manage builds, reporting and documentation from a central piece of information. In order to check if \rbox{mvn}, the Maven binary, is available in your operating system, run the following command in the terminal (version numbers might vary):
+\item As a means to provide a straightforward and simplified compilation workflow, \arara\ relies on Gradle, a software project management and comprehension tool. Gradle is a build tool just like arara with a much more comprehensive build framework to provide support for the JVM ecosystem. In order to check if \rbox{gradle}, the Gradle binary, is available in your operating system, run the following command in the terminal (version numbers might vary):
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ mvn --version
-Apache Maven 3.5.2 (Red Hat 3.5.2-5)
-Maven home: /usr/share/maven
-Java version: 1.8.0_171, vendor: Oracle Corporation
-Java home: /usr/lib/jvm/java-1.8.0-openjdk-
- 1.8.0.171-4.b10.fc28.x86_64/jre
-Default locale: pt_BR, platform encoding: UTF-8
-OS name: "linux", version: "4.16.16-300.fc28.x86_64",
- arch: "amd64", family: "unix"
+$ gradle --version
+------------------------------------------------------------
+Gradle 6.0.1
+------------------------------------------------------------
+
+Build time: 2019-11-21 11:47:01 UTC
+Revision: <unknown>
+
+Kotlin: 1.3.50
+Groovy: 2.5.8
+Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
+JVM: 1.8.0_232 (Oracle Corporation 25.232-b09)
+OS: Linux 5.5.0-1-MANJARO amd64
\end{codebox}
-Please refer to the Maven \href{https://maven.apache.org/}{project website} in order to obtain specific installation instructions for your operating system. In general, most recent Linux distributions have the Maven binary, as well the proper associated dependencies, available in their corresponding repositories.
+Please refer to the Gradle \href{https://gradle.org}{project website} in order to obtain specific installation instructions for your operating system. In general, most recent Linux distributions have the Gradle binary, as well the proper associated dependencies, available in their corresponding repositories.
-\item For a proper repository cloning, as well as the first Maven build, an active Internet connection is required. In particular, Maven dynamically downloads Java libraries and plug-ins from one or more online repositories and stores them in a local cache. Be mindful that subsequent builds can occur offline, provided that the local Maven cache exists.
+\item For a proper repository cloning, as well as the first Gradle build, an active Internet connection is required. In particular, Gradle dynamically downloads Java libraries and plug-ins from one or more online repositories and stores them in a local cache. Be mindful that subsequent builds can occur offline, provided that the local Gradle cache exists.
\end{itemize}
\arara\ can be easily built from source, provided that the aforementioned requirements are available. The next section presents the compilation details, from repository cloning to a proper Java archive generation.
\begin{messagebox}{One tool to rule them all}{araracolour}{\icok}{white}
\setlength{\parskip}{1em}
-For the brave, there is the \href{https://sdkman.io/}{Software Development Kit Manager}, an interesting tool for managing parallel versions of multiple software development kits on most Unix based systems. In particular, this tool provides off the shelf support for several Java Development Kit vendors and versions, as well as most recent versions Apache Maven.
+For the brave, there is the \href{https://sdkman.io/}{Software Development Kit Manager}, an interesting tool for managing parallel versions of multiple software development kits on most Unix based systems. In particular, this tool provides off the shelf support for several Java Development Kit vendors and versions, as well as most recent versions of Gradle.
Personally, I prefer the packaged versions provided by my favourite Linux distribution (Fedora), but this tool is a very interesting alternative to set up a development environment with little to no effort.
\end{messagebox}
@@ -69,87 +73,82 @@ $ cd git-projects
Run the following command in the terminal to clone the \arara\ project:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ git clone https://github.com/cereda/arara
+$ git clone https://gitlab.com/islandoftex/arara.git
\end{codebox}
-Wait a couple of seconds (or minutes, depending on your Internet connection) while the previous command clones the project repository hosted at GitHub. Be mindful that this operation pulls down every version of every file for the history of the project. Fortunately, the version control system has the notion of a \emph{shallow clone}, which is a more succinctly meaningful way of describing a local repository with history truncated to a particular depth during the clone operation. If you want to get only the latest revision of everything in our repository, run the following command in the terminal:
+Wait a couple of seconds (or minutes, depending on your Internet connection) while the previous command clones the project repository hosted at GitLab. Be mindful that this operation pulls down every version of every file for the history of the project. Fortunately, the version control system has the notion of a \emph{shallow clone}, which is a more succinctly meaningful way of describing a local repository with history truncated to a particular depth during the clone operation. If you want to get only the latest revision of everything in our repository, run the following command in the terminal:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ git clone https://github.com/cereda/arara --depth 1
+$ git clone https://gitlab.com/islandoftex/arara.git --depth 1
\end{codebox}
-This operation is way faster than the previous one, for obvious reasons. Unix terminals typically start at \abox[araracolour]{USER\_HOME} as working directory, so, if you did not \rbox{cd} to another directory (as in the earlier example), the newly cloned \abox[araracolour]{arara/} directory is almost certain to be accessible from that level. Now, we need to navigate to a directory named \abox[araracolour]{application/} inside our project structure, where the source code and the corresponding build file are located. Run the following command in the terminal:
+This operation is way faster than the previous one, for obvious reasons. Unix terminals typically start at \abox[araracolour]{USER\_HOME} as working directory, so, if you did not \rbox{cd} to another directory (as in the earlier example), the newly cloned \abox[araracolour]{arara/} directory is almost certain to be accessible from that level. Now, we need to navigate to the directory named \abox[araracolour]{arara/}. Run the following command in the terminal:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ cd arara/application
+$ cd arara
\end{codebox}
-The previous command should take us inside the \abox[araracolour]{application/} directory of our project, where the source code and the corresponding build file are located. Let us make sure we are in the correct location by running the following command in the terminal:
+The previous command should take us inside the \abox[araracolour]{arara/} directory of our project, where the source code and the corresponding build file are located. Let us make sure we are in the correct location by running the following command in the terminal:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ ls
-pom.xml src
+$ ls build.gradle.kts
+build.gradle.kts
\end{codebox}
-Great, we are in the correct location! From the previous output, let us inspect the directory contents. The \abox[araracolour]{src/} directory, as the name suggests, contains the source code organized in an established package structure, whereas \rbox{pom.xml} is the corresponding build file written in the Project Object Model format, a special XML file that contains information about the project and configuration details used by Apache Maven to build the project. In order to build our tool, run the following command in the terminal:
+Great, we are in the correct location! From the previous output, let us inspect the directory contents. The \abox[araracolour]{application/} directory, as the name suggests, contains the source code of the main application organized in an established package structure, whereas \rbox{build.gradle.kts} is the corresponding Gradle build file written to efficiently compile the project. In order to build our tool, run the following command in the terminal:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ mvn compile assembly:single
+$ gradle build
\end{codebox}
-Apache Maven is based around the central concept of a build life cycle. The \rbox{compile} phase, as the name suggests, compiles the source code of the project using the underlying Java compiler. From the previous command, bound to this particular build phase, note that there is an \rbox{assembly:single} plug-in goal which aggregates the project output along with its dependencies and other files into a single distributable archive. An \emph{assembly} is a group of files, directories and dependencies that are assembled into an archive format and distributed. In our case, the resulting file will be a typical Java archive file, with the \rbox{jar} extension. The first Maven build will take a couple of seconds (or minutes, depending on your Internet connection), as the tool will download all dependencies and required plug-ins for proper compilation and packaging. Subsequent builds will be significantly faster. Finally, after some time, Maven will output the following message as result (please note that the entire compilation and packaging only took 10 seconds on my development machine due to an existing local cache):
+Gradle is based around the central concept of a build life cycle. The \rbox{compile} phase, as the name suggests, compiles the source code of the project using the underlying Java compiler. After compiling, the code can be packaged, tested and run. The \rbox{build} target actually compiles, tests and packages our tool. Afterwards, you will have a \abox[araracolour]{application/build/libs/} directory with multiple JAR files, one containing \rbox{with-deps}. That file is ready to run as it bundles all dependencies. Subsequent builds will be significantly faster than the first build because they do not fetch dependencies and rely on a build cache. Finally, after some time, Gradle will output the following message as result (please note that the entire compilation and packaging only took 4 seconds on my development machine due to an existing local cache):
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-[INFO] ---------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ---------------------------------------------------------
-[INFO] Total time: 10.371 s
-[INFO] Finished at: 2018-06-22T18:38:02-03:00
-[INFO] Final Memory: 39M/184M
-[INFO] ---------------------------------------------------------
+BUILD SUCCESSFUL in 4s
+15 actionable tasks: 15 up-to-date
\end{codebox}
-On account of a successful build in our previous interaction, there is now a newly created \abox[araracolour]{target/} directory containing compiled classes, a established package structure and, at last but not least, our assembly. Now, let us move the resulting Java archive file from that particular directory to \abox[araracolour]{application/} which is our current directory. It is important to note that the aforementioned assembly plug-in adds the \rbox{jar-with-dependencies} reference to the file name in order to differentiate a proper assembly from a typical Java archive file. Run the following command in the terminal (please note that the Java archive file was also renamed during the move operation):
+Now, let us move the resulting Java archive file from that particular directory to our current directory. Run the following command in the terminal (please note that the Java archive file was also renamed during the move operation):
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ mv target/arara-4.0-jar-with-dependencies.jar arara.jar
+$ mv application/build/libs/arara-with-deps-*.jar arara.jar
\end{codebox}
Now, our current directory contains the final \rbox{arara.jar} Java archive file properly built from source. This file can be safely distributed and deployed, as seen later on, in Chapter~\ref{chap:deployingthetool}, on page~\pageref{chap:deployingthetool}. You can also test the resulting file by running the following command in the terminal:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ java -jar arara.jar
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-arara 4.0 (revision 1)
-Copyright (c) 2012-2018, Paulo Roberto Massa Cereda
-All rights reserved
-
-usage: arara [file [--dry-run] [--log] [--verbose | --silent]
- [--timeout N] [--max-loops N] [--language L]
- [ --preamble P ] [--header] | --help | --version]
- -h,--help print the help message
- -H,--header extract directives only in the file header
- -l,--log generate a log output
- -L,--language <code> set the application language
- -m,--max-loops <number> set the maximum number of loops
- -n,--dry-run go through all the motions of running a
- command, but with no actual calls
- -p,--preamble <name> set the file preamble based on the
- configuration file
- -s,--silent hide the command output
- -t,--timeout <number> set the execution timeout (in milliseconds)
- -V,--version print the application version
- -v,--verbose print the command output
+Usage: arara [OPTIONS] [file]...
+
+Options:
+ -l, --log Generate a log output
+ -v, --verbose / -s, --silent Print the command output
+ -n, --dry-run Go through all the motions of running a
+ command, but with no actual calls
+ -H, --header Extract directives only in the file header
+ -t, --timeout INT Set the execution timeout (in milliseconds)
+ -L, --language TEXT Set the application language
+ -m, --max-loops INT Set the maximum number of loops (> 0)
+ -p, --preamble TEXT Set the file preamble based on the
+ configuration file
+ -d, --working-directory DIRECTORY
+ Set the working directory for all tools
+ -V, --version Show the version and exit
+ -h, --help Show this message and exit
+
+Arguments:
+ file The file(s) to evaluate and process
\end{codebox}
-The following optional Maven phase is used to handle the project cleaning, including the complete removal of the \abox[araracolour]{target/} directory. As a result, the project is then restored to the initial state without any generated Java bytecode. Run the following command in the terminal:
+The following optional Gradle phase is used to handle the project cleaning, including the complete removal of the \abox[araracolour]{build/} directory. As a result, the project is then restored to the initial state without any generated Java bytecode. Run the following command in the terminal:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ mvn clean
+$ gradle clean
\end{codebox}
This section covered the compilation details for building \arara\ from source. The aforementioned steps are straightforward and can be automated in order to generate snapshots and daily builds. If you run into any issue, please let us know. Happy compilation!
diff --git a/support/arara/doc/chapters/cli.tex b/support/arara/doc/chapters/cli.tex
index ddf318bc67..60678e88d5 100644
--- a/support/arara/doc/chapters/cli.tex
+++ b/support/arara/doc/chapters/cli.tex
@@ -7,30 +7,30 @@
\section{User interface design}
\label{sec:userinterfacedesign}
-The goal of a user interface design is to make the interaction as simple and efficient as possible. Good user interface design facilitates finishing the task at hand without drawing unnecessary attention to itself. For \arara\ 4.0, we redesigned the interface in order to look more pleasant to the eye, after all, we work with \TeX\ and friends:
+The goal of a user interface design is to make the interaction as simple and efficient as possible. Good user interface design facilitates finishing the task at hand without drawing unnecessary attention to itself. We redesigned the interface in order to look more pleasant to the eye, after all, we work with \TeX\ and friends:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc5.tex' (size: 307 bytes, last modified: 05/29/2018
-08:57:30), please wait.
+Processing 'doc5.tex' (size: 285 B, last modified: 03/01/2020
+19:25:40), please wait.
(PDFLaTeX) PDFLaTeX engine .............................. SUCCESS
(BibTeX) The BibTeX reference management software ....... SUCCESS
(PDFLaTeX) PDFLaTeX engine .............................. SUCCESS
(PDFLaTeX) PDFLaTeX engine .............................. SUCCESS
-Total: 1.45 seconds
+Total: 1.14 seconds
\end{codebox}
First of all, we have the nice application logo, displayed using ASCII art. The entire layout is based on monospaced font spacing, usually used in terminal prompts. Hopefully you follow the conventional use of a monospaced font in your terminal, otherwise the visual effect will not be so pleasant. First and foremost, \arara\ displays details about the file being processed, including size and modification status:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-Processing 'doc5.tex' (size: 307 bytes, last modified: 05/29/2018
-08:57:30), please wait.
+Processing 'doc5.tex' (size: 285 B, last modified: 03/01/2020
+19:25:40), please wait.
\end{codebox}
The list of tasks was also redesigned to be fully justified, and each entry displays both task and subtask names (the former being displayed enclosed in parentheses), besides of course the usual execution result:
@@ -51,7 +51,7 @@ As previously mentioned in Section~\ref{sec:rule}, on page~\pageref{sec:rule}, i
Also, observe that our tool displays the execution time before terminating, in seconds. The execution time has a very simple precision, as it is meant to be easily readable, and should not be considered for command profiling.
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-Total: 1.45 seconds
+Total: 1.14 seconds
\end{codebox}
The tool has two execution modes: \emph{silent}, which is the default, and \emph{verbose}, which prints as much information about tasks as possible. When in silent mode, \arara\ will simply display the task and subtask names, as well as the execution result. Nothing more is added to the output. For instance:
@@ -66,7 +66,7 @@ When executed in verbose mode, \arara\ will display the underlying system comman
-----------------------------------------------------------------
(BibTeX) The BibTeX reference management software
-----------------------------------------------------------------
-This is BibTeX, Version 0.99d (TeX Live 2017)
+This is BibTeX, Version 0.99d (TeX Live 2019)
The top-level auxiliary file: doc5.aux
The style file: plain.bst
Database file #1: mybib.bib
@@ -85,35 +85,57 @@ In order to run \arara\ on your \TeX\ file, the simplest possible way is to prov
$ arara doc6.tex
\end{codebox}
+From version 5.0 on, \arara\ may receive more than one file as parameter. It will compile them sequentially (starting with the leftmost). The process fails on the first failure of these executions. For the files to be flawlessly compiled by \TeX, they should be in the same working directory. If you process your files with other tools, this requirement could be lifted.
+
+\begin{codebox}{Terminal}{teal}{\icnote}{white}
+$ arara doc20.tex doc21.tex
+ __ _ _ __ __ _ _ __ __ _
+ / _` | '__/ _` | '__/ _` |
+| (_| | | | (_| | | | (_| |
+ \__,_|_| \__,_|_| \__,_|
+
+Processing 'doc20.tex' (size: 28 B, last modified: 02/28/2020
+07:15:02), please wait.
+
+(PDFTeX) PDFTeX engine .................................. SUCCESS
+
+Processing 'doc21.tex' (size: 28 B, last modified: 02/28/2020
+07:15:10), please wait.
+
+(PDFTeX) PDFTeX engine .................................. SUCCESS
+
+Total: 1.20 seconds
+\end{codebox}
+
The tool has a set of command line options (also known as flags or switches) that modify the underlying execution behaviour or enhance the execution workflow. If you do not provide any parameters, \arara\ will display the tool usage and the available options:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-arara 4.0 (revision 1)
-Copyright (c) 2012-2017, Paulo Roberto Massa Cereda
-All rights reserved
-
-usage: arara [file [--dry-run] [--log] [--verbose | --silent]
- [--timeout N] [--max-loops N] [--language L]
- [ --preamble P ] [--header] | --help | --version]
- -h,--help print the help message
- -H,--header extract directives only in the file header
- -l,--log generate a log output
- -L,--language <code> set the application language
- -m,--max-loops <number> set the maximum number of loops
- -n,--dry-run go through all the motions of running a
- command, but with no actual calls
- -p,--preamble <name> set the file preamble based on the
- configuration file
- -s,--silent hide the command output
- -t,--timeout <number> set the execution timeout (in milliseconds)
- -V,--version print the application version
- -v,--verbose print the command output
+Usage: arara [OPTIONS] [file]...
+
+Options:
+ -l, --log Generate a log output
+ -v, --verbose / -s, --silent Print the command output
+ -n, --dry-run Go through all the motions of running a
+ command, but with no actual calls
+ -H, --header Extract directives only in the file header
+ -t, --timeout INT Set the execution timeout (in milliseconds)
+ -L, --language TEXT Set the application language
+ -m, --max-loops INT Set the maximum number of loops (> 0)
+ -p, --preamble TEXT Set the file preamble based on the
+ configuration file
+ -d, --working-directory DIRECTORY
+ Set the working directory for all tools
+ -V, --version Show the version and exit
+ -h, --help Show this message and exit
+
+Arguments:
+ file The file(s) to evaluate and process
\end{codebox}
The available options for our tool are detailed as follows. Each option contains short and long variations, which are denoted by \opbox{o} and \opbox{{-}option} in the command line, respectively. Additionally, when a parameter is required by the current option, it will be denoted by \prbox{parameter} in the description.
@@ -139,20 +161,20 @@ When running \arara\ without this option, two directives will be extracted (the
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara -L nl doc5.tex
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Verwerken van 'doc5.tex' (grootte: 307 bytes, laatst gewijzigd:
-05/29/2018 11:50:32), een ogenblik geduld.
+Verwerken van 'doc5.tex' (grootte: 285 B, laatst gewijzigd:
+03/01/2020 19:25:40), een ogenblik geduld.
-(PDFLaTeX) PDFLaTeX engine ............................ SUCCESVOL
-(BibTeX) The BibTeX reference management software ..... SUCCESVOL
-(PDFLaTeX) PDFLaTeX engine ............................ SUCCESVOL
-(PDFLaTeX) PDFLaTeX engine ............................ SUCCESVOL
+(PDFLaTeX) PDFLaTeX engine .............................. SUCCESVOL
+(BibTeX) The BibTeX reference management software ....... SUCCESVOL
+(PDFLaTeX) PDFLaTeX engine .............................. SUCCESVOL
+(PDFLaTeX) PDFLaTeX engine .............................. SUCCESVOL
-Totaal: 1,59 seconden
+Totaal: 1,07 seconden
\end{codebox}
\begin{messagebox}{Navis volitans mihi anguillis plena est}{araracolour}{\icok}{white}
@@ -174,7 +196,7 @@ At time of writing, \arara\ is able to speak English, German, Dutch, Italian and
\vspace{1.4em}
-Would you like to make \arara\ speak your own language? Splendid! We would love to have you in the team! Just send us an electronic mail, join our \href{https://gitter.im/cereda/arara}{dedicated chatroom} or \href{https://github.com/cereda/arara/issues}{open an issue} about it. The localization process is quite straightforward, we can help you. Any language is welcome!
+Would you like to make \arara\ speak your own language? Splendid! We would love to have you in the team! Just send us an electronic mail, join our \href{https://gitter.im/cereda/arara}{dedicated chatroom} or \href{https://gitlab.com/islandoftex/arara/issues}{open an issue} about it. The localization process is quite straightforward, we can help you. Any language is welcome!
\end{messagebox}
This option can also be specified in the configuration file (see Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). However, one can always override this setting by running the tool with an explicit \opbox{L} option.
@@ -194,7 +216,7 @@ $ arara -m 2 doc8.tex
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc8.tex' (size: 45 bytes, last modified: 05/29/2018
+Processing 'doc8.tex' (size: 45 B, last modified: 05/29/2018
12:32:14), please wait.
(PDFTeX) PDFTeX engine .................................. SUCCESS
@@ -209,35 +231,35 @@ This option can also be specified in the configuration file (see Section~\ref{se
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara -n doc5.tex
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc5.tex' (size: 307 bytes, last modified: 05/29/2018
-11:50:32), please wait.
+Processing 'doc5.tex' (size: 285 B, last modified: 03/01/2020
+19:25:40), please wait.
[DR] (PDFLaTeX) PDFLaTeX engine
-----------------------------------------------------------------
-Authors: Marco Daniel, Paulo Cereda
-About to run: [ pdflatex, doc5.tex ]
+Author: Island of TeX
+About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
[DR] (BibTeX) The BibTeX reference management software
-----------------------------------------------------------------
-Authors: Marco Daniel, Paulo Cereda
-About to run: [ bibtex, doc5 ]
+Author: Island of TeX
+About to run: [ bibtex, doc5 ] @
[DR] (PDFLaTeX) PDFLaTeX engine
-----------------------------------------------------------------
-Authors: Marco Daniel, Paulo Cereda
-About to run: [ pdflatex, doc5.tex ]
+Author: Island of TeX
+About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
[DR] (PDFLaTeX) PDFLaTeX engine
-----------------------------------------------------------------
-Authors: Marco Daniel, Paulo Cereda
-About to run: [ pdflatex, doc5.tex ]
+Author: Island of TeX
+About to run: [ pdflatex, /home/paulo/Downloads/doc5.tex ] @
-Total: 0.27 seconds
+Total: 0.23 seconds
\end{codebox}
Note that the rule authors are displayed (so they can be blamed in case anything goes wrong), as well as the system command to be executed. It is an interesting approach to see everything that will happen to your document and in which order.
@@ -268,7 +290,7 @@ $ arara -p twopdftex doc9.tex
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc9.tex' (size: 18 bytes, last modified: 05/29/2018
+Processing 'doc9.tex' (size: 18 B, last modified: 05/29/2018
14:39:21), please wait.
(PDFTeX) PDFTeX engine .................................. SUCCESS
@@ -295,7 +317,7 @@ $ arara --timeout 3000 doc9.tex
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc10.tex' (size: 63 bytes, last modified: 05/29/2018
+Processing 'doc10.tex' (size: 63 B, last modified: 05/29/2018
15:24:06), please wait.
(PDFTeX) PDFTeX engine ................................. ERROR
@@ -314,6 +336,8 @@ Total: 3.37 seconds
If left unattended, this particular execution would never finish (and probably crash the engine at a certain point), as expected by the recursive calls without a proper fixed point. The \opbox{{-}timeout} option was set at 3000 milliseconds and the task was aborted when the time limit was reached. Note that the tool raised an error about it.
+\item[\describeop{d}{working-directory}] This option allows you to change the working directory. That is, the commands will run from a different directory than the directory you launched \arara\ in. This is especially useful when calling a \TeX\ engine as they resolve files against the working direcotry. For that reason, \arara\ will also resolve each file you pass to it that has no absolute path against the working directory. The working directory is fixed for the whole call; passing multiple files to \arara\ will resolve all of them against and execute all actions within that one working directory.
+
\item[\describeop{V}{version}] This option, as the name indicates, prints the current version. It also prints the current revision and a list of libraries with their corresponding licenses. Finally, it simply exits the application. Note that this option has the second highest priority over the others.
\item[\describeop{v}{verbose}] This option enables the verbose mode of \arara, as seen in Section~\ref{sec:userinterfacedesign}, on page~\pageref{sec:userinterfacedesign}. It also enables all streams to be flushed directly to the terminal, including potential user input interactions (the exact opposite of silent mode). This option can also be activated by default in the configuration file (see Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}).
@@ -360,7 +384,7 @@ $ arara doc11.tex
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc11.tex' (size: 34 bytes, last modified: 05/29/2018
+Processing 'doc11.tex' (size: 34 B, last modified: 05/29/2018
19:40:35), please wait.
(PDFTeX) PDFTeX engine .................................. SUCCESS
@@ -377,7 +401,25 @@ $ arara doc11
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc11.tex' (size: 34 bytes, last modified: 05/29/2018
+Processing 'doc11.tex' (size: 34 B, last modified: 05/29/2018
+19:40:35), please wait.
+
+(PDFTeX) PDFTeX engine .................................. SUCCESS
+
+Total: 0.69 seconds
+\end{codebox}
+
+\item Many shells complete file names that have multiple extensions in the same directory, so that they end with a period. We try to
+resolve against them as well!
+
+\begin{codebox}{Terminal}{teal}{\icnote}{white}
+$ arara doc11.
+ __ _ _ __ __ _ _ __ __ _
+ / _` | '__/ _` | '__/ _` |
+| (_| | | | (_| | | | (_| |
+ \__,_|_| \__,_|_| \__,_|
+
+Processing 'doc11.tex' (size: 34 B, last modified: 05/29/2018
19:40:35), please wait.
(PDFTeX) PDFTeX engine .................................. SUCCESS
diff --git a/support/arara/doc/chapters/concepts.tex b/support/arara/doc/chapters/concepts.tex
index 0a8d168fe7..acd96f0fe1 100644
--- a/support/arara/doc/chapters/concepts.tex
+++ b/support/arara/doc/chapters/concepts.tex
@@ -15,7 +15,7 @@ A \emph{rule} is a formal description of how \arara\ handles a certain task. For
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'doc1.tex' (size: 83 bytes, last modified: 05/03/2018
+Processing 'doc1.tex' (size: 83 B, last modified: 05/03/2018
12:10:33), please wait.
I could not find a rule named 'foo' in the provided rule paths.
@@ -28,7 +28,11 @@ Total: 0.09 seconds
Once a rule is defined, \arara\ automatically provides an access layer to that rule through directives in the source code, a concept to be formally introduced later on, in Section~\ref{sec:directives}. Observe that a directive reflects a particular instance of a rule of the same name (i.e, a \rbox{foo} directive in a certain source code is an instance of the \rbox{foo} rule).
-In short, a rule is a plain text file written in the \gls{YAML} format, described in Chapter~\ref{chap:yaml}, on page~\pageref{chap:yaml}. I opted for this format because back then it was cleaner and more intuitive to use than other markup languages such as \gls{XML}, besides of course being a data serialization standard for programming languages.
+\begin{messagebox}{A note about rules}{attentioncolour}{\icattention}{black}
+For version 5.0, we kept the current YAML rule scheme. However, the names of the rules being public are marked as deprecated, as they might change in future versions.
+\end{messagebox}
+
+In short, a rule is a plain text file written in the YAML format, described in Chapter~\ref{chap:yaml}, on page~\pageref{chap:yaml}. I opted for this format because back then it was cleaner and more intuitive to use than other markup languages such as XML, besides of course being a data serialization standard for programming languages.
\begin{messagebox}{Animal jokes}{araracolour}{\icok}{white}
As a bonus, the acronym \emph{YAML} rhymes with the word \emph{camel}, so \arara\ is heavily environmentally friendly. Speaking of camels, there is the programming reference as well, since this amusing animal is usually associated with Perl and friends.
@@ -36,12 +40,12 @@ As a bonus, the acronym \emph{YAML} rhymes with the word \emph{camel}, so \arara
The default rules, i.e, the rules shipped with \arara, are placed inside a special subdirectory named \abox[araracolour]{rules/} inside another special directory named \abox[araracolour]{ARARA\_HOME} (the place where our tool is installed). We will learn later on, in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}, that we can add an arbitrary number of paths for storing our own rules, in order of priority, so do not worry too much about the location of the default rules, although it is important to understand and acknowledge their existence.
-The following list describes the basic structure of an \arara\ rule by presenting the proper elements (or keys, if we consider the proper \gls{YAML} nomenclature). Observe that elements marked as \rbox[araracolour]{M} are mandatory (i.e, the rule \emph{has} to have them in order to work). Similarly, elements marked as \rbox[araracolour]{O} are optional, so you can safely ignore them when writing a rule for our tool. A key preceded by \rbox{context$\rightarrow$} indicates a context and should be properly defined inside it.
+The following list describes the basic structure of an \arara\ rule by presenting the proper elements (or keys, if we consider the proper YAML nomenclature). Observe that elements marked as \rbox[araracolour]{M} are mandatory (i.e, the rule \emph{has} to have them in order to work). Similarly, elements marked as \rbox[araracolour]{O} are optional, so you can safely ignore them when writing a rule for our tool. A key preceded by \rbox{context$\rightarrow$} indicates a context and should be properly defined inside it.
\begin{description}
\item[\describe{M}{!config}] This keyword is mandatory and must be the first line of any \arara\ rule. It denotes the object mapping metadata to be internally used by the tool. Actually, the tool is not too demanding on using it (in fact, you could suppress it entirely and \arara\ will not complain), but it is considered good practice to start all rules with a \abox{!config} keyword regardless.
-\item[\describe{M}{identifier}] This key acts as a unique identifier for the rule (as expected). It is highly recommended to use lowercase letters without spaces, accents or punctuation symbols, as good practice (again). As a convention, if you have an identifier named \rbox{pdflatex}, the rule filename must be \rbox{pdflatex.yaml} (like our own instance). Please note that, although \rbox{yml} is known to be a valid \gls{YAML} extension as well, \arara\ only considers files ending with the \rbox{yaml} extension. This is a deliberate decision.
+\item[\describe{M}{identifier}] This key acts as a unique identifier for the rule (as expected). It is highly recommended to use lowercase letters without spaces, accents or punctuation symbols, as good practice (again). As a convention, if you have an identifier named \rbox{pdflatex}, the rule filename must be \rbox{pdflatex.yaml} (like our own instance). Please note that, although \rbox{yml} is known to be a valid YAML extension as well, \arara\ only considers files ending with the \rbox{yaml} extension. This is a deliberate decision.
\begin{codebox}{Example}{teal}{\icnote}{white}
identifier: pdflatex
@@ -61,29 +65,17 @@ authors:
- Paulo Cereda
\end{codebox}
-\item[\describe{M}{commands}] This key is introduced in version 4.0 of \arara\ and denotes a potential list of commands. From the user perspective, each command is called a \emph{subtask} within a task (rule and directive) context. A task may represent only a single command (a single subtask), as well as a sequence of commands (subtasks). For instance, the \rbox{frontespizio} rule requires at least two commands. So, as a means of normalizing the representation, a task composed of a single command (single subtask) is defined as the only element of the list, as opposed to previous versions of \arara, which had a specific key to hold just one command.
-
-\begin{messagebox}{Incompatibility with older versions}{attentioncolour}{\icerror}{black}
-Dear reader, note that rules from version 4.0 are incompatible with older versions of \arara. If you are migrating from old versions to version 4.0, we need to replace \abox{command} by \abox{commands} and specify a contextual element, as seen in the following descriptions. Please refer to Section~\ref{sec:migrationguide}, on page~\pageref{sec:migrationguide}, for a comprehensible migration guide.
-\end{messagebox}
+\item[\describe{M}{commands}] This key denotes a potential list of commands. From the user perspective, each command is called a \emph{subtask} within a task (rule and directive) context. A task may represent only a single command (a single subtask), as well as a sequence of commands (subtasks). For instance, the \rbox{frontespizio} rule requires at least two commands. So, as a means of normalizing the representation, a task composed of a single command (single subtask) is defined as the only element of the list, as opposed to previous versions of \arara, which had a specific key to hold just one command.
In order to properly set a subtask, the keys used in this specification are defined inside the \rbox{commands$\rightarrow$} context and presented as follows.
\begin{description}
\item[\describecontext{O}{commands}{name}] This key holds the name of the subtask as a plain string. When running \arara, this value will be displayed in the output. Subtask names are displayed after the main task name. By the way, did you notice that this key is entirely optional? That means that a subtask can simply be unnamed, if you decide so. However, such practice is not recommended, as it's always good to have a visual description of what \arara\ is running at the moment, so name your subtasks properly.
-\item[\describecontext{M}{commands}{command}] This key holds the action to be performed, typically a system command. In previous versions, \arara\ would rely solely on a string. For this version on, as a means to enhance the user experience (and also fix serious blockers when handling spaces in file names, as seen in \href{https://github.com/cereda/arara/issues}{previous issues} reported in the repository), the tool offers four types of returned values:
+\item[\describecontext{M}{commands}{command}] This key holds the action to be performed, typically a system command. The tool offers two types of returned values:
\begin{itemize}[label={--}]
-\item A plain string: this is the default (and only) behaviour in older versions of \arara. The plain string is processed as it is by the underlying execution engine. However, automatic argument parsing is problematic, so this approach, although supported, is not recommended any more.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-command: 'ls'
-\end{codebox}
-
-It is important to observe that you can use either a plain string directly or use an \gls{orb-tag} with an explicit \rbox{return} command (as seen in Section~\ref{sec:mvelbasicusage}, on page~\pageref{sec:mvelbasicusage}). Personally, I favour the explicit indication for a quick understanding.
-
-\item A \rbox{Command} object: \arara\ 4.0 features a new approach for handling system commands based on a high level structure with explicit argument parsing named \rbox{Command} (for our curious users, it is a plain Java object). In order to use this approach, we need to rely on \glspl{orb-tag} and use a helper method named \mtbox{getCommand} to obtain the desired result. We will detail this method later on, in Section~\ref{sec:commandsandtriggers}, on page~\pageref{sec:commandsandtriggers}. We highly recommend the adoption of this approach for rule writing instead of using plain strings.
+\item A \rbox{Command} object: \arara\ features an approach for handling system commands based on a high level structure with explicit argument parsing named \rbox{Command} (for our curious users, it is a plain Java object). In order to use this approach, we need to rely on orb tags and use a helper method named \mtbox{getCommand} to obtain the desired result. We will detail this method later on, in Section~\ref{sec:commands}, on page~\pageref{sec:commands}. We highly recommend the adoption of this approach for rule writing instead of using plain strings.
\begin{codebox}{Example}{teal}{\icnote}{white}
command: "@{ return getCommand('ls') }"
@@ -94,33 +86,27 @@ command: "@{ return getCommand('ls') }"
\begin{codebox}{Example}{teal}{\icnote}{white}
command: "@{ return 1 == 1 }"
\end{codebox}
-
-\item A \rbox{Trigger} object: this is surely the least common type of returned value and it is mentioned here just for documentation purposes. In simple terms, a \rbox{Trigger} object constitutes a special command that changes the internal workings of \arara\ at runtime. We have not worked much on this concept, so there is only one trigger available, seen in action in the official \rbox{halt} rule. In order to use this approach, we need to rely on \glspl{orb-tag} and use a helper method named \mtbox{getTrigger} to obtain the desired result.
\end{itemize}
-It is also worth mentioning that \arara\ also supports lists of commands represented as plain strings, \rbox{Command} or \rbox{Trigger} objects, boolean values or a mix of them. This is useful if your rule has to decide whether more actions are required in order to accomplish a task. In this case, our tool will take care of the list and execute each element in the specified order.
+It is also worth mentioning that \arara\ also supports lists of commands represented as \rbox{Command} objects, boolean values or a mix of them. This is useful if your rule has to decide whether more actions are required in order to accomplish a task. In this case, our tool will take care of the list and execute each element in the specified order.
\begin{codebox}{Example}{teal}{\icnote}{white}
-command: "@{ return [ 'ls', 'ls', 'ls' ] }"
+command: "@{ return [ getCommand('ls'), getCommand('ls') ] }"
\end{codebox}
As an example, please refer to the official \rbox{clean} rule for a real scenario where a list of commands is successfully employed: for each provided extension, the rule creates a new cleaning command and adds it to a list of removals to be processed later.
-\begin{messagebox}{Plain string is deprecated}{attentioncolour}{\icattention}{black}
-It took me a lot of effort to find out that handling plain strings and employing guesswork to parse arguments are the root of several issues reported by users. Therefore, this approach is being marked as \emph{deprecated} and will be removed in future versions.
-\end{messagebox}
-
-There are at least two variables available in the \abox{command} context and are described as follows (note that \gls{MVEL} variables and \glspl{orb-tag} are discussed in Chapter~\ref{chap:mvel}). A variable will be denoted by \varbox{variable} in this list. For each rule argument (defined later on), there will be a corresponding variable in the \abox{command} context, directly accessed through its unique identifier.
+There are at least two variables available in the \abox{command} context and are described as follows (note that MVEL variables and orb tags are discussed in Chapter~\ref{chap:mvel}). A variable will be denoted by \varbox{variable} in this list. For each rule argument (defined later on), there will be a corresponding variable in the \abox{command} context, directly accessed through its unique identifier.
\begin{description}
\item[\varbox{file}] This variable holds the file name, without any path reference, as a plain string. It is usually composed from the base name and the extension. This variable is available since the first release of \arara.
-\item[\varbox{reference}] This variable is introduced in version 4.0 of \arara\ and holds the canonical, absolute path representation of the \varbox{file} variable as a \rbox{File} object. This is useful if it's necessary to know the hierarchical structure of a project. Since the reference is a Java object, we can use all methods available in the \rbox{File} class.
+\item[\varbox{reference}] This variable holds the canonical, absolute path representation of the \varbox{file} variable as a \rbox{File} object. This is useful if it's necessary to know the hierarchical structure of a project. Since the reference is a Java object, we can use all methods available in the \rbox{File} class.
\end{description}
\begin{messagebox}{Quote handling}{araracolour}{\icinfo}{white}
\setlength{\parskip}{1em}
-The \gls{YAML} format disallows key values starting with \rbox{@} without proper quoting. This is the reason we had to use double quotes for the value and internally using single quotes for the command string. Also, we could use the other way around, or even using only one type and then escaping them when needed. This is excessively verbose but needed due to the format requirement. Thankfully, \arara\ offers two solutions for removing the quoting verbosity when writing commands.
+The YAML format disallows key values starting with \rbox{@} without proper quoting. This is the reason we had to use double quotes for the value and internally using single quotes for the command string. Also, we could use the other way around, or even using only one type and then escaping them when needed. This is excessively verbose but needed due to the format requirement. Thankfully, \arara\ offers two solutions for removing the quoting verbosity when writing commands.
The first solution is used in previous versions and it still works like a charm in modern days. We need to precede our command with a special keyword \rbox{<arara>} which will be removed afterwards. This solution works on virtually every key in the rule context, so it is a bonus. The new code will look like this:
@@ -128,7 +114,7 @@ The first solution is used in previous versions and it still works like a charm
command: <arara> @{ return getCommand('ls') }
\end{codebox}
-The second approach is more of a \gls{YAML} feature rather than a tool exclusive, although we have to do a couple of checks under the hood in order to ensure the correct execution. The idea here is to use the scalar content in folded style, as seen in Section~\ref{sec:yamlscalars}, on page~\pageref{sec:yamlscalars}. The new code will look like this:
+The second approach is more of a YAML feature rather than a tool exclusive, although we have to do a couple of checks under the hood in order to ensure the correct execution. The idea here is to use the scalar content in folded style, as seen in Section~\ref{sec:yamlscalars}, on page~\pageref{sec:yamlscalars}. The new code will look like this:
\begin{codebox}{Example}{teal}{\icnote}{white}
command: >
@@ -137,10 +123,10 @@ command: >
}
\end{codebox}
-Mind the indentation, as \gls{YAML} requires it to properly identify blocks. I personally recommend this approach for longer code, as it provides a better visual representation. You will see the second solution all around the default rules, but feel free to use the one you feel more comfortable with.
+Mind the indentation, as YAML requires it to properly identify blocks. Please keep in mind that the \rbox{<arara>} keyword is marked as deprecated in version 5.0 and will be removed in future versions of \arara, so it is highly recommended to favour this approach.
\end{messagebox}
-\item[\describecontext{O}{commands}{exit}] This key holds a special purpose in \arara\ 4.0, as it represents a custom exit status evaluation for the corresponding command. In general, a successful execution has zero as an exit status, but sometimes we end up with tools or situations where we need to override this check for whatever reason. For this purpose, simply write a \gls{MVEL} expression \emph{without \glspl{orb-tag}} as plain string and use the special variable \varbox{value} if you need the actual exit status returned by the command, available at runtime. For example, if the command returns a non-zero value indicating a successful execution, we can write this key as:
+\item[\describecontext{O}{commands}{exit}] This key holds a special purpose, as it represents a custom exit status evaluation for the corresponding command. In general, a successful execution has zero as an exit status, but sometimes we end up with tools or situations where we need to override this check for whatever reason. For this purpose, simply write a MVEL expression \emph{without orb tags} as plain string and use the special variable \varbox{value} if you need the actual exit status returned by the command, available at runtime. For example, if the command returns a non-zero value indicating a successful execution, we can write this key as:
\begin{codebox}{Example}{teal}{\icnote}{white}
exit: value > 0
@@ -199,10 +185,10 @@ There are three variables available in the \abox{flag} context, described as fol
\item[\varbox{file}] This variable holds the file name, without any path reference, as a plain string. It is usually composed from the base name and the extension. This variable is available since the first release of \arara.
-\item[\varbox{reference}] This variable is introduced in version 4.0 of \arara\ and holds the canonical, absolute path representation of the \varbox{file} variable as a \rbox{File} object. This is useful if it's necessary to know the hierarchical structure of a project. Since the reference is a Java object, we can use all methods available in the \rbox{File} class.
+\item[\varbox{reference}] This variable holds the canonical, absolute path representation of the \varbox{file} variable as a \rbox{File} object. This is useful if it's necessary to know the hierarchical structure of a project. Since the reference is a Java object, we can use all methods available in the \rbox{File} class.
\end{description}
-In the previous example, observe that the \gls{MVEL} expression defined in the \abox{flag} key checks if the user provided an affirmative value regarding shell escape, through comparing \varbox{parameters.shell} with a set of predefined affirmative values. In any case, the corresponding command flag is defined as result of such evaluation.
+In the previous example, observe that the MVEL expression defined in the \abox{flag} key checks if the user provided an affirmative value regarding shell escape, through comparing \varbox{parameters.shell} with a set of predefined affirmative values. In any case, the corresponding command flag is defined as result of such evaluation.
\item[\describecontext{O}{arguments}{default}] As default behaviour, if a parameter is not set in the directive context, the reference will be mapped to an empty string. This key exists for the exact purpose of overriding such behaviour.
@@ -217,7 +203,7 @@ There are three variables available in the \abox{default} context, described as
\item[\varbox{file}] This variable holds the file name, without any path reference, as a plain string. It is usually composed from the base name and the extension. This variable is available since the first release of \arara.
-\item[\varbox{reference}] This variable is introduced in version 4.0 of \arara\ and holds the canonical, absolute path representation of the \varbox{file} variable as a \rbox{File} object. This is useful if it's necessary to know the hierarchical structure of a project. Since the reference is a Java object, we can use all methods available in the \rbox{File} class.
+\item[\varbox{reference}] This variable holds the canonical, absolute path representation of the \varbox{file} variable as a \rbox{File} object. This is useful if it's necessary to know the hierarchical structure of a project. Since the reference is a Java object, we can use all methods available in the \rbox{File} class.
\end{description}
\item[\describecontext{O}{arguments}{required}] There might be certain scenarios in which a rule could make use of required arguments (for instance, a copy operation in which source and target must be provided). The \abox{required} key acts as a boolean switch to indicate whether the corresponding argument should be mandatory. In this case, set the key value to \rbox{true} and the argument becomes required. Later on at runtime, \arara\ will throw an error if a required parameter is missing in the directive.
@@ -249,21 +235,13 @@ arguments:
\end{codebox}
\end{description}
-This is the rule structure in the \gls{YAML} format used by \arara. Keep in mind that all subtasks in a rule are checked against their corresponding exit status. If an abnormal execution is detected, the tool will instantly halt and the rule will fail. Even \arara\ itself will return an exit code different than zero when this situation happens (detailed in Chapter~\ref{chap:commandline}, on page~\pageref{chap:commandline}).
+This is the rule structure in the YAML format used by \arara. Keep in mind that all subtasks in a rule are checked against their corresponding exit status. If an abnormal execution is detected, the tool will instantly halt and the rule will fail. Even \arara\ itself will return an exit code different than zero when this situation happens (detailed in Chapter~\ref{chap:commandline}, on page~\pageref{chap:commandline}).
\section{Directives}
\label{sec:directives}
A \emph{directive} is a special comment inserted in the source file in which you indicate how \arara\ should behave. You can insert as many directives as you want and in any position of the file. The tool will read the whole file and extract the directives.
-\begin{messagebox}{New features in version 4.0}{araracolour}{\icinfo}{white}
-\setlength{\parskip}{1em}
-\textbf{Partial directive extraction} -- From version 4.0 of \arara\ on, it is now possible to extract directives only available in the file preamble, i.e, all lines from the beginning that are comments until reaching the first line that is not a comment (excluding blank lines). To this end, a new command line flag is introduced in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}.
-
-\textbf{Predefined preambles} -- Common preambles can be predefined and used with files that require the same automation steps, then \arara\ can be invoked based on such specifications. This feature is covered in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}.
-\end{messagebox}
-
-
There are two types of directives in \arara\ which determine the way the corresponding rules will be instantiated. They are listed as follows. Note that directives are always preceded by the \rbox{arara:} pattern.
\begin{description}
@@ -273,7 +251,7 @@ There are two types of directives in \arara\ which determine the way the corresp
% arara: pdflatex
\end{codebox}
-\item[parametrized directive] This type of directive also has the rule name (which refers to the \abox{identifier} key from the rule of the same name), and also contains a map of parameters in order to provide additional information to the corresponding rule. This map is defined in the \gls{YAML} format, based on the inline style.
+\item[parametrized directive] This type of directive also has the rule name (which refers to the \abox{identifier} key from the rule of the same name), and also contains a map of parameters in order to provide additional information to the corresponding rule. This map is defined in the YAML format, based on the inline style.
\begin{codebox}{Parametrized directive}{teal}{\icnote}{white}
% arara: pdflatex: { shell: yes }
@@ -296,7 +274,7 @@ When handling parametrized directives, \arara\ always checks if directive parame
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'hello.tex' (size: 103 bytes, last modified:
+Processing 'hello.tex' (size: 103 B, last modified:
05/03/2018 15:40:16), please wait.
I have spotted an error in rule 'pdflatex' located at
@@ -309,11 +287,7 @@ Total: 0.21 seconds
As the message suggests, we need to remove the unknown parameter key from our directive or rewrite the rule in order to include it as an argument. The first option is, of course, easier.
-\begin{messagebox}{New feature in version 4.0}{araracolour}{\icinfo}{white}
-\textbf{Helpful messages} -- It is a staple of \arara\ to have friendly and helpful messages. From version 4.0 on, we decided to make messages even friendlier and include suggestions for correcting errors or improving usage. So, whenever possible, make sure to read all messages our tool provides, they will help you!
-\end{messagebox}
-
-Sometimes, directives can span several columns of a line, particularly the ones with several parameters. From \arara\ 4.0 on, we can split a directive into multiple lines by using the \rbox{arara: {-}{-}>} mark (also known as \emph{arrow notation} during development) to each line which should compose the directive. We call it a \emph{multiline directive}. Let us see an example:
+Sometimes, directives can span several columns of a line, particularly the ones with several parameters. We can split a directive into multiple lines by using the \rbox{arara: {-}{-}>} mark (also known as \emph{arrow notation} during development) to each line which should compose the directive. We call it a \emph{multiline directive}. Let us see an example:
\begin{codebox}{Multiline directive}{teal}{\icnote}{white}
% arara: pdflatex: {
@@ -328,28 +302,28 @@ It is important to observe that there is no need of them to be in contiguous lin
Although it is possible to spread lines of a multiline directive all over the code, it is considered good practice to keep them together for easier reading and editing. In any case, you can always see which lines compose a directive by inspecting the log file.
\end{messagebox}
-\arara\ 4.0 provides logical expressions, written in the \gls{MVEL} language, and special operators processed at runtime in order to determine whether and how a directive should be processed. This feature is named \emph{directive conditional}, or simply \emph{conditional} as an abbreviation. The following list describes all conditional operators available in the directive context.
+\arara\ provides logical expressions, written in the MVEL language, and special operators processed at runtime in order to determine whether and how a directive should be processed. This feature is named \emph{directive conditional}, or simply \emph{conditional} as an abbreviation. The following list describes all conditional operators available in the directive context.
\begin{description}
-\item[\describeconditional{a priori}{if}] The associated \gls{MVEL} expression is evaluated beforehand, and the directive is interpreted if, and only if, the result of such evaluation is true. This directive, when the conditional holds true, is executed at most once.
+\item[\describeconditional{a priori}{if}] The associated MVEL expression is evaluated beforehand, and the directive is interpreted if, and only if, the result of such evaluation is true. This directive, when the conditional holds true, is executed at most once.
\begin{codebox}{Conditional}{teal}{\icnote}{white}
% arara: pdflatex if missing('pdf') || changed('tex')
\end{codebox}
-\item[\describeconditional{a posteriori}{until}] The directive is interpreted the first time, then the associated \gls{MVEL} expression evaluation is done. While the result holds false, the directive is interpreted again and again. There are no guarantees of proper halting.
+\item[\describeconditional{a posteriori}{until}] The directive is interpreted the first time, then the associated MVEL expression evaluation is done. While the result holds false, the directive is interpreted again and again. There are no guarantees of proper halting.
\begin{codebox}{Conditional}{teal}{\icnote}{white}
% arara: pdflatex until !found('log', 'undefined references')
\end{codebox}
-\item[\describeconditional{a priori}{unless}] Technically an inverted \cdbox{if} conditional, the associated \gls{MVEL} expression is evaluated beforehand, and the directive is interpreted if, and only if, the result is false. This directive, when the conditional holds false, is executed at most once.
+\item[\describeconditional{a priori}{unless}] Technically an inverted \cdbox{if} conditional, the associated MVEL expression is evaluated beforehand, and the directive is interpreted if, and only if, the result is false. This directive, when the conditional holds false, is executed at most once.
\begin{codebox}{Conditional}{teal}{\icnote}{white}
% arara: pdflatex unless unchanged('tex') && exists('pdf')
\end{codebox}
-\item[\describeconditional{a priori}{while}] The associated \gls{MVEL} expression is evaluated beforehand, the directive is interpreted if, and only if, the result is true, and the process is repeated while the result still holds true. There are no guarantees of proper halting.
+\item[\describeconditional{a priori}{while}] The associated MVEL expression is evaluated beforehand, the directive is interpreted if, and only if, the result is true, and the process is repeated while the result still holds true. There are no guarantees of proper halting.
\begin{codebox}{Conditional}{teal}{\icnote}{white}
% arara: pdflatex while missing('pdf') ||
@@ -407,199 +381,98 @@ It is important to observe that, in this case, \rbox{doc3.tex} is a plain \TeX\
Even when a directive is interpreted with a file other than the one being processed by \arara\ (through the magic of the \abox{files} parameter), it is possible to use helper methods in the rule context to get access to the original file and reference. Such methods are detailed later on, in Section~\ref{sec:files}, on page~\pageref{sec:files}.
-\section{Migration guide}
+\section{Important changes in version 5.0}
\label{sec:migrationguide}
\begin{messagebox}{A note to users}{araracolour}{\icattention}{white}
If this is your first time using \arara\ or you do not have custom rules in the old format, you can safely ignore this section. All rules shipped with our tool are already written in the new format.
\end{messagebox}
-As previously discussed in Section~\ref{sec:rule}, on page~\pageref{sec:rule}, version 4.0 of \arara\ introduces a new rule format. As a result, user-defined rules in the old format are incompatible with the new version of our tool and thus have to be updated. In short, we need to replace \abox{command} by \abox{commands} and specify a contextual element. As an example, consider the following hypothetical rule \rbox{ls} written in the old format:
+\begin{messagebox}{Removal of triggers}{araracolour}{\icattention}{white}
+\arara\ previously had the concept of triggers which allowed to easily trigger events like halting \arara. As of version 5.0, support for triggers has been dropped due to the lack of use cases.
-\begin{codebox}{A rule in the old format}{teal}{\icnote}{white}
-!config
-identifier: ls
-name: LS
-command: ls @{details}
-arguments:
-- identifier: details
- flag: '@{ isTrue(parameters.details, "-l", "") }'
-\end{codebox}
+As the only pre-defined trigger has been \rbox{halt} we did not deprecate the ability to halt the application. However, the new mechanism uses the concept of session values (see \autoref{sec:others}).
+\end{messagebox}
-This rule does nothing too important, it simply runs the system command \rbox{ls} which lists the contents of the current directory. However, when we try to run \arara\ on a file which contains a directive referencing this rule, we get the following error in the terminal:
+\begin{messagebox}{Removal of Velocity support}{araracolour}{\icinfo}{white}
+\arara\ featured support for the Velocity Template Language. In version 5.0, this support has been removed. We decided in favour of this breaking change to achieve more independence from third-party modules and to avoid being stuck at version~1.7 for compatibility reasons.
-\begin{codebox}{Terminal}{teal}{\icnote}{white}
- __ _ _ __ __ _ _ __ __ _
- / _` | '__/ _` | '__/ _` |
-| (_| | | | (_| | | | (_| |
- \__,_|_| \__,_|_| \__,_|
+Due to this change, \arara\ does not ship support for any templating language at the moment. If you are interested in getting a templating language on board, you are welcome to support our efforts to make the inclusion of JVM code on the user-side more pleasant.
+\end{messagebox}
-Processing 'doc4.tex' (size: 31 bytes, last modified: 05/27/2018
-21:05:57), please wait.
+\begin{messagebox}{Removal of string-based commands}{araracolour}{\icinfo}{white}
+Up to version 5.0 you could simply use
-I have spotted an error in rule 'ls' located at '/home/paulo'. I
-could not parse the rule, something bad happened. Apparently, the
-provided YAML file is invalid. I will do my best to help you in
-any way I can. There are more details available on this
-exception:
+\begin{codebox}{Return statement}{teal}{\icnote}{white}
+return "command";
+\end{codebox}
-DETAILS ---------------------------------------------------------
-Cannot create property=command for
-JavaBean=com.github.cereda.arara.model.Rule@29774679
- in
-'reader', line 1, column 1:
- !config
- ^
-Unable to find
-property 'command' on class: com.github.cereda.arara.model.Rule
+\noindent in your rules. This resulted in \arara\ implicitly constructing a command object. As this does not make clear that this command is actually run, we now enforce the usage of
-in 'reader', line 4, column 10:
- command: ls @{details}
-
- ^
+\vspace{1em}
+\mdbox{R}{getCommand(List<String> commands)}{Command}
-Total: 0.03 seconds
-\end{codebox}
+\vspace{1em}
-The above terminal output shows the usual error \arara\ raises when a rule in the old format is used, and thus the corresponding \gls{YAML} file is considered invalid. In order to fix the rule, we need to move the \abox{command} key inside a \rbox{commands$\rightarrow$} context as a list element, as seen as follows.
+\noindent in the \rbox{return} statement. Hence, the new way of doing the same is (with either single or double quote pairs):
-\begin{codebox}{A rule converted into the new format}{teal}{\icnote}{white}
-!config
-identifier: ls
-name: LS
-commands:
-- command: ls @{details}
-arguments:
-- identifier: details
- flag: '@{ isTrue(parameters.details, "-l", "") }'
+\begin{codebox}{Return statement}{teal}{\icnote}{white}
+return getCommand("command");
\end{codebox}
+\end{messagebox}
-Note that this fix is sufficient to make the rule valid in the new format. Also, it is interesting to observe that the subtask will be unnamed during the execution, as there is no corresponding \abox{name} key in the list element.
+\begin{messagebox}{Methods: removal and change of name}{araracolour}{\icinfo}{white}
+The following previously available methods (and repective overloaded variants) have been removed:
+
+\begin{itemize}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{addQuotes(String string)}{String}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{isAIX()}{boolean}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{isIrix()}{boolean}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{isOS2()}{boolean}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{isSolaris()}{boolean}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{getFullBasename(File file)}{String}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{\parbox{0.62\textwidth}{mergeVelocityTemplate(File input,\\\hspace*{1em} File output, Map<String, Object> map)}}{void}
+\end{itemize}
-\begin{codebox}{Terminal}{teal}{\icnote}{white}
-(LS) Unnamed task ....................................... SUCCESS
-\end{codebox}
+The following methods have been renamed:
+\begin{itemize}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{(Session.)insert(String key, Object value)}{void}
-Now, let us consider an example containing a list of commands, also based on the old format. The \rbox{ls} rule was updated to include two runs of the system command of the same name in the current directory:
+\vspace{.5em}
-\begin{codebox}{A rule in the old format}{teal}{\icnote}{white}
-!config
-identifier: ls
-name: LS
-commands:
-- ls @{details}
-- ls @{details}
-arguments:
-- identifier: details
- flag: '@{ isTrue(parameters.details, "-l", "") }'
-\end{codebox}
+\hspace{2cm}\textcolor{teal}{\faArrowDown}
-Observe that the old format directly represents commands as a list of plain strings. When trying to run \arara\ on a file which contains a directive referencing the updated \rbox{ls} rule, we get the following error in the terminal:
+\item[\textcolor{okcolour}{\faCheck}]\mdbox{R}{(Session.)put(String key, Object value)}{void}
-\begin{codebox}{Terminal}{teal}{\icnote}{white}
- __ _ _ __ __ _ _ __ __ _
- / _` | '__/ _` | '__/ _` |
-| (_| | | | (_| | | | (_| |
- \__,_|_| \__,_|_| \__,_|
+\vspace{1em}
-Processing 'doc4.tex' (size: 31 bytes, last modified: 05/27/2018
-21:05:57), please wait.
-
-I have spotted an error in rule 'ls' located at '/home/paulo'. I
-could not parse the rule, something bad happened. Apparently, the
-provided YAML file is invalid. I will do my best to help you in
-any way I can. There are more details available on this
-exception:
-
-DETAILS ---------------------------------------------------------
-Cannot create property=commands for
-JavaBean=com.github.cereda.arara.model.Rule@91161c7
- in 'reader',
-line 1, column 1:
- !config
- ^
-No single argument
-constructor found for class
-com.github.cereda.arara.model.RuleCommand
- in 'reader', line 5,
-column 1:
- - ls @{details}
- ^
-
-
-Total: 0.02 seconds
-\end{codebox}
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{(Session.)exists(String key)}{boolean}
-The above terminal output shows a slightly different message, but the error is practically the same to the one \arara\ raised before when a rule in the old format was used. The difference relies on the missing rule property being set at the moment, but the idea remains the same. In order to fix the rule, we need to precede every list element in the \rbox{commands$\rightarrow$} context with the \abox{command} key, as seen as follows.
+\vspace{.5em}
-\begin{codebox}{A rule converted into the new format}{teal}{\icnote}{white}
-!config
-identifier: ls
-name: LS
-commands:
-- command: ls @{details}
-- command: ls @{details}
-arguments:
-- identifier: details
- flag: '@{ isTrue(parameters.details, "-l", "") }'
-\end{codebox}
+\hspace{2cm}\textcolor{teal}{\faArrowDown}
-This fix is sufficient to make the rule valid in the new format. Also, as mentioned before, it is interesting to observe that the subtasks will be unnamed during the execution, as there are no corresponding \abox{name} keys in the list elements.
+\item[\textcolor{okcolour}{\faCheck}] \mdbox{R}{(Session.)contains(String key)}{boolean}
-\begin{codebox}{Terminal}{teal}{\icnote}{white}
-(LS) Unnamed task ....................................... SUCCESS
-(LS) Unnamed task ....................................... SUCCESS
-\end{codebox}
+\vspace{1em}
-There is a helper tool available in the \href{https://github.com/cereda/arara/releases/tag/4.0}{release section} of our project repository that attempts to automatically convert rules in the old format to the new one. If you want to try it, download the \rbox{rc.jar} file from the repository and put it in the same directory where the old rules are located. You can also provide a full path instead. It is important to note that, although the tool might indicate a successful conversion, there are no guarantees that the resulting rule is fully compliant with the new format, due to potential changes in the internal workings of \arara, so your mileage may vary. In general, it should work. The rule converter is written in Java and requires a virtual machine to run. The tool has a straightforward workflow and takes just one parameter referring to the rule to be converted. The entire process should happen without intervention. When invoked without the file name, this is the expected output:
+\item[\textcolor{warningcolour}{\faClose}] \mdbox{R}{(Session.)obtain(String key)}{Object}
-\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ java -jar rc.jar
- _ _
- ___ _ _| |___ ___ ___ ___ _ _ ___ ___| |_ ___ ___
-| _| | | | -_| | _| . | | | | -_| _| _| -_| _|
-|_| |___|_|___| |___|___|_|_|\_/|___|_| |_| |___|_|
-
-version 1.0 (rules < 4.0)
-
-OH NO! -----------------------------------------------------
-This tool expects the YAML rule from previous versions of
-arara. Please, provide a proper YAML file containing the old
-rule as a parameter and try again. I will do my best to
-convert the rule to the new version 4.0 format.
-\end{codebox}
+\vspace{.5em}
-Let us invoke the tool with the first version of our hypothetical \rbox{ls} rule, still in the old format. The tool removes all comments from the original file, if any, and constructs a new file with a \rbox{\_v4} suffix attached to the name. The original file is preserved. Just keep in mind that the new rule must be renamed afterwards, as the base name and the corresponding \abox{identifier} key must match. The output is presented as follows.
+\hspace{2cm}\textcolor{teal}{\faArrowDown}
-\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ java -jar rc.jar ls.yaml
- _ _
- ___ _ _| |___ ___ ___ ___ _ _ ___ ___| |_ ___ ___
-| _| | | | -_| | _| . | | | | -_| _| _| -_| _|
-|_| |___|_|___| |___|___|_|_|\_/|___|_| |_| |___|_|
-
-version 1.0 (rules < 4.0)
-
-The provided YAML rule looks OK. I will try my best to
-convert it to the new version 4.0 format adopted by arara.
-The new rule name will be written in the same directory of
-the original one and will have a '_v4' suffix to it. Keep in
-mind that the base name must match the identifier!
-
-YAY! -------------------------------------------------------
-Good news, everybody! The provided YAML rule was updated
-successfully to the new version 4.0 format of arara! Of
-course, there are no guarantees this new rule will work out
-of the box, so fingers crossed! Take a closer look at the
-manual and update your rule to use the new enhancements of
-arara. Have a great time!
-\end{codebox}
+\item[\textcolor{okcolour}{\faCheck}]\mdbox{R}{(Session.)get(String key)}{Object}
+\end{itemize}
+\end{messagebox}
-The resulting rule is identical to the one manually converted in this section. Just note that, when creating the file, the resulting \gls{YAML} file might write the keys in alphabetical order. That means that, although both files semantically represent the same rule, the positions of the keys differ. However, that poses no issue at all, as long as the keys are correctly defined. Also, it is important to note that, due to a conversion policy of the underlying \gls{YAML} library, folded scalars in the old format are transcribed as literal scalars in the new format. We could force a folded style as default, but the resulting rule would be unnecessarily verbose, so we opted for the simpler, cleaner solution. As a direct consequence, we strongly recommend a subsequent verification and potential fix of existing literal scalars into folded ones, if any. Please refer to Section~\ref{sec:yamlscalars}, on page~\pageref{sec:yamlscalars}, for more details on scalars.
+\begin{messagebox}{Support for multiple files}{araracolour}{\icinfo}{white}
+From version 5.0 on, \arara\ is able to compile multiple files at once by providing multiple files as arguments. Please note that they should reside in the same working directory. Every other kind of compilation of multiple files is restricted by the mechanisms of the running programs. See \autoref{chap:commandline} for details.
+\end{messagebox}
-\begin{messagebox}{Replace plain strings in commands}{araracolour}{\icattention}{white}
-As plain strings are known to be problematic when defining commands, they are marked as deprecated in version 4.0 of \arara\ and will likely be removed in future releases. Since you are migrating from an old format to a new one, please consider replacing plain strings in command by proper \rbox{Command} objects. The helper methods available in the rule context, including the indispensable \mtbox{getCommand} method, for obvious reasons, are detailed in Section~\ref{sec:commandsandtriggers}, on page~\pageref{sec:commandsandtriggers}. It is highly advisable to update your rules on this regard, if applicable.
+\begin{messagebox}{Support for changing the working directory}{araracolour}{\icinfo}{white}
+A common problem when compiling \TeX\ files are specialties of \TeX\ engines looking for files. Usually, you should call an engine from the directory where the target file is located. \arara\ had the same restriction in that case. Now you can instruct \arara\ to operate from another directory lifting that constraint. See \autoref{chap:commandline} for details.
\end{messagebox}
-This section pretty much covered the basics for correctly migrating rules in the old format to the new one. Of course, it is highly advisable to make use of the new features available in \arara\ 4.0 for achieving better results. If you need any help, please do not hesitating in contacting us. See Section~\ref{sec:support}, on page~\pageref{sec:support}, for more details on how to get help.
+This section pretty much covered the basics of the changes to this version. Of course, it is highly advisable to make use of the new features available in \arara\ 5.0 for achieving better results. If you need any help, please do not hesitate to contact us. See Section~\ref{sec:support}, on page~\pageref{sec:support}, for more details on how to get help.
diff --git a/support/arara/doc/chapters/configuration.tex b/support/arara/doc/chapters/configuration.tex
index 35553378d2..e7aba4102b 100644
--- a/support/arara/doc/chapters/configuration.tex
+++ b/support/arara/doc/chapters/configuration.tex
@@ -26,7 +26,7 @@ Our tool looks for the presence of at least one of four very specific files befo
\vspace{1.4em}
-From version 4.0 on, \arara\ provides two approaches regarding the location of a configuration file. They dictate how the execution should behave and happen from a user perspective, and are described as follows.
+\arara\ provides two approaches regarding the location of a configuration file. They dictate how the execution should behave and happen from a user perspective, and are described as follows.
\begin{description}
\item[global configuration file] For this approach, the configuration file should be located at \abox[araracolour]{USER\_HOME} which is the home directory of the current user. All subsequent executions of \arara\ will read this configuration file and apply the specified settings accordingly. However, it is important to note that this approach has the lowest lookup priority, which means that a local configuration, presented as follows, will always supersede a global counterpart.
@@ -43,7 +43,7 @@ If the logging feature is properly enabled, \arara\ will indicate in the corresp
\section{Basic structure}
\label{sec:basicstructure}
-The following list describes the basic structure of an \arara\ configuration file by presenting the proper elements (or keys, if we consider the proper \gls{YAML} nomenclature). Observe that elements marked as \rbox[araracolour]{M} are mandatory (i.e, the configuration file \emph{has} to have them in order to work). Similarly, elements marked as \rbox[araracolour]{O} are optional, so you can safely ignore them when writing a configuration file for our tool.
+The following list describes the basic structure of an \arara\ configuration file by presenting the proper elements (or keys, if we consider the proper YAML nomenclature). Observe that elements marked as \rbox[araracolour]{M} are mandatory (i.e, the configuration file \emph{has} to have them in order to work). Similarly, elements marked as \rbox[araracolour]{O} are optional, so you can safely ignore them when writing a configuration file for our tool.
\begin{description}
\item[\describe{M}{!config}] This keyword is mandatory and must be the first line of a configuration file. It denotes the object mapping metadata to be internally used by the tool. Actually, the tool is not too demanding on using it (in fact, you could suppress it entirely and \arara\ will not complain), but it is considered good practice to start a configuration file with a \abox{!config} keyword regardless.
@@ -56,7 +56,7 @@ paths:
- '/opt/paulo/rules'
\end{codebox}
-There are three variables available in the \abox{paths} context and are described as follows (note that \gls{MVEL} variables and \glspl{orb-tag} are discussed in Chapter~\ref{sec:mvelbasicusage}). A variable will be denoted by \varbox{variable} in this list.
+There are three variables available in the \abox{paths} context and are described as follows (note that MVEL variables and orb tags are discussed in Chapter~\ref{sec:mvelbasicusage}). A variable will be denoted by \varbox{variable} in this list.
\begin{description}
\item[\varbox{user.home}] This variable, as the name implies, holds the value of the absolute, canonical path of \abox[araracolour]{USER\_HOME} which is the home directory of the current user, as plain string. Note that the specifics of the home directory (such as name and location) are defined by the operating system involved.
@@ -66,25 +66,25 @@ paths:
- '@{user.home}/rules'
\end{codebox}
-\item[\varbox{user.dir}] This variable, as the name implies, holds the value of the absolute, canonical path of \abox[araracolour]{USER\_DIR} which is the working directory associated with the current execution, as plain string. Note that the working directory approach requires a user execution strategy to ensure the correct path value.
+\item[\varbox{user.name}] This variable, as the name implies, holds the value of the current user account name, as plain string. On certain operating systems, this value is used to build the home directory structure.
\begin{codebox}{Example}{teal}{\icnote}{white}
paths:
-- '@{user.dir}/rules'
+- '/home/@{user.name}/rules'
\end{codebox}
-\item[\varbox{user.name}] This variable, as the name implies, holds the value of the current user account name, as plain string. On certain operating systems, this value is used to build the home directory structure.
-\end{description}
+\item[\varbox{application.workingDirectory}] This variable, as the name implies, holds the value of the absolute, canonical path of the working directory associated with the current execution, as plain string.
\begin{codebox}{Example}{teal}{\icnote}{white}
paths:
-- '/home/@{user.name}/rules'
+- '@{application.workingDirectory}/rules'
\end{codebox}
+\end{description}
-Observe that the \varbox{user} variable actually holds a map containing three keys (resulting in a map within a map). However, for didactic purposes, it is easier to use the property navigation feature of \gls{MVEL}, detailed in Section~\ref{sec:propertynavigation}, on page~\pageref{sec:propertynavigation}, and consider the map references as three independent variables. You can use property navigation styles interchangeably. Note that you can also precede the path with the special keyword \rbox{<arara>} and save some quotes (see Section~\ref{sec:rule}, on page~\pageref{sec:rule}). In this specific scenario, the special keyword will be automatically removed afterwards.
+Observe that the \varbox{user} variable actually holds a map containing two keys (resulting in a map within a map). However, for didactic purposes, it is easier to use the property navigation feature of MVEL, detailed in Section~\ref{sec:propertynavigation}, on page~\pageref{sec:propertynavigation}, and consider the map references as three independent variables. You can use property navigation styles interchangeably. Note that you can also precede the path with the special keyword \rbox{<arara>} and save some quotes (see Section~\ref{sec:rule}, on page~\pageref{sec:rule}, but keep in mind that this special keyword is marked as deprecated and will be removed in future versions). In this specific scenario, the special keyword will be automatically removed afterwards.
\begin{messagebox}{Avoid folded and literal styles for scalars in a path}{attentioncolour}{\icattention}{black}
-Do not use folded or literal styles for scalars in a path! The \gls{orb-tag} resolution for a path in plain string should be kept as simple as possible, so \emph{always} use the inline style.
+Do not use folded or literal styles for scalars in a path! The orb tag resolution for a path in plain string should be kept as simple as possible, so \emph{always} use the inline style.
\end{messagebox}
\item[\describecf{O}{string}{language}{en}] This key sets the language of all subsequent executions of \arara\ according to the provided language code value, as plain string. The default language is set to English. Also, it is very important to observe that the \opbox{{-}language} command line option can override this setting.
@@ -117,19 +117,19 @@ logging: true
header: false
\end{codebox}
-\item[\describecf{O}{string}{logname}{arara}] This key modifies the default log file name, according to the associated plain string value, plus the \rbox{log} extension. The value cannot be empty or contain invalid characters. There is no \gls{orb-tag} evaluation in this specific context, only a plain string value. The log file will be written by our tool if, and only if, the \opbox{{-}log} command line option is used.
+\item[\describecf{O}{string}{logname}{arara}] This key modifies the default log file name, according to the associated plain string value, plus the \rbox{log} extension. The value cannot be empty or contain invalid characters. There is no orb tag evaluation in this specific context, only a plain string value. The log file will be written by our tool if, and only if, the \opbox{{-}log} command line option is used.
\begin{codebox}{Example}{teal}{\icnote}{white}
logname: mylog
\end{codebox}
-\item[\describecf{O}{string}{dbname}{arara}] This key modifies the default \gls{XML} database file name, according to the associated plain string value, plus the \rbox{xml} extension. The value cannot be empty or contain invalid characters. There is no \gls{orb-tag} evaluation in this specific context, only a plain string value. This database is used by file hashing operations, detailed in Section~\ref{sec:files}, on page~\pageref{sec:files}.
+\item[\describecf{O}{string}{dbname}{arara}] This key modifies the default YAML database file name, according to the associated plain string value, plus the \rbox{yaml} extension. The value cannot be empty or contain invalid characters. There is no orb tag evaluation in this specific context, only a plain string value. This database is used by file hashing operations, detailed in Section~\ref{sec:files}, on page~\pageref{sec:files}.
\begin{codebox}{Example}{teal}{\icnote}{white}
dbname: mydb
\end{codebox}
-\item[\describecf{O}{string}{laf}{none}] This key modifies the default look and feel class reference, i.e, the appearance of \gls{GUI} widgets provided by our tool, according to the associated plain string value. The value cannot be empty or contain invalid characters. There is no \gls{orb-tag} evaluation in this specific context, only a plain string value. This look and feel setting is used by UI methods, detailed in Section~\ref{sec:dialogboxes}, on page~\pageref{sec:dialogboxes}. Note that this value is used by the underlying Java runtime environment, so a full qualified class name is expected.
+\item[\describecf{O}{string}{laf}{none}] This key modifies the default look and feel class reference, i.e, the appearance of GUI widgets provided by our tool, according to the associated plain string value. The value cannot be empty or contain invalid characters. There is no orb tag evaluation in this specific context, only a plain string value. This look and feel setting is used by UI methods, detailed in Section~\ref{sec:dialogboxes}, on page~\pageref{sec:dialogboxes}. Note that this value is used by the underlying Java runtime environment, so a full qualified class name is expected.
\begin{codebox}{Example}{teal}{\icnote}{white}
laf: 'javax.swing.plaf.nimbus.NimbusLookAndFeel'
@@ -244,7 +244,7 @@ filetypes:
\begin{messagebox}{Do not escape backslashes}{attentioncolour}{\icattention}{black}
\setlength{\parskip}{1em}
-When writing a file type pattern, there is no need for escaping backslashes as one does for strings in a typical programming language (including \gls{MVEL} expressions). In this specific scenario, key values are represented as plain, literal strings.
+When writing a file type pattern, there is no need for escaping backslashes as one does for strings in a typical programming language (including MVEL expressions). In this specific scenario, key values are represented as plain, literal strings.
However, please note that character escaping might be required by the underlying regular expression in some scenarios (i.e, a literal dot in the pattern). It is highly recommended to consult a proper regular expression documentation for a comprehensive overview.
\end{messagebox}
diff --git a/support/arara/doc/chapters/deploying.tex b/support/arara/doc/chapters/deploying.tex
index 533b883ee2..2dfc68141c 100644
--- a/support/arara/doc/chapters/deploying.tex
+++ b/support/arara/doc/chapters/deploying.tex
@@ -4,14 +4,10 @@
As previously mentioned, \arara\ runs on top of a Java virtual machine, available on all major operating systems -- in some cases, you might need to install the proper virtual machine. This chapter provides detailed instructions on how to properly deploy the tool in your computer from either the official package available in our project repository or a personal build generated from source (as seen in Section~\ref{sec:compilingthetool}, on page~\pageref{sec:compilingthetool}).
-\begin{messagebox}{No more installers}{araracolour}{\icok}{white}
-Be mindful that, from version 4.0 on, the team decided to not release cross-platform installers any more. Our tool is available off the shelf on all major \TeX\ distributions, including \TeX\ Live and MiK\TeX, which makes manual installation unnecessary given the significant coverage of such distributions. Chances are you already have \arara\ in your system!
-\end{messagebox}
-
\section{Directory structure}
\label{sec:directorystructure}
-From the early development stages, our tool employs a very straightforward directory structure. In short, we provide the \abox[araracolour]{ARARA\_HOME} alias to the directory path in which the \rbox[araracolour]{arara.jar} Java archive file is located. This particular file is the heart and soul of our tool and dictates the default rule search path, which is a special directory named \abox[araracolour]{rules/} available from the same level. This directory contains all rules specified in the \gls{YAML} format, as seen in Section~\ref{sec:rule}, on page~\pageref{sec:rule}. The structure overview is presented as follows.
+From the early development stages, our tool employs a very straightforward directory structure. In short, we provide the \abox[araracolour]{ARARA\_HOME} alias to the directory path in which the \rbox[araracolour]{arara.jar} Java archive file is located. This particular file is the heart and soul of our tool and dictates the default rule search path, which is a special directory named \abox[araracolour]{rules/} available from the same level. This directory contains all rules specified in the YAML format, as seen in Section~\ref{sec:rule}, on page~\pageref{sec:rule}. The structure overview is presented as follows.
\vspace{1em}
@@ -36,15 +32,15 @@ forked edges,
\vspace{1.4em}
-Provided that this specific directory structure is honoured, the tool is ready for use off the shelf. In fact, the official \arara\ package available in the \href{https://github.com/cereda/arara/releases}{release section} of our project repository, as well as the \href{https://bintray.com/cereda/arara}{Bintray} software distribution service, exactly mirrors this structure. Once the package is properly downloaded, we simply need to extract it into a proper \abox[araracolour]{ARARA\_HOME} location.
+Provided that this specific directory structure is honoured, the tool is ready for use off the shelf. In fact, the official \arara\ package available in the \href{https://gitlab.com/islandoftex/arara/-/releases}{release section} of our project repository. Once the package is properly downloaded, we simply need to extract it into a proper \abox[araracolour]{ARARA\_HOME} location.
\section{Defining a location}
\label{sec:definingalocation}
-First and foremost, we need to obtain \rbox{arara-4.0.zip} from either our project repository at GitHub or at the Bintray service mirror. As the name indicates, this is a compressed file format, so we need to extract it into a proper location. Run the following command in the terminal:
+First and foremost, we need to obtain \rbox{arara-5.0.zip} from either our project repository at GitLab. As the name indicates, this is a compressed file format, so we need to extract it into a proper location. Run the following command in the terminal:
\begin{codebox}{Terminal}{teal}{\icnote}{white}
-$ unzip arara-4.0.zip
+$ unzip arara-5.0.zip
\end{codebox}
As a result of the previous command, we obtained a directory named \abox[araracolour]{arara} with the exact structure presented in Section~\ref{sec:directorystructure} in our working directory. Now we need to decide where \arara\ should reside in our system. For example, I usually deploy my tools inside the \abox[araracolour]{/opt/paulo} path, so I need to run the following command in the terminal (please note that my personal directory already has the proper permissions, so I do not need superuser privileges):
@@ -96,31 +92,31 @@ If the tool was built from source (as indicated in Section~\ref{sec:compilingthe
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ java -jar /opt/paulo/arara/arara.jar
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-arara 4.0 (revision 1)
-Copyright (c) 2012-2018, Paulo Roberto Massa Cereda
-All rights reserved
-
-usage: arara [file [--dry-run] [--log] [--verbose | --silent]
- [--timeout N] [--max-loops N] [--language L]
- [ --preamble P ] [--header] | --help | --version]
- -h,--help print the help message
- -H,--header extract directives only in the file header
- -l,--log generate a log output
- -L,--language <code> set the application language
- -m,--max-loops <number> set the maximum number of loops
- -n,--dry-run go through all the motions of running a
- command, but with no actual calls
- -p,--preamble <name> set the file preamble based on the
- configuration file
- -s,--silent hide the command output
- -t,--timeout <number> set the execution timeout (in milliseconds)
- -V,--version print the application version
- -v,--verbose print the command output
+Usage: arara [OPTIONS] [file]...
+
+Options:
+ -l, --log Generate a log output
+ -v, --verbose / -s, --silent Print the command output
+ -n, --dry-run Go through all the motions of running a
+ command, but with no actual calls
+ -H, --header Extract directives only in the file header
+ -t, --timeout INT Set the execution timeout (in milliseconds)
+ -L, --language TEXT Set the application language
+ -m, --max-loops INT Set the maximum number of loops (> 0)
+ -p, --preamble TEXT Set the file preamble based on the
+ configuration file
+ -d, --working-directory DIRECTORY
+ Set the working directory for all tools
+ -V, --version Show the version and exit
+ -h, --help Show this message and exit
+
+Arguments:
+ file The file(s) to evaluate and process
\end{codebox}
Please observe that, provided that the underlying operating system has an appropriate Java virtual machine installed, \arara\ can be used as a portable, standalone application. Portable applications can be stored on any data storage device, including external devices such as USB drives and floppy disks.
@@ -186,31 +182,31 @@ Regardless of the adopted approach, there should be an \rbox{arara} wrapper avai
\begin{codebox}{Terminal}{teal}{\icnote}{white}
$ arara
- __ _ _ __ __ _ _ __ __ _
+ __ _ _ __ __ _ _ __ __ _
/ _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-arara 4.0 (revision 1)
-Copyright (c) 2012-2018, Paulo Roberto Massa Cereda
-All rights reserved
-
-usage: arara [file [--dry-run] [--log] [--verbose | --silent]
- [--timeout N] [--max-loops N] [--language L]
- [ --preamble P ] [--header] | --help | --version]
- -h,--help print the help message
- -H,--header extract directives only in the file header
- -l,--log generate a log output
- -L,--language <code> set the application language
- -m,--max-loops <number> set the maximum number of loops
- -n,--dry-run go through all the motions of running a
- command, but with no actual calls
- -p,--preamble <name> set the file preamble based on the
- configuration file
- -s,--silent hide the command output
- -t,--timeout <number> set the execution timeout (in milliseconds)
- -V,--version print the application version
- -v,--verbose print the command output
+Usage: arara [OPTIONS] [file]...
+
+Options:
+ -l, --log Generate a log output
+ -v, --verbose / -s, --silent Print the command output
+ -n, --dry-run Go through all the motions of running a
+ command, but with no actual calls
+ -H, --header Extract directives only in the file header
+ -t, --timeout INT Set the execution timeout (in milliseconds)
+ -L, --language TEXT Set the application language
+ -m, --max-loops INT Set the maximum number of loops (> 0)
+ -p, --preamble TEXT Set the file preamble based on the
+ configuration file
+ -d, --working-directory DIRECTORY
+ Set the working directory for all tools
+ -V, --version Show the version and exit
+ -h, --help Show this message and exit
+
+Arguments:
+ file The file(s) to evaluate and process
\end{codebox}
It is important to observe that the wrapper initiative presented in this section might cause a potential name clash with existing \TeX\ Live or MiK\TeX\ binaries and symbolic links. In this particular scenario, make sure to inspect the command location as a means to ensure a correct execution. To this end, run the following command in the terminal:
diff --git a/support/arara/doc/chapters/foreword.tex b/support/arara/doc/chapters/foreword.tex
deleted file mode 100644
index bbf5073c8a..0000000000
--- a/support/arara/doc/chapters/foreword.tex
+++ /dev/null
@@ -1,22 +0,0 @@
-% !TeX root = ../arara-manual.tex
-\chapter*{Foreword}
-\label{chap:foreword}
-
-\epigraph{That deserves no less than a ``Holy guacamole!''.}{\textsc{Gonzalo Medina}}
-
-{\setlength{\parskip}{1em}
-Creating a PDF from \LaTeX\ code can be quite tiresome. Suppose I am using \TeX works and I have a document that has a bibliography, glossary and index, then I need to select the \rbox{pdflatex} tool and click on the typeset button, then select the \rbox{bibtex} tool and click on the typeset button, then select the \rbox{makeindex} tool and click on the typeset button, then select the \rbox{makeglossaries} tool (which I may need to add first) and click on the typeset button, then select the \rbox{pdflatex} tool and click on the typeset button, and once more to ensure all the cross-references are up to date. Then I edit the document and have to go through that whole process all over again!
-
-Automation makes life so much simpler. Instead of all those tools that I need to keep selecting, I just need one tool, in this case \arara, which will do all the necessary work for me behind the scenes.
-
-Some automation tools try to be clever, but there are invariably exceptions that trip them up. \arara\ does not try to be clever; it just does what it is told to do. The instructions are provided as special comments in the source code that \TeX\ ignores, but they are human-readable and can also provide a hint to non-\arara\ co-authors as to what tools are required in order to complete the document build.
-
-The new improved \arara\ version 4.0 now comes with some exciting features, such as the ability to use conditionals, and it definitely ranks as my favourite automation tool for document creation. Paulo has done a great job, and I would like to take this opportunity to thank
-him for his patience in dealing with my many feature requests!}
-
-\vfill
-
-\begin{flushright}
-Nicola Louise Cecilia Talbot\\
-\emph{on behalf of the \arara\ team}
-\end{flushright}
diff --git a/support/arara/doc/chapters/introduction.tex b/support/arara/doc/chapters/introduction.tex
index f064774c9a..11410ff6d3 100644
--- a/support/arara/doc/chapters/introduction.tex
+++ b/support/arara/doc/chapters/introduction.tex
@@ -33,7 +33,7 @@ $ arara hello.tex
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'hello.tex' (size: 86 bytes, last modified: 05/03/2018
+Processing 'hello.tex' (size: 86 B, last modified: 05/03/2018
07:28:30), please wait.
It looks like no directives were found in the provided file. Make
@@ -68,7 +68,7 @@ $ arara hello.tex
| (_| | | | (_| | | | (_| |
\__,_|_| \__,_|_| \__,_|
-Processing 'hello.tex' (size: 86 bytes, last modified: 05/03/2018
+Processing 'hello.tex' (size: 86 B, last modified: 05/03/2018
07:28:30), please wait.
(PDFLaTeX) PDFLaTeX engine .............................. SUCCESS
@@ -84,8 +84,7 @@ Hurrah, we finally got our document properly compiled with a \TeX\ engine by the
When adding a directive in our source code, we are explicitly telling the tool what we want it to do, but I am afraid that is not sufficient at all. So far, \arara\ knows \emph{what} to do, but now it needs to know \emph{how} the task should be done. If we want \arara\ to run \rbox{pdflatex} on \rbox{hello.tex}, we need to have instructions telling our tool how to run that specific application. This particular sequence of instructions is referred as a \emph{rule} in our context.
\begin{messagebox}{Note on rules}{attentioncolour}{\icattention}{black}
-Although the core team provides a lot of rules shipped with \arara\ out of the box, with the possibility of extending the set by adding more rules, some users might find this decision rather annoying, since other tools have most of their rules hard-coded, making the automation process even more transparent. However, since \arara\ does not rely on a specific automation or compilation scheme, it becomes more extensible. The use of directives in the source code make the automation steps more fluent, which allows the specification of complex workflows very easy.
-% "very easy" -> "much easier" perhaps?
+Although the core team provides a lot of rules shipped with \arara\ out of the box, with the possibility of extending the set by adding more rules, some users might find this decision rather annoying, since other tools have most of their rules hard-coded, making the automation process even more transparent. However, since \arara\ does not rely on a specific automation or compilation scheme, it becomes more extensible. The use of directives in the source code make the automation steps more fluent, which allows the specification of complex workflows much easier.
\end{messagebox}
Despite the inherited verbosity of automation steps not being suitable for small documents, \arara\ really shines when you have a document which needs full control of the automation process (for instance, a thesis or a manual). Complex workflows are easily tackled by our tool.
@@ -120,28 +119,18 @@ An \arara\ directive is usually defined in a line of its own, started with a com
Our example has one directive, referencing \rbox{pdflatex}. It is important to observe that the \rbox{pdflatex} identifier \emph{does not represent the command to be executed}, but \emph{the name of the rule associated with that directive}.
-\begin{messagebox}{New feature in version 4.0}{araracolour}{\icinfo}{white}
-\textbf{Multiline directives} -- Later on, in Section~\ref{sec:directives}, on page~\pageref{sec:directives}, we will discover that a directive can also span several lines in order to provide a better code organization. For now, let us assume a typical directive occupies only one line.
-\end{messagebox}
-
-Once \arara\ finds a directive, it will look for the associated \emph{rule}. In our example, it will look for a rule named \rbox{pdflatex} which will evidently run the \rbox{pdflatex} command line application. Rules are \gls{YAML} files named according to their identifiers followed by the \rbox{yaml} extension and follow a strict structure. This concept is covered in Section~\ref{sec:rule}, on page~\pageref{sec:rule}.
-
-\begin{messagebox}{New feature in version 4.0}{araracolour}{\icattention}{white}
-\textbf{\gls{REPL} workflow} -- \arara\ now employs a \gls{REPL} workflow for rules and directives. In previous versions, directives were extracted, their corresponding rules were analyzed, commands were built and added to a queue before any proper execution or evaluation. I decided to change this workflow, so now \arara\ evaluates each rule on demand, i.e, there is no \emph{a priori} checking. A rule will \emph{always} reflect the current state, including potential side effects from previous executed rules.
-\end{messagebox}
+Once \arara\ finds a directive, it will look for the associated \emph{rule}. In our example, it will look for a rule named \rbox{pdflatex} which will evidently run the \rbox{pdflatex} command line application. Rules are YAML files named according to their identifiers followed by the \rbox{yaml} extension and follow a strict structure. This concept is covered in Section~\ref{sec:rule}, on page~\pageref{sec:rule}.
Now, we have a queue of pairs $(\textit{directive}, \textit{rule})$ to process. For each pair, \arara\ will map the directive to its corresponding rule, evaluate it and run the proper command. The execution chain requires that command $i$ was successfully executed to then proceed to command $i+1$, and so forth. This is also by design: \arara\ will halt the execution if any of the commands in the queue had raised an error. How does one know if a command was successfully executed? \arara\ checks the corresponding \emph{exit status} available after a command execution. In general, a successful execution yields 0 as its exit status.
-\begin{messagebox}{New feature in version 4.0}{araracolour}{\icinfo}{white}
-\textbf{Custom exit status checking} -- In previous versions, there was no way of customizing the exit status checking of a command. A command was successful if, and only if, its resulting exit status was 0 and no other value. From now on, we can define any value, or even forget about it and make it always return a valid status regardless of execution (for instance, in a rule that always is successful -- see, for instance, the \rbox{clean} rule).
-\end{messagebox}
+In order to decide whether a command execution is successful, \arara\ relies on exit status checking. Typically, a command is successful if, and only if, its resulting exit status is 0 and no other value. However, we can define any value, or even forget about it and make it always return a valid status regardless of execution (for instance, in a rule that always is successful -- see, for instance, the \rbox{clean} rule).
That is pretty much how \arara\ works: directives in the source code are mapped to rules. These pairs are added to a queue. The queue is then executed and the status is reported. More details about the expansion process are presented in Chapter~\ref{chap:importantconcepts}, on page~\pageref{chap:importantconcepts}. In short, we teach \arara\ to do a task by providing a rule, and tell it to execute it through directives in the source code.
\section{Operating system remarks}
\label{sec:operatingsystemremarks}
-The application is written using the Java language, so \arara\ runs on top of a Java virtual machine, available on all the major operating systems~--~in some cases, you might need to install the proper virtual machine. We tried very hard to keep both code and libraries compatible with older virtual machines or from other vendors. Currently, \arara\ is known to run on Oracle's Java 5 to 10, and OpenJDK 5 to 10. We also have reports of users successfully using the tool with virtual machines provided by Azul Systems, so your mileage might vary greatly.
+The application is written using the Kotlin language (and some pieces of Java), so \arara\ runs on top of a Java virtual machine, available on all the major operating systems~--~in some cases, you might need to install the proper virtual machine. We tried very hard to keep both code and libraries compatible with older virtual machines or from other vendors. Currently, \arara\ is known to run on Oracle's Java 8 to 13, OpenJDK 8 to 13 and ZuluFX 8 and 11.
\begin{messagebox}{Outdated Java virtual machines}{attentioncolour}{\icerror}{black}
Dear reader, beware of outdated software, mainly Java virtual machines! Although \arara\ offers support for older virtual machines, try your best to keep your software updated as frequently as possible. The legacy support exists only for historical reasons, and also due to the sheer fact that we know some people that still runs \arara\ on very old hardware. If you are not in this particular scenario, get the latest virtual machine.
@@ -152,6 +141,6 @@ In Chapter~\ref{chap:buildingfromsource}, on page~\pageref{chap:buildingfromsour
\section{Support}
\label{sec:support}
-If you run into any issue with \arara, please let us know. We all have very active profiles in the \href{https://tex.stackexchange.com/}{\TeX\ community at StackExchange}, so just use the \rbox[araracolour]{arara} tag in your question and we will help you the best we can (also, take a look at their \href{https://tex.meta.stackexchange.com/q/1436}{starter guide}). We also have a \href{https://gitter.im/cereda/arara}{Gitter chat room}, in which we occasionally hang out. Also, if you think the report is worthy of an issue, open one in our \href{https://github.com/cereda/arara/issues}{GitHub repository}. And last, but not least, feel free to poke us by good old electronic mail (please try the other approaches first).
+If you run into any issue with \arara, please let us know. We all have very active profiles in the \href{https://tex.stackexchange.com/}{\TeX\ community at StackExchange}, so just use the \rbox[araracolour]{arara} tag in your question and we will help you the best we can (also, take a look at their \href{https://tex.meta.stackexchange.com/q/1436}{starter guide}). We also have a \href{https://gitter.im/cereda/arara}{Gitter chat room}, in which we occasionally hang out. Also, if you think the report is worthy of an issue, open one in our \href{https://gitlab.com/islandoftex/arara/issues}{GitLab repository}.
We really hope you like our humble contribution to the \TeX\ community. Let \arara\ enhance your \TeX\ experience, it will help you when you will need it the most. Enjoy the manual.
diff --git a/support/arara/doc/chapters/license.tex b/support/arara/doc/chapters/license.tex
index 94d8a50819..aab456ebe2 100644
--- a/support/arara/doc/chapters/license.tex
+++ b/support/arara/doc/chapters/license.tex
@@ -12,7 +12,7 @@
\footnotesize
\includegraphics[scale=0.25]{logos/logo1.pdf}
-Copyright \textcopyright\ 2012--2018, Paulo Roberto Massa Cereda\\
+Copyright \textcopyright\ 2012--2020, Island of \TeX\\
All rights reserved.
\vspace{1em}
diff --git a/support/arara/doc/chapters/logging.tex b/support/arara/doc/chapters/logging.tex
index e13c6e314c..5309cee318 100644
--- a/support/arara/doc/chapters/logging.tex
+++ b/support/arara/doc/chapters/logging.tex
@@ -16,12 +16,14 @@ When running our tool on the previous example with the \opbox{{-}log} command li
\section{System information}
\label{sec:systeminformation}
-The very first entry to appear in the log file is the current version of \arara\ followed by a revision number. The revision number acts as a counter for the last review on the major version. The counter starts at 1 to denote the first release in the version 4.0 series. The revision number is also important to indicate possible new features introduced later on, in the application.
+The very first entry to appear in the log file is the current version of \arara.
\begin{codebox}{Log file}{teal}{\icnote}{white}
-Welcome to arara 4.0 (revision 1)!
+Welcome to arara 5.0.0!
\end{codebox}
+% TODO: review what will be output in the future
+
The following entries in the log file are the absolute path of the current deployment of \arara\ (line 1), details about the current Java virtual machine (namely, vendor and absolute path, in lines 2 and 3, respectively), the underlying operating system information (namely, system name, architecture and eventually the kernel version, in line 4), home and working directories (lines 5 and 6, respectively), and the absolute path of the applied configuration file, if any (line 7). This block is very important to help with tracking possible issues related to the underlying operating system and the tool configuration itself.
\begin{codebox}{Log file}{teal}{\icnote}{white}
@@ -30,13 +32,12 @@ The following entries in the log file are the absolute path of the current deplo
::: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-4.b10.fc28.x86_64/jre
::: Linux, amd64, 4.16.12-300.fc28.x86_64
::: user.home @ /home/paulo
-::: user.dir @ /home/paulo/Documents
::: CF @ [none]
\end{codebox}
\begin{messagebox}{A privacy note}{araracolour}{\icok}{white}
\setlength{\parskip}{1em}
-I understand that the previous entries containing information about the underlying operating system might pose as a privacy threat to some users. However, it is worth noting that \arara\ does not share any sensitive information about your system, as entries are listed in the log file for debugging purposes only, locally in your computer.
+We understand that the previous entries containing information about the underlying operating system might pose as a privacy threat to some users. However, it is worth noting that \arara\ does not share any sensitive information about your system, as entries are listed in the log file for debugging purposes only, locally in your computer.
From experience, these entries greatly help our users to track down errors in the execution, as well as learning more about the underlying operating system. However, be mindful of sharing your log file! Since the log file contains structured blocks, it is highly advisable to selectively choose the ones relevant to the current discussion.
\end{messagebox}
@@ -49,7 +50,7 @@ It is important to observe that localized messages are also applied to the log f
The following block in the log file refers to file information and directive extraction. First, as with the terminal output counterpart, the tool will display details about the file being processed, including size and modification status:
\begin{codebox}{Log file}{teal}{\icnote}{white}
-Processing 'doc12.tex' (size: 74 bytes, last modified:
+Processing 'doc12.tex' (size: 74 B, last modified:
06/02/2018 05:36:40), please wait.
\end{codebox}
@@ -98,7 +99,7 @@ Note, however, that potential errors in directive conditionals, as well as simil
\section{Rule interpretation}
\label{sec:ruleinterpretation}
-Once all directives are normalized, \arara\ proceeds to interpret the potential conditionals, if any, and the corresponding rules. Note that, when available, the conditional type dictates whether the rule should be interpreted first or not. For each rule, the tool informs the identifier and the absolute path of the corresponding \gls{YAML} file. In this specific scenario, the rule is part of the default rule pack released with our tool:
+Once all directives are normalized, \arara\ proceeds to interpret the potential conditionals, if any, and the corresponding rules. Note that, when available, the conditional type dictates whether the rule should be interpreted first or not. For each rule, the tool informs the identifier and the absolute path of the corresponding YAML file. In this specific scenario, the rule is part of the default rule pack released with our tool:
\begin{codebox}{Log file}{teal}{\icnote}{white}
I am ready to interpret rule 'pdftex'.
diff --git a/support/arara/doc/chapters/methods.tex b/support/arara/doc/chapters/methods.tex
index b8cca6a5f3..dd6da67902 100644
--- a/support/arara/doc/chapters/methods.tex
+++ b/support/arara/doc/chapters/methods.tex
@@ -2,10 +2,10 @@
\chapter{Methods}
\label{chap:methods}
-\arara\ features several helper methods available in directive conditional and rule contexts which provide interesting features for enhancing the user experience, as well as improving the automation itself. This chapter provides a list of such methods. It is important to observe that virtually all classes from the Java runtime environment can be used within \gls{MVEL} expressions, so your mileage might vary.
+\arara\ features several helper methods available in directive conditional and rule contexts which provide interesting features for enhancing the user experience, as well as improving the automation itself. This chapter provides a list of such methods. It is important to observe that virtually all classes from the Java runtime environment can be used within MVEL expressions, so your mileage might vary.
\begin{messagebox}{A note on writing code}{araracolour}{\icok}{white}
-As seen in Chapter~\ref{chap:mvel}, on page~\pageref{chap:mvel}, Java and \gls{MVEL} code be used interchangeably within expressions and \glspl{orb-tag}, including instantiation of classes into objects and invocation of methods. However, be mindful of explicitly importing Java packages and classes through the classic \rbox{import} statement, as \gls{MVEL} does not automatically handle imports, or an exception will surely be raised. Alternatively, you can provide the full qualified name to classes as well.
+As seen in Chapter~\ref{chap:mvel}, on page~\pageref{chap:mvel}, Java and MVEL code be used interchangeably within expressions and orb tags, including instantiation of classes into objects and invocation of methods. However, be mindful of explicitly importing Java packages and classes through the classic \rbox{import} statement, as MVEL does not automatically handle imports, or an exception will surely be raised. Alternatively, you can provide the full qualified name to classes as well.
\end{messagebox}
Methods are listed with their complete signatures, including potential parameters and corresponding types. Also, the return type of a method is denoted by \rrbox{type} and refers to a typical Java data type (either class or primitive). Do not worry too much, as there are illustrative examples. A method available in the directive conditional context will be marked by \ctbox{C} next to the corresponding signature. Similarly, an entry marked by \ctbox{R} denotes that the corresponding method is available in the rule context.
@@ -34,7 +34,7 @@ if (reference.equals(getOriginalFile())) {
}
\end{codebox}
-\item[\mddbox{C}{R}{currentFile()}{File}] This method returns the file reference, as a \rbox{File} object, for the current directive. It is important to observe that, from version 4.0 on, \arara\ replicates the directive when the special \abox{files} parameter is detected amongst the parameters, so each instance will have a different reference.
+\item[\mddbox{C}{R}{currentFile()}{File}] This method returns the file reference, as a \rbox{File} object, for the current directive. It is important to observe that \arara\ replicates the directive when the special \abox{files} parameter is detected amongst the parameters, so each instance will have a different reference.
\begin{codebox}{Example}{teal}{\icnote}{white}
% arara: pdflatex if currentFile().getName() == 'thesis.tex'
@@ -46,30 +46,18 @@ if (reference.equals(getOriginalFile())) {
f = toFile('thesis.tex');
\end{codebox}
-\item[\mdbox{R}{getBasename(File file)}{String}] This method returns the base name (i.e, the name without the associated extension) of the provided \rbox{File} reference, as a string. Observe that this method ignores a potential path reference when extracting the base name. For a complete base name extraction with full path support, please refer to the \mtbox{getFullBasename} methods. Also, this method will throw an exception if the provided reference is not a proper file.
+\item[\mdbox{R}{getBasename(File file)}{String}] This method returns the base name (i.e, the name without the associated extension) of the provided \rbox{File} reference, as a string. Observe that this method ignores a potential path reference when extracting the base name. Also, this method will throw an exception if the provided reference is not a proper file.
\begin{codebox}{Example}{teal}{\icnote}{white}
basename = getBasename(toFile('thesis.tex'));
\end{codebox}
-\item[\mdbox{R}{getBasename(String reference)}{String}] This method returns the base name (i.e, the name without the associated extension) of the provided \rbox{String} reference, as a string. Observe that this method ignores a potential path reference when extracting the base name. For a complete base name extraction with full path support, please refer to the \mtbox{getFullBasename} methods.
+\item[\mdbox{R}{getBasename(String reference)}{String}] This method returns the base name (i.e, the name without the associated extension) of the provided \rbox{String} reference, as a string. Observe that this method ignores a potential path reference when extracting the base name.
\begin{codebox}{Example}{teal}{\icnote}{white}
basename = getBasename('thesis.tex');
\end{codebox}
-\item[\mdbox{R}{getFullBasename(File file)}{String}] This method returns the full base name (i.e, the name without the associated extension, as well as the potential path reference) of the provided \rbox{File} reference, as a string. This method will throw an exception if the provided reference is not a proper file.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-basename = getFullBasename(toFile('/home/paulo/thesis.tex'));
-\end{codebox}
-
-\item[\mdbox{R}{getFullBasename(String reference)}{String}] This method returns the full base name (i.e, the name without the associated extension, as well as the potential path reference) of the provided \rbox{String} reference, as a string. As the path discovery requires an underlying file conversion, this method will throw an exception if the provided reference is not a proper file.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-basename = getFullBasename('/home/paulo/thesis.tex');
-\end{codebox}
-
\item[\mdbox{R}{getFiletype(File file)}{String}] This method returns the file type (i.e, the associated extension specified as a suffix to the name, typically delimited with a full stop) of the provided \rbox{File} reference, as a string. This method will throw an exception if the provided reference is not a proper file. An empty string is returned if, and only if, the provided file name has no associated extension.
\begin{codebox}{Example}{teal}{\icnote}{white}
@@ -106,7 +94,7 @@ extension = getFiletype('thesis.pdf');
% arara: pdftex if missing('pdf')
\end{codebox}
-\item[\mddbox{C}{R}{changed(File file)}{boolean}] This method returns a boolean value according to whether the provided \rbox{File} reference has changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a \gls{XML} database file named \rbox{arara.xml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
+\item[\mddbox{C}{R}{changed(File file)}{boolean}] This method returns a boolean value according to whether the provided \rbox{File} reference has changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a YAML database file named \rbox{arara.yaml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
\vspace{1em}
@@ -135,14 +123,14 @@ It is important to observe that this method \emph{always} performs a database op
\end{codebox}
\begin{messagebox}{Short-circuit evaluation}{araracolour}{\icok}{white}
-According to the \href{https://en.wikipedia.org/wiki/Short-circuit_evaluation}{Wikipedia entry}, a \emph{short-circuit evaluation} is the semantics of some boolean operators in some programming languages in which the second argument is executed or evaluated only if the first argument does not suffice to determine the value of the expression. In Java (and consequently \gls{MVEL}), both short-circuit and standard boolean operators are available.
+According to the \href{https://en.wikipedia.org/wiki/Short-circuit_evaluation}{Wikipedia entry}, a \emph{short-circuit evaluation} is the semantics of some boolean operators in some programming languages in which the second argument is executed or evaluated only if the first argument does not suffice to determine the value of the expression. In Java (and consequently MVEL), both short-circuit and standard boolean operators are available.
\end{messagebox}
\begin{messagebox}{CRC as a hashing algorithm}{attentioncolour}{\icattention}{black}
\arara\ internally relies on a CRC32 implementation for file hashing. This particular choice, although not designed for hashing, offers an interesting trade-off between speed and quality. Besides, since it is not computationally expensive as strong algorithms such as MD5 and SHA1, CRC32 can be used for hashing typical \TeX\ documents and plain text files with little to no collisions.
\end{messagebox}
-\item[\mddbox{C}{R}{changed(String extension)}{boolean}] This method returns a boolean value according to whether the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the provided \rbox{String} extension has changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a \gls{XML} database file named \rbox{arara.xml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
+\item[\mddbox{C}{R}{changed(String extension)}{boolean}] This method returns a boolean value according to whether the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the provided \rbox{String} extension has changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a YAML database file named \rbox{arara.yaml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
\vspace{1em}
@@ -170,7 +158,7 @@ It is important to observe that this method \emph{always} performs a database op
% arara: pdflatex if changed('tex')
\end{codebox}
-\item[\mddbox{C}{R}{unchanged(File file)}{boolean}] This method returns a boolean value according to whether the provided \rbox{File} reference has not changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a \gls{XML} database file named \rbox{arara.xml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
+\item[\mddbox{C}{R}{unchanged(File file)}{boolean}] This method returns a boolean value according to whether the provided \rbox{File} reference has not changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a YAML database file named \rbox{arara.yaml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
\vspace{1em}
@@ -198,7 +186,7 @@ It is important to observe that this method \emph{always} performs a database op
% arara: pdflatex if !unchanged(toFile('thesis.tex'))
\end{codebox}
-\item[\mddbox{C}{R}{unchanged(String extension)}{boolean}] This method returns a boolean value according to whether the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the provided \rbox{String} extension has not changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a \gls{XML} database file named \rbox{arara.xml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
+\item[\mddbox{C}{R}{unchanged(String extension)}{boolean}] This method returns a boolean value according to whether the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the provided \rbox{String} extension has not changed since last verification, based on a traditional cyclic redundancy check. The file reference, as well as the associated hash, is stored in a YAML database file named \rbox{arara.yaml} located in the same directory as the current file (the database name can be overridden in the configuration file, as discussed in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}). The method semantics (including the return values) is presented as follows.
\vspace{1em}
@@ -333,7 +321,7 @@ This section introduces methods related to conditional flow based on \emph{natur
\vspace{1.4em}
-All elements from the provided set of natural boolean values can be used interchangeably in directive parameters. It is important to observe that, from version 4.0 on, \arara\ throws an exception if a value absent from the set is provided to the methods described in this section.
+All elements from the provided set of natural boolean values can be used interchangeably in directive parameters. It is important to observe that \arara\ throws an exception if a value absent from the set is provided to the methods described in this section.
\begin{description}
\item[\mdbox{R}{isTrue(String string)}{boolean}] This method returns a boolean value according to whether the provided \rbox{String} value is contained in the sub-set of natural true boolean values. It is worth mentioning that the verification is case insensitive, i.e, upper case and lower case symbols are treated as equivalent. If the provided value is an empty string, the method returns false.
@@ -465,12 +453,6 @@ result = buildString('a', 'b', 'c', 'd');
result = trimSpaces(' hello world ');
\end{codebox}
-\item[\mdbox{R}{addQuotes(String string)}{String}] This method returns the provided parameter enclosed in double quotes, as a plain string. It is important to observe that there is no automatic quote handling.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-result = addQuotes('to be or not to be');
-\end{codebox}
-
\item[\mdbox{R}{replicatePattern(String pattern, List<Object> values)}{List<Object>}] This method replicates the provided pattern to each element of the second parameter and returns the resulting list. The pattern must contain exactly one placeholder. For instance, \rbox{\%s} denotes a string representation of the provided argument. Please refer to the \rbox{Formatter} class reference in the \href{https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html}{Java documentation} for more information on placeholders. This method raises an exception if an invalid pattern is applied.
\begin{codebox}{Example}{teal}{\icnote}{white}
@@ -523,30 +505,6 @@ if (isMac()) { System.out.println('Running Mac OS.'); }
if (isUnix()) { System.out.println('Running Unix.'); }
\end{codebox}
-\item[\mdbox{R}{isAIX()}{boolean}] This method returns a boolean value according to whether the underlying operating system vendor is IBM AIX.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-if (isAIX()) { System.out.println('Running AIX.'); }
-\end{codebox}
-
-\item[\mdbox{R}{isIrix()}{boolean}] This method returns a boolean value according to whether the underlying operating system vendor is Silicon Graphics Irix.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-if (isIrix()) { System.out.println('Running Irix.'); }
-\end{codebox}
-
-\item[\mdbox{R}{isOS2()}{boolean}] This method returns a boolean value according to whether the underlying operating system vendor is IBM OS/2 Warp.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-if (isOS2()) { System.out.println('Running OS/2 Warp.'); }
-\end{codebox}
-
-\item[\mdbox{R}{isSolaris()}{boolean}] This method returns a boolean value according to whether the underlying operating system vendor is Oracle Solaris.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-if (isSolaris()) { System.out.println('Running Solaris.'); }
-\end{codebox}
-
\item[\mdbox{R}{isCygwin()}{boolean}] This method returns a boolean value according to whether the underlying operating system vendor is Microsoft Windows and \arara\ is being executed inside a Cygwin environment.
\begin{codebox}{Example}{teal}{\icnote}{white}
@@ -577,30 +535,6 @@ command = isMac('ls', 'dir');
command = isUnix('tree', 'dir');
\end{codebox}
-\item[\mdbox{R}{isAIX(Object yes, Object no)}{Object}] This method checks if the underlying operating system vendor is IBM AIX. If the result holds true, the first parameter is returned. Otherwise, the second parameter is returned.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-command = isAIX('pwd', 'ls');
-\end{codebox}
-
-\item[\mdbox{R}{isIrix(Object yes, Object no)}{Object}] This method checks if the underlying operating system vendor is Silicon Graphics Irix. If the result holds true, the first parameter is returned. Otherwise, the second parameter is returned.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-command = isIrix('ls', 'pwd');
-\end{codebox}
-
-\item[\mdbox{R}{isOS2(Object yes, Object no)}{Object}] This method checks if the underlying operating system vendor is IBM OS/2 Warp. If the result holds true, the first parameter is returned. Otherwise, the second parameter is returned.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-command = isOS2('ls', 'cd');
-\end{codebox}
-
-\item[\mdbox{R}{isSolaris(Object yes, Object no)}{Object}] This method checks if the underlying operating system vendor is Oracle Solaris. If the result holds true, the first parameter is returned. Otherwise, the second parameter is returned.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-command = isSolaris('ls', 'cat');
-\end{codebox}
-
\item[\mdbox{R}{isCygwin(Object yes, Object no)}{Object}] This method checks if the underlying operating system vendor is Microsoft Windows and if \arara\ is being executed inside a Cygwin environment. If the result holds true, the first parameter is returned. Otherwise, the second parameter is returned.
\begin{codebox}{Example}{teal}{\icnote}{white}
@@ -652,15 +586,15 @@ The methods presented in this section cover the most common types used in direct
\section{Classes and objects}
\label{sec:classesandobjects}
-From version 4.0 on, \arara\ can be extended at runtime with code from \gls{JVM} languages, such as Groovy, Scala, Clojure and Kotlin. The tool can load classes from \rbox{class} and \rbox{jar} files and even instantiate them. This section introduces methods related to class loading and object instantiation.
+\arara\ can be extended at runtime with code from JVM languages, such as Groovy, Scala, Clojure and Kotlin. The tool can load classes from \rbox{class} and \rbox{jar} files and even instantiate them. This section introduces methods related to class loading and object instantiation.
\begin{messagebox}{Ordered pairs}{araracolour}{\icok}{white}
According to the \href{https://en.wikipedia.org/wiki/Ordered_pair}{Wikipedia entry}, in mathematics, an \emph{ordered pair} $(a, b)$ is a pair of objects. The order in which the objects appear in the pair is significant: the ordered pair $(a, b)$ is different from the ordered pair $(b, a)$ unless $a = b$. In the ordered pair $(a, b)$, the object $a$ is called the \emph{first} entry, and the object $b$ the \emph{second} entry of the pair. \arara\ relies on this concept with the helper \rbox{Pair<A, B>} class, in which \rbox{A} and \rbox{B} denote the component classes, i.e, the types associated to the pair elements. In order to access the pair entries, the class provides two methods:
\begin{description}
-\item[\mtbox{first()}\hfill\rrbox{A}] This method, as the name implies, returns the first entry of the ordered pair, as an \rbox{A} object. It is important to observe that, from the \gls{MVEL} context, as the method constitutes a property accessor (namely, a getter), the parentheses can be safely omitted.
+\item[\mtbox{first()}\hfill\rrbox{A}] This method, as the name implies, returns the first entry of the ordered pair, as an \rbox{A} object. It is important to observe that, from the MVEL context, as the method constitutes a property accessor (namely, a getter), the parentheses can be safely omitted.
-\item[\mtbox{second()}\hfill\rrbox{B}] This method, as the name implies, returns the second entry of the ordered pair, as a \rbox{B} object. It is important to observe that, from the \gls{MVEL} context, as the method constitutes a property accessor (namely, a getter), the parentheses can be safely omitted.
+\item[\mtbox{second()}\hfill\rrbox{B}] This method, as the name implies, returns the second entry of the ordered pair, as a \rbox{B} object. It is important to observe that, from the MVEL context, as the method constitutes a property accessor (namely, a getter), the parentheses can be safely omitted.
\end{description}
Keep in mind that the entries in the \rbox{Pair} class, once defined, cannot be modified to other values. The initial values are set during instantiation and, therefore, only entry getters are available to the user during the object life cycle.
@@ -827,7 +761,7 @@ This method shows a dialog box according to the provided parameters, including o
\end{codebox}
\begin{messagebox}{Swing toolkit}{araracolour}{\icok}{white}
-According to the \href{https://en.wikipedia.org/wiki/Swing_(Java)}{Wikipedia entry}, the Swing toolkit was developed to provide a more sophisticated set of \gls{GUI} components than the earlier AWT widget system. Swing provides a look and feel that emulates the look and feel of several platforms, and also supports a pluggable look and feel that allows applications to have a look and feel unrelated to the underlying platform. It has more powerful and flexible components than AWT. In addition to familiar components such as buttons, check boxes and labels, Swing provides several advanced components, such as scroll panes, trees, tables, and lists.
+According to the \href{https://en.wikipedia.org/wiki/Swing_(Java)}{Wikipedia entry}, the Swing toolkit was developed to provide a more sophisticated set of GUI components than the earlier AWT widget system. Swing provides a look and feel that emulates the look and feel of several platforms, and also supports a pluggable look and feel that allows applications to have a look and feel unrelated to the underlying platform. It has more powerful and flexible components than AWT. In addition to familiar components such as buttons, check boxes and labels, Swing provides several advanced components, such as scroll panes, trees, tables, and lists.
\end{messagebox}
\item[\mddbox{C}{R}{showInput(int width, int icon, String title, String text)}{String}]\uimethod{inputbox1}
@@ -851,10 +785,10 @@ This method shows an input dialog box according to the provided parameters. The
The UI methods presented in this section can be used for writing \TeX\ tutorials and assisted compilation workflows based on user interactions, including visual input and feedback through dialog boxes.
-\section{Commands and triggers}
-\label{sec:commandsandtriggers}
+\section{Commands}
+\label{sec:commands}
-From version 4.0 on, \arara\ features the \rbox{Command} object, a new approach for handling system commands based on a high level structure with explicit argument parsing. Similarly, there is also the mystical \rbox{Trigger} object that constitutes a very special command that changes the inner workings of our tool at runtime. This section introduces methods for generating such objects.
+\arara\ features the \rbox{Command} object, a new approach for handling system commands based on a high level structure with explicit argument parsing.
\begin{messagebox}{The anatomy of a command}{araracolour}{\icok}{white}
\setlength{\parskip}{1em}
@@ -894,28 +828,6 @@ Note that the above list of integers contains nested lists. When applying list f
List flattening and string mapping confer expressiveness and flexibility to the \rbox{Command} object construction, as users can virtually use any data type to describe the underlying rule logic and yet obtain a consistent representation.
-\begin{messagebox}{The anatomy of a trigger}{araracolour}{\icok}{white}
-\setlength{\parskip}{1em}
-A \rbox{Trigger} object constitutes a special command that changes the internal workings of \arara\ at runtime. It is a highly experimental feature. A trigger is basically a function call defined in terms of a \rbox{String} reference representing the actual function name followed by an optional list of \rbox{Object} arguments. For instance, consider this hypothetical trigger that multiplies an arbitrary number of integer terms:
-
-{\centering
-\setlength\tabcolsep{0.2em}
-\begin{tabular}{cccc}
-{\footnotesize\em name} &
-\multicolumn{3}{c}{\footnotesize\em list of arguments} \\
-\rbox[cyan]{multiply} &
-\rbox[araracolour]{\hphantom{w}12\hphantom{w}} &
-\rbox[araracolour]{\hphantom{w}34\hphantom{w}} &
-\rbox[araracolour]{\hphantom{w}65\hphantom{w}}
-\end{tabular}\par}
-
-\vspace{0.4em}
-
-This description is, in some aspects, very much like a typical \rbox{Command} construction. However, a trigger is less forgiving on data types and does not apply transformations on the provided list of arguments. Therefore, the argument types \emph{must match} the trigger signature.
-
-So far, the tool provides only one trigger, seen in action in one of the official rules, under the name \rbox{halt} and with no parameters. This particular trigger halts the current interpretation workflow, such that subsequent directives are ignored. We have not worked much on triggers yet, and the concept is mentioned here for documentation purposes only.
-\end{messagebox}
-
\begin{description}
\item[\mdbox{R}{getCommand(List<String> elements)}{Command}] This method, as the name implies, returns a \rbox{Command} object according to the provided list of \rbox{String} elements. If the list is empty, the tool will ignore the execution.
@@ -929,18 +841,6 @@ return getCommand([ 'ls', '-l' ]);
return getCommand('pdflatex', '--shell-escape', 'thesis.tex');
\end{codebox}
-\item[\mdbox{R}{getTrigger(String name)}{Trigger}] This method, as the name implies, returns a \rbox{Trigger} object according to the provided \rbox{String} reference as function name. It is important to observe that this particular trigger instance does not have parameters.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-return getTrigger('halt');
-\end{codebox}
-
-\item[\mdbox{R}{getTrigger(String name, Object... parameters)}{Trigger}] This method, as the name implies, returns a proper \rbox{Trigger} object according to the provided \rbox{String} reference as function name and the \rbox{Object} array as associated parameters. Note that the object array is denoted by a comma-separated sequence of elements in the actual method call, resulting in a variable number of parameters.
-
-\begin{codebox}{Example}{teal}{\icnote}{white}
-return getTrigger('multiply', 12, 34, 65);
-\end{codebox}
-
\item[\mdbox{R}{\parbox{0.62\textwidth}{getCommandWithWorkingDirectory(File directory,\\\hspace*{1em} List<String> elements)}}{Command}] This method, as the name implies, sets the working directory based on the provided \rbox{File} reference and returns a proper \rbox{Command} object according to the provided list of \rbox{String} elements. If the list is empty, the tool will ignore the execution.
\begin{codebox}{Example}{teal}{\icnote}{white}
@@ -978,16 +878,16 @@ The methods presented in this section constitute the foundations of underlying s
This section introduces assorted methods provided by \arara\ as a means to improve the automation itself with expressive rules and enhance the user experience. Such methods are properly described as follows.
\begin{messagebox}{Session}{araracolour}{\icok}{white}
-Rules are designed under the \emph{encapsulation} notion, such that the direct access to internal workings of such structures is restricted. However, as a means to support framework awareness, \arara\ provides a mechanism for data sharing across rule contexts, implemented as a \rbox{Session} object. In practical terms, this particular object is a global, persistent map composed of \rbox{String} keys and \rbox{Object} values available throughout the entire execution. The public methods are described as follows:
+Rules are designed under the \emph{encapsulation} notion, such that the direct access to internal workings of such structures is restricted. However, as a means to support framework awareness, \arara\ provides a mechanism for data sharing across rule contexts, implemented as a \rbox{Session} object. In practical terms, this particular object is a global, persistent map composed of \rbox{String} keys and \rbox{Object} values available throughout the entire execution. The public methods of a session are described as follows:
\begin{description}
-\item[\mtbox{insert(String key, Object value)}\hfill\rrbox{void}] This method, as the name implies, inserts an object into the session, indexed by the provided key. Observe that, if the session previously contained a mapping for the provided key, the old value is replaced by the specified value.
+\item[\mtbox{put(String key, Object value)}\hfill\rrbox{void}] This method, as the name implies, inserts an object into the session, indexed by the provided key. Observe that, if the session previously contained a mapping for the provided key, the old value is replaced by the specified value.
\item[\mtbox{remove(String key)}\hfill\rrbox{void}] This method, as the name implies, removes the mapping for the provided key from the session. Be mindful that an attempt to remove a mapping for a nonexistent key will raise an exception.
-\item[\mtbox{exists(String key)}\hfill\rrbox{boolean}] This method, as the name implies, returns a boolean value according to whether the session contains a mapping for the provided key. It is highly advisable to use this method before attempting to remove a mapping from the session.
+\item[\mtbox{contains(String key)}\hfill\rrbox{boolean}] This method, as the name implies, returns a boolean value according to whether the session contains a mapping for the provided key. It is highly advisable to use this method before attempting to remove a mapping from the session.
-\item[\mtbox{obtain(String key)}\hfill\rrbox{Object}] This method, as the name implies, returns the object value to which the specified key is mapped. Be mindful that an attempt to return a value for a nonexistent key will raise an exception.
+\item[\mtbox{get(String key)}\hfill\rrbox{Object}] This method, as the name implies, returns the object value to which the specified key is mapped. Be mindful that an attempt to return a value for a nonexistent key will raise an exception.
\item[\mtbox{forget()}\hfill\rrbox{void}] This method, as the name implies, removes all of the existing mappings from the session. The session object will be effectively empty after this call returns.
\end{description}
@@ -999,7 +899,7 @@ It is important to observe that the \rbox{Session} object provided by our tool f
\item[\mdbox{R}{getSession()}{Session}] This method, as the name implies, returns the \rbox{Session} object for data sharing across rule contexts. Keep in mind that a session cannot contain duplicate keys. Each key can map to at most one value.
\begin{codebox}{Example}{teal}{\icnote}{white}
-name = getSession().obtain('name');
+name = getSession().get('name');
\end{codebox}
\item[\mdbox{R}{throwError(String message)}{void}] This method deliberately throws an error to be intercepted later on during execution. Consider using such method for an explicit notification about unexpected or unsought scenarios, e.g, wrong parameter types or values. The raised error has an associated message which is displayed in the terminal and added to the log file.
@@ -1033,6 +933,10 @@ According to the \href{https://en.wikipedia.org/wiki/PATH_(variable)}{Wikipedia
result = unsafelyExecuteSystemCommand(getCommand('ls'));
\end{codebox}
+\begin{messagebox}{Important change in version 5.0}{araracolour}{\icattention}{white}
+\textbf{Working directory support} -- \arara\ now executes commands obtained from \rbox{getCommandWithWorkingDirectory} correctly. Previously, the working directory got silently ignored. This makes \arara\ even more powerful but we decided to change this for the sake of consistency.
+\end{messagebox}
+
\begin{messagebox}{Hic sunt leones}{attentioncolour}{\icattention}{black}
Please \emph{do not abuse} this method! Keep in mind that this particular feature is included for very specific scenarios in which the command streams are needed ahead of time for proper decision making.
\end{messagebox}
@@ -1042,25 +946,20 @@ Please \emph{do not abuse} this method! Keep in mind that this particular featur
\begin{codebox}{Example}{teal}{\icnote}{white}
valid = isSubdirectory(toFile('chapters/'));
\end{codebox}
+\end{description}
-\item[\mdbox{R}{\parbox{0.62\textwidth}{mergeVelocityTemplate(File input, File output,\\\hspace*{1em} Map<String, Object> map)}}{void}] This method, as the name implies, merges the provided \rbox{File} template reference written in the Velocity Template Language 1.7 specification with the \rbox{Map} data object in order to produce a corresponding \rbox{File} output. It is important to observe that this method will raise an exception if the provided input file does not exist or if there is an error with the underlying template language.
-
-\begin{ncodebox}{Source file}{teal}{\icnote}{white}{input.txt}
-Hello, my name is ${name} and
-I am from ${country}!
-\end{ncodebox}
+\begin{messagebox}{Flags and reserved storage in a session}{araracolour}{\icok}{white}
+Within a session there are two ``reserved'' namespaces: \verb|arara| and \verb|environment|. The latter is quite intuitive: \arara\ will store the current state of the systems environment variables in its session. You may alter these values in the session storage but they will not be written back to the system configuration. To access an environment variable, you can use its usual name prefixed by \verb|environment:|.
\begin{codebox}{Example}{teal}{\icnote}{white}
-mergeVelocityTemplate(toFile('input.txt'), toFile('output.txt'),
- [ 'name' : 'Paulo', 'country' : 'Brazil' ])
+path = getSession().get('environment:PATH');
\end{codebox}
-\begin{messagebox}{Velocity Template Language 1.7}{attentioncolour}{\icattention}{black}
-\setlength{\parskip}{1em}
-As of 2017, the Apache Foundation has released the new 2.0 version for the Velocity Template Language. However, this particular version introduces behavioural and syntactic changes that may cause problems with older versions.
+The \verb|arara| namespace is a bit different. It provides flags that control \arara s behaviour. Flags are used in rules and may be manipulated by the user. Be aware, that every change in this namespace will result in \arara\ acting like you know what you did. Use this power with care. Currently, there is only one relevant flag: \verb|arara:FILENAME:halt|. This will stop the currently run command execution on the file with the specified file name. The value of this map entry is the exit status you want \arara\ to have.
-In order to maintain compatibility with older Java virtual machines, \arara\ works with the \href{http://velocity.apache.org/engine/1.7/vtl-reference.html}{VTL 1.7 specification}, so it is highly recommended to strictly adhere to this reference when writing templates for the corresponding method or the official \rbox{velocity} rule.
+\begin{codebox}{Example}{teal}{\icnote}{white}
+path = getSession().put('arara:myfile.tex:halt', 42);
+\end{codebox}
\end{messagebox}
-\end{description}
The methods presented in this section provide interesting features for persistent data sharing, error handling, early command execution, and templating. It is important to note that more classes, objects and methods can be incorporated into \arara\ through class loading and object instantiation, extending the features and enhancing the overall user experience.
diff --git a/support/arara/doc/chapters/mvel.tex b/support/arara/doc/chapters/mvel.tex
index 7dd9564576..4ccca9b814 100644
--- a/support/arara/doc/chapters/mvel.tex
+++ b/support/arara/doc/chapters/mvel.tex
@@ -2,7 +2,7 @@
\chapter{MVEL}
\label{chap:mvel}
-According to the \href{https://en.wikipedia.org/wiki/MVEL}{Wikipedia entry}, the MVFLEX Expression Language (hereafter referred as \gls{MVEL}) is a hybrid, dynamic, statically typed, embeddable expression language and runtime for the Java platform. Originally started as a utility language for an application framework, the project is now developed completely independently. \arara\ relies on this scripting language in two circumstances:
+According to the \href{https://en.wikipedia.org/wiki/MVEL}{Wikipedia entry}, the MVFLEX Expression Language (hereafter referred as MVEL) is a hybrid, dynamic, statically typed, embeddable expression language and runtime for the Java platform. Originally started as a utility language for an application framework, the project is now developed completely independently. \arara\ relies on this scripting language in two circumstances:
\begin{enumerate}
\item\emph{Rules}, as nominal attributes gathered from directives are used to build complex command invocations and additional computations. A rule follows a very strict model, detailed in Section~\ref{sec:rule}, on page~\pageref{sec:rule}.
@@ -10,7 +10,7 @@ According to the \href{https://en.wikipedia.org/wiki/MVEL}{Wikipedia entry}, the
\item\emph{Conditionals}, as logical expressions must be evaluated in order to decide whether and how a directive should be interpreted. Conditionals are detailed in Section~\ref{sec:directives}, on page~\pageref{sec:directives}.
\end{enumerate}
-This chapter only covers the relevant parts of the \gls{MVEL} language for a consistent use with \arara. For advanced topics, I highly recommend the official language guide for \gls{MVEL} 2.0, available online.
+This chapter only covers the relevant parts of the MVEL language for a consistent use with \arara. For advanced topics, I highly recommend the official language guide for MVEL 2.0, available online.
\section{Basic usage}
\label{sec:mvelbasicusage}
@@ -27,7 +27,7 @@ In this expression, we have a single identifier \rbox{user.name}, which by itsel
user.name == 'John Doe'
\end{codebox}
-This expression yields a boolean result, either \rbox{true} or \rbox{false} based on a comparison operation. Like a typical programming language, \gls{MVEL} supports the full gamut of operator precedence rules, including the ability to use bracketing to control execution order:
+This expression yields a boolean result, either \rbox{true} or \rbox{false} based on a comparison operation. Like a typical programming language, MVEL supports the full gamut of operator precedence rules, including the ability to use bracketing to control execution order:
\begin{codebox}{Execution order control through bracketing}{teal}{\icnote}{white}
(user.name == 'John Doe') && ((x * 2) - 1) > 20
@@ -39,7 +39,7 @@ You may write scripts with an arbitrary number of statements using a semicolon t
statement1; statement2; statement3
\end{codebox}
-It is important to observe that \gls{MVEL} expressions use a \emph{last value out} principle. This means, that although \gls{MVEL} supports the \rbox{return} keyword, it can be safely omitted. For example:
+It is important to observe that MVEL expressions use a \emph{last value out} principle. This means, that although MVEL supports the \rbox{return} keyword, it can be safely omitted. For example:
\begin{codebox}{Automatic return}{teal}{\icnote}{white}
foo = 10;
@@ -57,18 +57,18 @@ return foo;
Personally, I like to explicitly add a \rbox{return} statement, as it provides a visual indication of the expression exit point. All rules released with \arara\ favour this writing style. However, feel free to choose any writing style you want, as long as the resulting code is consistent.
-The type coercion system of \gls{MVEL} is applied in cases where two incomparable types are presented by attempting to coerce the right value to that of the type of the left value, and then vice-versa. For example:
+The type coercion system of MVEL is applied in cases where two incomparable types are presented by attempting to coerce the right value to that of the type of the left value, and then vice-versa. For example:
\begin{codebox}{Type coercion}{teal}{\icnote}{white}
"123" == 123;
\end{codebox}
-Surprisingly, the evaluation of such expression holds \rbox{true} in \gls{MVEL} because the underlying type coercion system will coerce the untyped number \rbox{123} to a string \rbox{123} in order to perform the comparison.
+Surprisingly, the evaluation of such expression holds \rbox{true} in MVEL because the underlying type coercion system will coerce the untyped number \rbox{123} to a string \rbox{123} in order to perform the comparison.
\section{Inline lists, maps and arrays}
\label{sec:mvelinlinelistsmapsandarrays}
-According to the documentation, \gls{MVEL} allows you to express lists, maps and arrays using simple elegant syntax. Lists are expressed in the following format:
+According to the documentation, MVEL allows you to express lists, maps and arrays using simple elegant syntax. Lists are expressed in the following format:
\begin{codebox}{Creating a list}{teal}{\icnote}{white}
[ "Jim", "Bob", "Smith" ]
@@ -97,7 +97,7 @@ In this case, the scripting language will see that the target method accepts an
\section{Property navigation}
\label{sec:propertynavigation}
-\gls{MVEL} provides a single, unified syntax for accessing properties, static fields, maps and other structures. Lists are accessed the same as arrays. For example, these two constructs are equivalent (\gls{MVEL} and Java access styles for lists and arrays, respectively):
+MVEL provides a single, unified syntax for accessing properties, static fields, maps and other structures. Lists are accessed the same as arrays. For example, these two constructs are equivalent (MVEL and Java access styles for lists and arrays, respectively):
\begin{codebox}{MVEL access style for lists and arrays}{teal}{\icnote}{white}
user[5]
@@ -107,7 +107,7 @@ user[5]
user.get(5)
\end{codebox}
-Observe that \gls{MVEL} accepts plain Java methods as well. Maps are accessed in the same way as arrays except any object can be passed as the index value. For example, these two constructs are equivalent (\gls{MVEL} and Java access styles for maps, respectively):
+Observe that MVEL accepts plain Java methods as well. Maps are accessed in the same way as arrays except any object can be passed as the index value. For example, these two constructs are equivalent (MVEL and Java access styles for maps, respectively):
\begin{codebox}{MVEL access style for maps}{teal}{\icnote}{white}
user["foobar"]
@@ -123,7 +123,7 @@ It is advisable to favour such access styles over their Java counterparts when w
\section{Flow control}
\label{sec:mvelflowcontrol}
-The expression language goes beyond simple evaluations. In fact, \gls{MVEL} supports an assortment of control flow operators (namely, conditionals and repetitions) which allows advanced scripting operations. Consider this conditional statement:
+The expression language goes beyond simple evaluations. In fact, MVEL supports an assortment of control flow operators (namely, conditionals and repetitions) which allows advanced scripting operations. Consider this conditional statement:
\begin{codebox}{Conditional statement}{teal}{\icnote}{white}
if (var > 0) {
@@ -137,7 +137,7 @@ else {
}
\end{codebox}
-As seen in the previous code, the syntax is very similar to the ones found in typical programming languages. \gls{MVEL} also provides a shorter version, known as a ternary statement:
+As seen in the previous code, the syntax is very similar to the ones found in typical programming languages. MVEL also provides a shorter version, known as a ternary statement:
\begin{codebox}{Ternary statement}{teal}{\icnote}{white}
answer == true ? "yes" : "no";
@@ -151,7 +151,7 @@ foreach (name : people) {
}
\end{codebox}
-As expected, \gls{MVEL} also implements the standard C \rbox{for} loop. Observe that newer versions of \gls{MVEL} allow an abbreviation of \rbox{foreach} to the usual \rbox{for} statement, as syntactic sugar. In order to explicitly indicate a collection iteration, we usually use \rbox{foreach} in the default rules for \arara, but both statements behave exactly the same from a semantic point of view.
+As expected, MVEL also implements the standard C \rbox{for} loop. Observe that newer versions of MVEL allow an abbreviation of \rbox{foreach} to the usual \rbox{for} statement, as syntactic sugar. In order to explicitly indicate a collection iteration, we usually use \rbox{foreach} in the default rules for \arara, but both statements behave exactly the same from a semantic point of view.
\begin{codebox}{Iteration statement}{teal}{\icnote}{white}
for (int i = 0; i < 100; i++) {
@@ -173,7 +173,7 @@ do {
} until (x == null);
\end{codebox}
-Finally, \gls{MVEL} also implements the standard \rbox{while}, with the significant addition of an \rbox{until} counterpart (for inverted logic):
+Finally, MVEL also implements the standard \rbox{while}, with the significant addition of an \rbox{until} counterpart (for inverted logic):
\begin{codebox}{Iteration statement}{teal}{\icnote}{white}
while (isTrue()) {
@@ -192,7 +192,7 @@ Since \rbox{while} and \rbox{until} are unbounded (i.e, the number of iterations
\section{Projections and folds}
\label{sec:mvelprojectionsandfolds}
-Projections are a way of representing collections. According to the official documentation, using a very simple syntax, one can inspect very complex object models inside collections in \gls{MVEL} using the \rbox{in} operator. For example:
+Projections are a way of representing collections. According to the official documentation, using a very simple syntax, one can inspect very complex object models inside collections in MVEL using the \rbox{in} operator. For example:
\begin{codebox}{Projection and fold}{teal}{\icnote}{white}
names = (user.name in users);
@@ -203,7 +203,7 @@ As seen in the above code, \rbox{names} holds all values from the \rbox{name} pr
\section{Assignments}
\label{sec:mvelassignments}
-According to the official documentation, the scripting language allows variable assignment in expressions, either for extraction from the runtime, or for use inside the expression. As \gls{MVEL} is a dynamically typed language, there is no need to specify a type in order to declare a new variable. However, feel free to explicitly declare the type when desired.
+According to the official documentation, the scripting language allows variable assignment in expressions, either for extraction from the runtime, or for use inside the expression. As MVEL is a dynamically typed language, there is no need to specify a type in order to declare a new variable. However, feel free to explicitly declare the type when desired.
\begin{codebox}{Assignment}{teal}{\icnote}{white}
str = "My string";
@@ -227,16 +227,16 @@ When writing rules for \arara, is advisable to keep variables to a minimum in or
\section{Basic templating}
\label{sec:mvelbasictemplating}
-\gls{MVEL} templates are comprised of \emph{orb} tags inside a plain text document. \Glspl{orb-tag} denote dynamic elements of the template which the engine will evaluate at runtime. \arara\ heavily relies on this concept for runtime evaluation of conditionals and rules. For rules, we use \glspl{orb-tag} to return either a string from a textual template or a proper command object. The former constituted the basis of command generation in previous versions of our tool; from version 4.0 on, we highly recommend the latter, detailed in Section~\ref{sec:rule}, on page~\ref{sec:rule}. Conditionals are in fact \glspl{orb-tag} in disguise, such that the expression (or a sequence of expressions) is properly evaluated at runtime. Consider the following example:
+MVEL templates are comprised of \emph{orb} tags inside a plain text document. Orb tags denote dynamic elements of the template which the engine will evaluate at runtime. \arara\ heavily relies on this concept for runtime evaluation of conditionals and rules. For rules, we use orb tags to return either a string from a textual template or a proper command object. The former constituted the basis of command generation in previous versions of our tool; we highly recommend the latter, detailed in Section~\ref{sec:rule}, on page~\ref{sec:rule}. Conditionals are in fact orb tags in disguise, such that the expression (or a sequence of expressions) is properly evaluated at runtime. Consider the following example:
\begin{codebox}{Template}{teal}{\icnote}{white}
My favourite team is @{ person.name == 'Enrico'
? 'Juventus' : 'Palmeiras' }!
\end{codebox}
-The above code features a basic form of \gls{orb-tag} named \emph{expression orb}. It contains an expression (or a sequence of expressions) which will be evaluated to a certain value, as seen earlier on, when discussing the \emph{last value out} principle. In the example, the value to be returned will be a string containing a football team name (the result is of course based on the comparison outcome).
+The above code features a basic form of orb tag named \emph{expression orb}. It contains an expression (or a sequence of expressions) which will be evaluated to a certain value, as seen earlier on, when discussing the \emph{last value out} principle. In the example, the value to be returned will be a string containing a football team name (the result is of course based on the comparison outcome).
\section{Further reading}
\label{sec:mvelfurtherreading}
-This chapter does not cover all features of the \gls{MVEL} expression language, so further reading is advisable. I highly recommend the \href{http://mvel.documentnode.com/}{MVEL language guide} currently covering version 2.0 of the language.
+This chapter does not cover all features of the MVEL expression language, so further reading is advisable. I highly recommend the \href{http://mvel.documentnode.com/}{MVEL language guide} currently covering version 2.0 of the language.
diff --git a/support/arara/doc/chapters/prologue.tex b/support/arara/doc/chapters/prologue.tex
deleted file mode 100644
index ed77672237..0000000000
--- a/support/arara/doc/chapters/prologue.tex
+++ /dev/null
@@ -1,27 +0,0 @@
-% !TeX root = ../arara-manual.tex
-\chapter*{Prologue}
-\label{chap:prologue}
-
-\epigraph{Moral of the story: never read the
-documentation, bad things happen.}{\textsc{David Carlisle}}
-
-{\setlength{\parskip}{1em}
-Writing software is easy. Writing \emph{good} software is extremely difficult. When the counter stopped at version 3.0, Brent, Marco and I decided it was time for \arara\ to graduate and finally be released in \TeX\ Live. My life had changed.
-
-It was a success. A lot of people liked the idea of explicitly telling our tool how to compile their \TeX\ documents instead of relying on guesswork. It was indeed a cool concept! But then, the inevitable happened: a lot of bugs had emerged from the dark depths of my humble code.
-
-In all seriousness, \emph{I was about to give up}. My code was not awful, but there were a couple of critical and blocking bugs. Something very drastic had to be done in order to put \arara\ back on track. Then, walking on faith, I decided to rewrite the tool entirely from scratch. In order to achieve this goal, I created a \href{https://github.com/cereda/nightingale}{sandbox} and started working on the new code.
-
-It was my redemption. Nicola helped me with the new version, writing code, fixing bugs and suggesting new features. Soon, we all achieved a very pleasant result. It was like \arara\ was about to hatch again. Version 4.0 was definitely at our hands. Now, it is up to you.
-
-Surprisingly, this humble user manual is not the best resource for learning about our tool. If you really want to see \arara\ in action, I strongly recommend \href{https://www.dickimaw-books.com/latex/admin}{\LaTeX\ for administrative work}, an amazing book freely available for download. The author is, of course, Nicola herself! She explains how \LaTeX\ can be used for administrative work, such as writing correspondence, performing repetitive tasks or typesetting problem sheets on exam papers. And \arara\ is there!
-
-Enjoy the new version. Happy \TeX ing with \arara!
-\par}
-
-\vfill
-
-\begin{flushright}
-Paulo Roberto Massa Cereda\\
-\emph{on behalf of the \arara\ team}
-\end{flushright}
diff --git a/support/arara/doc/chapters/rules.tex b/support/arara/doc/chapters/rules.tex
index f2e7bfd0bc..759d62e133 100644
--- a/support/arara/doc/chapters/rules.tex
+++ b/support/arara/doc/chapters/rules.tex
@@ -9,7 +9,7 @@ As seen in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure
\end{messagebox}
\begin{description}
-\item[\rulebox{animate}{Chris Hughes, Paulo Cereda}]
+\item[\rulebox{animate}]
This rule creates an animated \rbox{gif} file from the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{pdf} suffix, using the \rbox{convert} command line utility from the ImageMagick suite.
\begin{description}
@@ -35,14 +35,64 @@ The best solution to avoid possible future name conflicts, according to the Imag
% arara: animate: { delay: 15, density: 150 }
\end{codebox}
-\item[\rulebox{bib2gls}{Nicola Talbot, Paulo Cereda}] This rule executes the \rbox{bib2gls} command line application which extracts glossary information stored in a \rbox{bib} file and converts it into glossary entry definitions in resource files. This rule passes the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as the mandatory argument.
+\item[\rulebox{asymptote}]
+This rule executes the \rbox{asy} command line, referring to Asymptote, a powerful descriptive vector graphics language for technical drawings, inspired by Metapost but with an improved syntax. Please note that you will have to make the \rbox{.asy} extension known to \arara\ in order to compile Asymptote files. Furthermore, it is advised to use this in your regular \TeX\ document specifying the \abox{files} parameter to include all graphics you want to compile for inclusion in your document.
+
+\begin{description}
+\item[\abox{color}] This option, as the name suggests, provides the underlying color model to be used in the current execution. Possible values are:
+
+\begin{description}
+\item[\povalue{\hphantom{x}bw\hphantom{x}}] This option value, as the name suggests, converts all colors to a black and white model.
+
+\item[\povalue{cmyk}] This option value converts the RGB (red, green an blue) color model to the CMYK (cyan, magenta, yellow and black) counterpart.
+
+\item[\povalue{rgb}] This option value converts the CMYK (cyan, magenta, yellow and black) color model to the RGB (red, green an blue) counterpart.
+
+\item[\povalue{gray}] This option value, as the name suggests, converts all colors to a grayscale model.
+\end{description}
+
+\item[\rpbox{engine}{latex}] This option, as the name indicates, sets the underlying \TeX\ engine to be used for the current compilation. Make sure to take a look at the Asymptote manual for further details on this option. Possible values are:
+
+\begin{description}
+\item[\povalue{latex}] This value, as the name suggests, sets the underlying \TeX\ engine to \rbox{latex} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{pdflatex}] This value, as the name indicates, sets the underlying \TeX\ engine to \rbox{pdflatex} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{xelatex}] This value, as the name suggests, sets the underlying \TeX\ engine to \rbox{xelatex} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{lualatex}] This value, as the name indicates, sets the underlying \TeX\ engine to \rbox{lualatex} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{tex}] This value, as the name suggests, sets the underlying \TeX\ engine to \rbox{tex} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{pdftex}] This value, as the name indicates, sets the underlying \TeX\ engine to \rbox{pdftex} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{luatex}] This value, as the name suggests, sets the underlying \TeX\ engine to \rbox{luatex} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{context}] This value, as the name indicates, sets the underlying \TeX\ engine to \rbox{context} for the current compilation. Note that the engine might play a major role in the generated code.
+
+\item[\povalue{none}] This value, as the name suggests, sets the underlying \TeX\ engine to \rbox{none} for the current compilation. In this case, there will be no associated engine.
+\end{description}
+
+\item[\abox{format}] This option, as the name suggests, converts each output file to a specified format. Make sure to take a look at the Asymptote manual for further details.
+
+\item[\abox{output}] This option, as the name suggests, sets an alternative output directory or file name. Make sure to take a look at the Asymptote manual for further details.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: asymptote: { files: [ mydrawing.asy ] }
+\end{codebox}
+\end{description}
+
+\item[\rulebox{bib2gls}]
+This rule executes the \rbox{bib2gls} command line application which extracts glossary information stored in a \rbox{bib} file and converts it into glossary entry definitions in resource files. This rule passes the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as the mandatory argument.
\begin{description}
\item[\abox{dir}] This option sets the directory used for writing auxiliary files. Note that this option does not change the current working directory.
\item[\abox{trans}] This option sets the extension of the transcript file created by \rbox{bib2gls}. The value should be just the file extension without the leading dot. The default is \rbox{glg}.
-\item[\abox{locale}] This option specifies the preferred language resource file. Please keep in mind that the provided value must be a valid \gls{IETF} language tag. If omitted, the default is obtained by \rbox{bib2gls} from the \gls{JVM}.
+\item[\abox{locale}] This option specifies the preferred language resource file. Please keep in mind that the provided value must be a valid IETF language tag. If omitted, the default is obtained by \rbox{bib2gls} from the JVM.
\item[\rpsbox{group}] This option sets whether \rbox{bib2gls} will try to determine the letter group for each entry and add it to a new field called \rbox{group} when sorting. Be mindful that some \rbox{sort} options ignore this setting. The default value is off.
@@ -80,9 +130,12 @@ The best solution to avoid possible future name conflicts, according to the Imag
% arara: --> if found('aux', 'glsxtr@resource')
\end{codebox}
-\item[\rulebox{biber}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{biber}, the backend bibliography processor for \rbox{biblatex}, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
+\item[\rulebox{biber}]
+This rule runs \rbox{biber}, the backend bibliography processor for \rbox{biblatex}, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
\begin{description}
+\item[\rpsbox{tool}] This option sets whether the bibliography processor should be executed in \emph{tool mode}, intended for transformations and modifications of datasources. Since this mode is oriented towards a datasource rather than a document, make sure to use it alongside the \abox{options} option.
+
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
\end{description}
@@ -90,7 +143,8 @@ The best solution to avoid possible future name conflicts, according to the Imag
% arara: biber: { options: [ '--wraplines' ] }
\end{codebox}
-\item[\rulebox{bibtex}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{bibtex} program, a reference management software, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
+\item[\rulebox{bibtex}]
+This rule runs the \rbox{bibtex} program, a reference management software, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -101,7 +155,8 @@ The best solution to avoid possible future name conflicts, according to the Imag
% arara: --> if exists(toFile('references.bib'))
\end{codebox}
-\item[\rulebox{bibtex8}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{bibtex8}, an enhanced, portable C version of \rbox{bibtex}, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string. It is important to note that this tool can read a character set file containing encoding details.
+\item[\rulebox{bibtex8}]
+This rule runs \rbox{bibtex8}, an enhanced, portable C version of \rbox{bibtex}, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string. It is important to note that this tool can read a character set file containing encoding details.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -111,7 +166,8 @@ The best solution to avoid possible future name conflicts, according to the Imag
% arara: bibtex8: { options: [ '--trace', '--huge' ] }
\end{codebox}
-\item[\rulebox{bibtexu}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{bibtexu} program, an enhanced version of \rbox{bibtex} with Unicode support and language features, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
+\item[\rulebox{bibtexu}]
+This rule runs the \rbox{bibtexu} program, an enhanced version of \rbox{bibtex} with Unicode support and language features, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -121,7 +177,8 @@ The best solution to avoid possible future name conflicts, according to the Imag
% arara: bibtexu: { options: [ '--language', 'fr' ] }
\end{codebox}
-\item[\rulebox{clean}{Marco Daniel, Paulo Cereda}] This rule removes the provided file reference through the underlying system command, which can be \rbox{rm} in a Unix environment or \rbox{del} in Microsoft Windows. As a security lock, this rule will always throw an error if \mtbox{currentFile} is equal to \mtbox{getOriginalFile}, so the main file reference cannot be removed. It is highly recommended to use the special \abox{files} parameter to indicate removal candidates. Alternatively, a list of file extensions can be provided as well. Be mindful that the security lock also applies to file removals based on extensions.
+\item[\rulebox{clean}]
+This rule removes the provided file reference through the underlying system command, which can be \rbox{rm} in a Unix environment or \rbox{del} in Microsoft Windows. As a security lock, this rule will always throw an error if \mtbox{currentFile} is equal to \mtbox{getOriginalFile}, so the main file reference cannot be removed. It is highly recommended to use the special \abox{files} parameter to indicate removal candidates. Alternatively, a list of file extensions can be provided as well. Be mindful that the security lock also applies to file removals based on extensions.
\begin{description}
\item[\abox{extensions}] This option, as the name indicates, takes a list of extensions and constructs a new list of removals commands according to the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with each extension from the original list as suffixes. Keep in mind that, if the special \abox{files} parameter is used with this option, the resulting list will contain the cartesian product of file base names and extensions. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -135,7 +192,8 @@ When in doubt, always remember that the \opbox{{-}dry-run} command line option i
% arara: clean: { extensions: [ aux, log ] }
\end{codebox}
-\item[\rulebox{csplain}{Paulo Cereda}] This rule runs the \rbox{csplain} \TeX\ engine, a conservative extension of Knuth's plain \TeX\ with direct processing characters and hyphenation patterns for Czech and Slovak, on the provided \mtbox{currentFile} reference.
+\item[\rulebox{csplain}]
+This rule runs the \rbox{csplain} \TeX\ engine, a conservative extension of Knuth's plain \TeX\ with direct processing characters and hyphenation patterns for Czech and Slovak, on the provided \mtbox{currentFile} reference.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. When such option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -163,7 +221,8 @@ When in doubt, always remember that the \opbox{{-}dry-run} command line option i
% arara: csplain: { interaction: batchmode, shell: yes }
\end{codebox}
-\item[\rulebox{datatooltk}{Nicola Talbot, Paulo Cereda}] This rule runs \rbox{datatooltk}, an application that creates \rbox{datatool} databases in raw format from several structured data formats, in batch mode. This rule requires \abox{output} and one of the import options.
+\item[\rulebox{datatooltk}]
+This rule runs \rbox{datatooltk}, an application that creates \rbox{datatool} databases in raw format from several structured data formats, in batch mode. This rule requires \abox{output} and one of the import options.
\begin{description}
\item[\abox{output}~\rqbox] This option provides the database name to be saved as output. To guard against accidentally overwriting a document file, \rbox{datatooltk} now forbids the \rbox{tex} extension for output files. This option is required.
@@ -176,11 +235,11 @@ When in doubt, always remember that the \opbox{{-}dry-run} command line option i
\item[\abox{name}] This option, as the name indicates, sets the label reference of the newly created database according to the provided value.
-\item[\abox{sql}] This option imports data from an \gls{SQL} database where the provided value refers to a proper \rbox{select} \gls{SQL} statement.
+\item[\abox{sql}] This option imports data from an SQL database where the provided value refers to a proper \rbox{select} SQL statement.
-\item[\abox{sqldb}] This option, as the name indicates, sets the name of the \gls{SQL} database according to the provided value.
+\item[\abox{sqldb}] This option, as the name indicates, sets the name of the SQL database according to the provided value.
-\item[\abox{sqluser}] This option, as the name indicates, sets the name of the \gls{SQL} user according to the provided value.
+\item[\abox{sqluser}] This option, as the name indicates, sets the name of the SQL user according to the provided value.
\item[\rpbox{noconsole}{gui}] This action dictates the password request action if such information was not provided earlier. If there is no console available, the action is determined by the following values:
@@ -189,7 +248,7 @@ When in doubt, always remember that the \opbox{{-}dry-run} command line option i
\item[\povalue{stdin}] This action requests the password via the standard input stream, which is less secure than using a console.
-\item[\povalue{gui}] This action displays a dialog box in which the user can enter the password for the \gls{SQL} database.
+\item[\povalue{gui}] This action displays a dialog box in which the user can enter the password for the SQL database.
\end{description}
\item[\abox{probsoln}] This option, as the name indicates, imports data in the \rbox{probsoln} format from the file name provided as the value.
@@ -213,7 +272,7 @@ spreadsheet import functions also use this setting.
\item[\rpsbox{owneronly}] This option sets whether read and write permissions when saving \rbox{dbtex} files should be defined for the owner only. This option has no effect on some operating systems.
-\item[\rpsbox{maptex}] This option sets whether \TeX\ special characters will be properly mapped when importing data from \rbox{csv} files or \gls{SQL} databases.
+\item[\rpsbox{maptex}] This option sets whether \TeX\ special characters will be properly mapped when importing data from \rbox{csv} files or SQL databases.
\item[\abox{xls}] This option, as the name indicates, imports data from a Microsoft Excel \rbox{xls} file reference provided as a plain string value.
@@ -240,7 +299,8 @@ spreadsheet import functions also use this setting.
% arara: --> csv: booklist.csv }
\end{codebox}
-\item[\rulebox{dvipdfm}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{dvipdfm}, a command line utility for file format translation, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a Portable Document Format \rbox{pdf} file.
+\item[\rulebox{dvipdfm}]
+This rule runs \rbox{dvipdfm}, a command line utility for file format translation, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a Portable Document Format \rbox{pdf} file.
\begin{description}
\item[\abox{output}] This option, as the name indicates, sets the output name for the generated \rbox{pdf} file. There is no need to provide an extension, as the value is always normalized with \mtbox{getBasename} such that only the name without the associated extension is used. The base name of the current file reference is used as the default value.
@@ -252,7 +312,8 @@ spreadsheet import functions also use this setting.
% arara: dvipdfm: { output: thesis }
\end{codebox}
-\item[\rulebox{dvipdfmx}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{dvipdfmx}, an extended version of \rbox{dvipdfm} created to support multibyte character encodings and large character sets for East Asian languages, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a Portable Document Format \rbox{pdf} file.
+\item[\rulebox{dvipdfmx}]
+This rule runs \rbox{dvipdfmx}, an extended version of \rbox{dvipdfm} created to support multibyte character encodings and large character sets for East Asian languages, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a Portable Document Format \rbox{pdf} file.
\begin{description}
\item[\abox{output}] This option, as the name indicates, sets the output name for the generated \rbox{pdf} file. There is no need to provide an extension, as the value is always normalized with \mtbox{getBasename} such that only the name without the associated extension is used. The base name of the current file reference is used as the default value.
@@ -264,7 +325,8 @@ spreadsheet import functions also use this setting.
% arara: dvipdfmx: { options: [ '-K', '40' ] }
\end{codebox}
-\item[\rulebox{dvips}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{dvips} on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a PostScript \rbox{ps} file.
+\item[\rulebox{dvips}]
+This rule runs \rbox{dvips} on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a PostScript \rbox{ps} file.
\begin{description}
\item[\abox{output}] This option, as the name indicates, sets the output name for the generated \rbox{ps} file. There is no need to provide an extension, as the value is always normalized with \mtbox{getBasename} such that only the name without the associated extension is used. The base name of the current file reference is used as the default value.
@@ -276,7 +338,8 @@ spreadsheet import functions also use this setting.
% arara: dvips: { output: thesis }
\end{codebox}
-\item[\rulebox{dvipspdf}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{dvips} in order to obtain a corresponding \rbox{ps} file from the initial \rbox{dvi} reference, and then runs \rbox{ps2pdf} on the previously generated \rbox{ps} file in order to obtain a \rbox{pdf} file. Note that all base names are acquired from the \mtbox{currentFile} reference (i.e, the name without the associated extension) and used to construct the resulting files.
+\item[\rulebox{dvipspdf}]
+This rule runs \rbox{dvips} in order to obtain a corresponding \rbox{ps} file from the initial \rbox{dvi} reference, and then runs \rbox{ps2pdf} on the previously generated \rbox{ps} file in order to obtain a \rbox{pdf} file. Note that all base names are acquired from the \mtbox{currentFile} reference (i.e, the name without the associated extension) and used to construct the resulting files.
\begin{description}
\item[\abox{output}] This option, as the name indicates, sets the output name for the generated \rbox{pdf} file. There is no need to provide an extension, as the value is always normalized with \mtbox{getBasename} such that only the name without the associated extension is used. The base name of the current file reference is used as the default value.
@@ -290,7 +353,8 @@ spreadsheet import functions also use this setting.
% arara: dvipspdf: { output: article }
\end{codebox}
-\item[\rulebox{dvisvgm}{samcarter}] This rule runs \rbox{dvisvgm} in order to obtain a corresponding \rbox{svg} file, a vector graphics format based on XML, from the initial \rbox{dvi} reference. It is important to observe that the base name is acquired from the \mtbox{currentFile} reference (i.e, the name without the associated extension) and used to construct the resulting file.
+\item[\rulebox{dvisvgm}]
+This rule runs \rbox{dvisvgm} in order to obtain a corresponding \rbox{svg} file, a vector graphics format based on XML, from the initial \rbox{dvi} reference. It is important to observe that the base name is acquired from the \mtbox{currentFile} reference (i.e, the name without the associated extension) and used to construct the resulting file.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -300,7 +364,8 @@ spreadsheet import functions also use this setting.
% arara: dvisvgm
\end{codebox}
-\item[\rulebox{etex}{Marco Daniel, Paulo Cereda, Nicola Talbot}] This rule runs the \rbox{etex} extended (plain) \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
+\item[\rulebox{etex}]
+This rule runs the \rbox{etex} extended (plain) \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -324,7 +389,8 @@ spreadsheet import functions also use this setting.
% arara: etex: { shell: yes }
\end{codebox}
-\item[\rulebox{frontespizio}{Francesco Endrici, Enrico Gregorio, Paulo Cereda}] This rule automates the steps required by the \rbox{frontespizio} package in order to help Italian users generate the frontispiece to their thesis. First and foremost, the frontispiece is generated. If \rbox{latex} is used as the underlying engine, there is an additional intermediate conversion step to a proper \rbox{eps} file. Finally, the final document is compiled.
+\item[\rulebox{frontespizio}]
+This rule automates the steps required by the \rbox{frontespizio} package in order to help Italian users generate the frontispiece to their thesis. First and foremost, the frontispiece is generated. If \rbox{latex} is used as the underlying engine, there is an additional intermediate conversion step to a proper \rbox{eps} file. Finally, the final document is compiled.
\begin{description}
\item[\rpbox{engine}{pdflatex}] This option, as the name indicates, sets the underlying \TeX\ engine to be used for both compilations (the frontispiece and the document itself). Possible values are:
@@ -361,13 +427,15 @@ spreadsheet import functions also use this setting.
% arara: --> shell: yes, interaction: nonstopmode }
\end{codebox}
-\item[\rulebox{halt}{Heiko Oberdiek, Paulo Cereda}] This rule, as the name suggests, calls the \rbox{halt} trigger, which stops the current interpretation workflow, such that subsequent directives are ignored. This rule contains no associated options. Please refer to Section~\ref{sec:commandsandtriggers}, on page~\pageref{sec:commandsandtriggers}, for more information on triggers.
+\item[\rulebox{halt}]
+This rule, as the name suggests, sets a \rbox{halt} flag, which stops the current interpretation workflow, such that subsequent directives are ignored. This rule contains no associated options. Please refer to Section~\ref{sec:others}, on page~\pageref{sec:others}, for more information on flags.
\begin{codebox}{Example}{teal}{\icnote}{white}
% arara: halt
\end{codebox}
-\item[\rulebox{indent}{Chris Hughes, Paulo Cereda}] This rule runs \rbox{latexindent}, a Perl script that indents \TeX\ files according to an indentation scheme, on the provided \mtbox{currentFile} reference. Environments, including those with alignment delimiters, and commands, including those that can split braces and brackets across lines, are usually handled correctly by the script.
+\item[\rulebox{indent}]
+This rule runs \rbox{latexindent}, a Perl script that indents \TeX\ files according to an indentation scheme, on the provided \mtbox{currentFile} reference. Environments, including those with alignment delimiters, and commands, including those that can split braces and brackets across lines, are usually handled correctly by the script.
\begin{description}
\item[\rpsbox{silent}] This option, as the name indicates, sets whether the script will operate in silent mode, in which no output is given to the terminal.
@@ -419,9 +487,37 @@ spreadsheet import functions also use this setting.
% arara: indent: { overwrite: yes }
\end{codebox}
-\item[\rulebox{latex}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{latex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
+\item[\rulebox{knitr}]
+This rule calls the \rbox{knitr} package, a transparent engine for dynamic report generation with R. It takes an \rbox{.Rnw} file as input, extracts the R code in it according to a list of patterns, evaluates the code and writes the output in another file. It can also tangle R source code from the input document.
+
+\begin{description}
+\item[\rpbox{output}{NULL}] This option sets the output file. when absent, \rbox{knitr} will try to guess a default, which will be under the current working directory.
+
+\item[\rpsbox{tangle}] This option sets whether to tangle the R code from the input file. Note that, when used, this option requires \abox{output} to be specified as well, otherwise an error is thrown.
+
+\item[\rpsbox{quiet}] This option, as the name indicates, sets whether the tool should suppress both progress bar and messages.
+
+\item[\rpbox{envir}{parent.frame()}] This option sets the environment in which code chunks are to be evaluated. Please refer to the documentation for further details.
+
+\item[\rpbox{encoding}{getOption("encoding")}] This option, as the name indicates, sets the encoding of the input file. Please refer to the documentation for further details.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: knitr: { quiet: yes }
+\end{codebox}
+
+\item[\rulebox{latex}]
+This rule runs the \rbox{latex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
\begin{description}
+\item[\rpbox{branch}{stable}] This option allows branching formats for the current engine, mainly focused on package development. Users of current \TeX\ distributions might benefit from format branching in order to easily test documents and code against the upcoming releases. Possible values are:
+
+\begin{description}
+\item[\povalue{stable}] This value, as the name implies, enables the stable engine format branch. Note that this is the default format.
+
+\item[\povalue{developer}] For experienced users, this value enables the experimental, developer engine format branch.
+\end{description}
+
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
\begin{description}
@@ -447,7 +543,8 @@ spreadsheet import functions also use this setting.
% arara: latex: { interaction: scrollmode, draft: yes }
\end{codebox}
-\item[\rulebox{latexmk}{Marco Daniel, Brent Longborough, Paulo Cereda}] This rule runs \rbox{latexmk}, a fantastic command line tool for fully automated \TeX\ document generation, on the provided \mtbox{currentFile} reference.
+\item[\rulebox{latexmk}]
+This rule runs \rbox{latexmk}, a fantastic command line tool for fully automated \TeX\ document generation, on the provided \mtbox{currentFile} reference.
\begin{description}
\item[\abox{clean}] This option, as the name indicates, removes all temporary files generated after a sequence of intermediate calls for document generation. Two possible values are available:
@@ -479,7 +576,8 @@ spreadsheet import functions also use this setting.
% arara: latexmk: { engine: pdflatex }
\end{codebox}
-\item[\rulebox{lualatex}{Marco Daniel, Paulo Cereda}] This rule runs the new \rbox{lualatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
+\item[\rulebox{luahbtex}]
+This rule runs the \rbox{luahbtex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -504,11 +602,50 @@ spreadsheet import functions also use this setting.
\end{description}
\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: luahbtex: { interaction: batchmode,
+% arara: --> shell: yes, draft: yes }
+\end{codebox}
+
+\item[\rulebox{lualatex}]
+This rule runs the new \rbox{lualatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
+
+\begin{description}
+\item[\rpbox{branch}{stable}] This option allows branching formats for the current engine, mainly focused on package development. Users of current \TeX\ distributions might benefit from format branching in order to easily test documents and code against the upcoming releases. Possible values are:
+
+\begin{description}
+\item[\povalue{stable}] This value, as the name implies, enables the stable engine format branch. Note that this is the default format.
+
+\item[\povalue{developer}] For experienced users, this value enables the experimental, developer engine format branch.
+\end{description}
+
+\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
+
+\begin{description}
+\item[\povalue{batchmode}] In this mode, nothing is printed on the terminal, and errors are scrolled as if the \rbox{return} key is hit at every error. Missing files that \TeX\ tries to input or request from keyboard input cause the job to abort.
+
+\item[\povalue{nonstopmode}] In this mode, the diagnostic message will appear on the terminal, but there is no possibility of user interaction just like in batch mode, previously described.
+
+\item[\povalue{scrollmode}] In this mode, as the name indicates, \TeX\ will stop only for missing files to input or if proper keyboard input is necessary. \TeX\ fixes errors itself.
+
+\item[\povalue{errorstopmode}] In this mode, \TeX\ will stop at each error, asking for proper user intervention. This is the most user interactive mode available.
+\end{description}
+
+\item[\rpsbox{shell}] This option sets whether the possibility of running underlying system commands from within \TeX\ is activated.
+
+\item[\rpsbox{synctex}] This option sets whether \rbox{synctex}, an input and output synchronization feature that allows navigation from source to typeset material and vice versa, available in most \TeX\ engines, is activated.
+
+\item[\rpsbox{draft}] This option sets whether the draft mode, i.e, a mode that produces no output, so the engine can check the syntax, is activated.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
% arara: lualatex: { interaction: errorstopmode,
% arara: --> synctex: yes }
\end{codebox}
-\item[\rulebox{luatex}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{luatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
+\item[\rulebox{luatex}]
+This rule runs the \rbox{luatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -537,7 +674,8 @@ spreadsheet import functions also use this setting.
% arara: --> shell: yes, draft: yes }
\end{codebox}
-\item[\rulebox{make}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{make}, a build automation tool that automatically builds executable programs and libraries from source code, according to a special file which specifies how to derive the target program.
+\item[\rulebox{make}]
+This rule runs \rbox{make}, a build automation tool that automatically builds executable programs and libraries from source code, according to a special file which specifies how to derive the target program.
\begin{description}
\item[\abox{targets}] This option takes a list of targets. Note that \rbox{make} updates a target if it depends on files that have been modified since the target was last modified, or if the target does not exist.
@@ -549,7 +687,8 @@ spreadsheet import functions also use this setting.
% arara: make: { targets: [ compile, package ] }
\end{codebox}
-\item[\rulebox{makeglossaries}{Marco Daniel, Nicola Talbot, Paulo Cereda}] This rule runs \rbox{makeglossaries}, an efficient Perl script designed for use with \TeX\ documents that work with the \rbox{glossaries} package. All the information required to be passed to the relevant indexing application should also be contained in the auxiliary file. The script takes the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as the mandatory argument.
+\item[\rulebox{makeglossaries}]
+This rule runs \rbox{makeglossaries}, an efficient Perl script designed for use with \TeX\ documents that work with the \rbox{glossaries} package. All the information required to be passed to the relevant indexing application should also be contained in the auxiliary file. The script takes the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as the mandatory argument.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual script call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -559,7 +698,8 @@ spreadsheet import functions also use this setting.
% arara: makeglossaries if found('aux', '@istfilename')
\end{codebox}
-\item[\rulebox{makeglossarieslite}{Marco Daniel, Nicola Talbot, Paulo Cereda}] This rule runs \rbox{makeglossaries-lite}, a lightweight Lua script designed for use with \TeX\ documents that work with the \rbox{glossaries} package. All the information required to be passed to the relevant indexing application should also be contained in the auxiliary file. The script takes the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as the mandatory argument.
+\item[\rulebox{makeglossarieslite}]
+This rule runs \rbox{makeglossaries-lite}, a lightweight Lua script designed for use with \TeX\ documents that work with the \rbox{glossaries} package. All the information required to be passed to the relevant indexing application should also be contained in the auxiliary file. The script takes the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as the mandatory argument.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual script call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -569,7 +709,8 @@ spreadsheet import functions also use this setting.
% arara: makeglossarieslite if found('aux', '@istfilename')
\end{codebox}
-\item[\rulebox{makeindex}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{makeindex}, a general purpose hierarchical index generator, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{idx} suffix, generating an index as a special \rbox{ind} file.
+\item[\rulebox{makeindex}]
+This rule runs \rbox{makeindex}, a general purpose hierarchical index generator, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{idx} suffix, generating an index as a special \rbox{ind} file.
\begin{description}
\item[\abox{style}] This option, as the name indicates, sets the underlying index style file. Make sure to provide a valid \rbox{ist} file when using this option.
@@ -597,7 +738,41 @@ spreadsheet import functions also use this setting.
% arara: makeindex: { style: book.ist }
\end{codebox}
-\item[\rulebox{nomencl}{Marco Daniel, Nicola Talbot, Paulo Cereda}] This rule runs \rbox{makeindex} in order to automatically generate a nomenclature list from \TeX\ documents that work with the \rbox{nomencl} package. The program itself is a general purpose hierarchical index generator and takes the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{nlo} suffix and a special style file in order to generate the nomenclature list as a special \rbox{nls} file.
+\item[\rulebox{metapost}]
+This rule runs \rbox{metapost}, a tool to compile the Metapost graphics programming language. Please note that you will have to make the \rbox{.mp} extension known to \arara\ in order to compile Metapost files. Furthermore, it is advised to use this in your regular \TeX\ document specifying the \abox{files} parameter to include all graphics you want to compile for inclusion in your document.
+
+\begin{description}
+\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
+
+\begin{description}
+\item[\povalue{batchmode}] In this mode, nothing is printed on the terminal, and errors are scrolled as if the \rbox{return} key is hit at every error. Missing files that \TeX\ tries to input or request from keyboard input cause the job to abort.
+
+\item[\povalue{nonstopmode}] In this mode, the diagnostic message will appear on the terminal, but there is no possibility of user interaction just like in batch mode, previously described.
+
+\item[\povalue{scrollmode}] In this mode, as the name indicates, \TeX\ will stop only for missing files to input or if proper keyboard input is necessary. \TeX\ fixes errors itself.
+
+\item[\povalue{errorstopmode}] In this mode, \TeX\ will stop at each error, asking for proper user intervention. This is the most user interactive mode available.
+\end{description}
+
+\item[\abox{numbersystem}] This option sets the number system Metapost will use for calculations.
+
+\begin{description}
+\item[\povalue{scaled}] In this mode, 32-bit fixed-point arithmetics is used.
+
+\item[\povalue{double}] In this mode, IEEE floating-point arithmetics with 64 bits is used.
+\item[\povalue{binary}] This mode is similary to \povalue{double} but without a fixed-length mantissa.
+\item[\povalue{decimal}] In this mode, arbitrary precision arithmetics is used and numbers are internally represented in base 10.
+\end{description}
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: metapost: { files: [ graphics.mp ] }
+\end{codebox}
+
+\item[\rulebox{nomencl}]
+This rule runs \rbox{makeindex} in order to automatically generate a nomenclature list from \TeX\ documents that work with the \rbox{nomencl} package. The program itself is a general purpose hierarchical index generator and takes the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{nlo} suffix and a special style file in order to generate the nomenclature list as a special \rbox{nls} file.
\begin{description}
\item[\rpbox{style}{nomencl.ist}] This option, as the name indicates, sets the underlying index style file. The default value is set to the one automatically provided by the \rbox{nomencl} package, so it is highly recommended to not override it.
@@ -609,7 +784,20 @@ spreadsheet import functions also use this setting.
% arara: nomencl
\end{codebox}
-\item[\rulebox{pdfcsplain}{Paulo Cereda}] This rule runs the \rbox{pdfcsplain} \TeX\ engine, a conservative extension of Knuth's plain \TeX\ with direct processing characters and hyphenation patterns for Czech and Slovak, on the provided \mtbox{currentFile} reference.
+\item[\rulebox{pbibtex}]
+This rule runs the \rbox{pbibtex} program, a reference management software, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
+
+\begin{description}
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: pbibtex
+% arara: --> if exists(toFile('references.bib'))
+\end{codebox}
+
+\item[\rulebox{pdfcsplain}]
+This rule runs the \rbox{pdfcsplain} \TeX\ engine, a conservative extension of Knuth's plain \TeX\ with direct processing characters and hyphenation patterns for Czech and Slovak, on the provided \mtbox{currentFile} reference.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -637,9 +825,18 @@ spreadsheet import functions also use this setting.
% arara: pdfcsplain: { shell: yes, synctex: yes }
\end{codebox}
-\item[\rulebox{pdflatex}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{pdflatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
+\item[\rulebox{pdflatex}]
+This rule runs the \rbox{pdflatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
\begin{description}
+\item[\rpbox{branch}{stable}] This option allows branching formats for the current engine, mainly focused on package development. Users of current \TeX\ distributions might benefit from format branching in order to easily test documents and code against the upcoming releases. Possible values are:
+
+\begin{description}
+\item[\povalue{stable}] This value, as the name implies, enables the stable engine format branch. Note that this is the default format.
+
+\item[\povalue{developer}] For experienced users, this value enables the experimental, developer engine format branch.
+\end{description}
+
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
\begin{description}
@@ -666,7 +863,8 @@ spreadsheet import functions also use this setting.
% arara: --> if missing('pdf') || changed('tex')
\end{codebox}
-\item[\rulebox{pdftex}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{pdftex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
+\item[\rulebox{pdftex}]
+This rule runs the \rbox{pdftex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -694,7 +892,43 @@ spreadsheet import functions also use this setting.
% arara: pdftex: { draft: yes }
\end{codebox}
-\item[\rulebox{pdftk}{Nicola Talbot, Paulo Cereda}] This rule runs \rbox{pdftk}, a command line tool for manipulating Portable Document Format documents, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{pdf} suffix.
+\item[\rulebox{platex}]
+This rule runs the \rbox{platex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
+
+\begin{description}
+\item[\rpbox{branch}{stable}] This option allows branching formats for the current engine, mainly focused on package development. Users of current \TeX\ distributions might benefit from format branching in order to easily test documents and code against the upcoming releases. Possible values are:
+
+\begin{description}
+\item[\povalue{stable}] This value, as the name implies, enables the stable engine format branch. Note that this is the default format.
+
+\item[\povalue{developer}] For experienced users, this value enables the experimental, developer engine format branch.
+\end{description}
+
+\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
+
+\begin{description}
+\item[\povalue{batchmode}] In this mode, nothing is printed on the terminal, and errors are scrolled as if the \rbox{return} key is hit at every error. Missing files that \TeX\ tries to input or request from keyboard input cause the job to abort.
+
+\item[\povalue{nonstopmode}] In this mode, the diagnostic message will appear on the terminal, but there is no possibility of user interaction just like in batch mode, previously described.
+
+\item[\povalue{scrollmode}] In this mode, as the name indicates, \TeX\ will stop only for missing files to input or if proper keyboard input is necessary. \TeX\ fixes errors itself.
+
+\item[\povalue{errorstopmode}] In this mode, \TeX\ will stop at each error, asking for proper user intervention. This is the most user interactive mode available.
+\end{description}
+
+\item[\rpsbox{shell}] This option sets whether the possibility of running underlying system commands from within \TeX\ is activated.
+
+\item[\rpsbox{synctex}] This option sets whether \rbox{synctex}, an input and output synchronization feature that allows navigation from source to typeset material and vice versa, available in most \TeX\ engines, is activated.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: platex: { interaction: scrollmode, shell: yes }
+\end{codebox}
+
+\item[\rulebox{pdftk}]
+This rule runs \rbox{pdftk}, a command line tool for manipulating Portable Document Format documents, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{pdf} suffix.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -704,7 +938,8 @@ spreadsheet import functions also use this setting.
% arara: pdftk: { options: [ burst ] }
\end{codebox}
-\item[\rulebox{ps2pdf}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{ps2pdf}, a tool that converts PostScript to Portable Document File, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{ps} suffix.
+\item[\rulebox{ps2pdf}]
+This rule runs \rbox{ps2pdf}, a tool that converts PostScript to Portable Document File, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{ps} suffix.
\begin{description}
\item[\abox{output}] This option, as the name indicates, sets the output name for the generated \rbox{pdf} file. There is no need to provide an extension, as the value is always normalized with \mtbox{getBasename} such that only the name without the associated extension is used. The base name of the current file reference is used as the default value.
@@ -716,7 +951,8 @@ spreadsheet import functions also use this setting.
% arara: ps2pdf: { output: article }
\end{codebox}
-\item[\rulebox{sketch}{Sergey Ulyanov, Paulo Cereda}] This rule runs \rbox{sketch}, a system for producing line drawings of solid objects and scenes, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{sk} suffix. Note that one needs to add support for this particular file type, as seen in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}.
+\item[\rulebox{sketch}]
+This rule runs \rbox{sketch}, a system for producing line drawings of solid objects and scenes, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{sk} suffix. Note that one needs to add support for this particular file type, as seen in Section~\ref{sec:basicstructure}, on page~\pageref{sec:basicstructure}.
\begin{description}
\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
@@ -726,7 +962,8 @@ spreadsheet import functions also use this setting.
% arara: sketch
\end{codebox}
-\item[\rulebox{songidx}{Francesco Endrici, Paulo Cereda}] This rule runs \rbox{songidx}, a song index generation script for the \rbox{songs} package, on the file reference provided as parameter, generating a proper index as a special \rbox{sbx} file. It is very important to observe that, at the time of writing, this script is not available off the shelf in \TeX\ Live or MiK\TeX\ distributions, so a manual deployment is required. The script execution is performed by the underlying \rbox{texlua} interpreter.
+\item[\rulebox{songidx}]
+This rule runs \rbox{songidx}, a song index generation script for the \rbox{songs} package, on the file reference provided as parameter, generating a proper index as a special \rbox{sbx} file. It is very important to observe that, at the time of writing, this script is not available off the shelf in \TeX\ Live or MiK\TeX\ distributions, so a manual deployment is required. The script execution is performed by the underlying \rbox{texlua} interpreter.
\begin{description}
\item[\abox{input}~\rqbox] This required option, as the name indicates, sets the input name for the song index file specified within the \TeX\ document. There is no need to provide an extension, as the value is always normalized with \mtbox{getBasename} such that only the name without the associated extension is used.
@@ -740,7 +977,8 @@ spreadsheet import functions also use this setting.
% arara: songidx: { input: songs }
\end{codebox}
-\item[\rulebox{tex}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{tex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
+\item[\rulebox{tex}]
+This rule runs the \rbox{tex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -764,7 +1002,8 @@ spreadsheet import functions also use this setting.
% arara: tex: { shell: yes }
\end{codebox}
-\item[\rulebox{texindy}{Nicola Talbot, Paulo Cereda}] This rule runs \rbox{texindy}, a variant of the \rbox{xindy} indexing system focused on \LaTeX\ documents, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{idx} suffix, generating an index as a special \rbox{ind} file.
+\item[\rulebox{texindy}]
+This rule runs \rbox{texindy}, a variant of the \rbox{xindy} indexing system focused on \LaTeX\ documents, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{idx} suffix, generating an index as a special \rbox{ind} file.
\begin{description}
\item[\rpsbox{quiet}] This option, as the name indicates, sets whether the tool will output progress messages. It is important to observe that \rbox{texindy} always outputs error messages, regardless of this option.
@@ -798,7 +1037,8 @@ spreadsheet import functions also use this setting.
% arara: texindy: { markup: latex }
\end{codebox}
-\item[\rulebox{tikzmake}{Robbie Smith, Paulo Cereda}] This rule runs \rbox{make} on a very specific build file generated by the \rbox{tikzmake} package, as a means to simplify the externalization of Ti{\itshape k}Z pictures. This build file corresponds to the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{makefile} suffix.
+\item[\rulebox{tikzmake}]
+This rule runs \rbox{make} on a very specific build file generated by the \rbox{tikzmake} package, as a means to simplify the externalization of Ti{\itshape k}Z pictures. This build file corresponds to the base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{makefile} suffix.
\begin{description}
\item[\rpsbox{force}] This option, as the name indicates, sets whether all targets specified in the corresponding build file should be unconditionally made.
@@ -812,22 +1052,82 @@ spreadsheet import functions also use this setting.
% arara: tikzmake: { force: yes, jobs: 2 }
\end{codebox}
-\item[\rulebox{velocity}{Paulo Cereda}] This rule, as the name suggests, calls the \mtbox{mergeVelocityTemplate} method, merging an input template file written according to the Velocity Template Language 1.7 specification with the provided \rbox{Map} data object in order to produce a corresponding \rbox{File} output. Be mindful that this particular rule returns \rbox{true} if, and only if, the aforementioned method is successfully executed. Otherwise, an exception is raised.
+\item[\rulebox{upbibtex}]
+This rule runs the \rbox{upbibtex} program, a reference management software, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string.
\begin{description}
-\item[\abox{input}] This option, as the name indicates, sets the input template file, written according to the Velocity Template Language 1.7 specification, as a proper \rbox{File} reference. Please note that the \mtbox{currentFile} reference is used as default input when this option is not set.
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
-\item[\abox{output}~\rqbox] This required option, as the name indicates, sets the output \rbox{File} reference. Be mindful that, if the reference exists, it will be overwritten without any warning.
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: pbibtex
+% arara: --> if exists(toFile('references.bib'))
+\end{codebox}
+
+\item[\rulebox{uplatex}]
+This rule runs the \rbox{uplatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
+
+\begin{description}
+\item[\rpbox{branch}{stable}] This option allows branching formats for the current engine, mainly focused on package development. Users of current \TeX\ distributions might benefit from format branching in order to easily test documents and code against the upcoming releases. Possible values are:
+
+\begin{description}
+\item[\povalue{stable}] This value, as the name implies, enables the stable engine format branch. Note that this is the default format.
-\item[\abox{context}~\rqbox] This required option, as the name indicates, sets the \rbox{Map} data object to be used as context to the method call, according to the provided value. An error is thrown if any data structure other than a proper map is specified.
+\item[\povalue{developer}] For experienced users, this value enables the experimental, developer engine format branch.
+\end{description}
+
+\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
+
+\begin{description}
+\item[\povalue{batchmode}] In this mode, nothing is printed on the terminal, and errors are scrolled as if the \rbox{return} key is hit at every error. Missing files that \TeX\ tries to input or request from keyboard input cause the job to abort.
+
+\item[\povalue{nonstopmode}] In this mode, the diagnostic message will appear on the terminal, but there is no possibility of user interaction just like in batch mode, previously described.
+
+\item[\povalue{scrollmode}] In this mode, as the name indicates, \TeX\ will stop only for missing files to input or if proper keyboard input is necessary. \TeX\ fixes errors itself.
+
+\item[\povalue{errorstopmode}] In this mode, \TeX\ will stop at each error, asking for proper user intervention. This is the most user interactive mode available.
+\end{description}
+
+\item[\rpsbox{shell}] This option sets whether the possibility of running underlying system commands from within \TeX\ is activated.
+
+\item[\rpsbox{synctex}] This option sets whether \rbox{synctex}, an input and output synchronization feature that allows navigation from source to typeset material and vice versa, available in most \TeX\ engines, is activated.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
\end{description}
\begin{codebox}{Example}{teal}{\icnote}{white}
-% arara: velocity: { input: input.txt, output: output.txt,
-% arara: --> context: { name: Paulo, country: Brazil } }
+% arara: uplatex: { interaction: scrollmode, shell: yes }
\end{codebox}
-\item[\rulebox{xdvipdfmx}{Marco Daniel, Paulo Cereda}] This rule runs \rbox{xdvipdfmx}, the back end for the \rbox{xetex} \TeX\ engine (and not intended to be invoked directly), on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a Portable Document Format \rbox{pdf} file.
+\item[\rulebox{uptex}]
+This rule runs the \rbox{uptex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in a device independent format.
+
+\begin{description}
+\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
+
+\begin{description}
+\item[\povalue{batchmode}] In this mode, nothing is printed on the terminal, and errors are scrolled as if the \rbox{return} key is hit at every error. Missing files that \TeX\ tries to input or request from keyboard input cause the job to abort.
+
+\item[\povalue{nonstopmode}] In this mode, the diagnostic message will appear on the terminal, but there is no possibility of user interaction just like in batch mode, previously described.
+
+\item[\povalue{scrollmode}] In this mode, as the name indicates, \TeX\ will stop only for missing files to input or if proper keyboard input is necessary. \TeX\ fixes errors itself.
+
+\item[\povalue{errorstopmode}] In this mode, \TeX\ will stop at each error, asking for proper user intervention. This is the most user interactive mode available.
+\end{description}
+
+\item[\rpsbox{shell}] This option sets whether the possibility of running underlying system commands from within \TeX\ is activated.
+
+\item[\rpsbox{synctex}] This option sets whether \rbox{synctex}, an input and output synchronization feature that allows navigation from source to typeset material and vice versa, available in most \TeX\ engines, is activated.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: uptex
+\end{codebox}
+
+\item[\rulebox{xdvipdfmx}]
+This rule runs \rbox{xdvipdfmx}, the back end for the \rbox{xetex} \TeX\ engine (and not intended to be invoked directly), on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{dvi} suffix, generating a Portable Document Format \rbox{pdf} file.
\begin{description}
\item[\abox{output}] This option, as the name indicates, sets the output name for the generated \rbox{pdf} file. There is no need to provide an extension, as the value is always normalized with \mtbox{getBasename} such that only the name without the associated extension is used. The base name of the current file reference is used as the default value.
@@ -839,9 +1139,18 @@ spreadsheet import functions also use this setting.
% arara: xdvipdfmx: { output: thesis }
\end{codebox}
-\item[\rulebox{xelatex}{Marco Daniel, Paulo Cereda}] This rule runs the new \rbox{xelatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
+\item[\rulebox{xelatex}]
+This rule runs the new \rbox{xelatex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
\begin{description}
+\item[\rpbox{branch}{stable}] This option allows branching formats for the current engine, mainly focused on package development. Users of current \TeX\ distributions might benefit from format branching in order to easily test documents and code against the upcoming releases. Possible values are:
+
+\begin{description}
+\item[\povalue{stable}] This value, as the name implies, enables the stable engine format branch. Note that this is the default format.
+
+\item[\povalue{developer}] For experienced users, this value enables the experimental, developer engine format branch.
+\end{description}
+
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
\begin{description}
@@ -865,7 +1174,8 @@ spreadsheet import functions also use this setting.
% arara: xelatex: { shell: yes, synctex: yes }
\end{codebox}
-\item[\rulebox{xetex}{Marco Daniel, Paulo Cereda}] This rule runs the \rbox{xetex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
+\item[\rulebox{xetex}]
+This rule runs the \rbox{xetex} \TeX\ engine on the provided \mtbox{currentFile} reference, generating a corresponding file in the Portable Document File format, as expected.
\begin{description}
\item[\abox{interaction}] This option alters the underlying engine behaviour. If this option is omitted, \TeX\ will prompt the user for interaction in the event of an error. Possible values are, in order of increasing user interaction (courtesy of our master Enrico Gregorio):
@@ -891,7 +1201,25 @@ spreadsheet import functions also use this setting.
% arara: xetex: { interaction: scrollmode, synctex: yes }
\end{codebox}
-\item[\rulebox{xindy}{Nicola Talbot, Paulo Cereda}] This rule runs \rbox{xindy}, a flexible and powerful indexing system, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{idx} suffix, generating an index as a special \rbox{ind} file.
+\item[\rulebox{xindex}]
+This rule runs \rbox{xindex}, a flexible and powerful indexing system, on a provided \rbox{idx} input. This tool is completely with the \rbox{makeindex} program.
+
+\begin{description}
+\item[\abox{input}~\rqbox] This option, as the name indicates, corresponds to the \rbox{idx} reference to be processed by the indexing system. Note that this option is required.
+
+\item[\rpbox{config}{cfg}] This option specifies a configuration extension. Make sure to take a look at the documentation for further details.
+
+\item[\rpbox{language}{en}] This option, as the name suggests, specifies the language. Make sure to take a look at the documentation for further details.
+
+\item[\abox{options}] This option, as the name indicates, takes a list of raw command line options and appends it to the actual system call. An error is thrown if any data structure other than a proper list is provided as the value.
+\end{description}
+
+\begin{codebox}{Example}{teal}{\icnote}{white}
+% arara: xindex: { input: mydoc.idx }
+\end{codebox}
+
+\item[\rulebox{xindy}]
+This rule runs \rbox{xindy}, a flexible and powerful indexing system, on the corresponding base name of the \mtbox{currentFile} reference (i.e, the name without the associated extension) as a string concatenated with the \rbox{idx} suffix, generating an index as a special \rbox{ind} file.
\begin{description}
\item[\rpsbox{quiet}] This option, as the name indicates, sets whether the tool will output progress messages. It is important to observe that \rbox{xindy} always outputs error messages, regardless of this option.
diff --git a/support/arara/doc/chapters/yaml.tex b/support/arara/doc/chapters/yaml.tex
index 4078473829..c65c9898d7 100644
--- a/support/arara/doc/chapters/yaml.tex
+++ b/support/arara/doc/chapters/yaml.tex
@@ -2,22 +2,22 @@
\chapter{YAML}
\label{chap:yaml}
-According to the \href{http://yaml.org/spec/1.2/spec.html}{specification}, \gls{YAML} (a recursive acronym for \emph{YAML Ain't Markup Language}) is a human-friendly, cross language, Unicode-based data serialization language designed around the common native data type of programming languages. \arara\ uses this format in three circumstances:
+According to the \href{http://yaml.org/spec/1.2/spec.html}{specification}, YAML (a recursive acronym for \emph{YAML Ain't Markup Language}) is a human-friendly, cross language, Unicode-based data serialization language designed around the common native data type of programming languages. \arara\ uses this format in three circumstances:
\begin{enumerate}
\item\emph{Parametrized directives}, as the set of attribute/value pairs (namely, argument name and corresponding value) is represented by a map. This particular type of directive is formally introduced in Section~\ref{sec:directives}, on page~\pageref{sec:directives}.
-\item\emph{Rules}, as their entire structure is represented by a set of specific keys and their corresponding values (a proper \gls{YAML} document). A rule follows a very strict model, detailed in Section~\ref{sec:rule}, on page~\pageref{sec:rule}.
+\item\emph{Rules}, as their entire structure is represented by a set of specific keys and their corresponding values (a proper YAML document). A rule follows a very strict model, detailed in Section~\ref{sec:rule}, on page~\pageref{sec:rule}.
-\item\emph{Configuration files}, as the general settings are represented by a set of specific keys and their corresponding values (a proper \gls{YAML} document). Configuration files are covered in Chapter~\ref{chap:configurationfile}, on page~\pageref{chap:configurationfile}.
+\item\emph{Configuration files}, as the general settings are represented by a set of specific keys and their corresponding values (a proper YAML document). Configuration files are covered in Chapter~\ref{chap:configurationfile}, on page~\pageref{chap:configurationfile}.
\end{enumerate}
-This chapter only covers the relevant parts of the \gls{YAML} format for a consistent use with \arara. For advanced topics, I highly recommend the complete format specification, available online.
+This chapter only covers the relevant parts of the YAML format for a consistent use with \arara. For advanced topics, I highly recommend the complete format specification, available online.
\section{Collections}
\label{sec:yamlcollections}
-According to the specification, \gls{YAML}['s] block collections use indentation for scope and begin each entry on its own line. Block sequences indicate each entry with a dash and space. Mappings use a colon and space to mark each \emph{key: value} pair. Comments begin with an octothorpe \rbox{\#}. \arara\ relies solely on mappings and a few scalars to sequences at some point. Let us see an example of a sequence:
+According to the specification, YAML's block collections use indentation for scope and begin each entry on its own line. Block sequences indicate each entry with a dash and space. Mappings use a colon and space to mark each \emph{key: value} pair. Comments begin with an octothorpe \rbox{\#}. \arara\ relies solely on mappings and a few scalars to sequences at some point. Let us see an example of a sequence:
\begin{codebox}{A sequence of scalars in YAML}{teal}{\icnote}{white}
team:
@@ -25,15 +25,16 @@ team:
- Marco Daniel
- Brent Longborough
- Nicola Talbot
+- Ben Frank
\end{codebox}
-It is quite straightforward: \abox{team} holds a sequence of four scalars. \gls{YAML} also has flow styles, using explicit indicators rather than indentation to denote scope. The flow sequence is written as a comma-separated list within square brackets:
+It is quite straightforward: \abox{team} holds a sequence of four scalars. YAML also has flow styles, using explicit indicators rather than indentation to denote scope. The flow sequence is written as a comma-separated list within square brackets:
\begin{codebox}{A sequence of scalars in YAML}{teal}{\icnote}{white}
primes: [ 2, 3, 5, 7, 11 ]
\end{codebox}
-Attribute maps are easily represented by nesting entries, respecting indentation. For instance, consider a map \abox{developer} containing two keys, \abox{name} and \abox{country}. The \gls{YAML} representation is presented as follows:
+Attribute maps are easily represented by nesting entries, respecting indentation. For instance, consider a map \abox{developer} containing two keys, \abox{name} and \abox{country}. The YAML representation is presented as follows:
\begin{codebox}{An attribute map in YAML}{teal}{\icnote}{white}
developer:
@@ -81,17 +82,17 @@ As seen in the previous code, \abox{logo} holds the ASCII logo of our tool, resp
\begin{messagebox}{Block indentation indicator}{attentioncolour}{\icattention}{black}
\setlength{\parskip}{1em}
-According to the \gls{YAML} specification, the indentation level of a block scalar is typically detected from its first non-empty line. It is an error for any of the leading empty lines to contain more spaces than the first non-empty line, hence the ASCII logo could not be represented, as it starts with a space.
+According to the YAML specification, the indentation level of a block scalar is typically detected from its first non-empty line. It is an error for any of the leading empty lines to contain more spaces than the first non-empty line, hence the ASCII logo could not be represented, as it starts with a space.
-When detection would fail, \gls{YAML} requires that the indentation level for the content be given using an explicit indentation indicator. This level is specified as the integer number of the additional indentation spaces used for the content, relative to its parent node. It would be the case if we want to represent our logo without the preceding text.
+When detection would fail, YAML requires that the indentation level for the content be given using an explicit indentation indicator. This level is specified as the integer number of the additional indentation spaces used for the content, relative to its parent node. It would be the case if we want to represent our logo without the preceding text.
\end{messagebox}
-\gls{YAML}['s] flow scalars include the plain style and two quoted styles. The double-quoted style provides escape sequences. The single-quoted style is useful when escaping is not needed. All flow scalars can span multiple lines. Note that line breaks are always folded. Since \arara\ uses \gls{MVEL} as its underlying scripting language (Chapter~\ref{chap:mvel}, on page~\pageref{chap:mvel}), it might be advisable to quote scalars when starting with forbidden symbols in \gls{YAML}.
+YAML's flow scalars include the plain style and two quoted styles. The double-quoted style provides escape sequences. The single-quoted style is useful when escaping is not needed. All flow scalars can span multiple lines. Note that line breaks are always folded. Since \arara\ uses MVEL as its underlying scripting language (Chapter~\ref{chap:mvel}, on page~\pageref{chap:mvel}), it might be advisable to quote scalars when starting with forbidden symbols in YAML.
\section{Tags}
\label{sec:yamltags}
-According to the specification, in \gls{YAML}, untagged nodes are given a type depending on the application. The examples covered in this primer use the \rbox{seq}, \rbox{map} and \rbox{str} types from the fail safe schema. Explicit typing is denoted with a tag using the exclamation point symbol. Global tags are usually uniform resource identifiers and may be specified in a tag shorthand notation using a handle. Application-specific local tags may also be used. For \arara, there is a special schema used for both rules and configuration files, so in those cases, make sure to add \abox{!config} as global tag:
+According to the specification, in YAML, untagged nodes are given a type depending on the application. The examples covered in this primer use the \rbox{seq}, \rbox{map} and \rbox{str} types from the fail safe schema. Explicit typing is denoted with a tag using the exclamation point symbol. Global tags are usually uniform resource identifiers and may be specified in a tag shorthand notation using a handle. Application-specific local tags may also be used. For \arara, there is a special schema used for both rules and configuration files, so in those cases, make sure to add \abox{!config} as global tag:
\begin{codebox}{Global tag for rules and configuration files}{teal}{\icnote}{white}
!config
@@ -102,4 +103,4 @@ In particular, rules and configuration files of \arara\ are properly covered in
\section{Further reading}
\label{sec:yamlfurtherreading}
-This chapter does not cover all features of the \gls{YAML} format, so further reading is advisable. I highly recommend the \href{http://yaml.org/spec/1.2/spec.html}{official YAML specification}, currently covering the third version of the format.
+This chapter does not cover all features of the YAML format, so further reading is advisable. I highly recommend the \href{http://yaml.org/spec/1.2/spec.html}{official YAML specification}, currently covering the third version of the format.
diff --git a/support/arara/doc/figures/gl.pdf b/support/arara/doc/figures/gl.pdf
new file mode 100644
index 0000000000..0f6cabd4f6
--- /dev/null
+++ b/support/arara/doc/figures/gl.pdf
@@ -0,0 +1,69 @@
+%PDF-1.5
+%
+4 0 obj
+<< /Length 5 0 R
+ /Filter /FlateDecode
+>>
+stream
+xTAn1 @XEyBa9?PwޢAP]r8[CM(݌@%zWo{_Ql
+b(Un h̺؉-@ kn.Zeɕ@Höq݆qTTO[׃✝cs&.!SvGҭ)GbiC ófuZcz0-UO[IGrg;v<p ACH%9(%,}E&^f/xz!%s͋[4*VG} ]X c*+ttܹ؟T XeA9v,,DaœƢ{9̛R4o?yŌuuYiõP
+endstream
+endobj
+5 0 obj
+ 454
+endobj
+3 0 obj
+<<
+ /ExtGState <<
+ /a0 << /CA 1 /ca 1 >>
+ >>
+>>
+endobj
+2 0 obj
+<< /Type /Page % 1
+ /Parent 1 0 R
+ /MediaBox [ 0 0 253.183441 233.243774 ]
+ /Contents 4 0 R
+ /Group <<
+ /Type /Group
+ /S /Transparency
+ /I true
+ /CS /DeviceRGB
+ >>
+ /Resources 3 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+ /Kids [ 2 0 R ]
+ /Count 1
+>>
+endobj
+6 0 obj
+<< /Producer (cairo 1.16.0 (https://cairographics.org))
+ /CreationDate (D:20191111110215-03'00)
+>>
+endobj
+7 0 obj
+<< /Type /Catalog
+ /Pages 1 0 R
+>>
+endobj
+xref
+0 8
+0000000000 65535 f
+0000000872 00000 n
+0000000640 00000 n
+0000000568 00000 n
+0000000015 00000 n
+0000000546 00000 n
+0000000937 00000 n
+0000001053 00000 n
+trailer
+<< /Size 8
+ /Root 7 0 R
+ /Info 6 0 R
+>>
+startxref
+1105
+%%EOF
diff --git a/support/arara/doc/rules/manual.yaml b/support/arara/doc/rules/manual.yaml
index d3000879d6..a419e0e779 100644
--- a/support/arara/doc/rules/manual.yaml
+++ b/support/arara/doc/rules/manual.yaml
@@ -2,17 +2,17 @@
identifier: manual
name: The arara manual
authors:
-- Paulo Cereda
+- Island of TeX
commands:
- name: The PDFLaTeX engine
command: >
@{
- return getCommand('pdflatex', file);
+ return getCommand('pdflatex', reference);
}
- name: The PDFLaTeX engine
command: >
@{
- return getCommand('pdflatex', file);
+ return getCommand('pdflatex', reference);
}
- name: File cleanup
command: >
@@ -30,7 +30,7 @@ commands:
extensions = [ 'listing', 'log', 'toc',
'out', 'synctex.gz' ];
foreach (extension : extensions) {
- removals.add(getCommand(prefix, getBasename(file)
+ removals.add(getCommand(prefix, getBasename(reference)
.concat('.').concat(extension)));
}
foreach (match : matches) {
diff --git a/support/arara/scripts/arara.sh b/support/arara/scripts/arara.sh
index 197228f491..12efa361a6 100644
--- a/support/arara/scripts/arara.sh
+++ b/support/arara/scripts/arara.sh
@@ -3,7 +3,7 @@
# Note from Paulo: this script provides better Cygwin support than our original
# approach, so the team decided to use it as a proper wrapper for arara as well.
-scriptname=`basename "$0"`
+scriptname=`basename "$0" .sh`
jar="$scriptname.jar"
jarpath=`kpsewhich --progname="$scriptname" --format=texmfscripts "$jar"`
@@ -14,4 +14,4 @@ if echo "$kernel" | grep CYGWIN >/dev/null; then
jarpath=`cygpath -w "$jarpath"`
fi
-exec java -jar "$jarpath" "$@"
+exec java -jar "$jarpath" "$@" \ No newline at end of file
diff --git a/support/arara/scripts/rules/animate.yaml b/support/arara/scripts/rules/animate.yaml
index ac6dc347bb..d5baefa67d 100644
--- a/support/arara/scripts/rules/animate.yaml
+++ b/support/arara/scripts/rules/animate.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -8,14 +8,14 @@ identifier: animate
name: Animate
authors:
- Chris Hughes
-- Paulo Cereda
+- Island of TeX
commands:
- name: The Convert program
command: >
@{
prefix = [];
- input = getBasename(file).concat('.pdf');
- output = getBasename(file).concat('.gif');
+ input = getBasename(reference).concat('.pdf');
+ output = getBasename(reference).concat('.gif');
if (isUnix()) {
prefix = [ program ];
}
diff --git a/support/arara/scripts/rules/asymptote.yaml b/support/arara/scripts/rules/asymptote.yaml
new file mode 100644
index 0000000000..c58e7dd0e5
--- /dev/null
+++ b/support/arara/scripts/rules/asymptote.yaml
@@ -0,0 +1,62 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: asymptote
+name: Asymptote
+authors:
+- Island of TeX
+commands:
+- name: Asymptote
+ command: >
+ @{
+ return getCommand('asy', color, engine, twice,
+ format, output, options, file);
+ }
+arguments:
+- identifier: color
+ flag: >
+ @{
+ if ([ 'bw', 'cmyk', 'rgb', 'gray' ].contains(parameters.color)) {
+ return '-' + parameters.color;
+ } else {
+ throwError('The provided color enforcement is not valid.');
+ }
+ }
+- identifier: engine
+ flag: >
+ @{
+ if ([ 'latex', 'pdflatex' , 'xelatex', 'lualatex', 'tex', 'pdftex',
+ 'luatex', 'context', 'none' ].contains(parameters.engine)) {
+ return [ '-tex', parameters.engine ];
+ } else {
+ throwError('The provided TeX engine is invalid.');
+ }
+ }
+ default: latex
+- identifier: twice
+ flag: >
+ @{
+ return isTrue(parameters.twice, '-twice');
+ }
+- identifier: format
+ flag: >
+ @{
+ return [ '-f', parameters.format ];
+ }
+- identifier: output
+ flag: >
+ @{
+ return [ '-o', parameters.output ];
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ } else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/bib2gls.yaml b/support/arara/scripts/rules/bib2gls.yaml
index 9a97920717..a33744faec 100644
--- a/support/arara/scripts/rules/bib2gls.yaml
+++ b/support/arara/scripts/rules/bib2gls.yaml
@@ -1,14 +1,13 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: bib2gls
name: Bib2Gls
authors:
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: The Bib2Gls software
command: >
@@ -23,7 +22,7 @@ commands:
prefix = [ 'cmd', '/c', 'del' ];
}
- base = getBasename(file);
+ base = getBasename(reference);
removals = [];
lines = readFromFile(base.concat('.').concat('aux'));
@@ -63,7 +62,7 @@ commands:
return getCommand('bib2gls', dir, trans, group, interpret,
breakspace, trimfields, recordcount, recordcountunit,
cite, verbose, merge, locale, uniscript, packages,
- ignore, custom, mapformats, options, getBasename(file));
+ ignore, custom, mapformats, options, getBasename(reference));
}
}
arguments:
@@ -80,7 +79,7 @@ arguments:
throwError('Forbidden transcript extension');
}
- return ['--log-file', getBasename(file)+"."+parameters.trans]
+ return ['--log-file', getBasename(reference)+"."+parameters.trans]
}
- identifier: locale
flag: >
diff --git a/support/arara/scripts/rules/biber.yaml b/support/arara/scripts/rules/biber.yaml
index 9ba02bc6b2..8cf9acb474 100644
--- a/support/arara/scripts/rules/biber.yaml
+++ b/support/arara/scripts/rules/biber.yaml
@@ -1,21 +1,34 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: biber
name: Biber
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The Biber reference management software
command: >
@{
- return getCommand('biber', options, getBasename(file));
+ if (tool) {
+ return getCommand('biber', '--tool', options);
+ }
+ else {
+ return getCommand('biber', options, getBasename(file));
+ }
}
arguments:
+- identifier: tool
+ flag: >
+ @{
+ return isTrue(parameters.tool);
+ }
+ default: >
+ @{
+ return false;
+ }
- identifier: options
flag: >
@{
diff --git a/support/arara/scripts/rules/bibtex.yaml b/support/arara/scripts/rules/bibtex.yaml
index 5cbe5c1756..55dd1f0fec 100644
--- a/support/arara/scripts/rules/bibtex.yaml
+++ b/support/arara/scripts/rules/bibtex.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: bibtex
name: BibTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The BibTeX reference management software
command: >
@{
- return getCommand('bibtex', options, getBasename(file))
+ return getCommand('bibtex', options, getBasename(reference))
}
arguments:
- identifier: options
diff --git a/support/arara/scripts/rules/bibtex8.yaml b/support/arara/scripts/rules/bibtex8.yaml
index 8a4631ff77..3741a920ea 100644
--- a/support/arara/scripts/rules/bibtex8.yaml
+++ b/support/arara/scripts/rules/bibtex8.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: bibtex8
name: BibTeX8
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: An 8-bit implementation of BibTeX 0.99 with a very large capacity
command: >
@{
- return getCommand('bibtex8', options, getBasename(file));
+ return getCommand('bibtex8', options, getBasename(reference));
}
arguments:
- identifier: options
diff --git a/support/arara/scripts/rules/bibtexu.yaml b/support/arara/scripts/rules/bibtexu.yaml
index f580886d95..b1e6d18165 100644
--- a/support/arara/scripts/rules/bibtexu.yaml
+++ b/support/arara/scripts/rules/bibtexu.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: bibtexu
name: BibTeXu
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: An 8-bit implementation of BibTeX 0.99 with a very large capacity
command: >
@{
- return getCommand('bibtexu', options, getBasename(file));
+ return getCommand('bibtexu', options, getBasename(reference));
}
arguments:
- identifier: options
diff --git a/support/arara/scripts/rules/clean.yaml b/support/arara/scripts/rules/clean.yaml
index 1a39ed3f27..2a82eb3a87 100644
--- a/support/arara/scripts/rules/clean.yaml
+++ b/support/arara/scripts/rules/clean.yaml
@@ -1,14 +1,13 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: clean
name: Clean
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: Cleaning feature
command: >
@@ -21,13 +20,13 @@ commands:
prefix = [ 'cmd', '/c', 'del' ];
}
if (extensions == '') {
- if (getOriginalFile() == file) {
+ if (getOriginalReference() == reference) {
throwError('I cannot remove the main file reference.');
}
- return getCommand(prefix, file);
+ return getCommand(prefix, reference);
}
else {
- base = getBasename(file);
+ base = getBasename(reference);
removals = [];
foreach(extension : extensions) {
if (base.concat('.').concat(extension) == getOriginalFile()) {
diff --git a/support/arara/scripts/rules/csplain.yaml b/support/arara/scripts/rules/csplain.yaml
index cfdcc95421..33e13c1a93 100644
--- a/support/arara/scripts/rules/csplain.yaml
+++ b/support/arara/scripts/rules/csplain.yaml
@@ -1,19 +1,19 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: csplain
name: CSplain
authors:
-- Paulo Cereda
+- Island of TeX
commands:
- name: CSplain engine
command: >
@{
return getCommand('csplain', interaction, draft,
- shell, synctex, options, file);
+ shell, synctex, options, reference);
}
arguments:
- identifier: interaction
diff --git a/support/arara/scripts/rules/datatooltk.yaml b/support/arara/scripts/rules/datatooltk.yaml
index 0b80d15e75..6fc08491c8 100644
--- a/support/arara/scripts/rules/datatooltk.yaml
+++ b/support/arara/scripts/rules/datatooltk.yaml
@@ -1,14 +1,13 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: datatooltk
name: DatatoolTk
authors:
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: The DatatoolTk software
command: >
diff --git a/support/arara/scripts/rules/dvipdfm.yaml b/support/arara/scripts/rules/dvipdfm.yaml
index d2dca0db36..e80fe5bf98 100644
--- a/support/arara/scripts/rules/dvipdfm.yaml
+++ b/support/arara/scripts/rules/dvipdfm.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: dvipdfm
name: DVIPDFM
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The DVIPDFM program
command: >
@{
- base = getBasename(file).concat('.dvi');
+ base = getBasename(reference).concat('.dvi');
out = getBasename(output).concat('.pdf');
return getCommand('dvipdfm', base, '-o', out, options);
}
@@ -25,7 +24,7 @@ arguments:
}
default: >
@{
- file
+ reference
}
- identifier: options
flag: >
diff --git a/support/arara/scripts/rules/dvipdfmx.yaml b/support/arara/scripts/rules/dvipdfmx.yaml
index 2feb9f0fe9..e4af77204b 100644
--- a/support/arara/scripts/rules/dvipdfmx.yaml
+++ b/support/arara/scripts/rules/dvipdfmx.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: dvipdfmx
name: DVIPDFMX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The DVIPDFMX program
command: >
@{
- base = getBasename(file).concat('.dvi');
+ base = getBasename(reference).concat('.dvi');
out = getBasename(output).concat('.pdf');
return getCommand('dvipdfmx', base, '-o', out, options);
}
@@ -25,7 +24,7 @@ arguments:
}
default: >
@{
- file
+ reference
}
- identifier: options
flag: >
diff --git a/support/arara/scripts/rules/dvips.yaml b/support/arara/scripts/rules/dvips.yaml
index dd7a929bd0..c110f19679 100644
--- a/support/arara/scripts/rules/dvips.yaml
+++ b/support/arara/scripts/rules/dvips.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: dvips
name: DVIPS
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The DVIPS program
command: >
@{
- base = getBasename(file).concat('.dvi');
+ base = getBasename(reference).concat('.dvi');
out = getBasename(output).concat('.ps');
return getCommand('dvips', base, '-o', out, options);
}
@@ -25,7 +24,7 @@ arguments:
}
default: >
@{
- file
+ reference
}
- identifier: options
flag: >
diff --git a/support/arara/scripts/rules/dvipspdf.yaml b/support/arara/scripts/rules/dvipspdf.yaml
index 4190b1869c..52df9731df 100644
--- a/support/arara/scripts/rules/dvipspdf.yaml
+++ b/support/arara/scripts/rules/dvipspdf.yaml
@@ -1,26 +1,25 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: dvipspdf
name: DVIPSPDF
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The DVIPS program
command: >
@{
- base = getBasename(file).concat('.dvi');
- out = getBasename(file).concat('.ps');
+ base = getBasename(reference).concat('.dvi');
+ out = getBasename(reference).concat('.ps');
return getCommand('dvips', base, '-o', out, options1);
}
- name: The PS2PDF program
command: >
@{
- base = getBasename(file).concat('.ps');
+ base = getBasename(reference).concat('.ps');
out = getBasename(output).concat('.pdf');
return getCommand('ps2pdf', options2, base, '-o', out);
}
@@ -32,7 +31,7 @@ arguments:
}
default: >
@{
- file
+ reference
}
- identifier: options1
flag: >
diff --git a/support/arara/scripts/rules/dvisvgm.yaml b/support/arara/scripts/rules/dvisvgm.yaml
index 0b5377f29d..34edc09c57 100644
--- a/support/arara/scripts/rules/dvisvgm.yaml
+++ b/support/arara/scripts/rules/dvisvgm.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -12,7 +12,7 @@ commands:
- name: The dvisvgm program
command: >
@{
- base = getBasename(file).concat('.dvi');
+ base = getBasename(reference).concat('.dvi');
return getCommand('dvisvgm', base, options);
}
arguments:
diff --git a/support/arara/scripts/rules/etex.yaml b/support/arara/scripts/rules/etex.yaml
index 15f8bf5412..6145fad112 100644
--- a/support/arara/scripts/rules/etex.yaml
+++ b/support/arara/scripts/rules/etex.yaml
@@ -1,20 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: etex
name: eTeX
authors:
-- Marco Daniel
-- Paulo Cereda
-- Nicola Talbot
+- Island of TeX
commands:
- name: Extended TeX engine
command: >
@{
- return getCommand('etex', interaction, shell, options, file);
+ return getCommand('etex', interaction, shell, options, reference);
}
arguments:
- identifier: interaction
diff --git a/support/arara/scripts/rules/frontespizio.yaml b/support/arara/scripts/rules/frontespizio.yaml
index 45f3a4bf4f..a4637ff9f8 100644
--- a/support/arara/scripts/rules/frontespizio.yaml
+++ b/support/arara/scripts/rules/frontespizio.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -9,23 +9,23 @@ name: Frontespizio
authors:
- Francesco Endrici
- Enrico Gregorio
-- Paulo Cereda
+- Island of TeX
commands:
- name: The engine
command: >
@{
- return getCommand(engine, interaction, shell, options, file)
+ return getCommand(engine, interaction, shell, options, reference)
}
- name: The frontispiece
command: >
@{
- base = getBasename(file).concat('-frn');
+ base = getBasename(reference).concat('-frn');
return getCommand(engine, interaction, shell, base);
}
- name: The DVIPS program
command: >
@{
- base = getBasename(file).concat('-frn');
+ base = getBasename(reference).concat('-frn');
eps = base.concat('.eps');
return isTrue(engine == 'latex', getCommand('dvips', '-o',
eps, base), '');
@@ -33,7 +33,7 @@ commands:
- name: The engine
command: >
@{
- return getCommand(engine, interaction, shell, options, file);
+ return getCommand(engine, interaction, shell, options, reference);
}
arguments:
- identifier: engine
diff --git a/support/arara/scripts/rules/halt.yaml b/support/arara/scripts/rules/halt.yaml
index 9d8aaa8aef..1c14644bcb 100644
--- a/support/arara/scripts/rules/halt.yaml
+++ b/support/arara/scripts/rules/halt.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -8,11 +8,12 @@ identifier: halt
name: Halt
authors:
- Heiko Oberdiek
-- Paulo Cereda
+- Island of TeX
commands:
- name: The halt trigger
command: >
@{
- return getTrigger('halt');
+ halt(0);
+ return true;
}
arguments: []
diff --git a/support/arara/scripts/rules/indent.yaml b/support/arara/scripts/rules/indent.yaml
index b1e182f0a7..5ef623c5db 100644
--- a/support/arara/scripts/rules/indent.yaml
+++ b/support/arara/scripts/rules/indent.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -8,13 +8,13 @@ identifier: indent
name: Indent
authors:
- Chris Hughes
-- Paulo Cereda
+- Island of TeX
commands:
- name: The latexindent.pl script
command: >
@{
return getCommand('latexindent', silent, trace, screenlog,
- settings, cruft, overwrite, output, file, modifylinebreaks,
+ settings, cruft, overwrite, output, reference, modifylinebreaks,
replacement, options, logfile);
}
arguments:
diff --git a/support/arara/scripts/rules/knitr.yaml b/support/arara/scripts/rules/knitr.yaml
new file mode 100644
index 0000000000..da17289db2
--- /dev/null
+++ b/support/arara/scripts/rules/knitr.yaml
@@ -0,0 +1,58 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: knitr
+name: knitr
+authors:
+- Adam Liter
+- Island of TeX
+commands:
+- name: knitr
+ command: >
+ @{
+ elements = [];
+ if (!isEmpty(tangle)) elements.add('tangle = ' + tangle);
+ if (!isEmpty(quiet)) elements.add('quiet = ' + quiet);
+ elements.add('envir = ' + envir);
+ elements.add('encoding = ' + encoding);
+ return getCommand('Rscript', '-e',
+ 'library(knitr); knit("' + file + '", ' +
+ 'output = ' + isEmpty(output, 'NULL', '"' + output + '"') + ', ' +
+ String.join(', ', elements) + ')');
+ }
+arguments:
+- identifier: output
+ flag: >
+ @{
+ return parameters.output;
+ }
+- identifier: tangle
+ flag: >
+ @{
+ if(isTrue(parameters.tangle) && !parameters.containsKey('output')) {
+ throwError('If you want to tangle the document, specify an output file.');
+ }
+ else {
+ isTrue(parameters.tangle, 'TRUE', 'FALSE')
+ }
+ }
+- identifier: quiet
+ flag: >
+ @{
+ isTrue(parameters.quiet, 'TRUE', 'FALSE')
+ }
+- identifier: envir
+ flag: >
+ @{
+ return parameters.envir;
+ }
+ default: 'parent.frame()'
+- identifier: encoding
+ flag: >
+ @{
+ return parameters.encoding;
+ }
+ default: 'getOption("encoding")'
diff --git a/support/arara/scripts/rules/latex.yaml b/support/arara/scripts/rules/latex.yaml
index f1b9add4b3..b79c051c1d 100644
--- a/support/arara/scripts/rules/latex.yaml
+++ b/support/arara/scripts/rules/latex.yaml
@@ -1,22 +1,32 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: latex
name: LaTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: LaTeX engine
command: >
@{
- return getCommand('latex', interaction, draft, shell,
- synctex, options, file);
+ return getCommand(branch, interaction, draft, shell,
+ synctex, options, reference);
}
arguments:
+- identifier: branch
+ flag: >
+ @{
+ engines = [ 'stable' : 'latex', 'developer' : 'latex-dev' ];
+ if (engines.keySet().contains(parameters.branch)) {
+ return engines.get(parameters.branch);
+ } else {
+ throwError('The valid branch values are: ' + engines.keySet());
+ }
+ }
+ default: 'latex'
- identifier: interaction
flag: >
@{
diff --git a/support/arara/scripts/rules/latexmk.yaml b/support/arara/scripts/rules/latexmk.yaml
index 452b116a2f..61f0ff9d7b 100644
--- a/support/arara/scripts/rules/latexmk.yaml
+++ b/support/arara/scripts/rules/latexmk.yaml
@@ -1,15 +1,13 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: latexmk
name: LaTeXmk
authors:
-- Marco Daniel
-- Brent Longborough
-- Paulo Cereda
+- Island of TeX
commands:
- name: Tool LaTeXmk
command: >
@@ -19,7 +17,7 @@ commands:
}
else {
return getCommand('latexmk', isEmpty(program, engine,
- program), options, file);
+ program), options, reference);
}
}
arguments:
diff --git a/support/arara/scripts/rules/luahbtex.yaml b/support/arara/scripts/rules/luahbtex.yaml
new file mode 100644
index 0000000000..3f851fad9e
--- /dev/null
+++ b/support/arara/scripts/rules/luahbtex.yaml
@@ -0,0 +1,54 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: luahbtex
+name: LuaHBTeX
+authors:
+- Island of TeX
+commands:
+- name: LuaHBTeX engine
+ command: >
+ @{
+ return getCommand('luahbtex', interaction, draft, shell,
+ synctex, options, reference);
+ }
+arguments:
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode', 'scrollmode',
+ 'errorstopmode' ].contains(parameters.interaction)) {
+ return '--interaction='.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: shell
+ flag: >
+ @{
+ isTrue(parameters.shell, '--shell-escape', '--no-shell-escape')
+ }
+- identifier: synctex
+ flag: >
+ @{
+ isTrue(parameters.synctex, '--synctex=1', '--synctex=0')
+ }
+- identifier: draft
+ flag: >
+ @{
+ isTrue(parameters.draft, '--draftmode')
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/lualatex.yaml b/support/arara/scripts/rules/lualatex.yaml
index 4c4628d248..d9870976d1 100644
--- a/support/arara/scripts/rules/lualatex.yaml
+++ b/support/arara/scripts/rules/lualatex.yaml
@@ -1,22 +1,32 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: lualatex
name: LuaLaTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: LuaLaTeX engine
command: >
@{
- return getCommand('lualatex', interaction, draft, shell,
- synctex, options, file);
+ return getCommand(branch, interaction, draft, shell,
+ synctex, options, reference);
}
arguments:
+- identifier: branch
+ flag: >
+ @{
+ engines = [ 'stable' : 'lualatex', 'developer' : 'lualatex-dev' ];
+ if (engines.keySet().contains(parameters.branch)) {
+ return engines.get(parameters.branch);
+ } else {
+ throwError('The valid branch values are: ' + engines.keySet());
+ }
+ }
+ default: 'lualatex'
- identifier: interaction
flag: >
@{
diff --git a/support/arara/scripts/rules/luatex.yaml b/support/arara/scripts/rules/luatex.yaml
index 78840f6d96..86c7556993 100644
--- a/support/arara/scripts/rules/luatex.yaml
+++ b/support/arara/scripts/rules/luatex.yaml
@@ -1,20 +1,19 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: luatex
name: LuaTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: LuaTeX engine
command: >
@{
return getCommand('luatex', interaction, draft, shell,
- synctex, options, file);
+ synctex, options, reference);
}
arguments:
- identifier: interaction
diff --git a/support/arara/scripts/rules/make.yaml b/support/arara/scripts/rules/make.yaml
index 07e619aa2d..0298ae95be 100644
--- a/support/arara/scripts/rules/make.yaml
+++ b/support/arara/scripts/rules/make.yaml
@@ -1,14 +1,13 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: make
name: Make
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The Make program
command: >
diff --git a/support/arara/scripts/rules/makeglossaries.yaml b/support/arara/scripts/rules/makeglossaries.yaml
index 562af6d149..34c1c07002 100644
--- a/support/arara/scripts/rules/makeglossaries.yaml
+++ b/support/arara/scripts/rules/makeglossaries.yaml
@@ -1,22 +1,20 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: makeglossaries
name: MakeGlossaries
authors:
-- Marco Daniel
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: The MakeGlossaries software
command: >
@{
if (isEmpty(clean))
{
- return getCommand('makeglossaries', options, getBasename(file));
+ return getCommand('makeglossaries', options, getBasename(reference));
}
else {
prefix = [];
@@ -27,7 +25,7 @@ commands:
prefix = [ 'cmd', '/c', 'del' ];
}
- base = getBasename(file);
+ base = getBasename(reference);
removals = [];
removals.add(getCommand(prefix, base.concat(".glsdefs")));
diff --git a/support/arara/scripts/rules/makeglossarieslite.yaml b/support/arara/scripts/rules/makeglossarieslite.yaml
index fc48090c66..d716e97b4a 100644
--- a/support/arara/scripts/rules/makeglossarieslite.yaml
+++ b/support/arara/scripts/rules/makeglossarieslite.yaml
@@ -1,20 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: makeglossarieslite
name: MakeGlossariesLite
authors:
-- Marco Daniel
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: The MakeGlossariesLite software
command: >
@{
- return getCommand('makeglossaries-lite', options, getBasename(file));
+ return getCommand('makeglossaries-lite', options, getBasename(reference));
}
arguments:
- identifier: options
diff --git a/support/arara/scripts/rules/makeindex.yaml b/support/arara/scripts/rules/makeindex.yaml
index 83f7e286d0..795075bce2 100644
--- a/support/arara/scripts/rules/makeindex.yaml
+++ b/support/arara/scripts/rules/makeindex.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: makeindex
name: MakeIndex
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The MakeIndex software
command: >
@{
- base = getBasename(file);
+ base = getBasename(reference);
infile = base.concat('.').concat(input);
outfile = [ '-o', base.concat('.').concat(output) ];
logfile = [ '-t', base.concat('.').concat(log) ];
diff --git a/support/arara/scripts/rules/metapost.yaml b/support/arara/scripts/rules/metapost.yaml
new file mode 100644
index 0000000000..390d08a140
--- /dev/null
+++ b/support/arara/scripts/rules/metapost.yaml
@@ -0,0 +1,50 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: metapost
+name: Metapost
+authors:
+- Island of TeX
+commands:
+- name: Metapost
+ command: >
+ @{
+ return getCommand('mpost', interaction, numbersystem,
+ options, file);
+ }
+arguments:
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode', 'scrollmode',
+ 'errorstopmode' ].contains(parameters.interaction)) {
+ return '-interaction='.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: numbersystem
+ flag: >
+ @{
+ if ([ 'scaled', 'double', 'binary',
+ 'decimal' ].contains(parameters.numbersystem)) {
+ return '-numbersystem='.concat(parameters.numbersystem);
+ }
+ else {
+ throwError('The provided numbersystem value is not valid.');
+ }
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/nomencl.yaml b/support/arara/scripts/rules/nomencl.yaml
index 2a563b6266..a2c3acf468 100644
--- a/support/arara/scripts/rules/nomencl.yaml
+++ b/support/arara/scripts/rules/nomencl.yaml
@@ -1,21 +1,19 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: nomencl
name: Nomencl
authors:
-- Marco Daniel
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: The Nomenclature software
command: >
@{
- nlo = getBasename(file).concat('.nlo');
- nls = getBasename(file).concat('.nls');
+ nlo = getBasename(reference).concat('.nlo');
+ nls = getBasename(reference).concat('.nls');
return getCommand('makeindex', options, nlo, style, '-o', nls);
}
arguments:
diff --git a/support/arara/scripts/rules/pbibtex.yaml b/support/arara/scripts/rules/pbibtex.yaml
new file mode 100644
index 0000000000..9b39451d4d
--- /dev/null
+++ b/support/arara/scripts/rules/pbibtex.yaml
@@ -0,0 +1,27 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: pbibtex
+name: pBibTeX
+authors:
+- Island of TeX
+commands:
+- name: The pBibTeX reference management software
+ command: >
+ @{
+ return getCommand('pbibtex', options, getBasename(reference))
+ }
+arguments:
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/pdfcsplain.yaml b/support/arara/scripts/rules/pdfcsplain.yaml
index db9bbdbec5..6dc6d287f4 100644
--- a/support/arara/scripts/rules/pdfcsplain.yaml
+++ b/support/arara/scripts/rules/pdfcsplain.yaml
@@ -1,19 +1,19 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: pdfcsplain
name: PDFCSplain
authors:
-- Paulo Cereda
+- Island of TeX
commands:
- name: PDFCSplain engine
command: >
@{
return getCommand('pdfcsplain', interaction, draft, shell,
- synctex, options, file);
+ synctex, options, reference);
}
arguments:
- identifier: interaction
diff --git a/support/arara/scripts/rules/pdflatex.yaml b/support/arara/scripts/rules/pdflatex.yaml
index 61b9b8d356..3df1135dfa 100644
--- a/support/arara/scripts/rules/pdflatex.yaml
+++ b/support/arara/scripts/rules/pdflatex.yaml
@@ -1,22 +1,32 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: pdflatex
name: PDFLaTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: PDFLaTeX engine
command: >
@{
- return getCommand('pdflatex', interaction, draft, shell,
- synctex, options, file);
+ return getCommand(branch, interaction, draft, shell,
+ synctex, options, reference);
}
arguments:
+- identifier: branch
+ flag: >
+ @{
+ engines = [ 'stable' : 'pdflatex', 'developer' : 'pdflatex-dev' ];
+ if (engines.keySet().contains(parameters.branch)) {
+ return engines.get(parameters.branch);
+ } else {
+ throwError('The valid branch values are: ' + engines.keySet());
+ }
+ }
+ default: 'pdflatex'
- identifier: interaction
flag: >
@{
diff --git a/support/arara/scripts/rules/pdftex.yaml b/support/arara/scripts/rules/pdftex.yaml
index 2e3126bbfd..8b10bc02f5 100644
--- a/support/arara/scripts/rules/pdftex.yaml
+++ b/support/arara/scripts/rules/pdftex.yaml
@@ -1,20 +1,19 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: pdftex
name: PDFTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: PDFTeX engine
command: >
@{
return getCommand('pdftex', interaction, draft, shell,
- synctex, options, file);
+ synctex, options, reference);
}
arguments:
- identifier: interaction
diff --git a/support/arara/scripts/rules/pdftk.yaml b/support/arara/scripts/rules/pdftk.yaml
index 9bd3f46060..67e81f0bd4 100644
--- a/support/arara/scripts/rules/pdftk.yaml
+++ b/support/arara/scripts/rules/pdftk.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: pdftk
name: PDFtk
authors:
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: PDFtk
command: >
@{
- input = getBasename(file).concat('.pdf');
+ input = getBasename(reference).concat('.pdf');
return getCommand('pdftk', input, options);
}
arguments:
diff --git a/support/arara/scripts/rules/platex.yaml b/support/arara/scripts/rules/platex.yaml
new file mode 100644
index 0000000000..3a59268753
--- /dev/null
+++ b/support/arara/scripts/rules/platex.yaml
@@ -0,0 +1,60 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: platex
+name: pLaTeX
+authors:
+- Island of TeX
+commands:
+- name: pLaTeX engine
+ command: >
+ @{
+ return getCommand(branch, interaction, shell,
+ synctex, options, reference);
+ }
+arguments:
+- identifier: branch
+ flag: >
+ @{
+ engines = [ 'stable' : 'platex', 'developer' : 'platex-dev' ];
+ if (engines.keySet().contains(parameters.branch)) {
+ return engines.get(parameters.branch);
+ } else {
+ throwError('The valid branch values are: ' + engines.keySet());
+ }
+ }
+ default: 'platex'
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode', 'scrollmode',
+ 'errorstopmode' ].contains(parameters.interaction)) {
+ return '--interaction='.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: shell
+ flag: >
+ @{
+ isTrue(parameters.shell, '--shell-escape', '--no-shell-escape')
+ }
+- identifier: synctex
+ flag: >
+ @{
+ isTrue(parameters.synctex, '--synctex=1', '--synctex=0')
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/ps2pdf.yaml b/support/arara/scripts/rules/ps2pdf.yaml
index 656f7e22c3..fe5684d1c2 100644
--- a/support/arara/scripts/rules/ps2pdf.yaml
+++ b/support/arara/scripts/rules/ps2pdf.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: ps2pdf
name: PS2PDF
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The PS2PDF program
command: >
@{
- infile = getBasename(file).concat('.ps');
+ infile = getBasename(reference).concat('.ps');
outfile = getBasename(output).concat('.pdf');
return getCommand('ps2pdf', options, infile, outfile);
}
@@ -25,7 +24,7 @@ arguments:
}
default: >
@{
- file
+ reference
}
- identifier: options
flag: >
diff --git a/support/arara/scripts/rules/ptex.yaml b/support/arara/scripts/rules/ptex.yaml
new file mode 100644
index 0000000000..3771981e7f
--- /dev/null
+++ b/support/arara/scripts/rules/ptex.yaml
@@ -0,0 +1,49 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: ptex
+name: pTeX
+authors:
+- Island of TeX
+commands:
+- name: pTeX engine
+ command: >
+ @{
+ return getCommand('ptex', interaction, shell,
+ synctex, options, reference);
+ }
+arguments:
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode', 'scrollmode',
+ 'errorstopmode' ].contains(parameters.interaction)) {
+ return '--interaction='.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: shell
+ flag: >
+ @{
+ isTrue(parameters.shell, '--shell-escape', '--no-shell-escape')
+ }
+- identifier: synctex
+ flag: >
+ @{
+ isTrue(parameters.synctex, '--synctex=1', '--synctex=0')
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/sketch.yaml b/support/arara/scripts/rules/sketch.yaml
index a170aa20f2..ca3d22834a 100644
--- a/support/arara/scripts/rules/sketch.yaml
+++ b/support/arara/scripts/rules/sketch.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -8,13 +8,13 @@ identifier: sketch
name: Sketch
authors:
- Sergey Ulyanov
-- Paulo Cereda
+- Island of TeX
commands:
- name: The Sketch software
command: >
@{
- output = getBasename(file).concat('.tex');
- return getCommand('sketch', options, file, '-o', output);
+ output = getBasename(reference).concat('.tex');
+ return getCommand('sketch', options, reference, '-o', output);
}
arguments:
- identifier: options
diff --git a/support/arara/scripts/rules/songidx.yaml b/support/arara/scripts/rules/songidx.yaml
index 818c4333a7..ff4a27e6b8 100644
--- a/support/arara/scripts/rules/songidx.yaml
+++ b/support/arara/scripts/rules/songidx.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -8,7 +8,7 @@ identifier: songidx
name: SongIDX
authors:
- Francesco Endrici
-- Paulo Cereda
+- Island of TeX
commands:
- name: The SongIDX Lua script
command: >
diff --git a/support/arara/scripts/rules/tex.yaml b/support/arara/scripts/rules/tex.yaml
index c0321b34dc..701d200096 100644
--- a/support/arara/scripts/rules/tex.yaml
+++ b/support/arara/scripts/rules/tex.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: tex
name: TeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: TeX engine
command: >
@{
- return getCommand('tex', interaction, shell, options, file);
+ return getCommand('tex', interaction, shell, options, reference);
}
arguments:
- identifier: interaction
diff --git a/support/arara/scripts/rules/texindy.yaml b/support/arara/scripts/rules/texindy.yaml
index d527e0292d..54b468d42a 100644
--- a/support/arara/scripts/rules/texindy.yaml
+++ b/support/arara/scripts/rules/texindy.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: texindy
name: TeXindy
authors:
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: The TeXindy software
command: >
@{
- base = getBasename(file);
+ base = getBasename(reference);
infile = base.concat('.').concat(input);
outfile = [ '-o', base.concat('.').concat(output) ];
logfile = [ '-t', base.concat('.').concat(log) ];
diff --git a/support/arara/scripts/rules/tikzmake.yaml b/support/arara/scripts/rules/tikzmake.yaml
index e6cb809a54..97942aaa3b 100644
--- a/support/arara/scripts/rules/tikzmake.yaml
+++ b/support/arara/scripts/rules/tikzmake.yaml
@@ -1,6 +1,6 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
@@ -8,12 +8,12 @@ identifier: tikzmake
name: TikZmake
authors:
- Robbie Smith
-- Paulo Cereda
+- Island of TeX
commands:
- name: TikZ list-and-make engine
command: >
@{
- makefile = getBasename(file).concat('.makefile');
+ makefile = getBasename(reference).concat('.makefile');
return getCommand('make', force, jobs, options, '-f', makefile);
}
arguments:
diff --git a/support/arara/scripts/rules/upbibtex.yaml b/support/arara/scripts/rules/upbibtex.yaml
new file mode 100644
index 0000000000..eb0f5fba9d
--- /dev/null
+++ b/support/arara/scripts/rules/upbibtex.yaml
@@ -0,0 +1,27 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: upbibtex
+name: upBibTeX
+authors:
+- Island of TeX
+commands:
+- name: The upBibTeX reference management software
+ command: >
+ @{
+ return getCommand('upbibtex', options, getBasename(reference))
+ }
+arguments:
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/uplatex.yaml b/support/arara/scripts/rules/uplatex.yaml
new file mode 100644
index 0000000000..0fd1d575f9
--- /dev/null
+++ b/support/arara/scripts/rules/uplatex.yaml
@@ -0,0 +1,60 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: uplatex
+name: upLaTeX
+authors:
+- Island of TeX
+commands:
+- name: upLaTeX engine
+ command: >
+ @{
+ return getCommand(branch, interaction, shell,
+ synctex, options, reference);
+ }
+arguments:
+- identifier: branch
+ flag: >
+ @{
+ engines = [ 'stable' : 'uplatex', 'developer' : 'uplatex-dev' ];
+ if (engines.keySet().contains(parameters.branch)) {
+ return engines.get(parameters.branch);
+ } else {
+ throwError('The valid branch values are: ' + engines.keySet());
+ }
+ }
+ default: 'uplatex'
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode', 'scrollmode',
+ 'errorstopmode' ].contains(parameters.interaction)) {
+ return '--interaction='.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: shell
+ flag: >
+ @{
+ isTrue(parameters.shell, '--shell-escape', '--no-shell-escape')
+ }
+- identifier: synctex
+ flag: >
+ @{
+ isTrue(parameters.synctex, '--synctex=1', '--synctex=0')
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/uptex.yaml b/support/arara/scripts/rules/uptex.yaml
new file mode 100644
index 0000000000..b2c9c90fe7
--- /dev/null
+++ b/support/arara/scripts/rules/uptex.yaml
@@ -0,0 +1,49 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: uptex
+name: upTeX
+authors:
+- Island of TeX
+commands:
+- name: upTeX engine
+ command: >
+ @{
+ return getCommand('uptex', interaction, shell,
+ synctex, options, reference);
+ }
+arguments:
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode', 'scrollmode',
+ 'errorstopmode' ].contains(parameters.interaction)) {
+ return '--interaction='.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: shell
+ flag: >
+ @{
+ isTrue(parameters.shell, '--shell-escape', '--no-shell-escape')
+ }
+- identifier: synctex
+ flag: >
+ @{
+ isTrue(parameters.synctex, '--synctex=1', '--synctex=0')
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ }
+ else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/velocity.yaml b/support/arara/scripts/rules/velocity.yaml
deleted file mode 100644
index 0fd62a9465..0000000000
--- a/support/arara/scripts/rules/velocity.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-!config
-# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
-# All rights reserved.
-#
-# This rule is part of arara.
-identifier: velocity
-name: Velocity
-authors:
-- Paulo Cereda
-commands:
-- name: The Velocity engine
- command: >
- @{
- mergeVelocityTemplate(isEmpty(input, reference, toFile(input)),
- toFile(output), context);
- return true;
- }
-arguments:
-- identifier: context
- flag: >
- @{
- if (isMap(parameters.context)) {
- return parameters.context;
- }
- else {
- throwError('I was expecting a context map.');
- }
- }
- required: true
-- identifier: output
- flag: >
- @{
- return parameters.output;
- }
- required: true
-- identifier: input
- flag: >
- @{
- return parameters.input;
- }
diff --git a/support/arara/scripts/rules/xdvipdfmx.yaml b/support/arara/scripts/rules/xdvipdfmx.yaml
index b9433f8a93..bf67572fc3 100644
--- a/support/arara/scripts/rules/xdvipdfmx.yaml
+++ b/support/arara/scripts/rules/xdvipdfmx.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: xdvipdfmx
name: XDVIPDFMX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: The XDVIPDFMX program
command: >
@{
- infile = getBasename(file).concat('.dvi');
+ infile = getBasename(reference).concat('.dvi');
outfile = getBasename(output).concat('.pdf');
return getCommand('xdvipdfmx', infile, '-o', outfile, options);
}
@@ -25,7 +24,7 @@ arguments:
}
default: >
@{
- file
+ reference
}
- identifier: options
flag: >
diff --git a/support/arara/scripts/rules/xelatex.yaml b/support/arara/scripts/rules/xelatex.yaml
index e248ae2fe8..ef1e1a8f0a 100644
--- a/support/arara/scripts/rules/xelatex.yaml
+++ b/support/arara/scripts/rules/xelatex.yaml
@@ -1,22 +1,32 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: xelatex
name: XeLaTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: XeLaTeX engine
command: >
@{
- return getCommand('xelatex', interaction, shell,
- synctex, options, file);
+ return getCommand(branch, interaction, shell,
+ synctex, options, reference);
}
arguments:
+- identifier: branch
+ flag: >
+ @{
+ engines = [ 'stable' : 'xelatex', 'developer' : 'xelatex-dev' ];
+ if (engines.keySet().contains(parameters.branch)) {
+ return engines.get(parameters.branch);
+ } else {
+ throwError('The valid branch values are: ' + engines.keySet());
+ }
+ }
+ default: 'xelatex'
- identifier: interaction
flag: >
@{
diff --git a/support/arara/scripts/rules/xetex.yaml b/support/arara/scripts/rules/xetex.yaml
index 2a9369e0e8..0d13768a28 100644
--- a/support/arara/scripts/rules/xetex.yaml
+++ b/support/arara/scripts/rules/xetex.yaml
@@ -1,20 +1,19 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: xetex
name: XeTeX
authors:
-- Marco Daniel
-- Paulo Cereda
+- Island of TeX
commands:
- name: XeTeX engine
command: >
@{
return getCommand('xetex', interaction, shell,
- synctex, options, file);
+ synctex, options, reference);
}
arguments:
- identifier: interaction
diff --git a/support/arara/scripts/rules/xindex.yaml b/support/arara/scripts/rules/xindex.yaml
new file mode 100644
index 0000000000..8ec73cf068
--- /dev/null
+++ b/support/arara/scripts/rules/xindex.yaml
@@ -0,0 +1,49 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: xindex
+name: xindex
+authors:
+- Island of TeX
+commands:
+- name: The xindex software
+ command: >
+ @{
+ return getCommand('xindex', config, language, options, input);
+ }
+arguments:
+- identifier: input
+ flag: >
+ @{
+ return parameters.input;
+ }
+- identifier: config
+ flag: >
+ @{
+ return [ '-c', parameters.config ];
+ }
+ default: >
+ @{
+ return [ '-c', 'cfg' ];
+ }
+- identifier: language
+ flag: >
+ @{
+ return [ '-l', parameters.language ];
+ }
+ default: >
+ @{
+ return [ '-l', 'en' ];
+ }
+- identifier: options
+ flag: >
+ @{
+ if (isList(parameters.options)) {
+ return parameters.options;
+ } else {
+ throwError('I was expecting a list of options.');
+ }
+ }
diff --git a/support/arara/scripts/rules/xindy.yaml b/support/arara/scripts/rules/xindy.yaml
index 6daf807cc8..2efc37daf5 100644
--- a/support/arara/scripts/rules/xindy.yaml
+++ b/support/arara/scripts/rules/xindy.yaml
@@ -1,19 +1,18 @@
!config
# Arara, the cool TeX automation tool
-# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# Copyright (c) 2020, Island of TeX
# All rights reserved.
#
# This rule is part of arara.
identifier: xindy
name: Xindy
authors:
-- Nicola Talbot
-- Paulo Cereda
+- Island of TeX
commands:
- name: The Xindy software
command: >
@{
- base = getBasename(file);
+ base = getBasename(reference);
infile = base.concat('.').concat(input);
outfile = [ '-o', base.concat('.').concat(output) ];
logfile = [ '-t', base.concat('.').concat(log) ];
diff --git a/support/arara/source/build.gradle.kts b/support/arara/source/build.gradle.kts
new file mode 100644
index 0000000000..3d5601227c
--- /dev/null
+++ b/support/arara/source/build.gradle.kts
@@ -0,0 +1,255 @@
+// SPDX-License-Identifier: BSD-3-Clause
+
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+import org.gradle.api.internal.project.ProjectInternal
+import org.gradle.api.java.archives.internal.DefaultManifest
+import org.gradle.api.tasks.testing.logging.TestExceptionFormat
+import org.gradle.api.tasks.testing.logging.TestLogEvent
+import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+ application
+ `maven-publish`
+ kotlin("jvm")
+ id("org.jetbrains.kotlin.plugin.serialization")
+ id("com.github.johnrengelman.shadow")
+ id("org.jetbrains.dokka")
+ id("com.diffplug.gradle.spotless")
+ jacoco
+}
+
+val kotlinVersion = project.getKotlinPluginVersion()
+dependencies {
+ implementation(kotlin("stdlib", kotlinVersion))
+ implementation(kotlin("reflect", kotlinVersion))
+ implementation("com.uchuhimo:konf-core:0.22.1")
+ implementation("com.github.ajalt:clikt:2.4.0")
+ implementation("ch.qos.cal10n:cal10n-api:0.8.1")
+ implementation("ch.qos.logback:logback-classic:1.2.3")
+ implementation("ch.qos.logback:logback-core:1.2.3")
+ implementation("org.mvel:mvel2:2.4.5.Final")
+ implementation("org.slf4j:slf4j-api:1.7.30")
+ implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.2")
+ implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.10.+")
+ implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0")
+ implementation("com.charleskorn.kaml:kaml:0.15.0")
+ implementation("org.zeroturnaround:zt-exec:1.11")
+
+ testImplementation("io.kotlintest:kotlintest-runner-junit5:3.4.2")
+}
+
+status = "development"
+val projectName = project.name.toLowerCase()
+val moduleName = group
+val mainClass = "$moduleName.Arara"
+
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = sourceCompatibility
+}
+
+sourceSets {
+ main {
+ java { setSrcDirs(listOf("src/main/java", "src/main/kotlin")) }
+ resources { setSrcDirs(listOf("src/main/resources")) }
+ }
+ test {
+ java { setSrcDirs(listOf("src/test/kotlin")) }
+ resources { setSrcDirs(listOf("src/test/resources")) }
+ }
+}
+
+application {
+ applicationName = project.name
+ mainClassName = mainClass
+}
+
+spotless {
+ java {
+ removeUnusedImports()
+ licenseHeader("// SPDX-License-Identifier: BSD-3-Clause")
+ trimTrailingWhitespace()
+ endWithNewline()
+ }
+ kotlin {
+ ktlint()
+ licenseHeader("// SPDX-License-Identifier: BSD-3-Clause")
+ trimTrailingWhitespace()
+ endWithNewline()
+ }
+}
+
+val mainManifest: Manifest = DefaultManifest((project as ProjectInternal).fileResolver)
+ .apply {
+ attributes["Implementation-Title"] = project.name
+ attributes["Implementation-Version"] = version
+ attributes["Main-Class"] = mainClass
+ if (java.sourceCompatibility < JavaVersion.VERSION_1_9) {
+ attributes["Automatic-Module-Name"] = moduleName
+ }
+ }
+
+tasks {
+ register<Jar>("dokkaJar") {
+ group = JavaBasePlugin.DOCUMENTATION_GROUP
+ description = "Create JAR with dokka documentation"
+ archiveClassifier.set("dokka")
+ from(dokka)
+ }
+ register<Jar>("sourcesJar") {
+ group = JavaBasePlugin.DOCUMENTATION_GROUP
+ description = "Assembles sources JAR"
+ archiveClassifier.set("sources")
+ from(sourceSets["main"].allSource)
+ }
+
+ named<JavaCompile>("compileJava") {
+ if (java.sourceCompatibility > JavaVersion.VERSION_1_8) {
+ inputs.property("moduleName", moduleName)
+ options.compilerArgs = listOf(
+ // include Gradle dependencies as modules
+ "--module-path", sourceSets["main"].compileClasspath.asPath)
+ }
+ }
+ withType<KotlinCompile> {
+ kotlinOptions {
+ freeCompilerArgs = listOf("-Xuse-experimental=kotlin.Experimental,kotlinx.serialization.ImplicitReflectionSerializer")
+ jvmTarget = "1.8"
+ }
+ }
+
+ withType<Jar> {
+ archiveBaseName.set("arara")
+ manifest.attributes.putAll(mainManifest.attributes)
+ }
+ named<ShadowJar>("shadowJar") {
+ manifest.attributes.putAll(mainManifest.attributes)
+ archiveAppendix.set("with-deps")
+ archiveClassifier.set("")
+ }
+ named<JavaExec>("run") {
+ if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
+ doFirst {
+ jvmArgs = listOf(
+ "--module-path", classpath.asPath
+ )
+ }
+ }
+ }
+
+ withType<Test> {
+ useJUnitPlatform()
+
+ testLogging {
+ exceptionFormat = TestExceptionFormat.FULL
+ events(TestLogEvent.STANDARD_OUT, TestLogEvent.STANDARD_ERROR,
+ TestLogEvent.SKIPPED, TestLogEvent.PASSED, TestLogEvent.FAILED)
+ }
+ }
+}
+tasks.named<Task>("assembleDist").configure {
+ dependsOn("shadowJar", "jacocoTestReport")
+}
+
+publishing {
+ publications {
+ create<MavenPublication>("GitLab") {
+ groupId = project.group.toString()
+ artifactId = "arara"
+ version = project.version.toString()
+
+ pom {
+ name.set("arara")
+ description.set("arara is a TeX automation tool based on " +
+ "rules and directives. It gives you a way to enhance " +
+ "your TeX experience.")
+ inceptionYear.set("2012")
+ url.set("https://gitlab.com/islandoftex/arara")
+ organization {
+ name.set("Island of TeX")
+ url.set("https://gitlab.com/islandoftex")
+ }
+ licenses {
+ license {
+ name.set("New BSD License")
+ url.set("http://www.opensource.org/licenses/bsd-license.php")
+ distribution.set("repo")
+ }
+ }
+ developers {
+ developer {
+ name.set("Paulo Roberto Massa Cereda")
+ email.set("cereda@users.sf.net")
+ id.set("cereda")
+ url.set("https://tex.stackexchange.com/users/3094")
+ roles.set(listOf("Lead developer", "Creator", "Duck enthusiast"))
+ }
+ developer {
+ name.set("Ben Frank")
+ id.set("benfrank")
+ url.set("https://gitlab.com/benfrank")
+ roles.set(listOf("Release coordinator v5"))
+ }
+ developer {
+ name.set("Marco Daniel")
+ email.set("marco.daniel@mada-nada.de")
+ id.set("marcodaniel")
+ url.set("https://tex.stackexchange.com/users/5239")
+ roles.set(listOf("Contributor", "Tester", "Fast driver"))
+ }
+ developer {
+ name.set("Brent Longborough")
+ email.set("brent@longborough.org")
+ id.set("brent")
+ url.set("https://tex.stackexchange.com/users/344")
+ roles.set(listOf("Developer", "Contributor", "Tester",
+ "Haskell fanatic"))
+ }
+ developer {
+ name.set("Nicola Talbot")
+ email.set("nicola.lc.talbot@gmail.com")
+ id.set("nlct")
+ url.set("https://tex.stackexchange.com/users/19862")
+ roles.set(listOf("Developer", "Contributor", "Tester",
+ "Hat enthusiast"))
+ }
+ }
+ scm {
+ connection.set("scm:git:https://gitlab.com/islandoftex/arara.git")
+ developerConnection.set("scm:git:https://gitlab.com/islandoftex/arara.git")
+ url.set("https://gitlab.com/islandoftex/arara")
+ }
+ ciManagement {
+ system.set("GitLab")
+ url.set("https://gitlab.com/islandoftex/arara/pipelines")
+ }
+ issueManagement {
+ system.set("GitLab")
+ url.set("https://gitlab.com/islandoftex/arara/issues")
+ }
+ }
+
+ from(components["java"])
+ artifact(tasks["sourcesJar"])
+ artifact(tasks["dokkaJar"])
+ }
+ }
+
+ repositories {
+ maven {
+ url = uri("https://gitlab.com/api/v4/projects/14349047/packages/maven")
+ credentials(HttpHeaderCredentials::class) {
+ if (project.hasProperty("jobToken")) {
+ name = "Job-Token"
+ value = project.property("jobToken").toString()
+ } else {
+ logger.warn("Will be unable to publish (jobToken missing)")
+ }
+ }
+ authentication {
+ create<HttpHeaderAuthentication>("header")
+ }
+ }
+ }
+}
diff --git a/support/arara/source/pom.java5.xml b/support/arara/source/pom.java5.xml
deleted file mode 100644
index bce2b7a995..0000000000
--- a/support/arara/source/pom.java5.xml
+++ /dev/null
@@ -1,336 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- - Arara, the cool TeX automation tool
- - Copyright (c) 2012, Paulo Roberto Massa Cereda
- - 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.
- -
- - 3. Neither the name of the project's author nor the names of its
- - contributors may be used to endorse or promote products derived from
- - this software without specific prior written permission.
- -
- - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- - "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.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.github.cereda</groupId>
- <artifactId>arara</artifactId>
- <version>4.0</version>
- <packaging>jar</packaging>
-
- <name>arara</name>
- <url>https://github.com/cereda/arara</url>
- <description>Arara is a TeX automation tool based on rules and directives.</description>
- <inceptionYear>2012</inceptionYear>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <maven.compiler.source>1.5</maven.compiler.source>
- <maven.compiler.target>1.5</maven.compiler.target>
- </properties>
-
- <issueManagement>
- <system>GitHub</system>
- <url>https://github.com/cereda/arara/issues</url>
- </issueManagement>
-
- <licenses>
- <license>
- <name>New BSD License</name>
- <url>http://www.opensource.org/licenses/bsd-license.php</url>
- <distribution>repo</distribution>
- <comments>New BSD License</comments>
- </license>
- </licenses>
-
- <scm>
- <connection>scm:git:https://github.com/cereda/arara.git</connection>
- <developerConnection>scm:git:https://github.com/cereda/arara.git</developerConnection>
- <url>https://github.com/cereda/arara</url>
- </scm>
-
- <developers>
-
- <developer>
- <name>Paulo Roberto Massa Cereda</name>
- <email>cereda@users.sf.net</email>
- <id>cereda</id>
- <url>http://tex.stackexchange.com/users/3094</url>
- <roles>
- <role>Lead developer</role>
- <role>Creator</role>
- <role>Duck enthusiast</role>
- </roles>
- </developer>
-
- <developer>
- <name>Marco Daniel</name>
- <email>marco.daniel@mada-nada.de</email>
- <id>marcodaniel</id>
- <url>http://tex.stackexchange.com/users/5239</url>
- <roles>
- <role>Contributor</role>
- <role>Tester</role>
- <role>Fast driver</role>
- </roles>
- </developer>
-
- <developer>
- <name>Brent Longborough</name>
- <email>brent@longborough.org</email>
- <id>brent</id>
- <url>http://tex.stackexchange.com/users/344</url>
- <roles>
- <role>Developer</role>
- <role>Contributor</role>
- <role>Tester</role>
- <role>Haskell fanatic</role>
- </roles>
- </developer>
-
- <developer>
- <name>Nicola Talbot</name>
- <email>nicola.lc.talbot@gmail.com</email>
- <id>nlct</id>
- <url>http://tex.stackexchange.com/users/19862</url>
- <roles>
- <role>Developer</role>
- <role>Contributor</role>
- <role>Tester</role>
- <role>Hat enthusiast</role>
- </roles>
- </developer>
-
- </developers>
-
- <build>
-
- <finalName>arara-${project.version}</finalName>
-
- <plugins>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.5.1</version>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- <compilerArgument>-Xlint:unchecked</compilerArgument>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.6</version>
- <configuration>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- <archive>
- <manifest>
- <mainClass>com.github.cereda.arara.Arara</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <version>2.10.4</version>
- <configuration>
- <show>public</show>
- <defaultAuthor>Paulo Roberto Massa Cereda</defaultAuthor>
- <defaultSince>${project.version}</defaultSince>
- <defaultVersion>${project.version}</defaultVersion>
- <level>private</level>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.1</version>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <classpathPrefix>lib/</classpathPrefix>
- <mainClass>com.github.cereda.arara.Arara</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.10</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <includeScope>runtime</includeScope>
- <outputDirectory>${project.build.directory}/lib</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <version>3.0.0</version>
- </plugin>
-
- </plugins>
-
- </build>
-
- <dependencies>
-
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.6</version>
- </dependency>
-
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.2</version>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>com.e-movimento.tinytools</groupId>
- <artifactId>privilegedaccessor</artifactId>
- <version>1.2.2</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.simpleframework</groupId>
- <artifactId>simple-xml</artifactId>
- <version>2.7.1</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-collections4</artifactId>
- <version>4.0</version>
- </dependency>
-
- <dependency>
- <groupId>org.zeroturnaround</groupId>
- <artifactId>zt-exec</artifactId>
- <version>1.9</version>
- <exclusions>
- <exclusion>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.yaml</groupId>
- <artifactId>snakeyaml</artifactId>
- <version>1.17</version>
- </dependency>
-
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- <version>1.3.1</version>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.1.2</version>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- <version>1.1.2</version>
- </dependency>
-
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.7</version>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.cal10n</groupId>
- <artifactId>cal10n-api</artifactId>
- <version>0.8.1</version>
- </dependency>
-
- <dependency>
- <groupId>org.mvel</groupId>
- <artifactId>mvel2</artifactId>
- <version>2.2.8.Final</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity</artifactId>
- <version>1.7</version>
- <exclusions>
- <exclusion>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- </dependencies>
-
-</project>
diff --git a/support/arara/source/pom.xml b/support/arara/source/pom.xml
deleted file mode 100644
index b5f57e9e96..0000000000
--- a/support/arara/source/pom.xml
+++ /dev/null
@@ -1,336 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- - Arara, the cool TeX automation tool
- - Copyright (c) 2012, Paulo Roberto Massa Cereda
- - 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.
- -
- - 3. Neither the name of the project's author nor the names of its
- - contributors may be used to endorse or promote products derived from
- - this software without specific prior written permission.
- -
- - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- - "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.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.github.cereda</groupId>
- <artifactId>arara</artifactId>
- <version>4.0</version>
- <packaging>jar</packaging>
-
- <name>arara</name>
- <url>https://github.com/cereda/arara</url>
- <description>Arara is a TeX automation tool based on rules and directives.</description>
- <inceptionYear>2012</inceptionYear>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <maven.compiler.source>1.6</maven.compiler.source>
- <maven.compiler.target>1.6</maven.compiler.target>
- </properties>
-
- <issueManagement>
- <system>GitHub</system>
- <url>https://github.com/cereda/arara/issues</url>
- </issueManagement>
-
- <licenses>
- <license>
- <name>New BSD License</name>
- <url>http://www.opensource.org/licenses/bsd-license.php</url>
- <distribution>repo</distribution>
- <comments>New BSD License</comments>
- </license>
- </licenses>
-
- <scm>
- <connection>scm:git:https://github.com/cereda/arara.git</connection>
- <developerConnection>scm:git:https://github.com/cereda/arara.git</developerConnection>
- <url>https://github.com/cereda/arara</url>
- </scm>
-
- <developers>
-
- <developer>
- <name>Paulo Roberto Massa Cereda</name>
- <email>cereda@users.sf.net</email>
- <id>cereda</id>
- <url>http://tex.stackexchange.com/users/3094</url>
- <roles>
- <role>Lead developer</role>
- <role>Creator</role>
- <role>Duck enthusiast</role>
- </roles>
- </developer>
-
- <developer>
- <name>Marco Daniel</name>
- <email>marco.daniel@mada-nada.de</email>
- <id>marcodaniel</id>
- <url>http://tex.stackexchange.com/users/5239</url>
- <roles>
- <role>Contributor</role>
- <role>Tester</role>
- <role>Fast driver</role>
- </roles>
- </developer>
-
- <developer>
- <name>Brent Longborough</name>
- <email>brent@longborough.org</email>
- <id>brent</id>
- <url>http://tex.stackexchange.com/users/344</url>
- <roles>
- <role>Developer</role>
- <role>Contributor</role>
- <role>Tester</role>
- <role>Haskell fanatic</role>
- </roles>
- </developer>
-
- <developer>
- <name>Nicola Talbot</name>
- <email>nicola.lc.talbot@gmail.com</email>
- <id>nlct</id>
- <url>http://tex.stackexchange.com/users/19862</url>
- <roles>
- <role>Developer</role>
- <role>Contributor</role>
- <role>Tester</role>
- <role>Hat enthusiast</role>
- </roles>
- </developer>
-
- </developers>
-
- <build>
-
- <finalName>arara-${project.version}</finalName>
-
- <plugins>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.5.1</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- <compilerArgument>-Xlint:unchecked</compilerArgument>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>3.1.0</version>
- <configuration>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- <archive>
- <manifest>
- <mainClass>com.github.cereda.arara.Arara</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <version>2.10.4</version>
- <configuration>
- <show>public</show>
- <defaultAuthor>Paulo Roberto Massa Cereda</defaultAuthor>
- <defaultSince>${project.version}</defaultSince>
- <defaultVersion>${project.version}</defaultVersion>
- <level>private</level>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.1</version>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <classpathPrefix>lib/</classpathPrefix>
- <mainClass>com.github.cereda.arara.Arara</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.10</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <includeScope>runtime</includeScope>
- <outputDirectory>${project.build.directory}/lib</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <version>3.0.0</version>
- </plugin>
-
- </plugins>
-
- </build>
-
- <dependencies>
-
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.6</version>
- </dependency>
-
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.2</version>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>com.e-movimento.tinytools</groupId>
- <artifactId>privilegedaccessor</artifactId>
- <version>1.2.2</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.simpleframework</groupId>
- <artifactId>simple-xml</artifactId>
- <version>2.7.1</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-collections4</artifactId>
- <version>4.0</version>
- </dependency>
-
- <dependency>
- <groupId>org.zeroturnaround</groupId>
- <artifactId>zt-exec</artifactId>
- <version>1.9</version>
- <exclusions>
- <exclusion>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.yaml</groupId>
- <artifactId>snakeyaml</artifactId>
- <version>1.17</version>
- </dependency>
-
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- <version>1.3.1</version>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.1.2</version>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- <version>1.1.2</version>
- </dependency>
-
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.7</version>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.cal10n</groupId>
- <artifactId>cal10n-api</artifactId>
- <version>0.8.1</version>
- </dependency>
-
- <dependency>
- <groupId>org.mvel</groupId>
- <artifactId>mvel2</artifactId>
- <version>2.2.8.Final</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity</artifactId>
- <version>1.7</version>
- <exclusions>
- <exclusion>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- </dependencies>
-
-</project>
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/Arara.java b/support/arara/source/src/main/java/com/github/cereda/arara/Arara.java
deleted file mode 100644
index 36405b1b47..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/Arara.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara;
-
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.controller.LoggingController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Configuration;
-import com.github.cereda.arara.model.Directive;
-import com.github.cereda.arara.model.Extractor;
-import com.github.cereda.arara.model.Interpreter;
-import com.github.cereda.arara.model.Parser;
-import com.github.cereda.arara.model.StopWatch;
-import com.github.cereda.arara.utils.CommonUtils;
-import com.github.cereda.arara.utils.DirectiveUtils;
-import com.github.cereda.arara.utils.DisplayUtils;
-import java.util.List;
-
-/**
- * Main class. This class wraps all classes from the application model as well
- * as utilitary classes in order to provide modularity.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Arara {
-
- /**
- * Main method. This is the application entry point.
- * @param args A string array containing all command line arguments.
- */
- public static void main(String[] args) {
-
- // the first component to be initialized is the
- // language controller; note that init() actually
- // has no body at all, but it's a dirty maneuver to
- // trigger the static class startup
- LanguageController.init();
-
- // the second component to be initalized is the
- // logging controller; note init() actually disables
- // the logging, so early exceptions won't generate
- // a lot of noise in the terminal
- LoggingController.init();
-
- // print the arara logo in the terminal; I just
- // hope people use this tool in a good terminal with
- // fixed-width fonts, otherwise the logo will be messed
- DisplayUtils.printLogo();
-
- try {
-
- // first of all, let's try to load a potential
- // configuration file located at the current
- // user's home directory; if there's a bad
- // configuration file, arara will panic and
- // end the execution
- Configuration.load();
-
- // if we are here, either there was no configuration
- // file at all or we managed to load the settings; now,
- // it's time to properly parse the command line arguments;
- // this is done by creating a brand new instance of arara's
- // command line parser and providing the string array to it
- Parser parser = new Parser(args);
-
- // now let's see if we are good to go; parse() will return
- // a boolean value indicating if the provided arguments
- // allow the tool to continue (we might reach some special
- // flags as well, like --help or --version, which simply
- // do their jobs and return false, since there's no point
- // of continuing processing with such flags)
- if (parser.parse()) {
-
- // let's print the current file information; it is a
- // basic display, just the file name, the size properly
- // formatted as a human readable format, and the last
- // modification date; also, in this point, the logging
- // feature starts to collect data (of course, if enabled
- // either through the configuration file or manually
- // in the command line)
- DisplayUtils.printFileInformation();
-
- // time to read the file and try to extract the directives;
- // this class does a pretty good job on finding directives,
- // including the multiline ones; it was a long awaited
- // feature people were asking me to implement, so here
- // it is!
- Extractor extractor = new Extractor();
-
- // extract() brings us a list of directives properly parsed
- // and almost ready to be handled; note that no directives
- // in the provided file will raise an exception; this is
- // by design and I opted to not include a default fallback
- // (although it wouldn't be so difficult to write one,
- // I decided not to take the risk)
- List<Directive> directives = extractor.extract();
-
- // once we have our nice list of directives, it is time to
- // actually validate them (for example, we have a couple of
- // keywords that cannot be used as directive parameters);
- // another interesting feature of the validate() method is
- // to replicate a directive that has the 'files' keyword on
- // it, since it's the whole point of having 'files' in the
- // first place; if you check the log file, you will see
- // that the list of extracted directives might differ from
- // the final list of directives to be effectively processed
- // by arara
- directives = DirectiveUtils.validate(directives);
-
- // arara features now a cool stopwatch, so we can see how
- // much time has passed since everything started; start(),
- // for obvious reasons, starts the stopwatch and keeps track
- // of time for us; internally, this class makes use of
- // nano time, so we might get an interesting precision here
- // (although timing is not a serious business in here, it's
- // just a cool addition)
- StopWatch.start();
-
- // this is surely the golden heart of arara; this class
- // implements a powerful interpreter that will handle all
- // rules and their corresponding tasks
- Interpreter interpreter = new Interpreter();
-
- // once we have this bad boy ready, let's provide the list
- // of directives previously extracted and validated; it is
- // like loading a cannon, I guess
- interpreter.setDirectives(directives);
-
- // time to shine, now the interpreter class will interpret
- // one directive at a time, get the corresponding rule,
- // set the parameters, evaluate it, get the tasks, run them,
- // evaluate the result and print the status; note that
- // arara, from this version on, will try to evaluate things
- // progressively, so in case of an error, the previous tasks
- // were already processed and potentially executed
- interpreter.execute();
- }
-
- } catch (AraraException exception) {
-
- // something bad just happened, so arara will print the proper
- // exception and provide details on it, if available; the idea
- // here is to propagate an exception throughout the whole
- // application and catch it here instead of a local treatment
- DisplayUtils.printException(exception);
- }
-
- // we are done here (with or without errors, that makes no difference
- // at this point), so let's stop our stopwatch; now it's just an easy
- // subtraction to be made (note that the values are internally
- // represented as nanoseconds, but the result is printed as seconds)
- StopWatch.stop();
-
- // this is the last command from arara; once the execution time is
- // available, print it; note that this notification is suppressed
- // when the command line parsing returns false as result (it makes
- // no sense to print the execution time for a help message, I guess)
- DisplayUtils.printTime();
-
- // gets the application exit status; the rule here is:
- // 0 : everything went just fine (note that the dry-run mode always
- // makes arara exit with 0, unless it is an error in the directive
- // builder itself).
- // 1 : one of the tasks failed, so the execution ended abruptly. This
- // means the error relies on the command line call, not with arara.
- // 2 : arara just handled an exception, meaning that something bad
- // just happened and might require user intervention.
- System.exit(CommonUtils.getExitStatus());
-
- // I owe David Carlisle $100
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/controller/ConfigurationController.java b/support/arara/source/src/main/java/com/github/cereda/arara/controller/ConfigurationController.java
deleted file mode 100644
index 2dbc3a2bff..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/controller/ConfigurationController.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.controller;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Implements the configuration controller. The idea here is to provide a map
- * that holds all configuration settings used by model and utilitary classes
- * throughout the execution. This controller is implemented as a singleton.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class ConfigurationController {
-
- // the controller itself, since we have a singleton;
- // this is the reference instance, instantiated once
- private static final ConfigurationController instance =
- new ConfigurationController();
-
- // the configuration settings are stored in a map;
- // pretty much everything can be stored in this map,
- // as long as you know what to retrieve later on
- private final Map<String, Object> map;
-
- /**
- * Private constructor. Called once for creating the proper singleton.
- */
- private ConfigurationController() {
- map = new HashMap<String, Object>();
- }
-
- /**
- * Gets the current configuration controller. Since this class is
- * implemented as a singleton, you will get the same controller every
- * single time, and that's good.
- * @return The configuration controller, which hold the settings map.
- */
- public static ConfigurationController getInstance() {
- return instance;
- }
-
- /**
- * Returns the object indexed by the provided key. This method provides an
- * easy access to the underlying map.
- * @param key A string representing the key.
- * @return An object indexed by the provided key.
- */
- public Object get(String key) {
- return map.get(key);
- }
-
- /**
- * Puts the object in the map and indexes it in the provided key. This
- * method provides an easy access to the underlying map.
- * @param key A string representing the key.
- * @param value The object to be indexed by the provided key.
- */
- public void put(String key, Object value) {
- map.put(key, value);
- }
-
- /**
- * Checks if the map contains the provided key. This is actually a wrapper
- * to the private map's method of the same name.
- * @param key The key to be checked.
- * @return A boolean value indicating if the map contains the provided key.
- */
- public boolean contains(String key) {
- return map.containsKey(key);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/controller/LanguageController.java b/support/arara/source/src/main/java/com/github/cereda/arara/controller/LanguageController.java
deleted file mode 100644
index 85bfc3a43d..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/controller/LanguageController.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.controller;
-
-import ch.qos.cal10n.IMessageConveyor;
-import ch.qos.cal10n.MessageConveyor;
-import java.util.Locale;
-
-/**
- * Implements the language controller. This controller provides a singleton
- * object that holds the application messages, easily available to all model
- * and utilitary classes.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class LanguageController {
-
- // the controller itself, since we have a singleton;
- // this is the reference instance, instantiated once
- private static final LanguageController instance =
- new LanguageController();
-
- // the message conveyor helps us to get localized messages
- // according to the provided locale
- private IMessageConveyor conveyor;
-
- /**
- * Private constructor. The fallback language is set to English for all
- * messages in arara.
- */
- private LanguageController() {
- conveyor = new MessageConveyor(new Locale("en"));
- }
-
- /**
- * Initializes the class. This method actually does nothing, it just
- * triggers the static attributions. Dirty, isn't it?
- */
- public static void init() {
- // quack, quack, quack!
- }
-
- /**
- * Gets the singleton reference. Since this class is implemented as a
- * singleton, you will get the same controller every single time.
- * @return The language controller which holds the conveyor.
- */
- public static LanguageController getInstance() {
- return instance;
- }
-
- /**
- * Sets the current locale. This method actually resets the language
- * conveyor in order to use the new locale. It's quite simple.
- * @param locale The new locale for localized messages through the language
- * conveyor.
- */
- public void setLocale(Locale locale) {
- conveyor = new MessageConveyor(locale);
- }
-
- /**
- * Gets the localized message indexed by the provided enumeration key,
- * applying an array of objects as parameters. This method is a wrapper to
- * the conveyor's method of the same name.
- * @param <E> Enumeration type that represents the conveyor messages.
- * @param key Key set in the provided enumeration type.
- * @param parameters Array of objects to be used as parameters.
- * @return A string containing a localized message indexed by the provided
- * enumeration key and applied the array of objects as parameters.
- */
- public <E extends Enum<?>> String getMessage(E key, Object... parameters) {
- return conveyor.getMessage(key, parameters);
- }
-
- /**
- * Gets the localized message indexed by the provided enumeration key. This
- * method is a wrapper to the conveyor's method of the same name.
- * @param <E> Enumeration type that represents the conveyor messages.
- * @param key Key set in the provided enumeration type.
- * @return A string containing a localized message indexed by the provided
- * enumeration key.
- */
- public <E extends Enum<?>> String getMessage(E key) {
- return conveyor.getMessage(key);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/controller/LoggingController.java b/support/arara/source/src/main/java/com/github/cereda/arara/controller/LoggingController.java
deleted file mode 100644
index 958beec291..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/controller/LoggingController.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.controller;
-
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.joran.JoranConfigurator;
-import ch.qos.logback.core.joran.spi.JoranException;
-import java.io.InputStream;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implements the logging controller. This class actually sets the logging
- * configuration in order to allow appending results to a file.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class LoggingController {
-
- /**
- * Sets the logging configuration according to the provided boolean value.
- * If the value is set to true, the log entries will be appended to a file,
- * otherwise the logging feature will keep silent.
- * @param enable A boolean value that indicates the logging behaviour
- * throughout the application.
- */
- public static void enableLogging(boolean enable) {
-
- // get the logger context from a factory, set a
- // new context and reset it
- LoggerContext loggerContext =
- (LoggerContext) LoggerFactory.getILoggerFactory();
-
- try {
-
- // get a new configuration and set
- // the context
- JoranConfigurator configurator = new JoranConfigurator();
- configurator.setContext(loggerContext);
- loggerContext.reset();
-
- // if enabled, the log entries will be
- // appended to a file, otherwise it will
- // remain silent
- if (enable) {
-
- // set the file name and configure
- // the logging controller to append
- // entries to the file
- String name = (String) ConfigurationController.
- getInstance().get("execution.log.name");
- loggerContext.putProperty("name", name);
- configurator.doConfigure(getResource());
- }
- } catch (JoranException exception) {
- // quack, quack, quack!
- }
- }
-
- /**
- * Get the configuration resource as an input stream. The configuration
- * is actually a XML file.
- * @return An input stream of the provided configuration XML resource.
- */
- private static InputStream getResource() {
- String resource = "/com/github/cereda/arara/configuration/logback.xml";
- return LoggingController.class.getResourceAsStream(resource);
- }
-
- /**
- * Initializes the logging controller by disabling it. I don't want an odd
- * behaviour out of the box.
- */
- public static void init() {
- enableLogging(false);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/controller/SessionController.java b/support/arara/source/src/main/java/com/github/cereda/arara/controller/SessionController.java
deleted file mode 100644
index 41c627dc98..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/controller/SessionController.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.controller;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Implements a session controller. This class wraps a map that holds the
- * execution session, that is, a dirty maneuver to exchange pretty much any
- * data between commands and even rules.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class SessionController {
-
- // the controller itself, since we have a singleton;
- // this is the reference instance, instantiated once
- private static final SessionController instance =
- new SessionController();
-
- // the session map which holds the execution session;
- // the idea here is to provide wrappers to the map
- // methods, so it could be easily manipulated
- private final Map<String, Object> map;
-
- /**
- * Private constructor. Called once when the singleton is created.
- */
- private SessionController() {
- map = new HashMap<String, Object>();
- }
-
- /**
- * Gets the singleton reference. Since this class is implemented as a
- * singleton, you will get the same controller every single time.
- * @return The session controller which holds the session map.
- */
- public static SessionController getInstance() {
- return instance;
- }
-
- /**
- * Gets the object indexed by the provided key. This method actually holds
- * the map method of the very same name.
- * @param key The provided map key.
- * @return The object indexed by the provided map key.
- */
- public Object get(String key) {
- return map.get(key);
- }
-
- /**
- * Puts the object in the session map and indexes it under the provided
- * key. This method actually holds the map method of the very same name.
- * @param key The provided map key.
- * @param value The object to be indexed under the provided key.
- */
- public void put(String key, Object value) {
- map.put(key, value);
- }
-
- /**
- * Checks if the session map contains the provided key. This method holds
- * the map method of the very same name.
- * @param key The key to be checked.
- * @return A boolean value indicating if the session map contains the
- * provided key.
- */
- public boolean contains(String key) {
- return map.containsKey(key);
- }
-
- /**
- * Remove an entry from the map according to the provided key. This method
- * holds the map method of the same name.
- * @param key The provided key to indicate which session map entry should
- * be removed.
- */
- public void remove(String key) {
- map.remove(key);
- }
-
- /**
- * Clears the session map. This method, as usual, holds the map method of
- * the same name.
- */
- public void clear() {
- map.clear();
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/controller/SystemCallController.java b/support/arara/source/src/main/java/com/github/cereda/arara/controller/SystemCallController.java
deleted file mode 100644
index 4d87adc8a8..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/controller/SystemCallController.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.controller;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.zeroturnaround.exec.ProcessExecutor;
-
-/**
- * Implements a system call controller. This class wraps a map that holds the
- * result of system specific variables not directly available at runtime.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class SystemCallController {
-
- /**
- * Implements a private command interface.
- */
- private interface Command {
-
- /**
- * Executes the command body.
- * @return An object.
- */
- public Object execute();
- }
-
- // the controller itself, since we have a singleton;
- // this is the reference instance, instantiated once
- private static final SystemCallController instance =
- new SystemCallController();
-
- // the system call map which holds the result of
- // system specific variables not directly available
- // at runtime; the idea here is to provide wrappers
- // to the map getter, so it could be easily manipulated
- private final Map<String, Object> map;
-
- // the commands map will allow the system call map being
- // populated only on demand, that is, if the key is not
- // found, this map will provide the corresponding method
- // and update the value
- private final Map<String, Command> commands;
-
- /**
- * Private constructor. Called once when the singleton is created.
- */
- private SystemCallController() {
-
- // create the new map instance to be
- // populated on demand
- map = new HashMap<String, Object>();
-
- // create the new map of commands and
- // add the corresponding system calls
- commands = new HashMap<String, Command>();
-
- // add the check for a Cygwin
- // environment in here
- commands.put("cygwin", new Command() {
-
- /**
- * Implements the body of the command. In this particular
- * instance, it checks if we are inside a Cygwin environment.
- * @return A boolean value indicating if we are inside a Cygwin
- * environment.
- */
- public Object execute() {
- try {
-
- // execute a new system call to 'uname -s', read the output
- // as an UTF-8 string, lowercase it and check if it starts
- // with the 'cygwin' string; if so, we are inside Cygwin
- return (
- new ProcessExecutor().command("uname", "-s").
- readOutput(true).execute().outputUTF8()
- ).toLowerCase().startsWith("cygwin");
-
- } catch (Exception exception) {
-
- // gracefully fallback in case of any nasty and evil
- // exception, e.g, if the command is unavailable
- return false;
- }
- }
- });
- }
-
- /**
- * Gets the singleton reference. Since this class is implemented as a
- * singleton, you will get the same controller every single time.
- * @return The system call controller which holds the system call map.
- */
- public static SystemCallController getInstance() {
- return instance;
- }
-
- /**
- * Gets the object indexed by the provided key. This method actually holds
- * the map method of the very same name.
- * @param key The provided map key.
- * @return The object indexed by the provided map key.
- */
- public Object get(String key) {
-
- // if key is not found, meaning that
- // the value wasn't required before
- if (!map.containsKey(key)) {
-
- // perform the system call and
- // populate the corresponding value
- map.put(key, commands.get(key).execute());
- }
-
- // simply return the corresponding
- // value based on the provided key
- return map.get(key);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/AraraException.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/AraraException.java
deleted file mode 100644
index 5f5d788e0f..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/AraraException.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-/**
- * Implements the specific exception model for arara.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class AraraException extends Exception {
-
- // the underlying exception,
- // used to hold more details
- // on what really happened
- private Exception exception;
-
- /**
- * Constructor. Takes the exception message.
- * @param message The exception message.
- */
- public AraraException(String message) {
- super(message);
- }
-
- /**
- * Constructor. Takes the exception message and the underlying exception.
- * @param message The exception message.
- * @param exception The underlying exception object.
- */
- public AraraException(String message, Exception exception) {
- super(message);
- this.exception = exception;
- }
-
- /**
- * Gets the underlying exception.
- * @return The underlying message.
- */
- public Exception getException() {
- return exception;
- }
-
- /**
- * Checks if there is an underlying exception defined in the current object.
- * @return A boolean value indicating if the current object has an
- * underlying exception.
- */
- public boolean hasException() {
- if (exception != null) {
- return (exception.getMessage() != null);
- } else {
- return false;
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Argument.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Argument.java
deleted file mode 100644
index b0e7d2bca6..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Argument.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.utils.CommonUtils;
-
-/**
- * The rule argument model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Argument {
-
- // the argument identifier
- private String identifier;
-
- // a boolean indicating if the
- // current argument is required
- private boolean required;
-
- // the flag to hold the argument
- // value manipulation
- private String flag;
-
- // the argument fallback if it is
- // not defined in the directive
- private String fallback;
-
- /**
- * Gets the identifier.
- * @return The identifier.
- */
- public String getIdentifier() {
- return CommonUtils.removeKeyword(identifier);
- }
-
- /**
- * Sets the identifier.
- * @param identifier The identifier.
- */
- public void setIdentifier(String identifier) {
- this.identifier = identifier;
- }
-
- /**
- * Checks if the argument is required.
- * @return A boolean value indicating if the argument is required.
- */
- public boolean isRequired() {
- return required;
- }
-
- /**
- * Sets the argument requirement.
- * @param required A boolean value.
- */
- public void setRequired(boolean required) {
- this.required = required;
- }
-
- /**
- * Gets the argument flag.
- * @return The flag.
- */
- public String getFlag() {
- return CommonUtils.removeKeyword(flag);
- }
-
- /**
- * Sets the argument flag.
- * @param flag The argument flag.
- */
- public void setFlag(String flag) {
- this.flag = flag;
- }
-
- /**
- * Gets the argument fallback.
- * @return The argument fallback.
- */
- public String getDefault() {
- return CommonUtils.removeKeyword(fallback);
- }
-
- /**
- * Sets the argument fallback.
- * @param fallback The argument fallback.
- */
- public void setDefault(String fallback) {
- this.fallback = fallback;
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Command.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Command.java
deleted file mode 100644
index 848f3f3010..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Command.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.utils.CommonUtils;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Implements a command model, containing a list of strings.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Command {
-
- // a list of elements which are components
- // of a command and represented as strings
- private final List<String> elements;
-
- // an optional file acting as a reference
- // for the default working directory
- private File workingDirectory;
-
- /**
- * Constructor.
- * @param values An array of objects.
- */
- public Command(Object... values) {
- elements = new ArrayList<String>();
- List result = CommonUtils.flatten(Arrays.asList(values));
- for (Object value : result) {
- String element = String.valueOf(value);
- if (!CommonUtils.checkEmptyString(element)) {
- elements.add(element);
- }
- }
- }
-
- /**
- * Constructor.
- * @param elements A list of strings.
- */
- public Command(List<String> elements) {
- this.elements = elements;
- }
-
- /**
- * Gets the list of strings representing each element of a command.
- * @return A list of strings.
- */
- public List<String> getElements() {
- return elements;
- }
-
- /**
- * Sets the working directory.
- * @param workingDirectory A file representing the working directory.
- */
- public void setWorkingDirectory(File workingDirectory) {
- this.workingDirectory = workingDirectory;
- }
-
- /**
- * Gets the working directory, if any.
- * @return A file representing the working directory.
- */
- public File getWorkingDirectory() {
- return workingDirectory;
- }
-
- /**
- * Checks if a working directory was defined.
- * @return A logic value indicating if a working directory was defined.
- */
- public boolean hasWorkingDirectory() {
- return workingDirectory != null;
- }
-
- /**
- * Provides a textual representation of the current command.
- * @return A string representing the current command.
- */
- @Override
- public String toString() {
- return CommonUtils.getCollectionElements(elements, "[ ", " ]", ", ").
- concat(
- hasWorkingDirectory()
- ? " @ " + workingDirectory.toString()
- : ""
- );
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Conditional.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Conditional.java
deleted file mode 100644
index d8f0543709..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Conditional.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-/**
- * The conditional class, it represents the type of conditional available
- * for a directive and its corresponding expression to be evaluated.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Conditional {
-
- // these are all types of conditionals arara
- // is able to recognize; personally, I believe
- // they are more than sufficient to cover the
- // majority of test cases
- public enum ConditionalType {
-
- // evaluated beforehand, directive is interpreted
- // if and only if the result is true
- IF,
-
- // there is no evaluation, directive is interpreted,
- // no extra effort is needed
- NONE,
-
- // evaluated beforehand, directive is interpreted
- // if and only if the result is false
- UNLESS,
-
- // directive is interpreted the first time, then the
- // evaluation is done; while the result is false,
- // the directive is interpreted again and again
- UNTIL,
-
- // evaluated beforehand, directive is interpreted if
- // and oly if the result is true, and the process is
- // repeated while the result still holds true
- WHILE
- }
-
- // the conditional type, specified above; the
- // default fallback, as seen in the constructor,
- // is set to NONE, that is, no conditional at all
- private ConditionalType type;
-
- // the expression to be evaluated according to its
- // type; the default fallback, as seen in the
- // constructor, is set to an empty string
- private String condition;
-
- /**
- * Constructor.
- */
- public Conditional() {
- type = ConditionalType.NONE;
- condition = "";
- }
-
- /**
- * Gets the conditional type.
- * @return The conditional type.
- */
- public ConditionalType getType() {
- return type;
- }
-
- /**
- * Sets the conditional type.
- * @param type The conditional type.
- */
- public void setType(ConditionalType type) {
- this.type = type;
- }
-
- /**
- * Gets the condition, that is, the expression to be evaluated.
- * @return A string representing the condition.
- */
- public String getCondition() {
- return condition;
- }
-
- /**
- * Sets the condition, that is, the expression to be evaluated.
- * @param condition A string representing the condition.
- */
- public void setCondition(String condition) {
- this.condition = condition;
- }
-
- /**
- * Provides a textual representation of the conditional object.
- * @return A string representation of this object.
- */
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("{ ").append(type);
- if (type != ConditionalType.NONE) {
- builder.append(", expression: ").append(condition.trim());
- }
- builder.append(" }");
- return builder.toString();
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Configuration.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Configuration.java
deleted file mode 100644
index 70f6382364..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Configuration.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.utils.CommonUtils;
-import com.github.cereda.arara.utils.ConfigurationUtils;
-import java.io.File;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Implements the configuration model, which holds the default settings and can
- * load the configuration file.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Configuration {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Loads the application configuration.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static void load() throws AraraException {
-
- // initialize both file type and language models,
- // since we can track errors from there instead
- // of relying on a check on this level
- FileType.init();
- Language.init();
-
- // reset everything
- reset();
-
- // get the configuration file, if any
- File file = ConfigurationUtils.getConfigFile();
- if (file != null) {
-
- // set the configuration file name for
- // logging purposes
- ConfigurationController.getInstance().
- put("execution.configuration.name",
- CommonUtils.getCanonicalPath(file)
- );
-
- // then validate it and update the
- // configuration accordingly
- Resource resource = ConfigurationUtils.validateConfiguration(file);
- update(resource);
- }
-
- // just to be sure, update the
- // current locale in order to
- // display localized messages
- Locale locale = ((Language) ConfigurationController.
- getInstance().get("execution.language")).getLocale();
- LanguageController.getInstance().setLocale(locale);
- }
-
- /**
- * Resets the configuration to initial settings.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static void reset() throws AraraException {
-
- // put everything in a map to be
- // later assigned to the configuration
- // controller, which holds the settings
- Map<String, Object> mapping = new HashMap<String, Object>();
-
- mapping.put("execution.loops", 10L);
- mapping.put("directives.charset", Charset.forName("UTF-8"));
- mapping.put("execution.errors.halt", true);
- mapping.put("execution.timeout", false);
- mapping.put("execution.timeout.value", 0L);
- mapping.put("execution.timeout.unit", TimeUnit.MILLISECONDS);
- mapping.put("application.version", "4.0");
- mapping.put("application.revision", "2");
- mapping.put("directives.linebreak.pattern", "^\\s*-->\\s(.*)$");
-
- String directive = "^\\s*(\\w+)\\s*(:\\s*(\\{.*\\})\\s*)?";
- String pattern = "(\\s+(if|while|until|unless)\\s+(\\S.*))?$";
-
- mapping.put("directives.pattern", directive.concat(pattern));
- mapping.put("application.pattern", "arara:\\s");
- mapping.put("application.width", 65);
- mapping.put("execution.database.name", "arara");
- mapping.put("execution.log.name", "arara");
- mapping.put("execution.verbose", false);
-
- mapping.put("trigger.halt", false);
- mapping.put("execution.language", new Language("en"));
- mapping.put("execution.logging", false);
- mapping.put("execution.dryrun", false);
- mapping.put("execution.status", 0);
- mapping.put("application.copyright.year", "2012-2019");
- mapping.put("execution.filetypes", ConfigurationUtils.
- getDefaultFileTypes());
- mapping.put("execution.rule.paths",
- Arrays.asList(
- CommonUtils.buildPath(
- ConfigurationUtils.getApplicationPath(),
- "rules"
- )
- )
- );
-
- mapping.put("execution.preambles", new HashMap<String, String>());
- mapping.put("execution.preamble.active", false);
- mapping.put("execution.configuration.name", "[none]");
- mapping.put("execution.header", false);
- mapping.put("ui.lookandfeel", "none");
-
- // get the configuration controller and
- // set every map key to it
- ConfigurationController controller =
- ConfigurationController.getInstance();
- for (String key : mapping.keySet()) {
- controller.put(key, mapping.get(key));
- }
- }
-
- /**
- * Update the configuration based on the provided map.
- * @param data Map containing the new configuration settings.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static void update(Resource resource) throws AraraException {
-
- ConfigurationController controller =
- ConfigurationController.getInstance();
-
- if (resource.getPaths() != null) {
- List<String> paths = resource.getPaths();
- paths = ConfigurationUtils.normalizePaths(paths);
- controller.put("execution.rule.paths", paths);
- }
-
- if (resource.getFiletypes() != null) {
- List<FileTypeResource> resources = resource.getFiletypes();
- List<FileType> filetypes = new ArrayList<FileType>();
- for (FileTypeResource type : resources) {
- if (type.getPattern() != null) {
- filetypes.add(
- new FileType(type.getExtension(), type.getPattern())
- );
- } else {
- filetypes.add(new FileType(type.getExtension()));
- }
- }
- filetypes = ConfigurationUtils.normalizeFileTypes(filetypes);
- controller.put("execution.filetypes", filetypes);
- }
-
- controller.put("execution.verbose", resource.isVerbose());
- controller.put("execution.logging", resource.isLogging());
- controller.put("execution.header", resource.isHeader());
-
- if (resource.getDbname() != null) {
- controller.put("execution.database.name",
- ConfigurationUtils.cleanFileName(resource.getDbname()));
- }
-
- if (resource.getLogname() != null) {
- controller.put("execution.log.name",
- ConfigurationUtils.cleanFileName(resource.getLogname()));
- }
-
- if (resource.getLanguage() != null) {
- controller.put("execution.language",
- new Language(resource.getLanguage()));
- }
-
- long loops = resource.getLoops();
- if (loops > 0) {
- controller.put("execution.loops", loops);
- } else {
- if (loops < 0) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CONFIGURATION_LOOPS_INVALID_RANGE
- )
- );
- }
- }
-
- if (resource.getPreambles() != null) {
- controller.put("execution.preambles",
- resource.getPreambles());
- }
-
- if (resource.getLaf() != null) {
- controller.put("ui.lookandfeel",
- resource.getLaf());
- }
-
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Database.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Database.java
deleted file mode 100644
index 474209e405..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Database.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import java.util.HashMap;
-import org.simpleframework.xml.ElementMap;
-import org.simpleframework.xml.Root;
-
-/**
- * The XML database model, which keeps track on file changes. I am using the
- * Simple framework to marshall and unmarshall objects and XML files.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-@Root(name = "status")
-public class Database {
-
- // the whole database is implemented as a map, where
- // the key is the absolute canonical file and the value
- // is its corresponding CRC32 hash; the XML map is done
- // inline, so it does not clutter the output a lot
- @ElementMap(entry = "hash", key = "file", attribute = true, inline = true)
- private HashMap<String, String> map;
-
- /**
- * Constructor. It creates a new map.
- */
- public Database() {
- map = new HashMap<String, String>();
- }
-
- /**
- * Gets the map.
- * @return The map.
- */
- public HashMap<String, String> getMap() {
- return map;
- }
-
- /**
- * Sets the map.
- * @param map The map.
- */
- public void setMap(HashMap<String, String> map) {
- this.map = map;
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Directive.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Directive.java
deleted file mode 100644
index a3831db8b2..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Directive.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implements the directive model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Directive {
-
- // the directive identifier, it is resolved
- // to the rule identifier later on
- private String identifier;
-
- // a map containing the parameters; they
- // are validated later on in order to
- // ensure they are valid
- private Map<String, Object> parameters;
-
- // a conditional containing the type and
- // the expression to be evaluated later on
- private Conditional conditional;
-
- // a list contained all line numbers from
- // the main file which built the current
- // directive
- private List<Integer> lineNumbers;
-
- /**
- * Gets the directive identifier.
- * @return A string representing the directive identifier.
- */
- public String getIdentifier() {
- return identifier;
- }
-
- /**
- * Sets the directive identifier.
- * @param identifier A string representing the directive identifier.
- */
- public void setIdentifier(String identifier) {
- this.identifier = identifier;
- }
-
- /**
- * Gets the directive parameters.
- * @return A map containing the directive parameters.
- */
- public Map<String, Object> getParameters() {
- return parameters;
- }
-
- /**
- * Sets the directive parameters.
- * @param parameters A map containing the directive parameters.
- */
- public void setParameters(Map<String, Object> parameters) {
- this.parameters = parameters;
- }
-
- /**
- * Gets the conditional object from the current directive.
- * @return The conditional object from the current directive.
- */
- public Conditional getConditional() {
- return conditional;
- }
-
- /**
- * Sets the conditional object from the current directive.
- * @param conditional The conditional object from the current directive.
- */
- public void setConditional(Conditional conditional) {
- this.conditional = conditional;
- }
-
- /**
- * Gets the list containing all line numbers from the current directive.
- * @return A list containing all line numbers from the current directive.
- */
- public List<Integer> getLineNumbers() {
- return lineNumbers;
- }
-
- /**
- * Sets the list containing all line numbers from the current directive.
- * @param lineNumbers A list containing all line numbers from the current
- * directive.
- */
- public void setLineNumbers(List<Integer> lineNumbers) {
- this.lineNumbers = lineNumbers;
- }
-
- /**
- * Provides a textual representation of the current directive.
- * @return A string containing a textual representation of the current
- * directive.
- */
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("Directive: { ");
- builder.append("identifier: ").append(identifier).append(", ");
- builder.append("parameters: ").append(parameters).append(", ");
- builder.append("conditional: ").append(conditional).append(", ");
- builder.append("lines: ").append(lineNumbers).append(" }");
- return builder.toString();
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Evaluator.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Evaluator.java
deleted file mode 100644
index 30995ecaf9..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Evaluator.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.utils.CommonUtils;
-import com.github.cereda.arara.utils.Methods;
-import java.util.HashMap;
-import java.util.Map;
-import org.mvel2.templates.TemplateRuntime;
-
-/**
- * Implements the evaluator model, on which a conditional can be analyzed and
- * processed.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Evaluator {
-
- // this attribute holds the maximum number of
- // loops arara will accept; it's like
- // reaching infinity
- private final long loops;
-
- // the counter for the current execution, it
- // helps us keep track of the number of times
- // this evaluation has happened, and also to
- // prevent potential infinite loops
- private long counter;
-
- // a flag that indicates the
- // evaluation to halt regardless
- // of the the result
- private boolean halt;
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Constructor. It gets the application maximum number of loops and reset
- * all counters.
- */
- public Evaluator() {
- loops = (Long) ConfigurationController.getInstance().
- get("execution.loops");
- counter = 0;
- halt = false;
- }
-
- /**
- * Evaluate the provided conditional.
- * @param conditional The conditional object.
- * @return A boolean value indicating if the conditional holds.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public boolean evaluate(Conditional conditional) throws AraraException {
-
- // when in dry-run mode, arara
- // always ignore conditional evaluations
- if (((Boolean) ConfigurationController.
- getInstance().get("execution.dryrun")) == true) {
- return false;
- }
-
- switch (conditional.getType()) {
- case NONE:
- return false;
- case IF:
- case UNLESS:
- if (!halt) {
- halt = true;
- } else {
- return false;
- }
- break;
- }
-
- // check counters and see if the execution
- // has reached our concept of infinity,
- // thus breaking the cycles
- counter++;
- if (((conditional.getType() == Conditional.ConditionalType.WHILE) &&
- (counter > loops)) ||
- ((conditional.getType() == Conditional.ConditionalType.UNTIL) &&
- (counter >= loops))) {
- return false;
- } else {
-
- Map<String, Object> context = new HashMap<String, Object>();
- Methods.addConditionalMethods(context);
-
- try {
- Object result = TemplateRuntime.eval("@{ ".concat(
- conditional.getCondition()).concat(" }"), context);
- if (!CommonUtils.checkClass(Boolean.class, result)) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_EVALUATE_NOT_BOOLEAN_VALUE
- )
- );
- } else {
- boolean value = (Boolean) result;
- switch (conditional.getType()) {
- case UNLESS:
- case UNTIL:
- value = !value;
- break;
- }
- return value;
- }
- } catch (RuntimeException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_EVALUATE_COMPILATION_FAILED
- ),
- exception
- );
- }
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Extractor.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Extractor.java
deleted file mode 100644
index b4a248688a..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Extractor.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.utils.CommonUtils;
-import com.github.cereda.arara.utils.DirectiveUtils;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.util.List;
-import org.apache.commons.io.FileUtils;
-
-/**
- * It extracts directives from the provided main file.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Extractor {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Extracts a list of directives from the provided main file, obtained from
- * the configuration controller.
- * @return A list of directives.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public List<Directive> extract() throws AraraException {
-
- File file = (File) ConfigurationController.
- getInstance().get("execution.reference");
- Charset charset = (Charset) ConfigurationController.
- getInstance().get("directives.charset");
-
- try {
- List<String> content = CommonUtils.getPreambleContent();
- List<String> lines = FileUtils.readLines(file, charset.name());
- content.addAll(lines);
- return DirectiveUtils.extractDirectives(content);
- } catch (IOException ioexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_EXTRACTOR_IO_ERROR
- ),
- ioexception
- );
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/FileType.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/FileType.java
deleted file mode 100644
index e7403bee51..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/FileType.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.utils.CommonUtils;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-
-/**
- * Implements the file type model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class FileType {
-
- // string representing the
- // file extension
- private String extension;
-
- // string representing the
- // file pattern to be used
- // as directive lookup
- private String pattern;
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- // a map containing all file
- // types that arara accepts
- private static final Map<String, String> types =
- new HashMap<String, String>();
-
- /**
- * Initializes the file type class by setting the default file types and
- * their corresponding patterns.
- */
- public static void init() {
- types.put("tex", "^\\s*%\\s+");
- types.put("dtx", "^\\s*%\\s+");
- types.put("ltx", "^\\s*%\\s+");
- types.put("drv", "^\\s*%\\s+");
- types.put("ins", "^\\s*%\\s+");
- }
-
- /**
- * Constructor. It takes both file extension and pattern lookup.
- * @param extension The file extension.
- * @param pattern The file pattern.
- */
- public FileType(String extension, String pattern) {
- this.extension = extension;
- this.pattern = pattern;
- }
-
- /**
- * Constructor. It takes the extension, but it might raise an exception if
- * the extension is unknown. This constructor is used when you just want
- * to reorganize the file lookup priority without the need of changing the
- * default extensions.
- * @param extension The file extension.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public FileType(String extension) throws AraraException {
- if (types.containsKey(extension)) {
- this.extension = extension;
- this.pattern = types.get(extension);
- } else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_FILETYPE_UNKNOWN_EXTENSION,
- extension,
- CommonUtils.getFileTypesList()
- )
- );
- }
- }
-
- /**
- * Implements the file type hash code. Note that only the file extension is
- * considered.
- * @return An integer representing the file type hash code.
- */
- @Override
- public int hashCode() {
- return new HashCodeBuilder().append(extension).toHashCode();
- }
-
- /**
- * Implements the file type equals method, checking if one file type is
- * equal to another. Note that only the file extension is considered.
- * @param object The object to be analyzed.
- * @return A boolean value indicating if those two objects are equal.
- */
- @Override
- public boolean equals(Object object) {
- if (object == null) {
- return false;
- }
- if (getClass() != object.getClass()) {
- return false;
- }
- final FileType reference = (FileType) object;
- return new EqualsBuilder().append(extension, reference.extension).isEquals();
- }
-
- /**
- * Gets the file type extension.
- * @return String representing the file type extension.
- */
- public String getExtension() {
- return extension;
- }
-
- /**
- * Gets the file type pattern.
- * @return String representing the file type pattern.
- */
- public String getPattern() {
- return pattern;
- }
-
- /**
- * Provides a textual representation of the current file type object.
- * @return A string containing a textual representation of the current file
- * type object.
- */
- @Override
- public String toString() {
- return ".".concat(extension);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/FileTypeResource.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/FileTypeResource.java
deleted file mode 100644
index d23b10f9f5..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/FileTypeResource.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.utils.CommonUtils;
-
-/**
- * Implements the file type resource model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class FileTypeResource {
-
- // the file extension
- private String extension;
-
- // the file pattern
- private String pattern;
-
- /**
- * Gets the extension.
- * @return The extension.
- */
- public String getExtension() {
- return CommonUtils.removeKeyword(extension);
- }
-
- /**
- * Sets the extension.
- * @param extension The extension.
- */
- public void setExtension(String extension) {
- this.extension = extension;
- }
-
- /**
- * Gets the pattern.
- * @return The pattern.
- */
- public String getPattern() {
- return CommonUtils.removeKeyword(pattern);
- }
-
- /**
- * Sets the pattern.
- * @param pattern The pattern.
- */
- public void setPattern(String pattern) {
- this.pattern = pattern;
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Interpreter.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Interpreter.java
deleted file mode 100644
index 30c18a3074..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Interpreter.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.utils.CommonUtils;
-import com.github.cereda.arara.utils.DisplayUtils;
-import com.github.cereda.arara.utils.InterpreterUtils;
-import com.github.cereda.arara.utils.Methods;
-import com.github.cereda.arara.utils.RuleUtils;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.mvel2.templates.TemplateRuntime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Interprets the list of directives.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Interpreter {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages
- = LanguageController.getInstance();
-
- // the class logger obtained from
- // the logger factory
- private static final Logger logger
- = LoggerFactory.getLogger(Interpreter.class);
-
- // list of directives to be
- // interpreted in here
- private List<Directive> directives;
-
- /**
- * Sets the list of directives.
- * @param directives The list of directives.
- */
- public void setDirectives(List<Directive> directives) {
- this.directives = directives;
- }
-
- /**
- * Executes each directive, throwing an exception if something bad has
- * happened.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public void execute() throws AraraException {
-
- for (Directive directive : directives) {
-
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_INTERPRET_RULE,
- directive.getIdentifier()
- )
- );
-
- ConfigurationController.getInstance().
- put("execution.file",
- directive.getParameters().get("reference")
- );
- File file = getRule(directive);
-
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_RULE_LOCATION,
- file.getParent()
- )
- );
-
- ConfigurationController.getInstance().
- put("execution.info.rule.id", directive.getIdentifier());
- ConfigurationController.getInstance().
- put("execution.info.rule.path", file.getParent());
- ConfigurationController.getInstance().
- put("execution.directive.lines",
- directive.getLineNumbers()
- );
- ConfigurationController.getInstance().
- put("execution.directive.reference",
- directive.getParameters().get("reference")
- );
-
- Rule rule = parseRule(file, directive);
- Map<String, Object> parameters = parseArguments(rule, directive);
- Methods.addRuleMethods(parameters);
-
- String name = rule.getName();
- List<String> authors = rule.getAuthors() == null
- ? new ArrayList<String>() : rule.getAuthors();
- ConfigurationController.getInstance().
- put("execution.rule.arguments",
- InterpreterUtils.getRuleArguments(rule)
- );
-
- Evaluator evaluator = new Evaluator();
-
- boolean available = true;
- if (InterpreterUtils.
- runPriorEvaluation(directive.getConditional())) {
- available = evaluator.evaluate(directive.getConditional());
- }
-
- if (available) {
-
- do {
-
- List<RuleCommand> commands = rule.getCommands();
- for (RuleCommand command : commands) {
- String closure = command.getCommand();
- Object result = null;
- try {
- result = TemplateRuntime.eval(closure, parameters);
- } catch (RuntimeException exception) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR
- )
- ),
- exception
- );
- }
-
- List<Object> execution = new ArrayList<Object>();
- if (CommonUtils.checkClass(List.class, result)) {
- execution = CommonUtils.flatten((List<?>) result);
- } else {
- execution.add(result);
- }
-
- for (Object current : execution) {
-
- if (current == null) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_NULL_COMMAND
- )
- )
- );
- } else {
-
- if (!CommonUtils.checkEmptyString(
- String.valueOf(current))) {
-
- DisplayUtils.printEntry(name,
- command.getName() == null
- ? messages.getMessage(
- Messages.INFO_LABEL_UNNAMED_TASK
- )
- : command.getName()
- );
- boolean success = true;
-
- if (CommonUtils.checkClass(
- Trigger.class, current)) {
- if (((Boolean) ConfigurationController.
- getInstance().
- get("execution.dryrun")) == false) {
- if (((Boolean) ConfigurationController.
- getInstance().
- get("execution.verbose")) == true) {
- DisplayUtils.wrapText(
- messages.getMessage(
- Messages.INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE
- )
- );
- }
- } else {
- DisplayUtils.printAuthors(authors);
- DisplayUtils.wrapText(
- messages.getMessage(
- Messages.INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE
- )
- );
- DisplayUtils.printConditional(
- directive.getConditional()
- );
- }
- Trigger trigger = (Trigger) current;
- trigger.process();
- } else {
- if (CommonUtils.checkClass(
- Boolean.class, current)) {
- success = (Boolean) current;
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_BOOLEAN_MODE,
- String.valueOf(success)
- )
- );
-
- if (((Boolean) ConfigurationController.
- getInstance().
- get("execution.dryrun")) == true) {
-
- DisplayUtils.printAuthors(authors);
- DisplayUtils.wrapText(
- messages.getMessage(
- Messages.INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE,
- success
- )
- );
- DisplayUtils.printConditional(
- directive.getConditional()
- );
- }
- } else {
-
- Object representation
- = CommonUtils.checkClass(
- Command.class,
- current
- )
- ? current
- : String.valueOf(current);
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_SYSTEM_COMMAND,
- representation
- )
- );
-
- if (((Boolean) ConfigurationController.
- getInstance().
- get("execution.dryrun")) == false) {
- int code = InterpreterUtils.
- run(representation);
- Object check = null;
- try {
- Map<String, Object> context
- = new HashMap<String, Object>();
- context.put("value", code);
- check = TemplateRuntime.eval(
- "@{ ".concat(
- command.getExit() == null
- ? "value == 0"
- : command.getExit()).concat(" }"),
- context);
- } catch (RuntimeException exception) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().
- concat(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_EXIT_RUNTIME_ERROR
- )
- ),
- exception
- );
- }
- if (CommonUtils.
- checkClass(
- Boolean.class,
- check)) {
- success = (Boolean) check;
- } else {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN
- )
- )
- );
- }
- } else {
- DisplayUtils.printAuthors(authors);
- DisplayUtils.wrapText(
- messages.getMessage(
- Messages.INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND,
- representation
- )
- );
- DisplayUtils.printConditional(
- directive.getConditional()
- );
- }
- }
- }
-
- DisplayUtils.printEntryResult(success);
-
- if (((Boolean) ConfigurationController.
- getInstance().get("trigger.halt"))
- || (((Boolean) ConfigurationController.
- getInstance().
- get("execution.errors.halt")
- && !success))) {
- return;
- }
- }
- }
- }
- }
- } while (evaluator.evaluate(directive.getConditional()));
- }
- }
- }
-
- /**
- * Gets the rule according to the provided directive.
- * @param directive The provided directive.
- * @return The absolute canonical path of the rule, given the provided
- * directive.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private File getRule(Directive directive) throws AraraException {
- File file = InterpreterUtils.buildRulePath(directive.getIdentifier());
- if (file == null) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_RULE_NOT_FOUND,
- directive.getIdentifier(),
- CommonUtils.getCollectionElements(
- CommonUtils.getAllRulePaths(),
- "(",
- ")",
- "; "
- )
- )
- );
- } else {
- return file;
- }
- }
-
- /**
- * Parses the rule against the provided directive.
- * @param file The file representing the rule.
- * @param directive The directive to be analyzed.
- * @return A rule object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private Rule parseRule(File file, Directive directive)
- throws AraraException {
- return RuleUtils.parseRule(file, directive.getIdentifier());
- }
-
- /**
- * Parses the rule arguments against the provided directive.
- * @param rule The rule object.
- * @param directive The directive.
- * @return A map containing all arguments resolved according to the
- * directive parameters.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private Map<String, Object> parseArguments(Rule rule, Directive directive)
- throws AraraException {
-
- List<Argument> arguments = rule.getArguments();
-
- Set<String> unknown = CommonUtils.
- getUnknownKeys(directive.getParameters(), arguments);
- unknown.remove("file");
- unknown.remove("reference");
- if (!unknown.isEmpty()) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_UNKNOWN_KEYS,
- CommonUtils.getCollectionElements(
- unknown,
- "(",
- ")",
- ", "
- )
- )
- )
- );
- }
-
- Map<String, Object> mapping = new HashMap<String, Object>();
- mapping.put("file", directive.getParameters().get("file"));
- mapping.put("reference", directive.getParameters().get("reference"));
-
- Map<String, Object> context = new HashMap<String, Object>();
- context.put("parameters", directive.getParameters());
- context.put("file", directive.getParameters().get("file"));
- context.put("reference", directive.getParameters().get("reference"));
- Methods.addRuleMethods(context);
-
- for (Argument argument : arguments) {
- if ((argument.isRequired())
- && (!directive.getParameters().containsKey(
- argument.getIdentifier()))) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED,
- argument.getIdentifier()
- )
- )
- );
- }
-
- if (argument.getDefault() != null) {
- try {
- Object result = TemplateRuntime.
- eval(argument.getDefault(), context);
- mapping.put(argument.getIdentifier(), result);
- } catch (RuntimeException exception) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().
- concat(messages.getMessage(
- Messages.ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR
- )
- ),
- exception
- );
- }
- } else {
- mapping.put(argument.getIdentifier(), "");
- }
-
- if ((argument.getFlag() != null)
- && (directive.getParameters().containsKey(
- argument.getIdentifier()))) {
-
- try {
- Object result = TemplateRuntime.eval(
- argument.getFlag(),
- context
- );
- mapping.put(argument.getIdentifier(), result);
- } catch (RuntimeException exception) {
- throw new AraraException(CommonUtils.getRuleErrorHeader().
- concat(
- messages.getMessage(
- Messages.ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION
- )
- ),
- exception
- );
- }
- }
- }
-
- return mapping;
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Language.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Language.java
deleted file mode 100644
index ff1b16a03f..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Language.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.utils.CommonUtils;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Implements the language model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Language {
-
- // the language code, based on
- // ISO 639-1 and language variants
- private final String code;
-
- // map containing all languages
- // supported by nightingale
- private static final Map<String, Pair<String, Locale>> languages =
- new HashMap<String, Pair<String, Locale>>();
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Initialize the language model. All supported languages are added in here.
- */
- public static void init() {
- languages.put("en", new Pair<String, Locale>(
- "English",
- new Locale("en")
- ));
- languages.put("de", new Pair<String, Locale>(
- "German",
- new Locale("de")
- ));
- languages.put("nl", new Pair<String, Locale>(
- "Dutch",
- new Locale("nl")
- ));
- languages.put("qn", new Pair<String, Locale>(
- "Broad Norfolk",
- new Locale("en", "QN")
- ));
- languages.put("ptbr", new Pair<String, Locale>(
- "Brazilian Portuguese",
- new Locale("pt", "BR")
- ));
- languages.put("it", new Pair<String, Locale>(
- "Italian",
- new Locale("it")
- ));
- }
-
- /**
- * Creates a new language object. It might raise an exception if the
- * provided language does not exist in the map.
- * @param code The language code, based on ISO 639-1 and language variants.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public Language(String code) throws AraraException {
- if (languages.containsKey(code)) {
- this.code = code;
- } else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_LANGUAGE_INVALID_CODE,
- getLanguagesList()
- )
- );
- }
- }
-
- /**
- * Gets the language name.
- * @return A string representing the language name.
- */
- public String getName() {
- return languages.get(code).getFirstElement();
- }
-
- /**
- * Gets the language locale.
- * @return The language locale.
- */
- public Locale getLocale() {
- return languages.get(code).getSecondElement();
- }
-
- /**
- * Gets a string representing the list of available languages.
- * @return String representing the list of available languages.
- */
- public static String getLanguagesList() {
- List<String> entries = new ArrayList<String>();
- for (String key : languages.keySet()) {
- entries.add(languages.get(key).
- getFirstElement().
- concat(": ").
- concat(key)
- );
- }
- return CommonUtils.getCollectionElements(entries, "(", ")", ", ");
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Messages.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Messages.java
deleted file mode 100644
index 901e61be6a..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Messages.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import ch.qos.cal10n.BaseName;
-import ch.qos.cal10n.Locale;
-import ch.qos.cal10n.LocaleData;
-
-/**
- * This enumeration contains all application messages.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-@BaseName("com.github.cereda.arara.localization.messages")
-@LocaleData({
- @Locale(value = "de", charset = "UTF-8"),
- @Locale(value = "en", charset = "UTF-8"),
- @Locale(value = "en_QN", charset = "UTF-8"),
- @Locale(value = "it", charset = "UTF-8"),
- @Locale(value = "nl", charset = "UTF-8"),
- @Locale(value = "pt_BR", charset = "UTF-8")
-})
-public enum Messages {
-
- ERROR_BASENAME_NOT_A_FILE,
- ERROR_CALCULATEHASH_IO_EXCEPTION,
- ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN,
- ERROR_CHECKOS_INVALID_OPERATING_SYSTEM,
- ERROR_CHECKREGEX_IO_EXCEPTION,
- ERROR_CONFIGURATION_GENERIC_ERROR,
- ERROR_CONFIGURATION_INVALID_YAML,
- ERROR_CONFIGURATION_LOOPS_INVALID_RANGE,
- ERROR_DISCOVERFILE_FILE_NOT_FOUND,
- ERROR_EVALUATE_COMPILATION_FAILED,
- ERROR_EVALUATE_NOT_BOOLEAN_VALUE,
- ERROR_EXTRACTOR_IO_ERROR,
- ERROR_FILETYPE_NOT_A_FILE,
- ERROR_FILETYPE_UNKNOWN_EXTENSION,
- ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION,
- ERROR_GETCANONICALFILE_IO_EXCEPTION,
- ERROR_GETCANONICALPATH_IO_EXCEPTION,
- ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION,
- ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED,
- ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR,
- ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR,
- ERROR_INTERPRETER_EXIT_RUNTIME_ERROR,
- ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION,
- ERROR_INTERPRETER_NULL_COMMAND,
- ERROR_INTERPRETER_RULE_NOT_FOUND,
- ERROR_INTERPRETER_UNKNOWN_KEYS,
- ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN,
- ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY,
- ERROR_LANGUAGE_INVALID_CODE,
- ERROR_LOAD_COULD_NOT_LOAD_XML,
- ERROR_PARSER_INVALID_PREAMBLE,
- ERROR_PARSER_LOOPS_INVALID_RANGE,
- ERROR_PARSER_LOOPS_NAN,
- ERROR_PARSER_TIMEOUT_INVALID_RANGE,
- ERROR_PARSER_TIMEOUT_NAN,
- ERROR_PARSERULE_GENERIC_ERROR,
- ERROR_PARSERULE_INVALID_YAML,
- ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION,
- ERROR_RULE_IDENTIFIER_AND_PATH,
- ERROR_RUN_GENERIC_EXCEPTION,
- ERROR_RUN_INTERRUPTED_EXCEPTION,
- ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION,
- ERROR_RUN_IO_EXCEPTION,
- ERROR_RUN_TIMEOUT_EXCEPTION,
- ERROR_RUN_TIMEOUT_INVALID_RANGE,
- ERROR_SAVE_COULD_NOT_SAVE_XML,
- ERROR_SESSION_OBTAIN_UNKNOWN_KEY,
- ERROR_SESSION_REMOVE_UNKNOWN_KEY,
- ERROR_TRIGGER_ACTION_NOT_FOUND,
- ERROR_TRIGGER_CALL_EXCEPTION,
- ERROR_VALIDATE_EMPTY_FILES_LIST,
- ERROR_VALIDATE_FILE_IS_RESERVED,
- ERROR_VALIDATE_FILES_IS_NOT_A_LIST,
- ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT,
- ERROR_VALIDATE_NO_DIRECTIVES_FOUND,
- ERROR_VALIDATE_ORPHAN_LINEBREAK,
- ERROR_VALIDATE_REFERENCE_IS_RESERVED,
- ERROR_VALIDATE_YAML_EXCEPTION,
- ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED,
- ERROR_VALIDATEBODY_ARGUMENTS_LIST,
- ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS,
- ERROR_VALIDATEBODY_MISSING_KEYS,
- ERROR_VALIDATEBODY_NULL_ARGUMENT_ID,
- ERROR_VALIDATEBODY_NULL_COMMAND,
- ERROR_VALIDATEBODY_NULL_COMMANDS_LIST,
- ERROR_VALIDATEHEADER_NULL_ID,
- ERROR_VALIDATEHEADER_NULL_NAME,
- ERROR_VALIDATEHEADER_WRONG_IDENTIFIER,
- ERROR_VELOCITY_FILE_NOT_FOUND,
- ERROR_VELOCITY_PARSE_EXCEPTION,
- ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION,
- ERROR_VELOCITY_IO_EXCEPTION,
- INFO_DISPLAY_EXCEPTION_MORE_DETAILS,
- INFO_DISPLAY_EXECUTION_TIME,
- INFO_DISPLAY_FILE_INFORMATION,
- INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE,
- INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND,
- INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE,
- INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE,
- INFO_LABEL_AUTHOR,
- INFO_LABEL_AUTHORS,
- INFO_LABEL_CONDITIONAL,
- INFO_LABEL_NO_AUTHORS,
- INFO_LABEL_ON_DETAILS,
- INFO_LABEL_ON_ERROR,
- INFO_LABEL_ON_FAILURE,
- INFO_LABEL_ON_SUCCESS,
- INFO_LABEL_UNNAMED_TASK,
- INFO_PARSER_ALL_RIGHTS_RESERVED,
- INFO_PARSER_DRYRUN_MODE_DESCRIPTION,
- INFO_PARSER_HELP_DESCRIPTION,
- INFO_PARSER_LANGUAGE_DESCRIPTION,
- INFO_PARSER_LOG_DESCRIPTION,
- INFO_PARSER_LOOPS_DESCRIPTION,
- INFO_PARSER_NOTES,
- INFO_PARSER_ONLY_HEADER,
- INFO_PARSER_PREAMBLE_DESCRIPTION,
- INFO_PARSER_SILENT_MODE_DESCRIPTION,
- INFO_PARSER_TIMEOUT_DESCRIPTION,
- INFO_PARSER_VERBOSE_MODE_DESCRIPTION,
- INFO_PARSER_VERSION_DESCRIPTION,
- LOG_INFO_BEGIN_BUFFER,
- LOG_INFO_BOOLEAN_MODE,
- LOG_INFO_DIRECTIVES_BLOCK,
- LOG_INFO_END_BUFFER,
- LOG_INFO_INTERPRET_RULE,
- LOG_INFO_INTERPRET_TASK,
- LOG_INFO_POTENTIAL_DIRECTIVE_FOUND,
- LOG_INFO_POTENTIAL_PATTERN_FOUND,
- LOG_INFO_RULE_LOCATION,
- LOG_INFO_SYSTEM_COMMAND,
- LOG_INFO_TASK_RESULT,
- LOG_INFO_VALIDATED_DIRECTIVES,
- LOG_INFO_WELCOME_MESSAGE,
- ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Pair.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Pair.java
deleted file mode 100644
index 427a5fca1d..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Pair.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-/**
- * Implements a pair of objects.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Pair<T, V> {
-
- // first element of the pair
- private final T firstElement;
-
- // second element of the pair
- private final V secondElement;
-
- /**
- * Constructor.
- * @param firstElement The first element.
- * @param secondElement The second element.
- */
- public Pair(T firstElement, V secondElement) {
- this.firstElement = firstElement;
- this.secondElement = secondElement;
- }
-
- /**
- * Gets the first element.
- * @return The first element.
- */
- public T getFirstElement() {
- return firstElement;
- }
-
- /**
- * Gets the second element.
- * @return The second element.
- */
- public V getSecondElement() {
- return secondElement;
- }
-
- /**
- * A shorter version for getting the first element.
- * @return The first element.
- */
- public T first() {
- return getFirstElement();
- }
-
- /**
- * A shorter version for getting the second element.
- * @return The second element.
- */
- public V second() {
- return getSecondElement();
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java
deleted file mode 100644
index 681c2f8fef..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Parser.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.controller.LoggingController;
-import com.github.cereda.arara.utils.CommonUtils;
-import com.github.cereda.arara.utils.DisplayUtils;
-import java.util.Locale;
-import java.util.Map;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-
-/**
- * Implements the command line parser.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Parser {
-
- // command line arguments to be
- // processed by this parser
- private final String[] arguments;
-
- // command line options, it will
- // group each option available
- // in arara
- private Options options;
-
- // each option available in
- // arara
- private Option version;
- private Option help;
- private Option log;
- private Option verbose;
- private Option silent;
- private Option dryrun;
- private Option timeout;
- private Option language;
- private Option loops;
- private Option preamble;
- private Option onlyheader;
-
- public Parser() {
- this.arguments = null;
- }
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Constructor.
- * @param arguments Array of strings representing the command line
- * arguments.
- */
- public Parser(String[] arguments) {
- this.arguments = arguments;
- }
-
- /**
- * Parses the command line arguments.
- * @return A boolean value indicating if the parsing should allow the
- * application to look for directives in the provided main file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public boolean parse() throws AraraException {
-
- // create new instances of the
- // command line options, including
- // the ones that require arguments
- version = new Option("V", "version", false, "");
- help = new Option("h", "help", false, "");
- log = new Option("l", "log", false, "");
- verbose = new Option("v", "verbose", false, "");
- silent = new Option("s", "silent", false, "");
- dryrun = new Option("n", "dry-run", false, "");
- timeout = new Option("t", "timeout", true, "");
- timeout.setArgName("number");
- language = new Option("L", "language", true, "");
- language.setArgName("code");
- loops = new Option("m", "max-loops", true, "");
- loops.setArgName("number");
- preamble = new Option("p", "preamble", true, "");
- preamble.setArgName("name");
- onlyheader = new Option("H", "header", false, "");
-
- // add all options to the options
- // group, so they are recognized
- // by the command line parser
- options = new Options();
- options.addOption(version);
- options.addOption(help);
- options.addOption(log);
- options.addOption(verbose);
- options.addOption(silent);
- options.addOption(dryrun);
- options.addOption(timeout);
- options.addOption(language);
- options.addOption(loops);
- options.addOption(preamble);
- options.addOption(onlyheader);
-
- // update all descriptions based
- // on the localized messages
- updateDescriptions();
-
- // a new default command line
- // parser is created and the
- // arguments are parsed
- CommandLineParser parser = new DefaultParser();
-
- try {
-
- CommandLine line = parser.parse(options, arguments);
-
- String reference;
- if (line.hasOption("language")) {
- ConfigurationController.getInstance().
- put("execution.language",
- new Language(line.getOptionValue("language"))
- );
- Locale locale = ((Language) ConfigurationController.
- getInstance().get("execution.language")).getLocale();
- messages.setLocale(locale);
- updateDescriptions();
- }
-
- if (line.hasOption("help")) {
- printVersion();
- printUsage();
- return false;
- }
-
- if (line.hasOption("version")) {
- printVersion();
- printNotes();
- return false;
- }
-
- if (line.getArgs().length != 1) {
- printVersion();
- printUsage();
- return false;
- } else {
- reference = line.getArgs()[0];
- }
-
- if (line.hasOption("timeout")) {
- try {
- long value = Long.parseLong(line.getOptionValue("timeout"));
- if (value <= 0) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_TIMEOUT_INVALID_RANGE
- )
- );
- } else {
- ConfigurationController.getInstance().
- put("execution.timeout", true);
- ConfigurationController.getInstance().
- put("execution.timeout.value", value);
- }
- } catch (NumberFormatException nfexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_TIMEOUT_NAN
- )
- );
- }
- }
-
- if (line.hasOption("max-loops")) {
- try {
- long value = Long.parseLong(
- line.getOptionValue("max-loops")
- );
- if (value <= 0) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_LOOPS_INVALID_RANGE
- )
- );
- } else {
- ConfigurationController.getInstance().
- put("execution.loops", value);
- }
- } catch (NumberFormatException nfexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_LOOPS_NAN
- )
- );
- }
- }
-
- if (line.hasOption("verbose")) {
- ConfigurationController.getInstance().
- put("execution.verbose", true);
- }
-
- if (line.hasOption("silent")) {
- ConfigurationController.getInstance().
- put("execution.verbose", false);
- }
-
- if (line.hasOption("dry-run")) {
- ConfigurationController.getInstance().
- put("execution.dryrun", true);
- ConfigurationController.getInstance().
- put("execution.errors.halt", false);
- }
-
- if (line.hasOption("log")) {
- ConfigurationController.getInstance().
- put("execution.logging", true);
- }
-
- if (line.hasOption("preamble")) {
- @SuppressWarnings("unchecked")
- Map<String, String> preambles = (Map<String, String>)
- ConfigurationController.getInstance().
- get("execution.preambles");
- if (preambles.containsKey(line.getOptionValue("preamble"))) {
- ConfigurationController.getInstance().
- put("execution.preamble.active", true);
- ConfigurationController.getInstance().
- put("execution.preamble.content",
- preambles.get(line.getOptionValue("preamble"))
- );
- }
- else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_PARSER_INVALID_PREAMBLE,
- line.getOptionValue("preamble")
- )
- );
- }
- }
-
- if (line.hasOption("header")) {
- ConfigurationController.getInstance().
- put("execution.header", true);
- }
-
- CommonUtils.discoverFile(reference);
- LoggingController.enableLogging((Boolean) ConfigurationController.
- getInstance().get("execution.logging"));
- ConfigurationController.getInstance().put("display.time", true);
-
- return true;
-
- } catch (ParseException pexception) {
- printVersion();
- printUsage();
- return false;
- }
- }
-
- /**
- * Prints the application usage.
- */
- private void printUsage() {
- HelpFormatter formatter = new HelpFormatter();
- StringBuilder builder = new StringBuilder();
- builder.append("arara [file [--dry-run] [--log] ");
- builder.append("[--verbose | --silent] [--timeout N] ");
- builder.append("[--max-loops N] [--language L] ");
- builder.append("[ --preamble P ] [--header] | --help | --version]");
- formatter.printHelp(builder.toString(), options);
- }
-
- /**
- * Prints the application version.
- */
- private void printVersion() {
- String year = (String) ConfigurationController.getInstance().
- get("application.copyright.year");
- String number = (String) ConfigurationController.getInstance().
- get("application.version");
- String revision = (String) ConfigurationController.getInstance().
- get("application.revision");
- StringBuilder builder = new StringBuilder();
- builder.append("arara ");
- builder.append(number);
- builder.append(" (revision ");
- builder.append(revision);
- builder.append(")");
- builder.append("\n");
- builder.append("Copyright (c) ").append(year).append(", ");
- builder.append("Paulo Roberto Massa Cereda");
- builder.append("\n");
- builder.append(messages.getMessage(
- Messages.INFO_PARSER_ALL_RIGHTS_RESERVED)
- );
- builder.append("\n");
- System.out.println(builder.toString());
- }
-
- /**
- * Print the application notes.
- */
- private void printNotes() {
- DisplayUtils.wrapText(messages.getMessage(Messages.INFO_PARSER_NOTES));
- }
-
- /**
- * Updates all the descriptions in order to make them reflect the current
- * language setting.
- */
- private void updateDescriptions() {
- version.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_VERSION_DESCRIPTION
- )
- );
- help.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_HELP_DESCRIPTION
- )
- );
- log.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_LOG_DESCRIPTION
- )
- );
- verbose.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_VERBOSE_MODE_DESCRIPTION
- )
- );
- silent.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_SILENT_MODE_DESCRIPTION
- )
- );
- dryrun.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_DRYRUN_MODE_DESCRIPTION
- )
- );
- timeout.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_TIMEOUT_DESCRIPTION
- )
- );
- language.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_LANGUAGE_DESCRIPTION
- )
- );
- loops.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_LOOPS_DESCRIPTION
- )
- );
- preamble.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_PREAMBLE_DESCRIPTION
- )
- );
- onlyheader.setDescription(
- messages.getMessage(
- Messages.INFO_PARSER_ONLY_HEADER
- )
- );
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Resource.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Resource.java
deleted file mode 100644
index 58eaa0dc40..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Resource.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.utils.CommonUtils;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
-import org.apache.commons.lang.SystemUtils;
-import org.mvel2.templates.TemplateRuntime;
-
-/**
- * Implements the configuration resource model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Resource {
-
- // rule paths
- private List<String> paths;
-
- // file types
- private List<FileTypeResource> filetypes;
-
- // the application language
- private String language;
-
- // maximum number of loops
- private long loops;
-
- // verbose flag
- private boolean verbose;
-
- // logging flag
- private boolean logging;
-
- // database name
- private String dbname;
-
- // log name
- private String logname;
-
- // header flag
- private boolean header;
-
- // map of preambles
- private Map<String, String> preambles;
-
- // look and feel
- private String laf;
-
- /**
- * Gets the rule paths.
- * @return The rule paths.
- */
- public List<String> getPaths() {
- if (paths != null) {
-
- final Map<String, Object> map = new HashMap<String, Object>();
- Map<String, Object> user = new HashMap<String, Object>();
- user.put("home", SystemUtils.USER_HOME);
- user.put("dir", SystemUtils.USER_DIR);
- user.put("name", SystemUtils.USER_NAME);
- map.put("user", user);
-
- Collection<String> result = CollectionUtils.collect(
- paths, new Transformer<String, String>() {
- public String transform(String input) {
- String path = CommonUtils.removeKeyword(input);
- try {
- path = (String) TemplateRuntime.eval(path, map);
- }
- catch (RuntimeException nothandled) {
- // do nothing, gracefully fallback to
- // the default, unparsed path
- }
- return path;
- }
- });
- paths = new ArrayList<String>(result);
- }
- return paths;
- }
-
- /**
- * Sets the rule paths.
- * @param paths The rule paths.
- */
- public void setPaths(List<String> paths) {
- this.paths = paths;
- }
-
- /**
- * Gets the list of file types.
- * @return The list of file types.
- */
- public List<FileTypeResource> getFiletypes() {
- return filetypes;
- }
-
- /**
- * Sets the list of file types.
- * @param filetypes The list of file types.
- */
- public void setFiletypes(List<FileTypeResource> filetypes) {
- this.filetypes = filetypes;
- }
-
- /**
- * Gets the language.
- * @return The language.
- */
- public String getLanguage() {
- return CommonUtils.removeKeyword(language);
- }
-
- /**
- * Sets the language.
- * @param language The language.
- */
- public void setLanguage(String language) {
- this.language = language;
- }
-
- /**
- * Get the maximum number of loops.
- * @return The maximum number of loops.
- */
- public long getLoops() {
- return loops;
- }
-
- /**
- * Sets the maximum number of loops.
- * @param loops The maximum number of loops.
- */
- public void setLoops(long loops) {
- this.loops = loops;
- }
-
- /**
- * Checks if verbose mode is active.
- * @return A boolean value.
- */
- public boolean isVerbose() {
- return verbose;
- }
-
- /**
- * Sets the verbose mode.
- * @param verbose A boolean value.
- */
- public void setVerbose(boolean verbose) {
- this.verbose = verbose;
- }
-
- /**
- * Checks if logging mode is active.
- * @return A boolean value.
- */
- public boolean isLogging() {
- return logging;
- }
-
- /**
- * Sets the logging mode.
- * @param logging A boolean value.
- */
- public void setLogging(boolean logging) {
- this.logging = logging;
- }
-
- /**
- * Gets the database name.
- * @return The database name.
- */
- public String getDbname() {
- return CommonUtils.removeKeyword(dbname);
- }
-
- /**
- * Sets the database name.
- * @param dbname The database name.
- */
- public void setDbname(String dbname) {
- this.dbname = dbname;
- }
-
- /**
- * Gets the log name.
- * @return The log name.
- */
- public String getLogname() {
- return CommonUtils.removeKeyword(logname);
- }
-
- /**
- * Sets the log name.
- * @param logname The log name.
- */
- public void setLogname(String logname) {
- this.logname = logname;
- }
-
- /**
- * Gets the map of preambles.
- * @return Map of preambles.
- */
- public Map<String, String> getPreambles() {
- return preambles;
- }
-
- /**
- * Sets the map of preambles.
- * @param preambles Map of preambles.
- */
- public void setPreambles(Map<String, String> preambles) {
- this.preambles = preambles;
- }
-
- /**
- * Gets the logical value of the header flag.
- * @return Logical value of the header flag.
- */
- public boolean isHeader() {
- return header;
- }
-
- /**
- * Sets the logical value of the header flag.
- * @param header The header flag.
- */
- public void setHeader(boolean header) {
- this.header = header;
- }
-
- /**
- * Gets the look and feel reference.
- * @return The look and feel reference.
- */
- public String getLaf() {
- return CommonUtils.removeKeyword(laf);
- }
-
- /**
- * Sets the look and feel reference.
- * @param laf The look and feel reference.
- */
- public void setLaf(String laf) {
- this.laf = laf;
- }
-
-
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Rule.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Rule.java
deleted file mode 100644
index acf43cdf58..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Rule.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.utils.CommonUtils;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
-
-/**
- * Implements the rule model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Rule {
-
- // the rule identifier
- private String identifier;
-
- // the rule name
- private String name;
-
- // the list of authors
- private List<String> authors;
-
- // the list of commands
- private List<RuleCommand> commands;
-
- // the list of arguments
- private List<Argument> arguments;
-
- /**
- * Gets the rule identifier.
- * @return The rule identifier.
- */
- public String getIdentifier() {
- return CommonUtils.removeKeyword(identifier);
- }
-
- /**
- * Sets the rule identifier.
- * @param identifier The rule identifier.
- */
- public void setIdentifier(String identifier) {
- this.identifier = identifier;
- }
-
- /**
- * Gets the rule identifier.
- * @return The rule identifier.
- */
- public String getName() {
- return CommonUtils.removeKeyword(name);
- }
-
- /**
- * Sets the rule name.
- * @param name The rule name.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Gets the list of authors.
- * @return A list of authors.
- */
- public List<String> getAuthors() {
- if (authors != null) {
- Collection<String> result = CollectionUtils.collect(
- authors, new Transformer<String, String>() {
- public String transform(String input) {
- return CommonUtils.removeKeyword(input);
- }
- });
- authors = new ArrayList<String>(result);
- }
- return authors;
- }
-
- /**
- * Sets the list of authors.
- * @param authors The list of authors.
- */
- public void setAuthors(List<String> authors) {
- this.authors = authors;
- }
-
- /**
- * Gets the list of commands.
- * @return The list of commands.
- */
- public List<RuleCommand> getCommands() {
- return commands;
- }
-
- /**
- * Sets the list of commands.
- * @param commands The list of commands.
- */
- public void setCommands(List<RuleCommand> commands) {
- this.commands = commands;
- }
-
- /**
- * Gets the list of arguments.
- * @return The list of arguments.
- */
- public List<Argument> getArguments() {
- return arguments;
- }
-
- /**
- * Sets the list of arguments.
- * @param arguments The list of arguments.
- */
- public void setArguments(List<Argument> arguments) {
- this.arguments = arguments;
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/RuleCommand.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/RuleCommand.java
deleted file mode 100644
index e63430afeb..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/RuleCommand.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.utils.CommonUtils;
-
-/**
- * Implements the rule command model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class RuleCommand {
-
- // the command name
- private String name;
-
- // the command instruction
- private String command;
-
- // the exit status expression
- private String exit;
-
- /**
- * Gets the command name.
- * @return The command name.
- */
- public String getName() {
- return CommonUtils.removeKeyword(name);
- }
-
- /**
- * Sets the command name.
- * @param name The command name.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Gets the command instruction.
- * @return The command instruction.
- */
- public String getCommand() {
- return CommonUtils.removeKeyword(command);
- }
-
- /**
- * Sets the command instruction.
- * @param command The command instruction.
- */
- public void setCommand(String command) {
- this.command = command;
- }
-
- /**
- * Gets the exit status expression.
- * @return The exit status expression.
- */
- public String getExit() {
- return CommonUtils.removeKeyword(exit);
- }
-
- /**
- * Sets the exit status expression.
- * @param exit The exit status expression.
- */
- public void setExit(String exit) {
- this.exit = exit;
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Session.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Session.java
deleted file mode 100644
index 4462c5e369..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Session.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.controller.SessionController;
-
-/**
- * Implements the session model.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Session {
-
- // get the current instance from the
- // session controller
- private static final SessionController session =
- SessionController.getInstance();
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Inserts the object into the session, indexed by the provided key.
- * @param key The provided key.
- * @param value The value to be inserted.
- */
- public void insert(String key, Object value) {
- session.put(key, value);
- }
-
- /**
- * Removes the entry indexed by the provided key from the session.
- * @param key The provided key.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public void remove(String key) throws AraraException {
- if (session.contains(key)) {
- session.remove(key);
- } else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_SESSION_REMOVE_UNKNOWN_KEY,
- key
- )
- );
- }
- }
-
- /**
- * Checks if the provided key exists in the session.
- * @param key The provided key.
- * @return A boolean value indicating if the provided key exists in the
- * session.
- */
- public boolean exists(String key) {
- return session.contains(key);
- }
-
- /**
- * Clears the session.
- */
- public void forget() {
- session.clear();
- }
-
- /**
- * Gets the object indexed by the provided key from the session.
- * @param key The provided key.
- * @return The object indexed by the provided key.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public Object obtain(String key) throws AraraException {
- if (session.contains(key)) {
- return session.get(key);
- } else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_SESSION_OBTAIN_UNKNOWN_KEY,
- key
- )
- );
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/StopWatch.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/StopWatch.java
deleted file mode 100644
index da7062cf19..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/StopWatch.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-
-/**
- * Implements a stopwatch.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class StopWatch {
-
- // two variables indicating the
- // times the stopwatch started
- // and stopped
- private static long beginning = 0;
- private static long end = 0;
-
- // a variable to indicate the
- // stopwatch is enabled; so far,
- // it hasn't started, then it is
- // not enabled
- private static boolean enabled = false;
-
- /**
- * Starts the stopwatch.
- */
- public static void start() {
- beginning = System.nanoTime();
- enabled = true;
- }
-
- /**
- * Stops the stopwatch.
- */
- public static void stop() {
- end = System.nanoTime();
- }
-
- /**
- * Gets the string representation of the elapsed time.
- * @return A string representation of the elapsed time.
- */
- public static String getTime() {
- Language language = (Language) ConfigurationController.
- getInstance().get("execution.language");
- double result = enabled ? (double) (end - beginning) / 1000000000 : 0.0;
- return String.format(language.getLocale(), "%1.2f", result);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/model/Trigger.java b/support/arara/source/src/main/java/com/github/cereda/arara/model/Trigger.java
deleted file mode 100644
index 7d8ae6ce79..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/model/Trigger.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.model;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-
-/**
- * Implements the trigger model. The tool provides triggers, which are a way
- * to alter its internal behaviour according to a list of parameters.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Trigger {
-
- // the action name and its
- // list of parameters
- private final String action;
- private final List<Object> parameters;
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Constructor.
- * @param action The action name.
- * @param parameters The list of parameters.
- */
- public Trigger(String action, List<Object> parameters) {
- this.action = action;
- this.parameters = parameters;
- }
-
- /**
- * Gets the action name.
- * @return The action name.
- */
- public String getAction() {
- return action;
- }
-
- /**
- * Gets the list of parameters.
- * @return The list of parameters.
- */
- public List<Object> getParameters() {
- return parameters;
- }
-
- /**
- * Returns a textual representation of the current trigger.
- * @return A string containing a textual representation of the current
- * trigger.
- */
- @Override
- public String toString() {
- return "trigger";
- }
-
- /**
- * Processes the current trigger.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public void process() throws AraraException {
-
- Map<String, Callable<Object>> mapping =
- new HashMap<String, Callable<Object>>();
- mapping.put("halt", new Callable<Object>() {
- public Object call() {
- ConfigurationController.getInstance().put("trigger.halt", true);
- return null;
- }
- });
- if (mapping.containsKey(action)) {
- try {
- mapping.get(action).call();
- } catch (Exception exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_TRIGGER_CALL_EXCEPTION,
- action
- ),
- exception
- );
- }
- } else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_TRIGGER_ACTION_NOT_FOUND,
- action
- )
- );
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java
deleted file mode 100644
index fdd642e21d..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.model.Pair;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-/**
- * Implements utilitary methods for classloading and object instantiation.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class ClassLoadingUtils {
-
- /**
- * Loads a class from the provided file, potentially a Java archive.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class.
- */
- public static Pair<Integer, Class> loadClass(File file, String name) {
-
- // status and class to be returned,
- // it defaults to an object class
- int status = 0;
- Class value = Object.class;
-
- // if file does not exist, nothing
- // can be done, status is changed
- if (!file.exists()) {
- status = 1;
- } else {
-
- // classloading involves defining
- // a classloader and fetching the
- // desired class from it, based on
- // the provided file archive
- try {
-
- // creates a new classloader with
- // the provided file (potentially
- // a JAR file)
- URLClassLoader classloader = new URLClassLoader(
- new URL[]{
- file.toURI().toURL()
- },
- ClassLoadingUtils.class.getClassLoader()
- );
-
- // fetches the class from the
- // instantiated classloader
- value = Class.forName(name, true, classloader);
-
- } catch (MalformedURLException nothandled1) {
-
- // the file URL is incorrect,
- // update status accordingly
- status = 2;
-
- } catch (ClassNotFoundException nothandled2) {
-
- // the class was not found,
- // update status accordingly
- status = 3;
-
- }
- }
-
- // return a new pair based on the
- // current status and class holder
- return new Pair<Integer, Class>(status, value);
- }
-
- /**
- * Loads a class from the provided file, instantiating it.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class object.
- */
- public static Pair<Integer, Object> loadObject(File file, String name) {
-
- // load the corresponding class
- // based on the qualified name
- Pair<Integer, Class> pair = loadClass(file, name);
-
- // status and object to be returned,
- // it defaults to an object
- int status = pair.getFirstElement();
- Object value = new Object();
-
- // checks if the class actually
- // exists, otherwise simply
- // ignore instantiation
- if (status == 0) {
-
- // object instantiation relies
- // on the default constructor
- // (without arguments), class
- // must implement it
-
- // OBS: constructors with arguments
- // must be invoked through reflection
- try {
-
- // get the class reference from
- // the pair and instantiate it
- // by invoking the default
- // constructor (without arguments)
- value = pair.getSecondElement().newInstance();
-
- } catch (IllegalAccessException nothandled1) {
-
- // the object instantiation violated
- // an access policy, status is updated
- status = 4;
-
- } catch (InstantiationException nothandled2) {
-
- // an instantiation exception has
- // occurred, status is updated
- status = 5;
-
- }
- }
-
- // return a new pair based on the
- // current status and object holder
- return new Pair<Integer, Object>(status, value);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/CommonUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/CommonUtils.java
deleted file mode 100644
index 0263f64eac..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/CommonUtils.java
+++ /dev/null
@@ -1,954 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.controller.SystemCallController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Argument;
-import com.github.cereda.arara.model.Database;
-import com.github.cereda.arara.model.FileType;
-import com.github.cereda.arara.model.Messages;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.MissingFormatArgumentException;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.filefilter.NameFileFilter;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.SystemUtils;
-
-/**
- * Implements common utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class CommonUtils {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Checks if the input string is equal to a valid boolean value.
- * @param value The input string.
- * @return A boolean value represented by the provided string.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean checkBoolean(String value) throws AraraException {
- List<String> yes = Arrays.asList(
- new String[]{"yes", "true", "1", "on"}
- );
- List<String> no = Arrays.asList(
- new String[]{"no", "false", "0", "off"}
- );
- if (!union(yes, no).contains(value.toLowerCase())) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN,
- value
- )
- );
- } else {
- return yes.contains(value.toLowerCase());
- }
- }
-
- /**
- * Provides a union set operation between two lists.
- * @param <T> The list type.
- * @param list1 The first list.
- * @param list2 The second list.
- * @return The union of those two lists.
- */
- private static <T> List<T> union(List<T> list1, List<T> list2) {
- Set<T> elements = new HashSet<T>();
- elements.addAll(list1);
- elements.addAll(list2);
- return new ArrayList<T>(elements);
- }
-
- /**
- * Build a system-dependant path based on the path and the file.
- * @param path A string representing the path to be prepended.
- * @param file A string representing the file to be appended.
- * @return The full path as a string.
- */
- public static String buildPath(String path, String file) {
- return path.endsWith(File.separator) ?
- path.concat(file) : path.concat(File.separator).concat(file);
- }
-
- /**
- * Checks if the provided string is empty. It does not handle a null value.
- * @param string A string.
- * @return A boolean value indicating if the string is empty.
- */
- public static boolean checkEmptyString(String string) {
- return "".equals(string);
- }
-
- /**
- * Removes the keyword from the beginning of the provided string.
- * @param line A string to be analyzed.
- * @return The provided string without the keyword.
- */
- public static String removeKeyword(String line) {
- if (line != null) {
- Pattern pattern = Pattern.compile("^(\\s)*<arara>\\s");
- Matcher matcher = pattern.matcher(line);
- if (matcher.find()) {
- line = (line.substring(matcher.end(), line.length()));
- }
- line = line.trim();
- }
- return line;
- }
-
- /**
- * Discovers the file through string reference lookup and sets the
- * configuration accordingly.
- * @param reference The string reference.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static void discoverFile(String reference) throws AraraException {
- File file = lookupFile(reference);
- if (file == null) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_DISCOVERFILE_FILE_NOT_FOUND,
- reference,
- getFileTypesList()
- )
- );
- }
- }
-
- /**
- * Performs a file lookup based on a string reference.
- * @param reference The file reference as a string.
- * @return The file as result of the lookup operation.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static File lookupFile(String reference) throws AraraException {
- @SuppressWarnings("unchecked")
- List<FileType> types = (List<FileType>) ConfigurationController.
- getInstance().get("execution.filetypes");
- File file = new File(reference);
- String name = file.getName();
- String parent = getParentCanonicalPath(file);
- String path = buildPath(parent, name);
-
- // direct search, so we are considering
- // the reference as a complete name
- for (FileType type : types) {
- if (path.endsWith(".".concat(type.getExtension()))) {
- file = new File(path);
- if (file.exists()) {
- if (file.isFile()) {
- ConfigurationController.
- getInstance().
- put("execution.file.pattern",
- type.getPattern());
- ConfigurationController.
- getInstance().
- put("execution.reference", file);
- return file;
- }
- }
- }
- }
-
- // indirect search; in this case, we are considering
- // that the file reference has an implict extension,
- // so we need to add it and look again
- for (FileType type : types) {
- path = buildPath(parent, name.concat(".").
- concat(type.getExtension()));
- file = new File(path);
- if (file.exists()) {
- if (file.isFile()) {
- ConfigurationController.getInstance().
- put("execution.file.pattern", type.getPattern());
- ConfigurationController.getInstance().
- put("execution.reference", file);
- return file;
- }
- }
- }
- return null;
- }
-
- /**
- * Gets the parent canonical path of a file.
- * @param file The file.
- * @return The parent canonical path of a file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getParentCanonicalPath(File file)
- throws AraraException {
- try {
- String path = file.getCanonicalFile().getParent();
- return path;
- } catch (IOException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION
- ),
- exception
- );
- }
- }
-
- /**
- * Gets the canonical file from a file.
- * @param file The file.
- * @return The canonical file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static File getCanonicalFile(String file) throws AraraException {
- try {
- return (new File(file)).getCanonicalFile();
- } catch (IOException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_GETCANONICALFILE_IO_EXCEPTION
- ),
- exception
- );
- }
- }
-
- /**
- * Checks if the provided object is from a certain class.
- * @param clazz The class.
- * @param object The object.
- * @return A boolean value indicating if the provided object is from a
- * certain class.
- */
- public static boolean checkClass(Class clazz, Object object) {
- return clazz.isInstance(object);
- }
-
- /**
- * Helper method to flatten a potential list of lists into a list of
- * objects.
- * @param list First list.
- * @param flat Second list.
- */
- private static void flatten(List<?> list, List<Object> flat) {
- for (Object item : list) {
- if (item instanceof List<?>) {
- flatten((List<?>) item, flat);
- } else {
- flat.add(item);
- }
- }
- }
-
- /**
- * Flattens a potential list of lists into a list of objects.
- * @param list The list to be flattened.
- * @return The flattened list.
- */
- public static List<Object> flatten(List<?> list) {
- List<Object> result = new ArrayList<Object>();
- flatten(list, result);
- return result;
- }
-
- /**
- * Gets the list of file types, in order.
- * @return A string representation of the list of file types, in order.
- */
- public static String getFileTypesList() {
- @SuppressWarnings("unchecked")
- List<FileType> types = (List<FileType>) ConfigurationController.
- getInstance().get("execution.filetypes");
- return getCollectionElements(types, "[ ", " ]", " | ");
- }
-
- /**
- * Gets a string representation of a collection.
- * @param collection The collection.
- * @param open The opening string.
- * @param close The closing string.
- * @param separator The element separator.
- * @return A string representation of the provided collection.
- */
- public static String getCollectionElements(Collection collection,
- String open, String close, String separator) {
- StringBuilder builder = new StringBuilder();
- builder.append(open);
- builder.append(StringUtils.join(collection, separator));
- builder.append(close);
- return builder.toString();
- }
-
- /**
- * Gets a set of strings containing unknown keys from a map and a list. It
- * is a set difference from the keys in the map and the entries in the list.
- * @param parameters The map of parameters.
- * @param arguments The list of arguments.
- * @return A set of strings representing unknown keys from a map and a list.
- */
- public static Set<String> getUnknownKeys(Map<String, Object> parameters,
- List<Argument> arguments) {
- Collection<String> found = parameters.keySet();
- Collection<String> expected = CollectionUtils.collect(
- arguments, new Transformer<Argument, String>() {
- public String transform(Argument argument) {
- return argument.getIdentifier();
- }
- });
- Collection<String> difference = CollectionUtils.
- subtract(found, expected);
- return new HashSet<String>(difference);
- }
-
- /**
- * Gets the rule error header, containing the identifier and the path, if
- * any.
- * @return A string representation of the rule error header, containing the
- * identifier and the path, if any.
- */
- public static String getRuleErrorHeader() {
- if ((ConfigurationController.getInstance().
- contains("execution.info.rule.id")) &&
- (ConfigurationController.getInstance().
- contains("execution.info.rule.path"))) {
- String id = (String) ConfigurationController.getInstance().
- get("execution.info.rule.id");
- String path = (String) ConfigurationController.getInstance().
- get("execution.info.rule.path");
- return messages.getMessage(
- Messages.ERROR_RULE_IDENTIFIER_AND_PATH,
- id,
- path
- ).concat(" ");
- } else {
- return "";
- }
- }
-
- /**
- * Trims spaces from every string of a list of strings.
- * @param input The list of strings.
- * @return A new list of strings, with each element trimmed.
- */
- public static List<String> trimSpaces(List<String> input) {
- Collection<String> result = CollectionUtils.collect(
- input, new Transformer<String, String>() {
- public String transform(String input) {
- return input.trim();
- }
- });
- return new ArrayList<String>(result);
- }
-
- /**
- * Gets a human readable representation of a file size.
- * @param file The file.
- * @return A string representation of the file size.
- */
- public static String calculateFileSize(File file) {
- return FileUtils.byteCountToDisplaySize(file.length());
- }
-
- /**
- * Gets the date the provided file was last modified.
- * @param file The file.
- * @return A string representation of the date the provided file was last
- * modified.
- */
- public static String getLastModifiedInformation(File file) {
- SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
- return format.format(file.lastModified());
- }
-
- /**
- * Gets a list of all rule paths.
- * @return A list of all rule paths.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<String> getAllRulePaths() throws AraraException {
- @SuppressWarnings("unchecked")
- List<String> paths = (List<String>) ConfigurationController.
- getInstance().get("execution.rule.paths");
- List<String> result = new ArrayList<String>();
- for (String path : paths) {
- File location = new File(InterpreterUtils.construct(path, "quack"));
- result.add(getParentCanonicalPath(location));
- }
- return result;
- }
-
- /**
- * Gets the reference of the current file in execution. Note that this
- * method might return a value different than the main file provided in
- * the command line.
- * @return A reference of the current file in execution. Might be different
- * than the main file provided in the command line.
- */
- private static File getCurrentReference() {
- return (File) ConfigurationController.getInstance().
- get("execution.file");
- }
-
- /**
- * Calculates the CRC32 checksum of the provided file.
- * @param file The file.
- * @return A string containing the CRC32 checksum of the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String calculateHash(File file) throws AraraException {
- try {
- long result = FileUtils.checksumCRC32(file);
- return String.format("%08x", result);
- } catch (IOException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CALCULATEHASH_IO_EXCEPTION
- ),
- exception
- );
- }
- }
-
- /**
- * Gets the file type of a file.
- * @param file The file.
- * @return The corresponding file type.
- */
- public static String getFiletype(File file) {
- return getFiletype(file.getName());
- }
-
- /**
- * Gets the file type of a string representing the file.
- * @param name A string representing the file.
- * @return The corresponding file type.
- */
- public static String getFiletype(String name) {
- name = name.lastIndexOf(".") != -1 ?
- name.substring(name.lastIndexOf(".") + 1, name.length()) : "";
- return name;
- }
-
- /**
- * Gets the base name of a file.
- * @param file The file.
- * @return The corresponding base name.
- */
- public static String getBasename(File file) {
- return getBasename(file.getName());
- }
-
- /**
- * Gets the base name of a string representing the file.
- * @param name A string representing the file.
- * @return The corresponding base name.
- */
- public static String getBasename(String name) {
- int index = name.lastIndexOf(".") != -1 ?
- name.lastIndexOf(".") : name.length();
- return name.substring(0, index);
- }
-
- /**
- * Encloses the provided object in double quotes.
- * @param object The object.
- * @return A string representation of the provided object enclosed in double
- * quotes.
- */
- public static String addQuotes(Object object) {
- return "\"".concat(String.valueOf(object)).concat("\"");
- }
-
- /**
- * Generates a string based on a list of objects, separating each one of
- * them by one space.
- * @param objects A list of objects.
- * @return A string based on the list of objects, separating each one of
- * them by one space. Empty values are not considered.
- */
- public static String generateString(Object... objects) {
- List<String> values = new ArrayList<String>();
- for (Object object : objects) {
- if (!CommonUtils.checkEmptyString(String.valueOf(object))) {
- values.add(String.valueOf(object));
- }
- }
- return StringUtils.join(values, " ");
- }
-
- /**
- * Checks if a file exists.
- * @param file The file.
- * @return A boolean value indicating if the file exists.
- */
- public static boolean exists(File file) {
- return file.exists();
- }
-
- /**
- * Checks if a file exists based on its extension.
- * @param extension The extension.
- * @return A boolean value indicating if the file exists.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean exists(String extension) throws AraraException {
- File file = new File(getPath(extension));
- return file.exists();
- }
-
- /**
- * Checks if a file has changed since the last verification.
- * @param file The file.
- * @return A boolean value indicating if the file has changed since the last
- * verification.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean hasChanged(File file) throws AraraException {
- Database database = DatabaseUtils.load();
- HashMap<String, String> map = database.getMap();
- String path = getCanonicalPath(file);
- if (!file.exists()) {
- if (map.containsKey(path)) {
- map.remove(path);
- database.setMap(map);
- DatabaseUtils.save(database);
- return true;
- } else {
- return false;
- }
- } else {
- String hash = calculateHash(file);
- if (map.containsKey(path)) {
- String value = map.get(path);
- if (hash.equals(value)) {
- return false;
- } else {
- map.put(path, hash);
- database.setMap(map);
- DatabaseUtils.save(database);
- return true;
- }
- } else {
- map.put(path, hash);
- database.setMap(map);
- DatabaseUtils.save(database);
- return true;
- }
- }
- }
-
- /**
- * Checks if the file has changed since the last verification based on the
- * provided extension.
- * @param extension The provided extension.
- * @return A boolean value indicating if the file has changed since the last
- * verification.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean hasChanged(String extension) throws AraraException {
- File file = new File(getPath(extension));
- return hasChanged(file);
- }
-
- /**
- * Gets the full file path based on the provided extension.
- * @param extension The extension.
- * @return A string containing the full file path.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static String getPath(String extension) throws AraraException {
- String name = getBasename(getCurrentReference());
- String path = getParentCanonicalPath(getCurrentReference());
- name = name.concat(".").concat(extension);
- return buildPath(path, name);
- }
-
- /**
- * Gets the canonical path from the provided file.
- * @param file The file.
- * @return The canonical path from the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getCanonicalPath(File file) throws AraraException {
- try {
- return file.getCanonicalPath();
- } catch (IOException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_GETCANONICALPATH_IO_EXCEPTION
- ),
- exception
- );
- }
- }
-
- /**
- * Checks if the file based on the provided extension contains the provided
- * regex.
- * @param extension The file extension.
- * @param regex The regex.
- * @return A boolean value indicating if the file contains the provided
- * regex.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean checkRegex(String extension, String regex)
- throws AraraException {
- File file = new File(getPath(extension));
- return checkRegex(file, regex);
- }
-
- /**
- * Checks if the file contains the provided regex.
- * @param file The file.
- * @param regex The regex.
- * @return A boolean value indicating if the file contains the provided
- * regex.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean checkRegex(File file, String regex)
- throws AraraException {
- Charset charset = (Charset) ConfigurationController.
- getInstance().get("directives.charset");
- try {
- String text = FileUtils.readFileToString(file, charset.name());
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(text);
- return matcher.find();
- } catch (IOException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CHECKREGEX_IO_EXCEPTION,
- file.getName()
- ),
- exception
- );
- }
- }
-
- /**
- * Replicates a string pattern based on a list of objects, generating a list
- * as result.
- * @param pattern The string pattern.
- * @param values The list of objects to be merged with the pattern.
- * @return A list containing the string pattern replicated to each object
- * from the list.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<Object> replicateList(String pattern,
- List<Object> values) throws AraraException {
- List<Object> result = new ArrayList<Object>();
- for (Object value : values) {
- try {
- result.add(String.format(pattern, value));
- } catch (MissingFormatArgumentException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION
- ),
- exception
- );
- }
- }
- return result;
- }
-
- /**
- * Checks if the provided operating system string holds according to the
- * underlying operating system.
- * @param value A string representing an operating system.
- * @return A boolean value indicating if the provided string refers to the
- * underlying operating system.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean checkOS(String value) throws AraraException {
- Map<String, Boolean> values = new HashMap<String, Boolean>();
- values.put("windows", SystemUtils.IS_OS_WINDOWS);
- values.put("linux", SystemUtils.IS_OS_LINUX);
- values.put("mac", SystemUtils.IS_OS_MAC_OSX);
- values.put("unix", SystemUtils.IS_OS_UNIX);
- values.put("aix", SystemUtils.IS_OS_AIX);
- values.put("irix", SystemUtils.IS_OS_IRIX);
- values.put("os2", SystemUtils.IS_OS_OS2);
- values.put("solaris", SystemUtils.IS_OS_SOLARIS);
- values.put("cygwin", (Boolean) SystemCallController.
- getInstance().get("cygwin"));
- if (!values.containsKey(value.toLowerCase())) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CHECKOS_INVALID_OPERATING_SYSTEM,
- value
- )
- );
- }
- return values.get(value.toLowerCase());
- }
-
- /**
- * Returns the exit status of the application.
- * @return An integer representing the exit status of the application.
- */
- public static int getExitStatus() {
- return (Integer) ConfigurationController.
- getInstance().get("execution.status");
- }
-
- /**
- * Gets the system property according to the provided key, or resort to the
- * fallback value if an exception is thrown or if the key is invalid.
- * @param key The system property key.
- * @param fallback The fallback value.
- * @return A string containing the system property value or the fallback.
- */
- public static String getSystemProperty(String key, String fallback) {
- try {
- String result = System.getProperty(key, fallback);
- return result.equals("") ? fallback : result;
- } catch (Exception exception) {
- return fallback;
- }
- }
-
- /**
- * Gets the preamble content, converting a single string into a list of
- * strings, based on new lines.
- * @return A list of strings representing the preamble content.
- */
- public static List<String> getPreambleContent() {
- if (((Boolean) ConfigurationController.
- getInstance().get("execution.preamble.active")) == true) {
- return new ArrayList<String>(
- Arrays.asList(
- ((String) ConfigurationController.getInstance().
- get("execution.preamble.content")
- ).split("\n"))
- );
- }
- else {
- return new ArrayList<String>();
- }
- }
-
- /**
- * Generates a list of filenames from the provided command based on a list
- * of extensions for each underlying operating system.
- * @param command A string representing the command.
- * @return A list of filenames.
- */
- private static List<String> appendExtensions(String command) {
-
- // the resulting list, to hold the
- // filenames generated from the
- // provided command
- List<String> result = new ArrayList<String>();
-
- // list of extensions, specific for
- // each operating system (in fact, it
- // is more Windows specific)
- List<String> extensions;
-
- // the application is running on
- // Windows, so let's look for the
- // following extensions in order
- if (SystemUtils.IS_OS_WINDOWS) {
-
- // this list is actually a sublist from
- // the original Windows PATHEXT environment
- // variable which holds the list of executable
- // extensions that Windows supports
- extensions = Arrays.asList(".com", ".exe", ".bat", ".cmd");
- }
- else {
-
- // no Windows, so the default
- // extension will be just an
- // empty string
- extensions = Arrays.asList("");
- }
-
- // for each and every extension in the
- // list, let's build the corresponding
- // filename and add to the result
- for (String extension : extensions) {
- result.add(command.concat(extension));
- }
-
- // return the resulting list
- // holding the filenames
- return result;
- }
-
- /**
- * Checks if the provided command name is reachable from the system path.
- * @param command A string representing the command.
- * @return A logic value.
- */
- public static boolean isOnPath(String command) {
- try {
-
- // first and foremost, let's build the list
- // of filenames based on the underlying
- // operating system
- List<String> filenames = appendExtensions(command);
-
- // break the path into several parts
- // based on the path separator symbol
- StringTokenizer tokenizer = new StringTokenizer(
- System.getenv("PATH"),
- File.pathSeparator
- );
-
- // iterate through every part of the
- // path looking for each filename
- while (tokenizer.hasMoreTokens()) {
-
- // if the search does not return an empty
- // list, one of the filenames got a match,
- // and the command is available somewhere
- // in the system path
- if (
- !FileUtils.listFiles(
- new File(tokenizer.nextToken()),
- new NameFileFilter(filenames),
- null
- ).isEmpty()) {
-
- // command is found somewhere,
- // so it is on path
- return true;
- }
- }
-
- // nothing was found,
- // command is not on path
- return false;
- }
- catch (Exception exception) {
-
- // an exception was raised, simply
- // return and forget about it
- return false;
- }
- }
-
- /**
- * Gets the full base name of a file.
- * @param file The file.
- * @return The corresponding full base name.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getFullBasename(File file) throws AraraException {
-
- // if the provided file does not contain a
- // file separator, fallback to the usual
- // base name lookup
- if (!file.toString().contains(File.separator)) {
- return getBasename(file);
- }
- else {
-
- // we need to get the parent file, get the
- // canonical path and build the corresponding
- // full base name path
- File parent = file.getParentFile();
- String path = getCanonicalPath(parent == null ? file : parent);
- return buildPath(path, getBasename(file));
- }
- }
-
- /**
- * Checks whether a directory is under a root directory.
- * @param f1 Directory to be inspected.
- * @param f2 Root directory.
- * @return Logical value indicating whether the directoy is under root.
- * @throws AraraException There was a problem with path retrieval.
- */
- public static boolean isSubDirectory(File f1, File f2)
- throws AraraException {
- if (f1.isDirectory()) {
- return getCanonicalPath(f1).
- startsWith(
- getParentCanonicalPath(f2).concat(File.separator)
- );
- }
- else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY,
- f1.getName()
- )
- );
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/ConfigurationUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/ConfigurationUtils.java
deleted file mode 100644
index 7336110ebe..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/ConfigurationUtils.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.Arara;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.FileType;
-import com.github.cereda.arara.model.FileTypeResource;
-import com.github.cereda.arara.model.Messages;
-import com.github.cereda.arara.model.Resource;
-import java.io.File;
-import java.io.FileReader;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
-import org.apache.commons.lang.SystemUtils;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
-import org.yaml.snakeyaml.error.MarkedYAMLException;
-import org.yaml.snakeyaml.nodes.Tag;
-import org.yaml.snakeyaml.representer.Representer;
-
-/**
- * Implements configuration utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class ConfigurationUtils {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Gets the list of default file types provided by nightingale, in order.
- * @return The list of default file types, in order.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<FileType> getDefaultFileTypes() throws AraraException {
- return Arrays.asList(
- new FileType("tex"),
- new FileType("dtx"),
- new FileType("ltx"),
- new FileType("drv"),
- new FileType("ins")
- );
- }
-
- /**
- * Gets the configuration file located at the user home directory, if any.
- * @return The file reference to the external configuration, if any.
- */
- public static File getConfigFile() {
- List<String> names = Arrays.asList(
- ".araraconfig.yaml",
- "araraconfig.yaml",
- ".arararc.yaml",
- "arararc.yaml"
- );
-
- // look for configuration files in the user's working directory first
- for (String name : names) {
- String path = CommonUtils.buildPath(SystemUtils.USER_DIR, name);
- File file = new File(path);
- if (file.exists()) {
- return file;
- }
- }
-
- // if no configuration files are found in the user's working directory,
- // try to look up in a global directory, that is, the user home
- for (String name : names) {
- String path = CommonUtils.buildPath(SystemUtils.USER_HOME, name);
- File file = new File(path);
- if (file.exists()) {
- return file;
- }
- }
- return null;
- }
-
- /**
- * Validates the configuration file.
- * @param file The configuration file.
- * @return The configuration file as a resource.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Resource validateConfiguration(File file)
- throws AraraException {
-
- Representer representer = new Representer();
- representer.addClassTag(Resource.class, new Tag("!config"));
- Yaml yaml = new Yaml(new Constructor(Resource.class), representer);
- try {
- Resource resource = yaml.loadAs(new FileReader(file),
- Resource.class);
- if (resource.getFiletypes() != null) {
- List<FileTypeResource> filetypes = resource.getFiletypes();
- if (CollectionUtils.exists(filetypes,
- new Predicate<FileTypeResource>() {
- public boolean evaluate(FileTypeResource filetype) {
- return (filetype.getExtension() == null);
- }
- })) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION
- )
- );
- }
- }
- return resource;
- } catch (MarkedYAMLException yamlException) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CONFIGURATION_INVALID_YAML
- ),
- yamlException
- );
- } catch (Exception exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_CONFIGURATION_GENERIC_ERROR
- )
- );
- }
- }
-
- /**
- * Normalize a list of rule paths, removing all duplicates.
- * @param paths The list of rule paths.
- * @return A list of normalized paths, without duplicates.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<String> normalizePaths(List<String> paths)
- throws AraraException {
- paths.add(CommonUtils.buildPath(getApplicationPath(), "rules"));
- Set<String> set = new LinkedHashSet<String>(paths);
- List<String> result = new ArrayList<String>(set);
- return result;
- }
-
- /**
- * Normalize a list of file types, removing all duplicates.
- * @param types The list of file types.
- * @return A list of normalized file types, without duplicates.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<FileType> normalizeFileTypes(List<FileType> types)
- throws AraraException {
- types.addAll(getDefaultFileTypes());
- Set<FileType> set = new LinkedHashSet<FileType>(types);
- List<FileType> result = new ArrayList<FileType>(set);
- return result;
- }
-
- /**
- * Gets the canonical absolute application path.
- * @return The string representation of the canonical absolute application
- * path.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getApplicationPath() throws AraraException {
- try {
- String path = Arara.class.getProtectionDomain().
- getCodeSource().getLocation().getPath();
- path = URLDecoder.decode(path, "UTF-8");
- path = new File(path).getParentFile().getPath();
- return path;
- } catch (UnsupportedEncodingException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION
- ),
- exception
- );
- }
- }
-
- /**
- * Cleans the file name to avoid invalid entries.
- * @param name The file name.
- * @return A cleaned file name.
- */
- public static String cleanFileName(String name) {
- String result = (new File(name)).getName().trim();
- if (CommonUtils.checkEmptyString(result)) {
- return "arara";
- } else {
- return result.trim();
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DatabaseUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/DatabaseUtils.java
deleted file mode 100644
index 3a9b4eeea5..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DatabaseUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Database;
-import com.github.cereda.arara.model.Messages;
-import java.io.File;
-import org.simpleframework.xml.Serializer;
-import org.simpleframework.xml.core.Persister;
-
-/**
- * Implements database utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class DatabaseUtils {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Loads the XML file representing the database.
- * @return The database object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Database load() throws AraraException {
- if (!exists()) {
- return new Database();
- } else {
- File file = new File(getPath());
- try {
- Serializer serializer = new Persister();
- Database database = serializer.read(Database.class, file);
- return database;
- } catch (Exception exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_LOAD_COULD_NOT_LOAD_XML,
- file.getName()
- ),
- exception
- );
- }
- }
- }
-
- /**
- * Saves the database on a XML file.
- * @param database The database object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static void save(Database database) throws AraraException {
- File file = new File(getPath());
- try {
- Serializer serializer = new Persister();
- serializer.write(database, file);
- } catch (Exception exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_SAVE_COULD_NOT_SAVE_XML,
- file.getName()
- ),
- exception
- );
- }
- }
-
- /**
- * Checks if the XML file representing the database exists.
- * @return A boolean value indicating if the XML file exists.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static boolean exists() throws AraraException {
- File file = new File(getPath());
- return file.exists();
- }
-
- /**
- * Gets the path to the XML file representing the database.
- * @return A string representing the path to the XML file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static String getPath() throws AraraException {
- String name = ((String) ConfigurationController.
- getInstance().get("execution.database.name")).concat(".xml");
- String path = CommonUtils.getParentCanonicalPath(getReference());
- return CommonUtils.buildPath(path, name);
- }
-
- /**
- * Gets the main file reference.
- * @return The main file reference.
- */
- private static File getReference() {
- return (File) ConfigurationController.
- getInstance().get("execution.reference");
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveAssembler.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveAssembler.java
deleted file mode 100644
index 6f6f676ab5..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveAssembler.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Implements a directive assembler in order to help build a directive from a
- * list of strings.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class DirectiveAssembler {
-
- // this variable holds a list of
- // line numbers indicating which
- // lines composed the resulting
- // potential directive
- private final List<Integer> lineNumbers;
-
- // this variable holds the textual
- // representation of the directive
- private String text;
-
- /**
- * Constructor.
- */
- public DirectiveAssembler() {
- lineNumbers = new ArrayList<Integer>();
- text = "";
- }
-
- /**
- * Checks if an append operation is allowed.
- * @return A boolean value indicating if an append operation is allowed.
- */
- public boolean isAppendAllowed() {
- return !lineNumbers.isEmpty();
- }
-
- /**
- * Adds a line number to the assembler.
- * @param line An integer representing the line number.
- */
- public void addLineNumber(int line) {
- lineNumbers.add(line);
- }
-
- /**
- * Appends the provided line to the assembler text.
- * @param line The provided line.
- */
- public void appendLine(String line) {
- text = text.concat(" ").concat(line.trim());
- }
-
- /**
- * Gets the list of line numbers.
- * @return The list of line numbers.
- */
- public List<Integer> getLineNumbers() {
- return lineNumbers;
- }
-
- /**
- * Gets the text.
- * @return The assembler text, properly trimmed.
- */
- public String getText() {
- return text.trim();
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveResolver.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveResolver.java
deleted file mode 100644
index b0a1af850b..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveResolver.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import org.yaml.snakeyaml.nodes.Tag;
-import org.yaml.snakeyaml.resolver.Resolver;
-
-/**
- * This class implements a directive resolver.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class DirectiveResolver extends Resolver {
-
- /**
- * Adds implicit resolvers to the YAML model. For arara, I disabled
- * boolean and numeric values to be automatically parsed. They still can
- * be used through an explicit conversion in the rule context.
- */
- @Override
- protected void addImplicitResolvers() {
- addImplicitResolver(Tag.MERGE, MERGE, "<");
- addImplicitResolver(Tag.NULL, NULL, "~nN\0");
- addImplicitResolver(Tag.NULL, EMPTY, null);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveUtils.java
deleted file mode 100644
index 6ea0404f72..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DirectiveUtils.java
+++ /dev/null
@@ -1,438 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Conditional;
-import com.github.cereda.arara.model.Directive;
-import com.github.cereda.arara.model.Messages;
-import com.github.cereda.arara.model.Pair;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
-import org.yaml.snakeyaml.error.MarkedYAMLException;
-import org.yaml.snakeyaml.representer.Representer;
-
-/**
- * Implements directive utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class DirectiveUtils {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- // get the logger context from a factory
- private static final Logger logger =
- LoggerFactory.getLogger(DirectiveUtils.class);
-
- /**
- * Extracts a list of directives from a list of strings.
- * @param lines List of strings.
- * @return A list of directives.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<Directive> extractDirectives(List<String> lines)
- throws AraraException {
-
- boolean header = (Boolean) ConfigurationController.
- getInstance().get("execution.header");
- String regex = (String) ConfigurationController.
- getInstance().get("execution.file.pattern");
- Pattern linecheck = Pattern.compile(regex);
- regex = regex.concat((String) ConfigurationController.
- getInstance().get("application.pattern"));
- Pattern pattern = Pattern.compile(regex);
- List<Pair<Integer, String>> pairs =
- new ArrayList<Pair<Integer, String>>();
- Matcher matcher;
- for (int i = 0; i < lines.size(); i++) {
- matcher = pattern.matcher(lines.get(i));
- if (matcher.find()) {
- String line = lines.get(i).substring(
- matcher.end(),
- lines.get(i).length()
- );
- Pair<Integer, String> pair =
- new Pair<Integer, String>(i + 1, line);
- pairs.add(pair);
-
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_POTENTIAL_PATTERN_FOUND,
- (i + 1),
- line.trim()
- )
- );
- }
- else {
- if (header) {
- if (!checkLinePattern(linecheck, lines.get(i))) {
- break;
- }
- }
- }
- }
-
- if (pairs.isEmpty()) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_NO_DIRECTIVES_FOUND
- )
- );
- }
-
- List<DirectiveAssembler> assemblers
- = new ArrayList<DirectiveAssembler>();
- DirectiveAssembler assembler = new DirectiveAssembler();
- regex = (String) ConfigurationController.getInstance().
- get("directives.linebreak.pattern");
- pattern = Pattern.compile(regex);
- for (Pair<Integer, String> pair : pairs) {
- matcher = pattern.matcher(pair.getSecondElement());
- if (matcher.find()) {
- if (!assembler.isAppendAllowed()) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_ORPHAN_LINEBREAK,
- pair.getFirstElement()
- )
- );
- } else {
- assembler.addLineNumber(pair.getFirstElement());
- assembler.appendLine(matcher.group(1));
- }
- } else {
- if (assembler.isAppendAllowed()) {
- assemblers.add(assembler);
- }
- assembler = new DirectiveAssembler();
- assembler.addLineNumber(pair.getFirstElement());
- assembler.appendLine(pair.getSecondElement());
- }
- }
- if (assembler.isAppendAllowed()) {
- assemblers.add(assembler);
- }
-
- List<Directive> directives = new ArrayList<Directive>();
- for (DirectiveAssembler current : assemblers) {
- directives.add(generateDirective(current));
- }
- return directives;
-
- }
-
- /**
- * Generates a directive from a directive assembler.
- * @param assembler The directive assembler.
- * @return The corresponding directive.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Directive generateDirective(DirectiveAssembler assembler)
- throws AraraException {
- String regex = (String) ConfigurationController.getInstance().
- get("directives.pattern");
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(assembler.getText());
- if (matcher.find()) {
- Directive directive = new Directive();
- directive.setIdentifier(matcher.group(1));
- directive.setParameters(
- getParameters(matcher.group(3), assembler.getLineNumbers())
- );
- Conditional conditional = new Conditional();
- conditional.setType(getType(matcher.group(5)));
- conditional.setCondition(getCondition(matcher.group(6)));
- directive.setConditional(conditional);
- directive.setLineNumbers(assembler.getLineNumbers());
-
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_POTENTIAL_DIRECTIVE_FOUND,
- directive
- )
- );
-
- return directive;
- } else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT,
- CommonUtils.getCollectionElements(
- assembler.getLineNumbers(),
- "(",
- ")",
- ", "
- )
- )
- );
- }
- }
-
- /**
- * Gets the conditional type based on the input string.
- * @param text The input string.
- * @return The conditional type.
- */
- private static Conditional.ConditionalType getType(String text) {
- if (text == null) {
- return Conditional.ConditionalType.NONE;
- } else {
- if (text.equals("if")) {
- return Conditional.ConditionalType.IF;
- } else {
- if (text.equals("while")) {
- return Conditional.ConditionalType.WHILE;
- } else {
- if (text.equals("until")) {
- return Conditional.ConditionalType.UNTIL;
- } else {
- return Conditional.ConditionalType.UNLESS;
- }
- }
- }
- }
- }
-
- /**
- * Gets the condition from the input string.
- * @param text The input string.
- * @return A string representing the condition.
- */
- private static String getCondition(String text) {
- return text == null ? "" : text;
- }
-
- /**
- * Gets the parameters from the input string.
- * @param text The input string.
- * @param numbers The list of line numbers.
- * @return A map containing the directive parameters.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static Map<String, Object> getParameters(String text,
- List<Integer> numbers) throws AraraException {
-
- if (text == null) {
- return new HashMap<String, Object>();
- }
-
- Yaml yaml = new Yaml(
- new Constructor(),
- new Representer(),
- new DumperOptions(),
- new DirectiveResolver()
- );
- try {
- @SuppressWarnings("unchecked")
- HashMap<String, Object> map = yaml.loadAs(text, HashMap.class);
- return map;
- } catch (MarkedYAMLException exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_YAML_EXCEPTION,
- CommonUtils.getCollectionElements(
- numbers,
- "(",
- ")",
- ", "
- )
- ),
- exception
- );
- }
- }
-
- /**
- * Validates the list of directives, returning a new list.
- * @param directives The list of directives.
- * @return A new list of directives.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<Directive> validate(List<Directive> directives)
- throws AraraException {
-
- ArrayList<Directive> result = new ArrayList<Directive>();
- for (Directive directive : directives) {
- Map<String, Object> parameters = directive.getParameters();
-
- if (parameters.containsKey("file")) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_FILE_IS_RESERVED,
- CommonUtils.getCollectionElements(
- directive.getLineNumbers(),
- "(",
- ")",
- ", "
- )
- )
- );
- }
-
- if (parameters.containsKey("reference")) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_REFERENCE_IS_RESERVED,
- CommonUtils.getCollectionElements(
- directive.getLineNumbers(),
- "(",
- ")",
- ", "
- )
- )
- );
- }
-
- if (parameters.containsKey("files")) {
-
- Object holder = parameters.get("files");
- if (holder instanceof List) {
- @SuppressWarnings("unchecked")
- List<Object> files = (List<Object>) holder;
- parameters.remove("files");
- if (files.isEmpty()) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_EMPTY_FILES_LIST,
- CommonUtils.getCollectionElements(
- directive.getLineNumbers(),
- "(",
- ")",
- ", "
- )
- )
- );
- }
- for (Object file : files) {
- Map<String, Object> map = new HashMap<String, Object>();
- for (String key : parameters.keySet()) {
- map.put(key, parameters.get(key));
- }
- File representation = CommonUtils.
- getCanonicalFile(String.valueOf(file));
-
- map.put("reference", representation);
- map.put("file", representation.getName());
-
- Directive addition = new Directive();
- Conditional conditional = new Conditional();
- conditional.setCondition(directive.getConditional().
- getCondition()
- );
- conditional.setType(directive.getConditional().
- getType()
- );
- addition.setIdentifier(directive.getIdentifier());
- addition.setConditional(conditional);
- addition.setParameters(map);
- addition.setLineNumbers(directive.getLineNumbers());
- result.add(addition);
- }
- } else {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VALIDATE_FILES_IS_NOT_A_LIST,
- CommonUtils.getCollectionElements(
- directive.getLineNumbers(),
- "(",
- ")",
- ", "
- )
- )
- );
- }
- } else {
- File representation = (File) ConfigurationController.
- getInstance().get("execution.reference");
- parameters.put("file", representation.getName());
- parameters.put("reference", representation);
- directive.setParameters(parameters);
- result.add(directive);
- }
- }
-
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_VALIDATED_DIRECTIVES
- )
- );
- logger.info(DisplayUtils.displayOutputSeparator(
- messages.getMessage(
- Messages.LOG_INFO_DIRECTIVES_BLOCK
- )
- ));
- for (Directive directive : result) {
- logger.info(directive.toString());
- }
-
- logger.info(DisplayUtils.displaySeparator());
-
- return result;
- }
-
- /**
- * Checks if the provided line contains the corresponding pattern, based on
- * the file type, or an empty line.
- * @param pattern Pattern to be matched, based on the file type.
- * @param line Provided line.
- * @return Logical value indicating if the provided line contains the
- * corresponding pattern, based on the file type, or an empty line.
- */
- private static boolean checkLinePattern(Pattern pattern, String line) {
- return CommonUtils.checkEmptyString(line.trim()) ||
- pattern.matcher(line).find();
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DisplayUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/DisplayUtils.java
deleted file mode 100644
index 75cda6f99a..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/DisplayUtils.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Conditional;
-import com.github.cereda.arara.model.Messages;
-import com.github.cereda.arara.model.StopWatch;
-import java.io.File;
-import java.util.List;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implements display utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class DisplayUtils {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- // get the logger context from a factory
- private static final Logger logger =
- LoggerFactory.getLogger(DisplayUtils.class);
-
- /**
- * Displays the short version of the current entry in the terminal.
- * @param name Rule name.
- * @param task Task name.
- */
- private static void buildShortEntry(String name, String task) {
- int width = getWidth();
- int result = getLongestMatch();
- if (result >= width) {
- result = 10;
- }
- int space = width - result - 1;
- StringBuilder entry = new StringBuilder();
- entry.append("(").append(name).append(") ");
- entry.append(task).append(" ");
- String line = StringUtils.abbreviate(entry.toString(), space - 4);
- entry = new StringBuilder();
- entry.append(StringUtils.rightPad(line, space, ".")).append(" ");
- System.out.print(entry);
- }
-
- /**
- * Displays the short version of the current entry result in the terminal.
- * @param value The boolean value to be displayed.
- */
- private static void buildShortResult(boolean value) {
- int result = getLongestMatch();
- System.out.println(StringUtils.leftPad(getResult(value), result));
- }
-
- /**
- * Displays the current entry result in the terminal.
- * @param value The boolean value to be displayed.
- */
- public static void printEntryResult(boolean value) {
- ConfigurationController.getInstance().put("display.line", false);
- ConfigurationController.getInstance().put("display.result", true);
- ConfigurationController.getInstance()
- .put("execution.status", value ? 0 : 1);
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_TASK_RESULT
- ).concat(" ").concat(getResult(value))
- );
- if (!isDryRunMode()) {
- if (!isVerboseMode()) {
- buildShortResult(value);
- } else {
- buildLongResult(value);
- }
- }
- }
-
- /**
- * Displays a long version of the current entry result in the terminal.
- * @param value The boolean value to be displayed
- */
- private static void buildLongResult(boolean value) {
- int width = getWidth();
- System.out.println("\n".concat(StringUtils.leftPad(
- " ".concat(getResult(value)), width, "-"
- )));
- }
-
- /**
- * Displays the current entry in the terminal.
- * @param name The rule name.
- * @param task The task name.
- */
- public static void printEntry(String name, String task) {
- logger.info(
- messages.getMessage(
- Messages.LOG_INFO_INTERPRET_TASK,
- task,
- name
- )
- );
- ConfigurationController.getInstance().put("display.line", true);
- ConfigurationController.getInstance().put("display.result", false);
- if (!isDryRunMode()) {
- if (!isVerboseMode()) {
- buildShortEntry(name, task);
- } else {
- buildLongEntry(name, task);
- }
- } else {
- buildDryRunEntry(name, task);
- }
- }
-
- /**
- * Gets the length of the longest result match.
- * @return An integer value representing the longest result match.
- */
- private static int getLongestMatch() {
- String[] values = new String[]{
- messages.getMessage(Messages.INFO_LABEL_ON_SUCCESS),
- messages.getMessage(Messages.INFO_LABEL_ON_FAILURE),
- messages.getMessage(Messages.INFO_LABEL_ON_ERROR)
- };
- int max = values[0].length();
- for (String value : values) {
- if (max < value.length()) {
- max = value.length();
- }
- }
- return max;
- }
-
- /**
- * Displays a long version of the current entry in the terminal.
- * @param name Rule name.
- * @param task Task name.
- */
- private static void buildLongEntry(String name, String task) {
- if (ConfigurationController.getInstance().contains("display.rolling")) {
- addNewLine();
- } else {
- ConfigurationController.getInstance().put("display.rolling", true);
- }
- StringBuilder line = new StringBuilder();
- line.append("(").append(name).append(") ");
- line.append(task);
- System.out.println(displaySeparator());
- System.out.println(StringUtils.abbreviate(line.toString(), getWidth()));
- System.out.println(displaySeparator());
- }
-
- /**
- * Displays a dry-run version of the current entry in the terminal.
- * @param name The rule name.
- * @param task The task name.
- */
- private static void buildDryRunEntry(String name, String task) {
- if (ConfigurationController.getInstance().contains("display.rolling")) {
- addNewLine();
- } else {
- ConfigurationController.getInstance().put("display.rolling", true);
- }
- StringBuilder line = new StringBuilder();
- line.append("[DR] (").append(name).append(") ");
- line.append(task);
- System.out.println(StringUtils.abbreviate(line.toString(), getWidth()));
- System.out.println(displaySeparator());
- }
-
- /**
- * Displays the exception in the terminal.
- * @param exception The exception object.
- */
- public static void printException(AraraException exception) {
- ConfigurationController.getInstance().put("display.exception", true);
- ConfigurationController.getInstance().put("execution.status", 2);
- boolean display = false;
- if (ConfigurationController.getInstance().contains("display.line")) {
- display = (Boolean) ConfigurationController.
- getInstance().get("display.line");
- }
- if (ConfigurationController.getInstance().contains("display.result")) {
- if (((Boolean) ConfigurationController.
- getInstance().get("display.result")) == true) {
- addNewLine();
- }
- }
- if (display) {
- if (!isDryRunMode()) {
- if (!isVerboseMode()) {
- buildShortError();
- } else {
- buildLongError();
- }
- addNewLine();
- }
- }
- String text = exception.hasException() ?
- exception.getMessage().concat(" ").concat(
- messages.getMessage(
- Messages.INFO_DISPLAY_EXCEPTION_MORE_DETAILS
- )
- )
- : exception.getMessage();
- logger.error(text);
- wrapText(text);
- if (exception.hasException()) {
- addNewLine();
- displayDetailsLine();
- String details = exception.getException().getMessage();
- logger.error(details);
- wrapText(details);
- }
- }
-
- /**
- * Gets the string representation of the provided boolean value.
- * @param value The boolean value.
- * @return The string representation.
- */
- private static String getResult(boolean value) {
- return (value == true ?
- messages.getMessage(
- Messages.INFO_LABEL_ON_SUCCESS
- )
- : messages.getMessage(Messages.INFO_LABEL_ON_FAILURE));
- }
-
- /**
- * Displays the short version of an error in the terminal.
- */
- private static void buildShortError() {
- int result = getLongestMatch();
- System.out.println(StringUtils.leftPad(
- messages.getMessage(
- Messages.INFO_LABEL_ON_ERROR
- ),
- result
- ));
- }
-
- /**
- * Displays the long version of an error in the terminal.
- */
- private static void buildLongError() {
- String line = StringUtils.leftPad(
- " ".concat(messages.getMessage(Messages.INFO_LABEL_ON_ERROR)),
- getWidth(), "-");
- System.out.println(line);
- }
-
- /**
- * Gets the default terminal width defined in the settings.
- * @return An integer representing the terminal width.
- */
- private static int getWidth() {
- return (Integer) ConfigurationController.
- getInstance().get("application.width");
- }
-
- /**
- * Displays the provided text wrapped nicely according to the default
- * terminal width.
- * @param text The text to be displayed.
- */
- public static void wrapText(String text) {
- System.out.println(WordUtils.wrap(text, getWidth()));
- }
-
- /**
- * Checks if the execution is in dry-run mode.
- * @return A boolean value indicating if the execution is in dry-run mode.
- */
- private static boolean isDryRunMode() {
- return (Boolean) ConfigurationController.
- getInstance().get("execution.dryrun");
- }
-
- /**
- * Checks if the execution is in verbose mode.
- * @return A boolean value indicating if the execution is in verbose mode.
- */
- private static boolean isVerboseMode() {
- return (Boolean) ConfigurationController.
- getInstance().get("execution.verbose");
- }
-
- /**
- * Displays the rule authors in the terminal.
- * @param authors The list of authors.
- */
- public static void printAuthors(List<String> authors) {
- StringBuilder line = new StringBuilder();
- line.append(authors.size() == 1 ?
- messages.getMessage(Messages.INFO_LABEL_AUTHOR)
- : messages.getMessage(Messages.INFO_LABEL_AUTHORS));
- String text = authors.isEmpty() ?
- messages.getMessage(Messages.INFO_LABEL_NO_AUTHORS)
- : CommonUtils.getCollectionElements(
- CommonUtils.trimSpaces(authors), "", "", ", ");
- line.append(" ").append(text);
- wrapText(line.toString());
- }
-
- /**
- * Displays the current conditional in the terminal.
- * @param conditional The conditional object.
- */
- public static void printConditional(Conditional conditional) {
- if (conditional.getType() != Conditional.ConditionalType.NONE) {
- StringBuilder line = new StringBuilder();
- line.append(messages.getMessage(Messages.INFO_LABEL_CONDITIONAL));
- line.append(" (");
- line.append(String.valueOf(conditional.getType()));
- line.append(") ").append(conditional.getCondition());
- wrapText(line.toString());
- }
- }
-
- /**
- * Displays the file information in the terminal.
- */
- public static void printFileInformation() {
- File file = (File) ConfigurationController.
- getInstance().get("execution.reference");
- String version = (String) ConfigurationController.
- getInstance().get("application.version");
- String revision = (String) ConfigurationController.
- getInstance().get("application.revision");
- String line = messages.getMessage(
- Messages.INFO_DISPLAY_FILE_INFORMATION,
- file.getName(),
- CommonUtils.calculateFileSize(file),
- CommonUtils.getLastModifiedInformation(file)
- );
- logger.info(messages.getMessage(
- Messages.LOG_INFO_WELCOME_MESSAGE,
- version,
- revision
- ));
- logger.info(displaySeparator());
- logger.info(String.format("::: arara @ %s",
- getApplicationPath()
- ));
- logger.info(String.format("::: Java %s, %s",
- CommonUtils.getSystemProperty("java.version",
- "[unknown version]"),
- CommonUtils.getSystemProperty("java.vendor",
- "[unknown vendor]")
- ));
- logger.info(String.format("::: %s",
- CommonUtils.getSystemProperty("java.home",
- "[unknown location]")
- ));
- logger.info(String.format("::: %s, %s, %s",
- CommonUtils.getSystemProperty("os.name",
- "[unknown OS name]"),
- CommonUtils.getSystemProperty("os.arch",
- "[unknown OS arch]"),
- CommonUtils.getSystemProperty("os.version",
- "[unknown OS version]")
- ));
- logger.info(String.format("::: user.home @ %s",
- CommonUtils.getSystemProperty("user.home",
- "[unknown user's home directory]")
- ));
- logger.info(String.format("::: user.dir @ %s",
- CommonUtils.getSystemProperty("user.dir",
- "[unknown user's working directory]")
- ));
- logger.info(String.format("::: CF @ %s",
- (String) ConfigurationController.
- getInstance().get("execution.configuration.name")
- ));
- logger.info(displaySeparator());
- logger.info(line);
- wrapText(line);
- addNewLine();
- }
-
- /**
- * Displays the elapsed time in the terminal.
- */
- public static void printTime() {
- if (ConfigurationController.getInstance().contains("display.time")) {
- if ((ConfigurationController.getInstance().contains("display.line"))
- || (ConfigurationController.getInstance().
- contains("display.exception"))) {
- addNewLine();
- }
- String text = messages.getMessage(
- Messages.INFO_DISPLAY_EXECUTION_TIME, StopWatch.getTime());
- logger.info(text);
- wrapText(text);
- }
- }
-
- /**
- * Displays the application logo in the terminal.
- */
- public static void printLogo() {
- StringBuilder builder = new StringBuilder();
- builder.append(" __ _ _ __ __ _ _ __ __ _ ").append("\n");
- builder.append(" / _` | '__/ _` | '__/ _` |").append("\n");
- builder.append("| (_| | | | (_| | | | (_| |").append("\n");
- builder.append(" \\__,_|_| \\__,_|_| \\__,_|");
- System.out.println(builder.toString());
- addNewLine();
- }
-
- /**
- * Adds a new line in the terminal.
- */
- private static void addNewLine() {
- System.out.println();
- }
-
- /**
- * Displays a line containing details.
- */
- private static void displayDetailsLine() {
- String line = messages.getMessage(
- Messages.INFO_LABEL_ON_DETAILS).concat(" ");
- line = StringUtils.rightPad(
- StringUtils.abbreviate(line, getWidth()), getWidth(), "-");
- System.out.println(line);
- }
-
- /**
- * Gets the output separator with the provided text.
- * @param message The provided text.
- * @return A string containing the output separator with the provided text.
- */
- public static String displayOutputSeparator(String message) {
- return StringUtils.center(" ".concat(message).concat(" "),
- getWidth(), "-");
- }
-
- /**
- * Gets the line separator.
- * @return A string containing the line separator.
- */
- public static String displaySeparator() {
- return StringUtils.repeat("-", getWidth());
- }
-
- /**
- * Gets the application path.
- * @return A string containing the application path.
- */
- private static String getApplicationPath() {
- try {
- return ConfigurationUtils.getApplicationPath();
- }
- catch (AraraException ae) {
- return "[unknown application path]";
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/FileHandlingUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/FileHandlingUtils.java
deleted file mode 100644
index fdd1ab36c6..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/FileHandlingUtils.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.commons.io.FileUtils;
-
-/**
- * Implements file handling utilitary methods.
- *
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class FileHandlingUtils {
-
- /**
- * Writes the string to a file, using UTF-8 as default encoding.
- * @param file The file.
- * @param text The string to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(File file, String text, boolean append) {
- try {
-
- // try to write the provided
- // string to the file, with
- // UTF-8 as encoding
- FileUtils.writeStringToFile(file, text, "UTF-8", append);
- return true;
-
- } catch (IOException nothandled) {
-
- // if something bad happens,
- // gracefully fallback to
- // reporting the failure
- return false;
- }
- }
-
- /**
- * Writes the string list to a file, using UTF-8 as default encoding.
- * @param file The file.
- * @param lines The string list to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(File file, List<String> lines,
- boolean append) {
- try {
-
- // try to write the provided
- // string lists to the file,
- // with UTF-8 as encoding
- FileUtils.writeLines(file, "UTF-8", lines, append);
- return true;
-
- } catch (IOException nothandled) {
-
- // if something bad happens,
- // gracefully fallback to
- // reporting the failure
- return false;
- }
- }
-
- /**
- * Reads the provided file into a list of strings.
- * @param file The file.
- * @return A list of strings.
- */
- public static List<String> readFromFile(File file) {
- try {
-
- // returns the contents of
- // the provided file as
- // a list of strings
- return FileUtils.readLines(file, "UTF-8");
-
- } catch (IOException nothandled) {
-
- // if something bad happens,
- // gracefully fallback to
- // an empty file list
- return new ArrayList<String>();
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/FileSearchingUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/FileSearchingUtils.java
deleted file mode 100644
index 9f0c03c143..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/FileSearchingUtils.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.filefilter.FalseFileFilter;
-import org.apache.commons.io.filefilter.TrueFileFilter;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
-
-/**
- * Implements file searching utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class FileSearchingUtils {
-
- /**
- * List all files from the provided directory according to the list of
- * extensions. The leading dot must be omitted, unless it is part of the
- * extension.
- * @param directory The provided directory.
- * @param extensions The list of extensions.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByExtensions(File directory,
- List<String> extensions, boolean recursive) {
- try {
-
- // convert the provided extension
- // list to an extension array
- String[] array = new String[extensions.size()];
- array = extensions.toArray(array);
-
- // return the result of the
- // provided search
- return new ArrayList<File>(
- FileUtils.listFiles(directory, array, recursive)
- );
- } catch (Exception nothandled) {
-
- // if something bad happens,
- // gracefully fallback to
- // an empty file list
- return new ArrayList<File>();
- }
- }
-
- /**
- * List all files from the provided directory matching the list of file
- * name patterns. Such list can contain wildcards.
- * @param directory The provided directory.
- * @param patterns The list of file name patterns.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByPatterns(File directory,
- List<String> patterns, boolean recursive) {
- try {
-
- // return the result of the provided
- // search, with the wildcard filter
- // and a potential recursive search
- return new ArrayList<File>(
- FileUtils.listFiles(
- directory,
- new WildcardFileFilter(patterns),
- recursive
- ? TrueFileFilter.INSTANCE
- : FalseFileFilter.INSTANCE
- )
- );
- } catch (Exception nothandled) {
-
- // if something bad happens,
- // gracefully fallback to
- // an empty file list
- return new ArrayList<File>();
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/InterpreterUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/InterpreterUtils.java
deleted file mode 100644
index d60de0884b..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/InterpreterUtils.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Argument;
-import com.github.cereda.arara.model.Command;
-import com.github.cereda.arara.model.Conditional;
-import com.github.cereda.arara.model.Messages;
-import com.github.cereda.arara.model.Rule;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.zeroturnaround.exec.InvalidExitValueException;
-import org.zeroturnaround.exec.ProcessExecutor;
-import org.zeroturnaround.exec.listener.ShutdownHookProcessDestroyer;
-
-/**
- * Implements interpreter utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class InterpreterUtils {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- // get the logger context from a factory
- private static final Logger logger =
- LoggerFactory.getLogger(InterpreterUtils.class);
-
- /**
- * Gets a list of all rule arguments.
- * @param rule The provided rule.
- * @return A list of strings containing all rule arguments.
- */
- public static List<String> getRuleArguments(Rule rule) {
- Collection<String> result = CollectionUtils.collect(
- rule.getArguments(), new Transformer<Argument, String>() {
- public String transform(Argument input) {
- return input.getIdentifier();
- }
- });
- return new ArrayList<String>(result);
- }
-
- /**
- * Checks if the current conditional has a prior evaluation.
- * @param conditional The current conditional object.
- * @return A boolean value indicating if the current conditional has a prior
- * evaluation.
- */
- public static boolean runPriorEvaluation(Conditional conditional) {
- if (((Boolean) ConfigurationController.getInstance().
- get("execution.dryrun")) == true) {
- return false;
- }
- switch (conditional.getType()) {
- case IF:
- case WHILE:
- case UNLESS:
- return true;
- default:
- return false;
- }
- }
-
- /**
- * Runs the command in the underlying operating system.
- * @param command An object representing the command.
- * @return An integer value representing the exit code.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static int run(Object command) throws AraraException {
- boolean verbose = (Boolean) ConfigurationController.
- getInstance().get("execution.verbose");
- boolean timeout = (Boolean) ConfigurationController.
- getInstance().get("execution.timeout");
- long value = (Long) ConfigurationController.
- getInstance().get("execution.timeout.value");
- TimeUnit unit = (TimeUnit) ConfigurationController.
- getInstance().get("execution.timeout.unit");
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- ProcessExecutor executor = new ProcessExecutor();
- if (CommonUtils.checkClass(Command.class, command)) {
- executor = executor.command(((Command) command).getElements());
- if (((Command) command).hasWorkingDirectory()) {
- executor = executor.directory(
- ((Command) command).getWorkingDirectory()
- );
- }
- } else {
- executor = executor.commandSplit((String) command);
- }
- if (timeout) {
- if (value == 0) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_RUN_TIMEOUT_INVALID_RANGE
- )
- );
- }
- executor = executor.timeout(value, unit);
- }
- TeeOutputStream tee;
- if (verbose) {
- tee = new TeeOutputStream(System.out, buffer);
- executor = executor.redirectInput(System.in);
- } else {
- tee = new TeeOutputStream(buffer);
- }
- executor = executor.redirectOutput(tee).redirectError(tee);
- ShutdownHookProcessDestroyer hook = new ShutdownHookProcessDestroyer();
- executor = executor.addDestroyer(hook);
- try {
- int exit = executor.execute().getExitValue();
- logger.info(DisplayUtils.displayOutputSeparator(
- messages.getMessage(
- Messages.LOG_INFO_BEGIN_BUFFER
- )
- ));
- logger.info(buffer.toString());
- logger.info(DisplayUtils.displayOutputSeparator(
- messages.getMessage(
- Messages.LOG_INFO_END_BUFFER
- )
- ));
- return exit;
- } catch (IOException ioexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_RUN_IO_EXCEPTION
- ),
- ioexception
- );
- } catch (InterruptedException iexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_RUN_INTERRUPTED_EXCEPTION
- ),
- iexception
- );
- } catch (InvalidExitValueException ievexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION
- ),
- ievexception
- );
- } catch (TimeoutException texception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_RUN_TIMEOUT_EXCEPTION
- ),
- texception
- );
- } catch (Exception exception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_RUN_GENERIC_EXCEPTION
- ),
- exception
- );
- }
- }
-
- /**
- * Builds the rule path based on the rule name and returns the corresponding
- * file location.
- * @param name The rule name.
- * @return The rule file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static File buildRulePath(String name) throws AraraException {
- @SuppressWarnings("unchecked")
- List<String> paths = (List<String>) ConfigurationController.
- getInstance().get("execution.rule.paths");
- for (String path : paths) {
- File location = new File(construct(path, name));
- if (location.exists()) {
- return location;
- }
- }
- return null;
- }
-
- /**
- * Constructs the path given the current path and the rule name.
- * @param path The current path.
- * @param name The rule name.
- * @return The constructed path.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String construct(String path, String name)
- throws AraraException {
- name = name.concat(".yaml");
- File location = new File(path);
- if (location.isAbsolute()) {
- return CommonUtils.buildPath(path, name);
- } else {
- File reference = (File) ConfigurationController.
- getInstance().get("execution.reference");
- String parent = CommonUtils.buildPath(
- CommonUtils.getParentCanonicalPath(reference), path);
- return CommonUtils.buildPath(parent, name);
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/MessageUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/MessageUtils.java
deleted file mode 100644
index b36bda8808..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/MessageUtils.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import javax.swing.JOptionPane;
-import javax.swing.UIManager;
-
-/**
- * Implements utilitary methods for displaying messages.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class MessageUtils {
-
- // holds the default width for the
- // message body, in pixels
- private static final int WIDTH = 250;
-
- // let's start the UI manager and set
- // the default look and feel to be as
- // close as possible to the system
- static {
-
- // get the current look and feel
- String laf = (String) ConfigurationController.
- getInstance().get("ui.lookandfeel");
-
- // check if one is actually set
- if (!laf.equals("none")) {
-
- // use a special keyword to indicate
- // the use of a system look and feel
- if (laf.equals("system")) {
- laf = UIManager.getSystemLookAndFeelClassName();
- }
-
- // let's try it, in case it fails,
- // rely to the default look and feel
- try {
-
- // get the system look and feel name
- // and try to set it as default
- UIManager.setLookAndFeel(laf);
- }
- catch (Exception exception) {
- // quack, quack, quack
- }
-
- }
- }
-
- /**
- * Normalizes the icon type to one of the five available icons.
- * @param value An integer value.
- * @return The normalized integer value.
- */
- private static int normalizeIconType(int value) {
-
- // do the normalization according to the available
- // icons in the underlying message implementation
- switch (value) {
- case 1:
- value = JOptionPane.ERROR_MESSAGE;
- break;
- case 2:
- value = JOptionPane.INFORMATION_MESSAGE;
- break;
- case 3:
- value = JOptionPane.WARNING_MESSAGE;
- break;
- case 4:
- value = JOptionPane.QUESTION_MESSAGE;
- break;
- default:
- value = JOptionPane.PLAIN_MESSAGE;
- break;
- }
- return value;
- }
-
- /**
- * Normalizes the message width, so only valid nonzero values are accepted.
- * @param value An integer value corresponding to the message width.
- * @return The normalized width.
- */
- private static int normalizeMessageWidth(int value) {
- return (value > 0 ? value : WIDTH);
- }
-
- /**
- * Shows the message.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- public static void showMessage(int width, int type,
- String title, String text) {
-
- // effectively shows the message based
- // on the provided parameters
- JOptionPane.showMessageDialog(
- null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text
- ),
- title,
- normalizeIconType(type)
- );
- }
-
- /**
- * Shows the message. It relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- public static void showMessage(int type, String title, String text) {
- showMessage(WIDTH, type, title, text);
- }
-
- /**
- * Shows a message with options presented as an array of buttons.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- public static int showOptions(int width, int type, String title,
- String text, Object... buttons) {
-
- // returns the index of the selected button,
- // zero if nothing is selected
- return JOptionPane.showOptionDialog(
- null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text
- ),
- title,
- JOptionPane.DEFAULT_OPTION,
- normalizeIconType(type),
- null,
- buttons,
- buttons[0]
- ) + 1;
- }
-
- /**
- * Shows a message with options presented as an array of buttons. It relies
- * on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- public static int showOptions(int type, String title,
- String text, Object... buttons) {
- return showOptions(WIDTH, type, title, text, buttons);
- }
-
- /**
- * Shows a message with a text input.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- public static String showInput(int width, int type,
- String title, String text) {
-
- // get the string from the
- // input text, if any
- String input = JOptionPane.showInputDialog(
- null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text
- ),
- title,
- normalizeIconType(type)
- );
-
- // if the input is not null, that is,
- // the user actually typed something
- if (input != null) {
-
- // return the trimmed string
- return input.trim();
- }
-
- // nothing was typed, so let's
- // return an empty string
- return "";
- }
-
- /**
- * Shows a message with a text input. It relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- public static String showInput(int type, String title, String text) {
- return showInput(WIDTH, type, title, text);
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- public static int showDropdown(int width, int type, String title,
- String text, Object... elements) {
-
- // show the dropdown list and get
- // the selected object, if any
- Object index = JOptionPane.showInputDialog(
- null,
- String.format(
- "<html><body style=\"width:%dpx\">%s</body></html>",
- normalizeMessageWidth(width),
- text
- ),
- title,
- normalizeIconType(type),
- null,
- elements,
- elements[0]
- );
-
- // if it's not a null object, let's
- // find the corresponding index
- if (index != null) {
-
- // iterate through the array of elements
- for (int i = 0; i < elements.length; i++) {
-
- // if the element is found, simply
- // return the index plus 1, as zero
- // corresponds to no selection at all
- if (elements[i].equals(index)) {
- return i + 1;
- }
-
- }
- }
-
- // nothing was selected,
- // simply return zero
- return 0;
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements. It
- * relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- public static int showDropdown(int type, String title,
- String text, Object... elements) {
- return showDropdown(WIDTH, type, title, text, elements);
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/Methods.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/Methods.java
deleted file mode 100644
index 24982dace9..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/Methods.java
+++ /dev/null
@@ -1,1368 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.ConfigurationController;
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Command;
-import com.github.cereda.arara.model.Messages;
-import com.github.cereda.arara.model.Pair;
-import com.github.cereda.arara.model.Session;
-import com.github.cereda.arara.model.Trigger;
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implements some auxiliary methods for runtime evaluation.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class Methods {
-
- // the language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- // the session controller
- private static final Session session = new Session();
-
- /**
- * Adds the rule methods to the provided map.
- * @param map The map.
- */
- public static void addRuleMethods(Map<String, Object> map) {
- addConditionalMethods(map);
- try {
- map.put("getOriginalFile", Methods.class.getMethod("getOriginalFile"));
- map.put("getOriginalReference", Methods.class.getMethod("getOriginalReference"));
- map.put("isEmpty", Methods.class.getMethod("isEmpty", String.class));
- map.put("isNotEmpty", Methods.class.getMethod("isNotEmpty", String.class));
- map.put("isEmpty", Methods.class.getMethod("isEmpty", String.class, Object.class));
- map.put("isNotEmpty", Methods.class.getMethod("isNotEmpty", String.class, Object.class));
- map.put("isEmpty", Methods.class.getMethod("isEmpty", String.class, Object.class, Object.class));
- map.put("isNotEmpty", Methods.class.getMethod("isNotEmpty", String.class, Object.class, Object.class));
- map.put("isTrue", Methods.class.getMethod("isTrue", String.class));
- map.put("isFalse", Methods.class.getMethod("isFalse", String.class));
- map.put("isTrue", Methods.class.getMethod("isTrue", String.class, Object.class));
- map.put("isFalse", Methods.class.getMethod("isFalse", String.class, Object.class));
- map.put("isTrue", Methods.class.getMethod("isTrue", String.class, Object.class, Object.class));
- map.put("isFalse", Methods.class.getMethod("isFalse", String.class, Object.class, Object.class));
- map.put("isTrue", Methods.class.getMethod("isTrue", String.class, Object.class, Object.class, Object.class));
- map.put("isFalse", Methods.class.getMethod("isFalse", String.class, Object.class, Object.class, Object.class));
- map.put("trimSpaces", Methods.class.getMethod("trimSpaces", String.class));
- map.put("isTrue", Methods.class.getMethod("isTrue", boolean.class, Object.class));
- map.put("isFalse", Methods.class.getMethod("isFalse", boolean.class, Object.class));
- map.put("isTrue", Methods.class.getMethod("isTrue", boolean.class, Object.class, Object.class));
- map.put("isFalse", Methods.class.getMethod("isFalse", boolean.class, Object.class, Object.class));
- map.put("getBasename", Methods.class.getMethod("getBasename", File.class));
- map.put("getBasename", Methods.class.getMethod("getBasename", String.class));
- map.put("getFullBasename", Methods.class.getMethod("getFullBasename", File.class));
- map.put("getFullBasename", Methods.class.getMethod("getFullBasename", String.class));
- map.put("getFiletype", Methods.class.getMethod("getFiletype", File.class));
- map.put("getFiletype", Methods.class.getMethod("getFiletype", String.class));
- map.put("throwError", Methods.class.getMethod("throwError", String.class));
- map.put("getSession", Methods.class.getMethod("getSession"));
- map.put("isWindows", Methods.class.getMethod("isWindows"));
- map.put("isLinux", Methods.class.getMethod("isLinux"));
- map.put("isMac", Methods.class.getMethod("isMac"));
- map.put("isUnix", Methods.class.getMethod("isUnix"));
- map.put("isAIX", Methods.class.getMethod("isAIX"));
- map.put("isIrix", Methods.class.getMethod("isIrix"));
- map.put("isOS2", Methods.class.getMethod("isOS2"));
- map.put("isSolaris", Methods.class.getMethod("isSolaris"));
- map.put("isCygwin", Methods.class.getMethod("isCygwin"));
- map.put("isWindows", Methods.class.getMethod("isWindows", Object.class, Object.class));
- map.put("isLinux", Methods.class.getMethod("isLinux", Object.class, Object.class));
- map.put("isMac", Methods.class.getMethod("isMac", Object.class, Object.class));
- map.put("isUnix", Methods.class.getMethod("isUnix", Object.class, Object.class));
- map.put("isAIX", Methods.class.getMethod("isAIX", Object.class, Object.class));
- map.put("isIrix", Methods.class.getMethod("isIrix", Object.class, Object.class));
- map.put("isOS2", Methods.class.getMethod("isOS2", Object.class, Object.class));
- map.put("isSolaris", Methods.class.getMethod("isSolaris", Object.class, Object.class));
- map.put("isCygwin", Methods.class.getMethod("isCygwin", Object.class, Object.class));
- map.put("replicatePattern", Methods.class.getMethod("replicatePattern", String.class, List.class));
- map.put("buildString", Methods.class.getMethod("buildString", Object[].class));
- map.put("addQuotes", Methods.class.getMethod("addQuotes", Object.class));
- map.put("getCommand", Methods.class.getMethod("getCommand", List.class));
- map.put("getCommand", Methods.class.getMethod("getCommand", Object[].class));
- map.put("getTrigger", Methods.class.getMethod("getTrigger", String.class));
- map.put("getTrigger", Methods.class.getMethod("getTrigger", String.class, Object[].class));
- map.put("checkClass", Methods.class.getMethod("checkClass", Class.class, Object.class));
- map.put("isString", Methods.class.getMethod("isString", Object.class));
- map.put("isList", Methods.class.getMethod("isList", Object.class));
- map.put("isMap", Methods.class.getMethod("isMap", Object.class));
- map.put("isBoolean", Methods.class.getMethod("isBoolean", Object.class));
- map.put("isVerboseMode", Methods.class.getMethod("isVerboseMode"));
- map.put("showMessage", Methods.class.getMethod("showMessage", int.class, String.class, String.class));
- map.put("showMessage", Methods.class.getMethod("showMessage", int.class, int.class, String.class, String.class));
- map.put("isOnPath", Methods.class.getMethod("isOnPath", String.class));
- map.put("unsafelyExecuteSystemCommand", Methods.class.getMethod("unsafelyExecuteSystemCommand", Command.class));
- map.put("mergeVelocityTemplate", Methods.class.getMethod("mergeVelocityTemplate", File.class, File.class, Map.class));
- map.put("getCommandWithWorkingDirectory", Methods.class.getMethod("getCommandWithWorkingDirectory", String.class, List.class));
- map.put("getCommandWithWorkingDirectory", Methods.class.getMethod("getCommandWithWorkingDirectory", String.class, Object[].class));
- map.put("getCommandWithWorkingDirectory", Methods.class.getMethod("getCommandWithWorkingDirectory", File.class, List.class));
- map.put("getCommandWithWorkingDirectory", Methods.class.getMethod("getCommandWithWorkingDirectory", File.class, Object[].class));
- map.put("listFilesByExtensions", Methods.class.getMethod("listFilesByExtensions", File.class, List.class, boolean.class));
- map.put("listFilesByExtensions", Methods.class.getMethod("listFilesByExtensions", String.class, List.class, boolean.class));
- map.put("listFilesByPatterns", Methods.class.getMethod("listFilesByPatterns", File.class, List.class, boolean.class));
- map.put("listFilesByPatterns", Methods.class.getMethod("listFilesByPatterns", String.class, List.class, boolean.class));
- map.put("writeToFile", Methods.class.getMethod("writeToFile", File.class, String.class, boolean.class));
- map.put("writeToFile", Methods.class.getMethod("writeToFile", File.class, List.class, boolean.class));
- map.put("writeToFile", Methods.class.getMethod("writeToFile", String.class, String.class, boolean.class));
- map.put("writeToFile", Methods.class.getMethod("writeToFile", String.class, List.class, boolean.class));
- map.put("readFromFile", Methods.class.getMethod("readFromFile", File.class));
- map.put("readFromFile", Methods.class.getMethod("readFromFile", String.class));
- map.put("isSubdirectory", Methods.class.getMethod("isSubdirectory", File.class));
- } catch (Exception exception) {
- // quack, quack, quack
- }
- }
-
- /**
- * Adds conditional methods to the provided map.
- * @param map The map.
- */
- public static void addConditionalMethods(Map<String, Object> map) {
- try {
- map.put("exists", Methods.class.getMethod("exists", String.class));
- map.put("exists", Methods.class.getMethod("exists", File.class));
- map.put("missing", Methods.class.getMethod("missing", String.class));
- map.put("missing", Methods.class.getMethod("missing", File.class));
- map.put("changed", Methods.class.getMethod("changed", String.class));
- map.put("changed", Methods.class.getMethod("changed", File.class));
- map.put("unchanged", Methods.class.getMethod("unchanged", String.class));
- map.put("unchanged", Methods.class.getMethod("unchanged", File.class));
- map.put("found", Methods.class.getMethod("found", String.class, String.class));
- map.put("found", Methods.class.getMethod("found", File.class, String.class));
- map.put("toFile", Methods.class.getMethod("toFile", String.class));
- map.put("showDropdown", Methods.class.getMethod("showDropdown", int.class, String.class, String.class, Object[].class));
- map.put("showDropdown", Methods.class.getMethod("showDropdown", int.class, int.class, String.class, String.class, Object[].class));
- map.put("showInput", Methods.class.getMethod("showInput", int.class, String.class, String.class));
- map.put("showInput", Methods.class.getMethod("showInput", int.class, int.class, String.class, String.class));
- map.put("showOptions", Methods.class.getMethod("showOptions", int.class, String.class, String.class, Object[].class));
- map.put("showOptions", Methods.class.getMethod("showOptions", int.class, int.class, String.class, String.class, Object[].class));
- map.put("currentFile", Methods.class.getMethod("currentFile"));
- map.put("loadClass", Methods.class.getMethod("loadClass", File.class, String.class));
- map.put("loadClass", Methods.class.getMethod("loadClass", String.class, String.class));
- map.put("loadObject", Methods.class.getMethod("loadObject", File.class, String.class));
- map.put("loadObject", Methods.class.getMethod("loadObject", String.class, String.class));
- } catch (Exception exception) {
- // quack, quack, quack
- }
- }
-
- /**
- * Gets the original file.
- * @return The original file.
- */
- public static String getOriginalFile() {
- File file = (File) ConfigurationController.getInstance().get("execution.reference");
- return file.getName();
- }
-
- /**
- * Gets the original reference.
- * @return The original reference.
- */
- public static File getOriginalReference() {
- return (File) ConfigurationController.getInstance().get("execution.reference");
- }
-
- /**
- * Checks if the string is empty.
- * @param string The string.
- * @return A boolean value.
- */
- public static boolean isEmpty(String string) {
- return CommonUtils.checkEmptyString(string);
- }
-
- /**
- * Checks if the string is not empty.
- * @param string The string.
- * @return A boolean value.
- */
- public static boolean isNotEmpty(String string) {
- return !isEmpty(string);
- }
-
- /**
- * Checks if the string is empty.
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or empty string.
- */
- public static Object isEmpty(String string, Object yes) {
- return isEmpty(string) ? yes : "";
- }
-
- /**
- * Checks if the string is not empty.
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or empty string.
- */
- public static Object isNotEmpty(String string, Object yes) {
- return isNotEmpty(string) ? yes : "";
- }
-
- /**
- * Checks if the string is empty.
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isEmpty(String string, Object yes, Object no) {
- return isEmpty(string) ? yes : no;
- }
-
- /**
- * Checks if the string is not empty.
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isNotEmpty(String string, Object yes, Object no) {
- return isNotEmpty(string) ? yes : no;
- }
-
- /**
- * Checks if the string holds a true value.
- * @param string The string.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isTrue(String string) throws AraraException {
- return isEmpty(string) ? false : CommonUtils.checkBoolean(string);
- }
-
- /**
- * Checks if the string holds a false value.
- * @param string The string.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isFalse(String string) throws AraraException {
- return isEmpty(string) ? false : !CommonUtils.checkBoolean(string);
- }
-
- /**
- * Checks if the string holds a true value.
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isTrue(String string, Object yes)
- throws AraraException {
- return isTrue(string) ? yes : "";
- }
-
- /**
- * Checks if the string holds a false value.
- * @param string The string.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isFalse(String string, Object yes)
- throws AraraException {
- return (isFalse(string) ? yes : "");
- }
-
- /**
- * Checks if the string holds a true value.
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isTrue(String string, Object yes, Object no)
- throws AraraException {
- return (isTrue(string) ? yes : no);
- }
-
- /**
- * Checks if the string holds a false value.
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isFalse(String string, Object yes, Object no)
- throws AraraException {
- return (isFalse(string) ? yes : no);
- }
-
- /**
- * Checks if the string holds a true value.
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @param fallback Object to return if string is empty.
- * @return One of the three options.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isTrue(String string, Object yes, Object no,
- Object fallback) throws AraraException {
- return isEmpty(string) ? fallback : (isTrue(string) ? yes : no);
- }
-
- /**
- * Checks if the string holds a false value.
- * @param string The string.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @param fallback Object to return if string is empty.
- * @return One of the three options.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isFalse(String string, Object yes, Object no,
- Object fallback) throws AraraException {
- return isEmpty(string) ? fallback : (isFalse(string) ? yes : no);
- }
-
- /**
- * Trim spaces from the string.
- * @param string The string.
- * @return A trimmed string.
- */
- public static String trimSpaces(String string) {
- return string.trim();
- }
-
- /**
- * Checks if the expression resolves to true.
- * @param value The expression.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- */
- public static Object isTrue(boolean value, Object yes) {
- return value ? yes : "";
- }
-
- /**
- * Checks if the expression resolves to false.
- * @param value The expression.
- * @param yes Object to return if true.
- * @return An object or an empty string.
- */
- public static Object isFalse(boolean value, Object yes) {
- return !value ? yes : "";
- }
-
- /**
- * Checks if the expression resolves to true.
- * @param value The expression.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isTrue(boolean value, Object yes, Object no) {
- return value ? yes : no;
- }
-
- /**
- * Checks if the expression resolves to false.
- * @param value The expression.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- */
- public static Object isFalse(boolean value, Object yes, Object no) {
- return !value ? yes : no;
- }
-
- /**
- * Gets the basename.
- * @param file The file.
- * @return The basename of the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getBasename(File file) throws AraraException {
- if (file.isFile()) {
- return CommonUtils.getBasename(file);
- } else {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_BASENAME_NOT_A_FILE,
- file.getName()
- )
- )
- );
- }
- }
-
- /**
- * Gets the basename.
- * @param filename The string.
- * @return The basename.
- */
- public static String getBasename(String filename) {
- return CommonUtils.getBasename(filename);
- }
-
- /**
- * Gets the file type.
- * @param file The provided file.
- * @return The file type.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getFiletype(File file) throws AraraException {
- if (file.isFile()) {
- return CommonUtils.getFiletype(file);
- } else {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_FILETYPE_NOT_A_FILE,
- file.getName()
- )
- )
- );
- }
- }
-
- /**
- * Gets the file type.
- * @param filename The provided string.
- * @return The file type.
- */
- public static String getFiletype(String filename) {
- return CommonUtils.getFiletype(filename);
- }
-
- /**
- * Replicates the pattern to each element of a list.
- * @param pattern The pattern.
- * @param values The list.
- * @return A list of strings containing the pattern applied to the list.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static List<Object> replicatePattern(String pattern,
- List<Object> values) throws AraraException {
- return CommonUtils.replicateList(pattern, values);
- }
-
- /**
- * Throws an exception.
- * @param text The text to be thrown as the exception message.
- * @throws AraraException The exception to be thrown by this method.
- */
- public static void throwError(String text) throws AraraException {
- throw new AraraException(text);
- }
-
- /**
- * Gets the session.
- * @return The session.
- */
- public static Session getSession() {
- return session;
- }
-
- /**
- * Checks if Windows is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isWindows() throws AraraException {
- return CommonUtils.checkOS("windows");
- }
-
- /**
- * Checks if we are inside a Cygwin environment.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isCygwin() throws AraraException {
- return CommonUtils.checkOS("cygwin");
- }
-
- /**
- * Checks if Linux is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isLinux() throws AraraException {
- return CommonUtils.checkOS("linux");
- }
-
- /**
- * Checks if Mac is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isMac() throws AraraException {
- return CommonUtils.checkOS("mac");
- }
-
- /**
- * Checks if Unix is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isUnix() throws AraraException {
- return CommonUtils.checkOS("unix");
- }
-
- /**
- * Checks if AIX is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isAIX() throws AraraException {
- return CommonUtils.checkOS("aix");
- }
-
- /**
- * Checks if Irix is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isIrix() throws AraraException {
- return CommonUtils.checkOS("irix");
- }
-
- /**
- * Checks if OS2 is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isOS2() throws AraraException {
- return CommonUtils.checkOS("os2");
- }
-
- /**
- * Checks if Solaris is the underlying operating system.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean isSolaris() throws AraraException {
- return CommonUtils.checkOS("solaris");
- }
-
- /**
- * Checks if Windows is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isWindows(Object yes, Object no)
- throws AraraException {
- return CommonUtils.checkOS("windows") ? yes : no;
- }
-
- /**
- * Checks if we are inside a Cygwin environment.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isCygwin(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("cygwin") ? yes : no;
- }
-
- /**
- * Checks if Linux is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isLinux(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("linux") ? yes : no;
- }
-
- /**
- * Checks if Mac is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isMac(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("mac") ? yes : no;
- }
-
- /**
- * Checks if Unix is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isUnix(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("unix") ? yes : no;
- }
-
- /**
- * Checks if AIX is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isAIX(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("aix") ? yes : no;
- }
-
- /**
- * Checks if Irix is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isIrix(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("irix") ? yes : no;
- }
-
- /**
- * Checks if OS2 is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isOS2(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("os2") ? yes : no;
- }
-
- /**
- * Checks if Solaris is the underlying operating system.
- * @param yes Object to return if true.
- * @param no Object to return if false.
- * @return One of the two objects.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Object isSolaris(Object yes, Object no) throws AraraException {
- return CommonUtils.checkOS("solaris") ? yes : no;
- }
-
- /**
- * Checks if the file exists according to its extension.
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean exists(String extension) throws AraraException {
- return CommonUtils.exists(extension);
- }
-
- /**
- * Checks if the file is missing according to its extension.
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean missing(String extension) throws AraraException {
- return !exists(extension);
- }
-
- /**
- * Checks if the file has changed, according to its extension.
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean changed(String extension) throws AraraException {
- return CommonUtils.hasChanged(extension);
- }
-
- /**
- * Checks if the file is unchanged according to its extension.
- * @param extension The extension.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean unchanged(String extension) throws AraraException {
- return !changed(extension);
- }
-
- /**
- * Checks if the file exists.
- * @param filename The file.
- * @return A boolean value.
- */
- public static boolean exists(File filename) {
- return CommonUtils.exists(filename);
- }
-
- /**
- * Checks if the file is missing.
- * @param filename The file.
- * @return A boolean value.
- */
- public static boolean missing(File filename) {
- return !exists(filename);
- }
-
- /**
- * Checks if the file has changed.
- * @param filename The file.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean changed(File filename) throws AraraException {
- return CommonUtils.hasChanged(filename);
- }
-
- /**
- * Checks if the file is unchanged.
- * @param filename The file.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean unchanged(File filename) throws AraraException {
- return !changed(filename);
- }
-
- /**
- * Build a string based on an array of objects.
- * @param objects Array of objects.
- * @return A string built from the array.
- */
- public static String buildString(Object... objects) {
- return CommonUtils.generateString(objects);
- }
-
- /**
- * Encloses the provided object into double quotes.
- * @param object The object.
- * @return The object enclosed in double quotes.
- */
- public static String addQuotes(Object object) {
- return CommonUtils.addQuotes(object);
- }
-
- /**
- * Checks if the file contains the regex, based on its extension.
- * @param extension The extension.
- * @param regex The regex.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean found(String extension, String regex)
- throws AraraException {
- return CommonUtils.checkRegex(extension, regex);
- }
-
- /**
- * Checks if the file contains the provided regex.
- * @param file The file.
- * @param regex The regex.
- * @return A boolean value.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static boolean found(File file, String regex)
- throws AraraException {
- return CommonUtils.checkRegex(file, regex);
- }
-
- /**
- * Gets the command based on a list of strings.
- * @param elements The list of strings.
- * @return A command.
- */
- public static Command getCommand(List<String> elements) {
- return new Command(elements);
- }
-
- /**
- * Gets the command based on an array of objects.
- * @param elements Array of objects.
- * @return A command.
- */
- public static Command getCommand(Object... elements) {
- return new Command(elements);
- }
-
- /**
- * Gets the command based on an array of objects and with the provided
- * working directory as string.
- * @param path String path representing the working directory.
- * @param elements Array of elements.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(String path,
- Object... elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(new File(path));
- return command;
- }
-
- /**
- * Gets the command based on an array of objects and with the provided
- * working directory as file.
- * @param file File representing the working directory.
- * @param elements Array of elements.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(File file,
- Object... elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(file);
- return command;
- }
-
- /**
- * Gets the command based on a list of strings and with the provided
- * working directory as string.
- * @param path String path representing the working directory.
- * @param elements List of strings.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(String path,
- List<String> elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(new File(path));
- return command;
- }
-
- /**
- * Gets the command based on a list of strings and with the provided
- * working directory as file.
- * @param file File representing the working directory.
- * @param elements List of strings.
- * @return A command.
- */
- public static Command getCommandWithWorkingDirectory(File file,
- List<String> elements) {
- Command command = new Command(elements);
- command.setWorkingDirectory(file);
- return command;
- }
-
- /**
- * Gets the trigger.
- * @param action The action name.
- * @return The trigger.
- */
- public static Trigger getTrigger(String action) {
- return new Trigger(action, null);
- }
-
- /**
- * Gets the trigger.
- * @param action The action name.
- * @param parameters The trigger parameters.
- * @return A trigger.
- */
- public static Trigger getTrigger(String action, Object... parameters) {
- return new Trigger(action, Arrays.asList(parameters));
- }
-
- /**
- * Checks if the object is an intance of the provided class.
- * @param clazz The class.
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean checkClass(Class clazz, Object object) {
- return CommonUtils.checkClass(clazz, object);
- }
-
- /**
- * Checks if the object is a string.
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isString(Object object) {
- return checkClass(String.class, object);
- }
-
- /**
- * Checks if the object is a list.
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isList(Object object) {
- return checkClass(List.class, object);
- }
-
- /**
- * Checks if the object is a map.
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isMap(Object object) {
- return checkClass(Map.class, object);
- }
-
- /**
- * Checks if the object is a boolean.
- * @param object The object.
- * @return A boolean value.
- */
- public static boolean isBoolean(Object object) {
- return checkClass(Boolean.class, object);
- }
-
- /**
- * Checks if the execution is in verbose mode.
- * @return A boolean value indicating if the execution is in verbose mode.
- */
- public static boolean isVerboseMode() {
- return (Boolean) ConfigurationController.
- getInstance().get("execution.verbose");
- }
-
- /**
- * Returns a file object based on the provided name.
- * @param name The file name.
- * @return A file object.
- */
- public static File toFile(String name) {
- return new File(name);
- }
-
- /**
- * Shows the message.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- public static void showMessage(int width, int type,
- String title, String text) {
- MessageUtils.showMessage(width, type, title, text);
- }
-
- /**
- * Shows the message. It relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- */
- public static void showMessage(int type, String title, String text) {
- MessageUtils.showMessage(type, title, text);
- }
-
- /**
- * Shows a message with options presented as an array of buttons.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- public static int showOptions(int width, int type, String title,
- String text, Object... buttons) {
- return MessageUtils.showOptions(width, type, title, text, buttons);
- }
-
- /**
- * Shows a message with options presented as an array of buttons. It relies
- * on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param buttons An array of objects to be presented as buttons.
- * @return The index of the selected button, starting from 1.
- */
- public static int showOptions(int type, String title,
- String text, Object... buttons) {
- return MessageUtils.showOptions(type, title, text, buttons);
- }
-
- /**
- * Shows a message with a text input.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- public static String showInput(int width, int type,
- String title, String text) {
- return MessageUtils.showInput(width, type, title, text);
- }
-
- /**
- * Shows a message with a text input. It relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @return The string representing the input text.
- */
- public static String showInput(int type, String title, String text) {
- return MessageUtils.showInput(type, title, text);
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements.
- * @param width Integer value, in pixels.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- public static int showDropdown(int width, int type, String title,
- String text, Object... elements) {
- return MessageUtils.showDropdown(width, type, title, text, elements);
- }
-
- /**
- * Shows a message with options presented as a dropdown list of elements. It
- * relies on the default width.
- * @param type Type of message.
- * @param title Title of the message.
- * @param text Text of the message.
- * @param elements An array of objects representing the elements.
- * @return The index of the selected element, starting from 1.
- */
- public static int showDropdown(int type, String title,
- String text, Object... elements) {
- return MessageUtils.showDropdown(type, title, text, elements);
- }
-
- /**
- * Checks if the provided command name is reachable from the system path.
- * @param command A string representing the command.
- * @return A logic value.
- */
- public static boolean isOnPath(String command) {
- return CommonUtils.isOnPath(command);
- }
-
- /**
- * Gets the full basename.
- * @param file The file.
- * @return The full basename of the provided file.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getFullBasename(File file) throws AraraException {
- if (file.isFile()) {
- return CommonUtils.getFullBasename(file);
- } else {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_BASENAME_NOT_A_FILE,
- file.getName()
- )
- )
- );
- }
- }
-
- /**
- * Gets the full basename.
- * @param name The string.
- * @return The full basename.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static String getFullBasename(String name) throws AraraException {
- return getFullBasename(new File(name));
- }
-
- /**
- * Unsafely executes a system command from the underlying operating system
- * and returns a pair containing the exit status and the command output as a
- * string.
- * @param command The system command to be executed.
- * @return A pair containing the exit status and the system command output
- * as a string.
- */
- public static Pair<Integer, String>
- unsafelyExecuteSystemCommand(Command command) {
- return UnsafeUtils.executeSystemCommand(command);
- }
-
- /**
- * Merges the provided template with a context map and writes the result in
- * an output file. This method relies on Apache Velocity.
- * @param input The input file.
- * @param output The output file.
- * @param map The context map.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static void mergeVelocityTemplate(File input, File output,
- Map<String, Object> map) throws AraraException {
- VelocityUtils.mergeVelocityTemplate(input, output, map);
- }
-
- /**
- * Gets the file reference for the current directive. It is important to
- * observe that version 4.0 of arara replicates the directive when 'files'
- * is detected amongst the parameters, so each instance will have a
- * different reference.
- * @return A file reference for the current directive.
- */
- public static File currentFile() {
- return (File) ConfigurationController.getInstance().
- get("execution.directive.reference");
- }
-
- /**
- * Loads a class from the provided file, potentially a Java archive.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class.
- */
- public static Pair<Integer, Class> loadClass(File file, String name) {
- return ClassLoadingUtils.loadClass(file, name);
- }
-
- /**
- * Loads a class from the provided string reference, representing a file.
- * @param ref String reference representing a file.
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class.
- */
- public static Pair<Integer, Class> loadClass(String ref, String name) {
- return ClassLoadingUtils.loadClass(new File(ref), name);
- }
-
- /**
- * Loads a class from the provided file, instantiating it.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class object.
- */
- public static Pair<Integer, Object> loadObject(File file, String name) {
- return ClassLoadingUtils.loadObject(file, name);
- }
-
- /**
- * Loads a class from the provided string reference, instantiating it.
- * @param ref String reference representing a file.
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class object.
- */
- public static Pair<Integer, Object> loadObject(String ref, String name) {
- return ClassLoadingUtils.loadObject(new File(ref), name);
- }
-
- /**
- * List all files from the provided directory according to the list of
- * extensions. The leading dot must be omitted, unless it is part of the
- * extension.
- * @param directory The provided directory.
- * @param extensions The list of extensions.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByExtensions(File directory,
- List<String> extensions, boolean recursive) {
- return FileSearchingUtils.listFilesByExtensions(
- directory,
- extensions,
- recursive
- );
- }
-
- /**
- * List all files from the provided string path according to the list of
- * extensions. The leading dot must be omitted, unless it is part of the
- * extension.
- * @param path The provided path as plain string.
- * @param extensions The list of extensions.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByExtensions(String path,
- List<String> extensions, boolean recursive) {
- return FileSearchingUtils.listFilesByExtensions(
- new File(path),
- extensions,
- recursive
- );
- }
-
- /**
- * List all files from the provided directory matching the list of file
- * name patterns. Such list can contain wildcards.
- * @param directory The provided directory.
- * @param patterns The list of file name patterns.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByPatterns(File directory,
- List<String> patterns, boolean recursive) {
- return FileSearchingUtils.listFilesByPatterns(
- directory,
- patterns,
- recursive
- );
- }
-
- /**
- * List all files from the provided path matching the list of file
- * name patterns. Such list can contain wildcards.
- * @param path The provided path as plain string.
- * @param patterns The list of file name patterns.
- * @param recursive A flag indicating whether the search is recursive.
- * @return A list of files.
- */
- public static List<File> listFilesByPatterns(String path,
- List<String> patterns, boolean recursive) {
- return FileSearchingUtils.listFilesByPatterns(
- new File(path),
- patterns,
- recursive
- );
- }
-
- /**
- * Writes the string to a file, using UTF-8 as default encoding.
- * @param file The file.
- * @param text The string to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(File file, String text, boolean append) {
- return FileHandlingUtils.writeToFile(file, text, append);
- }
-
- /**
- * Writes the string to a file, using UTF-8 as default encoding.
- * @param path The path.
- * @param text The string to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(String path, String text,
- boolean append) {
- return FileHandlingUtils.writeToFile(new File(path), text, append);
- }
-
- /**
- * Writes the string list to a file, using UTF-8 as default encoding.
- * @param file The file.
- * @param lines The string list to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(File file, List<String> lines,
- boolean append) {
- return FileHandlingUtils.writeToFile(file, lines, append);
- }
-
- /**
- * Writes the string list to a file, using UTF-8 as default encoding.
- * @param path The path.
- * @param lines The string list to be written.
- * @param append A flag whether to append the content.
- * @return A logical value indicating whether it was successful.
- */
- public static boolean writeToFile(String path, List<String> lines,
- boolean append) {
- return FileHandlingUtils.writeToFile(new File(path), lines, append);
- }
-
- /**
- * Reads the provided file into a list of strings.
- * @param file The file.
- * @return A list of strings.
- */
- public static List<String> readFromFile(File file) {
- return FileHandlingUtils.readFromFile(file);
- }
-
- /**
- * Reads the provided file into a list of strings.
- * @param path The path.
- * @return A list of strings.
- */
- public static List<String> readFromFile(String path) {
- return FileHandlingUtils.readFromFile(new File(path));
- }
-
- /**
- * Checks whether a directory is under the project directory.
- * @param directory The directory to be inspected.
- * @return Logical value indicating whether the directoy is under root.
- * @throws AraraException There was a problem with path retrieval.
- */
- public static boolean isSubdirectory(File directory)
- throws AraraException {
- return CommonUtils.isSubDirectory(directory, getOriginalReference());
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/RuleUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/RuleUtils.java
deleted file mode 100644
index f2fb1c8570..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/RuleUtils.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Argument;
-import com.github.cereda.arara.model.Messages;
-import com.github.cereda.arara.model.RuleCommand;
-import com.github.cereda.arara.model.Rule;
-import java.io.File;
-import java.io.FileReader;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Predicate;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
-import org.yaml.snakeyaml.error.MarkedYAMLException;
-import org.yaml.snakeyaml.nodes.Tag;
-import org.yaml.snakeyaml.representer.Representer;
-
-/**
- * Implements rule utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class RuleUtils {
-
- // the application messages obtained from the
- // language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Parses the provided file, checks the identifier and returns a rule
- * representation.
- * @param file The rule file.
- * @param identifier The directive identifier.
- * @return The rule object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- public static Rule parseRule(File file, String identifier)
- throws AraraException {
- Representer representer = new Representer();
- representer.addClassTag(Rule.class, new Tag("!config"));
- Yaml yaml = new Yaml(new Constructor(Rule.class), representer);
- Rule rule = null;
- try {
- rule = yaml.loadAs(new FileReader(file), Rule.class);
- } catch (MarkedYAMLException yamlException) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_PARSERULE_INVALID_YAML
- )
- ),
- yamlException
- );
- } catch (Exception exception) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_PARSERULE_GENERIC_ERROR
- )
- )
- );
- }
- validateHeader(rule, identifier);
- validateBody(rule);
- return rule;
- }
-
- /**
- * Validates the rule header according to the directive identifier.
- * @param rule The rule object.
- * @param identifier The directive identifier.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static void validateHeader(Rule rule, String identifier)
- throws AraraException {
- if (rule.getIdentifier() != null) {
- if (!rule.getIdentifier().equals(identifier)) {
- throw new AraraException(CommonUtils.getRuleErrorHeader().
- concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEHEADER_WRONG_IDENTIFIER,
- rule.getIdentifier(),
- identifier
- )
- )
- );
- }
- } else {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEHEADER_NULL_ID
- )
- )
- );
- }
- if (rule.getName() == null) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEHEADER_NULL_NAME
- )
- )
- );
- }
- }
-
- /**
- * Validates the rule body.
- * @param rule The rule object.
- * @throws AraraException Something wrong happened, to be caught in the
- * higher levels.
- */
- private static void validateBody(Rule rule) throws AraraException {
- if (rule.getCommands() == null) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_NULL_COMMANDS_LIST
- )
- )
- );
- } else {
- if (CollectionUtils.exists(rule.getCommands(),
- new Predicate<RuleCommand>() {
- public boolean evaluate(RuleCommand command) {
- return (command.getCommand() == null);
- }
- })) {
- throw new AraraException(CommonUtils.getRuleErrorHeader().
- concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_NULL_COMMAND
- )
- )
- );
- }
- }
- if (rule.getArguments() == null) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_ARGUMENTS_LIST
- )
- )
- );
- } else {
- String[] keywords = new String[]{"file", "files", "reference"};
-
- List<String> arguments = new ArrayList<String>();
- for (Argument argument : rule.getArguments()) {
- if (argument.getIdentifier() != null) {
- if ((argument.getFlag() != null) ||
- (argument.getDefault() != null)) {
- arguments.add(argument.getIdentifier());
- } else {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_MISSING_KEYS
- )
- )
- );
- }
- } else {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_NULL_ARGUMENT_ID
- )
- )
- );
- }
- }
-
- for (String keyword : keywords) {
- if (arguments.contains(keyword)) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED,
- keyword
- )
- )
- );
- }
- }
-
- int expected = arguments.size();
- int found = (new HashSet<String>(arguments)).size();
- if (expected != found) {
- throw new AraraException(
- CommonUtils.getRuleErrorHeader().concat(
- messages.getMessage(
- Messages.ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS
- )
- )
- );
- }
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/TeeOutputStream.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/TeeOutputStream.java
deleted file mode 100644
index 58418ea62d..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/TeeOutputStream.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import org.apache.commons.io.IOUtils;
-
-/**
- * Implements a stream splitter.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class TeeOutputStream extends OutputStream {
-
- // an array of streams in which
- // an object of this class will
- // split data
- private final OutputStream[] streams;
-
- /**
- * Constructor.
- * @param outputStreams An array of output streams.
- */
- public TeeOutputStream(OutputStream... outputStreams) {
- streams = outputStreams;
- }
-
- /**
- * Writes the provided integer to each stream.
- * @param b The provided integer
- * @throws IOException An IO exception.
- */
- @Override
- public void write(int b) throws IOException {
- for (OutputStream ostream : streams) {
- ostream.write(b);
- }
- }
-
- /**
- * Writes the provided byte array to each stream, with the provided offset
- * and length.
- * @param b The byte array.
- * @param offset The offset.
- * @param length The length.
- * @throws IOException An IO exception.
- */
- @Override
- public void write(byte[] b, int offset, int length) throws IOException {
- for (OutputStream ostream : streams) {
- ostream.write(b, offset, length);
- }
- }
-
- /**
- * Flushes every stream.
- * @throws IOException An IO exception.
- */
- @Override
- public void flush() throws IOException {
- for (OutputStream ostream : streams) {
- ostream.flush();
- }
- }
-
- /**
- * Closes every stream silently.
- */
- @Override
- public void close() {
- for (OutputStream ostream : streams) {
- IOUtils.closeQuietly(ostream);
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/UnsafeUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/UnsafeUtils.java
deleted file mode 100644
index d5a4058b3e..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/UnsafeUtils.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.model.Command;
-import com.github.cereda.arara.model.Pair;
-import org.zeroturnaround.exec.ProcessExecutor;
-import org.zeroturnaround.exec.ProcessResult;
-
-/**
- * Implements unsafe utilitary methods.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class UnsafeUtils {
-
- /**
- * Executes a system command from the underlying operating system and
- * returns a pair containing the exit status and the command output as a
- * string.
- * @param command The system command to be executed.
- * @return A pair containing the exit status and the system command output
- * as a string.
- */
- public static Pair<Integer, String> executeSystemCommand(Command command) {
-
- try {
-
- // create a process result with the provided
- // command, capturing the output
- ProcessResult result = new ProcessExecutor(
- command.getElements()
- ).readOutput(true).execute();
-
- // return the pair containing the exit status
- // and the output string as UTF-8
- return new Pair<Integer, String>(
- result.getExitValue(),
- result.outputUTF8()
- );
-
- } catch (Exception exception) {
-
- // quack, quack, do nothing, just
- // return a default error code
-
- // if something goes wrong, the default
- // error branch returns an exit status of
- // -99 and an empty string
- return new Pair<Integer, String>(-99, "");
-
- }
- }
-
-}
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/VelocityUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/VelocityUtils.java
deleted file mode 100644
index 3f94adc909..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/VelocityUtils.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.controller.LanguageController;
-import com.github.cereda.arara.model.AraraException;
-import com.github.cereda.arara.model.Messages;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.Map;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.exception.MethodInvocationException;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.RuntimeConstants;
-
-/**
- * Implements the template merging from Apache Velocity.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class VelocityUtils {
-
- // the language controller
- private static final LanguageController messages =
- LanguageController.getInstance();
-
- /**
- * Merges the provided template with the context map and writes the result
- * in an output file. The operation relies on the Apache Velocity project.
- * @param input The input file.
- * @param output The output file.
- * @param map The context map.
- * @throws AraraException Something terribly wrong happened, to be caught
- * in the higher levels.
- */
- public static void mergeVelocityTemplate(File input, File output,
- Map<String, Object> map) throws AraraException {
-
- // let us try
- try {
-
- // create the template engine instance
- VelocityEngine engine = new VelocityEngine();
-
- // use the resource path trick: set the default
- // location to the input file's parent directory,
- // so our file is easily located
- engine.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,
- input.getCanonicalFile().getParent());
-
- // set the logging feature of Apache Velocity to
- // register the occurrences in a null provider
- // (we do not want unnecessary verbose output)
- engine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
- "org.apache.velocity.runtime.log.NullLogSystem");
-
- // init the engine with the
- // provided settings
- engine.init();
-
- // create a context for Apache Velocity,
- // based on the provided map
- VelocityContext context = new VelocityContext(map);
-
- // get the template from the engine and
- // read it as an UTF-8 file
- Template template = engine.getTemplate(input.getName(), "UTF-8");
-
- // create an output stream from
- // the file output reference
- FileOutputStream stream = new FileOutputStream(output);
-
- // create a writer based on the
- // previously created stream
- Writer writer = new OutputStreamWriter(stream, "UTF-8");
-
- // merge the context map with the
- // template file and write the result
- // to the output stream writer
- template.merge(context, writer);
-
- // close both writer
- // and output stream
- writer.close();
- stream.close();
-
- } catch(ResourceNotFoundException rnfexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VELOCITY_FILE_NOT_FOUND
- ),
- rnfexception
- );
- } catch(ParseErrorException peexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VELOCITY_PARSE_EXCEPTION
- ),
- peexception
- );
- } catch(MethodInvocationException miexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION
- ),
- miexception
- );
- } catch (IOException ioexception) {
- throw new AraraException(
- messages.getMessage(
- Messages.ERROR_VELOCITY_FILE_NOT_FOUND
- ),
- ioexception
- );
- }
-
- }
-
-}
diff --git a/support/arara/source/src/main/java/org/islandoftex/arara/utils/Methods.java b/support/arara/source/src/main/java/org/islandoftex/arara/utils/Methods.java
new file mode 100644
index 0000000000..bbc46be4a0
--- /dev/null
+++ b/support/arara/source/src/main/java/org/islandoftex/arara/utils/Methods.java
@@ -0,0 +1,1222 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils;
+
+import kotlin.Pair;
+import org.islandoftex.arara.Arara;
+import org.islandoftex.arara.configuration.AraraSpec;
+import org.islandoftex.arara.filehandling.FileHandlingUtils;
+import org.islandoftex.arara.filehandling.FileSearchingUtils;
+import org.islandoftex.arara.localization.LanguageController;
+import org.islandoftex.arara.localization.Messages;
+import org.islandoftex.arara.model.AraraException;
+import org.islandoftex.arara.model.Session;
+import org.islandoftex.arara.ruleset.Command;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
+
+/**
+ * Implements some auxiliary methods for runtime evaluation.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@SuppressWarnings("unused")
+public class Methods {
+
+ // the language controller
+ private static final LanguageController messages =
+ LanguageController.INSTANCE;
+
+ // the session controller
+ private static final Session session = Session.INSTANCE;
+
+ /**
+ * Get rule methods.
+ *
+ * @return A map of method names to method pointers.
+ */
+ public static Map<String, Object> getRuleMethods() {
+ Map<String, Object> map = new HashMap<>(getConditionalMethods());
+ try {
+ Method[] methods = Methods.class.getMethods();
+ Arrays.asList("getOriginalFile", "getOriginalReference", "isEmpty",
+ "isNotEmpty", "isTrue", "isFalse", "trimSpaces",
+ "getBasename", "getFiletype", "throwError", "getSession",
+ "isWindows", "isLinux", "isMac", "isUnix", "isCygwin",
+ "replicatePattern", "buildString", "getCommand",
+ "checkClass", "isString", "isList", "isMap", "isBoolean",
+ "isVerboseMode", "showMessage", "isOnPath",
+ "unsafelyExecuteSystemCommand",
+ "getCommandWithWorkingDirectory", "listFilesByExtensions",
+ "listFilesByPatterns", "writeToFile", "readFromFile",
+ "isSubdirectory", "halt").forEach(name ->
+ map.put(name, Stream.of(methods).filter(
+ m -> m.getName().equals(name)).findFirst().get()));
+ } catch (Exception exception) {
+ // quack, quack, quack
+ }
+ return map;
+ }
+
+ /**
+ * Get conditional methods.
+ *
+ * @return A map of method names to method pointers.
+ */
+ public static Map<String, Object> getConditionalMethods() {
+ Map<String, Object> map = new HashMap<>();
+ try {
+ Method[] methods = Methods.class.getMethods();
+ Arrays.asList("exists", "missing", "changed", "unchanged", "found",
+ "toFile", "showDropdown", "showInput", "showOptions",
+ "currentFile", "loadClass", "loadObject").forEach(name ->
+ map.put(name, Stream.of(methods).filter(
+ m -> m.getName().equals(name)).findFirst().get()));
+ } catch (Exception exception) {
+ // quack, quack, quack
+ }
+ return map;
+ }
+
+ /**
+ * Exit the application normally
+ */
+ public static void halt() {
+ halt(0);
+ }
+
+ /**
+ * Exit the application with status code.
+ *
+ * @param status The exit value
+ */
+ public static void halt(int status) {
+ session.put("arara:" + getOriginalFile() + ":halt", status);
+ }
+
+ /**
+ * Gets the original file.
+ *
+ * @return The original file.
+ */
+ public static String getOriginalFile() {
+ File file = Arara.INSTANCE.getConfig()
+ .get(AraraSpec.Execution.INSTANCE.getReference());
+ return file.getName();
+ }
+
+ /**
+ * Gets the original reference.
+ *
+ * @return The original reference.
+ */
+ public static File getOriginalReference() {
+ return Arara.INSTANCE.getConfig()
+ .get(AraraSpec.Execution.INSTANCE.getReference());
+ }
+
+ /**
+ * Checks if the string is empty.
+ *
+ * @param string The string.
+ * @return A boolean value.
+ */
+ public static boolean isEmpty(String string) {
+ return string.equals("");
+ }
+
+ /**
+ * Checks if the string is not empty.
+ *
+ * @param string The string.
+ * @return A boolean value.
+ */
+ public static boolean isNotEmpty(String string) {
+ return !isEmpty(string);
+ }
+
+ /**
+ * Checks if the string is empty.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @return An object or empty string.
+ */
+ public static Object isEmpty(String string, Object yes) {
+ return isEmpty(string) ? yes : "";
+ }
+
+ /**
+ * Checks if the string is not empty.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @return An object or empty string.
+ */
+ public static Object isNotEmpty(String string, Object yes) {
+ return isNotEmpty(string) ? yes : "";
+ }
+
+ /**
+ * Checks if the string is empty.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ */
+ public static Object isEmpty(String string, Object yes, Object no) {
+ return isEmpty(string) ? yes : no;
+ }
+
+ /**
+ * Checks if the string is not empty.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ */
+ public static Object isNotEmpty(String string, Object yes, Object no) {
+ return isNotEmpty(string) ? yes : no;
+ }
+
+ /**
+ * Checks if the string holds a true value.
+ *
+ * @param string The string.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean isTrue(String string) throws AraraException {
+ return !isEmpty(string) && CommonUtils.INSTANCE.checkBoolean(string);
+ }
+
+ /**
+ * Checks if the string holds a false value.
+ *
+ * @param string The string.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean isFalse(String string) throws AraraException {
+ return !isEmpty(string) && !CommonUtils.INSTANCE.checkBoolean(string);
+ }
+
+ /**
+ * Checks if the string holds a true value.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @return An object or an empty string.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isTrue(String string, Object yes)
+ throws AraraException {
+ return isTrue(string) ? yes : "";
+ }
+
+ /**
+ * Checks if the string holds a false value.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @return An object or an empty string.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isFalse(String string, Object yes)
+ throws AraraException {
+ return (isFalse(string) ? yes : "");
+ }
+
+ /**
+ * Checks if the string holds a true value.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isTrue(String string, Object yes, Object no)
+ throws AraraException {
+ return (isTrue(string) ? yes : no);
+ }
+
+ /**
+ * Checks if the string holds a false value.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isFalse(String string, Object yes, Object no)
+ throws AraraException {
+ return (isFalse(string) ? yes : no);
+ }
+
+ /**
+ * Checks if the string holds a true value.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @param fallback Object to return if string is empty.
+ * @return One of the three options.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isTrue(String string, Object yes, Object no,
+ Object fallback) throws AraraException {
+ return isEmpty(string) ? fallback : (isTrue(string) ? yes : no);
+ }
+
+ /**
+ * Checks if the string holds a false value.
+ *
+ * @param string The string.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @param fallback Object to return if string is empty.
+ * @return One of the three options.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isFalse(String string, Object yes, Object no,
+ Object fallback) throws AraraException {
+ return isEmpty(string) ? fallback : (isFalse(string) ? yes : no);
+ }
+
+ /**
+ * Trim spaces from the string.
+ *
+ * @param string The string.
+ * @return A trimmed string.
+ */
+ public static String trimSpaces(String string) {
+ return string.trim();
+ }
+
+ /**
+ * Checks if the expression resolves to true.
+ *
+ * @param value The expression.
+ * @param yes Object to return if true.
+ * @return An object or an empty string.
+ */
+ public static Object isTrue(boolean value, Object yes) {
+ return value ? yes : "";
+ }
+
+ /**
+ * Checks if the expression resolves to false.
+ *
+ * @param value The expression.
+ * @param yes Object to return if true.
+ * @return An object or an empty string.
+ */
+ public static Object isFalse(boolean value, Object yes) {
+ return !value ? yes : "";
+ }
+
+ /**
+ * Checks if the expression resolves to true.
+ *
+ * @param value The expression.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ */
+ public static Object isTrue(boolean value, Object yes, Object no) {
+ return value ? yes : no;
+ }
+
+ /**
+ * Checks if the expression resolves to false.
+ *
+ * @param value The expression.
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ */
+ public static Object isFalse(boolean value, Object yes, Object no) {
+ return !value ? yes : no;
+ }
+
+ /**
+ * Gets the basename.
+ *
+ * @param file The file.
+ * @return The basename of the provided file.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static String getBasename(File file) throws AraraException {
+ if (file.isFile()) {
+ return FileHandlingUtils.INSTANCE.getBasename(file);
+ } else {
+ throw new AraraException(
+ CommonUtils.INSTANCE.getRuleErrorHeader().concat(
+ messages.getMessage(
+ Messages.ERROR_BASENAME_NOT_A_FILE,
+ file.getName()
+ )
+ )
+ );
+ }
+ }
+
+ /**
+ * Gets the basename.
+ *
+ * @param filename The string.
+ * @return The basename.
+ */
+ public static String getBasename(String filename) {
+ return FileHandlingUtils.INSTANCE.getBasename(new File(filename));
+ }
+
+ /**
+ * Gets the file type.
+ *
+ * @param file The provided file.
+ * @return The file type.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static String getFiletype(File file) throws AraraException {
+ if (file.isFile()) {
+ return FileHandlingUtils.INSTANCE.getFileExtension(file);
+ } else {
+ throw new AraraException(
+ CommonUtils.INSTANCE.getRuleErrorHeader().concat(
+ messages.getMessage(
+ Messages.ERROR_FILETYPE_NOT_A_FILE,
+ file.getName()
+ )
+ )
+ );
+ }
+ }
+
+ /**
+ * Gets the file type.
+ *
+ * @param filename The provided string.
+ * @return The file type.
+ */
+ public static String getFiletype(String filename) {
+ return FileHandlingUtils.INSTANCE.getFileExtension(new File(filename));
+ }
+
+ /**
+ * Replicates the pattern to each element of a list.
+ *
+ * @param pattern The pattern.
+ * @param values The list.
+ * @return A list of strings containing the pattern applied to the list.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static List<Object> replicatePattern(String pattern,
+ List<Object> values)
+ throws AraraException {
+ return CommonUtils.INSTANCE.replicateList(pattern, values);
+ }
+
+ /**
+ * Throws an exception.
+ *
+ * @param text The text to be thrown as the exception message.
+ * @throws AraraException The exception to be thrown by this method.
+ */
+ public static void throwError(String text) throws AraraException {
+ throw new AraraException(text);
+ }
+
+ /**
+ * Gets the session.
+ *
+ * @return The session.
+ */
+ public static Session getSession() {
+ return session;
+ }
+
+ /**
+ * Checks if Windows is the underlying operating system.
+ *
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean isWindows() throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("windows");
+ }
+
+ /**
+ * Checks if we are inside a Cygwin environment.
+ *
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean isCygwin() throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("cygwin");
+ }
+
+ /**
+ * Checks if Linux is the underlying operating system.
+ *
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean isLinux() throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("linux");
+ }
+
+ /**
+ * Checks if Mac is the underlying operating system.
+ *
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean isMac() throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("mac");
+ }
+
+ /**
+ * Checks if Unix is the underlying operating system.
+ *
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean isUnix() throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("unix");
+ }
+
+ /**
+ * Checks if Windows is the underlying operating system.
+ *
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isWindows(Object yes, Object no)
+ throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("windows") ? yes : no;
+ }
+
+ /**
+ * Checks if we are inside a Cygwin environment.
+ *
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isCygwin(Object yes, Object no) throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("cygwin") ? yes : no;
+ }
+
+ /**
+ * Checks if Linux is the underlying operating system.
+ *
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isLinux(Object yes, Object no) throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("linux") ? yes : no;
+ }
+
+ /**
+ * Checks if Mac is the underlying operating system.
+ *
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isMac(Object yes, Object no) throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("mac") ? yes : no;
+ }
+
+ /**
+ * Checks if Unix is the underlying operating system.
+ *
+ * @param yes Object to return if true.
+ * @param no Object to return if false.
+ * @return One of the two objects.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static Object isUnix(Object yes, Object no) throws AraraException {
+ return CommonUtils.INSTANCE.checkOS("unix") ? yes : no;
+ }
+
+ /**
+ * Checks if the file exists according to its extension.
+ *
+ * @param extension The extension.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean exists(String extension) throws AraraException {
+ return FileHandlingUtils.INSTANCE.exists(extension);
+ }
+
+ /**
+ * Checks if the file is missing according to its extension.
+ *
+ * @param extension The extension.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean missing(String extension) throws AraraException {
+ return !exists(extension);
+ }
+
+ /**
+ * Checks if the file has changed, according to its extension.
+ *
+ * @param extension The extension.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean changed(String extension) throws AraraException {
+ return FileHandlingUtils.INSTANCE.hasChanged(extension);
+ }
+
+ /**
+ * Checks if the file is unchanged according to its extension.
+ *
+ * @param extension The extension.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean unchanged(String extension) throws AraraException {
+ return !changed(extension);
+ }
+
+ /**
+ * Checks if the file exists.
+ *
+ * @param filename The file.
+ * @return A boolean value.
+ */
+ public static boolean exists(File filename) {
+ return filename.exists();
+ }
+
+ /**
+ * Checks if the file is missing.
+ *
+ * @param filename The file.
+ * @return A boolean value.
+ */
+ public static boolean missing(File filename) {
+ return !exists(filename);
+ }
+
+ /**
+ * Checks if the file has changed.
+ *
+ * @param filename The file.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean changed(File filename) throws AraraException {
+ return FileHandlingUtils.INSTANCE.hasChanged(filename);
+ }
+
+ /**
+ * Checks if the file is unchanged.
+ *
+ * @param filename The file.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean unchanged(File filename) throws AraraException {
+ return !changed(filename);
+ }
+
+ /**
+ * Build a string based on an array of objects.
+ *
+ * @param objects Array of objects.
+ * @return A string built from the array.
+ */
+ public static String buildString(Object... objects) {
+ return CommonUtils.INSTANCE.generateString(objects);
+ }
+
+ /**
+ * Checks if the file contains the regex, based on its extension.
+ *
+ * @param extension The extension.
+ * @param regex The regex.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean found(String extension, String regex)
+ throws AraraException {
+ return CommonUtils.INSTANCE.checkRegex(extension, regex);
+ }
+
+ /**
+ * Checks if the file contains the provided regex.
+ *
+ * @param file The file.
+ * @param regex The regex.
+ * @return A boolean value.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ public static boolean found(File file, String regex)
+ throws AraraException {
+ return CommonUtils.INSTANCE.checkRegex(file, regex);
+ }
+
+ /**
+ * Gets the command based on a list of strings.
+ *
+ * @param elements The list of strings.
+ * @return A command.
+ */
+ public static Command getCommand(List<String> elements) {
+ return new Command(elements);
+ }
+
+ /**
+ * Gets the command based on an array of objects.
+ *
+ * @param elements Array of objects.
+ * @return A command.
+ */
+ public static Command getCommand(Object... elements) {
+ return new Command(elements);
+ }
+
+ /**
+ * Gets the command based on an array of objects and with the provided
+ * working directory as string.
+ *
+ * @param path String path representing the working directory.
+ * @param elements Array of elements.
+ * @return A command.
+ */
+ public static Command getCommandWithWorkingDirectory(String path,
+ Object... elements) {
+ Command command = new Command(elements);
+ command.setWorkingDirectory(new File(path));
+ return command;
+ }
+
+ /**
+ * Gets the command based on an array of objects and with the provided
+ * working directory as file.
+ *
+ * @param file File representing the working directory.
+ * @param elements Array of elements.
+ * @return A command.
+ */
+ public static Command getCommandWithWorkingDirectory(File file,
+ Object... elements) {
+ Command command = new Command(elements);
+ command.setWorkingDirectory(file);
+ return command;
+ }
+
+ /**
+ * Gets the command based on a list of strings and with the provided
+ * working directory as string.
+ *
+ * @param path String path representing the working directory.
+ * @param elements List of strings.
+ * @return A command.
+ */
+ public static Command getCommandWithWorkingDirectory(String path,
+ List<String> elements) {
+ Command command = new Command(elements);
+ command.setWorkingDirectory(new File(path));
+ return command;
+ }
+
+ /**
+ * Gets the command based on a list of strings and with the provided
+ * working directory as file.
+ *
+ * @param file File representing the working directory.
+ * @param elements List of strings.
+ * @return A command.
+ */
+ public static Command getCommandWithWorkingDirectory(File file,
+ List<String> elements) {
+ Command command = new Command(elements);
+ command.setWorkingDirectory(file);
+ return command;
+ }
+
+ /**
+ * Checks if the object is an instance of the provided class.
+ *
+ * @param clazz The class.
+ * @param object The object.
+ * @return A boolean value.
+ */
+ public static boolean checkClass(Class<?> clazz, Object object) {
+ return clazz.isInstance(object);
+ }
+
+ /**
+ * Checks if the object is a string.
+ *
+ * @param object The object.
+ * @return A boolean value.
+ */
+ public static boolean isString(Object object) {
+ return checkClass(String.class, object);
+ }
+
+ /**
+ * Checks if the object is a list.
+ *
+ * @param object The object.
+ * @return A boolean value.
+ */
+ public static boolean isList(Object object) {
+ return checkClass(List.class, object);
+ }
+
+ /**
+ * Checks if the object is a map.
+ *
+ * @param object The object.
+ * @return A boolean value.
+ */
+ public static boolean isMap(Object object) {
+ return checkClass(Map.class, object);
+ }
+
+ /**
+ * Checks if the object is a boolean.
+ *
+ * @param object The object.
+ * @return A boolean value.
+ */
+ public static boolean isBoolean(Object object) {
+ return checkClass(Boolean.class, object);
+ }
+
+ /**
+ * Checks if the execution is in verbose mode.
+ *
+ * @return A boolean value indicating if the execution is in verbose mode.
+ */
+ public static boolean isVerboseMode() {
+ return Arara.INSTANCE.getConfig()
+ .get(AraraSpec.Execution.INSTANCE.getVerbose());
+ }
+
+ /**
+ * Returns a file object based on the provided name.
+ *
+ * @param name The file name.
+ * @return A file object.
+ */
+ public static File toFile(String name) {
+ return new File(name);
+ }
+
+ /**
+ * Shows the message.
+ *
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ */
+ public static void showMessage(int width, int type,
+ String title, String text) {
+ MessageUtils.INSTANCE.showMessage(width, type, title, text);
+ }
+
+ /**
+ * Shows the message. It relies on the default width.
+ *
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ */
+ public static void showMessage(int type, String title, String text) {
+ MessageUtils.INSTANCE.showMessage(type, title, text);
+ }
+
+ /**
+ * Shows a message with options presented as an array of buttons.
+ *
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param buttons An array of objects to be presented as buttons.
+ * @return The index of the selected button, starting from 1.
+ */
+ public static int showOptions(int width, int type, String title,
+ String text, Object... buttons) {
+ return MessageUtils.INSTANCE.showOptions(width, type, title, text, buttons);
+ }
+
+ /**
+ * Shows a message with options presented as an array of buttons. It relies
+ * on the default width.
+ *
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param buttons An array of objects to be presented as buttons.
+ * @return The index of the selected button, starting from 1.
+ */
+ public static int showOptions(int type, String title,
+ String text, Object... buttons) {
+ return MessageUtils.INSTANCE.showOptions(type, title, text, buttons);
+ }
+
+ /**
+ * Shows a message with a text input.
+ *
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @return The string representing the input text.
+ */
+ public static String showInput(int width, int type,
+ String title, String text) {
+ return MessageUtils.INSTANCE.showInput(width, type, title, text);
+ }
+
+ /**
+ * Shows a message with a text input. It relies on the default width.
+ *
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @return The string representing the input text.
+ */
+ public static String showInput(int type, String title, String text) {
+ return MessageUtils.INSTANCE.showInput(type, title, text);
+ }
+
+ /**
+ * Shows a message with options presented as a dropdown list of elements.
+ *
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param elements An array of objects representing the elements.
+ * @return The index of the selected element, starting from 1.
+ */
+ public static int showDropdown(int width, int type, String title,
+ String text, Object... elements) {
+ return MessageUtils.INSTANCE.showDropdown(width, type, title, text, elements);
+ }
+
+ /**
+ * Shows a message with options presented as a dropdown list of elements. It
+ * relies on the default width.
+ *
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param elements An array of objects representing the elements.
+ * @return The index of the selected element, starting from 1.
+ */
+ public static int showDropdown(int type, String title,
+ String text, Object... elements) {
+ return MessageUtils.INSTANCE.showDropdown(type, title, text, elements);
+ }
+
+ /**
+ * Checks if the provided command name is reachable from the system path.
+ *
+ * @param command A string representing the command.
+ * @return A logic value.
+ */
+ public static boolean isOnPath(String command) {
+ return CommonUtils.INSTANCE.isOnPath(command);
+ }
+
+ /**
+ * Unsafely executes a system command from the underlying operating system
+ * and returns a pair containing the exit status and the command output as a
+ * string.
+ *
+ * @param command The system command to be executed.
+ * @return A pair containing the exit status and the system command output
+ * as a string.
+ */
+ public static Pair<Integer, String> unsafelyExecuteSystemCommand(Command command) {
+ return SystemCallUtils.INSTANCE.executeSystemCommand(command);
+ }
+
+ /**
+ * Gets the file reference for the current directive. It is important to
+ * observe that version 4.0 of arara replicates the directive when 'files'
+ * is detected amongst the parameters, so each instance will have a
+ * different reference.
+ *
+ * @return A file reference for the current directive.
+ */
+ public static File currentFile() {
+ return Arara.INSTANCE.getConfig().get(AraraSpec.Execution
+ .INSTANCE.getFile());
+ }
+
+ /**
+ * Loads a class from the provided file, potentially a Java archive.
+ *
+ * @param file File containing the Java bytecode (namely, a JAR).
+ * @param name The canonical name of the class.
+ * @return A pair representing the status and the class.
+ */
+ // TODO: refactor to use the enum
+ public static Pair<Integer, Class<?>> loadClass(File file, String name) {
+ Pair<ClassLoadingUtils.ClassLoadingStatus, Class<?>> pair =
+ ClassLoadingUtils.INSTANCE.loadClass(file, name);
+ return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
+ }
+
+ /**
+ * Loads a class from the provided string reference, representing a file.
+ *
+ * @param ref String reference representing a file.
+ * @param name The canonical name of the class.
+ * @return A pair representing the status and the class.
+ */
+ // TODO: refactor to use the enum
+ public static Pair<Integer, Class<?>> loadClass(String ref, String name) {
+ Pair<ClassLoadingUtils.ClassLoadingStatus, Class<?>> pair =
+ ClassLoadingUtils.INSTANCE.loadClass(new File(ref), name);
+ return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
+ }
+
+ /**
+ * Loads a class from the provided file, instantiating it.
+ *
+ * @param file File containing the Java bytecode (namely, a JAR).
+ * @param name The canonical name of the class.
+ * @return A pair representing the status and the class object.
+ */
+ // TODO: refactor to use the enum
+ public static Pair<Integer, Object> loadObject(File file, String name) {
+ Pair<ClassLoadingUtils.ClassLoadingStatus, Object> pair =
+ ClassLoadingUtils.INSTANCE.loadObject(file, name);
+ return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
+ }
+
+ /**
+ * Loads a class from the provided string reference, instantiating it.
+ *
+ * @param ref String reference representing a file.
+ * @param name The canonical name of the class.
+ * @return A pair representing the status and the class object.
+ */
+ // TODO: refactor to use the enum
+ public static Pair<Integer, Object> loadObject(String ref, String name) {
+ Pair<ClassLoadingUtils.ClassLoadingStatus, Object> pair =
+ ClassLoadingUtils.INSTANCE.loadObject(new File(ref), name);
+ return new Pair<>(pair.getFirst().ordinal(), pair.getSecond());
+ }
+
+ /**
+ * List all files from the provided directory according to the list of
+ * extensions. The leading dot must be omitted, unless it is part of the
+ * extension.
+ *
+ * @param directory The provided directory.
+ * @param extensions The list of extensions.
+ * @param recursive A flag indicating whether the search is recursive.
+ * @return A list of files.
+ */
+ public static List<File> listFilesByExtensions(File directory,
+ List<String> extensions, boolean recursive) {
+ return FileSearchingUtils.INSTANCE.listFilesByExtensions(
+ directory,
+ extensions,
+ recursive
+ );
+ }
+
+ /**
+ * List all files from the provided string path according to the list of
+ * extensions. The leading dot must be omitted, unless it is part of the
+ * extension.
+ *
+ * @param path The provided path as plain string.
+ * @param extensions The list of extensions.
+ * @param recursive A flag indicating whether the search is recursive.
+ * @return A list of files.
+ */
+ public static List<File> listFilesByExtensions(String path,
+ List<String> extensions, boolean recursive) {
+ return FileSearchingUtils.INSTANCE.listFilesByExtensions(
+ new File(path),
+ extensions,
+ recursive
+ );
+ }
+
+ /**
+ * List all files from the provided directory matching the list of file
+ * name patterns. Such list can contain wildcards.
+ *
+ * @param directory The provided directory.
+ * @param patterns The list of file name patterns.
+ * @param recursive A flag indicating whether the search is recursive.
+ * @return A list of files.
+ */
+ public static List<File> listFilesByPatterns(File directory,
+ List<String> patterns, boolean recursive) {
+ return FileSearchingUtils.INSTANCE.listFilesByPatterns(
+ directory,
+ patterns,
+ recursive
+ );
+ }
+
+ /**
+ * List all files from the provided path matching the list of file
+ * name patterns. Such list can contain wildcards.
+ *
+ * @param path The provided path as plain string.
+ * @param patterns The list of file name patterns.
+ * @param recursive A flag indicating whether the search is recursive.
+ * @return A list of files.
+ */
+ public static List<File> listFilesByPatterns(String path,
+ List<String> patterns, boolean recursive) {
+ return FileSearchingUtils.INSTANCE.listFilesByPatterns(
+ new File(path),
+ patterns,
+ recursive
+ );
+ }
+
+ /**
+ * Writes the string to a file, using UTF-8 as default encoding.
+ *
+ * @param file The file.
+ * @param text The string to be written.
+ * @param append A flag whether to append the content.
+ * @return A logical value indicating whether it was successful.
+ */
+ public static boolean writeToFile(File file, String text, boolean append) {
+ return FileHandlingUtils.INSTANCE.writeToFile(file, text, append);
+ }
+
+ /**
+ * Writes the string to a file, using UTF-8 as default encoding.
+ *
+ * @param path The path.
+ * @param text The string to be written.
+ * @param append A flag whether to append the content.
+ * @return A logical value indicating whether it was successful.
+ */
+ public static boolean writeToFile(String path, String text,
+ boolean append) {
+ return FileHandlingUtils.INSTANCE.writeToFile(new File(path), text, append);
+ }
+
+ /**
+ * Writes the string list to a file, using UTF-8 as default encoding.
+ *
+ * @param file The file.
+ * @param lines The string list to be written.
+ * @param append A flag whether to append the content.
+ * @return A logical value indicating whether it was successful.
+ */
+ public static boolean writeToFile(File file, List<String> lines,
+ boolean append) {
+ return FileHandlingUtils.INSTANCE.writeToFile(file, lines, append);
+ }
+
+ /**
+ * Writes the string list to a file, using UTF-8 as default encoding.
+ *
+ * @param path The path.
+ * @param lines The string list to be written.
+ * @param append A flag whether to append the content.
+ * @return A logical value indicating whether it was successful.
+ */
+ public static boolean writeToFile(String path, List<String> lines,
+ boolean append) {
+ return FileHandlingUtils.INSTANCE.writeToFile(new File(path), lines, append);
+ }
+
+ /**
+ * Reads the provided file into a list of strings.
+ *
+ * @param file The file.
+ * @return A list of strings.
+ */
+ public static List<String> readFromFile(File file) {
+ return FileHandlingUtils.INSTANCE.readFromFile(file);
+ }
+
+ /**
+ * Reads the provided file into a list of strings.
+ *
+ * @param path The path.
+ * @return A list of strings.
+ */
+ public static List<String> readFromFile(String path) {
+ return FileHandlingUtils.INSTANCE.readFromFile(new File(path));
+ }
+
+ /**
+ * Checks whether a directory is under the project directory.
+ *
+ * @param directory The directory to be inspected.
+ * @return Logical value indicating whether the directoy is under root.
+ * @throws AraraException There was a problem with path retrieval.
+ */
+ public static boolean isSubdirectory(File directory)
+ throws AraraException {
+ return FileHandlingUtils.INSTANCE.isSubDirectory(
+ directory, getOriginalReference());
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/Arara.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/Arara.kt
new file mode 100644
index 0000000000..2b4efbf8db
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/Arara.kt
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara
+
+import com.github.ajalt.clikt.parameters.options.versionOption
+import com.uchuhimo.konf.Config
+import java.time.LocalDate
+import kotlin.time.ExperimentalTime
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.configuration.Configuration
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.model.Extractor
+import org.islandoftex.arara.model.Interpreter
+import org.islandoftex.arara.ruleset.DirectiveUtils
+import org.islandoftex.arara.utils.DisplayUtils
+
+/**
+ * arara's main entry point
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 5.0
+ */
+object Arara {
+ // TODO: watch config files
+ val baseconfig = Config { addSpec(AraraSpec) }
+ .from.env()
+ .from.systemProperties()
+ var config = baseconfig.withLayer("initial")
+
+ /**
+ * Main method. This is the application entry point.
+ * @param args A string array containing all command line arguments.
+ */
+ @ExperimentalTime
+ @JvmStatic
+ fun main(args: Array<String>) {
+ // print the arara logo in the terminal; I just
+ // hope people use this tool in a good terminal with
+ // fixed-width fonts, otherwise the logo will be messed
+ DisplayUtils.printLogo()
+
+ val version = config[AraraSpec.Application.version]
+ CLI().versionOption(version, names = setOf("-V", "--version"),
+ message = {
+ "arara $version\n" +
+ "Copyright (c) ${LocalDate.now().year}, Island of TeX\n" +
+ LanguageController.getMessage(Messages
+ .INFO_PARSER_NOTES) + "\n\n" +
+ "New features in version $version:\n" +
+ Arara::class.java
+ .getResource("/org/islandoftex/arara/configuration/release-notes")
+ .readText()
+ })
+ .main(args)
+ }
+
+ @ExperimentalTime
+ fun run() {
+ try {
+ // first of all, let's try to load a potential
+ // configuration file located at the current
+ // user's home directory; if there's a bad
+ // configuration file, arara will panic and
+ // end the execution
+ Configuration.load()
+
+ // let's print the current file information; it is a
+ // basic display, just the file name, the size properly
+ // formatted as a human readable format, and the last
+ // modification date; also, in this point, the logging
+ // feature starts to collect data (of course, if enabled
+ // either through the configuration file or manually
+ // in the command line)
+ DisplayUtils.printFileInformation()
+
+ // time to read the file and try to extract the directives;
+ // extract() brings us a list of directives properly parsed
+ // and almost ready to be handled; note that no directives
+ // in the provided file will raise an exception; this is
+ // by design and I opted to not include a default fallback
+ // (although it wouldn't be so difficult to write one,
+ // I decided not to take the risk)
+ val extracted = Extractor.extract(config[AraraSpec.Execution
+ .reference])
+
+ // it is time to validate the directives (for example, we have
+ // a couple of keywords that cannot be used as directive
+ // parameters); another interesting feature of the validate()
+ // method is to replicate a directive that has the 'files'
+ // keyword on it, since it's the whole point of having 'files'
+ // in the first place; if you check the log file, you will see
+ // that the list of extracted directives might differ from
+ // the final list of directives to be effectively processed
+ // by arara
+ val directives = DirectiveUtils.process(extracted)
+
+ // time to shine, now the interpreter class will interpret
+ // one directive at a time, get the corresponding rule,
+ // set the parameters, evaluate it, get the tasks, run them,
+ // evaluate the result and print the status; note that
+ // arara, from this version on, will try to evaluate things
+ // progressively, so in case of an error, the previous tasks
+ // were already processed and potentially executed
+ Interpreter(directives).execute()
+ } catch (exception: AraraException) {
+ // something bad just happened, so arara will print the proper
+ // exception and provide details on it, if available; the idea
+ // here is to propagate an exception throughout the whole
+ // application and catch it here instead of a local treatment
+ DisplayUtils.printException(exception)
+ }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/CLI.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/CLI.kt
new file mode 100644
index 0000000000..9de0f1bd3f
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/CLI.kt
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.arguments.argument
+import com.github.ajalt.clikt.parameters.arguments.multiple
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.flag
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.types.int
+import com.github.ajalt.clikt.parameters.types.path
+import com.github.ajalt.clikt.parameters.types.restrictTo
+import kotlin.system.exitProcess
+import kotlin.time.ClockMark
+import kotlin.time.ExperimentalTime
+import kotlin.time.MonoClock
+import kotlin.time.milliseconds
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.filehandling.FileSearchingUtils
+import org.islandoftex.arara.localization.Language
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.model.Session
+import org.islandoftex.arara.utils.CommonUtils
+import org.islandoftex.arara.utils.DisplayUtils
+import org.islandoftex.arara.utils.LoggingUtils
+
+/**
+ * arara's command line interface
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 5.0
+ */
+class CLI : CliktCommand(name = "arara", printHelpOnEmptyArgs = true) {
+ private val log by option("-l", "--log",
+ help = "Generate a log output")
+ .flag(default = AraraSpec.Execution.logging.default)
+ private val verbose by option("-v", "--verbose",
+ help = "Print the command output")
+ .flag("-s", "--silent",
+ default = AraraSpec.Execution.verbose.default)
+ private val dryrun by option("-n", "--dry-run",
+ help = "Go through all the motions of running a command, but " +
+ "with no actual calls")
+ .flag(default = AraraSpec.Execution.dryrun.default)
+ private val onlyheader by option("-H", "--header",
+ help = "Extract directives only in the file header")
+ .flag(default = AraraSpec.Execution.onlyHeader.default)
+ private val timeout by option("-t", "--timeout",
+ help = "Set the execution timeout (in milliseconds)")
+ .int().restrictTo(min = 1)
+ private val language by option("-L", "--language",
+ help = "Set the application language")
+ .default(AraraSpec.Application.defaultLanguageCode.default)
+ private val maxLoops by option("-m", "--max-loops",
+ help = "Set the maximum number of loops (> 0)")
+ .int().restrictTo(min = 1)
+ .default(AraraSpec.Execution.maxLoops.default)
+ private val preamble by option("-p", "--preamble",
+ help = "Set the file preamble based on the configuration file")
+ private val workingDirectory by option("-d", "--working-directory",
+ help = "Set the working directory for all tools")
+ .path(exists = true, fileOkay = false, readable = true)
+ .default(AraraSpec.Execution.workingDirectory.default)
+
+ private val reference by argument("file",
+ help = "The file(s) to evaluate and process")
+ .multiple(required = true)
+
+ /**
+ * Update the default configuration with the values parsed from the
+ * command line.
+ */
+ @ExperimentalTime
+ private fun updateConfigurationFromCommandLine() {
+ Arara.config[AraraSpec.Execution.language] = Language(language)
+ LanguageController.setLocale(Arara.config[AraraSpec.Execution.language]
+ .locale)
+
+ Arara.config[AraraSpec.Execution.logging] = log
+ Arara.config[AraraSpec.Execution.verbose] = verbose
+ Arara.config[AraraSpec.Execution.dryrun] = dryrun
+ Arara.config[AraraSpec.Execution.onlyHeader] = onlyheader
+ Arara.config[AraraSpec.Execution.maxLoops] = maxLoops
+ Arara.config[AraraSpec.Execution.workingDirectory] = workingDirectory
+ preamble?.let {
+ val preambles = Arara.config[AraraSpec.Execution.preambles]
+ if (preambles.containsKey(it)) {
+ Arara.config[AraraSpec.Execution.preamblesActive] = true
+ Arara.config[AraraSpec.Execution.preamblesContent] =
+ // will never throw (see check above)
+ preambles.getValue(it)
+ } else {
+ throw AraraException(
+ LanguageController.getMessage(
+ Messages.ERROR_PARSER_INVALID_PREAMBLE, it)
+ )
+ }
+ }
+ timeout?.let {
+ Arara.config[AraraSpec.Execution.timeout] = true
+ Arara.config[AraraSpec.Execution.timeoutValue] = it.milliseconds
+ }
+
+ Arara.config[AraraSpec.UserInteraction.displayTime] = true
+ }
+
+ /**
+ * The actual main method of arara (when run in command-line mode)
+ */
+ @ExperimentalTime
+ override fun run() {
+ // the first component to be initialized is the
+ // logging controller; note init() actually disables
+ // the logging, so early exceptions won't generate
+ // a lot of noise in the terminal
+ LoggingUtils.init()
+
+ // arara features a stopwatch, so we can see how much time has passed
+ // since everything started; internally, this class makes use of
+ // nano time, so we might get an interesting precision here
+ // (although timing is not a serious business in here, it's
+ // just a cool addition)
+ val executionStart: ClockMark = MonoClock.markNow()
+
+ // arara stores the environment variables accessible at the start
+ // of the execution in the session object for the user
+ Session.updateEnvironmentVariables()
+
+ // logging has to be initialized only once and for all because
+ // context resets lead to missing output
+ LoggingUtils.enableLogging(log)
+
+ try {
+ // TODO: this will have to change for parallelization
+ reference.forEach {
+ // TODO: do we have to reset some more file-specific config?
+ // especially the working directory will have to be set and
+ // changed
+ Arara.config = Arara.baseconfig.withLayer(it)
+ // next, update the configuration
+ updateConfigurationFromCommandLine()
+ FileSearchingUtils.discoverFile(it)
+ Arara.run()
+ // add an empty line between file executions
+ println()
+ }
+
+ // this is the last command from arara; once the execution time is
+ // available, print it; note that this notification is suppressed
+ // when the command line parsing returns false as result (it makes
+ // no sense to print the execution time for a help message, I guess)
+ DisplayUtils.printTime(executionStart.elapsedNow().inSeconds)
+ } catch (ex: AraraException) {
+ DisplayUtils.printException(ex)
+ Arara.config[AraraSpec.Execution.status] = 2
+ }
+
+ // gets the application exit status; the rule here is:
+ // 0 : everything went just fine (note that the dry-run mode always
+ // makes arara exit with 0, unless it is an error in the directive
+ // builder itself).
+ // 1 : one of the tasks failed, so the execution ended abruptly. This
+ // means the error relies on the command line call, not with arara.
+ // 2 : arara just handled an exception, meaning that something bad
+ // just happened and might require user intervention.
+ exitProcess(CommonUtils.exitStatus)
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt
new file mode 100644
index 0000000000..14100ec98b
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/AraraSpec.kt
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.configuration
+
+import com.uchuhimo.konf.ConfigSpec
+import java.io.File
+import java.nio.file.Paths
+import kotlin.time.ExperimentalTime
+import kotlin.time.milliseconds
+import org.islandoftex.arara.localization.Language
+
+/**
+ * Configuration hierarchy for arara
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 5.0
+ */
+@Suppress("MagicNumber")
+object AraraSpec : ConfigSpec() {
+ object Application : ConfigSpec() {
+ val defaultLanguageCode by optional("en")
+ val version by optional(AraraSpec::class.java.`package`.implementationVersion
+ ?: "DEVELOPMENT BUILD")
+ val namePattern by optional("arara:\\s")
+ val width by optional(65)
+ }
+
+ object Execution : ConfigSpec() {
+ val maxLoops by optional(10)
+ val timeout by optional(false)
+ @ExperimentalTime
+ val timeoutValue by optional(0.milliseconds)
+ val haltOnErrors by optional(true)
+
+ val databaseName by optional("arara")
+ val logName by optional("arara")
+
+ val verbose by optional(false)
+ val language by optional(Language(Application.defaultLanguageCode.default))
+ val logging by optional(false)
+ val dryrun by optional(false)
+ val status by optional(0)
+ val fileTypes by optional(ConfigurationUtils.defaultFileTypes)
+ val rulePaths by optional(setOf(
+ ConfigurationUtils.applicationPath.resolve("rules")
+ .toString()
+ ))
+ val preambles by optional(mapOf<String, String>())
+ val preamblesActive by optional(false)
+ val preamblesContent by optional("")
+
+ val workingDirectory by optional(Paths.get(""))
+ val configurationName by optional("[none]")
+ val onlyHeader by optional(false)
+
+ // TODO: these are runtime values, they should be properly
+ // initialized and tested (maybe move them into their own
+ // Spec or session)
+ val reference by optional(File("/tmp/"))
+ val file by optional(File("/tmp/"))
+
+ object InfoSpec : ConfigSpec() {
+ val ruleId by optional<String?>(null)
+ val rulePath by optional<String?>(null)
+ }
+
+ object DirectiveSpec : ConfigSpec() {
+ val lines by optional(listOf<Int>())
+ }
+
+ val filePattern by optional("")
+ }
+
+ object Directive : ConfigSpec() {
+ val linebreakPattern by optional("^\\s*-->\\s(.*)$")
+
+ private const val directivestart = """^\s*(\w+)\s*(:\s*(\{.*\})\s*)?"""
+ private const val pattern = """(\s+(if|while|until|unless)\s+(\S.*))?$"""
+ val directivePattern by optional(directivestart + pattern)
+ }
+
+ object UserInteraction : ConfigSpec() {
+ val lookAndFeel by optional("none")
+ val displayTime by optional(false)
+ val displayLine by optional(true)
+ val displayResult by optional(false)
+ val displayRolling by optional(false)
+ val displayException by optional(false)
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt
new file mode 100644
index 0000000000..06abeeb6db
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/Configuration.kt
@@ -0,0 +1,101 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.configuration
+
+import kotlin.time.ExperimentalTime
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.filehandling.FileHandlingUtils
+import org.islandoftex.arara.localization.Language
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+
+/**
+ * Implements the configuration model, which holds the default settings and can
+ * load the configuration file. The idea here is to provide a map that holds
+ * all configuration settings used by model and utilitary classes throughout
+ * the execution. This controller is implemented as a singleton.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object Configuration {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ /**
+ * Loads the application configuration.
+ *
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @ExperimentalTime
+ @Throws(AraraException::class)
+ fun load() {
+ // initialize both file type and language models,
+ // since we can track errors from there instead
+ // of relying on a check on this level
+
+ // get the configuration file, if any
+ val file = ConfigurationUtils.configFile
+ if (file != null) {
+ // set the configuration file name for
+ // logging purposes
+ Arara.config[AraraSpec.Execution.configurationName] =
+ FileHandlingUtils.getCanonicalPath(file)
+
+ // then validate it and update the
+ // configuration accordingly
+ val resource = ConfigurationUtils.loadLocalConfiguration(file)
+ update(resource)
+ }
+
+ // just to be sure, update the
+ // current locale in order to
+ // display localized messages
+ val locale = Arara.config[AraraSpec.Execution.language].locale
+ LanguageController.setLocale(locale)
+ }
+
+ /**
+ * Update the configuration based on the provided map.
+ *
+ * @param resource Map containing the new configuration settings.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ private fun update(resource: LocalConfiguration) {
+ if (resource.paths.isNotEmpty())
+ Arara.config[AraraSpec.Execution.rulePaths] =
+ ConfigurationUtils.normalizePaths(resource.paths)
+
+ if (resource.filetypes.isNotEmpty()) {
+ Arara.config[AraraSpec.Execution.fileTypes] = ConfigurationUtils.normalizeFileTypes(resource.filetypes)
+ }
+
+ Arara.config[AraraSpec.Execution.verbose] = resource.isVerbose
+ Arara.config[AraraSpec.Execution.logging] = resource.isLogging
+ Arara.config[AraraSpec.Execution.onlyHeader] = resource.isHeader
+ Arara.config[AraraSpec.Execution.language] =
+ Language(resource.language)
+ Arara.config[AraraSpec.UserInteraction.lookAndFeel] = resource.laf
+
+ Arara.config[AraraSpec.Execution.databaseName] =
+ ConfigurationUtils.cleanFileName(resource.dbname)
+ Arara.config[AraraSpec.Execution.logName] =
+ ConfigurationUtils.cleanFileName(resource.logname)
+
+ val loops = resource.loops
+ if (loops <= 0) {
+ throw AraraException(messages.getMessage(Messages
+ .ERROR_CONFIGURATION_LOOPS_INVALID_RANGE))
+ } else {
+ Arara.config[AraraSpec.Execution.maxLoops] = loops
+ }
+
+ if (resource.preambles.isNotEmpty())
+ Arara.config[AraraSpec.Execution.preambles] = resource.preambles
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt
new file mode 100644
index 0000000000..31a92c3009
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/ConfigurationUtils.kt
@@ -0,0 +1,157 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.configuration
+
+import com.charleskorn.kaml.Yaml
+import java.io.File
+import java.io.UnsupportedEncodingException
+import java.net.URLDecoder
+import java.nio.file.Path
+import java.nio.file.Paths
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.model.FileType
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Implements configuration utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object ConfigurationUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ /**
+ * This map contains all file types that arara accepts
+ * and their corresponding search patterns (for comments).
+ */
+ val defaultFileTypePatterns = mapOf(
+ "tex" to "^\\s*%\\s+",
+ "dtx" to "^\\s*%\\s+",
+ "ltx" to "^\\s*%\\s+",
+ "drv" to "^\\s*%\\s+",
+ "ins" to "^\\s*%\\s+"
+ )
+
+ /**
+ * Set of default file types provided by arara.
+ * Initialization may throw AraraException if file types are wrong
+ */
+ val defaultFileTypes: Set<FileType> by lazy {
+ defaultFileTypePatterns
+ .map { (extension, pattern) -> FileType(extension, pattern) }
+ .toSet()
+ }
+
+ /**
+ * The configuration file in use.
+ *
+ * Look for configuration files in the user's working directory first
+ * if no configuration files are found in the user's working directory,
+ * try to look up in a global directory, that is, the user home.
+ */
+ val configFile: File?
+ get() {
+ val names = listOf(".araraconfig.yaml",
+ "araraconfig.yaml", ".arararc.yaml", "arararc.yaml")
+ Arara.config[AraraSpec.Execution.workingDirectory]
+ .let { workingDir ->
+ val first = names
+ .map { workingDir.resolve(it).toFile() }
+ .firstOrNull { it.exists() }
+ if (first != null)
+ return first
+ }
+ CommonUtils.getSystemPropertyOrNull("user.home")?.let { userHome ->
+ return names.map { File(userHome).resolve(it) }
+ .firstOrNull { it.exists() }
+ }
+ return null
+ }
+
+ /**
+ * The canonical absolute application path.
+ *
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ val applicationPath: Path
+ @Throws(AraraException::class)
+ get() {
+ try {
+ var path = Arara::class.java.protectionDomain.codeSource
+ .location.path
+ path = URLDecoder.decode(path, "UTF-8")
+ return Paths.get(path).parent.toAbsolutePath()
+ } catch (exception: UnsupportedEncodingException) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION
+ ),
+ exception
+ )
+ }
+ }
+
+ /**
+ * Validates the configuration file.
+ *
+ * @param file The configuration file.
+ * @return The configuration file as a resource.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun loadLocalConfiguration(file: File): LocalConfiguration {
+ return file.runCatching {
+ val text = readText()
+ if (!text.startsWith("!config"))
+ throw Exception("Configuration should start with !config")
+ Yaml.default.parse(LocalConfiguration.serializer(),
+ text)
+ }.getOrElse {
+ throw AraraException(messages.getMessage(
+ Messages.ERROR_CONFIGURATION_GENERIC_ERROR), it)
+ }
+ }
+
+ /**
+ * Normalize a list of rule paths, removing all duplicates.
+ *
+ * @param paths The list of rule paths.
+ * @return A list of normalized paths, without duplicates.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun normalizePaths(paths: Iterable<String>): Set<String> =
+ paths.union(AraraSpec.Execution.rulePaths.default)
+
+ /**
+ * Normalize a list of file types, removing all duplicates.
+ *
+ * @param types The list of file types.
+ * @return A list of normalized file types, without duplicates.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun normalizeFileTypes(types: Iterable<FileType>): Set<FileType> =
+ types.union(defaultFileTypes)
+
+ /**
+ * Cleans the file name to avoid invalid entries.
+ *
+ * @param name The file name.
+ * @return A cleaned file name.
+ */
+ fun cleanFileName(name: String): String {
+ val result = File(name).name.trim()
+ return if (result.isEmpty()) "arara" else result.trim()
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt
new file mode 100644
index 0000000000..959f2a9ab8
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.configuration
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.model.FileType
+import org.islandoftex.arara.utils.CommonUtils
+import org.mvel2.templates.TemplateRuntime
+
+/**
+ * A local configuration which resembles configuration files in the working
+ * directory.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@Serializable
+class LocalConfiguration {
+ // rule paths
+ var paths: List<String> = listOf()
+ get() {
+ val user = mapOf(
+ "home" to (CommonUtils.getSystemPropertyOrNull("user.home")
+ ?: ""),
+ "name" to (CommonUtils.getSystemPropertyOrNull("user.name")
+ ?: ""))
+ val application = mapOf(
+ "workingDirectory" to Arara.config[AraraSpec.Execution.workingDirectory].toAbsolutePath().toString()
+ )
+
+ return field.map { input ->
+ var path = CommonUtils.removeKeywordNotNull(input)
+ try {
+ path = TemplateRuntime.eval(path, mapOf(
+ "user" to user, "application" to application
+ )) as String
+ } catch (_: RuntimeException) {
+ // do nothing, gracefully fallback to
+ // the default, unparsed path
+ }
+ path
+ }
+ }
+
+ // file types
+ var filetypes: List<FileType> = listOf()
+
+ // the application language
+ // default to English
+ var language: String = Arara.config[AraraSpec.Application.defaultLanguageCode]
+ get() = CommonUtils.removeKeywordNotNull(field)
+
+ // maximum number of loops
+ var loops: Int = Arara.config[AraraSpec.Execution.maxLoops]
+
+ // verbose flag
+ @SerialName("verbose")
+ var isVerbose: Boolean = Arara.config[AraraSpec.Execution.verbose]
+
+ // logging flag
+ @SerialName("logging")
+ var isLogging: Boolean = Arara.config[AraraSpec.Execution.logging]
+
+ // header flag
+ @SerialName("header")
+ var isHeader: Boolean = Arara.config[AraraSpec.Execution.onlyHeader]
+
+ // database name
+ var dbname: String = Arara.config[AraraSpec.Execution.databaseName]
+ get() = CommonUtils.removeKeywordNotNull(field)
+
+ // log name
+ var logname: String = Arara.config[AraraSpec.Execution.logName]
+ get() = CommonUtils.removeKeywordNotNull(field)
+
+ // map of preambles
+ var preambles: Map<String, String> = Arara.config[AraraSpec.Execution.preambles]
+
+ // look and feel
+ // default to none
+ var laf: String = Arara.config[AraraSpec.UserInteraction.lookAndFeel]
+ get() = CommonUtils.removeKeywordNotNull(field)
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt
new file mode 100644
index 0000000000..e4b98cd194
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/Database.kt
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.filehandling
+
+import kotlinx.serialization.Serializable
+
+/**
+ * The database model, which keeps track on file changes.
+ *
+ * This database is a map because it maps files to hashes. So the key will
+ * always be a file representation and the value always a string.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@Serializable
+data class Database(
+ /**
+ * The whole database is implemented as a map, where
+ * the key is the absolute canonical file and the value
+ * is its corresponding CRC32 hash.
+ */
+ val map: MutableMap<String, String> = mutableMapOf()
+) : MutableMap<String, String> by map
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt
new file mode 100644
index 0000000000..f4728c9366
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/DatabaseUtils.kt
@@ -0,0 +1,97 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.filehandling
+
+import com.charleskorn.kaml.Yaml
+import java.io.File
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+
+/**
+ * Implements database utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object DatabaseUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ /**
+ * Gets the file representing the YAML file (database).
+ *
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ private val file: File
+ @Throws(AraraException::class)
+ get() {
+ val reference = Arara.config[AraraSpec.Execution.reference]
+ val name = "${Arara.config[AraraSpec.Execution.databaseName]}.yaml"
+ val path = FileHandlingUtils.getParentCanonicalFile(reference)
+ return path.resolve(name)
+ }
+
+ /**
+ * Loads the YAML file representing the database.
+ *
+ * @return The database object.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun load(): Database {
+ return if (!exists()) {
+ Database()
+ } else {
+ file.runCatching {
+ val text = readText()
+ if (!text.startsWith("!database"))
+ throw Exception("Database should start with !database")
+ Yaml.default.parse(Database.serializer(), text)
+ }.getOrElse {
+ it.printStackTrace()
+ throw AraraException(messages.getMessage(Messages
+ .ERROR_LOAD_COULD_NOT_LOAD_XML, file.name), it)
+ }
+ }
+ }
+
+ /**
+ * Saves the database on a YAML file.
+ *
+ * @param database The database object.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun save(database: Database) {
+ file.runCatching {
+ val content = "!database\n" +
+ Yaml.default.stringify(Database.serializer(), database)
+ writeText(content)
+ }.getOrElse {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_SAVE_COULD_NOT_SAVE_XML,
+ file.name
+ ), it)
+ }
+ }
+
+ /**
+ * Checks if the YAML file representing the database exists.
+ *
+ * @return A boolean value indicating if the YAML file exists.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ private fun exists(): Boolean {
+ return file.exists()
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt
new file mode 100644
index 0000000000..07f1ecfab9
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtils.kt
@@ -0,0 +1,319 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.filehandling
+
+import java.io.File
+import java.io.IOException
+import java.text.SimpleDateFormat
+import java.util.zip.CRC32
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+
+/**
+ * Implements file handling utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object FileHandlingUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ /**
+ * Gets the reference of the current file in execution. Note that this
+ * method might return a value different than the main file provided in
+ * the command line.
+ *
+ * @return A reference of the current file in execution. Might be different
+ * than the main file provided in the command line.
+ */
+ private val currentFile: File
+ get() = Arara.config[AraraSpec.Execution.file]
+
+ /**
+ * Writes the string to a file, using UTF-8 as default encoding.
+ * @param file The file.
+ * @param text The string to be written.
+ * @param append A flag whether to append the content.
+ * @return A logical value indicating whether it was successful.
+ */
+ fun writeToFile(file: File, text: String, append: Boolean): Boolean {
+ return try {
+ // try to write the provided
+ // string to the file, with
+ // UTF-8 as encoding
+ if (append)
+ file.appendText(text, Charsets.UTF_8)
+ else
+ file.writeText(text, Charsets.UTF_8)
+ true
+ } catch (_: IOException) {
+ // if something bad happens,
+ // gracefully fallback to
+ // reporting the failure
+ false
+ }
+ }
+
+ /**
+ * Writes the string list to a file, using UTF-8 as default encoding.
+ * @param file The file.
+ * @param lines The string list to be written.
+ * @param append A flag whether to append the content.
+ * @return A logical value indicating whether it was successful.
+ */
+ fun writeToFile(
+ file: File,
+ lines: List<String>,
+ append: Boolean
+ ): Boolean =
+ try {
+ writeToFile(file, lines.joinToString(System.lineSeparator()),
+ append)
+ } catch (_: IOException) {
+ false
+ }
+
+ /**
+ * Reads the provided file (UTF-8) into a list of strings.
+ * @param file The file.
+ * @return A list of strings.
+ */
+ fun readFromFile(file: File): List<String> {
+ return try {
+ // returns the contents of
+ // the provided file as
+ // a list of strings
+ file.readLines(Charsets.UTF_8)
+ } catch (_: IOException) {
+ // if something bad happens,
+ // gracefully fallback to
+ // an empty file list
+ listOf()
+ }
+ }
+
+ /**
+ * Checks if a file exists based on its extension.
+ *
+ * @param extension The extension.
+ * @return A boolean value indicating if the file exists.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun exists(extension: String): Boolean {
+ val file = File(getPath(extension))
+ return file.exists()
+ }
+
+ /**
+ * Gets the parent canonical path of a file.
+ *
+ * @param file The file.
+ * @return The parent canonical path of a file.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun getParentCanonicalPath(file: File): String {
+ return getParentCanonicalFile(file).toString()
+ }
+
+ /**
+ * Gets the parent canonical file of a file.
+ *
+ * @param file The file.
+ * @return The parent canonical file of a file.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun getParentCanonicalFile(file: File): File {
+ return file.runCatching {
+ this.canonicalFile.parentFile
+ }.getOrElse {
+ // it is IOException || is is SecurityException
+ throw AraraException(messages.getMessage(
+ Messages.ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION), it)
+ }
+ }
+
+ /**
+ * Gets the full file path based on the provided extension.
+ *
+ * @param extension The extension.
+ * @return A string containing the full file path.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun getPath(extension: String): String {
+ val name = currentFile.nameWithoutExtension + ".$extension"
+ val path = getParentCanonicalFile(currentFile)
+ return path.resolve(name).toString()
+ }
+
+ /**
+ * Gets the canonical path from the provided file.
+ *
+ * @param file The file.
+ * @return The canonical path from the provided file.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun getCanonicalPath(file: File): String {
+ return getCanonicalFile(file).toString()
+ }
+
+ /**
+ * Gets the canonical file from the provided file.
+ *
+ * @param file The file.
+ * @return The canonical file from the provided file.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun getCanonicalFile(file: File): File {
+ try {
+ return file.canonicalFile
+ } catch (exception: IOException) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_GETCANONICALFILE_IO_EXCEPTION
+ ),
+ exception
+ )
+ }
+ }
+
+ /**
+ * Gets the date the provided file was last modified.
+ *
+ * @param file The file.
+ * @return A string representation of the date the provided file was last
+ * modified.
+ */
+ fun getLastModifiedInformation(file: File): String {
+ return SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
+ .format(file.lastModified())
+ }
+
+ /**
+ * Calculates the CRC32 checksum of the provided file.
+ *
+ * @param file The file.
+ * @return A string containing the CRC32 checksum of the provided file.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun calculateHash(file: File): String {
+ try {
+ return String.format("%08x", CRC32().run {
+ update(file.readBytes())
+ value
+ })
+ } catch (exception: IOException) {
+ throw AraraException(messages.getMessage(Messages
+ .ERROR_CALCULATEHASH_IO_EXCEPTION), exception)
+ }
+ }
+
+ /**
+ * Gets the extension of a file.
+ *
+ * @param file The file.
+ * @return The corresponding file type.
+ */
+ fun getFileExtension(file: File): String = file.extension
+
+ /**
+ * Gets the base name of a file.
+ *
+ * @param file The file.
+ * @return The corresponding base name.
+ */
+ fun getBasename(file: File): String = file.nameWithoutExtension
+
+ /**
+ * Checks if a file has changed since the last verification.
+ *
+ * @param file The file.
+ * @return A boolean value indicating if the file has changed since the last
+ * verification.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun hasChanged(file: File): Boolean {
+ val database = DatabaseUtils.load()
+ val path = getCanonicalPath(file)
+ return if (!file.exists()) {
+ if (database.containsKey(path)) {
+ database.remove(path)
+ DatabaseUtils.save(database)
+ true
+ } else {
+ false
+ }
+ } else {
+ val hash = calculateHash(file)
+ if (database.containsKey(path)) {
+ val value = database[path]
+ if (hash == value) {
+ false
+ } else {
+ database[path] = hash
+ DatabaseUtils.save(database)
+ true
+ }
+ } else {
+ database[path] = hash
+ DatabaseUtils.save(database)
+ true
+ }
+ }
+ }
+
+ /**
+ * Checks if the file has changed since the last verification based on the
+ * provided extension.
+ *
+ * @param extension The provided extension.
+ * @return A boolean value indicating if the file has changed since the last
+ * verification.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun hasChanged(extension: String): Boolean =
+ hasChanged(File(getPath(extension)))
+
+ /**
+ * Checks whether a directory is under a root directory.
+ *
+ * @param child Directory to be inspected.
+ * @param parent Root directory.
+ * @return Logical value indicating whether the directoy is under root.
+ * @throws AraraException There was a problem with path retrieval.
+ */
+ @Throws(AraraException::class)
+ fun isSubDirectory(child: File, parent: File): Boolean {
+ return if (child.isDirectory && parent.isDirectory) {
+ getCanonicalPath(child).startsWith(
+ getParentCanonicalPath(parent) + File.separator
+ )
+ } else {
+ throw AraraException(messages.getMessage(
+ Messages.ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY,
+ child.name))
+ }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt
new file mode 100644
index 0000000000..5c61bdb2db
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtils.kt
@@ -0,0 +1,158 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.filehandling
+
+import java.io.File
+import java.io.FileFilter
+import java.nio.file.FileSystems
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Implements file searching utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object FileSearchingUtils {
+ /**
+ * List all files from the provided directory according to the list of
+ * extensions. The leading dot must be omitted, unless it is part of the
+ * extension.
+ * @param directory The provided directory.
+ * @param extensions The list of extensions.
+ * @param recursive A flag indicating whether the search is recursive.
+ * @return A list of files.
+ */
+ fun listFilesByExtensions(
+ directory: File,
+ extensions: List<String>,
+ recursive: Boolean
+ ):
+ List<File> = try {
+ // return the result of the
+ // provided search
+ if (recursive)
+ directory.walkTopDown().asSequence()
+ .filter { !it.isDirectory }
+ .filter { extensions.contains(it.extension) }
+ .toList()
+ else
+ directory.listFiles(
+ FileFilter { extensions.contains(it.extension) })!!
+ .toList()
+ } catch (_: Exception) {
+ // if something bad happens,
+ // gracefully fallback to
+ // an empty file list
+ listOf()
+ }
+
+ /**
+ * List all files from the provided directory matching the list of file
+ * name patterns. Such list can contain wildcards.
+ * @param directory The provided directory.
+ * @param patterns The list of file name patterns.
+ * @param recursive A flag indicating whether the search is recursive.
+ * @return A list of files.
+ */
+ fun listFilesByPatterns(
+ directory: File,
+ patterns: List<String>,
+ recursive: Boolean
+ ):
+ List<File> = try {
+ // return the result of the provided
+ // search, with the wildcard filter
+ // and a potential recursive search
+ val pathMatcher = patterns.map {
+ FileSystems.getDefault().getPathMatcher("glob:$it")
+ }
+ if (recursive)
+ directory.walkTopDown().asSequence()
+ .filter { !it.isDirectory }
+ .filter { file ->
+ pathMatcher.any { it.matches(file.toPath().fileName) }
+ }.toList()
+ else
+ directory.listFiles { file: File ->
+ pathMatcher.any { it.matches(file.toPath().fileName) }
+ }!!.toList()
+ } catch (_: Exception) {
+ // if something bad happens,
+ // gracefully fallback to
+ // an empty file list
+ listOf()
+ }
+
+ /**
+ * Discovers the file through string reference lookup and sets the
+ * configuration accordingly.
+ *
+ * @param reference The string reference.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun discoverFile(reference: String) {
+ lookupFile(reference)
+ ?: throw AraraException(
+ LanguageController.getMessage(
+ Messages.ERROR_DISCOVERFILE_FILE_NOT_FOUND,
+ reference,
+ CommonUtils.fileTypesList
+ )
+ )
+ }
+
+ /**
+ * Performs a file lookup based on a string reference.
+ *
+ * @param reference The file reference as a string.
+ * @return The file as result of the lookup operation.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ private fun lookupFile(reference: String): File? {
+ val types = Arara.config[AraraSpec.Execution.fileTypes]
+ val file = Arara.config[AraraSpec.Execution.workingDirectory]
+ .resolve(reference).toFile()
+ val name = file.name
+ val parent = FileHandlingUtils.getParentCanonicalFile(file)
+
+ // direct search, so we are considering
+ // the reference as a complete name
+ val testFile = parent.resolve(name)
+ if (testFile.exists() && testFile.isFile) {
+ types.firstOrNull {
+ testFile.toString().endsWith("." + it.extension)
+ }?.let {
+ Arara.config[AraraSpec.Execution.filePattern] =
+ it.pattern
+ Arara.config[AraraSpec.Execution.reference] = testFile
+ return testFile
+ }
+ }
+
+ // indirect search; in this case, we are considering
+ // that the file reference has an implicit extension,
+ // so we need to add it and look again
+ // TODO: disable this step in safe mode
+ return types.map { parent.resolve("$name.${it.extension}") to it }
+ .union(types.map {
+ parent.resolve("${name.removeSuffix(".").trim()}.${it.extension}") to it
+ })
+ .firstOrNull { it.first.exists() && it.first.isFile }
+ ?.let {
+ Arara.config[AraraSpec.Execution.filePattern] =
+ it.second.pattern
+ Arara.config[AraraSpec.Execution.reference] = it.first
+ file
+ }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Language.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Language.kt
new file mode 100644
index 0000000000..2afa77c41e
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Language.kt
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.localization
+
+import java.util.Locale
+import org.islandoftex.arara.model.AraraException
+
+/**
+ * Implements the language model.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+class Language(code: String) {
+ // the language code, based on
+ // ISO 639-1 and language variants
+ private val code: String
+
+ /**
+ * Gets the language name.
+ *
+ * @return A string representing the language name.
+ */
+ val name: String
+ get() = languages.getValue(code).first
+
+ /**
+ * Gets the language locale.
+ *
+ * @return The language locale.
+ */
+ val locale: Locale
+ get() = languages.getValue(code).second
+
+ // throws an exception on invalid language
+ init {
+ if (languages.containsKey(code)) {
+ this.code = code
+ } else {
+ throw AraraException(
+ LanguageController.getMessage(
+ Messages.ERROR_LANGUAGE_INVALID_CODE,
+ languagesList
+ )
+ )
+ }
+ }
+
+ companion object {
+ // map containing all languages
+ // supported by arara
+ private val languages = mapOf(
+ "en" to Pair("English", Locale("en")),
+ "de" to Pair("German", Locale("de")),
+ "nl" to Pair("Dutch", Locale("nl")),
+ "qn" to Pair("Broad Norfolk", Locale("en", "QN")),
+ "ptbr" to Pair("Brazilian Portuguese", Locale("pt", "BR")),
+ "it" to Pair("Italian", Locale("it"))
+ )
+
+ /**
+ * String representing the list of available languages
+ * because they don't change initialized with the string
+ */
+ val languagesList: String = "(" + languages.map { (key, value) ->
+ value.first + ": " + key
+ }.joinToString(", ") + ")"
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt
new file mode 100644
index 0000000000..e000ab4d63
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/LanguageController.kt
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.localization
+
+import ch.qos.cal10n.IMessageConveyor
+import ch.qos.cal10n.MessageConveyor
+import java.util.Locale
+import org.islandoftex.arara.configuration.AraraSpec
+
+/**
+ * Implements the language controller. This controller provides a singleton
+ * object that holds the application messages, easily available to all model
+ * and utilitary classes.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object LanguageController {
+ // the message conveyor helps us to get localized messages
+ // according to the provided locale
+ // The fallback language is set to English for all
+ // messages in arara.
+ private var conveyor: IMessageConveyor = MessageConveyor(Locale(
+ AraraSpec.Application.defaultLanguageCode.default))
+
+ /**
+ * Sets the current locale. This method actually resets the language
+ * conveyor in order to use the new locale. It's quite simple.
+ * @param locale The new locale for localized messages through the language
+ * conveyor.
+ */
+ fun setLocale(locale: Locale) {
+ conveyor = MessageConveyor(locale)
+ }
+
+ /**
+ * Gets the localized message indexed by the provided enumeration key,
+ * applying an array of objects as parameters. This method is a wrapper to
+ * the conveyor's method of the same name.
+ * @param E Enumeration type that represents the conveyor messages.
+ * @param key Key set in the provided enumeration type.
+ * @param parameters Array of objects to be used as parameters.
+ * @return A string containing a localized message indexed by the provided
+ * enumeration key and applied the array of objects as parameters.
+ */
+ @Suppress("SpreadOperator")
+ fun <E : Enum<*>> getMessage(key: E, vararg parameters: Any): String =
+ conveyor.getMessage(key, *parameters)
+
+ /**
+ * Gets the localized message indexed by the provided enumeration key. This
+ * method is a wrapper to the conveyor's method of the same name.
+ * @param E Enumeration type that represents the conveyor messages.
+ * @param key Key set in the provided enumeration type.
+ * @return A string containing a localized message indexed by the provided
+ * enumeration key.
+ */
+ fun <E : Enum<*>> getMessage(key: E): String = conveyor.getMessage(key)
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt
new file mode 100644
index 0000000000..75d957e1df
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/localization/Messages.kt
@@ -0,0 +1,106 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.localization
+
+import ch.qos.cal10n.BaseName
+import ch.qos.cal10n.Locale
+import ch.qos.cal10n.LocaleData
+
+/**
+ * This enumeration contains all application messages.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@BaseName("org.islandoftex.arara.localization.messages")
+@LocaleData(Locale(value = "de", charset = "UTF-8"),
+ Locale(value = "en", charset = "UTF-8"),
+ Locale(value = "en_QN", charset = "UTF-8"),
+ Locale(value = "it", charset = "UTF-8"),
+ Locale(value = "nl", charset = "UTF-8"),
+ Locale(value = "pt_BR", charset = "UTF-8"))
+enum class Messages {
+ ERROR_BASENAME_NOT_A_FILE,
+ ERROR_CALCULATEHASH_IO_EXCEPTION,
+ ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN,
+ ERROR_CHECKOS_INVALID_OPERATING_SYSTEM,
+ ERROR_CHECKREGEX_IO_EXCEPTION,
+ ERROR_CONFIGURATION_GENERIC_ERROR,
+ ERROR_CONFIGURATION_LOOPS_INVALID_RANGE,
+ ERROR_DISCOVERFILE_FILE_NOT_FOUND,
+ ERROR_EVALUATE_COMPILATION_FAILED,
+ ERROR_EVALUATE_NOT_BOOLEAN_VALUE,
+ ERROR_EXTRACTOR_IO_ERROR,
+ ERROR_FILETYPE_NOT_A_FILE,
+ ERROR_FILETYPE_UNKNOWN_EXTENSION,
+ ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION,
+ ERROR_GETCANONICALFILE_IO_EXCEPTION,
+ ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION,
+ ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED,
+ ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR,
+ ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR,
+ ERROR_INTERPRETER_EXIT_RUNTIME_ERROR,
+ ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION,
+ ERROR_INTERPRETER_RULE_NOT_FOUND,
+ ERROR_INTERPRETER_UNKNOWN_KEYS,
+ ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN,
+ ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY,
+ ERROR_LANGUAGE_INVALID_CODE,
+ ERROR_LOAD_COULD_NOT_LOAD_XML,
+ ERROR_PARSER_INVALID_PREAMBLE,
+ ERROR_PARSERULE_GENERIC_ERROR,
+ ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION,
+ ERROR_RULE_IDENTIFIER_AND_PATH,
+ ERROR_RUN_GENERIC_EXCEPTION,
+ ERROR_RUN_INTERRUPTED_EXCEPTION,
+ ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION,
+ ERROR_RUN_IO_EXCEPTION,
+ ERROR_RUN_TIMEOUT_EXCEPTION,
+ ERROR_RUN_TIMEOUT_INVALID_RANGE,
+ ERROR_SAVE_COULD_NOT_SAVE_XML,
+ ERROR_SESSION_OBTAIN_UNKNOWN_KEY,
+ ERROR_SESSION_REMOVE_UNKNOWN_KEY,
+ ERROR_VALIDATE_EMPTY_FILES_LIST,
+ ERROR_VALIDATE_FILES_IS_NOT_A_LIST,
+ ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT,
+ ERROR_VALIDATE_NO_DIRECTIVES_FOUND,
+ ERROR_VALIDATE_ORPHAN_LINEBREAK,
+ ERROR_VALIDATE_REFERENCE_IS_RESERVED,
+ ERROR_VALIDATE_YAML_EXCEPTION,
+ ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED,
+ ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS,
+ ERROR_VALIDATEBODY_MISSING_KEYS,
+ ERROR_VALIDATEBODY_NULL_ARGUMENT_ID,
+ ERROR_VALIDATEBODY_NULL_COMMAND,
+ ERROR_VALIDATEHEADER_NULL_ID,
+ ERROR_VALIDATEHEADER_NULL_NAME,
+ ERROR_VALIDATEHEADER_WRONG_IDENTIFIER,
+ INFO_DISPLAY_EXCEPTION_MORE_DETAILS,
+ INFO_DISPLAY_EXECUTION_TIME,
+ INFO_DISPLAY_FILE_INFORMATION,
+ INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE,
+ INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND,
+ INFO_LABEL_AUTHOR,
+ INFO_LABEL_AUTHORS,
+ INFO_LABEL_CONDITIONAL,
+ INFO_LABEL_NO_AUTHORS,
+ INFO_LABEL_ON_DETAILS,
+ INFO_LABEL_ON_ERROR,
+ INFO_LABEL_ON_FAILURE,
+ INFO_LABEL_ON_SUCCESS,
+ INFO_LABEL_UNNAMED_TASK,
+ INFO_PARSER_NOTES,
+ LOG_INFO_BEGIN_BUFFER,
+ LOG_INFO_BOOLEAN_MODE,
+ LOG_INFO_DIRECTIVES_BLOCK,
+ LOG_INFO_END_BUFFER,
+ LOG_INFO_INTERPRET_RULE,
+ LOG_INFO_INTERPRET_TASK,
+ LOG_INFO_POTENTIAL_DIRECTIVE_FOUND,
+ LOG_INFO_POTENTIAL_PATTERN_FOUND,
+ LOG_INFO_RULE_LOCATION,
+ LOG_INFO_SYSTEM_COMMAND,
+ LOG_INFO_TASK_RESULT,
+ LOG_INFO_VALIDATED_DIRECTIVES,
+ LOG_INFO_WELCOME_MESSAGE
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt
new file mode 100644
index 0000000000..6bf2d1e617
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/AraraException.kt
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.model
+
+/**
+ * Implements the specific exception model for arara.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+class AraraException : Exception {
+ /**
+ * The underlying exception, used to hold more details
+ * on what really happened
+ */
+ val exception: Exception?
+
+ /**
+ * Constructor. Takes the exception message.
+ * @param message The exception message.
+ */
+ constructor(message: String) : super(message) {
+ this.exception = null
+ }
+
+ /**
+ * Constructor. Takes the exception message and the underlying exception.
+ * @param message The exception message.
+ * @param exception The underlying exception object.
+ */
+ constructor(message: String, exception: Exception) : super(message) {
+ this.exception = exception
+ }
+
+ /**
+ * Constructor. Takes the exception message and the underlying exception.
+ * @param message The exception message.
+ * @param throwable The underlying exception as generic throwable.
+ */
+ constructor(message: String, throwable: Throwable) : super(message) {
+ this.exception = RuntimeException(throwable)
+ }
+
+ /**
+ * Checks if there is an underlying exception defined in the current object.
+ * @return A boolean value indicating if the current object has an
+ * underlying exception.
+ */
+ fun hasException(): Boolean = exception?.message != null
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt
new file mode 100644
index 0000000000..78b98e709a
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Evaluator.kt
@@ -0,0 +1,122 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.model
+
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.ruleset.Conditional
+import org.islandoftex.arara.utils.Methods
+import org.mvel2.templates.TemplateRuntime
+
+/**
+ * Implements the evaluator model, on which a conditional can be analyzed and
+ * processed.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+class Evaluator {
+ // this attribute holds the maximum number of
+ // loops arara will accept; it's like
+ // reaching infinity
+ private val loops: Int = Arara.config[AraraSpec.Execution.maxLoops]
+
+ // the counter for the current execution, it
+ // helps us keep track of the number of times
+ // this evaluation has happened, and also to
+ // prevent potential infinite loops
+ private var counter: Int = 0
+
+ // a flag that indicates the
+ // evaluation to halt regardless
+ // of the the result
+ private var halt: Boolean = false
+
+ /**
+ * Check if a condition is of type if or unless and whether halt
+ * is set.
+ * @param type The type to check.
+ * @param haltCheck The value [halt] should have.
+ * @return `(type == if || type == unless) && haltCheck`
+ */
+ private fun isIfUnlessAndHalt(
+ type: Conditional.ConditionalType,
+ haltCheck: Boolean = true
+ ): Boolean =
+ (type == Conditional.ConditionalType.IF ||
+ type == Conditional.ConditionalType.UNLESS) &&
+ halt == haltCheck
+
+ /**
+ * Only run the evaluation of the conditional including a check whether
+ * the result needs to be inverted.
+ * @param conditional The conditional.
+ * @return The result of the evaluation.
+ */
+ @Throws(AraraException::class, RuntimeException::class)
+ private fun evaluateCondition(conditional: Conditional): Boolean {
+ val result = TemplateRuntime.eval("@{ " + conditional.condition + " }",
+ Methods.getConditionalMethods())
+ return if (result is Boolean) {
+ if (conditional.type == Conditional.ConditionalType.UNLESS ||
+ conditional.type == Conditional.ConditionalType.UNTIL)
+ !result
+ else
+ result
+ } else {
+ throw AraraException(messages.getMessage(
+ Messages.ERROR_EVALUATE_NOT_BOOLEAN_VALUE))
+ }
+ }
+
+ /**
+ * Evaluate the provided conditional.
+ *
+ * @param conditional The conditional object.
+ * @return A boolean value indicating if the conditional holds.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ @Suppress("TooGenericExceptionCaught")
+ fun evaluate(conditional: Conditional): Boolean {
+ // when in dry-run mode or not evaluating a
+ // conditional, arara always ignores conditional
+ // evaluations
+ if (conditional.type == Conditional.ConditionalType.NONE ||
+ Arara.config[AraraSpec.Execution.dryrun] ||
+ isIfUnlessAndHalt(conditional.type, true))
+ return false
+ else if (isIfUnlessAndHalt(conditional.type, false)) {
+ halt = true
+ }
+
+ // check counters and see if the execution
+ // has reached our concept of infinity,
+ // thus breaking the cycles
+ counter++
+ return when {
+ conditional.type === Conditional.ConditionalType.WHILE
+ && counter > loops -> false
+ conditional.type === Conditional.ConditionalType.UNTIL
+ && counter >= loops -> false
+ else -> {
+ try {
+ evaluateCondition(conditional)
+ } catch (exception: RuntimeException) {
+ throw AraraException(messages.getMessage(Messages
+ .ERROR_EVALUATE_COMPILATION_FAILED),
+ exception)
+ }
+ }
+ }
+ }
+
+ companion object {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt
new file mode 100644
index 0000000000..ed4d811d22
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Extractor.kt
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.model
+
+import java.io.File
+import java.io.IOException
+import java.nio.charset.Charset
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.ruleset.Directive
+import org.islandoftex.arara.ruleset.DirectiveUtils
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Extractor for directives from the provided main file.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object Extractor {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ /**
+ * Extracts a list of directives from the provided main file, obtained from
+ * the configuration controller.
+ * @param file The file to extract the directives from.
+ * @param charset The charset of the file.
+ * @return A list of directives.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun extract(file: File, charset: Charset = Charsets.UTF_8):
+ List<Directive> {
+ try {
+ val content = CommonUtils.preambleContent.toMutableList()
+ content.addAll(file.readLines(charset))
+ return DirectiveUtils.extractDirectives(content)
+ } catch (ioexception: IOException) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_EXTRACTOR_IO_ERROR
+ ),
+ ioexception
+ )
+ }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/FileType.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/FileType.kt
new file mode 100644
index 0000000000..e6ed27d51a
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/FileType.kt
@@ -0,0 +1,110 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.model
+
+import java.util.regex.PatternSyntaxException
+import kotlinx.serialization.Serializable
+import org.islandoftex.arara.configuration.ConfigurationUtils
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Implements the file type model.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@Serializable
+class FileType {
+ // string representing the
+ // file extension
+ var extension: String = INVALID_EXTENSION
+ get() = CommonUtils.removeKeywordNotNull(field)
+ private set
+ // string representing the
+ // file pattern to be used
+ // as directive lookup
+ var pattern: String = INVALID_PATTERN
+ @Throws(AraraException::class)
+ get() {
+ CommonUtils.removeKeywordNotNull(field)
+ if (field == INVALID_PATTERN) {
+ field = ConfigurationUtils.defaultFileTypePatterns[extension]
+ ?: throw AraraException(
+ LanguageController.getMessage(
+ Messages.ERROR_FILETYPE_UNKNOWN_EXTENSION,
+ extension,
+ CommonUtils.fileTypesList
+ )
+ )
+ }
+ return field
+ }
+ private set
+
+ constructor(extension: String, pattern: String) {
+ this.extension = extension
+ this.pattern = pattern
+
+ try {
+ pattern.toPattern()
+ } catch (e: PatternSyntaxException) {
+ if (!ConfigurationUtils.defaultFileTypePatterns.containsKey(extension))
+ throw AraraException(
+ LanguageController.getMessage(
+ Messages.ERROR_FILETYPE_UNKNOWN_EXTENSION,
+ extension,
+ CommonUtils.fileTypesList
+ )
+ )
+ }
+ }
+
+ companion object {
+ /**
+ * This constant identifies an invalid extension. As unices do not
+ * allow a forward and Windows does not allow a backward slash, this
+ * should suffice.
+ */
+ const val INVALID_EXTENSION = "/\\"
+ /**
+ * This constant identifies an invalid pattern. This is a opening
+ * character class which is invalid.
+ */
+ const val INVALID_PATTERN = "["
+ }
+
+ /**
+ * Provides a textual representation of the current file type object.
+ * @return A string containing a textual representation of the current file
+ * type object.
+ */
+ override fun toString(): String {
+ return ".$extension"
+ }
+
+ /**
+ * Implements the file type equals method, checking if one file type is
+ * equal to another. Note that only the file extension is considered.
+ * @param other The object to be analyzed.
+ * @return A boolean value indicating if those two objects are equal.
+ */
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as FileType
+ if (extension != other.extension) return false
+ return true
+ }
+
+ /**
+ * Implements the file type hash code. Note that only the file extension is
+ * considered.
+ * @return An integer representing the file type hash code.
+ */
+ override fun hashCode(): Int {
+ return extension.hashCode()
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt
new file mode 100644
index 0000000000..49cf40f1a2
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Interpreter.kt
@@ -0,0 +1,375 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.model
+
+import java.io.File
+import kotlin.time.ExperimentalTime
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.ruleset.Argument
+import org.islandoftex.arara.ruleset.Command
+import org.islandoftex.arara.ruleset.Conditional
+import org.islandoftex.arara.ruleset.Directive
+import org.islandoftex.arara.ruleset.Rule
+import org.islandoftex.arara.ruleset.RuleCommand
+import org.islandoftex.arara.ruleset.RuleUtils
+import org.islandoftex.arara.utils.CommonUtils
+import org.islandoftex.arara.utils.DisplayUtils
+import org.islandoftex.arara.utils.InterpreterUtils
+import org.islandoftex.arara.utils.Methods
+import org.mvel2.templates.TemplateRuntime
+import org.slf4j.LoggerFactory
+
+/**
+ * Interprets the list of directives.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+class Interpreter(
+ /**
+ * The list of directives to be interpreted and evaluated.
+ */
+ val directives: List<Directive>
+) {
+ /**
+ * Exception class to represent that the interpreter should stop for some
+ * reason
+ */
+ private class HaltExpectedException(msg: String) : Exception(msg)
+
+ /**
+ * Gets the rule according to the provided directive.
+ *
+ * @param directive The provided directive.
+ * @return The absolute canonical path of the rule, given the provided
+ * directive.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ private fun getRule(directive: Directive): File {
+ return InterpreterUtils.buildRulePath(directive.identifier)
+ ?: throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_INTERPRETER_RULE_NOT_FOUND,
+ directive.identifier,
+ "(" + CommonUtils.allRulePaths
+ .joinToString("; ") + ")"
+ )
+ )
+ }
+
+ // TODO: in the following, extract the printing into the higher level
+ // function
+ /**
+ * "Run" a boolean return value
+ * @param value The boolean.
+ * @param conditional The conditional to print in dry-run mode.
+ * @param authors The authors of the rule.
+ * @return Returns [value]
+ */
+ private fun runBoolean(
+ value: Boolean,
+ conditional: Conditional,
+ authors: List<String>
+ ): Boolean {
+ logger.info(messages.getMessage(Messages.LOG_INFO_BOOLEAN_MODE,
+ value.toString()))
+
+ if (Arara.config[AraraSpec.Execution.dryrun]) {
+ DisplayUtils.printAuthors(authors)
+ DisplayUtils.wrapText(messages.getMessage(Messages
+ .INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE,
+ value))
+ DisplayUtils.printConditional(conditional)
+ }
+
+ return value
+ }
+
+ /**
+ * Run a command
+ * @param command The command to run.
+ * @param conditional The conditional applied to the run (only for printing).
+ * @param authors The rule authors (only for printing).
+ * @param ruleCommandExitValue The exit value of the rule command.
+ * @return Success of the execution.
+ * @throws AraraException Execution failed.
+ */
+ @ExperimentalTime
+ @Throws(AraraException::class)
+ @Suppress("TooGenericExceptionCaught")
+ private fun runCommand(
+ command: Command,
+ conditional: Conditional,
+ authors: List<String>,
+ ruleCommandExitValue: String?
+ ): Boolean {
+ logger.info(messages.getMessage(Messages.LOG_INFO_SYSTEM_COMMAND,
+ command))
+ var success = true
+
+ if (!Arara.config[AraraSpec.Execution.dryrun]) {
+ val code = InterpreterUtils.run(command)
+ val check: Any = try {
+ val context = mapOf<String, Any>("value" to code)
+ TemplateRuntime.eval(
+ "@{ " + (ruleCommandExitValue ?: "value == 0") + " }",
+ context)
+ } catch (exception: RuntimeException) {
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(Messages
+ .ERROR_INTERPRETER_EXIT_RUNTIME_ERROR),
+ exception)
+ }
+
+ success = if (check is Boolean) {
+ check
+ } else {
+ throw AraraException(
+ CommonUtils.ruleErrorHeader + messages.getMessage(
+ Messages.ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN
+ )
+ )
+ }
+ } else {
+ DisplayUtils.printAuthors(authors)
+ DisplayUtils.wrapText(messages.getMessage(
+ Messages.INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND,
+ command))
+ DisplayUtils.printConditional(conditional)
+ }
+
+ return success
+ }
+
+ /**
+ * Converts the command evaluation result to a flat list.
+ * @param result The result
+ * @return A flat list.
+ */
+ private fun resultToList(result: Any) = if (result is List<*>) {
+ CommonUtils.flatten(result)
+ } else {
+ listOf(result)
+ }
+
+ /**
+ * Execute a command.
+ * @param command The command to evaluate.
+ * @param conditional Under which condition to execute.
+ * @param rule The rule (only passed for output purposes).
+ * @param parameters The parameters for evaluation
+ * @throws AraraException Running the command failed.
+ */
+ @ExperimentalTime
+ @Throws(AraraException::class)
+ @Suppress("TooGenericExceptionCaught", "ThrowsCount")
+ private fun executeCommand(
+ command: RuleCommand,
+ conditional: Conditional,
+ rule: Rule,
+ parameters: Map<String, Any>
+ ) {
+ val result: Any = try {
+ TemplateRuntime.eval(command.command!!, parameters)
+ } catch (exception: RuntimeException) {
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(Messages
+ .ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR),
+ exception)
+ }
+
+ // TODO: check nullability
+ resultToList(result).filter { it.toString().isNotBlank() }
+ .forEach { current ->
+ DisplayUtils.printEntry(rule.name, command.name
+ ?: messages.getMessage(Messages
+ .INFO_LABEL_UNNAMED_TASK))
+
+ val success = when (current) {
+ is Boolean -> runBoolean(current, conditional,
+ rule.authors)
+ is Command -> runCommand(current, conditional,
+ rule.authors, command.exit)
+ else -> TODO("error: this should not happen" +
+ "we are only supporting boolean + command")
+ }
+
+ DisplayUtils.printEntryResult(success)
+
+ if (Arara.config[AraraSpec.Execution.haltOnErrors] && !success)
+ // TODO: localize
+ throw HaltExpectedException("Command failed")
+
+ // TODO: document this key
+ val haltKey = "arara:${Arara.config[AraraSpec
+ .Execution.reference].name}:halt"
+ if (Session.contains(haltKey)) {
+ Arara.config[AraraSpec.Execution.status] =
+ Session[haltKey].toString().toInt()
+ // TODO: localize
+ throw HaltExpectedException("User requested halt")
+ }
+ }
+ }
+
+ /**
+ * Executes each directive, throwing an exception if something bad has
+ * happened.
+ *
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @ExperimentalTime
+ @Throws(AraraException::class)
+ @Suppress("NestedBlockDepth")
+ fun execute() {
+ for (directive in directives) {
+ logger.info(messages.getMessage(Messages.LOG_INFO_INTERPRET_RULE,
+ directive.identifier))
+
+ Arara.config[AraraSpec.Execution.file] =
+ directive.parameters.getValue("reference") as File
+ val file = getRule(directive)
+
+ logger.info(messages.getMessage(Messages.LOG_INFO_RULE_LOCATION,
+ file.parent))
+
+ Arara.config[AraraSpec.Execution.InfoSpec.ruleId] =
+ directive.identifier
+ Arara.config[AraraSpec.Execution.InfoSpec.rulePath] =
+ file.parent
+ Arara.config[AraraSpec.Execution.DirectiveSpec.lines] =
+ directive.lineNumbers
+
+ // parse the rule identified by the directive
+ // (may throw an exception)
+ val rule = RuleUtils.parseRule(file, directive.identifier)
+ val parameters = parseArguments(rule, directive)
+ .plus(Methods.getRuleMethods())
+
+ val evaluator = Evaluator()
+
+ var available = true
+ if (InterpreterUtils.runPriorEvaluation(directive.conditional)) {
+ available = evaluator.evaluate(directive.conditional)
+ }
+
+ // if this directive is conditionally disabled, skip
+ if (!available) continue
+ // if not execute the commands associated with the directive
+ do {
+ rule.commands.forEach { command ->
+ try {
+ executeCommand(command, directive.conditional, rule, parameters)
+ } catch (_: HaltExpectedException) {
+ // if the user uses the halt rule to trigger
+ // a halt, this will be raised
+ return
+ }
+ }
+ } while (evaluator.evaluate(directive.conditional))
+ }
+ }
+
+ /**
+ * Parses the rule arguments against the provided directive.
+ *
+ * @param rule The rule object.
+ * @param directive The directive.
+ * @return A map containing all arguments resolved according to the
+ * directive parameters.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ private fun parseArguments(rule: Rule, directive: Directive):
+ Map<String, Any> {
+ val arguments = rule.arguments
+ val unknown = CommonUtils.getUnknownKeys(directive.parameters,
+ arguments).minus("reference")
+ if (unknown.isNotEmpty())
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(
+ Messages.ERROR_INTERPRETER_UNKNOWN_KEYS,
+ "(" + unknown.joinToString(", ") + ")"))
+
+ val resolvedArguments = mutableMapOf<String, Any>()
+ resolvedArguments["reference"] = directive.parameters
+ .getValue("reference")
+
+ val context = mapOf(
+ "parameters" to directive.parameters,
+ "reference" to directive.parameters.getValue("reference")
+ ).plus(Methods.getRuleMethods())
+
+ arguments.forEach { argument ->
+ resolvedArguments[argument.identifier!!] = processArgument(argument,
+ directive.parameters.containsKey(argument.identifier!!),
+ context)
+ }
+
+ return resolvedArguments
+ }
+
+ /**
+ * Process a single argument and return the evaluated result.
+ * @param argument The argument to process.
+ * @param idInDirectiveParams Whether the argument's identifier is
+ * contained in the directive's parameters field.
+ * @param context The context for the evaluation.
+ * @return The result of the evaluation.
+ * @throws AraraException The argument could not be processed.
+ */
+ @Throws(AraraException::class)
+ @Suppress("TooGenericExceptionCaught", "ThrowsCount")
+ private fun processArgument(
+ argument: Argument,
+ idInDirectiveParams: Boolean,
+ context: Map<String, Any>
+ ): Any {
+ if (argument.isRequired && !idInDirectiveParams)
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(
+ Messages.ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED,
+ argument.identifier!!))
+
+ var ret = argument.default?.let {
+ try {
+ TemplateRuntime.eval(it, context)
+ } catch (exception: RuntimeException) {
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(Messages
+ .ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR),
+ exception)
+ }
+ } ?: ""
+
+ if (argument.flag != null && idInDirectiveParams) {
+ ret = try {
+ TemplateRuntime.eval(argument.flag!!, context)
+ } catch (exception: RuntimeException) {
+ throw AraraException(CommonUtils.ruleErrorHeader + messages
+ .getMessage(Messages
+ .ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION),
+ exception)
+ }
+ }
+
+ return ret
+ }
+
+ companion object {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ // the class logger obtained from
+ // the logger factory
+ private val logger = LoggerFactory.getLogger(Interpreter::class.java)
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Session.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Session.kt
new file mode 100644
index 0000000000..c2093429e1
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/model/Session.kt
@@ -0,0 +1,119 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.model
+
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+
+/**
+ * Implements the session.
+ *
+ * This class wraps a map that holds the execution session, that is, a dirty
+ * maneuver to exchange pretty much any data between commands and even rules.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object Session {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ // the session map which holds the execution session;
+ // the idea here is to provide wrappers to the map
+ // methods, so it could be easily manipulated
+ private val map = mutableMapOf<String, Any>()
+
+ /**
+ * Gets the object indexed by the provided key from the session. This method
+ * holds the map method of the very same name.
+ *
+ * @param key The provided key.
+ * @return The object indexed by the provided key.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ operator fun get(key: String): Any {
+ return if (contains(key)) {
+ map.getValue(key)
+ } else {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_SESSION_OBTAIN_UNKNOWN_KEY,
+ key
+ )
+ )
+ }
+ }
+
+ /**
+ * Inserts (or overwrites) the object indexed by the provided key into the
+ * session. This method holds the map method of the very same name.
+ *
+ * @param key The provided key.
+ * @param value The value to be inserted.
+ */
+ fun put(key: String, value: Any) {
+ map[key] = value
+ }
+
+ /**
+ * Removes the entry indexed by the provided key from the session. This method
+ * holds the map method of the same name.
+ *
+ * @param key The provided key.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun remove(key: String) {
+ if (contains(key)) {
+ map.remove(key)
+ } else {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_SESSION_REMOVE_UNKNOWN_KEY,
+ key
+ )
+ )
+ }
+ }
+
+ /**
+ * Checks if the provided key exists in the session.
+ *
+ * @param key The provided key.
+ * @return A boolean value indicating if the provided key exists in the
+ * session.
+ */
+ operator fun contains(key: String): Boolean = map.containsKey(key)
+
+ /**
+ * Clears the session (map). This method, as usual, holds the map method of
+ * the same name.
+ */
+ fun clear() = map.clear()
+
+ /**
+ * Update the environment variables stored in the session.
+ *
+ * @param additionFilter Which environment variables to include. You can
+ * filter their names (the string parameter) but not their values. By
+ * default all values will be added.
+ * @param removalFilter Which environment variables to remove beforehand.
+ * By default all values will be removed.
+ */
+ fun updateEnvironmentVariables(
+ additionFilter: (String) -> Boolean = { true },
+ removalFilter: (String) -> Boolean = { true }
+ ) {
+ // remove all current environment variables to clean up the session
+ map.filterKeys { it.startsWith("environment:") }
+ .filterKeys(removalFilter)
+ .forEach { remove(it.key) }
+ // add all relevant new environment variables
+ System.getenv().filterKeys(additionFilter)
+ .forEach { map["environment:${it.key}"] = it.value }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt
new file mode 100644
index 0000000000..dfd2b99403
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Argument.kt
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * The rule argument model.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@Serializable
+class Argument {
+ /**
+ * The argument identifier
+ */
+ var identifier: String? = null
+ get() = CommonUtils.removeKeyword(field)
+
+ /**
+ * Boolean indicating if the current argument is required
+ */
+ @SerialName("required")
+ var isRequired: Boolean = false
+
+ /**
+ * Flag to hold the argument value manipulation
+ */
+ var flag: String? = null
+ get() = CommonUtils.removeKeyword(field)
+
+ /**
+ * The argument fallback if it is not defined in the directive
+ */
+ var default: String? = null
+ get() = CommonUtils.removeKeyword(field)
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt
new file mode 100644
index 0000000000..df1ce802f5
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Command.kt
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+import java.io.File
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Implements a command model, containing a list of strings.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+class Command {
+ /**
+ * A list of elements which are components
+ * of a command and represented as strings
+ */
+ val elements: List<String>
+
+ /**
+ * An optional file acting as a reference for
+ * the default working directory
+ */
+ var workingDirectory: File = Arara.config[AraraSpec.Execution
+ .workingDirectory].toFile()
+
+ /**
+ * Constructor.
+ * @param values An array of objects.
+ */
+ constructor(vararg values: Any) {
+ elements = mutableListOf()
+ val result = CommonUtils.flatten(values.toList())
+ result.map { it.toString() }.filter { it.isNotEmpty() }
+ .forEach { elements.add(it) }
+ }
+
+ /**
+ * Constructor.
+ * @param elements A list of strings.
+ */
+ constructor(elements: List<String>) {
+ this.elements = elements
+ }
+
+ /**
+ * Provides a textual representation of the current command.
+ * @return A string representing the current command.
+ */
+ override fun toString(): String {
+ return "[ " + elements.joinToString(", ") + " ]" +
+ " @ $workingDirectory"
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt
new file mode 100644
index 0000000000..8a4ec6cb35
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Conditional.kt
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+/**
+ * The conditional class, it represents the type of conditional available
+ * for a directive and its corresponding expression to be evaluated.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+data class Conditional(
+ /**
+ * The type of the condition indicates the meaning when evaluated.
+ * Defaults to [ConditionalType.NONE].
+ */
+ val type: ConditionalType = ConditionalType.NONE,
+ /**
+ * The expression to be evaluated according to its type. Defaults
+ * to no evaluation (empty string).
+ */
+ val condition: String = ""
+) {
+ /**
+ * The types of conditionals arara is able to recognize.
+ */
+ enum class ConditionalType {
+ /**
+ * Evaluated beforehand, directive is interpreted if and only if the
+ * result is true.
+ */
+ IF,
+ /**
+ * There is no evaluation, directive is interpreted, no extra effort is
+ * needed.
+ */
+ NONE,
+ /**
+ * Evaluated beforehand, directive is interpreted if and only if the
+ * result is false.
+ */
+ UNLESS,
+ /**
+ * Directive is interpreted the first time, then the evaluation is
+ * done; while the result is false, the directive is interpreted again
+ * and again.
+ */
+ UNTIL,
+ /**
+ * Evaluated beforehand, directive is interpreted if and only if the
+ * result is true, and the process is repeated while the result still
+ * holds true.
+ */
+ WHILE
+ }
+
+ /**
+ * Provides a textual representation of the conditional object.
+ * @return A string representation of this object.
+ */
+ override fun toString(): String {
+ return "{ $type" +
+ if (type != ConditionalType.NONE)
+ ", expression: ${condition.trim()}"
+ else "" + " }"
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt
new file mode 100644
index 0000000000..33f8431744
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Directive.kt
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+/**
+ * Implements the directive model.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+data class Directive(
+ /**
+ * The directive identifier, it is resolved to the rule identifier
+ * later on.
+ */
+ val identifier: String,
+ /**
+ * A map containing the parameters; they are validated later on in
+ * order to ensure they are valid.
+ */
+ val parameters: Map<String, Any>,
+ /**
+ * A conditional containing the type and the expression to be evaluated
+ * later on.
+ */
+ val conditional: Conditional,
+ /**
+ * A list contained all line numbers from the main file which built the
+ * current directive.
+ */
+ val lineNumbers: List<Int>
+)
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt
new file mode 100644
index 0000000000..a431df6ae2
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveAssembler.kt
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+/**
+ * Implements a directive assembler in order to help build a directive from a
+ * list of strings.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+class DirectiveAssembler {
+ // this variable holds a list of
+ // line numbers indicating which
+ // lines composed the resulting
+ // potential directive
+ private val lineNumbers = mutableListOf<Int>()
+
+ // this variable holds the textual
+ // representation of the directive
+ private var text: String = ""
+
+ /**
+ * Checks if an append operation is allowed.
+ * @return A boolean value indicating if an append operation is allowed.
+ */
+ val isAppendAllowed: Boolean
+ get() = lineNumbers.isNotEmpty()
+
+ /**
+ * Adds a line number to the assembler.
+ * @param line An integer representing the line number.
+ */
+ fun addLineNumber(line: Int) = lineNumbers.add(line)
+
+ /**
+ * Appends the provided line to the assembler text.
+ * @param line The provided line.
+ */
+ fun appendLine(line: String) {
+ text = text + " " + line.trim()
+ }
+
+ /**
+ * Gets the list of line numbers.
+ * @return The list of line numbers.
+ */
+ fun getLineNumbers(): List<Int> = lineNumbers
+
+ /**
+ * Gets the text.
+ * @return The assembler text, properly trimmed.
+ */
+ fun getText(): String = text.trim()
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt
new file mode 100644
index 0000000000..e901e25fcf
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/DirectiveUtils.kt
@@ -0,0 +1,312 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
+import com.fasterxml.jackson.module.kotlin.readValue
+import com.fasterxml.jackson.module.kotlin.registerKotlinModule
+import java.io.File
+import java.util.regex.Pattern
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.filehandling.FileHandlingUtils
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.utils.DisplayUtils
+import org.slf4j.LoggerFactory
+
+/**
+ * Implements directive utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@UseExperimental(kotlinx.serialization.ImplicitReflectionSerializer::class)
+object DirectiveUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ // get the logger context from a factory
+ private val logger = LoggerFactory.getLogger(DirectiveUtils::class.java)
+
+ /**
+ * This function filters the lines of a file to identify the potential
+ * directives.
+ *
+ * @param lines The lines of the file.
+ * @return A map containing the line number and the line's content.
+ */
+ private fun getPotentialDirectiveLines(lines: List<String>):
+ Map<Int, String> {
+ val header = Arara.config[AraraSpec.Execution.onlyHeader]
+ val validLineRegex = Arara.config[AraraSpec.Execution.filePattern]
+ val validLinePattern = validLineRegex.toPattern()
+ val validLineStartPattern = (validLineRegex + Arara.config[AraraSpec
+ .Application.namePattern]).toPattern()
+ val map = mutableMapOf<Int, String>()
+ for ((i, text) in lines.withIndex()) {
+ val validLineMatcher = validLineStartPattern.matcher(text)
+ if (validLineMatcher.find()) {
+ val line = text.substring(validLineMatcher.end())
+ map[i + 1] = line
+
+ logger.info(messages.getMessage(
+ Messages.LOG_INFO_POTENTIAL_PATTERN_FOUND,
+ i + 1, line.trim()))
+ } else if (header && !checkLinePattern(validLinePattern, text)) {
+ // if we should only look within the file's header and reached
+ // a point where the line pattern does not match anymore, we
+ // assume we have left the header and break
+ break
+ }
+ }
+ return map
+ }
+
+ /**
+ * Extracts a list of directives from a list of strings.
+ *
+ * @param lines List of strings.
+ * @return A list of directives.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ @Suppress("MagicNumber")
+ fun extractDirectives(lines: List<String>): List<Directive> {
+ val pairs = getPotentialDirectiveLines(lines)
+ .takeIf { it.isNotEmpty() }
+ ?: throw AraraException(messages.getMessage(
+ Messages.ERROR_VALIDATE_NO_DIRECTIVES_FOUND))
+
+ val assemblers = mutableListOf<DirectiveAssembler>()
+ var assembler = DirectiveAssembler()
+ val linebreakPattern = Arara.config[AraraSpec.Directive
+ .linebreakPattern].toPattern()
+ for ((lineno, content) in pairs) {
+ val linebreakMatcher = linebreakPattern.matcher(content)
+ if (linebreakMatcher.find()) {
+ if (!assembler.isAppendAllowed) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_VALIDATE_ORPHAN_LINEBREAK,
+ lineno
+ )
+ )
+ } else {
+ assembler.addLineNumber(lineno)
+ assembler.appendLine(linebreakMatcher.group(1))
+ }
+ } else {
+ if (assembler.isAppendAllowed) {
+ assemblers.add(assembler)
+ }
+ assembler = DirectiveAssembler()
+ assembler.addLineNumber(lineno)
+ assembler.appendLine(content)
+ }
+ }
+ if (assembler.isAppendAllowed) {
+ assemblers.add(assembler)
+ }
+
+ return assemblers.map { generateDirective(it) }
+ }
+
+ /**
+ * Generates a directive from a directive assembler.
+ *
+ * @param assembler The directive assembler.
+ * @return The corresponding directive.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ @Suppress("MagicNumber")
+ fun generateDirective(assembler: DirectiveAssembler): Directive {
+ val matcher = Arara.config[AraraSpec.Directive.directivePattern]
+ .toPattern().matcher(assembler.getText())
+ if (matcher.find()) {
+ val directive = Directive(
+ identifier = matcher.group(1)!!,
+ parameters = getParameters(matcher.group(3),
+ assembler.getLineNumbers()),
+ conditional = Conditional(
+ type = getType(matcher.group(5)),
+ condition = matcher.group(6) ?: ""
+ ),
+ lineNumbers = assembler.getLineNumbers()
+ )
+
+ logger.info(messages.getMessage(
+ Messages.LOG_INFO_POTENTIAL_DIRECTIVE_FOUND, directive))
+
+ return directive
+ } else {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT,
+ "(" + assembler.getLineNumbers()
+ .joinToString(", ") + ")"
+ )
+ )
+ }
+ }
+
+ /**
+ * Gets the conditional type based on the input string.
+ *
+ * @param text The input string.
+ * @return The conditional type.
+ */
+ private fun getType(text: String?): Conditional.ConditionalType {
+ return when (text) {
+ null -> Conditional.ConditionalType.NONE
+ "if" -> Conditional.ConditionalType.IF
+ "while" -> Conditional.ConditionalType.WHILE
+ "until" -> Conditional.ConditionalType.UNTIL
+ else -> Conditional.ConditionalType.UNLESS
+ }
+ }
+
+ /**
+ * Gets the parameters from the input string.
+ *
+ * @param text The input string.
+ * @param numbers The list of line numbers.
+ * @return A map containing the directive parameters.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ private fun getParameters(
+ text: String?,
+ numbers: List<Int>
+ ): Map<String, Any> {
+ if (text == null)
+ return mapOf()
+
+ /* Before using kotlinx.serialization, there has been a dedicated
+ * directive resolver which instructed SnakeYAML to do the following:
+ *
+ * addImplicitResolver(Tag.MERGE, MERGE, "<")
+ * addImplicitResolver(Tag.NULL, NULL, "~nN\u0000")
+ * addImplicitResolver(Tag.NULL, EMPTY, null)
+ *
+ * This has been removed.
+ */
+ return ObjectMapper(YAMLFactory()).registerKotlinModule().runCatching {
+ readValue<Map<String, Any>>(text)
+ }.getOrElse {
+ throw AraraException(messages.getMessage(
+ Messages.ERROR_VALIDATE_YAML_EXCEPTION,
+ "(" + numbers.joinToString(", ") + ")"),
+ it)
+ }
+ }
+
+ /**
+ * Replicate a directive for given files.
+ *
+ * @param holder The list of files.
+ * @param parameters The parameters for the directive.
+ * @param directive The directive to clone.
+ * @return List of cloned directives.
+ * @throws AraraException If there is an error validating the [holder]
+ * object.
+ */
+ @Throws(AraraException::class)
+ private fun replicateDirective(
+ holder: Any,
+ parameters: Map<String, Any>,
+ directive: Directive
+ ): List<Directive> {
+ return if (holder is List<*>) {
+ // we received a file list, so we map that list to files
+ holder.filterIsInstance<Any>()
+ .asSequence()
+ .map { File(it.toString()) }
+ .map(FileHandlingUtils::getCanonicalFile)
+ // and because we want directives, we replicate our
+ // directive to be applied to that file
+ .map { reference ->
+ directive.copy(parameters = parameters
+ .plus("reference" to reference))
+ }
+ .toList()
+ // we take the result if and only if we have at least one
+ // file and we did not filter out any invalid argument
+ .takeIf { it.isNotEmpty() && holder.size == it.size }
+ // TODO: check exception according to condition
+ ?: throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_VALIDATE_EMPTY_FILES_LIST,
+ "(" + directive.lineNumbers
+ .joinToString(", ") + ")"
+ )
+ )
+ } else {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_VALIDATE_FILES_IS_NOT_A_LIST,
+ "(" + directive.lineNumbers.joinToString(", ") + ")"
+ )
+ )
+ }
+ }
+
+ /**
+ * Validates the list of directives, returning a new list.
+ *
+ * @param directives The list of directives.
+ * @return A new list of directives.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun process(directives: List<Directive>): List<Directive> {
+ val result = mutableListOf<Directive>()
+ directives.forEach { directive ->
+ val parameters = directive.parameters
+
+ if (parameters.containsKey("reference"))
+ throw AraraException(messages.getMessage(
+ Messages.ERROR_VALIDATE_REFERENCE_IS_RESERVED,
+ "(" + directive.lineNumbers.joinToString(", ") + ")"))
+
+ if (parameters.containsKey("files")) {
+ result.addAll(replicateDirective(parameters.getValue("files"),
+ parameters.minus("files"), directive))
+ } else {
+ result.add(directive.copy(parameters = parameters
+ .plus("reference" to
+ Arara.config[AraraSpec.Execution.reference])))
+ }
+ }
+
+ logger.info(messages.getMessage(
+ Messages.LOG_INFO_VALIDATED_DIRECTIVES))
+ logger.info(DisplayUtils.displayOutputSeparator(
+ messages.getMessage(Messages.LOG_INFO_DIRECTIVES_BLOCK)))
+ result.forEach { logger.info(it.toString()) }
+ logger.info(DisplayUtils.displaySeparator())
+
+ return result
+ }
+
+ /**
+ * Checks if the provided line contains the corresponding pattern, based on
+ * the file type, or an empty line.
+ *
+ * @param pattern Pattern to be matched, based on the file type.
+ * @param line Provided line.
+ * @return Logical value indicating if the provided line contains the
+ * corresponding pattern, based on the file type, or an empty line.
+ */
+ private fun checkLinePattern(pattern: Pattern, line: String): Boolean {
+ return line.isBlank() || pattern.matcher(line).find()
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt
new file mode 100644
index 0000000000..53ac2aa8b1
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/Rule.kt
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+import kotlinx.serialization.Serializable
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Implements the rule model.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@Serializable
+class Rule {
+ /**
+ * The rule identifier
+ */
+ var identifier: String = INVALID_RULE_IDENTIFIER
+ get() = CommonUtils.removeKeywordNotNull(field)
+
+ /**
+ * The rule name
+ */
+ var name: String = INVALID_RULE_NAME
+ get() = CommonUtils.removeKeywordNotNull(field)
+
+ /**
+ * The list of authors
+ */
+ var authors: List<String> = listOf()
+ get() = field.mapNotNull { CommonUtils.removeKeyword(it) }
+
+ /**
+ * The list of commands
+ */
+ var commands: List<RuleCommand> = listOf()
+
+ /**
+ * The list of arguments
+ */
+ var arguments: List<Argument> = listOf()
+
+ companion object {
+ const val INVALID_RULE_IDENTIFIER = "INVALID_RULE"
+ const val INVALID_RULE_NAME = "INVALID_RULE"
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt
new file mode 100644
index 0000000000..901718d412
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleCommand.kt
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+import kotlinx.serialization.Serializable
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Implements the rule command model.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+@Serializable
+class RuleCommand {
+ /**
+ * The command name
+ */
+ var name: String? = null
+ get() = CommonUtils.removeKeyword(field)
+
+ /**
+ * The command instruction
+ */
+ var command: String? = null
+ get() = CommonUtils.removeKeyword(field)
+
+ /**
+ * The exit status expression
+ */
+ var exit: String? = null
+ get() = CommonUtils.removeKeyword(field)
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt
new file mode 100644
index 0000000000..e823e4e598
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/ruleset/RuleUtils.kt
@@ -0,0 +1,140 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.ruleset
+
+import com.charleskorn.kaml.Yaml
+import java.io.File
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.utils.CommonUtils
+
+/**
+ * Implements rule utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object RuleUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ /**
+ * Parses the provided file, checks the identifier and returns a rule
+ * representation.
+ *
+ * @param file The rule file.
+ * @param identifier The directive identifier.
+ * @return The rule object.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun parseRule(file: File, identifier: String): Rule {
+ val rule = file.runCatching {
+ val text = readText()
+ if (!text.startsWith("!config"))
+ throw Exception("Rule should start with !config")
+ Yaml.default.parse(Rule.serializer(), text)
+ }.getOrElse {
+ throw AraraException(
+ CommonUtils.ruleErrorHeader + messages.getMessage(
+ Messages.ERROR_PARSERULE_GENERIC_ERROR
+ ), it)
+ }
+
+ validateHeader(rule, identifier)
+ validateBody(rule)
+ return rule
+ }
+
+ /**
+ * Validates the rule header according to the directive identifier.
+ *
+ * @param rule The rule object.
+ * @param identifier The directive identifier.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ @Suppress("ThrowsCount")
+ private fun validateHeader(rule: Rule, identifier: String) {
+ if (rule.identifier != Rule.INVALID_RULE_IDENTIFIER) {
+ if (rule.identifier != identifier) {
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(
+ Messages.ERROR_VALIDATEHEADER_WRONG_IDENTIFIER,
+ rule.identifier,
+ identifier))
+ }
+ } else {
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(Messages.ERROR_VALIDATEHEADER_NULL_ID))
+ }
+ if (rule.name == Rule.INVALID_RULE_NAME) {
+ throw AraraException(
+ CommonUtils.ruleErrorHeader + messages.getMessage(
+ Messages.ERROR_VALIDATEHEADER_NULL_NAME
+ )
+ )
+ }
+ }
+
+ /**
+ * Validates the rule body.
+ *
+ * @param rule The rule object.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ @Suppress("ThrowsCount")
+ private fun validateBody(rule: Rule) {
+ if (rule.commands.any { it.command == null }) {
+ throw AraraException(CommonUtils.ruleErrorHeader +
+ messages.getMessage(
+ Messages.ERROR_VALIDATEBODY_NULL_COMMAND))
+ }
+
+ val arguments = mutableListOf<String>()
+ for (argument in rule.arguments) {
+ if (argument.identifier != null) {
+ if (argument.flag != null || argument.default != null) {
+ arguments.add(argument.identifier!!)
+ } else {
+ throw AraraException(
+ CommonUtils.ruleErrorHeader + messages.getMessage(
+ Messages.ERROR_VALIDATEBODY_MISSING_KEYS
+ )
+ )
+ }
+ } else {
+ throw AraraException(
+ CommonUtils.ruleErrorHeader + messages.getMessage(
+ Messages.ERROR_VALIDATEBODY_NULL_ARGUMENT_ID
+ )
+ )
+ }
+ }
+
+ arguments.intersect(listOf("files", "reference")).forEach {
+ throw AraraException(
+ CommonUtils.ruleErrorHeader + messages.getMessage(
+ Messages.ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED,
+ it
+ )
+ )
+ }
+
+ val expected = arguments.size
+ val found = arguments.toSet().size
+ if (expected != found) {
+ throw AraraException(
+ CommonUtils.ruleErrorHeader + messages.getMessage(
+ Messages.ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS
+ )
+ )
+ }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt
new file mode 100644
index 0000000000..05a1031a8a
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/ClassLoadingUtils.kt
@@ -0,0 +1,121 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import java.io.File
+import java.lang.reflect.InvocationTargetException
+import java.net.MalformedURLException
+import java.net.URLClassLoader
+
+/**
+ * Implements utilitary methods for classloading and object instantiation.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object ClassLoadingUtils {
+ /**
+ * Indicator of success or failure of class loading.
+ */
+ enum class ClassLoadingStatus {
+ SUCCESS,
+ FILE_NOT_FOUND,
+ MALFORMED_URL,
+ CLASS_NOT_FOUND,
+ ILLEGAL_ACCESS,
+ INSTANTIATION_EXCEPTION
+ }
+
+ /**
+ * Loads a class from the provided file, potentially a Java archive.
+ * @param file File containing the Java bytecode (namely, a JAR).
+ * @param name The canonical name of the class.
+ * @return A pair representing the status and the class.
+ */
+ fun loadClass(file: File, name: String):
+ Pair<ClassLoadingStatus, Class<*>> {
+ // status and class to be returned,
+ // it defaults to an object class
+ var value: Class<*> = Any::class.java
+
+ // if file does not exist, nothing
+ // can be done, status is changed
+ val status = if (!file.exists()) {
+ ClassLoadingStatus.FILE_NOT_FOUND
+ } else {
+ // classloading involves defining
+ // a classloader and fetching the
+ // desired class from it, based on
+ // the provided file archive
+ try {
+ // creates a new classloader with
+ // the provided file (potentially
+ // a JAR file)
+ val classloader = URLClassLoader(arrayOf(file.toURI().toURL()),
+ ClassLoadingUtils::class.java.classLoader)
+
+ // fetches the class from the
+ // instantiated classloader
+ value = Class.forName(name, true, classloader)
+ ClassLoadingStatus.SUCCESS
+ } catch (_: MalformedURLException) {
+ ClassLoadingStatus.MALFORMED_URL
+ } catch (_: ClassNotFoundException) {
+ ClassLoadingStatus.CLASS_NOT_FOUND
+ }
+ }
+
+ // return a new pair based on the
+ // current status and class holder
+ return status to value
+ }
+
+ /**
+ * Loads a class from the provided file, instantiating it.
+ * @param file File containing the Java bytecode (namely, a JAR).
+ * @param name The canonical name of the class.
+ * @return A pair representing the status and the class object.
+ */
+ fun loadObject(file: File, name: String): Pair<ClassLoadingStatus, Any> {
+ // load the corresponding class
+ // based on the qualified name
+ val pair = loadClass(file, name)
+
+ // status and object to be returned,
+ // it defaults to an object
+ var status = pair.first
+ var value = Any()
+
+ // checks if the class actually
+ // exists, otherwise simply
+ // ignore instantiation
+ if (status == ClassLoadingStatus.SUCCESS) {
+ // object instantiation relies
+ // on the default constructor
+ // (without arguments), class
+ // must implement it
+
+ // OBS: constructors with arguments
+ // must be invoked through reflection
+ try {
+ // get the class reference from
+ // the pair and instantiate it
+ // by invoking the default
+ // constructor (without arguments)
+ value = pair.second.getDeclaredConstructor().newInstance()
+ } catch (_: IllegalAccessException) {
+ status = ClassLoadingStatus.ILLEGAL_ACCESS
+ } catch (_: InstantiationException) {
+ // the user wanted to instantiate an abstract class
+ status = ClassLoadingStatus.INSTANTIATION_EXCEPTION
+ } catch (_: InvocationTargetException) {
+ // the underlying constructor caused an exception
+ status = ClassLoadingStatus.INSTANTIATION_EXCEPTION
+ }
+ }
+
+ // return a new pair based on the
+ // current status and object holder
+ return status to value
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt
new file mode 100644
index 0000000000..6887cd4e84
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/CommonUtils.kt
@@ -0,0 +1,422 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import java.io.File
+import java.io.IOException
+import java.util.MissingFormatArgumentException
+import java.util.regex.Pattern
+import kotlin.math.ln
+import kotlin.math.pow
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.filehandling.FileHandlingUtils
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.ruleset.Argument
+
+/**
+ * Implements common utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object CommonUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ /**
+ * Gets the list of file types as string, in order.
+ *
+ * @return A string representation of the list of file types, in order.
+ */
+ val fileTypesList: String
+ get() = "[ " + Arara.config[AraraSpec.Execution.fileTypes]
+ .joinToString(" | ") + " ]"
+
+ /**
+ * Gets the rule error header, containing the identifier and the path, if
+ * any.
+ *
+ * @return A string representation of the rule error header, containing the
+ * identifier and the path, if any.
+ */
+ val ruleErrorHeader: String
+ get() {
+ return if (Arara.config[AraraSpec.Execution.InfoSpec.ruleId] != null &&
+ Arara.config[AraraSpec.Execution.InfoSpec.rulePath] != null) {
+ val id = Arara.config[AraraSpec.Execution.InfoSpec.ruleId]!!
+ val path = Arara.config[AraraSpec.Execution.InfoSpec.rulePath]!!
+ messages.getMessage(
+ Messages.ERROR_RULE_IDENTIFIER_AND_PATH,
+ id,
+ path
+ ) + " "
+ } else {
+ ""
+ }
+ }
+
+ /**
+ * Gets a list of all rule paths.
+ *
+ * @return A list of all rule paths.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ val allRulePaths: List<String>
+ @Throws(AraraException::class)
+ get() = Arara.config[AraraSpec.Execution.rulePaths].map {
+ val location = File(InterpreterUtils.construct(it, "quack"))
+ FileHandlingUtils.getParentCanonicalPath(location)
+ }
+
+ /**
+ * Returns the exit status of the application.
+ *
+ * @return An integer representing the exit status of the application.
+ */
+ val exitStatus: Int
+ get() = Arara.config[AraraSpec.Execution.status]
+
+ /**
+ * Gets the preamble content, converting a single string into a list of
+ * strings, based on new lines.
+ *
+ * @return A list of strings representing the preamble content.
+ */
+ val preambleContent: List<String>
+ get() = if (Arara.config[AraraSpec.Execution.preamblesActive]) {
+ Arara.config[AraraSpec.Execution.preamblesContent]
+ .split("\n")
+ .dropLastWhile { it.isEmpty() }
+ .toList()
+ } else {
+ listOf()
+ }
+
+ /**
+ * Checks if the input string is equal to a valid boolean value.
+ *
+ * @param value The input string.
+ * @return A boolean value represented by the provided string.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun checkBoolean(value: String): Boolean {
+ val yes = listOf("yes", "true", "1", "on")
+ val no = listOf("no", "false", "0", "off")
+ return if (!yes.union(no).contains(value.toLowerCase())) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN,
+ value
+ )
+ )
+ } else {
+ yes.contains(value.toLowerCase())
+ }
+ }
+
+ /**
+ * Removes the keyword from the beginning of the provided string.
+ *
+ * @param line A string to be analyzed.
+ * @return The provided string without the keyword.
+ */
+ fun removeKeyword(line: String?): String? {
+ return if (line == null) null
+ else removeKeywordNotNull(line)
+ }
+
+ /**
+ * Removes the keyword from the beginning of the provided string.
+ *
+ * @param line A string to be analyzed.
+ * @return The provided string without the keyword.
+ */
+ fun removeKeywordNotNull(line: String): String {
+ var tempLine = line
+ val pattern = "^(\\s)*<arara>\\s".toPattern()
+ val matcher = pattern.matcher(tempLine)
+ if (matcher.find()) {
+ tempLine = tempLine.substring(matcher.end())
+ }
+ return tempLine.trim()
+ }
+
+ /**
+ * Flattens a potential list of lists into a list of objects.
+ *
+ * @param list The list to be flattened.
+ * @return The flattened list.
+ */
+ // TODO: check nullity
+ fun flatten(list: List<*>): List<Any> {
+ val result = mutableListOf<Any>()
+ list.forEach { item ->
+ if (item is List<*>)
+ result.addAll(flatten(item))
+ else
+ result.add(item as Any)
+ }
+ return result
+ }
+
+ /**
+ * Gets a set of strings containing unknown keys from a map and a list. It
+ * is a set difference from the keys in the map and the entries in the list.
+ *
+ * @param parameters The map of parameters.
+ * @param arguments The list of arguments.
+ * @return A set of strings representing unknown keys from a map and a list.
+ */
+ fun getUnknownKeys(
+ parameters: Map<String, Any>,
+ arguments: List<Argument>
+ ): Set<String> {
+ val found = parameters.keys
+ val expected = arguments.mapNotNull { it.identifier }
+ return found.subtract(expected)
+ }
+
+ /**
+ * Gets a human readable representation of a size.
+ *
+ * @param size The byte size to be converted.
+ * @return A string representation of the size.
+ */
+ @Suppress("MagicNumber")
+ fun byteSizeToString(size: Long): String {
+ val language = Arara.config[AraraSpec.Execution.language]
+ val conversionFactor = 1000.0
+ return if (size < conversionFactor) "$size B"
+ else
+ (ln(size.toDouble()) / ln(conversionFactor)).toInt().let { exp ->
+ "%.1f %sB".format(language.locale,
+ size / conversionFactor.pow(exp.toDouble()),
+ "kMGTPE"[exp - 1])
+ }
+ }
+
+ /**
+ * Generates a string based on a list of objects, separating each one of
+ * them by one space.
+ *
+ * @param objects A list of objects.
+ * @return A string based on the list of objects, separating each one of
+ * them by one space. Empty values are not considered.
+ */
+ fun generateString(vararg objects: Any): String = objects
+ .map { it.toString() }.filter { it.isNotEmpty() }
+ .joinToString(" ")
+
+ /**
+ * Checks if the file based on the provided extension contains the provided
+ * regex.
+ *
+ * @param extension The file extension.
+ * @param regex The regex.
+ * @return A boolean value indicating if the file contains the provided
+ * regex.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun checkRegex(extension: String, regex: String): Boolean {
+ val file = File(FileHandlingUtils.getPath(extension))
+ return checkRegex(file, regex)
+ }
+
+ /**
+ * Checks if the file contains the provided regex.
+ *
+ * As we use [File.readText] this should not be called on files > 2GB.
+ *
+ * @param file The file.
+ * @param regex The regex.
+ * @return A boolean value indicating if the file contains the provided
+ * regex.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun checkRegex(file: File, regex: String): Boolean {
+ try {
+ val text = file.readText()
+ val pattern = Pattern.compile(regex)
+ val matcher = pattern.matcher(text)
+ return matcher.find()
+ } catch (exception: IOException) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_CHECKREGEX_IO_EXCEPTION,
+ file.name
+ ),
+ exception
+ )
+ }
+ }
+
+ /**
+ * Replicates a string pattern based on a list of objects, generating a list
+ * as result.
+ *
+ * @param pattern The string pattern.
+ * @param values The list of objects to be merged with the pattern.
+ * @return A list containing the string pattern replicated to each object
+ * from the list.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun replicateList(
+ pattern: String,
+ values: List<Any>
+ ): List<Any> {
+ return try {
+ values.map { String.format(pattern, it) }
+ } catch (exception: MissingFormatArgumentException) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION
+ ),
+ exception
+ )
+ }
+ }
+
+ /**
+ * Checks if the provided operating system string holds according to the
+ * underlying operating system.
+ *
+ * Supported operating systems:
+ *
+ * * Windows
+ * * Linux
+ * * Mac OS X
+ * * Unix (Linux || Mac OS)
+ * * Cygwin
+ *
+ * @param value A string representing an operating system.
+ * @return A boolean value indicating if the provided string refers to the
+ * underlying operating system.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun checkOS(value: String): Boolean {
+ fun checkOSProperty(key: String): Boolean =
+ getSystemPropertyOrNull("os.name")
+ ?.toLowerCase()?.startsWith(key.toLowerCase()) ?: false
+
+ val values = mutableMapOf<String, Boolean>()
+ values["windows"] = checkOSProperty("Windows")
+ values["linux"] = checkOSProperty("Linux")
+ values["mac"] = checkOSProperty("Mac OS X")
+ values["unix"] = checkOSProperty("Mac OS X") ||
+ checkOSProperty("Linux")
+ values["cygwin"] = SystemCallUtils["cygwin"] as Boolean
+ if (!values.containsKey(value.toLowerCase())) {
+ throw AraraException(
+ messages.getMessage(
+ Messages.ERROR_CHECKOS_INVALID_OPERATING_SYSTEM,
+ value
+ )
+ )
+ }
+ // will never throw, see check above
+ return values.getValue(value.toLowerCase())
+ }
+
+ /**
+ * Gets the system property according to the provided key, or resort to the
+ * fallback value if an exception is thrown or if the key is invalid.
+ *
+ * @param key The system property key.
+ * @param fallback The fallback value.
+ * @return A string containing the system property value or the fallback.
+ */
+ fun getSystemProperty(key: String, fallback: String): String =
+ System.getProperties().runCatching {
+ getOrDefault(key, fallback).toString().takeIf { it != "" }
+ }.getOrNull() ?: fallback
+
+ /**
+ * Access a system property.
+ *
+ * @param key The key of the property.
+ * @return The value of the system property or null if there is an
+ * exception.
+ */
+ fun getSystemPropertyOrNull(key: String): String? =
+ System.getProperties().runCatching { getValue(key).toString() }
+ .getOrNull()
+
+ /**
+ * Generates a list of filenames from the provided command based on a list
+ * of extensions for each underlying operating system.
+ *
+ * @param command A string representing the command.
+ * @return A list of filenames.
+ */
+ private fun appendExtensions(command: String): List<String> {
+ // list of extensions, specific for
+ // each operating system (in fact, it
+ // is more Windows specific)
+ val extensions = if (checkOS("windows")) {
+ // the application is running on
+ // Windows, so let's look for the
+ // following extensions in order
+
+ // this list is actually a sublist from
+ // the original Windows PATHEXT environment
+ // variable which holds the list of executable
+ // extensions that Windows supports
+ listOf(".com", ".exe", ".bat", ".cmd")
+ } else {
+ // no Windows, so the default
+ // extension will be just an
+ // empty string
+ listOf("")
+ }
+
+ // return the resulting list holding the
+ // filenames generated from the
+ // provided command
+ return extensions.map { "$command$it" }
+ }
+
+ /**
+ * Checks if the provided command name is reachable from the system path.
+ *
+ * @param command A string representing the command.
+ * @return A logic value.
+ */
+ fun isOnPath(command: String): Boolean {
+ // first and foremost, let's build the list
+ // of filenames based on the underlying
+ // operating system
+ val filenames = appendExtensions(command)
+ return kotlin.runCatching {
+ // break the path into several parts
+ // based on the path separator symbol
+ System.getenv("PATH").split(File.pathSeparator)
+ .asSequence()
+ .mapNotNull { File(it).listFiles() }
+ // if the search does not return an empty
+ // list, one of the filenames got a match,
+ // and the command is available somewhere
+ // in the system path
+ .firstOrNull {
+ it.any { file ->
+ filenames.contains(file.name) && !file.isDirectory
+ }
+ }?.let { true }
+ }.getOrNull() ?: false
+ // otherwise (and in case of an exception) it is not in the path
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt
new file mode 100644
index 0000000000..213a9a21c3
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/DisplayUtils.kt
@@ -0,0 +1,415 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.configuration.ConfigurationUtils
+import org.islandoftex.arara.filehandling.FileHandlingUtils
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.ruleset.Conditional
+import org.slf4j.LoggerFactory
+
+/**
+ * Implements display utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object DisplayUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ // get the logger context from a factory
+ private val logger = LoggerFactory.getLogger(DisplayUtils::class.java)
+
+ /**
+ * The length of the longest result match as integer.
+ */
+ private val longestMatch: Int = listOf(
+ messages.getMessage(Messages.INFO_LABEL_ON_SUCCESS),
+ messages.getMessage(Messages.INFO_LABEL_ON_FAILURE),
+ messages.getMessage(Messages.INFO_LABEL_ON_ERROR))
+ .map { it.length }.max()!!
+ /**
+ * If the longest match is longer than the width, then it will be truncated
+ * to this length.
+ */
+ private const val shortenedLongestMatch = 10
+
+ /**
+ * The default terminal width defined in the settings.
+ */
+ private val width: Int
+ get() = Arara.config[AraraSpec.Application.width]
+
+ /**
+ * Checks if the execution is in dry-run mode.
+ */
+ private val isDryRunMode: Boolean
+ get() = Arara.config[AraraSpec.Execution.dryrun]
+
+ /**
+ * Checks if the execution is in verbose mode.
+ */
+ private val isVerboseMode: Boolean
+ get() = Arara.config[AraraSpec.Execution.verbose]
+
+ /**
+ * The application path.
+ */
+ private val applicationPath: String
+ get() = try {
+ ConfigurationUtils.applicationPath.toString()
+ } catch (ae: AraraException) {
+ "[unknown application path]"
+ }
+
+ /**
+ * Displays the short version of the current entry in the terminal.
+ *
+ * @param name Rule name.
+ * @param task Task name.
+ */
+ private fun buildShortEntry(name: String, task: String) {
+ val result = if (longestMatch >= width)
+ shortenedLongestMatch
+ else
+ longestMatch
+ val space = width - result - 1
+ val line = "($name) $task ".abbreviate(space - "... ".length)
+ print(line.padEnd(space, '.') + " ")
+ }
+
+ /**
+ * Displays the short version of the current entry result in the terminal.
+ *
+ * @param value The boolean value to be displayed.
+ */
+ private fun buildShortResult(value: Boolean) {
+ val result = longestMatch
+ println(getResult(value).padStart(result))
+ }
+
+ /**
+ * Displays the current entry result in the terminal.
+ *
+ * @param value The boolean value to be displayed.
+ */
+ fun printEntryResult(value: Boolean) {
+ Arara.config[AraraSpec.UserInteraction.displayLine] = false
+ Arara.config[AraraSpec.UserInteraction.displayResult] = true
+ Arara.config[AraraSpec.Execution.status] = if (value) 0 else 1
+ logger.info(
+ messages.getMessage(
+ Messages.LOG_INFO_TASK_RESULT
+ ) + " " + getResult(value)
+ )
+ if (!isDryRunMode) {
+ if (!isVerboseMode) {
+ buildShortResult(value)
+ } else {
+ buildLongResult(value)
+ }
+ }
+ }
+
+ /**
+ * Displays a long version of the current entry result in the terminal.
+ *
+ * @param value The boolean value to be displayed
+ */
+ private fun buildLongResult(value: Boolean) {
+ val width = width
+ println("\n" + (" " + getResult(value)).padStart(width, '-'))
+ }
+
+ /**
+ * Displays the current entry in the terminal.
+ *
+ * @param name The rule name.
+ * @param task The task name.
+ */
+ fun printEntry(name: String, task: String) {
+ logger.info(
+ messages.getMessage(
+ Messages.LOG_INFO_INTERPRET_TASK,
+ task,
+ name
+ )
+ )
+ Arara.config[AraraSpec.UserInteraction.displayLine] = true
+ Arara.config[AraraSpec.UserInteraction.displayResult] = false
+ if (!isDryRunMode) {
+ if (!isVerboseMode) {
+ buildShortEntry(name, task)
+ } else {
+ buildLongEntry(name, task)
+ }
+ } else {
+ buildDryRunEntry(name, task)
+ }
+ }
+
+ /**
+ * Displays a long version of the current entry in the terminal.
+ *
+ * @param name Rule name.
+ * @param task Task name.
+ */
+ private fun buildLongEntry(name: String, task: String) {
+ if (Arara.config[AraraSpec.UserInteraction.displayRolling]) {
+ addNewLine()
+ } else {
+ Arara.config[AraraSpec.UserInteraction.displayRolling] = true
+ }
+ println(displaySeparator())
+ println("($name) $task".abbreviate(width))
+ println(displaySeparator())
+ }
+
+ /**
+ * Displays a dry-run version of the current entry in the terminal.
+ *
+ * @param name The rule name.
+ * @param task The task name.
+ */
+ private fun buildDryRunEntry(name: String, task: String) {
+ if (Arara.config[AraraSpec.UserInteraction.displayRolling]) {
+ addNewLine()
+ } else {
+ Arara.config[AraraSpec.UserInteraction.displayRolling] = true
+ }
+ println("[DR] ($name) $task".abbreviate(width))
+ println(displaySeparator())
+ }
+
+ /**
+ * Displays the exception in the terminal.
+ *
+ * @param exception The exception object.
+ */
+ fun printException(exception: AraraException) {
+ Arara.config[AraraSpec.UserInteraction.displayException] = true
+ Arara.config[AraraSpec.Execution.status] = 2
+
+ val display = Arara.config[AraraSpec.UserInteraction.displayLine]
+ if (Arara.config[AraraSpec.UserInteraction.displayResult])
+ addNewLine()
+ if (display) {
+ if (!isDryRunMode) {
+ if (!isVerboseMode) {
+ buildShortError()
+ } else {
+ buildLongError()
+ }
+ addNewLine()
+ }
+ }
+ val text = (if (exception.hasException())
+ exception.message + " " + messages.getMessage(
+ Messages.INFO_DISPLAY_EXCEPTION_MORE_DETAILS)
+ else
+ exception.message) ?: "EXCEPTION PROVIDES NO MESSAGE"
+ // TODO: check null handling
+ logger.error(text)
+ wrapText(text)
+ if (exception.hasException()) {
+ addNewLine()
+ displayDetailsLine()
+ val details = exception.exception!!.message!!
+ logger.error(details)
+ wrapText(details)
+ }
+ }
+
+ /**
+ * Gets the string representation of the provided boolean value.
+ *
+ * @param value The boolean value.
+ * @return The string representation.
+ */
+ private fun getResult(value: Boolean): String {
+ return if (value)
+ messages.getMessage(
+ Messages.INFO_LABEL_ON_SUCCESS
+ )
+ else
+ messages.getMessage(Messages.INFO_LABEL_ON_FAILURE)
+ }
+
+ /**
+ * Displays the short version of an error in the terminal.
+ */
+ private fun buildShortError() {
+ val result = longestMatch
+ println(messages.getMessage(Messages.INFO_LABEL_ON_ERROR)
+ .padStart(result))
+ }
+
+ /**
+ * Displays the long version of an error in the terminal.
+ */
+ private fun buildLongError() {
+ println((" " + messages.getMessage(Messages.INFO_LABEL_ON_ERROR))
+ .padStart(width, '-'))
+ }
+
+ /**
+ * Displays the provided text wrapped nicely according to the default
+ * terminal width.
+ *
+ * @param text The text to be displayed.
+ */
+ fun wrapText(text: String) = println(text.wrap(width))
+
+ /**
+ * Displays the rule authors in the terminal.
+ *
+ * @param authors The list of authors.
+ */
+ fun printAuthors(authors: List<String>) {
+ val line = if (authors.size == 1)
+ messages.getMessage(Messages.INFO_LABEL_AUTHOR)
+ else
+ messages.getMessage(Messages.INFO_LABEL_AUTHORS)
+ val text = if (authors.isEmpty())
+ messages.getMessage(Messages.INFO_LABEL_NO_AUTHORS)
+ else
+ authors.joinToString(", ") { it.trim() }
+ wrapText("$line $text")
+ }
+
+ /**
+ * Displays the current conditional in the terminal.
+ *
+ * @param conditional The conditional object.
+ */
+ fun printConditional(conditional: Conditional) {
+ if (conditional.type !== Conditional.ConditionalType.NONE) {
+ wrapText(messages.getMessage(Messages.INFO_LABEL_CONDITIONAL) +
+ " (" + conditional.type + ") " +
+ conditional.condition)
+ }
+ }
+
+ /**
+ * Displays the file information in the terminal.
+ */
+ fun printFileInformation() {
+ val file = Arara.config[AraraSpec.Execution.reference]
+ val version = Arara.config[AraraSpec.Application.version]
+ val line = messages.getMessage(
+ Messages.INFO_DISPLAY_FILE_INFORMATION,
+ file.name,
+ CommonUtils.byteSizeToString(file.length()),
+ FileHandlingUtils.getLastModifiedInformation(file)
+ )
+ logger.info(messages.getMessage(
+ Messages.LOG_INFO_WELCOME_MESSAGE,
+ version
+ ))
+ logger.info(displaySeparator())
+ logger.debug("::: arara @ $applicationPath")
+ logger.debug("::: Java %s, %s".format(
+ CommonUtils.getSystemProperty("java.version",
+ "[unknown version]"),
+ CommonUtils.getSystemProperty("java.vendor",
+ "[unknown vendor]")
+ ))
+ logger.debug("::: %s".format(
+ CommonUtils.getSystemProperty("java.home",
+ "[unknown location]")
+ ))
+ logger.debug("::: %s, %s, %s".format(
+ CommonUtils.getSystemProperty("os.name",
+ "[unknown OS name]"),
+ CommonUtils.getSystemProperty("os.arch",
+ "[unknown OS arch]"),
+ CommonUtils.getSystemProperty("os.version",
+ "[unknown OS version]")
+ ))
+ logger.debug("::: user.home @ %s".format(
+ CommonUtils.getSystemProperty("user.home",
+ "[unknown user's home directory]")
+ ))
+ logger.debug("::: CF @ %s".format(Arara.config[AraraSpec.Execution
+ .configurationName]))
+ logger.debug(displaySeparator())
+ logger.info(line)
+ wrapText(line)
+ addNewLine()
+ }
+
+ /**
+ * Displays the elapsed time in the terminal.
+ *
+ * @param seconds The elapsed seconds.
+ */
+ fun printTime(seconds: Double) {
+ val language = Arara.config[AraraSpec.Execution.language]
+
+ if (Arara.config[AraraSpec.UserInteraction.displayTime]) {
+ if (Arara.config[AraraSpec.UserInteraction.displayLine] ||
+ Arara.config[AraraSpec.UserInteraction.displayException])
+ addNewLine()
+
+ val text = messages.getMessage(
+ Messages.INFO_DISPLAY_EXECUTION_TIME,
+ "%1.2f".format(language.locale, seconds))
+ logger.info(text)
+ wrapText(text)
+ }
+ }
+
+ /**
+ * Displays the application logo in the terminal.
+ */
+ fun printLogo() {
+ println("""
+ __ _ _ __ __ _ _ __ __ _
+ / _` | '__/ _` | '__/ _` |
+ | (_| | | | (_| | | | (_| |
+ \__,_|_| \__,_|_| \__,_|
+ """.trimIndent())
+ addNewLine()
+ }
+
+ /**
+ * Adds a new line in the terminal.
+ */
+ private fun addNewLine() {
+ println()
+ }
+
+ /**
+ * Displays a line containing details.
+ */
+ private fun displayDetailsLine() {
+ val line = messages.getMessage(
+ Messages.INFO_LABEL_ON_DETAILS) + " "
+ println(line.abbreviate(width).padEnd(width, '-'))
+ }
+
+ /**
+ * Gets the output separator with the provided text.
+ *
+ * @param message The provided text.
+ * @return A string containing the output separator with the provided text.
+ */
+ fun displayOutputSeparator(message: String): String {
+ return " $message ".center(width, '-')
+ }
+
+ /**
+ * Gets the line separator.
+ *
+ * @return A string containing the line separator.
+ */
+ fun displaySeparator(): String {
+ return "-".repeat(width)
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt
new file mode 100644
index 0000000000..10ace0b7f1
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/Extensions.kt
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import kotlin.math.ceil
+
+/**
+ * Abbreviate a String to a maximal width.
+ *
+ * @param maxWidth The maximal width to truncate to.
+ * @param ellipsis The string to use to indicate an ellipsis.
+ * @throws IllegalArgumentException If the string would consist only of the
+ * ellipsis after shortening.
+ * @return The abbreviated string.
+ */
+@Throws(IllegalArgumentException::class)
+fun String.abbreviate(maxWidth: Int, ellipsis: String = "…"): String {
+ return when {
+ maxWidth < ellipsis.length + 1 ->
+ throw IllegalArgumentException("Can't abbreviate text further")
+ this.length < maxWidth -> this
+ else -> this.substring(0, maxWidth - ellipsis.length) + ellipsis
+ }
+}
+
+/**
+ * Center a string within a specified number of columns.
+ *
+ * This does not center anything if the string is longer than the specified
+ * width.
+ *
+ * @param width The number of columns.
+ * @param padChar The char to pad with.
+ * @return The padded string.
+ */
+fun String.center(width: Int, padChar: Char): String {
+ return if (this.length > width) this
+ else {
+ val charsLeft = width - this.length
+ padChar.toString().repeat(charsLeft / 2) + this +
+ padChar.toString().repeat(ceil(charsLeft.toDouble() / 2.0).toInt())
+ }
+}
+
+/**
+ * Wrap text at a specified width.
+ *
+ * Algorithm from Wikipedia:
+ * https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap#Minimum_number_of_lines
+ *
+ * @param width The width to wrap at.
+ * @return Wrapped text.
+ */
+fun String.wrap(width: Int): String {
+ val words = this.split(" ")
+ var wrapped = words[0]
+ var spaceLeft = width - wrapped.length
+ words.drop(1).forEach {
+ val len = it.length
+ wrapped += if (len + 1 > spaceLeft) {
+ spaceLeft = width - len
+ "\n$it"
+ } else {
+ spaceLeft -= len + 1
+ " $it"
+ }
+ }
+ return wrapped
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt
new file mode 100644
index 0000000000..00313a7714
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/InterpreterUtils.kt
@@ -0,0 +1,164 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.IOException
+import java.io.OutputStream
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.TimeoutException
+import kotlin.time.Duration
+import kotlin.time.ExperimentalTime
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.localization.LanguageController
+import org.islandoftex.arara.localization.Messages
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.ruleset.Command
+import org.islandoftex.arara.ruleset.Conditional
+import org.slf4j.LoggerFactory
+import org.zeroturnaround.exec.InvalidExitValueException
+import org.zeroturnaround.exec.ProcessExecutor
+import org.zeroturnaround.exec.listener.ShutdownHookProcessDestroyer
+
+/**
+ * Implements interpreter utilitary methods.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object InterpreterUtils {
+ // the application messages obtained from the
+ // language controller
+ private val messages = LanguageController
+
+ // get the logger context from a factory
+ private val logger = LoggerFactory.getLogger(InterpreterUtils::class.java)
+
+ /**
+ * Checks if the current conditional has a prior evaluation.
+ *
+ * @param conditional The current conditional object.
+ * @return A boolean value indicating if the current conditional has a prior
+ * evaluation.
+ */
+ fun runPriorEvaluation(conditional: Conditional): Boolean {
+ return if (Arara.config[AraraSpec.Execution.dryrun]) {
+ false
+ } else {
+ when (conditional.type) {
+ Conditional.ConditionalType.IF,
+ Conditional.ConditionalType.WHILE,
+ Conditional.ConditionalType.UNLESS -> true
+ else -> false
+ }
+ }
+ }
+
+ @ExperimentalTime
+ private fun getProcessExecutorForCommand(
+ command: Command,
+ buffer: OutputStream
+ ):
+ ProcessExecutor {
+ val timeOutValue = Arara.config[AraraSpec.Execution.timeoutValue]
+ var executor = ProcessExecutor().command((command).elements)
+ .directory(command.workingDirectory.absoluteFile)
+ .addDestroyer(ShutdownHookProcessDestroyer())
+ if (Arara.config[AraraSpec.Execution.timeout]) {
+ if (timeOutValue == Duration.ZERO) {
+ throw AraraException(messages.getMessage(Messages
+ .ERROR_RUN_TIMEOUT_INVALID_RANGE))
+ }
+ executor = executor.timeout(timeOutValue.toLongNanoseconds(),
+ TimeUnit.NANOSECONDS)
+ }
+ val tee = if (Arara.config[AraraSpec.Execution.verbose]) {
+ executor = executor.redirectInput(System.`in`)
+ TeeOutputStream(System.out, buffer)
+ } else {
+ TeeOutputStream(buffer)
+ }
+ executor = executor.redirectOutput(tee).redirectError(tee)
+ return executor
+ }
+
+ /**
+ * Runs the command in the underlying operating system.
+ *
+ * @param command An object representing the command.
+ * @return An integer value representing the exit code.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @ExperimentalTime
+ @Throws(AraraException::class)
+ fun run(command: Command): Int {
+ val buffer = ByteArrayOutputStream()
+ val executor = getProcessExecutorForCommand(command, buffer)
+ return executor.runCatching {
+ val exit = execute().exitValue
+ logger.info(DisplayUtils.displayOutputSeparator(
+ messages.getMessage(Messages.LOG_INFO_BEGIN_BUFFER)))
+ logger.info(buffer.toString())
+ logger.info(DisplayUtils.displayOutputSeparator(
+ messages.getMessage(Messages.LOG_INFO_END_BUFFER)))
+ exit
+ }.getOrElse {
+ throw AraraException(messages.getMessage(
+ when (it) {
+ is IOException -> Messages.ERROR_RUN_IO_EXCEPTION
+ is InterruptedException ->
+ Messages.ERROR_RUN_INTERRUPTED_EXCEPTION
+ is InvalidExitValueException ->
+ Messages.ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION
+ is TimeoutException ->
+ Messages.ERROR_RUN_TIMEOUT_EXCEPTION
+ else -> Messages.ERROR_RUN_GENERIC_EXCEPTION
+ }), it)
+ }
+ }
+
+ /**
+ * Builds the rule path based on the rule name and returns the corresponding
+ * file location.
+ *
+ * @param name The rule name.
+ * @return The rule file.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun buildRulePath(name: String): File? {
+ Arara.config[AraraSpec.Execution.rulePaths].forEach { path ->
+ val location = File(construct(path, name))
+ if (location.exists())
+ return location
+ }
+ return null
+ }
+
+ /**
+ * Constructs the path given the current path and the rule name.
+ *
+ * @param path The current path.
+ * @param name The rule name.
+ * @return The constructed path.
+ * @throws AraraException Something wrong happened, to be caught in the
+ * higher levels.
+ */
+ @Throws(AraraException::class)
+ fun construct(path: String, name: String): String {
+ val fileName = "$name.yaml"
+ val location = File(path)
+ return if (location.isAbsolute) {
+ location.resolve(fileName).toString()
+ } else {
+ Arara.config[AraraSpec.Execution.workingDirectory]
+ // first resolve the path (rule path) against the working
+ // directory, then the rule name we want to resolve
+ .resolve(path).resolve(fileName).toAbsolutePath().toString()
+ }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
new file mode 100644
index 0000000000..f9719fa31f
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/LoggingUtils.kt
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import ch.qos.logback.classic.LoggerContext
+import ch.qos.logback.classic.joran.JoranConfigurator
+import ch.qos.logback.core.joran.spi.JoranException
+import java.io.InputStream
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.slf4j.LoggerFactory
+
+/**
+ * Implements the logging controller. This class actually sets the logging
+ * configuration in order to allow appending results to a file.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object LoggingUtils {
+ // configuration resource as an input stream
+ // the configuration is actually a XML file.
+ private val resource: InputStream by lazy {
+ LoggingUtils::class.java
+ .getResourceAsStream("/org/islandoftex/arara/configuration/logback.xml")
+ }
+
+ /**
+ * Sets the logging configuration according to the provided boolean value.
+ * If the value is set to true, the log entries will be appended to a file,
+ * otherwise the logging feature will keep silent.
+ * @param enable A boolean value that indicates the logging behaviour
+ * throughout the application.
+ */
+ fun enableLogging(enable: Boolean) {
+ // get the logger context from a factory, set a
+ // new context and reset it
+ val loggerContext = LoggerFactory.getILoggerFactory() as LoggerContext
+
+ try {
+ // get a new configuration and set
+ // the context
+ val configurator = JoranConfigurator()
+ configurator.context = loggerContext
+ loggerContext.reset()
+
+ // if enabled, the log entries will be
+ // appended to a file, otherwise it will
+ // remain silent
+ if (enable) {
+ // set the file name and configure
+ // the logging controller to append
+ // entries to the file
+ val name = Arara.config[AraraSpec.Execution.logName]
+ loggerContext.putProperty("name", name)
+ configurator.doConfigure(resource)
+ }
+ } catch (_: JoranException) {
+ // quack, quack, quack!
+ }
+ }
+
+ /**
+ * Initializes the logging controller by disabling it. I don't want an odd
+ * behaviour out of the box.
+ */
+ fun init() {
+ enableLogging(false)
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt
new file mode 100644
index 0000000000..ae695c44fb
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/MessageUtils.kt
@@ -0,0 +1,266 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import javax.swing.JOptionPane
+import javax.swing.UIManager
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+
+/**
+ * Implements utilitary methods for displaying messages.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object MessageUtils {
+ // holds the default width for the
+ // message body, in pixels
+ private const val WIDTH = 250
+
+ // let's start the UI manager and set
+ // the default look and feel to be as
+ // close as possible to the system
+ init {
+ // get the current look and feel
+ var laf = Arara.config[AraraSpec.UserInteraction.lookAndFeel]
+
+ // check if one is actually set
+ if (laf != "none") {
+ // use a special keyword to indicate
+ // the use of a system look and feel
+ if (laf == "system") {
+ laf = UIManager.getSystemLookAndFeelClassName()
+ }
+
+ // let's try it, in case it fails,
+ // rely to the default look and feel
+ try {
+ // get the system look and feel name
+ // and try to set it as default
+ UIManager.setLookAndFeel(laf)
+ } catch (_: Exception) {
+ // quack, quack, quack
+ }
+ }
+ }
+
+ /**
+ * Normalizes the icon type to one of the five available icons.
+ * @param value An integer value.
+ * @return The normalized integer value.
+ */
+ @Suppress("MagicNumber")
+ private fun normalizeIconType(value: Int): Int {
+ // do the normalization according to the available
+ // icons in the underlying message implementation
+ return when (value) {
+ 1 -> JOptionPane.ERROR_MESSAGE
+ 2 -> JOptionPane.INFORMATION_MESSAGE
+ 3 -> JOptionPane.WARNING_MESSAGE
+ 4 -> JOptionPane.QUESTION_MESSAGE
+ else -> JOptionPane.PLAIN_MESSAGE
+ }
+ }
+
+ /**
+ * Normalizes the message width, so only valid nonzero values are accepted.
+ * @param value An integer value corresponding to the message width.
+ * @return The normalized width.
+ */
+ private fun normalizeMessageWidth(value: Int): Int {
+ return if (value > 0) value else WIDTH
+ }
+
+ /**
+ * Shows the message.
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ */
+ fun showMessage(
+ width: Int,
+ type: Int,
+ title: String,
+ text: String
+ ) {
+ // effectively shows the message based
+ // on the provided parameters
+ JOptionPane.showMessageDialog(null,
+ String.format(
+ "<html><body style=\"width:%dpx\">%s</body></html>",
+ normalizeMessageWidth(width),
+ text),
+ title,
+ normalizeIconType(type)
+ )
+ }
+
+ /**
+ * Shows the message. It relies on the default width.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ */
+ fun showMessage(type: Int, title: String, text: String) {
+ showMessage(WIDTH, type, title, text)
+ }
+
+ /**
+ * Shows a message with options presented as an array of buttons.
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param buttons An array of objects to be presented as buttons.
+ * @return The index of the selected button, starting from 1.
+ */
+ fun showOptions(
+ width: Int,
+ type: Int,
+ title: String,
+ text: String,
+ vararg buttons: Any
+ ): Int {
+ // returns the index of the selected button,
+ // zero if nothing is selected
+ return JOptionPane.showOptionDialog(null,
+ String.format(
+ "<html><body style=\"width:%dpx\">%s</body></html>",
+ normalizeMessageWidth(width),
+ text),
+ title,
+ JOptionPane.DEFAULT_OPTION,
+ normalizeIconType(type), null,
+ buttons,
+ buttons[0]
+ ) + 1
+ }
+
+ /**
+ * Shows a message with options presented as an array of buttons. It relies
+ * on the default width.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param buttons An array of objects to be presented as buttons.
+ * @return The index of the selected button, starting from 1.
+ */
+ @Suppress("SpreadOperator")
+ fun showOptions(
+ type: Int,
+ title: String,
+ text: String,
+ vararg buttons: Any
+ ): Int {
+ return showOptions(WIDTH, type, title, text, *buttons)
+ }
+
+ /**
+ * Shows a message with a text input.
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @return The string representing the input text.
+ */
+ fun showInput(
+ width: Int,
+ type: Int,
+ title: String,
+ text: String
+ ): String {
+ // get the string from the
+ // input text, if any
+ val input = JOptionPane.showInputDialog(null,
+ String.format(
+ "<html><body style=\"width:%dpx\">%s</body></html>",
+ normalizeMessageWidth(width),
+ text),
+ title,
+ normalizeIconType(type))
+
+ // if the input is not null, that is,
+ // the user actually typed something
+ // return the trimmed string otherwise
+ // an empty string
+ return input?.trim() ?: ""
+ }
+
+ /**
+ * Shows a message with a text input. It relies on the default width.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @return The string representing the input text.
+ */
+ fun showInput(type: Int, title: String, text: String): String {
+ return showInput(WIDTH, type, title, text)
+ }
+
+ /**
+ * Shows a message with options presented as a dropdown list of elements.
+ * @param width Integer value, in pixels.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param elements An array of objects representing the elements.
+ * @return The index of the selected element, starting from 1.
+ */
+ fun showDropdown(
+ width: Int,
+ type: Int,
+ title: String,
+ text: String,
+ vararg elements: Any
+ ): Int {
+ // show the dropdown list and get
+ // the selected object, if any
+ val index = JOptionPane.showInputDialog(null,
+ String.format(
+ "<html><body style=\"width:%dpx\">%s</body></html>",
+ normalizeMessageWidth(width),
+ text),
+ title,
+ normalizeIconType(type), null,
+ elements,
+ elements[0])
+
+ // if it's not a null object, let's
+ // find the corresponding index
+ if (index != null) {
+ elements.forEachIndexed { i, value ->
+ // if the element is found, simply
+ // return the index plus 1, as zero
+ // corresponds to no selection at all
+ if (value == index) {
+ return i + 1
+ }
+ }
+ }
+
+ // nothing was selected,
+ // simply return zero
+ return 0
+ }
+
+ /**
+ * Shows a message with options presented as a dropdown list of elements. It
+ * relies on the default width.
+ * @param type Type of message.
+ * @param title Title of the message.
+ * @param text Text of the message.
+ * @param elements An array of objects representing the elements.
+ * @return The index of the selected element, starting from 1.
+ */
+ @Suppress("SpreadOperator")
+ fun showDropdown(
+ type: Int,
+ title: String,
+ text: String,
+ vararg elements: Any
+ ): Int {
+ return showDropdown(WIDTH, type, title, text, *elements)
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt
new file mode 100644
index 0000000000..9b443736a1
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/SystemCallUtils.kt
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.ruleset.Command
+import org.zeroturnaround.exec.ProcessExecutor
+
+/**
+ * Implements a system call controller.
+ *
+ * This class wraps a map that holds the result of system specific variables
+ * not directly available at runtime and makes unsafe calling of system
+ * commands available to rules.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+object SystemCallUtils {
+ /**
+ * When executing a system call goes wrong, this status code is returned.
+ */
+ const val errorExitStatus = -99
+ /**
+ * When executing a system call goes wrong and the caller asked for output,
+ * this output will be returned.
+ */
+ const val errorCommandOutput = ""
+
+ // the system call map which holds the result of
+ // system specific variables not directly available
+ // at runtime; the idea here is to provide wrappers
+ // to the map getter, so it could be easily manipulated
+ // create the new map instance to be
+ // populated on demand
+ private val map: MutableMap<String, Any> = mutableMapOf()
+
+ // the commands map will allow the system call map being
+ // populated only on demand, that is, if the key is not
+ // found, this map will provide the corresponding method
+ // and update the value
+ // create the new map of commands and
+ // add the corresponding system calls
+ private val commands: MutableMap<String, () -> Any> = mutableMapOf(
+ "cygwin" to {
+ // Implements the body of the command. In this particular
+ // instance, it checks if we are inside a Cygwin environment.
+ // Returns a boolean value indicating if we are inside a Cygwin
+ // environment.
+
+ // execute a new system call to 'uname -s', read the output
+ // as an UTF-8 string, lowercase it and check if it starts
+ // with the 'cygwin' string; if so, we are inside Cygwin
+ executeSystemCommand(Command("uname", "-s"))
+ .second.toLowerCase().startsWith("cygwin")
+ })
+
+ /**
+ * Gets the object indexed by the provided key. This method actually holds
+ * the map method of the very same name.
+ *
+ * @param key The provided map key.
+ * @return The object indexed by the provided map key.
+ */
+ @Throws(NoSuchElementException::class, AraraException::class)
+ operator fun get(key: String): Any {
+ // if key is not found, meaning that
+ // the value wasn't required before
+ if (!map.containsKey(key)) {
+ if (commands.containsKey(key))
+ // perform the system call and
+ // populate the corresponding value
+ map[key] = commands[key]!!.invoke()
+ else
+ throw AraraException("The requested key could not be " +
+ "translated into a command to get the call value.")
+ }
+
+ // simply return the corresponding
+ // value based on the provided key
+ return map.getValue(key)
+ }
+
+ /**
+ * Executes a system command from the underlying operating system and
+ * returns a pair containing the exit status and the command output as a
+ * string.
+ * @param command The system command to be executed.
+ * @return A pair containing the exit status and the system command output
+ * as a string.
+ */
+ fun executeSystemCommand(command: Command): Pair<Int, String> {
+ return ProcessExecutor(command.elements).runCatching {
+ directory(command.workingDirectory)
+ readOutput(true)
+ execute().run {
+ exitValue to outputUTF8()
+ }
+ }.getOrElse {
+ // quack, quack, do nothing, just
+ // return a default error code
+ errorExitStatus to errorCommandOutput
+ }
+ }
+}
diff --git a/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt
new file mode 100644
index 0000000000..dee15176f2
--- /dev/null
+++ b/support/arara/source/src/main/kotlin/org/islandoftex/arara/utils/TeeOutputStream.kt
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import java.io.IOException
+import java.io.OutputStream
+
+/**
+ * Implements a stream splitter.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 4.0
+ */
+class TeeOutputStream(
+ /**
+ * The array of output streams holds every output stream that will be
+ * written to.
+ */
+ vararg outputStreams: OutputStream
+) : OutputStream() {
+ /**
+ * An array of streams in which an object of this class will split data.
+ */
+ private val streams: List<OutputStream> = outputStreams.toList()
+
+ /**
+ * Writes the provided integer to each stream.
+ *
+ * @param b The provided integer
+ * @throws IOException An IO exception.
+ */
+ @Throws(IOException::class)
+ override fun write(b: Int) = streams.forEach { it.write(b) }
+
+ /**
+ * Writes the provided byte array to each stream, with the provided offset
+ * and length.
+ *
+ * @param b The byte array.
+ * @param offset The offset.
+ * @param length The length.
+ * @throws IOException An IO exception.
+ */
+ @Throws(IOException::class)
+ override fun write(b: ByteArray, offset: Int, length: Int) =
+ streams.forEach { it.write(b, offset, length) }
+
+ /**
+ * Flushes every stream.
+ *
+ * @throws IOException An IO exception.
+ */
+ @Throws(IOException::class)
+ override fun flush() = streams.forEach { it.flush() }
+
+ /**
+ * Closes every stream silently.
+ */
+ override fun close() = streams.forEach {
+ try {
+ it.close()
+ } catch (ignored: IOException) {
+ // do nothing on purpose
+ }
+ }
+}
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/configuration/logback.xml b/support/arara/source/src/main/resources/org/islandoftex/arara/configuration/logback.xml
index 93e5e14cea..03572873eb 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/configuration/logback.xml
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/configuration/logback.xml
@@ -34,19 +34,19 @@
<configuration>
- <appender name="FILE" class="ch.qos.logback.core.FileAppender">
- <file>${name}.log</file>
- <append>false</append>
- <encoder>
- <charset>UTF-8</charset>
- <pattern>%date{dd MMM yyyy HH:mm:ss.SSS} %-5level - %msg%n</pattern>
- </encoder>
- </appender>
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <file>${name}.log</file>
+ <append>false</append>
+ <encoder>
+ <charset>UTF-8</charset>
+ <pattern>%date{dd MMM yyyy HH:mm:ss.SSS} %-5level - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <logger name="org.zeroturnaround.exec" level="OFF"/>
+
+ <root level="ALL">
+ <appender-ref ref="FILE"/>
+ </root>
- <logger name="org.zeroturnaround.exec" level="OFF" />
-
- <root level="ALL">
- <appender-ref ref="FILE" />
- </root>
-
</configuration> \ No newline at end of file
diff --git a/support/arara/source/src/main/resources/org/islandoftex/arara/configuration/release-notes b/support/arara/source/src/main/resources/org/islandoftex/arara/configuration/release-notes
new file mode 100644
index 0000000000..002c277ecd
--- /dev/null
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/configuration/release-notes
@@ -0,0 +1,5 @@
+* Introduced working directory support.
+* Reorganized code base for more speed.
+* Removed triggers and introduced session namespaces.
+* Removed the velocity templating language and several outdated methods.
+* Removed string-based commands (return "command";).
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages.properties b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages.properties
index dd1972fd5c..f802f04b0d 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages.properties
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages.properties
@@ -34,15 +34,12 @@
# Language: English
# Translators: Paulo Roberto Massa Cereda
# ---------------------------------------------------------------------
-
ERROR_BASENAME_NOT_A_FILE=The ''basename'' method requires a file, not a directory. It looks like ''{0}'' does not appear to be a file at all. If you need to perform tasks on a directory, you could use a couple of methods from the Java API.
ERROR_CALCULATEHASH_IO_EXCEPTION=For whatever reason, I could not calculate the hash. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions to read the file.
ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=It looks like ''{0}'' is not a valid boolean value. This should be an easy fix. Make sure to use a valid string that represents boolean values (yes and no, true and false, 1 and 0, and on and off).
ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=I could not check your operating system. The provided value ''{0}'' does not look like a valid operating system entry in my list (I might also be wrong, of course). Please correct the value and try again.
ERROR_CHECKREGEX_IO_EXCEPTION=I could not read the contents of the file ''{0}'', I got an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION=One of your entries in the 'filetypes' list in the configuration file has no 'extension'. Sadly, I cannot apply a new filetype if the extension is not set. This should be an easy fix: add a new extension and try again.
ERROR_CONFIGURATION_GENERIC_ERROR=I could not parse the configuration file, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_CONFIGURATION_INVALID_YAML=I could not parse the configuration file, something bad happened. Apparently, the provided YAML file is invalid. I will do my best to help you in any way I can.
ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=The value defined in the 'loops' key in the configuration file in order to denote the maximum number of loops has an invalid range. Please make sure to use a positive long value.
ERROR_DISCOVERFILE_FILE_NOT_FOUND=I could not find the provided file ''{0}'' {1}. Please make sure the file exists and it has a valid extension.
ERROR_EVALUATE_COMPILATION_FAILED=For whatever reason, I could not compile the expression in the provided conditional. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
@@ -52,27 +49,20 @@ ERROR_FILETYPE_NOT_A_FILE=The ''filetype'' method requires a file, not a directo
ERROR_FILETYPE_UNKNOWN_EXTENSION=I cannot recognize ''{0}'' as a default extension. If you want to define a new file type, make sure to provide the extension and pattern. These are the default extensions: {1}
ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=There was an encoding problem while trying to obtain the application path. There is nothing much I can do about it.
ERROR_GETCANONICALFILE_IO_EXCEPTION=I could not get the canonical file due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the lookup operation. Or maybe I do not have the proper permissions.
-ERROR_GETCANONICALPATH_IO_EXCEPTION=I could not get the canonical path due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the lookup operation. Or maybe I do not have the proper permissions.
ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=I could not get the parent canonical path due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions.
ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=It seems that ''{0}'' is marked as required in the rule, but I could not find it in the directive parameters. Please make sure to add it as parameter for your directive and try again.
ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=I could not evaluate one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=I could not evaluate the default value expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=I could not evaluate the exit status expression of one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=I could not evaluate the flag expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_NULL_COMMAND=I am sorry, but apparently one of the provided commands resolved to a null value. Please make sure the command is valid and try again.
ERROR_INTERPRETER_RULE_NOT_FOUND=I could not find a rule named ''{0}'' in the provided rule paths. Perhaps a misspelled word? I was looking for a file named ''{0}.yaml'' in the following paths in order of priority: {1}
ERROR_INTERPRETER_UNKNOWN_KEYS=I found these unknown keys in the directive: {0}. This should be an easy fix, just remove them from your map.
ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=The 'exit' expression must always return a boolean value (even if there is no computation in the closure body). This should be an easy fix: make sure to correct the type return statement and try again.
ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=The ''isSubdirectory'' method requires a directory, not a file. It looks like ''{0}'' does not appear to be a directory at all.
ERROR_LANGUAGE_INVALID_CODE=The provided language code is invalid. Currently, I know how to speak the following languages: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=I could not load the XML database named ''{0}''. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file. By the way, make sure the XML file is well-formed.
+ERROR_LOAD_COULD_NOT_LOAD_XML=I could not load the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file. By the way, make sure the YAML file is well-formed.
ERROR_PARSER_INVALID_PREAMBLE=I am sorry, but the preamble ''{0}'' could not be found. Please make sure this key exists in the configuration file.
-ERROR_PARSER_LOOPS_INVALID_RANGE=The value defined in the command line for the maximum number of loops has an invalid range. Please make sure to use a positive long value.
-ERROR_PARSER_LOOPS_NAN=The maximum number of loops option expects a number as argument. This should be an easy fix. Just make sure to provide a positive long value.
-ERROR_PARSER_TIMEOUT_INVALID_RANGE=The value defined in the command line for the execution timeout has an invalid range. Please make sure to use a positive long value.
-ERROR_PARSER_TIMEOUT_NAN=The execution timeout option expects a number as argument. This should be an easy fix. Just make sure to provide a positive long value.
ERROR_PARSERULE_GENERIC_ERROR=I could not parse the rule, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_PARSERULE_INVALID_YAML=I could not parse the rule, something bad happened. Apparently, the provided YAML file is invalid. I will do my best to help you in any way I can.
ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=I could not replicate the list due to a missing format argument. My guess is that there are less (or more) parameters than expected. Make sure to correct the number of parameters and try again.
ERROR_RULE_IDENTIFIER_AND_PATH=I have spotted an error in rule ''{0}'' located at ''{1}''.
ERROR_RUN_GENERIC_EXCEPTION=I could not run the provided system command, something bad happened. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
@@ -81,13 +71,10 @@ ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=The provided system command execution has
ERROR_RUN_IO_EXCEPTION=The system command execution has failed due to an IO error. Are you sure the provided system command exists in your path? It might be a good idea to check the path and see if the command is available.
ERROR_RUN_TIMEOUT_EXCEPTION=The system command execution reached the provided timeout value and was aborted. If the time was way too short, make sure to provide a longer value.
ERROR_RUN_TIMEOUT_INVALID_RANGE=The timeout value is probably missing (although timeout is enabled). This should be an easy fix. Please make sure to provide a positive long value.
-ERROR_SAVE_COULD_NOT_SAVE_XML=I could not save the XML database named ''{0}''. I have no idea why it failed, though. Perhaps I do not have the proper permissions to write the XML file to disk.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=The ''obtain'' method has found an unknown key ''{0}'' in the session scope. I could not get something I do not have in the first place. Please enter a valid key and try again.
+ERROR_SAVE_COULD_NOT_SAVE_XML=I could not save the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps I do not have the proper permissions to write the YAML file to disk.
+ERROR_SESSION_OBTAIN_UNKNOWN_KEY=The ''get'' method has found an unknown key ''{0}'' in the session scope. I could not get something I do not have in the first place. Please enter a valid key and try again.
ERROR_SESSION_REMOVE_UNKNOWN_KEY=The ''remove'' method has found an unknown key ''{0}'' in the session scope. I could not remove something I do not have in the first place. Please enter a valid key and try again.
-ERROR_TRIGGER_ACTION_NOT_FOUND=The trigger action ''{0}'' was not found. Make sure to take a look at the list of all available triggers and try again.
-ERROR_TRIGGER_CALL_EXCEPTION=The trigger action ''{0}'' could not be called. Something really bad happened.
ERROR_VALIDATE_EMPTY_FILES_LIST=I read a directive {0} and found out that the provided ''files'' list is empty. This is an easy fix: make sure the list has at least one element and try again.
-ERROR_VALIDATE_FILE_IS_RESERVED=I read a directive {0} and found out that the key ''file'' was used. This key is reserved, so you cannot use it. But do not worry, this should be an easy fix. Just replace it by another name.
ERROR_VALIDATE_FILES_IS_NOT_A_LIST=I read a directive {0} and found out that ''files'' requires a list. Please make sure to correct the type to a proper list and try again.
ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=I spotted an invalid directive {0} in the provided file. Make sure to fix the directive and try again.
ERROR_VALIDATE_NO_DIRECTIVES_FOUND=It looks like no directives were found in the provided file. Make sure to include at least one directive and try again.
@@ -95,26 +82,18 @@ ERROR_VALIDATE_ORPHAN_LINEBREAK=Apparently there is an orphan directive line bre
ERROR_VALIDATE_REFERENCE_IS_RESERVED=I read a directive {0} and found out that the key ''reference'' was used. This key is reserved, so you cannot use it. But do not worry, this should be an easy fix. Just replace it by another name.
ERROR_VALIDATE_YAML_EXCEPTION=There was a problem with the provided YAML map in a directive {0}. This part is quite tricky, since it involves aspects of the underlying data serialization format.
ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=The argument identifier ''{0}'' is reserved, so you cannot use it. This should be an easy fix. Just replace it by another name.
-ERROR_VALIDATEBODY_ARGUMENTS_LIST=I could not find the list of arguments. I need such list, even if it is empty. Make sure to fix this issue and try again.
ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Apparently you have duplicate argument identifiers in your rule. Make sure to fix this issue and try again.
ERROR_VALIDATEBODY_MISSING_KEYS=When defining a rule argument scope, at least 'flag' or 'default' must be used. Please, make sure to use at least one of them.
ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=I found out that one of the arguments has no identifier. Please, make sure to add a valid identifier to the argument and try again.
ERROR_VALIDATEBODY_NULL_COMMAND=I found a null command in the provided rule. This should be an easy fix. Make sure to add a valid command to the rule.
-ERROR_VALIDATEBODY_NULL_COMMANDS_LIST=I need a list of commands. Make sure to fix this issue and try again.
ERROR_VALIDATEHEADER_NULL_ID=The provided rule has no identifier. This is a crucial information, please make sure to fix this issue and try again. Make sure the identifier has the same name of the rule file (without the extension, of course).
ERROR_VALIDATEHEADER_NULL_NAME=The provided rule has no name. This should be an easy fix. Make sure to add a valid name and try again.
ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=The rule has a wrong identifier. I was expecting ''{0}'', but found ''{1}''. This should be an easy fix: just replace the wrong identifier by the correct one.
-ERROR_VELOCITY_FILE_NOT_FOUND=The template engine was not able to find the provided input file. Make sure the location is correct and try again.
-ERROR_VELOCITY_PARSE_EXCEPTION=There was a parse error in the provided input file. Make sure the file complies with the Velocity Template Language (VTL) specification and try again.
-ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION=There was a method invocation error in the provided input file. Make sure the file complies with the Velocity Template Language (VTL) specification and try again.
-ERROR_VELOCITY_IO_EXCEPTION=The template engine was not able to write the output file. Make sure the path has the proper permissions and try again.
INFO_DISPLAY_EXCEPTION_MORE_DETAILS=There are more details available on this exception:
INFO_DISPLAY_EXECUTION_TIME=Total: {0} seconds
INFO_DISPLAY_FILE_INFORMATION=Processing ''{0}'' (size: {1}, last modified: {2}), please wait.
INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Although executing in dry-run mode, this entry might be already processed since it returned a boolean value: {0}
INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=About to run: {0}
-INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE=Although executing in dry-run mode, this entry is always processed since it is a trigger. Note that the effects of a trigger might influence the current execution.
-INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE=This entry is a trigger originated from the rule scope. Note that the effects of a trigger might influence the current execution.
INFO_LABEL_AUTHOR=Author:
INFO_LABEL_AUTHORS=Authors:
INFO_LABEL_CONDITIONAL=Conditional:
@@ -124,19 +103,7 @@ INFO_LABEL_ON_ERROR=ERROR
INFO_LABEL_ON_FAILURE=FAILURE
INFO_LABEL_ON_SUCCESS=SUCCESS
INFO_LABEL_UNNAMED_TASK=Unnamed task
-INFO_PARSER_ALL_RIGHTS_RESERVED=All rights reserved
-INFO_PARSER_DRYRUN_MODE_DESCRIPTION=go through all the motions of running a command, but with no actual calls
-INFO_PARSER_HELP_DESCRIPTION=print the help message
-INFO_PARSER_LANGUAGE_DESCRIPTION=set the application language
-INFO_PARSER_LOG_DESCRIPTION=generate a log output
-INFO_PARSER_LOOPS_DESCRIPTION=set the maximum number of loops
-INFO_PARSER_NOTES=This tool makes use of the following libraries and their respective licenses: CAL10N: MIT, Commons CLI: Apache 2.0, Commons Collections: Apache 2.0, Commons IO: Apache 2.0, Commons Lang: Apache 2.0, MVEL: Apache 2.0, Logback: dual licensing with EPL 1.0 and LGPL 2.1, Simple framework: Apache 2.0, SLF4J: MIT, SnakeYAML: Apache 2.0, Velocity: Apache 2.0, and ZT-Exec: Apache 2.0. At last but not least, arara itself is released under the New BSD license.
-INFO_PARSER_ONLY_HEADER=extract directives only in the file header
-INFO_PARSER_PREAMBLE_DESCRIPTION=set the file preamble based on the configuration file
-INFO_PARSER_SILENT_MODE_DESCRIPTION=hide the command output
-INFO_PARSER_TIMEOUT_DESCRIPTION=set the execution timeout (in milliseconds)
-INFO_PARSER_VERBOSE_MODE_DESCRIPTION=print the command output
-INFO_PARSER_VERSION_DESCRIPTION=print the application version
+INFO_PARSER_NOTES=arara is released under the New BSD license.
LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
LOG_INFO_BOOLEAN_MODE=Boolean value: {0}
LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
@@ -149,4 +116,4 @@ LOG_INFO_RULE_LOCATION=Rule location: ''{0}''
LOG_INFO_SYSTEM_COMMAND=System command: {0}
LOG_INFO_TASK_RESULT=Task result:
LOG_INFO_VALIDATED_DIRECTIVES=All directives were validated. We are good to go.
-LOG_INFO_WELCOME_MESSAGE=Welcome to arara {0} (revision {1})!
+LOG_INFO_WELCOME_MESSAGE=Welcome to arara {0}!
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_de.properties b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_de.properties
index eb8bb41fd6..e0edb70443 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_de.properties
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_de.properties
@@ -34,87 +34,66 @@
# Language: German
# Translators: Marco Daniel
# ---------------------------------------------------------------------
-
ERROR_BASENAME_NOT_A_FILE=Die Methode des ''Dateinamens'' (''basename'') benötigt eine Datei und kein Verzeichnis. Es scheint, als sei ''{0}'' keine Datei. Falls du Aufgaben auf ein Verzeichnis bzw. Ordner anwenden willst, kannst du eine Vielzahl von JAVA API-Methoden verwenden.
ERROR_CALCULATEHASH_IO_EXCEPTION=Aus was für einem Grund auch immer kann ich die Prüfziffer (checksum) nicht berechnen. Ich habe keine Idee, warum es fehlschlägt. Vielleicht wurde die Datei bevor oder während der Prüfziffer-Operation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Es scheint, als sei ''{0}'' kein logischer Ausdruck (boolean value). Das sollte leicht zu beheben sein. Stelle sicher, dass der Eingabestring ein zugelassener logischer Ausdruck ist (''yes'' oder ''no'', ''true'' oder ''false'', ''1'' oder ''0'' sowie ''on'' oder ''off'').
ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Ich konnte dein Betriebssystem nicht überprüfen. Der ermittelte Wert ''{0}'' sieht nicht wie ein gültiges Betriebssystem in meiner Liste aus. (Ich kann natürlich auch falsch liegen.) Bitte korrigiere den Wert und versuche es erneut.
ERROR_CHECKREGEX_IO_EXCEPTION=Ich konnte den Inhalt der Datei ''{0}'' nicht lesen. Ich erhielt einen IO-Fehler. Ich habe keine Idee für die Fehlerursache, obwohl?. Vielleicht wurde die Datei bevor oder während des Leseprozesses bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION=In der Konfigurationsdatei hat einer deiner Einträge in der Liste für Dateitypen 'filetypes' keine Dateiendung 'extension'. Leider kann ich keinen neuen Dateitypen anwenden, wenn die Dateiendung nicht gesetzt ist. Dies sollte leicht zu beheben sein: Ergänze die neue Dateiendung und versuche es erneut.
ERROR_CONFIGURATION_GENERIC_ERROR=Ich konnte die Konfigurationsdatei nicht analysieren, etwas schlechtes passierte. Dieser Teil ist ziemlich knifflig, denn er bezieht das zugrundeliegende Datenserialisierungsformat mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_CONFIGURATION_INVALID_YAML=Ich konnte die Konfigurationsdatei nicht analysieren. etwas schlechtes passierte. Anscheinend ist die bereitgestellte YAML-Datei ungültig. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=In der Konfigurationsdatei hat der eingegebenen Wert 'loops' zur Festlegung der maximalen Anzahl an Schleifendurchgängen einen ungültigen Bereich. Bitte stelle sicher, dass eine positive Zahl eingetragen wird.
ERROR_DISCOVERFILE_FILE_NOT_FOUND=Ich konnte die vorausgesetzte Datei ''{0}'' {1} nicht finden. Bitte stelle sicher, dass die Datei existiert und eine gültige Dateiendung hat.
ERROR_EVALUATE_COMPILATION_FAILED=Aus was für einen Grund auch immer kann ich den Ausdruck in der bereitgestellten Bedingung nicht kompilieren. Dieser Teil ist ziemlich knifflig, denn er bezieht die zugrundeliegende Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_EVALUATE_NOT_BOOLEAN_VALUE=Die Auswertung der Bedingung (conditional) hat einen boolschen Ausdruck als Ergebnis erwartet. Das sollte leicht zu beheben sein. Stelle einfach sicher, dass die Bedingung einen booleschen Ausdruck ('yes' oder 'no', 'true' oder 'false', '1' oder '0' sowie 'on' oder 'off') als Ergebnis erhält.
+ERROR_EVALUATE_NOT_BOOLEAN_VALUE=Die Auswertung der Bedingung (conditional) hat einen boolschen Ausdruck als Ergebnis erwartet. Das sollte leicht zu beheben sein. Stelle einfach sicher, dass die Bedingung einen booleschen Ausdruck ('yes' oder 'no', 'true' oder 'false', '1' oder '0' sowie 'on' oder 'off') als Ergebnis erhält.
ERROR_EXTRACTOR_IO_ERROR=Es gab einen IO-Fehler während ich versuchte, die Direktive zu extrahieren. Ich habe keine Idee, warum es fehlschlug. Vielleicht wurde die Datei bevor oder während der Prüfziffer-Operation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
ERROR_FILETYPE_NOT_A_FILE=Die Methode der Dateitypen ''filetype'' fordert als Eingabe eine Datei und kein Verzeichnis. Es scheint, als sei ''{0}'' keine Datei. Falls du Aufgaben auf ein Verzeichnis bzw. Ordner anwenden willst, kannst du eine Vielzahl von JAVA API-Methoden verwenden.
ERROR_FILETYPE_UNKNOWN_EXTENSION=Ich kann ''{0}'' als keine vorgegebene Dateiendung erkennen. Falls du einen neuen Dateitypen definieren möchtest, stelle sich, dass die Dateiendung sowie die entsprechende Struktur bereitgestellt wird. Das sind die vordefinierten Dateiendungen: {1}
ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Es gab ein Kodierungsproblem während ich versuchte den Anwendungspfad zu erhalten. Es gibt leider nicht viel, was ich tun kann.
ERROR_GETCANONICALFILE_IO_EXCEPTION=Ich konnte die vorschriftsmäßige Datei auf Grund eines IO-Fehlers nicht bekommen. Ich habe keine Idee für die Fehlerursache, obwohl?. Vielleicht wurde die Datei bevor oder während des Suchvorganges bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
-ERROR_GETCANONICALPATH_IO_EXCEPTION=Ich konnte den vorschriftsmäßigen Pfad auf Grund eines IO-Fehlers nicht bekommen. Ich habe keine Idee für die Fehlerursache, obwohl?. Vielleicht wurde die Datei bevor oder während des Suchvorganges bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Ich konnte den vorschriftsmäßigen Elternpfad auf Grund eines IO-Fehlers nicht bekommen. Ich habe keine Idee für die Fehlerursache, obwohl?. Vielleicht wurde die Datei bevor oder während der Prüfziffer-Operation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Es scheint, als sei ''{0}'' eine geforderte Eingabe in der Regel, aber ich kann sie in den Eingabeparametern nicht finden. Bitte stelle sicher, dass der Parameter in deiner Direktive ergänzt wird und versuche es erneut.
ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Ich konnte eines der genutzten Kommandos nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Ich konnte den Standardwert eines Argumentes nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Ich kann den Status der Fertigmeldung (exit status) von einer der genutzten Anweisungen nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Ich kann den Statusindikator (flag expression) eines Argumentes nicht auswerten. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_INTERPRETER_NULL_COMMAND=Es tut mir leid, aber eine der genutzten Anweisungen gibt einen Nullwert zurück. Bitte stelle sicher, dass die Anweisung gültig ist und versuche es erneut.
ERROR_INTERPRETER_RULE_NOT_FOUND=Ich konnte keine Regel mit dem Namen ''{0}'' in den hinterlegten Regelverzeichnissen finden. Vielleicht ein falsch geschriebenes Wort? Ich habe nach dem Dateinamen ''{0}.yaml'' in den nachstehenden Verzeichnissen mit entsprechender Priorität gesucht: {1}
ERROR_INTERPRETER_UNKNOWN_KEYS=Ich habe folgende unbekannte Keys in der Direktive gefunden: {0}. Das sollte leicht zu beheben sein, entferne sie einfach.
ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=Der Ausdruck 'exit' muss immer einen logischen Wert (boolean value) zurückgeben (sogar wenn es keine Berechnung in der Prozedur gibt). Das sollte leicht zu beheben sein: Stelle einen korrekten Rückgabewert sicher und versuche es erneut.
ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=Die ''isSubdirectory'' Methode erwartet als Argument einen Ordner, nicht eine Datei. ''{0}'' scheint kein Ordner zu sein.
ERROR_LANGUAGE_INVALID_CODE=Der bereitgestellte Sprachauswahlcode ist ungültig. Derzeit kann ich folgende Sprachen sprechen: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Ich konnte die XML-Datenbank mit dem Namen ''{0}'' nicht laden. Ich habe keine Idee für die Fehlerursache, obwohl? Vielleicht wurde die Datei bevor oder während der Leseoperation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
+ERROR_LOAD_COULD_NOT_LOAD_XML=Ich konnte die YAML-Datenbank mit dem Namen ''{0}'' nicht laden. Ich habe keine Idee für die Fehlerursache, obwohl? Vielleicht wurde die Datei bevor oder während der Leseoperation bewegt oder gelöscht. Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei zu lesen.
ERROR_PARSER_INVALID_PREAMBLE=Leider konnte die Präambel ''{0}'' nicht gefunden werden. Bitte stelle sicher, dass dieser Schlüssel in der Konfigurationsdatei existiert.
-ERROR_PARSER_LOOPS_INVALID_RANGE=Bei der Anweisungseingabe hat der Wert für die maximale Anzahl an Schleifendurchgängen einen ungültigen Wert. Bitte stelle sicher, dass eine positive Zahl eingetragen wird.
-ERROR_PARSER_LOOPS_NAN=Die maximale Anzahl an Schleifendurchgängen erwartet eine Zahl als Argument. Das sollte leicht zu beheben sein. Bitte stelle sicher, dass eine positive Zahl eingetragen wird.
-ERROR_PARSER_TIMEOUT_INVALID_RANGE=Bei der Anweisungseingabe hat der Wert für die Ausführungszeit einen ungültigen Wert. Bitte stelle sicher, dass eine positive Zahl (long) eingetragen wird.
-ERROR_PARSER_TIMEOUT_NAN=Die Option für die Zeitbeschränkung 'timeout' erwartet eine Zahl als Argument. Das sollte leicht zu beheben sein. Bitte stelle sicher, dass eine positive Zahl eingetragen wird.
ERROR_PARSERULE_GENERIC_ERROR=Ich konnte die Regel nicht auswerten, etwas schlechtes passierte. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Serialisierung mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_PARSERULE_INVALID_YAML=Ich konnte die Regel nicht auswerten, etwas schlechtes passierte. Anscheinend ist die bereitgestellte YAML-Datei ungültig. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Ich konnte die Liste auf Grund eines fehlendes Formatargumentes nicht replizieren. Meine Vermutung ist, dass es weniger (oder mehr) Parameter als erwartet gibt. Stelle sicher, dass die korrekte Anzahl an Parametern übergeben wird und versuche es erneut.
+ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Ich konnte die Liste auf Grund eines fehlendes Formatargumentes nicht replizieren. Meine Vermutung ist, dass es weniger (oder mehr) Parameter als erwartet gibt. Stelle sicher, dass die korrekte Anzahl an Parametern übergeben wird und versuche es erneut.
ERROR_RULE_IDENTIFIER_AND_PATH=Ich habe einen Fehler in der Regel ''{0}'' an der Stellte ''{1}'' entdeckt.
ERROR_RUN_GENERIC_EXCEPTION=Ich konnte das geforderte Systemkommando nicht ausführen, etwas schlechtes passierte. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Sprache mit ein. Ich werde mein Bestes tun, um dir in jeglicher Art und Weise zu helfen.
-ERROR_RUN_INTERRUPTED_EXCEPTION=Das aufgerufene Systemkommando ist plötzlich unterbrochen worden. Vielleicht gab es eine externe Unterbrechung, die das Kommando abrupt zur Beendigung zwang.
-ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=Das aufgerufene Systemkommando hat einen ungültigen Abschluss gemeldet.
+ERROR_RUN_INTERRUPTED_EXCEPTION=Das aufgerufene Systemkommando ist plötzlich unterbrochen worden. Vielleicht gab es eine externe Unterbrechung, die das Kommando abrupt zur Beendigung zwang.
+ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=Das aufgerufene Systemkommando hat einen ungültigen Abschluss gemeldet.
ERROR_RUN_IO_EXCEPTION=Der Aufruf des Systemkommandos misslang auf Grund eines IO-Fehlers. Bist du dir sicher, dass das Systemkommando in deinem Pfad existiert? Es sollte eine gute Idee sein, die Systempfade sowie die Verfügbarkeit des Kommandos zu prüfen.
-ERROR_RUN_TIMEOUT_EXCEPTION=Die Ausführung des Systemkommandos hat die Zeitbegrenzung erreicht und wurde abgebrochen. Falls die Zeit etwas zu kurz war, kannst du diese erhöhen.
+ERROR_RUN_TIMEOUT_EXCEPTION=Die Ausführung des Systemkommandos hat die Zeitbegrenzung erreicht und wurde abgebrochen. Falls die Zeit etwas zu kurz war, kannst du diese erhöhen.
ERROR_RUN_TIMEOUT_INVALID_RANGE=Der Wert für die Zeitbegrenzung ('timeout') fehlt vermutlich (obwohl die Zeitbegrenzung aktiviert ist). Das sollte leicht zu beheben sein. Bitte stelle sicher, dass eine positive Zahl eingetragen wird.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Ich konnte die XML-Datenbank mit dem Namen ''{0}'' nicht speichern. Ich habe keine Idee für die Fehlerursache, obwohl? Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei XML-Datei auf der Festplatte zu speichern.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Die ''obtain'' Methode hat den unbekannten Eintrag (key) ''{0}'' in der Session gefunden. Ich konnte nichts erhalten, was ich nicht bereits habe. Bitte gebe einen gültigen Key ein und versuche es erneut.
+ERROR_SAVE_COULD_NOT_SAVE_XML=Ich konnte die YAML-Datenbank mit dem Namen ''{0}'' nicht speichern. Ich habe keine Idee für die Fehlerursache, obwohl? Möglicherweise habe ich nicht die geeigneten Rechte, um die Datei YAML-Datei auf der Festplatte zu speichern.
+ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Die ''get'' Methode hat den unbekannten Eintrag (key) ''{0}'' in der Session gefunden. Ich konnte nichts erhalten, was ich nicht bereits habe. Bitte gebe einen gültigen Key ein und versuche es erneut.
ERROR_SESSION_REMOVE_UNKNOWN_KEY=Die ''remove'' Methode hat den unbekannten Eintrag (key) ''{0}'' in der Session gefunden. Ich konnte nichts erhalten, was ich nicht bereits habe. Bitte gebe einen gültigen Key ein und versuche es erneut.
-ERROR_TRIGGER_ACTION_NOT_FOUND=Die Aktion des Triggers ''{0}'' wurde nicht gefunden. Stelle bitte sicher, dass du einen Blick auf die Liste der verfügbaren Trigger wirfst und versuche es erneut.
-ERROR_TRIGGER_CALL_EXCEPTION=Die Aktion des Triggers ''{0}'' konnte nicht aufgerufen werden. Etwas wirklich schlechtes ist passiert.
ERROR_VALIDATE_EMPTY_FILES_LIST=Ich habe die Direktive {0} gelesen und fand heraus, dass die bereitgestellte Dateienliste leer ist. Das sollte leicht zu beheben sein. Bitte stelle sicher, dass die Liste mindestens ein Element hat und versuche es erneut.
-ERROR_VALIDATE_FILE_IS_RESERVED=Ich habe die Direktive {0} gelesen und fand heraus, dass der Key ''file'' genutzt wurde. Dieser Key ist reserviert, deshalb kannst du ihn nicht nutzen. Aber keine Sorge, dass sollte leicht zu beheben sein. Du musst nur einen anderen Namen verwenden.
-ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Ich habe die Direktive {0} gelesen und fand heraus, dass der Eintrag ''files'' keine Liste übergeben bekommen hat. Bitte stelle sicher, dass du eine passende Liste verwendest und versuche es erneut.
+ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Ich habe die Direktive {0} gelesen und fand heraus, dass der Eintrag ''files'' keine Liste übergeben bekommen hat. Bitte stelle sicher, dass du eine passende Liste verwendest und versuche es erneut.
ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Ich entdecke eine ungültige Direktive namens {0} in der bereitgestellten Datei. Stellte sicher, dass die Direktive gültig ist und versuche es erneut.
ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Es sieht so aus, als wurden keine Direktiven in der bereitgestellten Datei gefunden. Bitte stelle sicher, dass wenigstens eine Direktive enthalten ist und versuche es erneut.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Anscheinend gibt es einen verwaisten Zeilenumbruch in der Direktive in der Zeile {0}. Ich kann nicht fortfahren. Bitte korrigiere die Direktive und versuche es erneut.
+ERROR_VALIDATE_ORPHAN_LINEBREAK=Anscheinend gibt es einen verwaisten Zeilenumbruch in der Direktive in der Zeile {0}. Ich kann nicht fortfahren. Bitte korrigiere die Direktive und versuche es erneut.
ERROR_VALIDATE_REFERENCE_IS_RESERVED=Ich las die Direktive {0} und fand heraus, dass der Key ''reference'' genutzt wurde. Dieser Key ist reserviert, deshalb kannst du ihn nicht nutzen. Aber keine Sorge, das sollte einfach zu beheben sein. Du musst nur einen anderen Namen verwenden.
ERROR_VALIDATE_YAML_EXCEPTION=Es gab ein Problem mit dem bereitgestellten YAML-Ausdruck in der Direktive {0}. Dieser Teil ist ziemlich knifflig, denn er bezieht Aspekte der zugrundeliegenden Serialisierung mit ein.
ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=Die Argumentenbezeichnung ''{0}'' ist reserviert, somit kannst du sie nicht nutzen. Dies sollte einfach zu beheben sein. Du musst nur einen anderen Namen verwenden.
-ERROR_VALIDATEBODY_ARGUMENTS_LIST=Ich konnte die Liste der Argumente nicht finden. Ich benötige eine solche Liste, sogar wenn diese leer ist. Bitte behebe diesen Fehler und versuche es erneut.
ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Anscheinend hast du Duplikate von Bezeichnern in deiner Regel. Bitte behebe diesen Fehler und versuche es erneut.
ERROR_VALIDATEBODY_MISSING_KEYS=Wenn du ein Argument einer Regel definierst, musst du mindestens 'flag' oder 'default' nutzen. Stelle bitte sicher, dass du mindestens eines nutzt.
ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Ich habe herausgefunden, dass eines der Argumente keinen Bezeichner hat. Bitte ergänze einen gültigen Bezeichner im Argument und versuche es erneut.
ERROR_VALIDATEBODY_NULL_COMMAND=Ich habe eine Nullanweisung in der vorgegebenen Regel gefunden. Bitte stelle sicher, dass ein gültiges Kommando zur Regel hinzugefügt wird.
-ERROR_VALIDATEBODY_NULL_COMMANDS_LIST=Ich benötige eine Liste von Kommandos. Bitte behebe diesen Zustand und versuche es erneut.
-ERROR_VALIDATEHEADER_NULL_ID=Die geforderte Regel hat keinen Bezeichner. Das ist eine wesentliche Information, bitte stelle sicher, dass du dies behebst und versuche es erneut. Beachte hierbei, dass der Bezeichner identisch zum Dateinamen (ohne Dateiendung natürlich) sein muss.
-ERROR_VALIDATEHEADER_NULL_NAME=Die gewünschte Regel hat keinen Namen. Das sollte leicht zu beheben sein. Ergänze einen gültigen Namen und versuche es erneut.
+ERROR_VALIDATEHEADER_NULL_ID=Die geforderte Regel hat keinen Bezeichner. Das ist eine wesentliche Information, bitte stelle sicher, dass du dies behebst und versuche es erneut. Beachte hierbei, dass der Bezeichner identisch zum Dateinamen (ohne Dateiendung natürlich) sein muss.
+ERROR_VALIDATEHEADER_NULL_NAME=Die gewünschte Regel hat keinen Namen. Das sollte leicht zu beheben sein. Ergänze einen gültigen Namen und versuche es erneut.
ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=Die Regel hat einen falschen Bezeichner. Ich erwartete ''{0}'' fand aber ''{1}''. Das solle leicht zu beheben sein: Ersetze einfach den falschen durch einen korrekten Bezeichner.
-ERROR_VELOCITY_FILE_NOT_FOUND=Die Template-Engine konnte die angegebene Eingabe-Datei nicht finden. Bitte stelle sicher, dass der Pfad korrekt ist, und versuche es noch einmal.
-ERROR_VELOCITY_PARSE_EXCEPTION=Es gab einen Lesefehler beim Verarbeiten der angegebenen Eingabe-Datei. Stelle sicher, dass sie die Spezifikationen der Velocity Template Language (VTL) erfüllt und versuche es noch einmal.
-ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION=Es gibt einen fehlerhaften Metheodenaufruf in der angegebenen Eingabe-Datei. Stelle sicher, dass sie die Spezifikationen der Velocity Template Language (VTL) erfüllt und versuche es noch einmal.
-ERROR_VELOCITY_IO_EXCEPTION=Die Template-Engine konnte die Ausgabe-Datei nicht schreiben. Stelle sicher, dass sie die nötigen Berechtigungen hat, und versuche es noch einmal.
INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Es sind mehr Details für diese Ausnahme verfügbar.
INFO_DISPLAY_EXECUTION_TIME=Gesamt: {0} Sekunden
INFO_DISPLAY_FILE_INFORMATION=Verarbeitung ''{0}'' (Größe: {1}, letzte Modifikation: {2}), bitte warten.
INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Trotz dry-run Modus wurde dieser Eintrag wahrscheinlich bereits verarbeitet, da er den boolschen Wert {0} zurückgegeben hat.
INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=Los geht''s: {0}
-INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE=Obwohl du im 'dry-run-mode' ausführst, wird der Eintrag immer verarbeitet, da es einen Trigger ist. Beachte, dass der Effekt eines Triggers die aktuelle Ausführung beeinflussen kann.
-INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE=Dieser Eintrag ist ein Trigger, welcher aus dem Regelumfeld entstand. Beachte, dass der Effekt eines Triggers die aktuelle Ausführung beeinflussen kann.
INFO_LABEL_AUTHOR=Autor:
INFO_LABEL_AUTHORS=Autoren:
INFO_LABEL_CONDITIONAL=Bedingung:
@@ -124,19 +103,7 @@ INFO_LABEL_ON_ERROR=FEHLER
INFO_LABEL_ON_FAILURE=MISSERFOLG
INFO_LABEL_ON_SUCCESS=ERFOLGREICH
INFO_LABEL_UNNAMED_TASK=Namenlose Aufgabe
-INFO_PARSER_ALL_RIGHTS_RESERVED=Alle Rechte vorbehalten.
-INFO_PARSER_DRYRUN_MODE_DESCRIPTION=Tue so, als ob du durch alle Anweisungen gehst, aber mit keinem aktuellen Aufruf.
-INFO_PARSER_HELP_DESCRIPTION=Gebe die Hilfe aus
-INFO_PARSER_LANGUAGE_DESCRIPTION=Setze die Anwendungssprache
-INFO_PARSER_LOG_DESCRIPTION=Erstelle einen log-Output
-INFO_PARSER_LOOPS_DESCRIPTION=Setze die maximale Anzahl an Schleifendurchgängen
-INFO_PARSER_NOTES=Dieses Tool nutzt die folgenden Bibliotheken und deren jeweilge Lizenz: CAL10N: MIT, Commons CLI: Apache 2.0, Commons Collections: Apache 2.0, Commons IO: Apache 2.0, Commons Lang: Apache 2.0, MVEL: Apache 2.0, Logback: dual licensing with EPL 1.0 and LGPL 2.1, Simple framework: Apache 2.0, SLF4J: MIT, SnakeYAML: Apache 2.0, Velocity: Apache 2.0, and ZT-Exec: Apache 2.0. Zu guter Letzt, arara selbst ist veröffentlicht nach der New BSD license.
-INFO_PARSER_ONLY_HEADER=Extrahiere Direktiven nur im Datei-Kopf
-INFO_PARSER_PREAMBLE_DESCRIPTION=Setze die Datei-Präambel basierend auf der Konfigurationsdatei
-INFO_PARSER_SILENT_MODE_DESCRIPTION=Unterdrückt die Befehlsausgabe
-INFO_PARSER_TIMEOUT_DESCRIPTION=Setze die Zeitabschaltung für die Ausführung (in Millisekunden).
-INFO_PARSER_VERBOSE_MODE_DESCRIPTION=Gibt zusätzliche Statusinformationen aus
-INFO_PARSER_VERSION_DESCRIPTION=Gebe die Anwendungsversion aus
+INFO_PARSER_NOTES=arara ist unter der New BSD license veröffentlicht.
LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
LOG_INFO_BOOLEAN_MODE=Boolscher Wert: {0}
LOG_INFO_DIRECTIVES_BLOCK=DIREKTIVEN
@@ -149,4 +116,4 @@ LOG_INFO_RULE_LOCATION=Verzeichnis der Regel: ''{0}''
LOG_INFO_SYSTEM_COMMAND=Systemkommando: {0}
LOG_INFO_TASK_RESULT=Resultat der Aufgabe:
LOG_INFO_VALIDATED_DIRECTIVES=Alle Direktiven sind gültig. Wir sind guter Dinge.
-LOG_INFO_WELCOME_MESSAGE=Willkommen bei arara {0} (Revision {1})!
+LOG_INFO_WELCOME_MESSAGE=Willkommen bei arara {0}!
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en.properties b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en.properties
index dd1972fd5c..f802f04b0d 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en.properties
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en.properties
@@ -34,15 +34,12 @@
# Language: English
# Translators: Paulo Roberto Massa Cereda
# ---------------------------------------------------------------------
-
ERROR_BASENAME_NOT_A_FILE=The ''basename'' method requires a file, not a directory. It looks like ''{0}'' does not appear to be a file at all. If you need to perform tasks on a directory, you could use a couple of methods from the Java API.
ERROR_CALCULATEHASH_IO_EXCEPTION=For whatever reason, I could not calculate the hash. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions to read the file.
ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=It looks like ''{0}'' is not a valid boolean value. This should be an easy fix. Make sure to use a valid string that represents boolean values (yes and no, true and false, 1 and 0, and on and off).
ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=I could not check your operating system. The provided value ''{0}'' does not look like a valid operating system entry in my list (I might also be wrong, of course). Please correct the value and try again.
ERROR_CHECKREGEX_IO_EXCEPTION=I could not read the contents of the file ''{0}'', I got an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file.
-ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION=One of your entries in the 'filetypes' list in the configuration file has no 'extension'. Sadly, I cannot apply a new filetype if the extension is not set. This should be an easy fix: add a new extension and try again.
ERROR_CONFIGURATION_GENERIC_ERROR=I could not parse the configuration file, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_CONFIGURATION_INVALID_YAML=I could not parse the configuration file, something bad happened. Apparently, the provided YAML file is invalid. I will do my best to help you in any way I can.
ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=The value defined in the 'loops' key in the configuration file in order to denote the maximum number of loops has an invalid range. Please make sure to use a positive long value.
ERROR_DISCOVERFILE_FILE_NOT_FOUND=I could not find the provided file ''{0}'' {1}. Please make sure the file exists and it has a valid extension.
ERROR_EVALUATE_COMPILATION_FAILED=For whatever reason, I could not compile the expression in the provided conditional. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
@@ -52,27 +49,20 @@ ERROR_FILETYPE_NOT_A_FILE=The ''filetype'' method requires a file, not a directo
ERROR_FILETYPE_UNKNOWN_EXTENSION=I cannot recognize ''{0}'' as a default extension. If you want to define a new file type, make sure to provide the extension and pattern. These are the default extensions: {1}
ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=There was an encoding problem while trying to obtain the application path. There is nothing much I can do about it.
ERROR_GETCANONICALFILE_IO_EXCEPTION=I could not get the canonical file due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the lookup operation. Or maybe I do not have the proper permissions.
-ERROR_GETCANONICALPATH_IO_EXCEPTION=I could not get the canonical path due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the lookup operation. Or maybe I do not have the proper permissions.
ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=I could not get the parent canonical path due to an IO error. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the hashing operation. Or maybe I do not have the proper permissions.
ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=It seems that ''{0}'' is marked as required in the rule, but I could not find it in the directive parameters. Please make sure to add it as parameter for your directive and try again.
ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=I could not evaluate one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=I could not evaluate the default value expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=I could not evaluate the exit status expression of one of the provided commands. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=I could not evaluate the flag expression of one of the arguments. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
-ERROR_INTERPRETER_NULL_COMMAND=I am sorry, but apparently one of the provided commands resolved to a null value. Please make sure the command is valid and try again.
ERROR_INTERPRETER_RULE_NOT_FOUND=I could not find a rule named ''{0}'' in the provided rule paths. Perhaps a misspelled word? I was looking for a file named ''{0}.yaml'' in the following paths in order of priority: {1}
ERROR_INTERPRETER_UNKNOWN_KEYS=I found these unknown keys in the directive: {0}. This should be an easy fix, just remove them from your map.
ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=The 'exit' expression must always return a boolean value (even if there is no computation in the closure body). This should be an easy fix: make sure to correct the type return statement and try again.
ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=The ''isSubdirectory'' method requires a directory, not a file. It looks like ''{0}'' does not appear to be a directory at all.
ERROR_LANGUAGE_INVALID_CODE=The provided language code is invalid. Currently, I know how to speak the following languages: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=I could not load the XML database named ''{0}''. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file. By the way, make sure the XML file is well-formed.
+ERROR_LOAD_COULD_NOT_LOAD_XML=I could not load the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps the file was moved or deleted before or during the reading operation. Or maybe I do not have the proper permissions to read the file. By the way, make sure the YAML file is well-formed.
ERROR_PARSER_INVALID_PREAMBLE=I am sorry, but the preamble ''{0}'' could not be found. Please make sure this key exists in the configuration file.
-ERROR_PARSER_LOOPS_INVALID_RANGE=The value defined in the command line for the maximum number of loops has an invalid range. Please make sure to use a positive long value.
-ERROR_PARSER_LOOPS_NAN=The maximum number of loops option expects a number as argument. This should be an easy fix. Just make sure to provide a positive long value.
-ERROR_PARSER_TIMEOUT_INVALID_RANGE=The value defined in the command line for the execution timeout has an invalid range. Please make sure to use a positive long value.
-ERROR_PARSER_TIMEOUT_NAN=The execution timeout option expects a number as argument. This should be an easy fix. Just make sure to provide a positive long value.
ERROR_PARSERULE_GENERIC_ERROR=I could not parse the rule, something bad happened. This part is quite tricky, since it involves aspects of the underlying data serialization format. I will do my best to help you in any way I can.
-ERROR_PARSERULE_INVALID_YAML=I could not parse the rule, something bad happened. Apparently, the provided YAML file is invalid. I will do my best to help you in any way I can.
ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=I could not replicate the list due to a missing format argument. My guess is that there are less (or more) parameters than expected. Make sure to correct the number of parameters and try again.
ERROR_RULE_IDENTIFIER_AND_PATH=I have spotted an error in rule ''{0}'' located at ''{1}''.
ERROR_RUN_GENERIC_EXCEPTION=I could not run the provided system command, something bad happened. This part is quite tricky, since it involves aspects of the underlying expression language. I will do my best to help you in any way I can.
@@ -81,13 +71,10 @@ ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=The provided system command execution has
ERROR_RUN_IO_EXCEPTION=The system command execution has failed due to an IO error. Are you sure the provided system command exists in your path? It might be a good idea to check the path and see if the command is available.
ERROR_RUN_TIMEOUT_EXCEPTION=The system command execution reached the provided timeout value and was aborted. If the time was way too short, make sure to provide a longer value.
ERROR_RUN_TIMEOUT_INVALID_RANGE=The timeout value is probably missing (although timeout is enabled). This should be an easy fix. Please make sure to provide a positive long value.
-ERROR_SAVE_COULD_NOT_SAVE_XML=I could not save the XML database named ''{0}''. I have no idea why it failed, though. Perhaps I do not have the proper permissions to write the XML file to disk.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=The ''obtain'' method has found an unknown key ''{0}'' in the session scope. I could not get something I do not have in the first place. Please enter a valid key and try again.
+ERROR_SAVE_COULD_NOT_SAVE_XML=I could not save the YAML database named ''{0}''. I have no idea why it failed, though. Perhaps I do not have the proper permissions to write the YAML file to disk.
+ERROR_SESSION_OBTAIN_UNKNOWN_KEY=The ''get'' method has found an unknown key ''{0}'' in the session scope. I could not get something I do not have in the first place. Please enter a valid key and try again.
ERROR_SESSION_REMOVE_UNKNOWN_KEY=The ''remove'' method has found an unknown key ''{0}'' in the session scope. I could not remove something I do not have in the first place. Please enter a valid key and try again.
-ERROR_TRIGGER_ACTION_NOT_FOUND=The trigger action ''{0}'' was not found. Make sure to take a look at the list of all available triggers and try again.
-ERROR_TRIGGER_CALL_EXCEPTION=The trigger action ''{0}'' could not be called. Something really bad happened.
ERROR_VALIDATE_EMPTY_FILES_LIST=I read a directive {0} and found out that the provided ''files'' list is empty. This is an easy fix: make sure the list has at least one element and try again.
-ERROR_VALIDATE_FILE_IS_RESERVED=I read a directive {0} and found out that the key ''file'' was used. This key is reserved, so you cannot use it. But do not worry, this should be an easy fix. Just replace it by another name.
ERROR_VALIDATE_FILES_IS_NOT_A_LIST=I read a directive {0} and found out that ''files'' requires a list. Please make sure to correct the type to a proper list and try again.
ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=I spotted an invalid directive {0} in the provided file. Make sure to fix the directive and try again.
ERROR_VALIDATE_NO_DIRECTIVES_FOUND=It looks like no directives were found in the provided file. Make sure to include at least one directive and try again.
@@ -95,26 +82,18 @@ ERROR_VALIDATE_ORPHAN_LINEBREAK=Apparently there is an orphan directive line bre
ERROR_VALIDATE_REFERENCE_IS_RESERVED=I read a directive {0} and found out that the key ''reference'' was used. This key is reserved, so you cannot use it. But do not worry, this should be an easy fix. Just replace it by another name.
ERROR_VALIDATE_YAML_EXCEPTION=There was a problem with the provided YAML map in a directive {0}. This part is quite tricky, since it involves aspects of the underlying data serialization format.
ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=The argument identifier ''{0}'' is reserved, so you cannot use it. This should be an easy fix. Just replace it by another name.
-ERROR_VALIDATEBODY_ARGUMENTS_LIST=I could not find the list of arguments. I need such list, even if it is empty. Make sure to fix this issue and try again.
ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Apparently you have duplicate argument identifiers in your rule. Make sure to fix this issue and try again.
ERROR_VALIDATEBODY_MISSING_KEYS=When defining a rule argument scope, at least 'flag' or 'default' must be used. Please, make sure to use at least one of them.
ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=I found out that one of the arguments has no identifier. Please, make sure to add a valid identifier to the argument and try again.
ERROR_VALIDATEBODY_NULL_COMMAND=I found a null command in the provided rule. This should be an easy fix. Make sure to add a valid command to the rule.
-ERROR_VALIDATEBODY_NULL_COMMANDS_LIST=I need a list of commands. Make sure to fix this issue and try again.
ERROR_VALIDATEHEADER_NULL_ID=The provided rule has no identifier. This is a crucial information, please make sure to fix this issue and try again. Make sure the identifier has the same name of the rule file (without the extension, of course).
ERROR_VALIDATEHEADER_NULL_NAME=The provided rule has no name. This should be an easy fix. Make sure to add a valid name and try again.
ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=The rule has a wrong identifier. I was expecting ''{0}'', but found ''{1}''. This should be an easy fix: just replace the wrong identifier by the correct one.
-ERROR_VELOCITY_FILE_NOT_FOUND=The template engine was not able to find the provided input file. Make sure the location is correct and try again.
-ERROR_VELOCITY_PARSE_EXCEPTION=There was a parse error in the provided input file. Make sure the file complies with the Velocity Template Language (VTL) specification and try again.
-ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION=There was a method invocation error in the provided input file. Make sure the file complies with the Velocity Template Language (VTL) specification and try again.
-ERROR_VELOCITY_IO_EXCEPTION=The template engine was not able to write the output file. Make sure the path has the proper permissions and try again.
INFO_DISPLAY_EXCEPTION_MORE_DETAILS=There are more details available on this exception:
INFO_DISPLAY_EXECUTION_TIME=Total: {0} seconds
INFO_DISPLAY_FILE_INFORMATION=Processing ''{0}'' (size: {1}, last modified: {2}), please wait.
INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Although executing in dry-run mode, this entry might be already processed since it returned a boolean value: {0}
INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=About to run: {0}
-INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE=Although executing in dry-run mode, this entry is always processed since it is a trigger. Note that the effects of a trigger might influence the current execution.
-INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE=This entry is a trigger originated from the rule scope. Note that the effects of a trigger might influence the current execution.
INFO_LABEL_AUTHOR=Author:
INFO_LABEL_AUTHORS=Authors:
INFO_LABEL_CONDITIONAL=Conditional:
@@ -124,19 +103,7 @@ INFO_LABEL_ON_ERROR=ERROR
INFO_LABEL_ON_FAILURE=FAILURE
INFO_LABEL_ON_SUCCESS=SUCCESS
INFO_LABEL_UNNAMED_TASK=Unnamed task
-INFO_PARSER_ALL_RIGHTS_RESERVED=All rights reserved
-INFO_PARSER_DRYRUN_MODE_DESCRIPTION=go through all the motions of running a command, but with no actual calls
-INFO_PARSER_HELP_DESCRIPTION=print the help message
-INFO_PARSER_LANGUAGE_DESCRIPTION=set the application language
-INFO_PARSER_LOG_DESCRIPTION=generate a log output
-INFO_PARSER_LOOPS_DESCRIPTION=set the maximum number of loops
-INFO_PARSER_NOTES=This tool makes use of the following libraries and their respective licenses: CAL10N: MIT, Commons CLI: Apache 2.0, Commons Collections: Apache 2.0, Commons IO: Apache 2.0, Commons Lang: Apache 2.0, MVEL: Apache 2.0, Logback: dual licensing with EPL 1.0 and LGPL 2.1, Simple framework: Apache 2.0, SLF4J: MIT, SnakeYAML: Apache 2.0, Velocity: Apache 2.0, and ZT-Exec: Apache 2.0. At last but not least, arara itself is released under the New BSD license.
-INFO_PARSER_ONLY_HEADER=extract directives only in the file header
-INFO_PARSER_PREAMBLE_DESCRIPTION=set the file preamble based on the configuration file
-INFO_PARSER_SILENT_MODE_DESCRIPTION=hide the command output
-INFO_PARSER_TIMEOUT_DESCRIPTION=set the execution timeout (in milliseconds)
-INFO_PARSER_VERBOSE_MODE_DESCRIPTION=print the command output
-INFO_PARSER_VERSION_DESCRIPTION=print the application version
+INFO_PARSER_NOTES=arara is released under the New BSD license.
LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
LOG_INFO_BOOLEAN_MODE=Boolean value: {0}
LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
@@ -149,4 +116,4 @@ LOG_INFO_RULE_LOCATION=Rule location: ''{0}''
LOG_INFO_SYSTEM_COMMAND=System command: {0}
LOG_INFO_TASK_RESULT=Task result:
LOG_INFO_VALIDATED_DIRECTIVES=All directives were validated. We are good to go.
-LOG_INFO_WELCOME_MESSAGE=Welcome to arara {0} (revision {1})!
+LOG_INFO_WELCOME_MESSAGE=Welcome to arara {0}!
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en_QN.properties b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties
index c9a2013d26..7b88fd3e86 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_en_QN.properties
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_en_QN.properties
@@ -35,15 +35,12 @@
# Translators: Nicola Talbot
# ---------------------------------------------------------------------
# With thanks to Keith Skipper for suggestions!
-
ERROR_BASENAME_NOT_A_FILE=Yew''re gotta hev a file for the ''basename'', not a directory. That ''{0}'' yew give me ent a file. Do yew need ter do jarbs on a directory, yew myte try the Java API.
ERROR_CALCULATEHASH_IO_EXCEPTION=Thass a rum ole dew, bor, I can't work out th' hash. I ent got no idea why thass gorn wrong. Praps the file was hulled abowt afore or time the hashing operation was doing else maybe I're gotta he'some proper permissions to snout abowt in the file.
ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=That look like ''{0}'' ent a proper boolean value but dunt yew git yerself inta a rite ole puckaterry. Do yew jist make sure to use proper boolean values (yes and no, true and false, 1 and 0, and on and off).
ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Thass a rum un. I hent got no idear whass yar operating system. Wuh, that ole value ''{0}'' I got dunt look like thass a proper operating system (howsomever I might be sorft in the head and got that wrong). Do yew fix that value and try agin.
ERROR_CHECKREGEX_IO_EXCEPTION=Cor blast me, but I feel a bit ona tewl. I can''t read any ona file ''{0}'', thass giving me an IO error. I''re got no idear but praps the file was hulled abowt afore or time the reading operation was doing else maybe I''re gotta he''some proper permissions to snout abowt the file.
-ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION=One onyar entries in that ole list a 'filetypes' in the configuration file ent got no 'extension'. Thass a rum un cos I can't do a new filetype if the extension ent been set. That shoont be a problem: do yew jist add a new extension and try agin, bor.
ERROR_CONFIGURATION_GENERIC_ERROR=Thass hully gone wrong, ole partner. I coont unnerstand the configuration file. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
-ERROR_CONFIGURATION_INVALID_YAML=Thass a rum ole dew, I're got in a rite ole puckaterry trying to read the configuration file. That YAML do need some tricolating to git it rite but I'll lend yew a hand, tergether.
ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=Atwin me, yew an' the geartepust that 'loops' key value ent rite. Yew're gotta giv' a number thass bigger than nuffin.
ERROR_DISCOVERFILE_FILE_NOT_FOUND=Dunt yew git yarself inta a rite ole puckaterry, but I can''t find yar file ''{0}'' {1}. Yew''re gotta find the file and do yew see that has a proper extension on the end onnit, tergether.
ERROR_EVALUATE_COMPILATION_FAILED=Wuh, I ent got no idear wass gorn on but I coont git the hang o'that conditional. Yew're gotta he'sum idear wot this is orl abowt else yew mite be in a rite ole puckaterry but I'll help yew git it done if I can, ole partner.
@@ -53,27 +50,20 @@ ERROR_FILETYPE_NOT_A_FILE=Yew gotta hev a file for the ''filetype'', not a direc
ERROR_FILETYPE_UNKNOWN_EXTENSION=Cor blast me, ole partner, but I ent never heard of ''{0}'' as a default extension. Yew''re gotta giv me yer know about the match and that ole extension on the end onnit do you want a new file type. I ony know abowt the default extensions: {1}
ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Dunt yew git yarself inta a rite ole puckaterry, my bewty, cos there's nuffin I can dew abowt it but I're gotta mobbing abowt th'encoding time I was trying to get the application path.
ERROR_GETCANONICALFILE_IO_EXCEPTION=Cor blast me, my bewty, I ent got no idear wass gorn on but I coont get the canonical file. Praps the file was hulled abowt afore or time the lookup operation was doing else maybe I're gotta he'sum proper permissions.
-ERROR_GETCANONICALPATH_IO_EXCEPTION=Cor blast me, my bewty, I ent got no idear wass gorn on but I coont get the canonical path. Praps the file was hulled abowt afore or time the lookup operation was doing else maybe I're gotta he'sum proper permissions.
ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Cor blast me, my bewty, I ent got no idear wass gorn on but I coont get the parent canonical path. Praps the file was hulled abowt afore or time the hashing operation was doing else maybe I're gotta he'sum proper permissions.
ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=That seem like the rule say yew gotta have ''{0}'', but I coont find it in the directive parameters. Dew yew add it as a parameter for yar directive and try agin.
ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=That ent gorn right wi' one onnem commands you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=That ent gorn right wi' ter default value of one onnem arguments you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, tergether.
ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=That ent gorn right wi' th' exit status of onnem commands you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=That ent gorn right wi' th' flag for onnem arguments you giv' me. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, my bewty.
-ERROR_INTERPRETER_NULL_COMMAND=Thass a rum ole dew but one onnem commands have hulled me a null value. Do you check that and try agin, ole partner.
ERROR_INTERPRETER_RULE_NOT_FOUND=Thass a rum ole dew but there ent no ''{0}'' in any onnem rule paths. Praps you ent spelled that right. I coont find ''{0}.yaml'' in any onner paths: {1}
ERROR_INTERPRETER_UNKNOWN_KEYS=Atwin me, yew an'' the geartepost I ent got no idear abowt these keys in the directive: {0}. Howsomever, dunt you git yarself inta a rite ole puckaterry. Do you jist hull them outta yar map.
ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=Wuh, ole partner, that 'exit' expression ent givin' me a yis or no answer. Thass allus got to dew that even if there ent nuffin else to dew. Howsomever, dunt you git yarself inta a rite ole puckaterry, dew you jist tricolate the return statement and try agin.
ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=The ''isSubdirectory'' method requires a directory, not a file. It looks like ''{0}'' does not appear to be a directory at all.
ERROR_LANGUAGE_INVALID_CODE=Cor blast me, my bewty, but you hully copped me there wi'' that language code. I can ony mardle in these languages: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Cor blast me, ole partner, but that XML database ''{0}'' ent half puttin'' on its parts but I ent got no idear wass gone wrong. Praps the file was hulled abowt afore or time the reading operation was doing else maybe I''re gotta he''sum proper permissions to snout abowt the file. Atwin yew, me an'' the geartepost, do yew make sure the XML is in good kelter.
+ERROR_LOAD_COULD_NOT_LOAD_XML=Cor blast me, ole partner, but that YAML database ''{0}'' ent half puttin'' on its parts but I ent got no idear wass gone wrong. Praps the file was hulled abowt afore or time the reading operation was doing else maybe I''re gotta he''sum proper permissions to snout abowt the file. Atwin yew, me an'' the geartepost, do yew make sure the YAML is in good kelter.
ERROR_PARSER_INVALID_PREAMBLE=Thass a rum ole dew, ole partner, but I can''t find the preamble ''{0}''. Do yew make sure that key exist in the configuration file.
-ERROR_PARSER_LOOPS_INVALID_RANGE=Wuh, I dunt want to hully mob you, my bewty, but that value you giv' me in the command line ent rite for the sight o' loops I mite hev to dew. Dew you giv' me a proper number what I can count to.
-ERROR_PARSER_LOOPS_NAN=Wuh, I dunt want to hully mob you, ole partner, but that value you giv' me in the command line for the sight o' loops I mite hev to dew ent a number. Dew you giv' me a proper number what I can count to.
-ERROR_PARSER_TIMEOUT_INVALID_RANGE=Cor blast me, my bewty, but that timeout value you giv' me in the command line ent rite. Dew you giv' me a proper number what I can count to.
-ERROR_PARSER_TIMEOUT_NAN=Cor blast me, ole partner, but that timeout value you giv' me in the command line ent a number. Dew you giv' me a proper number what I can count to.
ERROR_PARSERULE_GENERIC_ERROR=Thass a rum ole dew, that rule is hully puttin' on its parts. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, tergether.
-ERROR_PARSERULE_INVALID_YAML=Thass a rum ole dew, that rule ent half putting on its parts. That YAML file is hully on the huh but dunt yew git yarself in a rite ole puckaterry. I'll help you if I can, my bewty.
ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Blast, bor, but I coont replicate that duzzy ole list cors you ent giv' me a format argument. I rackon there's a slight more or less parameters than yew giv' me. Dew yew go an' check it and try agin.
ERROR_RULE_IDENTIFIER_AND_PATH=Wuh, that ent right, ole partner. That rule ''{0}'' have gone on the slosh at ''{1}''.
ERROR_RUN_GENERIC_EXCEPTION=Thass a rum ole dew, my bewty, but I coont dew the system command but I ent got no idear wass gone wrong. Wuh, yew're gotta he'sum idear wot this is orl abowt ter git th' hang o'this bit else yew myte be in a rite ole puckaterry but I'll help yew git it done if I can, tergether.
@@ -82,13 +72,10 @@ ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=That system command is hully puttin' on i
ERROR_RUN_IO_EXCEPTION=I rackon that system command have blundered over the troschel. Are yew sure that exist in yar path? Dew yew check the path, ole partner, to see where thass hidin'. Maybe thass gorn in the backus for some bread an' pullet.
ERROR_RUN_TIMEOUT_EXCEPTION=That slummockun gret system command have run on for too long so I gev it a clout round the lug. If thass hully short for yew, dew yew giv' me a longer timeout value.
ERROR_RUN_TIMEOUT_INVALID_RANGE=Hold yew hard, that timeout value ent here. I rackon thass gorn for some fourses. Dew yew giv' me a number wot I can count to.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Thass a rum ole dew, ole partner. I coont save that ole XML database that oughta be called ''{0}''. Howsomever I hent got no idea why thass gone wrong. Praps I''re gotta he''sum proper permissions to write the XML file to disk.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Cor blast me, my bewty, but I hent got no idear wass that ''{0}'' key is dewun in that ''obtain'' method. I can''t giv'' you suffin I ent got. Dew yew ax for suffin I can git yew.
+ERROR_SAVE_COULD_NOT_SAVE_XML=Thass a rum ole dew, ole partner. I coont save that ole YAML database that oughta be called ''{0}''. Howsomever I hent got no idea why thass gone wrong. Praps I''re gotta he''sum proper permissions to write the YAML file to disk.
+ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Cor blast me, my bewty, but I hent got no idear wass that ''{0}'' key is dewun in that ''get'' method. I can''t giv'' you suffin I ent got. Dew yew ax for suffin I can git yew.
ERROR_SESSION_REMOVE_UNKNOWN_KEY=Cor blast me, ole partner, but I hent got no idear wass that ''{0}'' key is dewin in that ''remove'' method. I can''t remove suffin that ent there. Dew yew ax for suffin else.
-ERROR_TRIGGER_ACTION_NOT_FOUND=Cor blast me, bor, but there ent no trigger action called ''{0}'' that I ever heard of. Dew yew hev'' a look at that list of trigger actions and try agin.
-ERROR_TRIGGER_CALL_EXCEPTION=Thass a rum ole dew, my bewty, but that trigger action ''{0}'' is hully puttin'' on its parts and I ent got no idear what to dew.
ERROR_VALIDATE_EMPTY_FILES_LIST=Cor blast me, my bewty. I read a directive {0} but there ent nuffin in the provided ''files'' list. Do yew just make sure there''s at least one element in the list and try agin.
-ERROR_VALIDATE_FILE_IS_RESERVED=Thass a rum ole dew, ole partner. I read a directive {0} but blast me if that key ''file'' ent used. That key is reserved, so yew can''t use it. But dunt yew git yarself in a rite ole puckaterry. Do yew give it another name.
ERROR_VALIDATE_FILES_IS_NOT_A_LIST=That ent rite, ole partner. I read a directive {0} and found out that ''files'' require a list. Do yew fix the type to a proper list and try agin.
ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=That directive {0} in the provided file ent rite. But dunt git yarself into a puckaterry. Do yew just fix the directive and try agin.
ERROR_VALIDATE_NO_DIRECTIVES_FOUND=That look like no directives were found in the provided file. Do yew include at least one directive and try agin.
@@ -96,26 +83,18 @@ ERROR_VALIDATE_ORPHAN_LINEBREAK=Thass a rum ole dew, ole partner. There''s an or
ERROR_VALIDATE_REFERENCE_IS_RESERVED=That ain''t right, my bewty. You can''t use the key ''reference'' in {0}. Thass a reserved key, but there ain''t no use you gittin'' in a rite ole puckaterry abowt it. Dew yew giv'' it another name.
ERROR_VALIDATE_YAML_EXCEPTION=Thass a rum ole dew, my bewty. Suffin''s gone wrong in the YAML map in a directive {0}. Wuh, yew''re gotta he''sum idear wot this is orl abowt ter git th'' hang o''this bit else yew myte be in a rite ole puckaterry.
ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=That ent rite, ole partner. Yew can''t use ''{0}''. Thass reserved, but dunt yew git yarself into a rite ole puckaterry, dew yew jist giv'' it another name.
-ERROR_VALIDATEBODY_ARGUMENTS_LIST=Thass a rum ole dew, my bewty, but there ent no list of arguments. I need that even if that ent got nuffin in it. Dew you fix it and try agin.
ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Thass a rum ole dew, ole partner. You've got duplicate argument identifiers in yar rule. Dew you fix that and try agin.
ERROR_VALIDATEBODY_MISSING_KEYS=That ent rite, ole partner. You gotta use at least 'flag' or 'default' when you define a rule argument scope. Do yew make sure to use at least one onnem.
ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=That ent rite, my bewty. You gotta hev an identifier but one onnem arguments ent for one. Dew yew add a valid identifier to the argument and try agin.
ERROR_VALIDATEBODY_NULL_COMMAND=Thass a rum dew, ole partner. Thass a null command in that ole rule. Do you add a proper command there.
-ERROR_VALIDATEBODY_NULL_COMMANDS_LIST=Wuh, thass hully wrong. Do yew giv' me a list o' commands, my bewty, and try agin.
ERROR_VALIDATEHEADER_NULL_ID=Wuh, ole partner, I'm gornta hev to mob that rule o' yars. That ent got no identifier. Thass hully important and there ent no use putting on yar parts abowt it. That slummockin' gret rule oughta hev' an identifier what have the same name as that ole rule file (without the extension, dew yew dunt know that).
ERROR_VALIDATEHEADER_NULL_NAME=Cor blast me, bor, but that rule ent got no name, but dunt yew git yarself in a puckaterry, dew you jist giv' it a proper name and try agin.
ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=My heart alive, my bewty, but that rule ent got the right identifier. That oughta be ''{0}'', not ''{1}'', but dunt yew git yarself in a puckaterry. Dew you jist fix that.
-ERROR_VELOCITY_FILE_NOT_FOUND=Cor blast me, bor, but the template engine can't find the provided input file. Dew yew mearke sure the location is correct and try agin.
-ERROR_VELOCITY_PARSE_EXCEPTION=Wuh, that ent roight, ole partner. There wus a parse error in the provided input file. Dew yew mearke hully sure the file comply wuth the Velocity Template Language (VTL) specification and try agin.
-ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION=Thass a rum ole dew. There wus a method invocation error in the provided input file. Dew yew mearke sure the file comply with the Velocity Template Language (VTL) specification and try agin.
-ERROR_VELOCITY_IO_EXCEPTION=That ent gorn right, my bewty. The template engine wunt able to write the output file. Dew yew mearke sure the path has the proper permissions and try agin.
INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Hear's orl my know on that aggraweartin' exception:
INFO_DISPLAY_EXECUTION_TIME=Wuh that took {0} seconds but if thass a slight longer than you expected, dunt yew go mobbing me abowt it cors that ent my fault. My grandf''ar dint have none of these pearks. He had to use a pen and a bit o'' pearper, but thass bin nice mardling wi'' yew. Dew yew keep a troshin''!
INFO_DISPLAY_FILE_INFORMATION=Hold yew hard, ole partner, I''m gornta hev a look at ''{0}'' (thass {1} big, that is, and that was last chearnged on {2} in case yew dunt remember).
INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Although executing in dry-run mode, this entry might be already processed since it returned a boolean value: {0}
INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=This is what I''m abowt to dew: {0}
-INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE=Wuh, ole partner, I know this is a dry-run, but this entry has gorta be done cos thass a trigger. Thass hully important yew should know that might doss things on the huh.
-INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE=Wuh, ole partner, this entry is one onem triggers what come from the rule scope. Thass hully important yew should know that might put this jarb hully on the huh.
INFO_LABEL_AUTHOR=Thass the one wot wrote this masterous jarb:
INFO_LABEL_AUTHORS=Here's the ones wot wrote this masterous jarb:
INFO_LABEL_CONDITIONAL=Conditional (thass a yis or no thing):
@@ -125,19 +104,7 @@ INFO_LABEL_ON_ERROR=SUFFIN'S GORN WRONG
INFO_LABEL_ON_FAILURE=THAT ENT GORN RIGHT, OLE PARTNER
INFO_LABEL_ON_SUCCESS=THASS A MASTERLY JOB, MY BEWTY
INFO_LABEL_UNNAMED_TASK=That task ent got no name
-INFO_PARSER_ALL_RIGHTS_RESERVED=Orl them rights are reserved, ole partner
-INFO_PARSER_DRYRUN_MODE_DESCRIPTION=that'll look like I'm dewun suffin, but I ent
-INFO_PARSER_HELP_DESCRIPTION=wuh, cor blast me, my bewty, but that'll tell me to dew jist what I'm dewun rite now
-INFO_PARSER_LANGUAGE_DESCRIPTION=that'll tell me what language to mardle in
-INFO_PARSER_LOG_DESCRIPTION=that'll make a log file wi' orl my know dew suffin go wrong
-INFO_PARSER_LOOPS_DESCRIPTION=wuh, yew dunt want me to run on forever, dew you, so use this to say when you want me to stop
-INFO_PARSER_NOTES=This masterous fine perk use orl these other perks and here's their licences an'orl: CAL10N: MIT, Commons CLI: Apache 2.0, Commons Collections: Apache 2.0, Commons IO: Apache 2.0, Commons Lang: Apache 2.0, MVEL: Apache 2.0, Logback: dual licensing with EPL 1.0 and LGPL 2.1, Simple framework: Apache 2.0, SLF4J: MIT, SnakeYAML: Apache 2.0, Velocity: Apache 2.0, and ZT-Exec: Apache 2.0. At last but not least, arara itself is released under the New BSD license.
-INFO_PARSER_ONLY_HEADER=wuh, my bewty, that'll only peek at directives what are in the file header
-INFO_PARSER_PREAMBLE_DESCRIPTION=dew yew git hold o' that preamble from the configuration file
-INFO_PARSER_SILENT_MODE_DESCRIPTION=that'll make them system commands clam up and not run on about what's dewin
-INFO_PARSER_TIMEOUT_DESCRIPTION=wuh, yew dunt want them system commands to run on forever dew suffin' go wrong, dew you, so use this to set the execution timeout (thass in milliseconds)
-INFO_PARSER_VERBOSE_MODE_DESCRIPTION=thass dew you want ter system commands to hav' a mardle wi'yew an'orl
-INFO_PARSER_VERSION_DESCRIPTION=dew yew use this dew you want my know abowt this version
+INFO_PARSER_NOTES=arara is released under the New BSD license.
LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
LOG_INFO_BOOLEAN_MODE=Boolean value: {0}
LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
@@ -150,4 +117,4 @@ LOG_INFO_RULE_LOCATION=That ole rule come from: ''{0}''
LOG_INFO_SYSTEM_COMMAND=System command: {0}
LOG_INFO_TASK_RESULT=Here's what that jarb say:
LOG_INFO_VALIDATED_DIRECTIVES=Thass a masterous jarb, orl the directives are in good kelter. We can git troshin'.
-LOG_INFO_WELCOME_MESSAGE=Hello, my bewty. Welcome to arara {0} (revision {1})! (Thass one onnem hully big birds they git in Brazil.)
+LOG_INFO_WELCOME_MESSAGE=Hello, my bewty. Welcome to arara {0}! (Thass one onnem hully big birds they git in Brazil.)
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_it.properties b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_it.properties
index 1f32907fbd..1a9117c241 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_it.properties
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_it.properties
@@ -34,15 +34,12 @@
# Language: Italian
# Translators: Enrico Gregorio
# ---------------------------------------------------------------------
-
ERROR_BASENAME_NOT_A_FILE=Il metodo ''basename'' richiede un file, non una directory. ''{0}'' non sembra proprio essere un file. Se devi eseguire un compito su una directory, puoi adoperare uno dei metodi delle API Java.
ERROR_CALCULATEHASH_IO_EXCEPTION=Per qualche motivo, non ho potuto calcolare un hash. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Sembra che ''{0}'' non sia un valore booleano valido. Penso che sia facile correggerlo. Assicurati di adoperare una stringa valida che rappresenti un valore booleano (yes e no, true e false, 1 e 0, oppure on e off).
ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Non sono riuscito a distinguere il tuo sistema operativo. Il valore dichiarato ''{0}'' non compare nella mia lista di sistemi operativi (potrei sbagliarmi, però). Per favore, correggi il valore e riprova.
ERROR_CHECKREGEX_IO_EXCEPTION=Non sono riuscito a leggere il contenuto del file ''{0}'' e ho ricevuto in errore di I/O. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato durante l''operazione di hashing. O forse non ho i permessi necessari per leggere il file.
-ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION=Uno degli oggetti nella lista di 'filetypes' nel file di configurazione è senza 'estensione'. Mi dispiace, non posso gestire un nuovo 'filetype' se l'estensione non è specificata. Dovrebbe essere facile correggerlo: aggiungi l'estensione e riprova.
ERROR_CONFIGURATION_GENERIC_ERROR=Non sono riuscito a leggere il file di configurazione, è successo qualcosa che non va. Questa parte è un po' complicata, perché riguarda aspetti del formato interno di serializzazione dei dati. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_CONFIGURATION_INVALID_YAML=Non sono riuscito a leggere il file di configurazione, è successo qualcosa che non va. Sembra che il file YAML fornito non sia valido. Farò del mio meglio per darti una mano, per quanto posso.
ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=Il valore definito nella chiave 'loops' del file di configurazione per stabilire il massimo numero di cicli ha un intervallo non valido. Assicurati che sia un valore 'lungo' e positivo.
ERROR_DISCOVERFILE_FILE_NOT_FOUND=Non sono riuscito a trovare il file ''{0}'' {1}. Assicurati che il file esista e abbia un''estensione valida.
ERROR_EVALUATE_COMPILATION_FAILED=Per qualche ragione, non sono riuscito a compilare l'espressione del condizionale fornito. Questa parte è un po' complicata, perché riguarda aspetti del linguaggio interno per le espressioni. Farò del mio meglio per darti una mano, per quanto posso.
@@ -52,27 +49,20 @@ ERROR_FILETYPE_NOT_A_FILE=Il metodo ''filetype'' richiede un file, non una direc
ERROR_FILETYPE_UNKNOWN_EXTENSION=Non riconosco ''{0}'' come un''estensione standard. Se vuoi definire un nuovo tipo di file, assicurati di fornire l''estensione e lo schema. Queste sono le estensioni standard: {1}
ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=C'è stato un problema di codifica mentre tentavo di ottenere il percorso dell'applicazione. Non c'è molto che possa fare al riguardo.
ERROR_GETCANONICALFILE_IO_EXCEPTION=Non sono riuscito ad accedere al file canonico per via di un errore di I/O. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
-ERROR_GETCANONICALPATH_IO_EXCEPTION=Non sono riuscito a ottenere il percorso canonico per via di un errore di I/O. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Non sono riuscito a ottenere il percorso canonico progenitore per via di un errore di I/O. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l'operazione di hashing. O forse non ho i permessi necessari per leggere il file.
ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Sembra che ''{0}'' sia contrassegnato come obbligatorio nella regola, ma non l''ho trovato nei parametri della direttiva. Assicurati di aggiungerlo come parametro nella direttiva e riprova.
ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Non ho potuto valutare uno dei comandi forniti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Non ho potuto valutare il valore di default dell'espressione in uno degli argomenti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Non sono riuscito a valutare lo stato di uscita di uno dei comandi forniti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Non ho potuto valutare la flag di uno degli argomenti. Questa parte è un po' complicata perché coinvolge aspetti del linguaggio per le espressioni sottostante. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_INTERPRETER_NULL_COMMAND=Sono spiacente, ma a quanto pare il risultato di uno dei comandi forniti è un valore nullo. Assicurati che il comando sia valido e riprova.
ERROR_INTERPRETER_RULE_NOT_FOUND=Non sono riuscito a trovare una regola chiamata ''{0}'' nei percorsi per le regole impostati. Forse una parola scritta sbagliata? Stavo cercando un file con il nome ''{0}.yaml'' nei seguenti percorsi in ordine di priorità: {1}
ERROR_INTERPRETER_UNKNOWN_KEYS=Ho trovato queste chiavi sconosciute nella direttiva: {0}. Dovrebbbe essere facile correggere, toglile dalla mappa.
ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=L'espressione di 'uscita' deve essere sempre un valore booleano (anche se non c'è alcun calcolo nella parte di chiusura). Dovrebbe essere facile correggere: assicurati che l'asserzione del 'type return' sia giusta e riprova.
ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=Il metodo ''isSubdirectory'' richiede una directory, non un file. Sembra proprio che ''{0}'' non sia una directory.
ERROR_LANGUAGE_INVALID_CODE=La lingua richiesta non è valida. Al momento, so parlare le seguenti lingue: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Non ho potuto caricare il database XML di nome ''{0}''. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l''operazione di lettura. O forse non ho i permessi necessari per leggere il file. Già che ci siamo, assicurati che il file XML sia ben formato.
+ERROR_LOAD_COULD_NOT_LOAD_XML=Non ho potuto caricare il database YAML di nome ''{0}''. Purtroppo non ho idea del perché sia andata male. Forse il file è stato spostato o cancellato prima o durante l''operazione di lettura. O forse non ho i permessi necessari per leggere il file. Già che ci siamo, assicurati che il file YAML sia ben formato.
ERROR_PARSER_INVALID_PREAMBLE=Mi dispiace, ma non è stato possibile trovare il preambolo ''{0}''. Assicurati che questa chiave esista nel file di configurazione.
-ERROR_PARSER_LOOPS_INVALID_RANGE=Il valore definito nella linea di comando per il massimo numero di cicli ha un intervallo non valido. Assicurati di adoperare un valore 'lungo' e positivo.
-ERROR_PARSER_LOOPS_NAN=Il numero massimo di cicli deve essere specificato come un intero. È facile correggerlo: assicurati di adoperare un valore 'lungo' e positivo.
-ERROR_PARSER_TIMEOUT_INVALID_RANGE=Il valore definito nella linea di comando per il timeout in esecuzione non è nell'intervallo valido. Assicurati di adoperare un valore 'lungo' e positivo.
-ERROR_PARSER_TIMEOUT_NAN=Il valore dell'opzione per il timeout in esecuzione deve essere un numero. Assicurati di adoperare un valore 'lungo' e positivo.
ERROR_PARSERULE_GENERIC_ERROR=Non ho potuto analizzare la regola, qualcosa è andato storto. Questa parte è un po' complicata, perché riguarda aspetti del formato interno di serializzazione dei dati. Farò del mio meglio per darti una mano, per quanto posso.
-ERROR_PARSERULE_INVALID_YAML=Non ho potuto analizzare la regola, qualcosa è andato storto. Sembra che il file YAML fornito non sia valido. Farò del mio meglio per darti una mano, per quanto posso.
ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Non sono riuscito a replicare la lista perché manca un argomento per il formato. Penso che si tratti di un numero sbagliato di parametri. Assicurati che il numero di parametri sia corretto e riprova.
ERROR_RULE_IDENTIFIER_AND_PATH=Ho trovato un errore nella regola ''{0}'' alla posizione ''{1}''.
ERROR_RUN_GENERIC_EXCEPTION=Non ho potuto lanciare il comando di sistema richiesto, qualcosa è andato storto. Questa parte è un po' complicata, perché riguarda aspetti del linguaggio interno per le espressioni. Farò del mio meglio per darti una mano, per quanto posso.
@@ -81,13 +71,10 @@ ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=Il comando di sistema richiesto ha restit
ERROR_RUN_IO_EXCEPTION=L'esecuzione del comando di sistema è fallita per via di un errore di I/O. Sei sicuro che il programma esista nei tuoi percorsi? Meglio controllare se il programma è davvero disponibile.
ERROR_RUN_TIMEOUT_EXCEPTION=L'esecuzione del comando di sistema ha raggiunto il valore di timeout impostato ed è stata interrotta. Se il tempo è troppo breve, assicurati di impostarne uno più lungo.
ERROR_RUN_TIMEOUT_INVALID_RANGE=Il valore di timeout probabilmente manca (sebbene il timeout sia abilitato). È facile correggerlo: assicurati di adoperare un valore 'lungo' e positivo.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Non ho potuto salvare il database XML con il nome ''{0}''. Purtroppo non ho idea del perché sia successo. Forse non ho i permessi appropriati per scrivere il file XML sul disco.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Il metodo ''obtain'' ha trovato una chiave sconosciuta ''{0}'' nell''ambito della sessione. Non posso ottenere qualcosa che non ho da nessuna parte. Specifica una chiave valida e riprova.
+ERROR_SAVE_COULD_NOT_SAVE_XML=Non ho potuto salvare il database YAML con il nome ''{0}''. Purtroppo non ho idea del perché sia successo. Forse non ho i permessi appropriati per scrivere il file YAML sul disco.
+ERROR_SESSION_OBTAIN_UNKNOWN_KEY=Il metodo ''get'' ha trovato una chiave sconosciuta ''{0}'' nell''ambito della sessione. Non posso ottenere qualcosa che non ho da nessuna parte. Specifica una chiave valida e riprova.
ERROR_SESSION_REMOVE_UNKNOWN_KEY=Il metodo ''remove'' ha trovato una chiave sconosciuta ''{0}'' nell''ambito della sessione. Non posso ottenere qualcosa che non ho da nessuna parte. Specifica una chiave valida e riprova.
-ERROR_TRIGGER_ACTION_NOT_FOUND=Non ho trovato l''azione ''trigger'' ''{0}''. Da'' un''occhiata alla lista dei ''trigger'' disponibili e riprova.
-ERROR_TRIGGER_CALL_EXCEPTION=Non ho potuto eseguire l''azione ''trigger'' ''{0}''. Qualcosa è andata proprio storta.
ERROR_VALIDATE_EMPTY_FILES_LIST=Ho letto la direttiva {0}, ma la lista ''files'' fornita è vuota. Puoi correggerlo facilmente assicurandoti che la lista abbia almeno un elemento, poi riprova.
-ERROR_VALIDATE_FILE_IS_RESERVED=Ho letto la direttiva {0} dove è stata usata la chiave ''file''. Questa chiave è riservata e non puoi usarla. Non preoccuparti, lo metti facilmente a posto dando un altro nome.
ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Ho letto la direttiva {0} e ho scoperto che ''files'' richiede una lista. Assicurati di correggere il tipo a una lista appropriata e riprova.
ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Ho visto nel file fornito la direttiva {0} che non è valida. Assicurati di correggere la direttiva e riprova.
ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Sembra che nel file fornito non ci siano direttive. Assicurati che ce ne sia almeno una e riprova.
@@ -95,26 +82,18 @@ ERROR_VALIDATE_ORPHAN_LINEBREAK=Sembra che ci sia un fine riga che lascia orfana
ERROR_VALIDATE_REFERENCE_IS_RESERVED=Ho letto la direttiva {0} dove è stata usata la chiave ''reference''. Questa chiave è riservata e non puoi usarla. Non preoccuparti, lo metti facilmente a posto dando un altro nome.
ERROR_VALIDATE_YAML_EXCEPTION=C''è stato un problema con la mappa YAML fornita con la direttiva {0}. Questa parte è un po'' complicata, perché riguarda aspetti del formato interno di serializzazione dei dati. Farò del mio meglio per darti una mano, per quanto posso.
ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=L''identificatore dell''argomento ''{0}'' è riservato, quindi non puoi adoperarlo. È facile correggerlo: chiamalo in modo diverso.
-ERROR_VALIDATEBODY_ARGUMENTS_LIST=Non ho potuto trovare la lista degli argomenti. La lista mi serve anche se è vuota. Correggi e riprova.
ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Sembra che tu abbia identificatori di argomenti duplicati nella tua regola. Correggi e riprova.
ERROR_VALIDATEBODY_MISSING_KEYS=Quando si definisce un ambito per l'argomento in una regola bisogna adoperare almeno 'flag' o 'default'. Assicurati che ci sia uno di questi.
ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Ho trovato che uno degli argomenti non ha identificatore. Assicurati di assegnare un identificatore all'argomento e riprova.
ERROR_VALIDATEBODY_NULL_COMMAND=Ho trovato un comando 'nullo' nella regola fornita. Dovrebbe essere facile correggere: aggiungi un comando valido alla regola.
-ERROR_VALIDATEBODY_NULL_COMMANDS_LIST=Mi serve una lista di comandi. Specificala e riprova.
ERROR_VALIDATEHEADER_NULL_ID=La regola fornita non ha un identificatore. Quest'informazione è cruciale, assicurati di sistemarla e riprova. L'identificatore deve avere lo stesso nome della regola (senza estensione, ovviamente).
ERROR_VALIDATEHEADER_NULL_NAME=La regola fornita non ha nome. È facile correggere: specifica un nome valido e riprova.
ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=La regola ha un identificatore sbagliato. Mi sarei aspettato ''{0}'', ma ho trovato ''{1}''. È facile correggere: correggi l''identificatore sbagliato con quello giusto.
-ERROR_VELOCITY_FILE_NOT_FOUND=Il motore per i 'template' non è riuscito a trovare il file di input richiesto. Assicurati che la posizione del file sia giusta e riprova.
-ERROR_VELOCITY_PARSE_EXCEPTION=C'è stato un errore durante l'analisi del file di input indicato. Assicurati che il file segua le specifiche del Velocity Template Language (VTL) e riprova.
-ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION=Il file di input indicato ha un errore nella chiamata del metodo. Assicurati che il file segua le specifiche del Velocity Template Language (VTL) e riprova.
-ERROR_VELOCITY_IO_EXCEPTION=Il motore per i 'template' non è riuscito a scrivere il file di output. Assicurati che il percorso abbia i permessi appropriati e riprova.
INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Ci sono altri dettagli riguardo a questa eccezione:
INFO_DISPLAY_EXECUTION_TIME=Totale: {0} secondi
INFO_DISPLAY_FILE_INFORMATION=Elaborazione ''{0}'' (totale: {1}, modificato il: {2}), attendere.
INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Sebbene stia eseguendo in modo ''dry-run'', questo elemento potrebbe essere già stato elaborato, perché ha restituito un valore booleano: {0}
INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=Sto per lanciare: {0}
-INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE=Sebbene stia eseguendo in modo 'dry-run', questo elemento è sempre elaborato perché è un 'trigger'. Nota che gli effetti di un 'trigger' possono influenzare l'esecuzione.
-INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE=Questo elemento è un 'trigger' generato nell'ambito della regola. Nota che gli effetti di un 'trigger' possono influenzare l'esecuzione.
INFO_LABEL_AUTHOR=Autore:
INFO_LABEL_AUTHORS=Autori:
INFO_LABEL_CONDITIONAL=Condizionale:
@@ -124,19 +103,7 @@ INFO_LABEL_ON_ERROR=ERROR
INFO_LABEL_ON_FAILURE=FAILURE
INFO_LABEL_ON_SUCCESS=SUCCESS
INFO_LABEL_UNNAMED_TASK=Compito senza nome
-INFO_PARSER_ALL_RIGHTS_RESERVED=Tutti i diritti riservati
-INFO_PARSER_DRYRUN_MODE_DESCRIPTION=procedi lungo tutte le fasi dell'esecuzione di un comando, ma senza chiamarne alcuno in modo effettivo
-INFO_PARSER_HELP_DESCRIPTION=mostra il messaggio di aiuto
-INFO_PARSER_LANGUAGE_DESCRIPTION=imposta la lingua del programma
-INFO_PARSER_LOG_DESCRIPTION=genera un file di log
-INFO_PARSER_LOOPS_DESCRIPTION=imposta il massimo numero di cicli
-INFO_PARSER_NOTES=Questo programma usa le seguenti librerie e le rispettive licenze: CAL10N: MIT, Commons CLI: Apache 2.0, Commons Collections: Apache 2.0, Commons IO: Apache 2.0, Commons Lang: Apache 2.0, MVEL: Apache 2.0, Logback: licenza duale con EPL 1.0 and LGPL 2.1, Simple framework: Apache 2.0, SLF4J: MIT, SnakeYAML: Apache 2.0, Velocity: Apache 2.0, e ZT-Exec: Apache 2.0. Per ultimo e non ultimo, arara stesso è rilasciato in accordo con la licenza New BSD.
-INFO_PARSER_ONLY_HEADER=estrai le direttive solo nel 'file header'
-INFO_PARSER_PREAMBLE_DESCRIPTION=imposta il preambolo del file sulla base del file di configurazione
-INFO_PARSER_SILENT_MODE_DESCRIPTION=nascondi l'output del comando
-INFO_PARSER_TIMEOUT_DESCRIPTION=imposta il timeout di esecuzione (in millisecondi)
-INFO_PARSER_VERBOSE_MODE_DESCRIPTION=mostra l'outout del comando
-INFO_PARSER_VERSION_DESCRIPTION=mostra la versione dell'applicazione
+INFO_PARSER_NOTES=arara stesso è rilasciato in accordo con la licenza New BSD.
LOG_INFO_BEGIN_BUFFER=BEGIN OUTPUT BUFFER
LOG_INFO_BOOLEAN_MODE=Valore booleano: {0}
LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
@@ -149,4 +116,4 @@ LOG_INFO_RULE_LOCATION=Posizione della regola: ''{0}''
LOG_INFO_SYSTEM_COMMAND=Comando di sistema: {0}
LOG_INFO_TASK_RESULT=Risultato del compito:
LOG_INFO_VALIDATED_DIRECTIVES=Tutte le direttive erano valide. Pronti a partire.
-LOG_INFO_WELCOME_MESSAGE=Benvenuto in arara {0} (revisione {1})!
+LOG_INFO_WELCOME_MESSAGE=Benvenuto in arara {0}!
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_nl.properties b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties
index 6aa6afa6c6..1f6e1b8a99 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_nl.properties
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_nl.properties
@@ -34,15 +34,12 @@
# Language: Dutch
# Translators: Marijn Schraagen
# ---------------------------------------------------------------------
-
ERROR_BASENAME_NOT_A_FILE=De ''basename''-methode vereist een bestand, geen directory. Het lijkt erop dat ''{0}'' geen bestand is. Als je taken wil uitvoeren met een directory kan je een aantal methodes uit de Java API gebruiken.
ERROR_CALCULATEHASH_IO_EXCEPTION=Om een of andere reden kan ik de hash niet berekenen. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd voor of tijdens de hashing, of misschien heb ik niet de juiste rechten om het bestand te lezen.
ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Het lijkt erop dat ''{0}'' geen boolean-waarde is. Dit zou makkelijk op te lossen moeten zijn. Gebruik een geldige representatie voor een boolean (yes en no, true en false, 1 en 0, on en off).
ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Ik kon het besturingssysteem niet achterhalen. De opgegeven waarde ''{0}'' staat niet in mijn lijst van geldige besturingssystemen (ik kan het natuurlijk mishebben). Controleer de waarde alsjeblieft en probeer het opnieuw.
ERROR_CHECKREGEX_IO_EXCEPTION=Ik kon de inhoud van het bestand ''{0}'' niet lezen vanwege een IO-fout. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd voor of tijdens de leesoperatie, of misschien heb ik niet de juiste rechten om het bestand te lezen.
-ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION=Een van de elementen in de 'filetypes'-lijst in het configuratiebestand heeft geen 'extension'. Helaas kan ik een nieuw bestandstype niet gebruiken als de extensie niet bekend is. Dit zou makkelijk op te lossen moeten zijn: voeg een extensie toe en probeer het opnieuw.
ERROR_CONFIGURATION_GENERIC_ERROR=Ik kon het configuratiebestand niet verwerken, er is iets verkeerd gegaan. Dit probleem is ingewikkeld, omdat het te maken heeft met aspecten van de onderliggende serialisatiesyntax. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_CONFIGURATION_INVALID_YAML=Ik kon het configuratiebestand niet verwerken, er is iets verkeerd gegaan. Het lijkt erop dat het YAML-bestand een fout bevat. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=De waarde gedefinieerd in de 'loops'-optie in het configuratiebestand om het maximumaantal herhalingen te specificeren heeft een ongeldig bereik. Geef alsjeblieft een positieve long integer-waarde op.
ERROR_DISCOVERFILE_FILE_NOT_FOUND=Ik kon het opgegeven bestand ''{0}'' {1} niet vinden. Zorg ervoor dat het bestand bestaat en dat het een geldige extensie heeft.
ERROR_EVALUATE_COMPILATION_FAILED=Om een of andere reden kon ik de expressie in de opgegeven voorwaarde niet compileren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
@@ -52,27 +49,20 @@ ERROR_FILETYPE_NOT_A_FILE=De ''filetype''-methode vereist een bestand, geen dire
ERROR_FILETYPE_UNKNOWN_EXTENSION=De extensie ''{0}'' is niet herkend als een standaardextensie. Als je een nieuw bestandstype wil definiëren zorg dan dat de extensie en het patroon zijn opgegeven. De volgende extensies zijn standaard: {1}
ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Er was een coderingsprobleem bij het verkrijgen van het applicatiepad. Daar kan ik niet zo veel aan doen.
ERROR_GETCANONICALFILE_IO_EXCEPTION=Ik kon het canonical-pad niet lezen vanwege een IO-fout. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd, of misschien heb ik niet de juiste rechten om het bestand te lezen.
-ERROR_GETCANONICALPATH_IO_EXCEPTION=Ik kon het canonical-bestand niet lezen vanwege een IO-fout. Ik weet niet waarom het precies fout ging. Misschien is het bestand verplaatst of verwijderd, of misschien heb ik niet de juiste rechten om het bestand te lezen.
ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Ik kon het canonical ouderpad niet lezen vanwege een IO-fout. Ik weet niet waarom het precies fout ging. Misschien is het pad veranderd, of misschien heb ik niet de juiste leesrechten.
ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Het argument ''{0}'' is gemarkeerd als verplicht in de regel, maar ik kon het niet vinden in de parameters van de directive. Zorg ervoor dat het als parameter voor de directive wordt toegevoegd en probeer het opnieuw.
ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Ik kon een van de opgegeven opdrachten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Ik kon de standaardwaarde van een van de argumenten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Ik kon de exitwaardemelding van een van de opgegeven opdrachten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Ik kon de optie-expressie van een van de argumenten niet evalueren. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_INTERPRETER_NULL_COMMAND=Het spijt me, maar een van de opgegeven opdrachten heeft een null-waarde teruggegeven. Zorg ervoor dat de opdracht valide is en probeer het opnieuw.
ERROR_INTERPRETER_RULE_NOT_FOUND=Ik kon de regel met de naam ''{0}'' niet vinden in de opgegeven regelpaden. Misschien een spelfout? Ik heb geprobeerd het bestand ''{0}.yaml'' te vinden in de volgende paden in volgorde van prioriteit: {1}
ERROR_INTERPRETER_UNKNOWN_KEYS=Ik heb de volgende onbekende verwijzingen gevonden in de directive: {0}. Dit zou makkelijk op te lossen moeten zijn: verwijder deze uit de verwijzingstabel.
ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=De 'exit'-expressie moet altijd een boolean waarde teruggeven (zelfs als er geen berekening heeft plaatsgevonden). Dit zou makkelijk op te lossen moeten zijn: pas het type van de return-regel aan en probeer het opnieuw.
ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=De ''isSubdirectory''-methode vereist een mapje, geen bestand. Het lijkt erop dat ''{0}'' geen mapje is.
ERROR_LANGUAGE_INVALID_CODE=De opgegeven taalcode is ongeldig. Op het moment accepteer ik de volgende talen: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Ik kon de XML-database met de naam ''{0}'' niet laden. Ik weet niet waarom het precies fout ging. Misschien was het bestand verplaatst of verwijderd tijdens de leesoperatie. Of misschien heb ik niet de juiste rechten om het bestand te lezen. Overigens: zorg ervoor dat het XML-bestand welgevormd is.
+ERROR_LOAD_COULD_NOT_LOAD_XML=Ik kon de YAML-database met de naam ''{0}'' niet laden. Ik weet niet waarom het precies fout ging. Misschien was het bestand verplaatst of verwijderd tijdens de leesoperatie. Of misschien heb ik niet de juiste rechten om het bestand te lezen. Overigens: zorg ervoor dat het YAML-bestand welgevormd is.
ERROR_PARSER_INVALID_PREAMBLE=Het spijt me, maar de preamble ''{0}'' is niet gevonden. Zorg ervoor dat deze verwijzing bestaat in het configuratiebestand.
-ERROR_PARSER_LOOPS_INVALID_RANGE=De waarde gedefinieerd in de opdrachtregel voor het maximumaantal herhalingen heeft een ongeldig bereik. Geef alsjeblieft een positieve long integer-waarde op.
-ERROR_PARSER_LOOPS_NAN=De optie voor het maximumaantal herhalingen verwacht een getal als argument. Dit zou makkelijk op te lossen moeten zijn. Zorg ervoor dat je een positieve long integer-waarde opgeeft.
-ERROR_PARSER_TIMEOUT_INVALID_RANGE=De maximum uitvoeringsduur zoals opgegeven op de opdrachtregel heeft een ongeldige waarde. Zorg ervoor dat je een positieve long integer-waarde opgeeft.
-ERROR_PARSER_TIMEOUT_NAN=De optie voor maximum uitvoeringsduur verwacht een getal als argument. Dit zou makkelijk op te lossen moeten zijn. Zorg ervoor dat je een positieve long integer-waarde opgeeft.
ERROR_PARSERULE_GENERIC_ERROR=Ik kon de regel niet verwerken, er is iets verkeerd gegaan. Dit probleem is ingewikkeld, omdat het te maken heeft met aspecten van de onderliggende dataserialisatiesyntax. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
-ERROR_PARSERULE_INVALID_YAML=Ik kon de regel niet verwerken, er is iets verkeerd gegaan. Het lijkt erop dat het YAML-bestand ongeldig is. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Ik kon de lijst niet genereren vanwege een ontbrekend format-argument. Ik denk dat er minder (of meer) parameters zijn dan verwacht. Geef het juiste aantal argumenten op en probeer het opnieuw.
ERROR_RULE_IDENTIFIER_AND_PATH=Ik heb een fout gevonden in regel ''{0}'' op positie ''{1}''.
ERROR_RUN_GENERIC_EXCEPTION=Ik kon het opgegeven systeemcommando niet uitvoeren, er is iets misgegaan. Dit is een ingewikkeld probleem, omdat het te maken heeft met aspecten van de onderliggende expressietaal. Ik zal mijn best doen om je zoveel mogelijk hiermee te helpen.
@@ -81,40 +71,29 @@ ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=Het opgegeven systeemcommando heeft een o
ERROR_RUN_IO_EXCEPTION=Het uitvoeren van het systeemcommando is mislukt vanwege een IO-fout. Weet je zeker dat het commando bestaat in het pad? Het is misschien een goed idee om het pad te controleren en te kijken of het commando beschikbaar is.
ERROR_RUN_TIMEOUT_EXCEPTION=Het uitvoeren van het systeemcommando is onderbroken omdat de maximale uitvoeringsduur overschreden is. Als de tijd te kort was, pas dan de maximale uitvoeringsduur aan.
ERROR_RUN_TIMEOUT_INVALID_RANGE=De maximale uitvoeringsduur ontbreekt (hoewel deze optie wel actief is). Dit zou makkelijk op te lossen moeten zijn. Zorg ervoor dat je een positieve long integer-waarde opgeeft.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Ik kon de XML-database met de naam ''{0}'' niet opslaan. Ik weet niet precies waarom het fout ging. Misschien heb ik niet de juiste schrijfrechten om het XML-bestand op te slaan.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=De ''obtain''-methode heeft een onbekende verwijzing gevonden in de sessie: ''{0}''. Als ik iets niet heb kan ik het ook niet gebruiken. Geef een bestaande verwijzing op en probeer het opnieuw.
+ERROR_SAVE_COULD_NOT_SAVE_XML=Ik kon de YAML-database met de naam ''{0}'' niet opslaan. Ik weet niet precies waarom het fout ging. Misschien heb ik niet de juiste schrijfrechten om het YAML-bestand op te slaan.
+ERROR_SESSION_OBTAIN_UNKNOWN_KEY=De ''get''-methode heeft een onbekende verwijzing gevonden in de sessie: ''{0}''. Als ik iets niet heb kan ik het ook niet gebruiken. Geef een bestaande verwijzing op en probeer het opnieuw.
ERROR_SESSION_REMOVE_UNKNOWN_KEY=De ''remove''-methode heeft een onbekende verwijzing gevonden in de sessie: ''{0}''. Als ik iets niet heb kan ik het ook niet verwijderen. Geef een bestaande verwijzing op en probeer het opnieuw.
-ERROR_TRIGGER_ACTION_NOT_FOUND=De trigger-actie ''{0}'' is niet gevonden. Controleer de lijst met beschikbare triggers en probeer het opnieuw.
-ERROR_TRIGGER_CALL_EXCEPTION=De trigger-actie ''{0}'' kon niet worden aangeroepen. Er is iets misgegaan.
ERROR_VALIDATE_EMPTY_FILES_LIST=Ik heb een directive {0} gelezen en kwam erachter dat de opgegeven ''files''-lijst leeg is. Dit zou makkelijk op te lossen moeten zijn: zorg ervoor dat de lijst tenminste een element heeft en probeer het opnieuw.
-ERROR_VALIDATE_FILE_IS_RESERVED=Ik heb een directive {0} gelezen en kwam erachter dat de verwijzing ''file'' gebruikt is. Deze verwijzing is gereserveerd, dus je kan het niet gebruiken. Maar maak je geen zorgen, dit zou makkelijk op te lossen moeten zijn: gebruik een andere naam.
ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Ik heb een directive {0} gelezen en kwam erachter dat ''files'' een lijst nodig heeft. Zorg dat je het type aanpast naar een lijst en probeer het opnieuw.
ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Ik heb een ongeldige directive {0} gevonden in het opgegeven bestand. Pas de directive aan en probeer het opnieuw.
ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Er zijn geen directives gevonden in het opgegeven bestand. Zorg ervoor dat er tenminste een directive in het bestand staat en probeer het opnieuw.
-ERROR_VALIDATE_ORPHAN_LINEBREAK=Er is een ongeldig directive-regeleinde in regel {0}. Ik kan niet verder. Pas de directive aan en probeer het opnieuw.
+ERROR_VALIDATE_ORPHAN_LINEBREAK=Er is een ongeldig directive-regeleinde in regel {0}. Ik kan niet verder. Pas de directive aan en probeer het opnieuw.
ERROR_VALIDATE_REFERENCE_IS_RESERVED=Ik heb een directive {0} gelezen en kwam erachter dat de verwijzing ''reference'' gebruikt is. Deze verwijzing is gereserveerd, en kan dus niet gebruikt worden. Maar maak je geen zorgen, dit zou makkelijk op te lossen moeten zijn: gebruik een andere naam.
ERROR_VALIDATE_YAML_EXCEPTION=Er is een probleem met de opgegeven YAML-omzetting in directive {0}. Dit probleem is ingewikkeld, omdat het te maken heeft met aspecten van de onderliggende serialisatiesyntax.
ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=De argumentverwijzing ''{0}'' is gereserveerd, en kan dus niet gebruikt worden. Dit zou makkelijk op te lossen moeten zijn: gebruik een andere naam.
-ERROR_VALIDATEBODY_ARGUMENTS_LIST=Ik kon de lijst met argumenten niet vinden. Ik heb de lijst nodig, zelfs als deze leeg is. Pas dit aan en probeer het opnieuw.
ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Blijkbaar zijn er dubbele argumentnamen in de regel. Pas dit aan en probeer het opnieuw.
ERROR_VALIDATEBODY_MISSING_KEYS=Bij het definiëren van het argumentbereik van een regel moet tenminste 'flag' of 'default' worden gebruikt. Zorg ervoor dat je in ieder geval een van deze gebruikt.
ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Ik kwam erachter dat een van de argumenten geen verwijsnaam heeft. Zorg ervoor dat een geldige naam aan het argument wordt toegewezen en probeer het opnieuw.
ERROR_VALIDATEBODY_NULL_COMMAND=Ik heb een null-opdracht in de opgegeven regel gevonden. Dit zou makkelijk op te lossen moeten zijn: geef een geldige opdracht op voor deze regel.
-ERROR_VALIDATEBODY_NULL_COMMANDS_LIST=Ik heb een lijst opdrachten nodig. Pas dit aan en probeer het opnieuw.
ERROR_VALIDATEHEADER_NULL_ID=De opgegeven regel heeft geen verwijsnaam. Dit is cruciale informatie, pas dit aan en probeer het opnieuw. Zorg ervoor dat de naam hetzelfde is als de bestandsnaam (zonder extensie).
ERROR_VALIDATEHEADER_NULL_NAME=De opgegeven regel heeft geen naam. Dit zou makkelijk op te lossen moeten zijn: geef een geldige naam op en probeer het opnieuw.
ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=De regel heeft een verkeerde verwijsnaam. Ik verwachtte ''{0}'', maar vond ''{1}''. Dit zou makkelijk op te lossen moeten zijn: vervang de verkeerde verwijsnaam met de correcte naam.
-ERROR_VELOCITY_FILE_NOT_FOUND=De template-verwerking kon het opgegeven invoerbestand niet vinden. Zorg dat de locatie correct is en probeer het opnieuw.
-ERROR_VELOCITY_PARSE_EXCEPTION=Er was een parseerfout in het opgegeven invoerbestand. Zorg dat het bestand voldoet aan de specificatie van de Velocity Template Language (VLT) en probeer het opnieuw.
-ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION=Er was een fout in een methode-aanroep in het opgegeven invoerbestand. Zorg dat het bestand voldoet aan de specificatie van de Velocity Template Language (VLT) en probeer het opnieuw.
-ERROR_VELOCITY_IO_EXCEPTION=De template-verwerking kon niet naar het uitvoerbestand schrijven. Zorg ervoor dat het pad de juiste permissies heeft en probeer het opnieuw.
INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Er zijn meer details beschikbaar voor deze exception:
INFO_DISPLAY_EXECUTION_TIME=Totaal: {0} seconden
INFO_DISPLAY_FILE_INFORMATION=Verwerken van ''{0}'' (grootte: {1}, laatst gewijzigd: {2}), een ogenblik geduld.
-INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Ondanks het uitvoeren in dry-runmodus is dit item mogelijk al verwerkt omdat het de booleaanse waarde terug heeft gegeven: {0}
+INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Ondanks het uitvoeren in dry-runmodus is dit item mogelijk al verwerkt omdat het de booleaanse waarde terug heeft gegeven: {0}
INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=Begin met uitvoeren: {0}
-INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE=Ondanks het uitvoeren in dry-runmodus wordt dit onderdeel altijd uitgevoerd omdat het een trigger is. Merk op dat de effecten van een trigger de huidige uitvoering kunnen beïnvloeden.
-INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE=Dit onderdeel is een trigger die binnen het bereik van de regel valt. Merk op dat de effecten van een trigger de huidige uitvoering kunnen beïnvloeden.
INFO_LABEL_AUTHOR=Auteur:
INFO_LABEL_AUTHORS=Auteurs:
INFO_LABEL_CONDITIONAL=Voorwaarde:
@@ -124,19 +103,7 @@ INFO_LABEL_ON_ERROR=FOUT
INFO_LABEL_ON_FAILURE=MISLUKT
INFO_LABEL_ON_SUCCESS=SUCCESVOL
INFO_LABEL_UNNAMED_TASK=Naamloze taak
-INFO_PARSER_ALL_RIGHTS_RESERVED=Alle rechten voorbehouden
-INFO_PARSER_DRYRUN_MODE_DESCRIPTION=Controleer alle onderdelen van een opdracht, maar voer niets uit
-INFO_PARSER_HELP_DESCRIPTION=toon het hulpbericht
-INFO_PARSER_LANGUAGE_DESCRIPTION=stel de applicatietaal in
-INFO_PARSER_LOG_DESCRIPTION=genereer een loguitvoer
-INFO_PARSER_LOOPS_DESCRIPTION=stel het maximumaantal herhalingen in
-INFO_PARSER_NOTES=Deze applicatie gebruikt de volgende libraries en hun respectievelijke licenties: CAL10N: MIT, Commons CLI: Apache 2.0, Commons Collections: Apache 2.0, Commons IO: Apache 2.0, Commons Lang: Apache 2.0, MVEL: Apache 2.0, Logback: dubbele licentie met EPL 1.0 en LGPL 2.1, Simple framework: Apache 2.0, SLF4J: MIT, SnakeYAML: Apache 2.0, Velocity: Apache 2.0, and ZT-Exec: Apache 2.0. Als laatste is arara zelf uitgebracht onder de New BSD licentie.
-INFO_PARSER_ONLY_HEADER=lees directives alleen in de bestandsheader
-INFO_PARSER_PREAMBLE_DESCRIPTION=stel de preamble in op basis van het configuratiebestand
-INFO_PARSER_SILENT_MODE_DESCRIPTION=dempt de opdrachtuitvoer
-INFO_PARSER_TIMEOUT_DESCRIPTION=stel de maximale uitvoeringsduur in (in milliseconden)
-INFO_PARSER_VERBOSE_MODE_DESCRIPTION=toon de opdrachtuitvoer
-INFO_PARSER_VERSION_DESCRIPTION=toon de applicatieversie
+INFO_PARSER_NOTES=arara is uitgebracht onder de New BSD licentie.
LOG_INFO_BEGIN_BUFFER=OPEN UITVOER
LOG_INFO_BOOLEAN_MODE=Booleaanse waarde: {0}
LOG_INFO_DIRECTIVES_BLOCK=DIRECTIVES
diff --git a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_pt_BR.properties b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties
index 3ce8cd2fb6..a5b046e909 100644
--- a/support/arara/source/src/main/resources/com/github/cereda/arara/localization/messages_pt_BR.properties
+++ b/support/arara/source/src/main/resources/org/islandoftex/arara/localization/messages_pt_BR.properties
@@ -34,15 +34,12 @@
# Language: Brazilian Portuguese
# Translators: Paulo Roberto Massa Cereda
# ---------------------------------------------------------------------
-
ERROR_BASENAME_NOT_A_FILE=O método ''basename'' requer um arquivo, não um diretório. Observe que ''{0}'' não parece ser um arquivo. Se você precisa realizar alguma tarefa em um diretório, experimente os métodos disponíveis na API Java.
ERROR_CALCULATEHASH_IO_EXCEPTION=Por alguma razão, eu não pude calcular o hash. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de hash. Ou talvez eu não tenha as permissões corretas para leitura do arquivo.
ERROR_CHECKBOOLEAN_NOT_VALID_BOOLEAN=Observe que ''{0}'' não é um valor lógico. Isso é fácil de resolver. Certifique-se de usar uma palavra válida que represente valores lógicos (''yes'' e ''no'', ''true'' e ''false'', ''1'' e ''0'', e ''on'' e ''off'').
ERROR_CHECKOS_INVALID_OPERATING_SYSTEM=Não consegui descobrir qual é o seu sistema operacional. O valor ''{0}'' não parece ser uma entrada válida de sistema operacional na minha lista (Eu posso também estar errado, é claro). Por favor, corrija o valor e tente novamente.
ERROR_CHECKREGEX_IO_EXCEPTION=Não consegui ler o conteúdo do arquivo ''{0}'', houve um erro de entrada e saída. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de leitura. Ou talvez eu não tenha as permissões corretas para leitura do arquivo.
-ERROR_CONFIGURATION_FILETYPE_MISSING_EXTENSION=Uma de suas entradas na lista de 'filetypes' no arquivo de configuração não tem a chave 'extension'. Infelizmente, eu não posso definir um novo tipo de arquivo se a extensão correspondente não é informada. Isso é fácil de resolver: adicione uma nova extensão e tente novamente.
ERROR_CONFIGURATION_GENERIC_ERROR=Não consegui analisar o arquivo de configuração, alguma coisa de errado aconteceu. Esta parte é complicada, pois envolve aspectos do formato de serialização de dados subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_CONFIGURATION_INVALID_YAML=Não consegui analisar o arquivo de configuração, alguma coisa de errado aconteceu. Aparentemente, o arquivo YAML especificado é inválido. Eu farei o possível para te ajudar da melhor forma que puder.
ERROR_CONFIGURATION_LOOPS_INVALID_RANGE=O valor definido na chave 'loops' no arquivo de configuração, que define o número máximo de iterações, possui um intervalo inválido. Por favor, certifique-se de especificar um valor inteiro positivo.
ERROR_DISCOVERFILE_FILE_NOT_FOUND=Não consegui encontrar o arquivo especificado ''{0}'' {1}. Por favor, certifique-se de que o arquivo existe e que possui uma extensão válida.
ERROR_EVALUATE_COMPILATION_FAILED=Por alguma razão, eu não consegui compilar a expressão condicional especificada. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
@@ -52,27 +49,20 @@ ERROR_FILETYPE_NOT_A_FILE=O método ''filetype'' requer um arquivo, não um dire
ERROR_FILETYPE_UNKNOWN_EXTENSION=Não consegui reconhecer ''{0}'' como uma extensão padrão. Se você quiser definir um novo tipo de arquivo, certifique-se de especificar a extensão e o padrão. Estas são as extensões definidas por padrão: {1}
ERROR_GETAPPLICATIONPATH_ENCODING_EXCEPTION=Houve um problema de codificação enquanto eu tentava obter o caminho da aplicação. Não há muito o que eu possa fazer sobre isso.
ERROR_GETCANONICALFILE_IO_EXCEPTION=Não consegui obter o arquivo canônico por causa de um erro de entrada e saída. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de busca. Ou talvez eu não tenha as permissões corretas.
-ERROR_GETCANONICALPATH_IO_EXCEPTION=Não consegui obter o caminho canônico por causa de um erro de entrada e saída. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de busca. Ou talvez eu não tenha as permissões corretas.
ERROR_GETPARENTCANONICALPATH_IO_EXCEPTION=Não consegui obter o caminho canônico ascendente por causa de um erro de entrada e saída. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de busca. Ou talvez eu não tenha as permissões corretas.
ERROR_INTERPRETER_ARGUMENT_IS_REQUIRED=Parece que o argumento ''{0}'' está marcado como obrigatório na regra, mas eu não consegui encontrá-lo nos parâmetros da diretiva correspondente. Por favor, certifique-se de adicioná-lo como parâmetro em sua diretiva e tente novamente.
ERROR_INTERPRETER_COMMAND_RUNTIME_ERROR=Não consegui avaliar um dos comandos disponibilizados. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
ERROR_INTERPRETER_DEFAULT_VALUE_RUNTIME_ERROR=Não consegui avaliar a expressão associada ao valor padrão de um dos argumentos. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
ERROR_INTERPRETER_EXIT_RUNTIME_ERROR=Não consegui avaliar a expressão associada ao código de saída de um dos comandos disponibilizados. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
ERROR_INTERPRETER_FLAG_RUNTIME_EXCEPTION=Não consegui avaliar a expressão associada à presença de um dos argumentos. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_INTERPRETER_NULL_COMMAND=Sinto muito, mas, aparentemente, um dos comandos disponibilizados retornou um valor nulo. Por favor, certifique-se de que o comando é válido e tente novamente.
ERROR_INTERPRETER_RULE_NOT_FOUND=Não consegui encontrar uma regra chamada ''{0}'' nos caminhos de regras especificados. Talvez uma palavra digitada incorretamente? Eu estava procurando por um arquivo chamado ''{0}.yaml'' nos seguintes caminhos, em ordem de prioridade: {1}
ERROR_INTERPRETER_UNKNOWN_KEYS=Encontrei as seguintes chaves desconhecidas na diretiva: {0}. Isso é fácil de resolver, apenas remova essas chaves do seu mapa.
ERROR_INTERPRETER_WRONG_EXIT_CLOSURE_RETURN=A expressão 'exit' referente ao código de saída deve sempre retornar um valor lógico (mesmo se não há computação propriamente dita). Isso é fácil de resolver: apenas certifique-se de corrigir o tipo de retorno e tente novamente.
ERROR_ISSUBDIRECTORY_NOT_A_DIRECTORY=O método ''isSubdirectory'' requer um diretório, não um arquivo. Observe que ''{0}'' não parece ser um diretório.
ERROR_LANGUAGE_INVALID_CODE=O código de idioma especificado é inválido. No momento, eu sei falar os seguintes idiomas: {0}
-ERROR_LOAD_COULD_NOT_LOAD_XML=Não consegui carregar o banco de dados XML chamado ''{0}''. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de leitura. Ou talvez eu não tenha as permissões corretas para leitura do arquivo. A propósito, certifique-se de que o arquivo XML esteja correto.
+ERROR_LOAD_COULD_NOT_LOAD_XML=Não consegui carregar o banco de dados YAML chamado ''{0}''. Não tenho ideia porque não deu certo. Talvez o arquivo tenha sido movido ou removido antes ou durante a operação de leitura. Ou talvez eu não tenha as permissões corretas para leitura do arquivo. A propósito, certifique-se de que o arquivo YAML esteja correto.
ERROR_PARSER_INVALID_PREAMBLE=Sinto muito, mas o preâmbulo ''{0}'' não foi encontrado. Por favor, certifique-se de que esta chave existe no arquivo de configuração.
-ERROR_PARSER_LOOPS_INVALID_RANGE=O valor definido na linha de comando para o número máximo de iterações possui um intervalo inválido. Por favor, certifique-se de especificar um valor inteiro positivo.
-ERROR_PARSER_LOOPS_NAN=A opção referente ao número máximo de iterações requer, é claro, um número como argumento. Isso é fácil de resolver. Apenas certifique-se de especificar um valor inteiro positivo.
-ERROR_PARSER_TIMEOUT_INVALID_RANGE=O valor definido na linha de comando para o timeout de execução possui um intervalo inválido. Por favor, certifique-se de especificar um valor inteiro positivo.
-ERROR_PARSER_TIMEOUT_NAN=A opção referente ao timeout de execução requer um número como argumento. Isso é fácil de resolver. Apenas certifique-se de especificar um valor inteiro positivo.
ERROR_PARSERULE_GENERIC_ERROR=Não consegui analisar a regra, alguma coisa de errado aconteceu. Esta parte é complicada, pois envolve aspectos do formato de serialização de dados subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
-ERROR_PARSERULE_INVALID_YAML=Não consegui analisar a regra, alguma coisa de errado aconteceu. Aparentemente, o arquivo YAML especificado é inválido. Eu farei o possível para te ajudar da melhor forma que puder.
ERROR_REPLICATELIST_MISSING_FORMAT_ARGUMENTS_EXCEPTION=Não consegui replicar a lista por causa de um formato de argumento faltante. Meu palpite é que existem menos (ou mais) parâmetros do que o esperado. Certifique-se de corrigir o número de parâmetros e tente novamente.
ERROR_RULE_IDENTIFIER_AND_PATH=Encontrei um erro na regra ''{0}'' localizada em ''{1}''.
ERROR_RUN_GENERIC_EXCEPTION=Não consegui executar o comando de sistema disponibilizado, alguma coisa de errado aconteceu. Esta parte é complicada, pois envolve aspectos da linguagem de expressão subjacente. Eu farei o possível para te ajudar da melhor forma que puder.
@@ -81,13 +71,10 @@ ERROR_RUN_INVALID_EXIT_VALUE_EXCEPTION=A execução do comando de sistema retorn
ERROR_RUN_IO_EXCEPTION=A execução do comando de sistema falhou por causa de um erro de entrada e saída. Você tem certeza de que o comando de sistema especificado existe no seu caminho? Pode ser uma boa ideia verificar o caminho do sistema e confirmar se o comando realmente está disponível.
ERROR_RUN_TIMEOUT_EXCEPTION=A execução do comando de sistema atingiu o timeout especificado e foi abortada. Se o tempo foi muito curto, certifique-se de especificar um valor maior.
ERROR_RUN_TIMEOUT_INVALID_RANGE=O valor de timeout provavelmente está faltando (apesar de estar habilitado). Isso é fácil de resolver. Por favor, certifique-se de especificar um valor positivo inteiro.
-ERROR_SAVE_COULD_NOT_SAVE_XML=Não consegui salvar o banco de dados XML chamado ''{0}''. Não tenho ideia porque não deu certo. Talvez eu não tenha as permissões corretas para escrever o arquivo XML no disco.
-ERROR_SESSION_OBTAIN_UNKNOWN_KEY=O método ''obtain'' encontrou a chave desconhecida ''{0}'' no escopo de sessão. Não posso obter um valor que não existe na sessão. Por favor, especifique uma chave válida e tente novamente.
+ERROR_SAVE_COULD_NOT_SAVE_XML=Não consegui salvar o banco de dados YAML chamado ''{0}''. Não tenho ideia porque não deu certo. Talvez eu não tenha as permissões corretas para escrever o arquivo YAML no disco.
+ERROR_SESSION_OBTAIN_UNKNOWN_KEY=O método ''get'' encontrou a chave desconhecida ''{0}'' no escopo de sessão. Não posso obter um valor que não existe na sessão. Por favor, especifique uma chave válida e tente novamente.
ERROR_SESSION_REMOVE_UNKNOWN_KEY=O método ''remove'' encontrou a chave desconhecida ''{0}'' no escopo de sessão. Não posso remover um valor que não existe na sessão. Por favor, especifique uma chave válida e tente novamente.
-ERROR_TRIGGER_ACTION_NOT_FOUND=A ação de gatilho ''{0}'' não foi encontrada. Certifique-se de consultar a lista de gatilhos disponíveis e tente novamente.
-ERROR_TRIGGER_CALL_EXCEPTION=A ação de gatilho ''{0}'' não pôde ser executada. Alguma coisa de errado aconteceu.
ERROR_VALIDATE_EMPTY_FILES_LIST=Li uma diretiva {0} e descobri que a lista ''files'' especificada está vazia. Isso é fácil de resolver: certifique-se de que a lista possua, pelo menos, um elemento e tente novamente.
-ERROR_VALIDATE_FILE_IS_RESERVED=Li uma diretiva {0} e descobri que a chave ''file'' foi utilizada. Esta chave é reservada, portanto você não pode utilizá-la! Mas não se preocupe, isso é fácil de resolver. Apenas substitua esse nome por outro.
ERROR_VALIDATE_FILES_IS_NOT_A_LIST=Li uma diretiva {0} e descobri que ''files'' requer uma lista. Por favor, certifique-se de corrigir o tipo para uma lista adequada e tente novamente.
ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT=Encontrei uma diretiva inválida {0} no arquivo especificado. Certifique-se de corrigir a diretiva e tente novamente.
ERROR_VALIDATE_NO_DIRECTIVES_FOUND=Parece que o arquivo especificado não possui diretivas! Certifique-se de incluir, pelo menos, uma diretiva e tente novamente.
@@ -95,26 +82,18 @@ ERROR_VALIDATE_ORPHAN_LINEBREAK=Aparentemente, existe uma quebra de linha de uma
ERROR_VALIDATE_REFERENCE_IS_RESERVED=Li uma diretiva {0} e descobri que a chave ''reference'' foi utilizada. Esta chave é reservada, portanto você não pode utilizá-la! Mas não se preocupe, isso é fácil de resolver. Apenas substitua esse nome por outro.
ERROR_VALIDATE_YAML_EXCEPTION=Ocorreu um problema com o mapa YAML especificado em uma diretiva {0}. Esta parte é complicada, pois envolve aspectos do formato de serialização de dados subjacente.
ERROR_VALIDATEBODY_ARGUMENT_ID_IS_RESERVED=O identificador de argumento ''{0}'' está reservado, portanto você não pode utilizá-lo. Isso é fácil de resolver. Apenas substitua esse nome por outro.
-ERROR_VALIDATEBODY_ARGUMENTS_LIST=Não consegui encontrar a lista de argumentos. Preciso dessa lista, mesmo que ela esteja vazia. Certifique-se de corrigir esse erro e tente novamente.
ERROR_VALIDATEBODY_DUPLICATE_ARGUMENT_IDENTIFIERS=Aparentemente, você possui identificadores de argumentos duplicados em sua regra. Certifique-se de corrigir esse erro e tente novamente.
ERROR_VALIDATEBODY_MISSING_KEYS=Ao definir um escopo de argumento de regra, ao menos a chave 'flag' ou 'default' deve ser utilizada. Por favor, certifique-se de utilizar, pelo menos, uma delas.
ERROR_VALIDATEBODY_NULL_ARGUMENT_ID=Descobri que um dos argumentos não possui identificador associado. Por favor, certifique-se de adicionar um identificador válido ao argumento e tente novamente.
ERROR_VALIDATEBODY_NULL_COMMAND=Encontrei um comando nulo na regra especificada. Isso é fácil de resolver. Certifique-se de adicionar um comando válido na regra.
-ERROR_VALIDATEBODY_NULL_COMMANDS_LIST=Preciso de uma lista de comandos. Certifique-se de corrigir esse erro e tente novamente.
ERROR_VALIDATEHEADER_NULL_ID=A regra especificada não possui identificador. É uma informação crucial, portanto, certifique-se de corrigir esse erro e tente novamente. Lembre-se de que o identificador deve possuir o mesmo nome do arquivo da regra (sem a extensão, é claro).
ERROR_VALIDATEHEADER_NULL_NAME=A regra especificada não possui nome. Isso é fácil de resolver. Certifique-se de adicionar um nome válido e tente novamente.
ERROR_VALIDATEHEADER_WRONG_IDENTIFIER=A regra possui um identificador incorreto. Eu estava esperando ''{0}'', mas encontrei ''{1}''. Isso é fácil de resolver: apenas substitua o identificador incorreto pelo valor correto.
-ERROR_VELOCITY_FILE_NOT_FOUND=O motor de modelo não conseguiu encontrar o arquivo de entrada especificado. Certifique-se de que a localização está correta e tente novamente.
-ERROR_VELOCITY_PARSE_EXCEPTION=Ocorreu um erro de análise no arquivo de entrada especificado. Certifique-se de que o arquivo esteja aderente ao formato Velocity Template Language (VTL) e tente novamente.
-ERROR_VELOCITY_METHOD_INVOCATION_EXCEPTION=Ocorreu um erro de invocação de método no arquivo de entrada especificado. Certifique-se de que o arquivo esteja aderente ao formato Velocity Template Language (VTL) e tente novamente.
-ERROR_VELOCITY_IO_EXCEPTION=O motor de modelo não conseguiu escrever no arquivo de saída. Certifique-se de que o caminho possui as permissões corretas e tente novamente.
INFO_DISPLAY_EXCEPTION_MORE_DETAILS=Detalhes adicionais estão disponíveis para esta exceção:
INFO_DISPLAY_EXECUTION_TIME=Total: {0} segundos
INFO_DISPLAY_FILE_INFORMATION=Processando ''{0}'' (tamanho: {1}, última modificação: {2}), por favor, aguarde.
INFO_INTERPRETER_DRYRUN_MODE_BOOLEAN_MODE=Apesar da execução em modo dry-run, é provável que esta entrada já foi processada, dado que o seguinte valor lógico foi retornado: {0}
INFO_INTERPRETER_DRYRUN_MODE_SYSTEM_COMMAND=A executar: {0}
-INFO_INTERPRETER_DRYRUN_MODE_TRIGGER_MODE=Apesar da execução em modo dry-run, esta entrada é sempre processada por tratar-se de um gatilho. Observe que os efeitos de um gatilho podem influenciar a execução corrente.
-INFO_INTERPRETER_VERBOSE_MODE_TRIGGER_MODE=Esta entrada é um gatilho originado a partir do escopo da regra. Observe que os efeitos de um gatilho podem influenciar a execução corrente.
INFO_LABEL_AUTHOR=Autor:
INFO_LABEL_AUTHORS=Autores:
INFO_LABEL_CONDITIONAL=Expressão condicional:
@@ -124,19 +103,7 @@ INFO_LABEL_ON_ERROR=ERRO
INFO_LABEL_ON_FAILURE=FRACASSO
INFO_LABEL_ON_SUCCESS=SUCESSO
INFO_LABEL_UNNAMED_TASK=Tarefa sem nome
-INFO_PARSER_ALL_RIGHTS_RESERVED=Todos os direitos reservados
-INFO_PARSER_DRYRUN_MODE_DESCRIPTION=passa por todas as preparações para executar um comando, mas sem chamadas reais
-INFO_PARSER_HELP_DESCRIPTION=imprime a mensagem de ajuda
-INFO_PARSER_LANGUAGE_DESCRIPTION=define o idioma da aplicação
-INFO_PARSER_LOG_DESCRIPTION=gera uma saída para registro
-INFO_PARSER_LOOPS_DESCRIPTION=define o número máximo de iterações
-INFO_PARSER_NOTES=Esta ferramenta utiliza as seguintes bibliotecas e suas respectivas licenças: CAL10N: MIT, Commons CLI: Apache 2.0, Commons Collections: Apache 2.0, Commons IO: Apache 2.0, Commons Lang: Apache 2.0, MVEL: Apache 2.0, Logback: licença dupla com EPL 1.0 e LGPL 2.1, Simple framework: Apache 2.0, SLF4J: MIT, SnakeYAML: Apache 2.0, Velocity: Apache 2.0, and ZT-Exec: Apache 2.0. Por fim, mas não menos importante, arara é distribuída sob a licença New BSD.
-INFO_PARSER_ONLY_HEADER=extrai diretivas apenas no cabeçalho do arquivo
-INFO_PARSER_PREAMBLE_DESCRIPTION=define o preâmbulo de arquivo de acordo com o arquivo de configuração
-INFO_PARSER_SILENT_MODE_DESCRIPTION=oculta a saída do comando
-INFO_PARSER_TIMEOUT_DESCRIPTION=define o timeout de execução (em milissegundos)
-INFO_PARSER_VERBOSE_MODE_DESCRIPTION=imprime a saída do comando
-INFO_PARSER_VERSION_DESCRIPTION=imprime a versão da aplicação
+INFO_PARSER_NOTES=arara é distribuída sob a licença New BSD.
LOG_INFO_BEGIN_BUFFER=INÍCIO DO BUFFER DE SAÍDA
LOG_INFO_BOOLEAN_MODE=Valor lógico: {0}
LOG_INFO_DIRECTIVES_BLOCK=DIRETIVAS
diff --git a/support/arara/source/src/test/java/com/github/cereda/arara/tests/LocalizationTest.java b/support/arara/source/src/test/java/com/github/cereda/arara/tests/LocalizationTest.java
deleted file mode 100644
index ab5978265d..0000000000
--- a/support/arara/source/src/test/java/com/github/cereda/arara/tests/LocalizationTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012, Paulo Roberto Massa Cereda
- * 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.
- *
- * 3. Neither the name of the project's author nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "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.
- */
-package com.github.cereda.arara.tests;
-
-import ch.qos.cal10n.verifier.Cal10nError;
-import ch.qos.cal10n.verifier.IMessageKeyVerifier;
-import ch.qos.cal10n.verifier.MessageKeyVerifier;
-import com.github.cereda.arara.model.Messages;
-import java.util.List;
-import java.util.Locale;
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
-
-/**
- * Tests the localizated messages, checking if all keys are set.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class LocalizationTest {
-
- /**
- * Helper method, checks the provided locale.
- * @param locale The locale.
- * @return The size of the error list.
- */
- private int check(Locale locale) {
- IMessageKeyVerifier verifier = new MessageKeyVerifier(Messages.class);
- List<Cal10nError> errors = verifier.verify(locale);
- for(Cal10nError error : errors) {
- System.err.println(error);
- }
- return errors.size();
- }
-
- /**
- * Verifies the English localization (provided by Paulo).
- */
- @Test
- public void verifyEnglish() {
- assertEquals(0, check(new Locale("en")));
- }
-
- /**
- * Verifies the German localization (provided by Marco).
- */
- @Test
- public void verifyGerman() {
- assertEquals(0, check(new Locale("de")));
- }
-
- /**
- * Verifies the Broad Norfolk localization (provided by Nicola).
- */
- @Test
- public void verifyBroadNorfolk() {
- assertEquals(0, check(new Locale("en", "QN")));
- }
-
- /**
- * Verifies the Dutch localization (provided by Marijn).
- */
- @Test
- public void verifyDutch() {
- assertEquals(0, check(new Locale("nl")));
- }
-
- /**
- * Verifies the Brazilian Portuguese localization (provided by Paulo).
- */
- @Test
- public void verifyBrazilianPortuguese() {
- assertEquals(0, check(new Locale("pt", "BR")));
- }
-
- /**
- * Verifies the Italian localization (provided by Enrico).
- */
- @Test
- public void verifyItalian() {
- assertEquals(0, check(new Locale("it")));
- }
-
-}
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt
new file mode 100644
index 0000000000..55b13a8fe5
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileHandlingUtilsTest.kt
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.filehandling
+
+import io.kotlintest.shouldBe
+import io.kotlintest.shouldThrow
+import io.kotlintest.specs.ShouldSpec
+import java.io.File
+import java.nio.file.Files
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.model.AraraException
+
+class FileHandlingUtilsTest : ShouldSpec({
+ should("fail generating CRC sums on inexistent files") {
+ shouldThrow<AraraException> {
+ FileHandlingUtils.calculateHash(File("QUACK"))
+ }
+ }
+ should("generate correct CRC sums") {
+ FileHandlingUtils.calculateHash(File("../LICENSE")) shouldBe "2396b4e2"
+ FileHandlingUtils.calculateHash(File("../CODE_OF_CONDUCT.md")) shouldBe "536c426f"
+ }
+
+ should("find correct extension") {
+ FileHandlingUtils.getFileExtension(File("QUACK")) shouldBe ""
+ FileHandlingUtils.getFileExtension(File("a.tex")) shouldBe "tex"
+ FileHandlingUtils.getFileExtension(File(".tex")) shouldBe "tex"
+ }
+ should("find correct basename") {
+ FileHandlingUtils.getBasename(File("QUACK")) shouldBe "QUACK"
+ FileHandlingUtils.getBasename(File("a.tex")) shouldBe "a"
+ FileHandlingUtils.getBasename(File(".tex")) shouldBe ""
+ }
+
+ should("get subdirecotry relationship right") {
+ FileHandlingUtils.isSubDirectory(File("../docs"), File("..")) shouldBe true
+ FileHandlingUtils.isSubDirectory(File(".."), File("../docs")) shouldBe false
+ shouldThrow<AraraException> {
+ FileHandlingUtils.isSubDirectory(File("../LICENSE"), File(".."))
+ }
+ shouldThrow<AraraException> {
+ FileHandlingUtils.isSubDirectory(File(".."), File("../LICENSE"))
+ }
+ }
+
+ should("detect changes on file") {
+ val file = Files.createTempFile(null, null).toFile()
+ val referenceBackup = Arara.config[AraraSpec.Execution.reference]
+ Arara.config[AraraSpec.Execution.reference] = file.parentFile.resolve("reference")
+ FileHandlingUtils.hasChanged(file) shouldBe true
+ FileHandlingUtils.hasChanged(file) shouldBe false
+ file.writeText("QUACK")
+ FileHandlingUtils.hasChanged(file) shouldBe true
+ FileHandlingUtils.hasChanged(file) shouldBe false
+ file.writeText("QUACK2")
+ FileHandlingUtils.hasChanged(file) shouldBe true
+ file.delete()
+ FileHandlingUtils.hasChanged(file) shouldBe true
+ FileHandlingUtils.hasChanged(file) shouldBe false
+ Arara.config[AraraSpec.Execution.reference] = referenceBackup
+ }
+})
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt
new file mode 100644
index 0000000000..47f9916c43
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/filehandling/FileSearchingUtilsTest.kt
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.filehandling
+
+import io.kotlintest.shouldBe
+import io.kotlintest.specs.ShouldSpec
+import java.nio.file.Files
+import java.nio.file.Path
+import kotlin.reflect.full.declaredMemberFunctions
+import kotlin.reflect.jvm.isAccessible
+
+class FileSearchingUtilsTest : ShouldSpec({
+ // TODO: test implicit extensions
+
+ fun prepareFileSystem(): Path {
+ val tempDir = Files.createTempDirectory(System.nanoTime().toString())
+ tempDir.resolve("quack/quack").toFile().mkdirs()
+ listOf("quack", "quack/quack", "quack/quack/quack").forEach {
+ tempDir.resolve("$it.tex").toFile().writeText(" ")
+ tempDir.resolve("$it.txt").toFile().writeText(" ")
+ }
+ return tempDir
+ }
+
+ should("fail looking up inexistent file") {
+ val lookupFile = FileSearchingUtils::class.declaredMemberFunctions
+ .first { it.name == "lookupFile" }
+ lookupFile.isAccessible = true
+ lookupFile.call(FileSearchingUtils, "QUACK") shouldBe null
+ }
+
+ should("fail on existing directory") {
+ val lookupFile = FileSearchingUtils::class.declaredMemberFunctions
+ .first { it.name == "lookupFile" }
+ lookupFile.isAccessible = true
+ lookupFile.call(FileSearchingUtils, "../buildSrc") shouldBe null
+ }
+
+ should("find file by extension") {
+ val tempDir = prepareFileSystem()
+ FileSearchingUtils.listFilesByExtensions(tempDir.toFile(),
+ listOf("tex"), false).toSet() shouldBe
+ setOf(tempDir.resolve("quack.tex").toFile())
+ FileSearchingUtils.listFilesByExtensions(tempDir.toFile(),
+ listOf("tex"), true).toSet() shouldBe
+ listOf("quack", "quack/quack", "quack/quack/quack")
+ .map { tempDir.resolve("$it.tex").toFile() }.toSet()
+ }
+ should("find file by pattern") {
+ val tempDir = prepareFileSystem()
+ FileSearchingUtils.listFilesByPatterns(tempDir.toFile(),
+ listOf("*q*.txt"), false).toSet() shouldBe
+ setOf(tempDir.resolve("quack.txt").toFile())
+ FileSearchingUtils.listFilesByPatterns(tempDir.toFile(),
+ listOf("q*.txt"), true).toSet() shouldBe
+ listOf("quack", "quack/quack", "quack/quack/quack")
+ .map { tempDir.resolve("$it.txt").toFile() }.toSet()
+ }
+})
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt
new file mode 100644
index 0000000000..704d3e319d
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageCoverageTest.kt
@@ -0,0 +1,102 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.localization
+
+import ch.qos.cal10n.verifier.MessageKeyVerifier
+import io.kotlintest.inspectors.forAll
+import io.kotlintest.matchers.collections.shouldNotBeEmpty
+import io.kotlintest.shouldBe
+import io.kotlintest.shouldThrow
+import io.kotlintest.specs.ShouldSpec
+import java.io.File
+import java.io.IOException
+import java.nio.file.Files
+import java.nio.file.Path
+import java.nio.file.Paths
+import java.util.Locale
+import java.util.stream.Collectors
+import org.islandoftex.arara.model.AraraException
+
+class LanguageCoverageTest : ShouldSpec({
+ "locale definitions" {
+ /**
+ * Helper method, checks the provided locale (all keys set?).
+ *
+ * @param locale The locale.
+ * @return The size of the error list.
+ */
+ fun check(locale: Locale): Int {
+ val errors = MessageKeyVerifier(Messages::class.java).verify(locale)
+ errors.forEach(System.err::println)
+ return errors.size
+ }
+
+ should("succeed instantiating known locale") {
+ Language("en").locale.language shouldBe "en"
+ }
+ should("throw on unknown locale instantiation") {
+ shouldThrow<AraraException> {
+ Language("quack")
+ }
+ }
+
+ should("not error on known localizations") {
+ listOf("en", "de", "nl", "it").forAll {
+ check(Locale(it)) shouldBe 0
+ }
+ check(Locale("en", "QN")) shouldBe 0
+ check(Locale("pt", "BR")) shouldBe 0
+ }
+ }
+ "language coverage" {
+ /*
+ * Tests the localized messages, checking if all messages are properly
+ * quoted (but not necessarily whether they are loadable).
+ */
+ should("get all strings from every language") {
+ // get all files
+ val files = Files.list(
+ Paths.get("src/main/resources/org/islandoftex/arara/localization"))
+ .map { p: Path ->
+ val f = p.toFile()
+ if (f.name.endsWith("properties") && !f.isDirectory) f
+ else null
+ }
+ .collect(Collectors.toList())
+ .toList()
+ .filterNotNull()
+ files.shouldNotBeEmpty()
+
+ // for each report, print
+ // the corresponding entry
+ files.map { file: File ->
+ try {
+ LanguageReport.analyze(file)
+ } catch (exception: IOException) {
+ throw AssertionError(
+ "Fatal exception: an error was raised while " +
+ "trying to read one of the languages. Please " +
+ "make sure all languages in the provided " +
+ "directory have read permission.")
+ }
+ }.forEach { report ->
+ // debug output
+ println(report.reference.name +
+ "\t" + String.format(" %2.2f%%", report.coverage))
+
+ // if there are problematic lines,
+ // add the current language report
+ if (report.lines.isNotEmpty()) {
+ // legend: S = Simple message, single quotes should not be doubled
+ // P = Parametrized message, single quotes must be doubled
+
+ // build the beginning of the line
+ println(report.reference.name)
+ // print error lines
+ println(report.lines)
+ }
+
+ report.coverage shouldBe 100.0f
+ }
+ }
+ }
+})
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt
new file mode 100644
index 0000000000..addcd0262c
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageReport.kt
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.localization
+
+import java.io.File
+
+/**
+ * Implements the language report model.
+ *
+ * @author Island of TeX
+ * @version 5.0
+ * @since 5.0
+ */
+data class LanguageReport(
+ /**
+ * The file reference.
+ */
+ val reference: File,
+ /**
+ * Total of checked lines.
+ */
+ val total: Int,
+ /**
+ * List of problematic lines and their corresponding error types.
+ */
+ val lines: Map<Int, Char>
+) {
+ /**
+ * Language coverage of the file.
+ */
+ val coverage: Float
+ get() = if (lines.isEmpty()) {
+ 100f
+ } else {
+ (1f - lines.size.toFloat() / total) * 100f
+ }
+
+ companion object {
+ /**
+ * Analyzes the list of lines.
+ *
+ * @param file The file to read.
+ * @return The language report.
+ */
+ internal fun analyze(file: File): LanguageReport {
+ // holds the current line number
+ var number = 1
+ // holds the number of checked lines
+ var checked = 0
+
+ // flag that holds the
+ // current analysis
+ var check: Int
+
+ val reportLines = mutableMapOf<Int, Char>()
+
+ // check every line of the language file
+ file.forEachLine { line ->
+ // let's only analyze lines
+ // that are not comments
+ if (!line.trim().startsWith("#")) {
+ // increment the checked
+ // line counter
+ checked++
+
+ // line is a parametrized message
+ check = if (line.contains("{0}")) {
+ // check the corresponding pattern
+ checkParametrizedMessage(line)
+ } else {
+ // check the corresponding pattern
+ checkMessage(line)
+ }
+
+ // we found an error,
+ // report it
+ if (check != 0) {
+ // add line and error type to the report
+ reportLines[number] = if (check == 1) 'P' else 'S'
+ }
+ }
+
+ // let's move to the next line
+ number++
+ }
+
+ // return the language report
+ return LanguageReport(
+ reference = file,
+ total = checked,
+ lines = reportLines)
+ }
+
+ /**
+ * Checks if the provided message follows the simple format.
+ *
+ * @param text Message.
+ * @return An integer value.
+ */
+ private fun checkMessage(text: String): Int {
+ var i = 0
+ var c: Char
+ for (element in text) {
+ c = element
+ i = if (c == '\'') {
+ if (i == 1) {
+ return 2
+ } else {
+ 1
+ }
+ } else {
+ 0
+ }
+ }
+ return 0
+ }
+
+ /**
+ * Checks if the provided message follows the parametrized format.
+ *
+ * @param text Message.
+ * @return An integer value.
+ */
+ private fun checkParametrizedMessage(text: String): Int {
+ var i = 0
+ var c: Char
+ for (element in text) {
+ c = element
+ if (c == '\'') {
+ i += 1
+ } else {
+ if (i != 0) {
+ if (i != 2) {
+ return 1
+ } else {
+ i = 0
+ }
+ }
+ }
+ }
+ return 0
+ }
+ }
+}
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt
new file mode 100644
index 0000000000..92d38ebc9b
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/localization/LanguageTest.kt
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.localization
+
+import io.kotlintest.shouldBe
+import io.kotlintest.shouldThrow
+import io.kotlintest.specs.ShouldSpec
+import java.util.Locale
+import org.islandoftex.arara.model.AraraException
+
+class LanguageTest : ShouldSpec({
+ should("instantiate with known code") {
+ Language("en").locale shouldBe Locale.ENGLISH
+ }
+
+ should("throw on unknown language") {
+ shouldThrow<AraraException> {
+ Language("quack")
+ }
+ }
+})
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt
new file mode 100644
index 0000000000..7580d8c81e
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/model/SessionTest.kt
@@ -0,0 +1,76 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.model
+
+import io.kotlintest.shouldBe
+import io.kotlintest.shouldNotThrow
+import io.kotlintest.shouldThrow
+import io.kotlintest.specs.ShouldSpec
+
+class SessionTest : ShouldSpec({
+ should("include all environment variables") {
+ Session.clear()
+ Session.updateEnvironmentVariables()
+ Session.contains("environment:PATH") shouldBe true
+ }
+
+ should("properly check existence") {
+ Session.clear()
+ Session.put("A", "B")
+ Session.contains("A") shouldBe true
+ Session.contains("C") shouldBe false
+ }
+
+ should("support insertion") {
+ Session.clear()
+ Session.put("A", "B")
+ Session.contains("A") shouldBe true
+ }
+
+ should("support get") {
+ Session.clear()
+ Session.put("A", "B")
+ Session["A"] shouldBe "B"
+ }
+
+ should("support removal") {
+ Session.clear()
+ Session.put("A", "B")
+ Session.put("C", "D")
+ Session.contains("A") shouldBe true
+ Session.contains("C") shouldBe true
+ Session.remove("A")
+ Session.contains("A") shouldBe false
+ Session.contains("C") shouldBe true
+ }
+
+ should("clear itself") {
+ Session.clear()
+ Session.put("A", "B")
+ Session.put("C", "D")
+ Session.contains("A") shouldBe true
+ Session.contains("C") shouldBe true
+ Session.clear()
+ Session.contains("A") shouldBe false
+ Session.contains("C") shouldBe false
+ }
+
+ should("throw on unknown removal") {
+ Session.clear()
+ Session.put("A", "B")
+ shouldNotThrow<AraraException> {
+ Session.remove("A")
+ }
+ shouldThrow<AraraException> {
+ Session.remove("C")
+ }
+ }
+
+ should("throw on unknown getter") {
+ Session.clear()
+ Session.put("A", "B")
+ Session["A"] shouldBe "B"
+ shouldThrow<AraraException> {
+ Session["C"]
+ }
+ }
+})
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt
new file mode 100644
index 0000000000..b77b901ef6
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/CommonUtilsTest.kt
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import io.kotlintest.shouldBe
+import io.kotlintest.specs.ShouldSpec
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.localization.Language
+
+class CommonUtilsTest : ShouldSpec({
+ should("format bytes correctly") {
+ Arara.config[AraraSpec.Execution.language] = Language("en")
+ mapOf(800 to "800 B",
+ 1000 to "1.0 kB",
+ 1024 to "1.0 kB",
+ 1000000 to "1.0 MB").forEach { (key, value) ->
+ CommonUtils.byteSizeToString(key.toLong()) shouldBe value
+ }
+ }
+
+ should("find system utils") {
+ CommonUtils.isOnPath("echo") shouldBe true
+ }
+ should("not find utils with fantasy name") {
+ // hopefully no one will have such a command in the path…
+ CommonUtils.isOnPath("echoQuackForArara") shouldBe false
+ }
+
+ should("flatten lists correctly") {
+ CommonUtils.flatten(listOf(1, 2, listOf(3, 4, listOf(5, 6))))
+ .toSet() shouldBe (setOf(1, 2, 3, 4, 5, 6) as Set<Any>)
+ }
+})
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt
new file mode 100644
index 0000000000..a0cc52145a
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExecutionTest.kt
@@ -0,0 +1,139 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import io.kotlintest.DoNotParallelize
+import io.kotlintest.matchers.string.shouldContain
+import io.kotlintest.matchers.string.shouldNotContain
+import io.kotlintest.shouldBe
+import io.kotlintest.shouldNotBe
+import io.kotlintest.shouldThrow
+import io.kotlintest.specs.ShouldSpec
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.PrintStream
+import java.nio.file.Paths
+import kotlin.time.ExperimentalTime
+import org.islandoftex.arara.Arara
+import org.islandoftex.arara.configuration.AraraSpec
+import org.islandoftex.arara.configuration.Configuration
+import org.islandoftex.arara.filehandling.FileSearchingUtils
+import org.islandoftex.arara.model.AraraException
+import org.islandoftex.arara.model.Extractor
+import org.islandoftex.arara.model.Interpreter
+import org.islandoftex.arara.ruleset.DirectiveUtils
+
+@ExperimentalTime
+@DoNotParallelize
+class ExecutionTest : ShouldSpec({
+ fun getPathForTest(name: String): String = "src/test/resources/executiontests/$name"
+ fun outputForTest(testName: String, fileName: String = "$testName.tex"):
+ String {
+ val sysout = System.out
+ val output = ByteArrayOutputStream()
+ try {
+ System.setOut(PrintStream(output))
+ Arara.config[AraraSpec.Execution.workingDirectory] =
+ Paths.get(getPathForTest(testName))
+ Configuration.load()
+ Arara.config[AraraSpec.Execution.verbose] = true
+ FileSearchingUtils.discoverFile(fileName)
+ val directives = DirectiveUtils.process(Extractor.extract(
+ File("${getPathForTest(testName)}/$fileName")))
+ Interpreter(directives).execute()
+ return output.toByteArray().toString(Charsets.UTF_8)
+ } catch (ex: Exception) {
+ throw ex
+ } finally {
+ System.setOut(sysout)
+ output.close()
+ }
+ }
+
+ should("be able to store variables sessions") {
+ outputForTest("sessions") shouldContain "MeowQuack"
+ }
+
+ should("honor falsy existence test") {
+ val file = File(getPathForTest("conditionals") + "/conditionals.quack")
+ if (file.exists()) file.delete()
+ val output = outputForTest("conditionals")
+ output shouldContain "QuackOne"
+ output shouldContain "QuackFour"
+ output shouldNotContain "QuackTwo"
+ output shouldNotContain "QuackThree"
+ }
+ should("honor truthy existence (falsy contains) test") {
+ val file = File(getPathForTest("conditionals") + "/conditionals.quack")
+ file.writeText("Meow")
+ val output = outputForTest("conditionals")
+ file.delete()
+ output shouldContain "QuackOne"
+ output shouldContain "QuackFour"
+ output shouldContain "QuackTwo"
+ output shouldNotContain "QuackThree"
+ }
+ should("honor truthy contains test") {
+ val file = File(getPathForTest("conditionals") + "/conditionals.quack")
+ file.writeText("Duck")
+ val output = outputForTest("conditionals")
+ file.delete()
+ output shouldContain "QuackOne"
+ output shouldContain "QuackFour"
+ output shouldContain "QuackTwo"
+ output shouldContain "QuackThree"
+ }
+
+ should("track changes") {
+ val file = File(getPathForTest("changes") + "/arara.yaml")
+ if (file.exists()) file.delete()
+ outputForTest("changes") shouldContain "QuackOne"
+ outputForTest("changes") shouldNotContain "QuackOne"
+ }
+
+ should("gracefully halt on halt rule") {
+ val output = outputForTest("halt")
+ output shouldContain "QuackOne"
+ output shouldNotContain "QuackTwo"
+ CommonUtils.exitStatus shouldBe 0
+ }
+ should("forcefully halt on halt error rule") {
+ val output = outputForTest("halt-error")
+ output shouldContain "QuackOne"
+ output shouldNotContain "QuackTwo"
+ CommonUtils.exitStatus shouldNotBe 0
+ }
+
+ should("fail on invalid config") {
+ val exception = shouldThrow<AraraException> {
+ outputForTest("invalid-config")
+ }
+ exception.message shouldContain "could not parse the configuration"
+ }
+
+ should("read foreign extension") {
+ val output = outputForTest("foreign-extension", "foreign-extension.my")
+ output shouldContain "QuackOne"
+ }
+ should("fail on unknown extension") {
+ shouldThrow<AraraException> {
+ outputForTest("foreign-extension", "foreign-extension.xy")
+ }
+ }
+ should("accept empty pattern on known extension") {
+ val output = outputForTest("known-extension")
+ output shouldContain "QuackOne"
+ }
+
+ should("execute option-less directives") {
+ val output = outputForTest("simple-directive")
+ output shouldContain "The echoer"
+ output shouldContain "SUCCESS"
+ }
+ should("execute directive with options") {
+ val output = outputForTest("directive-with-options")
+ output shouldContain "The echoer"
+ output shouldContain "batchmode"
+ output shouldContain "SUCCESS"
+ output shouldNotContain "FAILURE"
+ }
+})
diff --git a/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt b/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt
new file mode 100644
index 0000000000..cd41545ee9
--- /dev/null
+++ b/support/arara/source/src/test/kotlin/org/islandoftex/arara/utils/ExtensionTest.kt
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: BSD-3-Clause
+package org.islandoftex.arara.utils
+
+import io.kotlintest.shouldBe
+import io.kotlintest.shouldThrow
+import io.kotlintest.specs.ShouldSpec
+
+class ExtensionTest : ShouldSpec({
+ should("abbreviate strings correctly") {
+ "Quack quack".abbreviate(6) shouldBe "Quack…"
+ "Quack Quack".abbreviate(80) shouldBe "Quack Quack"
+ shouldThrow<IllegalArgumentException> { "Quack".abbreviate(1) }
+ }
+
+ should("center strings correctly") {
+ "Quack".center(3, '-') shouldBe "Quack"
+ "Quack".center(9, '-') shouldBe "--Quack--"
+ }
+
+ should("wrap strings correctly") {
+ "This text should be wrapped".wrap(10) shouldBe "This text\nshould be\nwrapped"
+ }
+})
diff --git a/support/arara/source/src/test/resources/executiontests/changes/arara.yaml b/support/arara/source/src/test/resources/executiontests/changes/arara.yaml
new file mode 100644
index 0000000000..3014ff9662
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/changes/arara.yaml
@@ -0,0 +1,3 @@
+!database
+map:
+ "/home/paulo/Projetos/arara/application/src/test/resources/executiontests/changes/changes.tex": "404aaef6" \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/changes/arararc.yaml b/support/arara/source/src/test/resources/executiontests/changes/arararc.yaml
new file mode 100644
index 0000000000..54afa4c5fc
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/changes/arararc.yaml
@@ -0,0 +1,3 @@
+!config
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/changes/changes.tex b/support/arara/source/src/test/resources/executiontests/changes/changes.tex
new file mode 100644
index 0000000000..10646cc412
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/changes/changes.tex
@@ -0,0 +1,3 @@
+% arara: echoone if changed('tex')
+Quack
+\bye
diff --git a/support/arara/source/src/test/resources/executiontests/changes/echoone.yaml b/support/arara/source/src/test/resources/executiontests/changes/echoone.yaml
new file mode 100644
index 0000000000..7c304b991f
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/changes/echoone.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/conditionals/arararc.yaml b/support/arara/source/src/test/resources/executiontests/conditionals/arararc.yaml
new file mode 100644
index 0000000000..54afa4c5fc
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/conditionals/arararc.yaml
@@ -0,0 +1,3 @@
+!config
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/conditionals/conditionals.tex b/support/arara/source/src/test/resources/executiontests/conditionals/conditionals.tex
new file mode 100644
index 0000000000..35a3208e12
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/conditionals/conditionals.tex
@@ -0,0 +1,6 @@
+% arara: echoone
+% arara: echotwo if exists('quack')
+% arara: echothree if (exists('quack') && found('quack', 'Duck'))
+% arara: echofour
+Quack
+\bye
diff --git a/support/arara/source/src/test/resources/executiontests/conditionals/echofour.yaml b/support/arara/source/src/test/resources/executiontests/conditionals/echofour.yaml
new file mode 100644
index 0000000000..17db18947c
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/conditionals/echofour.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echofour
+name: Test rule for conditionals 4
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackFour');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/conditionals/echoone.yaml b/support/arara/source/src/test/resources/executiontests/conditionals/echoone.yaml
new file mode 100644
index 0000000000..7c304b991f
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/conditionals/echoone.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/conditionals/echothree.yaml b/support/arara/source/src/test/resources/executiontests/conditionals/echothree.yaml
new file mode 100644
index 0000000000..4f71872321
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/conditionals/echothree.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echothree
+name: Test rule for conditionals 3
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackThree');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/conditionals/echotwo.yaml b/support/arara/source/src/test/resources/executiontests/conditionals/echotwo.yaml
new file mode 100644
index 0000000000..61915393b5
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/conditionals/echotwo.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echotwo
+name: Test rule for conditionals 2
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackTwo');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/directive-with-options/arararc.yaml b/support/arara/source/src/test/resources/executiontests/directive-with-options/arararc.yaml
new file mode 100644
index 0000000000..54afa4c5fc
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/directive-with-options/arararc.yaml
@@ -0,0 +1,3 @@
+!config
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/directive-with-options/directive-with-options.tex b/support/arara/source/src/test/resources/executiontests/directive-with-options/directive-with-options.tex
new file mode 100644
index 0000000000..db521b5ce1
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/directive-with-options/directive-with-options.tex
@@ -0,0 +1,6 @@
+% arara: echoone: { interaction: batchmode }
+% arara: echoone: { synctex: 1 }
+% arara: echoone: { synctex: yes }
+% arara: echoone: { extensions: [aux, log, pdf] }
+Quack
+\bye
diff --git a/support/arara/source/src/test/resources/executiontests/directive-with-options/echoone.yaml b/support/arara/source/src/test/resources/executiontests/directive-with-options/echoone.yaml
new file mode 100644
index 0000000000..825edea9bb
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/directive-with-options/echoone.yaml
@@ -0,0 +1,36 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne', interaction, synctex);
+ }
+arguments:
+- identifier: interaction
+ flag: >
+ @{
+ if ([ 'batchmode', 'nonstopmode', 'scrollmode',
+ 'errorstopmode' ].contains(parameters.interaction)) {
+ return '--interaction='.concat(parameters.interaction);
+ }
+ else {
+ throwError('The provided interaction value is not valid.');
+ }
+ }
+- identifier: synctex
+ flag: >
+ @{
+ isTrue(parameters.synctex, '--synctex=1', '--synctex=0')
+ }
+- identifier: extensions
+ flag: >
+ @{
+ if (isList(parameters.extensions)) {
+ return parameters.extensions;
+ }
+ else {
+ throwError('I was expecting a list of extensions.');
+ }
+ }
diff --git a/support/arara/source/src/test/resources/executiontests/foreign-extension/arararc.yaml b/support/arara/source/src/test/resources/executiontests/foreign-extension/arararc.yaml
new file mode 100644
index 0000000000..f1b78d5861
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/foreign-extension/arararc.yaml
@@ -0,0 +1,6 @@
+!config
+paths:
+ - './'
+filetypes:
+ - extension: my
+ pattern: ^\s*%\s+ \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/foreign-extension/echoone.yaml b/support/arara/source/src/test/resources/executiontests/foreign-extension/echoone.yaml
new file mode 100644
index 0000000000..7c304b991f
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/foreign-extension/echoone.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.my b/support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.my
new file mode 100644
index 0000000000..9947e30964
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.my
@@ -0,0 +1,3 @@
+% arara: echoone
+Quack
+\bye \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.xy b/support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.xy
new file mode 100644
index 0000000000..9947e30964
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/foreign-extension/foreign-extension.xy
@@ -0,0 +1,3 @@
+% arara: echoone
+Quack
+\bye \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/halt-error/arararc.yaml b/support/arara/source/src/test/resources/executiontests/halt-error/arararc.yaml
new file mode 100644
index 0000000000..54afa4c5fc
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt-error/arararc.yaml
@@ -0,0 +1,3 @@
+!config
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/halt-error/echoone.yaml b/support/arara/source/src/test/resources/executiontests/halt-error/echoone.yaml
new file mode 100644
index 0000000000..7c304b991f
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt-error/echoone.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/halt-error/echotwo.yaml b/support/arara/source/src/test/resources/executiontests/halt-error/echotwo.yaml
new file mode 100644
index 0000000000..61915393b5
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt-error/echotwo.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echotwo
+name: Test rule for conditionals 2
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackTwo');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/halt-error/halt-error.tex b/support/arara/source/src/test/resources/executiontests/halt-error/halt-error.tex
new file mode 100644
index 0000000000..cf8d291ccf
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt-error/halt-error.tex
@@ -0,0 +1,5 @@
+% arara: echoone
+% arara: halt
+% arara: echotwo
+Quack
+\bye \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/halt-error/halt.yaml b/support/arara/source/src/test/resources/executiontests/halt-error/halt.yaml
new file mode 100644
index 0000000000..53df1a295b
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt-error/halt.yaml
@@ -0,0 +1,16 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2018, Paulo Roberto Massa Cereda
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: halt
+name: Halt
+commands:
+ - name: The halt trigger
+ command: >
+ @{
+ halt(1);
+ return true;
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/halt/arararc.yaml b/support/arara/source/src/test/resources/executiontests/halt/arararc.yaml
new file mode 100644
index 0000000000..54afa4c5fc
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt/arararc.yaml
@@ -0,0 +1,3 @@
+!config
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/halt/echoone.yaml b/support/arara/source/src/test/resources/executiontests/halt/echoone.yaml
new file mode 100644
index 0000000000..7c304b991f
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt/echoone.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/halt/echotwo.yaml b/support/arara/source/src/test/resources/executiontests/halt/echotwo.yaml
new file mode 100644
index 0000000000..61915393b5
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt/echotwo.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echotwo
+name: Test rule for conditionals 2
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackTwo');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/halt/halt.tex b/support/arara/source/src/test/resources/executiontests/halt/halt.tex
new file mode 100644
index 0000000000..cf8d291ccf
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt/halt.tex
@@ -0,0 +1,5 @@
+% arara: echoone
+% arara: halt
+% arara: echotwo
+Quack
+\bye \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/halt/halt.yaml b/support/arara/source/src/test/resources/executiontests/halt/halt.yaml
new file mode 100644
index 0000000000..1c14644bcb
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/halt/halt.yaml
@@ -0,0 +1,19 @@
+!config
+# Arara, the cool TeX automation tool
+# Copyright (c) 2020, Island of TeX
+# All rights reserved.
+#
+# This rule is part of arara.
+identifier: halt
+name: Halt
+authors:
+- Heiko Oberdiek
+- Island of TeX
+commands:
+- name: The halt trigger
+ command: >
+ @{
+ halt(0);
+ return true;
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/invalid-config/arararc.yaml b/support/arara/source/src/test/resources/executiontests/invalid-config/arararc.yaml
new file mode 100644
index 0000000000..e6edd71dba
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/invalid-config/arararc.yaml
@@ -0,0 +1,2 @@
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/invalid-config/invalid-config.tex b/support/arara/source/src/test/resources/executiontests/invalid-config/invalid-config.tex
new file mode 100644
index 0000000000..24b11d5eb3
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/invalid-config/invalid-config.tex
@@ -0,0 +1,3 @@
+% arara: pdftex
+Quack
+\bye \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/known-extension/arararc.yaml b/support/arara/source/src/test/resources/executiontests/known-extension/arararc.yaml
new file mode 100644
index 0000000000..5342ec007e
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/known-extension/arararc.yaml
@@ -0,0 +1,5 @@
+!config
+paths:
+ - './'
+filetypes:
+ - extension: tex \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/known-extension/echoone.yaml b/support/arara/source/src/test/resources/executiontests/known-extension/echoone.yaml
new file mode 100644
index 0000000000..7c304b991f
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/known-extension/echoone.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/known-extension/known-extension.tex b/support/arara/source/src/test/resources/executiontests/known-extension/known-extension.tex
new file mode 100644
index 0000000000..9947e30964
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/known-extension/known-extension.tex
@@ -0,0 +1,3 @@
+% arara: echoone
+Quack
+\bye \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/sessions/arararc.yaml b/support/arara/source/src/test/resources/executiontests/sessions/arararc.yaml
new file mode 100644
index 0000000000..54afa4c5fc
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/sessions/arararc.yaml
@@ -0,0 +1,3 @@
+!config
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/sessions/sessionrule.yaml b/support/arara/source/src/test/resources/executiontests/sessions/sessionrule.yaml
new file mode 100644
index 0000000000..9b26f740d7
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/sessions/sessionrule.yaml
@@ -0,0 +1,16 @@
+!config
+identifier: sessionrule
+name: Test rule for sessions
+commands:
+ - name: The echoer
+ command: >
+ @{
+ getSession().put('quack', 'Quack');
+ return getCommand('echo', 'Quack');
+ }
+ - name: The echoer mark II
+ command: >
+ @{
+ return getCommand('echo', 'Meow' + getSession().get('quack'));
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/sessions/sessions.tex b/support/arara/source/src/test/resources/executiontests/sessions/sessions.tex
new file mode 100644
index 0000000000..9cfb354cdf
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/sessions/sessions.tex
@@ -0,0 +1,3 @@
+% arara: sessionrule
+Quack
+\bye \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/simple-directive/arararc.yaml b/support/arara/source/src/test/resources/executiontests/simple-directive/arararc.yaml
new file mode 100644
index 0000000000..54afa4c5fc
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/simple-directive/arararc.yaml
@@ -0,0 +1,3 @@
+!config
+paths:
+ - './' \ No newline at end of file
diff --git a/support/arara/source/src/test/resources/executiontests/simple-directive/echoone.yaml b/support/arara/source/src/test/resources/executiontests/simple-directive/echoone.yaml
new file mode 100644
index 0000000000..7c304b991f
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/simple-directive/echoone.yaml
@@ -0,0 +1,10 @@
+!config
+identifier: echoone
+name: Test rule for conditionals 1
+commands:
+ - name: The echoer
+ command: >
+ @{
+ return getCommand('echo', 'QuackOne');
+ }
+arguments: []
diff --git a/support/arara/source/src/test/resources/executiontests/simple-directive/simple-directive.tex b/support/arara/source/src/test/resources/executiontests/simple-directive/simple-directive.tex
new file mode 100644
index 0000000000..8d8f2cf697
--- /dev/null
+++ b/support/arara/source/src/test/resources/executiontests/simple-directive/simple-directive.tex
@@ -0,0 +1,3 @@
+% arara: echoone
+Quack
+\bye
diff --git a/systems/win32/miktex/tm/packages/files.csv.lzma b/systems/win32/miktex/tm/packages/files.csv.lzma
index 5b3da9ae7f..5b85d213cf 100644
--- a/systems/win32/miktex/tm/packages/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/files.csv.lzma b/systems/win32/miktex/tm/packages/next/files.csv.lzma
index 067c655b6c..bfb4d5b3b5 100644
--- a/systems/win32/miktex/tm/packages/next/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/next/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 48a2d3cbfd..149fc08173 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -2,9 +2,9 @@
[repository]
-date=1583270293
+date=1583356593
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=c7eb21505dd39dc28fed2df9cdf1e083
+lstdigest=6a245b7e02e37fbd9cb5e89680dcf8c1
numpkg=3871
relstate=next
-version=7367
+version=7368
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index abd65d8116..06d1949c9d 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -2,9 +2,9 @@
[repository]
-date=1583269908
-lastupd=arabluatex asmeconf autofancyhdr biblatex-bookinother biblatex2bibitem datetime2 diagbox erewhon-math expkv-def icite luatexja nomencl pgfplots platex uptex-fonts babel babel-greek bib2gls curve2e ebgaramond
-lstdigest=1c9381ee2b2a8c13e681254869dd28a6
+date=1583356292
+lastupd=biblatex2bibitem econ-bst fei fourier graphics-pln l3kernel l3packages newtx scholax arabluatex asmeconf autofancyhdr biblatex-bookinother datetime2 diagbox erewhon-math expkv-def icite luatexja nomencl
+lstdigest=10e259996f8dd70e28b61202af148116
numpkg=3871
relstate=stable
-version=7367
+version=7368
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index d487453990..f8344cd012 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,32 @@
W32TeX (x86 & x64) ChangeLog
+[2020/03/03]
+(01) biblatex-biber.tar.xz
+ Update biblatex-bookinother.
+(02) datetime2.tar.xz
+ Update datetime2.
+(03) ltxpkgs.tar.xz
+ Update acronym.
+(04) luatex-dev-w32.tar.xz
+ Change engine of lualatex from luatex to luahbtex.
+(05) luatex-exp-w32.tar.xz
+ Change engine of lualatex from luatex to luahbtex.
+(06) luatex-w32.tar.xz
+ Change engine of lualatex from luatex to luahbtex.
+(07) pdftex-w32.tar.xz
+ Update documents.
+(08) tex4htk-w32.tar.xz
+ Update usepackage.4ht.
+(09) web2c-w32.tar.xz
+ Update fmtutil.cnf (change engine of lualatex from luatex
+ to luahbtex.)
+(10) win64/luatex-dev-w64.tar.xz
+ Change engine of lualatex from luatex to luahbtex.
+(11) win64/luatex-exp-w64.tar.xz
+ Change engine of lualatex from luatex to luahbtex.
+(12) win64/luatex-w64.tar.xz
+ Change engine of lualatex from luatex to luahbtex.
+
[2020/03/02]
(01) extractpdfmark-w32.tar.xz
Update poppler (0.86.1) in extractpdfmark.exe.
diff --git a/timestamp b/timestamp
index 3a09df0d3b..a951f710c3 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2020-03-04-02-02
+2020-03-05-02-02