summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-03-02 03:04:42 +0000
committerNorbert Preining <norbert@preining.info>2021-03-02 03:04:42 +0000
commit4763ec8ceefaf2b038d591b8c15d88d081aec6c9 (patch)
tree113e7c21358dd01318b8e7a1e3f3228ec33bc563
parent3a1a102e980610859d9f1b197733d6ce6a541c62 (diff)
CTAN sync 202103020304
-rw-r--r--CTAN.sites3
-rw-r--r--FILES.byname756
-rw-r--r--FILES.byname.gzbin2292315 -> 2292403 bytes
-rw-r--r--FILES.last07days709
-rw-r--r--graphics/pgf/contrib/tzplot/README.txt26
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc-A-v1.0.tex128
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc-B-v1.0.tex1943
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc-C-v1.0.tex3981
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc-D-v1.0.tex1792
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc.pdfbin0 -> 808794 bytes
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc.tex375
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-oblivoirpartstyle.tex38
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot.ist16
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot.sty4590
-rw-r--r--language/thai/thaispec/thaispec.dtx146
-rw-r--r--language/thai/thaispec/thaispec.ins4
-rw-r--r--language/thai/thaispec/thaispec.pdfbin84199 -> 88377 bytes
-rw-r--r--macros/latex/contrib/aastex/README53
-rw-r--r--macros/latex/contrib/aastex/aassymbols.pdfbin113610 -> 0 bytes
-rw-r--r--macros/latex/contrib/aastex/aassymbols.tex579
-rw-r--r--macros/latex/contrib/aastex/aastex631.cls (renamed from macros/latex/contrib/aastex/aastex63.cls)818
-rw-r--r--macros/latex/contrib/aastex/natbib.tex96
-rw-r--r--macros/latex/contrib/aastex/sample631.bib (renamed from macros/latex/contrib/aastex/sample63.bib)19
-rw-r--r--macros/latex/contrib/aastex/sample631.pdf (renamed from macros/latex/contrib/aastex/sample63.pdf)bin1039571 -> 1049880 bytes
-rw-r--r--macros/latex/contrib/aastex/sample631.tex (renamed from macros/latex/contrib/aastex/sample63.tex)190
-rw-r--r--macros/latex/contrib/acrotex/README.md6
-rw-r--r--macros/latex/contrib/acrotex/doc/acrobat-in-workflow.pdfbin369266 -> 370603 bytes
-rw-r--r--macros/latex/contrib/acrotex/doc/aeb_man.pdfbin2117711 -> 2138054 bytes
-rw-r--r--macros/latex/contrib/acrotex/doc/aeb_man.tex15
-rw-r--r--macros/latex/contrib/acrotex/doc/install_jsfiles.pdfbin236764 -> 237391 bytes
-rw-r--r--macros/latex/contrib/acrotex/examples/jquiztst.pdfbin245005 -> 350239 bytes
-rw-r--r--macros/latex/contrib/acrotex/examples/jquiztst.tex4
-rw-r--r--macros/latex/contrib/acrotex/examples/jtxttst.pdfbin319897 -> 320860 bytes
-rw-r--r--macros/latex/contrib/acrotex/examples/webeqtst.pdfbin485009 -> 486934 bytes
-rw-r--r--macros/latex/contrib/acrotex/exerquiz.dtx239
-rw-r--r--macros/latex/contrib/acrotex/web.dtx99
-rw-r--r--macros/latex/contrib/apa7/README.txt2
-rw-r--r--macros/latex/contrib/apa7/apa7.dtx30
-rw-r--r--macros/latex/contrib/apa7/apa7.ins8
-rw-r--r--macros/latex/contrib/apa7/apa7.pdfbin529393 -> 530598 bytes
-rw-r--r--macros/latex/contrib/apa7/samples/longsample.pdfbin196742 -> 196588 bytes
-rw-r--r--macros/latex/contrib/apa7/samples/shortsample.pdfbin65283 -> 65352 bytes
-rw-r--r--macros/latex/contrib/eqexam/README.md33
-rw-r--r--macros/latex/contrib/eqexam/aebrandom.def4
-rw-r--r--macros/latex/contrib/eqexam/doc/eqexam.pdfbin745675 -> 0 bytes
-rw-r--r--macros/latex/contrib/eqexam/doc/eqexamman.pdfbin671573 -> 768714 bytes
-rw-r--r--macros/latex/contrib/eqexam/doc/eqexamman.tex93
-rw-r--r--macros/latex/contrib/eqexam/eqexam.def11
-rw-r--r--macros/latex/contrib/eqexam/eqexam.dtx252
-rw-r--r--macros/latex/contrib/eqexam/examples/fig1.epsbin831714 -> 834475 bytes
-rw-r--r--macros/latex/contrib/eqexam/examples/graph.eps18284
-rw-r--r--macros/latex/contrib/eqexam/examples/hw.cfg.txt12
-rw-r--r--macros/latex/contrib/eqexam/examples/quiz.cfg.txt7
-rw-r--r--macros/latex/contrib/eqexam/examples/quiz01.pdfbin0 -> 33181 bytes
-rw-r--r--macros/latex/contrib/eqexam/examples/selectversion_tst.pdfbin0 -> 33335 bytes
-rw-r--r--macros/latex/contrib/eqexam/examples/test_matching.tex92
-rw-r--r--macros/latex/contrib/media9/ChangeLog5
-rw-r--r--macros/latex/contrib/media9/doc/media9.pdfbin3737599 -> 3739129 bytes
-rw-r--r--macros/latex/contrib/media9/media9.sty8
-rw-r--r--macros/latex/contrib/media9/pdfbase.sty18
-rw-r--r--macros/latex/contrib/rec-thy/README2
-rw-r--r--macros/latex/contrib/rec-thy/rec-thy.pdfbin113253 -> 121041 bytes
-rw-r--r--macros/latex/contrib/rec-thy/rec-thy.sty373
-rw-r--r--macros/latex/contrib/rec-thy/rec-thy.tex33
-rw-r--r--macros/xetex/latex/xespotcolor/README9
-rw-r--r--macros/xetex/latex/xespotcolor/jatestspot.pdfbin66609 -> 74037 bytes
-rw-r--r--macros/xetex/latex/xespotcolor/spotcolor-test.pdfbin4841 -> 5738 bytes
-rw-r--r--macros/xetex/latex/xespotcolor/xespotcolor.dtx28
-rw-r--r--macros/xetex/latex/xespotcolor/xespotcolor.ins6
-rw-r--r--macros/xetex/latex/xespotcolor/xespotcolor.pdfbin76507 -> 77616 bytes
-rw-r--r--support/gregoriotex/CHANGELOG.md32
-rw-r--r--support/gregoriotex/COPYING.md2
-rw-r--r--support/gregoriotex/README.md2
-rw-r--r--support/gregoriotex/UPGRADE.md12
-rw-r--r--support/gregoriotex/doc/Appendix_Font_Tables.tex2
-rw-r--r--support/gregoriotex/doc/Command_Index_User.tex147
-rw-r--r--support/gregoriotex/doc/Command_Index_gregorio.tex112
-rw-r--r--support/gregoriotex/doc/Command_Index_internal.tex218
-rw-r--r--support/gregoriotex/doc/Gabc.tex12
-rw-r--r--support/gregoriotex/doc/GregorioNabcRef.pdfbin484381 -> 484824 bytes
-rw-r--r--support/gregoriotex/doc/GregorioNabcRef.tex2
-rw-r--r--support/gregoriotex/doc/GregorioRef.lua18
-rw-r--r--support/gregoriotex/doc/GregorioRef.pdfbin807105 -> 826346 bytes
-rw-r--r--support/gregoriotex/doc/GregorioRef.tex8
-rw-r--r--support/gregoriotex/doc/examples/debugging.tex10
-rw-r--r--support/gregoriotex/doc/examples/main-lualatex.tex50
-rw-r--r--support/gregoriotex/doc/gsp-sample.tex462
-rw-r--r--support/gregoriotex/fonts/sources/convertsfdtottf.py2
-rw-r--r--support/gregoriotex/fonts/sources/greciliae-base.sfd1285
-rw-r--r--support/gregoriotex/fonts/sources/gregall.sfd2
-rw-r--r--support/gregoriotex/fonts/sources/grelaon.sfd2
-rw-r--r--support/gregoriotex/fonts/sources/gresgmodern.sfd2
-rw-r--r--support/gregoriotex/fonts/sources/simplify.py2
-rw-r--r--support/gregoriotex/fonts/sources/squarize.py37
-rw-r--r--support/gregoriotex/fonts/sources/stemsschemas.py2
-rw-r--r--support/gregoriotex/fonts/truetype/greciliae-hole.ttfbin1105828 -> 1105848 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/greciliae-hollow.ttfbin1809560 -> 1832636 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/greciliae-op-hole.ttfbin1105824 -> 1105844 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttfbin1847248 -> 1870292 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/greciliae-op.ttfbin1130264 -> 1134608 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/greciliae.ttfbin1092516 -> 1096860 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/greextra.ttfbin24760 -> 24760 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/gregall.ttfbin159472 -> 159476 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/grelaon.ttfbin187528 -> 187532 bytes
-rw-r--r--support/gregoriotex/fonts/truetype/gresgmodern.ttfbin203284 -> 203280 bytes
-rw-r--r--support/gregoriotex/tex/lualatex/gregoriosyms.sty10
-rw-r--r--support/gregoriotex/tex/lualatex/gregoriotex.sty17
-rw-r--r--support/gregoriotex/tex/luatex/gregorio-vowels.dat2
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-chars.tex15
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-common.tex25
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-gsp-default.tex (renamed from support/gregoriotex/tex/luatex/gsp-default.tex)319
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-main.tex259
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-nabc.lua4
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-nabc.tex4
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-signs.lua36
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-signs.tex191
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-spaces.tex289
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-syllable.tex227
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-symbols.lua4
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex-symbols.tex4
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex.lua76
-rw-r--r--support/gregoriotex/tex/luatex/gregoriotex.tex7
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--systems/win32/w32tex/ChangeLog16
-rw-r--r--timestamp2
-rw-r--r--web/c_cpp/cweb/Makefile11
-rw-r--r--web/c_cpp/cweb/README21
-rw-r--r--web/c_cpp/cweb/comm-amiga.ch8
-rw-r--r--web/c_cpp/cweb/comm-bs.ch210
-rw-r--r--web/c_cpp/cweb/comm-mac.ch73
-rw-r--r--web/c_cpp/cweb/comm-os2.ch16
-rw-r--r--web/c_cpp/cweb/comm-pc.ch22
-rw-r--r--web/c_cpp/cweb/comm-ql.ch257
-rw-r--r--web/c_cpp/cweb/comm-vms.ch43
-rw-r--r--web/c_cpp/cweb/comm-w32.ch50
-rw-r--r--web/c_cpp/cweb/common.c1059
-rw-r--r--web/c_cpp/cweb/common.h202
-rw-r--r--web/c_cpp/cweb/common.w677
-rw-r--r--web/c_cpp/cweb/ctang-bs.ch124
-rw-r--r--web/c_cpp/cweb/ctang-pc.ch12
-rw-r--r--web/c_cpp/cweb/ctang-ql.ch8
-rw-r--r--web/c_cpp/cweb/ctang-vms.ch34
-rw-r--r--web/c_cpp/cweb/ctang-w32.ch62
-rw-r--r--web/c_cpp/cweb/ctangle.c1123
-rw-r--r--web/c_cpp/cweb/ctangle.w536
-rw-r--r--web/c_cpp/cweb/cweav-bs.ch178
-rw-r--r--web/c_cpp/cweb/cweav-pc.ch19
-rw-r--r--web/c_cpp/cweb/cweav-ql.ch8
-rw-r--r--web/c_cpp/cweb/cweav-vms.ch35
-rw-r--r--web/c_cpp/cweb/cweav-w32.ch54
-rw-r--r--web/c_cpp/cweb/cweave.w1456
-rw-r--r--web/c_cpp/cweb/cweb.122
-rw-r--r--web/c_cpp/cweb/cwebmac.tex19
-rw-r--r--web/c_cpp/cweb/cwebman.tex243
-rw-r--r--web/pwebmac/README.md6
-rw-r--r--web/pwebmac/index.md2
-rwxr-xr-xweb/pwebmac/makeall14
-rw-r--r--web/pwebmac/trapman.ch23
-rw-r--r--web/pwebmac/webman.ch198
160 files changed, 30647 insertions, 16059 deletions
diff --git a/CTAN.sites b/CTAN.sites
index 209de7d51f..3e4a898dd1 100644
--- a/CTAN.sites
+++ b/CTAN.sites
@@ -77,6 +77,9 @@ by country):
mirrors.sjtug.sjtu.edu.cn (China)
URL: https://mirrors.sjtug.sjtu.edu.cn/ctan/
+ mirrors.sustech.edu.cn (China)
+ URL: https://mirrors.sustech.edu.cn/CTAN/
+
mirrors.tuna.tsinghua.edu.cn (China)
URL: rsync://mirrors.tuna.tsinghua.edu.cn/CTAN/
URL: https://mirrors.tuna.tsinghua.edu.cn/CTAN/
diff --git a/FILES.byname b/FILES.byname
index 1be537fafe..56a6998915 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5087,7 +5087,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2021/02/28 | 170051 | FILES.last07days
+2021/03/01 | 184536 | FILES.last07days
2020/08/14 | 104065 | fonts/academicons/academicons.pdf
2020/08/14 | 17247 | fonts/academicons/academicons.sty
2020/08/14 | 6546 | fonts/academicons/academicons.tex
@@ -143540,6 +143540,17 @@
2016/01/15 | 40171 | graphics/pgf/contrib/tkz-orm/tkz-orm.sty
2016/01/15 | 41179 | graphics/pgf/contrib/tkz-orm/tkz-orm.tex
2016/01/16 | 437279 | graphics/pgf/contrib/tkz-orm.zip
+2021/03/01 | 945 | graphics/pgf/contrib/tzplot/README.txt
+2021/03/01 | 4583 | graphics/pgf/contrib/tzplot/tzplot-doc-A-v1.0.tex
+2021/03/01 | 59027 | graphics/pgf/contrib/tzplot/tzplot-doc-B-v1.0.tex
+2021/03/01 | 117453 | graphics/pgf/contrib/tzplot/tzplot-doc-C-v1.0.tex
+2021/03/01 | 52204 | graphics/pgf/contrib/tzplot/tzplot-doc-D-v1.0.tex
+2021/03/01 | 808794 | graphics/pgf/contrib/tzplot/tzplot-doc.pdf
+2021/03/01 | 11937 | graphics/pgf/contrib/tzplot/tzplot-doc.tex
+2017/09/25 | 635 | graphics/pgf/contrib/tzplot/tzplot.ist
+2021/02/28 | 948 | graphics/pgf/contrib/tzplot/tzplot-oblivoirpartstyle.tex
+2021/03/01 | 111083 | graphics/pgf/contrib/tzplot/tzplot.sty
+2021/03/01 | 862125 | graphics/pgf/contrib/tzplot.zip
2020/10/16 | 689 | graphics/pgf/contrib/utfsym/doc/symbole.tex
2020/10/22 | 3582044 | graphics/pgf/contrib/utfsym/doc/utfsym.pdf
2020/10/22 | 4305 | graphics/pgf/contrib/utfsym/doc/utfsym.tex
@@ -172157,7 +172168,7 @@
2010/03/26 | 732372 | install/macros/latex/contrib/mattens.tds.zip
2013/07/01 | 1898068 | install/macros/latex/contrib/mdframed.tds.zip
2021/01/26 | 162867 | install/macros/latex/contrib/media4svg.tds.zip
-2021/01/25 | 7437469 | install/macros/latex/contrib/media9.tds.zip
+2021/03/01 | 7437892 | install/macros/latex/contrib/media9.tds.zip
2020/10/04 | 3618140 | install/macros/latex/contrib/memoir.tds.zip
2020/08/06 | 24409080 | install/macros/latex/contrib/mercatormap.tds.zip
2017/11/14 | 704736 | install/macros/latex/contrib/mfirstuc.tds.zip
@@ -172342,7 +172353,7 @@
2012/05/08 | 180596 | install/support/ctanupload.tds.zip
2007/03/17 | 12449 | install/support/ctanWeb/install_test.tds.zip
2007/03/21 | 12401 | install/support/ctanWeb/jhtest.tds.zip
-2019/04/06 | 14256356 | install/support/gregoriotex.tds.zip
+2021/03/01 | 23366196 | install/support/gregoriotex.tds.zip
2019/01/21 | 745849 | install/support/m-tx.tds.zip
2015/12/31 | 575855 | install/support/pmxchords.tds.zip
2020/09/28 | 171126 | install/support/texdef.tds.zip
@@ -183759,11 +183770,11 @@
1992/02/08 | 8251 | language/telugu/tlxlate.tex
1992/02/08 | 43 | language/telugu/VERSION
2019/06/09 | 155793 | language/telugu.zip
-2019/07/04 | 1152 | language/thai/thaispec/README.md
-2019/07/04 | 22331 | language/thai/thaispec/thaispec.dtx
-2019/07/04 | 906 | language/thai/thaispec/thaispec.ins
-2019/07/04 | 84199 | language/thai/thaispec/thaispec.pdf
-2019/07/10 | 89106 | language/thai/thaispec.zip
+2019/12/23 | 1152 | language/thai/thaispec/README.md
+2021/03/01 | 23387 | language/thai/thaispec/thaispec.dtx
+2021/03/01 | 905 | language/thai/thaispec/thaispec.ins
+2021/03/01 | 88377 | language/thai/thaispec/thaispec.pdf
+2021/03/01 | 93537 | language/thai/thaispec.zip
2002/06/30 | 17982 | language/tibetan/ctib/COPYING
2002/06/30 | 38808 | language/tibetan/ctib/doc/ctib4tex.dvi
2002/06/30 | 380462 | language/tibetan/ctib/doc/ctib4tex.pdf
@@ -188389,27 +188400,24 @@
1998/04/09 | 1265 | macros/latex/contrib/a5comb/a5comb.sty
2010/02/13 | 665 | macros/latex/contrib/a5comb/a5comb.tex
2010/02/13 | 92624 | macros/latex/contrib/a5comb.zip
-2019/08/07 | 36130 | macros/latex/contrib/aastex/aasjournal.bst
-2019/06/21 | 113610 | macros/latex/contrib/aastex/aassymbols.pdf
-2019/06/21 | 21262 | macros/latex/contrib/aastex/aassymbols.tex
-2019/08/07 | 223700 | macros/latex/contrib/aastex/aastex63.cls
-2019/06/21 | 14792 | macros/latex/contrib/aastex/cost.pdf
-2019/06/21 | 345994 | macros/latex/contrib/aastex/f4.pdf
-2019/06/21 | 173136 | macros/latex/contrib/aastex/f5.pdf
-2019/06/21 | 15435 | macros/latex/contrib/aastex/HV_Cet.pdf
-2019/06/21 | 71431 | macros/latex/contrib/aastex/interactive.tar.gz
-2019/06/21 | 20541 | macros/latex/contrib/aastex/KT_Eri.pdf
-2019/06/21 | 13810 | macros/latex/contrib/aastex/LMC_2009.pdf
-2019/06/21 | 4172 | macros/latex/contrib/aastex/natbib.tex
-2019/06/21 | 27604 | macros/latex/contrib/aastex/orcid-ID.png
-2019/08/07 | 3372 | macros/latex/contrib/aastex/README
-2019/06/21 | 14216 | macros/latex/contrib/aastex/RS_Oph.pdf
-2019/06/21 | 9867 | macros/latex/contrib/aastex/sample63.bib
-2019/07/10 | 1039571 | macros/latex/contrib/aastex/sample63.pdf
-2019/06/21 | 76530 | macros/latex/contrib/aastex/sample63.tex
-2019/06/21 | 14627 | macros/latex/contrib/aastex/U_Sco.pdf
-2019/06/21 | 13986 | macros/latex/contrib/aastex/V2491_Cyg.pdf
-2019/08/07 | 1908273 | macros/latex/contrib/aastex.zip
+2021/03/01 | 36130 | macros/latex/contrib/aastex/aasjournal.bst
+2021/03/01 | 231673 | macros/latex/contrib/aastex/aastex631.cls
+2021/02/26 | 14792 | macros/latex/contrib/aastex/cost.pdf
+2021/02/26 | 345994 | macros/latex/contrib/aastex/f4.pdf
+2021/02/26 | 173136 | macros/latex/contrib/aastex/f5.pdf
+2021/02/26 | 15435 | macros/latex/contrib/aastex/HV_Cet.pdf
+2021/02/26 | 71431 | macros/latex/contrib/aastex/interactive.tar.gz
+2021/02/26 | 20541 | macros/latex/contrib/aastex/KT_Eri.pdf
+2021/02/26 | 13810 | macros/latex/contrib/aastex/LMC_2009.pdf
+2021/02/26 | 27604 | macros/latex/contrib/aastex/orcid-ID.png
+2021/02/26 | 2497 | macros/latex/contrib/aastex/README
+2021/02/26 | 14216 | macros/latex/contrib/aastex/RS_Oph.pdf
+2021/02/26 | 13402 | macros/latex/contrib/aastex/sample631.bib
+2021/02/26 | 1049880 | macros/latex/contrib/aastex/sample631.pdf
+2021/02/26 | 78502 | macros/latex/contrib/aastex/sample631.tex
+2021/02/26 | 14627 | macros/latex/contrib/aastex/U_Sco.pdf
+2021/02/26 | 13986 | macros/latex/contrib/aastex/V2491_Cyg.pdf
+2021/03/01 | 1823817 | macros/latex/contrib/aastex.zip
2016/05/15 | 26993 | macros/latex/contrib/abc/abc.dtx
2016/05/15 | 1848 | macros/latex/contrib/abc/abc.ins
2016/05/15 | 279861 | macros/latex/contrib/abc/abc.pdf
@@ -188577,41 +188585,41 @@
2010/11/19 | 162908 | macros/latex/contrib/acroterm.zip
2020/01/07 | 4356 | macros/latex/contrib/acrotex/acrotex.ins
2020/01/06 | 10312 | macros/latex/contrib/acrotex/aeb-comment.sty
-2016/01/29 | 547 | macros/latex/contrib/acrotex/aeb.js
-2013/12/30 | 13070 | macros/latex/contrib/acrotex/contsolns.dtx
+2021/03/01 | 547 | macros/latex/contrib/acrotex/aeb.js
+2021/03/01 | 13070 | macros/latex/contrib/acrotex/contsolns.dtx
2018/12/12 | 107575 | macros/latex/contrib/acrotex/dljslib.dtx
-2014/08/19 | 2012 | macros/latex/contrib/acrotex/dljslib.ins
-2021/02/05 | 369266 | macros/latex/contrib/acrotex/doc/acrobat-in-workflow.pdf
-2021/02/04 | 9405 | macros/latex/contrib/acrotex/doc/acrobat-in-workflow.tex
-2021/02/20 | 2117711 | macros/latex/contrib/acrotex/doc/aeb_man.pdf
-2021/02/20 | 526482 | macros/latex/contrib/acrotex/doc/aeb_man.tex
+2021/03/01 | 2012 | macros/latex/contrib/acrotex/dljslib.ins
+2021/02/05 | 370603 | macros/latex/contrib/acrotex/doc/acrobat-in-workflow.pdf
+2021/03/01 | 9405 | macros/latex/contrib/acrotex/doc/acrobat-in-workflow.tex
+2021/03/01 | 2138054 | macros/latex/contrib/acrotex/doc/aeb_man.pdf
+2021/03/01 | 526839 | macros/latex/contrib/acrotex/doc/aeb_man.tex
2013/07/09 | 52670 | macros/latex/contrib/acrotex/doc/contsolns.pdf
2021/02/20 | 984871 | macros/latex/contrib/acrotex/doc/eformman.pdf
2021/02/20 | 189042 | macros/latex/contrib/acrotex/doc/eformman.tex
-2016/05/30 | 236764 | macros/latex/contrib/acrotex/doc/install_jsfiles.pdf
-2021/01/31 | 13105 | macros/latex/contrib/acrotex/doc/install_jsfiles.tex
+2016/05/30 | 237391 | macros/latex/contrib/acrotex/doc/install_jsfiles.pdf
+2021/03/01 | 13105 | macros/latex/contrib/acrotex/doc/install_jsfiles.tex
2020/12/25 | 234626 | macros/latex/contrib/acrotex/eforms.dtx
2018/12/12 | 2381 | macros/latex/contrib/acrotex/eforms.ins
-2021/02/15 | 245005 | macros/latex/contrib/acrotex/examples/jquiztst.pdf
-2021/02/13 | 10229 | macros/latex/contrib/acrotex/examples/jquiztst.tex
-2019/05/22 | 319897 | macros/latex/contrib/acrotex/examples/jtxttst.pdf
+2021/03/01 | 350239 | macros/latex/contrib/acrotex/examples/jquiztst.pdf
+2021/03/01 | 10230 | macros/latex/contrib/acrotex/examples/jquiztst.tex
+2019/05/22 | 320860 | macros/latex/contrib/acrotex/examples/jtxttst.pdf
2019/05/22 | 8488 | macros/latex/contrib/acrotex/examples/jtxttst.tex
-2019/12/22 | 1189 | macros/latex/contrib/acrotex/examples/README.md
+2021/03/01 | 1189 | macros/latex/contrib/acrotex/examples/README.md
2021/02/04 | 53316 | macros/latex/contrib/acrotex/examples/test_install.pdf
-2021/02/04 | 1448 | macros/latex/contrib/acrotex/examples/test_install.tex
-2021/02/12 | 485009 | macros/latex/contrib/acrotex/examples/webeqtst.pdf
+2021/03/01 | 1448 | macros/latex/contrib/acrotex/examples/test_install.tex
+2021/02/12 | 486934 | macros/latex/contrib/acrotex/examples/webeqtst.pdf
2021/02/12 | 13988 | macros/latex/contrib/acrotex/examples/webeqtst.tex
-2021/02/18 | 580409 | macros/latex/contrib/acrotex/exerquiz.dtx
-2021/01/22 | 3143 | macros/latex/contrib/acrotex/exerquiz.ins
+2021/03/01 | 581409 | macros/latex/contrib/acrotex/exerquiz.dtx
+2021/03/01 | 3143 | macros/latex/contrib/acrotex/exerquiz.ins
2021/02/08 | 123238 | macros/latex/contrib/acrotex/insdljs.dtx
2019/04/12 | 1966 | macros/latex/contrib/acrotex/insdljs.ins
-2021/02/20 | 4748 | macros/latex/contrib/acrotex/README.md
-2016/08/29 | 9854 | macros/latex/contrib/acrotex/taborder.dtx
-2009/09/04 | 1842 | macros/latex/contrib/acrotex/taborder.ins
-2019/10/25 | 362 | macros/latex/contrib/acrotex/web.cfg
-2021/02/08 | 209809 | macros/latex/contrib/acrotex/web.dtx
-2018/07/14 | 2338 | macros/latex/contrib/acrotex/web.ins
-2021/02/20 | 3861594 | macros/latex/contrib/acrotex.zip
+2021/03/01 | 4870 | macros/latex/contrib/acrotex/README.md
+2021/03/01 | 9854 | macros/latex/contrib/acrotex/taborder.dtx
+2021/03/01 | 1842 | macros/latex/contrib/acrotex/taborder.ins
+2021/03/01 | 362 | macros/latex/contrib/acrotex/web.cfg
+2021/03/01 | 207192 | macros/latex/contrib/acrotex/web.dtx
+2021/03/01 | 2338 | macros/latex/contrib/acrotex/web.ins
+2021/03/01 | 3878872 | macros/latex/contrib/acrotex.zip
2021/01/16 | 1382570 | macros/latex/contrib/acro.zip
2019/06/13 | 26799 | macros/latex/contrib/actuarialangle/actuarialangle.dtx
2019/06/13 | 120479 | macros/latex/contrib/actuarialangle/actuarialangle.pdf
@@ -189295,14 +189303,14 @@
2020/01/13 | 6908 | macros/latex/contrib/apa6/samples/longsample.tex
2020/01/13 | 6249 | macros/latex/contrib/apa6/samples/shortsample.tex
2020/01/13 | 627172 | macros/latex/contrib/apa6.zip
-2020/12/05 | 146091 | macros/latex/contrib/apa7/apa7.dtx
-2020/12/06 | 6535 | macros/latex/contrib/apa7/apa7.ins
-2020/12/06 | 529393 | macros/latex/contrib/apa7/apa7.pdf
-2020/12/06 | 1278 | macros/latex/contrib/apa7/README.txt
+2021/03/01 | 146210 | macros/latex/contrib/apa7/apa7.dtx
+2021/03/01 | 6535 | macros/latex/contrib/apa7/apa7.ins
+2021/03/01 | 530598 | macros/latex/contrib/apa7/apa7.pdf
+2021/03/01 | 1278 | macros/latex/contrib/apa7/README.txt
2020/06/20 | 5068 | macros/latex/contrib/apa7/samples/Figure1.pdf
-2020/12/06 | 196742 | macros/latex/contrib/apa7/samples/longsample.pdf
-2020/12/06 | 65283 | macros/latex/contrib/apa7/samples/shortsample.pdf
-2020/12/06 | 829685 | macros/latex/contrib/apa7.zip
+2021/03/01 | 196588 | macros/latex/contrib/apa7/samples/longsample.pdf
+2021/03/01 | 65352 | macros/latex/contrib/apa7/samples/shortsample.pdf
+2021/03/01 | 830527 | macros/latex/contrib/apa7.zip
2008/12/09 | 58148 | macros/latex/contrib/apa/apa.cls
2008/12/09 | 37023 | macros/latex/contrib/apa/apacls.html
2008/12/23 | 15056 | macros/latex/contrib/apa/apacls.txt
@@ -196954,55 +196962,57 @@
2011/06/05 | 1965 | macros/latex/contrib/eqell/eqell.tex
2011/05/29 | 503 | macros/latex/contrib/eqell/README
2011/06/08 | 183039 | macros/latex/contrib/eqell.zip
-2021/01/22 | 5931 | macros/latex/contrib/eqexam/aebrandom.def
-2021/01/23 | 671573 | macros/latex/contrib/eqexam/doc/eqexamman.pdf
-2021/01/23 | 227607 | macros/latex/contrib/eqexam/doc/eqexamman.tex
-2021/01/23 | 745675 | macros/latex/contrib/eqexam/doc/eqexam.pdf
+2021/03/01 | 5931 | macros/latex/contrib/eqexam/aebrandom.def
+2021/03/01 | 768714 | macros/latex/contrib/eqexam/doc/eqexamman.pdf
+2021/03/01 | 230100 | macros/latex/contrib/eqexam/doc/eqexamman.tex
2020/01/07 | 668610 | macros/latex/contrib/eqexam/doc/fortextbook/fortextbook.pdf
2016/01/19 | 718935 | macros/latex/contrib/eqexam/doc/fortextbook.zip
-2010/06/18 | 334 | macros/latex/contrib/eqexam/eqecus.opt
-2021/01/22 | 65967 | macros/latex/contrib/eqexam/eqexam.def
-2021/01/23 | 413756 | macros/latex/contrib/eqexam/eqexam.dtx
+2021/03/01 | 334 | macros/latex/contrib/eqexam/eqecus.opt
+2021/03/01 | 65961 | macros/latex/contrib/eqexam/eqexam.def
+2021/03/01 | 416317 | macros/latex/contrib/eqexam/eqexam.dtx
2020/03/20 | 2139 | macros/latex/contrib/eqexam/eqexam.ins
2016/07/16 | 10197 | macros/latex/contrib/eqexam/examples/aeb-comment.sty
2011/04/08 | 252067 | macros/latex/contrib/eqexam/examples/coorplane.eps
2011/04/08 | 32512 | macros/latex/contrib/eqexam/examples/coorplane.pdf
2015/04/28 | 24092 | macros/latex/contrib/eqexam/examples/eqex_solnsonly.pdf
-2015/04/28 | 3327 | macros/latex/contrib/eqexam/examples/eqex_solnsonly.tex
-2005/02/04 | 118 | macros/latex/contrib/eqexam/examples/fig1.bb
-2000/05/02 | 831714 | macros/latex/contrib/eqexam/examples/fig1.eps
+2021/03/01 | 3327 | macros/latex/contrib/eqexam/examples/eqex_solnsonly.tex
+2021/03/01 | 118 | macros/latex/contrib/eqexam/examples/fig1.bb
+2000/05/02 | 834475 | macros/latex/contrib/eqexam/examples/fig1.eps
2005/02/04 | 33479 | macros/latex/contrib/eqexam/examples/fig1.jpg
2021/01/23 | 11038 | macros/latex/contrib/eqexam/examples/fig1.pdf
2018/01/18 | 28355 | macros/latex/contrib/eqexam/examples/flextended-opt.pdf
-2018/01/18 | 2966 | macros/latex/contrib/eqexam/examples/flextended-opt.tex
-2011/04/08 | 212797 | macros/latex/contrib/eqexam/examples/graph.eps
+2021/03/01 | 2966 | macros/latex/contrib/eqexam/examples/flextended-opt.tex
+2011/04/08 | 221939 | macros/latex/contrib/eqexam/examples/graph.eps
2011/04/08 | 27764 | macros/latex/contrib/eqexam/examples/graph.pdf
2015/04/29 | 31305 | macros/latex/contrib/eqexam/examples/hw01.pdf
-2015/04/29 | 6210 | macros/latex/contrib/eqexam/examples/hw01.tex
+2021/03/01 | 6210 | macros/latex/contrib/eqexam/examples/hw01.tex
2015/05/02 | 32852 | macros/latex/contrib/eqexam/examples/hw02.pdf
-2015/05/02 | 4559 | macros/latex/contrib/eqexam/examples/hw02.tex
+2021/03/01 | 4559 | macros/latex/contrib/eqexam/examples/hw02.tex
2015/04/29 | 21745 | macros/latex/contrib/eqexam/examples/hw03.pdf
-2018/01/18 | 1294 | macros/latex/contrib/eqexam/examples/hw03.tex
-2005/02/05 | 396 | macros/latex/contrib/eqexam/examples/hw.cfg
+2021/03/01 | 1294 | macros/latex/contrib/eqexam/examples/hw03.tex
+2021/03/01 | 396 | macros/latex/contrib/eqexam/examples/hw.cfg
+2021/03/01 | 396 | macros/latex/contrib/eqexam/examples/hw.cfg.txt
2015/04/29 | 22192 | macros/latex/contrib/eqexam/examples/markqs.pdf
-2015/04/29 | 3544 | macros/latex/contrib/eqexam/examples/markqs.tex
-2018/12/07 | 3548 | macros/latex/contrib/eqexam/examples/quiz01.tex
+2021/03/01 | 3544 | macros/latex/contrib/eqexam/examples/markqs.tex
+2017/10/28 | 33181 | macros/latex/contrib/eqexam/examples/quiz01.pdf
+2021/03/01 | 3548 | macros/latex/contrib/eqexam/examples/quiz01.tex
2015/04/30 | 34997 | macros/latex/contrib/eqexam/examples/quiz02.pdf
-2015/04/29 | 3899 | macros/latex/contrib/eqexam/examples/quiz02.tex
-2005/01/23 | 242 | macros/latex/contrib/eqexam/examples/quiz.cfg
-2018/12/12 | 5457 | macros/latex/contrib/eqexam/examples/selectversion_tst.tex
+2021/03/01 | 3899 | macros/latex/contrib/eqexam/examples/quiz02.tex
+2021/03/01 | 242 | macros/latex/contrib/eqexam/examples/quiz.cfg
+2021/03/01 | 242 | macros/latex/contrib/eqexam/examples/quiz.cfg.txt
+2017/10/28 | 33335 | macros/latex/contrib/eqexam/examples/selectversion_tst.pdf
+2021/03/01 | 5457 | macros/latex/contrib/eqexam/examples/selectversion_tst.tex
2021/01/23 | 116251 | macros/latex/contrib/eqexam/examples/test01.pdf
-2021/01/23 | 12202 | macros/latex/contrib/eqexam/examples/test01.tex
+2021/03/01 | 12202 | macros/latex/contrib/eqexam/examples/test01.tex
2015/04/29 | 216104 | macros/latex/contrib/eqexam/examples/test02.pdf
-2015/04/29 | 10273 | macros/latex/contrib/eqexam/examples/test02.tex
+2021/03/01 | 10273 | macros/latex/contrib/eqexam/examples/test02.tex
2021/01/15 | 161999 | macros/latex/contrib/eqexam/examples/test03.pdf
-2015/04/29 | 21131 | macros/latex/contrib/eqexam/examples/test03.tex
-2021/01/23 | 1985 | macros/latex/contrib/eqexam/examples/test_matching.tex
-2013/10/23 | 15984 | macros/latex/contrib/eqexam/examples/tex_survey_h.tex
-2010/01/10 | 15205 | macros/latex/contrib/eqexam/examples/tex_survey.tex
-2021/01/23 | 4160 | macros/latex/contrib/eqexam/README.md
-2005/02/05 | 6195 | macros/latex/contrib/eqexam/script/eqAttach.asp
-2021/01/23 | 3707422 | macros/latex/contrib/eqexam.zip
+2021/03/01 | 21131 | macros/latex/contrib/eqexam/examples/test03.tex
+2021/03/01 | 15984 | macros/latex/contrib/eqexam/examples/tex_survey_h.tex
+2021/03/01 | 15205 | macros/latex/contrib/eqexam/examples/tex_survey.tex
+2021/03/01 | 4307 | macros/latex/contrib/eqexam/README.md
+2021/03/01 | 6195 | macros/latex/contrib/eqexam/script/eqAttach.asp
+2021/03/01 | 3093964 | macros/latex/contrib/eqexam.zip
2019/07/01 | 106451 | macros/latex/contrib/eqexpl/eqexpl.pdf
2019/07/01 | 2142 | macros/latex/contrib/eqexpl/eqexpl.sty
2019/07/01 | 6393 | macros/latex/contrib/eqexpl/eqexpl.tex
@@ -204004,7 +204014,7 @@
2021/01/25 | 25724 | macros/latex/contrib/media4svg/media4svg.sty
2021/01/26 | 5536 | macros/latex/contrib/media4svg/README.md
2021/01/26 | 161371 | macros/latex/contrib/media4svg.zip
-2021/01/25 | 14524 | macros/latex/contrib/media9/ChangeLog
+2021/03/01 | 14650 | macros/latex/contrib/media9/ChangeLog
2020/03/11 | 7152 | macros/latex/contrib/media9/doc/files/3dsystem.fig
2020/03/11 | 5989 | macros/latex/contrib/media9/doc/files/3dsystem.pdf
2020/03/11 | 1550 | macros/latex/contrib/media9/doc/files/3dsystem.tex
@@ -204032,14 +204042,14 @@
2020/03/11 | 1268 | macros/latex/contrib/media9/doc/files/malte.js
2020/03/11 | 105696 | macros/latex/contrib/media9/doc/files/malte.u3d
2020/03/11 | 20206 | macros/latex/contrib/media9/doc/files/random.mp4
-2021/01/25 | 3737599 | macros/latex/contrib/media9/doc/media9.pdf
-2021/01/25 | 93487 | macros/latex/contrib/media9/doc/media9.tex
+2021/03/01 | 3739129 | macros/latex/contrib/media9/doc/media9.pdf
+2021/02/03 | 93487 | macros/latex/contrib/media9/doc/media9.tex
2020/03/11 | 29121 | macros/latex/contrib/media9/javascript/3Dmenu.js
2020/03/11 | 972 | macros/latex/contrib/media9/javascript/3Dspintool.js
2020/03/11 | 3307 | macros/latex/contrib/media9/javascript/animation.js
2020/03/11 | 2561 | macros/latex/contrib/media9/javascript/asylabels.js
-2021/01/25 | 79651 | macros/latex/contrib/media9/media9.sty
-2021/01/25 | 49316 | macros/latex/contrib/media9/pdfbase.sty
+2021/03/01 | 79671 | macros/latex/contrib/media9/media9.sty
+2021/03/01 | 49376 | macros/latex/contrib/media9/pdfbase.sty
2020/03/11 | 14420 | macros/latex/contrib/media9/players/APlayer9.mxml
2020/03/11 | 206165 | macros/latex/contrib/media9/players/APlayer9.swf
2020/03/11 | 15323 | macros/latex/contrib/media9/players/APlayer.mxml
@@ -204055,7 +204065,7 @@
2020/03/11 | 12571 | macros/latex/contrib/media9/players/VPlayer.mxml
2020/03/11 | 483412 | macros/latex/contrib/media9/players/VPlayer.swf
2020/03/11 | 2053 | macros/latex/contrib/media9/README.md
-2021/01/25 | 7432179 | macros/latex/contrib/media9.zip
+2021/03/01 | 7432602 | 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
@@ -208549,11 +208559,11 @@
2006/10/28 | 33540 | macros/latex/contrib/recipe/sample.pdf
1996/11/22 | 1725 | macros/latex/contrib/recipe/sample.tex
2006/10/28 | 26363 | macros/latex/contrib/recipe.zip
-2020/06/05 | 4705 | macros/latex/contrib/rec-thy/README
-2020/06/05 | 113253 | macros/latex/contrib/rec-thy/rec-thy.pdf
-2020/06/05 | 70778 | macros/latex/contrib/rec-thy/rec-thy.sty
-2020/06/05 | 53597 | macros/latex/contrib/rec-thy/rec-thy.tex
-2020/06/05 | 129527 | macros/latex/contrib/rec-thy.zip
+2021/03/01 | 5206 | macros/latex/contrib/rec-thy/README
+2021/03/01 | 121041 | macros/latex/contrib/rec-thy/rec-thy.pdf
+2021/03/01 | 72595 | macros/latex/contrib/rec-thy/rec-thy.sty
+2021/03/01 | 54894 | macros/latex/contrib/rec-thy/rec-thy.tex
+2021/03/01 | 132621 | macros/latex/contrib/rec-thy.zip
2002/01/08 | 3262 | macros/latex/contrib/rectopma/rectopma.sty
2010/10/02 | 114178 | macros/latex/contrib/rectopma/TestTitle.pdf
2002/01/08 | 2035 | macros/latex/contrib/rectopma/TestTitle.tex
@@ -230557,15 +230567,15 @@
2020/05/16 | 333535 | macros/xetex/latex/xepersian/xepersian.dtx
2020/05/17 | 755776 | macros/xetex/latex/xepersian/xepersian.pdf
2020/05/17 | 1102273 | macros/xetex/latex/xepersian.zip
-2016/01/02 | 66609 | macros/xetex/latex/xespotcolor/jatestspot.pdf
-2015/03/22 | 1530 | macros/xetex/latex/xespotcolor/jatestspot.tex
-2016/03/22 | 567 | macros/xetex/latex/xespotcolor/README
-2016/03/22 | 4841 | macros/xetex/latex/xespotcolor/spotcolor-test.pdf
-2016/03/22 | 1410 | macros/xetex/latex/xespotcolor/spotcolor-test.tex
-2016/03/22 | 19484 | macros/xetex/latex/xespotcolor/xespotcolor.dtx
-2016/03/22 | 1553 | macros/xetex/latex/xespotcolor/xespotcolor.ins
-2016/03/22 | 76507 | macros/xetex/latex/xespotcolor/xespotcolor.pdf
-2016/03/22 | 138633 | macros/xetex/latex/xespotcolor.zip
+2021/03/01 | 74037 | macros/xetex/latex/xespotcolor/jatestspot.pdf
+2016/08/05 | 1530 | macros/xetex/latex/xespotcolor/jatestspot.tex
+2021/03/01 | 738 | macros/xetex/latex/xespotcolor/README
+2021/03/01 | 5738 | macros/xetex/latex/xespotcolor/spotcolor-test.pdf
+2016/08/05 | 1410 | macros/xetex/latex/xespotcolor/spotcolor-test.tex
+2021/03/01 | 19766 | macros/xetex/latex/xespotcolor/xespotcolor.dtx
+2021/03/01 | 1553 | macros/xetex/latex/xespotcolor/xespotcolor.ins
+2021/03/01 | 77616 | macros/xetex/latex/xespotcolor/xespotcolor.pdf
+2021/03/01 | 147818 | macros/xetex/latex/xespotcolor.zip
2018/02/16 | 3125 | macros/xetex/latex/xgreek/README
2018/02/16 | 42951 | macros/xetex/latex/xgreek/xgreek.dtx
2018/02/16 | 1542 | macros/xetex/latex/xgreek/xgreek.ins
@@ -255769,72 +255779,73 @@
1999/02/08 | 652 | support/grapher/README.grapher
1999/02/08 | 6124 | support/grapher/test.tex
2007/12/07 | 48290 | support/grapher.zip
-2019/04/06 | 81002 | support/gregoriotex/CHANGELOG.md
-2019/04/06 | 5384 | support/gregoriotex/CONTRIBUTING.md
-2019/04/06 | 2038 | support/gregoriotex/CONTRIBUTORS.md
-2019/04/06 | 36483 | support/gregoriotex/COPYING.md
-2019/03/30 | 3845 | support/gregoriotex/doc/Appendix_Font_Tables.tex
-2019/03/30 | 56977 | support/gregoriotex/doc/Command_Index_gregorio.tex
-2019/03/30 | 130306 | support/gregoriotex/doc/Command_Index_internal.tex
-2019/04/06 | 97010 | support/gregoriotex/doc/Command_Index_User.tex
+2021/03/01 | 86382 | support/gregoriotex/CHANGELOG.md
+2021/03/01 | 5384 | support/gregoriotex/CONTRIBUTING.md
+2021/03/01 | 2038 | support/gregoriotex/CONTRIBUTORS.md
+2021/03/01 | 36483 | support/gregoriotex/COPYING.md
+2021/02/23 | 3845 | support/gregoriotex/doc/Appendix_Font_Tables.tex
+2021/02/23 | 62053 | support/gregoriotex/doc/Command_Index_gregorio.tex
+2021/02/23 | 130576 | support/gregoriotex/doc/Command_Index_internal.tex
+2021/02/23 | 99083 | support/gregoriotex/doc/Command_Index_User.tex
2018/08/11 | 2935 | support/gregoriotex/doc/doc_README.md
-2018/04/23 | 1297 | support/gregoriotex/doc/examples/FactusEst.gabc
-2018/04/23 | 1740 | support/gregoriotex/doc/examples/main-lualatex.tex
-2018/04/23 | 1255 | support/gregoriotex/doc/examples/PopulusSion.gabc
-2018/04/23 | 592 | support/gregoriotex/doc/factus.gabc
-2019/04/06 | 53796 | support/gregoriotex/doc/Gabc.tex
-2019/04/06 | 484381 | support/gregoriotex/doc/GregorioNabcRef.pdf
-2019/03/30 | 144942 | support/gregoriotex/doc/GregorioNabcRef.tex
-2019/03/30 | 19523 | support/gregoriotex/doc/GregorioRef.lua
-2019/04/06 | 807105 | support/gregoriotex/doc/GregorioRef.pdf
-2019/04/06 | 8186 | support/gregoriotex/doc/GregorioRef.tex
-2018/04/23 | 606 | support/gregoriotex/doc/omnes.gabc
+2018/04/24 | 150 | support/gregoriotex/doc/examples/debugging.tex
+2018/04/24 | 1297 | support/gregoriotex/doc/examples/FactusEst.gabc
+2021/02/11 | 1438 | support/gregoriotex/doc/examples/main-lualatex.tex
+2018/04/24 | 1255 | support/gregoriotex/doc/examples/PopulusSion.gabc
+2018/04/24 | 592 | support/gregoriotex/doc/factus.gabc
+2021/02/26 | 54003 | support/gregoriotex/doc/Gabc.tex
+2021/02/26 | 484824 | support/gregoriotex/doc/GregorioNabcRef.pdf
+2021/02/23 | 144942 | support/gregoriotex/doc/GregorioNabcRef.tex
+2021/02/23 | 20061 | support/gregoriotex/doc/GregorioRef.lua
+2021/03/01 | 826346 | support/gregoriotex/doc/GregorioRef.pdf
+2021/02/23 | 8220 | support/gregoriotex/doc/GregorioRef.tex
+2021/02/23 | 26606 | support/gregoriotex/doc/gsp-sample.tex
+2018/04/24 | 606 | support/gregoriotex/doc/omnes.gabc
2018/08/11 | 102 | support/gregoriotex/doc/pitches2.gabc
2018/08/11 | 114 | support/gregoriotex/doc/pitches3.gabc
2018/08/11 | 123 | support/gregoriotex/doc/pitches4.gabc
2018/08/11 | 133 | support/gregoriotex/doc/pitches5.gabc
-2018/04/23 | 1206 | support/gregoriotex/doc/veni.gabc
-2019/03/30 | 2076 | support/gregoriotex/fonts/sources/convertsfdtottf.py
+2018/04/24 | 1206 | support/gregoriotex/doc/veni.gabc
+2021/02/23 | 2076 | support/gregoriotex/fonts/sources/convertsfdtottf.py
2018/08/11 | 5652 | support/gregoriotex/fonts/sources/fonts_README.md
-2019/03/30 | 145747 | support/gregoriotex/fonts/sources/greciliae-base.sfd
+2021/02/23 | 167545 | support/gregoriotex/fonts/sources/greciliae-base.sfd
2018/08/11 | 258212 | support/gregoriotex/fonts/sources/greextra.sfd
-2019/03/30 | 19158768 | support/gregoriotex/fonts/sources/gregall.sfd
-2019/03/30 | 13555440 | support/gregoriotex/fonts/sources/grelaon.sfd
-2019/03/30 | 1070662 | support/gregoriotex/fonts/sources/gresgmodern.sfd
-2019/03/30 | 2050 | support/gregoriotex/fonts/sources/simplify.py
-2019/04/06 | 125230 | support/gregoriotex/fonts/sources/squarize.py
-2019/03/30 | 10198 | support/gregoriotex/fonts/sources/stemsschemas.py
-2019/04/06 | 1105828 | support/gregoriotex/fonts/truetype/greciliae-hole.ttf
-2019/04/06 | 1809560 | support/gregoriotex/fonts/truetype/greciliae-hollow.ttf
-2019/04/06 | 1105824 | support/gregoriotex/fonts/truetype/greciliae-op-hole.ttf
-2019/04/06 | 1847248 | support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttf
-2019/04/06 | 1130264 | support/gregoriotex/fonts/truetype/greciliae-op.ttf
-2019/04/06 | 1092516 | support/gregoriotex/fonts/truetype/greciliae.ttf
-2019/04/06 | 24760 | support/gregoriotex/fonts/truetype/greextra.ttf
-2019/04/06 | 159472 | support/gregoriotex/fonts/truetype/gregall.ttf
-2019/04/06 | 187528 | support/gregoriotex/fonts/truetype/grelaon.ttf
-2019/04/06 | 203284 | support/gregoriotex/fonts/truetype/gresgmodern.ttf
-2019/04/06 | 644995 | support/gregoriotex/gregorio-5.2.1.zip
-2019/04/06 | 2405 | support/gregoriotex/README.md
-2019/04/06 | 2955 | support/gregoriotex/tex/lualatex/gregoriosyms.sty
-2019/04/06 | 6306 | support/gregoriotex/tex/lualatex/gregoriotex.sty
-2019/04/06 | 8215 | support/gregoriotex/tex/luatex/gregoriotex-chars.tex
-2019/04/06 | 3248 | support/gregoriotex/tex/luatex/gregoriotex-common.tex
-2019/04/06 | 52971 | support/gregoriotex/tex/luatex/gregoriotex.lua
-2019/04/06 | 69641 | support/gregoriotex/tex/luatex/gregoriotex-main.tex
-2019/04/06 | 18595 | support/gregoriotex/tex/luatex/gregoriotex-nabc.lua
-2019/04/06 | 2372 | support/gregoriotex/tex/luatex/gregoriotex-nabc.tex
-2019/04/06 | 22507 | support/gregoriotex/tex/luatex/gregoriotex-signs.lua
-2019/04/06 | 92584 | support/gregoriotex/tex/luatex/gregoriotex-signs.tex
-2019/04/06 | 97978 | support/gregoriotex/tex/luatex/gregoriotex-spaces.tex
-2019/04/06 | 63054 | support/gregoriotex/tex/luatex/gregoriotex-syllable.tex
-2019/04/06 | 2169 | support/gregoriotex/tex/luatex/gregoriotex-symbols.lua
-2019/04/06 | 8175 | support/gregoriotex/tex/luatex/gregoriotex-symbols.tex
-2019/04/06 | 5997 | support/gregoriotex/tex/luatex/gregoriotex.tex
-2019/03/30 | 4546 | support/gregoriotex/tex/luatex/gregorio-vowels.dat
-2019/03/30 | 24454 | support/gregoriotex/tex/luatex/gsp-default.tex
-2019/04/06 | 35981 | support/gregoriotex/UPGRADE.md
-2019/04/06 | 23984297 | support/gregoriotex.zip
+2021/02/23 | 19158768 | support/gregoriotex/fonts/sources/gregall.sfd
+2021/02/23 | 13555440 | support/gregoriotex/fonts/sources/grelaon.sfd
+2021/02/23 | 1070662 | support/gregoriotex/fonts/sources/gresgmodern.sfd
+2021/02/23 | 2050 | support/gregoriotex/fonts/sources/simplify.py
+2021/02/23 | 125981 | support/gregoriotex/fonts/sources/squarize.py
+2021/02/23 | 10198 | support/gregoriotex/fonts/sources/stemsschemas.py
+2021/02/26 | 1105848 | support/gregoriotex/fonts/truetype/greciliae-hole.ttf
+2021/02/26 | 1832636 | support/gregoriotex/fonts/truetype/greciliae-hollow.ttf
+2021/02/26 | 1105844 | support/gregoriotex/fonts/truetype/greciliae-op-hole.ttf
+2021/02/26 | 1870292 | support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttf
+2021/02/26 | 1134608 | support/gregoriotex/fonts/truetype/greciliae-op.ttf
+2021/02/26 | 1096860 | support/gregoriotex/fonts/truetype/greciliae.ttf
+2021/02/26 | 24760 | support/gregoriotex/fonts/truetype/greextra.ttf
+2021/02/26 | 159476 | support/gregoriotex/fonts/truetype/gregall.ttf
+2021/02/26 | 187532 | support/gregoriotex/fonts/truetype/grelaon.ttf
+2021/02/26 | 203280 | support/gregoriotex/fonts/truetype/gresgmodern.ttf
+2021/03/01 | 2396 | support/gregoriotex/README.md
+2021/02/23 | 2980 | support/gregoriotex/tex/lualatex/gregoriosyms.sty
+2021/02/23 | 6362 | support/gregoriotex/tex/lualatex/gregoriotex.sty
+2021/02/23 | 8845 | support/gregoriotex/tex/luatex/gregoriotex-chars.tex
+2021/02/23 | 3647 | support/gregoriotex/tex/luatex/gregoriotex-common.tex
+2021/02/23 | 25835 | support/gregoriotex/tex/luatex/gregoriotex-gsp-default.tex
+2021/02/23 | 53988 | support/gregoriotex/tex/luatex/gregoriotex.lua
+2021/02/23 | 72754 | support/gregoriotex/tex/luatex/gregoriotex-main.tex
+2021/02/23 | 18601 | support/gregoriotex/tex/luatex/gregoriotex-nabc.lua
+2021/02/23 | 2378 | support/gregoriotex/tex/luatex/gregoriotex-nabc.tex
+2021/02/23 | 23682 | support/gregoriotex/tex/luatex/gregoriotex-signs.lua
+2021/02/23 | 97925 | support/gregoriotex/tex/luatex/gregoriotex-signs.tex
+2021/02/23 | 99641 | support/gregoriotex/tex/luatex/gregoriotex-spaces.tex
+2021/02/23 | 63105 | support/gregoriotex/tex/luatex/gregoriotex-syllable.tex
+2021/02/23 | 2175 | support/gregoriotex/tex/luatex/gregoriotex-symbols.lua
+2021/02/23 | 8181 | support/gregoriotex/tex/luatex/gregoriotex-symbols.tex
+2021/02/23 | 6015 | support/gregoriotex/tex/luatex/gregoriotex.tex
+2021/02/23 | 4546 | support/gregoriotex/tex/luatex/gregorio-vowels.dat
+2021/03/01 | 36690 | support/gregoriotex/UPGRADE.md
+2021/03/01 | 23377974 | support/gregoriotex.zip
2001/06/09 | 11931 | support/gtex-letter/addressbook_vcard.py
2001/06/09 | 121 | support/gtex-letter/AUTHORS
2001/06/09 | 658 | support/gtex-letter/BUGS
@@ -280514,7 +280525,7 @@
2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2021/02/27 | 570879 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/03/01 | 570879 | 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
@@ -281704,9 +281715,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2021/02/20 | 39398 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2021/02/20 | 43338 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/02/27 | 207276 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2021/02/27 | 1257799 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/02/27 | 1175300 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/03/01 | 207213 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/03/01 | 1257031 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/03/01 | 1175929 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2021/02/20 | 13457 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2021/02/20 | 14333 | 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
@@ -281864,189 +281875,189 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2020/09/06 | 231669 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2021/02/27 | 570512 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/02/27 | 50741 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2021/02/27 | 56489 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/02/27 | 968618 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/02/27 | 1079140 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/02/27 | 29034 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2021/02/27 | 31332 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/02/27 | 29469 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2021/02/27 | 34298 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/02/27 | 50124 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2021/02/27 | 57597 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2021/02/27 | 85383 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2021/02/27 | 94686 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/02/27 | 67491 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/02/27 | 75405 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/02/27 | 27210 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/02/27 | 30877 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2021/02/27 | 330264 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2021/02/27 | 392431 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/02/27 | 32449 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2021/02/27 | 36664 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2021/02/27 | 51553 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/02/27 | 56580 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/02/27 | 239848 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2021/02/27 | 262020 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/02/27 | 179162 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/02/27 | 195508 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/02/27 | 52472 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2021/02/27 | 59093 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2021/02/27 | 21141 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/02/27 | 23295 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/02/27 | 461330 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/02/27 | 45645 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/02/27 | 51187 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/02/27 | 281631 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/02/27 | 321919 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2021/02/27 | 41108 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2021/02/27 | 45262 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2021/02/27 | 116980 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2021/02/27 | 131376 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2021/02/27 | 1285122 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/02/27 | 1418731 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2021/02/27 | 87634 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2021/02/27 | 99454 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/02/27 | 43063 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/02/27 | 47864 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/02/27 | 25143 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/02/27 | 28013 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/02/27 | 55791 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/02/27 | 62770 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/02/27 | 134916 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/02/27 | 152798 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2021/02/27 | 73176 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/02/27 | 77879 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/02/27 | 71823 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2021/02/27 | 80797 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2021/02/27 | 258574 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/02/27 | 295513 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2021/02/27 | 22036 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2021/02/27 | 25004 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/02/27 | 97357 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/02/27 | 112293 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2021/02/27 | 63810 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2021/02/27 | 72852 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/02/27 | 94599 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2021/02/27 | 114015 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/02/27 | 38093 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2021/02/27 | 42654 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/02/27 | 483678 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/02/27 | 567268 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/02/27 | 147128 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/02/27 | 159811 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2021/02/27 | 94808 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/02/27 | 109199 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2021/02/27 | 16324 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2021/02/27 | 17960 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/02/27 | 28139 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/02/27 | 30012 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2021/02/27 | 625363 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2021/02/27 | 680228 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/02/27 | 532132 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/02/27 | 596447 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2021/02/27 | 475714 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2021/02/27 | 511538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/02/27 | 94160 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2021/02/27 | 103270 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2021/02/27 | 1717695 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/02/27 | 1994175 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/02/27 | 67686 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/02/27 | 74141 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/02/27 | 27370 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/02/27 | 31532 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/02/27 | 7740 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/02/27 | 8773 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/02/27 | 195649 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2021/02/27 | 214120 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2021/02/27 | 250272 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/02/27 | 283998 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/02/27 | 97108 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2021/02/27 | 101679 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/02/27 | 60632 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2021/02/27 | 67865 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/02/27 | 124944 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2021/02/27 | 136449 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/02/27 | 146987 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2021/02/27 | 163654 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/02/27 | 199611 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/02/27 | 180172 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/02/27 | 67391 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2021/02/27 | 77425 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/02/27 | 31229 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/02/27 | 35060 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/02/27 | 38046 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/02/27 | 42595 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/02/27 | 42850 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/02/27 | 46830 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/02/27 | 45973 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/02/27 | 52413 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/02/27 | 193589 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2021/02/27 | 210793 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2021/02/27 | 35456 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2021/02/27 | 39654 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/02/27 | 747986 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/02/27 | 815057 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/02/27 | 198088 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2021/02/27 | 202488 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2021/02/27 | 208336 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/02/27 | 243491 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2021/02/27 | 78816 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/02/27 | 87673 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/02/27 | 1171600 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/02/27 | 1305354 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2021/02/27 | 20113 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/02/27 | 23872 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2021/02/27 | 31551 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/02/27 | 37243 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/02/27 | 63905 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/02/27 | 72193 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2021/02/27 | 43808 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/02/27 | 51969 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/02/27 | 1295170 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2021/02/27 | 1424111 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/02/27 | 42390 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2021/02/27 | 51807 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/02/27 | 56259 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2021/02/27 | 59839 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2021/02/27 | 25422 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/02/27 | 27448 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/02/27 | 16252 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/02/27 | 18097 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2021/02/27 | 63677 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2021/02/27 | 70143 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2021/02/27 | 153932 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/02/27 | 167875 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2021/02/27 | 56899 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/02/27 | 65321 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2021/02/27 | 98486 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/02/27 | 104764 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2021/02/27 | 2497571 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2021/02/27 | 2614820 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/02/27 | 55204 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/02/27 | 62611 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/02/27 | 33540 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/02/27 | 37240 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2021/02/27 | 27202 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/02/27 | 33133 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/02/27 | 65850 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/02/27 | 70348 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/02/27 | 311096 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/02/27 | 345261 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/02/27 | 55554 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2021/02/27 | 57064 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/02/27 | 583486 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2021/02/27 | 618684 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2021/02/27 | 39538 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2021/02/27 | 43384 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/02/27 | 207302 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/02/27 | 1257572 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/02/27 | 1175093 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/02/27 | 13476 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2021/02/27 | 14333 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/03/01 | 570512 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/03/01 | 50741 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/03/01 | 56489 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/03/01 | 968618 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/03/01 | 1079140 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/03/01 | 29033 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/03/01 | 31333 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/03/01 | 29468 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/03/01 | 34298 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/03/01 | 50124 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/03/01 | 57597 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/03/01 | 85384 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/03/01 | 94687 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/03/01 | 67490 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/03/01 | 75404 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/03/01 | 27209 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/03/01 | 30876 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/03/01 | 330264 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/03/01 | 392429 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/03/01 | 32447 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/03/01 | 36664 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/03/01 | 51557 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/03/01 | 56582 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/03/01 | 239849 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/03/01 | 262019 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/03/01 | 179161 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/03/01 | 195508 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/03/01 | 52471 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/03/01 | 59094 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/03/01 | 21138 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/03/01 | 23296 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/03/01 | 461332 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/03/01 | 45646 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/03/01 | 51187 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/03/01 | 281630 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/03/01 | 321919 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/03/01 | 41107 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/03/01 | 45263 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/03/01 | 116983 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/03/01 | 131375 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/03/01 | 1285123 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/03/01 | 1418731 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/03/01 | 87635 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/03/01 | 99454 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/03/01 | 43064 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/03/01 | 47865 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/03/01 | 25146 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/03/01 | 28013 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/03/01 | 55792 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/03/01 | 62770 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/03/01 | 134916 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/03/01 | 152799 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/03/01 | 73177 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/03/01 | 77879 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/03/01 | 71825 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/03/01 | 80797 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/03/01 | 258574 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/03/01 | 295514 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/03/01 | 22036 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/03/01 | 25005 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/03/01 | 97355 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/03/01 | 112293 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/03/01 | 63809 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/03/01 | 72853 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/03/01 | 94599 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/03/01 | 114015 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/03/01 | 38094 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/03/01 | 42654 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/03/01 | 483679 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/03/01 | 567268 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/03/01 | 147127 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/03/01 | 159812 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/03/01 | 94807 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/03/01 | 109199 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/03/01 | 16324 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/03/01 | 17960 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/03/01 | 28138 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/03/01 | 30012 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/03/01 | 625365 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/03/01 | 680230 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/03/01 | 532133 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/03/01 | 596445 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/03/01 | 475715 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/03/01 | 511538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/03/01 | 94160 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/03/01 | 103270 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/03/01 | 1717694 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/03/01 | 1994175 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/03/01 | 67684 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/03/01 | 74140 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/03/01 | 27369 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/03/01 | 31532 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/03/01 | 7739 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/03/01 | 8775 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/03/01 | 195649 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/03/01 | 214121 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/03/01 | 250273 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/03/01 | 283999 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/03/01 | 97108 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/03/01 | 101679 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/03/01 | 60633 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/03/01 | 67865 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/03/01 | 124942 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/03/01 | 136449 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/03/01 | 146984 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/03/01 | 163654 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/03/01 | 199612 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/03/01 | 180173 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/03/01 | 67392 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/03/01 | 77426 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/03/01 | 31228 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/03/01 | 35061 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/03/01 | 38047 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/03/01 | 42595 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/03/01 | 42851 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/03/01 | 46832 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/03/01 | 45973 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/03/01 | 52415 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/03/01 | 193589 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/03/01 | 210794 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/03/01 | 35457 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/03/01 | 39653 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/03/01 | 747987 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/03/01 | 815059 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/03/01 | 198090 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/03/01 | 202487 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/03/01 | 208336 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/03/01 | 243490 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/03/01 | 78815 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/03/01 | 87675 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/03/01 | 1171600 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/03/01 | 1305352 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/03/01 | 20116 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/03/01 | 23873 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/03/01 | 31552 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/03/01 | 37243 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/03/01 | 63907 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/03/01 | 72193 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/03/01 | 43807 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/03/01 | 51969 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/03/01 | 1295171 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/03/01 | 1424110 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/03/01 | 42391 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/03/01 | 51808 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/03/01 | 56261 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/03/01 | 59840 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/03/01 | 25422 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/03/01 | 27450 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/03/01 | 16252 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/03/01 | 18098 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/03/01 | 63677 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/03/01 | 70144 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/03/01 | 153933 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/03/01 | 167876 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/03/01 | 56900 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/03/01 | 65321 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/03/01 | 98489 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/03/01 | 104764 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/03/01 | 2497573 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/03/01 | 2614820 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/03/01 | 55204 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/03/01 | 62611 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/03/01 | 33540 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/03/01 | 37240 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/03/01 | 27203 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/03/01 | 33133 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/03/01 | 65850 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/03/01 | 70349 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/03/01 | 311097 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/03/01 | 345261 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/03/01 | 55553 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/03/01 | 57065 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/03/01 | 583486 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/03/01 | 618686 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/03/01 | 39537 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/03/01 | 43384 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/03/01 | 207246 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/03/01 | 1258034 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/03/01 | 1175214 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/03/01 | 13476 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/03/01 | 14334 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2021/02/27 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/03/01 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -282377,7 +282388,7 @@
2020/10/20 | 342254 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
2020/10/27 | 357822 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2021/02/27 | 875 | systems/win32/miktex/tm/packages/pr.ini
+2021/03/01 | 875 | 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
@@ -283552,9 +283563,9 @@
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.euc
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.sjis
2021/02/27 | 5459576 | systems/win32/w32tex/aleph-w32.tar.xz
-2021/02/26 | 66574640 | systems/win32/w32tex/biblatex-biber.tar.xz
+2021/02/28 | 66584344 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2021/02/27 | 792650 | systems/win32/w32tex/ChangeLog
+2021/02/28 | 793063 | 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
@@ -283562,7 +283573,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2021/02/27 | 23449004 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2021/02/24 | 145993724 | systems/win32/w32tex/context.tar.xz
+2021/02/28 | 146090776 | systems/win32/w32tex/context.tar.xz
2021/02/25 | 911360 | systems/win32/w32tex/cweb-w32.tar.xz
2020/09/21 | 6434128 | systems/win32/w32tex/datetime2.tar.xz
2021/02/19 | 845892 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -283574,11 +283585,11 @@
2021/02/19 | 17347936 | systems/win32/w32tex/gregorio-w32.tar.xz
2009/08/03 | 1072620 | systems/win32/w32tex/gtftex.zip
2021/02/27 | 1833764 | systems/win32/w32tex/jtex-w32.tar.xz
-2021/02/27 | 51040168 | systems/win32/w32tex/latex-dev.tar.xz
+2021/02/28 | 51204148 | systems/win32/w32tex/latex-dev.tar.xz
2021/02/27 | 34772772 | systems/win32/w32tex/latex.tar.xz
2021/02/19 | 1007832 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2021/02/10 | 404777228 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2021/02/27 | 33980584 | systems/win32/w32tex/ltxpkgs.tar.xz
+2021/02/28 | 33978796 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/02/27 | 3836924 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2021/02/27 | 3830768 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2021/02/27 | 3840488 | systems/win32/w32tex/luajittex-w32.tar.xz
@@ -283602,7 +283613,7 @@
2021/02/14 | 2826912 | systems/win32/w32tex/platex.tar.xz
2021/02/19 | 1725864 | systems/win32/w32tex/pmx.tar.xz
2021/02/19 | 1170948 | systems/win32/w32tex/pstoedit-w32.tar.xz
-2020/10/25 | 274208000 | systems/win32/w32tex/pstricks.tar.xz
+2021/02/28 | 274224984 | systems/win32/w32tex/pstricks.tar.xz
2021/02/19 | 517744 | systems/win32/w32tex/psutils-w32.tar.xz
2021/02/27 | 6675876 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2021/02/27 | 10648740 | systems/win32/w32tex/ptex-w32.tar.xz
@@ -283633,11 +283644,11 @@
2013/04/08 | 722652 | systems/win32/w32tex/utf.tar.xz
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2020/12/24 | 52763124 | systems/win32/w32tex/w32tex-src.tar.xz
-2021/02/27 | 99292276 | systems/win32/w32tex/web2c-lib.tar.xz
+2021/02/28 | 99281104 | systems/win32/w32tex/web2c-lib.tar.xz
2021/02/27 | 49053128 | systems/win32/w32tex/web2c-w32.tar.xz
2021/02/19 | 811524 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2020/08/20 | 22351540 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
-2021/02/24 | 2209876 | systems/win32/w32tex/win64/context-w64.tar.xz
+2021/02/28 | 2209968 | systems/win32/w32tex/win64/context-w64.tar.xz
2021/02/25 | 439952 | systems/win32/w32tex/win64/cweb-w64.tar.xz
2021/02/19 | 758536 | systems/win32/w32tex/win64/dvi2ps-w64.tar.xz
2021/02/19 | 448196 | systems/win32/w32tex/win64/dvi2tty-w64.tar.xz
@@ -283775,7 +283786,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2021/03/01 | 186 | timestamp
+2021/03/02 | 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
@@ -285285,7 +285296,7 @@
1998/02/10 | 39270 | web/c_cpp/cwebx/rules.w
1998/01/13 | 40083 | web/c_cpp/cwebx/sample.ps
2006/03/21 | 667661 | web/c_cpp/cwebx.zip
-2021/02/28 | 565801 | web/c_cpp/cweb.zip
+2021/03/01 | 565801 | web/c_cpp/cweb.zip
1993/02/22 | 37233 | web/clip/clip_ann.ps
1993/02/24 | 32049 | web/clip/clip_style_a.ps
1993/02/24 | 9202 | web/clip/clip_style_b.ps
@@ -287152,11 +287163,14 @@
2016/07/04 | 11025 | web/protex/ProTex.sty
2016/07/04 | 16066 | web/protex/README
2016/07/04 | 22227 | web/protex.zip
-2021/02/01 | 4390 | web/pwebmac/index.md
-2021/02/05 | 10674 | web/pwebmac/makeall
-2021/02/11 | 19485 | web/pwebmac/pwebmac.tex
-2021/02/11 | 1802 | web/pwebmac/README.md
-2021/02/11 | 14053 | web/pwebmac.zip
+2021/03/01 | 4421 | web/pwebmac/index.md
+2021/03/01 | 45284701 | web/pwebmac/knuth-lib.tar.gz
+2021/03/01 | 11113 | web/pwebmac/makeall
+2021/03/01 | 19485 | web/pwebmac/pwebmac.tex
+2021/03/01 | 1812 | web/pwebmac/README.md
+2021/03/01 | 233 | web/pwebmac/trapman.ch
+2021/03/01 | 6081 | web/pwebmac/webman.ch
+2021/03/01 | 45308299 | web/pwebmac.zip
1998/01/02 | 51534 | web/reduce/rweb/appl/integrator.web
1998/01/02 | 2014 | web/reduce/rweb/appl/liesuperconvert.web
1998/01/02 | 199508 | web/reduce/rweb/appl/liesuper.web
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 9decb053c6..a049ca247c 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 280f842636..cd804cafb6 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,12 +1,309 @@
+2021/03/01 | 99454 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/03/01 | 9854 | macros/latex/contrib/acrotex/taborder.dtx
+2021/03/01 | 98489 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/03/01 | 97355 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/03/01 | 97108 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/03/01 | 968618 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/03/01 | 94807 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/03/01 | 94687 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/03/01 | 945 | graphics/pgf/contrib/tzplot/README.txt
+2021/03/01 | 94599 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/03/01 | 94160 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/03/01 | 9405 | macros/latex/contrib/acrotex/doc/acrobat-in-workflow.tex
+2021/03/01 | 93537 | language/thai/thaispec.zip
+2021/03/01 | 905 | language/thai/thaispec/thaispec.ins
+2021/03/01 | 88377 | language/thai/thaispec/thaispec.pdf
+2021/03/01 | 8775 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/03/01 | 87675 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/03/01 | 87635 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/03/01 | 875 | systems/win32/miktex/tm/packages/pr.ini
+2021/03/01 | 86382 | support/gregoriotex/CHANGELOG.md
+2021/03/01 | 862125 | graphics/pgf/contrib/tzplot.zip
+2021/03/01 | 85384 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/03/01 | 830527 | macros/latex/contrib/apa7.zip
+2021/03/01 | 826346 | support/gregoriotex/doc/GregorioRef.pdf
+2021/03/01 | 815059 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/03/01 | 808794 | graphics/pgf/contrib/tzplot/tzplot-doc.pdf
+2021/03/01 | 80797 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/03/01 | 79671 | macros/latex/contrib/media9/media9.sty
+2021/03/01 | 78815 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/03/01 | 77879 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/03/01 | 77616 | macros/xetex/latex/xespotcolor/xespotcolor.pdf
+2021/03/01 | 77426 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/03/01 | 7739 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/03/01 | 768714 | macros/latex/contrib/eqexam/doc/eqexamman.pdf
+2021/03/01 | 75404 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/03/01 | 747987 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/03/01 | 7437892 | install/macros/latex/contrib/media9.tds.zip
+2021/03/01 | 7432602 | macros/latex/contrib/media9.zip
+2021/03/01 | 74140 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/03/01 | 74037 | macros/xetex/latex/xespotcolor/jatestspot.pdf
+2021/03/01 | 738 | macros/xetex/latex/xespotcolor/README
+2021/03/01 | 73177 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/03/01 | 72853 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/03/01 | 72595 | macros/latex/contrib/rec-thy/rec-thy.sty
+2021/03/01 | 72193 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/03/01 | 71825 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/03/01 | 70349 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/03/01 | 70144 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/03/01 | 680230 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/03/01 | 67865 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/03/01 | 67684 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/03/01 | 67490 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/03/01 | 67392 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/03/01 | 65961 | macros/latex/contrib/eqexam/eqexam.def
+2021/03/01 | 65850 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/03/01 | 6535 | macros/latex/contrib/apa7/apa7.ins
+2021/03/01 | 65352 | macros/latex/contrib/apa7/samples/shortsample.pdf
+2021/03/01 | 65321 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/03/01 | 63907 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/03/01 | 63809 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/03/01 | 63677 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/03/01 | 62770 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/03/01 | 62611 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/03/01 | 625365 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/03/01 | 6210 | macros/latex/contrib/eqexam/examples/hw01.tex
+2021/03/01 | 6195 | macros/latex/contrib/eqexam/script/eqAttach.asp
+2021/03/01 | 618686 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/03/01 | 6081 | web/pwebmac/webman.ch
+2021/03/01 | 60633 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/03/01 | 59840 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/03/01 | 596445 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/03/01 | 5931 | macros/latex/contrib/eqexam/aebrandom.def
+2021/03/01 | 59094 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/03/01 | 59027 | graphics/pgf/contrib/tzplot/tzplot-doc-B-v1.0.tex
+2021/03/01 | 583486 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/03/01 | 581409 | macros/latex/contrib/acrotex/exerquiz.dtx
+2021/03/01 | 57597 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/03/01 | 5738 | macros/xetex/latex/xespotcolor/spotcolor-test.pdf
+2021/03/01 | 570879 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/03/01 | 57065 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/03/01 | 570512 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/03/01 | 56900 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/03/01 | 567268 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/03/01 | 56582 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/03/01 | 565801 | web/c_cpp/cweb.zip
+2021/03/01 | 56489 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/03/01 | 56261 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/03/01 | 55792 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/03/01 | 55553 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/03/01 | 55204 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/03/01 | 54894 | macros/latex/contrib/rec-thy/rec-thy.tex
+2021/03/01 | 547 | macros/latex/contrib/acrotex/aeb.js
+2021/03/01 | 5457 | macros/latex/contrib/eqexam/examples/selectversion_tst.tex
+2021/03/01 | 5384 | support/gregoriotex/CONTRIBUTING.md
+2021/03/01 | 532133 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/03/01 | 530598 | macros/latex/contrib/apa7/apa7.pdf
+2021/03/01 | 526839 | macros/latex/contrib/acrotex/doc/aeb_man.tex
+2021/03/01 | 52471 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/03/01 | 52415 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/03/01 | 52204 | graphics/pgf/contrib/tzplot/tzplot-doc-D-v1.0.tex
+2021/03/01 | 5206 | macros/latex/contrib/rec-thy/README
+2021/03/01 | 51969 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/03/01 | 51808 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/03/01 | 51557 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/03/01 | 51187 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/03/01 | 511538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/03/01 | 50741 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/03/01 | 50124 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/03/01 | 49376 | macros/latex/contrib/media9/pdfbase.sty
+2021/03/01 | 4870 | macros/latex/contrib/acrotex/README.md
+2021/03/01 | 483679 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/03/01 | 47865 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/03/01 | 475715 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/03/01 | 46832 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/03/01 | 461332 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/03/01 | 45973 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/03/01 | 4583 | graphics/pgf/contrib/tzplot/tzplot-doc-A-v1.0.tex
+2021/03/01 | 45646 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/03/01 | 4559 | macros/latex/contrib/eqexam/examples/hw02.tex
+2021/03/01 | 45308299 | web/pwebmac.zip
+2021/03/01 | 45284701 | web/pwebmac/knuth-lib.tar.gz
+2021/03/01 | 45263 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/03/01 | 4421 | web/pwebmac/index.md
+2021/03/01 | 43807 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/03/01 | 43384 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/03/01 | 4307 | macros/latex/contrib/eqexam/README.md
+2021/03/01 | 43064 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/03/01 | 42851 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/03/01 | 42654 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/03/01 | 42595 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/03/01 | 42391 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/03/01 | 416317 | macros/latex/contrib/eqexam/eqexam.dtx
+2021/03/01 | 41107 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/03/01 | 396 | macros/latex/contrib/eqexam/examples/hw.cfg.txt
+2021/03/01 | 396 | macros/latex/contrib/eqexam/examples/hw.cfg
+2021/03/01 | 39653 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/03/01 | 39537 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/03/01 | 392429 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/03/01 | 3899 | macros/latex/contrib/eqexam/examples/quiz02.tex
+2021/03/01 | 3878872 | macros/latex/contrib/acrotex.zip
+2021/03/01 | 38094 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/03/01 | 38047 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/03/01 | 3739129 | macros/latex/contrib/media9/doc/media9.pdf
+2021/03/01 | 37243 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/03/01 | 37240 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/03/01 | 36690 | support/gregoriotex/UPGRADE.md
+2021/03/01 | 36664 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/03/01 | 36483 | support/gregoriotex/COPYING.md
+2021/03/01 | 362 | macros/latex/contrib/acrotex/web.cfg
+2021/03/01 | 36130 | macros/latex/contrib/aastex/aasjournal.bst
+2021/03/01 | 3548 | macros/latex/contrib/eqexam/examples/quiz01.tex
+2021/03/01 | 35457 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/03/01 | 3544 | macros/latex/contrib/eqexam/examples/markqs.tex
+2021/03/01 | 35061 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/03/01 | 350239 | macros/latex/contrib/acrotex/examples/jquiztst.pdf
+2021/03/01 | 345261 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/03/01 | 34298 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/03/01 | 33540 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/03/01 | 334 | macros/latex/contrib/eqexam/eqecus.opt
+2021/03/01 | 3327 | macros/latex/contrib/eqexam/examples/eqex_solnsonly.tex
+2021/03/01 | 33133 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/03/01 | 330264 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/03/01 | 32447 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/03/01 | 321919 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/03/01 | 31552 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/03/01 | 31532 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/03/01 | 3143 | macros/latex/contrib/acrotex/exerquiz.ins
+2021/03/01 | 31333 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/03/01 | 31228 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/03/01 | 311097 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/03/01 | 3093964 | macros/latex/contrib/eqexam.zip
+2021/03/01 | 30876 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/03/01 | 30012 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/03/01 | 2966 | macros/latex/contrib/eqexam/examples/flextended-opt.tex
+2021/03/01 | 295514 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/03/01 | 29468 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/03/01 | 29033 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/03/01 | 283999 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/03/01 | 281630 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/03/01 | 28138 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/03/01 | 28013 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/03/01 | 27450 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/03/01 | 27369 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/03/01 | 27209 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/03/01 | 27203 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/03/01 | 262019 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/03/01 | 2614820 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/03/01 | 258574 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/03/01 | 25422 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/03/01 | 25146 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/03/01 | 250273 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/03/01 | 25005 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/03/01 | 2497573 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/03/01 | 243490 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/03/01 | 242 | macros/latex/contrib/eqexam/examples/quiz.cfg.txt
+2021/03/01 | 242 | macros/latex/contrib/eqexam/examples/quiz.cfg
+2021/03/01 | 239849 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/03/01 | 2396 | support/gregoriotex/README.md
+2021/03/01 | 23873 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/03/01 | 233 | web/pwebmac/trapman.ch
+2021/03/01 | 2338 | macros/latex/contrib/acrotex/web.ins
+2021/03/01 | 23387 | language/thai/thaispec/thaispec.dtx
+2021/03/01 | 23377974 | support/gregoriotex.zip
+2021/03/01 | 23366196 | install/support/gregoriotex.tds.zip
+2021/03/01 | 23296 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/03/01 | 231673 | macros/latex/contrib/aastex/aastex631.cls
+2021/03/01 | 230100 | macros/latex/contrib/eqexam/doc/eqexamman.tex
+2021/03/01 | 22036 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/03/01 | 214121 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/03/01 | 2138054 | macros/latex/contrib/acrotex/doc/aeb_man.pdf
+2021/03/01 | 21138 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/03/01 | 21131 | macros/latex/contrib/eqexam/examples/test03.tex
+2021/03/01 | 210794 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/03/01 | 208336 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/03/01 | 207246 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/03/01 | 207213 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/03/01 | 207192 | macros/latex/contrib/acrotex/web.dtx
+2021/03/01 | 2038 | support/gregoriotex/CONTRIBUTORS.md
+2021/03/01 | 202487 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/03/01 | 2012 | macros/latex/contrib/acrotex/dljslib.ins
+2021/03/01 | 20116 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/03/01 | 199612 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/03/01 | 1994175 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/03/01 | 198090 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/03/01 | 19766 | macros/xetex/latex/xespotcolor/xespotcolor.dtx
+2021/03/01 | 196588 | macros/latex/contrib/apa7/samples/longsample.pdf
+2021/03/01 | 195649 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/03/01 | 195508 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/03/01 | 19485 | web/pwebmac/pwebmac.tex
+2021/03/01 | 193589 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/03/01 | 1842 | macros/latex/contrib/acrotex/taborder.ins
+2021/03/01 | 1823817 | macros/latex/contrib/aastex.zip
+2021/03/01 | 1812 | web/pwebmac/README.md
+2021/03/01 | 18098 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/03/01 | 180173 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/03/01 | 17960 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/03/01 | 179161 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/03/01 | 1717694 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/03/01 | 167876 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/03/01 | 163654 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/03/01 | 16324 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/03/01 | 16252 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/03/01 | 15984 | macros/latex/contrib/eqexam/examples/tex_survey_h.tex
+2021/03/01 | 159812 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/03/01 | 1553 | macros/xetex/latex/xespotcolor/xespotcolor.ins
+2021/03/01 | 153933 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/03/01 | 152799 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/03/01 | 15205 | macros/latex/contrib/eqexam/examples/tex_survey.tex
+2021/03/01 | 147818 | macros/xetex/latex/xespotcolor.zip
+2021/03/01 | 147127 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/03/01 | 146984 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/03/01 | 14650 | macros/latex/contrib/media9/ChangeLog
+2021/03/01 | 146210 | macros/latex/contrib/apa7/apa7.dtx
+2021/03/01 | 1448 | macros/latex/contrib/acrotex/examples/test_install.tex
+2021/03/01 | 14334 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/03/01 | 1424110 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/03/01 | 1418731 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/03/01 | 136449 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/03/01 | 134916 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/03/01 | 13476 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/03/01 | 132621 | macros/latex/contrib/rec-thy.zip
+2021/03/01 | 131375 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/03/01 | 13105 | macros/latex/contrib/acrotex/doc/install_jsfiles.tex
+2021/03/01 | 13070 | macros/latex/contrib/acrotex/contsolns.dtx
+2021/03/01 | 1305352 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/03/01 | 1295171 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/03/01 | 1294 | macros/latex/contrib/eqexam/examples/hw03.tex
+2021/03/01 | 1285123 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/03/01 | 1278 | macros/latex/contrib/apa7/README.txt
+2021/03/01 | 1258034 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/03/01 | 1257031 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/03/01 | 124942 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/03/01 | 12202 | macros/latex/contrib/eqexam/examples/test01.tex
+2021/03/01 | 121041 | macros/latex/contrib/rec-thy/rec-thy.pdf
+2021/03/01 | 11937 | graphics/pgf/contrib/tzplot/tzplot-doc.tex
+2021/03/01 | 118 | macros/latex/contrib/eqexam/examples/fig1.bb
+2021/03/01 | 1189 | macros/latex/contrib/acrotex/examples/README.md
+2021/03/01 | 1175929 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/03/01 | 1175214 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/03/01 | 117453 | graphics/pgf/contrib/tzplot/tzplot-doc-C-v1.0.tex
+2021/03/01 | 1171600 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/03/01 | 116983 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/03/01 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/03/01 | 114015 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/03/01 | 112293 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/03/01 | 11113 | web/pwebmac/makeall
+2021/03/01 | 111083 | graphics/pgf/contrib/tzplot/tzplot.sty
+2021/03/01 | 109199 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/03/01 | 1079140 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/03/01 | 104764 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/03/01 | 103270 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/03/01 | 10273 | macros/latex/contrib/eqexam/examples/test02.tex
+2021/03/01 | 10230 | macros/latex/contrib/acrotex/examples/jquiztst.tex
+2021/03/01 | 101679 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/02/28 | 99281104 | systems/win32/w32tex/web2c-lib.tar.xz
2021/02/28 | 986567 | macros/latex/contrib/reledmac/reledpar.pdf
2021/02/28 | 9804 | macros/latex/contrib/reledmac/examples/1-sidenotes.tex
2021/02/28 | 97676 | graphics/mcf2graph/mcf2graph.mf
+2021/02/28 | 948 | graphics/pgf/contrib/tzplot/tzplot-oblivoirpartstyle.tex
2021/02/28 | 9314 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.tex
2021/02/28 | 904 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html
2021/02/28 | 891476 | macros/latex/contrib/reledmac/reledmac.dtx
2021/02/28 | 852 | macros/luatex/latex/newpax/README.md
2021/02/28 | 8510 | macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.tex
2021/02/28 | 816 | macros/latex/contrib/reledmac/examples/makefile
+2021/02/28 | 793063 | systems/win32/w32tex/ChangeLog
2021/02/28 | 771 | macros/latex/contrib/hyperref/doc/hyperref-doc3.html
2021/02/28 | 768 | macros/latex/contrib/hyperref/doc/hyperref-doc7.html
2021/02/28 | 768 | macros/latex/contrib/hyperref/doc/hyperref-doc6.html
@@ -14,16 +311,17 @@
2021/02/28 | 69186 | macros/luatex/latex/newpax/doc-use-newpax.pdf
2021/02/28 | 6806 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.tex
2021/02/28 | 6752 | macros/latex/contrib/elpres/tex/elpres.cls
+2021/02/28 | 66584344 | systems/win32/w32tex/biblatex-biber.tar.xz
2021/02/28 | 6540 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.tex
2021/02/28 | 618298 | graphics/mcf2graph/mcf_manual.pdf
2021/02/28 | 5803 | macros/generic/chemfig/chemfig-lewis.tex
2021/02/28 | 579880 | macros/latex/contrib/exam.zip
-2021/02/28 | 565801 | web/c_cpp/cweb.zip
2021/02/28 | 5602 | macros/latex/contrib/reledmac/doc-include/migrate-par.dtx
2021/02/28 | 5587 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.tex
2021/02/28 | 53962 | graphics/mcf2graph/mcf_manual.tex
2021/02/28 | 525637 | macros/latex/contrib/easybook.zip
2021/02/28 | 5161 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.tex
+2021/02/28 | 51204148 | systems/win32/w32tex/latex-dev.tar.xz
2021/02/28 | 50867 | macros/latex/contrib/elpres/doc/elpres-manual.tex
2021/02/28 | 49 | macros/latex/contrib/reledmac/examples/latexmkrc
2021/02/28 | 494715 | macros/latex/contrib/elpres.zip
@@ -45,6 +343,7 @@
2021/02/28 | 357853 | macros/latex/contrib/reledmac/migration.pdf
2021/02/28 | 3495 | macros/latex/contrib/reledmac/migration.dtx
2021/02/28 | 34910 | macros/xetex/latex/ucharclasses/ucharclasses.sty
+2021/02/28 | 33978796 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/02/28 | 32053 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
2021/02/28 | 3159 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.tex
2021/02/28 | 31045 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
@@ -73,6 +372,7 @@
2021/02/28 | 28021 | macros/xetex/latex/ucharclasses/ucharclasses.tex
2021/02/28 | 279716 | macros/latex/contrib/reledmac/examples/2-indexing.pdf
2021/02/28 | 2761 | macros/latex/contrib/reledmac/examples/2-indexing.tex
+2021/02/28 | 274224984 | systems/win32/w32tex/pstricks.tar.xz
2021/02/28 | 273887 | macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
2021/02/28 | 2718 | graphics/mcf2graph/mcf_example.tex
2021/02/28 | 2710 | macros/latex/contrib/reledmac/examples/2-performances.tex
@@ -90,6 +390,7 @@
2021/02/28 | 232988 | macros/latex/contrib/easybook/doc/easybook.pdf
2021/02/28 | 23271 | macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
2021/02/28 | 221533 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
+2021/02/28 | 2209968 | systems/win32/w32tex/win64/context-w64.tar.xz
2021/02/28 | 2161 | macros/latex/contrib/reledmac/examples/1-criticalnotes.tex
2021/02/28 | 2157 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.tex
2021/02/28 | 21449 | macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.tex
@@ -157,6 +458,7 @@
2021/02/28 | 1528 | macros/latex/contrib/reledmac/examples/2-notes-width.tex
2021/02/28 | 151269 | macros/xetex/latex/ucharclasses.zip
2021/02/28 | 1488 | macros/latex/contrib/reledmac/examples/2-linespacing.tex
+2021/02/28 | 146090776 | systems/win32/w32tex/context.tar.xz
2021/02/28 | 14515 | macros/latex/contrib/hyperref/doc/hyperref-doc.css
2021/02/28 | 13642 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.tex
2021/02/28 | 135627 | macros/xetex/latex/ucharclasses/ucharclasses.pdf
@@ -175,32 +477,22 @@
2021/02/28 | 1006 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html
2021/02/28 | 10033 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.tex
2021/02/27 | 99946487 | systems/win32/w32tex/TLW64/tl-win64.zip
-2021/02/27 | 99454 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/02/27 | 99292276 | systems/win32/w32tex/web2c-lib.tar.xz
2021/02/27 | 9903 | macros/generic/schemata/README.md
2021/02/27 | 9900 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-t2b.tfm
2021/02/27 | 9900 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-t2b.tfm
2021/02/27 | 9884 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-t2b.tfm
2021/02/27 | 9884 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tlf-t2b.tfm
-2021/02/27 | 98486 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/02/27 | 97357 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
2021/02/27 | 9720 | fonts/erewhon/tfm/Erewhon-Regular-osf-t2b.tfm
2021/02/27 | 9720 | fonts/erewhon/tfm/Erewhon-Regular-lf-t2b.tfm
-2021/02/27 | 97108 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
2021/02/27 | 9704 | fonts/erewhon/tfm/Erewhon-Regular-tosf-t2b.tfm
2021/02/27 | 9704 | fonts/erewhon/tfm/Erewhon-Regular-tlf-t2b.tfm
-2021/02/27 | 968618 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
2021/02/27 | 954657 | macros/latex/contrib/biblatex-contrib/biblatex-ext.zip
2021/02/27 | 9516 | macros/latex/contrib/biblatex-contrib/biblatex-ext/blxextdoiapi.lua
2021/02/27 | 9496 | fonts/erewhon/tfm/Erewhon-BoldSlanted-osf-t2a.tfm
2021/02/27 | 948745 | systems/doc/pdftex/manual/pdftex-a.pdf
2021/02/27 | 9480 | fonts/erewhon/tfm/Erewhon-BoldSlanted-lf-t2a.tfm
-2021/02/27 | 94808 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
2021/02/27 | 9476 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-t2a.tfm
2021/02/27 | 9476 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-t2a.tfm
-2021/02/27 | 94686 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/02/27 | 94599 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2021/02/27 | 94160 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
2021/02/27 | 9348 | fonts/erewhon/tfm/Erewhon-Bold-osf-t2a.tfm
2021/02/27 | 9332 | fonts/erewhon/tfm/Erewhon-Bold-lf-t2a.tfm
2021/02/27 | 9328 | fonts/erewhon/tfm/Erewhon-Bold-tosf-t2a.tfm
@@ -258,13 +550,9 @@
2021/02/27 | 8780 | fonts/erewhon/tfm/Erewhon-BoldSlanted-lf-t1.tfm
2021/02/27 | 8776 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-t1.tfm
2021/02/27 | 8776 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-t1.tfm
-2021/02/27 | 8773 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/02/27 | 87673 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
2021/02/27 | 8766 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-icomp.cbx
2021/02/27 | 8764 | fonts/erewhon/tfm/Erewhon-Italic-tosf-t1.tfm
-2021/02/27 | 87634 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
2021/02/27 | 8760 | fonts/erewhon/tfm/Erewhon-Italic-tlf-t1.tfm
-2021/02/27 | 875 | systems/win32/miktex/tm/packages/pr.ini
2021/02/27 | 8672 | fonts/erewhon/tfm/Erewhon-BoldItalic-osf-t2b.tfm
2021/02/27 | 8664 | fonts/erewhon/tfm/Erewhon-BoldItalic-lf-t2b.tfm
2021/02/27 | 8660 | fonts/erewhon/tfm/Erewhon-Bold-osf-t1.tfm
@@ -280,7 +568,6 @@
2021/02/27 | 8584 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-t2c.tfm
2021/02/27 | 8584 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-t2c.tfm
2021/02/27 | 855996 | macros/generic/schemata.zip
-2021/02/27 | 85383 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
2021/02/27 | 8448 | fonts/erewhon/tfm/Erewhon-Bold-osf-t2c.tfm
2021/02/27 | 8432 | fonts/erewhon/tfm/Erewhon-Bold-lf-t2c.tfm
2021/02/27 | 8430536 | systems/win32/w32tex/uptex-w32.tar.xz
@@ -297,29 +584,15 @@
2021/02/27 | 8172 | fonts/erewhon/tfm/Erewhon-BoldItalic-lf-t2c.tfm
2021/02/27 | 8152 | fonts/erewhon/tfm/Erewhon-BoldItalic-tosf-t2c.tfm
2021/02/27 | 8152 | fonts/erewhon/tfm/Erewhon-BoldItalic-tlf-t2c.tfm
-2021/02/27 | 815057 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/02/27 | 80797 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
2021/02/27 | 7975 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oasymb-l3draw.sty
-2021/02/27 | 792650 | systems/win32/w32tex/ChangeLog
2021/02/27 | 791513 | macros/latex/contrib/babel-contrib/german.zip
-2021/02/27 | 78816 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/02/27 | 77879 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/02/27 | 77425 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/02/27 | 7740 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
2021/02/27 | 7704 | macros/latex/contrib/nameauth/README.md
2021/02/27 | 764 | fonts/erewhon/tfm/Erewhon-Bold-tlf-ot2.tfm
-2021/02/27 | 75405 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/02/27 | 747986 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/02/27 | 74141 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/02/27 | 73176 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/02/27 | 72852 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/02/27 | 72193 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
2021/02/27 | 720 | fonts/erewhon/vf/Erewhon-Italic-tosf-ts1.vf
2021/02/27 | 720 | fonts/erewhon/vf/Erewhon-Italic-tlf-ts1.vf
2021/02/27 | 720 | fonts/erewhon/vf/Erewhon-Italic-osf-ts1.vf
2021/02/27 | 720 | fonts/erewhon/vf/Erewhon-Italic-lf-ts1.vf
2021/02/27 | 718 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-inote.cbx
-2021/02/27 | 71823 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
2021/02/27 | 715 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-note.cbx
2021/02/27 | 715 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-alphabetic-verb.bbx
2021/02/27 | 713 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad3.cbx
@@ -328,12 +601,10 @@
2021/02/27 | 710 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-ibid.cbx
2021/02/27 | 705 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ticomp.bbx
2021/02/27 | 705866 | macros/generic/schemata/schemata.pdf
-2021/02/27 | 70348 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2021/02/27 | 702 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tiecomp.bbx
2021/02/27 | 702 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-terse.bbx
2021/02/27 | 702 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-tcomp.bbx
2021/02/27 | 702 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-icomp.bbx
-2021/02/27 | 70143 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
2021/02/27 | 700 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ticomp.bbx
2021/02/27 | 699 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tecomp.bbx
2021/02/27 | 699 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ibid.bbx
@@ -352,22 +623,15 @@
2021/02/27 | 6884 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-sc-t2a.tfm
2021/02/27 | 6884 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-sc-t2a.tfm
2021/02/27 | 684 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle.bbx
-2021/02/27 | 680228 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/02/27 | 67865 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
2021/02/27 | 677 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear.bbx
2021/02/27 | 6769 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
-2021/02/27 | 67686 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/02/27 | 67491 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
2021/02/27 | 6742 | fonts/erewhon/enc/erewhontlf-ot2.enc
-2021/02/27 | 67391 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
2021/02/27 | 6692 | fonts/erewhon/tfm/Erewhon-BoldSlanted-osf-sc-t2b.tfm
2021/02/27 | 6680 | fonts/erewhon/tfm/Erewhon-BoldSlanted-lf-sc-t2b.tfm
2021/02/27 | 6676 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-sc-t2b.tfm
2021/02/27 | 6676 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-sc-t2b.tfm
2021/02/27 | 6675876 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2021/02/27 | 6671 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tiecomp.cbx
-2021/02/27 | 65850 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/02/27 | 65321 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
2021/02/27 | 648 | fonts/erewhon/vf/Erewhon-RegularSlanted-tosf-ts1.vf
2021/02/27 | 648 | fonts/erewhon/vf/Erewhon-RegularSlanted-tlf-ts1.vf
2021/02/27 | 648 | fonts/erewhon/vf/Erewhon-RegularSlanted-osf-ts1.vf
@@ -384,13 +648,10 @@
2021/02/27 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad2.bbx
2021/02/27 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-trad1.bbx
2021/02/27 | 640 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-inote.bbx
-2021/02/27 | 63905 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/02/27 | 63810 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
2021/02/27 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-note.bbx
2021/02/27 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-ibid.bbx
2021/02/27 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-verb.bbx
2021/02/27 | 637 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-comp.bbx
-2021/02/27 | 63677 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
2021/02/27 | 6364 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-sc-t2a.tfm
2021/02/27 | 6364 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-sc-t2a.tfm
2021/02/27 | 6356 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-ly1.tfm
@@ -406,11 +667,8 @@
2021/02/27 | 628 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-alphabetic.bbx
2021/02/27 | 6280 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-sc-t2b.tfm
2021/02/27 | 6280 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-sc-t2b.tfm
-2021/02/27 | 62770 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/02/27 | 62611 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
2021/02/27 | 6256 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-sc-t2b.tfm
2021/02/27 | 6256 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tlf-sc-t2b.tfm
-2021/02/27 | 625363 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
2021/02/27 | 622 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose.bbx
2021/02/27 | 6220 | fonts/erewhon/tfm/Erewhon-Regular-osf-ly1.tfm
2021/02/27 | 6220 | fonts/erewhon/tfm/Erewhon-Regular-lf-ly1.tfm
@@ -421,7 +679,6 @@
2021/02/27 | 6200 | fonts/erewhon/tfm/Erewhon-Regular-tosf-ly1.tfm
2021/02/27 | 6200 | fonts/erewhon/tfm/Erewhon-Regular-tlf-ly1.tfm
2021/02/27 | 619 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric.bbx
-2021/02/27 | 618684 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
2021/02/27 | 6171 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tecomp.cbx
2021/02/27 | 6137 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-icomp.cbx
2021/02/27 | 6130 | macros/latex/contrib/biblatex-contrib/biblatex-ext/README.md
@@ -444,7 +701,6 @@
2021/02/27 | 6064 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-ly1.tfm
2021/02/27 | 6064 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-ly1.tfm
2021/02/27 | 6064 | fonts/erewhon/tfm/Erewhon-BoldItalic-osf-ly1.tfm
-2021/02/27 | 60632 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
2021/02/27 | 6060 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-sc-t1.tfm
2021/02/27 | 6060 | fonts/erewhon/tfm/Erewhon-BoldItalic-lf-ly1.tfm
2021/02/27 | 6040 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-sc-t1.tfm
@@ -459,16 +715,12 @@
2021/02/27 | 6000 | fonts/erewhon/tfm/Erewhon-Regular-tlf-sc-t2b.tfm
2021/02/27 | 6000 | fonts/erewhon/tfm/Erewhon-Italic-tosf-ly1.tfm
2021/02/27 | 5996 | fonts/erewhon/tfm/Erewhon-Italic-tlf-ly1.tfm
-2021/02/27 | 59839 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
2021/02/27 | 596676 | systems/texlive/tlnet/archive/tagpdf.doc.r57955.tar.xz
-2021/02/27 | 596447 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
2021/02/27 | 59335 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2021/02/27 | 5928 | fonts/erewhon/tfm/Erewhon-Bold-osf-ly1.tfm
2021/02/27 | 5912 | fonts/erewhon/tfm/Erewhon-Bold-lf-ly1.tfm
-2021/02/27 | 59093 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
2021/02/27 | 5908 | fonts/erewhon/tfm/Erewhon-Bold-tosf-ly1.tfm
2021/02/27 | 5908 | fonts/erewhon/tfm/Erewhon-Bold-tlf-ly1.tfm
-2021/02/27 | 583486 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2021/02/27 | 5833 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-comp.cbx
2021/02/27 | 5828 | fonts/erewhon/tfm/Erewhon-Bold-osf-sc-t2c.tfm
2021/02/27 | 5824247 | systems/texlive/tlnet/install-tl-unx.tar.gz
@@ -480,48 +732,25 @@
2021/02/27 | 5776 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-sc-t2c.tfm
2021/02/27 | 5776 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tlf-sc-t2c.tfm
2021/02/27 | 5773 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ticomp.cbx
-2021/02/27 | 57597 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
2021/02/27 | 5736 | macros/latex/contrib/hyperref/xr-hyper.sty
2021/02/27 | 5733 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ibid.cbx
-2021/02/27 | 570879 | systems/win32/miktex/tm/packages/files.csv.lzma
-2021/02/27 | 57064 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/02/27 | 570512 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/02/27 | 56899 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
2021/02/27 | 56767 | macros/latex/contrib/nameauth/examples.tex
-2021/02/27 | 567268 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/02/27 | 56580 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/02/27 | 56489 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
2021/02/27 | 56397 | graphics/pstricks/contrib/pst-optexp/pst-optexp-quickref.pdf
-2021/02/27 | 56259 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
2021/02/27 | 5586 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oasymb-pict2e.sty
-2021/02/27 | 55791 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/02/27 | 55554 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
2021/02/27 | 5544 | fonts/erewhon/tfm/Erewhon-Regular-osf-sc-t2c.tfm
2021/02/27 | 5544 | fonts/erewhon/tfm/Erewhon-Regular-lf-sc-t2c.tfm
2021/02/27 | 553028 | systems/texlive/tlnet/archive/libertinus-fonts.doc.r57944.tar.xz
2021/02/27 | 5520 | fonts/erewhon/tfm/Erewhon-Regular-tosf-sc-t2c.tfm
2021/02/27 | 5520 | fonts/erewhon/tfm/Erewhon-Regular-tlf-sc-t2c.tfm
-2021/02/27 | 55204 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
2021/02/27 | 5504 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear.cbx
2021/02/27 | 5459576 | systems/win32/w32tex/aleph-w32.tar.xz
2021/02/27 | 53720 | fonts/erewhon/map/erewhon.map
2021/02/27 | 5336 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-tcomp.cbx
2021/02/27 | 5336 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tlf-ot2.tfm
-2021/02/27 | 532132 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
2021/02/27 | 5292716 | fonts/erewhon.zip
-2021/02/27 | 52472 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2021/02/27 | 52413 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
2021/02/27 | 520964 | macros/latex/contrib/nameauth/nameauth.dtx
-2021/02/27 | 51969 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/02/27 | 51807 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/02/27 | 51553 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/02/27 | 51187 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
2021/02/27 | 5116 | fonts/erewhon/tfm/Erewhon-Regular-tlf-ot2.tfm
-2021/02/27 | 511538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/02/27 | 51040168 | systems/win32/w32tex/latex-dev.tar.xz
-2021/02/27 | 50741 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
2021/02/27 | 50274 | macros/latex/contrib/hyperref/hluatex.dtx
-2021/02/27 | 50124 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
2021/02/27 | 4996 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-sc-ly1.tfm
2021/02/27 | 4996 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-sc-ly1.tfm
2021/02/27 | 4968 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-sc-ly1.tfm
@@ -539,29 +768,22 @@
2021/02/27 | 4915 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ibid.cbx
2021/02/27 | 49053128 | systems/win32/w32tex/web2c-w32.tar.xz
2021/02/27 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2021/02/27 | 483678 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
2021/02/27 | 4828 | fonts/erewhon/tfm/Erewhon-Italic-tlf-ot2.tfm
2021/02/27 | 482795 | macros/latex/contrib/exam/examdoc.pdf
2021/02/27 | 4816 | fonts/erewhon/tfm/Erewhon-BoldItalic-osf-sc-t2b.tfm
2021/02/27 | 4808 | fonts/erewhon/tfm/Erewhon-BoldItalic-lf-sc-t2b.tfm
2021/02/27 | 4792 | fonts/erewhon/tfm/Erewhon-BoldItalic-tosf-sc-t2b.tfm
2021/02/27 | 4792 | fonts/erewhon/tfm/Erewhon-BoldItalic-tlf-sc-t2b.tfm
-2021/02/27 | 47864 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
2021/02/27 | 4757 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-comp.cbx
-2021/02/27 | 475714 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
2021/02/27 | 4697 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle.cbx
-2021/02/27 | 46830 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
2021/02/27 | 46380 | systems/texlive/tlnet/archive/microtype.r57947.tar.xz
2021/02/27 | 4616 | fonts/erewhon/tfm/Erewhon-Italic-lf-sc-t2a.tfm
-2021/02/27 | 461330 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
2021/02/27 | 4612 | fonts/erewhon/tfm/Erewhon-Italic-osf-sc-t2a.tfm
-2021/02/27 | 45973 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
2021/02/27 | 4592 | fonts/erewhon/tfm/Erewhon-Italic-tosf-sc-t2a.tfm
2021/02/27 | 4592 | fonts/erewhon/tfm/Erewhon-Italic-tlf-sc-t2a.tfm
2021/02/27 | 4588 | fonts/erewhon/tfm/Erewhon-Italic-lf-sc-t2b.tfm
2021/02/27 | 4580 | fonts/erewhon/tfm/Erewhon-Italic-osf-sc-t2b.tfm
2021/02/27 | 4576 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-ticomp.cbx
-2021/02/27 | 45645 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
2021/02/27 | 4560 | fonts/erewhon/tfm/Erewhon-Italic-tosf-sc-t2b.tfm
2021/02/27 | 4560 | fonts/erewhon/tfm/Erewhon-Italic-tlf-sc-t2b.tfm
2021/02/27 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -569,7 +791,6 @@
2021/02/27 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
2021/02/27 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/02/27 | 4536 | macros/latex/contrib/nameauth/Makefile
-2021/02/27 | 45262 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
2021/02/27 | 45177 | macros/latex/contrib/babel-contrib/german/germanb.dtx
2021/02/27 | 4479 | macros/latex/contrib/hyperref/README.md
2021/02/27 | 4476 | systems/doc/pdftex/manual/Makefile
@@ -579,18 +800,11 @@
2021/02/27 | 4440 | fonts/erewhon/tfm/Erewhon-BoldItalic-tosf-sc-t2c.tfm
2021/02/27 | 4440 | fonts/erewhon/tfm/Erewhon-BoldItalic-tlf-sc-t2c.tfm
2021/02/27 | 439801 | systems/doc/dvips/dvips.html
-2021/02/27 | 43808 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/02/27 | 43384 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
2021/02/27 | 4328 | fonts/erewhon/tfm/Erewhon-Italic-lf-sc-t2c.tfm
2021/02/27 | 4320 | fonts/erewhon/tfm/Erewhon-Italic-osf-sc-t2c.tfm
-2021/02/27 | 43063 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
2021/02/27 | 4300 | fonts/erewhon/tfm/Erewhon-Italic-tosf-sc-t2c.tfm
2021/02/27 | 4300 | fonts/erewhon/tfm/Erewhon-Italic-tlf-sc-t2c.tfm
-2021/02/27 | 42850 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/02/27 | 42654 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/02/27 | 42595 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
2021/02/27 | 4240 | fonts/erewhon/tfm/Erewhon-BoldItalic-osf-sc-t1.tfm
-2021/02/27 | 42390 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
2021/02/27 | 4236 | fonts/erewhon/tfm/Erewhon-BoldItalic-lf-sc-t1.tfm
2021/02/27 | 4216 | fonts/erewhon/tfm/Erewhon-BoldItalic-tosf-sc-t1.tfm
2021/02/27 | 4216 | fonts/erewhon/tfm/Erewhon-BoldItalic-tlf-sc-t1.tfm
@@ -602,19 +816,15 @@
2021/02/27 | 4132 | fonts/erewhon/tfm/Erewhon-Regular-lf-sc-ly1.tfm
2021/02/27 | 412464 | systems/doc/dvips/dvips.pdf
2021/02/27 | 4111 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric.cbx
-2021/02/27 | 41108 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
2021/02/27 | 4104 | fonts/erewhon/tfm/Erewhon-Regular-tosf-sc-ly1.tfm
2021/02/27 | 4104 | fonts/erewhon/tfm/Erewhon-Regular-tlf-sc-ly1.tfm
2021/02/27 | 4077 | macros/latex/contrib/hyperref/hyperref.ins
2021/02/27 | 402597 | systems/doc/kpathsea/kpathsea.pdf
2021/02/27 | 3985 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authortitle-tcomp.cbx
-2021/02/27 | 39654 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
2021/02/27 | 396377 | macros/latex/contrib/babel-contrib/german/germanb.pdf
-2021/02/27 | 39538 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
2021/02/27 | 3950 | fonts/erewhon/enc/zut1_25oktk.enc
2021/02/27 | 3943 | fonts/erewhon/enc/zut1_nlk3tk.enc
2021/02/27 | 3926 | fonts/erewhon/enc/zut1_uuvzxd.enc
-2021/02/27 | 392431 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2021/02/27 | 3922 | fonts/erewhon/enc/zut1_74cce3.enc
2021/02/27 | 3915 | fonts/erewhon/enc/zut1_zx32l7.enc
2021/02/27 | 3914 | fonts/erewhon/enc/zut1_ljsdwq.enc
@@ -639,10 +849,8 @@
2021/02/27 | 3820 | fonts/erewhon/enc/zut1_t32gte.enc
2021/02/27 | 3818 | fonts/erewhon/enc/zut1_ijhs6t.enc
2021/02/27 | 3811 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-alphabetic.cbx
-2021/02/27 | 38093 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2021/02/27 | 3808 | fonts/erewhon/enc/zut1_6etwti.enc
2021/02/27 | 3805 | fonts/erewhon/enc/zut1_cxj5nb.enc
-2021/02/27 | 38046 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
2021/02/27 | 3799 | fonts/erewhon/enc/zut1_4qs3ad.enc
2021/02/27 | 3795 | fonts/erewhon/enc/zut1_psdthf.enc
2021/02/27 | 3788 | fonts/erewhon/enc/zut1_lql6bl.enc
@@ -672,8 +880,6 @@
2021/02/27 | 3730 | fonts/erewhon/enc/zut1_jofyrj.enc
2021/02/27 | 37282 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-standard.bbx
2021/02/27 | 372481 | macros/latex/contrib/babel-contrib/german/ngermanb.pdf
-2021/02/27 | 37243 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/02/27 | 37240 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
2021/02/27 | 3723 | fonts/erewhon/enc/zut1_ul5nhk.enc
2021/02/27 | 3722 | fonts/erewhon/enc/zut1_4chmhh.enc
2021/02/27 | 3716 | fonts/erewhon/enc/zut1_pj2kv6.enc
@@ -686,7 +892,6 @@
2021/02/27 | 3681 | fonts/erewhon/enc/zut1_x3yqgk.enc
2021/02/27 | 3674 | fonts/erewhon/enc/zut1_tzgz6e.enc
2021/02/27 | 3667 | fonts/erewhon/enc/zut1_e4qrg7.enc
-2021/02/27 | 36664 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2021/02/27 | 3663 | fonts/erewhon/enc/zut1_fec52x.enc
2021/02/27 | 3660 | fonts/erewhon/enc/zut1_elnhz2.enc
2021/02/27 | 36592 | macros/latex/contrib/babel-contrib/german/ngermanb.dtx
@@ -709,7 +914,6 @@
2021/02/27 | 3555 | fonts/erewhon/enc/zut1_orscbj.enc
2021/02/27 | 3555 | fonts/erewhon/enc/zut1_6kzn42.enc
2021/02/27 | 3548 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-numeric-verb.cbx
-2021/02/27 | 35456 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
2021/02/27 | 3528 | fonts/erewhon/enc/zut1_mxehrm.enc
2021/02/27 | 3525 | macros/latex/contrib/babel-contrib/german/german.ins
2021/02/27 | 3523 | fonts/erewhon/enc/zut1_gagfjo.enc
@@ -718,7 +922,6 @@
2021/02/27 | 3522 | fonts/erewhon/enc/zut1_aluvmp.enc
2021/02/27 | 3522 | fonts/erewhon/enc/zut1_2objs7.enc
2021/02/27 | 3510 | fonts/erewhon/enc/zut1_etc5hm.enc
-2021/02/27 | 35060 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
2021/02/27 | 3482 | fonts/erewhon/enc/zut1_5kulil.enc
2021/02/27 | 34772772 | systems/win32/w32tex/latex.tar.xz
2021/02/27 | 3476 | fonts/erewhon/tfm/Erewhon-Italic-lf-sc-ly1.tfm
@@ -729,35 +932,30 @@
2021/02/27 | 3468 | fonts/erewhon/tfm/Erewhon-Italic-osf-sc-ly1.tfm
2021/02/27 | 3454756 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
2021/02/27 | 3453740 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
-2021/02/27 | 345261 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
2021/02/27 | 3448 | fonts/erewhon/tfm/Erewhon-Italic-tosf-sc-ly1.tfm
2021/02/27 | 3448 | fonts/erewhon/enc/zut1_hl634h.enc
2021/02/27 | 3444 | fonts/erewhon/tfm/Erewhon-Italic-tlf-sc-ly1.tfm
2021/02/27 | 3438332 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
2021/02/27 | 3436 | fonts/erewhon/tfm/Erewhon-BoldItalic-osf-sc-ly1.tfm
2021/02/27 | 3432 | fonts/erewhon/tfm/Erewhon-BoldItalic-lf-sc-ly1.tfm
-2021/02/27 | 34298 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
2021/02/27 | 3427 | fonts/erewhon/enc/zut1_xd5tcn.enc
2021/02/27 | 3422 | fonts/erewhon/enc/zut1_dq4c7f.enc
2021/02/27 | 3416 | fonts/erewhon/enc/zut1_azqpxw.enc
2021/02/27 | 3412 | fonts/erewhon/tfm/Erewhon-BoldItalic-tosf-sc-ly1.tfm
2021/02/27 | 3412 | fonts/erewhon/tfm/Erewhon-BoldItalic-tlf-sc-ly1.tfm
2021/02/27 | 3399 | fonts/erewhon/enc/zut1_isszvh.enc
-2021/02/27 | 33980584 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/02/27 | 3396 | fonts/erewhon/enc/zut1_a27mgr.enc
2021/02/27 | 3392 | fonts/erewhon/enc/zut1_lkesvg.enc
2021/02/27 | 3391 | fonts/erewhon/enc/zut1_vtfujz.enc
2021/02/27 | 3368 | fonts/erewhon/enc/zut1_yx3dqr.enc
2021/02/27 | 3360 | fonts/erewhon/enc/zut1_tmatie.enc
2021/02/27 | 3355 | fonts/erewhon/enc/zut1_36pkgq.enc
-2021/02/27 | 33540 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
2021/02/27 | 3339 | fonts/erewhon/enc/zut1_uhamxn.enc
2021/02/27 | 3332 | fonts/erewhon/enc/zut1_v2pu2l.enc
2021/02/27 | 3327 | fonts/erewhon/enc/zut1_xsflzz.enc
2021/02/27 | 3319 | fonts/erewhon/enc/zut1_azbcfh.enc
2021/02/27 | 3318 | fonts/erewhon/enc/zut1_wrgbks.enc
2021/02/27 | 3315 | fonts/erewhon/enc/zut1_a7a6j7.enc
-2021/02/27 | 33133 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
2021/02/27 | 3312 | fonts/erewhon/enc/zut1_wg4pgf.enc
2021/02/27 | 3312 | fonts/erewhon/enc/zut1_peef5q.enc
2021/02/27 | 3312 | fonts/erewhon/enc/zut1_ncwigg.enc
@@ -765,7 +963,6 @@
2021/02/27 | 3308 | fonts/erewhon/enc/zut1_gqji7z.enc
2021/02/27 | 3306 | fonts/erewhon/enc/zut1_qvbgtd.enc
2021/02/27 | 3303 | fonts/erewhon/enc/zut1_x3bhkk.enc
-2021/02/27 | 330264 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
2021/02/27 | 3301 | fonts/erewhon/enc/zut1_jsdebf.enc
2021/02/27 | 3300488 | graphics/pstricks/contrib/pst-optexp/pst-optexp-DE.pdf
2021/02/27 | 3287 | fonts/erewhon/enc/zut1_mkqhoa.enc
@@ -787,14 +984,12 @@
2021/02/27 | 3249 | fonts/erewhon/enc/zut1_2qulls.enc
2021/02/27 | 3248 | fonts/erewhon/enc/zut1_i3xnrn.enc
2021/02/27 | 3246 | fonts/erewhon/enc/zut1_xlud6l.enc
-2021/02/27 | 32449 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
2021/02/27 | 3243 | fonts/erewhon/enc/zut1_lxr6iw.enc
2021/02/27 | 3236 | fonts/erewhon/enc/zut1_totpyl.enc
2021/02/27 | 3233 | fonts/erewhon/enc/zut1_t5iu6g.enc
2021/02/27 | 3230 | fonts/erewhon/enc/zut1_6n4vaj.enc
2021/02/27 | 3227 | fonts/erewhon/enc/zut1_2sunpf.enc
2021/02/27 | 3221 | fonts/erewhon/enc/zut1_7xxsa3.enc
-2021/02/27 | 321919 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2021/02/27 | 3218 | fonts/erewhon/enc/zut1_xhc3k4.enc
2021/02/27 | 3218 | fonts/erewhon/enc/zut1_mmwqox.enc
2021/02/27 | 3218 | fonts/erewhon/enc/zut1_dpee64.enc
@@ -818,8 +1013,6 @@
2021/02/27 | 3159 | fonts/erewhon/enc/zut1_vj42om.enc
2021/02/27 | 3159 | fonts/erewhon/enc/zut1_nrup2h.enc
2021/02/27 | 3159 | fonts/erewhon/enc/zut1_7zfl2i.enc
-2021/02/27 | 31551 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/02/27 | 31532 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
2021/02/27 | 3147 | fonts/erewhon/enc/zut1_qptrxz.enc
2021/02/27 | 3147 | fonts/erewhon/enc/zut1_okacrk.enc
2021/02/27 | 3147 | fonts/erewhon/enc/zut1_igmc4g.enc
@@ -828,63 +1021,35 @@
2021/02/27 | 3135 | fonts/erewhon/enc/zut1_kwgi2r.enc
2021/02/27 | 3135 | fonts/erewhon/enc/zut1_gxqdb2.enc
2021/02/27 | 3135 | fonts/erewhon/enc/zut1_adckrx.enc
-2021/02/27 | 31332 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
2021/02/27 | 3128 | fonts/erewhon/enc/zut1_umzzxg.enc
2021/02/27 | 3128 | fonts/erewhon/enc/zut1_jdnyy6.enc
2021/02/27 | 3128 | fonts/erewhon/enc/zut1_4j4ux5.enc
-2021/02/27 | 31229 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
2021/02/27 | 3121916 | systems/win32/w32tex/win64/luatex-w64.tar.xz
2021/02/27 | 3113924 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
2021/02/27 | 3112512 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
-2021/02/27 | 311096 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
2021/02/27 | 3104 | fonts/erewhon/enc/zut1_fojqdn.enc
2021/02/27 | 3104 | fonts/erewhon/enc/zut1_d6afaq.enc
2021/02/27 | 3104 | fonts/erewhon/enc/zut1_7zlfno.enc
2021/02/27 | 3099 | fonts/erewhon/enc/zut1_k3uyvf.enc
2021/02/27 | 3099 | fonts/erewhon/enc/zut1_hhrib2.enc
2021/02/27 | 3099 | fonts/erewhon/enc/zut1_2lssnc.enc
-2021/02/27 | 30877 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2021/02/27 | 302545 | macros/latex/contrib/exam/examdoc.tex
-2021/02/27 | 30012 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
2021/02/27 | 2995 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-common.cbx
-2021/02/27 | 295513 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2021/02/27 | 29469 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
2021/02/27 | 2942 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-dashed-common.bbx
-2021/02/27 | 29034 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
2021/02/27 | 286382 | macros/latex/contrib/exam/exam.cls
-2021/02/27 | 283998 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/02/27 | 281631 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/02/27 | 28139 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
2021/02/27 | 280547 | fonts/erewhon/type1/Erewhon-Regular.pfb
-2021/02/27 | 28013 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/02/27 | 27448 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/02/27 | 27370 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
2021/02/27 | 2723 | graphics/pstricks/contrib/pst-optexp/Makefile
-2021/02/27 | 27210 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/02/27 | 27202 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
2021/02/27 | 267122 | fonts/erewhon/type1/Erewhon-Bold.pfb
2021/02/27 | 2659 | macros/latex/contrib/easybook/doc/pages/chapter3.tex
-2021/02/27 | 262020 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/02/27 | 2614820 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
2021/02/27 | 258828 | fonts/erewhon/opentype/Erewhon-Regular.otf
-2021/02/27 | 258574 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/02/27 | 25422 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/02/27 | 25143 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/02/27 | 250272 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/02/27 | 25004 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/02/27 | 2497571 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
2021/02/27 | 24615532 | systems/texlive/tlnet/install-tl.zip
-2021/02/27 | 243491 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
2021/02/27 | 243239 | fonts/erewhon/type1/Erewhon-BoldItalic.pfb
2021/02/27 | 242872 | fonts/erewhon/opentype/Erewhon-Bold.otf
2021/02/27 | 242788 | fonts/erewhon/opentype/Erewhon-RegularSlanted.otf
-2021/02/27 | 239848 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
2021/02/27 | 2387 | macros/latex/contrib/babel-contrib/german/README
-2021/02/27 | 23872 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
2021/02/27 | 23449004 | systems/win32/w32tex/cjkzr.tar.xz
2021/02/27 | 233308 | fonts/erewhon/opentype/Erewhon-BoldSlanted.otf
2021/02/27 | 233298 | fonts/erewhon/type1/Erewhon-BoldSlanted.pfb
-2021/02/27 | 23295 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
2021/02/27 | 2328 | systems/texlive/tlnet/archive/blox.r57945.tar.xz
2021/02/27 | 231380 | fonts/erewhon/type1/Erewhon-Italic.pfb
2021/02/27 | 229708 | fonts/erewhon/type1/Erewhon-RegularSlanted.pfb
@@ -895,21 +1060,17 @@
2021/02/27 | 2224 | macros/latex/contrib/exam/README
2021/02/27 | 220892 | fonts/erewhon/opentype/Erewhon-BoldItalic.otf
2021/02/27 | 220487 | systems/doc/dvipng/dvipng.pdf
-2021/02/27 | 22036 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
2021/02/27 | 22034768 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/02/27 | 217216 | fonts/erewhon/opentype/Erewhon-Italic.otf
2021/02/27 | 2160 | fonts/erewhon/tfm/Erewhon-Italic-sup-t2a.tfm
2021/02/27 | 2152 | fonts/erewhon/tfm/Erewhon-Italic-sup-t2b.tfm
2021/02/27 | 2144 | fonts/erewhon/tfm/Erewhon-Italic-sup-t2c.tfm
-2021/02/27 | 214120 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2021/02/27 | 2136 | fonts/erewhon/tfm/Erewhon-BoldItalic-sup-t2b.tfm
2021/02/27 | 2136 | fonts/erewhon/tfm/Erewhon-BoldItalic-sup-t2a.tfm
2021/02/27 | 2132 | fonts/erewhon/tfm/Erewhon-BoldItalic-sup-t2c.tfm
2021/02/27 | 2124 | fonts/erewhon/tfm/Erewhon-RegularSlanted-sup-t2a.tfm
-2021/02/27 | 21141 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
2021/02/27 | 2112 | fonts/erewhon/tfm/Erewhon-Italic-lf-sc-t2a--base.tfm
2021/02/27 | 2108 | fonts/erewhon/tfm/Erewhon-Italic-osf-sc-t2a--base.tfm
-2021/02/27 | 210793 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
2021/02/27 | 21060 | systems/texlive/tlnet/archive/tagpdf.r57955.tar.xz
2021/02/27 | 2104 | fonts/erewhon/tfm/Erewhon-RegularSlanted-sup-t2b.tfm
2021/02/27 | 2104 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-sc-t2a--base.tfm
@@ -926,7 +1087,6 @@
2021/02/27 | 2088 | fonts/erewhon/tfm/Erewhon-Italic-lf-sc-t2c--base.tfm
2021/02/27 | 2088 | fonts/erewhon/tfm/Erewhon-BoldSlanted-osf-sc-t2a--base.tfm
2021/02/27 | 2086 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-terse.cbx
-2021/02/27 | 208336 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
2021/02/27 | 2080 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-sc-t2a--base.tfm
2021/02/27 | 2080 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tlf-sc-t2a--base.tfm
2021/02/27 | 2080 | fonts/erewhon/tfm/Erewhon-RegularSlanted-numr-t2a.tfm
@@ -935,14 +1095,12 @@
2021/02/27 | 2076 | fonts/erewhon/tfm/Erewhon-BoldSlanted-sup-t2c.tfm
2021/02/27 | 2076 | fonts/erewhon/tfm/Erewhon-BoldSlanted-osf-sc-t2b--base.tfm
2021/02/27 | 2076 | fonts/erewhon/tfm/Erewhon-BoldSlanted-lf-sc-t2a--base.tfm
-2021/02/27 | 207302 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
2021/02/27 | 2072 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-sc-t2b--base.tfm
2021/02/27 | 2072 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tlf-sc-t2b--base.tfm
2021/02/27 | 2072 | fonts/erewhon/tfm/Erewhon-Italic-tosf-sc-t2b--base.tfm
2021/02/27 | 2072 | fonts/erewhon/tfm/Erewhon-Italic-tlf-sc-t2b--base.tfm
2021/02/27 | 2072 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-sc-t2a--base.tfm
2021/02/27 | 2072 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-sc-t2a--base.tfm
-2021/02/27 | 207276 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
2021/02/27 | 2068 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-sc-t2c--base.tfm
2021/02/27 | 2068 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-sc-t2c--base.tfm
2021/02/27 | 2068 | fonts/erewhon/tfm/Erewhon-RegularSlanted-inf-t2a.tfm
@@ -991,7 +1149,6 @@
2021/02/27 | 2028 | fonts/erewhon/tfm/Erewhon-BoldItalic-tlf-sc-t2a--base.tfm
2021/02/27 | 2024 | fonts/erewhon/tfm/Erewhon-BoldItalic-tosf-sc-t2b--base.tfm
2021/02/27 | 2024 | fonts/erewhon/tfm/Erewhon-BoldItalic-tlf-sc-t2b--base.tfm
-2021/02/27 | 202488 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
2021/02/27 | 2020 | fonts/erewhon/tfm/Erewhon-BoldItalic-sup-t1.tfm
2021/02/27 | 2020 | fonts/erewhon/tfm/Erewhon-BoldItalic-numr-t2a.tfm
2021/02/27 | 2020 | fonts/erewhon/tfm/Erewhon-BoldItalic-dnom-t2a.tfm
@@ -1004,16 +1161,12 @@
2021/02/27 | 2012 | fonts/erewhon/tfm/Erewhon-BoldItalic-numr-t2c.tfm
2021/02/27 | 2012 | fonts/erewhon/tfm/Erewhon-BoldItalic-inf-t2b.tfm
2021/02/27 | 2012 | fonts/erewhon/tfm/Erewhon-BoldItalic-dnom-t2c.tfm
-2021/02/27 | 20113 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
2021/02/27 | 2008 | fonts/erewhon/tfm/Erewhon-BoldItalic-inf-t2c.tfm
2021/02/27 | 2004 | fonts/erewhon/tfm/Erewhon-BoldItalic-sup-ly1.tfm
-2021/02/27 | 199611 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/02/27 | 1994175 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
2021/02/27 | 1992 | fonts/erewhon/tfm/Erewhon-Italic-sup-ly1.tfm
2021/02/27 | 1988 | fonts/erewhon/tfm/Erewhon-Italic-sup-t1.tfm
2021/02/27 | 1984 | fonts/erewhon/tfm/Erewhon-Bold-sup-t2a.tfm
2021/02/27 | 1980 | fonts/erewhon/tfm/Erewhon-Italic-sup-t1--base.tfm
-2021/02/27 | 198088 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
2021/02/27 | 1968 | fonts/erewhon/tfm/Erewhon-Regular-sup-t2a.tfm
2021/02/27 | 1968 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-sc-ly1--base.tfm
2021/02/27 | 1968 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-sc-ly1--base.tfm
@@ -1022,9 +1175,7 @@
2021/02/27 | 1964 | fonts/erewhon/tfm/Erewhon-RegularSlanted-sup-t1.tfm
2021/02/27 | 1960 | fonts/erewhon/tfm/Erewhon-RegularSlanted-sup-ly1.tfm
2021/02/27 | 1956 | fonts/erewhon/tfm/Erewhon-RegularSlanted-sup-t1--base.tfm
-2021/02/27 | 195649 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
2021/02/27 | 19552 | systems/texlive/tlnet/archive/attachfile2.source.r57958.tar.xz
-2021/02/27 | 195508 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
2021/02/27 | 1952 | fonts/erewhon/tfm/Erewhon-BoldSlanted-sup-t1.tfm
2021/02/27 | 1952 | fonts/erewhon/tfm/Erewhon-BoldItalic-osf-sc-ly1--base.tfm
2021/02/27 | 1948 | fonts/erewhon/tfm/Erewhon-Regular-sup-t2b.tfm
@@ -1038,7 +1189,6 @@
2021/02/27 | 1940 | fonts/erewhon/tfm/Erewhon-BoldSlanted-sup-t1--base.tfm
2021/02/27 | 1936 | fonts/erewhon/tfm/Erewhon-Italic-osf-sc-ly1--base.tfm
2021/02/27 | 1936 | fonts/erewhon/tfm/Erewhon-BoldSlanted-lf-sc-ly1--base.tfm
-2021/02/27 | 193589 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
2021/02/27 | 1932 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-sc-t1--base.tfm
2021/02/27 | 1932 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-sc-ly1--base.tfm
2021/02/27 | 1932 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-sc-ly1--base.tfm
@@ -1166,12 +1316,8 @@
2021/02/27 | 1820 | fonts/erewhon/tfm/Erewhon-Regular-tlf-sc-t2c--base.tfm
2021/02/27 | 1816 | fonts/erewhon/tfm/Erewhon-Regular-sup-t1.tfm
2021/02/27 | 1812 | fonts/erewhon/tfm/Erewhon-Bold-sup-ly1.tfm
-2021/02/27 | 18097 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
2021/02/27 | 1804 | fonts/erewhon/tfm/Erewhon-Regular-sup-t1--base.tfm
2021/02/27 | 1804 | fonts/erewhon/tfm/Erewhon-Regular-sup-ly1.tfm
-2021/02/27 | 180172 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/02/27 | 17960 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/02/27 | 179162 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
2021/02/27 | 1748 | fonts/erewhon/tfm/Erewhon-Bold-osf-t1--base.tfm
2021/02/27 | 1744 | fonts/erewhon/tfm/Erewhon-Regular-osf-sc-ly1--base.tfm
2021/02/27 | 1744 | fonts/erewhon/tfm/Erewhon-Regular-lf-sc-ly1--base.tfm
@@ -1248,7 +1394,6 @@
2021/02/27 | 1720 | fonts/erewhon/tfm/Erewhon-Regular-dnom-t1--base.tfm
2021/02/27 | 1720 | fonts/erewhon/tfm/Erewhon-Bold-tosf-sc-ly1--base.tfm
2021/02/27 | 1720 | fonts/erewhon/tfm/Erewhon-Bold-tlf-sc-ly1--base.tfm
-2021/02/27 | 1717695 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
2021/02/27 | 1716 | macros/latex/contrib/hyperref/manifest.txt
2021/02/27 | 1716 | fonts/erewhon/vf/Erewhon-Bold-lf-t1.vf
2021/02/27 | 1716 | fonts/erewhon/tfm/Erewhon-Regular-tosf-t1--base.tfm
@@ -1312,7 +1457,6 @@
2021/02/27 | 1688 | fonts/erewhon/vf/Erewhon-Bold-inf-t1.vf
2021/02/27 | 1688 | fonts/erewhon/vf/Erewhon-Bold-dnom-t1.vf
2021/02/27 | 1688 | fonts/erewhon/tfm/Erewhon-Regular-lf-sc-t1--base.tfm
-2021/02/27 | 167875 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
2021/02/27 | 1664 | fonts/erewhon/tfm/Erewhon-Regular-tosf-sc-t1--base.tfm
2021/02/27 | 1664 | fonts/erewhon/tfm/Erewhon-Regular-tlf-sc-t1--base.tfm
2021/02/27 | 1660920 | systems/texlive/tlnet/archive/libertinus-fonts.r57944.tar.xz
@@ -1328,11 +1472,8 @@
2021/02/27 | 1640 | fonts/erewhon/vf/Erewhon-Italic-tlf-sc-t2a.vf
2021/02/27 | 1640 | fonts/erewhon/vf/Erewhon-Italic-osf-sc-t2a.vf
2021/02/27 | 1640 | fonts/erewhon/vf/Erewhon-Italic-lf-sc-t2a.vf
-2021/02/27 | 163654 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
2021/02/27 | 1632 | fonts/erewhon/tfm/Erewhon-Italic-osf-ts1--base.tfm
2021/02/27 | 1632 | fonts/erewhon/tfm/Erewhon-Italic-lf-ts1--base.tfm
-2021/02/27 | 16324 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2021/02/27 | 16252 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
2021/02/27 | 1624 | fonts/erewhon/tfm/Erewhon-Italic-osf-ts1.tfm
2021/02/27 | 1624 | fonts/erewhon/tfm/Erewhon-Italic-lf-ts1.tfm
2021/02/27 | 1608 | fonts/erewhon/tfm/Erewhon-Italic-tosf-ts1--base.tfm
@@ -1343,7 +1484,6 @@
2021/02/27 | 1600 | fonts/erewhon/tfm/Erewhon-Italic-tlf-ts1.tfm
2021/02/27 | 1600 | fonts/erewhon/tfm/Erewhon-BoldItalic-osf-ts1--base.tfm
2021/02/27 | 1600 | fonts/erewhon/tfm/Erewhon-BoldItalic-lf-ts1--base.tfm
-2021/02/27 | 159811 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2021/02/27 | 1596 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-ts1.tfm
2021/02/27 | 1596 | fonts/erewhon/tfm/Erewhon-RegularSlanted-osf-ts1--base.tfm
2021/02/27 | 1596 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-ts1.tfm
@@ -1390,13 +1530,11 @@
2021/02/27 | 1540 | fonts/erewhon/vf/Erewhon-Italic-osf-sc-t2c.vf
2021/02/27 | 1540 | fonts/erewhon/vf/Erewhon-Italic-lf-sc-t2c.vf
2021/02/27 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/02/27 | 153932 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
2021/02/27 | 1532 | fonts/erewhon/tfm/Erewhon-Regular-osf-ts1.tfm
2021/02/27 | 1532 | fonts/erewhon/tfm/Erewhon-Regular-lf-ts1.tfm
2021/02/27 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2021/02/27 | 1528 | fonts/erewhon/tfm/Erewhon-Regular-osf-ts1--base.tfm
2021/02/27 | 1528 | fonts/erewhon/tfm/Erewhon-Regular-lf-ts1--base.tfm
-2021/02/27 | 152798 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2021/02/27 | 152685 | macros/latex/contrib/hyperref/doc/hyperref-doc.tex
2021/02/27 | 15162 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-oa.sty
2021/02/27 | 1504 | fonts/erewhon/tfm/Erewhon-Regular-tosf-ts1.tfm
@@ -1404,14 +1542,9 @@
2021/02/27 | 1500 | fonts/erewhon/tfm/Erewhon-Regular-tosf-ts1--base.tfm
2021/02/27 | 1500 | fonts/erewhon/tfm/Erewhon-Regular-tlf-ts1--base.tfm
2021/02/27 | 14952 | systems/texlive/tlnet/archive/pxjahyper.r57946.tar.xz
-2021/02/27 | 147128 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/02/27 | 146987 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
2021/02/27 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2021/02/27 | 145616 | systems/texlive/tlnet/archive/microtype.source.r57947.tar.xz
2021/02/27 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2021/02/27 | 14333 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2021/02/27 | 1424111 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/02/27 | 1418731 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
2021/02/27 | 1404 | fonts/erewhon/tfm/Erewhon-Bold-osf-ts1.tfm
2021/02/27 | 1404 | fonts/erewhon/tfm/Erewhon-Bold-lf-ts1.tfm
2021/02/27 | 1402 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-verbose-note-common.cbx
@@ -1424,28 +1557,18 @@
2021/02/27 | 1376 | fonts/erewhon/tfm/Erewhon-Bold-tosf-ts1--base.tfm
2021/02/27 | 1376 | fonts/erewhon/tfm/Erewhon-Bold-tlf-ts1--base.tfm
2021/02/27 | 13747 | fonts/erewhon/doc/erewhon-doc.tex
-2021/02/27 | 136449 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
2021/02/27 | 135 | macros/latex/contrib/exam/exam.md5
2021/02/27 | 13504 | fonts/erewhon/tfm/Erewhon-BoldSlanted-osf-sc-t1.tfm
2021/02/27 | 13492 | fonts/erewhon/tfm/Erewhon-BoldSlanted-lf-sc-t1.tfm
-2021/02/27 | 134916 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
2021/02/27 | 13488 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-sc-t1.tfm
2021/02/27 | 13488 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-sc-t1.tfm
-2021/02/27 | 13476 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
2021/02/27 | 1339 | graphics/pstricks/contrib/pst-optexp/README
2021/02/27 | 13320 | fonts/erewhon/tfm/Erewhon-Bold-osf-sc-t1.tfm
2021/02/27 | 13308 | fonts/erewhon/tfm/Erewhon-Bold-lf-sc-t1.tfm
2021/02/27 | 13304 | fonts/erewhon/tfm/Erewhon-Bold-tosf-sc-t1.tfm
2021/02/27 | 13304 | fonts/erewhon/tfm/Erewhon-Bold-tlf-sc-t1.tfm
-2021/02/27 | 131376 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2021/02/27 | 1305354 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2021/02/27 | 1295170 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
2021/02/27 | 1285 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-examples.bib
-2021/02/27 | 1285122 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
2021/02/27 | 1265711 | macros/latex/contrib/nameauth.zip
-2021/02/27 | 1257799 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/02/27 | 1257572 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/02/27 | 124944 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2021/02/27 | 123954804 | macros/context/latest/cont-tmf.zip
2021/02/27 | 12367 | macros/luatex/latex/newpax/newpax.tex
2021/02/27 | 12352 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-biblatex-aux.def
@@ -1453,30 +1576,19 @@
2021/02/27 | 121624 | systems/texlive/tlnet/archive/pxjahyper.doc.r57946.tar.xz
2021/02/27 | 12103 | systems/doc/pdftex/manual/pdftex-syntax.txt
2021/02/27 | 117559 | macros/latex/contrib/hyperref/ChangeLog.txt
-2021/02/27 | 1175300 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2021/02/27 | 1175093 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
2021/02/27 | 11724 | macros/latex/contrib/biblatex-contrib/biblatex-ext/ext-authoryear-ecomp.cbx
-2021/02/27 | 1171600 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/02/27 | 116980 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
2021/02/27 | 11686 | macros/latex/contrib/biblatex-contrib/biblatex-ext/CHANGES.md
-2021/02/27 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2021/02/27 | 1144677 | macros/latex/contrib/nameauth/nameauth.pdf
-2021/02/27 | 114015 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/02/27 | 112293 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
2021/02/27 | 11048 | systems/texlive/tlnet/archive/attachfile2.r57958.tar.xz
-2021/02/27 | 109199 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
2021/02/27 | 108326 | macros/generic/schemata/schemata.dtx
2021/02/27 | 10827 | macros/latex/contrib/biblatex-contrib/biblatex-ext/biblatex-ext-tabular.sty
-2021/02/27 | 1079140 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
2021/02/27 | 10781 | graphics/pstricks/contrib/pst-optexp/Changes
2021/02/27 | 10648740 | systems/win32/w32tex/ptex-w32.tar.xz
-2021/02/27 | 104764 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
2021/02/27 | 10416 | fonts/erewhon/tfm/Erewhon-BoldSlanted-osf-sc-ly1.tfm
2021/02/27 | 10404 | fonts/erewhon/tfm/Erewhon-BoldSlanted-lf-sc-ly1.tfm
2021/02/27 | 10400 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tosf-sc-ly1.tfm
2021/02/27 | 10400 | fonts/erewhon/tfm/Erewhon-BoldSlanted-tlf-sc-ly1.tfm
2021/02/27 | 10369 | systems/doc/pdftex/manual/ChangeLog
-2021/02/27 | 103270 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
2021/02/27 | 10230 | fonts/erewhon/README
2021/02/27 | 10224 | fonts/erewhon/tfm/Erewhon-Bold-osf-sc-ly1.tfm
2021/02/27 | 10212 | fonts/erewhon/tfm/Erewhon-Bold-lf-sc-ly1.tfm
@@ -1486,7 +1598,6 @@
2021/02/27 | 10196 | fonts/erewhon/tfm/Erewhon-RegularSlanted-lf-t2a.tfm
2021/02/27 | 10180 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tosf-t2a.tfm
2021/02/27 | 10180 | fonts/erewhon/tfm/Erewhon-RegularSlanted-tlf-t2a.tfm
-2021/02/27 | 101679 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
2021/02/27 | 10016 | fonts/erewhon/tfm/Erewhon-Regular-osf-t2a.tfm
2021/02/27 | 10016 | fonts/erewhon/tfm/Erewhon-Regular-lf-t2a.tfm
2021/02/27 | 10000 | fonts/erewhon/tfm/Erewhon-Regular-tosf-t2a.tfm
@@ -1540,6 +1651,7 @@
2021/02/26 | 7976 | systems/texlive/tlnet/archive/bath-bst.r57917.tar.xz
2021/02/26 | 796 | support/arara/scripts/rules/arara-rule-copy.yaml
2021/02/26 | 785603 | macros/latex-dev/base/ltfilehook-code.pdf
+2021/02/26 | 78502 | macros/latex/contrib/aastex/sample631.tex
2021/02/26 | 7800 | systems/texlive/tlnet/archive/biblatex-bath.r57918.tar.xz
2021/02/26 | 78008 | macros/latex-dev/base/ltshipout.dtx
2021/02/26 | 75661 | macros/latex-dev/required/tools/longtable.dtx
@@ -1555,6 +1667,7 @@
2021/02/26 | 72152 | macros/latex-dev/base/ltfsstrc.dtx
2021/02/26 | 72141 | macros/latex-dev/required/tools/verbatim.dtx
2021/02/26 | 7200 | macros/latex-dev/base/sample2e.tex
+2021/02/26 | 71431 | macros/latex/contrib/aastex/interactive.tar.gz
2021/02/26 | 7109 | macros/latex-dev/base/alltt.dtx
2021/02/26 | 69050 | macros/latex-dev/base/clsguide.tex
2021/02/26 | 68913 | macros/latex-dev/base/ltpictur.dtx
@@ -1566,7 +1679,6 @@
2021/02/26 | 6760 | macros/latex-dev/base/slides.ins
2021/02/26 | 6714 | macros/latex-dev/base/latexsym.dtx
2021/02/26 | 666644 | macros/latex/contrib/microtype/microtype.dtx
-2021/02/26 | 66574640 | systems/win32/w32tex/biblatex-biber.tar.xz
2021/02/26 | 6624 | fonts/libertinus-fonts/README.md
2021/02/26 | 656622 | macros/latex-dev/base/lthooks-doc.pdf
2021/02/26 | 651 | support/arara/scripts/rules/arara-rule-spix.yaml
@@ -1634,6 +1746,7 @@
2021/02/26 | 544026 | macros/latex-dev/base/ltfilehook-doc.pdf
2021/02/26 | 5425 | macros/latex-dev/base/ltnews07.tex
2021/02/26 | 5417 | macros/latex-dev/base/ltnews12.tex
+2021/02/26 | 54003 | support/gregoriotex/doc/Gabc.tex
2021/02/26 | 53984 | fonts/libertinus-fonts/otf/LibertinusKeyboard-Regular.otf
2021/02/26 | 5390 | macros/latex-dev/base/ltnews06.tex
2021/02/26 | 53224 | support/arara/doc/figures/messagebox2.pdf
@@ -1666,6 +1779,7 @@
2021/02/26 | 490887 | macros/latex-dev/base/ltpara-doc.pdf
2021/02/26 | 489 | macros/latex/contrib/graphics-def/README.md
2021/02/26 | 48646 | macros/latex-dev/base/ltplain.dtx
+2021/02/26 | 484824 | support/gregoriotex/doc/GregorioNabcRef.pdf
2021/02/26 | 47703 | macros/latex-dev/base/lttab.dtx
2021/02/26 | 4762 | macros/latex-dev/base/ltlength.dtx
2021/02/26 | 4757868 | macros/latex-dev/base/source2e.pdf
@@ -1729,6 +1843,7 @@
2021/02/26 | 35302 | macros/latex-dev/base/ltdirchk.dtx
2021/02/26 | 3514 | macros/latex-dev/base/README.md
2021/02/26 | 351478 | macros/latex-dev/required/tools/theorem.pdf
+2021/02/26 | 345994 | macros/latex/contrib/aastex/f4.pdf
2021/02/26 | 3434 | macros/latex-dev/base/makeindx.ins
2021/02/26 | 3401 | macros/latex-dev/base/proc.ins
2021/02/26 | 33863 | macros/latex-dev/required/tools/varioref-2016-02-16.sty
@@ -1786,6 +1901,7 @@
2021/02/26 | 279844 | fonts/libertinus-fonts/otf/LibertinusSerif-Bold.otf
2021/02/26 | 278038 | macros/latex-dev/required/tools/tabularx.pdf
2021/02/26 | 276512 | fonts/libertinus-fonts/otf/LibertinusSerif-Semibold.otf
+2021/02/26 | 27604 | macros/latex/contrib/aastex/orcid-ID.png
2021/02/26 | 275464 | fonts/libertinus-fonts/otf/LibertinusSans-Bold.otf
2021/02/26 | 2740 | macros/latex-dev/required/firstaid/firstaid.ins
2021/02/26 | 2738 | macros/latex-dev/base/tex2.txt
@@ -1816,6 +1932,8 @@
2021/02/26 | 2524 | macros/latex-dev/required/tools/bm.ins
2021/02/26 | 252432 | macros/latex-dev/base/ltnews27.pdf
2021/02/26 | 252153 | macros/latex-dev/base/lb2.pdf
+2021/02/26 | 2497 | macros/latex/contrib/aastex/README
+2021/02/26 | 24760 | support/gregoriotex/fonts/truetype/greextra.ttf
2021/02/26 | 24759 | macros/latex/contrib/graphics-def.zip
2021/02/26 | 24648 | macros/latex-dev/required/tools/trace.dtx
2021/02/26 | 245818 | macros/latex-dev/base/ltnews19.pdf
@@ -1852,11 +1970,13 @@
2021/02/26 | 2108 | support/arara/doc/chapters/license.tex
2021/02/26 | 2100 | support/arara/scripts/rules/arara-rule-perltex.yaml
2021/02/26 | 208358 | macros/latex-dev/base/latexsym.pdf
+2021/02/26 | 20541 | macros/latex/contrib/aastex/KT_Eri.pdf
2021/02/26 | 205343 | macros/latex-dev/required/tools/afterpage.pdf
2021/02/26 | 205161 | macros/latex-dev/base/ltnews25.pdf
2021/02/26 | 20469 | macros/latex-dev/base/ltnews.cls
2021/02/26 | 20434 | macros/latex-dev/base/lgc2.err
2021/02/26 | 204007 | macros/latex-dev/base/doc.dtx
+2021/02/26 | 203280 | support/gregoriotex/fonts/truetype/gresgmodern.ttf
2021/02/26 | 202681 | fonts/libertinus-fonts/documentation/Sample.pdf
2021/02/26 | 2022988 | install/macros/latex/contrib/microtype.tds.zip
2021/02/26 | 20201 | support/arara/doc/chapters/configuration.tex
@@ -1878,9 +1998,12 @@
2021/02/26 | 18940 | macros/latex-dev/base/ltnews29.tex
2021/02/26 | 18859 | macros/latex-dev/base/ltnews33.tex
2021/02/26 | 1884 | support/arara/scripts/rules/arara-rule-latexmk.yaml
+2021/02/26 | 187532 | support/gregoriotex/fonts/truetype/grelaon.ttf
+2021/02/26 | 1870292 | support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttf
2021/02/26 | 18404 | macros/latex-dev/base/nfssfont.dtx
2021/02/26 | 1837 | support/arara/scripts/rules/arara-rule-detex.yaml
2021/02/26 | 183519 | macros/latex-dev/required/tools/shellesc.pdf
+2021/02/26 | 1832636 | support/gregoriotex/fonts/truetype/greciliae-hollow.ttf
2021/02/26 | 18303 | macros/latex-dev/base/ifthen.dtx
2021/02/26 | 18299 | macros/latex-dev/base/ltx3info.tex
2021/02/26 | 182354 | macros/latex-dev/required/tools/multicol.dtx
@@ -1898,6 +2021,7 @@
2021/02/26 | 173 | macros/latex-dev/base/ltpara-doc.tex
2021/02/26 | 173683 | macros/latex-dev/base/makeindx.pdf
2021/02/26 | 173322 | macros/latex-dev/base/ltnews13.pdf
+2021/02/26 | 173136 | macros/latex/contrib/aastex/f5.pdf
2021/02/26 | 1727 | support/arara/doc/arara.1
2021/02/26 | 1722 | support/arara/scripts/rules/arara-rule-pythontex.yaml
2021/02/26 | 172216 | macros/latex-dev/base/tlc2.err
@@ -1922,12 +2046,14 @@
2021/02/26 | 16105 | macros/latex-dev/base/ltbibl.dtx
2021/02/26 | 160836 | fonts/libertinus-fonts/documentation/Math-Sample.pdf
2021/02/26 | 160519 | macros/latex-dev/base/manual.pdf
+2021/02/26 | 159476 | support/gregoriotex/fonts/truetype/gregall.ttf
2021/02/26 | 159312 | macros/latex-dev/base/ltnews10.pdf
2021/02/26 | 157801 | macros/latex-dev/required/tools/indentfirst.pdf
2021/02/26 | 15699 | macros/latex-dev/base/slifonts.fdd
2021/02/26 | 15625 | macros/latex-dev/base/ltxref.dtx
2021/02/26 | 156210 | macros/latex-dev/base/classes.dtx
2021/02/26 | 155052 | macros/latex-dev/base/ltnews08.pdf
+2021/02/26 | 15435 | macros/latex/contrib/aastex/HV_Cet.pdf
2021/02/26 | 154032 | macros/latex-dev/required/tools/fontsmpl.pdf
2021/02/26 | 1522 | support/arara/scripts/rules/arara-rule-xelatex.yaml
2021/02/26 | 1522 | support/arara/scripts/rules/arara-rule-uplatex.yaml
@@ -1938,12 +2064,14 @@
2021/02/26 | 14969 | macros/latex-dev/base/source2e.tex
2021/02/26 | 14891 | macros/latex-dev/base/ltnews28.tex
2021/02/26 | 148738 | macros/latex-dev/base/ltoutenc.dtx
+2021/02/26 | 14792 | macros/latex/contrib/aastex/cost.pdf
2021/02/26 | 1478 | support/arara/scripts/rules/arara-rule-asymptote.yaml
2021/02/26 | 147585 | macros/latex-dev/base/ltnews12.pdf
2021/02/26 | 1470 | support/arara/scripts/rules/arara-rule-knitr.yaml
2021/02/26 | 146533 | macros/latex-dev/required/tools/rawfonts.pdf
2021/02/26 | 146533 | macros/latex-dev/base/ltnews16.pdf
2021/02/26 | 14649 | macros/latex/contrib/graphics-def/xetex.def
+2021/02/26 | 14627 | macros/latex/contrib/aastex/U_Sco.pdf
2021/02/26 | 146199 | macros/latex-dev/base/webcomp.pdf
2021/02/26 | 14613 | support/arara/doc/chapters/deploying.tex
2021/02/26 | 1448 | support/arara/scripts/rules/arara-rule-dvisvgm.yaml
@@ -1952,13 +2080,16 @@
2021/02/26 | 143685 | macros/latex-dev/base/ltnews04.pdf
2021/02/26 | 14341 | macros/latex-dev/base/lppl-1-1.txt
2021/02/26 | 142908 | macros/latex-dev/base/ltnews06.pdf
+2021/02/26 | 14216 | macros/latex/contrib/aastex/RS_Oph.pdf
2021/02/26 | 14215 | support/arara/doc/logos/logo1.pdf
2021/02/26 | 14166 | support/arara/doc/logos/logo2.pdf
2021/02/26 | 140957 | support/arara/doc/figures/arara.png
2021/02/26 | 14077 | macros/latex-dev/required/tools/afterpage.dtx
2021/02/26 | 1402 | fonts/libertinus-fonts/CONTRIBUTING.md
2021/02/26 | 140033 | language/japanese/pxjahyper.zip
+2021/02/26 | 13986 | macros/latex/contrib/aastex/V2491_Cyg.pdf
2021/02/26 | 138139 | support/arara/doc/chapters/rules.tex
+2021/02/26 | 13810 | macros/latex/contrib/aastex/LMC_2009.pdf
2021/02/26 | 138043 | macros/latex-dev/base/ltnews07.pdf
2021/02/26 | 136160 | systems/texlive/tlnet/archive/tex4ht.doc.r57929.tar.xz
2021/02/26 | 13532 | support/arara/doc/chapters/mvel.tex
@@ -1966,6 +2097,7 @@
2021/02/26 | 13511736 | support/arara.zip
2021/02/26 | 1347 | support/arara/doc/figures/gl.pdf
2021/02/26 | 1341 | macros/latex-dev/base/ltnews18.tex
+2021/02/26 | 13402 | macros/latex/contrib/aastex/sample631.bib
2021/02/26 | 1337 | support/arara/scripts/rules/arara-rule-clean.yaml
2021/02/26 | 133571 | macros/latex-dev/base/ltclass.dtx
2021/02/26 | 13301 | macros/latex-dev/base/proc.dtx
@@ -2006,12 +2138,16 @@
2021/02/26 | 11604148 | support/arara/scripts/arara.jar
2021/02/26 | 11590 | macros/latex-dev/base/ltpage.dtx
2021/02/26 | 114211 | macros/latex-dev/required/tools/varioref.dtx
+2021/02/26 | 1134608 | support/gregoriotex/fonts/truetype/greciliae-op.ttf
2021/02/26 | 112505 | language/hyphenation/dehyph-exptl/dehyph-exptl.pdf
2021/02/26 | 111954 | macros/latex-dev/base/ltnews11.pdf
2021/02/26 | 11153 | macros/latex-dev/required/tools/hhline.dtx
2021/02/26 | 1111 | support/arara/scripts/rules/arara-rule-xdvipdfmx.yaml
2021/02/26 | 1107 | support/arara/scripts/rules/arara-rule-animate.yaml
2021/02/26 | 1105 | support/arara/scripts/rules/arara-rule-authorindex.yaml
+2021/02/26 | 1105848 | support/gregoriotex/fonts/truetype/greciliae-hole.ttf
+2021/02/26 | 1105844 | support/gregoriotex/fonts/truetype/greciliae-op-hole.ttf
+2021/02/26 | 1096860 | support/gregoriotex/fonts/truetype/greciliae.ttf
2021/02/26 | 10871 | macros/latex-dev/base/manifest.txt
2021/02/26 | 10776 | macros/latex-dev/required/tools/fontsmpl.dtx
2021/02/26 | 10755 | language/hyphenation/dehyph-exptl/INSTALL
@@ -2028,6 +2164,7 @@
2021/02/26 | 1054 | fonts/libertinus-fonts/CONTRIBUTORS.txt
2021/02/26 | 1050 | support/arara/scripts/rules/arara-rule-tex.yaml
2021/02/26 | 104 | macros/latex-dev/base/ltshipout-code.tex
+2021/02/26 | 1049880 | macros/latex/contrib/aastex/sample631.pdf
2021/02/26 | 1046 | support/arara/doc/rules/quickstart.yaml
2021/02/26 | 10423 | macros/latex-dev/base/ltvers.dtx
2021/02/26 | 10375 | macros/latex-dev/base/ltfsscmp.dtx
@@ -2191,7 +2328,6 @@
2021/02/24 | 2294 | macros/latex/contrib/biblatex-contrib/biblatex-chem/chem-biochem.cbx
2021/02/24 | 2228 | macros/latex/contrib/biblatex-contrib/biblatex-chem/chem-acs.cbx
2021/02/24 | 2226 | macros/latex/contrib/biblatex-contrib/biblatex-chem/chem-rsc.cbx
-2021/02/24 | 2209876 | systems/win32/w32tex/win64/context-w64.tar.xz
2021/02/24 | 21740 | systems/texlive/tlnet/archive/cmextra.r57866.tar.xz
2021/02/24 | 19468 | macros/latex/contrib/biblatex-contrib/biblatex-chem/chem-acs.bbx
2021/02/24 | 18758 | macros/latex/contrib/biblatex-contrib/biblatex-chem/chem-biochem.bbx
@@ -2203,54 +2339,59 @@
2021/02/24 | 1516879 | install/macros/latex/contrib/biblatex-contrib/biblatex-chem.tds.zip
2021/02/24 | 1515975 | macros/latex/contrib/biblatex-contrib/biblatex-chem.zip
2021/02/24 | 15132 | systems/texlive/tlnet/archive/oup-authoring-template.r57866.tar.xz
-2021/02/24 | 145993724 | systems/win32/w32tex/context.tar.xz
2021/02/24 | 12426 | macros/latex/contrib/biblatex-contrib/biblatex-chem/biblatex-chem.tex
2021/02/24 | 116940 | systems/texlive/tlnet/archive/ut-thesis.doc.r57866.tar.xz
2021/02/24 | 108816 | systems/texlive/tlnet/archive/overlays.doc.r57866.tar.xz
2021/02/24 | 108164 | systems/texlive/tlnet/archive/udesoftec.r57866.tar.xz
2021/02/24 | 10100 | systems/texlive/tlnet/archive/easybook.r57866.tar.xz
-2021/02/23 | 9799 | macros/latex/contrib/udesoftec/udesoftec-bibcommon.sty
+2021/02/23 | 99641 | support/gregoriotex/tex/luatex/gregoriotex-spaces.tex
+2021/02/23 | 99083 | support/gregoriotex/doc/Command_Index_User.tex
+2021/02/23 | 97925 | support/gregoriotex/tex/luatex/gregoriotex-signs.tex
2021/02/23 | 935 | macros/latex/contrib/principia/README
2021/02/23 | 93264 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.pdf
2021/02/23 | 90552 | systems/texlive/tlnet/archive/nicematrix.source.r57845.tar.xz
+2021/02/23 | 8845 | support/gregoriotex/tex/luatex/gregoriotex-chars.tex
2021/02/23 | 843358 | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
2021/02/23 | 830 | macros/latex/contrib/easybook/doc/ref/refs.bib
2021/02/23 | 8285 | macros/latex/contrib/overlays/sample.tex
+2021/02/23 | 8220 | support/gregoriotex/doc/GregorioRef.tex
+2021/02/23 | 8181 | support/gregoriotex/tex/luatex/gregoriotex-symbols.tex
2021/02/23 | 807656 | systems/texlive/tlnet/archive/babel.doc.r57847.tar.xz
2021/02/23 | 7767 | macros/latex/contrib/tagpdf/tagpdf-tree.dtx
2021/02/23 | 7687 | macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf
2021/02/23 | 7668 | macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
2021/02/23 | 76683 | macros/latex/contrib/tagpdf/tagpdf.tex
2021/02/23 | 750 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex
+2021/02/23 | 72754 | support/gregoriotex/tex/luatex/gregoriotex-main.tex
2021/02/23 | 6914596 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2021/02/23 | 67977 | macros/latex/contrib/overlays/sample.pdf
2021/02/23 | 673392 | systems/texlive/tlnet/archive/babel.source.r57847.tar.xz
-2021/02/23 | 659103 | install/macros/latex/contrib/udesoftec.tds.zip
2021/02/23 | 656173 | macros/latex/contrib/udesoftec.zip
-2021/02/23 | 6536 | macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
2021/02/23 | 6484 | macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf
2021/02/23 | 6468837 | macros/latex/contrib/pdfmanagement-testphase.zip
+2021/02/23 | 6362 | support/gregoriotex/tex/lualatex/gregoriotex.sty
2021/02/23 | 632 | macros/latex/contrib/tagpdf/ex-tagpdf-template.tex
+2021/02/23 | 63105 | support/gregoriotex/tex/luatex/gregoriotex-syllable.tex
2021/02/23 | 6286 | macros/latex/contrib/tagpdf/ex-softhyphen.pdf
2021/02/23 | 6285 | macros/latex/contrib/overlays/overlays.sty
2021/02/23 | 625958 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+2021/02/23 | 62053 | support/gregoriotex/doc/Command_Index_gregorio.tex
2021/02/23 | 619976 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+2021/02/23 | 6015 | support/gregoriotex/tex/luatex/gregoriotex.tex
2021/02/23 | 5967 | macros/latex/contrib/tagpdf/tagpdf-checks.dtx
-2021/02/23 | 56 | macros/latex/contrib/udesoftec/UPDATE-INSTRUCTIONS
2021/02/23 | 5684 | systems/texlive/tlnet/archive/tikzmark.r57843.tar.xz
2021/02/23 | 560 | macros/latex/contrib/overlays/README
2021/02/23 | 55490 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
2021/02/23 | 545241 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+2021/02/23 | 53988 | support/gregoriotex/tex/luatex/gregoriotex.lua
2021/02/23 | 5334 | macros/latex/contrib/overlays/overlays.tex
2021/02/23 | 532029 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
2021/02/23 | 521875 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
2021/02/23 | 519787 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
2021/02/23 | 496017 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
-2021/02/23 | 49306 | macros/latex/contrib/udesoftec/udesoftec.cls
2021/02/23 | 487709 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
-2021/02/23 | 481795 | macros/latex/contrib/udesoftec/udesoftec-doc.pdf
2021/02/23 | 4722 | macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf
-2021/02/23 | 4646 | macros/latex/contrib/udesoftec/udesoftec-doc-examplebib.bib
+2021/02/23 | 4546 | support/gregoriotex/tex/luatex/gregorio-vowels.dat
2021/02/23 | 4486 | macros/latex/contrib/tagpdf/tagpdf-roles.dtx
2021/02/23 | 4357 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf
2021/02/23 | 4235 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.tex
@@ -2260,40 +2401,45 @@
2021/02/23 | 41344 | systems/texlive/tlnet/archive/tuda-ci.r57846.tar.xz
2021/02/23 | 410316 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
2021/02/23 | 395182 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+2021/02/23 | 3845 | support/gregoriotex/doc/Appendix_Font_Tables.tex
2021/02/23 | 381284 | macros/latex/contrib/principia/principia.pdf
2021/02/23 | 36910 | macros/latex/contrib/overlays/overlays.pdf
+2021/02/23 | 3647 | support/gregoriotex/tex/luatex/gregoriotex-common.tex
2021/02/23 | 34118 | macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf
-2021/02/23 | 32222 | macros/latex/contrib/udesoftec/udesoftec-doc-exampleimage.pdf
2021/02/23 | 31740 | systems/texlive/tlnet/archive/spath3.source.r57842.tar.xz
2021/02/23 | 316964 | systems/texlive/tlnet/archive/csquotes.doc.r57844.tar.xz
-2021/02/23 | 30154 | macros/latex/contrib/udesoftec/udesoftec-doc.tex
-2021/02/23 | 29122 | macros/latex/contrib/udesoftec/udesoftec.bst
+2021/02/23 | 2980 | support/gregoriotex/tex/lualatex/gregoriosyms.sty
2021/02/23 | 2838586 | macros/latex/contrib/tagpdf/tagpdf.pdf
2021/02/23 | 2794 | macros/latex/contrib/tagpdf/tagpdf-space.dtx
2021/02/23 | 27768 | macros/latex/contrib/tagpdf/tagpdf-backend.dtx
2021/02/23 | 26637 | macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+2021/02/23 | 26606 | support/gregoriotex/doc/gsp-sample.tex
2021/02/23 | 26472 | systems/texlive/tlnet/archive/nicematrix.r57845.tar.xz
-2021/02/23 | 2535 | macros/latex/contrib/udesoftec/udesoftec-bst.sty
+2021/02/23 | 25835 | support/gregoriotex/tex/luatex/gregoriotex-gsp-default.tex
2021/02/23 | 2408 | macros/latex/contrib/tagpdf/ex-patch-list.tex
-2021/02/23 | 24073 | macros/latex/contrib/udesoftec/udesoftec-cover-ude-de.pdf
-2021/02/23 | 23652 | macros/latex/contrib/udesoftec/udesoftec-cover-ude-en.pdf
+2021/02/23 | 2378 | support/gregoriotex/tex/luatex/gregoriotex-nabc.tex
+2021/02/23 | 23682 | support/gregoriotex/tex/luatex/gregoriotex-signs.lua
2021/02/23 | 23366 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split.pdf
2021/02/23 | 23078 | macros/latex/contrib/tagpdf/tagpdf-struct.dtx
2021/02/23 | 21883 | macros/latex/contrib/tagpdf/tagpdf-mc.dtx
+2021/02/23 | 2175 | support/gregoriotex/tex/luatex/gregoriotex-symbols.lua
2021/02/23 | 21472 | systems/texlive/tlnet/archive/spath3.r57842.tar.xz
+2021/02/23 | 2076 | support/gregoriotex/fonts/sources/convertsfdtottf.py
+2021/02/23 | 2050 | support/gregoriotex/fonts/sources/simplify.py
+2021/02/23 | 20061 | support/gregoriotex/doc/GregorioRef.lua
2021/02/23 | 1954 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split.tex
2021/02/23 | 1917 | macros/latex/contrib/overlays/ChangeLog
+2021/02/23 | 19158768 | support/gregoriotex/fonts/sources/gregall.sfd
2021/02/23 | 19105 | macros/latex/contrib/tagpdf/ex-AF-file.pdf
2021/02/23 | 1872364 | systems/win32/w32tex/win64/ptex-w64.tar.xz
2021/02/23 | 18632 | systems/texlive/tlnet/archive/tikzmark.source.r57843.tar.xz
+2021/02/23 | 18601 | support/gregoriotex/tex/luatex/gregoriotex-nabc.lua
2021/02/23 | 18353 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf
2021/02/23 | 1806508 | systems/win32/w32tex/win64/uptex-w64.tar.xz
-2021/02/23 | 1794 | macros/latex/contrib/udesoftec/README
2021/02/23 | 17924 | systems/texlive/tlnet/archive/csquotes.r57844.tar.xz
-2021/02/23 | 1777 | macros/latex/contrib/udesoftec/udesoftec-extra.sty
2021/02/23 | 173916 | systems/texlive/tlnet/archive/babel.r57847.tar.xz
2021/02/23 | 17054 | macros/latex/contrib/principia/principia.sty
-2021/02/23 | 16839 | macros/latex/contrib/udesoftec/udesoftec-biblatex.sty
+2021/02/23 | 167545 | support/gregoriotex/fonts/sources/greciliae-base.sfd
2021/02/23 | 16709 | macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf
2021/02/23 | 16308 | macros/latex/contrib/tagpdf/ex-attribute.pdf
2021/02/23 | 16279 | macros/latex/contrib/principia/principia.tex
@@ -2302,150 +2448,21 @@
2021/02/23 | 151 | macros/latex/contrib/tagpdf/example-input-file.tex
2021/02/23 | 1498 | macros/latex/contrib/tagpdf/ex-structure.tex
2021/02/23 | 1460 | macros/latex/contrib/tagpdf/ex-attribute.tex
+2021/02/23 | 144942 | support/gregoriotex/doc/GregorioNabcRef.tex
2021/02/23 | 13808 | macros/latex/contrib/tagpdf/tagpdf.dtx
2021/02/23 | 1371428 | systems/texlive/tlnet/archive/spath3.doc.r57842.tar.xz
+2021/02/23 | 13555440 | support/gregoriotex/fonts/sources/grelaon.sfd
+2021/02/23 | 130576 | support/gregoriotex/doc/Command_Index_internal.tex
2021/02/23 | 1295 | macros/latex/contrib/tagpdf/README.md
-2021/02/23 | 126486 | macros/latex/contrib/udesoftec/udesoftec-cover-uba.pdf
+2021/02/23 | 125981 | support/gregoriotex/fonts/sources/squarize.py
2021/02/23 | 12226 | macros/latex/contrib/tagpdf/ex-structure-luatex.pdf
2021/02/23 | 1200 | macros/latex/contrib/tagpdf/ex-AF-file.tex
2021/02/23 | 1195 | macros/latex/contrib/pdfmanagement-testphase/README.md
-2021/02/23 | 11461 | macros/latex/contrib/udesoftec/CHANGELOG
2021/02/23 | 112905 | macros/latex/contrib/overlays.zip
2021/02/23 | 11111624 | systems/win32/w32tex/win64/xetex-w64.tar.xz
2021/02/23 | 1095092 | systems/texlive/tlnet/archive/tuda-ci.doc.r57846.tar.xz
2021/02/23 | 10859 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+2021/02/23 | 1070662 | support/gregoriotex/fonts/sources/gresgmodern.sfd
2021/02/23 | 1062 | macros/latex/contrib/tagpdf/ex-formula-problem.tex
+2021/02/23 | 10198 | support/gregoriotex/fonts/sources/stemsschemas.py
2021/02/23 | 1001 | macros/latex/contrib/tagpdf/ex-softhyphen.tex
-2021/02/22 | 9383 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
-2021/02/22 | 9300 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
-2021/02/22 | 9244 | systems/texlive/tlnet/archive/luacolor.source.r57829.tar.xz
-2021/02/22 | 885385 | systems/win32/miktex/tm/packages/biblatex-ext.tar.lzma
-2021/02/22 | 8501 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
-2021/02/22 | 8237 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
-2021/02/22 | 818447 | macros/latex/required/babel/base/babel.pdf
-2021/02/22 | 778055 | macros/latex/required/babel/base/locale.zip
-2021/02/22 | 7392 | macros/latex/required/babel/base/babel.ins
-2021/02/22 | 7388 | systems/texlive/tlnet/archive/tasks.r57835.tar.xz
-2021/02/22 | 7336 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
-2021/02/22 | 70724 | systems/texlive/tlnet/archive/xint.r57832.tar.xz
-2021/02/22 | 7068 | macros/latex/contrib/csquotes/csquotes.cfg
-2021/02/22 | 6881 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
-2021/02/22 | 687247 | macros/latex/required/babel/base/babel.dtx
-2021/02/22 | 6848 | macros/latex/required/babel/base/README.md
-2021/02/22 | 677083 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
-2021/02/22 | 6647 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
-2021/02/22 | 6632494 | systems/win32/miktex/tm/packages/newcomputermodern.tar.lzma
-2021/02/22 | 647667 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
-2021/02/22 | 646376 | systems/win32/miktex/tm/packages/eq-pin2corr.tar.lzma
-2021/02/22 | 645357 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
-2021/02/22 | 6431138 | macros/latex/contrib/tuda-ci.zip
-2021/02/22 | 6331 | macros/latex/contrib/tuda-ci/tex/tudarules.sty
-2021/02/22 | 6314 | macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
-2021/02/22 | 62518 | macros/latex/contrib/csquotes/csquotes.sty
-2021/02/22 | 621765 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
-2021/02/22 | 58 | systems/mac/mactex/MacTeXtras-20210222.zip.md5
-2021/02/22 | 589935 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
-2021/02/22 | 58721055 | systems/win32/miktex/setup/darwin-x86_64/miktex-21.2-darwin-x86_64.dmg
-2021/02/22 | 586772 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
-2021/02/22 | 5859 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
-2021/02/22 | 583234 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
-2021/02/22 | 5817 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty
-2021/02/22 | 5789 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
-2021/02/22 | 578290 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
-2021/02/22 | 574086 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
-2021/02/22 | 558963 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
-2021/02/22 | 550863 | macros/latex/contrib/nicematrix/nicematrix.dtx
-2021/02/22 | 550354 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
-2021/02/22 | 5381 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
-2021/02/22 | 531905 | systems/win32/miktex/tm/packages/easybook.tar.lzma
-2021/02/22 | 52643 | macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
-2021/02/22 | 5170 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
-2021/02/22 | 499 | systems/win32/miktex/source/miktex-21.2.tar.xz.asc
-2021/02/22 | 491262 | systems/win32/miktex/tm/packages/tasks.tar.lzma
-2021/02/22 | 479388 | systems/texlive/tlnet/archive/tasks.doc.r57835.tar.xz
-2021/02/22 | 472701 | systems/win32/miktex/tm/packages/embrac.tar.lzma
-2021/02/22 | 45264 | systems/texlive/tlnet/archive/japanese-otf.source.r57826.tar.xz
-2021/02/22 | 450118 | systems/win32/miktex/tm/packages/elpres.tar.lzma
-2021/02/22 | 444254 | systems/win32/miktex/tm/packages/tikzmark.tar.lzma
-2021/02/22 | 4441 | macros/latex/contrib/tuda-ci/tex/tudacolors.def
-2021/02/22 | 4357 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.ins
-2021/02/22 | 4328 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
-2021/02/22 | 432780 | systems/texlive/tlnet/archive/lwarp.source.r57836.tar.xz
-2021/02/22 | 420606 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2021/02/22 | 4152 | systems/texlive/tlnet/archive/luacolor.r57829.tar.xz
-2021/02/22 | 4145 | macros/latex/contrib/pdfmanagement-testphase/l3ref-tmp.sty
-2021/02/22 | 40561 | macros/latex/contrib/tuda-ci/tex/tudapub.cls
-2021/02/22 | 3901 | macros/latex/contrib/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty
-2021/02/22 | 3871 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
-2021/02/22 | 385488675 | systems/mac/mactex/MacTeXtras-20210222.zip
-2021/02/22 | 38330 | systems/mac/mactex/ExtrasFolder.pdf
-2021/02/22 | 3809 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
-2021/02/22 | 3753 | macros/latex/contrib/csquotes/csq-compat.def
-2021/02/22 | 3526 | macros/latex/required/babel/base/bbidxglo.dtx
-2021/02/22 | 343656 | systems/texlive/tlnet/archive/xint.source.r57832.tar.xz
-2021/02/22 | 340336 | install/macros/latex/contrib/csquotes.tds.zip
-2021/02/22 | 339702 | macros/latex/contrib/csquotes.zip
-2021/02/22 | 3394753 | systems/win32/miktex/tm/packages/acrotex.tar.lzma
-2021/02/22 | 328240 | systems/texlive/tlnet/archive/luacolor.doc.r57829.tar.xz
-2021/02/22 | 3277 | macros/latex/contrib/csquotes/README.md
-2021/02/22 | 325531 | systems/win32/miktex/tm/packages/eq-save.tar.lzma
-2021/02/22 | 3251 | macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
-2021/02/22 | 3243 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty
-2021/02/22 | 3175 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
-2021/02/22 | 30733 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
-2021/02/22 | 3030424 | systems/texlive/tlnet/archive/lwarp.doc.r57836.tar.xz
-2021/02/22 | 294724 | macros/latex/contrib/csquotes/csquotes.pdf
-2021/02/22 | 29402 | macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
-2021/02/22 | 27666992 | systems/win32/miktex/source/miktex-21.2.tar.xz
-2021/02/22 | 2766450 | install/macros/latex/required/babel-base.tds.zip
-2021/02/22 | 2644 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
-2021/02/22 | 25921 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
-2021/02/22 | 25885 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
-2021/02/22 | 25563 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
-2021/02/22 | 25548 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
-2021/02/22 | 24956 | systems/texlive/tlnet/archive/asmeconf.r57833.tar.xz
-2021/02/22 | 2409445 | systems/win32/miktex/tm/packages/xint.tar.lzma
-2021/02/22 | 2350 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
-2021/02/22 | 21932 | macros/latex/required/babel/base/bbcompat.dtx
-2021/02/22 | 2180 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
-2021/02/22 | 2172 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
-2021/02/22 | 21564 | systems/texlive/tlnet/archive/mcf2graph.r57830.tar.xz
-2021/02/22 | 20781 | macros/latex/contrib/csquotes/csquotes.def
-2021/02/22 | 207068 | systems/texlive/tlnet/archive/japanese-otf.r57826.tar.xz
-2021/02/22 | 20616 | macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
-2021/02/22 | 200716 | systems/texlive/tlnet/archive/lwarp.r57836.tar.xz
-2021/02/22 | 1991500 | systems/texlive/tlnet/archive/xint.doc.r57832.tar.xz
-2021/02/22 | 18335 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
-2021/02/22 | 1816416 | systems/win32/miktex/tm/packages/asmeconf.tar.lzma
-2021/02/22 | 1780 | systems/mac/mactex/Licenses.txt
-2021/02/22 | 1779068 | macros/latex/required/babel/base.zip
-2021/02/22 | 1778 | macros/latex/contrib/pdfmanagement-testphase/pdflscape-ltx.sty
-2021/02/22 | 17634 | macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
-2021/02/22 | 17432 | macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
-2021/02/22 | 17395 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls
-2021/02/22 | 1686 | macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
-2021/02/22 | 1684 | macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
-2021/02/22 | 1682 | macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
-2021/02/22 | 1681 | macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
-2021/02/22 | 1680 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
-2021/02/22 | 1676 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
-2021/02/22 | 16688 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls
-2021/02/22 | 1654237 | macros/latex/contrib/nicematrix.zip
-2021/02/22 | 15356 | macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
-2021/02/22 | 152583 | macros/latex/contrib/nicematrix/nicematrix-french.tex
-2021/02/22 | 1473344 | systems/texlive/tlnet/archive/asmeconf.doc.r57833.tar.xz
-2021/02/22 | 142480 | systems/texlive/tlnet/archive/circuitikz.r57831.tar.xz
-2021/02/22 | 1423643 | systems/win32/miktex/tm/packages/spath3.tar.lzma
-2021/02/22 | 13710 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
-2021/02/22 | 1357487 | systems/win32/miktex/tm/packages/circuitikz.tar.lzma
-2021/02/22 | 1344352 | systems/win32/miktex/tm/packages/mcf2graph.tar.lzma
-2021/02/22 | 1328392 | systems/win32/miktex/tm/packages/isodoc.tar.lzma
-2021/02/22 | 1321608 | systems/texlive/tlnet/archive/mcf2graph.doc.r57830.tar.xz
-2021/02/22 | 123635 | macros/latex/contrib/csquotes/csquotes.tex
-2021/02/22 | 12328 | systems/texlive/tlnet/archive/japanese-otf.doc.r57826.tar.xz
-2021/02/22 | 12265 | macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
-2021/02/22 | 1226072 | systems/texlive/tlnet/archive/circuitikz.doc.r57831.tar.xz
-2021/02/22 | 12004 | macros/latex/contrib/tuda-ci/README.md
-2021/02/22 | 1133328 | macros/latex/contrib/nicematrix/nicematrix.pdf
-2021/02/22 | 10512 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
-2021/02/22 | 10072 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
diff --git a/graphics/pgf/contrib/tzplot/README.txt b/graphics/pgf/contrib/tzplot/README.txt
new file mode 100644
index 0000000000..61f9ca77dc
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/README.txt
@@ -0,0 +1,26 @@
+tzplot.sty: Plot Graphs with TikZ Abbreviations
+===============================================
+
+Author: In-Sung Cho
+
+Introduction:
+
+This is a LaTeX package that provides TikZ based macros to make it easy to draw graphs.
+The macros provided in the tzplot package are just abbreviations for TikZ codes, which can be complicated, but using the package, hopefully, makes drawing easier, especially when drawing repeatedly. The macros were chosen and developed with an emphasis on drawing graphs in economics.
+
+Dependencies:
+
+The package tzplot depends on the packages tikz, xparse, and expl3.
+
+License:
+
+This work may be distributed and/or modified
+under the conditions of the LaTeX Project Public License,
+either version 1.3c of this license or any later version.
+The latest version of this license is in
+http://www.latex-project.org/lppl.txt.
+
+Contacts:
+
+Please report any errors or suggestions to the author,
+In-Sung Cho at <ischo at ktug.org>. \ No newline at end of file
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc-A-v1.0.tex b/graphics/pgf/contrib/tzplot/tzplot-doc-A-v1.0.tex
new file mode 100644
index 0000000000..67d2e2e2aa
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc-A-v1.0.tex
@@ -0,0 +1,128 @@
+%!TEX root = tzplot-doc.tex
+%\begin{document}
+
+%%%=================
+\part{Getting Ready}
+%%%=================
+\label{p:intro}
+
+%%==================================
+\chapter{Introduction}
+
+\section{About \texttt{tzplot.sty}}
+
+The |tzplot| package is just a collection of macros based on \TikZ\ to save you time in typing \Tikz\ code.
+
+In |pstricks|, a line connecting two points |(A)| and |(B)| is drawn by |\psline(A)(B)|.
+With the package |tzplot|, you can do it by |\tzline(A)(B)|.
+
+\begin{tztikz}{}
+\tzline[blue](A)(B){my line}[right] % is an abbreviation of:
+ \draw [blue] (A) -- (B) node [right] {my line};
+\end{tztikz}
+
+Some macros in this package represent one or a few lines of code, but some represent dozens of lines of \Tikz\ code.
+
+All of the drawing macros of |tzplot| are prefixed by |\tz|. Of course, it means \Tikz.
+The syntax of the |tzplot| macros comes from |tikz| and |pstricks|.
+However, the input mode is more like |pstricks|.
+
+To use the |tzplot| package you have to load the package in the preamble of your document as follows.
+
+\begin{verbatim}
+ \usepackage{tzplot}
+\end{verbatim}
+
+The package depends on the packages |tikz|, |xpars|, and |expl3|.
+And it uses the following \Tikz\ libraries.
+\begin{verbatim}
+ calc,backgrounds,positioning,intersections,arrows,shapes,patterns,plotmarks,
+ decorations.pathreplacing,calligraphy
+
+\end{verbatim}
+
+This package sets the basic arrow style to |stealth|.
+If you don't like this, as an alternative, you can set the style like |\tikzset{>=to}| after the |tzplot| package is loaded.
+
+This package was originally motivated by drawing graphs in economics.
+Therefore, the macros in this package have been selected and developed for drawing graphs efficiently in economics. However, this package will do a good job of drawing basic graphics in any fields.
+
+Finally, note that this is far from a \Tikz\ tutorial.
+To make good use of this package, you need to familiarize yourself with \Tikz.
+
+\section{Preoccupied style names}
+\label{s:abbreviations}
+
+This package does not provide any environment.
+Since all the drawing macros, prefixed |\tz|, are just abbreviations of \Tikz\ code,
+you can use the macros in the |tikzpicture| environment together with any \Tikz\ commands.
+
+However, there are some preoccupied style names that you should not overwrite.
+Those are as follows:
+
+\begin{verbatim}
+ tzdot tzmark tzdotted
+ tzdashed tzhelplines tznode
+ tzshorten tzextend tzshowcontrols
+\end{verbatim}
+
+This package also predefined aliases of \Tikz's basic placement options as follows:
+
+\begin{tzsty}{}
+% preoccupied (alias) styles
+\tikzset{%
+ a/.style={above=#1},
+ b/.style={below=#1},
+ c/.style={centered=#1},
+ l/.style={left=#1},
+ r/.style={right=#1},
+ al/.style={above left=#1},
+ ar/.style={above right=#1},
+ bl/.style={below left=#1},
+ br/.style={below right=#1},
+}
+\end{tzsty}
+
+The |tzplot| package also defines layers as follows:
+
+\begin{tzsty}{}
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{behind}
+\pgfdeclarelayer{above}
+\pgfdeclarelayer{foreground}
+
+\pgfsetlayers{background,behind,main,above,foreground}
+\end{tzsty}
+
+Therefore, you can select the graphic layers in sequence: |background|, |behind|, |main|, |above|, and |foreground|.
+For example, you can change the layer of a tangent line from |behind| (default) to |main| as follows:
+
+\begin{tzcode}[listing only]{1}
+\begin{tikzpicture}
+\tzaxes(10,10)
+ <tzplot macros>
+ <tikz macros>
+\begin{pgfonlayer}{main}
+\tztangentat{curve}{5}[1:8]
+\end{pgfonlayer}
+\end{tikzpicture}
+\end{tzcode}
+
+\section{How to read this document}
+
+In drawing graphs, too many factors are involved: line style, color, fill, label, positioning, shift, and so on.
+Almost all macros of this package have many arguments that control these factors.
+Some are mandatory and some are optional.
+Optional arguments are hidden when not used.
+
+The document has three essential parts: Part II, Part III, and Part IV.
+Part II introduces essential macros with only frequently used options.
+There are many options hidden in the macros introduces in Part II.
+Some macros are not introduced in Part II.
+Part III and IV describe all the features of all macros.
+
+You must get started with Part II.
+Part II is sufficient for drawing needs in most cases.
+
+Unless you are an experienced user of \Tikz, it is recommended to move on to Part III and Part IV once you become familiar with Part II. In the meantime, use Part III and Part IV for reference only. Use the list of contents and the index efficiently to find macros you need.
+
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc-B-v1.0.tex b/graphics/pgf/contrib/tzplot/tzplot-doc-B-v1.0.tex
new file mode 100644
index 0000000000..f3253e5799
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc-B-v1.0.tex
@@ -0,0 +1,1943 @@
+%!TEX root = tzplot-doc.tex
+%\begin{document}
+
+%%%==================================
+\part{Getting Started}
+%%%==================================
+\label{p:gettingstarted}
+
+%%==================================
+\chapter{An Intuitive Introduction I: Basics}
+\label{ci:introI}
+
+All drawing macros provided in this package work within |tikzpicture| environment, just like any other \Tikz\ command.
+
+%%------------------------------------------------------------
+\section{Lines: Basics: \protect\cmd{\tzline(0,0)(3,1)}}
+\label{si:lines}
+
+To draw a line from $(0,0)$ to $(3,1)$, just do |\tzline(0,0)(3,1)|.
+
+\begin{tzcode}{.3}
+% \tzline
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzline(0,0)(3,1)
+\end{tikzpicture}
+\end{tzcode}
+
+You can use \Tikz\ options to change the style of a line.
+
+\begin{tzcode}{.3}
+% \tzline: change line style
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,0)(3,1)
+\tzline[dashed](0,1)(3,2)
+\tzline[->,blue,thick](0,3)(4,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzline[dashed](0,1)(3,2) % works like:
+ \draw [dashed] (0,1) -- (3,2);
+\end{tztikz}
+
+
+%%------------------------------------------------------------
+\section{Dots: Basics}
+\label{si:dots}
+
+\subsection{A circle dot: \protect\cmd{\tzcdot(0,0)}}
+\label{ssi:tzcdot}
+
+\icmd{\tzcdot}|(0,0)| prints a `circle dot' \tikz \tzcdot(0,0);, with the \xem{radius} |1.2pt| by default, at the point |(0,0)|. The starred version \icmd{\tzcdot*} prints a filled dot \tikz \tzcdot*(0,0);.
+
+\begin{tzcode}{.3}
+% \tzcdot: circle dot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdot(0,0)
+\tzcdot*(3,1)
+\tzcdot [red] (0,1)(3pt) % radius=3pt
+\tzcdot*[green](3,2)(3pt) % radius=3pt
+\end{tikzpicture}
+\end{tzcode}
+
+You can change of the size of a dot by specifying the \xem{radius} of the circle, like, for example, |\tzcdot(0,0)(3pt)|.
+
+\begin{tztikz}{}
+\tzcdot*[green](3,2)(3pt) % is an abbreviation for:
+ \draw [fill,green] (0,0) circle (3pt);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcdot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdot(0,0) \tzcdot*(3,1)
+\tzcdot[red](0,1)(2mm) % radius=2mm
+\tzcdot*[green](3,2)(3pt) % radius=3pt
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{A node circle dot: \protect\cmd{\tzdot(0,0)}}
+\label{ssi:tzdot}
+
+\icmd{\tzdot} draws a `node circle dot' at a specified coordinate.
+The starred version \icmd{\tzdot*} prints a filled dot. The default size (\xem{diameter} or |minimum size|) is |2.4pt|.
+
+\begin{tzcode}{.3}
+% \tzdot: node dot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot(0,0) \tzdot*(3,1)
+\tzdot[red](0,1)(4mm) % minimum size=4mm
+\tzdot*[green](3,2)(6pt) % minimum size=6pt
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+The size (\xem{diameter} or |minimum size|) of a node dot can be changed by the second (or the last) parenthesis option, like |(6pt)|.
+
+\begin{tzcode}{.3}
+% \tzcdot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot(0,0)(5pt) \tzdot*(3,1)
+\tzdot[red](0,1)(4mm) \tzdot*[green](3,2)(6pt)
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzdot[green](0,0)(6pt) % works like:
+ \draw [green] (0,0) node [tzdot,minimum size=6pt] {};
+ % tzdot style is predefined
+\end{tztikz}
+
+
+\subsection{Difference between \protect\cmd{\tzcdot} and \protect\cmd{\tzdot}}
+\label{ssi:difference}
+
+A `circle dot' drawn by |\tzcdot| is affected by |xscale| or |yscale| in \Tikz, but a `node circle dot' drawn by |\tzdot| is not.
+Note also that |\tzcdot| controls the \xem{radius} of a circle dot (following \Tikz\ practice), while |\tzdot| controls the \xem{diameter} of a node circle dot.
+
+\begin{tzcode}{.3}
+% \tzdot: size not changed by scaling
+\begin{tikzpicture}[xscale=.5,yscale=1.1] %%
+\tzhelplines(4,3)
+\tzdot(0,0) \tzdot*(3,1)
+\tzdot[red](0,1)(4mm) \tzdot*[green](3,2)(6pt)
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\remark
+The circle dots drawn by |\tzcdot| are affected by \Tikz\ |scale|. It gets bigger or smaller by |scale|.
+Let us see what happens to circle dots especially when |xscale| and |yscale| are not symmetric.
+
+\begin{tzcode}{.3}
+% \tzcdot: distorted
+\begin{tikzpicture}[xscale=.5,yscale=1.1] %%
+\tzhelplines(4,3)
+\tzcdot(0,0) \tzcdot*(3,1)
+\tzcdot[red](0,1)(2mm) \tzcdot*[green](3,2)(3pt)
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{Coordinates: Basics: \protect\cmd{\tzcoor(0,0)(A)}}
+\label{si:coordinates}
+
+To define a coordinate, use \icmd{\tzcoor} with a coordinate followed by its name in parentheses.
+
+\begin{tztikz}{}
+\tzcoor(0,0)(A) % works like:
+ \path (0,0) coordinate (A);
+ % or
+ \coordinate (A) at (0,0);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(0,0)(A) \tzcoor(60:3cm)(B)
+\tzline[->](A)(B)
+\tzdot(A)(5pt)
+\tzcoor(0,1)(C) \tzcoor(4,2)(D)
+\tzline[dashed](C)(D)
+\end{tikzpicture}
+\end{tzcode}
+
+The starred version \icmd{\tzcoor*} prints a filled node dot at a specified coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(0,0)(A) \tzcoor(60:3cm)(B)
+\tzline[->](A)(B)
+\tzdot(A)(5pt)
+\tzcoor*(0,1)(C) \tzcoor*[fill=none](4,2)(D)
+\tzline[dashed](C)(D)
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\section{Curves: Basics}
+\label{si:curves}
+
+\subsection{\protect\cmd{\tzto(0,0)(4,2)}}
+\label{ssi:tzto}
+
+\icmd{\tzto} connects two points with a line or a curve.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto(0,0)(4,2)
+\tzto[bend right,dashed](0,1)(3,2)
+\tzto[out=90,in=-90,->,blue](0,2)(4,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzto[bend right](0,1)(3,2) % works like:
+ \draw [bend right] (0,1) to (3,2);
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzbezier}}
+\label{ssi:tzbezier}
+
+\icmd{\tzbezier} draws a bezier curve with one or two control points.
+The style |tzshowcontrols|, which is predefined in the package, reveals the control point(s).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzbezier[blue,thick](0,0)(2,0)(4,2)
+\tzbezier[->,tzshowcontrols](0,2)(1,3)(3,0)(4,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzbezier[blue](0,0)(2,0)(4,2) % works like:
+ \draw [blue] (0,0) .. controls (2,0) .. (4,2);
+\tzbezier(0,2)(1,3)(3,0)(4,1) % works like:
+ \draw (0,2) .. controls (1,3) and (3,0) .. (4,1);
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzparabola}}
+\label{ssi:tzparabola}
+
+\icmd{\tzparabola} draws a parabola controlled by several options of \Tikz.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzparabola(0,0)(2,4)
+\tzparabola[bend at end,dashed](0,0)(2,4)
+\tzparabola(2,0)(3,3)(4,1)
+\tzparabola[bend pos=.33,dashed](1,0)(4,4)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzparabola(0,0)(2,4) % works like:
+ \draw (0,0) parabola (2,4);
+\tzparabola(2,0)(3,3)(4,1) % works like:
+ \draw (2,0) parabola bend (3,3) (4,1);
+\end{tztikz}
+
+
+
+
+
+%%------------------------------------------------------------
+\section{Adding text: Nodes and placement}
+\label{si:addingtext}
+
+\subsection{\protect\cmd{\tznode(3,1)\{text\}[right]}}
+\label{ssi:tznode}
+
+With \icmd{\tznode}|{<text>}[<node opt>]| you can put some text at a specified position.
+The starred version \icmd{\tznode*} draws the node perimeter, which is a |rectangle| by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode(0,0){A}
+\tznode*(1,1){text}
+\tzdot*(2,2)
+\tznode(2,2){Text}[above right,blue]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tztikz}{}
+\tznode(0,0){A} % works like:
+ \node at (0,0) {A};
+\tznode(2,2){Text}[above right,blue] % works like:
+ \draw (2,2) node [above right,blue] {Text};
+\end{tztikz}
+
+\subsection{Review: Main nodes and label nodes in \Tikz}
+\label{ssi:mainnodes}
+
+In \Tikz, there are two kinds of nodes: main nodes and label nodes.
+
+When a \iisw{main node} with text in it is placed at a specific point, its \iisw{label node} with a label in it is optionally placed in the \xem{direction} of a designated \xem{angle} relative to the main node.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode*(2,1){main node}
+ [scale=2,label={[draw,red]90:label node}]
+\tznode*(3,3){A}[label={above:a},label={0:r}]
+\end{tikzpicture}
+\end{tzcode}
+
+The angles for label nodes can be replaced by the corresponding placement words. For example, the angle |90| degree for a label node can be replaced by |above|, |0| by |right|, |-135| by |below left|, and the like. The angle expression \xem{cannot} be used for placing a main node.
+
+\xmedskip1
+\remark
+\begin{itemize}
+\item
+In this package, macros related to `dots' or `coordinates' (like |\tzcdot|, |tzdot|, and |\tzcoor|) can optionally have `label nodes,' while macros related to `lines' and `curves' (like |\tzline|, |\tzto|, |\tzbezier| and |\tzparabola|) optionally have `main nodes' or `text nodes.'
+\item
+There is one exception, |\tzshoworigin|. |\tzshoworigin| can have a label, but its location is controlled by positional words such as |below left| but not by |<angle>|.
+(See Section \ref{s:tzshoworigin} on page \pageref{s:tzshoworigin} for more details.)
+\end{itemize}
+
+\subsection{Abbreviations of \Tikz\ basic placement options: \texttt{a}, \texttt{b}, \texttt{l}, \texttt{r}, \texttt{ar}, \texttt{bl}, etc.}
+\label{ssi:abbreviations}
+
+You can use \isw{abbreviations} |a| for |above|, |r| for |right|, |bl| for |below left|, and so on to place \iisw{main node}\xem{s}.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[font=\ttfamily,text=blue]
+\tzhelplines[thick](2,2)
+\tznode(1,1){centered}[draw] % default: centered
+\tznode(1,2){a} [a] \tznode(1,0){b} [b]
+\tznode(0,1){l} [l] \tznode(2,1){r} [r]
+\tznode(0,2){al}[al] \tznode(2,2){ar}[ar]
+\tznode(0,0){bl}[bl] \tznode(2,0){br}[br]
+\end{tikzpicture}
+\end{tzcode}
+
+\warning The abbreviations of \Tikz\ basic placement options \xem{cannot} be used to place \xem{labels}.
+To place labels, use \xem{angles} or the unabridged placement options of \Tikz such as |above| and |below left|.
+
+%%------------------------------------------------------------
+\section{Labeling dots and coordinates}
+\label{si:labelingdots}
+
+\subsection{\protect\cmd{\tzdot}, \protect\cmd{\tzcdot}}
+\label{ssi:labeling:tzdot}
+
+To add a label to a dot generated by |\tzdot| or |\tzcdot|, you should specify, \xem{right after a coordinate}, |{<label>}| followed by |[<angle>]| (|90| degree or |above| by default in \Tikz).
+
+\textsc{Remember} that the order of the arguments is |(<coor>){<label>}[<angle>]|.
+To change the size of a dot, you need to specify |(<dimension>)| after all the other arguments.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot*(1,1){A} % default: 90 or above
+\tzdot(2,1){B}[0](4pt)
+\tzcdot*(1,2){C}[180](2pt)
+\tzcdot(3,2){D}[45]
+\tzdot*(4,0){E}[[red,draw]180](4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzcdot*(1,2){C}[180](2pt) % works like:
+ \draw[fill] (1,1) circle (2pt) node [label={180:C}] {};
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzcoor}}
+\label{ssi:tzcoor}
+
+\icmd{\tzcoor} can add a label to a coordinate. Just append the optional arguments |{<label>}| and |[<angle>]| after the two mandatory parenthesis arguments.
+
+\remark
+\begin{itemize}
+\item \textsc{Remember} the order of arguments is |(<coor>)(<name>){<label>}[<angle>]|.
+\item It cannot be emphasized that |{<label>}| is placed by |[<angle>]| (by default |90| or |above|) and you \xem{cannot} use the abbreviations such as |a|, |l|, |ar|, and so forth to place labels for coordinates and dots.
+\end{itemize}
+
+\begin{tzdef}{}
+% syntax: simplified
+\tzcoor(<coor>)(<coor name>){<label>}[[<label opt>]<angle>]
+% defaults
+ (<m>)(<m>){}[]
+ % <m> means `mandatory'
+\end{tzdef}
+
+You can see the full syntax of |\tzcoor| in Section \ref{s:tzcoor} on page \pageref{s:tzcoor}.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzcoor(1,1)(A){A} % default: 90 or above
+\tzcoor(2,1)(B){B}[[red]0]
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzcoor(1,1)(B){B}[0] % works like:
+ \draw (1,1) coordinate (B) node [label={0:B}] {};
+\tzcoor(1,1)(B){B}[[red]0] % works like:
+ \draw (1,1) coordinate (B) node [label={[red]0:B}] {};
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzcoor*}}
+\label{ssi:tzcoor*}
+
+\icmd{\tzcoor*} designates a coordinate and prints a node dot with a label around the designated point like |\tzdot*| does.
+
+\begin{tzdef}{}
+% syntax: simflified
+\tzcoor*[<dot opt>](<coor>)(<coor name>){<label>}[[<label opt>]<angle>](<dot size>)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(1,1)(A){A} % default: 90 or above
+\tzcoor(2,1)(B){B}[0]
+\tzcoor*(1,2)(C){C}[180](4pt)
+\tzcoor*[fill=none](3,2)(D){D}[45]
+\tzcoor*(4,0)(E){E}[[red,draw]180](4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzcoor*(1,2)(C){C}[180](4pt) % works as follows:
+ \tzcoor(1,2)(C)
+ \tzdot*(C){C}[180](4pt)
+\end{tztikz}
+
+%%------------------------------------------------------------
+\section{Adding text next to lines or curves}
+\label{si:texttolines}
+
+\subsection{\protect\cmd{\tzline}}
+\label{ssi:texttotzline}
+
+\icmd{\tzline} accepts two mandatory coordinates.
+To add text to a line segment, just specify the optional arguments |{<text>}| and |[<node opt>]| \xem{inbetween} the two coordinates. The |[<node opt>]| is |[above,midway]|, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,0){route A}(3,0)
+\tzline[dashed](1,1){route B}(4,1)
+\tzline[blue]
+ (0,3) {plan C} [below,near end] (3,3)
+\end{tikzpicture}
+\end{tzcode}
+
+The optional argument |{<text>}| \xem{following the second coordinate} can also be used as a name of the graph. By default, it is placed at the second coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,3)(4,0){demand}
+\tzline(0,0)(3,3){supply}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzto}}
+\label{ssi:texttotzto}
+
+To add text to a line or a curve drawn by \icmd{\tzto}, just specify the optional arguments |{<text>}| and |[<node opt>]| \xem{in bewteen} the two coordinates. By default, the |[<node opt>]| is |[above,midway]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto(0,0){route A}(3,0)
+\tzto[dashed,bend left](1,1){route B}(4,1)
+\tzto[blue,bend right]
+ (0,3) {plan C} [below,near end] (3,3)
+\end{tikzpicture}
+\end{tzcode}
+
+The optional argument |{<text>}| \xem{following the second coordinate} can also be used as a name of the graph. By default, it is placed at the second coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto[bend right=15](0,3)(4,0){demand}
+\tzto[bend right=10](0,0)(3,3){supply}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzbezier}}
+\label{ssi:texttotzbezier}
+
+\icmd{\tzbezier} accepts three or four coordinates as arguments.
+You can add text to the curve drawn by |\tzbezier| using the optional arguments |{<text>}| and |[<pos>]| after the last coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzbezier(0,2)(1,3)(3,0)(4,1){curve}[r]
+\tzbezier[red,yshift=-5mm]
+ (0,2)(1,3)(3,0)(4,1){curve}[midway]
+\tzbezier[green,text=blue,yshift=-10mm]
+ (0,2)(1,3)(3,0)(4,1){curve}[b,near end]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzparabola}}
+\label{ssi:texttotzparabola}
+
+\icmd{\tzparabola} accepts two or three coordinate arguments.
+You can add text to a parabola drawn by |\tzparabola| using the optional arguments |{<text>}| and |[<node opt>]| \xem{followed by the last coordinate}.
+The text is placed at (by default) or around the last coordinate according to |[<node opt>]|.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola(0,2)(1,.5)(3,2){$AC$}[r]
+\tzparabola[bend at end,blue](0,0)(4,3){$u(x)$}[r,red]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{An Intuitive Introduction II: Repetition of Coordinates}
+\label{ci:introII}
+
+%%------------------------------------------------------------
+\section{Linking many coordinates: Semicolon versions}
+\label{si:manycoordinates}
+
+\subsection{\protect\cmd{\tzlines}: Connected line segments}
+\label{ssi:tzlines}
+
+\icmd{\tzlines} connects with line segments an arbitrary number of coordinates. The coordinate iteration must end with semicolon |;|.
+Here, the \xem{semicolon} |;| indicates \xem{the end of repetition} of coordinates.
+Let us call this kind of macro a \iisw{semicolon version}.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines(0,0)(1,2)(3,0)(4,1)(2,2)(3,3)(0,3)(0,1)(4,2);
+\end{tikzpicture}
+\end{tzcode}
+
+With the optional argument |{<text>}| followed by |[<node opt>]| \xem{inbetween two coordinates}, you can print |{<text>}| at or around the middle point of the corresponding line segment in accordance with |[<node opt>]| (by default |[midway]|).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[dashed,->](0,0){up}[l]
+ (1,2){down}[r]
+ (3,0){up}[r]
+ (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+The optional argument |{<text>}| \xem{following the last coordinate} can be used as a name of the whole connected line segments. The |{<text>}| is placed at (by default) or around the last coordinate according to |[<node opt>]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[sloped,auto]
+\tzhelplines(4,3)
+\tzlines[dashed,->](0,0){up}
+ (1,2){down}
+ (3,0){up}
+ (4,1){Weight}[r,blue] ;
+\end{tikzpicture}
+\end{tzcode}
+
+\textsc{Remember} the repeated pattern is the triple |(<coor>){<text>}[<node opt>]| in that order.
+DO NOT FORGET to indicate when the repetition ends by typing the semicolon. So it will look like |(){}[]..repeated..(){}[];|
+
+\subsection{\protect\cmd{\tzpolygon}, \protect\cmd{\tzpolygon*}: Closed paths}
+\label{ssi:tzpolygon}
+
+\icmd{\tzpolygon} draws closed line segments. |\tzpolygon| is also one of semicolon versions, meaning that it has to end with a semicolon |;|.
+In fact, |\tzpolygon| is a closed version of |\tzlines|.
+
+The starred version |\tzpolygon*| does the same thing as |\tzpolgon| except for one thing.
+|\tzplygon*|, by default, fills the interior of the polygon with |black!50| with |fill=opacity=.3|. (Changing the fill opacity is not an issue in this introduction. See Section \ref{s:tzpolygon} on path \pageref{s:tzpolygon} for more details.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon(1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\end{tikzpicture}
+\end{tzcode}
+
+The optional arguments |{<text>}| and |[node opt]| inbetween two coordinates prints |<text>| according to |[node opt]| (by default |[midway]|) around the middle point of the corresponding line segment.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon*[green,thick](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpolygon[dashed]
+ (0,0){up}[l] (1,2){down}[r] (3,0){up}[r] (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+The options |{<text>}| and |[node opt]| following the last coordinate can be used as a name of the connected line segments.
+
+Here, the entire repeated pattern is |(coor){text}[pos] .. repeated .. (){}[];|.
+DO NOT FORGET to indicate when the repetition ends by typing a semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[sloped,auto]
+\tzhelplines(4,3)
+\tzpolygon[dashed]
+ (0,0){up} (1,2){down} (3,0){up} (4,1) {Weight}[r] ;
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzpath*}: Filling area}
+\label{ssi:tzpath}
+
+\icmd{\tzpath} accepts an arbitrary number of coordinates to form a path, like |\tzlines| does, but the path is invisible. This is a \xem{semicolon version} macro, so the coordinate iteration must be ended by a semicolon |;|.
+With |[draw]| option you can visualize the invisible path.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpath[draw](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\end{tikzpicture}
+\end{tzcode}
+
+You can fill the interior of a path formed by |\tzpath| (after being closed) with color or pattern, in usual \Tikz\ way.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath[pattern=crosshatch]
+ (1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpath[pattern=bricks,preaction={fill=brown}]
+ (0,0) (1,2) (3,0) (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath[fill,green](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpath[fill](0,0) (1,2) (3,0) (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+The starred version \icmd{\tzpath*} takes the default options |fill=black!50| and |fill opacity=.3| to fill the area.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath*[green](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpath*(0,0) (1,2) (3,0) (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+How to change the |fill opacity| with |\tzpath*| is not discussed in this introduction, but one example is given below. (See Section \ref{s:tzpath*} on page \pageref{s:tzpath*} for more details.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath*[green](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);{1} %%
+\tzpath*(0,0) (1,2) (3,0) (4,1);{.7} %%
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{Many dots: Semicolon versions}
+\label{si:manydots}
+
+\subsection{\protect\cmd{\tzcdots}, \protect\cmd{\tzcdots*}}
+\label{ssi:tzcdots}
+
+\icmd{\tzcdots} accepts an arbitrary number of coordinates to print circle dots, but the coordinate repetition must be ended by |;| (semicolon version).
+\icmd{\tzcdots*} prints filled circle dots.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0)(1,1)(2,1)(3,2)(4,3);
+\tzcdots*[fill=red](0,3)(1,3)(2,3)(3,3)(4,2);
+\end{tikzpicture}
+\end{tzcode}
+
+Each coordinate can be labeled by specifying the optional argument |{<label>}| followed by |[<angle>]|. You can also change the size (\xem{radius}) of the dots by specifying the parenthesis argument |(<dot radius>)| \xem{after} the semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0)(1,1){B}(2,1)(3,2){D}[-90](4,3);(5pt)
+\tzcdots*[fill=red](0,3){A}
+ (1,3){B}
+ (2,3){C}[-90]
+ (3,3)
+ (4,2){E}[[blue]0];(3pt) % radius
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzdots}, \protect\cmd{\tzdots*}}
+\label{ssi:tzdots}
+
+\icmd{\tzdots} accepts an arbitrary number of coordinates to print circle node dots, but the repetition must be ended by |;| (semicolon version).
+\icmd{\tzdots*} prints filled circle node dots.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(1,1)(2,1)(3,2)(4,3);
+\tzdots*[fill=red](0,3)(1,3)(2,3)(3,3)(4,2);
+\end{tikzpicture}
+\end{tzcode}
+
+Each coordinate can be labeled by specifying the optional argument |{<label>}| followed by |[<angle>]|. You can also change the size of the dots by specifying the parenthesis argument |(<size>)| \xem{after} the semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(1,1){B}(2,1)(3,2){D}[-90](4,3);(10pt)
+\tzdots*[fill=red](0,3){A}
+ (1,3){B}
+ (2,3){C}[-90]
+ (3,3)
+ (4,2){E}[[blue]0];(6pt) % diameter
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Many coordinates: Semicolon versions}
+\label{si:manycoordinates}
+
+\subsection{\protect\cmd{\tzcoors}, \protect\cmd{\tzcoors*}}
+\label{ssi:tzcoors}
+
+|\tzcoor| accepts \xem{a pair} of mandatory arguments in parentheses: |(<coor>)(<name>)|.
+\icmd{\tzcoors} accepts \xem{an arbitrary number of the pairs} to define multiple coordinates. It is a semicolon version, meaning that a semicolon is necessary to indicate when the repetition ends.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors(0,0)(A)
+ (1,1)(B)
+ (2,1)(C)
+ (3,3)(D)
+ (4,2)(E);
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+The optional arguments |{<label>}| and |[<angle>]| following each pair of |(<coor>)| and |(<name>)| allow you to add |<label>| in the direction |<angle>| around the coordinate.
+Here, the repeated pattern is |(<coor>)(<name>){<label>}[<angle>]|, in that order. The first two parenthesis arguments are mandatory and others are optional. The pattern is repeated until |\tzcoors| meets a semicolon |;|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors(0,0)(A){A}
+ (1,1)(B)
+ (2,1)(C){C}[0]
+ (3,3)(D){D}[180]
+ (4,2)(E){E}[-90];
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+
+The starred version \icmd{\tzcoors*} does one more thing: prints node dots.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors*(0,0)(A){A}
+ (1,1)(B)
+ (2,1)(C){C}[0]
+ (3,3)(D){D}[180]
+ (4,2)(E){E}[-90];
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzcoorsquick}}
+\label{ssi:tzcoorsquick}
+
+\icmd{\tzcoorsquick} is just to see the array of many coordinates at a glance.
+|\tzcoorsquick| works like |\tzcoors|, but it automatically prints the name of each coordinate as its label, right at the point, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick(0,0)(A)
+ (1,1)(Best)
+ (2,1)(Case)
+ (3,3)(Done)
+ (4,2)(End);
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzcoorsquick*}}
+\label{ssi:tzcoorsquick*}
+
+\icmd{\tzcoorsquick*} prints node dots and automatically puts the labels |above| (in the direction of |90| degree from) them, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick*(0,0)(A)
+ (1,1)(Best)
+ (2,1)(Case)
+ (3,3)(Done)
+ (4,2)(End){END!}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\texttt{plot coordinates}: Semicolon versions}
+\label{si:plotcoordinates}
+
+\subsection{\protect\cmd{\tzplot*}: Mark dots with \texttt{[mark=*]}}
+\label{ssi:tzplot*}
+
+\icmd{\tzplot*} accepts an arbitrary number of coordinates to print bullets with the \xem{radius} (|mark size| in \Tikz) of |2pt|, which is the initial value in \Tikz. The repetition of coordinates must be ended by |;| (semicolon version).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*(0,0)
+ (1,1)
+ (2,1)
+ (3,3)
+ (4,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzplot*(0,0)(1,1)(2,1); % works like:
+ \draw [mark=*] plot coordiates {(0,0)(1,1)(2,1)};
+\end{tztikz}
+
+Each coordinate can be labeled by specifying the optional argument |{<text>}| followed by |[<angle>]|. With the option |mark=o| you can print hollow dots. You can also change the \xem{radius} of the marks by specifying the parenthesis argument |(<mark size>)| \xem{after} the semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*[mark=o](0,0){A}
+ (1,1){Best}
+ (2,1){Case}
+ (3,3){Done}
+ (4,2){END!}[[blue]0];(1.2pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzplot}: Lines with \texttt{[tension=0]}}
+\label{ssi:tzplot:lines}
+
+\icmd{\tzplot} accepts an arbitrary number of coordinates and draws line segments connecting them. The repetition of coordinates must be ended by |;| (semicolon version).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot(0,0)
+ (1,1)
+ (2,1)
+ (3,3){Done}
+ (4,2){END!}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}{}
+\tzplot(0,0)(1,1)(2,1); % works like:
+ \draw plot coordiates {(0,0)(1,1)(2,1)};
+\end{tztikz}
+
+
+\subsection{\protect\cmd{\tzplot*[draw]}: Lines with dots}
+\label{ssi:tzplot*}
+
+\icmd{\tzplot*}|[draw]| prints bullets and draws line segments connecting specified coordinates. The repetition of coordinates must be ended by |;| (semicolon version).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*[draw](0,0)
+ (1,1)
+ (2,1)
+ (3,3)
+ (4,2){END!}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzplotcurve}: Curves with \texttt{[smooth,tension=1]}}
+\label{ssi:tzplotcurve}
+
+\icmd{\tzplotcurve} plots coordinates with the option |[smooth,tension=1]|, resulting in a curve connecting specified coordinates.
+The repetition of coordinates must be ended by |;| (semicolon version).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve(0,0)
+ (1,1)
+ (2,1)
+ (3,3)
+ (4,2){END!}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzdef}{}
+% syntax: simplified
+\tzplotcurve[<opt>]{<tension>}"<path name>"
+ (<coor>){<label>}[<angle>]..repeated..(<coor>){<label>}[<angle>];
+% defaults
+ [smooth,tension=1]{1}""(<m>){}[]..repeated..(){}[];
+% <m> means mandatory
+\end{tzdef}
+
+\begin{tztikz}{}
+\tzplotcurve(0,0)(1,1)(2,1); % works like:
+ \draw [smooth,tension=1] plot coordiates {(0,0)(1,1)(2,1)};
+\end{tztikz}
+
+You can change the tension value by specifying the optional argument |{<tension>}|, before the first coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(.5,.5)(A)
+\tzplotcurve[blue]{2}(1,3)(A)(4,0);
+\tzplotcurve[thick](1,3)(A)(4,0); % default: tension=1
+\tzplotcurve[red]{.5}(1,3)(A)(4,0);
+\tzplotcurve[dashed]{0}(1,3)(A)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%==================================
+\chapter{An Intuitive Introduction III: Plotting Functions}
+\label{ci:introIII}
+
+
+%%------------------------------------------------------------
+\section{Axes}
+\label{si:axes}
+
+\subsection{\protect\cmd{\tzaxes}}
+\label{ssi:tzaxes}
+
+\begin{tzdef}{}
+% syntax: simplified
+\tzaxes[<opt>]<x-shift,y-shift>(<x1,y1>)(<x2,y2>)
+ {<x-text>}[<x-opt>]{<y-text>}[<y-opt>]
+% defaults
+ [->,>=stealth]<0,0>(0,0)(<m>){}[right]{}[above]
+% <m> means mandatory
+\end{tzdef}
+
+\icmd{\tzaxes} draws the x-axis from |<x1>| to |<x2>| and the y-axis from |<y1>| to |<y2>|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes(-1,-1)(8,5) % basics
+\end{tikzpicture}
+\end{tzcode}
+
+If |(<x1,y1>)| is omitted, it is regarded as |(0,0)|.
+And optionally the names of x-axis and y-axis can be printed at a specified place (by default, |[right]| for x-axis and |[above]| for y-axis).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes[draw=blue](8,5){$x$}{$y$} %
+\end{tikzpicture}
+\end{tzcode}
+
+With the optional argument |<x-shift,y-shift>|, the axes are shifted accordingly. Two axes intersect at |(<x-shift,y-shift>)|, by default |(0,0)|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes(-1,-1)(8,5){$Q$}[b]{$P$}[l]
+\tzaxes[dashed,-]<2,1>(-1,-1)(8,5) % shift
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzaxes*}}
+\label{ssi:tzaxes*}
+
+The starred version \icmd{\tzaxes*} is just to set the current state to a \iisw{bounding box} when |\tzaxes| is executed. Use |\tzaxes*| before any larger graphics.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzaxes*(8,5){$x$}{$f(x)$} % bounding box
+\tzhelplines(-2,-1)(10,8)
+\tzto[out=90,in=-135,dashed](-2,8)(12,-2)
+\tzbezier[blue](-1,-1)(3,-2)(7,12)(10,10)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzshoworigin}, \protect\cmd{\tzshoworigin*}}
+\label{ssi:tzshoworigin}
+
+\icmd{\tzshoworigin} prints `$0$' (roughly) at the bottom left of the origin.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzshoworigin*} prints a node dot with the size of |2.4pt| (by default) at the origin.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzshoworigin*
+\tzaxes(-1,-1)(8,5)
+\end{tikzpicture}
+\end{tzcode}
+
+|\tzshoworigin*(<coor>){<text>}[<node opt>]| prints a node dot and text around |(<coor>)|, by default |(0,0)|. (Notice that the place where the |<text>| is printed at is not by |<angle>|. So you can use the abbreviations of \Tikz\ basic placement options such as |a|, |l|, |br|, ect. See Section \ref{s:abbreviations}.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzshoworigin*{$O_1$}
+\tzaxes(-1,-1)(8,5)
+\tzaxes[blue]<7,4>(8,5)(-1,-1)
+\tzshoworigin*(7,4){$O_2$}[ar]
+\end{tikzpicture}
+\end{tzcode}
+
+Notice that, in the above example, the two axes intersect at |(7,4)| by the shift option |<7,4>|.
+
+\subsection{\protect\cmd{\tzaxisx}, \protect\cmd{\tzaxisy}}
+\label{ssi:tzaxesx}
+
+\icmd{\tzaxisx} and \icmd{\tzaxisy} draw the x-axis and the y-axis, respectively.
+
+\begin{tzdef}{}
+% syntax: simplified
+\tzaxisx[<opt>]<y-shift>{<x1>}{<x2>}{<text>}[<node opt>]
+% defaults
+ [->,>=stealth]<0>{<m>}{<m>}{}[right]
+\end{tzdef}
+
+|\tzaxisy| works similarly for the y-axis.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxisx{-1}{8}{$x$}
+\tzaxisy[draw=blue,thick]{-1}{5}{$y$}
+\tzaxisx[dashed,-]<2>{-1}{8}
+\tzaxisy[thick,<->]<1>{-1}{5}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Ticks}
+\label{si:tikzs}
+
+\subsection{\protect\cmd{\tzticks}}
+\label{ssi:tzticks}
+
+\icmd{\tzticks}|{<x-tick places>}{y-tick places>}| prints tick labels for x- and y-axis at specified places, which are comma separated.
+By default, tick labels are the numbers specified.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\tzticks{1,2,...,8}{1,2,...,5}
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the numbered label, for example |{2,4,7}|, to any other form, by doing like, for example, |{2/mylabel,4,7}|. (Internally, |\tzticks| uses |foreach| operation of \Tikz.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\tzticks{2/x,4/y,5.5/$z_1$,7}{1,2.5/$\frac25$,4}
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzticks*}}
+\label{ssi:tzticks*}
+
+\icmd{\tzticks*} prints tick labels from |0pt| to |3pt| by default, without printing tick labels.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\tzticks*{1,2,...,7}{1,2,...,4}
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the length of tick marks, for example, like |(-2pt:3pt)| and |(-5pt:10pt)| as shown in the following example.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes(-1,-1)(8,5)
+\tzticks*(-2pt:3pt){1,2,...,7}(-5pt:10pt){1,2,...,4}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzticksx(*)}, \protect\cmd{\tzticksy(*)}}
+\label{ssi:tztikcsx}
+
+\icmd{\tzticksx} and \icmd{\tzticksy} prints x-tick labels and y-tick labels, respectively.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(8,5)
+\tzaxes(-1,-1)(8,5)
+\tzticksx{1/x,3/y,5/z,7}
+\tzticksy(-5pt:10pt){1,2,4/k}
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzticksx*} and \icmd{\tzticksy*} suppress tick labels for their corresponding axes, like |\tzticks*|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(8,5)
+\tzaxes(-1,-1)(8,5)
+\tzticksx*{1/x,3/y,5/z,7}
+\tzticksy*(-5pt:10pt){1,2,4/k}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Projections on the axes}
+\label{si:projections}
+
+
+\subsection{\protect\cmd{\tzprojx(*)}, \protect\cmd{\tzprojy(*)}}
+\label{ssi:tzprojx}
+
+\icmd{\tzprojx} draws a dotted (by default) line from a coordinate to its projection on the x-axis and prints text around (|[below]| by default) the projection point.
+
+|\tzprojy| works similarly but for the projection point on the y-axis.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzaxes(4,3)
+\tzdot*(3,2){$(x_1,x_2)$}[45]
+\tzprojx(3,2){$x_1$}
+\tzprojy[solid,->,draw=blue](3,2){$x_2$}[bl]
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzprojx*} does one more thing. It prints a node dot at a specified coordinate. |\tzprojy*| works similarly but for the projection point on the y-axis.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+%\tzhelplines(4,3)
+\tzaxes(4,3)
+\tznode(3,2){$(x_1,x_2)$}[ar]
+\tzprojx*(3,2){$x_1$}[xshift=-3pt]
+\tzprojy[->,dashed,draw=red](3,2){$x_2$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzproj(*)}}
+\label{ssi:tzproj}
+
+\icmd{\tzproj} combines |\tzprojx| and |\tzprojy|.
+And \icmd{\tzproj*} combines |\tzprojx*| and |\tzprojy*|, so it suppresses tick labels.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+%\tzhelplines(4,3)
+\tzaxes(4,3)
+\tznode(3,2){$(x_1,x_2)$}[ar]
+\tzproj[<->,solid,draw=red](3,2){$x_1$}{$x_1$}
+\tzproj*(1.5,2.5){$a$}[xshift=3pt,text=blue]{$b$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Plot functions}
+\label{si:plotfunctions}
+
+\subsection{\protect\cmd{\tzfn}}
+\label{ssi:tzfn}
+
+\icmd{\tzfn}|{<fn of \x>}[<a:b>]| plots a function of $x$ over the specified domain $[a:b]$, which means that $a\leq x \leq b$.
+Optionally, you can add |{<text>}| at |[<node opt>]| as shown in the following example.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines(5,5)
+\tzaxes(5,5)
+\tzfn{(\x-1)^2}[0:3] % y=(x-1)^2
+\def\Gx{(\x-2)^2+1}
+\tzfn[dashed]{\Gx}[1:4]{$g(x)$}[r] % g(x)=(x-2)^2+1
+\tzfn[red]{sin(\x r)+3}[0:2*pi] % y=sin x
+\end{tikzpicture}
+\end{tzcode}
+
+You can name a path formed by |\tzfn| by specifying the optional argument |"<path name>"| right before the mandatory curly brace argument |{<fn of \x>}|. The name of a path is used to find intersection points.
+
+\begin{tzdef}{}
+% syntax: simplified
+\tzfn[<opt>]"<path name>"{<fn of \x>}[<a:b>]{<text>}[<node dot>]
+% defaults
+ []""{<m>}[<m>]{}[]
+% <m>: mandatory
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\footnotesize]
+\tzhelplines(5,5)
+\tzaxes(5,5){$x$}{$y$}
+\def\bgt{4-\x}
+\def\IC{3/\x}
+\def\ICa{4/\x}
+\tzfn"bgt"{\bgt}[0:4] % name path = bgt
+\tzfn[blue]"IC"{\IC}[.75:4] % name path = IC
+\tzfn[red]{\ICa}[1:4] % name path = ICa (automatically)
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+If the curly brace mandatory argument consists of \xem{only a macro name} like |{\Foo}|, the macro name |Foo| (without the backslash) is automatically assigned to the \xem{name of the path}.
+
+\subsection{\protect\cmd{\tzhfnat}, \protect\cmd{\tzhfn}: Horizontal lines}
+\label{ssi:tzhfn}
+
+\icmd{\tzhfnat} draws a horizontal line (the graph of a constant function) at $y$, by default, from bottom to top of the \ixxw{current bounding box}.
+
+\begin{tzdef}{}
+% syntax
+\tzhfnat[<opt>]"<path name>"{<y-val>}[<from:to>]{<text>}[<pos>]
+% defaults
+ []""{<m>}[south:north of current bounding box]{}[]
+\end{tzdef}
+
+\icmd{\tzhfn}|(<coor>)| accepts a coordinate, instead of the value of $y$ to draw a vertical line at the value of $y$ coordinate of |(<coor>)|, ignoring the value of $x$ coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzhfnat{0}
+\tzhfnat[dashed]{1}[1:4]{Two}[l,at start]
+\tzcoors(0,2)(A)(0,3)(B);
+\tzhfn[blue](A)[0:3]{Three}[b,near end]
+\tzhfn[->](B)[0:3]{Four}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzvfnat}, \protect\cmd{\tzvfn}: Vertical lines}
+\label{ssi:tzvfn}
+
+\icmd{\tzvfn} draws a vertical line at $x$ from left to right of the |current bounding box| by default.
+
+\begin{tzdef}{}
+% syntax: simplified
+\tzvfnat[<opt>]"<path name>"{<x-vale>}[<from:to>]{<text>}[<pos>]
+% defaults
+ []""{<m>}[west:east of current bounding box]{}[]
+\end{tzdef}
+
+\icmd{\tzvfn}|(<coor>)| accepts a coordinate, instead of the value of $x$. It draws a vertical line at the value of $x$ coordinate of |(<coor>)|, ignoring the value of $y$ coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzvfnat{0}
+\tzvfnat[dashed]{1}[1:3]{Two}[b,at start]
+\tzvfn[blue](2,0)[0:3]{Three}[a,near end,sloped]
+\tzvfn[->](3,0)[0:3]{Four}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzLFn}: Linear functions}
+\label{ssi:tzLFn}
+
+\icmd{\tzLFn}|(<coor1>)(<coor2>)...| draws a \xem{linear function} passing through two points: |(<coor1)| and |(<coor2>)|.
+|\tzLFn(<coor1>){<slope>}...| draws a linear function passing through |(<coor1>)| with the slope of |<slope>|. If both of the two coordinates are specified the |<slope>| is ignored. The domain in the form of |[a:b]| is also required.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\footnotesize]
+\tzhelplines(5,5)
+\tzaxes(-1,-1)(5,5)
+\tzdots*(1,1)(3,2);
+\tzLFn(1,1)(3,2)[0:4]{two points}[r]
+\tzLFn(1,1){1.5}[0:3]{one point and a slope}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{Intersection points}
+\label{si:intersections}
+
+\subsection{Naming paths}
+\label{ssi:namingpaths}
+
+In \Tikz, you can find \xem{intersection} points when two \xem{named paths} intersect. The name of a path is usually given by the option |[name path=<path name>]| in \Tikz.
+
+In this package, of course, you can use the option |[name path=<path name>]| in usual \Tikz\ way. With the package \pkg{tzplot}, you can also name a path by specifying an optional argument within quotation marks such as |"<path name>"|.
+
+All macros (with a few exceptions) related to lines and curves accept this quotation optional argument to name paths as follows:
+
+\begin{verbatim}
+ \tzline[<opt>]"<path name>"(<coor>)...
+ \tzlines..."<path name>"(<coor>)...
+ \tzpolygon..."<path name">(<coor>)...
+ \tzpath..."<path name">(<coor>)...
+ \tzto..."<path name">(<coor>)...
+ \tzparabola..."<path name">(<coor>)...
+ \tzbezier..."<path name">(<coor>)...
+ \tzfn..."<path name">{<fn of \x>}...
+ \tzLFn..."<path name">(<coor>)...
+ and more...
+\end{verbatim}
+
+\begin{tztikz}{}
+\tzline[dashed]"foo"(1,1)(3,3) % works like
+ \draw [dashed,name path=foo](1,1) -- (3,3);
+\end{tztikz}
+
+In most cases, the quotation optional arguments for naming paths are placed immediately before the first mandatory argument or essential argument (when no mandatory argument exists) of the |tzplot| macros.
+
+\subsection{\protect\cmd{\tzXpoint(*)}: Intersection points of two paths}
+\label{ssi:tzXpoint}
+
+For example, \icmd{\tzXpoint}|{path1}{path2}(A)| finds intersection points of |path1| and |path2| and names the first intersection point |(A)|. This intersection can be referred to as |(A)| or |(A-1)|. If there are two or more intersection points found, they are called |(A)=(A-1)|, |(A-2)|, |(A-3)|, and so on.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline"AA"(0,0)(3,2)
+\tzline"BB"(0,3)(3,0)
+\tzXpoint{AA}{BB}(X)
+\tzdot*(X){E}
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzXpoint*} prints a node dot at the first intersection point.
+You can label the point by specifying |{<text>}| and |[<angle>]| after the specified intersection name.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\footnotesize]
+\tzhelplines(5,5)
+\tzaxes(5,5){$x$}{$y$}
+\def\bgt{4-\x}
+\def\IC{3/\x}
+\tzfn"bgt"{\bgt}[0:4] % name path = bgt
+\tzfn[blue]"IC"{\IC}[.75:4] % name path = IC
+\tzXpoint*{bgt}{IC}(E){$A$}[45] % first intersection
+\tzdot(E-2){$B$}[45](5pt) % second intersection
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+You have to expect \Tikz\ to take a few seconds (or less) to find the intersection points.
+
+\subsection{\protect\cmd{\tzvXpointat(*)}, \protect\cmd{\tzvXpoint(*)}: Vertical intersection points}
+\label{ssi:tzvXpoint}
+
+To find vertical intersection points at $x$ to a curve, you should specify a path name and either the value of $x$ or the coordinate $(x,y)$. Here the $y$ coordinate is ignored.
+
+\icmd{\tzvXpointat}|{<path>}{<x>}(A)| finds vertical intersection points with |<path>| at $x=\texttt{<x>}$ and names it |(A)|.
+The starred version \icmd{\tzvXpointat*} additionally prints a node dot at the (first) intersection point.
+
+For example, \icmd{\tzvXpoint}|{<path>}(<coor>)(A)| gives the same result as |\tzvXpoint{<path>}{<x-coor>}(A)|. Here the $y$ coordinate of |(<coor>)| is not important. |\tzvXpoint| is useful when you do not know the exact value of $x$ coordinate of |(<coor>)|.
+The starred version \icmd{\tzvXpoint*} additionally prints a node dot at the (first) intersection point.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\scriptsize]
+\tzhelplines(5,5)
+\tzaxes(5,5)
+\def\Fx{(\x-1)^2}
+\tzfn\Fx[0:3] % name path = Fx (automatically)
+\tzvXpointat{Fx}{2.5}(A)
+\tzvXpoint{Fx}(2.8,1)(B) % y=1 is ignored
+\tzproj*[->](A){$2.5$}{$f(2.5)$}
+\tzdot(B){$B$}[0]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzhXpointat}, \protect\cmd{\tzhXpoint}: Horizontal intersection points}
+\label{ssi:tzhXpoint}
+
+\icmd{\tzhXpointat}|{<path>}{<y>}(A)| works like |\tzvXpointat{<path>}{<x>}(A)|, but it uses the value of $y$ instead of $x$.
+The starred version \icmd{\tzhXpointat*} additionally prints a node dot at the (first) intersection point.
+
+\icmd{\tzhXpoint}|{<path>}(<coor>)(A)| works like |\tzvXpoint{<path>}(<coor>)(A)|, but it uses only the $y$ coordinate of |(<coor>)|, ignoring the value of $x$ coordinate.
+The starred version \icmd{\tzhXpoint*} prints a node dot at the (first) intersection point.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\scriptsize]
+\tzhelplines(5,5)
+\tzaxes(5,5)
+\def\Fx{(\x-1)^2}
+\tzfn\Fx[0:3] % name path = Fx (automatically)
+\tzhXpointat{Fx}{2.5}(A)
+\tzhXpoint{Fx}(1,2.8)(B) % x=1 is ignored
+\tzproj*[<-](A){$f^{-1}(2.5)$}{$y=2.5$}
+\tzdot(B){$B$}[0]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{Tangent lines}
+\label{si:tangentlines}
+
+\subsection{\protect\cmd{\tztangentat}}
+\label{ssi:tztangentat}
+
+\icmd{\tztangentat}|{<path>}{<x>}| draws a tangent line to |<path>| at $x=\texttt{<x>}$. The line is drawn on the |behind| layer, by default.
+
+\remark
+The slope of a tangent line drawn by |\tztangentat| is just approximate.
+
+\begin{tzdef}{}
+% syntax
+\tztangentat{<path>}{<x>}[<domain>]{<text>}[<pos>]
+% defaults
+ []{<m>}{<m>}[<m>]{}[]
+% <m> means mandatory
+\end{tzdef}
+
+The domain is a mandatory argument and should be of the form |[<from:to>]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[use as bounding box](5,5)
+\tzparabola[thick,blue]"curve"(0,1)(2,3)(4,2)
+\tzvXpointat*{curve}{1}
+\tzvXpointat*{curve}{3}
+\tztangentat{curve}{1}[0:3]
+\tztangentat[red]{curve}{3}[1:5]
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tztangent}}
+\label{ssi:tztangent}
+
+\icmd{\tztangent} works like |\tztangentat|, but it accepts a coordinate instead of the value of $x$.
+
+|\tztangent{<path>}(<coor>)| draws a tangent line to |<path>| at $x$ coordinate of |(<coor>)|. Here, the $y$ coordinate of |(<coor>)| is ignored. The line is drawn on the |behind| layer, by default.
+
+
+\begin{tzdef}{}
+% syntax
+\tztangentat{<path>}(<coor>)[<from:to>]{<text>}[<pos>]
+% defaults
+ []{<m>}(<m>)[<m>]{}[]
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[draw=none,use as bounding box](5,5)
+\tzparabola[thick,blue]"curve"(0,1)(2,3)(4,2)
+\tzvXpoint*{curve}(1,0)(A){A}[135]
+\tzvXpoint*{curve}(3,0)(B){B}[45]
+\tztangent{curve}(A)[0:3]
+\tztangent[red]{curve}(B)[1:5]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzsecantat}, \protect\cmd{\tzsecant}}
+\label{ssi:tzsecant}
+
+\icmd{\tzsecantat}|{<path>}{<x1>}{<x2>}| draws a secant line segment of |<path>| from $x_1=\texttt{<x1>}$ to $x_2=\texttt{<x2>}$ on the |behind| layer, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[use as bounding box](5,5)
+\tzaxes(5,5)
+\tzparabola"curve"(0,1)(2,3)(5,1)
+\tzsecantat{curve}{1}{2}
+\tzsecantat[red]{curve}{1}{3}
+\tzsecantat[blue]{curve}{1}{4}
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzsecant} works like |\tzsecantat|, but it accepts two coordinates instead of two values of $x$.
+
+|\tzsecant{<path>}(<coor1>)(<coor2>)| draws a secant line segment of |<path>| from the $x$ coordinate of |(<coor1>)| to the $x$ coordinate of |(<coor2>)|, ignoring $y$ values of the coordinates, on the |behind| layer by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[use as bounding box](5,5)
+\tzaxes(5,5)
+\tzparabola"curve"(0,1)(2,3)(5,1)
+\tzsecant{curve}(1,0)(2,0)
+\tzsecant[red]{curve}(1,0)(3,0)
+\tzsecant[blue,dashed]{curve}(1,0)(4,0)
+\end{tikzpicture}
+\end{tzcode}
+
+
+You can extend or shorten a secant line by specifying the domain |[<from:to>]|, which is an optional argument.
+If you specify the domain, |\tzsecant| draws a secant line over the domain.
+You can also add some text next to the line by specifying the optional arguments |{<text>}| and |[<node opt>]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[use as bounding box](5,5)
+\tzaxes(5,5)
+\tzparabola"curve"(0,1)(2,3)(5,1)
+\tzsecant{curve}(1,0)(2,0)
+\tzsecant[red]{curve}(1,0)(3,0)[0:5]{secant}[r]
+\tzsecantat[blue,dashed]{curve}{1}{4}[0:5]{blue}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Examples: Economics}
+\label{ci:examples}
+
+%%------------------------------------------------------------
+\section{Markets}
+\label{si:markets}
+
+\subsection{Market equilibrium: step by step}
+\label{ssi:mkteqm}
+
+\paragraph{Step 1} Determine the size of the graph.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+%\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+%\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+%\tzXpoint*{dem}{supp}(eqm){$E$}
+%\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Step 2} Draw the demand and supply curves.
+Here, we are using |\tzto|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+%\tzXpoint*{dem}{supp}(eqm){$E$}
+%\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Step 3} Find an equilibrium point and name it. Use the starred version |\tzXpoint*| to print a dot and then label the point.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+\tzXpoint*{dem}{supp}(eqm){$E$}
+%\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Step 4} If necessary, use |\tzproj| to draw projection lines with text at the projection points.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+%\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+\tzXpoint*{dem}{supp}(eqm){$E$}
+\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Tax incidence: step by step}
+\label{ssi:taxincidence}
+
+\begin{enumerate}[{Step} 1{:}]
+\item Determine the size of the graph.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.035,font=\scriptsize]
+\tzhelplines[step=10cm](120,120)
+\tzaxes(120,120){$Q$}{$P$}
+\end{tikzpicture}
+\end{tzcode}
+
+\item Define functions and plot them. And then, find an intersection point.
+\item Draw the shifted supply curve and find new equilibrium point. And then, project the point on each axis.
+\item To illustrate the social welfare loss (SWL), find a vertical intersection point of the original supply curve using new equilibrium point.
+\item Project the old equilibrium point and the vertical intersection point onto the $y$ axis and add text.
+\item Fill the area of the social welfare loss with color.
+\item Add text `SWL' at the appropriate place.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.035,font=\scriptsize]
+%\tzhelplines[step=10cm](120,120)
+\tzaxes(120,120){$Q$}{$P$}
+% step 2
+\def\demA{100-\x}
+\def\suppA{10+\x}
+\tzfn\demA[0:100]{$D$}[ar] % name path = \demA
+\tzfn\suppA[0:90]{$S$}[r] % name path = \suppA
+\tzXpoint*{demA}{suppA}(E)
+% step 3
+\tzfn[dashed]"suppB"{\suppA+20}[0:80]{$S'$}[ar]
+\tzXpoint*{demA}{suppB}(newE){$E'$}
+\tzproj(newE){$Q$}{$P_d$}
+% step 4
+\tzvXpoint{suppA}(newE)(vX)
+% step 5
+\tzprojy(vX){$P_s$}
+\tzprojy(E){$P^c$}
+% step 6
+\tzpath*[red](E)(newE)(vX);
+% step 7
+\tznode($(E)!10cm!(E-|0,0)$){}[pin={-70:SWL}]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Firms}
+\label{si:firms}
+
+\subsection{Cost curves}
+\label{ssi:costcurves}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzaxes(10,10){$q$}{$AC$\\$AVC$\\$MC$}[align=center]
+\tzparabola"MC"(.5,4)(2,2)(6,9){$MC$}[a]
+\tzhXpointat{MC}{5}(A)
+\tzhXpointat{MC}{3}(B) % (B-2) will be used!
+\tzdots*(A)(B-2);
+\tzparabola(2,7)(A)(8,9){$AC$}[r]
+\tzparabola(1,4.5)(B-2)(8,8){$AVC$}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Equilibrium of a competitive firm}
+\label{ssi:competitive}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+%\tzhelplines(10,10)
+\tzaxes(10,10){$q$}{$P$\\$AC$\\$MC$}[align=center]
+\tzparabola"MC"(2,2)(6,9){$MC$}[a]
+\tzhXpointat{MC}{4}(A) % point (A) on MC at q=4
+\tzparabola"AC"(2,7)(A)(8,9){$AC$}[r] % (A): minAC
+\tzhfnat[blue]"price"{6}[0:9]{$P$}[l,at start]
+\tzXpoint*{price}{MC}(E)
+\tzprojx(E){$q^*$}
+\tzvXpoint{AC}(E)(ACeqm) % point on AC in eqmuilibrium
+\tzprojy(ACeqm){$AC(q^*)$}
+\tzpath*[red](E-|0,0)(E)(ACeqm)(ACeqm-|0,0);
+\tznode(2,5){$\pi^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{Monopoly equilibrium}
+\label{ssi:monopoly}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,10)
+\tzaxes(10,10){$Q$}{$P$}
+\def\DD{8-\x}
+\def\MR{8-2*\x}
+\def\MC{\x}
+\tzfn\DD[0:8]{$D$}[ar]
+\tzfn\MR[0:4.5]{$MR$}[r]
+\tzfn\MC[0:7]{$MC$}[r]
+\tzXpoint*{MR}{MC}(E)
+\tzvXpoint*{DD}(E)(EE)
+\tzproj(EE){$Q^M$}{$P^M$}
+\tzXpoint{DD}{MC}(C)
+\tzpath*(EE)(C)(E);
+\tznode(C){\tiny SWL}[l]
+\tzpath*[blue](0,8)(EE)(EE-|0,0);
+\tznode(1,6){C.S.}
+\tzpath[pattern=horizontal lines](0,0)(E)(E-|0,0);
+\tznode(1,2){P.S.}
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\section{Consumers: Budget lines and indifference curves}
+\label{si:consumers}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.3,font=\scriptsize]
+%\tzhelplines(15,12)
+\tzaxes(15,12){$x$}{$y$}
+\def\bgt{-3/4*\x+9} % 3x+4y=36
+\tzfn\bgt[0:12]
+\tzvXpoint*{bgt}(6,0)(A){A}[45]
+\tzplotcurve"ICC"(3,9)(A)(12,3); % trial and error
+\tzproj(A){$x^*$}{$y^*$}
+\tzticks{12}{9}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.15,font=\scriptsize]
+%\tzhelplines(35,25)
+\tzaxes(35,25){$x$}{$y$}
+\def\bgt{-2/3*\x+20} % 2x+3y=60
+\def\IC{150/\x} % u(x,y)=xy
+\tzfn\bgt[0:30]
+\tzfn\IC[7:30]
+\tzcoor*(15,10)(E){$E$}[45]
+\tzproj(E)
+\tzticks{15,30}{10,20}
+\tzvXpointat*[red]{IC}{12}(A)
+\tztangent[blue,densely dashed]{IC}(A)[5:20]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Production Possibility Curves}
+\label{si:PPC}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(9,8)
+\tzaxes(9,8){$X$}{$Y$}
+\tzto[out=-10,in=105]"PPC"(0,7)(6,0){PPC}[ar]
+\tzvXpointat*{PPC}{2}(E)
+\tztangent[blue]"tan"{PPC}(E)[0:8]
+\tzvXpointat*{tan}{4}(F)
+\tzplotcurve[densely dashed,red](2,7)(F)(8,4);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{Edgeworth box}
+\label{si:edgeworth}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(9,7)
+\tzaxes(9,7){$x_1$}{$y_1$}
+\tzaxes<8,6>(8,6)(-1,-1){$x_2$}[l]{$y_2$}[b]
+\tzshoworigin{$O_1$}
+\tzshoworigin(8,6){$O_2$}[ar]
+\tzto[bend right](2,5)(7,2){$u_1$}[r]
+\tzto[bend left](1,4)(6,1){$u_2$}[b]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Growth}
+\label{si:growth}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,8)
+\tzshoworigin
+\tzaxes*(10,8){$k$}{$y$} % bounding box
+\def\Fk{3*(\x)^(1/3)}
+\def\sFk{2*(\x)^(1/3)}
+\def\ndk{7/9*\x}
+\tzfn\Fk[0:9]{$y=f(k)$}[r] % path name=Fk
+\tzfn\sFk[0:9]{$sf(k)$}[r] % path name=sFk
+\tzfn\ndk[0:9]{$(n+\delta)k$}[r] % path name=ndk
+\tzXpoint*{sFk}{ndk}(E)[2]{$E$}[135] % 2nd X point
+\tzvXpoint*{Fk}(E-2)(YE) % 2nd X point
+\tzproj(YE){$k^*$}{$y^*$}
+\tzvXpointat*{Fk}{2}(A)
+\tzvXpointat*{sFk}{2}(B)
+\tzvXpointat*{ndk}{2}(C)
+\tzproj(A){$k_0$}{$y_0$}
+\tzprojy(B){$sf(k_0)$}
+\tzprojy(C){$(n+\delta)k_0$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{Liquidity trap}
+\label{si:trap}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,8)
+\tzshoworigin
+\tzaxes(10,8){$Y$}{$r$}
+\tzline"LM"(1,2)(5,2)
+\tzto[out=0,in=-95](5,2)(8,6){$LM$}[a]
+\tzto[dashed,out=0,in=-95](5,2)(9.5,6){$LM'$}[a]
+\tzLFn"IS"(4,2){-1}[5:1]{$IS$}[a]
+\tzLFn[dashed]<1,0>"ISa"(4,2){-1}[5:1]{$IS'$}[a] % shift
+\tzXpoint{IS}{LM}(E)
+\tzXpoint{ISa}{LM}(E1)
+\tzproj(E){$Y^*$}{$r_0$}
+\tzprojx(E1){$Y'$}
+\end{tikzpicture}
+\end{tzcode}
+
+$LM$ curves are drawn with two paths.
+To shift the $IS$ curve, |<shift coor>| is used. See Section \ref{s:tzLFn} on page \pageref{s:tzLFn} for more details.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,8)
+\tzshoworigin
+\tzaxes(10,8){$m$}{$r$}
+\tzto[out=-88,in=180](1,7)(5,2)
+ <--(9,2) node [r] {$m^d$}> % code.append
+\tzvfnat{5}[0:6]{$m^s_0$}[a]
+\tzvfnat{6.5}[0:6]{$m^s_1$}[a]
+\tzvfnat{8}[0:6]{$m^s_2$}[a]
+\tzprojy(5,2){$r_0$}
+\tzticksx{5/{$m_0$},6.5/{$m_1$},8/{$m_2$}}
+\end{tikzpicture}
+\end{tzcode}
+
+The money demand ($m_d$) curve is drawn with one path.
+To do this, |<code.append>| is used.
+See Section \ref{s:tzto} on page \pageref{s:tzto} for more details.
+
+
+%%------------------------------------------------------------
+\section{Miscellany}
+\label{si:misc}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[font=\scriptsize]
+\def\z{1}
+\tzcoors
+ (0,0)(A)
+ ($(A) + (45:\z)$)(B)
+ ($(B) + (45:\z)$)(C)
+ ($(A) + (-45:\z)$)(D)
+ ($(D) + (45:\z)$)(E)
+ ($(E) + (45:\z)$)(F)
+ ($(D) + (-45:\z)$)(G)
+ ($(G) + (45:\z)$)(H)
+ ($(H) + (45:\z)$)(I);
+
+\foreach \a in {A,...,I}
+ { \tzdot*(\a){\a}
+ }
+
+\tzlines(D)(A)(B)(C)(F)(E)(D)(G)(H)(I)(F);
+\tzlines[red](B)(E)(H);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=1,font=\scriptsize]
+\tzaxes(4,4){alternatives}{preferences}
+\tzticksx{1/$a$,2/$b$,3/$c$}
+\tzplot[mark=ball](1,3)(2,2)(3,1){A}[0];
+\tzplot[mark=*,mark color=red](1,2)(2,1)(3,3){B}[0];
+\tzplot[mark=+](1,1)(2,3)(3,2){C}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=1,font=\scriptsize]
+\tzaxes(4,4){alternatives}{preferences}
+\tzticksx{1/$a$,2/$b$,3/$c$}
+\foreach \x in {1,2,3}
+ {\foreach \y in {1,2,3}
+ {\tzdot*(\x,\y)}
+ }
+\tzlines(1,3)(2,2)(3,1){A}[r];
+\tzlines(1,2)(2,1)(3,3){B}[r];
+\tzlines(1,1)(2,3)(3,2){C}[r];
+\end{tikzpicture}
+\end{tzcode}
+
+
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc-C-v1.0.tex b/graphics/pgf/contrib/tzplot/tzplot-doc-C-v1.0.tex
new file mode 100644
index 0000000000..36320a2bfd
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc-C-v1.0.tex
@@ -0,0 +1,3981 @@
+%!TEX root = tzplot-doc.tex
+%\begin{document}
+
+%%%==========================
+\part{Points, Lines, and Curves}
+%%%==========================
+\label{p:linesandcurves}
+
+
+%%==================================
+\chapter{Getting Ready}
+\label{c:gettingready}
+
+%%------------------------------------------------------------
+\section{Styles: \texttt{tzdotted}, \texttt{tzdashed}, \texttt{tzhelplines}}
+\label{s:styles:tzhelplines}
+
+The styles \ixttw{tzdotted}, \ixttw{tzdashed}, and \ixttw{tzhelplines} are defined as follows:
+
+\begin{tzsty}{}
+% styles: tzdotted, tzdashed, tzhelplines
+\tikzset{%
+ tzdotted/.style={line cap=round,dash pattern=on 0pt off 1cm/(#1)},
+ tzdotted/.default=10
+}
+\tikzset{%
+ tzdashed/.style={dashed=none,dash pattern=on 5mm/(#1) off 5mm/(#1)},
+ tzdashed/.default=10
+}
+\tikzset{%
+ tzhelplines/.style={help lines,-,tzdotted}
+}
+\end{tzsty}
+
+The style |tzdotted| and |tzdashed| prints 10 dots and 10 dashes per 1cm, respectively, by default.
+The style |tzhelplines| uses |tzdotted| by default.
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzhelplines}, \protect\cmd{\tzhelplines*}}
+\label{s:tzhelplines}
+
+\icmd{\tzhelplines} draws |grid| from the first coordinate to the second coordinate.
+If only one coordinate is specified, then the first coordinate is regarded as |(0,0)|.
+
+The starred version \icmd{\tzhelplines*} uses the grid as a \iisw{bounding box}.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzhelplines(<coor>)
+% syntax: full
+\tzhelplines[<opt>](<coor1>)(<coor2>)
+% defaults
+ [help lines,tzdotted=10](<m>)()
+% (<m>): mandatory argument
+\end{tzdef}
+
+Here, |(|\ixxw{<m>}|)| stands for a \xem{mandatory} argument.
+
+\begin{tztikz}{}
+\tzhelplines(4,3) % works similarly to:
+ \draw [help lines] (0,0) grid (4,3);
+
+\tzhelplines(1,1)(4,3) % works similarly to:
+ \draw [help lines] (1,1) grid (4,3);
+\end{tztikz}
+
+
+By default, |\tzhelplines| prints |grid| with |10| dots per |1cm|.
+|\tzhelplines| with the option value |[tzdotted=<n>]| prints |<n>| dots per |1cm|.
+(That is, the default value is |tzdotted=10|.)
+
+\begin{tzcode}{.3}
+% \tzhelplines
+\begin{tikzpicture}
+\tzhelplines(2,2)
+\draw [help lines] (3,0) grid (5,2);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% tzdotted: (default: 10 dots per 1cm)
+\begin{tikzpicture}
+\tzhelplines[thick](1,2) % 10 dots
+\tzhelplines[thick,tzdotted=20](2,0)(3,2) % 20 dots
+\tzhelplines[thick,tzdotted=5](4,0)(5,2) % 5 dots
+\end{tikzpicture}
+\end{tzcode}
+
+With the option value, |[tzdotted=<n>/<d>]|, |\tzhelplines| prints |<n>| dots per |<d>cm|.
+
+Similarly for |tzdashed|.
+
+\begin{tzcode}{.3}
+% tzdotted, tzdashed
+\begin{tikzpicture}
+\tzhelplines[thick,tzdashed](4,2)
+\tzhelplines[thick,step=.5](4,2)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% scaled: 7 dots per .7cm (10 dots per hard 1cm)
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[tzdashed](4,3)
+\tzhelplines[step=.5](4,3)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% scaled: 10/.7 means 10 dots per .7cm
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[tzdashed=10/.7](4,3) %%
+\tzhelplines[step=.5,tzdotted=10/.7](4,3) %%
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%==================================
+\chapter{Dots}
+\label{c:dots}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcdot(*)}: A small circle}
+\label{s:tzcdot}
+
+A dot is usually expressed by a small circle.
+\icmd{\tzcdot} prints a circle dot \tikz \tzcdot(0,0);.
+
+The starred version \icmd{\tzcdot*} prints a filled circle dot \tikz \tzcdot*(0,0);.
+The \xem{radius} of the circle is |1.2pt|, by default.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcdot(<coor>)
+% syntax: medium
+\tzcdot*(<coor>){<label>}[<angle>](<radius>)
+% syntax: full
+\tzcdot*[<opt>]<shift coor>(<coor>){<label>}[<[label opt]angle>](<radius>)
+% defaults
+ *[ solid,thin,tzcdot=1.2pt ]<>(<m>){}[](1.2pt)
+% tzcdot is a predefined key (in this package).
+% (<m>): mandatory
+\end{tzdef}
+
+Here, |(|\ixxw{<m>}|)| stands for a \xem{mandatory} argument. All others are optional arguments.
+
+\paragraph{How to change the size}
+There are three ways to change the \xem{radius} of a circle dot drawn by |\tzcdot|.
+
+\begin{enumerate}
+\item The simplest way is to use the last parenthesis option, like |\tzcdot(0,0)(3pt)|.
+
+\begin{tztikz}{}
+\tzcdot(0,0) or \tzcdot(0,0)(1.2pt) % is an abbreviation of:
+ \draw (0,0) circle (1.2pt); % default radius=1.2pt
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzcdot*(0,0)(3pt) % is an abbreviation of:
+ \draw [fill] (0,0) circle (3pt);
+\end{tztikz}
+
+\item
+You can use the key-value option |[tzcdot=<dim>]|, like |\tzcdot[tzcdot=3pt](0,0)|, to change the \xem{radius} of a circle dot. The |tzcdot| key is defined in the package.
+If both the |tzcdot| key-value and the last parenthesis option are used, the former wins.
+
+\begin{tztikz}{}
+\tzcdot\tzcddot[tzcdot=1.2pt](1,1) or \tzcdot(1,1) % works like:
+ \draw (1,1) circle [radius=1.2pt]; % default radius=1.2pt
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzcdot*[tzcdot=3pt] % works like:
+ \draw [fill] (0,0) circle [radius=3pt];
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcdot(*)
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzcdot(0,0) \tzcdot[tzcdot=4pt](1,1)
+\tzcdot*(2,1)(2pt) \tzcdot*(3,0)(3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\item
+Another way to change the radius is to use a macro, like |\settzcdotradius{3pt}|,
+It is effective within the |tizpicture| environment unless changed by \icmd{\settzcdotradius} again.
+
+\begin{tzcode}{.3}
+% \settzcdotradius
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\settzcdotradius{4pt}
+\tzcdot(0,0) \tzcdot(1,1)
+\tzcdot*(2,1)(2pt) \tzcdot*(3,0)
+\end{tikzpicture}
+\end{tzcode}
+
+\end{enumerate}
+
+
+\paragraph{How to label}
+You can add a label to a specified coordinate by adding the optional argument |{<label>}| immediately after |(<coor>)|. You can also change the |<label>| position by the option |[<angle]|.
+(Note that you \xem{cannot} use the abbreviations such as |a|, |r|, |bl|, etc. to place label nodes.)
+
+\begin{tztikz}{}
+\tzcdot(0,0){A} % is an abbreviation of:
+ \draw (0,0) circle (1.2pt) node [label={:A}] {};
+
+\tzcdot(0,0)(2pt){A}[[blue]0] % is an abbreviation of:
+ \draw (0,0) circle (2pt) node [label={[blue]0:A}] {};
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcdot: labels
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdot(0,0){A} % default position: 90 or above
+\tzcdot[tzcdot=4pt](1,1){B}[0]
+\tzcdot*(2,1){C}[45](2pt)
+\tzcdot*(3,0){D}[-90](3pt)
+\tzcdot(4,3){E}[-90](6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+The position does not depend on the size of dot circles.
+
+\paragraph{How to change colors}
+With the first optional argument |[<opt>]| you can change the color of a dot.
+You can also change the color of a label, as shown in the following example.
+
+\begin{tzcode}{.3}
+% \tzcdot(*)
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzcdot(0,0){A}
+\tzcdot*[red](1,0){\textbf{B}}[45]
+\tzcdot*[red,fill=green](2,1){green}[[blue]0](10pt)
+\tzcdot[tzcdot=2*7pt](3,2){big}[center]
+\tzcdot*[fill=red,text=blue](4,3){D}(2*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift}
+Dots can be shifted by specifying the optional argument |<shift coor>| immediately before |(<coor>)|. The empty shift option |<>| is not allowed.
+
+\begin{tzcode}{.3}
+% \tzcdot: shift
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzcdot(0,0){A}
+\tzcdot*[red]<0,2>(1,0){\textbf{B}}[45] % shift
+\tzcdot*[red,fill=green](2,1){green}[[blue]0](10pt)
+\tzcdot[tzcdot=2*7pt]<1,-1>(3,2){big}[center] % shift
+\tzcdot*[fill=red,text=blue](4,3){D}(2*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzcdot: repeated
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\foreach \x in {0,...,4}
+ { \foreach \A in {2,4,6,8}
+ { \tzcdot[blue] (\x,0)(\A pt) } }
+\foreach \x in {0,...,4}
+ { \foreach \A in {2,4,6,8}
+ { \tzcdot[red]<1,1>(\x,0)(\A pt) } } % shift
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcdots(*)}: Multiple circle dots}
+\label{s:tzcdots}
+
+The macro \icmd{\tzcdots} takes an arbitrary number of coordinates as arguments to print multiple circle dots with the radius |1.2pt|, by default.
+You need to indicate when the iteration of an arbitrary number of coordinates ends, by typing a \xem{semicolon} |;|.
+Let us call this kind of macro a \iisw{semicolon version}.
+
+\remark
+\begin{itemize}
+\item DO NOT FORGET to enter `|;|' at the end of iteration.
+ \begin{itemize}
+ \item Tokens such as `|!|' and `|#|' other than the open parenthesis `|(|' works like the semicolon `|;|' to indicate the end of iteration.
+ But it is highly recommended to use `|;|' for consistency.
+ \end{itemize}
+\item Without |;|, the macro does nothing or a compile error occurs.
+\end{itemize}
+
+
+The starred version |\tzcdots*| prints multiple filled dots.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcdots*(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: full
+\tzcdots*[<opt>]<shift coor> (<coor>){<label>}[<[label opt]angle>]
+ ..repeated.. (){}[] ; (<dot radius>)
+% defaults
+ *[tzcdot=1.2pt]<>(<m>){}[]..repeated..(){}[] ; (1.2pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzcdots(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0)(1,1)(2,1)(3,2)(4,0);
+\tzcdots*(0,3)(1,2)(2,2)(3,3)(4,3);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{How to label}
+
+Each coordinate can be followed by the optional arguments |{<label>}| and |[<angle>]| to label dots. So the repeating pattern is the triple |(<coor>){<label>}[<angle>]|.
+
+\begin{tzcode}{.3}
+% \tzcdots: label
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0){A}
+ (1,1)
+ (2,1){C}[0]
+ (3,2){D}[-90]
+ (4,0){E};
+\tzcdots*(0,3)(1,2){B}(2,2){C}[45](3,3)(4,3);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{How to change the size of dots}
+
+There are three ways of changing the \xem{radius} of dots.
+\begin{enumerate}
+\item The simplest way is to use the \xem{last} parenthesis optional argument, \xem{after the semicolon}.
+\item Another way is to use the \ixxw{tzcdot} key, like |\tzcdots[tzcdot=3pt]...|.
+If both options are used the key-value option wins.
+\item You can also use the macro \icmd{\settzcdotradius}.
+The effect remains within the |tikzpicture| environment unless it is changed again.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+% \tzcdots: size (radius)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzcdotradius{3pt}
+\tzcdots(0,0)(1,0){3pt};
+\tzcdots*(1,1)(2,1){1pt};(1pt) % simplest
+\tzcdots[tzcdot=5pt](2,2)(3,2){5pt};
+\tzcdots*(3,3)(4,3){3pt};
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{How to change colors}
+
+With the first optional argument |[<opt>]|, you can change the color of dots.
+You can also change the color of all labels together using the first optional argument,
+like |\tzcdots[text=red]...| as shown in the following example.
+
+\begin{tzcode}{.3}
+% \tzcdots: color
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzcdotradius{3pt}
+\tzcdots*[red]
+ (0,0)(1,1){\textbf{Ben}}[[blue]-90](2,1)(3,0);
+\tzcdots*[thick,blue,fill=green,text=red]
+ (1,2){A}(2,2){Ben}[[blue]-90](3,2){C}(4,2){D};(4pt)
+\tzcdots*[blue]
+ (1,3){A}(2,3){B}(3,3){C}(4,3){D};
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift} You can move the coordinates of dots by specifying |<shift coor>| option immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzcdots: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots[red] (0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\tzcdots*<0,1>(0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzdot(*)}: A single node dot}
+\label{s:tzdot}
+
+The macro \icmd{\tzdot} prints a small circle node \tikz \tzdot(0,0);, as a dot, with the \xem{diameter} (or |minimum size|) of |2.4pt|, by default.
+
+The starred version \icmd{\tzdot*} prints a filled dot \tikz \tzdot*(0,0);.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzdot(coor)
+% syntax: medium
+\tzdot*(<coor>){<label>}[<angle>](<dot size>)
+% syntax: full
+\tzdot*[<node opt>]<shift coor>(<coor>){<label>}[<[label opt]angle>](<dot size>)
+% defaults
+ *[ tzdot=2.4pt ]<>(<m>){}[](2.4pt)
+% the style tzdot is predefined
+% (<m>): mandatory
+\end{tzdef}
+
+|\tzdot(*)| accepts one mandatory argument, denoted by |(|\ixxw{<m>}|)|. All others are optional.
+
+The style \ixxw{tzdot} is defined as follows:
+
+\begin{tzsty}{}
+% style: tzdot
+\tikzset{
+ tzdot/.style={draw,circle,solid,thin,inner sep=0pt,minimum size=#1},
+ tzdot/.default=2.4pt
+}
+\end{tzsty}
+
+
+\subsection{{\normalfont\scshape Three Ways} to change the size of node dots}
+\label{ss:threeways}
+
+There are \iscw{Three Ways} to change the \xem{diameter} (or |minimum size|) of a node dot drawn by |\tzdot(*)|.
+
+\begin{enumerate}
+\item Use the predefined style |tzdot| in the first optional agrument, like |\tzdot[tzdot=5pt](0,0)|, which gives the same result as |\tzdot[minimum size=5pt](0,0)|.
+
+\begin{tztikz}{}
+\tzdot(0,0) % works like:
+ \path (0,0) node [tzdot=2.4pt] {}; % default size
+% or equivalently
+ \node [tzdot,minimum size=2.4pt] at (0,0) {};
+\end{tztikz}
+
+\item The simplest way is to use the last parenthesis optional argument, like |\tzdot(0,0)(5pt)|, which yields the same result as in |\tzdot[tzdot=5pt](0,0)|.
+If both options are used, the |tzdot| (or |minimum size|) option overwrites the last parenthesis option.
+
+\begin{tzcode}{.3}
+% \tzdot(*)
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzdot(0,0) \tzdot[tzdot=8pt](1,1)
+\tzdot*(2,1)(4pt) \tzdot*(3,0)(6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\item To change the size of all node dots draw by |\tzdot*|, you can use the macro |\settzdotsize|. Its effect remains until the end of |tikzpicture| environment unless changed again.
+
+\begin{tzcode}{.3}
+% \settzdotsize
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\settzdotsize{8pt}
+\tzdot(0,0) \tzdot(1,1)
+\tzdot*(2,1)(4pt) \tzdot*(3,0)
+\end{tikzpicture}
+\end{tzcode}
+
+\end{enumerate}
+
+\subsection{How to label}
+\label{ss:tzdot:label}
+
+You can add a label to a specified coordinate by specifying the optional argument |{<label>}| immediately after the coordinate |(<coor>)|.
+
+You can also change the label position by the option |[<angle>]| following |{<label>}|.
+
+\begin{tztikz}{}
+\tzdot(0,0){A}(3pt) % works like:
+ \path (0,0) node [tzdot=3pt,label={:A}] {};
+
+\tzdot*(0,0){A}[[red]0](3pt) % works like:
+ \path (0,0) node [fill,tzdot=3pt,label={[red]0:A}] {};
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzdot: labels
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot(0,0){A}
+\tzdot(1,1){B}[0](8pt)
+\tzdot*(2,1){C}[45](4pt)
+\tzdot*(3,0){D}[-90](6pt)
+\tzdot(4,3){E}[-90](12pt)
+\end{tikzpicture}
+\end{tzcode}
+
+Unlike |\tzcdot|, the |\tzdot|'s label position depends on the size of a circle node. In \Tikz\ jargon, |{<label>}| is a \iisw{label node} for a \iisw{main node} that is a circle node with no text in it.
+
+
+\subsection{How to change colors and shapes}
+\label{ss:tzdot:color}
+
+With the first optional argument |[<node opt>]| you can change of the color or shape of dots.
+You can also change the label color using |[<label opt>]| as shown in the example below.
+
+\remark
+\begin{itemize}
+\item |[<node opt>]| is for options of \xem{main nodes}, |[<label opt>]| is for options of \xem{label nodes}.
+\item |[<label opt>]| is used in the form of |[[<label opt>]angle>]|.
+\end{itemize}
+
+\begin{tzcode}{.3}
+% \tzdot: color
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzdot(0,0){A}
+\tzdot*[red](1,0){\textbf{B}}[45]
+\tzdot*[red,fill=green](2,1){green}[[blue]0](2*10pt)
+\tzdot[tzdot=4*7pt](3,2){big}[center]
+\tzdot*[fill=red](4,3){D}(4*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzdot: shape
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzdot[regular polygon](0,0){A}(10pt)
+\tzdot*[red](1,0){\textbf{B}}[45]
+\tzdot*[red,fill=green,rectangle](2,1){green}[0](2*10pt)
+\tzdot[tzdot=4*7pt](3,2){big}[center]
+\tzdot*[fill=red,star](4,3){D}(4*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{How to move: \texttt{shift}}
+\label{ss:tzdot:shift}
+
+Dots can be shifted by specifying the optional argument |<shift coor>| immediately before |(<coor>)|. The empty shift option |<>| is not allowed.
+
+\begin{tzcode}{.3}
+% \tzdot: shift
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzdot[regular polygon](0,0){A}(10pt)
+\tzdot*[red]<0,2>(1,0){\textbf{B}-shifted}[45] % shift
+\tzdot*[red,fill=green,rectangle](2,1){green}[0](2*10pt)
+\tzdot[tzdot=4*7pt]<1,-1>(3,2){big}[center] % shift
+\tzdot*[fill=red,star](4,3){D}(4*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzdot: repeated
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\foreach \x in {0,...,4}
+ { \foreach \A in {1,2,3,4}
+ { \tzdot[blue] (\x,0)(2*\A mm) } }
+\foreach \x in {0,...,4}
+ { \foreach \A in {1,2,3,4}
+ { \tzdot[green]<1,1>(\x,0)(2*\A mm) } } % shift
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{Comparison: \protect\cmd{\tzdot} and \protect\cmd{\tzcdot}}
+\label{ss:tzdot:comparison}
+
+The most important difference between |\tzcdot| and |\tzdot| is that |\tzcdot| is affected by \Tikz's scaling factor, but |\tzdot| is not.
+This is critical when |xscale| is not equal to |yscale|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[xscale=1.6,yscale=.8]
+\tzhelplines(3,3)
+\tzcdot(0,0)(3pt) % dostorted
+\tzdot(1,0)(6pt)
+\tzcdots*(1,1)(2,1)(3,1);(2pt) % distorted
+\tzdots*(1,2)(2,2)(3,2);(4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+The following table further shows the differences between them.
+%Everything else is the same for end-users.
+
+\begin{tzcode}[listing only,colback=green!10!white]{.3}
+% concept % single % multi % size control % [key=default size]
+node [circle] \tzdot \tzdots \settzdotsize [tzdot=2.4pt] % diameter
+circle \tzcdot \tzcdots \settzcdotradius [tzcdot=1.2pt] % radius
+\end{tzcode}
+
+\remark
+\begin{itemize}
+\item In \Tikz, a `node' is `not' affected by `scaling' unless the \Tikz\ option |transform shape| is used together.
+|\tzdot| is also useful for labelling a large dot.
+ \begin{itemize}
+ \item In |\tzdot|, |<label>| is a label in a \iisw{label node} for a node dot (as a \iisw{main node}).
+ So if a node dot gets larger, its label moves accordingly.
+ (Unlike, a label with |\tzcdot| or |\tzcdots|.)
+ \item The position of |<label>| in |\tzcdot| does not depend on the size of dots.
+ \end{itemize}
+\item The package |tzplot| takes |\tzdot| as a \xem{standard dot}, not |\tzcdot|.
+So, you can apply the \threeways\ (on page \pageref{ss:threeways}) to change the size of any standard dots.
+\end{itemize}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzdots(*)}: Multiple node dots}
+\label{s:tzdots}
+
+\icmd{\tzdots} takes an arbitrary number of coordinates as arguments to print multiple node circle dots with the \xem{diameter} (or |minimum size|) of |2.4pt|, by default.
+
+This is a \iisw{semicolon version} macro, with the whole repeating pattern |(<coor>){<label>}[<angle>]|, which means that you need to type a \xem{semicolon} |;| at the end of the repetition. The \xem{semicolon} says, ``\xem{The repetition ends here}."
+
+\remark
+\begin{itemize}
+\item DO NOT FORGET to enter `|;|' at the end of iteration.
+ \begin{itemize}
+ \item Tokens such as `|!|' and `|#|' other than the open parenthesis `|(|' works like the semicolon `|;|' to indicate the end of iteration.
+ But it is highly recommended to use `|;|' for consistency.
+ \end{itemize}
+\item Without |;|, the macro does nothing or a compile error occurs.
+\end{itemize}
+
+The starred version \icmd{\tzdots*} prints multiple filled node dots.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzdots*(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: full
+\tzdots*[<node opt>]<shift coor> (<coor>){<label>}[<[label opt]angle>]
+ ..repeated.. (){}[] ; (<dot size>)
+% defaults
+ *[tzdot=2.4pt]<> (<m>){}[] ..repeated.. (){}[] ; (2.4pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzdots(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(1,1)(2,1)(3,2)(4,0);
+\tzdots*(0,3)(1,2)(2,2)(3,3)(4,3);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{How to label}
+
+Each coordinate can be followed by the optional arguments |{<label>}| and |[<angle>]| to label dots. So the triple |(<coor>){<label>}[<angle>]| is the whole repeating pattern.
+
+\begin{tzcode}{.3}
+% \tzdots: label
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0){A}
+ (1,1)
+ (2,1){C}[0]
+ (3,2){D}[-90]
+ (4,0){E};
+\tzdots*(0,3)(1,2){B}(2,2){C}[45](3,3)(4,3);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{How change the size of dots}
+
+There are \threeways\ of changing the \xem{diameter} of node dots, as discussed in Section \ref{ss:threeways} on page \pageref{ss:threeways}.
+
+\begin{enumerate}
+\item The simplest way is to use the `last' parenthesis optional argument, \xem{after the semicolon}.
+\item Another way is to use the style \ixxw{tzdot}, like |\tzdots[tzdot=3pt]...|.
+If both options are used the |tzdot| option style wins.
+\item You can also use the macro \icmd{\settzdotsize}.
+The effect remains within the |tikzpicture| environment unless it is changed again.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+% \tzdots: size (diameter)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{3mm}
+\tzdots(0,0)(1,0){3mm};
+\tzdots*(1,1)(2,1){2mm};(2mm) % simplest
+\tzdots[tzdot=4mm](2,2)(3,2){4mm};
+\tzdots*(3,3)(4,3){3mm};
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{How to change colors}
+
+With the first optional argument |[<node opt>]| you can change of the color of node dots.
+You can also change the color of each label by |[<label opt>]|.
+
+\begin{tzcode}{.3}
+% \tzdots: color
+\begin{tikzpicture}[->]
+\tzhelplines(4,3)
+\settzdotsize{6pt}
+\tzdots*[red]
+ (0,0)(1,1){\textbf{Ben}}[[blue]-90](2,1)(3,0);
+\tzdots*[thick,blue,fill=green]
+ (1,2){A}(2,2){Ben}[[red]-90](3,2){C}(4,2){D};(8pt)
+\tzdots*[blue]
+ (1,3){A}(2,3){B}(3,3){C}(4,3){D};
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+\begin{itemize}
+\item |[<node opt>]| is the option of a \iisw{main node} and |[<label opt>]| is the option of a \iisw{label node}.
+\item |[<label opt>]| is used in the form of |[<[<label opt>]angle>]|, like |[[red]90]|.
+\item You can control all labels together using |every label/.style| as in the following example.
+\end{itemize}
+
+\begin{tzcode}{.3}
+% \tzdots: every label/.style
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{6pt}
+\tzdots*[red]
+ (0,0)(1,1){\textbf{Ben}}[[blue]-90](2,1)(3,0);
+\tzdots*[thick,blue,fill=green]
+ (1,2){A}(2,2){Ben}[[red]-90](3,2){C}(4,2){D};(8pt)
+\tikzset{every label/.style={draw,text=red}} %%
+\tzdots*[blue]
+ (1,3){A}(2,3){B}(3,3){C}(4,3){D}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% every label/.style
+\begin{tikzpicture}[every label/.style={draw,text=red}]
+\tzhelplines(4,3)
+\tzdots*(0,0){Ace}[[font=\LARGE\ttfamily]-90]
+ (2,1){\textbf{Bob}}[[blue]135]
+ (3,2){$C_1$\\$N_o$}[[align=center]0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift} You can move the coordinates of dots by specifying |<shift coor>| option immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzdots: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots[red] (0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\tikzset{every label/.style={red}}
+\tzdots*<0,1>(0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Coordinates}
+\label{c:coordinates}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcoor} and \protect\cmd{\tzcoor*}}
+\label{s:tzcoor}
+
+\subsection{\protect\cmd{\tzcoor}}
+\label{ss:tzcoor}
+
+For example, \icmd{\tzcoor}|(0,0)(A)| means that the coordinate |(0,0)| is named |(A)|.
+
+\begin{tztikz}{}
+\tzcoor(0,0)(A) % is an abbreviation of:
+ \path (0,0) coordinate (A);
+ % or
+ \coordinate (A) at (0,0);
+\end{tztikz}
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcoor(<coor>)(<name>)
+% syntax: medium
+\tzcoor(<coor>)(<name>){<label>}[<angle>]
+% syntax: full
+\tzcoor<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+% defaults
+ <>(<m>)(<m>){}[]
+\end{tzdef}
+
+Here, |<m>| stands for `mandatory.' |\tzcoor| takes two mandatory arguments in parenthesis.
+
+\paragraph{How to label}
+You can put a label to a coordinate by specifying the optional arguments |{<label>}| and |[<angle>]| immediately after |(<name>)|.
+
+\begin{tztikz}{}
+\tzcoor(0,0)(A){$A$}[0] % works like:
+ \path (0,0) coordinate [label={0:$A$}] (A);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcoor
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(0,0)(A){$A_1$} % Tikz default: 90 or above
+\tzcoor(2,1)(B){$B_2$\\ending point}[[align=left,red]0]
+\draw (A) -- (B);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the coordinate by specifying the optional argument |<shift coor>| before |(<coor>)|.
+
+\begin{tzcode}{.3}
+% \tzcoor: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor<0,1>(0,0)(A){$A_1$} %%
+\tzcoor(2,1)(B){$B_2$\\ending point}[[align=left,red]0]
+\tzline(A)(B)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzcoor*}}
+\label{ss:tzcoor*}
+
+The starred version \icmd{\tzcoor*} works like |\tzcoor| with one exception. It prints a `node dot' of the size |2.4pt|, by default, at a specified coordinate.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcoor*(<coor>)(<coor name>)
+% syntax: medium
+\tzcoor*(<coor>)(<coor name>){<label>}[<angle>]
+% syntax: full
+\tzcoor*[<dot opt>]<shift coor>
+ (<coor>)(<name>){<label>}[[<label opt>]<angle>](<dot size>)
+% defaults
+ *[]<>(<m>)(<m>){}[](2.4pt)
+\end{tzdef}
+
+
+\begin{tztikz}{}
+\tzcoor*(0,0)(A) % works like:
+ \path (0,0) coordinate (A);
+ \tzdot*(0,0)
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzcoor(0,0)(A){$A$}[right] % works like:
+ \path (0,0) coordinate (A);
+ \tzdot*(0,0){$A$}[right]
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcoor
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor*(0,0)(A){$A_1$} % Tikz default: 90 or above
+\tzcoor*(30:3cm)(B){$B_2$}[[draw,blue]0]
+\draw (A) -- (B);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Changing the color and size of a dot}
+
+You can change the color of a dot by specifying |[<dot opt>]|, which is, in fact, \Tikz\ node option.
+To change the size of dots, you can apply the \threeways\ (see Subsection \ref{ss:threeways} on page \pageref{ss:threeways}).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(1,1)(A){A}
+\tzcoor*(2,1)(B){B}[0]
+\tzcoor*[red](1,2)(C){C}[180]
+\tzcoor*[fill=none,tzdot=5pt](3,2)(D){D}[45]
+\tzcoor*[blue,thick,fill=green](4,0)(E){E}[180](6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift} The optional argument |<shift coor>| works just like in |\tzcoor|.
+
+\begin{tzcode}{.3}
+% \tzcoor*: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor*<0,1>(0,0)(A){$A_1$} %%
+\tzcoor*(2,1)(B){$B_2$\\end point}[[align=left,red]0]
+\tzline(A)(B)
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcoors} and \protect\cmd{\tzcoors*}: Semicolon versions}
+\label{s:tzcoors}
+
+\subsection{\protect\cmd{\tzcoors}}
+\label{ss:tzcoors}
+
+The macro \icmd{\tzcoors} takes an arbitrary number of pairs of coordinates and their names as arguments.
+For example, |\tzcoors(0,0)(A) (1,1)(B) (2,2)(C);| means that |(0,0)| is represented by the name |(A)|, |(1,1)| by |(B)|, and |(2,2)| by |(C)|.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcoors(<coor>)(<name>..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoors <shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ;
+% defaults
+ (<m>)(<m>){}[] ..repeated.. ()(){}[] ;
+\end{tzdef}
+
+This is a \xem{semicolon version} macro. The quadruple |(<coor>)(<name>){<label>}[<angle>]| is the whole repeating pattern.
+It is required to type a \xem{semicolon} (|;|) to indicate when the repetition ends.
+
+
+\begin{tztikz}{}
+\tzcoors (0,0)(A) (1,1)(B) (2,1)(C) (3,0)(D) ; % works like:
+ \path (0,0) coordinate (A)
+ (1,1) coordinate (B)
+ (2,1) coordinate (C)
+ (3,0) coordinate (D);
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzcoors (0,0)(A) (1,1)(B) (2,1)(C){C}[0] (3,0)(D){D}[90]; % works like:
+ \path (0,0) coordinate (A)
+ (1,1) coordinate (B)
+ (2,1) coordinate [label={0:C}] (C)
+ (3,0) coordinate [label={90:D}] (D);
+\end{tztikz}
+
+You can add a label to each specified coordinate by adding the optional arguments |{<label>}| and |[<angle>]| immediately after |(<name>)|.
+
+\begin{tzcode}{.3}
+% \tzcoors
+\begin{tikzpicture}
+\tzcoors (0,0)(A){Ace}[[font=\LARGE\ttfamily]-90]
+ (2,1)(B){\textbf{Bob}}[[blue]135]
+ (3,2)(C){$C_1$\\$N_o$}[[align=center]0];
+\draw (A) -- (B) -- (C);
+\end{tikzpicture}
+\end{tzcode}
+
+By the option |<shift coor>|, all specified coordinates are shifted.
+
+\begin{tzcode}{.3}
+% \tzcoors
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors (0,0)(A) (1,1)(B) (2,1)(C){C} (3,0)(D);
+\tzlines(A)(B)(C)(D);
+% shift
+\tzcoors <1,1> (0,0)(A) (1,1)(B) (2,1)(C){C} (3,0)(D);
+\tzlines[dashed](A)(B)(C)(D);
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzcoors*}}
+\label{ss:tzcoors*}
+
+The starred version \icmd{\tzcoors*} takes an arbitrary number of coordinates as arguments to print node dots at the coordinates. Full repeating pattern is |(<coor>)(<name>){<label>}[<angle>]|. It is required to type a \xem{semicolon} |;| to indicate when the iteration of coordinates ends.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcoors*(<coor>)(<name>)..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoors*[<dot opt>]<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ; (<dot size>)
+% defaults
+ *[](<m>)(<m>){}[] ..repeated.. ()(){}[] ; (2.4pt)
+\end{tzdef}
+
+You can label each dot by specifying the optional arguments |{<label>}| and |[<angle>]| after the pair |(<coor>)(<name>)|.
+
+\begin{tzcode}{.3}
+% \tzcoors*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors*(0,0)(A)
+ (1,1)(B){B}
+ (2,1)(C)
+ (3,3)(D){D}[0] ;
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the dot color by |[<dot opt>]| and the label color by |[label opt]|.
+You can apply the \threeways\ (on page \pageref{ss:threeways}) to change the dot size. The simplest way of changing the dot size is to specify the `last' (even after the semicolon) parenthesis option |(<dot size>)|.
+
+\begin{tzcode}{.3}
+% \tzcoors*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors*[red](0,0)(A)
+ (1,1)(B){B}
+ (2,1)(C)
+ (3,3)(D){D}[[blue]0] ; (6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+By specifying the optional argument |<shift coor>| immediately before the first coordinate, you can move all specified coordinates.
+
+\begin{tzcode}{.3}
+% \tzcoors*: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{6pt}
+\tzcoors*[red] (0,0)(A)(1,1)(B)(2,1)(C)(3,3)(D);
+\settzdotsize{4pt}
+\tzcoors*[blue]<.5,0>(0,0)(A)(1,1)(B)(2,1)(C)(3,3)(D);
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcoorsquick} and \protect\cmd{\tzcoorsquick*}}
+\label{s:tzcoorsquick}
+
+\subsection{\protect\cmd{\tzcoorsquick}}
+\label{ss:tzcoorsquick}
+
+You can see the coordinate array at a glance using \icmd{\tzcoorsquick}, which displays specified names as text at the |center| of the coordinates, by default.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcoorsquick(<coor>)(<name>)..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoorsquick<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ;
+% defaults
+ <> (<m>)(<m>){}[center] ..repeated.. ()(){}[] ;
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzcoorsquick
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick(0,0)(A)
+ (1,1)(Ben)
+ (2,1)(Cate)
+ (3,2)(Daniel);
+\end{tikzpicture}
+\end{tzcode}
+
+A label can be suppressed by the empty braces |{}|.
+You can shift the coordinate by specifying |<shift coor>| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzcoorsquick: shift, color
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel);
+\tikzset{every label/.style={blue}}
+\tzcoorsquick <0,1>
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzcoorsquick*}}
+\label{ss:tzcoorsquick*}
+
+The starred version \icmd{\tzcoorsquick*} prints node dots on the coordinates and displays the names |above| (or |90| degree from) the dots, by default.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzcoorsquick*(<coor>)(<name>)..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoorsquick*[<dot opt>]<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ;
+% defaults
+ *[ tzdot=1.2pt ]<> (<m>)(<m>){}[] ..repeated.. ()(){}[] ;
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzcoorsquick*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick*(0,0)(A)
+ (1,1)(Ben)
+ (2,1)(Cate)
+ (3,2)(Daniel);
+\end{tikzpicture}
+\end{tzcode}
+
+A label can be suppressed by the empty braces |{}|.
+You can change the dot size using the \threeways\ (on page \pageref{ss:threeways}).
+You can shift the coordinate by specifying |<shift coor>| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzcoorsquick*: size, color, shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick*
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel);
+\tikzset{every label/.style={blue}}
+\tzcoorsquick*[blue]<0,1>
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel); (6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+The first optional argument of |\tzcoorsquick*| is for only dots.
+You can use the \Tikz\ option |every label/.style={...}| to control all the labels together.
+You can also control each labels using |[<label opt>]| for each coordinate.
+
+\begin{tzcode}{.3}
+% \tzcoorsquick*
+\begin{tikzpicture}[every label/.style={draw,red}]
+\tzhelplines(4,3)
+\tzcoorsquick*[fill=none,blue,very thick]
+ (0,0)(A)(1,1)(B-1)(2,1)(C)(3,3)(D)[[blue]0];(8pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzgetxyval}}
+\label{s:tzgetxyval}
+
+\icmd{\tzgetxyval} extracts the values of x-coordinate and the y-coordinate \xem{in the unit of centimeter} from a coordinate and saves the values in the user-defined macros, so that you can use them later.
+For example, |\tzgetxyval(3,2){\xval}{\yval}| results in |\xval=3| and |\yval=2|.
+
+\begin{tzdef}{}
+% syntax
+\tzgetxyval(<coor>){<\macroXval>}{<\macroYval>}
+% default
+(<m>){<m>}{<m>}
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzfn"dem"{3-(3/4)*\x}[0:4]
+\tzfn"sup"{\x}[0:4]
+% intersection point: (E)
+\tzXpoint*{dem}{sup}(E)(5pt)
+% extract x/y-coordinate from (E)
+\tzgetxyval(E){\Ex}{\Ey}
+\tzdots*(\Ex,\Ey){E}(\Ex+1,\Ey){F}(\Ex,\Ey+1){G};
+\tzdot(E)(10pt)
+\tznodeframe(2,0){x\;=\;\Ex\,cm\\ y\;=\;\Ey\,cm}
+ [font=\ttfamily\scriptsize,align=left]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Plot Coordinates: \protect\cmd{\tzplot}: Semicolon Versions}
+\label{c:plotcoordinates}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot} and \protect\cmd{\tzplot*}: Syntax}
+\label{s:tzplot}
+
+\icmd{\tzplot} takes an arbitrary number of coordinates as arguments.
+Each |(<coor>)| can be followed by the optional arguments |{<label>}| and |[<angle>]| to label the coordinate. This is a \xem{semicolon version} and the whole repeating pattern is the triple |(<coor>){<label>}[<angle>]|. It is required to type a semicolon |;| to indicate when the coordinate iteration ends.
+
+The macro |\tzplot| draws connected line segments that link specified coordinates.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzplot(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: medium
+\tzplot(<coor>){<label>}[<angle>]..repeated..(<coor>){<label>}[<angle>] ;
+% syntax:full
+\tzplot[<opt>]{<tension>} [<plot opt>]<shift coor>"<path name>"
+ (<coor>){<label>}[<[label opt]angle>]
+ ..repeated..
+ (){}[] ; (<mark size>) <code.append>
+% defaults
+ [tzmark=2pt]{0}[smooth] <>"" (<m>){}[] ..repeated.. (){}[] ; (2pt) <>
+\end{tzdef}
+
+The style \ixxw{tzmark} is defined as follows:
+
+\begin{tzsty}{}
+% style: tzmark
+\tikzset{
+ tzmark/.style=
+ {mark options={solid,thin},mark size=#1},
+ tzmark/.default=\tzmarksize
+}
+\end{tzsty}
+
+\icmd{\tzmarksize} is the \xem{radius} of a |mark| and the default is |2pt| as in \Tikz.
+The value of |\tzmarksize| can be changed by the macro \icmd{\settzmarksize}, like |\settzmarksize{3pt}|.
+
+
+The starred version |\tzplot*| draw connected line segments and print dot marks at specified coordinates.
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot*}: Dots and marks}
+\label{s:tzplot-dots}
+
+|\tzplot*| prints \Tikz\ marks (|*| by default) at specified coordinates.
+You can change the mark color and mark style using the first bracket optional argument.
+
+\begin{tztikz}{}
+\tzplot*(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [draw=none,mark=*] plot coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzplot*
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot*(0,0)(1,1)(2,1)(3,3);
+\tzplot*[mark=o](0,3)(1,3)(2,2)(3,1);
+\tzplot*[red](0,2)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Labels, marks, and marks size}
+You can also add labels to specified coordinates with the optional arguments |{<label>}| and |[<angle>]| immediately after each |(<coor>)|.
+
+\begin{tztikz}{}
+\tzplot*(0,0){A}[90](1,2)(2,2)(3,3){D}[0]; % works like:
+ \draw [draw=none,mark=*] plot coordinates { (0,0)(1,1)(2,2)(3,3) }
+ node (0,0) [label={90:D}] {}
+ node (3,3) [label={0:D}] {} ;
+\end{tztikz}
+
+There are three ways to change the mark size.
+
+\begin{enumerate}
+\item The simplest way is to use the parenthesis optional argument |(<mark size>)|, \xem{immediately after the semicolon}.
+\item You can use the style |\tzmark|, like |\tzmark=3pt|.
+\item You can also use the macro |\settzmarksize|, which is effective until the end of |tikzpicture| environment.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+% \tzplot*: label, size
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot*(0,0){A}(1,1)(2,1)(3,3){D}[[blue]0];(1mm)
+\tzplot*[mark=o,tzmark=6pt](0,3)(1,3)(2,2)(3,1);
+\settzmarksize{4pt}
+\tzplot*[red](0,2){A}(1,2){B}(2,0){C}[[blue]0](3,2){D};
+\end{tikzpicture}
+\end{tzcode}
+
+With |\tzplot*|, you can draw line segments by giving the |draw| option in the first bracket optional argument, like |\tzplot*[draw]|.
+
+\begin{tzcode}{.3}
+% \tzplot*: line, more marks, size
+\begin{tikzpicture}[scale=1]
+\tzhelplines(4,3)
+\settzmarksize{3pt}
+\tzplot*[draw,mark=x](0,0)(1,1)(2,1)(3,3);
+\tzplot*[blue,mark=diamond*](0,3)(1,3)(2,2)(3,1);(10pt)
+\tzplot*[draw,dashed,red,mark=heart](0,2)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\remark In \Tikz, the |mark| shapes are affected by |scale|, |xscale|, and |yscale|.
+
+\begin{tzcode}{.3}
+% \tzplot*: marks: distorted
+\begin{tikzpicture}[yscale=.5]
+\tzhelplines(4,3)
+\settzmarksize{3pt}
+\tzplot*[draw,mark=x](0,0)(1,1)(2,1)(3,3);
+\tzplot*[blue,mark=diamond*](0,3)(1,3)(2,2)(3,1);(10pt)
+\tzplot*[draw,dashed,red,mark=heart](0,2)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move specified coordinates using the option |<shift coor>| before the first coordinate (to be precise, immediately before the option |"<path name>"| if it exists).
+
+\begin{tzcode}{.3}
+% \tzplot*: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*[draw] (1,3){A}(2,3)(3,3)(4,3){D}[0];
+\tzplot*[draw,red]<-1,-1>(1,3){A}(2,3)(3,3)(4,3){D}[0];
+\tzplot*[draw,blue]<0,-3>(1,3){A}(2,3)(3,3)(4,3){D}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot}: Lines}
+\label{s:tzplot-lines}
+
+|\tzplot| draws connected line segments connecting specified coordinates.
+
+\begin{tztikz}{}
+\tzplot(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [tension=0] plot [smooth] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzplot[blue,smooth cycle]{1}(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [blue,tension=1] plot [smooth cycle] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+\paragraph{Options: draw, mark, plot}
+You can use the optional argument |[<opt>]| to change the style of lines and marks.
+
+\begin{tzcode}{.3}
+% \tzplot: line
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot (0,0)(1,1)(2,1)(3,3);
+\tzplot[dashed,mark=o](0,3)(1,3)(2,2)(3,1);
+\tzplot[red,mark=ball,mark options={ball color=purple}]
+ (0,1)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+To close the path of |\tzplot| you can use the option |smooth cycle| in the first bracket optional argument |[<opt>]| or in the second bracket optional argument |[<plot opt>]|.
+
+\begin{tzcode}{.3}
+% \tzplot: smooth cycle
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot (0,0)(1,1)(2,1)(3,3);
+\tzplot[dashed,mark=o,smooth cycle]
+ (0,3)(1,3)(2,2)(3,1);
+\tzplot[red,mark=*,mark options={blue}]
+ [smooth cycle] %%
+ (0,1)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{Labels} You can label specified coordinates with the options |{<label>}| and |[<angle>]| immediately after each |(<coor>)|.
+
+\begin{tzcode}{.3}
+% \tzplot: label
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot(0,0){A}(1,1){B}[-90](2,1)(3,3){Da}[[draw]0];
+\tzplot[mark=o](0,3)(1,3){B}(2,2)(3,1){Db}[0];
+\tzplot[red,mark=*,draw=blue]
+ (0,1)(1,2){B}(2,0)(3,2){Dc}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift} You can also move the line segments by specifying the option |<shift coor>| before the first coordinate (to be precise, immediately before the option |"<path name>"| if it exists).
+
+\begin{tzcode}{.3}
+% \tzplot: shift
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot <1,0>(0,0)(1,1)(2,1)(3,3){Da}[0];
+\tzplot[mark=o] <1,0>(0,3)(1,3)(2,2)(3,1){Db}[0];
+\tzplot*[draw,red]<1,0>(0,1)(1,2)(2,0)(3,2){Dc}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{name path} for intersections}
+
+To find the intersection point of two lines, you may want to name the paths first, like |[name path=<path name>]| in \Tikz. With |\tzplot|, you can do it by specifying the quotation optional argument |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzplot: "path name"
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[name path=Da] (0,0)(1,1)(2,1)(3,3){Da}[0];
+\tzplot[mark=o] "Db"(0,3)(1,3)(2,2)(3,1){Db}[0];
+\tzplot*[draw,red]"Dc"(0,1)(1,2)(2,0)(3,2){Dc}[0];
+% intersection points
+\tzXpoint*[gray]{Da}{Db}
+\tzXpoint*[blue]{Da}{Dc}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Extending the path}
+In order to \xem{extend a path}, formed by |\tzplot|, \xem{from the last coordinate}, you can write \Tikz\ code in the very last optional argument |<code.append>|, \xem{after the semicolon}.
+
+\begin{tzcode}{.3}
+% \tzplot: "path name"
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(6,4)
+\tzplot(0,0)(1,1)(2,1)(3,3){Da}[0];< -- (6,4) >
+\tzplot[mark=o](0,3)(1,3)(2,2)(3,1){Db}[0];(4pt)
+\tzplot[mark=ball,red](0,1)(1,2)(2,0)(3,2){Dc}[0];
+ (5pt)< to [bend left] ++(2,-2) node {ends here!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot}: Curves}
+\label{s:tzplot:curves}
+
+You can draw a curve with |\tzplot|, by specifying the optional argument |{<tension>}| before the coordinates or between the first and second bracket options (if they exist).
+The default value of |tension| is |0|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[tension=1](0,0)(1,1)(2,1)(3,3);
+\tzplot[mark=o] (0,3)(1,3)(2,2)(3,1); % tension=0
+\tzplot*[draw,red,smooth cycle]{1}
+ (0,1)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+To plot curves, the macro |\tzplotcurve| is provided.
+Basically, |\tzplotcurve| is the |tension=1| version of |\tzplot|.
+(See Section \ref{s:tzplotcurve} on page \pageref{s:tzplotcurve}.)
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot}: Bars and combs}
+\label{s:tzplot-bars}
+
+With |\tzplot|, you can draw bars or combs, using the \Tikz\ options |ybar|, |xbar|, |ycomb|, and |xcomb|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot*[draw](0,0)(1,1)(2,1)(3,3);
+\tzplot[ybar](0,3)(1,3)(2,2)(3,1);
+\tzplot[dashed,red,mark=heart](0,1)(1,2)(2,0)(3,2);%(5pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[xbar](.5,2.5)(1,3)(2,2)(3,1);
+\tzplot[xbar,bar width=2mm,fill,red!50]
+ (1,2.5)(1.5,2)(2,0)(3,1.5);(3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[yscale=1.5]
+\tzhelplines(0,-1)(4,1)
+\tzplot[ycomb,mark=*,very thick,blue]
+ (.5,.1)(1,.3)(1.5,.4)(2,.5)
+ (4,-.1)(3.5,-.3)(3,-.4)(2.5,-.5);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[xcomb,mark=*,very thick]
+ (1,2.5)(1.5,2)(2,0)(3,1.5);
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+\begin{itemize}
+\item
+Do not use |<shift coor>| for plotting bars or combs to avoid getting unexpected results. It gives you wrong bars because |<shift coor>| moves coordinates but not bars.
+
+%\item Use the option |shift={(coor)}| to move bars.
+%\begin{tzcode}{.3}
+%% shift : shift={(1,1)}
+%\begin{tikzpicture}[scale=1]
+%\tzhelplines(4,3)
+%\tzplot*[draw]<1,1>(0,0)(1,1)(2,1)(3,3);
+%\tzplot[ybar,shift={(1,1)}](0,3)(1,3)(2,2)(3,1); %%
+%\tzplot[red,mark=heart]<1,1>(0,2)(1,2)(2,0)(3,2);
+%\end{tikzpicture}
+%\end{tzcode}
+
+\item
+It can be a mess when using |shift={(coor)}| with the type of mixed coordinates: native and named coordinates.
+
+%\begin{tzcode}{.3}
+%% \tzplot(*)
+%% shift : mixed coor : shift={(1,1)} : chaos
+%\begin{tikzpicture}[scale=1]
+%\tzhelplines(4,3)
+%\tzcoors(0,3)(A)(1,3)(B)(2,2)(C)(3,1)(D);
+%\tzcoors(0,2)(a)(1,2)(b)(2,0)(c)(3,2)(d);
+%\tzplot*[draw]<1,1>(0,0)(1,1)(2,1)(3,3);
+%\tzplot[ybar,shift={(1,1)}](A)(1,3)(C)(D); %%
+%\tzplot[dashed,red,mark=heart]<1,1>(a)(1,2)(c)(d);
+%\end{tikzpicture}
+%\end{tzcode}
+
+\end{itemize}
+
+
+
+%%-----------------------------------
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplotcurve(*)}}
+\label{s:tzplotcurve}
+
+\icmd{\tzplotcurve} draws a curve connecting specified coordinates with |tension=1|, by default. Basically, it is equivalent to |\tzplot| with |[tension=1]|.
+
+The starred version \icmd{\tzplotcurve*} draws a curve and displays marks |*|, by default.
+Basically, this is equivalent to |\tzpolot*[draw,tension=1]|.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzplotcurve(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: full
+\tzplotcurve*[<opt>]{<tension>} [<plot opt>]<shift coor>"<path name>"
+ (<coor>){<label>}[<[label opt]angle>]
+ ..repeated..
+ (){}[] ; (<mark size>) <code.append>
+% defaults
+ *[tzmark=2pt]{1}[smooth] <>"" (<m>){}[] ..repeated.. (){}[] ; (2pt) <>
+\end{tzdef}
+
+\begin{tztikz}{}
+\tzplotcurve(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [tension=1] plot [smooth] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzplotcurve[blue,smooth cycle]{2}(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [blue,tension=2] plot [smooth cycle] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+Since |\tzplotcurve| is a \xem{semicolon version}, you need to enter a semicolon to indicate when the coordinate iteration ends.
+In repeating coordinates, each mandatory coordinate can have a label.
+So the whole repeating pattern is the triple |(<coor>){<text>}[<pos>]|.
+For example, |(A){here}[above]| is something like, in |tikz|,
+|(A) node [above] {here}|.
+
+\paragraph{Options: lines, labels, colors, smooth cycle} Use the first bracket option.
+
+\begin{tztikz}{}
+\tzplotcurve(0,0)(1,2)(2,2){A}[below](3,3){B}[right]; % works like:
+ \draw [tension=1] plot [smooth] coordinates { (0,0)(1,1)(2,2)(3,3) }
+ (2,2) node [below] {A}
+ (3,3) node [right] {B} ;
+\end{tztikz}
+
+You can change the color of all labels together by adding |[text=<color>]| to the first bracket option list.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue]
+ (0,0)(1,2){B}(2,2)(3,3)(4,1){E}[0];
+\tzplotcurve(1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+The simplest way to change the mark size is to specify |(<mark size>)| immediately after the semicolon |;|.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): smooth cycle, mark size
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue,smooth cycle]
+ (0,0)(1,2){B}(2,2)(3,3)(4,1){E}[0];(3pt) %%
+\tzplotcurve*[smooth cycle](1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Tension}
+You can change the value tension (|1| by default) by specifying the options |{<tension>}| before the coordinates or between the two bracket options if they exist.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(.5,.5)(A)
+\tzplotcurve[blue]{2}(1,3)(A)(4,0);
+\tzplotcurve[thick](1,3)(A)(4,0); % default: tension=1
+\tzplotcurve[red]{.5}(1,3)(A)(4,0);
+\tzplotcurve[dashed]{0}(1,3)(A)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift} Use the optional argument |<shift coor>| before the first coordinate (to be precise, immediately before |"<path name>"|, if exists).
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue,smooth cycle]
+ <0,1>(0,0)(1,2){B}(2,2)(3,3)(4,1){E}[0];(3pt) %%
+\tzplotcurve*[smooth cycle](1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Extending the path} In order to extend the path of |\tzplotcurve| from the last coordinate, you can write \Tikz\ code in the very last optional argument |<code.append>|, after the semicolon.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): <code.append>
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue,thick]
+ (0,0)(1,2){B}(2,2)(3,3)(4,1){E}[-45];(3pt)
+ < arc (-90:90:1cm) node [above] {up} > %%
+\tzplotcurve[dashed](1,.5)(2,3)(3,2)(2,1)(3,1);
+ < -- ++(-1,-1) node [below] {down} > %%
+\end{tikzpicture}
+\end{tzcode}
+
+You can also use |<--cycle>| to close the path with a straight line from the last coordinate to the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): <--cycle>
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue]
+ (0,0)(1,2)(2,2)(3,3)(4,1){A}[right];(3pt)<--cycle>
+\tzplotcurve(1,.5)(2,3)(3,2)(2,1)(3,1);<--cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{name path} for intersection points}
+You can name the path of |\tzplotcurve| by specifying the option |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve[blue]"IC"(.5,3)(1.5,1.2)(4,.5){$u$}[0];
+\tzplot[draw=red]"bgt"(0,3)(4,0){budget}[-90];
+% intersection points
+\tzXpoint{IC}{bgt}(K)
+\tzdots*(K){$A_1$}[30](K-2){$A_2$};
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+%%==================================
+\chapter{Nodes}
+\label{c:nodes}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznode} and \protect\cmd{\tznode*}}
+\label{s:tznode}
+
+The macro \icmd{\tznode} allows you to put text at specified coordinates.
+You can also optionally name a node so you can refer to the coordinate name later.
+
+The starred version \icmd{\tznode*} is equivalent to |\tznode[draw]|, which draws the perimeter of the specified node. The default node shape is |rectangle|.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tznode(<coor>){<text>}
+% syntax: full
+\tznode[<opt>]<shift coor>(<coor>)(<node name>){<text>}[<node opt>]
+% defaults
+ []<>(<m>)(){}[]
+\end{tzdef}
+
+\begin{tztikz}{}
+\tznode(0,0){text} % works like:
+ \path (0,0) node {text};
+ % or
+ \node at (0,0) {text};
+\end{tztikz}
+
+\begin{tztikz}{}
+\tznode[draw] (0,0)(A){text}[above right] % works like:
+ \node [draw] (A) at (0,0) [above right] {text};
+\end{tztikz}
+
+|\tznode*| prints the perimeter of a node, which is |rectangular| by default.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tznode*(<coor>){<text>}
+% syntax: full
+\tznode*[<opt>]<shift coor>(<coor>)(<name>){<text>}[<node opt>]<code.append>
+% defaults
+ *[draw]<>(<m>)(){}[]<>
+\end{tzdef}
+
+\begin{tztikz}{}
+\tznode* (0,0)(A){text}[above right] % works like:
+ \node [draw] (A) at (0,0) [above right] {text};
+\end{tztikz}
+
+\paragraph{Putting text} You can use \Tikz\ options in the optional arguments |[<opt>]| or |[<node opt>]| to put text with different colors, fonts, and so on.
+
+\begin{tzcode}{.3}
+% \tznode(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode(1,1){text}
+\tznode(2,2){another\\text}[align=left]
+\tznode*(3,1){\textbf{text}}
+\tznode*[blue](3,0){\scshape Text}[r] % right
+\tznode*(4,2){another\\text}[align=center,font=\itshape]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Abbreviations} You can use \xem{abbreviations} such as |a| for |above|, |l| for |left|, |ar| for |above right|, |bl| for |below left|, and so on to indicate where the \xem{text} of a \xem{main node} is placed.
+
+\begin{quote}
+\warning
+A \iisw{main node} is placed by the placement words, while a \iisw{label node} is placed by the placement words or the |<angle>| expression.
+\begin{itemize}
+\item You CANNOT use the abbreviations to place a \xem{label node} for \xem{points} or \xem{dots} or \xem{coordinates}.
+\item
+Instead, use |<angle>| or the original (unabridged) placement words such as |right| and |below left| to place |<label>|.
+\item
+Note that, on the other hand, you CANNOT use the |<angle>| option to place a \xem{main node}.
+\end{itemize}
+\end{quote}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot*(1,1)
+\tznode*(1,1){A}[ar]
+\tznode*[red](1,1){B}[b]
+\tznode(1,1){C}[l]
+\tznode*[inner sep=0pt,text=blue,scale=2]
+ (3,2){Text}[label=180:Left,pin=45:Above Right]
+\tznode*[inner sep=0pt,text=red,scale=2]
+ (3,2){Text}[b=2cm] %% below=2cm
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Naming nodes}
+You can name a node at a specified coordinate |(<coor>)| by specifying |(<name>)| immediately after the coordinate. You can use the node name as a \iisw{node coordinate}.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode*(1,1)(A){A}
+\tznode*[fill=blue,text=yellow](2,3)(B){B}
+\tznode*[circle,text=red](4,1)(C){C}
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the coordinates by specifying the option |<shift coor>| immediately before the coordinate |(<coor>)|.
+
+\begin{tzcode}{.3}
+% shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode*<-1,0>(1,1)(A){A}
+\tznode*[fill=blue,text=yellow]<1,-1>(2,3)(B){B}
+\tznode*[circle,text=red]<-2,-1>(4,1)(C){C}
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodedot(*)}}
+\label{s:tznodedot}
+
+\icmd{\tznodedot} names a node and prints a circle node dot.
+|\tznodedot| is the same as |\tzdot|, except for one thing.
+|\tznodedot| names a node.
+
+The starred version \icmd{\tznodedot*} prints a filled circle node dot (of the size |2.4pt|, by default), just like |\tzdot*|. But it optionally names a node.
+
+\begin{tzdef}{}
+% syntax: medium
+\tznodedot(<coor>)(<node name>){<label>}[<angle>]
+% syntax: full
+\tznodedot*[<opt>]<shift coor>(<coor>)(<node name>){<label>}[<[label opt]angle>]
+ (<dot size>)
+% defaults
+ *[]<>(<m>)(){}[](2.4pt)
+\end{tzdef}
+
+Since |\tznodedot(*)| prints a dot, its |<label>| is placed by |<angle>|.
+
+\begin{tzcode}{.3}
+% \tznodedot(*): label, color
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodedot(1,1)(A){A}[180]
+\tznodedot*(2,3)(B){\textbf{B}}
+\tznodedot[rectangle](4,1)(C){C}[[red]0]
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+You can apply the \threeways\ (on page \pageref{ss:threeways}) to change the size of node dots.
+The simplest way is to use the last parenthesis option |(<dot size>)|.
+
+\begin{tzcode}{.3}
+% \tznodedot(*): size
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{5pt} %%
+\tznodedot(1,1)(A){A}[180]
+\tznodedot*(2,3)(B){B}
+\tznodedot[rectangle](4,1)(C){C}[0](10pt) %%
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+
+You can move the coordinates of dots by specifying the |<shift coor>| option immediately before the coordinate.
+
+\begin{tzcode}{.3}
+% \tznodedot(*): shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{5pt}
+\tznodedot(1,1)(A){A}[180]
+\tznodedot*(2,3)(B){B}
+\tznodedot[rectangle]<-1,-1>(4,1)(C){C}[0](10pt) %%
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodeframe} and \protect\cmd{\tznodeframe*}}
+\label{s:tznodeframe}
+
+\icmd{\tznodeframe} draws and names a rectangle node with text in it.
+
+%\icmd{\tznoderectangle} and \icmd{\tznodebox} are aliases of |\tznodeframe|.
+
+\begin{tzdef}{}
+% syntax:
+\tznodeframe[<opt>](<coor>)(<node name>){<text>}[<node opt>]
+% defaults
+ []<>(<m>)(){}[text=black]
+\end{tzdef}
+
+The starred version |\tznodeframe*| fills the rectangle with color (|black!50| by default) with |fill opacity=.3| by default.
+
+%\icmd{\tznoderectangle*} and \icmd{\tznodebox*} are aliases of |\tznodeframe*|.
+
+\begin{tzdef}{}
+% syntax:
+\tznodeframe*[<opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]{<fill opacity>}
+% defaults
+ *[fill=black!50,fill opacity=.3]<>(<m>)(){}[draw=black,text=black]{.3}
+\end{tzdef}
+
+\remark
+|\tznodeframe| works very similar to |\tznode|, but the starred versions are different.
+While |\tznode*| draws the perimeter of a node, |\tznodeframe*| fills a node with color.
+
+
+\begin{tzcode}{.3}
+% \tznodeframe
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeframe(0,0)(A)
+\tznodeframe(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeframe[scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tznodeframe: fill (opacity=1)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeframe(0,3)
+\tznodeframe(0,0)(A)
+\tznodeframe(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeframe[fill=green,scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+By default, |\tznodeframe*| fills a node with color with |opacity=.3|.
+
+\begin{tzcode}{.3}
+% \tznodeframe*: opacity=.3 (by default)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeframe(0,0)(A)
+\tznodeframe(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeframe*[green,scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the |fill opacity| of |\tznodeframe*| by specifying the last curly brace option |{<fill opacity>}|. You can also move the node by specifying the |<shift coor>| option immediately before the coordinate.
+
+\begin{tzcode}{.3}
+% opacity, shift
+\begin{tikzpicture}
+\tzhelplines[solid](4,3)
+\tznodebox(0,0)
+\tznodeframe*(1,2)(A){A}{.1} % opacity
+\tznoderectangle[fill=yellow](2,2)(B){B}
+\tznodebox*[red](3,2)(C){Cat}
+\tznodeframe[fill=green]<-1,-2>(4,2)(D){Dog} % shift
+\tzto[->,bend left=45](A.north)(C.90)
+\tzto[->,bend right=45,dashed](B.-135)(D.west)
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+In addition to using the option |{<fill opacity>}|, you can use a macro to change the default value.
+\begin{itemize}
+\item The default fill opacity can be changed by the macro \icmd{\settzfillopacity}.
+\item
+The default fill color is |black!50|. You can change the default color
+with the macro \icmd{\settzfillcolor}.
+\end{itemize}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodecircle} and \protect\cmd{\tznodecircle*}}
+\label{s:tznodecircle}
+
+\icmd{\tznodecircle} works just like |\tznodeframe| but with a node circle.
+
+\begin{tzdef}{}
+% syntax:
+\tznodecircle[<opt>]<shift coor>(<coor>)(<node name>){<text>}[<node opt>]
+% defaults
+ []<>(<m>)(){}[text=black]
+\end{tzdef}
+
+\icmd{\tznodecircle*} works just like |\tznodeframe*| but with a node circle.
+
+\begin{tzdef}{}
+% syntax:
+\tznodecircle*[<opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]{<fill opacity>}
+% defaults
+ *[fill=black!50,fill opacity=.3]<>(<m>)(){}[draw=black,text=black]{.3}
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tznodecircle
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodecircle(0,0)(A)
+\tznodecircle(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodecircle[scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the |fill opacity| of |\tznodecircle*| by specifying the last curly brace option |{<fill opacity>}| or using |\settzfillopacity|. You can also move the node by specifying the |<shift coor>| option immediately before the coordinate.
+
+\begin{tzcode}{.3}
+% opacity, shift
+\begin{tikzpicture}
+\tzhelplines[solid](4,3)
+\tznodecircle(0,0)
+\tznodecircle*(1,2)(A){A}{.1} % opacity
+\tznodecircle[fill=yellow](2,2)(B){B}
+\tznodecircle*[red](3,2)(C){Cat}
+\tznodecircle[fill=green]<-1,-2>(4,2)(D){Dog} % shift
+\tzto[->,bend left=45](A.north)(C.90)
+\tzto[->,bend right=45,dashed](B.-135)(D.west)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodeellipse} and \protect\cmd{\tznodeellipse*}}
+\label{s:tznodeellipse}
+
+\icmd{\tznodeellipse} works just like |\tznodeframe| but with a node circle.
+
+\begin{tzdef}{}
+% syntax:
+\tznodeellipse[<opt>]<shift coor>(<coor>)(<node name>){<text>}[<node opt>]
+% defaults
+ []<>(<m>)(){}[text=black]
+\end{tzdef}
+
+\icmd{\tznodeellipse*} works just like |\tznodeframe*| but with a node circle.
+
+\begin{tzdef}{}
+% syntax:
+\tznodeellipse*[<opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]{<fill opacity>}
+% defaults
+ *[fill=black!50,fill opacity=.3]<>(<m>)(){}[draw=black,text=black]{.3}
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tznodeellipse
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeellipse(0,3)
+\tznodeellipse(0,0)(A)
+\tznodeellipse(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeellipse[scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the |fill opacity| of |\tznodeellipse*| by specifying the last curly brace option |{<fill opacity>}|. You can also move the node by specifying the |<shift coor>| option immediately before the coordinate.
+
+\begin{tzcode}{.3}
+% opacity, shift
+\begin{tikzpicture}
+\tzhelplines[solid](4,3)
+\tznodeellipse(0,0)
+\tznodeellipse*(1,2)(A){A}{.1} % opacity
+\tznodeellipse[fill=yellow](2,2)(B){B}
+\tznodeellipse*[red](3,2)(C){Cat}
+\tznodeellipse[fill=green]<-1,-2>(4,2)(D){Dog} % shift
+\tzto[->,bend left=45](A.north)(C.90)
+\tzto[->,bend right=45,dashed](B.-135)(D.west)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Lines}
+\label{c:lines}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzline}: Connecting two points}
+\label{s:tzline}
+
+\icmd{\tzline} connects two points with a straight line.
+
+\begin{tzdef}{}
+% syntax: miminum
+\tzline(<coor1>)(<coor2>)
+% syntax: medium
+\tzline[<opt>](<coor1>){<text1>}[<node opt1>]
+ (<coor2>){<text2>}[<node opt2>]
+% syntax: full
+\tzline[<opt>]<shift coor>"<path name>"
+ (<coor1>){<text1>}[<node opt1>]
+ (<coor2>){<text2>}[<node opt2>]<code.append>
+% defaults
+ []<>""(<m>){}[above](<m>){}[]<>
+\end{tzdef}
+
+
+\begin{tztikz}{}
+\tzline(0,0)(2,1) % works like:
+ \draw (1,1) -- (2,1);
+\end{tztikz}
+
+
+\subsection{Line styles}
+\label{ss:tzline:linestyles}
+
+You can use the first optional argument |[<opt>]| to control the line styles.
+
+\begin{tztikz}{}
+\tzline[blue](0,0)(2,1) % works like:
+ \draw [blue] (1,1) -- (2,1);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzline
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->](0,0)(3,3)
+\tzline[*-o](0,2)(3,0)
+\tzline[dashed](1,2)(4,0)
+\tzdots*(1,2)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Adding text}
+\label{ss:tzline:addingtext}
+
+You can add text by specifying the optional arguments |{<text>}| and |[node opt]|.
+
+\paragraph{Text next to the line}
+With the options |{<text1>}[<node opt1>]| inbetween two coordinates, you can add text next to the line, with the option |[above,midway]| by default.
+
+\begin{tztikz}{}
+\tzline[blue](0,0){my line}[sloped](2,1) % works like:
+ \draw [blue] (1,1) -- node [above,sloped] {my line} (2,1) ;
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzline: text next to line
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,0){Above}(4,0) % default [above]
+\tzline[blue](0,1){Near end}[b,near end](4,1) % below
+\tzline[->](0,2){Sloped}[sloped](3,3) % default [above]
+\end{tikzpicture}
+\end{tzcode}
+
+You can use the \xem{abbreviations} of \Tikz\ basic placement options such as |a| for |above|, |bl| for |below left|, and so on.
+
+
+\paragraph{Text at or around the last coordinate}
+
+You can also add text at or around the second coordinate by specifying |{<text2>}| and |[<node opt2>]| immediately after the second coordinate.
+
+\begin{tztikz}{}
+\tzline[blue](0,0)(2,1){my line}[right] % works like:
+ \draw [blue] (1,1) -- (2,1) node [right] {my line};
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzline
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->](0,0)(3,3){\textbf{line A}}[r]
+\tzline[*-o](0,2)(3,0){line B}[red,draw=blue,b=1mm]
+\tzline[dashed](1,2){dashed}[sloped](4,0){line C}[ar]
+\tzdots*(1,2)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+%\subsection{Relative coordinates: \texttt{+} or \texttt{++}}
+%\label{ss:tzline:relative}
+%
+%You can make the second coordinate relative to the first.
+%You can even select `|+| relative' or `|++| relative' by specifying the option |<+>| or |<++>| immediately before the second coordinate.
+%
+%\begin{tztikz}{}
+%\tzline+(0,0)<+>(2,1) % works like:
+% \draw (1,1) -- + (2,1);
+%\end{tztikz}
+%
+%\begin{tzcode}{.3}
+%% \tzline
+%\begin{tikzpicture}
+%\tzhelplines(4,3)
+%\tzline[blue,->](0,0) (3,3) {A}[r]
+%\tzline[*-o] (0,2){b} <+>(3,-2){B}[r]
+%\tzline[dashed] (1,2){c}<++>(3,-2){C}[r]
+%\tzdots*(1,2)(4,0);
+%\end{tikzpicture}
+%\end{tzcode}
+%
+%Notice that, with |\tzline|, |<+>| and |<++>| make no difference.
+%But with the macro |\tzlines| it is not the case.
+%
+%\remark
+%Notice that using |<+>| and |<++>| makes no difference in |\tzline|.
+%But it is not the case with the macro |\tzlines| that connects multiple coordinates.
+
+\subsection{Moving the line: \texttt{shift}}
+\label{ss:tzline:shift}
+
+You can move the line drawn by |\tzline| by specifying the option |<shift coor>| before the first coordinate (to be precise, immediately before the option |"<path name>"|, which is put immediately before the first coordinate, if it exists).
+
+\begin{tzcode}{.3}
+% \tzline: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->] (0,0)(3,3){A}[r]
+\tzline[blue] <1,0>(0,0)(3,3){A}[r]
+\tzline[dashed] (1,2)(4,0){C}[r]
+\tzline[dashed]<-.5,-.5>(1,2)(4,0){C}[r]
+\tzdots*(1,2)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{Extending the path}
+\label{ss:tzline:extendingpath}
+
+You can extend the path generated by |\tzline| from the last coordinate, by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzline: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->](0,0)(3,3)<arc(0:-60:1cm)>
+\tzline[dashed,->](1,2)(4,0)
+ <to[bend left] ++(-4,1) node [a] {ends here!}>
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{Naming the path: Intersection points}
+\label{ss:tzline:namepath}
+
+When you specify the option |"<path name>"| immediately before the first coordinate, it works like |[name path=<path name>]| in the option list |[<opt>]|.
+You can use this name to find intersection points.
+
+\begin{tzcode}{.3}
+% \tzline+: name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->] "dem" (0,0)(3,3){demand}[r]
+\tzline[dashed,->]"supp"(1,2)(4,0){supply}[ar]
+% intersection point
+\tzXpoint*{dem}{supp}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzline+}: Relative coordinates}
+\label{s:tzline+}
+
+The \iisw{plus version} \icmd{\tzline+} takes the second coordinate |(<coor2>)| relative (with |++|) to the first coordinate |(<coor1>)|.
+%That is, |\tzline+(A)(B)| is equivalent to |\tzline(A)<++>(B)|.
+
+\xem{Everything else is the same as in} |\tzline|.
+
+\begin{tzdef}{}
+% syntax: full
+\tzline+[<opt>]<shift coor>"<path name>"
+ (<coor1>){<text1>}[<node opt1>]
+ (<coor2>){<text2>}[<node opt2>]<code.append>
+% defaults
+ +[]<>""(<m>){}[above](<m>){}[]<>
+\end{tzdef}
+
+
+\begin{tztikz}{}
+\tzline+(0,0)(2,1) % works like:
+ \draw (1,1) -- ++ (2,1);
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzline+[dashed]"AA"(1,1){A}[red](2,1){B}[right,blue] % works like:
+ \draw [dashed,name path=AA]
+ (1,1) -- node [red] {A} ++ (2,1) node [right,blue] {B};
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzline+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline+[blue,->](0,1)(3,2) {A}[r]
+\tzline+[*-o] (0,2){b}(3,-2){B}[r]
+\tzline+[dashed]<1,0>(0,2){b}(3,-2){B}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzline+: name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline+[blue,->] "dem" (0,0)(3,3){demand}[r]
+\tzline+[dashed,->]"supp"(1,2)(3,-2){supply}[ar]
+% intersection point
+\tzXpoint*{dem}{supp}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Styles: \texttt{tzshorten} and \texttt{tzextend}}
+\label{s:tzshorten}
+
+The style \ixxw{tzshorten} and \ixxw{tzextend} are defined as follows.
+
+\begin{tzsty}{}
+% tzshorten
+\tikzset{%
+ tzshorten/.style 2 args ={shorten <=#1, shorten >=#2},
+ tzshoretn/.default={2pt}{2pt}
+}
+
+% tzextend (negative tzshorten)
+\tikzset{%
+ tzextend/.style 2 args ={shorten <=-#1, shorten >=-#2},
+ tzextend/.default={2pt}{2pt}
+}
+\end{tzsty}
+
+For example, |[tzshorten={2mm}{1mm}]| is equivalent to |[shorten <=2mm,shorten >=1mm]| in \
+Tikz. Simple |[tzshorten]| means that |[tzshorten={2pt}{2pt}]| by default.
+
+The style |tzextend| is a negative |tzshorten|. For example, |tzextend{2mm}{1mm}| is equivalent to |tzshorten{-2mm}{-1mm}|.
+
+
+\begin{tzcode}{.3}
+% tzshorten, tzextend
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(3,0); \tzline(0,0)(3,0)
+\tzdots(0,1)(3,1);
+\tzline[->,thick,blue,tzshorten={2mm}{1mm}](0,1)(3,1);
+\tzdots(1,2)(3,2);
+\tzline[<->,thick,red,tzextend={1cm}{1cm}](1,2)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzlines}: Connecting multiple points: Semicolon version}
+\label{s:tzlines}
+
+\icmd{\tzlines} connects two or more points with connected line segments.
+Since |\tzlines| takes an arbitrary number of coordinates as arguments, it is a \xem{semicolon version}. So, you need to enter a semicolon to indicate when the coordinate iteration ends.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzlines(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: medium
+\tzlines(<coor>){<text>}[<node opt>]..repeatd..(<coor>){<text>}[<node opt>] ;
+% syntax: full
+\tzlines[<opt>]<shift coor>"<path name>"
+ (<coor>){<text>}[<node opt>]
+ ..repeated.. (){}[] ; <code.append>
+% defaults
+ []<>"" (<m>){}[] ..repeated.. (){}[] ; <>
+\end{tzdef}
+
+The whole repeating pattern in |\tzlines| is the triple |(<coor>){<text>}[<node opt>]|.
+%Any |<+ or ++>| after the last coordinate, if any, is ignored.
+
+\begin{tztikz}{}
+% standard version
+\tzlines(1,1)(2,2)(3,1)(4,3); % works like:
+ \draw (1,1) -- (2,2) -- (3,1) -- (4,3);
+\end{tztikz}
+
+\paragraph{Line styles}
+Use the first optional argument |[<opt>]| to control the style of the connected line drawn by |\tzlines|.
+
+\begin{tzcode}{.3}
+% \tzlines
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[blue,<->](0,1)(1,2)(3,1)(4,3);
+\tzlines[dashed](0,0)(1,1)(2,1)(3,0);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Adding text}
+
+You can add text in the |midway|, by default, of each line segment by specifying the options |{<text>}| and |[<node opt>]| immediately after each coordinate (except the last one).
+The options |{<text>}| and |[<node opt>]| after the last coordinate put |<text>| at or around the last coordinate.
+
+
+\begin{tzcode}{.3}
+% \tzlines: adding text
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,2){Down}[a,sloped]
+ (3,1){Up}
+ (4,3){line A} ;
+\tzlines[dashed](0,0)(1,1)(2,1)(3,0){line B}[r];
+\end{tikzpicture}
+\end{tzcode}
+
+%\paragraph{Relative coordinates: \texttt{+} and \texttt{++}}
+%
+%You can make the coordinates (from the second coordinate) relative to the previous one by specifying the option |<+>| and |<++>| immediately before the coordinates.
+%(In \Tikz, only |<++>| refreshes the \xem{current point} to new one.)
+%
+%\begin{tzcode}{.3}
+%% \tzlines
+%\begin{tikzpicture}
+%\tzhelplines(4,3)
+%\tzlines[red,thick,<->,text=blue]
+% (0,1){Up}
+% <+>(1,1){Down}[a,sloped] % current point: (0,1)
+% <++>(3,0){Up} % new current point: (3,1)
+% <++>(1,2){line A} ;
+%\tzlines[dashed](0,0)(1,1)(2,1)<++>(1,-1){line B}[r];
+%\end{tikzpicture}
+%\end{tzcode}
+
+\paragraph{Shift}
+You can move the connected line by specifying |<shift coor>| before the first coordinate or before |"<path name>"| (if any).
+
+\begin{tzcode}{.3}
+% \tzlines: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ <0,-1>(0,1)
+ (1,2)
+ (3,1)
+ (4,3){shifted\\line A}[align=left,ar] ;
+\tzlines[dashed]<1,0>(0,0)(1,1)(2,1)(3,0){line B}[r] ;
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Naming paths}
+You can name the path of |\tzlines| by specifying the option |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzlines: shift, intersection
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ <0,-1>"AA"(0,1)
+ (1,2)(3,1)(4,3){shifted\\line A}[align=left,ar] ;
+\tzlines[dashed]
+ <1,0>"BB"(0,0)(1,1)(2,1)(3,0){line B}[r] ;
+% intersection points
+\tzXpoint*{AA}{BB}(X){X1}[-90] % [<angle>] for point
+\tzdot(X-2){X2}[0] % [<angle>] for dot
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Extending the path}
+You can extend the path of |\tzlines| by writing \Tikz\ code in the last (even \xem{after the semicolon}) optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzlines
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,2){Down}[a,sloped]
+ (3,1){Up}
+ (4,3) ;
+ <arc(0:90:1cm)>
+\tzlines[dashed]
+ (0,0)(1,1)(2,1)(3,0) ;
+ <to[bend right] ++(2,2) node{Here!}>
+\end{tikzpicture}
+\end{tzcode}
+
+You can close the path by |<--cycle>|.
+
+\begin{tzcode}{.3}
+% \tzlines: closed path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,2){Down}[a,sloped]
+ (3,1){Up}
+ (4,3){line A} ; <--cycle>
+\tzlines[dashed]
+ (0,0)(1,1)(2,1)(3,0){line B}[r] ; <--cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzlines+}: Relative coordinates: Semicolon version}
+\label{s:tzlines+}
+
+The \iisw{plus version} \icmd{\tzlines+} connects two or more points with connected line segments, but each coordinate (except the first one) is \xem{relative} to the previous coordinate.
+%For example, |\tzline+(A)(B)(C)(D);| is equivalent to |\tzline(A)<++>(B)<++>(C)<++>(D);|.
+
+\xem{Everything else is the same as in} |\tzlines|.
+It is also required to enter a \xem{semicolon} to indicate when the coordinate iteration ends.
+
+
+\begin{tzdef}{}
+% syntax: full
+\tzlines+[<opt>]<shift coor>"<path name>"
+ (<coor>){<text>}[<node opt>]
+ ..repeated.. (){}[] ; <code.append>
+% defaults
+ []<>"" (<m>){}[] ..repeated.. (){}[] ; <>
+\end{tzdef}
+
+
+\begin{tztikz}{}
+\tzlines+(1,1)(2,2)(3,1)(4,3); % works like:
+ \draw (1,1) -- ++(2,2) -- ++(3,1) -- ++(4,3);
+\end{tztikz}
+
+
+\begin{tztikz}{}
+\tzlines+[dashed]"AA"(1,1){A}(2,2){B}(3,1){C}[below]; % works like:
+ \draw [dashed,name path=AA]
+ (1,1) -- node {A} ++(2,2)
+ -- node {B} ++(3,1) node [below] {C} ;
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzlines+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines+[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,1){Down}[a,sloped]
+ (2,-1){Up}
+ (1,2){line A} ;
+\tzlines+[dashed,auto,text=red]
+ (0,0){A}(1,1){B}(1,0){C}(1,-1){line B}[blue,draw,r] ;
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%==================================
+\chapter{Connecting Points}
+\label{c:tzto}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzto}: Two points}
+\label{s:tzto}
+
+\icmd{\tzto} connects two points with a straight or curved line, using \Tikz\ |to| operation.
+So |\tzto| is more general than |\tzline|, which connects points only with a straight line.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzto(<coor>)(<coor>)
+% syntax: medium
+\tzto[<opt>](<coor>){<text>}[<node opt>](<coor>){<text>}[<node opt>]
+% syntax: full
+\tzto[<opt>]<shift coor>"<path name>"
+ (<coor>){<text>}[<node opt>](<coor>){<text>}[<node opt>]<code.append>
+% defaults
+ []<>""(<m>){}[above](<m>){}[]<>
+\end{tzdef}
+
+
+\begin{tztikz}{}
+\tzto(1,1)(3,2) % works like:
+ \draw (1,1) to (3,2);
+\end{tztikz}
+
+
+
+\begin{tztikz}{}
+\tzto[->,bend right](1,1){A}[near start](3,2) % works like:
+ \draw [->,bend right] (1,1) to node [near start] {A} (3,2);
+
+\tzto[->,bend right](1,1){A}[near start](3,2){B}[right] % works like:
+ \draw [->,bend right] (1,1) to node [near start] {A}
+ (3,2) node [right] {B};
+\end{tztikz}
+
+\paragraph{Line styles}
+You can control line styles with the first optional argument |[<opt>]|.
+
+\begin{tzcode}{.3}
+% \tzto
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto[blue,thick,->](0,1)(3,3)
+\tzto[out=0](0,0)(4,2)
+\tzto[bend right,dashed](2,0)(4,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Adding text}
+
+You can add text \xem{next to the line} (|[midway,above]|, by default) by specifying the options |{<text>}| and |[<node opt>]| \xem{inbetween} the two coordinates.
+
+You can also add text \xem{at or around} the last coordinate by the options |{<text>}| and |[<node opt>]| \xem{immediately after} the last coordinate.
+
+\begin{tzcode}{.3}
+% \tzto: adding text
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto[blue,thick,->](0,1){line}[sloped](3,3)
+\tzto[out=0](0,0){curve}[pos=.8](4,2){line B}[r]
+\tzto[bend right,dashed](2,0)(4,1){line C}[red,r]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the line by specifying the option |<shift coor>| before the first coordinate or immediately before the option |"<path name>"| (if any).
+
+\begin{tzcode}{.3}
+% \tzto: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto[blue,thick,->]<0,1>(0,1){line}[sloped](3,3)
+\tzto[out=0]<1,1>(0,0){curve}[pos=.8](4,2){line B}[r]
+\tzto[bend right,dashed]<-1,0>(2,0)(4,1){line C}[red,r]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Naming paths: Intersections}
+You can name the path of |\tzto| by specifying the option |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzto: name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto[bend right=45,blue,thick,->]"curveA"(1,3)(4,0)
+\tzto[out=0]"curveB"(0,0)(4,2){line B}[r]
+% intersection point
+\tzXpoint*{curveA}{curveB}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Extending the path}
+You can extend the path of |\tzto| by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzto: extending path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto[bend right=45,blue,thick,->]
+ (1,3)(4,0)<--([turn]0:1cm) node [b] {extended}>
+\tzto[out=0]
+ (0,0)(4,2)<--([turn]0:1cm) node [r] {extended}>
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzto+}: Relative coordinates}
+\label{s:tzto+}
+
+The \iisw{plus version} \icmd{\tzto+} uses the second coordinate relative to the first coordinate.
+
+\xem{Everything else is the same as in} |\tzto|.
+
+\begin{tztikz}{}
+\tzto+(1,1)(3,2) % works like:
+ \draw (1,1) to ++(3,2);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzto+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto+[blue,thick,->](0,1){line}[sloped](3,2)
+\tzto+[out=0](0,0){curve}[pos=.8](4,2){line B}[r]
+\tzto+[bend right,dashed](2,0)(2,1){line C}[red,r]
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzto+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto+[bend right=45,blue,thick,->]
+ (1,3)(3,-3)<--([turn]0:1cm) node [b] {extended}>
+\tzto+[out=0]
+ (0,0)(4,2)<--([turn]0:1cm) node [r] {extended}>
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tztos}: Multiple points: Semicolon version}
+\label{s:tztos}
+
+\icmd{\tztos} takes an arbitrary number of coordinates as arguments to connect them by \Tikz\ |to| operation. Since this is a \xem{semicolon version}, you need to enter a \xem{semicolon} to indicate when the coordinate iteration ends.
+So the quadruple |(<coor>)[<to opt>]{<text>}[<node opt>]| is
+the whole repeating pattern.
+Here, |[<to opt>]| is for the options of |to| operation such as |[bend right]|, |[bend left=<angle>]|, |[out=<angle>,in=<angle>]|and so on.
+
+\begin{tzdef}{}
+% syntax
+\tztos[<opt>]<shift coor>"<path name>"
+ (<coor1>)[<to opt>]{<text>}[<node opt>]..repeated..()[]{}[] ; <code.append>
+% defaults
+ []<0,0>""(<m>)[]{}[]..repeated..()[]{}[]<>
+\end{tzdef}
+
+\begin{tztikz}{}
+\tztos(0,0)(1,2)(3,1); % works like:
+ \draw (0,0) to (1,2) to (3,1);
+\end{tztikz}
+
+\begin{tztikz}{}
+\tztos[blue] (0,0)[bend right] (1,2)[out=-60] (3,1); % works like:
+ \draw [blue] (0,0) to [bend right] (1,2) to [out=-60,in=45] (3,1);
+\end{tztikz}
+
+\paragraph{How to connect coordinates}
+You can use \Tikz's |to| operation option to connect the coordinates with different types of curves.
+
+\begin{tzcode}{.3}
+% \tztos
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tztos[blue,<->](0,1)(1,2)(3,1)(4,3);
+\tztos[red,thick]
+ (0,0)[bend right]
+ (1,1)
+ (2,1)[out=-135,in=45]
+ (3,0);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Adding text}
+You can add text next to lines or curves by specifying the options |{<text>}| and |[<node opt>]| inbetween coordinates or after the option |[<to opt>]|, if it exists.
+You can also add text at or around the last coordinate by the last options |{<text>}| and |[<node opt>]|.
+
+It has its |+| verison |\tztos+|.
+
+\begin{tzcode}{.3}
+% \tztos: adding text
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tztos(0,1)[bend right]{A}
+ (1,2){Ben}[red,sloped,a]
+ (3,1)[bend right]{Cate}[sloped,near end]
+ (4,3){Name}[draw,blue,a] ;
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the line or curve of |\tztos|
+using the option |<shift coor>| before the first coordinate or immediately before |"<path name">|, if any.
+
+\begin{tzcode}{.3}
+% \tztos: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tztos[blue,<->](0,1)(1,2)(3,1)(4,3);
+\tztos[red,thick]
+ <1,1>(0,0)[bend right]
+ (1,1)
+ (2,1)[out=-135,in=45]
+ (3,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{\texttt{name path}}
+You can name the path of |\tztos| by specifying |"<path name>"| immediately before the first mandatory coordinate.
+
+\begin{tzcode}{.3}
+% \tztos: intersection points
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tztos[blue,<->]"AA"(0,1)(1,2)(3,1)(4,3);
+\tztos[red,thick]
+ <1,1>"BB"(0,0)[bend right]
+ (1,1)
+ (2,1)[out=-135,in=45]
+ (3,0);
+% intersection points
+\tzXpoint*{AA}{BB}(X)
+\tzdot(X-2)(4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Extending the path}
+You can extend the path of |\tztos| from the last coordinate,
+by writing \Tikz\ code in the last (after the semicolon) optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tztos
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tztos[blue,<->](0,1)(1,2)(3,1)(4,3);<--cycle>
+\tztos[red,thick]
+ (0,0)[bend right]
+ (1,1)
+ (2,1)[out=-135,in=45]
+ (3,0); < to ([turn]0:1.5cm) >
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tztos+}: Relative coordinates: Semicolon version}
+\label{s:tztos+}
+
+The \iisw{plus version} \icmd{\tztos+} takes each coordinate (except the first coordinate) relative (with |++|) to the previous coordinate.
+
+\xem{Everything else is the same as in} |\tztos|.
+
+\begin{tzcode}{.3}
+% \tztos+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tztos+[blue,<->](0,1)(1,1)(2,-1)(1,2);<--cycle>
+\tztos+[red,thick]
+ (0,0)[bend right]
+ (1,1)
+ (1,0)[out=-135,in=45]
+ (1,-1); < to ([turn]0:1.5cm) >
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Filling area}
+\label{c:fillingarea}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzpath} and \protect\cmd{\tzpath*}: Semicolon versions}
+\label{s:tzpath}
+
+
+\icmd{\tzpath} creates a path connecting an arbitrary number of coordinates, but it does not stroke the path. You can visualize the path with |\tzpath[draw]|.
+Since |\tzpath| is a \ixsw{semicolon version} macro, you need to enter a \xem{semicolon} |;| to indicate where the coordinate iteration ends.
+
+
+The main purpose of |\tzpath| is to fill an enclosed area with color or pattern.
+You can use |\tzpath[fill]| or |\tzpath[pattern=<...>]| to do it.
+
+The starred version \icmd{\tzpath*} fills the interior of |\tzpath| with |black!50| with |fill opacity=.3|, by default.
+|\tzpath*| is equivalent to |\tzpath[fill=black!50,fill opacity=.3]|.
+You can change the defaults by \icmd{\settzfillcolor} and \icmd{\settzfillopacity}.
+The effect remains valid until the end of the |tikzpicture| environment, unless changed again.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzpath (<coor>)(<coor>)..repeated..(<coor>) ;
+\tzpath*(<coor>)(<coor>)..repeated..(<coor>) ; {<fill opacity>}
+% syntax
+\tzpath*{<path style>}[<opt>]<shift coor>"<path name>"
+ (<coor>)[<path style>]{<text>}[<node opt>]
+ .. repeated .. ()[]{}[] ; {<fill opacity>}<code.append>
+% defaults: \tzpath
+ {to}[]<>""(<m>)[]{}[]<>..repeated..()[]{}[]<>;{}<>
+% defaults: \tzpath*
+ *{to}[fill=black!50,fill opacity=.3]<>""(<m>)[]{}[]<>..repeated..()[]{}[]<>;{.3}<>
+\end{tzdef}
+
+\paragraph{Path construction operation}
+(If you are not an experienced user of \Tikz\, just skip this part.)
+
+|\tzpath| is similar to |\tztos|, but it is more flexible in constructing paths.
+|\tzpath| allows you to choose how to construct a path using the |[<path style>]| option \xem{inbetween} coordinates. \xem{Path extension operation} can be selected from `|--|', `|to|', `\verb+|-+', `\verb+-|+', etc.
+You can use the first brace option |{<path style>}| to change all the |<path style>| inbetween coordinates. The default path style is `|to|' and can be change by \icmd{\settzpathstyle}, like |\settzpathstyle{--}|. It remains valid until the end of |tikzpicture| environment unless changed again.
+
+
+\begin{tzcode}{.3}
+% \tzpath: path construction
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpath[draw](0,1)(1,2)[-|](3,1)(4,3);
+\tzpath[draw]
+ (0,0)[to[bend right]]
+ (1,1)
+ (2,1)[to[out=-135,in=45]]
+ (3,0);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzpath: path construction
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzpathstyle{to[bend right]}
+\tzpath[draw](0,1)(1,2)[-|](3,1)(4,3);
+\tzpath[draw]
+ (0,0)[to[bend right]]
+ (1,1)
+ (2,1)[to[out=-135,in=45]]
+ (3,0);
+\end{tikzpicture}
+\end{tzcode}
+
+You can extend the path of |\tzpath| by writing \Tikz\ code in the last (after the semicolon) optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzpath: <code.append>
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpath[draw](0,1)(1,2)[-|](3,1)(4,3);
+ < to [bend right=60] (0,1) >
+\tzpath[fill]
+ (0,0)[to[bend right]]
+ (1,1)
+ (2,1)[to[out=-135,in=45]]
+ (3,0); <--cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Filling the interior}
+
+You can optionally change the opacity of fill color using the \Tikz\ option |fill opacity|.
+
+\begin{tzcode}{.3}
+% \tzpath: fill, fill opacity
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[red,very thick](0,3)(4,0)
+\tzpath[fill](0,0)(3,1)(2,3)(0,2); % default opacity=1
+\tzpath[fill,green,fill opacity=.5]
+ <1,-1>(0,0)(3,1)(2,3)(0,2);
+\end{tikzpicture}
+\end{tzcode}
+
+The starred version |\tzpath*| fill the interior of |\tzpath| with the defaults |black!50| and |fill opacity=.3|. You can change the opacity by specifying the last (after the semicolon) optional argument |{<fill opacity>}|.
+You can also use |\settzfillcolor| and |\settzfillopacity| to change the defaults.
+
+\begin{tzcode}{.3}
+% \tzpath*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[red,very thick](0,3)(4,0)
+\tzpath*(0,0)(3,1)(2,3)(0,2);
+\tzpath*[fill=green]
+ <1,-1>(0,0)(3,1)(2,3)(0,2); {.5} %%
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzpath*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpath*[blue](0,1)(1,2)[-|](3,1)(4,3);
+ < to [bend right=60] (0,1) >
+\tzpath*[red]
+ (0,0)[to[bend right]]
+ (1,1)
+ (2,1)[to[out=-135,in=45]]
+ (3,0); <--cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzpath+} and \protect\cmd{\tzpath*+}: Relative coordinates: Semicolon versions}
+\label{s:tzpath+}
+
+The \iisw{plus version} \icmd{\tzpath+} uses each coordinate (except for the first coordinate) relative (with |++|) to the previous coordinate.
+
+\xem{Everything else is the same as in} |\tzpath|.
+
+\icmd{\tzpath*+} is simply the plus version of |\tzpath*|.
+
+\begin{tzcode}{.3}
+% \tzpath+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[red,very thick](0,3)(4,0)
+\tzpath+[pattern=bricks,preaction={fill=brown}]
+ (0,0)(3,1)(-1,2)(-2,-1);
+\tzpath+[pattern=north east lines,opacity=.5]
+ <1,-1>(0,0)(3,1)(-1,2)(-2,-1);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzpath*+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[red,very thick](0,3)(4,0)
+\tzpath*+(0,0)(3,1)(-1,2)(-2,-1);
+\tzpath*+[fill=green]
+ <1,-1>(0,0)(3,1)(-1,2)(-2,-1); {.5} %%
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%=======================================
+%%==================================
+\chapter{Curves}
+\label{c:curves}
+
+There are many ways to draw curves.
+
+%%-----------------------------------
+%%------------------------------------------------------------
+\section{Bezier curves}
+\label{s:beziercurves}
+
+\icmd{\tzbezier} draws a bezier curve with one or two control points.
+
+\subsection{\protect\cmd{\tzbezier}}
+\label{ss:tzbezier}
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzbezier(<start-coor>)(cntl-coor>)(<last-coor>)
+\tzbezier(<start-coor>)(cntl-coor>)(<cntl-coor>)(<last-coor>)
+% syntax: full
+\tzbezier[<draw opt>]<shift coor>"<name path>"
+ (<start-coor>)(cntl-coor>)(<cntl-coor>)(<last-coor>)
+ {<text>}[<node opt>]<code.append>
+% defaults
+ []<>""(<m>)(<m>)()(<m>){}[]<>
+\end{tzdef}
+
+\paragraph{Control points}
+
+You can specify one or two control points, |(<cntl-coor>)|.
+So |\tzbezier| accepts three or four coordinates.
+
+\begin{tztikz}{}
+% three coordinates: one control point
+\tzbezier(0,1)(1,0)(4,3) % works like:
+ \draw (0,0) ..controls (1,0).. (4,3);
+\end{tztikz}
+
+\begin{tztikz}{}
+% four coordinates: two control points
+\tzbezier(0,1)(1,0)(2,4)(4,3) % works like:
+ \draw (0,0) ..controls (1,0) and (2,4).. (4,3);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzbezier
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzbezier[red](0,3)(1,2)(2,4)(4,3)
+\tzbezier[blue](0,2)(1,.5)(4,0)
+\end{tikzpicture}
+\end{tzcode}
+
+The style \ixxw{tzshowcontrols} displays the control points by drawing dotted lines, by default.
+You can also change the dotted line style, like |tzshowcontrols={dashed,green}|.
+
+
+\begin{tzcode}{.3}
+% \tzbezier: tzshowcontrols
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzbezier[blue,tzshowcontrols](0,2)(1,.5)(4,0)
+\tzdots*[blue](0,2)(1,.5)(4,0);
+\tzbezier[red,tzshowcontrols={green,dashed}]
+ (0,3)(1,2)(2,4)(4,3)
+\tzdots*[red](0,3)(1,2)(2,4)(4,3);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Adding text}
+You can add text next to the curve or at the last coordinate
+by specifying the options |{<text>}| and |[node opt]| immediately after the last coordinate.
+
+
+\begin{tzcode}{.3}
+% \tzbezier: adding text
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzbezier[blue](0,2)(1,.5)(4,0){curve}[draw,black,r]
+\tzbezier[red](0,3)(1,2)(2,4)(4,3){bezier}[near end,a]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the curve by specifying the option |<shift coor>| before the first coordinate or immediately before the option |"<path name>"|, if any.
+
+\begin{tzcode}{.3}
+% \tzbezier: shift
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzbezier[blue]
+ (0,2)(1,.5)(4,0){curve}[draw,black,r]
+\tzbezier[blue,dashed]
+ <1,1>(0,2)(1,.5)(4,0){curve}[r]
+\tzbezier[red]
+ (0,3)(1,2)(2,4)(4,3){bezier}[near end,a]
+\tzbezier[red,dashed]
+ <0,-1>(0,3)(1,2)(2,4)(4,3){bezier}[blue,near end,a]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{name path}}
+You can name the path of |\tzbezier| by specifying the option |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzbezier: name path
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzbezier[blue,dashed,thick]<1,1>"curve"
+ (0,2)(1,.5)(4,0){curve}[r]
+\tzbezier[red,dashed,thick]<0,-1>"bezier"
+ (0,3)(1,2)(2,4)(4,3){bezier}[blue,near end,a]
+% intersection point
+\tzXpoint*{curve}{bezier}(X){X}[-90] % <angle>
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Extending the path}
+You can extend the path of |\tzbezier| from the last coordinate, by writing \Tikz\ code
+in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzbezier: extending path
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzbezier[red](0,3)(1,2)(2,4)(4,3){bezier}[near end,a]
+ < to [bend right] ++(-1,-1) node [below] {A} >
+\tzbezier[blue,->](0,2)(1,.5)(4,0)
+ < |- ++(-2,1) node [above] {B} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzbezier+}: Relative coordinates}
+\label{ss:tzbezier+}
+
+For the \iisw{plus version}, |\tzbezier+(A)(B)(C)|, |(B)| and |(C)| are relative to |(A)|, as in \Tikz.
+
+For |\tzbezier+(A)(B)(C)(D)|, |(B)| and |(D)| are relative to |(A)|, and |(C)| is relative to |(D)|, as in \Tikz.
+
+\begin{tztikz}{}
+% three coordinates
+\tzbezier+(0,1)(1,-1)(4,3) % works like:
+ \draw (0,1) ..controls +(1,-1).. ($(0,1)+(4,3)$);
+\end{tztikz}
+
+\begin{tztikz}{}
+% four coordinates
+\tzbezier+(0,1)(1,-1)(-2,1)(4,3) % works like:
+ \draw (0,1) ..controls +(1,-1) and +(-2,1).. ($(0,1)+(4,3)$);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzbezier+
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzbezier+(0,3)(1,-1)(-2,1)(4,0){bezier}[near end,a]
+ < to [bend right] ++(-1,-1) node [below] {A} >
+\tzbezier+[blue,->](0,2)(1,-1.5)(4,-2)
+ < |- ++(-2,1) node [above] {B} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%-----------------------------------
+%%------------------------------------------------------------
+\section{Parabolas}
+\label{s:parabolas}
+
+
+\subsection{\protect\cmd{\tzparabola}}
+\label{ss:tzparabola}
+
+\icmd{\tzparabola} draws a parabola going through specified coordinates.
+It accepts two or three coordinates.
+In the case of three coordinates, the parabola bends at the second coordinate.
+
+\begin{tztikz}{}
+% two coordinates
+\tzparabola(0,0)(3,2) % works like:
+ \draw (0,0) parabola (3,2);
+\end{tztikz}
+
+\begin{tztikz}{}
+% three coordinates
+\tzparabola(0,0)(1,1)(3,2) % works like:
+ \draw (0,0) parabola bend (1,1) (3,2);
+\end{tztikz}
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzparabola(<coor>)(<coor>)
+\tzparabola(<coor>)(<coor>)(<coor>)
+% syntax: full
+\tzparabola[<opt1>]<shift coor>"<path name>"
+ (<coor>)(<coor>)(<coor>){<text>}[<node opt>]<code.append>
+% default
+ []<>""(<m>)()(<m>){}[]<>
+\end{tzdef}
+
+\paragraph{Parabolas}
+|\tzplot| draws the graph of $f(x)=ax^2+bx+c$ for appropriate values of $a$, $b$, and $c$.
+
+\begin{tzcode}{.3}
+% \tzparabola: two coordinates
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola[thick](0,0)(2,2)
+\tzparabola[bend at end,dashed](0,0)(2,2)
+\tzparabola[red,thick,bend pos=.5](2,0)(4,3)
+\tzparabola[blue,parabola height=-2cm](2,3)(4,2)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzparabola: three coordinates
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola[thick](0,2)(1,0)(2,2)
+\tzparabola[blue](0,3)(2,1)(4,2)
+\tzparabola[red,thick](2,0)(3,2)(4,3)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Adding text}
+You can add text at or around the last coordinate by specifying the options |{<text>}| and |[<node opt>]| immediately after the last coordinate.
+
+\begin{tzcode}{.3}
+% \tzparabola: adding text
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola[thick](0,0)(2,2){parabola}[blue,draw,a]
+\tzparabola[blue](0,3)(2,1)(4,2){AC}[r]
+\tzparabola[red,thick,bend pos=.5](2,0)(4,3){C}[ar]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the parabola by specifying the option |<shift coor>| before the first coordinate or immediately before the option |"<path name>"|, if any.
+
+\begin{tzcode}{.3}
+% \tzparabola: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola[blue] (0,3)(2,1)(4,2){AC}[r]
+\tzparabola[dashed]<0,-.5>(0,3)(2,1)(4,2){AC}[r]
+\tzparabola[dotted]<0,-1> (0,3)(2,1)(4,2){AC}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{name path}}
+You can name the path of |\tzparabola| by specifying the option |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzparabola: name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola[blue]"AC"(0,3)(2,1)(4,2){AC}[r]
+\tzparabola"BB"(1,0)(2,2)(3,0)
+% intersection points
+\tzXpoint*{AC}{BB}(X)
+\tzdot(X-2)(3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Extending the path}
+You can extend the path of |\tzparabola| from the last coordinate by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzparabola: extending path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola[blue,->]"AC"(0,3)(2,1)(4,2)
+ < -- ++ (-1,1) >
+\tzparabola"BB"(1,0)(2,2)(3,0)
+ < -| ++ (1,1) node [right] {K!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzparabola+}: Relative coordinates}
+\label{ss:tzparabola+}
+
+For the \iisw{plus version} \icmd{\tzparabola+}, the second and the third coordinates are relative to the first coordinate.
+
+\xem{Everything else is the same as in} |\tzparabola|.
+
+\begin{tztikz}{}
+% two coordinates
+\tzparabola+(0,1)(3,2) % works like:
+ \draw (0,1) parabola ($(0,1)+(1,2)$);
+\end{tztikz}
+
+
+\begin{tztikz}{}
+% three coordinates
+\tzparabola+(0,1)(1,1)(3,-1) % works like:
+ \draw (0,1) parabola bend +(1,1) ($(0,1)+(3,-1)$);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzparabola+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola+[thick](0,0)(2,2){parabola}[blue,draw,a]
+\tzparabola+[blue](0,3)(2,-2)(4,-1){AC}[r]
+\tzparabola+[red,thick,bend pos=.5](2,0)(2,3){C}[ar]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplotcurve}}
+\label{s:tzplot}
+
+See Section \ref{s:tzplotcurve} on page \pageref{s:tzplotcurve} for more details on |\tzplotcurve|.
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzto}, \protect\cmd{\tztos}}
+\label{s:curvetzto}
+
+See Section \ref{s:tzto} on page \pageref{s:tzto} for more details on |\tzto|.
+
+See Section \ref{s:tztos} on page \pageref{s:tztos} for more details on |\tztos|.
+
+
+
+
+%%==================================
+\chapter{Polygons and Circles}
+\label{c:polygons}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzpolygon}: Semicolon verion}
+\label{s:tzpolygon}
+
+\icmd{\tzpolygon} connects an arbitrary number of coordinates to draw a polygon, a closed figure. |\tzpolygon| is equivalent to a closed |\tzlines|. Since |\tzpolygon| is a \xem{semicolon version}, you need to enter a \xem{semicolon} to indicate when the coordinate repetition ends.
+
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzpolygon(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: medium
+\tzpolygon (<coor>){<text>}[<node opt>]..repeated..(<coor>){<text>}[<node opt] ;
+% syntax
+\tzpolygon[<opt>]<shift coor>"<path name>"
+ (<coor>){<text>}[<node opt>]
+ ..repeated.. (){}[] ; <code.append>
+% defaults
+ []<>""(<m>){}[] .. repeated.. (){}[] ; {} <>
+\end{tzdef}
+
+\begin{tztikz}{}
+\tzpolygon(1,1)(2,2)(3,1)(4,3); % works like:
+ \draw (1,1) -- (2,2) -- (3,1) -- (4,3) -- cycle;
+\end{tztikz}
+
+You can add text next to lines by specifying the options |{<text>}| and |[<node opt>]| \xem{inbetween} coordinates.
+
+\begin{tzcode}{.3}
+% \tzpolygon
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon[fill,blue,auto]
+ (0,1){Side A}[sloped,red]
+ (1,3){B}
+ (2,3)
+ (3,2){Side D}[swap,sloped]
+ (1,0);
+\end{tikzpicture}
+\end{tzcode}
+
+You can also move the polygon by specifying the option |<shift coor>| before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzpolygon: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon[blue,auto]
+ (0,1){Side A}[sloped,red]
+ (1,3){B}
+ (2,3)
+ (3,2){Side D}[swap,sloped]
+ (1,0);
+\tzpolygon[auto,dashed]<1,-.5>
+ (0,1)(1,3)(2,3){C}(3,2)(1,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzpolygon*}: Semicolon version}
+\label{s:tzpolygon*}
+
+\icmd{\tzpolygon*} paints the interior of the polygon with |black!50| with |fill opacity=.3|, by default.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzpolygon*(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: medium
+\tzpolygon*(<coor>){<text>}[<node opt>]..repeated..(<coor>){<text>}[<node opt] ;
+% syntax
+\tzpolygon*[<opt>]<shift coor>"<path name>"
+ (<coor>){<text>}[<node opt>]
+ ..repeated.. (){}[] ; {<fill opacity>} <code.append>
+% defaults
+ *[fill=black!50,fill opacity=.3]<>""(<m>){}[] .. repeated.. (){}[] ; {} <>
+\end{tzdef}
+
+You can change the opacity by specifying the the last optional argument |{<fill opacity>}| immediately after the semicolon.
+
+\begin{tzcode}{.3}
+% \tzpolygon: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon*[draw=blue,auto]
+ (0,1){Side A}[sloped,red]
+ (1,3){B}
+ (2,3)
+ (3,2){Side D}[swap,sloped]
+ (1,0);
+\tzpolygon*[green,auto,dashed,text=black]<1,-.5>
+ (0,1)(1,3)(2,3){C}(3,2)(1,0); {.7}
+\end{tikzpicture}
+\end{tzcode}
+
+You can also change the defaults using |\settzfillcolor| and |\sttzfillopacity|.
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzpolygon+} and \protect\cmd{\tzpolygon*+}: Relative coordinates: Semicolon verion}
+\label{s:tzpolygon}
+
+The plus version \icmd{\tzpolygon+} uses each coordinate (except the first one) relative to the previous coordinate.
+
+\xem{Everything else is the same as in} |\tzpolygon|.
+
+\icmd{\tzpolygon*+} is just a plus version of |\tzpolygon*|.
+
+\begin{tztikz}{}
+\tzpolygon+(1,1)(2,2)(3,1)(4,3); % works like:
+ \draw (1,1) -- ++(2,2) -- ++(3,1) -- ++(4,3) -- cycle;
+\end{tztikz}
+
+\begin{tztikz}{}
+\tzpolygon+[dashed]"AA"(1,1)(2,2){A}(3,1){B}[below];
+ % is an abbreviation (with defaults) of:
+
+ \draw [dashed,name path=AA] (1,1)
+ -- ++(2,2)
+ -- ++(3,1) node {A}
+ -- ++(4,3) node [below] {B}
+ -- cycle;
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzpolygon: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon*+[blue,auto]
+ (0,1){Side A}[sloped,red]
+ (1,2){B}
+ (1,0)
+ (1,-1){Side D}[swap,sloped]
+ (-2,-2);
+\tzpolygon*+[green,auto,dashed,text=black]<1,-.5>
+ (0,1)(1,2)(1,0){C}(1,-1)(-2,-2); {.7}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzframe} and \protect\cmd{\tzframe*}}
+\label{s:tzframe}
+
+\icmd{\tzframe} accepts two coordinates draws a rectangle.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzframe(<coor>)(<coor>)
+% syntax: full
+\tzframe[<opt>]<shift coor>"<path name>"(<coor1>)(<coor2>)
+% defaults
+ []<>""(<m>)(<m>)
+\end{tzdef}
+
+\begin{tztikz}{}
+\tzframe(0,1)(3,2) % works like:
+ \draw (0,1) rectangle (3,2);
+\end{tztikz}
+
+
+The plus version \icmd{\tzframe+} uses the second coordinate as the coordinate relative (with |++|) to the first.
+
+\begin{tztikz}{}
+\tzframe+(0,1)(3,2) % works like:
+ \draw (0,1) rectangle ++(3,2);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzframe, \tzframe+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzframe(0,0)(3,2)
+\tzframe+[blue,rounded corners=2mm](1,3)(1,-2)
+\end{tikzpicture}
+\end{tzcode}
+
+The starred version \icmd{\tzframe*} fills the interior
+with |black!50| with |fill opacity=.3|, by default.
+
+|\tzframe+| has also its starred version \icmd{\tzframe*+}.
+
+\begin{tzdef}{}
+% syntax
+\tzframe*[<opt>]<shift coor>"<path name>"(<coor1>)(<coor2>){<fill opacity>}
+% defaults
+ *[fill=black!50,fill opacity=.3]<>""(<m>)(<m>){.3}
+\end{tzdef}
+
+With the starred versions, you can change the fill opacity using the last option |{<fill opacity>}|.
+
+\begin{tzcode}{.3}
+% \tzframe*(+)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzframe[fill](0,0)(3,2)
+\tzframe*+[green,rounded corners=2mm](1,3)(1,-2){.7} %%
+\end{tikzpicture}
+\end{tzcode}
+
+You can move |\tzframe| and its friends by specifying the option |<shift coor>| immediately before the first mandatory coordinate.
+
+\begin{tzcode}{.3}
+% \tzframe(*)(+): shift
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzframe(0,0)(3,2)
+\tzframe[blue,dashed]<1,1>(0,0)(3,2)
+\tzcoors(1,3)(A)(1,-2)(B);
+\tzframe*+[blue,rounded corners=2mm](A)(B)
+\tzframe*+[red,rounded corners=2mm]<-.5,-.5>(A)(B)
+\tzframe*+[green,rounded corners=2mm]<1,1>(A)(B)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcircle} and \protect\cmd{\tzcircle*}}
+\label{s:tzcircle}
+
+\icmd{\tzcircle} draws a circle around a specified coordinate with a specified radius.
+
+\begin{tzdef}{}
+% syntax
+\tzcircle[<opt>]<shift coor>"<path name>"(<coor>)(<radius>)
+% defaults
+ []<>""(<m>)(<m>)
+\end{tzdef}
+
+\begin{tztikz}{}
+\tzcircle(0,0)(1cm) % works like:
+ \draw (0,0) circle (1cm);
+\end{tztikz}
+
+The starred version \icmd{\tzcircle*} fills the interior
+with |black!50| with |fill opacity=.3|, by default.
+You can change the fill opacity using the last option |{<fill opacity>}|.
+
+\begin{tzdef}{}
+% syntax
+\tzcircle*[<opt>]<shift coor>"<path name>"(<coor>)(<radius>){<fill opacity>}
+% defaults
+ *[fill=black!50,fill opacity=.3]<>""(<m>)(<m>){.3}
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzcircle(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcircle(2,2)(1)
+\tzcircle[fill=red](3,1)(.5cm)
+\tzcircle*[blue](2,1)(1){.5}
+\tzcircle*[green](3,.5)(.5cm)
+\end{tikzpicture}
+\end{tzcode}
+
+You can move the circle by specifying the option |<shift coor>| immediately before the center coordinate.
+
+\begin{tzcode}{.3}
+% \tzcircle(*): shift
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzcoors(2,2)(A)(3,1)(B);
+\tzcircle(2,2)(1)
+\tzcircle[blue,dashed]<-.5,0>(A)(1)
+\tzcircle*(3,1)(.5cm)
+\tzcircle*[blue]<.5,0>(B)(.5cm)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzellipse} and \protect\cmd{\tzellipse*}}
+\label{s:tzellipse}
+
+\icmd{\tzellipse} draws an ellipse around a specified coordinate with the specified x-radius and y-radius.
+
+\begin{tzdef}{}
+% syntax
+\tzellipse[<opt>]<shift coor>"<path name>"(<coor>)(<x and y radius>)
+% defaults
+ []<>""(<m>)(<m>)
+\end{tzdef}
+
+\begin{tztikz}{}
+\tzellipse(0,0)(1 and .5) % works like:
+ \draw (0,0) ellipse (1 and .5);
+\end{tztikz}
+
+The starred version \icmd{\tzellipse*} fills the interior
+with |black!50| with |fill opacity=.3|, by default.
+You can change the fill opacity using the last option |{<fill opacity>}|.
+
+\begin{tzdef}{}
+% syntax
+\tzellipse*[<opt>]<shift coor>"<path name>"(<coor>)(<x and y radius>){<fill opacity>}
+% defaults
+ *[fill=black!50,fill opacity=.3]<>""(<m>)(<m>){.3}
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzellipse(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzellipse(2,2)(1.5 and 1)
+\tzellipse[fill=red](3,1)(1cm and .5cm)
+\tzellipse*[blue](2,1)(1 and 1.5){.5}
+\tzellipse*[green](3,.5)(1cm and .5cm)
+\end{tikzpicture}
+\end{tzcode}
+
+You can move the ellipse by specifying the option |<shift coor>| immediately before the mandatory coordinate.
+
+\begin{tzcode}{.3}
+% \tzellipse(*): shift
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzcoors(2,2)(A)(3,1)(B);
+\tzellipse(2,2)(1.5 and 1)
+\tzellipse[blue,dashed]<-.5,0>(A)(1.5 and 1)
+\tzellipse*(3,1)(1cm and .5cm)
+\tzellipse*[blue]<.5,0>(B)(1cm and .5cm)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%==================================
+\chapter{Arcs and Wedges}
+\label{c:arcs}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzarc(')}: Centered arcs}
+\label{s:tzarc}
+
+\subsection{Arcs}
+\label{ss:tzarc}
+
+\icmd{\tzarc} draws an arc around a specified center.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzarc(<coor>)(<angA:angB:radius>)
+% syntax: full
+\tzarc[<opt>]<shift coor>"<path name>"
+ (<coor>)(<angA:angB:radius>){<text>}[<node opt>]<code.append>
+% defaults
+ []<>""(<m>)(<m>){}[]<>
+\end{tzdef}
+
+
+\begin{tztikz}{}
+\tzarc(1,1)(30:120:1) % works like:
+ \draw (1,1) ++(30:1) arc (30:120:1);
+\end{tztikz}
+
+The \iisw{swap version} \icmd{\tzarc'} switches its drawing direction from \ixxw{counterclockwise} to \ixxw{clockwise} and vice versa.
+
+\begin{tztikz}{}
+\tzarc'(1,1)(30:120:1) % works like:
+ \draw (1,1) ++(30:1) arc (30:120-360:1);
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzarc, \tzarc'
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots*(1,1)(3,2);
+\tzarc [blue,->] (1,1)(-45:180:1)
+\tzarc'[dashed,->] (1,1)(-45:180:1)
+\draw [->](3,2) ++(-45:1) arc (-45:180:1);
+\draw [dashed,->](3,2) ++(-45:1) arc (-45:180-360:1);
+\end{tikzpicture}
+\end{tzcode}
+
+You can add text along the arc by specifying the options |{<text>}| and |[<node opt>]| immediately after the two mandatory arguments.
+
+
+\begin{tzcode}{.3}
+% \tzarc('): adding text
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzarc [blue,->] (1,1)(-45:180:1){A}[r]
+\tzarc'[dashed,->](1,1)(-45:180:1)
+\tzarc[->] (3,2)(-45:180:1){arc}[midway,sloped]
+\tzarc'[dashed,->](3,2)(-45:180:1)
+\end{tikzpicture}
+\end{tzcode}
+
+You can move arcs by specifying the option |<shift coor>| just before the center coordinate.
+
+\begin{tzcode}{.3}
+% \tzarc('): shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzarc [blue,->] (1,1)(-45:180:1){A}[r]
+\tzarc'[dashed,->] (1,1)(-45:180:1)
+\tzarc [blue,->] <2,1>(1,1)(-45:180:1){A-shifted}[r]
+\tzarc'[dashed,->]<2,1>(1,1)(-45:180:1)
+\end{tikzpicture}
+\end{tzcode}
+
+You can also extend the path of |\tzarc| by specifying the last option |<code.append>| with \Tikz\ code written in it. For example, |<--cycle>| makes a closed path.
+
+
+\begin{tzcode}{.3}
+% \tzarc('): <code.append>
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzarc [blue,->](1,1)(-45:180:1)<--++(1,2)>
+\tzarc'[dashed,->] (1,1)(-45:180:1)
+\tzarc [blue,->] <2,1>(1,1)(-45:180:1)<--cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{Elliptical arcs}
+\label{ss:ellipticalarc}
+
+|\tzarc| draws an elliptical arc if you specify |x-radius| and |y-radius|.
+
+\begin{tzcode}{.3}
+% \tzarc: elliptical
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzarc[->,red](1,1)(30:270:1.5 and 0.5)
+\tzarc'[->,dotted](1,1)(30:270:1.5 and 0.5)
+\tzdots*(1,1)(2,2);
+\tzarc[->,blue,dashed](2,2)(0:-270:1 and 2)
+\tzarc'[->](2,2)(0:-270:1 and 2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzarc: elliptical
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzarc[->,red](1,1)(30:270:1.5 and 0.5)
+\tzdots*(1,1)(2,2);
+\tzarc[->,blue,dashed,fill=green,fill opacity=.3]
+ (2,2)(0:-270:1 and 2)<--(2,2)> % code.append
+\tzarc[->,blue,dashed]
+ <1,0>(2,2)(0:-270:1 and 2) % shift
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzarcfrom(')}: Arcs as in \Tikz}
+\label{s:tzarcfrom}
+
+\icmd{\tzarcfrom} draws an arc starting from a point, like \Tikz\ does.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzarcfrom(<coor>)(<angA:angB:radius>)
+% syntax: full
+\tzarcfrom[<opt>]<shift coor>"<path name>"
+ (<coor>)(<angA:angB:radius>){<text>}[<node opt>]<code.append>
+% defaults
+ []<>""(<m>)(<m>){}[]<>
+\end{tzdef}
+
+
+\begin{tztikz}{}
+\tzarcfrom(1,1)(30:120:1) % works like:
+ \draw (1,1) arc (30:120:1);
+\end{tztikz}
+
+\xem{Everything else is the same as in }|\tzarc|.
+
+\icmd{\tzarcfrom'} is the \iisw{swap version} of |\tzarcfrom|.
+
+
+\begin{tzcode}{.3}
+% \tzarcfrom
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots*(1,1)(3,2);
+\tzarcfrom [blue,->] (1,1)(-45:180:1){A}[r]
+\tzarcfrom'[dashed,->](1,1)(-45:180:1)
+\tzarcfrom[->] (3,2)(-45:180:1){arc}[midway,sloped]
+\tzarcfrom'[dashed,->](3,2)(-45:180:1)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzarcsfrom}: Connected arcs: Semicolon version}
+\label{s:tzarcsfrom}
+
+\icmd{\tzarcsfrom} accepts an arbitrary number of |(<angA:AngB:radius>)| following the start coordinate. You need to enter a \xem{semicolon} to indicate when the repetition ends.
+
+\begin{tzdef}{}
+% syntax
+\tzarcsfrom[<opt>]<shift coor>"<path name>"(<start coor>)
+ (<angA:angB:radius>){<text>}[<node opt>]
+ ..repeated..(){}[] ; <code.append>
+% defaults
+ []""(<m>)(<m>){}[]..repeated..(){}[];<>
+\end{tzdef}
+
+
+\begin{tzcode}{.4}
+% \tzarcfrom: adding text, <code.append>
+\begin{tikzpicture}
+\edef\x{atan(2/3)}
+\tzhelplines(4,4)
+\tzcoor*(3,2)(A)
+\tzarcsfrom[->,auto](A)
+ (0:180:1){1}[midway]
+ (180:360:1.2){2}[midway]
+ (0:180:1.4){3}[midway,swap]
+ (180:360:1.6){4}[midway,swap];
+ < node [right,blue] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\begin{tzcode}{.4}
+% \tzarcfrom: shift
+% flag: step 1
+\begin{tikzpicture}
+\tzhelplines(-2,-2)(2,2)
+\tzdot*(0,0)
+\edef\x{atan(2/3)}
+\tzarcsfrom[red,->](0,0)
+ (-\x:-\x-180:1){red 1}[midway];
+\tzarcsfrom[blue,->](0,0)
+ (180-\x:-\x:1){blue 1}[midway];
+\tzarcsfrom[dashed,->]<.5,.5>(0,0)
+ (180-\x:-\x:1){blue 1}[midway];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.4}
+% flag: step 2
+\begin{tikzpicture}
+\edef\x{atan(2/3)}
+\tzarcsfrom[red](0,0)
+ (-\x:-\x-180:1){1}[midway]
+ (-\x+180:-\x:2){2}[midway];
+\tzarcsfrom[blue](0,0)
+ (180-\x:-\x:1){1}[midway]
+ (-\x:-\x-180:2){2}[midway];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.4}
+% flag: step 3
+\definecolor{flagred}{RGB}{205,48,57}
+\definecolor{flagblue}{RGB}{17,73,156}
+\begin{tikzpicture}[scale=1]
+\edef\x{atan(2/3)}
+\tzarcsfrom[draw=none,fill=flagred](0,0)
+ (-\x:-\x-180:1)
+ (-\x+180:-\x:2);
+ (-\x:-\x+180:1);<-- cycle>
+\tzarcsfrom[draw=none,fill=flagblue](0,0)
+ (180-\x:-\x:1)
+ (-\x:-\x-180:2)
+ (-\x+180:-\x+360:1);<-- cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{Wedges}
+\label{s:wedges}
+
+\subsection{\protect\cmd{\tzwedge(')}}
+\label{ss:tzwedge}
+
+\icmd{\tzwedge} draws a wedge around a specified center coordinate.
+
+|\tzwedge| works similarly to |\tzarc|, but it forms a closed path from the center coordinate.
+
+\begin{tzdef}{}
+% syntax
+\tzwedge[<opt>]<shift coor>"<path name>"
+ (<coor>)(<angA:angB:radius>){<text>}[<pos>]
+% defaults
+ []<>""(<m>)(<m>){}[midway]
+\end{tzdef}
+
+\begin{tzdef}{}
+% syntax
+\tzwedge*[<opt>]<shift coor>"path name"(<coor>)(<angA:angB:radius>)
+ {<text>}[<pos>]{<fill opacity>}
+% defaults
+ []<>""(<m>)(<m>){}[midway]{.3}
+\end{tzdef}
+
+\begin{tztikz}{}
+\tzwedge(1,1)(30:120:1) % works like:
+ \draw (1,1) -- ++(30:1) arc (30:120:1) -- cycle;
+\end{tztikz}
+
+The \iisw{swap version} \icmd{\tzwedge'} switches the drawing direction from \ixxw{counterclockwise} to \ixxw{clockwise} and vice versa.
+
+
+\begin{tztikz}{}
+\tzwedge'(1,1)(30:120:1) % works like:
+ \draw (1,1) -- ++(30:1) arc (30:120-360:1) -- cycle;
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzwedge, \tzwedge'
+\begin{tikzpicture}
+\tzcoor*(2,1)(A)(3pt)
+\tzhelplines(4,3)
+\tzwedge[blue,very thick](A)(30:120:1.5)
+\tzarc[->,green] (A)(30:120:1.3)
+\tzwedge'[dashed](A)(0:135:1.5){clockwise}[sloped,red]
+\tzarc'[->,green](A)(0:135:1.3)
+\tzwedge'[fill](A)(-60:240:1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzwedge('): shift
+\begin{tikzpicture}
+\tzcoor*(2,1)(A)
+\tzhelplines(4,3)
+\tzwedge[blue,very thick]<.1,.1>(A)(30:120:1.5) % shift
+\tzarc[->,lightgray]<.1,.1>(A)(30:120:1.3) % shift
+\tzwedge'[dashed](A)(0:135:1.5){clockwise}[sloped,red]
+\tzarc'[->,lightgray](A)(0:135:1.3)
+\tzwedge'[fill]<2,0>(A)(-60:240:1) % shift
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+\subsection{\protect\cmd{\tzwedge*(')}}
+\label{ss:tzwedge*}
+
+\icmd{\tzwedge*} works just like |\tzwedge|, but it fills wedges with |black!50| with |fill opacity=.3|, by default.
+You can change the defaults with |\settzfillcolor| and |\settzfillopacity|.
+
+\begin{tzdef}{}
+% syntax
+\tzwedge*[<opt>]<shift coor>"<path name>"
+ (<coor>)(<angA:angB:radius>){<text>}[<pos>]
+% defaults
+ [fill=black!50,fill opacity=.3]<>""(<m>)(<m>){}[midway]
+\end{tzdef}
+
+\icmd{\tzwedge*'} is the \iisw{swap version} of |\tzwedge*|.
+
+\begin{tzcode}{.3}
+% \tzwedge*, \tzwedge*'
+\begin{tikzpicture}[->,>=stealth]
+\tzhelplines(3,3)
+\tzwedge[very thick,blue](1,1)(30:120:1.5)
+\tzwedge*[-,very thick,blue,fill=red](1,1)(30:120:1)
+\tzwedge'[dashed](1,1)(30:120:1.5){clockwise}[pos=.45]
+\tzwedge*'[dashed,fill=green](1,1)(-90:180:1)
+\tzdot*(1,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzwedge*('): shift
+\begin{tikzpicture}
+\tzdot*(1,1)
+\tzhelplines(3,3)
+\tzwedge[blue,very thick](1,1)(30:120:1.5)
+\tzwedge[red,very thick]<.5,.5>(1,1)(30:120:1.5)
+\tzwedge'[dashed](1,1)(0:135:1.5)
+\tzwedge*[fill=blue](1,1)(300:240:1){B}[b]
+\tzwedge*[fill=red]<2,0>(1,1)(300:240:1){B}[b]
+\end{tikzpicture}
+\end{tzcode}
+
+
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc-D-v1.0.tex b/graphics/pgf/contrib/tzplot/tzplot-doc-D-v1.0.tex
new file mode 100644
index 0000000000..3f76a7cb3e
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc-D-v1.0.tex
@@ -0,0 +1,1792 @@
+%!TEX root = tzplot-doc.tex
+%\begin{document}
+
+%%%==========================
+\part{Plotting Graphs}
+%%%==========================
+\label{p:plotting}
+
+
+%%==================================
+\chapter{Axes}
+\label{c:axes}
+
+%%------------------------------------------------------------
+\section{Draw axes}
+\label{s:tzaxes}
+
+\subsection{\protect\cmd{\tzaxes}}
+\label{ss:tzaxes}
+
+Basically, \cmd{\tzaxes}|(<x1,y1>)(<x2,y2>)| draws the $x$ axis from |<x1>| to |<x2>| and the $y$ axis from |<y1>| to |<y2>|.
+The coordinate |(<x1,y1>)| represents the origin and |(<x2,y2>)| represents the opposite corner of the rectangle.
+
+|\tzaxes| takes only one coordinate |(<x2,y2>)| as a mandatory argument, in which case |(<x1,y1>)| is considered as |(0,0)|.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzaxes(<x2,y2>){<x-axis name>}{<y-axis name>}
+% syntax: full
+\tzaxes[<opt>]<x-shift,y-shift>(<x1,y1>)(<x2,y2>)
+ {<x-axis label>}[<node opt>]{<y-axis name>}[<node opt>]
+% defaults
+ [->]<0,0>(0,0)(<m>){}[right]{}[above]
+% arguments
+ [#1]: line style, arrow type (for x-axis & y-axis)
+ <#2>: axes shift coor %% axes intersect at (#2)
+ (#3): (x1,y1) %% origin: if omitted, regarded as (0,0)
+ (#4): (x2,y2) %% opposite corner: mandatory
+ {#5}: x-axis name
+ [#6]: x-axis name option %% node option
+ {#7}: y-axis name
+ [#8]: y-axis name option %% node option
+\end{tzdef}
+
+Here, |(|\ixxw{<m>}|)| stands for a mandatory argument.
+
+\begin{tzcode}{.3}
+% tzaxes
+\begin{tikzpicture}[scale=.7]
+\tzhelplines(3,3)
+\tzaxes(3,3){$x$}{$y$}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+By default, the $x$ and $y$ axes intersect at $(0,0)$.
+Specifying the option |<x-shift,y-shift>| moves the axes to intersect at $(\text{\ttfamily<x-shift,y-shift>})$.
+
+
+\begin{tzcode}{.3}
+% \tzaxes: shift
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(7,7)
+\tzshoworigin*
+\tzaxes[thick,blue]<1,2>(7,7){$x$}{$y$}
+\tzaxes[-,dashed](7,7){$X$}[below]{$Y$}[left]
+\tzaxes<6,1>(6,1)(3,6){$a$}[left]{$b$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzaxes*}}
+\label{ss:tzaxes*}
+
+The starred version \icmd{\tzaxes*} sets the current state to a \iisw{bounding box} when |\tzaxes| is executed. It is recommended for you to use |\tzaxes*| as the first graphics command in |tikzpicture| environment or before any larger graphics.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzaxes*(8,5){$x$}{$f(x)$} % bounding box
+\tzhelplines(-2,-1)(10,8)
+\tzto[out=90,in=-135,dashed](-2,8)(12,-2)
+\tzbezier[blue](-1,-1)(3,-2)(7,12)(10,10)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzaxisx} and \protect\cmd{\tzaxisy}}
+\label{s:tzaxisx}
+
+\icmd{\tzaxisx} draws only the $x$ axis.
+
+\begin{tzdef}{}
+% syntax
+\tzaxisx[<opt>]<y-shift>{<from>}{<to>}{<x-axis name>}[<node opt>]
+% defaults
+ [->]<0>{<m>}{<m>}{}[right]
+% arguments:
+ [#1]: line style, arrow type (for x-axis)
+ <#2>: y-shift of x-axis
+ {#3}: x-axis starts from %% mandatory
+ {#4}: x-axis runs to %% mandatory
+ {#5}: x-axis name
+ [#6]: x-axis name option %% node option
+\end{tzdef}
+
+\icmd{\tzaxisy} draws only the $y$ axis.
+
+\begin{tzdef}{}
+% syntax
+\tzaxisy[<opt>]<x-shift>{<from>}{<to>}{<y-axis name>}[<node opt>]
+% defaults
+ [->]<0>{<m>}{<m>}{}[above]
+% arguments:
+ [#1]: line style, arrow type (for y-axis)
+ <#2>: x-shift of y axis
+ {#3}: y-axis starts from %% mandatory
+ {#4}: y-axis runs to %% mandatory
+ {#5}: y-axis name
+ [#6]: y-axis name option %% node option
+\end{tzdef}
+
+
+
+\begin{tzcode}{.3}
+% \tzaxisx, \tzaxisy
+\begin{tikzpicture}[scale=.5]
+\tzshoworigin
+\tzhelplines(5,5)
+\tzaxisx[blue]{-1}{5}{$xx$}
+\tzaxisy[red] {-1}{5}{$yy$}[green]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\begin{tzcode}{.3}
+% \tzaxisx, \tzaxisy: shift
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(7,7)
+\tzshoworigin
+\tzaxisx{-1}{7}{$xx$}[near end,below]
+\tzaxisy{-1}{7}{$yy$}[midway,sloped,auto]
+\tzaxisx[-,dashed,red]<2>{-1}{7}{$xx'$}[blue]
+\tzaxisy[-,dashed,blue]<3>{-1}{7}{$yy'$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Display the origin}
+\label{s:tzshoworigin}
+
+\subsection{\protect\cmd{\tzshoworigin}}
+\label{ss:tzshoworigin}
+
+
+\icmd{\tzshoworigin} prints `0' (approximately) at the bottom left of the origin |(0,0)|, by default.
+
+\begin{tzdef}{}
+% syntax
+\tzshoworigin<shift coor>(<origin>){<text>}[<node opt>]
+% default
+ <>(0,0)<>{0}[below left,text height=1.25ex,text depth=.25ex]
+\end{tzdef}
+
+All arguments of |\tzshoworigin| are optional.
+
+\begin{tzcode}{.3}
+% \tzshoworigin
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,5)
+\tzshoworigin
+\tzaxes(8,5)
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the text by specifying the curly brace option |{<text>}|, like, for example, |\tzshoworigin{$O$}|.
+You can also change the coordinate of origin by the option |(<origin>)|.
+Specifying the option |<shift coor>| also moves the origin.
+
+
+\begin{tzcode}{.3}
+% \tzshoworigin
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-2,-1)(8,6)
+\tzshoworigin{$O_1$}
+\tzaxes(8,6){$x$}{$y$}
+\tzshoworigin<2,1>{$O_2$}[red]
+\tzaxes[dashed]<2,1>(8,6)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzshoworigin*}}
+\label{ss:tzshoworigin*}
+
+
+\icmd{\tzshoworigin*} prints a node dot at the origin with no text by default.
+Internally the dot is processed by |\tzdot*|. All arguments are optional.
+
+\begin{tzdef}{}
+% syntax
+\tzshoworigin*[<dot opt>]<shift coor>(<origin>){<text>}[<node opt>](<dotsize>)
+% default
+ *[]<>(0,0)<>{}[below left,text height=1.25ex,text depth=.25ex](2.4pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzshoworigin*
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-2,-1)(6,4)
+\tzshoworigin*
+\tzaxes(-2,-1)(6,4)
+\end{tikzpicture}
+\end{tzcode}
+
+You can add text with the option |{<text>}|.
+The default size of the dot is |2.4pt|, and it can be changed it with the last option |(<dot size)|. You can change the dot style using the first optional argument |[<dot opt>]|.
+You can also move the dot by specifying the option |<shift coor>|.
+
+\begin{tzcode}{.3}
+% \tzshoworigin*
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(7,7)
+\tzshoworigin*[blue]{$o_1$}[red](5pt)
+\tzaxes(-1,-1)(7,7){$x$}{$y$}
+\tzaxes<6,4>(6,4)(1,1){$x'$}[left]{$y'$}[below]
+\tzshoworigin*[fill=none]<6,4>{$O'$}[blue,ar](3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+For |\tzshoworigin*|, text for the origin and the dot are placed independently. In other words, the position of node text does not depend on the size of a node dot.
+(In fact, the node text for the origin should look good with the `ticks', so it was not designed as a |label| for the node dot. This also means that the origin text cannot be positioned by an |<angle>|.)
+
+
+\begin{tzcode}{.3}
+% \tzshoworigin* (with ticks)
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-2,1)(6,5)
+\tzshoworigin*{0}(5pt)
+\tzaxes(-2,-1)(6,5){$x$}{$y$}
+\tzticks{1,...,5}{1,...,4}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzaxesL(')}: L-type axes}
+\label{s:tzaxesL}
+
+\icmd{\tzaxesL} is similar to |\tzaxes|, but it draws only the `L' type axes with |(<x1,y1>)| as the origin and |(<x2,y2>)| as the opposite corner of the rectangle.
+Those two coordinates are mandatory.
+
+\begin{tzdef}{}
+% syntax
+\tzaxesL[<opt>]<shift coor>(<x1,y1>)(<x2,y2>)
+ {<x-axis name>}[<node opt>]{<y-axis name>}[<node opt>]
+% defaults
+ []<>(<m>)(<m>){}[right]{}[above]
+% arguments:
+ [#1]: line style, arrow type
+ <#2>: shift coordinate
+ (#3): (x1,y1) %% mandatory
+ (#4): (x2,y2) %% mandatory
+ {#5}: x-axis name
+ [#6]: x-axis name option %% node option
+ {#7}: y-axis name
+ [#8]: y-axis name option %% node option
+\end{tzdef}
+
+The swap version \icmd{\tzaxesL'} swaps |(x1,y1)| and |(x2,y2)| from |\tzaxesL|.
+That is, |\tzaxesL'(A)(B)| is equivalent to |\tzaxesL(B)(A)|.
+
+\begin{tzcode}{.3}
+% \tzaxesL, \tzaxesL'
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,7)
+\tzshoworigin
+\tzaxes(8,7){$x$}{$y$}
+\tzaxesL[red,thick](2,2)(6,5){$a$}{$b$}
+\tzaxesL'[blue,dashed,->](2,2)(6,5){$c$}{$d$}
+\tzaxesL'[->](7,1)(4,7){m}[draw,r]{n}[draw,circle]
+\end{tikzpicture}
+\end{tzcode}
+
+The option |<shift coor>| moves the whole L-type axes.
+
+\begin{tzcode}{.3}
+% \tzaxesL, \tzaxesL': shift
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,7)
+\tzshoworigin
+\tzaxes(8,7){$x$}{$y$}
+\tzaxesL[red,thick](2,2)(6,5){$a$}{$b$}
+\tzaxesL[red,thick]<.5,.5>(2,2)(6,5){$a'$}{$b'$}
+\tzaxesL'[blue,dashed,->](2,2)(6,5){$c$}{$d$}
+\tzaxesL'[blue,dashed,->]<-1,-1>(2,2)(6,5){$c'$}{$d'$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%==================================
+\chapter{Ticks}
+\label{c:ticks}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzticks}: Tick labels}
+\label{s:tzticks}
+
+By default, \icmd{\tzticks} prints tick labels and draw zero length tick marks, i.e. from |(0pt)| to |(0pt)|.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzticks{<x-ticks pos>}{<y-ticks pos>}
+% syntax: medium
+\tzticks(<x-from:x-to>){<x-ticks pos/labels>}[<node opt>]
+ (<y-from:y-to>){<y-ticks pos/labels>}[<node opt>]
+% syntax: full
+\tzticks[<opt>]<x-shift,y-shift>
+ (<x-from:x-to>){<x-ticks pos/labels>}[<node opt>]
+ (<y-from:y-to>){<y-ticks pos/labels>}[<node opt>]
+% defaults
+ []<0,0>(0pt:0pt){<m>}[text height=1.25ex,text depth=.25ex,below](0pt:0pt){}[left]
+\end{tzdef}
+
+\paragraph{Tick labels}
+Internally, |\tzticks| uses \Tikz's |foreach| operation.
+So you need to provide comma separated lists to print tick labels.
+If only one comma separated is used, it is for $x$ tick labels.
+
+\begin{tzcode}{.3}
+% \tzticks
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzaxes(-1,-1)(10,10)
+\tzticks[blue]{1,...,8}{2,...,7}
+\end{tikzpicture}
+\end{tzcode}
+
+You change the numbered labels to a different format slashes and other text, as follows: |<number>/<other text>|.
+
+\begin{tzcode}{.3}
+% \tzticks: tick labels
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzaxes(-1,-1)(10,10)
+\tzticks{1/$x_1$,2,5/$x_2$,8/$x_3$}[blue]
+ {2/$\sqrt{x}$,3/y,4/m,5,7/$k$}[red]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Tick marks}
+To prints tick marks you need to specify |(<x-from:x-to>)| for $x$ ticks and/or |(<y-from:y-to>)| for $y$ ticks. (The default is |(0pt:0pt)|.)
+
+\begin{tzcode}{.3}
+% \tzticks: tick marks
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzshoworigin
+\tzaxes(-1,-1)(10,10)
+\tzticks[draw=red,thick]
+ (-5pt:10pt){1,...,7,8/$\alpha$}
+ (0pt:3cm){2,...,6,7/$\beta$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift}
+The position of tick labels does not depend on the length of the tick marks.
+To change the position, use the option |<x-shift,y-shift>|, where |<x-shift>| is for |y-ticks| and |<y-shift>| is for |x-ticks|.
+
+\begin{tzcode}{.3}
+% \tzticks: shift
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzshoworigin
+\tzaxes(-1,-1)(10,10)
+\tzaxes[dashed]<4,2>(-1,-1)(10,10)
+\tzticks[draw=red]<4,2>
+ (-5pt:10pt){5,...,8}
+ (0pt:3cm){3,...,7}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzticks*}: Tick marks}
+\label{s:tzticks*}
+
+The starred version \icmd{\tzticks*} always ignores all tick labels and draws tick marks from |0pt| to |3pt|, by default.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzticks*{<x-ticks pos>}{<y-ticks pos>}
+% syntax: medium
+\tzticks*(<x-from:x-to>){<x-ticks pos>}(<y-from:y-to>){<y-ticks pos>}
+% syntax: full
+\tzticks*[<opt>]<x-shift,y-shift>
+ (<x-from:x-to>){<x-ticks pos/labels>}(<y-from:y-to>){<y-ticks pos/labels>}
+% defaults
+ []<0,0>(0pt:3pt){<m>}(0pt:3pt){}
+% starred(*) version always ignores tick labels
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzticks*
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzshoworigin
+\tzaxes(-1,-1)(10,10)
+\tzticks*[draw=red,thick]
+ {1,...,7,8/$\alpha$} % label ignored
+ (0pt:3cm){2,...,6,7/$\beta$} % label ignored
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.5}
+% \tzticks*
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(10,8)
+\tzaxes(-1,-1)(10,8)
+\tzticks*{0,0.2,...,8}
+ {0,0.2,...,7} % default
+\tzticks*(0pt:10pt){1,...,8}
+ (0pt:10pt){1,...,7}
+\tzticks{1,...,8}{2,...,7}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzticksx(*)} and \protect\cmd{\tzticksy(*)}}
+\label{s:tzticksx}
+
+You can handle $x$ ticks and $y$ ticks independently.
+
+\paragraph{X ticks}
+
+\icmd{\tzticksx} only prints x-tick labels but not tick marks, by default.
+To prints tick marks you need to specify |(<x-from>:<x-to>)|.
+
+\begin{tzdef}{}
+% syntax
+\tzticksx[<opt>]<y-shift>(<from>:<to>){<x-tick pos/labels>}[<node opt>]
+% defaults
+ []<>(0pt:0pt){<m>}[text height=1.25ex,text depth=.25ex,below]
+\end{tzdef}
+
+
+\icmd{\tzticksx*} only prints x-tick marks from |0pt| to |3pt|, by default, suppressing tick labels.
+
+\begin{tzdef}{}
+% syntax:
+\tzticksx*[<opt>]<y-shift>(<from>:<to>){<xtick pos>}
+% defaults
+ *[]<>(0pt:3pt){<m>}
+% starred(*) version always suppresses tick labels
+\end{tzdef}
+
+
+\paragraph{Y ticks}
+
+\icmd{\tzticksy} only prints y-tick labels but not tick marks, by default.
+To prints tick marks you need to specify |(<x-from>:<x-to>)|.
+
+\icmd{\tzticksy*} only prints y-ticks from |0pt| to |3pt| by default, suppressing tick labels.
+
+\begin{tzdef}{}
+% syntax:
+\tzticksy[<opt>]<x-shift>(<from:to>){<y-ticks pos/labels>}[<node opt>]
+% defaults
+ []<>(0pt:0pt){<m>}[]
+\end{tzdef}
+
+\begin{tzdef}{}
+% syntax
+\tzticksy*[<opt>]<x-shift>(from:to){<yticks pos>}
+% defaults
+ []<>(0pt:0pt){<m>}
+% starred(*) version suppresses tick labels
+\end{tzdef}
+
+
+\begin{tzcode}{.3}
+% \tztickx(*), \tzticky(*)
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzshoworigin
+\tzaxes(-1,-1)(10,10)
+\tzticksx [draw=red,thick]
+ (-5pt:1cm){1,...,7,8/$\alpha$}
+\tzticksy*[draw=blue,thick]
+ (0pt:3cm){2,...,6,7/$\beta$} % labels ignored
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+The options |<y-shift>| and |<x-shift>| move x-ticks and y-ticks, respectively.
+
+\begin{tzcode}{.3}
+% \tztickx(*), \tzticky(*): shift
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzshoworigin
+\tzaxes(-1,-1)(10,10)
+\tzaxes[dashed]<2,1>(-1,-1)(10,10)
+\tzticksx*[draw=red,thick]
+ <1>(-5pt:10pt){1,...,7,8/$\alpha$} % labels ignored
+\tzticksy [draw=blue,thick]
+ <2>(0pt:3cm){2,...,6,7/$\beta$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%==================================
+\chapter{Projections}
+\label{c:projections}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzproj(*)}}
+\label{s:tzproj}
+
+\icmd{\tzproj} accepts a mandatory coordinate and draws perpendicular lines onto each axis from the coordinate. The lines are |dotted|, by default.
+
+\begin{tzdef}{}
+% syntax: minimum
+ \tzproj(<coor>)
+% syntax: medium
+ \tzproj*(<coor>){<x-text>}[<node opt>]{<y-text>}[<node opt>]
+% syntax:
+ \tzproj*[<opt>]<x-shift,y-shift>(<coor>)
+ {<x-text>}[<node opt>]{<y-text>}[<node opt>](<dot size>)
+% defaults
+ *[]<0,0>(<m>){}[text height=1.25ex,text depth=.25ex,below]{}[left](2.4pt)
+\end{tzdef}
+
+\icmd{\tzproj*} additionally prints a black node dot of the size |2.4pt|, by default.
+
+\paragraph{Dot size}
+You can only control the size of by |(<dot size>)| or by the \threeways\ on page \pageref{ss:threeways}.
+If you want to control |fill| or |color|, use |\tzdot*|.
+
+\begin{tzcode}{.3}
+%\tzproj(*)
+\begin{tikzpicture}[scale=.5]
+\tzaxes(8,6)
+\tzproj[dashed,blue](2,3)
+\tzcoors(30:7)(A)(50:6)(B);
+\tzproj*(A)
+\tzproj*[dashed,text=blue](B)(5pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Adding text}
+You can also add text around the projection point on each axis by the option |{<text>}|.
+The position and color of the text is controlled by the option |[<node option>]|.
+The default position is (approximately) |[below]| for the x axis and |[left]| for the y axis.
+
+
+\begin{tzcode}{.3}
+% \tzproj(*): adding text
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(8,6)
+\tzproj[dashed,blue](2,3){$x$}{$y$}
+\tzcoors(30:7)(A)(50:6)(B);
+\tzproj*[text=blue](A){$a_1$}{$a_2$}
+\tzproj*[dashed](B){$x^*$}[green]{$y^*$}[red]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Projection shift}
+Specifying the option |<x-shift,y-shift>| moves the projection point and text on each axis.
+
+\begin{tzcode}{.3}
+% \tzproj(*): projection shift
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(8,6)
+\tzproj[dashed,blue](2,3){$x$}{$y$}
+\tzcoors(30:7)(A)(50:6)(B);
+\tzaxes[blue]<3,1>(8,6)
+\tzproj*[dashed,text=blue]<3,1>(A){$a_1$}{$a_2$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzprojx(*)} and \protect\cmd{\tzprojy(*)}}
+\label{s:tzprojx}
+
+\icmd{\tzprojx} draw a dotted line, which is perpendicular to the x axis.
+
+\icmd{\tzprojx*} additionally prints a black node dot of the size |2.4pt|, by default.
+
+
+\begin{tzdef}{}
+% syntax:
+ \tzprojx[<opt>]<x-shift,y-shift>(<coor>){<x-text>}[<node opt>](<dot size>)
+% defaults
+ []<0>(<m>){}[text height=1.25ex,text depth=.25ex,below](2.4pt)
+\end{tzdef}
+
+
+\icmd{\tzprojy} draws a dotted line, which is perpendicular to the y axis.
+
+\icmd{\tzprojy*} additionally prints a black node dot of the size |2.4pt|, by default.
+
+\begin{tzdef}{}
+% syntax:
+ \tzprojy[<opt>]<x-shift,y-shift>(<coor>){<y-text>}[<node opt>](<dot size>)
+% defaults
+ []<0>(<m>){}[left](2.4pt)
+\end{tzdef}
+
+
+You can only control the size of by |(<dot size>)|.
+If you want to control |fill| or |color|, use |\tzdot*|.
+You can also add text around the projection point on each axis by specifying the option |{<x-text>}| or |{<y-text>}| followed by the option |[<node option>]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(-1,-2)(6,6)
+\tzshoworigin
+\tzaxes(-1,-1)(6,6)
+\tzproj*[dashed](4,5){4}{5}(3pt)
+\tzprojx*[green,thick,solid](3,4){$x=3$}[blue]
+\tzprojy*[thick](5,2){2}(5pt)
+\end{tikzpicture}
+\end{tzcode}
+
+Specifying the option |<x-shift,y-shift>| with |\tzprojx(*)| and |\tzprojy(*)| moves the projection point and text accordingly.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(-1,-2)(6,6)
+\tzshoworigin
+\tzaxes(-1,-1)(6,6)
+\tzaxes[blue]<2,1>(-1,-1)(6,6)
+\tzprojx*[green,thick,solid]<2,1>(3,4){$x=3$}[blue]
+\tzprojy*[thick]<2,1>(5,2){2}(5pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%==================================
+\chapter{Plot Functions}
+\label{c:functions}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzfn}: Plot functions}
+\label{s:tzfn}
+
+\subsection{Syntax}
+\label{ss:tzfn}
+
+\icmd{\tzfn} plots a function of |\x|.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzfn{<fn of \x>}[<domain>]
+% syntax: medium
+\tzfn{<fn of \x>}[<domain>]{<text>}[<pos>]
+% syntax
+\tzfn[<opt>]<shift coor>"<path name>"
+ {<fn of \x>}[<domain>]{<text>}[<node opt>]<code.append>
+% [<domain>] should be of the form [<from num:to num>]
+% defaults
+ [samples=200]<>""{<m>}[<m>]{}[]<>
+\end{tzdef}
+
+|\tzfn| takes two mandatory arguments: |{<fn of \x>}| and |[<domain>]|.
+The domain should be of the form |[<from num:to num>]|, like |[1:5]|.
+
+\begin{tztikz}{}
+\tzfn{2*\x+1}[1:5] % works like:
+ \draw [samples=200,domain=1:5] plot (\x,{2*\x+1});
+\end{tztikz}
+
+
+\subsection{Define and name functions}
+
+To use |\tzfn| you need to express a function as a function of |\x|.
+You can add text (as a function name) at the end of the graph,
+by specifying |{<text>}| and |[<node opt>]| immediately after the domain.
+
+\begin{tzcode}{.3}
+% \tzfn
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,8)
+\tzaxes(8,8)
+\def\Dx{7-2/3*\x}
+\tzfn{\Dx}[0:7]{$D$}[r]
+\tzfn{1+\x}[0:7]{$S$}[blue,r]
+\end{tikzpicture}
+\end{tzcode}
+
+You can also use the predefined functions of \Tikz such as |sin|, |cos|, |ln|, |log10|, |log2|, |exp|, |sqrt|, and so on. (See \Tikz\ manual.)
+
+\begin{tzcode}{.3}
+% \tzfn
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-2,-2)(8,6)
+\tzaxes*(-2,-2)(8,6)
+\def\Fx{sin(\x r)+3}
+\def\Gx{exp(\x)}
+\def\Hx{ln(\x)}
+\tzfn\Fx[-2:2*pi]{$\sin\,x+3$}[blue,r]
+\tzfn[blue]\Gx[-2:2]{$e^x$}[red,r]
+\tzfn[dashed]\Hx[.2:7]{$\ln\,x$}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Name paths: \texttt{name path}}
+
+You can name the path of |\tzfn| by specifying the option |"<path name>"| immediately before the mandatory argument |{<fn of \x>}|. You can use the path name to find intersection points.
+
+\begin{tztikz}{}
+\tzfn"mypath"\Fx[1:5] % works like:
+ \draw [samples=200,,domain=1:5,name path=mypath] plot (\x,{\Fx}};
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzfn: name path: intersection point
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,8)
+\tzaxes(8,8)
+\def\Dx{7-2/3*\x}
+\def\Sx{1+\x}
+\tzfn"Dx"\Dx[0:7]{$D$}[r]
+\tzfn"Sx"\Sx[0:7]{$S$}[blue,r]
+\tzXpoint*{Dx}{Sx}(E){E}
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+Suppose that the mandatory argument |<fn of \x>| is represented by a macro name only, say |\Fx|. Then
+\begin{itemize}
+\item The name |Fx| (without the backslash) of the macro can be used as |<path name>|, unless you specify another name.
+\item That is, |\tzfn\Fx| is equivalent to |\tzfn"Fx"\Fx|.
+(You don't need to type the same thing twice.)
+\begin{tztikz}{}
+\tzfn\Fx[1:5] % works like:
+ \draw [samples=200,domain=1:5,name path=Fx] plot (\x,{\Fx});
+\end{tztikz}
+\end{itemize}
+
+\subsection{Move graphs: \texttt{shift}}
+
+You can move the graph of |\tzfn| by specifying the option |<shift coor>| before the mandatory argument |{<fn of \x>}| or immediately after the option |"<path name">|, if any.
+
+\begin{tzcode}{.3}
+% \tzfn: shift
+\begin{tikzpicture}[scale=.6]
+\tzhelplines(8,8)
+\def\Dx{7-2/3*\x}
+\def\Sx{1+\x}
+\tzfn \Dx[0:7]{$D$}[right] % name path = Dx
+\tzfn"supply"\Sx[0:7]{$S$}[right] % name path = supply
+\tzXpoint*{Dx}{supply}(E){$E$}
+\tzfn[dashed]<1,1>"demandA"\Dx[0:7]{$D'$}[right]
+\tzfn[dashed]<1,-1>"supplyA"\Sx[0:7]{$S'$}[right]
+\tzXpoint*{demandA}{supplyA}(E1){$E'$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{Extend paths: \texttt{<code.append>}, \protect\cmd{\tzfnAtBegin}, \protect\cmd{\tzfnAtEnd}}
+\label{ss:tzfn:atbegin}
+
+\paragraph{\texttt{<code.append>}}
+You can extend the path created by |\tzfn| from the end of the graph, by writing \Tikz\ code in the \xem{last optional argument} |<code.append>|. Internally it add the \Tikz\ code after the text node |{<text>}| and |[<node opt>]|.
+
+\begin{tzcode}{.3}
+% \tzfn: <code.append>
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-2,-2)(8,6)
+\tzaxes*(-2,-2)(8,6)
+\def\Fx{sin(\x r)+3}
+\tzfn[->]\Fx[-2:2*pi]{$\sin\,x+3$}[blue,r]
+ < to [bend right] ++(2,-2) node [b] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{\bs tzfnAtEnd}}
+You can also extend the path with \icmd{\tzfnAtEnd}.
+Internally it adds \Tikz\ code immediately before the options |{<text>}| and |[<node opt>]|. But you have to use |\tzfnAtEnd| (immediately) \xem{before each} |\tzfn|.
+
+\begin{tzcode}{.3}
+% \tzfnAtEnd
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-2,-2)(8,6)
+\tzaxes*(-2,-2)(8,6)
+\def\Fx{sin(\x r)+3}
+\tzfnAtEnd{to [bend right] ++(2,-2) node [b] {End!}}
+\tzfn[->]\Fx[-2:2*pi]{$\sin\,x+3$}[blue,r]
+% < to [bend right] ++(2,-2) node [b] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{\texttt{\bs tzfnAtBegin}}
+You can use \icmd{\tzfnAtBegin} (immediately) \xem{before each} |\tzfn| to insert \Tikz\ code before the path of |\tzfn|.
+
+\begin{tzcode}{.3}
+% \tzfnAtBegin
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-2,-2)(8,6)
+\tzaxes*(-2,-2)(8,6)
+\def\Fx{sin(\x r)+3}
+\tzfnAtBegin{ (0,0) -- }
+\tzfn[->]\Fx[-2:2*pi]{$\sin\,x+3$}[blue,r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzLFn}: Plot linear functions}
+\label{s:tzLFn}
+
+
+\icmd{\tzLFn} draws a linear function: $y=ax+b$.
+
+\begin{itemize}
+\item
+When you know two coordinates on a line,
+|\tzLfn(<coor1>)(<coor2>)| draws the line.
+\item
+When you know one coordinate and the slope of a line,
+|\tzLfn(<coor1>){<slope>}| draws the line.
+\item
+If you specify all the three arguments |(<coor1>)(<coor2>){<slope>}|, then the slope is ignored.
+\end{itemize}
+
+\begin{tzdef}{}
+% syntax
+\tzLFn[<opt>]<shift coor>"<path name>"
+ (<coor1>)(<coor2>){<slope>}[<domain>]{<text>}[<node opt>]<code.append>
+% defaults
+[]<>""(<m>)(){1}[<m>]{}[]<>
+\end{tzdef}
+
+|\tzLFn| accepts two mandatory arguments: |(<coor1>)| and |<domain>|.
+\begin{itemize}
+\item The domain should be of the form |[<from num:to num>]|.
+\item If just one coordinate is specified without a slope, the slope is regarded as |1|, by default.
+\end{itemize}
+
+For example, |\tzLFn(1,1)(2,3)[0:4]| draws a line passing through two points: $(1,1)$ and $(2,3)$, over $0\leq x\leq 4$.
+|\tzdefLFn\Gx(1,1){.5}[0:4]| draws a line passing through a point $(1,1)$ with the slope |.5|, over $0\leq x\leq 4$.
+
+You can add text at the end of the line of |\tzLFn| by the options |{<text>}| and |[<node opt>]|. You can also name the path of |\tzLFn| by specifying the option |"<path name>"| immediately before the mandatory coordinate.
+
+\begin{tzcode}{.3}
+% \tzLFn
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzcoors*(1,1)(A)(1,2)(B)(3,1)(C);
+\tzLFn[red]"Fx"(A){.5}[0:4]{$f(x)$}[a]
+\tzLFn[blue]"Gx"(B)(C)[0:4]{$g(x)$}[r]
+\tzXpoint*[fill=none]{Fx}{Gx}(E){$E$}(3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+You can move the line by specifying the option |<shift coor>| immediately before |"<path name">|.
+You can also expand the path of |\tzLFn| by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzLFn: shift, expanding path
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzcoors*(1,1)(A)(1,2)(B)(3,1)(C);
+\tzLFn[blue]"Gx"(B)(C)[0:4]{$g(x)$}[r]
+\tzLFn[dashed,red,->]<1,1>"Gx"(B)(C)[0:4]{$g(x)$}[r]
+ < arc (0:140:2) node [below] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Horizontal lines}
+\label{s:tzhfn}
+
+\subsection{\protect\cmd{\tzvfnat}}
+\label{ss:tzhfnat}
+
+\icmd{\tzhfnat} draws a horizontal line at a specified value of $y$.
+
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzhfnat{<y-val>}[<domain>]
+% syntax: full
+ \tzhfnat[<opt>]<shift coor>"<path name>"{<y-val>}[<domain>]{<text>}[<pos>]<code.append>
+% defaults
+ []<>""{<m>}[left:right (of current bonding box)]{}[]<>
+\end{tzdef}
+
+|\tzhfnat| accepts only one mandatory argument |{<y-val>}|.
+The domain is optional and should be of the form |[<from num:to num>]|.
+The default domain is from left to right of the \ixxw{current bounding box}.
+
+\remark Internally, the default domain of |\tzhfn| depends on \ixxw{current bounding box}.
+\begin{itemize}
+\item Each |\tzhfnat| may draw a line with a (slightly) different length.
+\item If an appropriate |current bounding box| is not formed before |\tzhfnat| is executed, you will probably get an unexpected result.
+\item In that case, you can fix a |bounding box| in the beginning of the |tikzpicture| environment using macros such as \icmd{\tzbbox}, \icmd{\tzhelplines*}, \icmd{\tzaxes*}, or \Tikz's \icmd{\useasboundingbox}.
+\end{itemize}
+
+
+\begin{tzcode}{.3}
+% \tzhfnat
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzhfnat[blue,thick]{0}
+\tzhfnat[red,thick]{1}[1:3]{line A}[r]
+\tzhfnat[blue]{2}{line B}[r]
+\tzhfnat[red]{3}[0:3]{line C}[draw=blue,red,r]
+\end{tikzpicture}
+\end{tzcode}
+
+You can name the path of |\tzhfnat| by the option |"<path name>"|.
+You can move the line by the option |<shift coor>|.
+You can also expand the path from the end of the line by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzhfnat: shift
+\begin{tikzpicture}
+\tzhelplines*(4,4) % bonding box
+\tzfn"XX"{\x}[0:4]
+\tzhfnat[blue,thick]{0}
+\tzhfnat[red,thick]<-.5,.5>"AA"{1}[1:3]{line A'}[r]
+\tzXpoint*{AA}{XX}
+\tzhfnat[blue,->]{2}{line B}[r]
+ < arc (0:120:1.5) node [b,draw] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzhfn}}
+\label{ss:tzhfn}
+
+\icmd{\tzhfn} accepts a coordinate as a mandatory argument and draws a horizontal line at the $y$ value of the coordinate.
+For example, |\tzhfn(<x>,3)|, ignoring |<x>|, is equivalent to |\tzhfnat{3}|.
+
+\xem{Everything else is the same as in} |\tzhfnat|.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzhfn(<coor>)[<domain>]
+% syntax: full
+ \tzhfn[<opt>]<shift coor>"<path name>"(<coor>)[<domain>]{<text>}[<pos>]<code.append>
+% defaults
+ []<>""{<m>}[left to right of current bonding box]{}[]<>
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzhfn: shift
+\begin{tikzpicture}
+\tzhelplines*(4,4) % bonding box
+\tzcoors(0,1)(A)(0,2)(B);
+\tzfn"XX"{\x}[0:4]
+\tzhfn[blue,thick](5,0) % x=5 ignored
+\tzhfn[red,thick]<-.5,.5>"AA"(A)[1:3]{line A'}[r]
+\tzXpoint*{AA}{XX}
+\tzhfn[blue,->](B){line B}[r]
+ < arc (0:120:1.5) node [b,draw] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+
+%%------------------------------------------------------------
+\section{Vertical lines}
+\label{s:tzvfn}
+
+\subsection{\protect\cmd{\tzvfnat}}
+\label{ss:tzvfnat}
+
+\icmd{\tzvfnat} draws a vertical line at a specified value of $x$.
+
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzvfnat{<x-val>}[<domain>]
+% syntax: full
+ \tzvfnat[<opt>]<shift coor>"<path name>"{<x-val>}[<domain>]{<text>}[<pos>]<code.append>
+% defaults
+ []<>""{<m>}[bottom:top (of current bonding box)]{}[]<>
+\end{tzdef}
+
+|\tzvfnat| accepts only one mandatory argument |{<x-val>}|.
+The domain is optional and should be of the form |[<from num:to num>]|.
+The default domain is from bottom to top of the \ixxw{current bounding box}.
+
+
+\begin{tzcode}{.3}
+% \tzvfnat
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzvfnat[blue,thick]{0}
+\tzvfnat[red,thick]{1}[1:3]{line A}[a]
+\tzvfnat[blue]{2}{line B}[a]
+\tzvfnat[red]{3}[0:3]{line C}[draw=blue,red,a]
+\end{tikzpicture}
+\end{tzcode}
+
+You can name the path of |\tzvfnat| by the option |"<path name>"|.
+You can move the line by the option |<shift coor>|.
+You can also expand the path from the end of the line by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzvfnat: shift
+\begin{tikzpicture}
+\tzhelplines*(4,4) % bonding box
+\tzfn"XX"{\x}[0:4]
+\tzvfnat[blue,thick]{0}
+\tzvfnat[red,thick]<.5,-.5>"AA"{1}[1:3]{line A'}[a]
+\tzXpoint*{AA}{XX}
+\tzvfnat[blue,->]{2}{line B}[a]
+ < arc (90:-30:1.5) node [b,draw] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzvfn}}
+\label{ss:tzvfn}
+
+\icmd{\tzvfn} accepts a coordinate as a mandatory argument and draws a horizontal line at the $x$ value of the coordinate.
+For example, |\tzvfn(3,<y>)|, ignoring |<y>|, is equivalent to |\tzvfnat{3}|.
+
+\xem{Everything else is the same as in} |\tzvfnat|.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzvfn(<coor>)[<domain>]
+% syntax: full
+\tzvfn[<opt>]<shift coor>"<path name>"(<coor>)[<domain>]{<text>}[<pos>]<code.append>
+% defaults
+ []<>""{<m>}[bottom:top (of current bonding box)]{}[]<>
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzvfn: shift
+\begin{tikzpicture}
+\tzhelplines*(4,4) % bonding box
+\tzcoors(1,0)(A)(2,0)(B);
+\tzfn"XX"{\x}[0:4]
+\tzvfn[blue,thick](0,5) % y=5 ignored
+\tzvfn[red,thick]<.5,-.5>"AA"(A)[1:3]{line A'}[a]
+\tzXpoint*{AA}{XX}
+\tzvfn[blue,->](B){line B}[a]
+ < arc (90:-30:1.5) node [b,draw] {End!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+%%==================================
+\chapter{Intersections}
+\label{c:intersections}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzXpoint(*)}: Intersection points}
+\label{s:intersections}
+
+\icmd{\tzXpoint} finds intersection points of two paths and save them as coordinate names for later use.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzXpoint{<path>}{<path>}(<coor name>)
+% syntax: medium
+\tzXpoint{<path>}{<path>}(<coor name>){<label>}[<angle>]
+% syntax: full
+\tzXpoint[<opt>]{<path>}{<path>}(<coor name>)[<nth>]{<label>}[<[<label opt>]angle>]
+% defaults
+ []{<m>}{<m>}()[1]{}[]
+\end{tzdef}
+
+For example, |\tzXpoint{path1}{path2}(A)| determines an intersection of the two paths and names the point |(A)| or |(A-1)|. (By default the name is |(intersection)| as in \Tikz.)
+If there are two or more intersection points, they are named as follows: |(A)=(A-1)|, |(A-2)|, |(A-3)|, etc.
+
+You can determine which intersection point is named by specifying the option |[<nth>]|. If you select the second intersection point to be named |(A)| out of multiple intersections, they are named as follows: |(A-1)|, |(A)=(A-2)|, |(A-3)|, |(A4)|, etc.
+You can label intersection points by specifying the option |{<label>}| and |[<angle>]|.
+
+
+\begin{tzcode}{.3}
+% \tzXpoint
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,8)
+\tzaxes(8,8)
+\tzto[red,bend right]"AA"(1,8)(8,1)
+\tzto[blue,bend right]"BB"(0,2)(8,6)
+\tzXpoint{AA}{BB}(A)
+\tzdot*(A)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{\icmd{\tzXpoint*}} The starred version |\tzXpoint*| simply adds a node dot to |\tzXpoint|.
+The default dot size is |2.4pt| and it can be changed by the last option |(<dot size>)| or the \threeways\ (on page \pageref{ss:threeways}).
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzXpoint*{<path>}{<path>}
+% syntax: medium
+\tzXpoint*{<path>}{<path>}(<coor name>){<label>}[<angle>]
+% syntax:
+\tzXpoint*[<opt>]{<path>}{<path>}
+ (<coor name>)[<nth>]{<label>}[<[<label opt>]angle>](<dotsize>)
+% defaults
+ [tzdot=2.4pt]{<m>}{<m>}()[1]{}[](2.4pt)
+\end{tzdef}
+
+
+
+\begin{tzcode}{.3}
+% \tzXpoint*
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(10,10)
+\tzaxes(10,10)
+\def\bgt{8-\x}
+\def\Fx{\x}
+\def\IC{7/\x}
+\tzfn\bgt[0:8] % name path=bgt
+\tzfn\Fx[0:8]{ray}[red,ar] % name path=Fx
+\tzfn"IC"\IC[.8:8]{$u$}[r] % name path=IC
+\tzXpoint*{bgt}{Fx}(A){A}[0] % <angle>
+\tzproj[dashed](A){$x$}{$y$}
+\tzXpoint*[fill=none,red]{bgt}{IC}(B){B}[0](4pt)
+\tzdot*[blue](B-2){B2}[[red]45](4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{Vertical intersection points}
+\label{s:tzvXpointat}
+
+\subsection{\protect\cmd{\tzvXpointat(*)}}
+\label{ss:tzvXpointat}
+
+\icmd{\tzvXpointat} determines vertical intersection points of a path at a specified value of $x$.
+So it takes |{<path>}| and |{<x-val>}| as mandatory arguments.
+
+\remark
+Internally, |\tzvXpointat| depends on |current bounding box|, which generally does not cause a problem because it is used after paths to be intersected is drawn.
+In case of any problem of no intersection point, you can use |\tzbbox| or |\tzaxes*| or \Tikz's |\useasboundingbox| to fix a bounding box.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzvXpointat{<path>}{<x-val>}(<coor name>)
+% syntax: medium
+\tzvXpointat{<path>}{<x-val>}(<coor name>){<label>}[<angle>]
+% syntax: full
+\tzvXpointat[<opt>]{<path>}{<x-val>}(<coor name>)[<n>]{<label>}[<[<opt>]angle>]
+% defaults
+ []{<m>}{<m>}()[1]{}[]
+\end{tzdef}
+
+\xem{Everything else is the same as in} |\tzXpointat|.
+
+
+The starred version \icmd{\tzvXpointat*} additionally prints a node dot of the size |2.4pt|, by default, at the (first) intersection point.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzvXpointat*{<path>}{<x-val>}
+% syntax: medium
+\tzvXpointat*{<path>}{<x-val>}(<coor name>){<label>}[<angle>]
+% syntax: full
+\tzvXpointat*[<opt>]{<path>}{<x-val>}
+ (<coor name>)[<n>]{<label>}[<[<opt>]angle>](<dot size>)
+% defaults
+ [tzdot=2.4pt]{<m>}{<m>}()[1]{}[](2.4pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzvXpointat(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\def\Fx{.5*(\x-2)^2}
+\tzfn\Fx[0:4] % name path=Fx
+\tzvfnat[dashed]{1}
+\tzvXpointat{Fx}{1}(A)
+\tzdot(A){A}[45]
+\tzvXpointat*{Fx}{3.2}{B}[-45]
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\subsection{\protect\cmd{\tzvXpoint(*)}}
+\label{ss:tzvXpoint}
+
+\icmd{\tzvXpoint} accepts |{<path>}| and |(<coor>)| as mandatory arguments to find vertical intersection points of a path at the $x$ value of the coordinate, ignoring the $y$ value.
+For example, |\tzvXpoint{mypath}(3,<y>)|, ignoring |<y>|, is equivalent to |\tzvXpointat{mypath}{3}|.
+
+\xem{Everything else is the same as in} |\tzvXpointat|.
+
+\begin{tzdef}{}
+% syntax
+\tzvXpoint[<opt>]{<path>}{<coor>}(<coor name>)[<n>]{<label>}[<[<opt>]angle>]
+% defaults
+ []{<m>}(<m>)[1]{}[]()
+\end{tzdef}
+
+The starred version \icmd{\tzvXpoint*} just adds a node dot to |\tzvXpoint|.
+
+\begin{tzdef}{}
+% syntax
+\tzvXpoint*[<opt>]{<path>}(<coor>)
+ (<coor name>)[<n>]{<label>}[<[<opt>]angle>](<dot size>)
+% defaults
+ [tzdot=2.4pt]{<m>}(<m>)()[1]{}[](2.4pt)
+\end{tzdef}
+
+|\tzvXpoint*| prints, at the first intersection point, a node dot of the size 2.4pt by default.
+
+\begin{tzcode}{.3}
+% \tzvXpoint(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\def\Fx{.5*(\x-2)^2}
+\tzfn\Fx[0:4] % name path=Fx
+\tzcoors(1,0)(A)(3.2,0)(B);
+\tzvfn[dashed](1,0)
+\tzvXpoint{Fx}(A)(Ax)
+\tzdot(Ax){Ax}[45]
+\tzvXpoint*{Fx}(B){B}[-45]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+
+
+
+%%------------------------------------------------------------
+\section{Horizontal intersection points}
+\label{s:tzhXpointat}
+
+\subsection{\protect\cmd{\tzhXpointat(*)}}
+\label{ss:tzhXpointat}
+
+\icmd{\tzhXpointat} determines vertical intersection points of a path at a specified value of $y$.
+So it takes |{<path>}| and |{<y-val>}| as mandatory arguments.
+
+\begin{tzdef}{}
+% syntax: minimal
+\tzhXpointat{<path>}{<y-val>}(<coor name>)
+% syntax: medium
+\tzhXpointat{<path>}{<y-val>}(<coor name>){<label>}[<angle>]
+% syntax: full
+\tzhXpointat[<opt>]{<path>}{<y-val>}(<coor name>)[<n>]{<label>}[<[<opt>]angle>]
+% defaults
+ []{<m>}{<m>}()[1]{}[]
+\end{tzdef}
+
+\xem{Everything else is the same as in} |\tzXpoint|.
+
+
+The starred version \icmd{\tzhXpoint*} additionally prints a node dot of the size 2.4pt by default at the intersection point.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzhXpointat*{<path>}{<y-val>}
+% syntax: medium
+\tzhXpointat*{<path>}{<y-val>}(<coor name>){<label>}[<angle>]
+% syntax: full
+\tzhXpointat*[<opt>]{<path>}{<y-val>}
+ (<coor name>)[<n>]{<label>}[<[<opt>]angle>](<dot size>)
+% defaults
+ [tzdot=2.4pt]{<m>}{<m>}()[1]{}[](2.4pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzhXpointat(*)
+\begin{tikzpicture}
+\tzhelplines*(4,3)
+\def\Fx{.5*(\x-2)^2}
+\tzfn\Fx[0:4] % name path=Fx
+\tzhXpointat{Fx}{1}(A)
+\tzdot(A){A}[0]
+\tzhfnat[dashed]{1.5}
+\tzhXpointat*{Fx}{1.5}(X){X}[45]
+\tzdot*(X-2){Y}[135]
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\subsection{\protect\cmd{\tzhXpoint(*)}}
+\label{ss:tzhXpoint}
+
+\icmd{\tzhXpoint} accepts |{<path>}| and |(<coor>)| as mandatory arguments to find vertical intersection points of a path at the $y$ value of the coordinate, ignoring the $x$ value.
+For example, |\tzhXpoint{mypath}(<x>,3)|, ignoring |<x>|, is equivalent to |\tzhXpointat{mypath}{3}|.
+
+\xem{Everything else is the same as in} |\tzhXpointat|.
+
+\begin{tzdef}{}
+% syntax
+\tzhXpointat[<opt>]{<path>}{<y-val>}(<coor name>)[<n>]{<label>}[<[<opt>]angle>]
+% defaults
+ []{<m>}{<m>}()[1]{}[]()
+\end{tzdef}
+
+The starred version \icmd{\tzhXpoint*} just adds a node dot to |\tzhXpoint|.
+
+\begin{tzdef}{}
+% syntax
+\tzhXpoint*[<opt>]{<path>}(<coor>)
+ (<coor name>)[<n>]{<label>}[<[<opt>]angle>](<dot size>)
+% defaults
+ [tzdot=2.4pt]{<m>}(<m>)()[1]{}[](2.4pt)
+\end{tzdef}
+
+|\tzhXpoint*| prints, at the first intersection point, a node dot of the size |2.4pt|, by default.
+
+\begin{tzcode}{.3}
+% \tzhXpoint(*)
+\begin{tikzpicture}
+\tzhelplines*(4,3)
+\def\Fx{.5*(\x-2)^2}
+\tzfn\Fx[0:4] % name path=Fx
+\tzcoors(0,1)(A)(0,1.5)(B);
+\tzhXpoint{Fx}(A)(A)
+\tzdot(A){A}[0]
+\tzhfn[dashed](0,1.5)
+\tzhXpoint*{Fx}(X){X}[45]
+\tzdot*(X-2){Y}[135]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+%%==================================
+\chapter{Secant and Tangent Lines}
+\label{c:tangent}
+
+%%------------------------------------------------------------
+\section{Secant lines}
+\label{s:secant}
+
+\subsection{\protect\cmd{\tzsecantat}}
+\label{ss:tzsecantat}
+
+\icmd{\tzsecantat} draws a chord or a secant line of a curve, on the |behind| layer by default.
+You need to specify a path name and two values of $x$.
+With \icmd{\settzsecantlayer}, you can change the layer, like |\settzsecantlayer{main}|.
+
+\begin{tzdef}{}
+% syntax: minium
+\tzsecantat{<path>}{<from-x>}{<to-x>}
+% syntax: medium
+\tzsecantat{<path>}{<from-x>}{<to-x>}[<domain>]{<text>}[<node opt>]
+% syntax: full
+\tzsecantat[<opt>]<shift coor>"path name"
+ {<path>}{<from-x>}{<to-x>}[<domain>]{<text>}[<node opt>]<code.append>
+% defaults
+ []<>""{<m>}{<m>}{<m>}[]{}[]<>
+\end{tzdef}
+
+\paragraph{Domain}
+The domain should be of the form |[<from num:to num>]|.
+Without specifying the optional domain, |\tzsecantat| draws a chord.
+
+\begin{tzcode}{.3}
+% \tzsecantat
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(-1,-1)(8,6){$x$}{$y$}
+\tzbezier+"curve"(.5,1)(1,6)(-1,-4)(7,5)
+\tzsecantat[thick,red]{curve}{1}{3}
+\tzsecantat[thick,red]{curve}{1}{4}
+\tzsecantat[thick,red]{curve}{1}{7}
+\end{tikzpicture}
+\end{tzcode}
+
+You can optionally specify the |[<domain>]|.
+
+\begin{tzcode}{.3}
+% \tzsecantat: domain
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(-1,-1)(8,6){$x$}{$y$}
+\tzbezier+"curve"(.5,1)(1,6)(-1,-4)(7,5){curve}[ar]
+\tzsecantat[blue]{curve}{1}{3}[0:5]{secant line}[a]
+\tzsecantat[thick,red]{curve}{1}{4}
+\tzsecantat[blue,dashed]{curve}{1}{7}[0:8]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move |\tzsecantat| by specifying the option |<shift coor>|.
+
+\begin{tzcode}{.3}
+% \tzsecantat: domain
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(-1,-1)(8,6){$x$}{$y$}
+\tzbezier+"curve"(.5,1)(1,6)(-1,-4)(7,5){curve}[ar]
+\tzsecantat[thick,red]{curve}{1}{4}
+\tzsecantat[blue]{curve}{1}{3}[0:5]{secant line}[a]
+\tzsecantat[blue]<1,-1>{curve}{1}{3}[0:5]{shifted}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Naming paths}
+By specifying the option |"<path name">| you can name a path of |\tzsecantat|.
+
+\begin{tzcode}{.3}
+% \tzsecantat: shift
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(-1,-1)(8,6){$x$}{$y$}
+\tzbezier+"curve"(.5,1)(1,6)(-1,-4)(7,5){curve}[ar]
+\tzsecantat[thick,red]{curve}{1}{4}
+\tzsecantat[blue]{curve}{1}{3}[0:5]{secant line}[a]
+\tzsecantat[blue]<1,-1>"shift"{curve}{1}{3}[0:5] %%
+\tzvXpointat*{shift}{3}{X}[-45]
+\tzticksx(-1mm:2mm){3/$x=3$}[scale=.7]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{<code.append>}}
+You can extend the path of |\tzsecantat| by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzsecantat: <code.append>
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(-1,-1)(8,6){$x$}{$y$}
+\tzbezier+"curve"(.5,1)(1,6)(-1,-4)(7,5){curve}[ar]
+\tzsecantat[blue]{curve}{1}{3}[0:5]{secant line}[a]
+\tzsecantat[blue,->]<1,-1>"shift"{curve}{1}{3}[0:5] %%
+ < --++(1,-3) node [red,b] {Ends!} >
+\tzvXpointat*{shift}{3}{X}[-45]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzsecant}}
+\label{ss:tzsecant}
+
+\icmd{\tzsecant} uses two \xem{coordinates instead of two values} to draw a chord or a secant line of a curve, on the |behind| layer by default.
+You need to specify a path name and two coordinates, then |\tzsecant| uses the $x$ values of the two coordinates.
+
+\xem{Everything else is the same as in} |\tzsecantat|.
+
+You can change the layer with \icmd{\settzsecantlayer}.
+
+\begin{tzdef}{}
+% syntax: minium
+\tzsecant{<path>}(<coor>)(<coor>)
+% syntax: medium
+\tzsecant{<path>}(<coor>)(<coor>)[<domain>]{<text>}[<node opt>]
+% syntax: full
+\tzsecant[<opt>]<shift coor>"path name"
+ {<path>}(<coor>)(<coor>)[<domain>]{<text>}[<node opt>]<code.append>
+% defaults
+ []<>""{<m>}{<m>}{<m>}[]{}[]<>
+\end{tzdef}
+
+The domain should be of the form |[<from num:to num>]|.
+Without specifying the optional domain, |\tzsecant| draws a chord.
+
+\begin{tzcode}{.3}
+% \tzsecant: domain
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(-1,-1)(8,6){$x$}{$y$}
+\tzbezier+"curve"(.5,1)(1,6)(-1,-4)(7,5){curve}[ar]
+\tzcoor(1,0)(K)
+\tzsecant[blue]{curve}(K)(3,0)[0:5]{secant line}[a]
+\tzsecant[thick,red]{curve}(K)(4,0)
+\tzsecant[blue,dashed]{curve}(K)(7,0)[0:8]
+\end{tikzpicture}
+\end{tzcode}
+
+You can move the secant line and extend the path.
+
+\begin{tzcode}{.3}
+% \tzsecantat: <code.append>
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(8,6)
+\tzaxes(-1,-1)(8,6){$x$}{$y$}
+\tzbezier+"curve"(.5,1)(1,6)(-1,-4)(7,5){curve}[ar]
+\tzcoor(1,0)(K)
+\tzsecant[blue]{curve}(K)(3,0)[0:5]{secant line}[a]
+\tzsecant[blue,->]<1,-1>"shift"{curve}(K)(3,0)[0:5] %%
+ < --++(1,-3) node [red,b] {Ends!} >
+\tzvXpointat*{shift}{3}{X}[-45]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{Tangent lines}
+\label{s:tangent}
+
+\subsection{\protect\cmd{\tztangentat}}
+\label{ss:tztangentat}
+
+\icmd{\tztangentat} draws a tangent line to a curve at a specified value of $x$.
+By default, the tangent line is drawn on the |behind| layer, which can be changed by \icmd{\settztangentlayer}, like |\settztangentlayer{main}|.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tztangentat{<path>}{<x-val>}[<domain>]
+% syntax: medium
+\tztangentat{<path>}{<x-val>}[<domain>]{<text>}[<node opt>]
+% syntax: full
+\tztangentat[<opt>]<shift coor>"<path name>"
+ {<path>}{<x-val>}(<epsilon1>,<epsilon2>)
+ [<domain>]{<text>}[<node opt>]<code.append>
+% defaults
+ []""<>{<m>}{<m>}(.01,.01)[<m>]{}[]<>
+\end{tzdef}
+
+To calculate the slope at $x$, $x$ varies over the interval $(x-\varepsilon_1,x+\varepsilon_2)$ and $\varepsilon_1=\varepsilon_2=0.01$ by default.
+So the slope of tangent line is only \xem{approximate}.
+
+\paragraph{Domain}
+|\tztangentat| takes three mandatory arguments: |{<path>}|, |{<x-val>}|, and |[<domain>]|. The mandatory argument |[<domain>]| should be of the form |[<from num:to num>]|.
+
+\begin{tzcode}{.3}
+% \tztangentat
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tztangentat{AA}{2}[.5:4]
+\tztangentat[blue]{AA}{4}[1:7]{tangent}[red,b]
+\tzvXpointat*{AA}{4}
+\tzticksx{1,7}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift}
+You can move the tangent line by specifying the option |<shift coor>|.
+
+\begin{tzcode}{.3}
+% \tztangentat: shift
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tztangentat{AA}{2}[.5:4]
+\tztangentat[blue]{AA}{4}[1:7]{tangent}[red,b]
+\tztangentat[blue]<2,1>{AA}{4}[1:7]{tangent'}[r]
+\tzvXpointat*{AA}{4}
+\tzticksx{1,7}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Naming paths}
+By specifying the option |"<path name">|, you can name the path of |\tztangentat|.
+
+\begin{tzcode}{.3}
+% \tztangentat: name path
+\begin{tikzpicture}[scale=.5,font=\footnotesize]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tztangentat{AA}{2}[.5:4]
+\tztangentat[blue]{AA}{4}[1:7]{tangent}[red,b]
+\tzvXpointat*{AA}{4}
+\tztangentat[blue]
+ <2,1>"BB"{AA}{4}[1:7]{tangent'}[r]
+\tzvXpointat*[blue]{BB}{5}(X){$x$}[45](3pt)
+\tzproj(X){$x_1$}{$x_2$}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{<code.append>}}
+You can extend the path of |\tztangentat| by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tztangentat: <code.append>
+\begin{tikzpicture}[scale=.5,font=\footnotesize]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tztangentat{AA}{2}[.5:4]
+\tztangentat[blue]{AA}{4}[1:7]{tangent}[red,b]
+\tzvXpointat*{AA}{4}
+\tztangentat[blue,->]<2,1>"BB"{AA}{4}[1:7]
+ < to [bend right] ++(-1,3) node [a] {Ends!} >
+\tzvXpointat*[blue]{BB}{5}(X){$x$}[45](3pt)
+\tzproj(X){$x_1$}{$x_2$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{Variations}
+The slope of the tangent line is approximate, so sometimes you may want to change the variation interval to get better results.
+You can change $\varepsilon_1$ and $\varepsilon_2$ by specifying the option |(epsilon1,epsilon2)| immediately after the mandatory argument |<x-val>|.
+Or you can change the variations with the macro \icmd{\settztangentepsilon},
+like |\settztangentepsilon{|$\varepsilon_1$|}{|$\varepsilon_2$|}|. The effect remains until the end of |tikzpicture| environment unless changed again.
+
+\begin{tzcode}{.3}
+% \tztangentat: variations, shift
+\begin{tikzpicture}[scale=.5,font=\footnotesize]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tztangentat[blue!50,dashed]{AA}{4}[1:7]
+\settztangentepsilon{0.005}{0.01}
+\tztangentat[blue]{AA}{4}[1:7]{corrected}[r]
+\tztangentat[red]<0,1>{AA}{4}[1:7]{shifted}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+\subsection{\protect\cmd{\tztangent}}
+\label{ss:tztangent}
+
+
+\icmd{\tztangent} uses a \xem{coordinate instead of a value} of $x$ to draw a tangent line.
+For example, |\tztangent{curve}(4,0)| is equivalent to |\tztangentat{curve}{4}|.
+
+\xem{Everything else is the same as in} |\tztangentat|.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tztangent{<path>}(<coor>)[<domain>]
+% syntax: medium
+\tztangent{<path>}(<coor>)[<domain>]{<text>}[<node opt>]
+% syntax: full
+\tztangent[<opt>]<shift coor>"<path name>"
+ {<path>}(<coor>)(<epsilon1>,<epsilon2>)
+ [<domain>]{<text>}[<node opt>]<code.append>
+% defaults
+ []""<>{<m>}(<m>)(.01,.01)[<m>]{}[]<>
+\end{tzdef}
+
+
+
+\begin{tzcode}{.3}
+% \tztangent
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tzcoors(2,0)(K2)(4,0)(K4);
+\tztangent{AA}(K2)[.5:4]
+\tztangent[blue]{AA}(K4)[1:7]{tangent}[red,b]
+\tzvXpoint*{AA}(K4)
+\tzticksx{1,7}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tztangent: shift, <code.append>
+\begin{tikzpicture}[scale=.5,font=\footnotesize]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tzcoors(2,0)(K2)(4,0)(K4);
+\tztangent{AA}(K2)[.5:4]
+\tztangent[blue]{AA}(K4)[1:7]{tangent}[red,b]
+\tzvXpoint*{AA}(K4)
+\tztangent[blue,->]<2,1>"BB"{AA}(K4)[1:7]
+ < to [bend right] ++(-1,3) node [a] {Ends!} >
+\tzvXpoint*[blue]{BB}(5,0)(X){$x$}[45](3pt)
+\tzproj(X){$x_1$}{$x_2$}
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tztangent: variations, shift
+\begin{tikzpicture}[scale=.5,font=\footnotesize]
+\tzhelplines(9,8)
+\tzaxes(9,8)
+\tzplotcurve"AA"(1,7)(3,3)(8,1);
+\tztangent[blue!50,dashed]{AA}(4,0)[1:7]
+\settztangentepsilon{0.005}{0.01}
+\tztangent[blue]{AA}(4,0)[1:7]{corrected}[r]
+\tztangent[red]<0,1>{AA}(4,0)[1:7]{shifted}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Miscellany}
+\label{c:misc}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzbrace(')}}
+\label{s:tzbrace}
+
+\icmd{\tzbrace} takes two coordinates as mandatory arguments to draw a calligraphic brace connecting them.
+
+\begin{tzdef}{}
+% syntax: minimum
+\tzbrace(<coor>)(<coor>)
+% syntax: medium
+\tzbrace(<coor>)(<coor>){<text>}[<node opt>]
+% syntax: full
+\tzbrace[<draw opt>]{<raise>}[<decoration opt>]<shift coor>
+ (<coor>)(<coor>){<text>}[<node opt>]
+% defaults
+ []{5pt}[amplitude=5pt]<>(<m>)(<m>){}[]
+\end{tzdef}
+
+The amplitude of a brace is |5pt| by default.
+The |raise| value of a brace is |5pt| by default and the value can be changed by the first curly brace optional argument |{<raise>}|.
+
+\begin{tztikz}{}
+\tzbrace[thick](0,0)(3,1) % works like:
+ \draw [thick,decorate,decoration={calligraphic brace, amplitude=5pt, raise=5pt}]
+ (0,0) to (3,1);
+\end{tztikz}
+
+The swap version \icmd{\tzbrace'} swaps the coordinates.
+So it prints a mirror image of |\tzbrace|.
+
+\begin{tzcode}{.3}
+% \tzbrace(')
+\begin{tikzpicture}[sloped]
+\tzhelplines(4,2)
+\tzline(0,0)(3,1)
+\tzbrace(0,0)(3,1){AAA}[above=10pt,blue]
+\tzbrace'[red](0,0)(3,1){BBB}[below=10pt]
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the style of the decorating brace by the second bracket optional argument |[<decoration opt>]|.
+
+The color of the calligraphic brace can be changed by the option |pen colour| in the list of |[<draw option>]|.
+
+\begin{tzcode}{.3}
+% \tzbrace('): decoration options
+\begin{tikzpicture}[sloped]
+\tzhelplines(4,3)
+\tzline(0,0)(3,1)
+\tzbrace [very thick,pen colour=blue][amplitude=10pt]
+ (0,0)(3,1){AAA}[a=15pt]
+\tzbrace'[red,very thick]{10pt}[brace,amplitude=10pt]
+ (0,0)(3,1){BBB}[b=20pt]
+\end{tikzpicture}
+\end{tzcode}
+
+You can also move a brace by specifying the option |<shift coor>| immediately before the the first mandatory coordinate.
+
+\begin{tzcode}{.3}
+% \tzbrace('): shift
+\begin{tikzpicture}[sloped]
+\tzhelplines(4,3)
+\tzline(0,0)(3,1)
+\tzbrace [very thick,pen colour=blue][amplitude=10pt]
+ <.5,.5>(0,0)(3,1){AAA}[a=15pt]
+\tzbrace'[red,very thick]{10pt}[brace,amplitude=10pt]
+ (0,0)(3,1){BBB}[b=20pt]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc.pdf b/graphics/pgf/contrib/tzplot/tzplot-doc.pdf
new file mode 100644
index 0000000000..0e4633ea06
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc.tex b/graphics/pgf/contrib/tzplot/tzplot-doc.tex
new file mode 100644
index 0000000000..ea53095183
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc.tex
@@ -0,0 +1,375 @@
+%!TEX program = arara
+% arara: xelatex: {shell: yes, synctex: yes}
+% arara: xelatex: {shell: yes, synctex: yes}
+% arara: makeindex: {style: tzplot}
+% arara: xelatex: {shell: yes, synctex: yes}
+% arara: xelatex: {shell: yes, synctex: yes}
+
+%% 2021/02/28 v1.0
+\def\tmpdate{2021/02/28}
+\def\tmpversion{1.0}
+
+%------------------------------------------------------
+\def\myincludeonly{%
+\includeonly{%
+tzplot-doc-A-v\tmpversion, % getting ready
+tzplot-doc-B-v\tmpversion, % intuitive introductions (getting started)
+tzplot-doc-C-v\tmpversion, % points, lines, and curves
+tzplot-doc-D-v\tmpversion, % plotting graphs
+%tzplot-eco-v\tmpversion, % economics
+}}
+%------------------------------------------------------
+
+\documentclass[a4paper,amsmath,chapter]{oblivoir}
+
+\gdef\clearforchapter{} % no clearpage for chapter
+
+\usepackage{tzplot}
+
+% ndh
+\usepackage{etoolbox}
+\input{tzplot-oblivoirpartstyle}
+
+\usepackage{fapapersize}
+\usefapapersize{*,*,30mm,*,28mm,*}
+%\setsecnumdepth{subsubsection}
+%\settocdepth{subsubsection}
+%\setlength\cftsubsubsectionindent{4.5em}
+
+\renewcommand*\contentsname{Contents}
+\renewcommand*\figurename{Figure}
+\renewcommand*\tablename{Table}
+\renewcommand*\abstractname{Abstract}
+\renewcommand*\indexname{Index}
+\renewcommand*\pagerefname{\kern-4pt}
+
+\hypersetup{pdfborder={0 0 0}} % to suppress the hyperlink red box
+
+%%====================================== (ndh)
+\SetHangulspace{1.025}{1}
+%%% part
+\renewcommand*\prepartnum{\noindent\partnamefont\textsc{Part}\space}
+\renewcommand*\partnamenum{}
+\renewcommand*\postpartnum{}
+\renewcommand*\hparttitlehead{Part\space\thepart}
+\renewcommand*\beforepartskip{\vskip 0pt plus 2pt minus 0pt}
+\renewcommand*\midpartskip{\newline}
+\renewcommand*\afterpartskip{\vskip 2\onelineskip}
+
+%\makeatletter
+%\patchcmd\@part{\centering}{}{}{}
+%\makeatother
+\renewcommand*\obparttitlealignment{}
+
+\renewcommand\partnumfont{\bfseries\Large}
+\renewcommand\partnamefont{\partnumfont}
+\renewcommand\parttitlefont{\bfseries\LARGE}
+
+%%% for toc
+\setlength\cftpartnumwidth{5.2em}
+\setlength\cftchapternumwidth{1.8em}
+\setlength\cftsectionindent{1.8em}
+\setlength\cftsectionnumwidth{2.7em}
+\setlength\cftsubsectionindent{4.5em}
+\setlength\cftsubsectionnumwidth{3em}
+
+%%% chapter style
+\makechapterstyle{tzdoc}{%
+ \reparticle
+ \renewcommand\prechapternum{}
+ \renewcommand\postchapternum{}
+ \renewcommand\hchaptertitlehead{\thechapter}
+}
+%%================================
+
+%\usepackage{xparse} %% oblivoir loads xparse
+\usepackage{tikz}
+
+
+\usepackage{makecell}
+\usepackage{multido}
+\usepackage[normalem]{ulem} % [normalem] to correct the pdf bookmark broken characters
+\usepackage{idxlayout}
+
+
+\usepackage{tcolorbox}
+\tcbuselibrary{minted,listings,breakable}
+\tcbset{%
+ listing engine=minted,breakable,
+ after={\par\vspace{.5\baselineskip}\noindent}
+}
+\tcbset{%
+ colback=yellow!5!white,
+ colframe=blue!30,
+ listing outside text,
+ righthand width=.3\linewidth,
+ center upper,
+ center lower,
+ sidebyside gap=5pt,
+ listing options={%
+ style=tcblatex,
+ keywordstyle=\color{blue},
+ commentstyle=\color{black!20!green},
+ morekeyword={
+ tzline,tzlines,tzdot,tzdots,
+ tznode,tznodes
+ },
+ }
+}
+
+\newtcblisting{tzdef}[1]{colback=blue!5!white,listing only,#1}
+\newtcblisting{tzsty}[1]{colback=green!5!white,listing only,#1}
+\newtcblisting{tztikz}[1]{colback=white,colframe=gray!15,listing only,#1}
+\newtcblisting{tzcode}[2][]{righthand width=\expandafter#2\linewidth,#1}
+
+\NewDocumentEnvironment{mytcblisting}{O{}}
+{ \medskip
+ \begin{tcblisting}{#1}
+}
+{ \end{tcblisting}
+ \medskip
+}
+
+
+\linespread{1}
+
+\newcommand*\Tikz{Ti\textit{k}Z}
+\let\TikZ\Tikz
+
+\newenvironment{keywords}{%
+ \par\vskip2pt
+ \noindent\hangfrom{\textsc{Keywords: }}%
+}
+
+
+%% index
+%\renewcommand\cmd[1]{\cmdprint{#1}}
+\ExplSyntaxOn
+\renewcommand \cmd [1]
+{
+ \texorpdfstring
+ { \cmdprint {#1} }
+ { \textbackslash \cs_to_str:N #1 }
+}
+\ExplSyntaxOff
+
+\newcommand\xem[1]{\emph{#1}}
+\newcommand\xw[1]{\cmd{#1}}
+\newcommand\xttw[1]{\texttt{#1}}
+\newcommand\pkg[1]{\textsf{#1}}
+\newcommand\env[1]{\textsf{#1}}
+% index
+\newcommand\isw[1]{#1\index{#1}} % simple word in text/index
+\newcommand\ixsw[1]{\cmd{#1}\index{#1}} % texttt in text, simple word in index
+\newcommand\iisw[1]{\textit{#1}\index{#1}} % textit in text, simple word in index
+\newcommand\iscw[1]{\textsc{#1}\index{#1@\textsc{#1}}} % textsc in text/index
+\newcommand\ixxw[1]{\texttt{#1}\index{#1@\texttt{#1}}} % texttt in text/index
+\newcommand\ixw[1]{\textsf{#1}\index{#1@\textsf{#1}}} % textsf in text/index
+\newcommand\ixttw[1]{\texttt{#1}\index{#1@\texttt{#1}}} % texttt in text/index
+\newcommand\ipkg[1]{\textsf{#1}\index{#1@\textsf{#1}}}
+\newcommand\ienv[1]{\textsf{#1}\index{#1@\textsf{#1}}}
+
+\makeatletter
+\newcommand{\icmd}[1]{\cmdprint{#1}%
+ \index{\expandafter\@gobble\string#1@\string\cmdprint{\string#1}}}
+\makeatother
+
+\makeindex
+
+
+%% lazy macros
+\newcommand\mysection[1]{\pagebreak[3]\section[\normalsize #1]{\Huge #1}}
+\NewDocumentCommand\mysubsection{sm}
+{\IfBooleanTF #1
+ {\pagebreak[3]\subsection{#2}}
+ {\pagebreak[3]\subsection{\protect\cmd{#2}}}
+}
+\NewDocumentCommand\mysubsubsection{sm}
+{\IfBooleanTF #1
+ {\pagebreak[3]\subsubsection{#2}}
+ {\pagebreak[3]\subsubsection{\protect\cmd{#2}}}
+}
+
+\NewExpandableDocumentCommand\xcol{mO{c|}m}
+ {\multicolumn{#1}{#2}{\ensuremath{#3}}}
+
+%% more lazy macros
+\newcommand\xbigskip[1]{\multido{}{#1}\bigskip}
+\newcommand\xmedskip[1]{\multido{}{#1}\medskip}
+\newcommand\xsmallskip[1]{\multido{}{#1}\smallskip}
+\def\hpara{\hangpara{1.52em}{1}}
+\def\listdivider{\leavevmode\smallskip\hrule width 1.5em\smallskip}
+
+\newcommand\remark{\bigskip\noindent \textbf{Remark: }}
+\newcommand\warning{\bigskip\noindent \textbf{Warning: }}
+\newcommand\threeways{\textsc{Three Ways}}
+
+
+%\parindent=0pt
+
+\title{\texttt{tzplot.sty} \\ Plot Graphs with \Tikz\ Abbreviations}\author{In-Sung Cho \\ \texttt{ischo <at> ktug.org}}
+\date{Economics, Kongju National University\\[3pt]
+ \tmpdate\quad version \tmpversion}
+
+\def\tmpclearpage{\clearpage}
+
+\AtBeginDocument{\MakeShortVerb{\|}}
+
+%%% english based document: \flushbottom
+%%% korean document: \raggedbottom (by default in oblivoir)
+\AddToHook{env/document/before}{\flushbottom}
+%%% same as \AtBeginDocument
+\AddToHook{env/document/begin}{%
+ \chapterstyle{tzdoc}
+% \pagestyle{headings}
+}
+
+\myincludeonly
+
+%=============================================================
+\begin{document}
+
+\frontmatter
+\maketitle
+
+\renewcommand{\abstracttextfont}{\normalfont\small\noindent\ignorespaces}
+\begin{abstract}
+This is a \LaTeX{} package that provides \Tikz\ based macros to make it easy to draw graphs.
+The macros provided in the \pkg{tzplot} package are just \emph{abbreviations} for \Tikz\ codes, which can be complicated, but using the package, hopefully, makes drawing easier, especially when drawing repeatedly. The macros were chosen and developed with an emphasis on drawing graphs in \emph{economics}.
+
+\begin{keywords}
+lines, dots, curves, axes, functions,
+projection, ticks, intersections, tangent lines
+\end{keywords}
+\end{abstract}
+
+\tableofcontents*
+
+\mainmatter
+
+\include{tzplot-doc-A-v\tmpversion}
+
+\include{tzplot-doc-B-v\tmpversion}
+
+\include{tzplot-doc-C-v\tmpversion}
+
+\include{tzplot-doc-D-v\tmpversion}
+
+%\include{tzplot-eco-v\tmpversion}
+
+
+\chapter*{Version history}
+\addcontentsline{toc}{chapter}{Version history}
+
+\begin{itemize}
+\item v\tmpversion (\tmpdate) upload to CTAN
+\item v0.999a (2021/02/27)
+ \begin{itemize}
+ \item writing document
+ \item some |\tz<...>AtBegin| and |\tz<...>AtEnd| not documented
+ \end{itemize}
+\item v0.999 (2021/02/24)
+ \begin{itemize}
+ \item fixed the title. ``Plot Graphs with \Tikz\ Abbreviations"
+ \item changed the default |\tzpathstyle| and |\tzlinkstyle| from `|--|' to `|to|' (no harm)
+ \item added |\tzpathlayer| and |\settzpathlayer|, for later use. (currently not used)
+ \item removed explanation of the option |<+or++>| in the document (considering to remove later)
+ \item changed the delimiter |<path style>| to |[<path style>]| in |\tzpath| and |\tzlink(s)| (critical change)
+ \item added |text opactiy=1| everywhere |fill opacity=.3| is used
+ \end{itemize}
+%%%\item v0.99j (2021/02/18)
+%%% \begin{itemize}
+%%% \item added |\tzplotcurve*| to show dots
+%%% \item discarded |<code.append>| for |\tznode| and the like.
+%%% \end{itemize}
+%%%\item v0.99i (2021/02/17)
+%%% \begin{itemize}
+%%% \item added |\tzaxes*| to set the current state as a |bounding box|
+%%% \item redefined |\tztangentat| and |\tztangent|
+%%% \begin{itemize}
+%%% \item Now the tangent line is drawn over the domain, which is mandatory.
+%%% \end{itemize}
+%%% \item redefined |\tzsecantat| and |\tzsecant|
+%%% \begin{itemize}
+%%% \item Now the secant line is drawn over the domain, when the optional domain is given.
+%%% \item If there is no domain option, it draw a secant line segment.
+%%% \end{itemize}
+%%% \end{itemize}
+%%%\item v0.99h (2021/02/12)
+%%% \begin{itemize}
+%%% \item redefined |\tztangentat| and |\tztangent|
+%%% \begin{itemize}
+%%% \item to resolve the discrepancy issue, when repeated
+%%% \item if two mandatory arguments are the same, no redefine |(bbTop)| and |(bbBottom)|
+%%% \item and clear for every start of |\tikzpicture|
+%%% \end{itemize}
+%%% \item redefined |\tzslopeat| and |\tzslope| to resolve the discrepancy issue
+%%% \item redefined |\tzbezier+|
+%%% to make the last coordinate relative to the first
+%%% \item redefined |\tzparabola+|
+%%% to make the last coordinate relative to the first
+%%% \end{itemize}
+%%%\item v0.99g (2021/02/10)
+%%% \begin{itemize}
+%%% \item added |\tzbbox|
+%%% \item added |\tzhelplines*| to make it serve as a bounding box
+%%% \item added |\tzspy|
+%%% \end{itemize}
+%%%\item v0.99f (2021/02/01)
+%%% \begin{itemize}
+%%% \item added |\settztangentlayer|, |\tzsecantlayer|, and |\tzslopelayer|
+%%% \item corrected |\tzvfn|, |\tzhfn| for |<shift coor>|
+%%% \item corrected |\tztangent|, |\tztangentat| to resolve `inconsistent' issue
+%%% \item changed |\xdef| to |\def|
+%%% \end{itemize}
+%%%\item v0.99e (2021/01/25)
+%%% \begin{itemize}
+%%% \item redefined |\tzsecant| to resolve \Tikz\ issue of path name with layer.
+%%% \item added |\tzsnake|.
+%%% \end{itemize}
+%%%\item v0.99d (2021/01/20)
+%%% \begin{itemize}
+%%% \item applied |<shift coor>| to (almost) all macros.
+%%% \end{itemize}
+%%%\item v0.99c (2021/01/14)
+%%% \begin{itemize}
+%%% \item redesigned macros for |<shift coor>|
+%%% \end{itemize}
+%%%\item v0.99b (2021/01/14)
+%%% \begin{itemize}
+%%% \item corrected y ticks position with ticks: |\tztikcs|, |\tzticksy|
+%%% \item changed the order of arguments for consistency: |\tzplot|, |\tzplotcurve|
+%%% \item redefined |\tzhfn| and |\tzvfn| to have a mandatory argument
+%%% \item added |<shift coor>| to macros related to lines or curves:
+%%% \end{itemize}
+%%%\item v0.99a (2021/01/12)
+%%% \begin{itemize}
+%%% \item to do: |<shift coor>| for |\tzto|, |\tzfn|, |\tzline|, ...
+%%% \item to do: |\tzconvexcomb| and |\tzconvexcombs|
+%%% \end{itemize}
+\end{itemize}
+
+
+\chapter*{Acknowledgement}
+\addcontentsline{toc}{chapter}{Acknowledgement}
+
+I am grateful to Kangsoo Kim of KTUG (Korean TeX Users Group) who wrote many packages including |oblivoir.cls| for helping to implement the idea of the semicolon version with |expl3|.
+
+\chapter*{References}
+\addcontentsline{toc}{chapter}{Reference}
+
+\hpara{}Casteleyn, Jean Pierre~(2016), ``Visual PSTricks," version 2.30.
+
+\hpara{}\uline{\hphantom{Casteleyn, Jean Pierre}}~(2018), ``Visual TikZ," version 0.66.
+
+\hpara{}Tantau, Till~(2020), ``\TikZ\ and PGF: Manual for version 3.1.8b," \url{http://sourceforge.net/projects/pgf}.
+
+\clearpage
+\printindex
+
+\end{document}
+
+%% ====================================================
+%% ====================================================
+%% ====================================================
+
diff --git a/graphics/pgf/contrib/tzplot/tzplot-oblivoirpartstyle.tex b/graphics/pgf/contrib/tzplot/tzplot-oblivoirpartstyle.tex
new file mode 100644
index 0000000000..39fd26bf46
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-oblivoirpartstyle.tex
@@ -0,0 +1,38 @@
+\makeatletter
+
+\@ifclasslater{oblivoir}{2021/05/20}{}%
+{%
+ \def\obparttitlealignment{}
+ \long\def\@part[#1]#2{%
+ \M@gettitle{#1}%
+ \def\f@rtoc{#1}%
+ \@nameuse{part@f@rtoc@before@write@hook}%
+ \phantomsection
+ \mempreaddparttotochook
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}%
+ {\protect\partnumberline{\hparttitlehead}\f@rtoc}%
+ \mempartinfo{\thepart}{\f@rtoc}{#2}%
+ \else
+ \addcontentsline{toc}{part}{\f@rtoc}%
+ \mempartinfo{}{\f@rtoc}{#2}%
+ \fi
+ \mempostaddparttotochook
+ \partmark{#1}%
+ {%
+ \obparttitlealignment
+ \interlinepenalty \@M
+ \parskip\z@
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \prepartnum \partnamenum \printpartnum \partnamenum \postpartnum
+ \midpartskip
+ \fi
+ \printparttitle{#2}\par}%
+ \@endpart}
+}
+
+
+
+\makeatother \ No newline at end of file
diff --git a/graphics/pgf/contrib/tzplot/tzplot.ist b/graphics/pgf/contrib/tzplot/tzplot.ist
new file mode 100644
index 0000000000..813fdbce59
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot.ist
@@ -0,0 +1,16 @@
+preamble "\\begin{theindex}\n
+\\def\\hindexhead#1{\\ifcase#1ㄱ\\or ㄴ\\or ㄷ\\or ㄹ\\or
+ ㅁ\\or ㅂ\\or ㅅ\\or ㅿ\\or ㅇ\\or ㆁ\\or ㅈ\\or ㅊ\\or ㅋ\\or
+ ㅌ\\or ㅍ\\or ㅎ\\or ㆆ\\or ㅏ\\or ㅑ\\or ㅓ\\or ㅕ\\or ㅗ\\or
+ ㅛ\\or ㅜ\\or ㅠ\\or ㅡ\\or ㅣ\\or ㆍ\\else 종성\\fi}\n\n"
+
+headings_flag 1
+group_skip "\n\n\\indexspace\n"
+item_0 "\n\\item "
+heading_prefix "{\\sffamily【 "
+heading_suffix " 】}\\nopagebreak\n"
+%symhead_positive "Symbols"
+%numhead_positive "Numbers"
+delim_0 "\\quad "
+delim_1 "\\quad "
+delim_2 "\\quad " \ No newline at end of file
diff --git a/graphics/pgf/contrib/tzplot/tzplot.sty b/graphics/pgf/contrib/tzplot/tzplot.sty
new file mode 100644
index 0000000000..593659b03f
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot.sty
@@ -0,0 +1,4590 @@
+%% file: tzplot.sty
+%%
+%% tzplot
+%%
+%% (C) Copyright 2017-2021 In-Sung Cho <ischo at ktug.org>
+%%
+%% This work may be distributed and/or modified
+%% under the conditions of the LaTeX Project Public License,
+%% either version 1.3c 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.
+%%
+%% -------------------------------------------------
+\ProvidesPackage{tzplot-v1.0}[2021/02/28 v1.0 Plot Graphs with TikZ Abbreviations]
+
+% expl3,xparse: LPPL
+% tikz: LPPL and/or GNU GPL
+\RequirePackage{expl3,xparse}
+\RequirePackage{tikz}
+
+\usetikzlibrary{
+calc,backgrounds,positioning,intersections,
+arrows,shapes,patterns,
+plotmarks, % for \tzplot[mark]
+decorations.pathreplacing, % for tzshowcontrols/show path construction, tzbrace
+calligraphy, % for calligraphic brace (load after decorations.pathreplacing)
+}
+
+
+%% backgrounds
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{behind}
+\pgfdeclarelayer{above}
+\pgfdeclarelayer{foreground}
+
+\pgfsetlayers{background,behind,main,above,foreground}
+%% usage: \begin{pgfonlayer}{foreground} ... \end{pgfonlayer}
+
+
+%%%%% defaults
+\def\tz@default@radius{1.2pt} % fixed
+\def\tz@initial@radius{\tz@default@radius} % changeable
+\NewDocumentCommand\settzdotradius{m}{\renewcommand\tz@initial@radius{#1}}
+\newcommand\tzdotradius{\tz@initial@radius}
+
+% circle dot (using radius)
+\def\tz@default@Cdot@radius{1.2pt} % fixed
+\def\tz@initial@Cdot@radius{\tz@default@Cdot@radius} % changeable
+\NewDocumentCommand\settzcdotradius{m}{\renewcommand\tz@initial@Cdot@radius{#1}}
+\newcommand\tzCdotradius{\tz@initial@Cdot@radius}
+
+% node dot (using minimum size)
+\def\tz@default@dot@size{2.4pt} % fixed
+\def\tz@initial@dot@size{\tz@default@dot@size} % changeable
+\NewDocumentCommand\settzdotsize{m}{\renewcommand\tz@initial@dot@size{#1}}
+\newcommand\tzdotsize{\tz@initial@dot@size}
+
+% mark (using mark size, which is a radius) % tikz initial = 2pt
+\def\tz@default@mark@size{2pt} % fixed
+\def\tz@initial@mark@size{\tz@default@mark@size} % changeable
+\NewDocumentCommand\settzmarksize{m}{\renewcommand\tz@initial@mark@size{#1}}
+\newcommand\tzmarksize{\tz@initial@mark@size}
+
+% opacity
+\def\tz@default@fill@opacity{0.3} % fixed
+\def\tz@initial@fill@opacity{\tz@default@fill@opacity} % changeable
+\NewDocumentCommand\settzfillopacity{m}{\renewcommand\tz@initial@fill@opacity{#1}}
+\newcommand\tzfillopacity{\tz@initial@fill@opacity}
+
+% fillcolor
+\def\tz@default@fill@color{black!50} % fixed
+\def\tz@initial@fill@color{\tz@default@fill@color} % changeable
+\NewDocumentCommand\settzfillcolor{mg}
+{%
+ \renewcommand\tz@initial@fill@color{#1}
+ \IfValueT {#2} {\renewcommand\tz@initial@fill@opacity{#2}}
+}
+\newcommand\tzfillcolor{\tz@initial@fill@color}
+
+% link style
+\def\tz@default@link@style{to} % fixed
+\def\tz@initial@link@style{\tz@default@link@style} % changeable
+\NewDocumentCommand\settzlinkstyle{m}{\renewcommand\tz@initial@link@style{#1}}
+\newcommand\tzlinkstyle{\tz@initial@link@style}
+
+% path style
+\def\tz@default@path@style{to} % fixed
+\def\tz@initial@path@style{\tz@default@path@style} % changeable
+\NewDocumentCommand\settzpathstyle{m}{\renewcommand\tz@initial@path@style{#1}}
+\newcommand\tzpathstyle{\tz@initial@path@style}
+
+% tangent epsilon
+
+\def\tz@default@tangent@epsilonL{.01}
+\def\tz@default@tangent@epsilonR{.01}
+\def\tz@initial@tangent@epsilonL{\tz@default@tangent@epsilonL}
+\def\tz@initial@tangent@epsilonR{\tz@default@tangent@epsilonL}
+\NewDocumentCommand\settztangentepsilon{mg}
+{%
+ \renewcommand\tz@initial@tangent@epsilonL{#1}
+ \IfNoValueTF {#2}
+ {\renewcommand\tz@initial@tangent@epsilonR{#1}}
+ {\renewcommand\tz@initial@tangent@epsilonR{#2}}
+}
+\newcommand\tztangentepsilonL{\tz@initial@tangent@epsilonL}
+\newcommand\tztangentepsilonR{\tz@initial@tangent@epsilonR}
+\let\tztangentatepsilonL\tztangentepsilonL
+\let\tztangentatepsilonR\tztangentepsilonR
+
+% tzpath layer %% (NOT USED!!!) (to be considered later)
+\def\tz@default@tzpath@layer{main} % fixed
+\def\tz@initial@tzpath@layer{\tz@default@tzpath@layer} % changeable
+\NewDocumentCommand\settzpathlayer{m}{\renewcommand\tz@initial@tzpath@layer{#1}}
+\newcommand\tzpathlayer{\tz@initial@tzpath@layer}
+
+% tangent layer
+\def\tz@default@tangent@layer{behind} % fixed
+\def\tz@initial@tangent@layer{\tz@default@tangent@layer} % changeable
+\NewDocumentCommand\settztangentlayer{m}{\renewcommand\tz@initial@tangent@layer{#1}}
+\newcommand\tztangentlayer{\tz@initial@tangent@layer}
+\let\tztangentatlayer\tztangentlayer
+
+% secant layer
+\def\tz@default@secant@layer{behind} % fixed
+\def\tz@initial@secant@layer{\tz@default@secant@layer} % changeable
+\NewDocumentCommand\settzsecantlayer{m}{\renewcommand\tz@initial@secant@layer{#1}}
+\newcommand\tzsecantlayer{\tz@initial@secant@layer}
+\let\tzsecantatlayer\tzsecantlayer
+
+%%%%% TikZ alias styles
+
+\tikzset{
+ a/.style={above=#1},
+ b/.style={below=#1},
+ c/.style={centered=#1},
+ l/.style={left=#1},
+ r/.style={right=#1},
+ al/.style={above left=#1},
+ ar/.style={above right=#1},
+ bl/.style={below left=#1},
+ br/.style={below right=#1},
+}
+
+%%%%% tzplot styles
+
+\tikzset{>=stealth} % to revert use {>=to}
+
+%% tzdot (for node dot style)
+\tikzset{
+ tzdot/.style=
+ {draw,solid,thin,circle,inner sep=0pt,minimum size=#1},
+ tzdot/.default=\tzdotsize
+}
+
+%% tzdot options (for node dot style)
+\tikzset{
+ tzdot options/.style={tzdot=\tzdotsize,#1}
+}
+
+%% tzmark
+\tikzset{
+ tzmark/.style=
+ {mark options={solid,thin},mark size=#1},
+ tzmark/.default=\tzmarksize
+}
+
+%% tznode (NOT USED!) -- user choice
+\tikzset{
+ tznode/.style=
+ {solid,thin,circle,inner sep=0pt,minimum size=#1},
+ tznode/.default=0pt
+}
+
+%% tzdotted
+\tikzset{%
+ tzdotted/.style={%
+ dotted=none,
+ line cap=round,
+ dash pattern=on 0pt off 1cm/(#1)
+ },
+ tzdotted/.default=10
+}
+
+%% tzdashed
+\tikzset{
+ tzdashed/.style={%
+ dashed=none,
+ dash pattern=on 5mm/(#1) off 5mm/(#1)
+ },
+ tzdashed/.default=10
+}
+
+%% tzhelplines
+\tikzset{%
+ tzhelplines/.style={help lines,-,tzdotted}
+}
+
+%% tzshorten
+\tikzset{%
+ tzshorten/.style 2 args ={shorten <=#1, shorten >=#2},
+ tzshoretn/.default={2pt}{2pt}
+}
+
+%% tzextend (negative tzshorten)
+\tikzset{%
+ tzextend/.style 2 args ={shorten <=-#1, shorten >=-#2},
+ tzextend/.default={2pt}{2pt}
+}
+
+
+%% tzshowcontrols % (for \tzbezier: tikz manual p.645)
+\tikzset{%
+ tzshowcontrols/.style={%
+ postaction={%
+ decoration={%
+ show path construction,
+ curveto code={%
+ \draw [dotted,#1]
+ (\tikzinputsegmentfirst)
+ -- (\tikzinputsegmentsupporta)
+ -- (\tikzinputsegmentsupportb)
+ -- (\tikzinputsegmentlast);
+ }
+ },
+ decorate
+ }
+ }
+}
+
+%=====================================================
+%%=====================================================
+%%=====================================================
+\ExplSyntaxOn
+%%=====================================================
+%%=====================================================
+
+
+%%%%% help lines
+\NewDocumentCommand\tzhelplines{ s O{} r() d() }
+{
+ \IfBooleanTF { #1 }
+ {
+ \IfNoValueTF { #4 }
+ { \draw [ tzhelplines , use~as~bounding~box , #2 ] (0,0) grid (#3); }
+ { \draw [ tzhelplines , use~as~bounding~box , #2 ] (#3) grid (#4); }
+ }
+ {
+ \IfNoValueTF { #4 }
+ { \draw [ tzhelplines , #2 ] (0,0) grid (#3); }
+ { \draw [ tzhelplines , #2 ] (#3) grid (#4); }
+ }
+}
+
+
+%%%%% \tzbbox
+\NewDocumentCommand\tzbbox{ r() d() }
+{
+ \IfNoValueTF { #2 }
+ {
+ \useasboundingbox (0,0) rectangle (#1);
+ }
+ {
+ \useasboundingbox (#1) rectangle (#2);
+ }
+}
+
+%%%%% \tzgetxyval
+\NewDocumentCommand\tzgetxyval{ r() m m }
+{
+ \tikz@scan@one@point\pgfutil@firstofone(#1)\relax%
+ \pgfmathparse{\the\pgf@x/28.45274}% convert pt to cm
+ \edef#2{\pgfmathresult}%
+ \pgfmathparse{\the\pgf@y/28.45274}% convert pt to cm
+ \edef#3{\pgfmathresult}%
+}
+
+%%% --- end of \tzgetxyval
+
+%%%%%% \tzgetxyval (experimental)
+%%%%%% seems not working
+%\NewDocumentCommand\tzgetxyval{ g r() m m }
+%{
+% \IfNoValueTF { #1 }
+% {
+% \def\tzptToDim{28.45274} % cm: default
+% }
+% {
+% \str_case:nnTF { #1 }
+% {
+% {pt} { \def\tzptToDim{1} }
+% {mm} { \def\tzptToDim{2.845274} }
+% {cm} { \def\tzptToDim{28.45274} }
+% {bp} { \def\tzptToDim{1.00374} }
+% {dd} { \def\tzptToDim{1.07} }
+% {pc} { \def\tzptToDim{12} }
+% {in} { \def\tzptToDim{72.26999} }
+% }
+% {
+% \def\tzptToDim{1} % default unit in tikz
+% }
+% }
+% \tikz@scan@one@point\pgfutil@firstofone(#2)\relax%
+% \pgfmathparse{\the\pgf@x/\tzptToDim}% convert pt to dim
+% \edef#3{\pgfmathresult}%
+% \pgfmathparse{\the\pgf@y/\tzptToDim}% convert pt to dim
+% \edef#4{\pgfmathresult}%
+%}
+%
+%%%% --- end of \tzgetxyval
+
+
+%%%%% Dots
+
+%%% Node Dots %%% (basic: using minimum size)
+
+%%% \tzdot
+%%% *[opt]<shift>(coor){text}[pos,opt](size)
+
+\bool_new:N \l_tzdot_shift_coor_bool
+
+\NewDocumentCommand\tzdot{ s O{} d<> r() +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tzdot_cmd_tl
+
+ \IfValueT { #7 }
+ { \renewcommand\tzdotsize{ #7 } }
+
+ \IfValueTF { #3 }
+ {
+ \tl_set:Nn \l_tzdot_shift_coor_tl { #3 }
+ \bool_set_true:N \l_tzdot_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzdot_shift_coor_tl
+ \bool_set_false:N \l_tzdot_shift_coor_bool
+ }
+
+ \bool_if:NTF \l_tzdot_shift_coor_bool
+ {
+ \tl_put_right:Nx \l_tzdot_cmd_tl
+ {
+ ( [ shift = { (\l_tzdot_shift_coor_tl) } ]#4 ) node
+ }
+ }
+ { \tl_put_right:Nn \l_tzdot_cmd_tl { (#4) node } }
+
+ \IfBooleanTF { #1 }
+ {
+ \tl_put_right:Nn \l_tzdot_cmd_tl
+ { [ tzdot , fill , }
+ }
+ {
+ \tl_put_right:Nn \l_tzdot_cmd_tl
+ { [ tzdot , }
+ }
+ \tl_put_right:Nx \l_tzdot_cmd_tl
+ {
+ label = { \exp_not:n { #6 } \c_colon_str \exp_not:n { #5 } } ,
+ }
+ \tl_put_right:Nn \l_tzdot_cmd_tl
+ {
+ minimum~size = \tzdotsize , #2 ] {}
+ }
+ \exp_last_unbraced:Nf \path \l_tzdot_cmd_tl ;
+}
+
+%%% --- end of \tzdot
+
+
+%%% multiple dots
+%%% coding CAUTION! : _tzdot_ changed to _tzdots_
+
+%%% \tzdots
+%%% repeat pattern: (coor){label}[pos]
+
+\tl_new:N \l_tzdots_opt_tl
+\tl_new:N \l_tzdots_cmd_tl
+\bool_new:N \l_tzdots_shift_coor_bool
+
+\NewDocumentCommand\tzdots{ s O{} d<> }
+{
+ \tl_clear:N \l_tzdots_cmd_tl
+
+ \IfBooleanTF { #1 }
+ { \tl_set:Nn \l_tzdots_STYLE_fill_tl { fill } }
+ { \tl_set:Nn \l_tzdots_STYLE_fill_tl { fill = none } }
+
+ \tl_if_empty:nTF { #2 }
+ { \tl_set:Nn \l_tzdots_opt_tl { tzdot } }
+ { \tl_set:Nn \l_tzdots_opt_tl { tzdot , #2 } }
+
+ \IfValueTF { #3 }
+ {
+ \tl_set:Nn \l_tzdots_shift_coor_tl { #3 }
+ \bool_set_true:N \l_tzdots_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzdots_shift_coor_tl
+ \bool_set_false:N \l_tzdots_shift_coor_bool
+ }
+
+ \tzdots_check_token:n
+}
+
+\cs_new:Npn \tzdots_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tzdots_sub_fn #1 }
+% { \tzdots_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzdots_sub_fn #1 }
+ { ; } { \tzdots_late_opt_fn }
+ }
+ {
+ \tzdots_stop_action
+ }
+}
+
+
+\NewDocumentCommand\tzdots_sub_fn { r() +G{} O{} }
+{
+ \bool_if:NTF \l_tzdots_shift_coor_bool
+ {
+ \tl_put_right:Nx \l_tzdots_cmd_tl
+ {% if shift
+ ( [ shift = { (\l_tzdots_shift_coor_tl) } ]#1 )
+ }
+ }
+ { \tl_put_right:Nn \l_tzdots_cmd_tl { (#1) } }
+
+ \tl_put_right:Nx \l_tzdots_cmd_tl
+ {
+ node
+ [
+ \l_tzdots_STYLE_fill_tl ,
+ minimum~size = \exp_not:n { \tzdotsize } ,
+ label = { \exp_not:n { #3 } \c_colon_str \exp_not:n { #2 } } ,
+ }
+ \tl_put_right:No \l_tzdots_cmd_tl % expand `once'
+ {
+ \l_tzdots_opt_tl
+ ] {}
+ }
+ \tzdots_check_token:n
+}
+
+\NewDocumentCommand\tzdots_late_opt_fn { D(){\tz@initial@dot@size} }
+{
+ \renewcommand\tzdotsize{ #1 }
+
+ \tzdots_stop_action
+}
+
+
+\NewDocumentCommand\tzdots_stop_action {}
+{
+ \exp_last_unbraced:Nf \path \l_tzdots_cmd_tl ;
+}
+
+%%% --- end of \tzdots
+
+
+%%%%% Circle Dots -- (code original, using radius)
+
+\keys_define:nn { keytzCdot }
+{
+ tzcdot .tl_set:N = \key_tzCdot_radius_tl
+}
+
+
+%% (keep)
+%% \tzcdot --- circle dot (original)
+%%% *[<opt>]<shift>(coor){label}[angle](radius)
+
+\clist_new:N \l_tzCdot_opt_clist
+\bool_new:N \l_tzCdot_shift_coor_bool
+
+\NewDocumentCommand\tzcdot{ s o d<> r() +G{} O{} d() }
+{
+ \tl_clear:N \l_tzCdot_opt_tl % (needed)
+ \tl_clear:N \l_tzCdot_cmd_tl
+
+ % default dot radius == arg specifier D<>{\tz@initial@radius}
+ \renewcommand\tzCdotradius{\tz@initial@Cdot@radius}
+
+ \IfValueT { #7 }
+ { \renewcommand\tzCdotradius{ #7 } }
+
+ \IfBooleanTF { #1 }
+ { \tl_set:Nn \l_tzCdot_fill_tl { fill , solid, thin } }
+ { \tl_set:Nn \l_tzCdot_fill_tl { solid , thin } }
+
+ \IfValueTF { #3 }
+ {
+ \tl_set:Nn \l_tzCdot_shift_coor_tl { #3 }
+ \bool_set_true:N \l_tzCdot_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzCdot_shift_coor_tl
+ \bool_set_false:N \l_tzCdot_shift_coor_bool
+ }
+
+ \IfNoValueTF { #2 }
+ {
+ \tl_clear:N \l_tzCdot_opt_tl % arg specifier O{}
+ }
+ {
+ \clist_clear:N \l_tzCdot_opt_tested_clist
+ \clist_set:Nn \l_tzCdot_opt_input_clist { #2 }
+ \clist_map_inline:Nn \l_tzCdot_opt_input_clist
+ {
+ \str_if_in:nnTF { ##1 } { tzcdot }
+ { % (matched item)
+ \clist_pop:NN \l_tzCdot_opt_input_clist \l_tmpa_tl
+ \keys_set:nV { keytzCdot } \l_tmpa_tl % form: { tzcdot=\l_tmpa_tl }
+ \exp_args:NNo \renewcommand\tzCdotradius { \key_tzCdot_radius_tl }
+ \clist_map_break:
+ % non-tested list remains
+ }
+ { % (tested items -> list)
+ \clist_pop:NN \l_tzCdot_opt_input_clist \l_tmpb_tl
+ \clist_put_right:NV \l_tzCdot_opt_tested_clist \l_tmpb_tl
+ }
+ }
+ \clist_concat:NNN \l_tzCdot_opt_clist
+ \l_tzCdot_opt_tested_clist % tested list
+ \l_tzCdot_opt_input_clist % remained list
+ \clist_if_empty:NF \l_tzCdot_opt_clist
+ { % expand x needed
+ \tl_set:Nx \l_tzCdot_opt_tl { \clist_use:Nn \l_tzCdot_opt_clist {,} }
+ }
+ }
+
+ \tl_put_right:Nx \l_tzCdot_cmd_tl
+ {
+ [ \l_tzCdot_fill_tl ,
+ }
+ \tl_put_right:No \l_tzCdot_cmd_tl % expand `once'
+ {
+ \l_tzCdot_opt_tl
+ ]
+ }
+ \bool_if:NTF \l_tzCdot_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzCdot_cmd_tl
+ {
+ ( [ shift = { (\l_tzCdot_shift_coor_tl) } ]#4 )
+ }
+ }
+ { \tl_put_right:Nn \l_tzCdot_cmd_tl { ( #4 ) } } % no shift (normal)
+
+ \tl_put_right:Nn \l_tzCdot_cmd_tl
+ {
+ circle ( \tzCdotradius )
+ }
+ \tl_put_right:Nx \l_tzCdot_cmd_tl
+ {
+ node
+ [ inner~sep = 0pt ,
+ label = { \exp_not:n { #6 } \c_colon_str \exp_not:n { #5 } }
+ ] {}
+ }
+ \exp_last_unbraced:No \draw \l_tzCdot_cmd_tl ;
+}
+
+%%% --- end of \tzcdot
+
+
+%%% multiple dots
+%%% coding CAUTION! : _tzCdot_ changes to _tzCdots
+
+%%% *[<opt>]<shift> (){}[] (){}[] repeated (){}[] ; (radius)
+%%% repeat pattern: (coor){label}[angle]
+
+\clist_new:N \l_tzCdots_opt_clist
+\bool_new:N \l_tzCdots_size_call_bool
+\bool_new:N \l_tzCdots_shift_coor_bool
+
+\NewDocumentCommand\tzcdots{ s o d<> }
+{
+ \renewcommand\tzCdotradius{\tz@initial@Cdot@radius}
+
+ \tl_clear:N \l_tzCdots_opt_tl % (needed)
+ \tl_clear:N \l_tzCdots_cmd_tl
+
+ \IfBooleanTF { #1 }
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfValueTF { #3 }
+ {
+ \tl_set:Nn \l_tzCdots_shift_coor_tl { #3 }
+ \bool_set_true:N \l_tzCdots_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzCdots_shift_coor_tl
+ \bool_set_false:N \l_tzCdots_shift_coor_bool
+ }
+
+ \IfNoValueTF { #2 }
+ {
+ \tl_clear:N \l_tzCdots_opt_tl % arg specifier O{}
+ }
+ {
+ \clist_clear:N \l_tzCdots_opt_tested_clist
+ \clist_set:Nn \l_tzCdots_opt_input_clist { #2 }
+ \clist_map_inline:Nn \l_tzCdots_opt_input_clist
+ {
+ \str_if_in:nnTF { ##1 } { tzcdot }
+ {
+ \clist_pop:NN \l_tzCdots_opt_input_clist \l_tmpa_tl
+ \keys_set:nV { keytzCdot } \l_tmpa_tl
+ \exp_args:NNo \renewcommand\tzCdotradius { \key_tzCdot_radius_tl }
+ \bool_set_true:N \l_tzCdots_size_call_bool
+ \clist_map_break:
+ }
+ {
+ \clist_pop:NN \l_tzCdots_opt_input_clist \l_tmpb_tl
+ \clist_put_right:NV \l_tzCdots_opt_tested_clist \l_tmpb_tl
+ }
+ }
+ \clist_concat:NNN \l_tzCdots_opt_clist
+ \l_tzCdots_opt_tested_clist
+ \l_tzCdots_opt_input_clist
+ \clist_if_empty:NF \l_tzCdots_opt_clist
+ {
+ \tl_set:Nx \l_tzCdots_opt_tl { \clist_use:Nn \l_tzCdots_opt_clist {,} }
+ }
+ }
+
+ \tzCdots_check_token:n
+}
+
+\cs_new:Npn \tzCdots_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tzCdots_sub_fn #1 }
+% { \tzCdots_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzCdots_sub_fn #1 }
+ { ; } { \tzCdots_late_opt_fn }
+ }
+ {
+ \tzCdots_stop_action
+ }
+}
+
+\NewDocumentCommand\tzCdots_sub_fn { r() +G{} O{} }
+{
+ \bool_if:NTF \l_tzCdots_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzCdots_cmd_tl
+ {
+ ( [ shift = { (\l_tzCdots_shift_coor_tl) } ]#1 ) circle (\tzCdotradius)
+ }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzCdots_cmd_tl { (#1) circle (\tzCdotradius) }
+ }
+
+ \tl_put_right:Nx \l_tzCdots_cmd_tl
+ {
+ node
+ [ inner~sep = 0pt ,
+ label = { \exp_not:n { #3 } \c_colon_str \exp_not:n { #2 } }
+ ] {}
+ }
+ \tzCdots_check_token:n
+}
+
+\NewDocumentCommand\tzCdots_late_opt_fn { d() }
+{
+ \IfValueT { #1 }
+ {
+ \bool_if:NF \l_tzCdots_size_call_bool
+ { \renewcommand\tzCdotradius { #1 } }
+ }
+
+ \tzCdots_stop_action
+}
+
+\NewDocumentCommand\tzCdots_stop_action {}
+{
+ \tl_if_empty:NTF \l_tzCdots_opt_tl
+ {
+ \tl_put_left:Nn \l_tzCdots_cmd_tl { ] }
+ }
+ {
+ \tl_put_left:No \l_tzCdots_cmd_tl { \l_tzCdots_opt_tl ] } % expand `once'
+ }
+
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \tl_put_left:Nn \l_tzCdots_cmd_tl { [ fill , solid , thin , }
+ }
+ {
+ \tl_put_left:Nn \l_tzCdots_cmd_tl { [ solid , thin , }
+ }
+
+ \exp_last_unbraced:Nf \draw \l_tzCdots_cmd_tl ;
+
+ \bool_set_false:N \l_tzCdots_size_call_bool
+}
+
+%%% --- end of \tzcdots
+
+
+%%% \tzshoworigin (node text and dot at the origin)
+
+\NewDocumentCommand\tzshoworigin
+ { s O{} d<> D(){0,0} +g O{} D(){\tz@initial@dot@size} }
+{
+ \IfValueTF { #5 }
+ {% if shift
+ \IfValueTF { #3 }
+ {
+ \path [ shift = {(#3)} ] (#4) node
+ [ text~height = 1.25ex , text~depth=.25ex , below~left , #6 ]
+ { #5 } ;
+ \IfBooleanT { #1 } { \tzdot* [ #2 ] ([shift={(#3)}] #4) (#7) }
+ }
+ {% no shift
+ \path (#4) node
+ [ text~height = 1.25ex , text~depth=.25ex , below~left , #6 ]
+ { #5 } ;
+ \IfBooleanT { #1 } { \tzdot* [ #2 ] (#4) (#7) }
+ }
+ }
+ {
+ \IfValueTF { #3 }
+ {% if shift
+ \IfBooleanTF { #1 }
+ {
+ \tzdot* [ #2 ] ([shift={(#3)}] #4) (#7)
+ }
+ {
+ \path [ shift = {(#3)} ] (#4) node
+ [ text~height = 1.25ex , text~depth=.25ex , below~left , #6 ]
+ { 0 } ;
+ }
+ }
+ {% no shift
+ \IfBooleanTF { #1 }
+ {
+ \tzdot* [ #2 ] (#4) (#7)
+ }
+ {
+ \path (#4) node
+ [ text~height = 1.25ex , text~depth=.25ex , below~left , #6 ]
+ { 0 } ;
+ }
+ }
+ }
+}
+
+%%% --- end of \tzshoworigin
+
+
+%%%%% Coordinates
+
+%%% \tzcoor()(){label}[pos]
+\NewDocumentCommand\tzcoor{ s O{} d<> r() r() +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tzcoor_cmd_tl
+
+ \IfBooleanTF { #1 }
+ {
+ \IfValueTF { #3 }
+ {
+ \path ([shift={(#3)}]#4) coordinate (#5) ;
+ \tzdot*[#2]([shift={(#3)}]#4){#6}[#7](#8)
+ }
+ {
+ \path (#4) coordinate (#5) ;
+ \tzdot*[#2](#4){#6}[#7](#8)
+ }
+ }
+ {
+ \IfValueTF { #3 }
+ {
+ \tl_put_right:Nn \l_tzcoor_cmd_tl
+ {
+ ([shift={(#3)}]#4) coordinate
+ }
+ }
+ { \tl_put_right:Nn \l_tzcoor_cmd_tl { (#4) coordinate } }
+
+ \tl_put_right:Nn \l_tzcoor_cmd_tl
+ {
+ [ inner~sep = 0pt ,
+ }
+ \tl_put_right:Nx \l_tzcoor_cmd_tl
+ {
+ label = { \exp_not:n { #7 } \c_colon_str \exp_not:n { #6 } }
+ }
+ \tl_put_right:Nn \l_tzcoor_cmd_tl
+ {
+ ] (#5)
+ }
+ \exp_last_unbraced:No \path \l_tzcoor_cmd_tl ;
+ }
+}
+
+%%% --- end of \tzcoor
+
+
+%%% \tzcoors
+
+\bool_new:N \l_tzcoors_shift_coor_bool
+
+%%% \tzcoors*[opt]<radius> ()(){}[] ()(){}[] repeated ()(){}[];
+%% repeat pattern: (coor)(name){label}[pos]
+\NewDocumentCommand\tzcoors{ s O{} d<> }
+{
+ \tl_clear:N \l_tzcoors_cmd_tl
+ \tl_clear:N \l_tzcoors_tzdot_cmd_tl
+
+ \IfBooleanTF { #1 }
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfValueTF { #2 }
+ { \tl_set:Nn \l_tzcoors_opt_tl { #2 } }
+ { \tl_clear:N \l_tzcoors_opt_tl }
+
+ \IfValueTF { #3 }
+ {
+ \tl_set:Nn \l_tzcoors_shift_coor_tl { #3 }
+ \bool_set_true:N \l_tzcoors_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzcoors_shift_coor_tl
+ \bool_set_false:N \l_tzcoors_shift_coor_bool
+ }
+
+ \tzcoors_check_token:n
+}
+
+\cs_new:Npn \tzcoors_check_token:n #1
+{
+% \str_if_eq:nnTF { #1 } { ( }
+% { \tzcoors_sub_fn ( }
+% { \tzcoors_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzcoors_sub_fn #1 }
+ { ; } { \tzcoors_late_opt_fn }
+ }
+ {
+ \tzcoors_stop_action
+ }
+}
+
+\NewDocumentCommand\tzcoors_sub_fn { r() r() +G{} O{} }
+{
+ \bool_if:NTF \l_tmpa_bool
+ {
+ % collect only coor info
+ \bool_if:NTF \l_tzcoors_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzcoors_cmd_tl
+ { ([ shift = { (\l_tzcoors_shift_coor_tl) } ]#1) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzcoors_cmd_tl { (#1) }
+ }
+ \tl_put_right:Nn \l_tzcoors_cmd_tl
+ { coordinate (#2) }
+ % collect dot info: (coor) [ dot opt ] {}
+ \bool_if:NTF \l_tzcoors_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzcoors_tzdot_cmd_tl
+ { ([ shift = { (\l_tzcoors_shift_coor_tl) } ]#1) }
+ }
+ {% no shift
+ \tl_put_right:Nn \l_tzcoors_tzdot_cmd_tl { (#1) }
+ }
+ \tl_put_right:Nn \l_tzcoors_tzdot_cmd_tl
+ {
+ node
+ [ fill , tzdot = \tzdotsize ,
+ }
+ \tl_put_right:Nx \l_tzcoors_tzdot_cmd_tl
+ {
+ label = { \exp_not:n { #4 } \c_colon_str \exp_not:n { #3 } } ,
+ }
+ \tl_put_right:No \l_tzcoors_tzdot_cmd_tl
+ {
+ \l_tzcoors_opt_tl % expand `once'
+ ] {}
+ }
+ }
+ {
+ \bool_if:NTF \l_tzcoors_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzcoors_cmd_tl
+ { ([ shift = { (\l_tzcoors_shift_coor_tl) } ]#1) coordinate }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzcoors_cmd_tl
+ { (#1) coordinate }
+ }
+ \tl_put_right:Nx \l_tzcoors_cmd_tl
+ { [ label = { \exp_not:n { #4 } \c_colon_str \exp_not:n { #3 } } ] }
+ \tl_put_right:Nn \l_tzcoors_cmd_tl
+ { (#2) }
+ }
+ \tzcoors_check_token:n
+}
+
+\NewDocumentCommand\tzcoors_late_opt_fn { D(){\tz@initial@dot@size} }
+{
+ \renewcommand\tzdotsize{ #1 }
+
+ \tzcoors_stop_action
+}
+
+\cs_new:Npn \tzcoors_stop_action
+{
+ \exp_last_unbraced:Nf \path \l_tzcoors_cmd_tl ;
+ \bool_if:NT \l_tmpa_bool
+ { \exp_last_unbraced:Nf \path \l_tzcoors_tzdot_cmd_tl ; }
+}
+
+%%% --- end of \tzcoors
+
+
+%%% \tzcoorsquick --- with labels (quick view)
+
+\bool_new:N \l_tzcoors_quick_shift_coor_bool
+
+\NewDocumentCommand\tzcoorsquick { s O{} d<> }
+{
+ \tl_clear:N \l_tzcoors_quick_cmd_tl
+ \tl_clear:N \l_tzcoors_quick_tzdot_cmd_tl
+
+ \IfBooleanTF { #1 }
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfValueTF { #2 }
+ { \tl_set:Nn \l_tzcoors_quick_opt_tl { #2 } }
+ { \tl_clear:N \l_tzcoors_quick_opt_tl }
+
+ \IfValueTF { #3 }
+ {
+ \tl_set:Nn \l_tzcoors_quick_shift_coor_tl { #3 }
+ \bool_set_true:N \l_tzcoors_quick_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzcoors_quick_shift_coor_tl
+ \bool_set_false:N \l_tzcoors_quick_shift_coor_bool
+ }
+
+ \tzcoors_quick_check_token:n
+}
+
+\cs_new:Npn \tzcoors_quick_check_token:n #1
+{
+% \str_if_eq:nnTF { #1 } { ( }
+% { \tzcoorsquick_sub_fn ( }
+% { \tzcoorsquick_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzcoorsquick_sub_fn #1 }
+ { ; } { \tzcoorsquick_late_opt_fn }
+ }
+ {
+ \tzcoorsquick_stop_action
+ }
+}
+
+% repetition ***
+\NewDocumentCommand\tzcoorsquick_sub_fn { r() r() +g O{} }
+{
+ \IfValueTF { #3 }
+ { \tl_set:Nx \l_tmpa_tl { \exp_not:n { #3 } } }
+ { \tl_set:Nn \l_tmpa_tl { #2 } } % automatic view
+ \tl_if_empty:nTF { #4 }
+ {
+ \bool_if:NTF \l_tmpa_bool
+ { \tl_set:Nn \l_tmpb_tl { } } % texts with dots (tikz default: above)
+ { \tl_set:Nn \l_tmpb_tl { center } } % only texts
+ }
+ {
+ \tl_set:Nx \l_tmpb_tl { \exp_not:n { #4 } }
+ }
+
+ \bool_if:NTF \l_tmpa_bool
+ { %% glancing labels with dots
+ % collect only coor info
+ % collect only coor info
+ \bool_if:NTF \l_tzcoors_quick_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzcoors_quick_cmd_tl
+ { ([ shift = { (\l_tzcoors_quick_shift_coor_tl) } ]#1) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzcoors_quick_cmd_tl { (#1) }
+ }
+ \tl_put_right:Nn \l_tzcoors_quick_cmd_tl
+ { coordinate (#2) }
+ % collect dot info: (coor) [ dot opt ] {}
+ \bool_if:NTF \l_tzcoors_quick_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzcoors_quick_tzdot_cmd_tl
+ { ([ shift = { (\l_tzcoors_quick_shift_coor_tl) } ]#1) }
+ }
+ {% no shift
+ \tl_put_right:Nn \l_tzcoors_quick_tzdot_cmd_tl { (#1) }
+ }
+ \tl_put_right:Nn \l_tzcoors_quick_tzdot_cmd_tl
+ {
+ node
+ [ fill , tzdot = \tzdotsize ,
+ }
+ \tl_put_right:Nx \l_tzcoors_quick_tzdot_cmd_tl
+ {
+ label = { \l_tmpb_tl \c_colon_str { \l_tmpa_tl } } ,
+ }
+ \tl_put_right:No \l_tzcoors_quick_tzdot_cmd_tl
+ {
+ \l_tzcoors_quick_opt_tl % expand `once'
+ ] {}
+ }
+ }
+ { %% glancing just labels (right on the coors)
+ % collect coor and node info
+ \bool_if:NTF \l_tzcoors_quick_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzcoors_quick_cmd_tl
+ { ([ shift = { (\l_tzcoors_quick_shift_coor_tl) } ]#1) coordinate }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzcoors_quick_cmd_tl
+ { (#1) coordinate }
+ }
+ \tl_put_right:Nx \l_tzcoors_quick_cmd_tl
+ { [ label = { \l_tmpb_tl \c_colon_str { \l_tmpa_tl } } ] }
+ \tl_put_right:Nn \l_tzcoors_quick_cmd_tl
+ { (#2) }
+ }
+
+ \tzcoors_quick_check_token:n
+}
+
+\NewDocumentCommand\tzcoorsquick_late_opt_fn{ D(){\tz@initial@dot@size} }
+{
+ \renewcommand\tzdotsize{ #1 }
+
+ \tzcoorsquick_stop_action
+}
+
+\cs_new:Npn \tzcoorsquick_stop_action
+{
+ \exp_last_unbraced:Nf \path \l_tzcoors_quick_cmd_tl ;
+ \bool_if:NT \l_tmpa_bool
+ { \exp_last_unbraced:Nf \path \l_tzcoors_quick_tzdot_cmd_tl ; }
+}
+
+%%% --- end of \tzcoorsquick
+
+
+
+%%%%% Lines
+
+%%% \tzline
+%% do not use: inner sep=0pt
+
+%%% \tzline
+
+\bool_new:N \l_tzline_shift_coor_bool
+
+%%% \tzline
+\NewDocumentCommand\tzline{ s t+ o d<> d"" }
+{
+ \tl_clear:N \l_tzline_cmd_tl
+
+ \IfBooleanTF { #1 } % (*) or not (NOT USED!)
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 } % (+) or not
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzline_shift_coor_tl { #4 }
+ \bool_set_true:N \l_tzline_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzline_shift_coor_tl
+ \bool_set_false:N \l_tzline_shift_coor_bool
+ }
+
+ \IfValueTF { #3 }
+ { \tl_set:Nn \l_tzline_opt_tl { #3 } }
+ { \tl_clear:N \l_tzline_opt_tl }
+
+ \IfValueTF { #5 }
+ { \tl_set:Nn \l_tzline_namepath_tl { name~path = #5 } }
+ { \tl_clear:N \l_tzline_namepath_tl }
+
+ \tzline_check_token:n
+}
+
+\cs_new:Npn \tzline_check_token:n #1
+{
+ \str_if_eq:nnT { #1 } { ( }
+ { \tzline_sub_fn ( }
+% \tzline_stop_action
+}
+
+%% structure: (coorA) -- node [pos] {text} (coorB) node [pos] {text}
+\NewDocumentCommand\tzline_sub_fn{ r() +G{} O{} d<> r() +G{} O{} D<>{} }
+{
+ % determine connect line STYLE
+ \tl_set:Nn \l_tzline_STYLE_A_tl { -- }
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzline_STYLE_C_tl { #4 }
+ }
+ {
+ \bool_if:NTF \l_tmpb_bool
+ { \tl_set:Nn \l_tzline_STYLE_C_tl { ++ } }
+ { \tl_set:Nn \l_tzline_STYLE_C_tl { } }
+ }
+ % insert connect line STYLE
+ \bool_if:NTF \l_tzline_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzline_cmd_tl
+ { ([ shift = { (\l_tzline_shift_coor_tl) } ]#1) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzline_cmd_tl { (#1) }
+ }
+
+ \tl_put_right:No \l_tzline_cmd_tl % once
+ {
+ \l_tzline_STYLE_A_tl %% just --
+ }
+ \tl_put_right:Nn \l_tzline_cmd_tl
+ {
+ ~ node [ above , #3 ] { #2 }
+ }
+ \tl_put_right:No \l_tzline_cmd_tl % once
+ {
+ \l_tzline_STYLE_C_tl
+ }
+ \bool_if:NTF \l_tmpb_bool
+ {% if ++
+ \tl_put_right:Nn \l_tzline_cmd_tl { (#5) }
+ }
+ {% no ++
+ \bool_if:NTF \l_tzline_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzline_cmd_tl
+ { ([ shift = { (\l_tzline_shift_coor_tl) } ]#5) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzline_cmd_tl { (#5) }
+ }
+ }
+
+ \tl_put_right:Nn \l_tzline_cmd_tl
+ { node [ #7 ] { #6 } }
+
+ % final action
+ \tl_put_left:No \l_tzline_cmd_tl
+ {
+ \l_tzline_opt_tl ] % expand `once'
+ }
+
+ \tl_put_left:Nx \l_tzline_cmd_tl
+ { [ \l_tzline_namepath_tl , }
+
+ \exp_last_unbraced:Nf \draw \l_tzline_cmd_tl #8 ;
+}
+
+%%% --- end of \tzline
+
+
+%%% \tzlines
+
+\bool_new:N \l_tzlines_shift_coor_bool
+
+%% do not use: inner sep=0pt
+\NewDocumentCommand\tzlines{ s t+ O{} d<> D""{} }
+{
+ \tl_clear:N \l_tzlines_cmd_tl
+ \tl_clear:N \l_tzlines_STYLE_tl
+
+ \IfBooleanTF { #1 } % (*) or not (NOT USED!)
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 } % (+) or not
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzlines_shift_coor_tl { #4 }
+ \bool_set_true:N \l_tzlines_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzlines_shift_coor_tl
+ \bool_set_false:N \l_tzlines_shift_coor_bool
+ }
+
+ \IfValueTF { #3 }
+ { \tl_set:Nn \l_tzlines_opt_tl { #3 } }
+ { \tl_clear:N \l_tzlines_opt_tl }
+
+ \IfValueTF { #5 }
+ { \tl_set:Nn \l_tzlines_namepath_tl { name~path = #5 } }
+ { \tl_clear:N \l_tzlines_namepath_tl }
+
+ \int_zero:N \l_tmpa_int
+ \tzlines_check_token:n
+}
+
+\cs_new:Npn \tzlines_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tzlines_sub_fn #1 }
+% { \tzlines_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzlines_sub_fn #1 }
+ { ; } { \tzlines_late_opt_fn }
+ }
+ {
+ \tzlines_stop_action
+ }
+}
+
+\NewDocumentCommand\tzlines_sub_fn{ r() +G{} O{} d<> }
+{
+ \int_incr:N \l_tmpa_int
+ % (from the second round) put line STYLE before the next cmd-tl
+ \int_compare:nT { \l_tmpa_int > 1 }
+ {
+ \tl_put_right:No \l_tzlines_cmd_tl { \l_tzlines_STYLE_tl }
+ \tl_clear:N \l_tzlines_STYLE_tl
+ }
+
+ % collect cmd-tl
+ \bool_if:NTF \l_tzlines_shift_coor_bool
+ {% shift-coor
+ \bool_if:NTF \l_tmpb_bool
+ {% if ++
+ \int_compare:nTF { \l_tmpa_int > 1 }
+ { \tl_put_right:Nn \l_tzlines_cmd_tl { (#1) } } % no shift from 2nd
+ {
+ \tl_put_right:Nx \l_tzlines_cmd_tl
+ { ([ shift = { (\l_tzlines_shift_coor_tl) } ]#1) } % shift first
+ }
+ }
+ {% no ++
+ \tl_put_right:Nx \l_tzlines_cmd_tl
+ { ([ shift = { (\l_tzlines_shift_coor_tl) } ]#1) } % shift all coors
+ }
+ }
+ { \tl_put_right:Nn \l_tzlines_cmd_tl { (#1) } } % no shift (normal)
+
+ % (from the first round on) determine and save STYLE
+ % determine connect line STYLE
+ \tl_set:Nn \l_tzlines_STYLE_A_tl { -- }
+ % save node info (for later use, at the end)
+ \tl_set:Nn \l_tzlines_STYLE_B_tl { ~ node [ #3 ] { #2 } }
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzlines_STYLE_C_tl { #4 } % empty, + , or ++
+ }
+ {
+ \bool_if:NTF \l_tmpb_bool
+ { \tl_set:Nn \l_tzlines_STYLE_C_tl { ++ } }
+ { \tl_set:Nn \l_tzlines_STYLE_C_tl { } }
+ }
+
+ \tl_put_right:No \l_tzlines_STYLE_tl { \l_tzlines_STYLE_A_tl }
+ \tl_put_right:No \l_tzlines_STYLE_tl { \l_tzlines_STYLE_B_tl }
+ \tl_put_right:No \l_tzlines_STYLE_tl { \l_tzlines_STYLE_C_tl }
+
+ \tzlines_check_token:n
+}
+
+\NewDocumentCommand\tzlines_late_opt_fn { D<>{} }
+{
+ \tl_set:Nn \l_tzlines_code_at_end_tl { #1 }
+ \tzlines_stop_action
+}
+
+\NewDocumentCommand\tzlines_stop_action {}
+{
+ \tl_put_right:No \l_tzlines_cmd_tl { \l_tzlines_STYLE_B_tl }
+ \tl_clear:N \l_tzlines_STYLE_tl
+ % gathering options
+ \tl_put_left:No \l_tzlines_cmd_tl
+ {
+ \l_tzlines_opt_tl ] % expand `once' needed
+ }
+ \tl_put_left:Nx \l_tzlines_cmd_tl
+ { [ \l_tzlines_namepath_tl , }
+ % final action
+ \exp_last_unbraced:Nf
+ \draw \l_tzlines_cmd_tl \l_tzlines_code_at_end_tl ;
+}
+
+%%% --- end of \tzlines
+
+
+%%% \tzpolygon (closed path of \tzlines)
+
+\bool_new:N \l_tzpolygon_shift_coor_bool
+
+%% do not use: inner sep=0pt
+\NewDocumentCommand\tzpolygon{ s t+ O{} d<> D""{} }
+{
+ \tl_clear:N \l_tzpolygon_cmd_tl
+ \tl_clear:N \l_tzpolygon_STYLE_tl
+
+ \IfBooleanTF { #1 } % fill(*) or not
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 } % (+) or not
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzpolygon_shift_coor_tl { #4 }
+ \bool_set_true:N \l_tzpolygon_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzpolygon_shift_coor_tl
+ \bool_set_false:N \l_tzpolygon_shift_coor_bool
+ }
+
+ \IfValueTF { #3 }
+ { \tl_set:Nx \l_tzpolygon_opt_tl { #3 } }
+ { \tl_clear:N \l_tzpolygon_opt_tl }
+
+ \IfValueTF { #5 }
+ { \tl_set:Nn \l_tzpolygon_namepath_tl { name~path = #5 } }
+ { \tl_clear:N \l_tzpolygon_namepath_tl }
+
+ \int_zero:N \l_tmpa_int
+ \tzpolygon_check_token:n
+}
+
+\cs_new:Npn \tzpolygon_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tzpolygon_sub_fn #1 }
+% { \tzpolygon_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzpolygon_sub_fn #1 }
+ { ; } { \tzpolygon_late_opt_fn }
+ }
+ {
+ \tzpolygon_stop_action
+ }
+}
+
+\NewDocumentCommand\tzpolygon_sub_fn{ r() +G{} O{} d<> }
+{
+ \int_incr:N \l_tmpa_int
+ % (from the second round) put line STYLE before the next cmd-tl
+ \int_compare:nT { \l_tmpa_int > 1 }
+ {
+ \tl_put_right:No \l_tzpolygon_cmd_tl { \l_tzpolygon_STYLE_tl }
+ \tl_clear:N \l_tzpolygon_STYLE_tl
+ }
+
+ % collect cmd-tl
+ \bool_if:NTF \l_tzpolygon_shift_coor_bool
+ {% shift-coor
+ \bool_if:NTF \l_tmpb_bool
+ {% if ++
+ \int_compare:nTF { \l_tmpa_int > 1 }
+ { \tl_put_right:Nn \l_tzpolygon_cmd_tl { (#1) } } % no shift from 2nd
+ {
+ \tl_put_right:Nx \l_tzpolygon_cmd_tl
+ { ([ shift = { (\l_tzpolygon_shift_coor_tl) } ]#1) } % shift first
+ }
+ }
+ {% no ++
+ \tl_put_right:Nx \l_tzpolygon_cmd_tl
+ { ([ shift = { (\l_tzpolygon_shift_coor_tl) } ]#1) } % shift all coors
+ }
+ }
+ { \tl_put_right:Nn \l_tzpolygon_cmd_tl { (#1) } } % no shift (normal)
+
+ % (from the first round on) determine and save STYLE
+ % determine connect line STYLE
+ \tl_set:Nn \l_tzpolygon_STYLE_A_tl { -- }
+ % save node info (for later use, at the end)
+ \tl_set:Nn \l_tzpolygon_STYLE_B_tl { ~ node [ #3 ] { #2 } }
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzpolygon_STYLE_C_tl { #4 } % empty, + , or ++
+ }
+ {
+ \bool_if:NTF \l_tmpb_bool
+ { \tl_set:Nn \l_tzpolygon_STYLE_C_tl { ++ } }
+ { \tl_set:Nn \l_tzpolygon_STYLE_C_tl { } }
+ }
+
+ \tl_put_right:No \l_tzpolygon_STYLE_tl { \l_tzpolygon_STYLE_A_tl }
+ \tl_put_right:No \l_tzpolygon_STYLE_tl { \l_tzpolygon_STYLE_B_tl }
+ \tl_put_right:No \l_tzpolygon_STYLE_tl { \l_tzpolygon_STYLE_C_tl }
+
+ \tzpolygon_check_token:n
+}
+
+\NewDocumentCommand\tzpolygon_late_opt_fn { G{\tz@initial@fill@opacity} D<>{} }
+{
+ \renewcommand\tzfillopacity{ #1 }
+ \tl_set:Nn \l_tzpolygon_code_at_end_tl { #2 }
+ \tzpolygon_stop_action
+}
+
+\NewDocumentCommand\tzpolygon_stop_action {}
+{
+ \tl_put_right:No \l_tzpolygon_cmd_tl { \l_tzpolygon_STYLE_B_tl }
+ \tl_clear:N \l_tzpolygon_STYLE_tl
+ % fill or not
+ \tl_put_left:No \l_tzpolygon_cmd_tl
+ {
+ \l_tzpolygon_opt_tl ] % expand `once' needed
+ }
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \tl_put_left:Nx \l_tzpolygon_cmd_tl
+ {
+ [ fill=\tzfillcolor , fill~opacity = \tzfillopacity ,
+ text~opacity = 1 ,
+ \l_tzpolygon_namepath_tl ,
+ }
+ }
+ {
+ \tl_put_left:Nx \l_tzpolygon_cmd_tl
+ { [ \l_tzpolygon_namepath_tl , }
+ }
+ % final action
+ \exp_last_unbraced:Nf
+ \draw \l_tzpolygon_cmd_tl \l_tzpolygon_code_at_end_tl -- cycle ;
+}
+
+%%% --- end of \tzpolygon
+
+
+%%% \tzpath
+%% draw=none version of \tzlinks (mainly for filling area)
+
+\bool_new:N \g_tzpath_BEGIN_cmd_bool
+\bool_new:N \g_tzpath_END_cmd_bool
+\bool_new:N \l_tzpath_shift_coor_bool
+
+%% \tzpathAtBegin
+\NewDocumentCommand\tzpathAtBegin{ m }
+{
+ \bool_gset_true:N \g_tzpath_BEGIN_cmd_bool
+ \tl_gset:No \g_tzpath_BEGIN_cmd_tl { #1 }
+}
+
+%% \tzpathAtEnd
+\NewDocumentCommand\tzpathAtEnd{ m }
+{
+ \bool_gset_true:N \g_tzpath_END_cmd_bool
+ \tl_gset:No \g_tzpath_END_cmd_tl { #1 }
+}
+
+%%% \tzpath
+%% do not use: inner sep=0pt
+\NewDocumentCommand\tzpath{ s t+ G{\tz@initial@path@style} O{} d<> D""{} }
+{
+ \tl_clear:N \l_tzpath_cmd_tl
+ \tl_clear:N \l_tzpath_STYLE_tl
+
+ \IfValueT { #3 }
+ { \renewcommand\tzpathstyle{ #3 } }
+
+ \IfBooleanTF { #1 } % (*) or not (NOT USED!)
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 } % (+) or not
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #5 }
+ {
+ \tl_set:Nn \l_tzpath_shift_coor_tl { #5 }
+ \bool_set_true:N \l_tzpath_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzpath_shift_coor_tl
+ \bool_set_false:N \l_tzpath_shift_coor_bool
+ }
+
+ \IfValueTF { #4 }
+ { \tl_set:Nx \l_tzpath_opt_tl { #4 } }
+ { \tl_clear:N \l_tzpath_opt_tl }
+
+ \IfValueTF { #6 }
+ { \tl_set:Nn \l_tzpath_namepath_tl { name~path = #6 } }
+ { \tl_clear:N \l_tzpath_namepath_tl }
+
+ \int_zero:N \l_tmpa_int
+ \tzpath_check_token:n
+}
+
+\cs_new:Npn \tzpath_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tzpath_sub_fn #1 }
+% { \tzpath_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzpath_sub_fn #1 }
+ { ; } { \tzpath_late_opt_fn }
+ }
+ {
+ \tzpath_stop_action
+ }
+}
+
+\NewDocumentCommand\tzpath_sub_fn{ r() O{} +G{} O{} d<> }
+{
+ \int_incr:N \l_tmpa_int
+ % (from the second round) put line STYLE before the next cmd-tl
+ \int_compare:nT { \l_tmpa_int > 1 }
+ {
+ \tl_put_right:No \l_tzpath_cmd_tl { \l_tzpath_STYLE_tl }
+ \tl_clear:N \l_tzpath_STYLE_tl
+ }
+
+ % collect cmd-tl
+ \bool_if:NTF \l_tzpath_shift_coor_bool
+ {% shift-coor
+ \bool_if:NTF \l_tmpb_bool
+ {% if ++
+ \int_compare:nTF { \l_tmpa_int > 1 }
+ { \tl_put_right:Nn \l_tzpath_cmd_tl { (#1) } } % no shift from 2nd
+ {
+ \tl_put_right:Nx \l_tzpath_cmd_tl
+ { ([ shift = { (\l_tzpath_shift_coor_tl) } ]#1) } % shift first
+ }
+ }
+ {% no ++
+ \tl_put_right:Nx \l_tzpath_cmd_tl
+ { ([ shift = { (\l_tzpath_shift_coor_tl) } ]#1) } % shift all coors
+ }
+ }
+ { \tl_put_right:Nn \l_tzpath_cmd_tl { (#1) } } % no shift (normal)
+
+ % (from the first round on) determine and save STYLE
+ % determine connect line STYLE
+ \tl_if_empty:nTF { #2 }
+ { \tl_set:Nn \l_tzpath_STYLE_A_tl { ~ \tzpathstyle ~ } }
+ { \tl_set:Nn \l_tzpath_STYLE_A_tl { #2 } }
+ % save node info (for later use, at the end)
+ \tl_if_empty:nTF { #3 }
+ {
+ \tl_clear:N \l_tzpath_STYLE_B_tl
+ }
+ {
+ \tl_set:Nn \l_tzpath_STYLE_B_tl
+ { ~ node [ #4 ] { #3 } }
+ }
+ \IfValueTF { #5 }
+ {
+ \tl_set:Nn \l_tzpath_STYLE_C_tl { #5 }
+ }
+ {
+ \bool_if:NTF \l_tmpb_bool
+ { \tl_set:Nn \l_tzpath_STYLE_C_tl { ++ } }
+ { \tl_set:Nn \l_tzpath_STYLE_C_tl { } }
+ }
+
+ \tl_put_right:No \l_tzpath_STYLE_tl { \l_tzpath_STYLE_A_tl }
+ \tl_put_right:No \l_tzpath_STYLE_tl { \l_tzpath_STYLE_B_tl }
+ \tl_put_right:No \l_tzpath_STYLE_tl { \l_tzpath_STYLE_C_tl }
+
+ \tzpath_check_token:n
+}
+
+\NewDocumentCommand\tzpath_late_opt_fn { G{\tz@initial@fill@opacity} D<>{} }
+{
+ \renewcommand\tzfillopacity{ #1 }
+ \tl_set:Nn \l_tzpath_code_at_end_tl { #2 }
+ \tzpath_stop_action
+}
+
+\NewDocumentCommand\tzpath_stop_action {}
+{
+ \tl_if_empty:NF \l_tzpath_STYLE_B_tl
+ {
+ \tl_put_right:No \l_tzpath_cmd_tl { \l_tzpath_STYLE_B_tl }
+ }
+ \tl_clear:N \l_tzpath_STYLE_tl
+ %% add at begin/end
+ \bool_if:NT \g_tzpath_BEGIN_cmd_bool
+ { \tl_put_left:Nx \l_tzpath_cmd_tl { \g_tzpath_BEGIN_cmd_tl } }
+ \bool_if:NT \g_tzpath_END_cmd_bool
+ { \tl_put_right:Nx \l_tzpath_cmd_tl { \g_tzpath_END_cmd_tl } }
+ %% collect options
+ \tl_put_left:No \l_tzpath_cmd_tl
+ { \l_tzpath_opt_tl ] } % expand `once' needed
+ % * or not
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \tl_put_left:Nx \l_tzpath_cmd_tl
+ {
+ [ fill=\tzfillcolor , fill~opacity = \tzfillopacity ,
+ text~opacity = 1 ,
+ \l_tzpath_namepath_tl ,
+ }
+ }
+ {
+ \tl_put_left:Nx \l_tzpath_cmd_tl
+ { [ \l_tzpath_namepath_tl , }
+ }
+ %% final action
+ \exp_last_unbraced:Nf
+ \path \l_tzpath_cmd_tl \l_tzpath_code_at_end_tl ; %% path
+
+ \bool_gset_false:N \g_tzpath_BEGIN_cmd_bool
+ \bool_gset_false:N \g_tzpath_END_cmd_bool
+}
+
+%%% --- end of \tzpath
+
+
+%%% \tzto
+
+\bool_new:N \g_tzto_BEGIN_cmd_bool
+\bool_new:N \g_tzto_END_cmd_bool
+\bool_new:N \l_tzto_shift_coor_bool
+
+%% \tztoAtBegin
+\NewDocumentCommand\tztoAtBegin{ m }
+{
+ \bool_gset_true:N \g_tzto_BEGIN_cmd_bool
+ \tl_gset:No \g_tzto_BEGIN_cmd_tl { #1 }
+}
+
+%% \tztoAtEnd
+\NewDocumentCommand\tztoAtEnd{ m }
+{
+ \bool_gset_true:N \g_tzto_END_cmd_bool
+ \tl_gset:No \g_tzto_END_cmd_tl { #1 }
+}
+
+%%% \tzto (main)
+\NewDocumentCommand\tzto{ s t+ o d<> d"" }
+{
+ \tl_clear:N \l_tzto_cmd_tl
+
+ \IfBooleanTF { #1 } % (*) or not (NOT USED!)
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 } % (+) or not
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzto_shift_coor_tl { #4 }
+ \bool_set_true:N \l_tzto_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzto_shift_coor_tl
+ \bool_set_false:N \l_tzto_shift_coor_bool
+ }
+
+ \IfValueTF { #3 }
+ { \tl_set:Nn \l_tzto_opt_tl { #3 } }
+ { \tl_clear:N \l_tzto_opt_tl }
+
+ \IfValueTF { #5 }
+ { \tl_set:Nn \l_tzto_namepath_tl { name~path = #5 } }
+ { \tl_clear:N \l_tzto_namepath_tl }
+
+ \tzto_check_token:n
+}
+
+\cs_new:Npn \tzto_check_token:n #1
+{
+ \str_if_eq:nnT { #1 } { ( }
+ { \tzto_sub_fn ( }
+% \tzto_stop_action
+}
+
+\NewDocumentCommand\tzto_sub_fn{ r() +G{} O{} r() +G{} O{} D<>{} }
+{
+
+ \bool_if:NTF \l_tzto_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzto_cmd_tl
+ { ([ shift = { (\l_tzto_shift_coor_tl) } ]#1) }
+ }
+ { \tl_put_right:Nn \l_tzto_cmd_tl { (#1) } }
+
+ \tl_put_right:Nn \l_tzto_cmd_tl
+ { to ~node [ above , #3 ] { #2 } }
+
+ \bool_if:NTF \l_tmpb_bool
+ {% if ++
+ \tl_put_right:Nn \l_tzto_cmd_tl { ++ (#4) }
+ }
+ {% no ++
+ \bool_if:NTF \l_tzto_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzto_cmd_tl
+ { ([ shift = { (\l_tzto_shift_coor_tl) } ]#4) }
+ }
+ { \tl_put_right:Nn \l_tzto_cmd_tl { (#4) } }
+ }
+
+ \tl_put_right:Nn \l_tzto_cmd_tl
+ { node [ #6 ] { #5 } }
+
+ % add at begin/end
+ \bool_if:NT \g_tzto_BEGIN_cmd_bool
+ { \tl_put_left:Nx \l_tzto_cmd_tl { \g_tzto_BEGIN_cmd_tl } }
+ \bool_if:NT \g_tzto_END_cmd_bool
+ { \tl_put_right:Nx \l_tzto_cmd_tl { \g_tzto_END_cmd_tl } }
+
+ % final action
+ \tl_put_left:No \l_tzto_cmd_tl
+ {
+ \l_tzto_opt_tl ] % expand `once' needed
+ }
+
+ \tl_put_left:Nx \l_tzto_cmd_tl
+ { [ \l_tzto_namepath_tl , }
+
+ \exp_last_unbraced:Nf \draw \l_tzto_cmd_tl #7 ;
+
+ \bool_gset_false:N \g_tzto_BEGIN_cmd_bool
+ \bool_gset_false:N \g_tzto_END_cmd_bool
+% \tl_clear:N \g_tzto_BEGIN_cmd_tl
+% \tl_clear:N \g_tzto_END_cmd_tl
+}
+
+%%% --- end of \tzto
+
+
+%%% \tztos (longer version of \tzto)
+
+\bool_new:N \g_tztos_BEGIN_cmd_bool
+\bool_new:N \g_tztos_END_cmd_bool
+\bool_new:N \l_tztos_shift_coor_bool
+
+%% \tztosAtBegin
+\NewDocumentCommand\tztosAtBegin{ m }
+{
+ \bool_gset_true:N \g_tztos_BEGIN_cmd_bool
+ \tl_gset:No \g_tztos_BEGIN_cmd_tl { #1 }
+}
+
+%% \tztosAtEnd
+\NewDocumentCommand\tztosAtEnd{ m }
+{
+ \bool_gset_true:N \g_tztos_END_cmd_bool
+ \tl_gset:No \g_tztos_END_cmd_tl { #1 }
+}
+
+%%% \tztos (main)
+%% do not use: inner sep=0pt
+\NewDocumentCommand\tztos{ s t+ O{} d<> D""{} }
+{
+ \tl_clear:N \l_tztos_cmd_tl
+ \tl_clear:N \l_tztos_STYLE_tl
+
+% \IfValueT { #3 }
+% { \renewcommand\tztostyle{ #3 } }
+
+ \IfBooleanTF { #1 } % (*) or not (NOT USED!)
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 } % (+) or not
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tztos_shift_coor_tl { #4 }
+ \bool_set_true:N \l_tztos_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tztos_shift_coor_tl
+ \bool_set_false:N \l_tztos_shift_coor_bool
+ }
+
+ \IfValueTF { #3 }
+ { \tl_set:Nn \l_tztos_opt_tl { #3 } }
+ { \tl_clear:N \l_tztos_opt_tl }
+
+ \IfValueTF { #5 }
+ { \tl_set:Nn \l_tztos_namepath_tl { name~path = #5 } }
+ { \tl_clear:N \l_tztos_namepath_tl }
+
+ \int_zero:N \l_tmpa_int
+ \tztos_check_token:n
+}
+
+\cs_new:Npn \tztos_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tztos_sub_fn #1 }
+% { \tztos_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tztos_sub_fn #1 }
+ { ; } { \tztos_late_opt_fn }
+ }
+ {
+ \tztos_stop_action
+ }
+}
+
+%% (coor)[to opt]{text}[node opt]
+\NewDocumentCommand\tztos_sub_fn{ r() O{} +G{} O{} }
+{
+ \int_incr:N \l_tmpa_int
+ % (from the second round) put line STYLE before the next cmd-tl
+ \int_compare:nT { \l_tmpa_int > 1 }
+ {
+ \tl_put_right:No \l_tztos_cmd_tl { \l_tztos_STYLE_tl }
+ \tl_clear:N \l_tztos_STYLE_tl
+ }
+
+ % collect cmd-tl
+ \bool_if:NTF \l_tztos_shift_coor_bool
+ {% shift-coor
+ \bool_if:NTF \l_tmpb_bool
+ {% if ++
+ \int_compare:nTF { \l_tmpa_int > 1 }
+ { \tl_put_right:Nn \l_tztos_cmd_tl { (#1) } } % no shift from 2nd
+ {
+ \tl_put_right:Nx \l_tztos_cmd_tl
+ { ([ shift = { (\l_tztos_shift_coor_tl) } ]#1) } % shift first
+ }
+ }
+ {% no ++
+ \tl_put_right:Nx \l_tztos_cmd_tl
+ { ([ shift = { (\l_tztos_shift_coor_tl) } ]#1) } % shift all coors
+ }
+ }
+ { \tl_put_right:Nn \l_tztos_cmd_tl { (#1) } } % no shift (normal)
+
+ % (from the first round on) determine and save STYLE
+ % determine connect line STYLE
+ \tl_set:Nn \l_tztos_STYLE_A_tl { ~ to [ #2 ] }
+ % save node info (for later use, at the end)
+ \tl_if_empty:nTF { #3 }
+ {
+ \tl_clear:N \l_tztos_STYLE_B_tl
+ }
+ {
+ \tl_set:Nn \l_tztos_STYLE_B_tl
+ { ~ node [ #4 ] { #3 } }
+ }
+ \bool_if:NTF \l_tmpb_bool
+ { \tl_set:Nn \l_tztos_STYLE_C_tl { ++ } }
+ { \tl_set:Nn \l_tztos_STYLE_C_tl { } }
+
+ \tl_put_right:No \l_tztos_STYLE_tl { \l_tztos_STYLE_A_tl }
+ \tl_put_right:No \l_tztos_STYLE_tl { \l_tztos_STYLE_B_tl }
+ \tl_put_right:No \l_tztos_STYLE_tl { \l_tztos_STYLE_C_tl }
+
+ \tztos_check_token:n
+}
+
+\NewDocumentCommand\tztos_late_opt_fn { D<>{} }
+{
+ \tl_set:Nn \l_tztos_code_at_end_tl { #1 }
+ \tztos_stop_action
+}
+
+\NewDocumentCommand\tztos_stop_action {}
+{
+ \tl_if_empty:NF \l_tztos_STYLE_B_tl
+ {
+ \tl_put_right:No \l_tztos_cmd_tl { \l_tztos_STYLE_B_tl }
+ }
+ \tl_clear:N \l_tztos_STYLE_tl
+ % add at begin/end
+ \bool_if:NT \g_tztos_BEGIN_cmd_bool
+ { \tl_put_left:Nx \l_tztos_cmd_tl { \g_tztos_BEGIN_cmd_tl } }
+ \bool_if:NT \g_tztos_END_cmd_bool
+ { \tl_put_right:Nx \l_tztos_cmd_tl { \g_tztos_END_cmd_tl } }
+ % fill or not
+ \tl_put_left:No \l_tztos_cmd_tl
+ {
+ \l_tztos_opt_tl ] % expand `once' needed for user convenience
+ }
+ \tl_put_left:Nx \l_tztos_cmd_tl
+ { [ \l_tztos_namepath_tl , }
+ % final action
+ \exp_last_unbraced:Nf
+ \draw \l_tztos_cmd_tl \l_tztos_code_at_end_tl ; %% draw
+
+ \bool_gset_false:N \g_tztos_BEGIN_cmd_bool
+ \bool_gset_false:N \g_tztos_END_cmd_bool
+% \tl_clear:N \g_tztos_BEGIN_cmd_tl
+% \tl_clear:N \g_tztos_END_cmd_tl
+}
+
+%%% --- end of \tztos
+
+
+%%%%% Figures: circles, frames, ellipses, triangles, etc.
+
+%%% \tzcircle
+
+\NewDocumentCommand\tzcircle
+ { s O{} d<> D""{} r() r() G{\tz@initial@fill@opacity} }
+{
+ \renewcommand\tzfillopacity{#7}
+ \IfBooleanTF { #1 }
+ {
+ \IfValueTF { #3 }
+ {% if shift
+ \draw [ fill = \tzfillcolor , fill~opacity = #7 ,
+ text~opacity = 1 ,
+ name~path = #4 , #2 ] ([shift={(#3)}]#5) circle (#6) ;
+ }
+ {% no shift (normal)
+ \draw [ fill = \tzfillcolor , fill~opacity = #7 ,
+ text~opacity = 1 ,
+ name~path = #4 , #2 ] (#5) circle (#6) ;
+ }
+ }
+ {
+ \IfValueTF { #3 }
+ { \draw [ #2 ] ([shift={(#3)}]#5) circle (#6) ; }
+ { \draw [ #2 ] (#5) circle (#6) ; }
+ }
+}
+
+%%% \tzellipse
+
+\NewDocumentCommand\tzellipse
+ { s O{} d<> D""{} r() r() G{\tz@initial@fill@opacity} }
+{
+ \renewcommand\tzfillopacity{#7}
+ \IfBooleanTF { #1 }
+ {
+ \IfValueTF { #3 }
+ {% if shift
+ \draw [ fill = \tzfillcolor , fill~opacity = #7 ,
+ text~opacity = 1 ,
+ name~path = #4 , #2 ] ([shift={(#3)}]#5) ellipse (#6) ;
+ }
+ {% no shift (normal)
+ \draw [ fill = \tzfillcolor , fill~opacity = #7 ,
+ text~opacity = 1 ,
+ name~path = #4 , #2 ] (#5) ellipse (#6) ;
+ }
+ }
+ {
+ \IfValueTF { #3 }
+ { \draw [ name~path = #4 , #2 ] ([shift={(#3)}]#5) ellipse (#6) ; }
+ { \draw [ name~path = #4 , #2 ] (#5) ellipse (#6) ; }
+ }
+}
+
+
+%%% \tzframe
+
+\NewDocumentCommand\tzframe
+ { s t+ O{} d<> D""{} r() r() G{\tz@initial@fill@opacity} }
+{
+ \renewcommand\tzfillopacity{#8}
+ \IfBooleanTF { #1 }
+ {
+ \IfBooleanTF { #2 }
+ {
+ \IfValueTF { #4 }
+ {% if shift
+ \draw [ fill = \tzfillcolor , fill~opacity = \tzfillopacity ,
+ text~opacity = 1 ,
+ name~path = #5 , #3 ]
+ ([shift={(#4)}]#6) rectangle ++ (#7) ;
+ }
+ {% no shift
+ \draw [ fill = \tzfillcolor , fill~opacity = \tzfillopacity ,
+ text~opacity = 1 ,
+ name~path = #5 , #3 ]
+ (#6) rectangle ++ (#7) ;
+ }
+ }
+ {
+ \IfValueTF { #4 }
+ {% if shift
+ \draw [ fill = \tzfillcolor , fill~opacity = \tzfillopacity ,
+ text~opacity = 1 ,
+ name~path = #5 , #3 ]
+ ([shift={(#4)}]#6) rectangle ([shift={(#4)}]#7) ;
+ }
+ {% no shift
+ \draw [ fill = \tzfillcolor , fill~opacity = \tzfillopacity ,
+ text~opacity = 1 ,
+ name~path = #5 , #3 ]
+ (#6) rectangle (#7) ;
+ }
+ }
+ }
+ {
+ \IfBooleanTF { #2 }
+ {
+ \IfValueTF { #4 }
+ {% if shift
+ \draw [ name~path = #5 , #3 ]
+ ([shift={(#4)}]#6) rectangle ++ (#7) ;
+ }
+ {% no shift
+ \draw [ name~path = #5 , #3 ] (#6) rectangle ++ (#7) ;
+ }
+ }
+ {
+ \IfValueTF { #4 }
+ {% if shift
+ \draw [ name~path = #5 , #3 ]
+ ([shift={(#4)}]#6) rectangle ([shift={(#4)}]#7) ;
+ }
+ {% no shift
+ \draw [ name~path = #5 , #3 ] (#6) rectangle (#7) ;
+ }
+ }
+ }
+}
+
+
+%%% \tzparabola
+
+\bool_new:N \l_tzparabola_shift_coor_bool
+
+\NewDocumentCommand\tzparabola
+{ s t+ O{} d<> D""{} }
+{
+ \tl_clear:N \l_tzparabola_cmd_tl
+
+ \IfBooleanTF { #1 } % NOT USED!!!
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 }
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #5 }
+ { \tl_set:Nn \l_tzparabola_pathname_tl { name~path = #5 } }
+ { \tl_clear:N \l_tzparabola_pathname_tl }
+
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzparabola_shift_coor_tl { #4 }
+ \bool_set_true:N \l_tzparabola_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzparabola_shift_coor_tl
+ \bool_set_false:N \l_tzparabola_shift_coor_bool
+ }
+
+ \IfValueTF { #3 }
+ { \tl_set:Nn \l_tzparabola_opt_tl { #3 } }
+ { \tl_clear:N \l_tzparabola_opt_tl }
+
+ \tzparabola_check_token:n
+}
+
+\cs_new:Npn \tzparabola_check_token:n #1
+{
+ \str_if_eq:nnT { #1 } { ( }
+ { \tzparabola_sub_fn ( }
+% \tzparabola_stop_action
+}
+
+\NewDocumentCommand\tzparabola_sub_fn
+ { r() r() d() +G{} O{} G{\tz@initial@fill@opacity} D<>{} }
+{
+ \renewcommand\tzfillopacity{#6} %% NOT USED! (to be removed)
+
+ \bool_if:NTF \l_tzparabola_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzparabola_cmd_tl
+ { ([shift = { (\l_tzparabola_shift_coor_tl) } ]#1) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzparabola_cmd_tl { (#1) }
+ }
+
+ \IfNoValueTF { #3 }
+ {%% 2 coors
+ \bool_if:NTF \l_tmpb_bool
+ {% if + (relative coor)
+ \bool_if:NTF \l_tzparabola_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzparabola_cmd_tl
+ { parabola ([shift = { (\l_tzparabola_shift_coor_tl) } ]$(#1)+(#2)$) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzparabola_cmd_tl { parabola ($(#1)+(#2)$) }
+ }
+ }
+ {% no + (absolute coor)
+ \bool_if:NTF \l_tzparabola_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzparabola_cmd_tl
+ { parabola ([shift = { (\l_tzparabola_shift_coor_tl) } ]#2) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzparabola_cmd_tl { parabola (#2) }
+ }
+ }
+ }
+ {%% 3 coors
+ \bool_if:NTF \l_tmpb_bool
+ {% if + (relative coor)
+ \tl_put_right:Nn \l_tzparabola_cmd_tl
+ { parabola~bend + (#2) }
+ \bool_if:NTF \l_tzparabola_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzparabola_cmd_tl
+ { ([shift = { (\l_tzparabola_shift_coor_tl) } ]$(#1)+(#3)$) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzparabola_cmd_tl { ($(#1)+(#3)$) }
+ }
+ }
+ {% no + (absolute coor)
+ \bool_if:NTF \l_tzparabola_shift_coor_bool
+ {
+ \tl_put_right:Nx \l_tzparabola_cmd_tl
+ {
+ parabola~bend
+ ([shift = { (\l_tzparabola_shift_coor_tl) } ]#2)
+ }
+ }
+ {
+ \tl_put_right:Nn \l_tzparabola_cmd_tl
+ { parabola~bend (#2) }
+ }
+ \bool_if:NTF \l_tzparabola_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzparabola_cmd_tl
+ { ([shift = { (\l_tzparabola_shift_coor_tl) } ]#3) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzparabola_cmd_tl { (#3) }
+ }
+ }
+ }
+
+ \tl_put_left:No \l_tzparabola_cmd_tl
+ { \l_tzparabola_opt_tl ] } % expand `once'
+ \tl_put_left:Nx \l_tzparabola_cmd_tl
+ { [ \l_tzparabola_pathname_tl , }
+ % final action
+ \exp_last_unbraced:Nf
+ \draw \l_tzparabola_cmd_tl node [ #5 ] { #4 } #7 ;
+}
+
+%%% -- end of \tzparabola
+
+
+%%% \tzbezier
+
+\bool_new:N \l_tzbezier_shift_coor_bool
+
+\NewDocumentCommand\tzbezier{ s t+ O{} d<> D""{tzplot~path} }
+{
+ \tl_clear:N \l_tzbezier_cmd_tl
+
+ \IfBooleanTF { #1 } %% NOT USED!
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_true:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 }
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \IfValueTF { #5 }
+ { \tl_set:Nn \l_tzbezier_pathname_tl { name~path = #5 } }
+ { \tl_clear:N \l_tzbezier_pathname_tl }
+
+ \IfValueTF { #4 }
+ {
+ \tl_set:Nn \l_tzbezier_shift_coor_tl { #4 }
+ \bool_set_true:N \l_tzbezier_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzbezier_shift_coor_tl
+ \bool_set_false:N \l_tzbezier_shift_coor_bool
+ }
+
+ \IfValueTF { #3 }
+ { \tl_set:Nn \l_tzbezier_opt_tl { #3 } }
+ { \tl_clear:N \l_tzbezier_opt_tl }
+
+ \tzbezier_check_token:n
+}
+
+\cs_new:Npn \tzbezier_check_token:n #1
+{
+ \str_if_eq:nnT { #1 } { ( }
+ { \tzbezier_sub_fn ( }
+% \tzbezier_stop_action
+}
+
+\NewDocumentCommand\tzbezier_sub_fn{ r() r() r() d() +G{} O{} D<>{} }
+{
+ \bool_if:NTF \l_tzbezier_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzbezier_cmd_tl
+ { ([shift = { (\l_tzbezier_shift_coor_tl) } ]#1) .. controls }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { (#1) .. controls }
+ }
+
+ \IfNoValueTF { #4 }
+ {%% 3 coors
+ \bool_if:NTF \l_tmpb_bool
+ {% if + (relative coor)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { + (#2) }
+ \bool_if:NTF \l_tzbezier_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzbezier_cmd_tl
+ { .. ([shift = { (\l_tzbezier_shift_coor_tl) } ]$(#1)+(#3)$) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { .. ($(#1)+(#3)$) }
+ }
+ }
+ {% no + (absolute coor)
+ % control coor
+ \bool_if:NTF \l_tzbezier_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzbezier_cmd_tl
+ { ([ shift = { (\l_tzbezier_shift_coor_tl) } ]#2) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { (#2) }
+ }
+ %% end coor
+ \bool_if:NTF \l_tzbezier_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzbezier_cmd_tl
+ { .. ([shift = { (\l_tzbezier_shift_coor_tl) } ]#3) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { .. (#3) }
+ }
+ }
+ }
+ {%% 4 coors
+ \bool_if:NTF \l_tmpb_bool
+ {% if + (relative coor)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { + (#2) and + (#3) }
+ \bool_if:NTF \l_tzbezier_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzbezier_cmd_tl
+ { .. ([shift = { (\l_tzbezier_shift_coor_tl) } ]$(#1)+(#4)$) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { .. ($(#1)+(#4)$) }
+ }
+ }
+ {% no + (absolute coor)
+ %% control coors
+ \bool_if:NTF \l_tzbezier_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzbezier_cmd_tl
+ {
+ ([ shift = { (\l_tzbezier_shift_coor_tl) } ]#2)
+ and
+ ([ shift = { (\l_tzbezier_shift_coor_tl) } ]#3)
+ }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { (#2) and (#3) }
+ }
+ %% end coor
+ \bool_if:NTF \l_tzbezier_shift_coor_bool
+ {% if shift
+ \tl_put_right:Nx \l_tzbezier_cmd_tl
+ { .. ([shift = { (\l_tzbezier_shift_coor_tl) } ]#4) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzbezier_cmd_tl { .. (#4) }
+ }
+ }
+ }
+
+ \tl_put_left:No \l_tzbezier_cmd_tl { \l_tzbezier_opt_tl ] }
+ \tl_put_left:Nx \l_tzbezier_cmd_tl
+ { [ \l_tzbezier_pathname_tl , }
+ % final action
+ \exp_last_unbraced:Nf \draw \l_tzbezier_cmd_tl node [ #6 ] { #5 } #7 ;
+}
+
+%%% -- end of \tzbezier
+
+
+%%% \tzarc
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzarc
+ { s t' O{} d<> D""{} r()
+ >{ \SplitArgument {2} { \tl_to_str:n {:} } } r()
+ }
+}
+{
+ \IfBooleanTF { #1 } {}{} % NOT USED!
+
+ \tl_clear:N \l_tzarc_cmd_tl
+
+ \tzarc_args_process #7
+ \fp_set:Nn \l_tmpa_fp { \tzarcAngleA }
+ \fp_set:Nn \l_tmpb_fp { \tzarcAngleB }
+
+ \tl_put_right:Nn \l_tzarc_cmd_tl
+ { [ name~path = #5 , #3 ] }
+ \IfValueTF { #4 }
+ {% if shift
+ \tl_put_right:Nn \l_tzarc_cmd_tl
+ { ([shift={(#4)}]#6) ++ (\tzarcAngleA \c_colon_str \tzarcRadius) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzarc_cmd_tl
+ { (#6) ++ (\tzarcAngleA \c_colon_str \tzarcRadius) }
+ }
+
+ \tl_put_right:Nx \l_tzarc_cmd_tl
+ {
+ \fp_compare:nTF { \l_tmpa_fp < \l_tmpb_fp }
+ {
+ arc ( \tzarcAngleA
+ \c_colon_str
+ \IfBooleanTF {#2}
+ {\tzarcAngleB - 360}
+ {\tzarcAngleB}
+ \c_colon_str
+ \tzarcRadius )
+ }
+ {
+ arc ( \IfBooleanTF {#2}
+ {\tzarcAngleA - 360}
+ {\tzarcAngleA}
+ \c_colon_str
+ \tzarcAngleB
+ \c_colon_str
+ \tzarcRadius )
+ }
+ }
+
+ \tzarc_sub_fn:n
+}
+
+\NewDocumentCommand\tzarc_args_process{ m m m }
+{
+ \def\tzarcAngleA{#1}
+ \def\tzarcAngleB{#2}
+ \def\tzarcRadius{#3}
+}
+
+\cs_new:Npn \tzarc_sub_fn:n
+{
+ \tzarc_final_actions
+}
+
+\NewDocumentCommand\tzarc_final_actions{ +G{} O{} D<>{} }
+{
+ \tl_put_right:Nn \l_tzarc_cmd_tl
+ { node [ #2 ] { #1 } #3 }
+
+ \exp_last_unbraced:Nf \draw \l_tzarc_cmd_tl ;
+}
+
+%%% --- end of \tzarc
+
+
+
+%%% \tzarcfrom % (works like tikz original)
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzarcfrom
+ { s t' O{} d<> D""{} r()
+ >{ \SplitArgument {2} { \tl_to_str:n {:} } } r()
+ }
+}
+{
+ \IfBooleanTF { #1 } {}{} % NOT USED!
+
+ \tl_clear:N \l_tzarcfrom_cmd_tl
+
+ \tzarcfrom_args_process #7
+ \fp_set:Nn \l_tmpa_fp { \tzarcfromAngleA }
+ \fp_set:Nn \l_tmpb_fp { \tzarcfromAngleB }
+
+ \tl_put_right:Nn \l_tzarcfrom_cmd_tl
+ { [ name~path = #5 , #3 ] }
+
+ \IfValueTF { #4 }
+ {% if shift
+ \tl_put_right:Nn \l_tzarcfrom_cmd_tl
+ { ([shift={(#4)}]#6) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzarcfrom_cmd_tl
+ { (#6) } % ++ (\tzarcfromAngleA \c_colon_str \tzarcfromRadius)
+ }
+
+ \tl_put_right:No \l_tzarcfrom_cmd_tl
+ {
+ \fp_compare:nTF { \l_tmpa_fp < \l_tmpb_fp }
+ {
+ arc ( \tzarcfromAngleA
+ \c_colon_str
+ \IfBooleanTF {#2}
+ {\tzarcfromAngleB - 360}
+ {\tzarcfromAngleB}
+ \c_colon_str
+ \tzarcfromRadius )
+ }
+ {
+ arc ( \IfBooleanTF {#2}
+ {\tzarcfromAngleA - 360}
+ {\tzarcfromAngleA}
+ \c_colon_str
+ \tzarcfromAngleB
+ \c_colon_str
+ \tzarcfromRadius )
+ }
+ }
+
+ \tzarcfrom_sub_fn:n
+
+}
+
+\NewDocumentCommand\tzarcfrom_args_process{ m m m }
+{
+ \def\tzarcfromAngleA{#1}
+ \def\tzarcfromAngleB{#2}
+ \def\tzarcfromRadius{#3}
+}
+
+\cs_new:Npn \tzarcfrom_sub_fn:n
+{
+ \tzarcfrom_final_actions
+}
+
+\NewDocumentCommand\tzarcfrom_final_actions{ +G{} O{} D<>{} }
+{
+ \tl_put_right:Nn \l_tzarcfrom_cmd_tl
+ { node [ #2 ] { #1 } #3 }
+ \exp_last_unbraced:Nf \draw \l_tzarcfrom_cmd_tl ;
+}
+
+%%% --- end of \tzarcfrom
+
+
+%%% \tzarcsfrom % (works like tikz original)
+
+\tl_new:N \l_tzarcsfrom_code_at_end_tl
+
+\NewDocumentCommand\tzarcsfrom { s t' O{} d<> D""{} r() }
+{
+ \IfBooleanTF { #1 } {}{} % NOT USED!
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfBooleanTF { #2 }
+ { \bool_set_true:N \l_tmpb_bool }
+ { \bool_set_false:N \l_tmpb_bool }
+
+ \tl_clear:N \l_tzarcsfrom_cmd_tl
+ \tl_put_right:Nn \l_tzarcsfrom_cmd_tl
+ { [ name~path = #5 , #3 ] }
+
+ \IfValueTF { #4 }
+ {% if shift
+ \tl_put_right:Nn \l_tzarcsfrom_cmd_tl
+ { ([shift={(#4)}]#6) }
+ }
+ {% no shift
+ \tl_put_right:Nn \l_tzarcsfrom_cmd_tl
+ { (#6) } % ++ (\tzarcsfromAngleA \c_colon_str \tzarcsfromRadius)
+ }
+
+ \tzarcsfrom_check_token:n
+}
+
+\cs_new:Npn \tzarcsfrom_check_token:n #1
+{
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzarcsfrom_sub_fn #1 }
+ { ; } { \tzarcsfrom_late_opt_fn }
+ }
+ {
+ \tzarcsfrom_stop_action
+ }
+}
+
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzarcsfrom_sub_fn
+ { >{ \SplitArgument {2} { \tl_to_str:n {:} } } r() +G{} O{}
+ }
+}
+{
+ \tzarcsfrom_args_process #1
+ \fp_set:Nn \l_tmpa_fp { \tzarcsfromAngleA }
+ \fp_set:Nn \l_tmpb_fp { \tzarcsfromAngleB }
+
+ \tl_put_right:Nx \l_tzarcsfrom_cmd_tl
+ {
+ \fp_compare:nTF { \l_tmpa_fp < \l_tmpb_fp }
+ {
+ arc ( \tzarcsfromAngleA
+ \c_colon_str
+ \bool_if:NTF \l_tmpb_bool
+ {\tzarcsfromAngleB - 360}
+ {\tzarcsfromAngleB}
+ \c_colon_str
+ \tzarcsfromRadius )
+ }
+ {
+ arc ( \bool_if:NTF \l_tmpb_bool
+ {\tzarcsfromAngleA - 360}
+ {\tzarcsfromAngleA}
+ \c_colon_str
+ \tzarcsfromAngleB
+ \c_colon_str
+ \tzarcsfromRadius )
+ }
+ }
+ \tl_put_right:Nn \l_tzarcsfrom_cmd_tl
+ { node [ #3 ] { #2 } }
+
+ \tzarcsfrom_check_token:n
+}
+
+\NewDocumentCommand\tzarcsfrom_late_opt_fn { D<>{} }
+{
+ \tl_set:Nn \l_tzarcsfrom_code_at_end_tl { #1 }
+ \tzarcsfrom_stop_action
+}
+
+\NewDocumentCommand\tzarcsfrom_stop_action {}
+{
+ \tl_put_right:No \l_tzarcsfrom_cmd_tl
+ { \l_tzarcsfrom_code_at_end_tl }
+ \exp_last_unbraced:Nf \draw \l_tzarcsfrom_cmd_tl ;
+}
+
+\NewDocumentCommand\tzarcsfrom_args_process{ m m m }
+{
+ \def\tzarcsfromAngleA{#1}
+ \def\tzarcsfromAngleB{#2}
+ \def\tzarcsfromRadius{#3}
+}
+
+%%% --- end of \tzarcsfrom
+
+
+
+%%% \tzwedge
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzwedge
+ { s t' O{} d<> D""{} r()
+ >{ \SplitArgument {2} { \tl_to_str:n {:} } } r()
+ }
+}
+{
+ \tl_clear:N \l_tzwedge_cmd_tl
+
+ \tzwedge_args_process #7
+ \fp_set:Nn \l_tmpa_fp { \tzwedgeAngleA }
+ \fp_set:Nn \l_tmpb_fp { \tzwedgeAngleB }
+
+ \IfBooleanTF { #1 }
+ {
+ \tl_put_right:Nn \l_tzwedge_cmd_tl
+ {
+ [ fill=\tzfillcolor ,
+ fill~opacity = \tzfillopacity , text~opacity = 1 ,
+ name~path = #5 , #3 ]
+ }
+ }
+ {
+ \tl_put_right:Nn \l_tzwedge_cmd_tl
+ { [ name~path = #5 , #3 ] }
+ }
+
+ \IfValueTF { #4 }
+ {
+ \tl_put_right:Nn \l_tzwedge_cmd_tl
+ { ([shift={(#4)}]#6) -- ++ (\tzwedgeAngleA \c_colon_str \tzwedgeRadius) }
+ }
+ {
+ \tl_put_right:Nn \l_tzwedge_cmd_tl
+ { (#6) -- ++ (\tzwedgeAngleA \c_colon_str \tzwedgeRadius) }
+ }
+
+ \tl_put_right:No \l_tzwedge_cmd_tl
+ {
+ \fp_compare:nTF { \l_tmpa_fp < \l_tmpb_fp }
+ {
+ arc ( \tzwedgeAngleA
+ \c_colon_str
+ \IfBooleanTF {#2}
+ {\tzwedgeAngleB - 360}
+ {\tzwedgeAngleB}
+ \c_colon_str
+ \tzwedgeRadius )
+ }
+ {
+ arc ( \IfBooleanTF {#2}
+ {\tzwedgeAngleA - 360}
+ {\tzwedgeAngleA}
+ \c_colon_str
+ \tzwedgeAngleB
+ \c_colon_str
+ \tzwedgeRadius )
+ }
+ }
+
+ \tzwedge_sub_fn:n
+}
+
+\cs_new:Npn \tzwedge_sub_fn:n
+{
+ \tzwedge_final_actions
+}
+
+\NewDocumentCommand\tzwedge_final_actions{ +G{} O{} G{.3} }
+{
+ \tl_if_empty:nTF { #3 }
+ { \renewcommand\tzfillopacity{\tz@initial@fill@opacity} }
+ { \renewcommand\tzfillopacity{#3} }
+
+ \tl_put_right:Nn \l_tzwedge_cmd_tl
+ {
+ node [ midway , #2 ] { #1 }
+ }
+
+ \exp_last_unbraced:Nf \draw \l_tzwedge_cmd_tl -- cycle ;
+}
+
+\NewDocumentCommand\tzwedge_args_process{ m m m }
+{
+ \def\tzwedgeAngleA{#1}
+ \def\tzwedgeAngleB{#2}
+ \def\tzwedgeRadius{#3}
+}
+
+%%% --- end of \tzwedge
+
+
+%%%%% plot of Tikz
+
+%%% \tzplot
+
+\bool_new:N \l_tzplot_shift_coor_bool
+
+\NewDocumentCommand\tzplot{ s O{} G{0} O{} d<> D""{} }
+{
+ \tl_clear:N \l_tzplot_opt_cmd_tl
+ \tl_clear:N \l_tzplot_cmd_tl
+ \tl_clear:N \l_tzplot_nodes_cmd_tl
+ \tl_clear:N \l_tzplot_coors_cmd_tl
+ \tl_clear:N \l_tzplot_code_at_end_tl
+
+ \renewcommand\tzmarksize{\tz@initial@mark@size}
+
+ \tl_put_right:Nn \l_tzplot_opt_cmd_tl
+ {
+ [
+ name~path = #6 ,
+ tension = #3 ,
+ smooth ,
+ tzmark = \tzmarksize ,
+ }
+
+ \IfBooleanT { #1 }
+ {
+ \tl_put_right:Nn \l_tzplot_opt_cmd_tl
+ { mark = * , draw = none , }
+ }
+
+ \IfValueTF { #5 }
+ {
+ \tl_set:Nn \l_tzplot_shift_coor_tl { #5 }
+ \bool_set_true:N \l_tzplot_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzplot_shift_coor_tl
+ \bool_set_false:N \l_tzplot_shift_coor_bool
+ }
+
+ \tl_put_right:Nn \l_tzplot_opt_cmd_tl
+ {
+ #2
+ ]
+ plot [ #4 ] coordinates
+ }
+ \tzplot_check_token:n
+}
+
+\cs_new:Npn \tzplot_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tzplot_sub_fn #1 }
+% { \tzplot_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzplot_sub_fn #1 }
+ { ; } { \tzplot_late_opt_fn }
+ }
+ {
+ \tzplot_stop_action
+ }
+}
+
+\NewDocumentCommand\tzplot_sub_fn{ r() +G{} O{} }
+{
+ % collect coordinates only
+ \bool_if:NTF \l_tzplot_shift_coor_bool
+ {
+ \tl_put_right:Nx \l_tzplot_coors_cmd_tl
+ { ([shift = { (\l_tzplot_shift_coor_tl) } ]#1) }
+ }
+ {
+ \tl_put_right:Nn \l_tzplot_coors_cmd_tl { (#1) }
+ }
+ % collect nodes information
+ \bool_if:NTF \l_tzplot_shift_coor_bool
+ {
+ \tl_put_right:Nx \l_tzplot_nodes_cmd_tl
+ { ([shift = { (\l_tzplot_shift_coor_tl) } ]#1) }
+ }
+ {
+ \tl_put_right:Nn \l_tzplot_nodes_cmd_tl { (#1) }
+ }
+ \tl_put_right:Nx \l_tzplot_nodes_cmd_tl
+ {
+ node
+ [ label = { \exp_not:n { #3 } \c_colon_str \exp_not:n { #2 } }
+ ] {}
+ }
+ \tzplot_check_token:n
+}
+
+\NewDocumentCommand\tzplot_late_opt_fn { d() D<>{} }
+{
+ \IfValueTF { #1 }
+ { \edef\tztmpMarkSize { #1 } }
+ { \edef\tztmpMarkSize { \tz@initial@mark@size } }
+ \tl_put_right:Nn \l_tzplot_code_at_end_tl { #2 }
+ \tzplot_stop_action
+}
+
+\NewDocumentCommand\tzplot_stop_action {}
+{
+ \renewcommand\tzmarksize{ \tztmpMarkSize }
+ % final action
+ \exp_last_unbraced:Nf
+ \draw
+ \l_tzplot_opt_cmd_tl % [opt] plot coordinates
+ { \l_tzplot_coors_cmd_tl } % { (coor-1)(coor-2)...(coor-n) }
+ \l_tzplot_code_at_end_tl % should precede _nodes_cmd_tl
+ \l_tzplot_nodes_cmd_tl % (coor-i) node [opt] {text}, for all i
+ ;
+}
+
+%%% --- end of \tzplot
+
+
+%%% \tzplotcurve
+
+\bool_new:N \l_tzplotcurve_shift_coor_bool
+
+\NewDocumentCommand\tzplotcurve{ s O{} G{1} O{} d<> D""{} }
+{
+ \IfBooleanT { #1 } {}{} % NOT USED!
+
+ \tl_clear:N \l_tzplotcurve_opt_cmd_tl
+ \tl_clear:N \l_tzplotcurve_cmd_tl
+ \tl_clear:N \l_tzplotcurve_nodes_cmd_tl
+ \tl_clear:N \l_tzplotcurve_coors_cmd_tl
+ \tl_clear:N \l_tzplotcurve_code_at_end_tl
+
+ \tl_put_right:Nn \l_tzplotcurve_opt_cmd_tl
+ {
+ [ name~path = #6 ,
+ tension = #3 ,
+ smooth ,
+ tzmark = \tzmarksize ,
+ }
+
+ \IfBooleanT { #1 }
+ {
+ \tl_put_right:Nn \l_tzplotcurve_opt_cmd_tl
+ { mark = * , }
+ }
+
+ \IfValueTF { #5 }
+ {
+ \tl_set:Nn \l_tzplotcurve_shift_coor_tl { #5 }
+ \bool_set_true:N \l_tzplotcurve_shift_coor_bool
+ }
+ {
+ \tl_clear:N \l_tzplotcurve_shift_coor_tl
+ \bool_set_false:N \l_tzplotcurve_shift_coor_bool
+ }
+
+ \tl_put_right:Nn \l_tzplotcurve_opt_cmd_tl
+ {
+ #2
+ ]
+ plot [ #4 ] coordinates
+ }
+ \tzplotcurve_check_token:n
+}
+
+\cs_new:Npn \tzplotcurve_check_token:n #1
+{
+% \token_if_eq_charcode:NNTF #1 (
+% { \tzplotcurve_sub_fn #1 }
+% { \tzplotcurve_stop_action }
+ \str_case:nnF { #1 }
+ {
+ { ( } { \tzplotcurve_sub_fn #1 }
+ { ; } { \tzplotcurve_late_opt_fn }
+ }
+ {
+ \tzplotcurve_stop_action
+ }
+}
+
+\NewDocumentCommand\tzplotcurve_sub_fn{ r() +G{} O{} }
+{
+ % collect coordinates only
+ \bool_if:NTF \l_tzplotcurve_shift_coor_bool
+ {
+ \tl_put_right:Nx \l_tzplotcurve_coors_cmd_tl
+ { ([shift = { (\l_tzplotcurve_shift_coor_tl) } ]#1) }
+ }
+ {
+ \tl_put_right:Nn \l_tzplotcurve_coors_cmd_tl { (#1) }
+ }
+ % collect nodes information
+ \bool_if:NTF \l_tzplotcurve_shift_coor_bool
+ {
+ \tl_put_right:Nx \l_tzplotcurve_nodes_cmd_tl
+ { ([shift = { (\l_tzplotcurve_shift_coor_tl) } ]#1) }
+ }
+ {
+ \tl_put_right:Nn \l_tzplotcurve_nodes_cmd_tl { (#1) }
+ }
+ \tl_put_right:Nx \l_tzplotcurve_nodes_cmd_tl
+ { node
+ [ label = { \exp_not:n { #3 } \c_colon_str \exp_not:n { #2 } }
+ ] {}
+ }
+ \tzplotcurve_check_token:n
+}
+
+\NewDocumentCommand\tzplotcurve_late_opt_fn { d() D<>{} }
+{
+ \IfValueTF { #1 }
+ { \edef\tztmpMarkSize { #1 } }
+ { \edef\tztmpMarkSize { \tz@initial@mark@size } }
+ \tl_put_right:Nn \l_tzplotcurve_code_at_end_tl { #2 }
+ \tzplotcurve_stop_action
+}
+
+\NewDocumentCommand\tzplotcurve_stop_action {}
+{
+ \renewcommand\tzmarksize{ \tztmpMarkSize }
+ % final action
+ \exp_last_unbraced:Nf
+ \draw
+ \l_tzplotcurve_opt_cmd_tl % [opt] plot [ smooth ] coordinates
+ { \l_tzplotcurve_coors_cmd_tl } % { (coor-1)(coor-2)...(coor-n) }
+ \l_tzplotcurve_code_at_end_tl % should precede _nodes_cmd_tl
+ \l_tzplotcurve_nodes_cmd_tl % (coor-i) node [opt] {text}, for all i
+ ;
+}
+
+%%% --- end of \tzplotcurve
+
+
+%%% \tzLFn -- plot Linear Function (LF)
+
+\bool_new:N \g_tzLFn_BEGIN_cmd_bool
+\bool_new:N \g_tzLFn_END_cmd_bool
+
+%% \tzLFnAtBegin
+\NewDocumentCommand\tzLFnAtBegin{ m }
+{
+ \bool_gset_true:N \g_tzLFn_BEGIN_cmd_bool
+ \tl_gset:No \g_tzLFn_BEGIN_cmd_tl { #1 }
+}
+
+%% \tzLFnAtEnd
+\NewDocumentCommand\tzLFnAtEnd{ m }
+{
+ \bool_gset_true:N \g_tzLFn_END_cmd_bool
+ \tl_gset:No \g_tzLFn_END_cmd_tl { #1 }
+}
+
+%%% \tzLFn
+%% \tzLFn : variable = \x (default)
+%% \tzLFn': variable = \y
+
+\NewDocumentCommand \tzLFn { t' o D<>{0,0} d"" }
+{
+ \tl_clear:N \l_tzLFn_cmd_tl
+
+ \IfBooleanTF { #1 }
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \IfValueTF { #3 }
+ {
+ \tl_set:Nn \l_tzLFn_shift_tl
+ { shift = { (#3) } }
+ }
+ { \tl_clear:N \l_tzLFn_shift_tl }
+
+ \IfValueTF { #2 }
+ { \tl_set:Nn \l_tzLFn_opt_tl { #2 } }
+ { \tl_clear:N \l_tzLFn_opt_tl }
+
+ \IfValueTF { #4 }
+ { \tl_set:Nn \l_tzLFn_namepath_tl { name~path = #4 } }
+ { \tl_clear:N \l_tzLFn_namepath_tl }
+
+ \tzLFn_check_token:n
+}
+
+\cs_new:Npn \tzLFn_check_token:n #1
+{
+ \str_if_eq:nnT { #1 } { ( }
+ { \tzLFn_sub_fn ( }
+}
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzLFn_sub_fn
+ { r() d() G{1}
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } r[] + G{} O{} D<>{}
+ }
+}
+{
+ \tzLFn_domain_process #4
+
+ \tl_put_right:Nx \l_tzLFn_cmd_tl
+ {
+ [
+ \l_tzLFn_namepath_tl ,
+ domain = \tzLFnFromVal \c_colon_str \tzLFnToVal , %%% [here?]
+% samples = 200 ,
+ \bool_if:NTF \l_tmpa_bool
+ { variable = \exp_not:n { \y } }
+ { variable = \exp_not:n { \x } } ,
+ \l_tzLFn_shift_tl ,
+ }
+ \tl_put_right:No \l_tzLFn_cmd_tl
+ {
+ \l_tzLFn_opt_tl
+ ]
+ }
+ \bool_if:NT \g_tzLFn_BEGIN_cmd_bool
+ { \tl_put_right:No \l_tzLFn_cmd_tl { \g_tzLFn_BEGIN_cmd_tl } }
+
+ % define LF
+ \tzgetxyval(#1){\tzLFAval}{\tzLFBval}
+ \IfNoValueTF { #2 }
+ {
+ \bool_if:NTF \l_tmpa_bool
+ { \def\tzLFnDEF{#3*(\y-\tzLFBval)+\tzLFAval} }
+ { \def\tzLFnDEF{#3*(\x-\tzLFAval)+\tzLFBval} }
+ }
+ {
+ \tzgetxyval(#2){\tzLFAAval}{\tzLFBBval}
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \edef\tzLFSlope{(\tzLFAAval-\tzLFAval)/(\tzLFBBval-\tzLFBval)}
+ \def\tzLFnDEF{\tzLFSlope*(\y-\tzLFBval)+\tzLFAval}
+ }
+ {
+ \edef\tzLFSlope{(\tzLFBBval-\tzLFBval)/(\tzLFAAval-\tzLFAval)}
+ \def\tzLFnDEF{\tzLFSlope*(\x-\tzLFAval)+\tzLFBval}
+ }
+ }
+
+ \bool_if:NTF \l_tmpa_bool
+ {
+ \tl_put_right:Nn \l_tzLFn_cmd_tl
+ { plot ( { \tzLFnDEF } , \y ) } % \y should not be expanded
+ }
+ {
+ \tl_put_right:Nn \l_tzLFn_cmd_tl
+ { plot ( \x , { \tzLFnDEF } ) } % \x should not be expanded
+ }
+ \bool_if:NT \g_tzLFn_END_cmd_bool
+ { \tl_put_right:No \l_tzLFn_cmd_tl { \g_tzLFn_END_cmd_tl } }
+ \tl_put_right:Nn \l_tzLFn_cmd_tl
+ { node [ #6 ] { #5 } }
+ % final action
+ \exp_last_unbraced:Nf \draw \l_tzLFn_cmd_tl #7 ;
+
+ \bool_gset_false:N \g_tzLFn_BEGIN_cmd_bool
+ \bool_gset_false:N \g_tzLFn_END_cmd_bool
+}
+
+\NewDocumentCommand\tzLFn_domain_process{ m m }
+{
+ \def\tzLFnFromVal{#1}
+ \def\tzLFnToVal{#2}
+}
+
+%%% --- end of \tzLFn
+
+
+%% \tzfn (variable=\x -- default)
+
+\bool_new:N \g_tzfn_BEGIN_cmd_bool
+\bool_new:N \g_tzfn_END_cmd_bool
+
+%% \tzfnAtBegin
+\NewDocumentCommand\tzfnAtBegin{ m }
+{
+ \bool_gset_true:N \g_tzfn_BEGIN_cmd_bool
+ \tl_gset:No \g_tzfn_BEGIN_cmd_tl { #1 }
+}
+
+%% \tzfnAtEnd
+\NewDocumentCommand\tzfnAtEnd{ m }
+{
+ \bool_gset_true:N \g_tzfn_END_cmd_bool
+ \tl_gset:No \g_tzfn_END_cmd_tl { #1 }
+}
+
+%% \tzfn (variable=\x)
+%% \tzfn' (variable=\y) -- equivalent to \tzfnofy
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzfn
+ { t' O{} D<>{0,0} D""{} m
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } r[] +G{} O{} D<>{}
+ }
+}
+{
+ \tl_clear:N \l_tzfn_cmd_tl
+
+ \IfBooleanTF { #1 }
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ \tzfn_domain_process #6
+
+ \tl_set:No \l_tmpa_tl { \tl_to_str:n { #5 } }
+ \tl_set:No \l_tzfn_pathname_tl { \tl_tail:N \l_tmpa_tl }
+ \tl_put_right:Nx \l_tzfn_cmd_tl
+ {
+ [
+ name~path =
+ \tl_if_empty:nTF { #4 } { \l_tzfn_pathname_tl } { #4 } ,
+ domain = \tzfnFromVal \c_colon_str \tzfnToVal ,
+ samples = 200 ,
+ shift = { (#3) } ,
+ \bool_if:NTF \l_tmpa_bool
+ { variable = \exp_not:n { \y } }
+ { variable = \exp_not:n { \x } } ,
+ \exp_not:n { #2 }
+ ]
+ }
+ \bool_if:NT \g_tzfn_BEGIN_cmd_bool
+ { \tl_put_right:No \l_tzfn_cmd_tl { \g_tzfn_BEGIN_cmd_tl } }
+ \bool_if:NTF { \l_tmpa_bool }
+ {
+ \tl_put_right:Nn \l_tzfn_cmd_tl
+ { plot ( { #5 } , \y ) } % \y should not be expanded
+ }
+ {
+ \tl_put_right:Nn \l_tzfn_cmd_tl
+ { plot ( \x , { #5 } ) } % \x should not be expanded
+ }
+ \bool_if:NT \g_tzfn_END_cmd_bool
+ { \tl_put_right:No \l_tzfn_cmd_tl { \g_tzfn_END_cmd_tl } }
+ \tl_put_right:Nn \l_tzfn_cmd_tl
+ { node [ #8 ] { #7 } }
+ % final action
+ \exp_last_unbraced:Nf \draw \l_tzfn_cmd_tl #9 ;
+
+ \bool_gset_false:N \g_tzfn_BEGIN_cmd_bool
+ \bool_gset_false:N \g_tzfn_END_cmd_bool
+}
+
+\NewDocumentCommand\tzfn_domain_process{ m m }
+{
+ \def\tzfnFromVal{#1}
+ \def\tzfnToVal{#2}
+}
+
+%%% --- end of \tzfn
+
+
+%% \tzvfnat
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzvfnat
+ { O{} D<>{0,0} D""{} m
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d[] +G{} O{} D<>{}
+ }
+}
+{
+ \tl_clear:N \l_tzvfnat_cmd_tl
+
+ \IfValueT { #5 } { \tzvfnat_domain_process #5 }
+
+ \tl_put_right:Nx \l_tzvfnat_cmd_tl
+ {
+ [
+ name~path = #3 ,
+ shift = { (#2) } ,
+% samples = 200 ,
+ \exp_not:n { #1 }
+ ]
+ }
+ \IfValueTF { #5 }
+ {
+ \tl_put_right:Nn \l_tzvfnat_cmd_tl
+ { (#4,\tzvfnatFromVal) -- (#4,\tzvfnatToVal) }
+ }
+ {
+ \tl_put_right:Nn \l_tzvfnat_cmd_tl
+ {
+ (#4,0 |- current~bounding~box.south)
+ -- (#4,0 |- current~bounding~box.north)
+ }
+ }
+ \tl_put_right:Nn \l_tzvfnat_cmd_tl
+ { node [ #7 ] { #6 } }
+ % final action
+ \exp_last_unbraced:Nf \draw \l_tzvfnat_cmd_tl #8 ;
+}
+
+\NewDocumentCommand\tzvfnat_domain_process{ m m }
+{
+ \def\tzvfnatFromVal{#1}
+ \def\tzvfnatToVal{#2}
+}
+
+%%% --- end of \tzvfnat
+
+
+%%% \tzvfn (On) -- vertical line through (x,y)
+
+
+%%% \tzvfn
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzvfn
+ { O{} d<> D""{} r()
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d[] +G{} O{} D<>{}
+ }
+}
+{
+ \tl_clear:N \l_tzvfn_cmd_tl
+
+ \IfValueT { #5 } { \tzvfn_domain_process #5 }
+
+ \tl_put_right:Nx \l_tzvfn_cmd_tl
+ {
+ [
+ name~path = #3 ,
+ \exp_not:n { #1 }
+ ]
+ }
+ \IfValueTF { #5 }
+ {
+ \IfValueTF { #2 }
+ {
+ \tl_put_right:Nn \l_tzvfn_cmd_tl
+ {
+ ([shift = { (#2) }]#4 |- 0,\tzvfnFromVal) --
+ ([shift = { (#2) }]#4 |- 0,\tzvfnToVal) }
+ }
+ {
+ \tl_put_right:Nn \l_tzvfn_cmd_tl
+ { (#4 |- 0,\tzvfnFromVal) -- (#4 |- 0,\tzvfnToVal) }
+ }
+ }
+ {
+ \IfValueTF { #2 }
+ {
+ \tl_put_right:Nn \l_tzvfn_cmd_tl
+ {
+ ([shift = { (#2) }]#4 |- current~bounding~box.south) --
+ ([shift = { (#2) }]#4 |- current~bounding~box.north)
+ }
+ }
+ {
+ \tl_put_right:Nn \l_tzvfn_cmd_tl
+ {
+ (#4 |- current~bounding~box.south) --
+ (#4 |- current~bounding~box.north)
+ }
+ }
+ }
+ \tl_put_right:Nn \l_tzvfn_cmd_tl
+ { node [ #7 ] { #6 } }
+ % final action
+ \exp_last_unbraced:Nf \draw \l_tzvfn_cmd_tl #8 ;
+}
+
+\NewDocumentCommand\tzvfn_domain_process{ m m }
+{
+ \def\tzvfnFromVal{#1}
+ \def\tzvfnToVal{#2}
+}
+
+%%% --- end of \tzvfn
+
+
+%% \tzhfnat
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzhfnat
+ { O{} D<>{0,0} D""{} m
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d[] +G{} O{} D<>{}
+ }
+}
+{
+ \tl_clear:N \l_tzhfnat_cmd_tl
+
+ \IfValueT { #5 } { \tzhfnat_domain_process #5 }
+
+ \tl_put_right:Nx \l_tzhfnat_cmd_tl
+ {
+ [
+ name~path = #3 ,
+ shift = { (#2) } ,
+ variable = \exp_not:n { \x } ,
+ \exp_not:n { #1 }
+ ]
+ }
+ \IfValueTF { #5 }
+ {
+ \tl_put_right:Nn \l_tzhfnat_cmd_tl
+ { (\tzhfnatFromVal,#4) -- (\tzhfnatToVal,#4) }
+ }
+ {
+ \tl_put_right:Nn \l_tzhfnat_cmd_tl
+ {
+ (0,#4 -| current~bounding~box.west)
+ -- (0,#4 -| current~bounding~box.east)
+ }
+ }
+ \tl_put_right:Nn \l_tzhfnat_cmd_tl
+ { node [ #7 ] { #6 } }
+ % final action
+ \exp_last_unbraced:Nf \draw \l_tzhfnat_cmd_tl #8 ;
+}
+
+\NewDocumentCommand\tzhfnat_domain_process{ m m }
+{
+ \def\tzhfnatFromVal{#1}
+ \def\tzhfnatToVal{#2}
+}
+
+%%% --- end of \tzhfnat
+
+
+%%% \tzhfn (On) -- horizontal line through (x,y)
+
+%% \tzhfn
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzhfn
+ { O{} d<> D""{} r()
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d[] +G{} O{} D<>{}
+ }
+}
+{
+ \tl_clear:N \l_tzhfn_cmd_tl
+
+ \IfValueT { #5 } { \tzhfn_domain_process #5 }
+
+ \tl_put_right:Nx \l_tzhfn_cmd_tl
+ {
+ [
+ name~path = #3 ,
+ variable = \exp_not:n { \x } ,
+ \exp_not:n { #1 }
+ ]
+ }
+ \IfValueTF { #5 }
+ {
+ \IfValueTF { #2 }
+ {
+ \tl_put_right:Nn \l_tzhfn_cmd_tl
+ {
+ ([shift = { (#2) }]\tzhfnFromVal,0 |- #4) --
+ ([shift = { (#2) }]\tzhfnToVal,0 |- #4)
+ }
+ }
+ {
+ \tl_put_right:Nn \l_tzhfn_cmd_tl
+ {
+ (\tzhfnFromVal,0 |- #4) --
+ (\tzhfnToVal,0 |- #4)
+ }
+ }
+ }
+ {
+ \IfValueTF { #2 }
+ {
+ \tl_put_right:Nn \l_tzhfn_cmd_tl
+ {
+ ([shift = { (#2) }]#4 -| current~bounding~box.west)
+ -- ([shift = { (#2) }]#4 -| current~bounding~box.east)
+ }
+ }
+ {
+ \tl_put_right:Nn \l_tzhfn_cmd_tl
+ {
+ (#4 -| current~bounding~box.west)
+ -- (#4 -| current~bounding~box.east)
+ }
+ }
+ }
+ \tl_put_right:Nn \l_tzhfn_cmd_tl
+ { node [ #7 ] { #6 } }
+ % final action
+ \exp_last_unbraced:Nf \draw \l_tzhfn_cmd_tl #8 ;
+}
+
+\NewDocumentCommand\tzhfn_domain_process{ m m }
+{
+ \def\tzhfnFromVal{#1}
+ \def\tzhfnToVal{#2}
+}
+
+%%% --- end of \tzhfn
+
+
+%%%%% Intersections
+
+%%% \tzXpoint -- intersection point of two paths
+\NewDocumentCommand\tzXpoint
+ { s O{} m m D(){intersection} O{1} +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tzXpoint_cmd_tl
+ \path [ name~intersections = { of = #3 ~ and ~ #4 , name = #5 } ] ;
+ \tl_put_right:Nn \l_tzXpoint_cmd_tl
+ {
+ (#5-#6) coordinate (#5)
+ \IfBooleanTF {#1}
+ { node [ tzdot , fill , minimum~size = #9 , }
+ { node [ tzdot , draw = none , minimum~size = 0pt , }
+ }
+
+ \tl_put_right:Nx \l_tzXpoint_cmd_tl
+ {
+ label = { \exp_not:n { #8 } \c_colon_str \exp_not:n { #7 } } ,
+ }
+
+ \tl_put_right:Nn \l_tzXpoint_cmd_tl
+ {
+ #2
+ ] {}
+ }
+
+ \exp_last_unbraced:Nf \path \l_tzXpoint_cmd_tl ;
+}
+
+%%% --- end of \tzXpoint
+
+
+%%% \tzvXpointat -- vertical intersection point at x
+%%% *[<opt>]{<path>}(<coor>)(<coor name>)[<nth>]{<label>}[<[<opt>]angle>](<dotsize>)
+\NewDocumentCommand\tzvXpointat
+ { s O{} m m D(){intersection} O{1} +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tzvXpointat_cmd_tl
+
+ \tzvfnat[draw=none]"tzvXpoint-At" {#4} % depends on (current bounding box)
+
+ \path [ name~intersections = { of = tzvXpoint-At ~and~ #3 , name = #5 } ] ;
+
+ \tl_put_right:Nn \l_tzvXpointat_cmd_tl
+ {
+ (#5-#6) coordinate (#5)
+ \IfBooleanTF {#1}
+ { node [ tzdot , fill , minimum~size = #9 , }
+ { node [ tzdot , draw = none , minimum~size = 0pt , }
+ }
+
+ \tl_put_right:Nx \l_tzvXpointat_cmd_tl
+ {
+ label = { \exp_not:n { #8 } \c_colon_str \exp_not:n { #7 } } ,
+ }
+
+ \tl_put_right:Nn \l_tzvXpointat_cmd_tl
+ {
+ #2
+ ] {}
+ }
+
+ \exp_last_unbraced:Nf \path \l_tzvXpointat_cmd_tl ;
+ \tl_clear:N \tzvXpointat_cmd_tl
+}
+
+%%% --- end of \tzvXpointat
+
+
+%%% \tzvXpoint (On)
+%%% -- vertical intersection point at (x,y) of a path
+%%% *[<opt>]{<path>}(<coor>)(<coor name>)[<nth>]{<label>}[<[<opt>]angle>](<dotsize>)
+\NewDocumentCommand\tzvXpoint
+ { s O{} m r() D(){intersection} O{1} +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tzvXpoint_cmd_tl
+
+ \tzvfn[draw=none]"tzvXpoint-On"(#4) % depends on (current bounding box)
+
+ \path [ name~intersections = { of = tzvXpoint-On ~and~ #3 , name = #5 } ] ;
+ \tl_put_right:Nn \l_tzvXpoint_cmd_tl
+ {
+ (#5-#6) coordinate (#5)
+ \IfBooleanTF {#1}
+ { node [ tzdot , fill , minimum~size = #9 , }
+ { node [ tzdot , draw = none , minimum~size = 0pt , }
+ }
+
+ \tl_put_right:Nx \l_tzvXpoint_cmd_tl
+ {
+ label = { \exp_not:n { #8 } \c_colon_str \exp_not:n { #7 } } ,
+ }
+
+ \tl_put_right:Nn \l_tzvXpoint_cmd_tl
+ {
+ #2
+ ] {}
+ }
+
+ \exp_last_unbraced:Nf \path \l_tzvXpoint_cmd_tl ;
+ \tl_clear:N \l_tzvXpoint_cmd_tl
+}
+
+%%% --- end of \tzvXpoint
+
+
+
+%%% \tzhXpointat -- horizontal intersection point at y
+\NewDocumentCommand\tzhXpointat
+ { s O{} m m D(){intersection} O{1} +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tzhXpointat_cmd_tl
+
+ \tzhfnat[draw=none]"tzhXpoint-At"{#4} % depends on (current bounding box)
+
+ \path [ name~intersections = { of = tzhXpoint-At ~and~ #3 , name = #5 } ] ;
+ \tl_put_right:Nn \l_tzhXpointat_cmd_tl
+ {
+ (#5-#6) coordinate (#5)
+ \IfBooleanTF {#1}
+ { node [ tzdot , fill , minimum~size = #9 , }
+ { node [ tzdot , draw = none , minimum~size = 0pt , }
+ }
+
+ \tl_put_right:Nx \l_tzhXpointat_cmd_tl
+ {
+ label = { \exp_not:n { #8 } \c_colon_str \exp_not:n { #7 } } ,
+ }
+
+ \tl_put_right:Nn \l_tzhXpointat_cmd_tl
+ {
+ #2
+ ] {}
+ }
+
+ \exp_last_unbraced:Nf \path \l_tzhXpointat_cmd_tl ;
+ \tl_clear:N \l_tzhXpointat_cmd_tl
+}
+
+%%% --- end of \tzhXpointat
+
+
+%%% \tzhXpoint (On) -- horizontal intersection point at (x,y)
+\NewDocumentCommand\tzhXpoint
+ { s O{} m r() D(){intersection} O{1} +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tzhXpoint_cmd_tl
+
+ \tzhfn[draw=none]"tzhXpoint-On"(#4) % depends on (current bounding box)
+
+ \path [ name~intersections = { of = tzhXpoint-On ~and~ #3 , name = #5 } ] ;
+
+ \tl_put_right:Nn \l_tzhXpoint_cmd_tl
+ {
+ (#5-#6) coordinate (#5)
+ \IfBooleanTF {#1}
+ { node [ tzdot , fill , minimum~size = #9 , }
+ { node [ tzdot , draw = none , minimum~size = 0pt , }
+ }
+
+ \tl_put_right:Nx \l_tzhXpoint_cmd_tl
+ {
+ label = { \exp_not:n { #8 } \c_colon_str \exp_not:n { #7 } } ,
+ }
+
+ \tl_put_right:Nn \l_tzhXpoint_cmd_tl
+ {
+ #2
+ ] {}
+ }
+
+ \exp_last_unbraced:Nf \path \l_tzhXpoint_cmd_tl ;
+ \tl_clear:N \l_tzhXpoint_cmd_tl
+}
+
+%%% --- end of \tzhXpoint
+
+
+
+%%%%% Axes
+
+%%% \tzaxes
+
+\NewDocumentCommand\tzaxes{ s O{} D<>{0,0} r() d() +G{} O{} +G{} O{} }
+{
+ \IfNoValueTF { #5 }
+ {
+ \draw [ -> , #2 ]
+ ( 0,0 |- #3 ) -- ( #4 |- #3 ) node [ right , #7 ] { #6 } ;
+ \draw [ -> , #2 ]
+ ( #3 |- 0,0 ) -- ( #3 |- #4 ) node [ above , #9 ] { #8 } ;
+ }
+ {
+ \draw [ -> , #2 ]
+ ( #4 |- #3 ) -- ( #5 |- #3 ) node [ right , #7 ] { #6 } ;
+ \draw [ -> , #2 ]
+ ( #3 |- #4 ) -- ( #3 |- #5 ) node [ above , #9 ] { #8 } ;
+ }
+ \IfBooleanT { #1 }
+ {
+ \coordinate (bbxOpposite) at (current~bounding~box.north~east) ;
+ \coordinate (bbxOrigin) at (current~bounding~box.south~west) ;
+ \useasboundingbox (bbxOrigin) rectangle (bbxOpposite) ;
+ }
+}
+
+%%% \tzaxesL -- simpler version of \tzaxes
+
+\NewDocumentCommand\tzaxesL{ t' O{} d<> r() r() +G{} O{} +G{} O{} }
+{
+ \IfBooleanTF { #1 }
+ {
+ \draw [ #2 ]
+ \IfValueTF { #3 }
+ {
+ ( [shift={(#3)}]#5 ) -- ( [shift={(#3)}]#4 |- #5 )
+ }
+ {
+ ( #5 ) -- ( #4 |- #5 )
+ }
+ node [ left , #7 ] { #6 } ;
+ \draw [ #2 ]
+ \IfValueTF { #3 }
+ {
+ ( [shift={(#3)}]#5 ) -- ( [shift={(#3)}]#5 |- #4 )
+ }
+ {
+ ( #5 ) -- ( #5 |- #4 )
+ }
+ node [ below , #9 ] { #8 } ;
+ }
+ {
+ \draw [ #2 ]
+ \IfValueTF { #3 }
+ {
+ ( [shift={(#3)}]#4 ) -- ( [shift={(#3)}]#5 |- #4 )
+ }
+ {
+ ( #4 ) -- ( #5 |- #4 )
+ }
+ node [ right , #7 ] { #6 } ;
+ \draw [ #2 ]
+ \IfValueTF { #3 }
+ {
+ ( [shift={(#3)}]#4 ) -- ( [shift={(#3)}]#4 |- #5 )
+ }
+ {
+ ( #4 ) -- ( #4 |- #5 )
+ }
+ node [ above , #9 ] { #8 } ;
+ }
+}
+
+%%% -- end of \tzaxesL
+
+%%% \tzaxisx
+
+\NewDocumentCommand\tzaxisx{ s O{} D<>{0} m m G{} O{} }
+{
+ \draw [ -> , #2 ]
+ ( #4 , #3 ) -- ( #5 , #3 ) node [ right , #7 ] { #6 } ;
+}
+
+%%% \tzaxisy
+
+\NewDocumentCommand\tzaxisy{ s O{} D<>{0} m m G{} O{} }
+{
+ \draw [ -> , #2 ]
+ ( #3 , #4 ) -- ( #3 , #5 ) node [ above , #7 ] { #6 } ;
+}
+
+
+%%%%% Ticks
+
+%%% \tztikcs : (combine \tzticksx and \tzticksy)
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzticks
+ { s O{} D<>{0,0}
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d() m O{}
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d() G{} O{}
+ }
+}
+{
+ \tzgetxyval(#3){\tzticksXshift}{\tzticksYshift}
+ \IfValueT { #4 } { \tzticks_Xlength_process #4 }
+ %% ------
+ \IfValueT { #7 } { \tzticks_Ylength_process #7 }
+
+ \IfBooleanTF { #1 }
+ {
+ \IfNoValueT { #4 }
+ {
+ \def\tzticksXFromVal{0pt}
+ \def\tzticksXToVal{3pt}
+ }
+ \foreach \xx / \tzXtext in { #5 }
+ \draw [ shift = {(0,\tzticksYshift)} , #2 ]
+ (\xx , \tzticksXFromVal)
+ -- (\xx , \tzticksXToVal) ; % ignores \txXtext
+ %% --------
+ \IfNoValueT { #7 }
+ {
+ \def\tzticksYFromVal{0pt}
+ \def\tzticksYToVal{3pt}
+ }
+ \foreach \yy/\tzYtext in { #8 }
+ \draw [ shift = {(\tzticksXshift,0)} , #2 ]
+ (\tzticksYFromVal , \yy)
+ -- (\tzticksYToVal , \yy) ; % ignores \txXtext
+ }
+ {
+ \IfNoValueT { #4 }
+ {
+ \def\tzticksXFromVal{0pt}
+ \def\tzticksXToVal{0pt}
+ }
+ \foreach \xx / \tzXtext in { #5 }
+ \draw [ shift = {(0,\tzticksYshift)} , #2 ]
+ (\xx ,\tzticksXFromVal)
+ -- (\xx , \tzticksXToVal)
+ (\xx , 0 ) node
+ [ text~height = 1.25ex ,
+ text~depth = .25ex ,
+ below , #6 ] {\tzXtext} ;
+ %% --------
+ \IfNoValueT { #7 }
+ {
+ \def\tzticksYFromVal{0pt}
+ \def\tzticksYToVal{0pt}
+ }
+ \foreach \yy / \tzYtext in { #8 }
+ \draw [ shift = {(\tzticksXshift,0)} , #2 ]
+ (\tzticksYFromVal , \yy)
+ -- (\tzticksYToVal , \yy)
+ (0 , \yy)
+ node [ left , #9 ] { \tzYtext } ;
+ }
+}
+
+\NewDocumentCommand\tzticks_Xlength_process { m m }
+{
+ \def\tzticksXFromVal{#1}
+ \def\tzticksXToVal{#2}
+}
+%% --------
+\NewDocumentCommand\tzticks_Ylength_process { m m }
+{
+ \def\tzticksYFromVal{#1}
+ \def\tzticksYToVal{#2}
+}
+
+%%% --- end of \tzticks
+
+
+%%% \tztikcsx -- ticks and labels along the x axis
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzticksx
+ { s O{} D<>{0}
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d() m O{}
+ }
+}
+{
+ \IfValueT { #4 } { \tzticksx_length_process #4 }
+
+ \IfBooleanTF { #1 }
+ {
+ \IfNoValueT { #4 }
+ {
+ \def\tzticksxFromVal{0pt}
+ \def\tzticksxToVal{3pt}
+ }
+ \foreach \xx / \tzxtext in { #5 }
+ \draw [ shift = {(0,#3)} , #2 ]
+ (\xx , \tzticksxFromVal)
+ -- (\xx , \tzticksxToVal) ;
+ }
+ {
+ \IfNoValueT { #4 }
+ {
+ \def\tzticksxFromVal{0pt}
+ \def\tzticksxToVal{0pt}
+ }
+ \foreach \xx / \tzxtext in { #5 }
+ \draw [ shift = {(0,#3)} , #2 ]
+ (\xx ,\tzticksxFromVal)
+ -- (\xx , \tzticksxToVal)
+ (\xx , 0 ) node
+ [ text~height = 1.25ex ,
+ text~depth = .25ex ,
+ below , #6 ] {\tzxtext} ;
+
+ }
+}
+
+\NewDocumentCommand\tzticksx_length_process { m m }
+{
+ \def\tzticksxFromVal{#1}
+ \def\tzticksxToVal{#2}
+}
+
+%%% --- end of \tzticksx
+
+
+%%% \tztikcsy -- ticks and labels along with the y axis
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzticksy
+ { s O{} D<>{0}
+ >{ \SplitArgument {1} { \tl_to_str:n {:} } } d() m O{}
+ }
+}
+{
+
+ \IfValueT { #4 } { \tzticksy_length_process #4 }
+
+ \IfBooleanTF { #1 }
+ {
+ \IfNoValueT { #4 }
+ {
+ \def\tzticksyFromVal{0pt}
+ \def\tzticksyToVal{3pt}
+ }
+ \foreach \yy/\tzytext in { #5 }
+ \draw [ shift = {(#3,0)} , #2 ]
+ (\tzticksyFromVal , \yy)
+ -- (\tzticksyToVal , \yy) ;
+ }
+ {
+ \IfNoValueT { #4 }
+ {
+ \def\tzticksyFromVal{0pt}
+ \def\tzticksyToVal{0pt}
+ }
+ \foreach \yy / \tzytext in { #5 }
+ \draw [ shift = {(#3,0)} , #2 ]
+ (\tzticksyFromVal , \yy)
+ -- (\tzticksyToVal , \yy)
+ (0 , \yy)
+ node [ left , #6 ] { \tzytext } ;
+ }
+}
+
+\NewDocumentCommand\tzticksy_length_process { m m }
+{
+ \def\tzticksyFromVal{#1}
+ \def\tzticksyToVal{#2}
+}
+
+%%% --- end of \tzticksy
+
+
+%%%%% Projections
+%% lines and tick labels of projection onto x/y axis
+
+%%% \tzproj
+
+\NewDocumentCommand\tzproj
+ { s O{} d<> r() G{} O{} G{} O{} D(){\tz@initial@dot@size} }
+{
+ \IfValueTF { #3 }
+ { \coordinate (tzProj) at (#3) ; }
+ { \coordinate (tzProj) at (0,0) ; }
+ \draw [ dotted , #2 ]
+ (#4 |- tzProj)
+ node [ text~height = 1.25ex ,
+ text~depth = .25ex ,
+ below , #6 ] { #5 }
+ -- (#4) -- (tzProj |- #4)
+ node [ left , #8 ] {#7} ;
+ \IfBooleanT {#1} { \tzdot*(#4)(#9) }
+}
+
+%%% \tzprojx
+
+\NewDocumentCommand\tzprojx
+ { s O{} d<> r() G{} O{} D(){\tz@initial@dot@size} }
+{
+ \IfValueTF { #3 }
+ { \coordinate (tzProjx) at (#3) ; }
+ { \coordinate (tzProjx) at (0,0) ; }
+ \draw [ dotted , #2 ] (#4)
+ -- (#4 |- tzProjx)
+ node [ text~height = 1.25ex ,
+ text~depth = .25ex ,
+ below , #6 ] { #5 } ;
+ \IfBooleanT { #1 } { \tzdot*(#4)(#7) }
+}
+
+%%% \tzprojy
+
+\NewDocumentCommand\tzprojy
+ { s O{} d<> r() G{} O{} D(){\tz@initial@dot@size} }
+{
+ \IfValueTF { #3 }
+ { \coordinate (tzProjy) at (#3) ; }
+ { \coordinate (tzProjy) at (0,0) ; }
+ \draw [ dotted , #2 ] (#4)
+ -- (#4 -| tzProjy)
+ node [ left , #6 ] { #5 } ;
+ \IfBooleanT { #1 } { \tzdot*(#4)(#7) }
+}
+
+
+%%%%% Nodes
+
+%%% \tznode -- putting texts (and labels as option)
+
+\NewDocumentCommand\tznode{ s O{} d<> r() D(){tzNodeName} +G{} O{} }
+{
+ \IfBooleanTF { #1 }
+ {
+ \IfValueTF { #3 }
+ { \node [ draw , #2 ] (#5) at ([shift={(#3)}]#4) [ #7 ] { #6 } ; }
+ { \node [ draw , #2 ] (#5) at (#4) [ #7 ] { #6 } ; }
+ }
+ {
+ \IfValueTF { #3 }
+ { \node [ #2 ] (#5) at ([shift={(#3)}]#4) [ #7 ] { #6 } ; }
+ { \node [ #2 ] (#5) at (#4) [ #7 ] { #6 } ; }
+ }
+}
+
+
+%%% \tznodedot
+\NewDocumentCommand\tznodedot
+ { s O{} d<> r() D(){tzNodeName} +G{} O{} D(){\tz@initial@dot@size} }
+{
+ \tl_clear:N \l_tznodedot_cmd_tl
+
+ \renewcommand\tzdotsize{ #8 }
+
+ \IfValueTF { #3 }
+ {% if shift
+ \tl_put_right:Nn \l_tznodedot_cmd_tl
+ { ([shift={(#3)}]#4) node (#5) }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tznodedot_cmd_tl
+ { (#4) node (#5) }
+ }
+ \IfBooleanTF { #1 }
+ {
+ \tl_put_right:Nn \l_tznodedot_cmd_tl { [ tzdot , fill , }
+ }
+ {
+ \tl_put_right:Nn \l_tznodedot_cmd_tl { [ tzdot , }
+ }
+ \tl_put_right:Nx \l_tznodedot_cmd_tl
+ {
+ label = { \exp_not:n { #7 } \c_colon_str \exp_not:n { #6 } } ,
+ }
+ \tl_put_right:Nn \l_tznodedot_cmd_tl
+ {
+ minimum~size = \tzdotsize , #2 ] {}
+ }
+ \exp_last_unbraced:Nf \path \l_tznodedot_cmd_tl ;
+}
+
+%%% --- end of \tznodedot
+
+
+
+%%% \tznodeframe
+
+\NewDocumentCommand\tznodeframe
+ { s O{} d<> r() D(){tzNodeName} +G{} O{} G{\tz@initial@fill@opacity} }
+{
+ \renewcommand\tzfillopacity{#8}
+ \IfBooleanTF { #1 }
+ {
+ \node [
+ draw , rectangle ,
+ fill ,
+ fill~opacity = \tzfillopacity , text~opacity = 1 ,
+ #2
+ ]
+ (#5) at \IfValueTF { #3 } { ([shift={(#3)}]#4) } { (#4) }
+ [ draw = black , text = black , #7 ] { #6 } ;
+ }
+ {
+ \node [ draw , rectangle , #2 ]
+ (#5) at \IfValueTF { #3 } { ([shift={(#3)}]#4) } { (#4) }
+ [ text = black , #7 ] { #6 } ;
+ }
+}
+
+
+%%% \tznodebox \tznoderectangle
+\let\tznodebox\tznodeframe
+\let\tznoderectangle\tznodeframe
+
+
+%%% \tznodecircle
+
+\NewDocumentCommand\tznodecircle
+ { s O{} d<> r() D(){tzNodeName} +G{} O{} G{\tz@initial@fill@opacity} }
+{
+ \renewcommand\tzfillopacity{#8}
+ \IfBooleanTF { #1 }
+ {
+ \node [
+ draw , circle ,
+ fill ,
+ fill~opacity = \tzfillopacity , text~opacity = 1 ,
+ #2
+ ]
+ (#5) at \IfValueTF { #3 } { ([shift={(#3)}]#4) } { (#4) }
+ [ draw = black , text = black , #7 ] { #6 } ;
+ }
+ {
+ \node [ draw , circle , #2 ]
+ (#5) at \IfValueTF { #3 } { ([shift={(#3)}]#4) } { (#4) }
+ [ text = black , #7 ] { #6 } ;
+ }
+}
+
+%%% \tznodeellipse
+
+\NewDocumentCommand\tznodeellipse
+ { s O{} d<> r() D(){tzNodeName} +G{} O{} G{\tz@initial@fill@opacity} }
+{
+ \renewcommand\tzfillopacity{#8}
+ \IfBooleanTF { #1 }
+ {
+ \node [
+ draw , ellipse ,
+ fill ,
+ fill~opacity = \tzfillopacity , text~opacity = 1 ,
+ #2
+ ]
+ (#5) at \IfValueTF { #3 } { ([shift={(#3)}]#4) } { (#4) }
+ [ draw = black , text = black , #7 ] { #6 } ;
+ }
+ {
+ \node [ draw , ellipse , #2 ]
+ (#5) at \IfValueTF { #3 } { ([shift={(#3)}]#4) } { (#4) }
+ [ text = black , #7 ] { #6 } ;
+ }
+}
+
+%%% \tznodeoval
+\let\tznodeoval\tznodeellipse
+
+
+
+%%%%% Secant lines
+
+%% secant line
+
+%%% \tzsecantat
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzsecantat
+ { s O{} d<> D""{} m m m
+ >{ \SplitArgument { 1 } { \tl_to_str:n {:} } } o
+ }
+}
+{
+ \tl_clear:N \l_tzsecantat_cmd_tl
+
+ \IfBooleanTF { #1 } % NOT USED!
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ % define two points
+ \tzvXpointat{#5}{#6}(LX-point) % vertical X point
+ \tzvXpointat{#5}{#7}(RX-point) % vertical X point
+
+ % collect cmd_tl
+
+ \IfNoValueTF { #8 }
+ {
+ \IfValueTF { #3 }
+ {% if shift
+ \tl_put_right:Nn \l_tzsecantat_cmd_tl
+ {
+ [ name~path = #4 , #2 ]
+ ([ shift = { (#3) } ]LX-point) -- ([ shift = { (#3) } ]RX-point)
+ }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzsecantat_cmd_tl
+ {
+ [ name~path = #4 , #2 ]
+ (LX-point) -- (RX-point)
+ }
+ }
+ }
+ {
+ \tzsecantat_domain_process #8
+ \tzgetxyval(LX-point){\tzTANLLX}{\tzTANLLY}
+ \tzgetxyval(RX-point){\tzTANRRX}{\tzTANRRY}
+
+ \edef\tzTANSlope{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)}
+ \def\tzsecantatLFn{\tzTANSlope*(\x-\tzTANLLX)+\tzTANLLY}
+
+ \IfValueTF { #3 }
+ {% shift
+ \tl_put_right:Nn \l_tzsecantat_cmd_tl
+ {
+ [ name~path = #4 ,
+ shift = { (#3) } ,
+ }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzsecantat_cmd_tl
+ {
+ [ name~path = #4 ,
+ }
+ }
+
+ \tl_put_right:Nx \l_tzsecantat_cmd_tl
+ {
+ domain = \tzsecantatFromVal \c_colon_str \tzsecantatToVal ,
+ }
+ \tl_put_right:Nn \l_tzsecantat_cmd_tl
+ {
+ #2 ]
+ plot ( \x , { \tzsecantatLFn } ) % \x should not be expanded
+ }
+ }
+
+ \tzsecantat_sub_fn:n
+}
+
+\NewDocumentCommand\tzsecantat_domain_process{ m m }
+{
+ \def\tzsecantatFromVal{#1}
+ \def\tzsecantatToVal{#2}
+}
+
+\cs_new:Npn \tzsecantat_sub_fn:n
+{
+ \tzsecantat_final_actions
+}
+
+\NewDocumentCommand\tzsecantat_final_actions { +G{} O{} D<>{} }
+{
+ \begin{pgfonlayer}{\tzsecantlayer}
+ \exp_last_unbraced:Nf \draw \l_tzsecantat_cmd_tl node [ #2 ] { #1 } #3 ;
+ \end{pgfonlayer}
+ % to resolve TikZ issue: unknown path name with layer group
+ \exp_last_unbraced:Nf \path \l_tzsecantat_cmd_tl ;
+}
+
+%%% --- end of \tzsecantat
+
+
+%%% \tzsecant
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tzsecant
+ { s O{} d<> d"" m r() r()
+ >{ \SplitArgument { 1 } { \tl_to_str:n {:} } } o
+ }
+}
+{
+ \tl_clear:N \l_tzsecant_cmd_tl
+
+ \IfBooleanTF { #1 } % NOT USED!
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ % define two points
+ \tzvXpoint{#5}(#6)(LX-point) % vertical X point
+ \tzvXpoint{#5}(#7)(RX-point) % vertical X point
+
+ % collect cmd_tl
+ \IfNoValueTF { #8 }
+ {
+ \IfValueTF { #3 }
+ {% if shift
+ \tl_put_right:Nn \l_tzsecant_cmd_tl
+ {
+ [ name~path = #4 , #2 ]
+ ([ shift = { (#3) } ]LX-point) -- ([ shift = { (#3) } ]RX-point)
+ }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzsecant_cmd_tl
+ {
+ [ name~path = #4 , #2 ]
+ (LX-point) -- (RX-point)
+ }
+ }
+ }
+ {
+ \tzsecant_domain_process #8
+ \tzgetxyval(LX-point){\tzTANLLX}{\tzTANLLY}
+ \tzgetxyval(RX-point){\tzTANRRX}{\tzTANRRY}
+
+ \edef\tzTANSlope{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)}
+ \def\tzsecantLFn{\tzTANSlope*(\x-\tzTANLLX)+\tzTANLLY}
+
+ \IfValueTF { #3 }
+ {% shift
+ \tl_put_right:Nn \l_tzsecant_cmd_tl
+ {
+ [ name~path = #4 ,
+ shift = { (#3) } ,
+ }
+ }
+ {% no shift (normal)
+ \tl_put_right:Nn \l_tzsecant_cmd_tl
+ {
+ [ name~path = #4 ,
+ }
+ }
+
+ \tl_put_right:Nx \l_tzsecant_cmd_tl
+ {
+ domain = \tzsecantFromVal \c_colon_str \tzsecantToVal ,
+ }
+ \tl_put_right:Nn \l_tzsecant_cmd_tl
+ {
+ #2 ]
+ plot ( \x , { \tzsecantLFn } ) % \x should not be expanded
+ }
+ }
+
+ \tzsecant_sub_fn:n
+}
+
+\NewDocumentCommand\tzsecant_domain_process{ m m }
+{
+ \def\tzsecantFromVal{#1}
+ \def\tzsecantToVal{#2}
+}
+
+\cs_new:Npn \tzsecant_sub_fn:n
+{
+ \tzsecant_final_actions
+}
+
+\NewDocumentCommand\tzsecant_final_actions { +G{} O{} D<>{} }
+{
+ \begin{pgfonlayer}{\tzsecantlayer}
+ \exp_last_unbraced:Nf \draw \l_tzsecant_cmd_tl node [ #2 ] { #1 } #3 ;
+ \end{pgfonlayer}
+ % to resolve TikZ issue: unknown path name with layer group
+ \exp_last_unbraced:Nf \path \l_tzsecant_cmd_tl ;
+}
+
+%%% --- end of \tzsecant
+
+
+%%%%% Slope and Tangent
+
+%%% to **resolve** the discrepancy issue due to bounding box
+%%% for \tzslope(at) and \tztangent(at)
+%%% (ndh)
+
+\NewDocumentCommand \IfNodeDefined { m m m }
+{
+ \@ifundefined{pgf@sh@ns@#1}
+ {#3}
+ {#2}
+}
+
+\AddToHook{env/tikzpicture/before}{%
+ \@ifundefined{pgf@sh@ns@bbxBottom}
+ {}
+ { \cs_undefine:N \pgf@sh@ns@bbxBottom }
+ \def\TANCurve{} \def\TANWhere{}
+}
+%\AddToHook{env/tikzpicture/before}{%
+% \@ifundefined{pgf@sh@ns@bbxBottom}
+% {}
+% { \cs_undefine:N \pgf@sh@ns@bbxBottom }
+%}
+
+%%% Do not forget to declare, before final action,
+%%% \gdef\TANCurve{<#m>}\gdef\TANWhere{<#n>}
+
+
+%%%%% Tangent lines
+
+%%% ref. \settztangentepsilon
+
+\bool_new:N \l_tztangentat_bbox_bool
+
+%%% \tztangentat -- tangent to a path at x
+%%% [<opt>]<shift coor>"<path name>"{<path>}{<x>}(<epsilon1>,<epsilon2>)[<from>:<to>]{<text>}[<pos,opt>]<code.append>
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tztangentat
+ { s O{} d<> D""{} m m
+ >{ \SplitArgument { 1 } { , } } d()
+ >{ \SplitArgument { 1 } { \tl_to_str:n {:} } } r[] }
+ }
+{
+ \tl_clear:N \l_tztangentat_cmd_tl
+
+ \IfBooleanTF { #1 } % NOT USED!
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ % to resolve discrepancy (due to bounding box), when repeated
+ \bool_if:nTF
+ {
+ \str_if_eq_p:ee { \TANCurve } { #5 } &&
+ \str_if_eq_p:ee { \TANWhere } { #6 }
+ }
+ { \bool_set_true:N \l_tztangentat_bbox_bool }
+ { \bool_set_false:N \l_tztangentat_bbox_bool }
+
+ % for local change of epsilon_1 and _2
+ \IfValueT { #7 }
+ {
+ \tztangentat_epsilon_process #7
+ \renewcommand\tztangentepsilonL{\tztangentatEpsilonOne}
+ \renewcommand\tztangentepsilonR{\tztangentatEpsilonTwo}
+ }
+
+ \tztangentat_domain_process #8
+
+ % getting ready
+ \coordinate (LXcoor) at ($(#6,0)-(\tztangentepsilonL,0)$) ;
+ \coordinate (RXcoor) at ($(#6,0)+(\tztangentepsilonR,0)$) ;
+
+ \bool_if:NTF \l_tztangentat_bbox_bool
+ {
+ \IfNodeDefined{bbxBottom}{}
+ {
+ \coordinate (bbxTop) at (current~bounding~box.north) ;
+ \coordinate (bbxBottom) at (current~bounding~box.south) ;
+ }
+ }
+ {
+ \coordinate (bbxTop) at (current~bounding~box.north) ;
+ \coordinate (bbxBottom) at (current~bounding~box.south) ;
+ }
+
+ % find vertical X points
+ \path [ name~path = C-vline ] (#6,0 |- bbxBottom) -- (#6,0 |- bbxTop) ;
+ \path [ name~intersections = { of = #5 ~ and ~ C-vline , name = TANp } ] ;
+
+ \path [ name~path = L-vline ] (LXcoor |- bbxBottom) -- (LXcoor |- bbxTop) ;
+ \path [ name~intersections = { of = #5 ~ and ~ L-vline , name = LXcut } ] ;
+
+ \path [ name~path = R-vline ] (RXcoor |- bbxBottom) -- (RXcoor |- bbxTop) ;
+ \path [ name~intersections = { of = #5 ~ and ~ R-vline , name = RXcut } ] ;
+
+ % move to tangent point
+ \coordinate (tzXproj)
+ at ($(LXcut-1)!(TANp-1)!(RXcut-1)$); % projection
+ \coordinate (LLpoint)
+ at ($(LXcut-1)+(TANp-1)-(tzXproj)$); % move
+ \coordinate (RRpoint)
+ at ($(RXcut-1)+(TANp-1)-(tzXproj)$); % move
+
+ % determine final extended points
+ \tl_set:Nx \l_tmpa_tl
+ {
+ (RRpoint) -- (TANp-1) --
+ ([turn]0 \c_colon_str ~ -\tztangentatFromVal) coordinate (final-LL)
+ }
+ \tl_set:Nx \l_tmpb_tl
+ {
+ (LLpoint) -- (TANp-1) --
+ ([turn]0 \c_colon_str ~ \tztangentatToVal) coordinate (final-RR)
+ }
+
+ \exp_last_unbraced:Nf \path \l_tmpa_tl ;
+ \exp_last_unbraced:Nf \path \l_tmpb_tl ;
+
+ \tzgetxyval(LLpoint){\tzTANLLX}{\tzTANLLY}
+ \tzgetxyval(RRpoint){\tzTANRRX}{\tzTANRRY}
+
+ \edef\tzTANSlope{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)}
+ \def\tztangentatLFn{\tzTANSlope*(\x-\tzTANLLX)+\tzTANLLY}
+
+ \IfValueTF { #3 }
+ {
+ \tl_put_right:Nn \l_tztangentat_cmd_tl
+ {
+ [ name~path = #4 ,
+ shift = { (#3) } ,
+ }
+ }
+ {
+ \tl_put_right:Nn \l_tztangentat_cmd_tl
+ {
+ [ name~path = #4 ,
+ }
+ }
+
+ \tl_put_right:Nx \l_tztangentat_cmd_tl
+ {
+ domain = \tztangentatFromVal \c_colon_str \tztangentatToVal ,
+ }
+
+ \tl_put_right:Nn \l_tztangentat_cmd_tl
+ {
+ #2 ]
+ plot ( \x , { \tztangentatLFn } ) % \x should not be expanded
+ }
+
+ \gdef\TANCurve{#5}\gdef\TANWhere{#6}
+
+ \tztangentat_sub_fn:n
+}
+
+\NewDocumentCommand\tztangentat_epsilon_process{ m m }
+{
+ \def\tztangentatEpsilonOne{#1}
+ \def\tztangentatEpsilonTwo{#2}
+}
+
+\NewDocumentCommand\tztangentat_domain_process{ m m }
+{
+ \def\tztangentatFromVal{#1}
+ \def\tztangentatToVal{#2}
+}
+
+\cs_new:Npn \tztangentat_sub_fn:n
+{
+ \tztangentat_final_actions
+}
+
+\NewDocumentCommand\tztangentat_final_actions { +G{} O{} D<>{} }
+{
+ \begin{pgfonlayer}{\tztangentlayer}
+ \exp_last_unbraced:Nf \draw \l_tztangentat_cmd_tl
+ node [ black , above~right , #2 ] { #1 } #3 ;
+ \end{pgfonlayer}
+ % to resolve TikZ issue: unknown path name with layer group
+ \exp_last_unbraced:Nf \path \l_tztangentat_cmd_tl ;
+}
+
+%%% --- end of \tztangentat
+
+
+\bool_new:N \l_tztangent_bbox_bool
+
+%%% \tztangent (On) -- tangent to a path at (x,y)
+%%% [<opt>]<shift coor>"<path name>"{<path>}(<coor>)(<epsilon1>,<epsilon2>)[<from>:<to>]{<text>}[<pos,opt>]<code.append>
+
+\use:x{
+ \NewDocumentCommand \exp_not:N \tztangent
+ { s O{} d<> D""{} m r()
+ >{ \SplitArgument { 1 } { , } } d()
+ >{ \SplitArgument { 1 } { \tl_to_str:n {:} } } r[] }
+ }
+{
+ \tl_clear:N \l_tztangent_cmd_tl
+
+ \IfBooleanTF { #1 } % NOT USED!
+ { \bool_set_true:N \l_tmpa_bool }
+ { \bool_set_false:N \l_tmpa_bool }
+
+ % to resolve discrepancy (due to bounding box), when repeated
+ \bool_if:nTF
+ {
+ \str_if_eq_p:ee { \TANCurve } { #5 } &&
+ \str_if_eq_p:ee { \TANWhere } { #6 }
+ }
+ { \bool_set_true:N \l_tztangent_bbox_bool }
+ { \bool_set_false:N \l_tztangent_bbox_bool }
+
+ % for local change of epsilon_1 and _2
+ \IfValueT { #7 }
+ {
+ \tztangent_epsilon_process #7
+ \renewcommand\tztangentepsilonL{\tztangentEpsilonOne}
+ \renewcommand\tztangentepsilonR{\tztangentEpsilonTwo}
+ }
+
+ \tztangent_domain_process #8
+
+ % getting ready
+ \coordinate (LXcoor) at ($(#6)-(\tztangentepsilonL,0)$) ;
+ \coordinate (RXcoor) at ($(#6)+(\tztangentepsilonR,0)$) ;
+
+ \bool_if:NTF \l_tztangent_bbox_bool
+ {
+ \IfNodeDefined{bbxBottom}{}
+ {
+ \coordinate (bbxTop) at (current~bounding~box.north) ;
+ \coordinate (bbxBottom) at (current~bounding~box.south) ;
+ }
+ }
+ {
+ \coordinate (bbxTop) at (current~bounding~box.north) ;
+ \coordinate (bbxBottom) at (current~bounding~box.south) ;
+ }
+
+ % find vertical X points
+ \path [ name~path = C-vline ] (#6 |- bbxBottom) -- (#6 |- bbxTop) ;
+ \path [ name~intersections = { of = #5 ~ and ~ C-vline , name = TANp } ] ;
+
+ \path [ name~path = L-vline ] (LXcoor |- bbxBottom) -- (LXcoor |- bbxTop) ;
+ \path [ name~intersections = { of = #5 ~ and ~ L-vline , name = LXcut } ] ;
+
+ \path [ name~path = R-vline ] (RXcoor |- bbxBottom) -- (RXcoor |- bbxTop) ;
+ \path [ name~intersections = { of = #5 ~ and ~ R-vline , name = RXcut } ] ;
+
+ % move to tangent point
+ \coordinate (tzXproj)
+ at ($(LXcut-1)!(TANp-1)!(RXcut-1)$); % projection
+ \coordinate (LLpoint)
+ at ($(LXcut-1)+(TANp-1)-(tzXproj)$); % move
+ \coordinate (RRpoint)
+ at ($(RXcut-1)+(TANp-1)-(tzXproj)$); % move
+
+ % determine final extended points
+ \tl_set:Nx \l_tmpa_tl
+ { (RRpoint) -- (TANp-1) --
+ ([turn]0 \c_colon_str ~ -\tztangentFromVal) coordinate (final-LL) }
+ \tl_set:Nx \l_tmpb_tl
+ { (LLpoint) -- (TANp-1) --
+ ([turn]0 \c_colon_str ~ \tztangentToVal) coordinate (final-RR) }
+
+ \exp_last_unbraced:Nf \path \l_tmpa_tl ;
+ \exp_last_unbraced:Nf \path \l_tmpb_tl ;
+
+ \tzgetxyval(LLpoint){\tzTANLLX}{\tzTANLLY}
+ \tzgetxyval(RRpoint){\tzTANRRX}{\tzTANRRY}
+
+ \edef\tzTANSlope{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)}
+ \def\tztangentLFn{\tzTANSlope*(\x-\tzTANLLX)+\tzTANLLY}
+
+ \IfValueTF { #3 }
+ {
+ \tl_put_right:Nn \l_tztangent_cmd_tl
+ {
+ [ name~path = #4 ,
+ shift = { (#3) } ,
+ }
+ }
+ {
+ \tl_put_right:Nn \l_tztangent_cmd_tl
+ {
+ [ name~path = #4 ,
+ }
+ }
+
+ \tl_put_right:Nx \l_tztangent_cmd_tl
+ {
+ domain = \tztangentFromVal \c_colon_str \tztangentToVal ,
+ }
+
+ \tl_put_right:Nn \l_tztangent_cmd_tl
+ {
+ #2 ]
+ plot ( \x , { \tztangentLFn } ) % \x should not be expanded
+ }
+
+ \gdef\TANCurve{#5}\gdef\TANWhere{#6}
+
+ \tztangent_sub_fn:n
+}
+
+\NewDocumentCommand\tztangent_epsilon_process{ m m }
+{
+ \def\tztangentEpsilonOne{#1}
+ \def\tztangentEpsilonTwo{#2}
+}
+
+\NewDocumentCommand\tztangent_domain_process{ m m }
+{
+ \def\tztangentFromVal{#1}
+ \def\tztangentToVal{#2}
+}
+
+\cs_new:Npn \tztangent_sub_fn:n
+{
+ \tztangent_final_actions
+}
+
+\NewDocumentCommand\tztangent_final_actions { +G{} O{} D<>{} }
+{
+ \begin{pgfonlayer}{\tztangentlayer}
+ \exp_last_unbraced:Nf \draw \l_tztangent_cmd_tl
+ node [ black , above~right , #2 ] { #1 } #3 ;
+ \end{pgfonlayer}
+ % to resolve TikZ issue: unknown path name with layer group
+ \exp_last_unbraced:Nf \path \l_tztangent_cmd_tl ;
+}
+
+%%% --- end of \tztangent
+
+
+%%%%% \tzbrace
+
+%%% \tzbrace'[<opt>]{<raise>}[<brace opt>]
+%%% <shift coor>(<coor>)(<coor>){<text>}[<pos,opt>]
+\NewDocumentCommand\tzbrace{ t' O{} G{5pt} O{} d<> r() r() +G{} O{} }
+{
+ \IfBooleanTF { #1 }
+ {
+ \draw [ decorate , decoration =
+ { calligraphic~brace , mirror ,
+ amplitude = 5pt, raise = #3 , #4 } , #2
+ ]
+ }
+ {
+ \draw [ decorate , decoration =
+ { calligraphic~brace ,
+ amplitude = 5pt, raise = #3 , #4 } , #2
+ ]
+ }
+ \IfValueTF { #5 }
+ {
+ ([shift={(#5)}]#6) to node [ midway , #9 ] { #8 }
+ ([shift={(#5)}]#7) ;
+ }
+ {
+ (#6) to node [ midway , #9 ] { #8 } (#7) ;
+ }
+}
+
+%%% -- end of \tzbrace
+
+
+%=====================================================
+%=====================================================
+\ExplSyntaxOff
+%=====================================================
+%=====================================================
+
+
+\endinput
+
diff --git a/language/thai/thaispec/thaispec.dtx b/language/thai/thaispec/thaispec.dtx
index 793da53119..499dbdb2dd 100644
--- a/language/thai/thaispec/thaispec.dtx
+++ b/language/thai/thaispec/thaispec.dtx
@@ -1,11 +1,11 @@
%\iffalse
% thaispec.dtx generated using makedtx version 1.2 (c) Nicola Talbot
% Command line args:
-% -src "thaispec\.sty=>thaispec.sty"
% -doc "thaispec.tex"
% -author "Ratthaprom_Promkam"
+% -src "thaispec\.sty=>thaispec.sty"
% thaispec
-% Created on 2019/7/4 22:02
+% Created on 2021/3/2 0:13
%\fi
%\iffalse
%<*package>
@@ -28,7 +28,7 @@
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
-% Copyright (C) 2019 Ratthaprom_Promkam, all rights reserved.
+% Copyright (C) 2021 Ratthaprom_Promkam, all rights reserved.
% \fi
% \iffalse
%<*driver>
@@ -82,7 +82,7 @@ autogobble=true,
\title{The \pkgname\ package: \\Thai language typesetting in \XeLaTeX}
\author{Ratthaprom Promkam\\{\texttt{\small ratthaprom@me.com}}}
-\date{Version 0.4 from July 4, 2019}
+\date{Version 2021.03.01}
\begin{document}
\DocInput{thaispec.dtx}
@@ -99,20 +99,28 @@ autogobble=true,
%
%
%\section{Prerequisite}
-%The package use \texttt{TH Sarabun New} font by default to typeset Thai characters
-%which included in the collection of Thai national fonts
-%\footnote{Thai national fonts, a.k.a. \texttt{SIPAFonts}.
-%See \url{https://github.com/epsilonxe/sipafonts}}.
-%At least this font must be installed to system wide in order to use this package.
-%Moreover the following \LaTeX\ package are essentially required for the default option: \texttt{fontspec}, \texttt{uchar­classes}, \texttt{poly­glos­sia}, \texttt{setspace}, \texttt{date­time2}, \texttt{kvop­tions}, \texttt{after­pack­age}, \texttt{xstring}, and \texttt{xpatch}.
+%The package requires \texttt{TH Sarabun New} \footnote{Thai national fonts, a.k.a. \texttt{SIPAFonts}.
+%See \url{https://github.com/epsilonxe/sipafonts}}, included in the collection of Thai national fonts, by default to typeset Thai characters.
+%The following \LaTeX\ package are essentially required for the default option: \texttt{fontspec}, \texttt{uchar­classes}, \texttt{poly­glos­sia}, \texttt{setspace}, \texttt{kvop­tions}, and \texttt{xpatch}.
%
%\section{Installation}
-%The \texttt{thaispec} packages are included in all major \LaTeX distributions.
-%In case it is not installed, please visit \url{https://github.com/epsilonxe/latex}} to download the latest version of \texttt{thaispec.sty} and put it in your working directory.
+%Although the \texttt{thaispec} packages are included in all major \LaTeX\ distributions, you may need to manually install or upgrade to the latest version.
+%
+%In a case that it is neither installed nor outdated, please visit \url{https://github.com/epsilonxe/latex} to download the latest version of \texttt{thaispec.sty} and put it in your working directory.
+%
+%More conveniently, but require familiar to command line interface,
+%please run the following commands to install or update to the most recent version of \texttt{thaipsec} via TexLive Manager.
+%However, you may need administrator right to launch these commands.
+%So consider to add \texttt{sudo} before each of the following commands.
+%
+%\begin{minted}{bash}
+%$tlmgr install thaispec
+%$tlmgr update thaispec
+%\end{minted}
%
%\section{Recommendation}
-%Install the collection of Thai national font said above.
-%Python and \textt{pygments} are also recommended to be installed to typeset Thai documents which some syntax highlighted codes are needed.
+%Install the collection of Thai national fonts said above.
+%Python and \texttt{pygments} are also recommended to be installed if syntax highlight needed in the document.
%
%\section{Package loading}
%In the preamble, add the command
@@ -303,7 +311,7 @@ autogobble=true,
%
%
%\section{Known Issues}
-%\subsection*{Incorrect Thai characters with \texttt{listing} package}
+%\subsection{Incorrect Thai characters with \texttt{listing} package}
%If you typeset some codes consisting of Thai characters in \texttt{lstlisting} environment provided by \texttt{listing} package, this will possibly cause you a problem with incorrect Thai characters.
%The recommendation is choosing \texttt{minted} package instead of \texttt{listing} package.
%However you need to additionally install \texttt{pygments} python module in order to use \texttt{minted} package.
@@ -318,6 +326,16 @@ autogobble=true,
%\end{minted}
%to typeset your tex file.
%
+%\subsection{TexPad in macOS}
+%As said above, the shell-escape must be enabled.
+%Additionally, the \emph{Hide Intermediate Files} option must be disable and copy the pygment launcher to \texttt{/usr/local/bin}.
+%The launcher can be located with the command
+%\begin{minted}[frame=single]{shell}
+%$ which pygments
+%\end{minted}
+%Instead of copying the launcher directly, one may put its symbolic link to \texttt{/usr/local/bin}.
+%If there is an error due to \texttt{minted} package, we recommend to delete the minted output directory prior typesetting.
+%
%\section{Credits}
%This package is motivated by a set of \LaTeX\ commands for typesetting Thai documents
%provided by Dittaya Wanvarie
@@ -344,16 +362,16 @@ autogobble=true,
% \end{macrocode}
%\fi
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{thaispec}[2019/07/03 version 0.4 thaispec]
+\ProvidesPackage{thaispec}[version 2021.03.01]
\RequirePackage{kvoptions}
\RequirePackage[no-math]{fontspec}
\RequirePackage[Latin, Thai]{ucharclasses}
\RequirePackage{setspace}
\RequirePackage{polyglossia}
-\RequirePackage[calc]{datetime2}
+% \RequirePackage[calc]{datetime2}
\RequirePackage{xstring}
-\RequirePackage{afterpackage}
+% \RequirePackage{afterpackage}
\RequirePackage{xpatch}
% Key-Value Options
@@ -385,13 +403,17 @@ prefix=THL@
% TeX Commands
+\newcommand{\thaispecver}{2021.03.01}
+
% Set Thai language
\XeTeXlinebreaklocale "th"
\XeTeXlinebreakskip = 0pt plus 0pt
+
\ifTHL@sloppy
\sloppy
\fi
+
\defaultfontfeatures{Mapping=tex-text}
@@ -410,8 +432,19 @@ prefix=THL@
\setdefaultlanguage{english}
\setotherlanguage{thai}
+
\ifTHL@thaicaption
\AtBeginDocument\captionsthai
+\addto\captionsenglish{%
+ \renewcommand{\proofname}{พิสูจน์}%
+ \renewcommand{\chaptername}{บทที่}%
+ \renewcommand{\contentsname}{สารบัญ}%
+ \renewcommand{\listfigurename}{สารบัญรูปภาพ}%
+ \renewcommand{\listtablename}{สารบัญตาราง}%
+ \renewcommand{\figurename}{รูปภาพ}%
+ \renewcommand{\tablename}{ตาราง}%
+ \renewcommand{\refname}{เอกสารอ้างอิง}%
+}
\fi
@@ -438,38 +471,39 @@ prefix=THL@
% Define Thai datetime
% \today - Print today in short format d-M-Y(BD)
% \Today - Print today in long format dow-d-M-Y(BD)
-\DTMsavenow{now}
-\newcommand{\dtdow}{\IfStrEqCase{\DTMfetchdow{now}}{{0}{วันจันทร์}
-{1}{วันอังคาร}
-{2}{วันพุธ}
-{3}{วันพฤหัสบดี}
-{4}{วันศุกร์}
-{5}{วันเสาร์}
-{6}{วันอาทิตย์}
-}}
-
-\newcommand{\dtmonth}{\IfStrEqCase{\DTMfetchmonth{now}}{{1}{มกราคม}
-{2}{กุมภาพันธ์}
-{3}{มีนาคม}
-{4}{เมษายน}
-{5}{พฤษภาคม}
-{6}{มิถุนายน}
-{7}{กรกฎาคม}
-{8}{สิงหาคม}
-{9}{กันยายน}
-{10}{ตุลาคม}
-{11}{พฤศจิกายน}
-{12}{ธันวาคม}
-}}
-
-\newcounter{yearbd}
-\setcounter{yearbd}{\DTMfetchyear{now}}
-\addtocounter{yearbd}{543}
-%\newcommand{\dtyearbd}{\FPadd{\tmpdtyearbd}{\DTMfetchyear{now}}{543}\FPclip{\rtmpdtyearbd}{\tmpdtyearbd}พ.ศ.\;\rtmpdtyearbd}
-\AtBeginDocument{
-\def\Today{\dtdow\ \DTMfetchday{now}\ \dtmonth\ พ.ศ. \theyearbd}
-\def\today{\DTMfetchday{now}\ \dtmonth\ พ.ศ. \theyearbd}
-}
+
+% \DTMsavenow{now}
+% \newcommand{\dtdow}{\IfStrEqCase{\DTMfetchdow{now}}{{0}{วันจันทร์}
+% {1}{วันอังคาร}
+% {2}{วันพุธ}
+% {3}{วันพฤหัสบดี}
+% {4}{วันศุกร์}
+% {5}{วันเสาร์}
+% {6}{วันอาทิตย์}
+% }}
+
+% \newcommand{\dtmonth}{\IfStrEqCase{\DTMfetchmonth{now}}{{1}{มกราคม}
+% {2}{กุมภาพันธ์}
+% {3}{มีนาคม}
+% {4}{เมษายน}
+% {5}{พฤษภาคม}
+% {6}{มิถุนายน}
+% {7}{กรกฎาคม}
+% {8}{สิงหาคม}
+% {9}{กันยายน}
+% {10}{ตุลาคม}
+% {11}{พฤศจิกายน}
+% {12}{ธันวาคม}
+% }}
+
+% \newcounter{yearbd}
+% \setcounter{yearbd}{\DTMfetchyear{now}}
+% \addtocounter{yearbd}{543}
+% %\newcommand{\dtyearbd}{\FPadd{\tmpdtyearbd}{\DTMfetchyear{now}}{543}\FPclip{\rtmpdtyearbd}{\tmpdtyearbd}พ.ศ.\;\rtmpdtyearbd}
+% \AtBeginDocument{
+% \def\Today{\dtdow\ \DTMfetchday{now}\ \dtmonth\ พ.ศ. \theyearbd}
+% \def\today{\DTMfetchday{now}\ \dtmonth\ พ.ศ. \theyearbd}
+% }
% In beamer
@@ -527,7 +561,6 @@ prefix=THL@
\newtheorem{proposition}[theorem]{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem{definition}[theorem]{บทนิยาม}
-\newtheorem{undefinedterm}[theorem]{อนิยาม}
\newtheorem{axiom}[theorem]{สัจพจน์}
\newtheorem{example}[theorem]{ตัวอย่าง}
\theoremstyle{remark}
@@ -541,7 +574,6 @@ prefix=THL@
\newtheorem*{proposition}{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem*{definition}{บทนิยาม}
-\newtheorem*{undefinedterm}{อนิยาม}
\newtheorem*{axiom}{สัจพจน์}
\newtheorem*{example}{ตัวอย่าง}
\theoremstyle{remark}
@@ -555,7 +587,6 @@ prefix=THL@
\newtheorem{proposition}[theorem]{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem{definition}[theorem]{บทนิยาม}
-\newtheorem{undefinedterm}[theorem]{อนิยาม}
\newtheorem{axiom}[theorem]{สัจพจน์}
\newtheorem{example}[theorem]{ตัวอย่าง}
\theoremstyle{remark}
@@ -569,7 +600,6 @@ prefix=THL@
\newtheorem{proposition}[theorem]{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem{definition}[theorem]{บทนิยาม}
-\newtheorem{undefinedterm}[theorem]{อนิยาม}
\newtheorem{axiom}[theorem]{สัจพจน์}
\newtheorem{example}[theorem]{ตัวอย่าง}
\theoremstyle{remark}
@@ -583,7 +613,6 @@ prefix=THL@
\newtheorem{proposition}[theorem]{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem{definition}[theorem]{บทนิยาม}
-\newtheorem{undefinedterm}[theorem]{อนิยาม}
\newtheorem{axiom}[theorem]{สัจพจน์}
\newtheorem{example}[theorem]{ตัวอย่าง}
\theoremstyle{remark}
@@ -597,7 +626,6 @@ prefix=THL@
\newtheorem{proposition}[theorem]{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem{definition}{บทนิยาม}
-\newtheorem{undefinedterm}[definition]{อนิยาม}
\newtheorem{axiom}[definition]{สัจพจน์}
\newtheorem{example}{ตัวอย่าง}
\theoremstyle{remark}
@@ -611,7 +639,6 @@ prefix=THL@
\newtheorem{proposition}[theorem]{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem{definition}{บทนิยาม}[section]
-\newtheorem{undefinedterm}[definition]{อนิยาม}
\newtheorem{axiom}[definition]{สัจพจน์}
\newtheorem{example}{ตัวอย่าง}
\theoremstyle{remark}
@@ -625,7 +652,6 @@ prefix=THL@
\newtheorem{proposition}[theorem]{ทฤษฎีบทประกอบ}
\theoremstyle{definition}
\newtheorem{definition}{บทนิยาม}[chapter]
-\newtheorem{undefinedterm}[definition]{อนิยาม}
\newtheorem{axiom}[definition]{สัจพจน์}
\newtheorem{example}{ตัวอย่าง}
\theoremstyle{remark}
@@ -638,8 +664,8 @@ prefix=THL@
{}
-\endinput
-%\iffalse
+% \endinput
+% END OF PACKAGE ----------------------------%\iffalse
% \begin{macrocode}
%</thaispec.sty>
% \end{macrocode}
diff --git a/language/thai/thaispec/thaispec.ins b/language/thai/thaispec/thaispec.ins
index a9d2cf6dd2..1fc55a3253 100644
--- a/language/thai/thaispec/thaispec.ins
+++ b/language/thai/thaispec/thaispec.ins
@@ -1,10 +1,10 @@
-% thaispec.ins generated using makedtx version 1.2 2019/7/4 22:02
+% thaispec.ins generated using makedtx version 1.2 2021/3/2 0:13
\input docstrip
\preamble
thaispec.dtx
- Copyright 2019 Ratthaprom_Promkam
+ Copyright 2021 Ratthaprom_Promkam
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/language/thai/thaispec/thaispec.pdf b/language/thai/thaispec/thaispec.pdf
index 944a289b7b..189187ee12 100644
--- a/language/thai/thaispec/thaispec.pdf
+++ b/language/thai/thaispec/thaispec.pdf
Binary files differ
diff --git a/macros/latex/contrib/aastex/README b/macros/latex/contrib/aastex/README
index 997ad0436b..b622e3d620 100644
--- a/macros/latex/contrib/aastex/README
+++ b/macros/latex/contrib/aastex/README
@@ -1,47 +1,27 @@
-%% Start of file README
-%% This README is part of the AASTEX 6.3 distribution.
-%% Copyright (C) 2019 American Astronomical Society
-%% This work may be distributed and/or modified under the
-%% conditions of the LATEX Project Public License, either version 1.3
-%% of this license or (at your option) any later version.
-%% The latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LATEX
-%% version 2003/12/01 or later.
-%% This work has the LPPL maintenance status "maintained".
-%% The Current Maintainer of this work is the American Astronomical Society.
-%% %% This work consists of all files listed in the document README.
-
-Last updated August 7, 2019.
+Last updated March 1, 2021.
Thank you for your interest in the AASTEX package for manuscript preparation. This directory contains all the files in the distribution. They are described briefly below. Following the file descriptions are short installation instructions, the generic recipe for printing the user guide and sample, and information about contacting us regarding the distribution.
MANIFEST
-aastex63.cls The most recent AASTEX class file (V6.3)
+aastex631.cls The most recent AASTEX class file (V6.3.1)
aasjournal.bst BIBTEX .bst file optimized for AAS Journal publishing
-aassymbols.tex Tables of AASTEX and AMS symbols commands
-aassymbols.pdf PDF of the symbols tables
-
-natbib.tex Information regarding using natbib with AASTEX
-natbib.pdf PDF of the natbib article
-
-sample63.tex Sample paper with "typical" content and markup
-sample63.pdf Sample paper PDF file
-sample63.bib Sample paper BIBTEX .bib file
+sample631.tex Sample paper with "typical" content and markup
+sample631.pdf Sample paper PDF file
+sample631.bib Sample paper BIBTEX .bib file
-cost.pdf Figure 1 in sample63.tex
-V2491_Cyg.pdf Figure 2a in sample63.tex
-HV_Cet.pdf Figure 2b in sample63.tex
-LMC_2009.pdf Figure 2c in sample63.tex
-RS_Oph.pdf Figure 2d in sample63.tex
-U_Sco.pdf Figure 2e in sample63.tex
-KT_Eri.pdf Figures 2f and 3 in sample63.tex
-f4.pdf Figure 4 in sample63.tex
-f5.pdf Figure 5 in sample63.tex
+cost.pdf Figure 1 in sample631.tex
+V2491_Cyg.pdf Figure 2a in sample631.tex
+HV_Cet.pdf Figure 2b in sample631.tex
+LMC_2009.pdf Figure 2c in sample631.tex
+RS_Oph.pdf Figure 2d in sample631.tex
+U_Sco.pdf Figure 2e in sample631.tex
+KT_Eri.pdf Figures 2f and 3 in sample631.tex
+f4.pdf Figure 4 in sample631.tex
+f5.pdf Figure 5 in sample631.tex
-interactive.tar.gz A .tar.gz package containing all the interactive figure files associated with Figure 5 in sample63.tex
+interactive.tar.gz A .tar.gz package containing all the interactive figure files associated with Figure 5 in sample631.tex
orcid-ID.png PNG file use to produced the ORCID icon in \author
@@ -53,7 +33,7 @@ for additional installation notes or contact the help desk at aastex-help@aas.or
ADMINISTRATIVE DETAILS
-AASTEX was designed and written by Chris Biemesderfer in 1988. Substantial revisions were made by Lee Brotzman and Pierre Landau when the package was updated to v4.0. AASTEX was rewritten as a LATEX class by Arthur Ogawa for the v5.0 release. It was updated to v5.2 by SR Nova Private Ltd. Amy Hendrickson (TEXnology Inc.) wrote the v6.0 release which itself was primarily based on the emulateapj classfile created by Maxim Markevitch and Alexey Vikhlinin. Amy Hendrickson also created versions v6.1 - v6.3. Over the years the documentation has benefited from revisions by Jeannette Barnes, Sara Zimmerman, Greg Schwarz, Gus Meunch, Amy Henderickson, and Butler Burton.
+AASTEX was designed and written by Chris Biemesderfer in 1988. Substantial revisions were made by Lee Brotzman and Pierre Landau when the package was updated to v4.0. AASTEX was rewritten as a LATEX class by Arthur Ogawa for the v5.0 release. It was updated to v5.2 by SR Nova Private Ltd. Amy Hendrickson (TEXnology Inc.) wrote the v6.0 release which itself was primarily based on the emulateapj classfile created by Maxim Markevitch and Alexey Vikhlinin. Amy Hendrickson also created versions v6.1 - v6.3.1. Over the years the documentation has benefited from revisions by Jeannette Barnes, Sara Zimmerman, Greg Schwarz, Gus Meunch, Amy Henderickson, and Butler Burton.
Comments, suggestions, complaints, and pleas for help can be sent electronically to aastex-help@aas.org.
@@ -66,3 +46,4 @@ SZ, 22 Jun 2005 Rev.
GJS, 02 Mar 2016 Rev.
GJS, 08 Jan 2018 Rev.
GJS, 07 Aug 2019 Rev.
+GJS, 01 Mar 2021 Rev.
diff --git a/macros/latex/contrib/aastex/aassymbols.pdf b/macros/latex/contrib/aastex/aassymbols.pdf
deleted file mode 100644
index c449a0a748..0000000000
--- a/macros/latex/contrib/aastex/aassymbols.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/aastex/aassymbols.tex b/macros/latex/contrib/aastex/aassymbols.tex
deleted file mode 100644
index f34fe67e69..0000000000
--- a/macros/latex/contrib/aastex/aassymbols.tex
+++ /dev/null
@@ -1,579 +0,0 @@
-\documentclass[twocolumn]{aastex3}
-
-\newcommand\aastex{AAS\TeX}%
-
-\pagestyle{myheadings}
-\markright{\aastex, AMS math, and \LaTeX\ symbols}%
-
-\begin{document}
-
-\begin{table}
-\caption{Additional \aastex\ symbols}
-\begin{center}
-\tabcolsep5pt
-\begin{tabular}{@{}ll@{\hspace*{1em}}ll@{}}
-$\lesssim$ & \verb"\lesssim", \verb"\la" &
-$\gtrsim$ & \verb"\gtrsim", \verb"\ga" \\
-\micron & \verb"\micron" &
-\sbond & \verb"\sbond" \\
-\dbond & \verb"\dbond" &
-\tbond & \verb"\tbond" \\
-$\sun$ & \verb"\sun" &
-$\earth$ & \verb"\earth" \\
-\diameter & \verb"\diameter" &
-\\
-\arcdeg & \verb"\arcdeg", \verb"\degr" &
-\sq & \verb"\sq" \\
-\arcmin & \verb"\arcmin" &
-\arcsec & \verb"\arcsec" \\
-\fd & \verb"\fd" &
-\fh & \verb"\fh" \\
-\fm & \verb"\fm" &
-\fs & \verb"\fs" \\
-\fdg & \verb"\fdg" &
-\farcm & \verb"\farcm" \\
-\farcs & \verb"\farcs" &
-\fp & \verb"\fp" \\
-\onehalf & \verb"\onehalf" &
-\ubvr & \verb"\ubvr" \\
-\onethird & \verb"\onethird" &
-\ub & \verb"\ub" \\
-\twothirds & \verb"\twothirds" &
-\bv & \verb"\bv" \\
-\onequarter & \verb"\onequarter" &
-\vr & \verb"\vr" \\
-\threequarters & \verb"\threequarters" &
-\ur & \verb"\ur" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Text-mode accents}
-\begin{center}
-\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
-\`{o} & \verb"\`{o}" & \={o} & \verb"\={o}" & \t{oo} & \verb"\t{oo}" \\
-\'{o} & \verb"\'{o}" & \.{o} & \verb"\.{o}" & \c{o} & \verb"\c{o}" \\
-\^{o} & \verb"\^{o}" & \u{o} & \verb"\u{o}" & \d{o} & \verb"\d{o}" \\
-\"{o} & \verb#\"{o}# & \v{o} & \verb"\v{o}" & \b{o} & \verb"\b{o}" \\
-\~{o} & \verb"\~{o}" & \H{o} & \verb"\H{o}" & & \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{National symbols}
-\begin{center}
-\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
-\oe & \verb"\oe" & \aa & \verb"\aa" & \l & \verb"\l" \\
-\OE & \verb"\OE" & \AA & \verb"\AA" & \L & \verb"\L" \\
-\ae & \verb"\ae" & \o & \verb"\o" & \ss & \verb"\ss" \\
-\AE & \verb"\AE" & \O & \verb"\O" & & \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Math-mode accents}
-\begin{center}
-\begin{tabular}{ll@{\hspace{4em}}ll}
-$\hat{a}$ & \verb"\hat{a}" & $\dot{a}$ & \verb"\dot{a}" \\
-$\check{a}$ & \verb"\check{a}" & $\ddot{a}$ & \verb"\ddot{a}" \\
-$\tilde{a}$ & \verb"\tilde{a}" & $\breve{a}$ & \verb"\breve{a}" \\
-$\acute{a}$ & \verb"\acute{a}" & $\bar{a}$ & \verb"\bar{a}" \\
-$\grave{a}$ & \verb"\grave{a}" & $\vec{a}$ & \verb"\vec{a}" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Greek and Hebrew letters (math mode)}
-\begin{center}
-\begin{tabular}{cl@{\hspace{3em}}cl}
-$\alpha$ & \verb"\alpha" & $\nu$ & \verb"\nu" \\
-$\beta$ & \verb"\beta" & $\xi$ & \verb"\xi" \\
-$\gamma$ & \verb"\gamma" & $o$ & \verb"o" \\
-$\delta$ & \verb"\delta" & $\pi$ & \verb"\pi" \\
-$\epsilon$ & \verb"\epsilon" & $\rho$ & \verb"\rho" \\
-$\zeta$ & \verb"\zeta" & $\sigma$ & \verb"\sigma" \\
-$\eta$ & \verb"\eta" & $\tau$ & \verb"\tau" \\
-$\theta$ & \verb"\theta" & $\upsilon$ & \verb"\upsilon" \\
-$\iota$ & \verb"\iota" & $\phi$ & \verb"\phi" \\
-$\kappa$ & \verb"\kappa" & $\chi$ & \verb"\chi" \\
-$\lambda$ & \verb"\lambda" & $\psi$ & \verb"\psi" \\
-$\mu$ & \verb"\mu" & $\omega$ & \verb"\omega" \\
-
-$\digamma$ & \verb"\digamma" &
-$\varkappa$ & \verb"\varkappa" \\
-$\varepsilon$ & \verb"\varepsilon" & $\varsigma$ & \verb"\varsigma" \\
-$\vartheta$ & \verb"\vartheta" & $\varphi$ & \verb"\varphi" \\
-$\varrho$ & \verb"\varrho" & & \\
-
-$\Gamma$ & \verb"\Gamma" & $\Sigma$ & \verb"\Sigma" \\
-$\Delta$ & \verb"\Delta" & $\Upsilon$ & \verb"\Upsilon" \\
-$\Theta$ & \verb"\Theta" & $\Phi$ & \verb"\Phi" \\
-$\Lambda$ & \verb"\Lambda" & $\Psi$ & \verb"\Psi" \\
-$\Xi$ & \verb"\Xi" & $\Omega$ & \verb"\Omega" \\
-$\Pi$ & \verb"\Pi" & & \\
-
-$\aleph$ & \verb"\aleph" &
-$\beth$ & \verb"\beth" \\
-$\gimel$ & \verb"\gimel" &
-$\daleth$ & \verb"\daleth" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Binary operators (math mode)}
-\begin{center}
-\begin{tabular}{cl@{\hspace{3em}}cl}
-$\pm$ & \verb"\pm" & $\cap$ & \verb"\cap" \\
-$\mp$ & \verb"\mp" & $\cup$ & \verb"\cup" \\
-$\setminus$ & \verb"\setminus" & $\uplus$ & \verb"\uplus" \\
-$\cdot$ & \verb"\cdot" & $\sqcap$ & \verb"\sqcap" \\
-$\times$ & \verb"\times" & $\sqcup$ & \verb"\sqcup" \\
-$\ast$ & \verb"\ast" & $\triangleleft$ & \verb"\triangleleft" \\
-$\star$ & \verb"\star" & $\triangleright$ & \verb"\triangleright" \\
-$\diamond$ & \verb"\diamond" & $\wr$ & \verb"\wr" \\
-$\circ$ & \verb"\circ" & $\bigcirc$ & \verb"\bigcirc" \\
-$\bullet$ & \verb"\bullet" & $\bigtriangleup$ & \verb"\bigtriangleup" \\
-$\div$ & \verb"\div" & $\bigtriangledown$ & \verb"\bigtriangledown" \\
-$\lhd$ & \verb"\lhd" & $\rhd$ & \verb"\rhd" \\%FIXME
-$\vee$ & \verb"\vee" & $\odot$ & \verb"\odot" \\
-$\wedge$ & \verb"\wedge" & $\dagger$ & \verb"\dagger" \\
-$\oplus$ & \verb"\oplus" & $\ddagger$ & \verb"\ddagger" \\
-$\ominus$ & \verb"\ominus" & $\amalg$ & \verb"\amalg" \\
-$\otimes$ & \verb"\otimes" & $\unlhd$ & \verb"\unlhd" \\
-$\oslash$ & \verb"\oslash" & $\unrhd$ & \verb"\unrhd"
-\end{tabular}
-\end{center}
-\end{table}
-
-\clearpage
-
-\begin{table}
-\caption{AMS binary operators (math mode)}
-\begin{center}
-\begin{tabular}{ll@{\hspace{2em}}ll}
-$\dotplus$ & \verb"\dotplus" &
-$\ltimes$ & \verb"\ltimes" \\
-$\smallsetminus$ & \verb"\smallsetminus" &
-$\rtimes$ & \verb"\rtimes" \\
-$\Cap$ & \verb"\Cap", \verb"\doublecap" &
-$\leftthreetimes$ & \verb"\leftthreetimes" \\
-$\Cup$ & \verb"\Cup", \verb"\doublecup" &
-$\rightthreetimes$ & \verb"\rightthreetimes" \\
-$\barwedge$ & \verb"\barwedge" &
-$\curlywedge$ & \verb"\curlywedge" \\
-$\veebar$ & \verb"\veebar" &
-$\curlyvee$ & \verb"\curlyvee" \\
-$\doublebarwedge$ & \verb"\doublebarwedge" &
-\\
-$\boxminus$ & \verb"\boxminus" &
-$\circleddash$ & \verb"\circleddash" \\
-$\boxtimes$ & \verb"\boxtimes" &
-$\circledast$ & \verb"\circledast" \\
-$\boxdot$ & \verb"\boxdot" &
-$\circledcirc$ & \verb"\circledcirc" \\
-$\boxplus$ & \verb"\boxplus" &
-$\centerdot$ & \verb"\centerdot" \\
-$\divideontimes$ & \verb"\divideontimes" &
-$\intercal$ & \verb"\intercal" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Miscellaneous symbols}
-\begin{center}
-\begin{tabular}{ll@{\hspace{4em}}ll}
-\dag & \verb"\dag" & \S & \verb"\S" \\
-\copyright & \verb"\copyright"& \ddag & \verb"\ddag"\\
- \P & \verb"\P" & \pounds & \verb"\pounds" \\
-\# & \verb"\#" & \$ & \verb"\$"\\
- \% & \verb"\%" & \& & \verb"\&" \\
- \_ & \verb"\_" & \{ & \verb"\{" \\
- \} & \verb"\}" & & \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Miscellaneous symbols (math mode)}
-\begin{center}
-\begin{tabular}{cl@{\hspace{3em}}cl}
-$\aleph$ & \verb"\aleph" & $\prime$ & \verb"\prime" \\
-$\hbar$ & \verb"\hbar" & $\emptyset$ & \verb"\emptyset" \\
-$\imath$ & \verb"\imath" & $\nabla$ & \verb"\nabla" \\
-$\jmath$ & \verb"\jmath" & $\surd$ & \verb"\surd" \\
-$\ell$ & \verb"\ell" & $\top$ & \verb"\top" \\
-$\wp$ & \verb"\wp" & $\bot$ & \verb"\bot" \\
-$\Re$ & \verb"\Re" & $\|$ & \verb"\|" \\
-$\Im$ & \verb"\Im" & $\angle$ & \verb"\angle" \\
-$\partial$ & \verb"\partial" & $\triangle$ & \verb"\triangle" \\
-$\infty$ & \verb"\infty" & $\backslash$ & \verb"\backslash" \\
-$\Box$ & \verb"\Box" & $\Diamond$ & \verb"\Diamond" \\
-$\forall$ & \verb"\forall" & $\sharp$ & \verb"\sharp" \\
-$\exists$ & \verb"\exists" & $\clubsuit$ & \verb"\clubsuit" \\
-$\neg$ & \verb"\neg" & $\diamondsuit$ & \verb"\diamondsuit" \\
-$\flat$ & \verb"\flat" & $\heartsuit$ & \verb"\heartsuit" \\
-$\natural$ & \verb"\natural" & $\spadesuit$ & \verb"\spadesuit" \\
-$\mho$ & \verb"\mho" & &
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{AMS miscellaneous symbols (math mode)}
-\begin{center}
-\begin{tabular}{ll@{\hspace{2em}}ll}
-$\hbar$ & \verb"\hbar" &
-$\backprime$ & \verb"\backprime" \\
-$\hslash$ & \verb"\hslash" &
-$\varnothing$ & \verb"\varnothing" \\
-$\vartriangle$ & \verb"\vartriangle" &
-$\blacktriangle$ & \verb"\blacktriangle" \\
-$\triangledown$ & \verb"\triangledown" &
-$\blacktriangledown$ & \verb"\blacktriangledown" \\
-$\square$ & \verb"\square" &
-$\blacksquare$ & \verb"\blacksquare" \\
-$\lozenge$ & \verb"\lozenge" &
-$\blacklozenge$ & \verb"\blacklozenge" \\
-$\circledS$ & \verb"\circledS" &
-$\bigstar$ & \verb"\bigstar" \\
-$\angle$ & \verb"\angle" &
-$\sphericalangle$ & \verb"\sphericalangle" \\
-$\measuredangle$ & \verb"\measuredangle" &
-\\
-$\nexists$ & \verb"\nexists" &
-$\complement$ & \verb"\complement" \\
-$\mho$ & \verb"\mho" &
-$\eth$ & \verb"\eth" \\
-$\Finv$ & \verb"\Finv" &
-$\diagup$ & \verb"\diagup" \\
-$\Game$ & \verb"\Game" &
-$\diagdown$ & \verb"\diagdown" \\
-$\Bbbk$ & \verb"\Bbbk" &
-$\restriction$ & \verb"\restriction" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\tabcolsep1pt
-\caption{Arrows (math mode)}
-\begin{center}
-\begin{tabular}{clcl}
-$\leftarrow$ & \verb"\leftarrow" &
-$\longleftarrow$ & \verb"\longleftarrow" \\
-$\Leftarrow$ & \verb"\Leftarrow" &
-$\Longleftarrow$ & \verb"\Longleftarrow" \\
-$\rightarrow$ & \verb"\rightarrow" &
-$\longrightarrow$ & \verb"\longrightarrow" \\
-$\Rightarrow$ & \verb"\Rightarrow" &
-$\Longrightarrow$ & \verb"\Longrightarrow" \\
-$\leftrightarrow$ & \verb"\leftrightarrow" &
-$\longleftrightarrow$ & \verb"\longleftrightarrow" \\
-$\Leftrightarrow$ & \verb"\Leftrightarrow" &
-$\Longleftrightarrow$ & \verb"\Longleftrightarrow" \\
-$\mapsto$ & \verb"\mapsto" &
-$\longmapsto$ & \verb"\longmapsto" \\
-$\hookleftarrow$ & \verb"\hookleftarrow" &
-$\hookrightarrow$ & \verb"\hookrightarrow" \\
-$\leftharpoonup$ & \verb"\leftharpoonup" &
-$\rightharpoonup$ & \verb"\rightharpoonup" \\
-$\leftharpoondown$ & \verb"\leftharpoondown" &
-$\rightharpoondown$ & \verb"\rightharpoondown" \\
-$\rightleftharpoons$ & \verb"\rightleftharpoons" &
-$\leadsto$ & \verb"\leadsto" \\
-$\uparrow$ & \verb"\uparrow" &
-$\Updownarrow$ & \verb"\Updownarrow" \\
-$\Uparrow$ & \verb"\Uparrow" &
-$\nearrow$ & \verb"\nearrow" \\
-$\downarrow$ & \verb"\downarrow" &
-$\searrow$ & \verb"\searrow" \\
-$\Downarrow$ & \verb"\Downarrow" &
-$\swarrow$ & \verb"\swarrow" \\
-$\updownarrow$ & \verb"\updownarrow" &
-$\nwarrow$ & \verb"\nwarrow"
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\tabcolsep1pt
-\caption{AMS arrows (math mode)}
-\begin{center}
-\begin{tabular}{llll}
-$\dashleftarrow$ & \verb"\dashleftarrow" &
-$\dashrightarrow$ & \verb"\dashrightarrow" \\
-$\leftleftarrows$ & \verb"\leftleftarrows" &
-$\rightrightarrows$ & \verb"\rightrightarrows" \\
-$\leftrightarrows$ & \verb"\leftrightarrows" &
-$\rightleftarrows$ & \verb"\rightleftarrows" \\
-$\Lleftarrow$ & \verb"\Lleftarrow" &
-$\Rrightarrow$ & \verb"\Rrightarrow" \\
-$\twoheadleftarrow$ & \verb"\twoheadleftarrow" &
-$\twoheadrightarrow$ & \verb"\twoheadrightarrow" \\
-$\leftarrowtail$ & \verb"\leftarrowtail" &
-$\rightarrowtail$ & \verb"\rightarrowtail" \\
-$\looparrowleft$ & \verb"\looparrowleft" &
-$\looparrowright$ & \verb"\looparrowright" \\
-$\leftrightharpoons$ & \verb"\leftrightharpoons" &
-$\rightleftharpoons$ & \verb"\rightleftharpoons" \\
-$\curvearrowleft$ & \verb"\curvearrowleft" &
-$\curvearrowright$ & \verb"\curvearrowright" \\
-$\circlearrowleft$ & \verb"\circlearrowleft" &
-$\circlearrowright$ & \verb"\circlearrowright" \\
-$\Lsh$ & \verb"\Lsh" &
-$\Rsh$ & \verb"\Rsh" \\
-$\upuparrows$ & \verb"\upuparrows" &
-$\downdownarrows$ & \verb"\downdownarrows" \\
-$\upharpoonleft$ & \verb"\upharpoonleft" &
-$\upharpoonright$ & \verb"\upharpoonright" \\
-$\downharpoonleft$ & \verb"\downharpoonleft" &
-$\downharpoonright$ & \verb"\downharpoonright" \\
-$\multimap$ & \verb"\multimap" &
-$\rightsquigarrow$ & \verb"\rightsquigarrow" \\
-$\leftrightsquigarrow$ & \verb"\leftrightsquigarrow" &
-\\
-$\nleftarrow$ & \verb"\nleftarrow" &
-$\nrightarrow$ & \verb"\nrightarrow" \\
-$\nLeftarrow$ & \verb"\nLeftarrow" &
-$\nRightarrow$ & \verb"\nRightarrow" \\
-$\nleftrightarrow$ & \verb"\nleftrightarrow" &
-$\nLeftrightarrow$ & \verb"\nLeftrightarrow" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Relations (math mode)}
-\begin{center}
-\begin{tabular}{cl@{\hspace{4em}}cl}
-
-$\leq$ & \verb"\leq" & $\geq$ & \verb"\geq" \\
-$\prec$ & \verb"\prec" & $\succ$ & \verb"\succ" \\
-$\preceq$ & \verb"\preceq" & $\succeq$ & \verb"\succeq" \\
-$\ll$ & \verb"\ll" & $\gg$ & \verb"\gg" \\
-$\subset$ & \verb"\subset" & $\supset$ & \verb"\supset" \\
-$\subseteq$ & \verb"\subseteq" & $\supseteq$ & \verb"\supseteq" \\
-$\sqsubset$ & \verb"\sqsubset" & $\sqsupset$ & \verb"\sqsupset" \\
-$\sqsubseteq$ & \verb"\sqsubseteq" & $\sqsupseteq$ & \verb"\sqsupseteq" \\
-$\in$ & \verb"\in" & $\ni$ & \verb"\ni" \\
-$\vdash$ & \verb"\vdash" & $\dashv$ & \verb"\dashv" \\
-$\smile$ & \verb"\smile" & $\mid$ & \verb"\mid" \\
-$\frown$ & \verb"\frown" & $\parallel$ & \verb"\parallel" \\
-$\neq$ & \verb"\neq" & $\perp$ & \verb"\perp" \\
-$\equiv$ & \verb"\equiv" & $\cong$ & \verb"\cong" \\
-$\sim$ & \verb"\sim" & $\bowtie$ & \verb"\bowtie" \\
-$\simeq$ & \verb"\simeq" & $\propto$ & \verb"\propto" \\
-$\asymp$ & \verb"\asymp" & $\models$ & \verb"\models" \\
-$\approx$ & \verb"\approx" & $\doteq$ & \verb"\doteq" \\
- & & $\Join$ & \verb"\Join"
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\tabcolsep1pt
-\caption{AMS binary relations (math mode)}
-\begin{center}
-\begin{tabular}{ll@{\hspace{1em}}ll}
-$\leqq$ & \verb"\leqq" &
-$\geqq$ & \verb"\geqq" \\
-$\leqslant$ & \verb"\leqslant" &
-$\geqslant$ & \verb"\geqslant" \\
-$\eqslantless$ & \verb"\eqslantless" &
-$\eqslantgtr$ & \verb"\eqslantgtr" \\
-$\lesssim$ & \verb"\lesssim" &
-$\gtrsim$ & \verb"\gtrsim" \\
-$\lessapprox$ & \verb"\lessapprox" &
-$\gtrapprox$ & \verb"\gtrapprox" \\
-$\approxeq$ & \verb"\approxeq" &
-$\eqsim$ & \verb"\eqsim" \\
-$\lessdot$ & \verb"\lessdot" &
-$\gtrdot$ & \verb"\gtrdot" \\
-$\lll$ & \verb"\lll", \verb"\llless" &
-$\ggg$ & \verb"\ggg", \verb"\gggtr" \\
-$\lessgtr$ & \verb"\lessgtr" &
-$\gtrless$ & \verb"\gtrless" \\
-$\lesseqgtr$ & \verb"\lesseqgtr" &
-$\gtreqless$ & \verb"\gtreqless" \\
-$\lesseqqgtr$ & \verb"\lesseqqgtr" &
-$\gtreqqless$ & \verb"\gtreqqless" \\
-$\doteqdot$ & \verb"\doteqdot", \verb"\Doteq" &
-$\eqcirc$ & \verb"\eqcirc" \\
-$\risingdotseq$ & \verb"\risingdotseq" &
-$\circeq$ & \verb"\circeq" \\
-$\fallingdotseq$ & \verb"\fallingdotseq" &
-$\triangleq$ & \verb"\triangleq" \\
-$\backsim$ & \verb"\backsim" &
-$\thicksim$ & \verb"\thicksim" \\
-$\backsimeq$ & \verb"\backsimeq" &
-$\thickapprox$ & \verb"\thickapprox" \\
-$\subseteqq$ & \verb"\subseteqq" &
-$\supseteqq$ & \verb"\supseteqq" \\
-$\Subset$ & \verb"\Subset" &
-$\Supset$ & \verb"\Supset" \\
-$\sqsubset$ & \verb"\sqsubset" &
-$\sqsupset$ & \verb"\sqsupset" \\
-$\preccurlyeq$ & \verb"\preccurlyeq" &
-$\succcurlyeq$ & \verb"\succcurlyeq" \\
-$\curlyeqprec$ & \verb"\curlyeqprec" &
-$\curlyeqsucc$ & \verb"\curlyeqsucc" \\
-$\precsim$ & \verb"\precsim" &
-$\succsim$ & \verb"\succsim" \\
-$\precapprox$ & \verb"\precapprox" &
-$\succapprox$ & \verb"\succapprox" \\
-$\vartriangleleft$ & \verb"\vartriangleleft" &
-$\vartriangleright$ & \verb"\vartriangleright" \\
-$\trianglelefteq$ & \verb"\trianglelefteq" &
-$\trianglerighteq$ & \verb"\trianglerighteq" \\
-$\vDash$ & \verb"\vDash" &
-$\Vdash$ & \verb"\Vdash" \\
-$\Vvdash$ & \verb"\Vvdash" &
-\\
-$\smallsmile$ & \verb"\smallsmile" &
-$\shortmid$ & \verb"\shortmid" \\
-$\smallfrown$ & \verb"\smallfrown" &
-$\shortparallel$ & \verb"\shortparallel" \\
-$\bumpeq$ & \verb"\bumpeq" &
-$\between$ & \verb"\between" \\
-$\Bumpeq$ & \verb"\Bumpeq" &
-$\pitchfork$ & \verb"\pitchfork" \\
-$\varpropto$ & \verb"\varpropto" &
-$\backepsilon$ & \verb"\backepsilon" \\
-$\blacktriangleleft$ & \verb"\blacktriangleleft" &
-$\blacktriangleright$ & \verb"\blacktriangleright" \\
-$\therefore$ & \verb"\therefore" &
-$\because$ & \verb"\because" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{AMS negated relations (math mode)}
-\begin{center}
-\begin{tabular}{ll@{\hspace{2em}}ll}
-$\nless$ & \verb"\nless" &
-$\ngtr$ & \verb"\ngtr" \\
-$\nleq$ & \verb"\nleq" &
-$\ngeq$ & \verb"\ngeq" \\
-$\nleqslant$ & \verb"\nleqslant" &
-$\ngeqslant$ & \verb"\ngeqslant" \\
-$\nleqq$ & \verb"\nleqq" &
-$\ngeqq$ & \verb"\ngeqq" \\
-$\lneq$ & \verb"\lneq" &
-$\gneq$ & \verb"\gneq" \\
-$\lneqq$ & \verb"\lneqq" &
-$\gneqq$ & \verb"\gneqq" \\
-$\lvertneqq$ & \verb"\lvertneqq" &
-$\gvertneqq$ & \verb"\gvertneqq" \\
-$\lnsim$ & \verb"\lnsim" &
-$\gnsim$ & \verb"\gnsim" \\
-$\lnapprox$ & \verb"\lnapprox" &
-$\gnapprox$ & \verb"\gnapprox" \\
-$\nprec$ & \verb"\nprec" &
-$\nsucc$ & \verb"\nsucc" \\
-$\npreceq$ & \verb"\npreceq" &
-$\nsucceq$ & \verb"\nsucceq" \\
-$\precneqq$ & \verb"\precneqq" &
-$\succneqq$ & \verb"\succneqq" \\
-$\precnsim$ & \verb"\precnsim" &
-$\succnsim$ & \verb"\succnsim" \\
-$\precnapprox$ & \verb"\precnapprox" &
-$\succnapprox$ & \verb"\succnapprox" \\
-$\nsim$ & \verb"\nsim" &
-$\ncong$ & \verb"\ncong" \\
-$\nshortmid$ & \verb"\nshortmid" &
-$\nshortparallel$ & \verb"\nshortparallel" \\
-$\nmid$ & \verb"\nmid" &
-$\nparallel$ & \verb"\nparallel" \\
-$\nvdash$ & \verb"\nvdash" &
-$\nvDash$ & \verb"\nvDash" \\
-$\nVdash$ & \verb"\nVdash" &
-$\nVDash$ & \verb"\nVDash" \\
-$\ntriangleleft$ & \verb"\ntriangleleft" &
-$\ntriangleright$ & \verb"\ntriangleright" \\
-$\ntrianglelefteq$ & \verb"\ntrianglelefteq" &
-$\ntrianglerighteq$ & \verb"\ntrianglerighteq" \\
-$\nsubseteq$ & \verb"\nsubseteq" &
-$\nsupseteq$ & \verb"\nsupseteq" \\
-$\nsubseteqq$ & \verb"\nsubseteqq" &
-$\nsupseteqq$ & \verb"\nsupseteqq" \\
-$\subsetneq$ & \verb"\subsetneq" &
-$\supsetneq$ & \verb"\supsetneq" \\
-$\varsubsetneq$ & \verb"\varsubsetneq" &
-$\varsupsetneq$ & \verb"\varsupsetneq" \\
-$\subsetneqq$ & \verb"\subsetneqq" &
-$\supsetneqq$ & \verb"\supsetneqq" \\
-$\varsubsetneqq$ & \verb"\varsubsetneqq" &
-$\varsupsetneqq$ & \verb"\varsupsetneqq" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Variable-sized symbols (math mode)}
-\begin{center}
-\begin{displaymath}
-\begin{array}{ccl@{\hspace{2em}}ccl}
-\sum & \displaystyle \sum & \hbox{\verb"\sum"} &
-\bigcap & \displaystyle \bigcap & \hbox{\verb"\bigcap"} \\
-\prod & \displaystyle \prod & \hbox{\verb"\prod"} &
-\bigcup & \displaystyle \bigcup & \hbox{\verb"\bigcup"} \\
-\coprod & \displaystyle \coprod & \hbox{\verb"\coprod"} &
-\bigsqcup & \displaystyle \bigsqcup & \hbox{\verb"\bigsqcup"} \\
-\int & \displaystyle \int & \hbox{\verb"\int"} &
-\bigvee & \displaystyle \bigvee & \hbox{\verb"\bigvee"} \\
-\oint & \displaystyle \oint & \hbox{\verb"\oint"} &
-\bigwedge & \displaystyle \bigwedge & \hbox{\verb"\bigwedge"} \\
-\bigodot & \displaystyle \bigodot & \hbox{\verb"\bigodot"} &
-\bigotimes & \displaystyle \bigotimes & \hbox{\verb"\bigotimes"} \\
-\bigoplus & \displaystyle \bigoplus & \hbox{\verb"\bigoplus"} &
-\biguplus & \displaystyle \biguplus & \hbox{\verb"\biguplus"} \\
-\end{array}
-\end{displaymath}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Delimiters (math mode)}
-\begin{center}
-\begin{tabular}{lc@{\hspace{2em}}lc}
-$($ & \verb"(" & $)$ & \verb")" \\
-$[$ & \verb"[" & $]$ & \verb"]" \\
-$\{$ & \verb"\{" & $\}$ & \verb"\}" \\
-$\lfloor$ & \verb"\lfloor" & $\rfloor$ & \verb"\rfloor" \\
-$\lceil$ & \verb"\lceil" & $\rceil$ & \verb"\rceil" \\
-$\langle$ & \verb"\langle" & $\rangle$ & \verb"\rangle" \\
-$/$ & \verb"/" & $\backslash$ & \verb"\backslash" \\
-$\vert$ & \verb"\vert" & $\Vert$ & \verb"\Vert" \\
-$\uparrow$ & \verb"\uparrow" & $\Uparrow$ & \verb"\Uparrow" \\
-$\downarrow$ & \verb"\downarrow" & $\Downarrow$ & \verb"\Downarrow" \\
-$\updownarrow$ & \verb"\updownarrow" &
-$\Updownarrow$ & \verb"\Updownarrow" \\
-$\ulcorner$ & \verb"\ulcorner" &
-$\urcorner$ & \verb"\urcorner" \\
-$\llcorner$ & \verb"\llcorner" &
-$\lrcorner$ & \verb"\lrcorner" \\
-\end{tabular}
-\end{center}
-\end{table}
-
-\begin{table}
-\caption{Function names (math mode)}
-\begin{verbatim}
- \arccos \csc \ker \min
- \arcsin \deg \lg \Pr
- \arctan \det \lim \sec
- \arg \dim \liminf \sin
- \cos \exp \limsup \sinh
- \cosh \gcd \ln \sup
- \cot \hom \log \tan
- \coth \inf \max \tanh
-\end{verbatim}
-\end{table}
-\end{document}
diff --git a/macros/latex/contrib/aastex/aastex63.cls b/macros/latex/contrib/aastex/aastex631.cls
index 6fdf46ab8e..2aa0810635 100644
--- a/macros/latex/contrib/aastex/aastex63.cls
+++ b/macros/latex/contrib/aastex/aastex631.cls
@@ -1,10 +1,11 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% AASTEX63.cls %%
-%% July 8, 2019 (6:15pm) %%
-%% Copyright 2019 American Astronomical Society %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% AASTEX631.cls %%
+%% Jan 29f, 2021 %%
+%% %%
+%% Copyright 2021 American Astronomical Society %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\currversion{6.3}
+\def\currversion{6.3.1f}
%%
%% These files are distributed
@@ -53,7 +54,7 @@
%%% The Current Maintainer of this work is Greg Schwarz <greg.schwarz@aas.org>
%%% This work consists of the file aastex.cls
-%%% copyright = "Copyright (C) 2016 American Astronomical Society
+%%% copyright = "Copyright (C) 2016--2020 American Astronomical Society
%%%
%%% This work may be distributed and/or modified under the
%%% conditions of the LaTeX Project Public License, either version 1.3
@@ -80,8 +81,9 @@
%%% abstract = "formatter for AAS journal submissions",
%%% }
-\ProvidesClass{aastex63}%%%
- [2019/06/03 Version 6.3/AAS markup document class]%
+
+\ProvidesClass{aastex631}%%%
+ [2020/12/20 Version 6.3.1d/AAS markup document class]%
{}
\ClassInfo{aastex}{%
^^J
@@ -103,6 +105,7 @@ track changes, new `modern' style and much more, by Amy Hendrickson,%
^^J
}%
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% aastex.cls version 2.0 is a based on emulateapj.cls, version January 23, 2015,
%% and an older version of aastex.cls, with many additional functionalities.
@@ -175,10 +178,10 @@ track changes, new `modern' style and much more, by Amy Hendrickson,%
-\DeclareOption{twocolumn}{\twocolstyletrue\@two@coltrue\twelvepointfalse}
+\DeclareOption{twocolumn}{\onecolstylefalse\twocolstyletrue\@two@coltrue\twelvepointfalse}
%% default style
-\DeclareOption{onecolumn}{\onecolstyletrue}
+\DeclareOption{onecolumn}{\onecolstyletrue\twocolstylefalse}
%% obsolete option
\DeclareOption{revtex4}{\typeout{=================^^J^^J!!! The revtex4 option no longer
@@ -198,9 +201,9 @@ track changes, new `modern' style and much more, by Amy Hendrickson,%
\def\astro#1{\leavevmode\hbox{\astro@font#1}}%
\def\load@astro@font{%
\iftwelvepoint
- \font\astro@font=Astrosym at 8pt
+ \font\astro@font=astrosym at 8pt
\else
- \font\astro@font=Astrosym at 7pt
+ \font\astro@font=astrosym at 7pt
\fi
}%
\AtBeginDocument{\load@astro@font}
@@ -256,6 +259,7 @@ access fonts for the \string\astro\space command
\newif\ifanonymous
\DeclareOption{anonymous}{\global\anonymoustrue}
+
%% End AH Options
\ExecuteOptions{onecolumn,onecolappendix,letteredappendix}%
@@ -621,15 +625,14 @@ revtex4-1.cls^^J^^J}\stop
%% running heads:
\def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax}
-\def\righthead#1{\ifanonymous\gdef\@rectohead{\ \ Anonymous author(s)
-\hfill}\else\gdef\@rectohead{#1}\fi} \righthead{\relax}
+\def\righthead#1{\ifanonymous\gdef\@rectohead{Anonymous author(s)}\else\gdef\@rectohead{#1}\fi} \righthead{\relax}
\let\shorttitle\lefthead
\let\shortauthors\righthead
\def\ps@apjheads{\let\@mkboth\markboth
\def\@evenfoot{}
- \def\@evenhead{\lower9mm\hbox to\textwidth{
- \rm\thepage\hfil \rm\textsc{\@rectohead} \hfil}}}
+ \def\@evenhead{\lower9mm\hbox to\textwidth{%
+ \rm\thepage\hfill\textsc{\@rectohead}\hfill}}}
\def\@oddfoot{}
\def\@oddhead{\lower9mm\hbox to\textwidth{
\hfil\rm\textsc{\@versohead}\hfil \rm\thepage}}
@@ -654,7 +657,7 @@ revtex4-1.cls^^J^^J}\stop
\vspace*{-\headsep}\vspace*{\headheight}
\footnotesize
\noindent{\sc Draft version \today}\\[2pt]
-{\footnotesize Typeset using \LaTeX\ {\bf RNAAS} style in AASTeX63}
+{\footnotesize Typeset using \LaTeX\ {\bf RNAAS} style in AASTeX631}
\par\vspace*{-\baselineskip}\vspace*{0.625in}
\else
\vbox to 0pt{\vskip-48pt\normalsize\rptloopnum=0\loop
@@ -672,7 +675,7 @@ revtex4-1.cls^^J^^J}\stop
\raggedright
{\sc Draft version \today}\\[2pt]
{\footnotesize
-Typeset using \LaTeX\ {\bf modern} style in AASTeX63}
+Typeset using \LaTeX\ {\bf modern} style in AASTeX631}
\vskip48pt
}
\else
@@ -681,7 +684,7 @@ Typeset using \LaTeX\ {\bf modern} style in AASTeX63}
\vspace*{-\headsep}\vspace*{\headheight}
\footnotesize
\noindent{\sc Draft version \today}\\[2pt]
-{\footnotesize Typeset using \LaTeX\ {\bf preprint} style in AASTeX63}
+{\footnotesize Typeset using \LaTeX\ {\bf preprint} style in AASTeX631}
\par\vspace*{-\baselineskip}\vspace*{0.625in}
\else
%%
@@ -689,7 +692,8 @@ Typeset using \LaTeX\ {\bf modern} style in AASTeX63}
\vspace*{-\headsep}\vspace*{\headheight}
\footnotesize
{\footnotesize\textsc{\@journalinfo}}\par
-{\footnotesize Typeset using \LaTeX\ {\bf preprint2} style in AASTeX63}
+{\footnotesize Typeset using \LaTeX\ {\bf preprint2} style in
+AASTeX631}
\par\vspace*{-\baselineskip}\vspace*{0.625in}
\else
%%
@@ -697,7 +701,8 @@ Typeset using \LaTeX\ {\bf modern} style in AASTeX63}
\vspace*{-\headsep}\vspace*{\headheight}
\footnotesize
{\footnotesize\textsc{\@journalinfo}}\par
-{\footnotesize Typeset using \LaTeX\ {\bf twocolumn} style in AASTeX63}
+{\footnotesize Typeset using \LaTeX\ {\bf twocolumn} style in
+AASTeX631}
\par\vspace*{-\baselineskip}\vspace*{0.625in}
\else
\ifmanu
@@ -705,14 +710,14 @@ Typeset using \LaTeX\ {\bf modern} style in AASTeX63}
\footnotesize
\noindent\textsc{\@journalinfo}\\[-8pt]
{\footnotesize Typeset using \LaTeX\ {\bf manuscript} style in
-AASTeX63}
+AASTeX631}
\par\vspace*{-\baselineskip}\vspace*{0.625in}
\else
%% Default
\vspace*{-\headsep}\vspace*{\headheight}
\footnotesize
{\footnotesize\textsc{\@journalinfo}}\par
-{\footnotesize Typeset using \LaTeX\ default style in AASTeX63}%% default style
+{\footnotesize Typeset using \LaTeX\ default style in AASTeX631}%% default style
\par\vspace*{-\baselineskip}\vspace*{0.625in}
\fi\fi\fi\fi\fi
%%
@@ -728,7 +733,9 @@ AASTeX63}
\@title
%% October 2017, was +12pt
\@ifx{\@title@aux\@title@aux@cleared}{}{%
+\ifanonymous\else%% added may 20, 2020
\expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+\fi
}%
\par
%% \class@warn{Unused short title ignored}%
@@ -752,9 +759,6 @@ footnote\the\fncount\endcsname{\if@two@col\hsize=.5\textwidth
\advance\hsize by -18pt
\fi\relax#1}}
-\long\def\abstracttempfootnote#1{\global\advance\fncount by 1\relax%
-\expandafter\gdef\csname absfootnote\the\fncount\endcsname{#1}}
-
\def\tempfootnoteintitle#1{}
\long\def\ltx@foottext#1#2{%
@@ -766,6 +770,7 @@ footnote\the\fncount\endcsname{\if@two@col\hsize=.5\textwidth
\endgroup
}%
+
\def\kickoutfootnotes{\c@footnote=0\relax%
\loop\advance\endfncount by 1\relax%
\expandafter\ifx\csname footnote\the\endfncount\endcsname\relax%
@@ -779,7 +784,7 @@ footnote\the\fncount\endcsname{\if@two@col\hsize=.5\textwidth
\renewcommand\title[2][]{%
\def\@title{\setbox0=\vbox{\let\footnote\tempfootnote #2}%
{\let\footnote\tempfootnoteintitle%\uppercase
-{#2}}%% here???
+{#2}}%% right place for kickoutfootnotes below
\kickoutfootnotes
\ifdoublespace\vskip 3\baselineskip\fi
}%
@@ -953,6 +958,7 @@ footnote\the\fncount\endcsname{\if@two@col\hsize=.5\textwidth
\@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
\addvspace\frontmatter@postabstractspace
\global\abstractfalse
+\vskip12pt
}%
\newif\ifbib
@@ -1069,11 +1075,14 @@ footnote\the\fncount\endcsname{\if@two@col\hsize=.5\textwidth
\newif\if@firstsection \@firstsectiontrue
+
\def\section{%
-\if@firstsection
+\ifanonymous\nocollaboration{0}\fi
+\if@firstsection
%% In case no collaboration is listed:
\ifcollaborationon\else\let\doauthor\olddoauthor
-\let\allauthors=\oldallauthors
+\ifanonymous \else
+\let\allauthors=\oldallauthors\fi
\fi
%\edef\currauthorlimit{\the\AuthorCollaborationLimit}
%\collaboration{\currauthorlimit}{}
@@ -1183,49 +1192,131 @@ the#1\endcsname}
\penalty \ApjSectionpenalty}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% changed to begin...end form, May 20,2020, AH
+%% Acknowledgments, use \begin{acknowledgments}...\end{acknowledgments}
+%% or \begin{acknowledgements}...\end{acknowledgements}
+
+{\catcode`#=12
+\gdef\hashmark{#}}
-%% begin...end form, not as good as \acknowledgments...\par
+\def\xacknowledgments{acknowledgments}
+\def\xacknowledgements{acknowledgements}
\newbox\ackbox
-\def\xacknowledgments{\vskip 5.8mm plus 1mm minus 1mm
-\vskip1sp
-\section*{Acknowledgments}
-\vskip4pt
+
+\def\acknowledgments{%
+\ifx\@currenvir\xacknowledgments\let\go\relax\else
+\let\go\stop
+\typeout{x^^J^^J^^J^^J^^J^^J^^J^^J
+ ===================^^J
+In AASTeX v6.3.1 the \string\acknowledgments\space command has been deprecated.^^J^^J
+Instead, please use the begin/end form:^^J^^J
+"\string\begin\string{acknowledgments\string}...\string\end\string{acknowledgments\string}"^^J^^J
+when using acknowledgments.^^J^^J See here:
+\url{https://journals.aas.org/aastexguide/\hashmark acknowledgments}
+^^J^^J
+ for more
+details.^^J
+ ===================^^J
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Printed error
+\vskip12pt
+\hrule height 1pt
+\vskip12pt
+\noindent ERROR:
+In AASTeX v6.3.1 the {\tt\string\acknowledgments} command has been
+deprecated.\\
+Instead, please use the begin/end form:\\
+{\tt
+\string\begin\string{acknowledgments\string}...\string\end\string{acknowledgments\string}}\\
+when using acknowledgments. For more details, see:\\
+\url{https://journals.aas.org/aastexguide/\hashmark acknowledgments}
+%
+\fi\go
+%%
\global\setbox\ackbox=\vbox\bgroup
-}
+\expandafter\ifx\csname internallinenumbers\endcsname\relax\else
+\begin{internallinenumbers}
+\fi
+\vskip 5.8mm plus 1mm minus 1mm
+\vskip1sp
+%\section*{Acknowledgments}
+\noindent\ignorespaces}
-\def\xendacknowledgments{\egroup
+\def\endacknowledgments{
+\expandafter\ifx\csname internallinenumbers\endcsname\relax\else
+\end{internallinenumbers}
+\fi
+\egroup%% completes ackbox
\ifanonymous
-\centerline{(Acknowledgements anonymized for review)}
+\vskip 5.8mm plus 1mm minus 1mm
+\vskip1sp
+%\section*{Acknowledgments}
+\centerline{(Acknowledgments anonymized for review)}
\else
-\copy\ackbox\fi}
-
-%% If anonymous option is used, a message instead of acknowledgments will appear.
-
-
-\long\def\xacknowledgments\par#1\par{\vskip 5.8mm plus 1mm minus 1mm
+\vbox{\unvbox\ackbox}
+\fi\vskip6pt}
+
+%% alternate spelling
+\def\acknowledgements{%
+\ifx\@currenvir\xacknowledgements\let\go\relax\else
+\let\go\stop
+\typeout{x^^J^^J^^J^^J^^J^^J^^J^^J
+ ===================^^J
+In AASTeX v6.3.1 the \string\acknowledgements\space command has been deprecated.^^J^^J
+Please use the begin/end form:^^J^^J
+"\string\begin\string{acknowledgements\string}...\string\end\string{acknowledgements\string}"^^J^^J
+when using acknowledgements.^^J^^J See here:
+\href{https://journals.aas.org/aastexguide/\hashmark acknowledgments}
+{https://journals.aas.org/aastexguide/\hashmark acknowledgments}
+^^J^^J
+ for more
+details.^^J
+ ===================^^J
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Printed error
+\vskip12pt
+\hrule height 1pt
+\vskip12pt
+\noindent ERROR:
+In AASTeX v6.3.1 the {\tt\string\acknowledgements} command has been
+deprecated.\\
+Instead, please use the begin/end form:\\
+{\tt
+\string\begin\string{acknowledgements\string}...\string\end\string{acknowledgements\string}}\\
+For more details, see:\\
+\url{https://journals.aas.org/aastexguide/\hashmark acknowledgments}
+%
+\fi\go
+%%
+\global\setbox\ackbox=\vbox\bgroup
+\expandafter\ifx\csname internallinenumbers\endcsname\relax\else
+\begin{internallinenumbers}
+\fi
+\vskip 5.8mm plus 1mm minus 1mm
\vskip1sp
-\vbox{
-\section*{Acknowledgments}
+%\section*{Acknowledgments}
+\noindent\ignorespaces}
+
+\def\endacknowledgements{
+\expandafter\ifx\csname internallinenumbers\endcsname\relax\else
+\end{internallinenumbers}
+\fi
+\egroup%% completes ackbox
\ifanonymous
+\vskip 5.8mm plus 1mm minus 1mm
+\vskip1sp
+%\section*{Acknowledgements}
\centerline{(Acknowledgements anonymized for review)}
\else
-\nobreak
-\vtop{#1}\fi}\vskip6pt}
+\vbox{\unvbox\ackbox}
+\fi\vskip6pt}
+
-\long\def\yacknowledgments#1\par{\vskip 5.8mm plus 1mm minus 1mm
-\vskip1sp
-\vbox{
-\section*{Acknowledgments}
-\ifanonymous
-\centerline{(Acknowledgements anonymized for review)}
-\else
-\nobreak
-\vtop{#1}\fi}\vskip6pt}
-\def\acknowledgments{\futurelet\next\checkforblankline}
-\def\checkforblankline{\ifx\next\par \let\go\xacknowledgments \else
-\let\go\yacknowledgments\fi\go}
% ****************************************
@@ -1242,8 +1333,7 @@ the#1\endcsname}
% appendixfloats: Needed. ??
\newif\ifappendixon
-\def\appendix{
-\global\appendixontrue
+\def\appendix{\global\appendixontrue
\if@two@col
\onecolumngrid
\noindent\mbox{}\vrule height 24pt width0pt\hfill{\apjsecfont APPENDIX}\hfill\mbox{}\par
@@ -1305,7 +1395,12 @@ APPENDIX}\hfill\mbox{}\par
\noindent \makebox[\textwidth][c]{\small\scshape REFERENCES}
\par
\vspace*{4pt plus 3pt}
- \set@column@hsize{2}\twocolumngrid
+ \set@column@hsize{2}\twocolumngrid
+%% Jan29, 2021, added \ifonecolstyle, \ifpreprinttwo
+\ifnumlines
+\ifonecolstyle
+\ifpreprinttwo\else
+\advance\linenumbersep-12pt\fi\fi\fi
\parindent=0cm \parskip=0cm
\def\baselinestretch{1.0}
\footnotesize \baselineskip=\baselinestretch\bibbaselineskip plus 1pt
@@ -1335,6 +1430,11 @@ APPENDIX}\hfill\mbox{}\par
\hbox to\textwidth{\hss\normalsize REFERENCES\hss}
\vspace{6pt}\parskip=0pt
\twocolumngrid
+%% Jan29, 2021, added \ifonecolstyle
+\ifnumlines
+\ifonecolstyle
+\ifpreprinttwo\else
+\advance\linenumbersep-12pt\fi\fi\fi
\par
\raggedright
\small
@@ -1736,6 +1836,7 @@ APPENDIX}\hfill\mbox{}\par
\let\jnl@style=\rmfamily
\def\ref@jnl#1{{\jnl@style#1}}%
\newcommand\aj{\ref@jnl{AJ}}% % Astronomical Journal
+\newcommand\psj{\ref@jnl{PSJ}}% % Planetary Science Journal
\newcommand\araa{\ref@jnl{ARA\&A}}% % Annual Review of Astron and Astrophys
\renewcommand\apj{\ref@jnl{ApJ}}% % Astrophysical Journal
\newcommand\apjl{\ref@jnl{ApJL}} % Astrophysical Journal, Letters
@@ -2100,13 +2201,13 @@ width0pt\relax#1$}\ignorespaces}
%% In response to request from AAS
\usepackage[bookmarks=true, % show bookmarks bar?/ Changed March 22, 2019 for
% improved accessibility
- pdfnewwindow=true, % links in new window
- colorlinks=true, % false: boxed links; true: colored links
- linkcolor=xlinkcolor, % color of internal links
- citecolor=xlinkcolor, % color of links to bibliography
- filecolor=xlinkcolor, % color of file links
- urlcolor=xlinkcolor, % color of external links
- final=true,
+ pdfnewwindow=true, % links in new window
+ colorlinks=true, % false: boxed links; true: colored links
+ linkcolor=xlinkcolor, % color of internal links
+ citecolor=xlinkcolor, % color of links to bibliography
+filecolor=xlinkcolor, % color of file links
+urlcolor=xlinkcolor, % color of external links
+final=true,
]{hyperref}
@@ -4667,6 +4768,7 @@ deluxetable*\endcsname{\deluxestartrue\bgroup\floattrue
\expandafter\def\csname enddeluxetable*\endcsname{\enddeluxetable
\egroup
+\null% added june 2020
\global\colnumbersonfalse
\global\deluxedecimalsfalse
\global\deluxestarfalse
@@ -4800,7 +4902,7 @@ to\hsize{\hss\vtop{\hsize=\wd0
\currtabletypesize
\setbox0=\hbox{\colnumbersonfalse
\begin{tabular}{#1}
-\pt@head
+\pt@head %%
##1\end{tabular}}% not here
\expandafter\ifx\csname @tablecaption\endcsname\empty\else
\noindent\hbox
@@ -4964,6 +5066,13 @@ continued \if@two@col\else on next page\fi}\\
%% march 2019
\ifreturntotwocol\global\returntotwocolfalse
\twocolumngrid\fi
+%% May 2020
+\ifappendixon
+\if@two@col@app
+\twocolumngrid
+\else
+\onecolumngrid\fi\fi
+\null
}%%
@@ -4990,6 +5099,8 @@ continued \if@two@col\else on next page\fi}\\
\twocolumngrid\hsize=\columnwidth\fi%% check this!!
\else
\end{table}\fi
+\null
+% added june 2020
\gdef\colnumbers{\saveplaincolnumbers}
\global\breaktabfalse
\global\deluxefalse
@@ -5000,7 +5111,8 @@ continued \if@two@col\else on next page\fi}\\
\global\movetableright=0pt
%\global\floatfalse
%\global\advance\c@table by -1\relax
-}%% check this!!
+%% check this!!
+}
%%@@@ ???
@@ -5344,7 +5456,7 @@ width 0pt\currtabletypesize{\bf References}---{#1}\vskip1sp}}
\let&\CheckNumberAndSwitch%
\gdef\pt@head{%
\hline\hline%
-\multicolumn1c{\tempcounter=0
+\multicolumn1c{\vrule height 12pt width0pt\relax\tempcounter=0
\expandafter\getDs\tabfullpreamble\relax
\global\colcount=0
\global\colheadcount=0}%
@@ -5359,7 +5471,7 @@ width 0pt\currtabletypesize{\bf References}---{#1}\vskip1sp}}
\ifmanu%
\iflongrotateon\noalign{\vskip-8pt}\else\noalign{\vskip-17pt}\fi%
\else%
- \ifmodern \iflongrotateon\else\noalign{\vskip-9pt}\fi%
+ \ifmodern\iflongrotateon\else\noalign{\vskip-9pt}\fi%
\else%
\fi%% end ifmodern
\fi%% end ifmanu
@@ -5389,7 +5501,7 @@ width 0pt\currtabletypesize{\bf References}---{#1}\vskip1sp}}
\def\zztablehead#1{\let&\CheckNumberAndSwitch%
\gdef\pt@head{%
%% this is needed:
-\multicolumn1c{\expandafter\getDs\tabfullpreamble\relax
+\multicolumn1c{\vrule height12pt width0pt\relax\expandafter\getDs\tabfullpreamble\relax
\global\tempcounter=0
\global\colcount=0
\global\colheadcount=0}\\
@@ -5702,18 +5814,20 @@ by 1\relax}\ignorespaces}%
\expandafter\def\csname editcolor2\endcsname{black}% was blue
\expandafter\def\csname editcolor3\endcsname{black}% was violet
+\let\newgo\relax
\newcount\colorcount
-\def\edit#1#2{{\colorcount=#1\relax%
-\ifturnoffedit\let\go\ignorespaces\else%
-\let\go\relax\fi%
-\ifturnoffedit
-\color{black}#2%
-\else
-\color{\csname editcolor\the\colorcount\endcsname}%
-\ifnum\colorcount=1{\ifturnoffone\color{black}#2\else\bf#2\fi}\else%
-\ifnum\colorcount=2{\ifturnofftwo\color{black}#2\else\it#2\fi}\else%
-\ifnum\colorcount=3{\ifturnoffthree\color{black}#2\else#2\fi}\fi\fi\fi\fi%
-}\go}
+
+\newcount\editnum
+\def\edit#1#2{\ifcase#1\or\ifturnoffone%
+\unskip%
+\else%
+\texorpdfstring{{\bf#2}}{#2}\fi\or%
+\ifturnofftwo%
+\unskip%
+\else\texorpdfstring{{\bfseries\itshape#2}}{#2}\fi%
+\or%
+\ifturnoffthree\unskip\else%
+\texorpdfstring{{\bfseries\underline{#2}}}{#2}\fi\fi}
\def\collaborationcomment#1#2{{\colorcount=#1
\ifturnoffedit\let\go\ignorespaces\else%
@@ -5728,9 +5842,9 @@ by 1\relax}\ignorespaces}%
\ifturnoffedit\let\go\ignorespaces\else%
\let\go\relax%
\color{\csname editcolor\the\colorcount\endcsname}
-\ifnum\colorcount=1{\ifturnoffone\else\bf (Author~note: #2)\ \fi}\else
-\ifnum\colorcount=2{\ifturnofftwo\else\it (Author~note: #2)\ \fi}\else
-\ifnum\colorcount=3{\ifturnoffthree\else (Author~note: #2)\ \fi}\fi\fi\fi\fi%
+\ifnum\colorcount=1{\ifturnoffone\else\bf (Author~note 1: #2)\ \fi}\else
+\ifnum\colorcount=2{\ifturnofftwo\else\it (Author~note 2: #2)\ \fi}\else
+\ifnum\colorcount=3{\ifturnoffthree\else (Author~note 3: #2)\ \fi}\fi\fi\fi\fi%
\go}}
@@ -5803,44 +5917,13 @@ to 20pt{\hfill}}\vskip12pt}%
\endgroup%
}%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Highlight Figure
-\definecolor{ltblue}{cmyk}{.5,.1,.1,0}
-
-\long\def\highlightfigure#1{\centerline{
-\fboxrule=4pt
-\fboxsep=12pt
-\fcolorbox{ltblue}{white}{\hbox to
-.93\textwidth{\hss$\vcenter{\advance\hsize -24pt #1}$\hss}}
-}}
-
-
-%%%%%%%%%%%%%
-%% Line numbering
-
-\ifnumlines
-\usepackage{lineno}
-
-\linenumbers*[1]
-\if@two@col
-\advance\linenumbersep -4pt
-\else
-\advance\linenumbersep 12pt
-\fi\fi
-
+% needed??
\gdef\specialbibitem#1[#2]#3#4{
{\tt\string\bibitem}[#2]{\tt\string{\string}}
#4}
-\let\savecite\cite
-\let\savecitep\citep
-\let\savecitet\citet
-\def\specialcite#1{\hbox{\savecite{#1}}}
-\def\specialcitep#1{\hbox{\savecitep{#1}}}
-\def\specialcitet#1{\hbox{\savecitet{#1}}}
-\let\saveref\ref
-\def\specialref#1{\hbox{\saveref{#1}}}
+
%%%%%%%%%%%%%%%%%%%%%%%%%
%% Track Changes
@@ -5870,7 +5953,7 @@ to 20pt{\hfill}}\vskip12pt}%
{\color{trackchange}\bf(Added: [#1] #2)}%%
\ifabstract\label{\the\refchangenumber}%
\expandafter\gdef\csname
-changenum\the\refchangenumber\endcsname{Added: [#1]
+changenum\the\refchangenumber\endcsname{\bf Added: [#1]
\textcolor{trackchange}\bf\relax{#2}\global\silenttrue}%
\else\expandafter\gdef\csname
changenum\the\refchangenumber\endcsname{\bf\relax Added: [#1]
@@ -5892,11 +5975,11 @@ changenum\the\refchangenumber\endcsname{\bf\relax Added: [#1]
\ifabstract%
\label{\the\refchangenumber}%
\expandafter\gdef\csname
-changenum\the\refchangenumber\endcsname{Added:
+changenum\the\refchangenumber\endcsname{\bf Added:
\textcolor{trackchange}\bf\relax{#1},
\global\silenttrue}\else
\expandafter\gdef\csname
-changenum\the\refchangenumber\endcsname{Added:
+changenum\the\refchangenumber\endcsname{\bf Added:
\textcolor{trackchange}{\bf\relax\let\bibitem\specialbibitem #1},%
\global\silentfalse}\fi%
\else#1\fi}
@@ -5917,26 +6000,18 @@ changenum\the\refchangenumber\endcsname{Added:
}%
{\color{trackchange}\bf%
\ifbib\let\sout\relax\fi%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\ref\specialref\let\cite\specialcite (Deleted: [#1] \sout{#2})
+(Deleted: [#1] \sout{#2})
}%
\ifabstract\label{\the\refchangenumber}%
\expandafter\gdef\csname
changenum\the\refchangenumber\endcsname{Deleted: [#1]
{\color{trackchange}\bf%
-\let\citet\specialcitet%
-\let\citep\specialcitep%
-\let\cite\specialcite\sout{#2}}\global\silenttrue}%
+\sout{#2}}\global\silenttrue}%
\else
\expandafter\gdef\csname
changenum\the\refchangenumber\endcsname{Deleted: [#1]
{\color{trackchange}%
\let\bibitem\specialbibitem%
-\let\ref\specialref%
-\let\cite\specialcite%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
\sout{#2}
}\global\silentfalse}\fi%
\fi}
@@ -5953,24 +6028,15 @@ changenum\the\refchangenumber\endcsname{Deleted: [#1]
%%
{\color{trackchange}\bf%
\ifbib\let\sout\relax\fi%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\ref\specialref\let\cite\specialcite(Deleted: \sout{#1}
-)}%
+(Deleted: \sout{#1})}%
\ifabstract\label{\the\refchangenumber}%
\expandafter\gdef\csname changenum\the\refchangenumber\endcsname{Deleted:
-{\color{trackchange}\bf\let\ref\specialref%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\cite\specialcite\sout{#1}}\global\silenttrue}%
+{\color{trackchange}\bf
+\sout{#1}}\global\silenttrue}%
\else
\expandafter\gdef\csname changenum\the\refchangenumber\endcsname{Deleted:
{\color{trackchange}\bf%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\bibitem\specialbibitem%
-\let\ref\specialref%
-\let\cite\specialcite\sout{#1}}\global\silentfalse}\fi%
+\sout{#1}}\global\silentfalse}\fi%
\fi}
@@ -5984,29 +6050,21 @@ changenum\the\refchangenumber\endcsname{Deleted: [#1]
\ifnumlines\ifabstract\else\xdef\doit{\noexpand\linelabel{\the\refchangenumber}}\doit\fi\else%
\xdef\doit{\noexpand\label{\the\refchangenumber}}\doit\fi%
{\ifbib\let\sout\relax\fi
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\cite\specialcite\color{trackchange}\bf(Replaced: [#1] \sout{#2}}%
-{\color{black}replaced with:} {\let\ref\specialref%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\cite\specialcite\color{trackchange}\bf\relax #3)}%
+\color{trackchange}\bf(Replaced: [#1] \sout{#2}}%
+{\color{black}replaced with:} {
+\color{trackchange}\bf\relax #3)}%
\ifabstract\label{\the\refchangenumber}%
\expandafter\gdef\csname
changenum\the\refchangenumber\endcsname{Replaced: [#1]
-{\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\cite\specialcite\color{trackchange}\bf\relax\sout{#2}} {\color{black} replaced with:}
+{\color{trackchange}\bf\relax\sout{#2}} {\color{black} replaced with:}
{\color{trackchange}\bf\relax#3}, \global\silenttrue}%
\else
\expandafter\gdef\csname
changenum\the\refchangenumber\endcsname{Replaced: [#1]
-{\ifbib\let\sout\relax\fi\let\bibitem\specialbibitem
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\cite\specialcite\color{trackchange}\bf\relax\sout{#2}
+{\ifbib\let\sout\relax\fi
+\color{trackchange}\bf\relax\sout{#2}
} {\color{black} replaced with:}
-{\let\bibitem\specialbibitem\color{trackchange}\bf\relax#3}, \global\silentfalse}\fi%
+{\color{trackchange}\bf\relax#3}, \global\silentfalse}\fi%
\else#3\fi}
\long\def\yreplaced#1#2{%
@@ -6016,28 +6074,22 @@ changenum\the\refchangenumber\endcsname{Replaced: [#1]
\vskip14pt}%
\ifnumlines\ifabstract\else\xdef\doit{\noexpand\linelabel{\the\refchangenumber}}\doit\fi\else%
\xdef\doit{\noexpand\label{\the\refchangenumber}}\doit\fi%
-{\ifbib\let\sout\relax\fi\let\ref\specialref%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\cite\specialcite\color{trackchange}\bf\relax(Replaced: %\sout
-{#1}
+{\ifbib\let\sout\relax\fi
+\color{trackchange}\bf\relax(Replaced:
+\sout{#1}
}%
{\color{black}replaced with:}
{\color{trackchange}\bf\relax #2)}%
\ifabstract\label{\the\refchangenumber}%
\expandafter\gdef\csname changenum\the\refchangenumber\endcsname{Replaced:
-{\let\cite\specialcite%
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\color{trackchange}\bf\relax\sout{#1}} {\color{black} replaced with:}
+{\color{trackchange}\bf\relax
+\sout{#1}} {\color{black} replaced with:}
{\color{trackchange}\bf\relax#2},\global\silenttrue}%
\else
\expandafter\gdef\csname
changenum\the\refchangenumber\endcsname{Replaced:
-{\ifbib\let\sout\relax\fi\let\bibitem\specialbibitem
-\let\citep\specialcitep%
-\let\citet\specialcitet%
-\let\cite\specialcite\color{trackchange}\bf\relax\sout{#1}
+{\ifbib\let\sout\relax\fi
+\color{trackchange}\bf\relax\sout{#1}
} {\color{black} replaced with:}
{\let\bibitem\specialbibitem\color{trackchange}\bf\relax#2}, \global\silentfalse}\fi%
\else#2\fi}
@@ -6050,6 +6102,7 @@ changenum\the\refchangenumber\endcsname{Replaced:
\def\yexplain#1{\iftrack\ {\bfseries\itshape\color{explain} [Explanation of change:
#1]\ }\fi}
+
\newcount\listchangenum
\def\listofchanges{
@@ -6087,9 +6140,11 @@ on page
\thispagestyle{empty}
}
+
\PassOptionsToPackage{normalem}{ulem}
\usepackage{ulem}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -6222,19 +6277,18 @@ on page
%%%%%%%%%%
%% macros to give hyperref link to authors when orcid numbers
%% are supplied with \author[0000-2345-3333-0023]{author name}
- \def\lookforbracket{\ifx\next[\let\go\xauthor
- \else\let\go\yauthor\fi\go}
+ \def\lookforbracket{\ifx\next[\let\go\xauthor\else\let\go\yauthor\fi\go}
\newcount\entriesinthiscollab
\newcount\allentries
\newif\ifseesmessage
-\def\author{\global\advance\entriesinthiscollab by 1
+\def\author{\global\advance\entriesinthiscollab by 1\relax%
\global\advance\allentries by 1\relax\futurelet\next\lookforbracket}
\def\new@author@def#1#2{%
\move@AU\move@AF\move@AUAF
\let\@AF@join\@author@join
- \def\@author{{\href{http://orcid.org/#1}{#2%
+ \def\@author{{\href{http://orcid.org/#1}{#2%
\openin1 Orcid-ID.png \ifeof1
%% message for authors??
%\typeout{^^J^^J ! Missing File: Orcid-ID.png; needed for Orcid Author icon !
@@ -6243,7 +6297,7 @@ on page
\hskip2pt\includegraphics[width=9pt]{Orcid-ID.png}\fi}}{}}%
}%
-\def\orciderrormessage{
+\def\orciderrormessage{%
\typeout{^^J^^J [\firstarg]\space Invalid ORCID Identifier!^^J^^J The ID
should consist of four sets of four digits,^^J separated with -, ie,
0000-0012-3245-1234 or ^^J
@@ -6251,27 +6305,26 @@ should consist of four sets of four digits,^^J separated with -, ie,
^^J^^J
Please fix, or don't use square bracket argument with
\string\author[]\string{\string}
-^^J^^J}
+^^J^^J}%
}
%% Tests to see if author gave reasonable Orcid number;
%% if not, stops processing and gives error message.
\newif\ifbadOrcid
-\def\lookatOrcid #1-#2-#3-#4-{
-\def\one{#1}\def\two{#2}\def\three{#3}\def\four{#4}
-\ifx\one\empty
-\global\badOrcidtrue
-\else
-\ifx\two\empty
-\global\badOrcidtrue
-\else
-\ifx\three\empty
-\global\badOrcidtrue
-\else
-\ifx\four\empty
-\global\badOrcidtrue
-\fi\fi\fi\fi
-}
+\def\lookatOrcid #1-#2-#3-#4-{%
+\def\one{#1}\def\two{#2}\def\three{#3}\def\four{#4}%
+\ifx\one\empty%
+\global\badOrcidtrue%
+\else%
+\ifx\two\empty%
+\global\badOrcidtrue%
+\else%
+\ifx\three\empty%
+\global\badOrcidtrue%
+\else%
+\ifx\four\empty%
+\global\badOrcidtrue%
+\fi\fi\fi\fi}
\def\lookforDigits #1#2#3#4{
\def\xone{#1}\def\xtwo{#2}\def\xthree{#3}\def\xfour{#4}
@@ -6302,8 +6355,7 @@ Please fix, or don't use square bracket argument with
\else
\ifcat \xfour 1\else
\global\badOrcidtrue\fi
-\fi
-}
+\fi}
\def\FinallookforDigits #1#2#3#4{
\def\xone{#1}\def\xtwo{#2}\def\xthree{#3}\def\xfour{#4}
@@ -6335,27 +6387,26 @@ Please fix, or don't use square bracket argument with
\ifcat \xfour 1\else
\if\xfour X
\else
- \global\badOrcidtrue\fi
- \fi
-\fi
-}
+ \global\badOrcidtrue\fi%
+ \fi%
+\fi}
%% Last digit might be X
-\def\xauthor[#1]#2{\def\testone{#1-}\def\firstarg{#1}
+\def\xauthor[#1]#2{\def\testone{#1-}\def\firstarg{#1}%
\setbox0=\hbox{\expandafter\lookatOrcid\testone {}-{}-{}-{}-
-\expandafter\lookforDigits\one {}{}{}{}
-\expandafter\lookforDigits\two {}{}{}{}
-\expandafter\lookforDigits\three {}{}{}{}
-\expandafter\FinallookforDigits\four {}{}{}{}}
+\expandafter\lookforDigits\one {}{}{}{}%
+\expandafter\lookforDigits\two {}{}{}{}%
+\expandafter\lookforDigits\three {}{}{}{}%
+\expandafter\FinallookforDigits\four {}{}{}{}}%
%%
\ifbadOrcid\let\go\orciderrormessage
-\else\let\go\relax\fi\go
-\ifbadOrcid\let\go\stop\else\let\go\relax\fi\go
-\new@author@def{#1}{#2}}
+\else\let\go\relax\fi\go%
+\ifbadOrcid\let\go\stop\else\let\go\relax\fi\go%
+\new@author@def{#1}{#2}}%% oct 7, this doesn't seem to work
\def\yauthor{\@author@def{}}
@@ -6465,81 +6516,82 @@ needed. It will not do anything.^^J Please use
\@listand\fi
}%
+\newif\ifaddspace
\def\doauthor#1#2#3{%
-\iflongauthor\vskip6pt\fi
-%%%
-\ifanonymous
- \iffirsttime
- \global\firsttimefalse
- Anonymous author(s)
- \fi
-\else %% ends at end of this def
+\iflongauthor\vskip6pt\fi%%%
+\ifanonymous%
+ \iffirsttime%
+ \global\firsttimefalse%
+ Anonymous author(s)%
+ \fi%
+\else%% ends at end of this def
%%%
\ifnum\docollabnum< 1
\global\AuthorCollaborationLimit\expandafter\csname
-currCollabLimit0\endcsname
+currCollabLimit0\endcsname%
%% this won't change until after collaboration name at end
\fi %% end ifnum\docollabnum
%%
%%%%%%%%%%%%%%%%
-\global\advance\totalentries by 1
-\global\advance\countauthors by 1
+\global\advance\totalentries by 1\relax%
+\global\advance\countauthors by 1\relax%
%%%
-\ifallauthors\global\AuthorCollaborationLimit=9999 \fi
+\ifallauthors\global\AuthorCollaborationLimit=9999 \fi%
%%%
% for testing
% [author number=\the\countauthors/ auth collab limit
% =\the\AuthorCollaborationLimit]
%
-\gdef\xone{#1}
+\gdef\xone{#1}%
\ifnum\countauthors < \AuthorCollaborationLimit
-\gdef\docomma{,}\else\gdef\docomma{}\fi
+\global\addspacetrue
+\gdef\docomma{,}\else\gdef\docomma{}\fi% ok
%%%
\ifnum\countauthors = \AuthorCollaborationLimit
\ifnum\AuthorCollaborationLimit=1\else
-\gdef\doAnd{And }\fi
+\gdef\doAnd{And }\fi%
\ifnum\tempauthornumber= 1
-\gdef\doAnd{ } \fi\fi
+\gdef\doAnd{ } \fi\fi%
%%
{\tempauthorminusone=\AuthorCollaborationLimit
\advance\tempauthorminusone by -1
\ifnum\countauthors=\tempauthorminusone
-\gdef\doAnd{And }
+\gdef\doAnd{And }%
\gdef\docomma{}\fi}%
%%%
-\global\dothisfalse
+\global\dothisfalse%
%% if num countauthors is less than or equal to \AuthorCollaborationLimit, print name
\ifnum\countauthors< \AuthorCollaborationLimit
%%%
-\ifx\xone\empty\else
-\global\dothistrue
+\ifx\xone\empty\else%
+\global\dothistrue%
%\expandafter\gdef\csname
%dothisaffil-\the\countauthors\the\docollab\endcsname{dothisone}
\ignorespaces\leavevmode\hbox{#1\unskip\docomma}% nice, keeps name from breaking across lines
-\fi
-\fi
+\fi%
+\fi%
%%
\ifnum\countauthors= \AuthorCollaborationLimit
%%%
\ifx\xone\empty\else
\global\dothistrue
- \ignorespaces\leavevmode\hbox{\doAnd #1\unskip\docomma}% nice, keeps name from breaking across lines
-\fi
-\fi
+ \ignorespaces\leavevmode\hbox{\doAnd #1\unskip\docomma}%nice, keeps name from breaking across lines
+\fi%
+\fi%
%% ++++
%%
-\ifsuppressAffiliations\else
-\ifx\xone\empty\else
- \begingroup
+\ifsuppressAffiliations\else%
+\ifx\xone\empty\else%
+\begingroup%
\ifnum\countauthors>\AuthorCollaborationLimit\else
#3% all affil numbers
\ifx\@affilID@temp\empty %% number following author
\else%
\setbox0=\hbox{\expandafter\lookfornumbers\@affilID@temp{}{}{}{}{}{}{}{}{}}%
-\fi\fi
+\fi\fi%
%% #2= \altaffiliation{} or \email{} or
%% possibly anything other than author, affiliation, or collaboration
- \@if@empty{#2}{\endgroup{}{}}
+ \@if@empty{#2}{\endgroup{}{}}%
{\ifnum\countauthors>\AuthorCollaborationLimit\endgroup{}{}%% <<< bug fix, added \endgroup{}{}
\else
\endgroup{\comma@space}{}\frontmatter@footnote{#2}\fi}%
@@ -6566,11 +6618,11 @@ CollabTotalAuthors\the\docollabnum\endcsname
< 2 %%%%% Don't use et al if there is only one author
\else
\expandafter\ifnum\csname CollabTotalAuthors\the\docollabnum\endcsname
->\AuthorCollaborationLimit
+>\AuthorCollaborationLimit\relax%
\ifnum\AuthorCollaborationLimit=0\else
\vskip3pt
{\rm et al.} \vskip-3pt
-\fi\fi\fi\fi
+\fi\fi\fi\fi%
}%% end local change to docollabnum
%%%%
\expandafter\ifx\csname
@@ -6580,7 +6632,7 @@ currCollabName\the\totalentries\endcsname\empty
\vskip6pt
\expandafter\csname currCollabName\the\totalentries\endcsname\vskip8pt
\affiliation{testing}
-\fi
+\fi%
%%%%%%%%
\global\countauthors=0
%%%
@@ -6593,17 +6645,17 @@ currCollabName\the\totalentries\endcsname\empty
\else
\global\AuthorCollaborationLimit=\csname
specificCollabLimit\the\docollabnum\endcsname
- \fi
+ \fi%
\expandafter\ifx\csname
CollabTotalAuthors\the\docollabnum\endcsname\relax
\else
\global\tempauthornumber=\csname
CollabTotalAuthors\the\docollabnum\endcsname
-\fi
-}
+\fi}%
\fi %% ends test to see if it is time to use collaboration name
\fi %% ends ifanonymous
-}%
+\ifaddspace\ \fi\global\addspacefalse}% oct 7, 2020, allows multiple names to break over lines,
+ %but no extra space if \collaboration{1}
%%%% ++++====
@@ -6713,7 +6765,7 @@ CollabTotalAuthors\the\docollabnum\endcsname
\fi}
\fi %% ends test to see if it is time to use collaboration name
\fi %% ends ifanonymous
-}%
+}%
%%%
%% set \affil to match \affiliation found in revtex, since authors are accustomed to using \affil{}
@@ -6763,7 +6815,9 @@ CollabTotalAuthors\the\docollabnum\endcsname
\NoNewPageAfterKeywords
\def\NewPageAfterKeywords{\global\nobreakafterkeywordsfalse}
+%%%+++!!!
\def\frontmatter@maketitle{%
+%% \@author@finish needs to be here:
\@author@finish
\if@firstsection% not appendix, in other words
\title@column\titleblock@produce
@@ -6851,15 +6905,15 @@ CollabTotalAuthors\the\docollabnum\endcsname
\def\tempfootmark#1{}
\newcount\c@affilcount
-
-
\renewcommand*\altaffiliation[2][]{%
-\@AF@join{#1#2\ifmodern\baselineskip=14pt\fi
+\@AF@join{\ifanonymous\else
+#1#2\ifmodern\baselineskip=14pt\fi
\if@two@col\hsize=.5\textwidth
\advance\hsize by -18pt
-\fi}%
+\fi\fi}%
}%
+
\def\correspondingauthor#1{{\ifanonymous
\else
\renewcommand\thefootnote{\hskip-12pt}
@@ -6926,9 +6980,9 @@ currCollabName\the\allentries\endcsname{%\ifnum#1>0
#2}
%%
\let\doEtAl\relax
+%% not here
\@author@def{\@booleanfalse
-\collaboration@sw}{}
-}
+\collaboration@sw}{}}
\def\and{
@@ -6980,7 +7034,10 @@ currCollabName\the\allentries\endcsname{%\ifnum#1>0
\def\bibliography#1{\bibliography@latex{#1}}%
+
%%%
+\newif\iffrontmatterfirsttime
+\global\frontmatterfirsttimetrue
\let\savecentercr\@centercr
\def\frontmatter@author@produce@script{%
\begingroup
@@ -7004,7 +7061,7 @@ currCollabName\the\allentries\endcsname{%\ifnum#1>0
\, \unskip\unskip
\par
\endgroup
-%%
+%% below
\begingroup
\frontmatter@above@affiliation@script
\let\AFF@opr \@affil@script
@@ -7012,7 +7069,11 @@ currCollabName\the\allentries\endcsname{%\ifnum#1>0
\def\@centercr{\vrule depth 3pt width0pt\vskip1sp}
\@AFF@list}
\let\@centercr\savecentercr
- \frontmatter@footnote@produce
+%% sept 14, 2020
+\iffrontmatterfirsttime
+\frontmatter@footnote@produce
+\global\frontmatterfirsttimefalse
+\fi
\par
\endgroup
\endgroup
@@ -7153,9 +7214,10 @@ N}_{J\mathrm e}$}}
\def\fnum@figure{{\bf\figurename~\thefigure}}%
}
-%% aastex63
+%% written for aastex63
\newif\ifallauthors
-\def\allauthors{\global\allauthorstrue
+\def\allauthors{
+\global\allauthorstrue
\let\doauthor\doAllauthors
\ifanonymous
\vskip6pt\vskip1sp\centerline{\large\bf All Authors and
@@ -7173,7 +7235,7 @@ Affiliations\vrule depth 18pt width0pt}\nobreak
\maketitle
}\fi}
-%% AASTeX62
+%% written for AASTeX62
\def\oldallauthors{%% this conditional keeps \allauthors from turning on
%% unless \AuthorCollaborationLimit is used:
\ifnumlines\nolinenumbers\fi
@@ -7188,32 +7250,61 @@ Affiliations\vrule depth 18pt width0pt}\nobreak
\let\AllAuthors\allauthors
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Highlight Figure
+\definecolor{ltblue}{cmyk}{.5,.1,.1,0}
+\newdimen\currwidth
+\long\def\highlightfigure#1{
+\bgroup
+\fboxrule=4pt
+\fboxsep=12pt
+\vskip6pt
+\global\currwidth=\hsize
+\global\advance\currwidth by -32pt
+\noindent\hbox to\currwidth{\fcolorbox{ltblue}{white}{%
+$\vcenter{\hbox to\currwidth{\hss#1\hss}}$}}
+\egroup}
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% New interactive command:
-\def\xlc{timeseries}
+\def\xlc{lc}
\def\xjs{js}
\def\xanimation{animation}
-
+\newbox\interactbox
\newif\ifcorrectentries
-\def\interactive#1#2{\global\correctentriesfalse\def\checkone{#1}
+
+
+\def\interactive#1#2{
+\global\correctentriesfalse\def\checkone{#1}
\ifx\checkone\xlc\correctentriestrue\fi
\ifx\checkone\xjs\correctentriestrue\fi
\ifx\checkone\xanimation \correctentriestrue\fi
-\ifcorrectentries
-\else\hrule height1pt\vskip12pt\bf ERROR: Your choices for the first argument for
-{\tt\string\interactive} are timeseries, js, or animation.\\[6pt] Please choose one
-of these terms.\vskip12pt \fi
-%%%
\def\checktwo{#2}
-\ifx\checktwo\empty \vskip12pt \bf ERROR: The command {\tt\string\interactive} needs
-two arguments, with the second argument for the graphics file or files
-needed.\vskip12pt\hrule height1pt \else\correctentriestrue\fi
-\setbox0=\vbox\bgroup}
+\ifx\checktwo\empty\global\correctentriesfalse\fi
+\ifcorrectentries
+\else\hrule height1pt\vskip12pt\bf ERROR:
+The command
+{\tt\string\begin\string{interactive\string}\string{\string}\string{\string}}
+needs two arguments. The
+first describes the interactive type and the only allowed choices are
+lc, js, or animation.\\
+The second argument is the movie file or package
+containing the interactive figure components. See\\
+\url{https://journals.aas.org/aastexguide/\hashmark interactivefig} for more
+details.
+\vskip12pt\hrule height1pt
+\fi \global\currwidth\hsize
+\global\advance\currwidth by -32pt
+%% we need to set \currwidth here because interactbox expands
+%% before highlightfigure
+\global\setbox\interactbox=\vbox\bgroup\hsize=\currwidth\relax\centering
+}
\def\endinteractive{\egroup
-\ifcorrectentries\highlightfigure{\vskip-6pt\vbox{\unvbox0}
-\vskip-12pt}\fi}
+\ifcorrectentries\highlightfigure{\copy\interactbox}\fi
+}
%%%% For cases in which footnotes are called in full width environment
%% but are used in two cols. This keeps them from overwriting the
@@ -7227,15 +7318,137 @@ by-18pt\relax#1}}
\newdimen\movetableright
+%% for anonymous option
\newif\ifsuppressAffiliations
\def\suppressAffiliations{\global\suppressAffiliationstrue}
+%% new definition to be used in trackchanges:
+\def\sout#1{\raise5pt\hbox{\underline{\vbox to
+0pt{\vskip-4pt\hbox{#1\vrule height 8.5pt depth 3.5pt width0pt}\vss}}}}
+
+%% changes for affiliations when anonymous option is used:
+\ifanonymous
+\suppressAffiliationstrue
+\gdef\affiliation#1{}%% may 20, 2020
+\def\xauthor[#1]#2{}
+\let\yauthor\@gobble
+\def\lookforbracket{\ifx\next[
+\let\go\xauthor\else\let\go\yauthor\fi\go}
+\def\author{\futurelet\next\lookforbracket}
+\fi
+
+
+%%%%%%%%%%%%%
+%% Line numbering
+
+
+\ifnumlines
+\usepackage[mathlines]{lineno}%% dec 20
+%%
+\linenumbers*[1]
+%%\linenumbersep default=10pt
+\if@two@col
+\advance\linenumbersep -6pt
+\else
+\advance\linenumbersep 12pt
+\fi
+\fi
+
+%% Use when line numbers are on, and after \usepackage{amsmath}.
+%% Will make line numbering work on math as it would without amsmath.
+\def\fixmathlinenumbering{
+\let\saveopensqbracket\[
+\def\[{\linenomath\saveopensqbracket}
+\let\saveequation\equation
+\let\saveendequation\endequation
+%%
+ \let\savealign\align
+ \let\saveendalign\endalign
+%%
+ \let\savealigned\aligned
+ \let\saveendaligned\endaligned
+%%
+\def\align{\linenomath\savealign}
+ \def\endalign{\saveendalign}
+ \def\aligned{\linenomath\savealigned}
+ \def\endaligned{\linenomath\saveendaligned}
+%%
+\def\equation{\linenomath\saveequation}
+\def\endequation{\linenomath\saveendequation}
+\usepackage[mathlines]{lineno}
+}
+
+\AtBeginDocument{\expandafter\ifx\csname
+@amsmath@err\endcsname\relax\else\fixmathlinenumbering\fi}
\endinput
+%% Change Log
+============================
+Jan 29, 2021
+added \ifonecolstyle to see if reference numberlines need to
+be closer to text
+
+Dec 20, 2020
+Line numbering solutions:
+
+Line numbering equations and \[ \] works fine.
+
+$$math $$ does not work, and should be replaced with \[ math \]
+
+If author has \usepackage{amsmath} the equations will not number;
+amsmath and lineno are incompatible.
+
+
+June 28
+For using \edit{}{} in section heads; new command,
+\simpleedit that will prevent errors in section heads
+and in bookmarks. \edit is set to be equal to \simpleedit{}{}
+in \section definition, so nothing needs to be done by user.
+\protect used in section head, as \protect\edit{}{}, is not
+necessary.
+
+June 27
+\null added to \end{deluxetable} and \csname enddeluxetable*\endcsname
+to force final page of multipage table to print.
+
+June 26
+Acknowledgments: remember to use
+\begin{acknowledgments}...\end{acknowledgments} form
+OR
+\begin{acknowledgements}...\end{acknowledgements}
+
+Now have an error message built in if someone uses
+just \acknowledgments or \acknowledgements
+
+
+June 4, 2020
+ Added \nocollaboration{0} to first
+ section head, if anonymous was true. This
+ allowed correct titlepage for anonymous
+ if any style option was used.
+
+Acknowledgments: remember to use
+\begin{acknowledgments}...\end{acknowledgments} form
+
+
%% Change Log
============================
+May 19, 2020
+Changed definition of \sout (strike out) so that
+it works with a variety of citations in
+argument of \deleted and \replaced without complaint.
+
+Made anonymous work with \longauthor, and without
+\collaboration or \nocollaboration.
+
+Changed \acknowledgements to
+\begin{acknowledgements}...\end{acknowledgements}
+(More error proof, and standard mark up)
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
June 8, 2019
Changed \author and \collaboration macros.
Collaboration now takes two arguments:
@@ -7534,3 +7747,60 @@ with additions.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% New interactive command:
+
+\def\xlc{timeseries}
+\def\xjs{js}
+\def\xanimation{animation}
+\newbox\interactbox
+\newif\ifcorrectentries
+
+\def\interactive#1#2{
+\global\correctentriesfalse\def\checkone{#1}
+\ifx\checkone\xlc\correctentriestrue\fi
+\ifx\checkone\xjs\correctentriestrue\fi
+\ifx\checkone\xanimation \correctentriestrue\fi
+\ifcorrectentries
+\else\hrule height1pt\vskip12pt\bf ERROR: Your choices for the first argument for
+{\tt\string\interactive} are timeseries, js, or animation.\\[6pt] Please choose one
+of these terms.\vskip12pt \fi
+%%%
+\def\checktwo{#2}
+\ifx\checktwo\empty \vskip12pt \bf ERROR: The command {\tt\string\interactive} needs
+two arguments, with the second argument for the graphics file or files
+needed.\vskip12pt\hrule height1pt \else\global\correctentriestrue\fi
+\global\currwidth\hsize
+\global\advance\currwidth by -32pt
+%% we need to set \currwidth here because interactbox expands
+%% before highlightfigure
+\global\setbox\interactbox=\vbox\bgroup\hsize=\currwidth\centering}
+
+\def\xxinteractive#1#2{\global\correctentriesfalse\def\checkone{#1}
+\ifx\checkone\xlc\correctentriestrue\fi
+\ifx\checkone\xjs\correctentriestrue\fi
+\ifx\checkone\xanimation \correctentriestrue\fi
+\ifcorrectentries
+\else\hrule height1pt\vskip12pt\bf
+\noindent ERROR:\\[6pt] Your choices for the first argument for
+{\tt\string\begin\string{\string\interactive\string}} are timeseries, js, or animation.\\[6pt] Please choose one
+of these terms.\vskip12pt \fi
+%%%
+\def\checktwo{#2}
+\ifx\checktwo\empty \vskip12pt \bf
+\noindent ERROR:\\[6pt]
+The second argument of %{\tt\string\begin\string{interactive\string}} is the file containing the
+interactive component. Please check your LaTeX to be sure it conforms.
+See %\href{https://journals.aas.org/aastexguide/interactivefig}{stuff}
+%{https://journals.aas.org/aastexguide/\#interactivefig}
+for more details.
+\vskip12pt\hrule height1pt \else\global\correctentriestrue\fi
+\global\currwidth\hsize
+\global\advance\currwidth by -32pt
+%% we need to set \currwidth here because interactbox expands
+%% before highlightfigure
+\global\setbox\interactbox=\vbox\bgroup\hsize=\currwidth\centering}
+
+\def\endinteractive{\egroup
+\ifcorrectentries\highlightfigure{\copy\interactbox}\fi}
+
diff --git a/macros/latex/contrib/aastex/natbib.tex b/macros/latex/contrib/aastex/natbib.tex
deleted file mode 100644
index af6bb7052e..0000000000
--- a/macros/latex/contrib/aastex/natbib.tex
+++ /dev/null
@@ -1,96 +0,0 @@
-\documentclass[onecolumn]{aastex3}
-
-\newcommand\aastex{AAS\TeX}%
-
-\begin{document}
-
-\begin{center}
-Using {\tt\string natbib} with \aastex
-\end{center}
-
-\aastex\ uses Patrick Daly's {\tt\string natbib} package to manage
-citations. The {\tt\string natbib} package re-implements LaTeX's
-{\tt\string\cite} command, and offers greater flexibility for managing
-citations in the author-year form. {\tt\string natbib} is required with the
-\aastex\ package but fortunately {\tt\string natbib} is included in most
-modern distributions. Authors are encouraged to read the {\tt\string
-natbib} documentation for complete details on the package's capabilites.
-All examples in this document are adapted from the {\tt\string natbib}
-documentation.
-
-Authors must use the LaTeX's {\tt\string thebibliography} environment to
-use the {\tt\string natbib} extensions. Here is a bibliography with two
-entries marked up in the {\tt\string natbib} style:
-
-\begin{verbatim}
-\begin{thebibliography}{}
-\bibitem[James et al.(1991)]{jam91} James, H. ...
-\bibitem[Jones et al.(1990)Jones, Baker, and Williams]{jon90} Jones, J. ...
-\end{thebibliography}
-\end{verbatim}
-
-The square-bracketed argument contains the "author" portion of the citation
-followed by the year in parentheses. The parentheses are important, so do
-not leave them out. Note that in the second {\tt\string\bibitem}, the
-square-bracketed argument includes two author lists, a short version before
-the year and a long version after. Authors should use this form of the
-markup if they wish to use the * forms of the {\tt\string\cite} commands.
-(See the examples below.)
-
-The text in the curly-brace argument of the {\tt\string\bibitem} is the
-citation key and should be used as the argument in the corresponding cite
-commands in the text. The two basic text citation commands are
-{\tt\string\citet} and {\tt\string\citep}. ({\tt\string\citet} corresponds
-to the plain LaTeX {\tt\string\cite} command.) Use the two optional
-arguments to append text before or after the citationtext in the first set
-of square brackets will appear before the cite, text in the second set will
-appear after it. Use the asterisk (*) form of the cite commands to print
-the long version of the author lists for references that have been marked
-up in the manner of the "jon90" example.
-
-Here are some {\tt\string\citet} and {\tt\string\citep} examples taken from
-the {\tt\string natbib} package
-documentation\footnote{\url{http://www.ctan.org/pkg/natbib}}.
-
-\begin{tabular}{ll}
-\textbf{Command} & \textbf{Output} \\
-\verb|\citet{jon90}| & Jones et al. (1990) \\
-\verb|\citet[chap.~2]{jon90}| & Jones et al. (1990, chap.~2) \\
-\verb|\citep{jon90}| & (Jones et al., 1990) \\
-\verb|\citep[chap.~2]{jon90}| & (Jones et al., 1990, chap.~2) \\
-\verb|\citep[see][]{jon90}| & (see Jones et al., 1990) \\
-\verb|\citep[see][chap.~2]{jon90}| & (see Jones et al., 1990, chap.~2) \\
-\verb|\citet*{jon90}| & Jones, Baker, and Williams (1990) \\
-\verb|\citep*{jon90}| & (Jones, Baker, and Williams, 1990) \\
-\verb|\citet{jon90,jam91}| & Jones et al. (1990); James et al. (1991) \\
-\verb|\citep{jon90,jam91}| & (Jones et al., 1990; James et al. 1991) \\
-\verb|\citep{jon90,jon91}| & (Jones et al., 1990, 1991) \\
-\verb|\citep{jon90a,jon90b}| & (Jones et al., 1990a,b) \\
-\end{tabular}
-
-Alternatively, use {\tt\string\citealt} and {\tt\string\citealp} to produce
-a cite without parentheses:
-
-\begin{tabular}{ll}
-\textbf{Command} & \textbf{Output} \\
-\verb|\citealt{jon90}| & Jones et al. 1990 \\
-\verb|\citealt*\{jon90}| & Jones et al., 1990 \\
-\verb|\citealp*\{jon90}| & Jones, Baker, and Williams, 1990 \\
-\verb|\citealp{jon90,jam91}| & Jones et al., 1990; James et al., 1991 \\
-\verb|\citealp[pg.~32]{jon90}| & Jones et al., 1990, pg.~32 \\
-\end{tabular}
-
-\clearpage
-
-Finally, the {\tt\string\citeauthor} and {\tt\string\citeyear} commands can
-be used to print only the author or year portion of the citation:
-
-\begin{tabular}{ll}
-\textbf{Command} & \textbf{Output} \\
-\verb|\citeauthor{jon90}| & Jones et al. \\
-\verb|\citeauthor*{jon90}| & Jones, Baker, and Williams \\
-\verb|\citeyear{jon90}| & 1990 \\
-\verb|\citeyearpar{jon90}| & (1990) \\
-\end{tabular}
-
-\end{document}
diff --git a/macros/latex/contrib/aastex/sample63.bib b/macros/latex/contrib/aastex/sample631.bib
index 0402ac900d..d86236b07f 100644
--- a/macros/latex/contrib/aastex/sample63.bib
+++ b/macros/latex/contrib/aastex/sample631.bib
@@ -1,3 +1,22 @@
+@ARTICLE{2018AJ....156..123A,
+ author = {{Astropy Collaboration} and {Price-Whelan}, A.~M. and {Sip{\H{o}}cz}, B.~M. and {G{\"u}nther}, H.~M. and {Lim}, P.~L. and {Crawford}, S.~M. and {Conseil}, S. and {Shupe}, D.~L. and {Craig}, M.~W. and {Dencheva}, N. and {Ginsburg}, A. and {VanderPlas}, J.~T. and {Bradley}, L.~D. and {P{\'e}rez-Su{\'a}rez}, D. and {de Val-Borro}, M. and {Aldcroft}, T.~L. and {Cruz}, K.~L. and {Robitaille}, T.~P. and {Tollerud}, E.~J. and {Ardelean}, C. and {Babej}, T. and {Bach}, Y.~P. and {Bachetti}, M. and {Bakanov}, A.~V. and {Bamford}, S.~P. and {Barentsen}, G. and {Barmby}, P. and {Baumbach}, A. and {Berry}, K.~L. and {Biscani}, F. and {Boquien}, M. and {Bostroem}, K.~A. and {Bouma}, L.~G. and {Brammer}, G.~B. and {Bray}, E.~M. and {Breytenbach}, H. and {Buddelmeijer}, H. and {Burke}, D.~J. and {Calderone}, G. and {Cano Rodr{\'\i}guez}, J.~L. and {Cara}, M. and {Cardoso}, J.~V.~M. and {Cheedella}, S. and {Copin}, Y. and {Corrales}, L. and {Crichton}, D. and {D'Avella}, D. and {Deil}, C. and {Depagne}, {\'E}. and {Dietrich}, J.~P. and {Donath}, A. and {Droettboom}, M. and {Earl}, N. and {Erben}, T. and {Fabbro}, S. and {Ferreira}, L.~A. and {Finethy}, T. and {Fox}, R.~T. and {Garrison}, L.~H. and {Gibbons}, S.~L.~J. and {Goldstein}, D.~A. and {Gommers}, R. and {Greco}, J.~P. and {Greenfield}, P. and {Groener}, A.~M. and {Grollier}, F. and {Hagen}, A. and {Hirst}, P. and {Homeier}, D. and {Horton}, A.~J. and {Hosseinzadeh}, G. and {Hu}, L. and {Hunkeler}, J.~S. and {Ivezi{\'c}}, {\v{Z}}. and {Jain}, A. and {Jenness}, T. and {Kanarek}, G. and {Kendrew}, S. and {Kern}, N.~S. and {Kerzendorf}, W.~E. and {Khvalko}, A. and {King}, J. and {Kirkby}, D. and {Kulkarni}, A.~M. and {Kumar}, A. and {Lee}, A. and {Lenz}, D. and {Littlefair}, S.~P. and {Ma}, Z. and {Macleod}, D.~M. and {Mastropietro}, M. and {McCully}, C. and {Montagnac}, S. and {Morris}, B.~M. and {Mueller}, M. and {Mumford}, S.~J. and {Muna}, D. and {Murphy}, N.~A. and {Nelson}, S. and {Nguyen}, G.~H. and {Ninan}, J.~P. and {N{\"o}the}, M. and {Ogaz}, S. and {Oh}, S. and {Parejko}, J.~K. and {Parley}, N. and {Pascual}, S. and {Patil}, R. and {Patil}, A.~A. and {Plunkett}, A.~L. and {Prochaska}, J.~X. and {Rastogi}, T. and {Reddy Janga}, V. and {Sabater}, J. and {Sakurikar}, P. and {Seifert}, M. and {Sherbert}, L.~E. and {Sherwood-Taylor}, H. and {Shih}, A.~Y. and {Sick}, J. and {Silbiger}, M.~T. and {Singanamalla}, S. and {Singer}, L.~P. and {Sladen}, P.~H. and {Sooley}, K.~A. and {Sornarajah}, S. and {Streicher}, O. and {Teuben}, P. and {Thomas}, S.~W. and {Tremblay}, G.~R. and {Turner}, J.~E.~H. and {Terr{\'o}n}, V. and {van Kerkwijk}, M.~H. and {de la Vega}, A. and {Watkins}, L.~L. and {Weaver}, B.~A. and {Whitmore}, J.~B. and {Woillez}, J. and {Zabalza}, V. and {Astropy Contributors}},
+ title = "{The Astropy Project: Building an Open-science Project and Status of the v2.0 Core Package}",
+ journal = {\aj},
+ keywords = {methods: data analysis, methods: miscellaneous, methods: statistical, reference systems, Astrophysics - Instrumentation and Methods for Astrophysics},
+ year = 2018,
+ month = sep,
+ volume = {156},
+ number = {3},
+ eid = {123},
+ pages = {123},
+ doi = {10.3847/1538-3881/aabc4f},
+archivePrefix = {arXiv},
+ eprint = {1801.02634},
+ primaryClass = {astro-ph.IM},
+ adsurl = {https://ui.adsabs.harvard.edu/abs/2018AJ....156..123A},
+ adsnote = {Provided by the SAO/NASA Astrophysics Data System}
+}
+
@ARTICLE{2013A&A...558A..33A,
author = {{Astropy Collaboration} and {Robitaille}, Thomas P. and
{Tollerud}, Erik J. and {Greenfield}, Perry and {Droettboom}, Michael and
diff --git a/macros/latex/contrib/aastex/sample63.pdf b/macros/latex/contrib/aastex/sample631.pdf
index bb3163040d..a70bc04bcc 100644
--- a/macros/latex/contrib/aastex/sample63.pdf
+++ b/macros/latex/contrib/aastex/sample631.pdf
Binary files differ
diff --git a/macros/latex/contrib/aastex/sample63.tex b/macros/latex/contrib/aastex/sample631.tex
index a81a0cec3a..2fe35107a8 100644
--- a/macros/latex/contrib/aastex/sample63.tex
+++ b/macros/latex/contrib/aastex/sample631.tex
@@ -1,18 +1,22 @@
-
-%% Beginning of file 'sample63.tex'
+%% Beginning of file 'sample631.tex'
%%
-%% Modified 2019 June
+%% Modified 2021 March
%%
%% This is a sample manuscript marked up using the
-%% AASTeX v6.3 LaTeX 2e macros.
+%% AASTeX v6.31 LaTeX 2e macros.
%%
%% AASTeX is now based on Alexey Vikhlinin's emulateapj.cls
%% (Copyright 2000-2015). See the classfile for details.
-%% AASTeX requires revtex4-1.cls (http://publish.aps.org/revtex4/) and
-%% other external packages (latexsym, graphicx, amssymb, longtable, and epsf).
-%% All of these external packages should already be present in the modern TeX
-%% distributions. If not they can also be obtained at www.ctan.org.
+%% AASTeX requires revtex4-1.cls and other external packages such as
+%% latexsym, graphicx, amssymb, longtable, and epsf. Note that as of
+%% Oct 2020, APS now uses revtex4.2e for its journals but remember that
+%% AASTeX v6+ still uses v4.1. All of these external packages should
+%% already be present in the modern TeX distributions but not always.
+%% For example, revtex4.1 seems to be missing in the linux version of
+%% TexLive 2020. One should be able to get all packages from www.ctan.org.
+%% In particular, revtex v4.1 can be found at
+%% https://www.ctan.org/pkg/revtex4-1.
%% The first piece of markup in an AASTeX v6.x document is the \documentclass
%% command. LaTeX will ignore any data that comes before this command. The
@@ -21,15 +25,14 @@
%% typeset, one-column, single-spaced document. It is the default and thus
%% does not need to be explicitly stated.
%%
-%%
%% using aastex version 6.3
-\documentclass{aastex63}
+\documentclass[linenumbers]{aastex631}
%% The default is a single spaced, 10 point font, single spaced article.
%% There are 5 other style options available via an optional argument. They
%% can be invoked like this:
%%
-%% \documentclass[arguments]{aastex63}
+%% \documentclass[arguments]{aastex631}
%%
%% where the layout options are:
%%
@@ -42,9 +45,10 @@
%% modern : a stylish, single text column, 12 point font, article with
%% wider left and right margins. This uses the Daniel
%% Foreman-Mackey and David Hogg design.
-%% RNAAS : Preferred style for Research Notes which are by design
-%% lacking an abstract and brief. DO NOT use \begin{abstract}
-%% and \end{abstract} with this style.
+%% RNAAS : Supresses an abstract. Originally for RNAAS manuscripts
+%% but now that abstracts are required this is obsolete for
+%% AAS Journals. Authors might need it for other reasons. DO NOT
+%% use \begin{abstract} and \end{abstract} with this style.
%%
%% Note that you can submit to the AAS Journals in any of these 6 styles.
%%
@@ -68,7 +72,7 @@
%%
%% these can be used in any combination, e.g.
%%
-%% \documentclass[twocolumn,linenumbers,trackchanges]{aastex63}
+%% \documentclass[twocolumn,linenumbers,trackchanges]{aastex631}
%%
%% AASTeX v6.* now includes \hyperref support. While we have built in specific
%% defaults into the classfile you can manually override them with the
@@ -93,14 +97,15 @@
\newcommand\latex{La\TeX}
%% Reintroduced the \received and \accepted commands from AASTeX v5.2
-\received{June 1, 2019}
-\revised{January 10, 2019}
-\accepted{\today}
+%\received{March 1, 2021}
+%\revised{April 1, 2021}
+%\accepted{\today}
+
%% Command to document which AAS Journal the manuscript was submitted to.
%% Adds "Submitted to " the argument.
-\submitjournal{AJ}
+%\submitjournal{PSJ}
-%% For manuscript that include authors in collaborations, AASTeX v6.3
+%% For manuscript that include authors in collaborations, AASTeX v6.31
%% builds on the \collaboration command to allow greater freedom to
%% keep the traditional author+affiliation information but only show
%% subsets. The \collaboration command now must appear AFTER the group
@@ -146,7 +151,7 @@
%%
%% If you wish, you may supply running head information, although
%% this information may be modified by the editorial offices.
-\shorttitle{Sample article}
+\shorttitle{AASTeX v6.31 Sample article}
\shortauthors{Schwarz et al.}
%%
%% You can add a light gray and diagonal water-mark to the first page
@@ -158,18 +163,18 @@
%% where dimension is any recognized LaTeX dimension, e.g. pt, in, etc.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
+\graphicspath{{./}{figures/}}
%% This is the end of the preamble. Indicate the beginning of the
%% manuscript itself with \begin{document}.
\begin{document}
\title{Template \aastex Article with Examples:
-v6.3\footnote{Released on June, 10th, 2019}}
+v6.31\footnote{Released on March, 1st, 2021}}
%% LaTeX will automatically break titles if they run longer than
%% one line. However, you may use \\ to force a line break if
-%% you desire. In v6.3 you can include a footnote in the title.
+%% you desire. In v6.31 you can include a footnote in the title.
%% A significant change from earlier AASTEX versions is in the structure for
%% calling author and affiliations. The change was necessary to implement
@@ -187,7 +192,7 @@ v6.3\footnote{Released on June, 10th, 2019}}
%% the authors name.
%%
%% Use \affiliation for affiliation information. The old \affil is now aliased
-%% to \affiliation. AASTeX v6.3 will automatically index these in the header.
+%% to \affiliation. AASTeX v6.31 will automatically index these in the header.
%% When a duplicate is found its index will be the same as its previous entry.
%%
%% Note that \altaffilmark and \altaffiltext have been removed and thus
@@ -204,7 +209,7 @@ v6.3\footnote{Released on June, 10th, 2019}}
%%
%% Use \email to set provide email addresses. Each \email will appear on its
%% own line so you can put multiple email address in one \email call. A new
-%% \correspondingauthor command is available in V6.3 to identify the
+%% \correspondingauthor command is available in V6.31 to identify the
%% corresponding author of the manuscript. It is the author's responsibility
%% to make sure this name is also in the author list.
%%
@@ -216,8 +221,8 @@ v6.3\footnote{Released on June, 10th, 2019}}
%% automatically put the author and affiliation information from the manuscript
%% and save the corresponding author the trouble of entering it by hand.
-\correspondingauthor{August Muench}
-\email{greg.schwarz@aas.org, gus.muench@aas.org}
+%\correspondingauthor{August Muench}
+%\email{greg.schwarz@aas.org, gus.muench@aas.org}
\author[0000-0002-0786-7307]{Greg J. Schwarz}
\affiliation{American Astronomical Society \\
@@ -229,35 +234,30 @@ Washington, DC 20006, USA}
1667 K Street NW, Suite 800 \\
Washington, DC 20006, USA}
-\collaboration{1}{(AAS Journals Data Scientists collaboration)}
+\collaboration{6}{(AAS Journals Data Editors)}
\author{Butler Burton}
\affiliation{Leiden University}
\affiliation{AAS Journals Associate Editor-in-Chief}
-\nocollaboration{1}
\author{Amy Hendrickson}
\altaffiliation{AASTeX v6+ programmer}
\affiliation{TeXnology Inc.}
-\collaboration{1}{(LaTeX collaboration)}
-
\author{Julie Steffen}
\affiliation{AAS Director of Publishing}
\affiliation{American Astronomical Society \\
1667 K Street NW, Suite 800 \\
Washington, DC 20006, USA}
-\author{Scott Chernoff}
+\author{Magaret Donnelly}
\affiliation{IOP Publishing, Washington, DC 20005}
-\nocollaboration{2}
-
%% Note that the \and command from previous versions of AASTeX is now
%% depreciated in this version as it is no longer necessary. AASTeX
%% automatically takes care of all commas and "and"s between authors names.
-%% AASTeX 6.3 has the new \collaboration and \nocollaboration commands to
+%% AASTeX 6.31 has the new \collaboration and \nocollaboration commands to
%% provide the collaboration status of a group of authors. These commands
%% can be used either before or after the list of corresponding authors. The
%% argument for \collaboration is the collaboration identifier. Authors are
@@ -271,7 +271,7 @@ Washington, DC 20006, USA}
This example manuscript is intended to serve as a tutorial and template for
authors to use when writing their own AAS Journal articles. The manuscript
includes a history of \aastex\ and documents the new features in the
-previous versions as well as the new features in version 6.3. This
+previous versions as well as the bug fixes in version 6.31. This
manuscript includes many figure and table examples to illustrate these new
features. Information on features not explicitly mentioned in the article
can be viewed in the manuscript comments or more extensive online
@@ -279,19 +279,21 @@ documentation. Authors are welcome replace the text, tables, figures, and
bibliography with their own and submit the resulting manuscript to the AAS
Journals peer review system. The first lesson in the tutorial is to remind
authors that the AAS Journals, the Astrophysical Journal (ApJ), the
-Astrophysical Journal Letters (ApJL), and Astronomical Journal (AJ), all
-have a 250 word limit for the abstract\footnote{Note that manuscripts
-submitted to the new Research Notes of the American Astronomical Society
-(RNAAS) do \textbf{not} have abstracts.}. If you exceed this length the
-Editorial office will ask you to shorten it. This abstract has 180 words.
+Astrophysical Journal Letters (ApJL), the Astronomical Journal (AJ), and
+the Planetary Science Journal (PSJ) all have a 250 word limit for the
+abstract\footnote{Abstracts for Research Notes of the American Astronomical
+Society (RNAAS) are limited to 150 words}. If you exceed this length the
+Editorial office will ask you to shorten it. This abstract has 182 words.
\end{abstract}
%% Keywords should appear after the \end{abstract} command.
-%% See the online documentation for the full list of available subject
-%% keywords and the rules for their use.
-\keywords{editorials, notices ---
-miscellaneous --- catalogs --- surveys}
+%% The AAS Journals now uses Unified Astronomy Thesaurus concepts:
+%% https://astrothesaurus.org
+%% You will be asked to selected these concepts during the submission process
+%% but this old "keyword" functionality is maintained in case authors want
+%% to include these concepts in their preprints.
+\keywords{Classical Novae (251) --- Ultraviolet astronomy(1736) --- History of astronomy(1868) --- Interdisciplinary astronomy(804)}
%% From the front matter, we move on to the body of the paper.
%% Sections are demarcated by \section and \subsection, respectively.
@@ -357,10 +359,10 @@ When planning the next \aastex\ release the popularity of emulateapj played
an important roll in the decision to drop the old base code and adopt and
modify emulateapj for \aastex\ v6.+ instead. The change brings \aastex\
inline with what the majority of authors are already using while still
-delivering new and improved features. \aastex\ v6.0 through v6.3 were
+delivering new and improved features. \aastex\ v6.0 through v6.31 were
written by Amy Hendrickson. The release dates were January 2016 (v6.0),
-October 2016 (v6.1), January 2018 (v6.2), and June 2019 (v6.3),
-respectively.
+October 2016 (v6.1), January 2018 (v6.2), June 2019 (v6.3), and March 2010
+(v6.31) respectively.
The new features in the recent releases includes:
@@ -398,10 +400,16 @@ encapsulated postscript (EPS) or portable document format (PDF) files,
\item New {\tt\string anonymous} style to keep the authors, affiliations and acknowledgments from showing in the compiled pdf for dual anonymous review, and
\item Adoptions of IAU approved syntax for nominal units, see Section \ref{nominal}.
\end{enumerate}
+ \item{v6.31}
+ \begin{enumerate}
+ \item Fixes a bug in the {\tt\string anonymous} style for dual anonymous review.
+ \item Improves line numbering with the {\tt\string linenumbers} style around equations due to the amsmath and lineno package compatibility issues.
+ \item Depreciate the {\tt\string \\acknowledgment} command in favor of the {\tt\string acknowledgment} environment.
+ \end{enumerate}
\end{itemize}
The rest of this article provides information and examples on how to create
-your own AAS Journal manuscript with v6.3. Special emphasis is placed on
+your own AAS Journal manuscript with v6.31. Special emphasis is placed on
how to use the full potential of \aastex\ v6+. The next section describes
the different manuscript styles available and how they differ from past
releases. Section \ref{sec:floats} describes table and figure placement.
@@ -413,14 +421,13 @@ incorporate equations in a manuscript while Section \ref{sec:highlight}
discuss how to use different ways to highlight revisions. The last section,
\ref{sec:cite}, shows how recognize software and external data as first
class references in the manuscript bibliography. An appendix is included
-to show how to construct one and provide some information on how article
-charges are calculated. Additional information is available both embedded
-in the comments of this \latex\ file and in the online documentation at
+for additional information readers might find useful.
+More documentation is embedded in the comments of this \latex\ file and in the online documentation at
\url{http://journals.aas.org/authors/aastex.html}.
\section{Manuscript styles} \label{sec:style}
-The default style in \aastex\ v6.3 is a tight single column style, e.g. 10
+The default style in \aastex\ v6.31 is a tight single column style, e.g. 10
point font, single spaced. The single column style is very useful for
article with wide equations. It is also the easiest to style to work with
since figures and tables, see Section \ref{sec:floats}, will span the
@@ -429,7 +436,7 @@ entire page, reducing the need for address float sizing.
To invoke a two column style similar to the what is produced in
the published PDF copy use \\
-\noindent {\tt\string\documentclass[twocolumn]\{aastex63\}}. \\
+\noindent {\tt\string\documentclass[twocolumn]\{aastex631\}}. \\
\noindent Note that in the two column style figures and tables will only
span one column unless specifically ordered across both with the ``*'' flag,
@@ -456,15 +463,15 @@ output that has wider left and right margins. It is designed to have fewer
words per line to improve reader retention. It also looks better on devices
with smaller displays such as smart phones.
-For a Research Note use the {\tt\string RNAAS} option. This will produce a
-manuscript with no abstract and in the {\tt\string modern} style.
-
The {\tt\string anonymous} option will prevent the author and affiliations
from being shown in the compiled pdf copy. This option allows the author
to keep this critical information in the latex file but prevent the reviewer
-from seeing it during peer review if dual anonymous review is requested.
-Likewise, acknowledgments can also be hidden if placed after the
-{\tt\string\acknowledgments} command.
+from seeing it during peer review if dual anonymous review (DAR) is requested.
+Likewise, acknowledgments can also be hidden if placed in the new
+{\tt\string\begin\{acknowledgments\}} ... {\tt\string\end\{acknowledgments\}}
+environment. The use of this option is highly recommended for PSJ submissions.
+Advice for anonymizing your manuscript for DAR is provided at
+\url{https://journals.aas.org/manuscript-preparation/#dar}.
\section{Floats} \label{sec:floats}
@@ -516,7 +523,7 @@ when a {\tt\string tabular} is surrounded by {\tt\string\begin\{table\}} ...
{\tt\string\end\{table\}} is it a true float and the rules and suggestions
above apply.
-In AASTeX v6.3 all deluxetables are float tables and thus if they are
+In AASTeX v6.31 all deluxetables are float tables and thus if they are
longer than a page will spill off the bottom. Long deluxetables should
begin with the {\tt\string\startlongtable} command. This initiates a
longtable environment. Authors might have to use {\tt\string\clearpage} to
@@ -770,7 +777,7 @@ used to position the two image files side by side.
Both {\tt\string\plotone} and {\tt\string\plottwo} take a
{\tt\string\caption} and an optional {\tt\string\figurenum} command to
specify the figure number\footnote{It is better to not use
-{\tt\string\figurenum} and let LaTeX auto-increment all the figures. If you
+{\tt\string\figurenum} and let \latex\ auto-increment all the figures. If you
do use this command you need to mark all of them accordingly.}. Each is
based on the {\tt\string graphicx} package command,
{\tt\string\includegraphics}. Authors are welcome to use
@@ -831,7 +838,7 @@ access to all the figures published in the AAS Journals since they offered
an electronic version which was in the mid 1990s. You can filter image
searches by specific terms, year, journal, or type. The type filter is
particularly useful for finding all published enhanced graphics. As of
-June 2019 there are over 3000 videos, 1000 figure sets, and 65 interactive
+March 2021 there are over 4000 videos, 1300 figure sets, and 100 interactive
figures. The next sections describe how to include these types of graphics
in your own manuscripts.
@@ -1020,7 +1027,7 @@ tutorials and examples.
\section{Displaying mathematics} \label{sec:displaymath}
The most common mathematical symbols and formulas are in the amsmath
-package. \aastex\ requires this package so there is no need to
+package. \aastex\ requires this package so there is no need to
specifically call for it in the document preamble. Most modern \latex\
distributions already contain this package. If you do not have this
package or the other required packages, revtex4-1, latexsym, graphicx,
@@ -1052,7 +1059,6 @@ for more than one line and end each line with a
command. Alignment points can be added with ampersands (\&). There should be
two ampersands per line. In the examples they are centered on the equal
symbol.
-
\begin{eqnarray}
\gamma^\mu & = &
\left(
@@ -1117,8 +1123,8 @@ The second method does not have the ability to highlight the specific
nature of the changes but does allow the author to document changes over
multiple revisions. The commands are {\tt\string\edit1\{<text>\}},
{\tt\string\edit2\{<text>\}} and {\tt\string\edit3\{<text>\}} and they
-produce {\tt\string<text>} that is highlighted in bold red, italic blue and
-underlined purple, respectively. Authors should use the first command to
+produce {\tt\string<text>} that is highlighted in bold, bold+italic and
+bold+underline, respectively. Authors should use the first command to
\edit1{indicated which text has been changed from the first revision.} The
second command is to highlight \edit2{new or modified text from a second
revision}. If a third revision is needed then the last command should be used
@@ -1169,8 +1175,12 @@ not have specific bibtex entries for these types of references so the
code the ``@misc'' type correctly. The most recent aasjournal.bst file,
available with \aastex\ v6, will output bibtex ``@misc'' type properly.
-\acknowledgments
-
+%% IMPORTANT! The old "\acknowledgment" command has be depreciated. It was
+%% not robust enough to handle our new dual anonymous review requirements and
+%% thus been replaced with the acknowledgment environment. If you try to
+%% compile with \acknowledgment you will get an error print to the screen
+%% and in the compiled pdf.
+\begin{acknowledgments}
We thank all the people that have made this AASTeX what it is today. This
includes but not limited to Bob Hanisch, Chris Biemesderfer, Lee Brotzman,
Pierre Landau, Arthur Ogawa, Maxim Markevitch, Alexey Vikhlinin and Amy
@@ -1179,6 +1189,7 @@ for the new "modern" style design. Considerable help was provided via bug
reports and hacks from numerous people including Patricio Cubillos, Alex
Drlica-Wagner, Sean Lake, Michele Bannister, Peter Williams, and Jonathan
Gagne.
+\end{acknowledgments}
%% To help institutions obtain information on the effectiveness of their
%% telescopes the AAS Journals has created a group of keywords for telescope
@@ -1199,9 +1210,9 @@ CTIO:1.5m,CXO}
%% the manuscript. Authors should list each code and include either a
%% citation or url to the code inside ()s when available.
-\software{astropy \citep{2013A&A...558A..33A},
+\software{astropy \citep{2013A&A...558A..33A,2018AJ....156..123A},
Cloudy \citep{2013RMxAA..49..137F},
- SExtractor \citep{1996A&AS..117..393B}
+ Source Extractor \citep{1996A&AS..117..393B}
}
%% Appendix material should be preceded with a single \appendix command.
@@ -1221,11 +1232,9 @@ Appendices can be broken into separate sections just like in the main text.
The only difference is that each appendix section is indexed by a letter
(A, B, C, etc.) instead of a number. Likewise numbered equations have
the section letter appended. Here is an equation as an example.
-
\begin{equation}
I = \frac{1}{1 + d_{1}^{P (1 + d_{2} )}}
\end{equation}
-
Appendix tables and figures should not be numbered like equations. Instead
they should continue the sequence from the main article body.
@@ -1248,7 +1257,7 @@ is located at \url{https://authortools.aas.org/ApJL/betacountwords.html}.
\section{Rotating tables} \label{sec:rotate}
The process of rotating tables into landscape mode is slightly different in
-\aastex v6.3. Instead of the {\tt\string\rotate} command, a new environment
+\aastex v6.31. Instead of the {\tt\string\rotate} command, a new environment
has been created to handle this task. To place a single page table in a
landscape mode start the table portion with
{\tt\string\begin\{rotatetable\}} and end with
@@ -1346,7 +1355,7 @@ V838 Her & 5 (197) & 2448340.5 (197) & 2 (198) & \nodata & 0.5$\pm0.1$ (198) & 2
\end{deluxetable*}
\end{longrotatetable}
-A handy "cheat sheet" that provides the necessary LaTeX to produce 17
+A handy "cheat sheet" that provides the necessary \latex\ to produce 17
different types of tables is available at \url{http://journals.aas.org/authors/aastex/aasguide.html#table_cheat_sheet}.
\section{IAU recommendations for nominal units \label{nominal}}
@@ -1354,8 +1363,8 @@ different types of tables is available at \url{http://journals.aas.org/authors/a
The IAU 2015 resolution B3 defines nominal solar and planetary values by
establishing conversions between solar and planetary values and SI units.
The rational and specifications are given in \citet{2016AJ....152...41P}.
-The recommended nominal conversion constants for LaTeX have been
-incorporate into v6.3 to help authors follow the IAU resolution.
+The recommended nominal conversion constants for \latex\ have been
+incorporate into v6.31 to help authors follow the IAU resolution.
The general commands take this form:
@@ -1384,7 +1393,7 @@ the most common uses would be:
\end{tabular}
\vskip12pt
-AASTeX v6.3 also contains specific commands for other commonly used
+AASTeX v6.31 also contains specific commands for other commonly used
units. These are:
\vskip24pt
@@ -1409,16 +1418,25 @@ parameter\\
All of these commands work equally well in text and math mode.
+\section{Using Chinese, Japanese, and Korean characters}
+
+Authors have the option to include names in Chinese, Japanese, or Korean (CJK)
+characters in addition to the English name. The names will be displayed
+in parentheses after the English name. The way to do this in AASTeX is to
+use the CJK package available at \url{https://ctan.org/pkg/cjk?lang=en}.
+Further details on how to implement this and solutions for common problems,
+please go to \url{https://journals.aas.org/nonroman/}.
+
%% For this sample we use BibTeX plus aasjournals.bst to generate the
-%% the bibliography. The sample63.bib file was populated from ADS. To
+%% the bibliography. The sample631.bib file was populated from ADS. To
%% get the citations to show in the compiled file do the following:
%%
-%% pdflatex sample63.tex
-%% bibtext sample63
-%% pdflatex sample63.tex
-%% pdflatex sample63.tex
+%% pdflatex sample631.tex
+%% bibtext sample631
+%% pdflatex sample631.tex
+%% pdflatex sample631.tex
-\bibliography{sample63}{}
+\bibliography{sample631}{}
\bibliographystyle{aasjournal}
%% This command is needed to show the entire author+affiliation list when
@@ -1432,4 +1450,4 @@ All of these commands work equally well in text and math mode.
\end{document}
-% End of file `sample63.tex'.
+% End of file `sample631.tex'.
diff --git a/macros/latex/contrib/acrotex/README.md b/macros/latex/contrib/acrotex/README.md
index b4795599fc..65a27dbc5e 100644
--- a/macros/latex/contrib/acrotex/README.md
+++ b/macros/latex/contrib/acrotex/README.md
@@ -1,6 +1,6 @@
The AcroTeX eDucation Bundle (AeB)
Author: D. P. Story
-Dated: 2021-02-17
+Dated: 2021-02-28
AeB contains the following:
@@ -19,9 +19,13 @@ AeB contains the following:
6) Documentation for AeB (AcroTeX eDucatation Bundle) and eforms
(including insdljs and dljslib).
+What's New (2021-02-28) exerquiz: bug fix to \rbtAAKey. web: removed legacy code.
+
What's New (2021-02-17) exerquiz: Added an optional fourth argument to the JavaScript
function DisplayQuizResults(), this is in support of the eq-pin2corr
package.
+
+What's New (2021-02-21) Bug fixes
What's New (2021-02-07) Minor change in the defineJS environment that is
critical to a fix in the page events environments of aeb_pro.
diff --git a/macros/latex/contrib/acrotex/doc/acrobat-in-workflow.pdf b/macros/latex/contrib/acrotex/doc/acrobat-in-workflow.pdf
index 1afda0806f..9821c49870 100644
--- a/macros/latex/contrib/acrotex/doc/acrobat-in-workflow.pdf
+++ b/macros/latex/contrib/acrotex/doc/acrobat-in-workflow.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/doc/aeb_man.pdf b/macros/latex/contrib/acrotex/doc/aeb_man.pdf
index e1dd5c07ac..9c2b41edc5 100644
--- a/macros/latex/contrib/acrotex/doc/aeb_man.pdf
+++ b/macros/latex/contrib/acrotex/doc/aeb_man.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/doc/aeb_man.tex b/macros/latex/contrib/acrotex/doc/aeb_man.tex
index 802c92c60e..3afad031bf 100644
--- a/macros/latex/contrib/acrotex/doc/aeb_man.tex
+++ b/macros/latex/contrib/acrotex/doc/aeb_man.tex
@@ -235,10 +235,10 @@
\university{{\AcroT} Software Development Team}
\email{dpstory@acrotex.net}
\versionLabel{Dated:}
-\version{2021/02/17}
+\version{2021/02/28}
\copyrightyears{1999-\the\year}
\nocopyright
-\prepared{2021/02/17}
+\prepared{2021/02/28}
\revisionLabel{Distribution Dated:}
\copyrightStatus{True}
@@ -8029,9 +8029,14 @@ field, the second can be used to modify all fields created using
\cs{RespBoxTxt}.
\redpoint See the document \href{eformman.pdf}{eFormMan.pdf} on
-\textit{\href{eformman.pdf}{eForm Support}} for complete
-documentation on how to modify a field using the optional first
-argument, and how to use the ``every'' command.\footnote{eforms manual on Web: \url{\bUrl/eformman.pdf}}
+\textit{\href{eformman.pdf}{eForm Support}} for complete documentation on how
+to modify a field using the optional first argument, and how to use the
+``every'' command. %\footnote{eforms manual on Web: \url{\bUrl/eformman.pdf}}
+
+\exAeBBlogPDF{p=1446} As an application to the \cs{RespBoxTxt} command, the article
+\textit{\mlhref{\urlAcroTeXBlog/?p=1446}{Exerquiz: Matching-type questions}} how to create a matching-type
+question; the article \textit{\mlhref{\urlAcroTeXBlog/?p=1446}{Exerquiz: Randomized matching-type questions}}
+discusses how to randomize a matching-type question.
\subsubsection{\texorpdfstring{\protect\cs{RespBoxTxtPC}}%
{\textbackslash RespBoxTxtPC}: The Text Question with Partial Credit}\label{ss:respboxtxtpc}
diff --git a/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf b/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf
index 221ba16fdb..7b2d3fab78 100644
--- a/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf
+++ b/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/examples/jquiztst.pdf b/macros/latex/contrib/acrotex/examples/jquiztst.pdf
index d9f35cb497..4508bafbce 100644
--- a/macros/latex/contrib/acrotex/examples/jquiztst.pdf
+++ b/macros/latex/contrib/acrotex/examples/jquiztst.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/examples/jquiztst.tex b/macros/latex/contrib/acrotex/examples/jquiztst.tex
index 8a52a2bd28..053bd25487 100644
--- a/macros/latex/contrib/acrotex/examples/jquiztst.tex
+++ b/macros/latex/contrib/acrotex/examples/jquiztst.tex
@@ -8,7 +8,7 @@
]{web}
\usepackage{exerquiz}
\usepackage[ImplMulti]{dljslib}
-\usepackage{pifont}
+\usepackage{pifont}
% \previewOn \pmpvOn
@@ -52,7 +52,7 @@ Department of Mathematics}
\section{Math Fill-In Question}
-The current version of \textsf{exerquiz} included only multiple
+The current version of \textsf{exerquiz} included only multiple
choice questions. That's all well and good, but instructors would
occasionally like to ask questions that would require the student
to fill in the answer, whether it be numerical or symbolic.
diff --git a/macros/latex/contrib/acrotex/examples/jtxttst.pdf b/macros/latex/contrib/acrotex/examples/jtxttst.pdf
index 298a75f321..8638f825f2 100644
--- a/macros/latex/contrib/acrotex/examples/jtxttst.pdf
+++ b/macros/latex/contrib/acrotex/examples/jtxttst.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/examples/webeqtst.pdf b/macros/latex/contrib/acrotex/examples/webeqtst.pdf
index 59c37795c7..c9d4357f7d 100644
--- a/macros/latex/contrib/acrotex/examples/webeqtst.pdf
+++ b/macros/latex/contrib/acrotex/examples/webeqtst.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/exerquiz.dtx b/macros/latex/contrib/acrotex/exerquiz.dtx
index e1adc71345..1b65b91b18 100644
--- a/macros/latex/contrib/acrotex/exerquiz.dtx
+++ b/macros/latex/contrib/acrotex/exerquiz.dtx
@@ -22,7 +22,7 @@
%<randomize>\ProvidesFile{aebrandom.def}
%<sumrytbls>\ProvidesFile{aebsumrytbls.def}
%<template>\ProvidesFile{template.def}
-%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2021/02/17 v8.6.4 %
+%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2021/02/21 v8.6.5 %
%<package> Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
%<driver> Exerquiz documentation driver file (dps)]
%<aebjs> Exerquiz document level JavaScript (dps)]
@@ -47,6 +47,7 @@
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
+\usepackage{fancyvrb}
\gdef\darg#1{\texttt{\char123\relax#1\char125\relax}}
\let\env\texttt
\let\opt\texttt
@@ -100,7 +101,7 @@
%\changes{v8.6.3}{2021/01/31}{Updated documentation, informing users of \string\app{Acrobat DC} that
% it is necessary to change their \string\uif{Security (Enhanced)} preferences.}
%\changes{v8.2.8}{2018/12/13}{The SOL file is now written entirely when there is no solution option specified}
-% (v8.0 dated 2017/08/08) This version introduces multi-letter variables and what I'll term `alternate appearances'.
+% (2017/08/08) This version introduces multi-letter variables and what I'll term `alternate appearances'.
% \changes{v8.0}{2017/08/08}{Introduce multi-letter variables and alternate appearances. Changes
% made are marked by `\texttt{dps17}' throughout the DTX.}
% \changes{v7.7k}{2016/04/18}{Minor bug fixes, improved driver recognition}
@@ -118,10 +119,10 @@
% Introduce a number of useful options for \pkg{exerquiz}.
% \subsection{Options for paper, solutions, JavaScript and preview}
% \begin{macrocode}
-% Begin package segment
%<*package>
\usepackage{keyval}
% \end{macrocode}
+% Some early required packages.
%\changes{v6.4t}{2012/06/18}{Added ifpdf as a required package}
%\changes{v8.1a}{2017/09/03}{Added check for luatex}
% \begin{macrocode}
@@ -140,8 +141,8 @@
% \begin{macrocode}
\DeclareOption{noxcolor}{\def\eq@ColorPackage{color}}
% \end{macrocode}
-% \leavevmode\IndexOpt{forpaper}\IndexOpt{forcolorpaper}^^A
-% Pass the |monochrome| option to the color package
+% \leavevmode\IndexOpt{forpaper}^^A
+% Pass the \opt{monochrome} option to the color package
%\changes{v6.06a}{2007/04/09}
%{
% Added the \texttt{forcolorpaper} option for those using
@@ -150,11 +151,14 @@
% \begin{macrocode}
\DeclareOption{forpaper}{%
\eqforpapertrue\PassOptionsToPackage{monochrome}{\eq@ColorPackage}
- \AtBeginDocument{\ifnum\eq@drivernum=4 \else\AllowPeeking\fi}
-}
-\DeclareOption{forcolorpaper}{\eqforpapertrue % for print
- \AtBeginDocument{\ifnum\eq@drivernum=4 \else\AllowPeeking\fi}
-}
+ \AtBeginDocument{\AllowPeeking}}
+% \end{macrocode}
+% \leavevmode\IndexOpt{forcolorpaper}^^A
+% The \opt{forcolorpaper} is the same as \opt{forpaper}, but does not
+% pass the \pkg{monochrome} option to the color package.
+% \begin{macrocode}
+\DeclareOption{forcolorpaper}{\eqforpapertrue
+ \AtBeginDocument{\AllowPeeking}}
% \end{macrocode}
% \leavevmode\IndexOpt{preview}^^A
% With this option, the bounding boxes of all form fields appear in the
@@ -193,7 +197,7 @@
% \begin{macrocode}
\DeclareOption{nohiddensolutions}{\eq@globalshowsolutionstrue}
\DeclareOption{noHiddensolutions}%
- {\eq@globalshowsolutionstrue\AtBeginDocument{\def\Hidesymbol{h}}}
+ {\eq@globalshowsolutionstrue\AtBeginDocument{\def\Hidesymbol{h}}}
% \end{macrocode}
% \leavevmode\IndexOpt{solutionsafter}^^A
% Solutions will appear after the statement of the exercise.
@@ -205,7 +209,7 @@
%\changes{v6.2f}{2007/12/21}{Added a solutionsonly option}
% \begin{macrocode}
\DeclareOption{solutionsonly}{\solutionsonlytrue\answerkeytrue
- \therearesolutionstrue\AtEndOfPackage{\let\exerSolnsHeadnToc\relax}}
+ \therearesolutionstrue\AtEndOfPackage{\let\exerSolnsHeadnToc\relax}}
% \end{macrocode}
% \changes{v8.1k}{2018/02/04}{Added \string\cs{ifanswerkey} switch}
% \begin{macrocode}
@@ -218,11 +222,11 @@
% is used.
% \begin{macrocode}
\DeclareOption{contsolns}{\AtEndOfPackage{\InputIfFileExists
- {contsolns.def}{\contsolnsInputMsg}{\contsolnsErrorMsg}}}
+ {contsolns.def}{\contsolnsInputMsg}{\contsolnsErrorMsg}}}
\def\contsolnsInputMsg{\PackageInfo{exerquiz}{contsolns option,
- inputting file contsolns.def}}
+ inputting file contsolns.def}}
\def\contsolnsErrorMsg{\PackageWarning{exerquiz}{contsolns option,
- cannot find file contsolns.def}}
+ cannot find file contsolns.def}}
% \end{macrocode}
% \leavevmode\IndexOpt{nocorrections}^^A
% The code for correcting the |quiz| environment is
@@ -250,8 +254,8 @@
% \changes{v6.3x}{2011/04/05}{Added \texttt{vspacewithsolns}}
% \begin{macrocode}
\@ifundefined{ifvspacewithsolns}{%
- \DeclareOption{vspacewithsolns}{\vspacewithsolnstrue}
- \newif\ifvspacewithsolns\vspacewithsolnsfalse
+ \DeclareOption{vspacewithsolns}{\vspacewithsolnstrue}
+ \newif\ifvspacewithsolns\vspacewithsolnsfalse
}{}
% \end{macrocode}
% \changes{v8.1m}{2018/02/09}{\string\cs{ifdisplayworkarea} conditionally defined}
@@ -269,7 +273,7 @@
% on to insdljs package.
% \begin{macrocode}
\DeclareOption{nodljs}{\PassOptionsToPackage{nodljs}{insdljs}%
- \AtEndOfPackage{\let\importdljs\eq@YES}}
+ \AtEndOfPackage{\let\importdljs\eq@YES}}
% \end{macrocode}
% \leavevmode\IndexOpt{execAfter}^^A
% Execute any JS defined within the \texttt{execJS} environment. Works only for
@@ -296,26 +300,26 @@
% \begin{macrocode}
\DeclareOption{allowrandomize}{\AtEndOfPackage{\inputRandomizeChoices}}
\def\inputRandomizeChoices{\InputIfFileExists{aebrandom.def}
- {\PackageInfo{exerquiz}{inputting aebrandom.def}}
- {cannot find aebrandom.def}}
+ {\PackageInfo{exerquiz}{inputting aebrandom.def}}
+ {cannot find aebrandom.def}}
% \end{macrocode}
% \leavevmode\IndexOpt{usesumrytbls}^^A
% The declare the use of summary tables
% \begin{macrocode}
\newif \ifusesumrytbls \usesumrytblsfalse
\DeclareOption{usesumrytbls}{\usesumrytblstrue
- \def\inputSumryTblCode{\InputIfFileExists{aebsumrytbls.def}
- {\PackageInfo{exerquiz}{inputting aebsumrytbls.def}}%
- {cannot find aebsumrytbls.def}}}
+ \def\inputSumryTblCode{\InputIfFileExists{aebsumrytbls.def}
+ {\PackageInfo{exerquiz}{inputting aebsumrytbls.def}}%
+ {cannot find aebsumrytbls.def}}}
\let\inputSumryTblCode\relax
% \end{macrocode}
% The \IndexOpt{usemcfi}\texttt{usemcfi} option inputs special code for creating a MC/math fill-in question, a type
% of question suggested to me by Stefka K.\ of Bulgaria.
% \begin{macrocode}
\DeclareOption{usemcfi}{%
- \def\inputMCFICode{\InputIfFileExists{usemcfi.def}
- {\PackageInfo{exerquiz}{inputting usemcfi.def}}%
- {cannot find usemcfi.def}}}
+ \def\inputMCFICode{\InputIfFileExists{usemcfi.def}
+ {\PackageInfo{exerquiz}{inputting usemcfi.def}}%
+ {cannot find usemcfi.def}}}
\let\inputMCFICode\relax
% \end{macrocode}
% \changes{v7.7o}{2016/07/08}{Added switch \string\cs{ifwithinMCFI}}
@@ -334,12 +338,12 @@
% \begin{macrocode}
% \def\eq@drivernum{5} % 5 = no choice
\DeclareOption{dvipsone}{%
- \def\eq@drivernum{0}\def\eq@driver{dvipsone}%
- \PassOptionsToPackage{dvipsone}{eforms}
+ \def\eq@drivernum{0}\def\eq@driver{dvipsone}
+ \PassOptionsToPackage{dvipsone}{eforms}
}
\DeclareOption{dvips}{%
- \def\eq@drivernum{0}\def\eq@driver{dvips}%
- \PassOptionsToPackage{dvips}{eforms}
+ \def\eq@drivernum{0}\def\eq@driver{dvips}
+ \PassOptionsToPackage{dvips}{eforms}
}
\DeclareOption{pdftex}{%
\def\eq@drivernum{1}\def\eq@driver{pdftex}%
@@ -351,7 +355,7 @@
%\changes{v8.1a}{2017/09/03}{Added a \string\texttt{luatex} option}
% \begin{macrocode}
\DeclareOption{luatex}{%
- \def\eq@drivernum{1}\def\eq@driver{luatex}%
+ \def\eq@drivernum{1}\def\eq@driver{luatex}
\PassOptionsToPackage{luatex}{\eq@ColorPackage}
\PassOptionsToPackage{luatex}{eforms}
}
@@ -361,44 +365,46 @@
% environments.
% \begin{macrocode}
\DeclareOption{dvipdfm}{%
- \def\eq@drivernum{2}\def\eq@driver{dvipdfm}%
- \PassOptionsToPackage{dvipdfm}{\eq@ColorPackage}%
+ \def\eq@drivernum{2}\def\eq@driver{dvipdfm}
+ \PassOptionsToPackage{dvipdfm}{\eq@ColorPackage}
\PassOptionsToPackage{dvipdfm}{eforms}%
}
\DeclareOption{dvipdfmx}{%
- \def\eq@drivernum{2}\def\eq@driver{dvipdfmx}%
- \PassOptionsToPackage{dvipdfmx}{\eq@ColorPackage}%
- \PassOptionsToPackage{dvipdfmx}{eforms}%
+ \def\eq@drivernum{2}\def\eq@driver{dvipdfmx}
+ \PassOptionsToPackage{dvipdfmx}{\eq@ColorPackage}
+ \PassOptionsToPackage{dvipdfmx}{eforms}
}
\DeclareOption{xetex}{%
- \def\eq@drivernum{2}\def\eq@driver{xetex}%
+ \def\eq@drivernum{2}\def\eq@driver{xetex}
\PassOptionsToPackage{xetex}{\eq@ColorPackage}
- \PassOptionsToPackage{xetex}{eforms}%
+ \PassOptionsToPackage{xetex}{eforms}
}
% \end{macrocode}
% \leavevmode\IndexOpt{textures}^^A
% This option, and testing are due to Ross Moore 3/6/02
% \begin{macrocode}
-\DeclareOption{textures}{\def\eq@drivernum{3}%
- \def\eq@driver{textures}%
- \PassOptionsToPackage{textures}{\eq@ColorPackage}%
- \PassOptionsToPackage{textures}{eforms}%
+\DeclareOption{textures}{\def\eq@drivernum{3}
+ \def\eq@driver{textures}
+ \PassOptionsToPackage{textures}{\eq@ColorPackage}
+ \PassOptionsToPackage{textures}{eforms}
}
% \end{macrocode}
% \leavevmode\IndexOpt{dviwindo}^^A
% Set \cmd{\eq@noformstrue}, this inserts an \cmd{\endinput} just after
-% the end of the |exercise| environment. No quizzes for
+% the end of the \env{exercise} environment. No quizzes for
% \texttt{dviwindo}.
% \begin{macrocode}
-\DeclareOption{dviwindo}{\def\eq@drivernum{4}\def\eq@driver{dviwindo}%
- \eq@noformstrue\PassOptionsToPackage{nodljs}{insdljs}}
+\DeclareOption{dviwindo}{\def\eq@drivernum{4}\def\eq@driver{dviwindo}
+ \eq@noformstrue\PassOptionsToPackage{nodljs}{insdljs}}
% \end{macrocode}
-% If no driver is passed to \textsf{exerquiz}, assume it is
-% dvipsone or dvips---\textsf{hyperref} defines the specials.
+% If no driver is passed to \pkg{exerquiz}, assume it is
+% dvipsone or dvips---\pkg{hyperref} defines the specials.
% Default driver dvipsone/dvips
-% \def\eq@drivernum{5}
-% \def\eq@driver{dvipsone/dvips}
-% \def\eq@driver{no driver specified}
+% \begin{macrocode}
+\def\eq@drivernum{5}
+\def\eq@driver{dvipsone/dvips}
+\def\eq@driver@nodriver{no driver specified}
+% \end{macrocode}
% \leavevmode\IndexOpt{unicode}^^A
% Passes the unicode option to \textsf{hyperref}.
% \changes{v6.3}{2008/03/19}
@@ -1324,7 +1330,8 @@
\ifOKToWriteExamData
\set@display@protect
\immediate\write\ex@solns{#1}\set@typeset@protect
- \fi\fi}%
+ \fi\fi
+}
\ifsolutionsonly
\InputIfFileExists{\jobname_xdefs.cut}{%
\typeout{^^JExerquiz|Eqexam: Reading \jobname_xdefs.cut^^J}}
@@ -1363,13 +1370,14 @@
% to close off the conditional. Where, \ameta{wrt-cmd} is either \cs{writeToSolnFile} (or \cs{writeToExSolns}), or
% \cs{writeToQzSolns}.
% For example,
-%\begin{verbatim}
-% \bHideSolns\writeToSolnFile % for eqexam
-% \begin{exam}{test}
-% ...
-% \end{exam}
-% \eHideSolns\writeToSolnFile
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\bHideSolns\writeToSolnFile % for eqexam
+%\begin{exam}{test}
+%...
+%\end{exam}
+%\eHideSolns\writeToSolnFile
+%\end{Verbatim}
%Now this exam has no footprint within the solution file.
% \begin{macrocode}
\@ifundefined{ifOKToWriteExamData}{\newif\ifOKToWriteExamData
@@ -1445,11 +1453,12 @@
% (2017/01/11) Added \DescribeMacro{\numberParts}\cs{numberParts} to change how this counter is displayed
% as a number. The default is \DescribeMacro{\alphaParts}\cs{alphaParts} to display the \texttt{partno}
% counter as a letter.
-%\begin{verbatim}
-% \renewcommand{\partnoFmt}{\arabic}
-% \setPartsWidth{(00)}
-% \partsformat{\makebox[\widthOfParts][c]{(\hfil\thepartno\hfil)}}
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\renewcommand{\partnoFmt}{\arabic}
+%\setPartsWidth{(00)}
+%\partsformat{\makebox[\widthOfParts][c]{(\hfil\thepartno\hfil)}}
+%\end{Verbatim}
% With this code, the items in the \texttt{parts} environment are numbered.
% \changes{v7.8d}{2017/01/11}{Added \string\cs{partnoFmt} to change how this counter is displayed}
% \begin{macrocode}
@@ -1591,22 +1600,25 @@
% links connect the statement of the exercise with its solution.
%
%\smallskip\noindent\textbf{Basic usage}
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\begin{exercise}
%The exercise question is posed.
%\begin{solution}
%The solution to exercise goes here.
%\end{solution}
%\end{exercise}
-%\end{verbatim}
+%\end{Verbatim}
% These environments should be nested as illustrated above.
%
% The \texttt{exercise} environment has three optional arguments. The syntax
% for an exercise without parts is\dots
-%\begin{verbatim}
-% \begin{exercise}[<ctr>][h|H] ...\end{exercise}
-%\end{verbatim}%
-%
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\begin{exercise}[!ameta(ctr)][h|H]
+%...
+%\end{exercise}
+%\end{Verbatim}
% (1) The value of this first optional argument, \texttt{<ctr>}, is a counter.
% You can use the \texttt{exercise}
% environment then to create other environments with their own
@@ -1622,11 +1634,11 @@
%
% The \texttt{exercise} environment has three optional arguments. The syntax
% for an exercise with parts is\dots
-%\begin{verbatim}
-% \begin{exercise}[<ctr>]* ...\end{exercise}
-% \begin{exercise*}[<ctr>] ...\end{exercise*}
-%\end{verbatim}%
-%
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\begin{exercise}[!ameta(ctr)]* ...\end{exercise}
+%\begin{exercise*}[!ameta(ctr)] ...\end{exercise*}
+%\end{Verbatim}
% (1) The value of this first optional argument, \texttt{<ctr>}, is a counter.
% You can use the \texttt{exercise}
% environment then to create other environments with their own
@@ -1651,13 +1663,14 @@
% in an external document. The \cs{exerSolnsInExtFile} command lets you specify an external file name.
% Just use the \textit{basename}, hyperref will add the extension. If an external file is specified, all
% solution links are changed to links between documents. Usage:
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\exerSolnsInExtFile{myExSonls}
-%\end{verbatim}
+%\end{Verbatim}
% \begin{macrocode}
\newcommand{\exerSolnsInExtFile}[2][]
- {\let\exerSolns@ExtFile\eq@YES\gdef\eq@exerSolns@fileName{#2}%
- \gdef\exerSolns@ReturnPath{#1}}
+ {\let\exerSolns@ExtFile\eq@YES\gdef\eq@exerSolns@fileName{#2}%
+ \gdef\exerSolns@ReturnPath{#1}}
\let\exerSolns@ExtFile\eq@NO
\def\exerSolns@ReturnPath{}
%</package>
@@ -1753,16 +1766,17 @@
% The \env{cq} environment is \cs{let} to the \env{cq@CQ} environment at the beginning of
% the \env{exercise} environment, \env{cq@CQ} begin the internal name of the environment.
% \par\medskip\noindent\textbf{Example}
-%\begin{verbatim}
-% \begin{exercise}
-% \begin{cq}
-% This is the question
-% \end{cq}
-% \begin{solution}
-% This is its solution
-% \end{solution}
-% \end{exercise}
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\begin{exercise}
+%\begin{cq}
+%!quad(This is the question)
+%\end{cq}
+%\begin{solution}
+%!quad(This is the question)
+%\end{solution}
+%\end{exercise}
+%\end{Verbatim}
% \begin{macrocode}
\let\cq@star\eq@NO
% \end{macrocode}
@@ -1877,7 +1891,8 @@
% formatting after the copied question; in the default definition, we skip a \cs{medskip} and do a \cs{indent}.
% Trailing the string \cs{cqSStr}, the internal command defined by \cs{declCQSolnStr}, is a space and
% an \cs{ignorespaces}. Use \cs{writeToExSolns} to make local changes, for example,
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%...
%\end{exercise}
% Changed the string from Solution to Answer, do this prior to the
@@ -1886,7 +1901,7 @@
%
%\begin{exercise*}
%...
-%\end{verbatim}
+%\end{Verbatim}
%Best placed between exercises.
% \begin{macrocode}
\newcommand\declCQPre[1]{\def\cq@Pre{#1}}
@@ -2040,12 +2055,7 @@
% package should be loaded after \textsf{eqexam} if the two are to be used
% together, preferably by the \texttt{links} or \texttt{online} options of \textsf{eqexam}.
% \begin{macrocode}
-%\newif\iffirstitem
\let\solnItemMngt\relax
-%\def\eqeSolnItemMngt{\iffirstitem\global\firstitemfalse
-% \let\eqe@next\@empty\else\let\eqe@next\item\fi\eqe@next\relax}
-%\@ifpackageloaded{eqexam}{\let\solnItemMngt\eqeSolnItemMngt}
-% {\let\solnItemMngt\relax}
% \end{macrocode}
% \end{macro}
% \DescribeMacro{\eqEXt}These two mark the beginning and end of solution to an exercise. \cs{eqEXt} is
@@ -2055,7 +2065,6 @@
%\changes{v6.7}{2013/04/07}{Changing \cs{eqEXt} so that it has two
%required arguments}
% \begin{macrocode}
-%\let\eqEXt\@gobble
\let\eqEXt\@gobbletwo
\let\endeqEXt\relax
% \end{macrocode}
@@ -2067,14 +2076,15 @@
\let\eqFilterArg\@empty
% \end{macrocode}
% The format of the solutions to exercises as they appear in the SOL file is,
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\eqEXt{\eqExtArg}{\eqFilterArg}\exerSolnHeader
-% {\exsecrunhead}{ex.1}{\textbf{Exercise\ 1.}}\relax
-% ...
-% <solution content>
-% ...
+%!quad{\exsecrunhead}{ex.1}{\textbf{Exercise\ 1.}}\relax
+%!quad...
+%!quad!ameta(solution content)
+%!quad...
%\ReturnTo{qex.1}{\hbox {$\square $}}\endeqEXt\par\medskip
-%\end{verbatim}
+%\end{Verbatim}
% \changes{v6.7a}{2013/05/03}{Change name of \cs{eq@writeexheader} to \cs{eqExerSolnHeader}}
% \begin{macrocode}
\let\eqExerSolnHeader\@empty
@@ -2094,9 +2104,9 @@
\def\eq@pslnaindnt{0pt}
\let\eq@setPrbSolnAftrIndnt\relax
\newcommand{\setPrbSolnAftrIndent}[1]{\ifdim#1=0pt
- \def\eq@pslnaindnt{0pt}\let\eq@setPrbSolnAftrIndnt\relax\else
- \edef\eq@pslnaindnt{#1}\edef\eq@setPrbSolnAftrIndnt{\expandafter
- \noexpand\expandafter\parindent#1\noexpand\relax}\fi}
+ \def\eq@pslnaindnt{0pt}\let\eq@setPrbSolnAftrIndnt\relax\else
+ \edef\eq@pslnaindnt{#1}\edef\eq@setPrbSolnAftrIndnt{\expandafter
+ \noexpand\expandafter\parindent#1\noexpand\relax}\fi}
% \end{macrocode}
%\changes{v7.2}{2015/03/22}{added \cs{restorejustify}}
%The command \DescribeMacro\restorejustify\cmd{\restorejustify} is designed
@@ -4996,7 +5006,7 @@ else {
% \begin{macrocode}
DisplayQuizResults("*curr@quiz",*theeqpointvalue,%
*thequestionno,bDisplaySilent);
- bDisplaySilent=false;
+ bDisplaySilent=false;
var h=this.getField("ScoreData.*curr@quiz");
h.value=Score+";"+NQuestions+";"%
+ptScore+";"+NPointTotal;%
@@ -6237,6 +6247,9 @@ if( qzSolnDest!="") updateTally("*oField.*thequestionno");%
%</package>
%<*package|eqexam>
\let\rbf@Opts\@empty
+% \end{macrocode}
+% The \cs{Ans} for a short-quiz, using forms.
+% \begin{macrocode}
\def\Ans@sq@f{\if\eq@listType\eq@One
\stepcounter{quizno}\else
\@ifundefined{ifwithinsoldoc}{\refstepcounter{quizno}}
@@ -6803,9 +6816,12 @@ updateTally("*oField.*thequestionno");*fi%
{\textcolor{\graylettersColor}{\Alph{quizno}}}}\else\relax\fi}
%</package|eqexam>
%<*package>
+% \end{macrocode}
+% The \cs{Ans} command for a quiz using forms.
+% \begin{macrocode}
\def\Ans@@f{%
\settowidth{\eq@tmplength}{\eq@lw@f}%
- \hangindent=\eq@tmplength\hangafter=1
+ \hangindent=\eq@tmplength\hangafter=\@ne
\bottomOfAnsfStack\insertGrayLetters
\edef\rbf@Opts{\ifaeb@usecircles\else
\noexpand\symbolchoice{\qz@chksymb}\fi
@@ -8528,7 +8544,7 @@ if(event.willCommit) {
\else\eqObjAlertIfFalse\fi\fi\fi}
\def\eqAppAlert{eqAppAlert}
% \end{macrocode}
-% Keystroke action for \cs{RespBoxTxt}
+% Keystroke action for \cs{RespBoxTxt} for a quiz
% \changes{v8.6.4}{2021/02/15}{Corrected coding of \string\cs{AAKqRespBoxTxt}, wrong
% escape char}
% \begin{macrocode}
@@ -8557,6 +8573,11 @@ if (!isQuizInitialized("*currQuiz")) {
\noexpand\Ff{\FfReadOnly}\fi\fi\fi
}%
}
+% \end{macrocode}
+% The keystroke action for \cs{RespBoxTxt} for a short-quiz
+% \changes{v8.6.5}{2021/02/21}{Removed comment character from last line
+% of \string\cs{rbtAAKey}}
+% \begin{macrocode}
\begin{defineJS}[\makeesc\!\makecmt\%]{\rbtAAKey}
if(event.willCommit) {
var retn = ProcRespTxt(!rbTxtAlt);%
@@ -8564,7 +8585,7 @@ if(event.willCommit) {
!RespBoxTxtOnBlur!fi
}%
!ifx!eqAddAAKeystroke!@empty!else%
-!eqAddAAKeystroke!fi%
+!eqAddAAKeystroke!fi
\end{defineJS}
\def\@@RespBoxTxtActions{%
\AA{\if\eqQuizType\isQZ
diff --git a/macros/latex/contrib/acrotex/web.dtx b/macros/latex/contrib/acrotex/web.dtx
index c143be3f4e..d423a0681a 100644
--- a/macros/latex/contrib/acrotex/web.dtx
+++ b/macros/latex/contrib/acrotex/web.dtx
@@ -21,11 +21,14 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
%<package>\ProvidesPackage{web}
-%<package> [2021/02/06 v6.1.5 web: A Screen Design Package (dps)]
+%<package> [2021/02/28 v6.1.6 web: A Screen Design Package (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
\usepackage{fancyvrb}
+\makeatletter
+\let\@latex@warning@no@line\@gobble
+\makeatother
\gdef\darg#1{\texttt{\char123\relax#1\char125\relax}}
\def\CMD#1{\textbackslash#1}
\let\pkg\textsf
@@ -1026,7 +1029,7 @@
\expandafter\w@isHyLoaded\fi
\ifx\u@web@ddtoHySetup\@empty\else\edef\x{\noexpand\hypersetup
{\u@web@ddtoHySetup}}\expandafter\x\fi
-% \end{macrocode}
+% \end{macrocode}
% We declare that `The AcroTeX eDucation Bundle' is the pdf creator.
% \begin{macrocode}
\def\@pdfcreator{The AcroTeX eDucation Bundle}
@@ -1042,86 +1045,16 @@
\AtBeginDocument{\web@commentChkMsg}
% \end{macrocode}
% If the user specifies the use of templates, we assume they are going
-% to do some graphical work, so we include \textsf{graphicx}.
-% \begin{macrocode}
-\ifnum\@usetemplates=\@ne\relax
- \def\x{\RequirePackage{graphicx}}\expandafter\x\fi
-% \end{macrocode}
-% If the user specifies an option requiring templates, then we better
-% load \textsf{eso-pic}, which itself requires \textsf{everyshi} or \textsf{atbegshi}.
-% \begin{macrocode}
-\ifnum\@usetemplates=\@ne
- \RequirePackage{eso-pic}
-% \end{macrocode}
-% Here is a fix for \textsf{dvipdfm}. If using templates, then we need to
-% redefine the way we set the page size using \textsf{eso-pic}. We also need
-% to redefine the \textsf{eso-pic} macro \cs{@ShipoutPicture} so the order of
-% execution of \cs{ESO@HookI} \cs{ESO@HookII} are reversed. The paper
-% size special will be in the \cs{ESO@HookII} macro, it needs to
-% execute (once) before \cs{ESO@HookI} is executed.
-% \begin{macrocode}
- \ifnum\eq@drivernum=\tw@
- \def\web@set@paper{\AddToShipoutPicture*{%
- \special{papersize=\the\paperwidth,\the\paperheight}}}%
-% \end{macrocode}
-% We use some code from \textsf{hyperref} to set the page size.
-% \begin{macrocode}
- \AtBeginShipoutFirst{%
- \begingroup
- \@ifundefined{stockwidth}{%
- \ifx\special@paper\@empty
- \special{papersize=\the\paperwidth,\the\paperheight}\else
- \special{papersize=\special@paper}\fi
- }{%
- \ifdim\stockwidth=\z@\else
- \special{papersize=\the\stockwidth,\the\stockheight}\fi
- }%
- \endgroup
- }%
-% \end{macrocode}
-% \changes{v4.2d}{2009/11/22}{Modifications to use
-% new \string\textsf{eso-pic}}
-% \begin{macrocode}
- \@ifundefined{@ShipoutPicture}{}{%
-% \end{macrocode}
-% The new version of \textsf{eso-pic} does not define \cs{@ShipoutPicture}.
-% If \cs{@Ship\-out\-Pic\-ture} defined, so we use some of the old code.
-% \begin{macrocode}
- \renewcommand{\@ShipoutPicture}{%
- \bgroup
- \@tempswafalse%
- \ifx\ESO@HookI\@empty\else\@tempswatrue\fi%
- \ifx\ESO@HookII\@empty\else\@tempswatrue\fi%
- \if@tempswa%
- \@tempdima=1in\@tempdimb=-\@tempdima%
- \advance\@tempdimb\paperheight
- \@ifundefined{stockwidth}{}{%
- \advance\@tempdima+\trimedge%
- \advance\@tempdima+\paperwidth%
- \advance\@tempdima-\stockwidth%
- \if@twoside\ifodd\c@page\else%
- \advance\@tempdima-2\trimedge%
- \advance\@tempdima-\paperwidth%
- \advance\@tempdima+\stockwidth%
- \fi\fi\advance\@tempdimb+\trimtop
- }%
- \unitlength=1pt%
- \global\setbox\@cclv\vbox{%
- \vbox{\let\protect\relax
- \pictur@(0,0)%
- (\strip@pt\@tempdima,\strip@pt\@tempdimb)%
- \ESO@HookII\ESO@HookI\global\let\ESO@HookII\@empty%
- \endpicture}%
- \box\@cclv%
- }%
- \fi
- \egroup
- }% shipout
- }% ifundefined shipout
- \fi
-\fi
+% to do some graphical work, so we include \pkg{graphicx} and \pkg{eso-pic}
+% packages.
+% \changes{v6.1.6}{2021/02/28}{Removed legacy code concerning \pkg{everyshi}}
+% \begin{macrocode}
+\ifnum\@usetemplates=\@ne\def\x{%
+ \RequirePackage{graphicx}
+ \RequirePackage{eso-pic}}\expandafter\x\fi
% \end{macrocode}
-% A useful command for separating two arguments. Use in \texttt{webpro} section, and by \texttt{aeb\_pro} as well.
+% A useful command for separating two arguments.
+% Used in \texttt{webpro} section, and by \texttt{aeb\_pro} as well.
% \begin{macrocode}
\def\getargs#1#2{\def\aeb@argi{#1}\def\aeb@argii{#2}}
\let\getargsii\getargs
@@ -1255,7 +1188,7 @@
% \texttt{Oversized Pages\_20x20.joboptions}. However, the page size the distiller uses can be set
% through the {\LaTeX} source file. For this purpose, we introduce the command
% \DescribeMacro\setPageDevice\cmd\setPageDevice. The optional first argument is the resolution
-% in dots per inch. The standard joboptions file has 600 as this value; the high quality and
+% in dots per inch. The standard job-options file has 600 as this value; the high quality and
% press quality have this parameter at 2400. The second and third parameters are the
% width and height, respectively, of the \textbf{/PageSize}. For greatest accuracy, the values of
% width and height should be entered in printers points (without dimensions). For example,
@@ -1272,7 +1205,7 @@
% The command \cs{@convLtoP} is taken from the \textsf{graphics} package and is based on
% \cs{Gin@defaultbp}.
%
-% The commands seems only effect with the \textsf{dvipsone} driver.
+% The command is only needed with the \textsf{dvipsone} driver.
% \begin{macrocode}
\def\@convLtoP#1#2{\afterassignment
\@convLtoP@i\dimen@#2bp\relax{#1}{#2}}
diff --git a/macros/latex/contrib/apa7/README.txt b/macros/latex/contrib/apa7/README.txt
index f144b7a199..a80ffcb2ce 100644
--- a/macros/latex/contrib/apa7/README.txt
+++ b/macros/latex/contrib/apa7/README.txt
@@ -3,7 +3,7 @@
apa7 - A LaTeX class for formatting documents in compliance with the
American Psychological Association's Publication Manual, 7th edition
-Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
diff --git a/macros/latex/contrib/apa7/apa7.dtx b/macros/latex/contrib/apa7/apa7.dtx
index 036099821c..c00e289be2 100644
--- a/macros/latex/contrib/apa7/apa7.dtx
+++ b/macros/latex/contrib/apa7/apa7.dtx
@@ -4,11 +4,11 @@
% %
% CHANGE THESE VALUES WITH EACH NEW RELEASE: %
% %
-%<class>\ProvidesClass{apa7}[2020/12/05 v2.07 APA formatting (7th edition)]
+%<class>\ProvidesClass{apa7}[2021/03/01 v2.08 APA formatting (7th edition)]
% %
%<*internal> %
-\def\apaSevenVersionDate{2020/12/05}
-\def\apaSevenVersionNumber{2.07}
+\def\apaSevenVersionDate{2021/03/01}
+\def\apaSevenVersionNumber{2.08}
% %
% %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -20,7 +20,7 @@
apa7 - A LaTeX class for formatting documents in compliance with the
American Psychological Association's Publication Manual, 7th edition
-Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
@@ -61,7 +61,7 @@ manuscript type has been added. See the documentation for details.
apa7 - A LaTeX class for formatting documents in compliance with the
American Psychological Association's Publication Manual, 7th edition
-Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
@@ -81,7 +81,7 @@ by, the American Psychological Association.
\endpreamble
\postamble
-Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
@@ -263,6 +263,8 @@ and the derived files apa7.ins,
%
% \changes{v2.07}{2020/12/05}{Extended mask command to also mask in stu mode. }
%
+% \changes{v2.08}{2021/03/01}{Updated BibLaTex to allow overriding bibliography title. }
+%
% \begin{abstract}
% The \textit{Publication Manual} of the American Psychological
% Association is widely used in the social sciences. The most
@@ -1222,9 +1224,9 @@ and the derived files apa7.ins,
\AtEndPreamble{%
\@ifpackageloaded{biblatex}{% the user has loaded biblatex
\@ifundefined{def@man}{%
- \defbibheading{bibliography}{\section*{\normalfont\textbf\refname}}%
+ \defbibheading{bibliography}[\refname]{\section*{\normalfont\textbf{#1}}}%
}{%
- \defbibheading{bibliography}{\clearpage\section*{\normalfont\textbf\refname}}%
+ \defbibheading{bibliography}[\refname]{\clearpage\section*{\normalfont\textbf{#1}}}%
}
}{}
}
@@ -1233,9 +1235,9 @@ and the derived files apa7.ins,
\def\def@biblatex{\@biblatexmode}% the selected bibliography package is Biblatex
\RequirePackage[style=apa,sortcites=true,sorting=nyt,backend=biber]{biblatex}
\@ifundefined{def@man}{%
- \defbibheading{bibliography}{\section*{\normalfont\textbf\refname}}%
+ \defbibheading{bibliography}[\refname]{\section*{\normalfont\textbf{#1}}}%
}{%
- \defbibheading{bibliography}{\clearpage\section*{\normalfont\textbf\refname}}%
+ \defbibheading{bibliography}[\refname]{\clearpage\section*{\normalfont\textbf{#1}}}%
}
\ClassInfo{apa7}{The selected bibliography package, biblatex, has been loaded}
}
@@ -2604,7 +2606,7 @@ and the derived files apa7.ins,
{}
{%
\vfill%
- \section{\normalfont\normalsize\textbf\acksname}
+ \section*{\normalfont\normalsize\textbf\acksname}
\raggedright
\setlength{\parindent}{0.5in}
\indent\@acks\par%
@@ -2635,7 +2637,7 @@ and the derived files apa7.ins,
{%
\@ifundefined{apaSeven@maskauthoridentity}{% BDB
\vfill%
- \section{\normalfont\normalsize\textbf\acksname}
+ \section*{\normalfont\normalsize\textbf\acksname}
\raggedright
\setlength{\parindent}{0.5in}
\indent\@acks\par%
@@ -2648,7 +2650,7 @@ and the derived files apa7.ins,
%BDB\hyphenpenalty 10000
\fussy
\@ifundefined{@abstract}{}{%
- \section{\normalfont\normalsize\textbf\abstractname}% BDB
+ \section*{\normalfont\normalsize\textbf\abstractname}% BDB
\noindent\@abstract\par% BDB
\@ifundefined{@keywords}{}{%
\setlength{\parindent}{0.5in}% BDB
@@ -2658,7 +2660,7 @@ and the derived files apa7.ins,
}
\@ifundefined{def@donotrepeattitle}{
- \section{\protect\normalfont\textbf{\@title}}
+ \section*{\protect\normalfont\textbf{\@title}}
}{}%
\raggedright%
\setlength{\parindent}{0.5in}%
diff --git a/macros/latex/contrib/apa7/apa7.ins b/macros/latex/contrib/apa7/apa7.ins
index 3b4b786df8..3b2c1f2ca0 100644
--- a/macros/latex/contrib/apa7/apa7.ins
+++ b/macros/latex/contrib/apa7/apa7.ins
@@ -10,7 +10,7 @@
%% apa7 - A LaTeX class for formatting documents in compliance with the
%% American Psychological Association's Publication Manual, 7th edition
%%
-%% Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+%% Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License (LPPL), either
@@ -36,7 +36,7 @@
apa7 - A LaTeX class for formatting documents in compliance with the
American Psychological Association's Publication Manual, 7th edition
-Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
@@ -56,7 +56,7 @@ by, the American Psychological Association.
\endpreamble
\postamble
-Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
@@ -122,7 +122,7 @@ and the derived files apa7.ins,
}
\endbatchfile
%%
-%% Copyright (C) 2020 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
+%% Copyright (C) 2021 by Daniel A. Weiss <daniel.weiss.led at gmail.com>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License (LPPL), either
diff --git a/macros/latex/contrib/apa7/apa7.pdf b/macros/latex/contrib/apa7/apa7.pdf
index da38725b27..a8733f4fe8 100644
--- a/macros/latex/contrib/apa7/apa7.pdf
+++ b/macros/latex/contrib/apa7/apa7.pdf
Binary files differ
diff --git a/macros/latex/contrib/apa7/samples/longsample.pdf b/macros/latex/contrib/apa7/samples/longsample.pdf
index ac4d3d972f..b0963ba0b8 100644
--- a/macros/latex/contrib/apa7/samples/longsample.pdf
+++ b/macros/latex/contrib/apa7/samples/longsample.pdf
Binary files differ
diff --git a/macros/latex/contrib/apa7/samples/shortsample.pdf b/macros/latex/contrib/apa7/samples/shortsample.pdf
index 40cbc5cbca..cc2a4e39ad 100644
--- a/macros/latex/contrib/apa7/samples/shortsample.pdf
+++ b/macros/latex/contrib/apa7/samples/shortsample.pdf
Binary files differ
diff --git a/macros/latex/contrib/eqexam/README.md b/macros/latex/contrib/eqexam/README.md
index 5e0bc68ab3..6e08bfcd36 100644
--- a/macros/latex/contrib/eqexam/README.md
+++ b/macros/latex/contrib/eqexam/README.md
@@ -1,5 +1,5 @@
The eqexam Package
-Dated: 2021-01-20
+Dated: 2021-02-26
Author: D. P. Story
eqExam is a LaTeX package for writing exams, tests, quizzes,
@@ -40,37 +40,40 @@ this package are as follows:
folder. See also the series of blogs at
http://www.acrotex.net/blog/?tag=fortextbook
+What's New (2021-02-26) Added support for matching-type questions. Demo file at
+ http://www.acrotex.net/blog/?p=1457
+
What's New (2021-01-20) Defined \trackProblemsOn and \numPtsOfProblem;
-added \doNoRandomizeChoices and \allowRandomizedChoices. See documentation.
+ added \doNoRandomizeChoices and \allowRandomizedChoices. See documentation.
What's New (2020-03-14) Defined several commands and one environment to
-support the insertion of a figure into a problem. Demo file that illustrates
-these new commands and environment is found at
-http://www.acrotex.net/blog/?p=1419
+ support the insertion of a figure into a problem. Demo file that illustrates
+ these new commands and environment is found at
+ http://www.acrotex.net/blog/?p=1419
What's New (2020-01-06) Fixed a bug in eqexam, so that now comment.sty is
-fully supported. For consistency, aeb-comment.sty is nothing more than
-version 3.8 dating to July 2016.
+ fully supported. For consistency, aeb-comment.sty is nothing more than
+ version 3.8 dating to July 2016.
What's New (2019-12-17) fortextbook: added \autoInsSolns, as explained in
-fortextbook.pdf; fixed a bug in the use of aeb-comment with the fortextbook
-option. Updated that custom package, now dated 2019/12/18. (aeb-comment is
-distributed with acrotex.)
+ fortextbook.pdf; fixed a bug in the use of aeb-comment with the fortextbook
+ option. Updated that custom package, now dated 2019/12/18. (aeb-comment is
+ distributed with acrotex.)
What's New (2019-10-29) Fixed a bug with the online option. The \fillineol*
-command now allows verbatim text in the third argument (as well as the
-first).
+ command now allows verbatim text in the third argument (as well as the
+ first).
What's New (2019-01-31) Package uses aeb-comment, an older version of the
-comment package. The newer version has some incompatibilities with eqexam.
+ comment package. The newer version has some incompatibilities with eqexam.
What's New (2018-12-13) Changes to support the mi-solns package
What's New (2018-04-15) Minor bug fixes
What's New (2018-02-19): Extended the vertical space fill types
-and added \fillineol. Refer to the table of contents under Sections 10.11
-and 10.12.
+ and added \fillineol. Refer to the table of contents under Sections 10.11
+ and 10.12.
Sample files, previous distributed with eqexam are now available from
diff --git a/macros/latex/contrib/eqexam/aebrandom.def b/macros/latex/contrib/eqexam/aebrandom.def
index defbed5737..7426b2384b 100644
--- a/macros/latex/contrib/eqexam/aebrandom.def
+++ b/macros/latex/contrib/eqexam/aebrandom.def
@@ -8,7 +8,7 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Exerquiz.sty package, %%
-%% Copyright (C) 1999-2020 D. P. Story %%
+%% Copyright (C) 1999-2021 D. P. Story %%
%% dpstory@uakron.edu %%
%% %%
%% This program can redistributed and/or modified under %%
@@ -18,7 +18,7 @@
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesFile{aebrandom.def}
- [2021/01/20 v8.6.2 %
+ [2021/02/21 v8.6.5 %
Exerquiz support for randomization (dps)]
\@ifundefined{nextrandom}{\input{random.tex}}{}
\def\nextrandom{\begingroup
diff --git a/macros/latex/contrib/eqexam/doc/eqexam.pdf b/macros/latex/contrib/eqexam/doc/eqexam.pdf
deleted file mode 100644
index 59d7861b27..0000000000
--- a/macros/latex/contrib/eqexam/doc/eqexam.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/eqexam/doc/eqexamman.pdf b/macros/latex/contrib/eqexam/doc/eqexamman.pdf
index 1fe69fa3bf..4d72ae1f62 100644
--- a/macros/latex/contrib/eqexam/doc/eqexamman.pdf
+++ b/macros/latex/contrib/eqexam/doc/eqexamman.pdf
Binary files differ
diff --git a/macros/latex/contrib/eqexam/doc/eqexamman.tex b/macros/latex/contrib/eqexam/doc/eqexamman.tex
index d580d1a4db..8bab33940f 100644
--- a/macros/latex/contrib/eqexam/doc/eqexamman.tex
+++ b/macros/latex/contrib/eqexam/doc/eqexamman.tex
@@ -4,7 +4,8 @@
\usepackage{graphicx}
\usepackage[
web={designv,
- latextoc,forcolorpaper,
+ latextoc,
+ forcolorpaper,
centertitlepage},
eforms
]{aeb_pro}
@@ -26,6 +27,20 @@
\usepackage{srcltx}
+\renewcommand\theparagraph{\texorpdfstring{\protect\P\protect\ }{\textparagraph}}
+\renewcommand\thesubparagraph{\texorpdfstring{\protect\P\protect\P\protect\ }{\textparagraph\textpara11graph}}
+\setcounter{secnumdepth}{5}
+\setcounter{tocdepth}{5}
+
+%\makeatletter
+%\renewcommand{\paragraph}
+% {\renewcommand{\@seccntformat}[1]{\theparagraph\unskip\,}%
+% \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
+%\renewcommand{\subparagraph}
+% {\renewcommand{\@seccntformat}[1]{\thesubparagraph\unskip\,}%
+% \@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}{\bfseries}}
+%\makeatother
+
\hfuzz=1pt
@@ -57,6 +72,7 @@
%\renewcommand*\l@section{\addvspace{2pt}\@dottedtocline{1}{1.5em}{2.5em}}
\renewcommand*\l@subsection{\addvspace{1pt}\@dottedtocline{2}{1.5em}{3em}}
\renewcommand*\l@subsubsection{\addvspace{1pt}\@dottedtocline{3}{4.5em}{1.2em}}
+\renewcommand*\l@paragraph{\addvspace{1pt}\@dottedtocline{4}{5.7em}{1.2em}}
%\renewcommand*\l@subsubsection{\addvspace{1pt}\@dottedtocline{3}{7.4em}{1.2em}}
@@ -65,12 +81,19 @@
%\renewcommand*\l@subsubsection{\@dottedtocline{3}{8.2em}{1.2em}}
%\renewcommand*\l@subsubsection{\@dottedtocline{3}{7em}{1.2em}}
+%\renewcommand{\paragraph}
+% {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
+% {\normalfont\normalsize\bfseries}}
+%\renewcommand{\subparagraph}
+% {\@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}%
+% {\normalfont\normalsize\bfseries}}
+
\renewcommand{\paragraph}
- {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
- {\normalfont\normalsize\bfseries}}
+ {\renewcommand{\@seccntformat}[1]{\theparagraph\unskip\,}%
+ \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
\renewcommand{\subparagraph}
- {\@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}%
- {\normalfont\normalsize\bfseries}}
+ {\renewcommand{\@seccntformat}[1]{\thesubparagraph\unskip\,}%
+ \@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}{\bfseries}}
\newcommand{\exAeBBlogPDF}[2][\urlAcroTeXBlog/]{\par\ifdim\lastskip>0pt\relax\vskip-\lastskip\fi
\vskip\medskipamount\noindent\makebox[0pt][r]{%
@@ -152,7 +175,7 @@ part of the\texorpdfstring{\\}{ }\texorpdfstring{\AcroTeX}{AcroTeX} eDucation Bu
\keywords{LaTeX, hyperref, PDF, exercises, quizzes}
\university{{\AcroT} Software Development Team}
\email{dpstory@acrotex.net}
-\version{5.1.13, 2021/01/20}
+\version{5.2, dated 2021/02/26}
\copyrightyears{2005-\the\year}
\renewcommand{\exsectitletext}{Solutions to exams in this manual}
@@ -972,7 +995,7 @@ from appearing at the end of the document (but it appears with
\texttt{solutionsafter}), and \texttt{H} removes the solution in
all cases.
-\paragraph{\texorpdfstring{\cs{leadinitem}}{\CMD{leadinitem}}}
+\paragraph{\texorpdfstring{\protect\cs{leadinitem}}{\CMD{leadinitem}}}
When using the \texttt{problem*} environment, there is an introductory sentence
that sets up the multi-part problem set. For various reasons, some authors
have asked to be able to pose multi-part questions without the
@@ -1017,7 +1040,7 @@ from appearing at the end of the document (but it appears with
\texttt{solutionsafter} or with \texttt{answerkey}), and \texttt{H} removes the solution in
all cases.
-\paragraph{\texorpdfstring{\cs{tableadin}}{\CMD{tableadin}}} There is a
+\paragraph{\texorpdfstring{\protect\cs{tableadin}}{\CMD{tableadin}}} There is a
tabular version of the \cs{leadinitem} command just discussed. Consider the following code:
\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\fontsize{9}{11}\selectfont]
\autotabOn
@@ -1047,6 +1070,46 @@ The results of this code is viewed as follows, when typeset.
\end{minipage}
\bigskip
+\paragraph{Matching-type questions.} As an application to the \env{problem*}
+environment, it is possible to create a matching-type question. As sample
+layout is shown below.
+
+\def\1{\rlap{\hskip95pt\smash{\parbox[t]{300pt}{\kern0pt\includegraphics[width=\linewidth]{eqe_matching}\kern0pt}}}}
+
+\begin{Verbatim}[commandchars=!()]
+\begin{problem*}[\auto]
+Match each of the names on the left, with the corresponding
+names on the right.
+
+\begin{multicols}{2}
+\begin{parts}
+\item\PTs*{2}\fillin{.5in}{\ref{george}} Washington
+\item\PTs*{2}\fillin{.5in}{\ref{john}} Adams
+\item\PTs*{2}\fillin{.5in}{\ref{thomas}} Jefferson
+
+\columnbreak
+
+%!textsf( Enclose choices in the command pair \bMatchChoices/\eMatchChoices)
+!textbf(\bMatchChoices)
+\item\label{john} John
+\item\label{thomas} Thomas
+\item\label{george} George
+!1\item Alexander
+\item Abraham
+!textbf(\eMatchChoices)
+\end{parts}
+\end{multicols}
+\end{problem*}
+\end{exam}
+\end{Verbatim}
+The result is this markup, as depicted above right, is two columns of items; the
+student matches each item in the left column with an item in the right
+column. Note the correct matching items are linked together with common label
+names of the \cs{label}/\cs{ref} command pair.
+
+\exAeBBlogPDF{p=1457} See \textit{\href{\urlAcroTeXBlog/?p=1457}{eqexam: A Matching-type Problem}}
+for a working example of the above listing. The article also covers how to randomize the left and right columns.
+
\subsubsection{Page Breaking}
@@ -1291,7 +1354,7 @@ needed, or used.
The \cs{Ans} macro is used to designate which alternative is the
correct answer ($1$ for correct, $0$ for not correct).
-\subsubsection{Using \texorpdfstring{\cs{bChoices}/\cs{eChoices}}
+\subsubsection{Using \texorpdfstring{\protect\cs{bChoices}/\protect\cs{eChoices}}
{\CMD{bChoices}/\CMD{eChoices}}}
Beginning with Version 1.3, an alternate style of specifying the
alternatives is defined. A new pair of commands are defined: \cs{bChoices}
@@ -1339,7 +1402,7 @@ package, and are fully documented in the reference for the
\ulSetLink{http://www.math.uakron.edu/~dpstory/acrotex/aeb_man.pdf}{\cAcroB}.
-\subsubsection{\texorpdfstring{\cs{sqForms} versus \cs{sqLinks}}
+\subsubsection{\texorpdfstring{\protect\cs{sqForms} versus \protect\cs{sqLinks}}
{\CMD{sqForms} versus \CMD{sqLinks}}}
There are two styles of multiple choice: (1) enumerate the
@@ -1379,7 +1442,7 @@ prior to the MC question.
Both commands have a local context. If expanded inside a group, the
definition going into the group will hold on exit from the group.
-\subsubsection{Using \texorpdfstring{\cs{proofingsymbol}}{\CMD{proofingsymbol}}
+\subsubsection{Using \texorpdfstring{\protect\cs{proofingsymbol}}{\CMD{proofingsymbol}}
and friends}
By default, a check mark (\ding{52}) is used to indicate which of the
@@ -1801,7 +1864,7 @@ is not provided, and the \texttt{workarea} does nothing. If
\texttt{solutionsafter} is specified, that space is replaced by
the provided solution.
-\subsubsection{The \texorpdfstring{\cs{placeAtxy}}{\textbackslash placeAtxy} Command}\label{sss:placeatxy}
+\subsubsection{The \texorpdfstring{\protect\cs{placeAtxy}}{\CMD{placeAtxy}} Command}\label{sss:placeatxy}
The \cs{placeAtxy} command is another device that I've used to
place a block of text or a graphic on top of the vertical space
@@ -3714,7 +3777,7 @@ of the text. Each take a single named color argument.
\end{Verbatim}
The above are the default definition.
-\subsection{The \texorpdfstring{\protect\cs{OnBackOfPage}}{\textbackslash OnBackOfPage} Command}\label{onbackofpage}
+\subsection{The \texorpdfstring{\protect\cs{OnBackOfPage}}{\CMD{OnBackOfPage}} Command}\label{onbackofpage}
In order to reduce the number of pages needed for an exam, I often
cheat by asking the student to work on the back of one of the test
@@ -3776,7 +3839,7 @@ altogether, you could redefine as
\end{Verbatim}
\subsection{\texorpdfstring
- {The \cs{pushProblem} and \cs{popProblem} Commands}
+ {The \protect\cs{pushProblem} and \protect\cs{popProblem} Commands}
{The \CMD{pushProblem} and \CMD{popProblem} Commands}
}
@@ -4796,7 +4859,7 @@ lines break across a page boundary, the annotation string
topic of annotating solutions is taken up again in the next section.
\subsubsection{Annotating a continuing problem with
-\texorpdfstring{\cs{useFillerLines}}{\CMD{\useFillerLines}}}\label{para:cnwithFL}
+\texorpdfstring{\protect\cs{useFillerLines}}{\CMD{\useFillerLines}}}\label{para:cnwithFL}
When the command \Com[\ipkg{eqexam}]{useFillerLines} is expanded, any vertical
space declared with the optional argument of \env{solution} is created one
diff --git a/macros/latex/contrib/eqexam/eqexam.def b/macros/latex/contrib/eqexam/eqexam.def
index 55f3a9bcab..9c67f41fc3 100644
--- a/macros/latex/contrib/eqexam/eqexam.def
+++ b/macros/latex/contrib/eqexam/eqexam.def
@@ -7,7 +7,7 @@
%% exerquiz.dtx (with options: `eqexam')
%%
\ProvidesFile{eqexam.def}
- [2021/01/20 v8.6.2 %
+ [2021/02/21 v8.6.5 %
Exerquiz support file for eqexam (dps)]
\let\eq@YES=y \let\eq@NO=n
\let\eq@One=1 \let\eq@Zero=0
@@ -66,7 +66,8 @@
\ifOKToWriteExamData
\set@display@protect
\immediate\write\ex@solns{#1}\set@typeset@protect
- \fi\fi}%
+ \fi\fi
+}
\ifsolutionsonly
\InputIfFileExists{\jobname_xdefs.cut}{%
\typeout{^^JExerquiz|Eqexam: Reading \jobname_xdefs.cut^^J}}
@@ -322,9 +323,9 @@
\def\eq@pslnaindnt{0pt}
\let\eq@setPrbSolnAftrIndnt\relax
\newcommand{\setPrbSolnAftrIndent}[1]{\ifdim#1=0pt
- \def\eq@pslnaindnt{0pt}\let\eq@setPrbSolnAftrIndnt\relax\else
- \edef\eq@pslnaindnt{#1}\edef\eq@setPrbSolnAftrIndnt{\expandafter
- \noexpand\expandafter\parindent#1\noexpand\relax}\fi}
+ \def\eq@pslnaindnt{0pt}\let\eq@setPrbSolnAftrIndnt\relax\else
+ \edef\eq@pslnaindnt{#1}\edef\eq@setPrbSolnAftrIndnt{\expandafter
+ \noexpand\expandafter\parindent#1\noexpand\relax}\fi}
\newif\if@restorejustify \@restorejustifyfalse
\newcommand\restoreJustifyOn{\@restorejustifytrue}
\newcommand\restoreJustifyOff{\@restorejustifyfalse}
diff --git a/macros/latex/contrib/eqexam/eqexam.dtx b/macros/latex/contrib/eqexam/eqexam.dtx
index b9cc28503f..fd5e1e31f8 100644
--- a/macros/latex/contrib/eqexam/eqexam.dtx
+++ b/macros/latex/contrib/eqexam/eqexam.dtx
@@ -16,8 +16,8 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{eqexam}
-%<package> [2021/01/20 v5.1.13 An Exam Construction Package (dps)]
-%<package>\def\eqexamdefReq{2021/01/20}
+%<package> [2021/02/26 v5.2 An Exam Construction Package (dps)]
+%<package>\def\eqexamdefReq{2021/02/21}
%<*driver>
\documentclass{ltxdoc}
\GlossaryPrologue{\section{{Change History}}}%
@@ -26,6 +26,7 @@
\value{GlossaryColumns}=2
\usepackage{makeidx}
\usepackage[colorlinks,hyperindex=false]{hyperref}
+\usepackage{fancyvrb}
\gdef\darg#1{\texttt{\char123\relax#1\char125\relax}}
\let\env\texttt
\let\opt\texttt
@@ -171,12 +172,13 @@
% option. It is normally \texttt{true}, but if set to \texttt{false}, the
% \cs{AddToShipoutPicture} is not generated at the beginning of the
% document. Here is the code taken from below:
-%\begin{verbatim}
-% \ifeqfortextbook\ifeqwritetomargins
-% \AtBeginDocument{\chkmarginboxwidth
-% \AddToShipoutPicture{\eqe@tb@shipout}}
-% \fi\fi
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\ifeqfortextbook\ifeqwritetomargins
+%!quad\AtBeginDocument{\chkmarginboxwidth
+%!quad\AddToShipoutPicture{\eqe@tb@shipout}}
+%\fi\fi
+%\end{Verbatim}
% Using this option, the check for the margin width is not done,
% and writing to the margins is turned off.
% (\cs{marginpar} still works)
@@ -700,19 +702,20 @@
%
% Here is an example of usage for defining your own custom options, must be based on
% current options, this code would be in the file \texttt{eqecus.opt}.
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\DeclareOptionX{atbdbopts}
-%{%
-% \ExecuteOptionsX{online}
-% \ExecuteOptionsX{forcolorpaper}
-% \ExecuteOptionsX{nosolutions}
-% \ExecuteOptionsX{nopoints}
-% \ExecuteOptionsX{nototals}
-% \ExecuteOptionsX{nospacetowork}
-% \ExecuteOptionsX{obeylocalversions}
-% \ExecuteOptionsX{myconfig}
+%{!%
+%!quad\ExecuteOptionsX{online}
+%!quad\ExecuteOptionsX{forcolorpaper}
+%!quad\ExecuteOptionsX{nosolutions}
+%!quad\ExecuteOptionsX{nopoints}
+%!quad\ExecuteOptionsX{nototals}
+%!quad\ExecuteOptionsX{nospacetowork}
+%!quad\ExecuteOptionsX{obeylocalversions}
+%!quad\ExecuteOptionsX{myconfig}
%}
-%\end{verbatim}
+%\end{Verbatim}
% The following config files are input prior to \cs{ProcessOptionsX}, and can,
% therefore, contain declaration of options. \texttt{web.cfg} usually only
% specifies the default driver. \texttt{eqecus.opt} is used by \textsf{@EASE},
@@ -1363,7 +1366,8 @@
% \begin{macro}{\Exam}
% \begin{macro}{\sExam}
% Convenience macros for titling the exam. Usage:
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\VersionAtext{Test~\nExam--Version A}
%\VersionBtext{Test~\nExam--Version B}
%\shortVersionAtext{T\nExam A}
@@ -1374,7 +1378,7 @@
%\subject[C3]{Calculus III}
%\title[\sExam]{\Exam}
%\author{Dr.\ D. P. Story}
-%\end{verbatim}
+%\end{Verbatim}
% These next two definitions are overwritten by the two
% commands \cs{longTitleText} and \cs{shortTitleText}.
% \begin{macrocode}
@@ -1428,18 +1432,19 @@
% Next we state the long and short titles for our document,
% one for each of our declare number of versions given earlier.
% For example, we can use the value \cs{nExam} in out titles. Usage:
-%\begin{verbatim}
-% \longTitleText
-% {Test~\nExam--Version A}
-% {Test~\nExam--Version B}
-% {Test~\nExam--Make Up}
-% \endlongTitleText
-% \shortTitleText
-% {T\nExam A}
-% {T\nExam B}
-% {T\nExam MU}
-% \endshortTitleText
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]%
+%!quad\longTitleText
+%!qquad{Test~\nExam--Version A}
+%!qquad{Test~\nExam--Version B}
+%!qquad{Test~\nExam--Make Up}
+%!quad\endlongTitleText
+%!quad\shortTitleText
+%!qquad{T\nExam A}
+%!qquad{T\nExam B}
+%!qquad{T\nExam MU}
+%!quad\endshortTitleText
+%\end{Verbatim}
% I've added markers that delimit the end of the arguments. In this
% way, the end of the list of titles can be detected, even though
% the number of titles is not the same as what is declared by the
@@ -1572,17 +1577,19 @@
% For example, assuming |\numVersions{3}| appeared earlier, the
% command |\forVersion{a}| (or |\forVersion{A}|) defines $3$ text commands \cs{vA}, \cs{vB} and
% \cs{vC}, each taking one argument, the text you want to display:
-%\begin{verbatim}
-% Name the \vA{place}\vB{date}\vC{year} of the signing of the Declaration
-% of independence.
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+% Name the \vA{place}\vB{date}\vC{year} of the signing of the
+% Declaration of independence.
+%\end{Verbatim}
% Since we said |forVersion{a}| only the \cs{vA} text
% is displayed, the others are gobbled up, etc. But wait, the \cs{forVersion}
% does more than that! It also creates a series of comment environments
% |\begin{verA}/\end{verA}|, |\begin{verB}/\end{verB}|, |\begin{verC}/\end{verC}|, etc.,
% where only the version for which this compile applies will be typeset,
% the others are commented out.
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\numVersions{3}
%\forVersion{b}
%...
@@ -1591,16 +1598,16 @@
% Solve the equation for $\vA{x}\vB{y}\vC{z}$:
%\[
%\begin{verA}
-% 2x + 4 = 7
+% 2x + 4 = 7
%\end{verA}
%\begin{verB}
-% 5y + 2 = 4
+% 5y + 2 = 4
%\end{verB}
%\begin{verC}
-% 3z - 2 = 2
+% 3z - 2 = 2
%\end{verC}
%\]
-%\end{verbatim}
+%\end{Verbatim}
% \changes{1.6b}{2006/04/03}
% {
% Changed the alphabet environments \texttt{A}, \texttt{B}, etc.\ due to a
@@ -1729,9 +1736,10 @@
% then you can locally change the version between problems.
% If the first argument is empty, the first variation is chosen.
% The syntax is
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\selectVersion{2}{3}
-%\end{verbatim}
+%\end{Verbatim}
%This command says that the next problem has 3 variations, and here we select the second one.
%\changes{1.6a}{2006/01/22}
% {%
@@ -2086,9 +2094,10 @@
\EmailSubject{}
% \end{macrocode}
% In this case \textsf{eqAttach.asp} inserts the standard one.
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%Exam Results: \webtitle of \websubject
-%\end{verbatim}
+%\end{Verbatim}
% The email would read like ``\texttt{Exam Results:~Test 1 of Calculus I}'', for example.
%
% \DescribeMacro{\ServerRetnMsg} Unless submitted in \texttt{silent} mode, the \textsf{eqAttach.asp}
@@ -2696,10 +2705,11 @@
% This is the user-interface to acquiring the first and last page
% numbers of the exam with name \texttt{\#1}. These can be used
% in comparisons, e.g.
-%\begin{verbatim}
-% \rfooteqe{\ifnum\value{page}<\numLastPageOfExam{<myTest>}%
-% \textbf{Test Continues}\fi}
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\rfooteqe{\ifnum\value{page}<\numLastPageOfExam{!ameta(myTest)}%
+%!quad\textbf{Test Continues}\fi}
+%\end{Verbatim}
% \begin{macrocode}
\newcommand{\numLastPageOfExam}[1]{\eqe@numRefii{#1PageEnd}}
\newcommand{\numFirstPageOfExam}[1]{\eqe@numRefii{#1PageBegin}}
@@ -2917,9 +2927,10 @@
% \begin{macro}{\placeCoverPageLogo}
% A simple command to insert a logo on the cover page. The logo can be used to cover the
% score in the next page, if the instructor places the score under the logo. Example of usage
-%\begin{verbatim}
-% \placeCoverPageLogo{5in}{-1.5in}{\includegraphics{nwfsc_logo}}
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\placeCoverPageLogo{5in}{-1.5in}{\includegraphics{nwfsc_logo}}
+%\end{Verbatim}
% Working from the upper left corner, the first parameter is the amount to move to logo
% to the right, the second parameter is the amount to move the logo vertically. The
% Third parameter is the content; perhaps an \cs{includegraphics} command.
@@ -3229,11 +3240,12 @@
% \cs{autocaleparts}. \textbf{Should not be redefined}.
%\begin{flushleft}
%Parameters
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=15pt,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%#1 = total points for this problem
%#2 = 0 if total points, otherwise, #2 is the number of points each
% problem.
-%\end{verbatim}
+%\end{Verbatim}
%\end{flushleft}
% \begin{macrocode}
\def\@marktotalvalue{\global\let\eqe@innermarkpts\relax
@@ -3269,21 +3281,23 @@
% This macro places the problem value in the left margin, can be redefined, if you dare.
%\begin{flushleft}
% Parameters
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=15pt,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%#1 = total points for this problem
%#2 = 0 if total points, otherwise, #2 is the number of points each
-% problem.
-%\end{verbatim}
+% problem.
+%\end{Verbatim}
%\end{flushleft}
% Currently, this macro is not used so I'll make it into verbatim text.
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
\newcommand{\eqleftmarginbox}[2]{\makebox[0pt][r]{%
- \setlength\tabcolsep{0pt}%
- \raisebox{-.5\height}[0pt][0pt]{%
- \marginboxdesign{\marginpointsboxtext{#1}{#2}}%
- }\hspace*{\marginparsep}\hspace*{\eqemargin}}%
+ \setlength\tabcolsep{0pt}%
+ \raisebox{-.5\height}[0pt][0pt]{%
+ \marginboxdesign{\marginpointsboxtext{#1}{#2}}%
+ }\hspace*{\marginparsep}\hspace*{\eqemargin}}%
}
-%\end{verbatim}
+%\end{Verbatim}
% \end{macro}
% \paragraph*{Formatting the points}
% \begin{macro}{\ptsLabel}
@@ -3482,9 +3496,10 @@
\eqrightmarginbox{#1}{#2}}
% \end{macrocode}
% The macro \cs{probvalue}, defined above, says
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\mark{\theeqpointvalue\csname eqExam\endcsname\theeq@numparts}
-%\end{verbatim}
+%\end{Verbatim}
% so the \cs{botmark} contains the point value of this page and the part number for
% this page.
% \begin{macrocode}
@@ -3916,7 +3931,8 @@
%
% Below is an example of the use of the \texttt{splitsolution} environment
% (which is defined well below here).
-%\begin{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
%\begin{problem}[5]
%This is a question worth $5$ points.
%\begin{splitsolution}
@@ -3928,7 +3944,7 @@
%\end{solution}
%\end{splitsolution}
%\end{problem}
-%\end{verbatim}
+%\end{Verbatim}
% Here, we include a graphic. We put it into a box, \cs{eqpanelbox} to get its dimensions.
% The \texttt{splitsolution} environment has one required argument, the total height of the
% solution. We then place the graphic in the \texttt{panel} environment, and write the solution
@@ -6017,51 +6033,87 @@
\newcommand\bopText{on the back of page~\boPage}
\newcommand\bopCoverPageText{on the back of the cover page}
\newcommand\OnBackOfPage[1][\bopText]{%
- \refstepcounter{backofpage}\label{bop\thebackofpage}
- \begingroup
- \csarg\ifx{r@bop\thebackofpage}\relax
- \def\boPage{??}\else
- \edef\eqe@temp{\csname r@bop\thebackofpage\endcsname}%
- \ifx\hyper@anchor\@undefined
- \edef\boPage{\expandafter\@secondoftwo\eqe@temp}\else
- \edef\boPage{\expandafter\@secondoffive\eqe@temp}\fi
- \c@eq@count\boPage
- \advance\c@eq@count-1\relax
+ \refstepcounter{backofpage}\label{bop\thebackofpage}
+ \begingroup
+ \csarg\ifx{r@bop\thebackofpage}\relax
+ \def\boPage{??}\else
+ \edef\eqe@temp{\csname r@bop\thebackofpage\endcsname}%
+ \ifx\hyper@anchor\@undefined
+ \edef\boPage{\expandafter\@secondoftwo\eqe@temp}\else
+ \edef\boPage{\expandafter\@secondoffive\eqe@temp}\fi
+ \c@eq@count\boPage
+ \advance\c@eq@count\m@ne
% \end{macrocode}
% If on page 1, we work on the back of page 1, otherwise, we work on the
% back of the previous page.
% \begin{macrocode}
- \edef\boPage
- {%
- \ifx\eqex@coverpage\relax
- \ifnum\value{eq@count}=0
- 1%
- \else
- \the\value{eq@count}%
- \fi
- \else
- \ifnum\value{eq@count}=0
- -1%
- \else
- \the\value{eq@count}%
- \fi
- \fi
- }%
- \fi
- \csarg\ifx{r@bop\thebackofpage}\relax#1\else
- \ifnum\boPage=-1\relax\bopCoverPageText\else#1\fi\fi
- \endgroup
+ \edef\boPage
+ {%
+ \ifx\eqex@coverpage\relax
+ \ifnum\value{eq@count}=\z@
+ 1%
+ \else
+ \the\value{eq@count}%
+ \fi
+ \else
+ \ifnum\value{eq@count}=\z@
+ -1%
+ \else
+ \the\value{eq@count}%
+ \fi
+ \fi
+ }%
+ \fi
+ \csarg\ifx{r@bop\thebackofpage}\relax#1\else
+ \ifnum\boPage=\m@ne\bopCoverPageText\else#1\fi\fi
+ \endgroup
}
% \end{macrocode}
% \end{macro}
%
-%\section{Vertical Space Filling Options}
+% \subsection{In support of matching-type questions}
+%
+% As a variation of a \env{problem*} question, a matching-type question
+% can be posed. The student matches each item in one column with an item
+% in a list of items in another column. The alternative words or phrases
+% are listed between the \DescribeMacro{\bMatchChoices}\cs{bMatchChoices}/\allowbreak
+% \DescribeMacro{\eMatchChoices}\cs{eMatchChoices} command pair.
+%
+% \changes{v5.2}{2021/02/26}{Support for matching-type questions}
+% \begin{macrocode}
+\def\bMatchChoices{\begingroup
+ \setcounter{partno}{0}
+ \renewcommand{\thepartno}{\Alph{partno}}
+ \partsformat{\Alph{partno}.}
+% \end{macrocode}
+% To prevent a link from forming (when the \opt{links} or \opt{online}
+% option is taken), we pass the \texttt{[h]} optional argument
+% to \cs{foritem} and \cs{item}.
+% \begin{macrocode}
+ \let\itemSAVE\item
+ \def\item{\itemSAVE[h]}
+% \end{macrocode}
+% This is the definition of \cs{foritem}, but renamed to
+% \cs{foritemSAVE}. Below the definition, we redefine
+% \cs{foritem} to \cs{foritemSAVE[h]}.
+% \begin{macrocode}
+ \newcommand{\foritemSAVE}[2][]{%
+ \setcounter{partno}{0}\def\@rgi{##1}\ifx\@rgi\@empty
+ \def\eqe@nextitem{\itemSAVE}\else
+ \def\eqe@nextitem{\itemSAVE[##1]}\fi
+ \foritem@cont{##2}}%
+ \def\foritem{\foritemSAVE[h]}
+}
+\def\eMatchChoices{\endgroup}
+% \end{macrocode}
+% \section{Vertical Space Filling Options}
%
% When the \opt{nosolutions} or the \opt{vspacewithsolns} is used, a
% vertical space is generated by the \env{solution} environment.
% Previously, this has just been a vertical white space, now, we provide
% the ability to fill the space with horizontal rules of different types.
-% Below is the implementation of this.
+% Below is the implementation of this. For this specialize question, the following
+% pair of commands are defined.
%
% \subsection{General filler lines commands and controls}
% \begin{macro}{\useFillerLines}
diff --git a/macros/latex/contrib/eqexam/examples/fig1.eps b/macros/latex/contrib/eqexam/examples/fig1.eps
index 9ea1b0cbc3..d40a7d6584 100644
--- a/macros/latex/contrib/eqexam/examples/fig1.eps
+++ b/macros/latex/contrib/eqexam/examples/fig1.eps
Binary files differ
diff --git a/macros/latex/contrib/eqexam/examples/graph.eps b/macros/latex/contrib/eqexam/examples/graph.eps
index bf1e4599d6..240e89ef7d 100644
--- a/macros/latex/contrib/eqexam/examples/graph.eps
+++ b/macros/latex/contrib/eqexam/examples/graph.eps
@@ -1,7977 +1,7977 @@
-%!PS-Adobe-3.1 EPSF-3.0
-%ADO_DSC_Encoding: Windows Roman
-%%Title: graph.pdf
-%%Creator: Adobe Acrobat 10.0.1
-%%For: D. P. Story
-%%CreationDate: 4/8/2011, 3:22:12 PM
-%%BoundingBox: -1 0 257 195
-%%HiResBoundingBox: 0 0 256.7930 194.9510
-%%CropBox: 0 0 256.7930 194.9510
-%%LanguageLevel: 2
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentNeededFeatures: (atend)
-%%DocumentSuppliedFeatures: (atend)
-%%DocumentData: Clean7Bit
-%%Pages: (atend)
-%%DocumentProcessColors: Black
-%%DocumentCustomColors: (atend)
-%%EndComments
-%%BeginDefaults
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-%%BeginProlog
-%%BeginResource: procset Adobe_AGM_Utils 1.0 0
-%%Version: 1.0 0
-%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
-systemdict/setpacking known
-{currentpacking true setpacking}if
-userdict/Adobe_AGM_Utils 75 dict dup begin put
-/bdf
-{bind def}bind def
-/nd{null def}bdf
-/xdf
-{exch def}bdf
-/ldf
-{load def}bdf
-/ddf
-{put}bdf
-/xddf
-{3 -1 roll put}bdf
-/xpt
-{exch put}bdf
-/ndf
-{
- exch dup where{
- pop pop pop
- }{
- xdf
- }ifelse
-}def
-/cdndf
-{
- exch dup currentdict exch known{
- pop pop
- }{
- exch def
- }ifelse
-}def
-/gx
-{get exec}bdf
-/ps_level
- /languagelevel where{
- pop systemdict/languagelevel gx
- }{
- 1
- }ifelse
-def
-/level2
- ps_level 2 ge
-def
-/level3
- ps_level 3 ge
-def
-/ps_version
- {version cvr}stopped{-1}if
-def
-/set_gvm
-{currentglobal exch setglobal}bdf
-/reset_gvm
-{setglobal}bdf
-/makereadonlyarray
-{
- /packedarray where{pop packedarray
- }{
- array astore readonly}ifelse
-}bdf
-/map_reserved_ink_name
-{
- dup type/stringtype eq{
- dup/Red eq{
- pop(_Red_)
- }{
- dup/Green eq{
- pop(_Green_)
- }{
- dup/Blue eq{
- pop(_Blue_)
- }{
- dup()cvn eq{
- pop(Process)
- }if
- }ifelse
- }ifelse
- }ifelse
- }if
-}bdf
-/AGMUTIL_GSTATE 22 dict def
-/get_gstate
-{
- AGMUTIL_GSTATE begin
- /AGMUTIL_GSTATE_clr_spc currentcolorspace def
- /AGMUTIL_GSTATE_clr_indx 0 def
- /AGMUTIL_GSTATE_clr_comps 12 array def
- mark currentcolor counttomark
- {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
- /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop
- /AGMUTIL_GSTATE_fnt rootfont def
- /AGMUTIL_GSTATE_lw currentlinewidth def
- /AGMUTIL_GSTATE_lc currentlinecap def
- /AGMUTIL_GSTATE_lj currentlinejoin def
- /AGMUTIL_GSTATE_ml currentmiterlimit def
- currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf
- /AGMUTIL_GSTATE_sa currentstrokeadjust def
- /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
- /AGMUTIL_GSTATE_op currentoverprint def
- /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
- /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
- currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf
- cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf
- /AGMUTIL_GSTATE_ht currenthalftone def
- /AGMUTIL_GSTATE_flt currentflat def
- end
-}def
-/set_gstate
-{
- AGMUTIL_GSTATE begin
- AGMUTIL_GSTATE_clr_spc setcolorspace
- AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
- /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor
- AGMUTIL_GSTATE_fnt setfont
- AGMUTIL_GSTATE_lw setlinewidth
- AGMUTIL_GSTATE_lc setlinecap
- AGMUTIL_GSTATE_lj setlinejoin
- AGMUTIL_GSTATE_ml setmiterlimit
- AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
- AGMUTIL_GSTATE_sa setstrokeadjust
- AGMUTIL_GSTATE_clr_rnd setcolorrendering
- AGMUTIL_GSTATE_op setoverprint
- AGMUTIL_GSTATE_bg cvx setblackgeneration
- AGMUTIL_GSTATE_ucr cvx setundercolorremoval
- AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
- AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
- AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or
- {
- currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne
- {
- mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark
- }if
- }{
- AGMUTIL_GSTATE_ht sethalftone
- }ifelse
- AGMUTIL_GSTATE_flt setflat
- end
-}def
-/get_gstate_and_matrix
-{
- AGMUTIL_GSTATE begin
- /AGMUTIL_GSTATE_ctm matrix currentmatrix def
- end
- get_gstate
-}def
-/set_gstate_and_matrix
-{
- set_gstate
- AGMUTIL_GSTATE begin
- AGMUTIL_GSTATE_ctm setmatrix
- end
-}def
-/AGMUTIL_str256 256 string def
-/AGMUTIL_src256 256 string def
-/AGMUTIL_dst64 64 string def
-/AGMUTIL_srcLen nd
-/AGMUTIL_ndx nd
-/AGMUTIL_cpd nd
-/capture_cpd{
- //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf
-}def
-/thold_halftone
-{
- level3
- {sethalftone currenthalftone}
- {
- dup/HalftoneType get 3 eq
- {
- sethalftone currenthalftone
- }{
- begin
- Width Height mul{
- Thresholds read{pop}if
- }repeat
- end
- currenthalftone
- }ifelse
- }ifelse
-}def
-/rdcmntline
-{
- currentfile AGMUTIL_str256 readline pop
- (%)anchorsearch{pop}if
-}bdf
-/filter_cmyk
-{
- dup type/filetype ne{
- exch()/SubFileDecode filter
- }{
- exch pop
- }
- ifelse
- [
- exch
- {
- AGMUTIL_src256 readstring pop
- dup length/AGMUTIL_srcLen exch def
- /AGMUTIL_ndx 0 def
- AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
- 1 index exch get
- AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
- /AGMUTIL_ndx AGMUTIL_ndx 1 add def
- }for
- pop
- AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
- }
- bind
- /exec cvx
- ]cvx
-}bdf
-/filter_indexed_devn
-{
- cvi Names length mul names_index add Lookup exch get
-}bdf
-/filter_devn
-{
- 4 dict begin
- /srcStr xdf
- /dstStr xdf
- dup type/filetype ne{
- 0()/SubFileDecode filter
- }if
- [
- exch
- [
- /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx
- currentdict/srcStr get/readstring cvx/pop cvx
- /dup cvx/length cvx 0/gt cvx[
- Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx
- names_index Names length currentdict/srcStr get length 1 sub{
- 1/index cvx/exch cvx/get cvx
- currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx
- Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx
- }for
- currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx
- ]cvx/if cvx
- /end cvx
- ]cvx
- bind
- /exec cvx
- ]cvx
- end
-}bdf
-/AGMUTIL_imagefile nd
-/read_image_file
-{
- AGMUTIL_imagefile 0 setfileposition
- 10 dict begin
- /imageDict xdf
- /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
- /imbufIdx 0 def
- /origDataSource imageDict/DataSource get def
- /origMultipleDataSources imageDict/MultipleDataSources get def
- /origDecode imageDict/Decode get def
- /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def
- imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- {
- /imbufCnt imageDict/DataSource get length def
- /imbufs imbufCnt array def
- 0 1 imbufCnt 1 sub{
- /imbufIdx xdf
- imbufs imbufIdx imbufLen string put
- imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put
- }for
- DeviceN_PS2{
- imageDict begin
- /DataSource[DataSource/devn_sep_datasource cvx]cvx def
- /MultipleDataSources false def
- /Decode[0 1]def
- end
- }if
- }{
- /imbuf imbufLen string def
- Indexed_DeviceN level3 not and DeviceN_NoneName or{
- /srcDataStrs[imageDict begin
- currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
- {
- Width Decode length 2 div mul cvi string
- }repeat
- end]def
- imageDict begin
- /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def
- /Decode[0 1]def
- end
- }{
- imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put
- imageDict/Decode[0 1]put
- }ifelse
- }ifelse
- imageDict exch
- load exec
- imageDict/DataSource origDataSource put
- imageDict/MultipleDataSources origMultipleDataSources put
- imageDict/Decode origDecode put
- end
-}bdf
-/write_image_file
-{
- begin
- {(AGMUTIL_imagefile)(w+)file}stopped{
- false
- }{
- Adobe_AGM_Utils/AGMUTIL_imagefile xddf
- 2 dict begin
- /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
- MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{
- /imbuf imbufLen string def
- }if
- 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{
- pop
- MultipleDataSources{
- 0 1 DataSource length 1 sub{
- DataSource type dup
- /arraytype eq{
- pop DataSource exch gx
- }{
- /filetype eq{
- DataSource exch get imbuf readstring pop
- }{
- DataSource exch get
- }ifelse
- }ifelse
- AGMUTIL_imagefile exch writestring
- }for
- }{
- DataSource type dup
- /arraytype eq{
- pop DataSource exec
- }{
- /filetype eq{
- DataSource imbuf readstring pop
- }{
- DataSource
- }ifelse
- }ifelse
- AGMUTIL_imagefile exch writestring
- }ifelse
- }for
- end
- true
- }ifelse
- end
-}bdf
-/close_image_file
-{
- AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile
-}def
-statusdict/product known userdict/AGMP_current_show known not and{
- /pstr statusdict/product get def
- pstr(HP LaserJet 2200)eq
- pstr(HP LaserJet 4000 Series)eq or
- pstr(HP LaserJet 4050 Series )eq or
- pstr(HP LaserJet 8000 Series)eq or
- pstr(HP LaserJet 8100 Series)eq or
- pstr(HP LaserJet 8150 Series)eq or
- pstr(HP LaserJet 5000 Series)eq or
- pstr(HP LaserJet 5100 Series)eq or
- pstr(HP Color LaserJet 4500)eq or
- pstr(HP Color LaserJet 4600)eq or
- pstr(HP LaserJet 5Si)eq or
- pstr(HP LaserJet 1200 Series)eq or
- pstr(HP LaserJet 1300 Series)eq or
- pstr(HP LaserJet 4100 Series)eq or
- {
- userdict/AGMP_current_show/show load put
- userdict/show{
- currentcolorspace 0 get
- /Pattern eq
- {false charpath f}
- {AGMP_current_show}ifelse
- }put
- }if
- currentdict/pstr undef
-}if
-/consumeimagedata
-{
- begin
- AGMIMG_init_common
- currentdict/MultipleDataSources known not
- {/MultipleDataSources false def}if
- MultipleDataSources
- {
- DataSource 0 get type
- dup/filetype eq
- {
- 1 dict begin
- /flushbuffer Width cvi string def
- 1 1 Height cvi
- {
- pop
- 0 1 DataSource length 1 sub
- {
- DataSource exch get
- flushbuffer readstring pop pop
- }for
- }for
- end
- }if
- dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and
- {
- Width Height mul cvi
- {
- 0 1 DataSource length 1 sub
- {dup DataSource exch gx length exch 0 ne{pop}if}for
- dup 0 eq
- {pop exit}if
- sub dup 0 le
- {exit}if
- }loop
- pop
- }if
- }
- {
- /DataSource load type
- dup/filetype eq
- {
- 1 dict begin
- /flushbuffer Width Decode length 2 idiv mul cvi string def
- 1 1 Height{pop DataSource flushbuffer readstring pop pop}for
- end
- }if
- dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and
- {
- Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul
- {
- DataSource length dup 0 eq
- {pop exit}if
- sub dup 0 le
- {exit}if
- }loop
- pop
- }if
- }ifelse
- end
-}bdf
-/addprocs
-{
- 2{/exec load}repeat
- 3 1 roll
- [5 1 roll]bind cvx
-}def
-/modify_halftone_xfer
-{
- currenthalftone dup length dict copy begin
- currentdict 2 index known{
- 1 index load dup length dict copy begin
- currentdict/TransferFunction known{
- /TransferFunction load
- }{
- currenttransfer
- }ifelse
- addprocs/TransferFunction xdf
- currentdict end def
- currentdict end sethalftone
- }{
- currentdict/TransferFunction known{
- /TransferFunction load
- }{
- currenttransfer
- }ifelse
- addprocs/TransferFunction xdf
- currentdict end sethalftone
- pop
- }ifelse
-}def
-/clonearray
-{
- dup xcheck exch
- dup length array exch
- Adobe_AGM_Core/AGMCORE_tmp -1 ddf
- {
- Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf
- dup type/dicttype eq
- {
- Adobe_AGM_Core/AGMCORE_tmp get
- exch
- clonedict
- Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
- }if
- dup type/arraytype eq
- {
- Adobe_AGM_Core/AGMCORE_tmp get exch
- clonearray
- Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
- }if
- exch dup
- Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put
- }forall
- exch{cvx}if
-}bdf
-/clonedict
-{
- dup length dict
- begin
- {
- dup type/dicttype eq
- {clonedict}if
- dup type/arraytype eq
- {clonearray}if
- def
- }forall
- currentdict
- end
-}bdf
-/DeviceN_PS2
-{
- /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and
-}bdf
-/Indexed_DeviceN
-{
- /indexed_colorspace_dict AGMCORE_gget dup null ne{
- dup/CSDBase known{
- /CSDBase get/CSD get_res/Names known
- }{
- pop false
- }ifelse
- }{
- pop false
- }ifelse
-}bdf
-/DeviceN_NoneName
-{
- /Names where{
- pop
- false Names
- {
- (None)eq or
- }forall
- }{
- false
- }ifelse
-}bdf
-/DeviceN_PS2_inRip_seps
-{
- /AGMCORE_in_rip_sep where
- {
- pop dup type dup/arraytype eq exch/packedarraytype eq or
- {
- dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and
- {
- /currentcolorspace exch AGMCORE_gput
- false
- }{
- true
- }ifelse
- }{
- true
- }ifelse
- }{
- true
- }ifelse
-}bdf
-/base_colorspace_type
-{
- dup type/arraytype eq{0 get}if
-}bdf
-/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
-{
- /pdfmark_5{cleartomark}bind def
-}{
- /pdfmark_5{pdfmark}bind def
-}ifelse
-/ReadBypdfmark_5
-{
- currentfile exch 0 exch/SubFileDecode filter
- /currentdistillerparams where
- {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
- {flushfile cleartomark}
- {/PUT pdfmark}ifelse
-}bdf
-/ReadBypdfmark_5_string
-{
- 2 dict begin
- /makerString exch def string/tmpString exch def
- {
- currentfile tmpString readline not{pop exit}if
- makerString anchorsearch
- {
- pop pop cleartomark exit
- }{
- 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5
- }ifelse
- }loop
- end
-}bdf
-/xpdfm
-{
- {
- dup 0 get/Label eq
- {
- aload length[exch 1 add 1 roll/PAGELABEL
- }{
- aload pop
- [{ThisPage}<<5 -2 roll>>/PUT
- }ifelse
- pdfmark_5
- }forall
-}bdf
-/lmt{
- dup 2 index le{exch}if pop dup 2 index ge{exch}if pop
-}bdf
-/int{
- dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop
-}bdf
-/ds{
- Adobe_AGM_Utils begin
-}bdf
-/dt{
- currentdict Adobe_AGM_Utils eq{
- end
- }if
-}bdf
-systemdict/setpacking known
-{setpacking}if
-%%EndResource
-%%BeginResource: procset Adobe_AGM_Core 2.0 0
-%%Version: 2.0 0
-%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved.
-systemdict/setpacking known
-{
- currentpacking
- true setpacking
-}if
-userdict/Adobe_AGM_Core 209 dict dup begin put
-/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def
-/AGMCORE_str256 256 string def
-/AGMCORE_save nd
-/AGMCORE_graphicsave nd
-/AGMCORE_c 0 def
-/AGMCORE_m 0 def
-/AGMCORE_y 0 def
-/AGMCORE_k 0 def
-/AGMCORE_cmykbuf 4 array def
-/AGMCORE_screen[currentscreen]cvx def
-/AGMCORE_tmp 0 def
-/AGMCORE_&setgray nd
-/AGMCORE_&setcolor nd
-/AGMCORE_&setcolorspace nd
-/AGMCORE_&setcmykcolor nd
-/AGMCORE_cyan_plate nd
-/AGMCORE_magenta_plate nd
-/AGMCORE_yellow_plate nd
-/AGMCORE_black_plate nd
-/AGMCORE_plate_ndx nd
-/AGMCORE_get_ink_data nd
-/AGMCORE_is_cmyk_sep nd
-/AGMCORE_host_sep nd
-/AGMCORE_avoid_L2_sep_space nd
-/AGMCORE_distilling nd
-/AGMCORE_composite_job nd
-/AGMCORE_producing_seps nd
-/AGMCORE_ps_level -1 def
-/AGMCORE_ps_version -1 def
-/AGMCORE_environ_ok nd
-/AGMCORE_CSD_cache 0 dict def
-/AGMCORE_currentoverprint false def
-/AGMCORE_deltaX nd
-/AGMCORE_deltaY nd
-/AGMCORE_name nd
-/AGMCORE_sep_special nd
-/AGMCORE_err_strings 4 dict def
-/AGMCORE_cur_err nd
-/AGMCORE_current_spot_alias false def
-/AGMCORE_inverting false def
-/AGMCORE_feature_dictCount nd
-/AGMCORE_feature_opCount nd
-/AGMCORE_feature_ctm nd
-/AGMCORE_ConvertToProcess false def
-/AGMCORE_Default_CTM matrix def
-/AGMCORE_Default_PageSize nd
-/AGMCORE_Default_flatness nd
-/AGMCORE_currentbg nd
-/AGMCORE_currentucr nd
-/AGMCORE_pattern_paint_type 0 def
-/knockout_unitsq nd
-currentglobal true setglobal
-[/CSA/Gradient/Procedure]
-{
- /Generic/Category findresource dup length dict copy/Category defineresource pop
-}forall
-setglobal
-/AGMCORE_key_known
-{
- where{
- /Adobe_AGM_Core_Id known
- }{
- false
- }ifelse
-}ndf
-/flushinput
-{
- save
- 2 dict begin
- /CompareBuffer 3 -1 roll def
- /readbuffer 256 string def
- mark
- {
- currentfile readbuffer{readline}stopped
- {cleartomark mark}
- {
- not
- {pop exit}
- if
- CompareBuffer eq
- {exit}
- if
- }ifelse
- }loop
- cleartomark
- end
- restore
-}bdf
-/getspotfunction
-{
- AGMCORE_screen exch pop exch pop
- dup type/dicttype eq{
- dup/HalftoneType get 1 eq{
- /SpotFunction get
- }{
- dup/HalftoneType get 2 eq{
- /GraySpotFunction get
- }{
- pop
- {
- abs exch abs 2 copy add 1 gt{
- 1 sub dup mul exch 1 sub dup mul add 1 sub
- }{
- dup mul exch dup mul add 1 exch sub
- }ifelse
- }bind
- }ifelse
- }ifelse
- }if
-}def
-/np
-{newpath}bdf
-/clp_npth
-{clip np}def
-/eoclp_npth
-{eoclip np}def
-/npth_clp
-{np clip}def
-/graphic_setup
-{
- /AGMCORE_graphicsave save store
- concat
- 0 setgray
- 0 setlinecap
- 0 setlinejoin
- 1 setlinewidth
- []0 setdash
- 10 setmiterlimit
- np
- false setoverprint
- false setstrokeadjust
- //Adobe_AGM_Core/spot_alias gx
- /Adobe_AGM_Image where{
- pop
- Adobe_AGM_Image/spot_alias 2 copy known{
- gx
- }{
- pop pop
- }ifelse
- }if
- /sep_colorspace_dict null AGMCORE_gput
- 100 dict begin
- /dictstackcount countdictstack def
- /showpage{}def
- mark
-}def
-/graphic_cleanup
-{
- cleartomark
- dictstackcount 1 countdictstack 1 sub{end}for
- end
- AGMCORE_graphicsave restore
-}def
-/compose_error_msg
-{
- grestoreall initgraphics
- /Helvetica findfont 10 scalefont setfont
- /AGMCORE_deltaY 100 def
- /AGMCORE_deltaX 310 def
- clippath pathbbox np pop pop 36 add exch 36 add exch moveto
- 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
- 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
- 0 AGMCORE_&setgray
- gsave 1 AGMCORE_&setgray fill grestore
- 1 setlinewidth gsave stroke grestore
- currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
- /AGMCORE_deltaY 12 def
- /AGMCORE_tmp 0 def
- AGMCORE_err_strings exch get
- {
- dup 32 eq
- {
- pop
- AGMCORE_str256 0 AGMCORE_tmp getinterval
- stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
- {
- currentpoint AGMCORE_deltaY sub exch pop
- clippath pathbbox pop pop pop 44 add exch moveto
- }if
- AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show
- 0 1 AGMCORE_str256 length 1 sub
- {
- AGMCORE_str256 exch 0 put
- }for
- /AGMCORE_tmp 0 def
- }{
- AGMCORE_str256 exch AGMCORE_tmp xpt
- /AGMCORE_tmp AGMCORE_tmp 1 add def
- }ifelse
- }forall
-}bdf
-/AGMCORE_CMYKDeviceNColorspaces[
- [/Separation/None/DeviceCMYK{0 0 0}]
- [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind]
- [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind]
- [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind]
- [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind]
- [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind]
- [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind]
- [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind]
- [/Separation(Cyan)/DeviceCMYK{0 0 0}]
- [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind]
- [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind]
- [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind]
- [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}]
- [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind]
- [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}]
- [/DeviceCMYK]
-]def
-/ds{
- Adobe_AGM_Core begin
- /currentdistillerparams where
- {
- pop currentdistillerparams/CoreDistVersion get 5000 lt
- {<</DetectBlends false>>setdistillerparams}if
- }if
- /AGMCORE_ps_version xdf
- /AGMCORE_ps_level xdf
- errordict/AGM_handleerror known not{
- errordict/AGM_handleerror errordict/handleerror get put
- errordict/handleerror{
- Adobe_AGM_Core begin
- $error/newerror get AGMCORE_cur_err null ne and{
- $error/newerror false put
- AGMCORE_cur_err compose_error_msg
- }if
- $error/newerror true put
- end
- errordict/AGM_handleerror get exec
- }bind put
- }if
- /AGMCORE_environ_ok
- ps_level AGMCORE_ps_level ge
- ps_version AGMCORE_ps_version ge and
- AGMCORE_ps_level -1 eq or
- def
- AGMCORE_environ_ok not
- {/AGMCORE_cur_err/AGMCORE_bad_environ def}if
- /AGMCORE_&setgray systemdict/setgray get def
- level2{
- /AGMCORE_&setcolor systemdict/setcolor get def
- /AGMCORE_&setcolorspace systemdict/setcolorspace get def
- }if
- /AGMCORE_currentbg currentblackgeneration def
- /AGMCORE_currentucr currentundercolorremoval def
- /AGMCORE_Default_flatness currentflat def
- /AGMCORE_distilling
- /product where{
- pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and
- }{
- false
- }ifelse
- def
- /AGMCORE_GSTATE AGMCORE_key_known not{
- /AGMCORE_GSTATE 21 dict def
- /AGMCORE_tmpmatrix matrix def
- /AGMCORE_gstack 32 array def
- /AGMCORE_gstackptr 0 def
- /AGMCORE_gstacksaveptr 0 def
- /AGMCORE_gstackframekeys 14 def
- /AGMCORE_&gsave/gsave ldf
- /AGMCORE_&grestore/grestore ldf
- /AGMCORE_&grestoreall/grestoreall ldf
- /AGMCORE_&save/save ldf
- /AGMCORE_&setoverprint/setoverprint ldf
- /AGMCORE_gdictcopy{
- begin
- {def}forall
- end
- }def
- /AGMCORE_gput{
- AGMCORE_gstack AGMCORE_gstackptr get
- 3 1 roll
- put
- }def
- /AGMCORE_gget{
- AGMCORE_gstack AGMCORE_gstackptr get
- exch
- get
- }def
- /gsave{
- AGMCORE_&gsave
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gstackptr 1 add
- dup 32 ge{limitcheck}if
- /AGMCORE_gstackptr exch store
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gdictcopy
- }def
- /grestore{
- AGMCORE_&grestore
- AGMCORE_gstackptr 1 sub
- dup AGMCORE_gstacksaveptr lt{1 add}if
- dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known
- {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse
- /AGMCORE_gstackptr exch store
- }def
- /grestoreall{
- AGMCORE_&grestoreall
- /AGMCORE_gstackptr AGMCORE_gstacksaveptr store
- }def
- /save{
- AGMCORE_&save
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gstackptr 1 add
- dup 32 ge{limitcheck}if
- /AGMCORE_gstackptr exch store
- /AGMCORE_gstacksaveptr AGMCORE_gstackptr store
- AGMCORE_gstack AGMCORE_gstackptr get
- AGMCORE_gdictcopy
- }def
- /setoverprint{
- dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint
- }def
- 0 1 AGMCORE_gstack length 1 sub{
- AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
- }for
- }if
- level3/AGMCORE_&sysshfill AGMCORE_key_known not and
- {
- /AGMCORE_&sysshfill systemdict/shfill get def
- /AGMCORE_&sysmakepattern systemdict/makepattern get def
- /AGMCORE_&usrmakepattern/makepattern load def
- }if
- /currentcmykcolor[0 0 0 0]AGMCORE_gput
- /currentstrokeadjust false AGMCORE_gput
- /currentcolorspace[/DeviceGray]AGMCORE_gput
- /sep_tint 0 AGMCORE_gput
- /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput
- /sep_colorspace_dict null AGMCORE_gput
- /devicen_colorspace_dict null AGMCORE_gput
- /indexed_colorspace_dict null AGMCORE_gput
- /currentcolor_intent()AGMCORE_gput
- /customcolor_tint 1 AGMCORE_gput
- /absolute_colorimetric_crd null AGMCORE_gput
- /relative_colorimetric_crd null AGMCORE_gput
- /saturation_crd null AGMCORE_gput
- /perceptual_crd null AGMCORE_gput
- currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf
- cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf
- <<
- /MaxPatternItem currentsystemparams/MaxPatternCache get
- >>
- setuserparams
- end
-}def
-/ps
-{
- /setcmykcolor where{
- pop
- Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put
- }if
- Adobe_AGM_Core begin
- /setcmykcolor
- {
- 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput
- 1 sub 4 1 roll
- 3{
- 3 index add neg dup 0 lt{
- pop 0
- }if
- 3 1 roll
- }repeat
- setrgbcolor pop
- }ndf
- /currentcmykcolor
- {
- /currentcmykcolor AGMCORE_gget aload pop
- }ndf
- /setoverprint
- {pop}ndf
- /currentoverprint
- {false}ndf
- /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
- /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
- /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
- /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
- /AGMCORE_plate_ndx
- AGMCORE_cyan_plate{
- 0
- }{
- AGMCORE_magenta_plate{
- 1
- }{
- AGMCORE_yellow_plate{
- 2
- }{
- AGMCORE_black_plate{
- 3
- }{
- 4
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- def
- /AGMCORE_have_reported_unsupported_color_space false def
- /AGMCORE_report_unsupported_color_space
- {
- AGMCORE_have_reported_unsupported_color_space false eq
- {
- (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)==
- Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf
- }if
- }def
- /AGMCORE_composite_job
- AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
- /AGMCORE_in_rip_sep
- /AGMCORE_in_rip_sep where{
- pop AGMCORE_in_rip_sep
- }{
- AGMCORE_distilling
- {
- false
- }{
- userdict/Adobe_AGM_OnHost_Seps known{
- false
- }{
- level2{
- currentpagedevice/Separations 2 copy known{
- get
- }{
- pop pop false
- }ifelse
- }{
- false
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- def
- /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
- /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
- /AGM_preserve_spots
- /AGM_preserve_spots where{
- pop AGM_preserve_spots
- }{
- AGMCORE_distilling AGMCORE_producing_seps or
- }ifelse
- def
- /AGM_is_distiller_preserving_spotimages
- {
- currentdistillerparams/PreserveOverprintSettings known
- {
- currentdistillerparams/PreserveOverprintSettings get
- {
- currentdistillerparams/ColorConversionStrategy known
- {
- currentdistillerparams/ColorConversionStrategy get
- /sRGB ne
- }{
- true
- }ifelse
- }{
- false
- }ifelse
- }{
- false
- }ifelse
- }def
- /convert_spot_to_process where{pop}{
- /convert_spot_to_process
- {
- //Adobe_AGM_Core begin
- dup map_alias{
- /Name get exch pop
- }if
- dup dup(None)eq exch(All)eq or
- {
- pop false
- }{
- AGMCORE_host_sep
- {
- gsave
- 1 0 0 0 setcmykcolor currentgray 1 exch sub
- 0 1 0 0 setcmykcolor currentgray 1 exch sub
- 0 0 1 0 setcmykcolor currentgray 1 exch sub
- 0 0 0 1 setcmykcolor currentgray 1 exch sub
- add add add 0 eq
- {
- pop false
- }{
- false setoverprint
- current_spot_alias false set_spot_alias
- 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
- set_spot_alias
- currentgray 1 ne
- }ifelse
- grestore
- }{
- AGMCORE_distilling
- {
- pop AGM_is_distiller_preserving_spotimages not
- }{
- //Adobe_AGM_Core/AGMCORE_name xddf
- false
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq
- AGMUTIL_cpd/OverrideSeparations known and
- {
- AGMUTIL_cpd/OverrideSeparations get
- {
- /HqnSpots/ProcSet resourcestatus
- {
- pop pop pop true
- }if
- }if
- }if
- {
- AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not
- }{
- gsave
- [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace
- false
- AGMUTIL_cpd/SeparationColorNames 2 copy known
- {
- get
- {AGMCORE_name eq or}forall
- not
- }{
- pop pop pop true
- }ifelse
- grestore
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- end
- }def
- }ifelse
- /convert_to_process where{pop}{
- /convert_to_process
- {
- dup length 0 eq
- {
- pop false
- }{
- AGMCORE_host_sep
- {
- dup true exch
- {
- dup(Cyan)eq exch
- dup(Magenta)eq 3 -1 roll or exch
- dup(Yellow)eq 3 -1 roll or exch
- dup(Black)eq 3 -1 roll or
- {pop}
- {convert_spot_to_process and}ifelse
- }
- forall
- {
- true exch
- {
- dup(Cyan)eq exch
- dup(Magenta)eq 3 -1 roll or exch
- dup(Yellow)eq 3 -1 roll or exch
- (Black)eq or and
- }forall
- not
- }{pop false}ifelse
- }{
- false exch
- {
- /PhotoshopDuotoneList where{pop false}{true}ifelse
- {
- dup(Cyan)eq exch
- dup(Magenta)eq 3 -1 roll or exch
- dup(Yellow)eq 3 -1 roll or exch
- dup(Black)eq 3 -1 roll or
- {pop}
- {convert_spot_to_process or}ifelse
- }
- {
- convert_spot_to_process or
- }
- ifelse
- }
- forall
- }ifelse
- }ifelse
- }def
- }ifelse
- /AGMCORE_avoid_L2_sep_space
- version cvr 2012 lt
- level2 and
- AGMCORE_producing_seps not and
- def
- /AGMCORE_is_cmyk_sep
- AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
- def
- /AGM_avoid_0_cmyk where{
- pop AGM_avoid_0_cmyk
- }{
- AGM_preserve_spots
- userdict/Adobe_AGM_OnHost_Seps known
- userdict/Adobe_AGM_InRip_Seps known or
- not and
- }ifelse
- {
- /setcmykcolor[
- {
- 4 copy add add add 0 eq currentoverprint and{
- pop 0.0005
- }if
- }/exec cvx
- /AGMCORE_&setcmykcolor load dup type/operatortype ne{
- /exec cvx
- }if
- ]cvx def
- }if
- /AGMCORE_IsSeparationAProcessColor
- {
- dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or
- }def
- AGMCORE_host_sep{
- /setcolortransfer
- {
- AGMCORE_cyan_plate{
- pop pop pop
- }{
- AGMCORE_magenta_plate{
- 4 3 roll pop pop pop
- }{
- AGMCORE_yellow_plate{
- 4 2 roll pop pop pop
- }{
- 4 1 roll pop pop pop
- }ifelse
- }ifelse
- }ifelse
- settransfer
- }
- def
- /AGMCORE_get_ink_data
- AGMCORE_cyan_plate{
- {pop pop pop}
- }{
- AGMCORE_magenta_plate{
- {4 3 roll pop pop pop}
- }{
- AGMCORE_yellow_plate{
- {4 2 roll pop pop pop}
- }{
- {4 1 roll pop pop pop}
- }ifelse
- }ifelse
- }ifelse
- def
- /AGMCORE_RemoveProcessColorNames
- {
- 1 dict begin
- /filtername
- {
- dup/Cyan eq 1 index(Cyan)eq or
- {pop(_cyan_)}if
- dup/Magenta eq 1 index(Magenta)eq or
- {pop(_magenta_)}if
- dup/Yellow eq 1 index(Yellow)eq or
- {pop(_yellow_)}if
- dup/Black eq 1 index(Black)eq or
- {pop(_black_)}if
- }def
- dup type/arraytype eq
- {[exch{filtername}forall]}
- {filtername}ifelse
- end
- }def
- level3{
- /AGMCORE_IsCurrentColor
- {
- dup AGMCORE_IsSeparationAProcessColor
- {
- AGMCORE_plate_ndx 0 eq
- {dup(Cyan)eq exch/Cyan eq or}if
- AGMCORE_plate_ndx 1 eq
- {dup(Magenta)eq exch/Magenta eq or}if
- AGMCORE_plate_ndx 2 eq
- {dup(Yellow)eq exch/Yellow eq or}if
- AGMCORE_plate_ndx 3 eq
- {dup(Black)eq exch/Black eq or}if
- AGMCORE_plate_ndx 4 eq
- {pop false}if
- }{
- gsave
- false setoverprint
- current_spot_alias false set_spot_alias
- 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
- set_spot_alias
- currentgray 1 ne
- grestore
- }ifelse
- }def
- /AGMCORE_filter_functiondatasource
- {
- 5 dict begin
- /data_in xdf
- data_in type/stringtype eq
- {
- /ncomp xdf
- /comp xdf
- /string_out data_in length ncomp idiv string def
- 0 ncomp data_in length 1 sub
- {
- string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
- }for
- string_out
- }{
- string/string_in xdf
- /string_out 1 string def
- /component xdf
- [
- data_in string_in/readstring cvx
- [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx
- [/pop cvx()]cvx/ifelse cvx
- ]cvx/ReusableStreamDecode filter
- }ifelse
- end
- }def
- /AGMCORE_separateShadingFunction
- {
- 2 dict begin
- /paint? xdf
- /channel xdf
- dup type/dicttype eq
- {
- begin
- FunctionType 0 eq
- {
- /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
- currentdict/Decode known
- {/Decode Decode channel 2 mul 2 getinterval def}if
- paint? not
- {/Decode[1 1]def}if
- }if
- FunctionType 2 eq
- {
- paint?
- {
- /C0[C0 channel get 1 exch sub]def
- /C1[C1 channel get 1 exch sub]def
- }{
- /C0[1]def
- /C1[1]def
- }ifelse
- }if
- FunctionType 3 eq
- {
- /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def
- }if
- currentdict/Range known
- {/Range[0 1]def}if
- currentdict
- end}{
- channel get 0 paint? AGMCORE_separateShadingFunction
- }ifelse
- end
- }def
- /AGMCORE_separateShading
- {
- 3 -1 roll begin
- currentdict/Function known
- {
- currentdict/Background known
- {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
- Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf
- /ColorSpace[/DeviceGray]def
- }{
- ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq
- {
- /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
- }{
- ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
- }ifelse
- ColorSpace 0 get/Separation eq
- {
- {
- [1/exch cvx/sub cvx]cvx
- }{
- [/pop cvx 1]cvx
- }ifelse
- ColorSpace 3 3 -1 roll put
- pop
- }{
- {
- [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx
- }{
- pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx
- }ifelse
- ColorSpace 3 3 -1 roll bind put
- }ifelse
- ColorSpace 2/DeviceGray put
- }ifelse
- end
- }def
- /AGMCORE_separateShadingDict
- {
- dup/ColorSpace get
- dup type/arraytype ne
- {[exch]}if
- dup 0 get/DeviceCMYK eq
- {
- exch begin
- currentdict
- AGMCORE_cyan_plate
- {0 true}if
- AGMCORE_magenta_plate
- {1 true}if
- AGMCORE_yellow_plate
- {2 true}if
- AGMCORE_black_plate
- {3 true}if
- AGMCORE_plate_ndx 4 eq
- {0 false}if
- dup not currentoverprint and
- {/AGMCORE_ignoreshade true def}if
- AGMCORE_separateShading
- currentdict
- end exch
- }if
- dup 0 get/Separation eq
- {
- exch begin
- ColorSpace 1 get dup/None ne exch/All ne and
- {
- ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
- {
- ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
- {
- /ColorSpace
- [
- /Separation
- ColorSpace 1 get
- /DeviceGray
- [
- ColorSpace 3 get/exec cvx
- 4 AGMCORE_plate_ndx sub -1/roll cvx
- 4 1/roll cvx
- 3[/pop cvx]cvx/repeat cvx
- 1/exch cvx/sub cvx
- ]cvx
- ]def
- }{
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate not
- {
- currentdict 0 false AGMCORE_separateShading
- }if
- }ifelse
- }{
- currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
- 0 exch
- dup not currentoverprint and
- {/AGMCORE_ignoreshade true def}if
- AGMCORE_separateShading
- }ifelse
- }if
- currentdict
- end exch
- }if
- dup 0 get/DeviceN eq
- {
- exch begin
- ColorSpace 1 get convert_to_process
- {
- ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
- {
- /ColorSpace
- [
- /DeviceN
- ColorSpace 1 get
- /DeviceGray
- [
- ColorSpace 3 get/exec cvx
- 4 AGMCORE_plate_ndx sub -1/roll cvx
- 4 1/roll cvx
- 3[/pop cvx]cvx/repeat cvx
- 1/exch cvx/sub cvx
- ]cvx
- ]def
- }{
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate not
- {
- currentdict 0 false AGMCORE_separateShading
- /ColorSpace[/DeviceGray]def
- }if
- }ifelse
- }{
- currentdict
- false -1 ColorSpace 1 get
- {
- AGMCORE_IsCurrentColor
- {
- 1 add
- exch pop true exch exit
- }if
- 1 add
- }forall
- exch
- dup not currentoverprint and
- {/AGMCORE_ignoreshade true def}if
- AGMCORE_separateShading
- }ifelse
- currentdict
- end exch
- }if
- dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not
- {
- exch begin
- ColorSpace dup type/arraytype eq
- {0 get}if
- /DeviceGray ne
- {
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate not
- {
- ColorSpace 0 get/CIEBasedA eq
- {
- /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def
- }if
- ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or
- {
- /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def
- }if
- ColorSpace 0 get/CIEBasedDEFG eq
- {
- /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
- }if
- currentdict 0 false AGMCORE_separateShading
- }if
- }if
- currentdict
- end exch
- }if
- pop
- dup/AGMCORE_ignoreshade known
- {
- begin
- /ColorSpace[/Separation(None)/DeviceGray{}]def
- currentdict end
- }if
- }def
- /shfill
- {
- AGMCORE_separateShadingDict
- dup/AGMCORE_ignoreshade known
- {pop}
- {AGMCORE_&sysshfill}ifelse
- }def
- /makepattern
- {
- exch
- dup/PatternType get 2 eq
- {
- clonedict
- begin
- /Shading Shading AGMCORE_separateShadingDict def
- Shading/AGMCORE_ignoreshade known
- currentdict end exch
- {pop<</PatternType 1/PaintProc{pop}/BBox[0 0 1 1]/XStep 1/YStep 1/PaintType 1/TilingType 3>>}if
- exch AGMCORE_&sysmakepattern
- }{
- exch AGMCORE_&usrmakepattern
- }ifelse
- }def
- }if
- }if
- AGMCORE_in_rip_sep{
- /setcustomcolor
- {
- exch aload pop
- dup 7 1 roll inRip_spot_has_ink not {
- 4{4 index mul 4 1 roll}
- repeat
- /DeviceCMYK setcolorspace
- 6 -2 roll pop pop
- }{
- //Adobe_AGM_Core begin
- /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf
- end
- [/Separation 4 -1 roll/DeviceCMYK
- {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
- ]
- setcolorspace
- }ifelse
- setcolor
- }ndf
- /setseparationgray
- {
- [/Separation(All)/DeviceGray{}]setcolorspace_opt
- 1 exch sub setcolor
- }ndf
- }{
- /setseparationgray
- {
- AGMCORE_&setgray
- }ndf
- }ifelse
- /findcmykcustomcolor
- {
- 5 makereadonlyarray
- }ndf
- /setcustomcolor
- {
- exch aload pop pop
- 4{4 index mul 4 1 roll}repeat
- setcmykcolor pop
- }ndf
- /has_color
- /colorimage where{
- AGMCORE_producing_seps{
- pop true
- }{
- systemdict eq
- }ifelse
- }{
- false
- }ifelse
- def
- /map_index
- {
- 1 index mul exch getinterval{255 div}forall
- }bdf
- /map_indexed_devn
- {
- Lookup Names length 3 -1 roll cvi map_index
- }bdf
- /n_color_components
- {
- base_colorspace_type
- dup/DeviceGray eq{
- pop 1
- }{
- /DeviceCMYK eq{
- 4
- }{
- 3
- }ifelse
- }ifelse
- }bdf
- level2{
- /mo/moveto ldf
- /li/lineto ldf
- /cv/curveto ldf
- /knockout_unitsq
- {
- 1 setgray
- 0 0 1 1 rectfill
- }def
- level2/setcolorspace AGMCORE_key_known not and{
- /AGMCORE_&&&setcolorspace/setcolorspace ldf
- /AGMCORE_ReplaceMappedColor
- {
- dup type dup/arraytype eq exch/packedarraytype eq or
- {
- /AGMCORE_SpotAliasAry2 where{
- begin
- dup 0 get dup/Separation eq
- {
- pop
- dup length array copy
- dup dup 1 get
- current_spot_alias
- {
- dup map_alias
- {
- false set_spot_alias
- dup 1 exch setsepcolorspace
- true set_spot_alias
- begin
- /sep_colorspace_dict currentdict AGMCORE_gput
- pop pop pop
- [
- /Separation Name
- CSA map_csa
- MappedCSA
- /sep_colorspace_proc load
- ]
- dup Name
- end
- }if
- }if
- map_reserved_ink_name 1 xpt
- }{
- /DeviceN eq
- {
- dup length array copy
- dup dup 1 get[
- exch{
- current_spot_alias{
- dup map_alias{
- /Name get exch pop
- }if
- }if
- map_reserved_ink_name
- }forall
- ]1 xpt
- }if
- }ifelse
- end
- }if
- }if
- }def
- /setcolorspace
- {
- dup type dup/arraytype eq exch/packedarraytype eq or
- {
- dup 0 get/Indexed eq
- {
- AGMCORE_distilling
- {
- /PhotoshopDuotoneList where
- {
- pop false
- }{
- true
- }ifelse
- }{
- true
- }ifelse
- {
- aload pop 3 -1 roll
- AGMCORE_ReplaceMappedColor
- 3 1 roll 4 array astore
- }if
- }{
- AGMCORE_ReplaceMappedColor
- }ifelse
- }if
- DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if
- }def
- }if
- }{
- /adj
- {
- currentstrokeadjust{
- transform
- 0.25 sub round 0.25 add exch
- 0.25 sub round 0.25 add exch
- itransform
- }if
- }def
- /mo{
- adj moveto
- }def
- /li{
- adj lineto
- }def
- /cv{
- 6 2 roll adj
- 6 2 roll adj
- 6 2 roll adj curveto
- }def
- /knockout_unitsq
- {
- 1 setgray
- 8 8 1[8 0 0 8 0 0]{<ffffffffffffffff>}image
- }def
- /currentstrokeadjust{
- /currentstrokeadjust AGMCORE_gget
- }def
- /setstrokeadjust{
- /currentstrokeadjust exch AGMCORE_gput
- }def
- /setcolorspace
- {
- /currentcolorspace exch AGMCORE_gput
- }def
- /currentcolorspace
- {
- /currentcolorspace AGMCORE_gget
- }def
- /setcolor_devicecolor
- {
- base_colorspace_type
- dup/DeviceGray eq{
- pop setgray
- }{
- /DeviceCMYK eq{
- setcmykcolor
- }{
- setrgbcolor
- }ifelse
- }ifelse
- }def
- /setcolor
- {
- currentcolorspace 0 get
- dup/DeviceGray ne{
- dup/DeviceCMYK ne{
- dup/DeviceRGB ne{
- dup/Separation eq{
- pop
- currentcolorspace 3 gx
- currentcolorspace 2 get
- }{
- dup/Indexed eq{
- pop
- currentcolorspace 3 get dup type/stringtype eq{
- currentcolorspace 1 get n_color_components
- 3 -1 roll map_index
- }{
- exec
- }ifelse
- currentcolorspace 1 get
- }{
- /AGMCORE_cur_err/AGMCORE_invalid_color_space def
- AGMCORE_invalid_color_space
- }ifelse
- }ifelse
- }if
- }if
- }if
- setcolor_devicecolor
- }def
- }ifelse
- /sop/setoverprint ldf
- /lw/setlinewidth ldf
- /lc/setlinecap ldf
- /lj/setlinejoin ldf
- /ml/setmiterlimit ldf
- /dsh/setdash ldf
- /sadj/setstrokeadjust ldf
- /gry/setgray ldf
- /rgb/setrgbcolor ldf
- /cmyk[
- /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx
- /setcmykcolor load dup type/operatortype ne{/exec cvx}if
- ]cvx bdf
- level3 AGMCORE_host_sep not and{
- /nzopmsc{
- 6 dict begin
- /kk exch def
- /yy exch def
- /mm exch def
- /cc exch def
- /sum 0 def
- cc 0 ne{/sum sum 2#1000 or def cc}if
- mm 0 ne{/sum sum 2#0100 or def mm}if
- yy 0 ne{/sum sum 2#0010 or def yy}if
- kk 0 ne{/sum sum 2#0001 or def kk}if
- AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace
- sum 0 eq{0}if
- end
- setcolor
- }bdf
- }{
- /nzopmsc/cmyk ldf
- }ifelse
- /sep/setsepcolor ldf
- /devn/setdevicencolor ldf
- /idx/setindexedcolor ldf
- /colr/setcolor ldf
- /csacrd/set_csa_crd ldf
- /sepcs/setsepcolorspace ldf
- /devncs/setdevicencolorspace ldf
- /idxcs/setindexedcolorspace ldf
- /cp/closepath ldf
- /clp/clp_npth ldf
- /eclp/eoclp_npth ldf
- /f/fill ldf
- /ef/eofill ldf
- /@/stroke ldf
- /nclp/npth_clp ldf
- /gset/graphic_setup ldf
- /gcln/graphic_cleanup ldf
- /ct/concat ldf
- /cf/currentfile ldf
- /fl/filter ldf
- /rs/readstring ldf
- /AGMCORE_def_ht currenthalftone def
- /clonedict Adobe_AGM_Utils begin/clonedict load end def
- /clonearray Adobe_AGM_Utils begin/clonearray load end def
- currentdict{
- dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
- bind
- }if
- def
- }forall
- /getrampcolor
- {
- /indx exch def
- 0 1 NumComp 1 sub
- {
- dup
- Samples exch get
- dup type/stringtype eq{indx get}if
- exch
- Scaling exch get aload pop
- 3 1 roll
- mul add
- }for
- ColorSpaceFamily/Separation eq
- {sep}
- {
- ColorSpaceFamily/DeviceN eq
- {devn}{setcolor}ifelse
- }ifelse
- }bdf
- /sssetbackground{
- aload pop
- ColorSpaceFamily/Separation eq
- {sep}
- {
- ColorSpaceFamily/DeviceN eq
- {devn}{setcolor}ifelse
- }ifelse
- }bdf
- /RadialShade
- {
- 40 dict begin
- /ColorSpaceFamily xdf
- /background xdf
- /ext1 xdf
- /ext0 xdf
- /BBox xdf
- /r2 xdf
- /c2y xdf
- /c2x xdf
- /r1 xdf
- /c1y xdf
- /c1x xdf
- /rampdict xdf
- /setinkoverprint where{pop/setinkoverprint{pop}def}if
- gsave
- BBox length 0 gt
- {
- np
- BBox 0 get BBox 1 get moveto
- BBox 2 get BBox 0 get sub 0 rlineto
- 0 BBox 3 get BBox 1 get sub rlineto
- BBox 2 get BBox 0 get sub neg 0 rlineto
- closepath
- clip
- np
- }if
- c1x c2x eq
- {
- c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse
- }{
- /slope c2y c1y sub c2x c1x sub div def
- /theta slope 1 atan def
- c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if
- c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if
- }ifelse
- gsave
- clippath
- c1x c1y translate
- theta rotate
- -90 rotate
- {pathbbox}stopped
- {0 0 0 0}if
- /yMax xdf
- /xMax xdf
- /yMin xdf
- /xMin xdf
- grestore
- xMax xMin eq yMax yMin eq or
- {
- grestore
- end
- }{
- /max{2 copy gt{pop}{exch pop}ifelse}bdf
- /min{2 copy lt{pop}{exch pop}ifelse}bdf
- rampdict begin
- 40 dict begin
- background length 0 gt{background sssetbackground gsave clippath fill grestore}if
- gsave
- c1x c1y translate
- theta rotate
- -90 rotate
- /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
- /c1y 0 def
- /c1x 0 def
- /c2x 0 def
- ext0
- {
- 0 getrampcolor
- c2y r2 add r1 sub 0.0001 lt
- {
- c1x c1y r1 360 0 arcn
- pathbbox
- /aymax exch def
- /axmax exch def
- /aymin exch def
- /axmin exch def
- /bxMin xMin axmin min def
- /byMin yMin aymin min def
- /bxMax xMax axmax max def
- /byMax yMax aymax max def
- bxMin byMin moveto
- bxMax byMin lineto
- bxMax byMax lineto
- bxMin byMax lineto
- bxMin byMin lineto
- eofill
- }{
- c2y r1 add r2 le
- {
- c1x c1y r1 0 360 arc
- fill
- }
- {
- c2x c2y r2 0 360 arc fill
- r1 r2 eq
- {
- /p1x r1 neg def
- /p1y c1y def
- /p2x r1 def
- /p2y c1y def
- p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
- fill
- }{
- /AA r2 r1 sub c2y div def
- AA -1 eq
- {/theta 89.99 def}
- {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
- ifelse
- /SS1 90 theta add dup sin exch cos div def
- /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
- /p1y p1x SS1 div neg def
- /SS2 90 theta sub dup sin exch cos div def
- /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
- /p2y p2x SS2 div neg def
- r1 r2 gt
- {
- /L1maxX p1x yMin p1y sub SS1 div add def
- /L2maxX p2x yMin p2y sub SS2 div add def
- }{
- /L1maxX 0 def
- /L2maxX 0 def
- }ifelse
- p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
- L1maxX L1maxX p1x sub SS1 mul p1y add lineto
- fill
- }ifelse
- }ifelse
- }ifelse
- }if
- c1x c2x sub dup mul
- c1y c2y sub dup mul
- add 0.5 exp
- 0 dtransform
- dup mul exch dup mul add 0.5 exp 72 div
- 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 1 index 1 index lt{exch}if pop
- /hires xdf
- hires mul
- /numpix xdf
- /numsteps NumSamples def
- /rampIndxInc 1 def
- /subsampling false def
- numpix 0 ne
- {
- NumSamples numpix div 0.5 gt
- {
- /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
- /rampIndxInc NumSamples 1 sub numsteps div def
- /subsampling true def
- }if
- }if
- /xInc c2x c1x sub numsteps div def
- /yInc c2y c1y sub numsteps div def
- /rInc r2 r1 sub numsteps div def
- /cx c1x def
- /cy c1y def
- /radius r1 def
- np
- xInc 0 eq yInc 0 eq rInc 0 eq and and
- {
- 0 getrampcolor
- cx cy radius 0 360 arc
- stroke
- NumSamples 1 sub getrampcolor
- cx cy radius 72 hires div add 0 360 arc
- 0 setlinewidth
- stroke
- }{
- 0
- numsteps
- {
- dup
- subsampling{round cvi}if
- getrampcolor
- cx cy radius 0 360 arc
- /cx cx xInc add def
- /cy cy yInc add def
- /radius radius rInc add def
- cx cy radius 360 0 arcn
- eofill
- rampIndxInc add
- }repeat
- pop
- }ifelse
- ext1
- {
- c2y r2 add r1 lt
- {
- c2x c2y r2 0 360 arc
- fill
- }{
- c2y r1 add r2 sub 0.0001 le
- {
- c2x c2y r2 360 0 arcn
- pathbbox
- /aymax exch def
- /axmax exch def
- /aymin exch def
- /axmin exch def
- /bxMin xMin axmin min def
- /byMin yMin aymin min def
- /bxMax xMax axmax max def
- /byMax yMax aymax max def
- bxMin byMin moveto
- bxMax byMin lineto
- bxMax byMax lineto
- bxMin byMax lineto
- bxMin byMin lineto
- eofill
- }{
- c2x c2y r2 0 360 arc fill
- r1 r2 eq
- {
- /p1x r2 neg def
- /p1y c2y def
- /p2x r2 def
- /p2y c2y def
- p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
- fill
- }{
- /AA r2 r1 sub c2y div def
- AA -1 eq
- {/theta 89.99 def}
- {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
- ifelse
- /SS1 90 theta add dup sin exch cos div def
- /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
- /p1y c2y p1x SS1 div sub def
- /SS2 90 theta sub dup sin exch cos div def
- /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
- /p2y c2y p2x SS2 div sub def
- r1 r2 lt
- {
- /L1maxX p1x yMax p1y sub SS1 div add def
- /L2maxX p2x yMax p2y sub SS2 div add def
- }{
- /L1maxX 0 def
- /L2maxX 0 def
- }ifelse
- p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
- L1maxX L1maxX p1x sub SS1 mul p1y add lineto
- fill
- }ifelse
- }ifelse
- }ifelse
- }if
- grestore
- grestore
- end
- end
- end
- }ifelse
- }bdf
- /GenStrips
- {
- 40 dict begin
- /ColorSpaceFamily xdf
- /background xdf
- /ext1 xdf
- /ext0 xdf
- /BBox xdf
- /y2 xdf
- /x2 xdf
- /y1 xdf
- /x1 xdf
- /rampdict xdf
- /setinkoverprint where{pop/setinkoverprint{pop}def}if
- gsave
- BBox length 0 gt
- {
- np
- BBox 0 get BBox 1 get moveto
- BBox 2 get BBox 0 get sub 0 rlineto
- 0 BBox 3 get BBox 1 get sub rlineto
- BBox 2 get BBox 0 get sub neg 0 rlineto
- closepath
- clip
- np
- }if
- x1 x2 eq
- {
- y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse
- }{
- /slope y2 y1 sub x2 x1 sub div def
- /theta slope 1 atan def
- x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if
- x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if
- }
- ifelse
- gsave
- clippath
- x1 y1 translate
- theta rotate
- {pathbbox}stopped
- {0 0 0 0}if
- /yMax exch def
- /xMax exch def
- /yMin exch def
- /xMin exch def
- grestore
- xMax xMin eq yMax yMin eq or
- {
- grestore
- end
- }{
- rampdict begin
- 20 dict begin
- background length 0 gt{background sssetbackground gsave clippath fill grestore}if
- gsave
- x1 y1 translate
- theta rotate
- /xStart 0 def
- /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
- /ySpan yMax yMin sub def
- /numsteps NumSamples def
- /rampIndxInc 1 def
- /subsampling false def
- xStart 0 transform
- xEnd 0 transform
- 3 -1 roll
- sub dup mul
- 3 1 roll
- sub dup mul
- add 0.5 exp 72 div
- 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
- 1 index 1 index lt{exch}if pop
- mul
- /numpix xdf
- numpix 0 ne
- {
- NumSamples numpix div 0.5 gt
- {
- /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
- /rampIndxInc NumSamples 1 sub numsteps div def
- /subsampling true def
- }if
- }if
- ext0
- {
- 0 getrampcolor
- xMin xStart lt
- {
- xMin yMin xMin neg ySpan rectfill
- }if
- }if
- /xInc xEnd xStart sub numsteps div def
- /x xStart def
- 0
- numsteps
- {
- dup
- subsampling{round cvi}if
- getrampcolor
- x yMin xInc ySpan rectfill
- /x x xInc add def
- rampIndxInc add
- }repeat
- pop
- ext1{
- xMax xEnd gt
- {
- xEnd yMin xMax xEnd sub ySpan rectfill
- }if
- }if
- grestore
- grestore
- end
- end
- end
- }ifelse
- }bdf
-}def
-/pt
-{
- end
-}def
-/dt{
-}def
-/pgsv{
- //Adobe_AGM_Core/AGMCORE_save save put
-}def
-/pgrs{
- //Adobe_AGM_Core/AGMCORE_save get restore
-}def
-systemdict/findcolorrendering known{
- /findcolorrendering systemdict/findcolorrendering get def
-}if
-systemdict/setcolorrendering known{
- /setcolorrendering systemdict/setcolorrendering get def
-}if
-/test_cmyk_color_plate
-{
- gsave
- setcmykcolor currentgray 1 ne
- grestore
-}def
-/inRip_spot_has_ink
-{
- dup//Adobe_AGM_Core/AGMCORE_name xddf
- convert_spot_to_process not
-}def
-/map255_to_range
-{
- 1 index sub
- 3 -1 roll 255 div mul add
-}def
-/set_csa_crd
-{
- /sep_colorspace_dict null AGMCORE_gput
- begin
- CSA get_csa_by_name setcolorspace_opt
- set_crd
- end
-}
-def
-/map_csa
-{
- currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse
- {pop}{get_csa_by_name/MappedCSA xdf}ifelse
-}def
-/setsepcolor
-{
- /sep_colorspace_dict AGMCORE_gget begin
- dup/sep_tint exch AGMCORE_gput
- TintProc
- end
-}def
-/setdevicencolor
-{
- /devicen_colorspace_dict AGMCORE_gget begin
- Names length copy
- Names length 1 sub -1 0
- {
- /devicen_tints AGMCORE_gget 3 1 roll xpt
- }for
- TintProc
- end
-}def
-/sep_colorspace_proc
-{
- /AGMCORE_tmp exch store
- /sep_colorspace_dict AGMCORE_gget begin
- currentdict/Components known{
- Components aload pop
- TintMethod/Lab eq{
- 2{AGMCORE_tmp mul NComponents 1 roll}repeat
- LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
- }{
- TintMethod/Subtractive eq{
- NComponents{
- AGMCORE_tmp mul NComponents 1 roll
- }repeat
- }{
- NComponents{
- 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
- }repeat
- }ifelse
- }ifelse
- }{
- ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
- aload pop
- }ifelse
- end
-}def
-/sep_colorspace_gray_proc
-{
- /AGMCORE_tmp exch store
- /sep_colorspace_dict AGMCORE_gget begin
- GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
- end
-}def
-/sep_proc_name
-{
- dup 0 get
- dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{
- pop[/DeviceGray]
- /sep_colorspace_gray_proc
- }{
- /sep_colorspace_proc
- }ifelse
-}def
-/setsepcolorspace
-{
- current_spot_alias{
- dup begin
- Name map_alias{
- exch pop
- }if
- end
- }if
- dup/sep_colorspace_dict exch AGMCORE_gput
- begin
- CSA map_csa
- /AGMCORE_sep_special Name dup()eq exch(All)eq or store
- AGMCORE_avoid_L2_sep_space{
- [/Indexed MappedCSA sep_proc_name 255 exch
- {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx
- ]setcolorspace_opt
- /TintProc{
- 255 mul round cvi setcolor
- }bdf
- }{
- MappedCSA 0 get/DeviceCMYK eq
- currentdict/Components known and
- AGMCORE_sep_special not and{
- /TintProc[
- Components aload pop Name findcmykcustomcolor
- /exch cvx/setcustomcolor cvx
- ]cvx bdf
- }{
- AGMCORE_host_sep Name(All)eq and{
- /TintProc{
- 1 exch sub setseparationgray
- }bdf
- }{
- AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and
- AGMCORE_host_sep or
- Name()eq and{
- /TintProc[
- MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{
- cvx/setcmykcolor cvx
- }{
- cvx/setgray cvx
- }ifelse
- ]cvx bdf
- }{
- AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{
- /TintProc[
- /dup cvx
- MappedCSA sep_proc_name cvx exch
- 0 get/DeviceGray eq{
- 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx
- }if
- /Name cvx/findcmykcustomcolor cvx/exch cvx
- AGMCORE_host_sep{
- AGMCORE_is_cmyk_sep
- /Name cvx
- /AGMCORE_IsSeparationAProcessColor load/exec cvx
- /not cvx/and cvx
- }{
- Name inRip_spot_has_ink not
- }ifelse
- [
- /pop cvx 1
- ]cvx/if cvx
- /setcustomcolor cvx
- ]cvx bdf
- }{
- /TintProc{setcolor}bdf
- [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- set_crd
- setsepcolor
- end
-}def
-/additive_blend
-{
- 3 dict begin
- /numarrays xdf
- /numcolors xdf
- 0 1 numcolors 1 sub
- {
- /c1 xdf
- 1
- 0 1 numarrays 1 sub
- {
- 1 exch add/index cvx
- c1/get cvx/mul cvx
- }for
- numarrays 1 add 1/roll cvx
- }for
- numarrays[/pop cvx]cvx/repeat cvx
- end
-}def
-/subtractive_blend
-{
- 3 dict begin
- /numarrays xdf
- /numcolors xdf
- 0 1 numcolors 1 sub
- {
- /c1 xdf
- 1 1
- 0 1 numarrays 1 sub
- {
- 1 3 3 -1 roll add/index cvx
- c1/get cvx/sub cvx/mul cvx
- }for
- /sub cvx
- numarrays 1 add 1/roll cvx
- }for
- numarrays[/pop cvx]cvx/repeat cvx
- end
-}def
-/exec_tint_transform
-{
- /TintProc[
- /TintTransform cvx/setcolor cvx
- ]cvx bdf
- MappedCSA setcolorspace_opt
-}bdf
-/devn_makecustomcolor
-{
- 2 dict begin
- /names_index xdf
- /Names xdf
- 1 1 1 1 Names names_index get findcmykcustomcolor
- /devicen_tints AGMCORE_gget names_index get setcustomcolor
- Names length{pop}repeat
- end
-}bdf
-/setdevicencolorspace
-{
- dup/AliasedColorants known{false}{true}ifelse
- current_spot_alias and{
- 7 dict begin
- /names_index 0 def
- dup/names_len exch/Names get length def
- /new_names names_len array def
- /new_LookupTables names_len array def
- /alias_cnt 0 def
- dup/Names get
- {
- dup map_alias{
- exch pop
- dup/ColorLookup known{
- dup begin
- new_LookupTables names_index ColorLookup put
- end
- }{
- dup/Components known{
- dup begin
- new_LookupTables names_index Components put
- end
- }{
- dup begin
- new_LookupTables names_index[null null null null]put
- end
- }ifelse
- }ifelse
- new_names names_index 3 -1 roll/Name get put
- /alias_cnt alias_cnt 1 add def
- }{
- /name xdf
- new_names names_index name put
- dup/LookupTables known{
- dup begin
- new_LookupTables names_index LookupTables names_index get put
- end
- }{
- dup begin
- new_LookupTables names_index[null null null null]put
- end
- }ifelse
- }ifelse
- /names_index names_index 1 add def
- }forall
- alias_cnt 0 gt{
- /AliasedColorants true def
- /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def
- 0 1 names_len 1 sub{
- /names_index xdf
- new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{
- /AliasedColorants false def
- exit
- }{
- new_LookupTables names_index get 0 get null eq{
- dup/Names get names_index get/name xdf
- name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq
- or or or not{
- /AliasedColorants false def
- exit
- }if
- }if
- }ifelse
- }for
- lut_entry_len 1 eq{
- /AliasedColorants false def
- }if
- AliasedColorants{
- dup begin
- /Names new_names def
- /LookupTables new_LookupTables def
- /AliasedColorants true def
- /NComponents lut_entry_len def
- /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def
- /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def
- currentdict/TTTablesIdx known not{
- /TTTablesIdx -1 def
- }if
- end
- }if
- }if
- end
- }if
- dup/devicen_colorspace_dict exch AGMCORE_gput
- begin
- currentdict/AliasedColorants known{
- AliasedColorants
- }{
- false
- }ifelse
- dup not{
- CSA map_csa
- }if
- /TintTransform load type/nulltype eq or{
- /TintTransform[
- 0 1 Names length 1 sub
- {
- /TTTablesIdx TTTablesIdx 1 add def
- dup LookupTables exch get dup 0 get null eq
- {
- 1 index
- Names exch get
- dup(Cyan)eq
- {
- pop exch
- LookupTables length exch sub
- /index cvx
- 0 0 0
- }
- {
- dup(Magenta)eq
- {
- pop exch
- LookupTables length exch sub
- /index cvx
- 0/exch cvx 0 0
- }{
- (Yellow)eq
- {
- exch
- LookupTables length exch sub
- /index cvx
- 0 0 3 -1/roll cvx 0
- }{
- exch
- LookupTables length exch sub
- /index cvx
- 0 0 0 4 -1/roll cvx
- }ifelse
- }ifelse
- }ifelse
- 5 -1/roll cvx/astore cvx
- }{
- dup length 1 sub
- LookupTables length 4 -1 roll sub 1 add
- /index cvx/mul cvx/round cvx/cvi cvx/get cvx
- }ifelse
- Names length TTTablesIdx add 1 add 1/roll cvx
- }for
- Names length[/pop cvx]cvx/repeat cvx
- NComponents Names length
- TintMethod/Subtractive eq
- {
- subtractive_blend
- }{
- additive_blend
- }ifelse
- ]cvx bdf
- }if
- AGMCORE_host_sep{
- Names convert_to_process{
- exec_tint_transform
- }
- {
- currentdict/AliasedColorants known{
- AliasedColorants not
- }{
- false
- }ifelse
- 5 dict begin
- /AvoidAliasedColorants xdf
- /painted? false def
- /names_index 0 def
- /names_len Names length def
- AvoidAliasedColorants{
- /currentspotalias current_spot_alias def
- false set_spot_alias
- }if
- Names{
- AGMCORE_is_cmyk_sep{
- dup(Cyan)eq AGMCORE_cyan_plate and exch
- dup(Magenta)eq AGMCORE_magenta_plate and exch
- dup(Yellow)eq AGMCORE_yellow_plate and exch
- (Black)eq AGMCORE_black_plate and or or or{
- /devicen_colorspace_dict AGMCORE_gget/TintProc[
- Names names_index/devn_makecustomcolor cvx
- ]cvx ddf
- /painted? true def
- }if
- painted?{exit}if
- }{
- 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{
- /devicen_colorspace_dict AGMCORE_gget/TintProc[
- Names names_index/devn_makecustomcolor cvx
- ]cvx ddf
- /painted? true def
- exit
- }if
- }ifelse
- /names_index names_index 1 add def
- }forall
- AvoidAliasedColorants{
- currentspotalias set_spot_alias
- }if
- painted?{
- /devicen_colorspace_dict AGMCORE_gget/names_index names_index put
- }{
- /devicen_colorspace_dict AGMCORE_gget/TintProc[
- names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx
- 0 0 0 0/setcmykcolor cvx
- ]cvx ddf
- }ifelse
- end
- }ifelse
- }
- {
- AGMCORE_in_rip_sep{
- Names convert_to_process not
- }{
- level3
- }ifelse
- {
- [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt
- /TintProc level3 not AGMCORE_in_rip_sep and{
- [
- Names/length cvx[/pop cvx]cvx/repeat cvx
- ]cvx bdf
- }{
- {setcolor}bdf
- }ifelse
- }{
- exec_tint_transform
- }ifelse
- }ifelse
- set_crd
- /AliasedColorants false def
- end
-}def
-/setindexedcolorspace
-{
- dup/indexed_colorspace_dict exch AGMCORE_gput
- begin
- currentdict/CSDBase known{
- CSDBase/CSD get_res begin
- currentdict/Names known{
- currentdict devncs
- }{
- 1 currentdict sepcs
- }ifelse
- AGMCORE_host_sep{
- 4 dict begin
- /compCnt/Names where{pop Names length}{1}ifelse def
- /NewLookup HiVal 1 add string def
- 0 1 HiVal{
- /tableIndex xdf
- Lookup dup type/stringtype eq{
- compCnt tableIndex map_index
- }{
- exec
- }ifelse
- /Names where{
- pop setdevicencolor
- }{
- setsepcolor
- }ifelse
- currentgray
- tableIndex exch
- 255 mul cvi
- NewLookup 3 1 roll put
- }for
- [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt
- end
- }{
- level3
- {
- currentdict/Names known{
- [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt
- }{
- [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt
- }ifelse
- }{
- [/Indexed MappedCSA HiVal
- [
- currentdict/Names known{
- Lookup dup type/stringtype eq
- {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx}
- {/exec cvx}ifelse
- /TintTransform load/exec cvx
- }{
- Lookup dup type/stringtype eq
- {/exch cvx/get cvx 255/div cvx}
- {/exec cvx}ifelse
- CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx
- }ifelse
- ]cvx
- ]setcolorspace_opt
- }ifelse
- }ifelse
- end
- set_crd
- }
- {
- CSA map_csa
- AGMCORE_host_sep level2 not and{
- 0 0 0 0 setcmykcolor
- }{
- [/Indexed MappedCSA
- level2 not has_color not and{
- dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{
- pop[/DeviceGray]
- }if
- HiVal GrayLookup
- }{
- HiVal
- currentdict/RangeArray known{
- {
- /indexed_colorspace_dict AGMCORE_gget begin
- Lookup exch
- dup HiVal gt{
- pop HiVal
- }if
- NComponents mul NComponents getinterval{}forall
- NComponents 1 sub -1 0{
- RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
- NComponents 1 roll
- }for
- end
- }bind
- }{
- Lookup
- }ifelse
- }ifelse
- ]setcolorspace_opt
- set_crd
- }ifelse
- }ifelse
- end
-}def
-/setindexedcolor
-{
- AGMCORE_host_sep{
- /indexed_colorspace_dict AGMCORE_gget
- begin
- currentdict/CSDBase known{
- CSDBase/CSD get_res begin
- currentdict/Names known{
- map_indexed_devn
- devn
- }
- {
- Lookup 1 3 -1 roll map_index
- sep
- }ifelse
- end
- }{
- Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll
- map_index
- MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse
- }ifelse
- end
- }{
- level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{
- /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin
- map_indexed_devn
- devn
- end
- }
- {
- setcolor
- }ifelse
- }ifelse
-}def
-/ignoreimagedata
-{
- currentoverprint not{
- gsave
- dup clonedict begin
- 1 setgray
- /Decode[0 1]def
- /DataSource<FF>def
- /MultipleDataSources false def
- /BitsPerComponent 8 def
- currentdict end
- systemdict/image gx
- grestore
- }if
- consumeimagedata
-}def
-/add_res
-{
- dup/CSD eq{
- pop
- //Adobe_AGM_Core begin
- /AGMCORE_CSD_cache load 3 1 roll put
- end
- }{
- defineresource pop
- }ifelse
-}def
-/del_res
-{
- {
- aload pop exch
- dup/CSD eq{
- pop
- {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall
- }{
- exch
- {1 index undefineresource}forall
- pop
- }ifelse
- }forall
-}def
-/get_res
-{
- dup/CSD eq{
- pop
- dup type dup/nametype eq exch/stringtype eq or{
- AGMCORE_CSD_cache exch get
- }if
- }{
- findresource
- }ifelse
-}def
-/get_csa_by_name
-{
- dup type dup/nametype eq exch/stringtype eq or{
- /CSA get_res
- }if
-}def
-/paintproc_buf_init
-{
- /count get 0 0 put
-}def
-/paintproc_buf_next
-{
- dup/count get dup 0 get
- dup 3 1 roll
- 1 add 0 xpt
- get
-}def
-/cachepaintproc_compress
-{
- 5 dict begin
- currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
- /ppdict 20 dict def
- /string_size 16000 def
- /readbuffer string_size string def
- currentglobal true setglobal
- ppdict 1 array dup 0 1 put/count xpt
- setglobal
- /LZWFilter
- {
- exch
- dup length 0 eq{
- pop
- }{
- ppdict dup length 1 sub 3 -1 roll put
- }ifelse
- {string_size}{0}ifelse string
- }/LZWEncode filter def
- {
- ReadFilter readbuffer readstring
- exch LZWFilter exch writestring
- not{exit}if
- }loop
- LZWFilter closefile
- ppdict
- end
-}def
-/cachepaintproc
-{
- 2 dict begin
- currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
- /ppdict 20 dict def
- currentglobal true setglobal
- ppdict 1 array dup 0 1 put/count xpt
- setglobal
- {
- ReadFilter 16000 string readstring exch
- ppdict dup length 1 sub 3 -1 roll put
- not{exit}if
- }loop
- ppdict dup dup length 1 sub()put
- end
-}def
-/make_pattern
-{
- exch clonedict exch
- dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
- exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub
- exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub
- matrix translate exch matrix concatmatrix
- 1 index begin
- BBox 0 get XStep div cvi XStep mul/xshift exch neg def
- BBox 1 get YStep div cvi YStep mul/yshift exch neg def
- BBox 0 get xshift add
- BBox 1 get yshift add
- BBox 2 get xshift add
- BBox 3 get yshift add
- 4 array astore
- /BBox exch def
- [xshift yshift/translate load null/exec load]dup
- 3/PaintProc load put cvx/PaintProc exch def
- end
- gsave 0 setgray
- makepattern
- grestore
-}def
-/set_pattern
-{
- dup/PatternType get 1 eq{
- dup/PaintType get 1 eq{
- currentoverprint sop[/DeviceGray]setcolorspace 0 setgray
- }if
- }if
- setpattern
-}def
-/setcolorspace_opt
-{
- dup currentcolorspace eq{pop}{setcolorspace}ifelse
-}def
-/updatecolorrendering
-{
- currentcolorrendering/RenderingIntent known{
- currentcolorrendering/RenderingIntent get
- }
- {
- Intent/AbsoluteColorimetric eq
- {
- /absolute_colorimetric_crd AGMCORE_gget dup null eq
- }
- {
- Intent/RelativeColorimetric eq
- {
- /relative_colorimetric_crd AGMCORE_gget dup null eq
- }
- {
- Intent/Saturation eq
- {
- /saturation_crd AGMCORE_gget dup null eq
- }
- {
- /perceptual_crd AGMCORE_gget dup null eq
- }ifelse
- }ifelse
- }ifelse
- {
- pop null
- }
- {
- /RenderingIntent known{null}{Intent}ifelse
- }ifelse
- }ifelse
- Intent ne{
- Intent/ColorRendering{findresource}stopped
- {
- pop pop systemdict/findcolorrendering known
- {
- Intent findcolorrendering
- {
- /ColorRendering findresource true exch
- }
- {
- /ColorRendering findresource
- product(Xerox Phaser 5400)ne
- exch
- }ifelse
- dup Intent/AbsoluteColorimetric eq
- {
- /absolute_colorimetric_crd exch AGMCORE_gput
- }
- {
- Intent/RelativeColorimetric eq
- {
- /relative_colorimetric_crd exch AGMCORE_gput
- }
- {
- Intent/Saturation eq
- {
- /saturation_crd exch AGMCORE_gput
- }
- {
- Intent/Perceptual eq
- {
- /perceptual_crd exch AGMCORE_gput
- }
- {
- pop
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- 1 index{exch}{pop}ifelse
- }
- {false}ifelse
- }
- {true}ifelse
- {
- dup begin
- currentdict/TransformPQR known{
- currentdict/TransformPQR get aload pop
- 3{{}eq 3 1 roll}repeat or or
- }
- {true}ifelse
- currentdict/MatrixPQR known{
- currentdict/MatrixPQR get aload pop
- 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll
- 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll
- 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq
- and and and and and and and and
- }
- {true}ifelse
- end
- or
- {
- clonedict begin
- /TransformPQR[
- {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div
- 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind
- {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div
- 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind
- {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div
- 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind
- ]def
- /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def
- /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def
- currentdict end
- }if
- setcolorrendering_opt
- }if
- }if
-}def
-/set_crd
-{
- AGMCORE_host_sep not level2 and{
- currentdict/ColorRendering known{
- ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if
- }{
- currentdict/Intent known{
- updatecolorrendering
- }if
- }ifelse
- currentcolorspace dup type/arraytype eq
- {0 get}if
- /DeviceRGB eq
- {
- currentdict/UCR known
- {/UCR}{/AGMCORE_currentucr}ifelse
- load setundercolorremoval
- currentdict/BG known
- {/BG}{/AGMCORE_currentbg}ifelse
- load setblackgeneration
- }if
- }if
-}def
-/set_ucrbg
-{
- dup null eq {pop /AGMCORE_currentbg load}{/Procedure get_res}ifelse
- dup currentblackgeneration eq {pop}{setblackgeneration}ifelse
- dup null eq {pop /AGMCORE_currentucr load}{/Procedure get_res}ifelse
- dup currentundercolorremoval eq {pop}{setundercolorremoval}ifelse
-}def
-/setcolorrendering_opt
-{
- dup currentcolorrendering eq{
- pop
- }{
- product(HP Color LaserJet 2605)anchorsearch{
- pop pop pop
- }{
- pop
- clonedict
- begin
- /Intent Intent def
- currentdict
- end
- setcolorrendering
- }ifelse
- }ifelse
-}def
-/cpaint_gcomp
-{
- convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
- //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
- {
- (%end_cpaint_gcomp)flushinput
- }if
-}def
-/cpaint_gsep
-{
- //Adobe_AGM_Core/AGMCORE_ConvertToProcess get
- {
- (%end_cpaint_gsep)flushinput
- }if
-}def
-/cpaint_gend
-{np}def
-/T1_path
-{
- currentfile token pop currentfile token pop mo
- {
- currentfile token pop dup type/stringtype eq
- {pop exit}if
- 0 exch rlineto
- currentfile token pop dup type/stringtype eq
- {pop exit}if
- 0 rlineto
- }loop
-}def
-/T1_gsave
- level3
- {/clipsave}
- {/gsave}ifelse
- load def
-/T1_grestore
- level3
- {/cliprestore}
- {/grestore}ifelse
- load def
-/set_spot_alias_ary
-{
- dup inherit_aliases
- //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
-}def
-/set_spot_normalization_ary
-{
- dup inherit_aliases
- dup length
- /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if
- array
- //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf
- /AGMCORE_SpotAliasAry where{
- pop
- AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval
- AGMCORE_SpotAliasAry length
- }{0}ifelse
- AGMCORE_SpotAliasAry2 3 1 roll exch putinterval
- true set_spot_alias
-}def
-/inherit_aliases
-{
- {dup/Name get map_alias{/CSD put}{pop}ifelse}forall
-}def
-/set_spot_alias
-{
- /AGMCORE_SpotAliasAry2 where{
- /AGMCORE_current_spot_alias 3 -1 roll put
- }{
- pop
- }ifelse
-}def
-/current_spot_alias
-{
- /AGMCORE_SpotAliasAry2 where{
- /AGMCORE_current_spot_alias get
- }{
- false
- }ifelse
-}def
-/map_alias
-{
- /AGMCORE_SpotAliasAry2 where{
- begin
- /AGMCORE_name xdf
- false
- AGMCORE_SpotAliasAry2{
- dup/Name get AGMCORE_name eq{
- /CSD get/CSD get_res
- exch pop true
- exit
- }{
- pop
- }ifelse
- }forall
- end
- }{
- pop false
- }ifelse
-}bdf
-/spot_alias
-{
- true set_spot_alias
- /AGMCORE_&setcustomcolor AGMCORE_key_known not{
- //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put
- }if
- /customcolor_tint 1 AGMCORE_gput
- //Adobe_AGM_Core begin
- /setcustomcolor
- {
- //Adobe_AGM_Core begin
- dup/customcolor_tint exch AGMCORE_gput
- 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not
- current_spot_alias and{1 index 4 get map_alias}{false}ifelse
- {
- false set_spot_alias
- /sep_colorspace_dict AGMCORE_gget null ne
- {/sep_colorspace_dict AGMCORE_gget/ForeignContent known not}{false}ifelse
- 3 1 roll 2 index{
- exch pop/sep_tint AGMCORE_gget exch
- }if
- mark 3 1 roll
- setsepcolorspace
- counttomark 0 ne{
- setsepcolor
- }if
- pop
- not{/sep_tint 1.0 AGMCORE_gput/sep_colorspace_dict AGMCORE_gget/ForeignContent true put}if
- pop
- true set_spot_alias
- }{
- AGMCORE_&setcustomcolor
- }ifelse
- end
- }bdf
- end
-}def
-/begin_feature
-{
- Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
- count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
- {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
-}def
-/end_feature
-{
- 2 dict begin
- /spd/setpagedevice load def
- /setpagedevice{get_gstate spd set_gstate}def
- stopped{$error/newerror false put}if
- end
- count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
- countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
- {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
-}def
-/set_negative
-{
- //Adobe_AGM_Core begin
- /AGMCORE_inverting exch def
- level2{
- currentpagedevice/NegativePrint known AGMCORE_distilling not and{
- currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{
- true begin_feature true{
- <</NegativePrint//Adobe_AGM_Core/AGMCORE_inverting get>>setpagedevice
- }end_feature
- }if
- /AGMCORE_inverting false def
- }if
- }if
- AGMCORE_inverting{
- [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
- AGMCORE_distilling{
- erasepage
- }{
- gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse
- /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore
- }ifelse
- }if
- end
-}def
-/lw_save_restore_override{
- /md where{
- pop
- md begin
- initializepage
- /initializepage{}def
- /pmSVsetup{}def
- /endp{}def
- /pse{}def
- /psb{}def
- /orig_showpage where
- {pop}
- {/orig_showpage/showpage load def}
- ifelse
- /showpage{orig_showpage gR}def
- end
- }if
-}def
-/pscript_showpage_override{
- /NTPSOct95 where
- {
- begin
- showpage
- save
- /showpage/restore load def
- /restore{exch pop}def
- end
- }if
-}def
-/driver_media_override
-{
- /md where{
- pop
- md/initializepage known{
- md/initializepage{}put
- }if
- md/rC known{
- md/rC{4{pop}repeat}put
- }if
- }if
- /mysetup where{
- /mysetup[1 0 0 1 0 0]put
- }if
- Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put
- level2
- {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
-}def
-/capture_mysetup
-{
- /Pscript_Win_Data where{
- pop
- Pscript_Win_Data/mysetup known{
- Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put
- }if
- }if
-}def
-/restore_mysetup
-{
- /Pscript_Win_Data where{
- pop
- Pscript_Win_Data/mysetup known{
- Adobe_AGM_Core/save_mysetup known{
- Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put
- Adobe_AGM_Core/save_mysetup undef
- }if
- }if
- }if
-}def
-/driver_check_media_override
-{
- /PrepsDict where
- {pop}
- {
- Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne
- Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq
- {
- Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
- Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
- }if
- {
- Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix
- }if
- }ifelse
-}def
-AGMCORE_err_strings begin
- /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def
- /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def
- /AGMCORE_invalid_color_space(This job contains an invalid color space. )def
-end
-/set_def_ht
-{AGMCORE_def_ht sethalftone}def
-/set_def_flat
-{AGMCORE_Default_flatness setflat}def
-end
-systemdict/setpacking known
-{setpacking}if
-%%EndResource
-%%BeginResource: procset Adobe_CoolType_Core 2.31 0
-%%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved.
-%%Version: 2.31 0
-10 dict begin
-/Adobe_CoolType_Passthru currentdict def
-/Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def
-Adobe_CoolType_Core_Defined
- {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def}
-if
-userdict/Adobe_CoolType_Core 70 dict dup begin put
-/Adobe_CoolType_Version 2.31 def
-/Level2?
- systemdict/languagelevel known dup
- {pop systemdict/languagelevel get 2 ge}
- if def
-Level2? not
- {
- /currentglobal false def
- /setglobal/pop load def
- /gcheck{pop false}bind def
- /currentpacking false def
- /setpacking/pop load def
- /SharedFontDirectory 0 dict def
- }
-if
-currentpacking
-true setpacking
-currentglobal false setglobal
-userdict/Adobe_CoolType_Data 2 copy known not
- {2 copy 10 dict put}
-if
-get
- begin
- /@opStackCountByLevel 32 dict def
- /@opStackLevel 0 def
- /@dictStackCountByLevel 32 dict def
- /@dictStackLevel 0 def
- end
-setglobal
-currentglobal true setglobal
-userdict/Adobe_CoolType_GVMFonts known not
- {userdict/Adobe_CoolType_GVMFonts 10 dict put}
-if
-setglobal
-currentglobal false setglobal
-userdict/Adobe_CoolType_LVMFonts known not
- {userdict/Adobe_CoolType_LVMFonts 10 dict put}
-if
-setglobal
-/ct_VMDictPut
- {
- dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse
- 3 1 roll put
- }bind def
-/ct_VMDictUndef
- {
- dup Adobe_CoolType_GVMFonts exch known
- {Adobe_CoolType_GVMFonts exch undef}
- {
- dup Adobe_CoolType_LVMFonts exch known
- {Adobe_CoolType_LVMFonts exch undef}
- {pop}
- ifelse
- }ifelse
- }bind def
-/ct_str1 1 string def
-/ct_xshow
-{
- /_ct_na exch def
- /_ct_i 0 def
- currentpoint
- /_ct_y exch def
- /_ct_x exch def
- {
- pop pop
- ct_str1 exch 0 exch put
- ct_str1 show
- {_ct_na _ct_i get}stopped
- {pop pop}
- {
- _ct_x _ct_y moveto
- 0
- rmoveto
- }
- ifelse
- /_ct_i _ct_i 1 add def
- currentpoint
- /_ct_y exch def
- /_ct_x exch def
- }
- exch
- @cshow
-}bind def
-/ct_yshow
-{
- /_ct_na exch def
- /_ct_i 0 def
- currentpoint
- /_ct_y exch def
- /_ct_x exch def
- {
- pop pop
- ct_str1 exch 0 exch put
- ct_str1 show
- {_ct_na _ct_i get}stopped
- {pop pop}
- {
- _ct_x _ct_y moveto
- 0 exch
- rmoveto
- }
- ifelse
- /_ct_i _ct_i 1 add def
- currentpoint
- /_ct_y exch def
- /_ct_x exch def
- }
- exch
- @cshow
-}bind def
-/ct_xyshow
-{
- /_ct_na exch def
- /_ct_i 0 def
- currentpoint
- /_ct_y exch def
- /_ct_x exch def
- {
- pop pop
- ct_str1 exch 0 exch put
- ct_str1 show
- {_ct_na _ct_i get}stopped
- {pop pop}
- {
- {_ct_na _ct_i 1 add get}stopped
- {pop pop pop}
- {
- _ct_x _ct_y moveto
- rmoveto
- }
- ifelse
- }
- ifelse
- /_ct_i _ct_i 2 add def
- currentpoint
- /_ct_y exch def
- /_ct_x exch def
- }
- exch
- @cshow
-}bind def
-/xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def
-/ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def
-/xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def
-currentglobal true setglobal
-/ct_T3Defs
-{
-/BuildChar
-{
- 1 index/Encoding get exch get
- 1 index/BuildGlyph get exec
-}bind def
-/BuildGlyph
-{
- exch begin
- GlyphProcs exch get exec
- end
-}bind def
-}bind def
-setglobal
-/@_SaveStackLevels
- {
- Adobe_CoolType_Data
- begin
- /@vmState currentglobal def false setglobal
- @opStackCountByLevel
- @opStackLevel
- 2 copy known not
- {
- 2 copy
- 3 dict dup/args
- 7 index
- 5 add array put
- put get
- }
- {
- get dup/args get dup length 3 index lt
- {
- dup length 5 add array exch
- 1 index exch 0 exch putinterval
- 1 index exch/args exch put
- }
- {pop}
- ifelse
- }
- ifelse
- begin
- count 1 sub
- 1 index lt
- {pop count}
- if
- dup/argCount exch def
- dup 0 gt
- {
- args exch 0 exch getinterval
- astore pop
- }
- {pop}
- ifelse
- count
- /restCount exch def
- end
- /@opStackLevel @opStackLevel 1 add def
- countdictstack 1 sub
- @dictStackCountByLevel exch @dictStackLevel exch put
- /@dictStackLevel @dictStackLevel 1 add def
- @vmState setglobal
- end
- }bind def
-/@_RestoreStackLevels
- {
- Adobe_CoolType_Data
- begin
- /@opStackLevel @opStackLevel 1 sub def
- @opStackCountByLevel @opStackLevel get
- begin
- count restCount sub dup 0 gt
- {{pop}repeat}
- {pop}
- ifelse
- args 0 argCount getinterval{}forall
- end
- /@dictStackLevel @dictStackLevel 1 sub def
- @dictStackCountByLevel @dictStackLevel get
- end
- countdictstack exch sub dup 0 gt
- {{end}repeat}
- {pop}
- ifelse
- }bind def
-/@_PopStackLevels
- {
- Adobe_CoolType_Data
- begin
- /@opStackLevel @opStackLevel 1 sub def
- /@dictStackLevel @dictStackLevel 1 sub def
- end
- }bind def
-/@Raise
- {
- exch cvx exch errordict exch get exec
- stop
- }bind def
-/@ReRaise
- {
- cvx $error/errorname get errordict exch get exec
- stop
- }bind def
-/@Stopped
- {
- 0 @#Stopped
- }bind def
-/@#Stopped
- {
- @_SaveStackLevels
- stopped
- {@_RestoreStackLevels true}
- {@_PopStackLevels false}
- ifelse
- }bind def
-/@Arg
- {
- Adobe_CoolType_Data
- begin
- @opStackCountByLevel @opStackLevel 1 sub get
- begin
- args exch
- argCount 1 sub exch sub get
- end
- end
- }bind def
-currentglobal true setglobal
-/CTHasResourceForAllBug
- Level2?
- {
- 1 dict dup
- /@shouldNotDisappearDictValue true def
- Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put
- begin
- count @_SaveStackLevels
- {(*){pop stop}128 string/Category resourceforall}
- stopped pop
- @_RestoreStackLevels
- currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll
- {
- /@shouldNotDisappearDictValue known
- {
- {
- end
- currentdict 1 index eq
- {pop exit}
- if
- }
- loop
- }
- if
- }
- {
- pop
- end
- }
- ifelse
- }
- {false}
- ifelse
- def
-true setglobal
-/CTHasResourceStatusBug
- Level2?
- {
- mark
- {/steveamerige/Category resourcestatus}
- stopped
- {cleartomark true}
- {cleartomark currentglobal not}
- ifelse
- }
- {false}
- ifelse
- def
-setglobal
-/CTResourceStatus
- {
- mark 3 1 roll
- /Category findresource
- begin
- ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec
- {cleartomark false}
- {{3 2 roll pop true}{cleartomark false}ifelse}
- ifelse
- end
- }bind def
-/CTWorkAroundBugs
- {
- Level2?
- {
- /cid_PreLoad/ProcSet resourcestatus
- {
- pop pop
- currentglobal
- mark
- {
- (*)
- {
- dup/CMap CTHasResourceStatusBug
- {CTResourceStatus}
- {resourcestatus}
- ifelse
- {
- pop dup 0 eq exch 1 eq or
- {
- dup/CMap findresource gcheck setglobal
- /CMap undefineresource
- }
- {
- pop CTHasResourceForAllBug
- {exit}
- {stop}
- ifelse
- }
- ifelse
- }
- {pop}
- ifelse
- }
- 128 string/CMap resourceforall
- }
- stopped
- {cleartomark}
- stopped pop
- setglobal
- }
- if
- }
- if
- }bind def
-/ds
- {
- Adobe_CoolType_Core
- begin
- CTWorkAroundBugs
- /mo/moveto load def
- /nf/newencodedfont load def
- /msf{makefont setfont}bind def
- /uf{dup undefinefont ct_VMDictUndef}bind def
- /ur/undefineresource load def
- /chp/charpath load def
- /awsh/awidthshow load def
- /wsh/widthshow load def
- /ash/ashow load def
- /@xshow/xshow load def
- /@yshow/yshow load def
- /@xyshow/xyshow load def
- /@cshow/cshow load def
- /sh/show load def
- /rp/repeat load def
- /.n/.notdef def
- end
- currentglobal false setglobal
- userdict/Adobe_CoolType_Data 2 copy known not
- {2 copy 10 dict put}
- if
- get
- begin
- /AddWidths? false def
- /CC 0 def
- /charcode 2 string def
- /@opStackCountByLevel 32 dict def
- /@opStackLevel 0 def
- /@dictStackCountByLevel 32 dict def
- /@dictStackLevel 0 def
- /InVMFontsByCMap 10 dict def
- /InVMDeepCopiedFonts 10 dict def
- end
- setglobal
- }bind def
-/dt
- {
- currentdict Adobe_CoolType_Core eq
- {end}
- if
- }bind def
-/ps
- {
- Adobe_CoolType_Core begin
- Adobe_CoolType_GVMFonts begin
- Adobe_CoolType_LVMFonts begin
- SharedFontDirectory begin
- }bind def
-/pt
- {
- end
- end
- end
- end
- }bind def
-/unload
- {
- systemdict/languagelevel known
- {
- systemdict/languagelevel get 2 ge
- {
- userdict/Adobe_CoolType_Core 2 copy known
- {undef}
- {pop pop}
- ifelse
- }
- if
- }
- if
- }bind def
-/ndf
- {
- 1 index where
- {pop pop pop}
- {dup xcheck{bind}if def}
- ifelse
- }def
-/findfont systemdict
- begin
- userdict
- begin
- /globaldict where{/globaldict get begin}if
- dup where pop exch get
- /globaldict where{pop end}if
- end
- end
-Adobe_CoolType_Core_Defined
- {/systemfindfont exch def}
- {
- /findfont 1 index def
- /systemfindfont exch def
- }
-ifelse
-/undefinefont
- {pop}ndf
-/copyfont
- {
- currentglobal 3 1 roll
- 1 index gcheck setglobal
- dup null eq{0}{dup length}ifelse
- 2 index length add 1 add dict
- begin
- exch
- {
- 1 index/FID eq
- {pop pop}
- {def}
- ifelse
- }
- forall
- dup null eq
- {pop}
- {{def}forall}
- ifelse
- currentdict
- end
- exch setglobal
- }bind def
-/copyarray
- {
- currentglobal exch
- dup gcheck setglobal
- dup length array copy
- exch setglobal
- }bind def
-/newencodedfont
- {
- currentglobal
- {
- SharedFontDirectory 3 index known
- {SharedFontDirectory 3 index get/FontReferenced known}
- {false}
- ifelse
- }
- {
- FontDirectory 3 index known
- {FontDirectory 3 index get/FontReferenced known}
- {
- SharedFontDirectory 3 index known
- {SharedFontDirectory 3 index get/FontReferenced known}
- {false}
- ifelse
- }
- ifelse
- }
- ifelse
- dup
- {
- 3 index findfont/FontReferenced get
- 2 index dup type/nametype eq
- {findfont}
- if ne
- {pop false}
- if
- }
- if
- dup
- {
- 1 index dup type/nametype eq
- {findfont}
- if
- dup/CharStrings known
- {
- /CharStrings get length
- 4 index findfont/CharStrings get length
- ne
- {
- pop false
- }
- if
- }
- {pop}
- ifelse
- }
- if
- {
- pop
- 1 index findfont
- /Encoding get exch
- 0 1 255
- {2 copy get 3 index 3 1 roll put}
- for
- pop pop pop
- }
- {
- currentglobal
- 4 1 roll
- dup type/nametype eq
- {findfont}
- if
- dup gcheck setglobal
- dup dup maxlength 2 add dict
- begin
- exch
- {
- 1 index/FID ne
- 2 index/Encoding ne and
- {def}
- {pop pop}
- ifelse
- }
- forall
- /FontReferenced exch def
- /Encoding exch dup length array copy def
- /FontName 1 index dup type/stringtype eq{cvn}if def dup
- currentdict
- end
- definefont ct_VMDictPut
- setglobal
- }
- ifelse
- }bind def
-/SetSubstituteStrategy
- {
- $SubstituteFont
- begin
- dup type/dicttype ne
- {0 dict}
- if
- currentdict/$Strategies known
- {
- exch $Strategies exch
- 2 copy known
- {
- get
- 2 copy maxlength exch maxlength add dict
- begin
- {def}forall
- {def}forall
- currentdict
- dup/$Init known
- {dup/$Init get exec}
- if
- end
- /$Strategy exch def
- }
- {pop pop pop}
- ifelse
- }
- {pop pop}
- ifelse
- end
- }bind def
-/scff
- {
- $SubstituteFont
- begin
- dup type/stringtype eq
- {dup length exch}
- {null}
- ifelse
- /$sname exch def
- /$slen exch def
- /$inVMIndex
- $sname null eq
- {
- 1 index $str cvs
- dup length $slen sub $slen getinterval cvn
- }
- {$sname}
- ifelse def
- end
- {findfont}
- @Stopped
- {
- dup length 8 add string exch
- 1 index 0(BadFont:)putinterval
- 1 index exch 8 exch dup length string cvs putinterval cvn
- {findfont}
- @Stopped
- {pop/Courier findfont}
- if
- }
- if
- $SubstituteFont
- begin
- /$sname null def
- /$slen 0 def
- /$inVMIndex null def
- end
- }bind def
-/isWidthsOnlyFont
- {
- dup/WidthsOnly known
- {pop pop true}
- {
- dup/FDepVector known
- {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}
- {
- dup/FDArray known
- {/FDArray get{isWidthsOnlyFont dup{exit}if}forall}
- {pop}
- ifelse
- }
- ifelse
- }
- ifelse
- }bind def
-/ct_StyleDicts 4 dict dup begin
- /Adobe-Japan1 4 dict dup begin
- Level2?
- {
- /Serif
- /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus
- {pop pop/HeiseiMin-W3}
- {
- /CIDFont/Category resourcestatus
- {
- pop pop
- /HeiseiMin-W3/CIDFont resourcestatus
- {pop pop/HeiseiMin-W3}
- {/Ryumin-Light}
- ifelse
- }
- {/Ryumin-Light}
- ifelse
- }
- ifelse
- def
- /SansSerif
- /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus
- {pop pop/HeiseiKakuGo-W5}
- {
- /CIDFont/Category resourcestatus
- {
- pop pop
- /HeiseiKakuGo-W5/CIDFont resourcestatus
- {pop pop/HeiseiKakuGo-W5}
- {/GothicBBB-Medium}
- ifelse
- }
- {/GothicBBB-Medium}
- ifelse
- }
- ifelse
- def
- /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus
- {pop pop/HeiseiMaruGo-W4}
- {
- /CIDFont/Category resourcestatus
- {
- pop pop
- /HeiseiMaruGo-W4/CIDFont resourcestatus
- {pop pop/HeiseiMaruGo-W4}
- {
- /Jun101-Light-RKSJ-H/Font resourcestatus
- {pop pop/Jun101-Light}
- {SansSerif}
- ifelse
- }
- ifelse
- }
- {
- /Jun101-Light-RKSJ-H/Font resourcestatus
- {pop pop/Jun101-Light}
- {SansSerif}
- ifelse
- }
- ifelse
- }
- ifelse
- /RoundSansSerif exch def
- /Default Serif def
- }
- {
- /Serif/Ryumin-Light def
- /SansSerif/GothicBBB-Medium def
- {
- (fonts/Jun101-Light-83pv-RKSJ-H)status
- }stopped
- {pop}{
- {pop pop pop pop/Jun101-Light}
- {SansSerif}
- ifelse
- /RoundSansSerif exch def
- }ifelse
- /Default Serif def
- }
- ifelse
- end
- def
- /Adobe-Korea1 4 dict dup begin
- /Serif/HYSMyeongJo-Medium def
- /SansSerif/HYGoThic-Medium def
- /RoundSansSerif SansSerif def
- /Default Serif def
- end
- def
- /Adobe-GB1 4 dict dup begin
- /Serif/STSong-Light def
- /SansSerif/STHeiti-Regular def
- /RoundSansSerif SansSerif def
- /Default Serif def
- end
- def
- /Adobe-CNS1 4 dict dup begin
- /Serif/MKai-Medium def
- /SansSerif/MHei-Medium def
- /RoundSansSerif SansSerif def
- /Default Serif def
- end
- def
-end
-def
-Level2?{currentglobal true setglobal}if
-/ct_BoldRomanWidthProc
- {
- stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth
- 0 0
- }bind def
-/ct_Type0WidthProc
- {
- dup stringwidth 0 0 moveto
- 2 index true charpath pathbbox
- 0 -1
- 7 index 2 div .88
- setcachedevice2
- pop
- 0 0
- }bind def
-/ct_Type0WMode1WidthProc
- {
- dup stringwidth
- pop 2 div neg -0.88
- 2 copy
- moveto
- 0 -1
- 5 -1 roll true charpath pathbbox
- setcachedevice
- }bind def
-/cHexEncoding
-[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
-/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
-/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
-/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
-/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
-/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
-/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
-/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
-/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
-/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
-/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
-/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
-/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
-/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
-/ct_BoldBaseFont
- 11 dict begin
- /FontType 3 def
- /FontMatrix[1 0 0 1 0 0]def
- /FontBBox[0 0 1 1]def
- /Encoding cHexEncoding def
- /_setwidthProc/ct_BoldRomanWidthProc load def
- /_bcstr1 1 string def
- /BuildChar
- {
- exch begin
- _basefont setfont
- _bcstr1 dup 0 4 -1 roll put
- dup
- _setwidthProc
- 3 copy
- moveto
- show
- _basefonto setfont
- moveto
- show
- end
- }bind def
- currentdict
- end
-def
-systemdict/composefont known
-{
-/ct_DefineIdentity-H
-{
- /Identity-H/CMap resourcestatus
- {
- pop pop
- }
- {
- /CIDInit/ProcSet findresource begin
- 12 dict begin
- begincmap
- /CIDSystemInfo 3 dict dup begin
- /Registry(Adobe)def
- /Ordering(Identity)def
- /Supplement 0 def
- end def
- /CMapName/Identity-H def
- /CMapVersion 1.000 def
- /CMapType 1 def
- 1 begincodespacerange
- <0000><FFFF>
- endcodespacerange
- 1 begincidrange
- <0000><FFFF>0
- endcidrange
- endcmap
- CMapName currentdict/CMap defineresource pop
- end
- end
- }
- ifelse
-}
-def
-/ct_BoldBaseCIDFont
- 11 dict begin
- /CIDFontType 1 def
- /CIDFontName/ct_BoldBaseCIDFont def
- /FontMatrix[1 0 0 1 0 0]def
- /FontBBox[0 0 1 1]def
- /_setwidthProc/ct_Type0WidthProc load def
- /_bcstr2 2 string def
- /BuildGlyph
- {
- exch begin
- _basefont setfont
- _bcstr2 1 2 index 256 mod put
- _bcstr2 0 3 -1 roll 256 idiv put
- _bcstr2 dup _setwidthProc
- 3 copy
- moveto
- show
- _basefonto setfont
- moveto
- show
- end
- }bind def
- currentdict
- end
-def
-}if
-Level2?{setglobal}if
-/ct_CopyFont{
- {
- 1 index/FID ne 2 index/UniqueID ne and
- {def}{pop pop}ifelse
- }forall
-}bind def
-/ct_Type0CopyFont
-{
- exch
- dup length dict
- begin
- ct_CopyFont
- [
- exch
- FDepVector
- {
- dup/FontType get 0 eq
- {
- 1 index ct_Type0CopyFont
- /_ctType0 exch definefont
- }
- {
- /_ctBaseFont exch
- 2 index exec
- }
- ifelse
- exch
- }
- forall
- pop
- ]
- /FDepVector exch def
- currentdict
- end
-}bind def
-/ct_MakeBoldFont
-{
- dup/ct_SyntheticBold known
- {
- dup length 3 add dict begin
- ct_CopyFont
- /ct_StrokeWidth .03 0 FontMatrix idtransform pop def
- /ct_SyntheticBold true def
- currentdict
- end
- definefont
- }
- {
- dup dup length 3 add dict
- begin
- ct_CopyFont
- /PaintType 2 def
- /StrokeWidth .03 0 FontMatrix idtransform pop def
- /dummybold currentdict
- end
- definefont
- dup/FontType get dup 9 ge exch 11 le and
- {
- ct_BoldBaseCIDFont
- dup length 3 add dict copy begin
- dup/CIDSystemInfo get/CIDSystemInfo exch def
- ct_DefineIdentity-H
- /_Type0Identity/Identity-H 3 -1 roll[exch]composefont
- /_basefont exch def
- /_Type0Identity/Identity-H 3 -1 roll[exch]composefont
- /_basefonto exch def
- currentdict
- end
- /CIDFont defineresource
- }
- {
- ct_BoldBaseFont
- dup length 3 add dict copy begin
- /_basefont exch def
- /_basefonto exch def
- currentdict
- end
- definefont
- }
- ifelse
- }
- ifelse
-}bind def
-/ct_MakeBold{
- 1 index
- 1 index
- findfont
- currentglobal 5 1 roll
- dup gcheck setglobal
- dup
- /FontType get 0 eq
- {
- dup/WMode known{dup/WMode get 1 eq}{false}ifelse
- version length 4 ge
- and
- {version 0 4 getinterval cvi 2015 ge}
- {true}
- ifelse
- {/ct_Type0WidthProc}
- {/ct_Type0WMode1WidthProc}
- ifelse
- ct_BoldBaseFont/_setwidthProc 3 -1 roll load put
- {ct_MakeBoldFont}ct_Type0CopyFont definefont
- }
- {
- dup/_fauxfont known not 1 index/SubstMaster known not and
- {
- ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put
- ct_MakeBoldFont
- }
- {
- 2 index 2 index eq
- {exch pop }
- {
- dup length dict begin
- ct_CopyFont
- currentdict
- end
- definefont
- }
- ifelse
- }
- ifelse
- }
- ifelse
- pop pop pop
- setglobal
-}bind def
-/?str1 256 string def
-/?set
- {
- $SubstituteFont
- begin
- /$substituteFound false def
- /$fontname 1 index def
- /$doSmartSub false def
- end
- dup
- findfont
- $SubstituteFont
- begin
- $substituteFound
- {false}
- {
- dup/FontName known
- {
- dup/FontName get $fontname eq
- 1 index/DistillerFauxFont known not and
- /currentdistillerparams where
- {pop false 2 index isWidthsOnlyFont not and}
- if
- }
- {false}
- ifelse
- }
- ifelse
- exch pop
- /$doSmartSub true def
- end
- {
- 5 1 roll pop pop pop pop
- findfont
- }
- {
- 1 index
- findfont
- dup/FontType get 3 eq
- {
- 6 1 roll pop pop pop pop pop false
- }
- {pop true}
- ifelse
- {
- $SubstituteFont
- begin
- pop pop
- /$styleArray 1 index def
- /$regOrdering 2 index def
- pop pop
- 0 1 $styleArray length 1 sub
- {
- $styleArray exch get
- ct_StyleDicts $regOrdering
- 2 copy known
- {
- get
- exch 2 copy known not
- {pop/Default}
- if
- get
- dup type/nametype eq
- {
- ?str1 cvs length dup 1 add exch
- ?str1 exch(-)putinterval
- exch dup length exch ?str1 exch 3 index exch putinterval
- add ?str1 exch 0 exch getinterval cvn
- }
- {
- pop pop/Unknown
- }
- ifelse
- }
- {
- pop pop pop pop/Unknown
- }
- ifelse
- }
- for
- end
- findfont
- }if
- }
- ifelse
- currentglobal false setglobal 3 1 roll
- null copyfont definefont pop
- setglobal
- }bind def
-setpacking
-userdict/$SubstituteFont 25 dict put
-1 dict
- begin
- /SubstituteFont
- dup $error exch 2 copy known
- {get}
- {pop pop{pop/Courier}bind}
- ifelse def
- /currentdistillerparams where dup
- {
- pop pop
- currentdistillerparams/CannotEmbedFontPolicy 2 copy known
- {get/Error eq}
- {pop pop false}
- ifelse
- }
- if not
- {
- countdictstack array dictstack 0 get
- begin
- userdict
- begin
- $SubstituteFont
- begin
- /$str 128 string def
- /$fontpat 128 string def
- /$slen 0 def
- /$sname null def
- /$match false def
- /$fontname null def
- /$substituteFound false def
- /$inVMIndex null def
- /$doSmartSub true def
- /$depth 0 def
- /$fontname null def
- /$italicangle 26.5 def
- /$dstack null def
- /$Strategies 10 dict dup
- begin
- /$Type3Underprint
- {
- currentglobal exch false setglobal
- 11 dict
- begin
- /UseFont exch
- $WMode 0 ne
- {
- dup length dict copy
- dup/WMode $WMode put
- /UseFont exch definefont
- }
- if def
- /FontName $fontname dup type/stringtype eq{cvn}if def
- /FontType 3 def
- /FontMatrix[.001 0 0 .001 0 0]def
- /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def
- /FontBBox[0 0 0 0]def
- /CCInfo 7 dict dup
- begin
- /cc null def
- /x 0 def
- /y 0 def
- end def
- /BuildChar
- {
- exch
- begin
- CCInfo
- begin
- 1 string dup 0 3 index put exch pop
- /cc exch def
- UseFont 1000 scalefont setfont
- cc stringwidth/y exch def/x exch def
- x y setcharwidth
- $SubstituteFont/$Strategy get/$Underprint get exec
- 0 0 moveto cc show
- x y moveto
- end
- end
- }bind def
- currentdict
- end
- exch setglobal
- }bind def
- /$GetaTint
- 2 dict dup
- begin
- /$BuildFont
- {
- dup/WMode known
- {dup/WMode get}
- {0}
- ifelse
- /$WMode exch def
- $fontname exch
- dup/FontName known
- {
- dup/FontName get
- dup type/stringtype eq{cvn}if
- }
- {/unnamedfont}
- ifelse
- exch
- Adobe_CoolType_Data/InVMDeepCopiedFonts get
- 1 index/FontName get known
- {
- pop
- Adobe_CoolType_Data/InVMDeepCopiedFonts get
- 1 index get
- null copyfont
- }
- {$deepcopyfont}
- ifelse
- exch 1 index exch/FontBasedOn exch put
- dup/FontName $fontname dup type/stringtype eq{cvn}if put
- definefont
- Adobe_CoolType_Data/InVMDeepCopiedFonts get
- begin
- dup/FontBasedOn get 1 index def
- end
- }bind def
- /$Underprint
- {
- gsave
- x abs y abs gt
- {/y 1000 def}
- {/x -1000 def 500 120 translate}
- ifelse
- Level2?
- {
- [/Separation(All)/DeviceCMYK{0 0 0 1 pop}]
- setcolorspace
- }
- {0 setgray}
- ifelse
- 10 setlinewidth
- x .8 mul
- [7 3]
- {
- y mul 8 div 120 sub x 10 div exch moveto
- 0 y 4 div neg rlineto
- dup 0 rlineto
- 0 y 4 div rlineto
- closepath
- gsave
- Level2?
- {.2 setcolor}
- {.8 setgray}
- ifelse
- fill grestore
- stroke
- }
- forall
- pop
- grestore
- }bind def
- end def
- /$Oblique
- 1 dict dup
- begin
- /$BuildFont
- {
- currentglobal exch dup gcheck setglobal
- null copyfont
- begin
- /FontBasedOn
- currentdict/FontName known
- {
- FontName
- dup type/stringtype eq{cvn}if
- }
- {/unnamedfont}
- ifelse
- def
- /FontName $fontname dup type/stringtype eq{cvn}if def
- /currentdistillerparams where
- {pop}
- {
- /FontInfo currentdict/FontInfo known
- {FontInfo null copyfont}
- {2 dict}
- ifelse
- dup
- begin
- /ItalicAngle $italicangle def
- /FontMatrix FontMatrix
- [1 0 ItalicAngle dup sin exch cos div 1 0 0]
- matrix concatmatrix readonly
- end
- 4 2 roll def
- def
- }
- ifelse
- FontName currentdict
- end
- definefont
- exch setglobal
- }bind def
- end def
- /$None
- 1 dict dup
- begin
- /$BuildFont{}bind def
- end def
- end def
- /$Oblique SetSubstituteStrategy
- /$findfontByEnum
- {
- dup type/stringtype eq{cvn}if
- dup/$fontname exch def
- $sname null eq
- {$str cvs dup length $slen sub $slen getinterval}
- {pop $sname}
- ifelse
- $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval
- /$match false def
- $SubstituteFont/$dstack countdictstack array dictstack put
- mark
- {
- $fontpat 0 $slen 7 add getinterval
- {/$match exch def exit}
- $str filenameforall
- }
- stopped
- {
- cleardictstack
- currentdict
- true
- $SubstituteFont/$dstack get
- {
- exch
- {
- 1 index eq
- {pop false}
- {true}
- ifelse
- }
- {begin false}
- ifelse
- }
- forall
- pop
- }
- if
- cleartomark
- /$slen 0 def
- $match false ne
- {$match(fonts/)anchorsearch pop pop cvn}
- {/Courier}
- ifelse
- }bind def
- /$ROS 1 dict dup
- begin
- /Adobe 4 dict dup
- begin
- /Japan1 [/Ryumin-Light/HeiseiMin-W3
- /GothicBBB-Medium/HeiseiKakuGo-W5
- /HeiseiMaruGo-W4/Jun101-Light]def
- /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def
- /GB1 [/STSong-Light/STHeiti-Regular]def
- /CNS1 [/MKai-Medium/MHei-Medium]def
- end def
- end def
- /$cmapname null def
- /$deepcopyfont
- {
- dup/FontType get 0 eq
- {
- 1 dict dup/FontName/copied put copyfont
- begin
- /FDepVector FDepVector copyarray
- 0 1 2 index length 1 sub
- {
- 2 copy get $deepcopyfont
- dup/FontName/copied put
- /copied exch definefont
- 3 copy put pop pop
- }
- for
- def
- currentdict
- end
- }
- {$Strategies/$Type3Underprint get exec}
- ifelse
- }bind def
- /$buildfontname
- {
- dup/CIDFont findresource/CIDSystemInfo get
- begin
- Registry length Ordering length Supplement 8 string cvs
- 3 copy length 2 add add add string
- dup 5 1 roll dup 0 Registry putinterval
- dup 4 index(-)putinterval
- dup 4 index 1 add Ordering putinterval
- 4 2 roll add 1 add 2 copy(-)putinterval
- end
- 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch
- anchorsearch
- {pop pop 3 2 roll putinterval cvn/$cmapname exch def}
- {pop pop pop pop pop}
- ifelse
- length
- $str 1 index(-)putinterval 1 add
- $str 1 index $cmapname $fontpat cvs putinterval
- $cmapname length add
- $str exch 0 exch getinterval cvn
- }bind def
- /$findfontByROS
- {
- /$fontname exch def
- $ROS Registry 2 copy known
- {
- get Ordering 2 copy known
- {get}
- {pop pop[]}
- ifelse
- }
- {pop pop[]}
- ifelse
- false exch
- {
- dup/CIDFont resourcestatus
- {
- pop pop
- save
- 1 index/CIDFont findresource
- dup/WidthsOnly known
- {dup/WidthsOnly get}
- {false}
- ifelse
- exch pop
- exch restore
- {pop}
- {exch pop true exit}
- ifelse
- }
- {pop}
- ifelse
- }
- forall
- {$str cvs $buildfontname}
- {
- false(*)
- {
- save exch
- dup/CIDFont findresource
- dup/WidthsOnly known
- {dup/WidthsOnly get not}
- {true}
- ifelse
- exch/CIDSystemInfo get
- dup/Registry get Registry eq
- exch/Ordering get Ordering eq and and
- {exch restore exch pop true exit}
- {pop restore}
- ifelse
- }
- $str/CIDFont resourceforall
- {$buildfontname}
- {$fontname $findfontByEnum}
- ifelse
- }
- ifelse
- }bind def
- end
- end
- currentdict/$error known currentdict/languagelevel known and dup
- {pop $error/SubstituteFont known}
- if
- dup
- {$error}
- {Adobe_CoolType_Core}
- ifelse
- begin
- {
- /SubstituteFont
- /CMap/Category resourcestatus
- {
- pop pop
- {
- $SubstituteFont
- begin
- /$substituteFound true def
- dup length $slen gt
- $sname null ne or
- $slen 0 gt and
- {
- $sname null eq
- {dup $str cvs dup length $slen sub $slen getinterval cvn}
- {$sname}
- ifelse
- Adobe_CoolType_Data/InVMFontsByCMap get
- 1 index 2 copy known
- {
- get
- false exch
- {
- pop
- currentglobal
- {
- GlobalFontDirectory 1 index known
- {exch pop true exit}
- {pop}
- ifelse
- }
- {
- FontDirectory 1 index known
- {exch pop true exit}
- {
- GlobalFontDirectory 1 index known
- {exch pop true exit}
- {pop}
- ifelse
- }
- ifelse
- }
- ifelse
- }
- forall
- }
- {pop pop false}
- ifelse
- {
- exch pop exch pop
- }
- {
- dup/CMap resourcestatus
- {
- pop pop
- dup/$cmapname exch def
- /CMap findresource/CIDSystemInfo get{def}forall
- $findfontByROS
- }
- {
- 128 string cvs
- dup(-)search
- {
- 3 1 roll search
- {
- 3 1 roll pop
- {dup cvi}
- stopped
- {pop pop pop pop pop $findfontByEnum}
- {
- 4 2 roll pop pop
- exch length
- exch
- 2 index length
- 2 index
- sub
- exch 1 sub -1 0
- {
- $str cvs dup length
- 4 index
- 0
- 4 index
- 4 3 roll add
- getinterval
- exch 1 index exch 3 index exch
- putinterval
- dup/CMap resourcestatus
- {
- pop pop
- 4 1 roll pop pop pop
- dup/$cmapname exch def
- /CMap findresource/CIDSystemInfo get{def}forall
- $findfontByROS
- true exit
- }
- {pop}
- ifelse
- }
- for
- dup type/booleantype eq
- {pop}
- {pop pop pop $findfontByEnum}
- ifelse
- }
- ifelse
- }
- {pop pop pop $findfontByEnum}
- ifelse
- }
- {pop pop $findfontByEnum}
- ifelse
- }
- ifelse
- }
- ifelse
- }
- {//SubstituteFont exec}
- ifelse
- /$slen 0 def
- end
- }
- }
- {
- {
- $SubstituteFont
- begin
- /$substituteFound true def
- dup length $slen gt
- $sname null ne or
- $slen 0 gt and
- {$findfontByEnum}
- {//SubstituteFont exec}
- ifelse
- end
- }
- }
- ifelse
- bind readonly def
- Adobe_CoolType_Core/scfindfont/systemfindfont load put
- }
- {
- /scfindfont
- {
- $SubstituteFont
- begin
- dup systemfindfont
- dup/FontName known
- {dup/FontName get dup 3 index ne}
- {/noname true}
- ifelse
- dup
- {
- /$origfontnamefound 2 index def
- /$origfontname 4 index def/$substituteFound true def
- }
- if
- exch pop
- {
- $slen 0 gt
- $sname null ne
- 3 index length $slen gt or and
- {
- pop dup $findfontByEnum findfont
- dup maxlength 1 add dict
- begin
- {1 index/FID eq{pop pop}{def}ifelse}
- forall
- currentdict
- end
- definefont
- dup/FontName known{dup/FontName get}{null}ifelse
- $origfontnamefound ne
- {
- $origfontname $str cvs print
- ( substitution revised, using )print
- dup/FontName known
- {dup/FontName get}{(unspecified font)}
- ifelse
- $str cvs print(.\n)print
- }
- if
- }
- {exch pop}
- ifelse
- }
- {exch pop}
- ifelse
- end
- }bind def
- }
- ifelse
- end
- end
- Adobe_CoolType_Core_Defined not
- {
- Adobe_CoolType_Core/findfont
- {
- $SubstituteFont
- begin
- $depth 0 eq
- {
- /$fontname 1 index dup type/stringtype ne{$str cvs}if def
- /$substituteFound false def
- }
- if
- /$depth $depth 1 add def
- end
- scfindfont
- $SubstituteFont
- begin
- /$depth $depth 1 sub def
- $substituteFound $depth 0 eq and
- {
- $inVMIndex null ne
- {dup $inVMIndex $AddInVMFont}
- if
- $doSmartSub
- {
- currentdict/$Strategy known
- {$Strategy/$BuildFont get exec}
- if
- }
- if
- }
- if
- end
- }bind put
- }
- if
- }
- if
- end
-/$AddInVMFont
- {
- exch/FontName 2 copy known
- {
- get
- 1 dict dup begin exch 1 index gcheck def end exch
- Adobe_CoolType_Data/InVMFontsByCMap get exch
- $DictAdd
- }
- {pop pop pop}
- ifelse
- }bind def
-/$DictAdd
- {
- 2 copy known not
- {2 copy 4 index length dict put}
- if
- Level2? not
- {
- 2 copy get dup maxlength exch length 4 index length add lt
- 2 copy get dup length 4 index length add exch maxlength 1 index lt
- {
- 2 mul dict
- begin
- 2 copy get{forall}def
- 2 copy currentdict put
- end
- }
- {pop}
- ifelse
- }
- if
- get
- begin
- {def}
- forall
- end
- }bind def
-end
-end
-%%EndResource
-currentglobal true setglobal
-%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
-%%Copyright: Copyright 1987-2006 Adobe Systems Incorporated.
-%%Version: 1.23 0
-systemdict/languagelevel known dup
- {currentglobal false setglobal}
- {false}
-ifelse
-exch
-userdict/Adobe_CoolType_Utility 2 copy known
- {2 copy get dup maxlength 27 add dict copy}
- {27 dict}
-ifelse put
-Adobe_CoolType_Utility
- begin
- /@eexecStartData
- <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
- 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
- 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def
- /@recognizeCIDFont null def
- /ct_Level2? exch def
- /ct_Clone? 1183615869 internaldict dup
- /CCRun known not
- exch/eCCRun known not
- ct_Level2? and or def
-ct_Level2?
- {globaldict begin currentglobal true setglobal}
-if
- /ct_AddStdCIDMap
- ct_Level2?
- {{
- mark
- Adobe_CoolType_Utility/@recognizeCIDFont currentdict put
- {
- ((Hex)57 StartData
- 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
- 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
- d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
- cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec
- }
- stopped
- {
- cleartomark
- Adobe_CoolType_Utility/@recognizeCIDFont get
- countdictstack dup array dictstack
- exch 1 sub -1 0
- {
- 2 copy get 3 index eq
- {1 index length exch sub 1 sub{end}repeat exit}
- {pop}
- ifelse
- }
- for
- pop pop
- Adobe_CoolType_Utility/@eexecStartData get eexec
- }
- {cleartomark}
- ifelse
- }}
- {{
- Adobe_CoolType_Utility/@eexecStartData get eexec
- }}
- ifelse bind def
-userdict/cid_extensions known
-dup{cid_extensions/cid_UpdateDB known and}if
- {
- cid_extensions
- begin
- /cid_GetCIDSystemInfo
- {
- 1 index type/stringtype eq
- {exch cvn exch}
- if
- cid_extensions
- begin
- dup load 2 index known
- {
- 2 copy
- cid_GetStatusInfo
- dup null ne
- {
- 1 index load
- 3 index get
- dup null eq
- {pop pop cid_UpdateDB}
- {
- exch
- 1 index/Created get eq
- {exch pop exch pop}
- {pop cid_UpdateDB}
- ifelse
- }
- ifelse
- }
- {pop cid_UpdateDB}
- ifelse
- }
- {cid_UpdateDB}
- ifelse
- end
- }bind def
- end
- }
-if
-ct_Level2?
- {end setglobal}
-if
- /ct_UseNativeCapability? systemdict/composefont known def
- /ct_MakeOCF 35 dict def
- /ct_Vars 25 dict def
- /ct_GlyphDirProcs 6 dict def
- /ct_BuildCharDict 15 dict dup
- begin
- /charcode 2 string def
- /dst_string 1500 string def
- /nullstring()def
- /usewidths? true def
- end def
- ct_Level2?{setglobal}{pop}ifelse
- ct_GlyphDirProcs
- begin
- /GetGlyphDirectory
- {
- systemdict/languagelevel known
- {pop/CIDFont findresource/GlyphDirectory get}
- {
- 1 index/CIDFont findresource/GlyphDirectory
- get dup type/dicttype eq
- {
- dup dup maxlength exch length sub 2 index lt
- {
- dup length 2 index add dict copy 2 index
- /CIDFont findresource/GlyphDirectory 2 index put
- }
- if
- }
- if
- exch pop exch pop
- }
- ifelse
- +
- }def
- /+
- {
- systemdict/languagelevel known
- {
- currentglobal false setglobal
- 3 dict begin
- /vm exch def
- }
- {1 dict begin}
- ifelse
- /$ exch def
- systemdict/languagelevel known
- {
- vm setglobal
- /gvm currentglobal def
- $ gcheck setglobal
- }
- if
- ?{$ begin}if
- }def
- /?{$ type/dicttype eq}def
- /|{
- userdict/Adobe_CoolType_Data known
- {
- Adobe_CoolType_Data/AddWidths? known
- {
- currentdict Adobe_CoolType_Data
- begin
- begin
- AddWidths?
- {
- Adobe_CoolType_Data/CC 3 index put
- ?{def}{$ 3 1 roll put}ifelse
- CC charcode exch 1 index 0 2 index 256 idiv put
- 1 index exch 1 exch 256 mod put
- stringwidth 2 array astore
- currentfont/Widths get exch CC exch put
- }
- {?{def}{$ 3 1 roll put}ifelse}
- ifelse
- end
- end
- }
- {?{def}{$ 3 1 roll put}ifelse} ifelse
- }
- {?{def}{$ 3 1 roll put}ifelse}
- ifelse
- }def
- /!
- {
- ?{end}if
- systemdict/languagelevel known
- {gvm setglobal}
- if
- end
- }def
- /:{string currentfile exch readstring pop}executeonly def
- end
- ct_MakeOCF
- begin
- /ct_cHexEncoding
- [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
- /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
- /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
- /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
- /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
- /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
- /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
- /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
- /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
- /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
- /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
- /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
- /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
- /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
- /ct_CID_STR_SIZE 8000 def
- /ct_mkocfStr100 100 string def
- /ct_defaultFontMtx[.001 0 0 .001 0 0]def
- /ct_1000Mtx[1000 0 0 1000 0 0]def
- /ct_raise{exch cvx exch errordict exch get exec stop}bind def
- /ct_reraise
- {cvx $error/errorname get(Error: )print dup( )cvs print
- errordict exch get exec stop
- }bind def
- /ct_cvnsi
- {
- 1 index add 1 sub 1 exch 0 4 1 roll
- {
- 2 index exch get
- exch 8 bitshift
- add
- }
- for
- exch pop
- }bind def
- /ct_GetInterval
- {
- Adobe_CoolType_Utility/ct_BuildCharDict get
- begin
- /dst_index 0 def
- dup dst_string length gt
- {dup string/dst_string exch def}
- if
- 1 index ct_CID_STR_SIZE idiv
- /arrayIndex exch def
- 2 index arrayIndex get
- 2 index
- arrayIndex ct_CID_STR_SIZE mul
- sub
- {
- dup 3 index add 2 index length le
- {
- 2 index getinterval
- dst_string dst_index 2 index putinterval
- length dst_index add/dst_index exch def
- exit
- }
- {
- 1 index length 1 index sub
- dup 4 1 roll
- getinterval
- dst_string dst_index 2 index putinterval
- pop dup dst_index add/dst_index exch def
- sub
- /arrayIndex arrayIndex 1 add def
- 2 index dup length arrayIndex gt
- {arrayIndex get}
- {
- pop
- exit
- }
- ifelse
- 0
- }
- ifelse
- }
- loop
- pop pop pop
- dst_string 0 dst_index getinterval
- end
- }bind def
- ct_Level2?
- {
- /ct_resourcestatus
- currentglobal mark true setglobal
- {/unknowninstancename/Category resourcestatus}
- stopped
- {cleartomark setglobal true}
- {cleartomark currentglobal not exch setglobal}
- ifelse
- {
- {
- mark 3 1 roll/Category findresource
- begin
- ct_Vars/vm currentglobal put
- ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec
- {cleartomark false}
- {{3 2 roll pop true}{cleartomark false}ifelse}
- ifelse
- ct_Vars/vm get setglobal
- end
- }
- }
- {{resourcestatus}}
- ifelse bind def
- /CIDFont/Category ct_resourcestatus
- {pop pop}
- {
- currentglobal true setglobal
- /Generic/Category findresource
- dup length dict copy
- dup/InstanceType/dicttype put
- /CIDFont exch/Category defineresource pop
- setglobal
- }
- ifelse
- ct_UseNativeCapability?
- {
- /CIDInit/ProcSet findresource begin
- 12 dict begin
- begincmap
- /CIDSystemInfo 3 dict dup begin
- /Registry(Adobe)def
- /Ordering(Identity)def
- /Supplement 0 def
- end def
- /CMapName/Identity-H def
- /CMapVersion 1.000 def
- /CMapType 1 def
- 1 begincodespacerange
- <0000><FFFF>
- endcodespacerange
- 1 begincidrange
- <0000><FFFF>0
- endcidrange
- endcmap
- CMapName currentdict/CMap defineresource pop
- end
- end
- }
- if
- }
- {
- /ct_Category 2 dict begin
- /CIDFont 10 dict def
- /ProcSet 2 dict def
- currentdict
- end
- def
- /defineresource
- {
- ct_Category 1 index 2 copy known
- {
- get
- dup dup maxlength exch length eq
- {
- dup length 10 add dict copy
- ct_Category 2 index 2 index put
- }
- if
- 3 index 3 index put
- pop exch pop
- }
- {pop pop/defineresource/undefined ct_raise}
- ifelse
- }bind def
- /findresource
- {
- ct_Category 1 index 2 copy known
- {
- get
- 2 index 2 copy known
- {get 3 1 roll pop pop}
- {pop pop/findresource/undefinedresource ct_raise}
- ifelse
- }
- {pop pop/findresource/undefined ct_raise}
- ifelse
- }bind def
- /resourcestatus
- {
- ct_Category 1 index 2 copy known
- {
- get
- 2 index known
- exch pop exch pop
- {
- 0 -1 true
- }
- {
- false
- }
- ifelse
- }
- {pop pop/findresource/undefined ct_raise}
- ifelse
- }bind def
- /ct_resourcestatus/resourcestatus load def
- }
- ifelse
- /ct_CIDInit 2 dict
- begin
- /ct_cidfont_stream_init
- {
- {
- dup(Binary)eq
- {
- pop
- null
- currentfile
- ct_Level2?
- {
- {cid_BYTE_COUNT()/SubFileDecode filter}
- stopped
- {pop pop pop}
- if
- }
- if
- /readstring load
- exit
- }
- if
- dup(Hex)eq
- {
- pop
- currentfile
- ct_Level2?
- {
- {null exch/ASCIIHexDecode filter/readstring}
- stopped
- {pop exch pop(>)exch/readhexstring}
- if
- }
- {(>)exch/readhexstring}
- ifelse
- load
- exit
- }
- if
- /StartData/typecheck ct_raise
- }
- loop
- cid_BYTE_COUNT ct_CID_STR_SIZE le
- {
- 2 copy cid_BYTE_COUNT string exch exec
- pop
- 1 array dup
- 3 -1 roll
- 0 exch put
- }
- {
- cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
- dup array exch 2 sub 0 exch 1 exch
- {
- 2 copy
- 5 index
- ct_CID_STR_SIZE
- string
- 6 index exec
- pop
- put
- pop
- }
- for
- 2 index
- cid_BYTE_COUNT ct_CID_STR_SIZE mod string
- 3 index exec
- pop
- 1 index exch
- 1 index length 1 sub
- exch put
- }
- ifelse
- cid_CIDFONT exch/GlyphData exch put
- 2 index null eq
- {
- pop pop pop
- }
- {
- pop/readstring load
- 1 string exch
- {
- 3 copy exec
- pop
- dup length 0 eq
- {
- pop pop pop pop pop
- true exit
- }
- if
- 4 index
- eq
- {
- pop pop pop pop
- false exit
- }
- if
- }
- loop
- pop
- }
- ifelse
- }bind def
- /StartData
- {
- mark
- {
- currentdict
- dup/FDArray get 0 get/FontMatrix get
- 0 get 0.001 eq
- {
- dup/CDevProc known not
- {
- /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known
- {get}
- {
- pop pop
- {pop pop pop pop pop 0 -1000 7 index 2 div 880}
- }
- ifelse
- def
- }
- if
- }
- {
- /CDevProc
- {
- pop pop pop pop pop
- 0
- 1 cid_temp/cid_CIDFONT get
- /FDArray get 0 get
- /FontMatrix get 0 get div
- 7 index 2 div
- 1 index 0.88 mul
- }def
- }
- ifelse
- /cid_temp 15 dict def
- cid_temp
- begin
- /cid_CIDFONT exch def
- 3 copy pop
- dup/cid_BYTE_COUNT exch def 0 gt
- {
- ct_cidfont_stream_init
- FDArray
- {
- /Private get
- dup/SubrMapOffset known
- {
- begin
- /Subrs SubrCount array def
- Subrs
- SubrMapOffset
- SubrCount
- SDBytes
- ct_Level2?
- {
- currentdict dup/SubrMapOffset undef
- dup/SubrCount undef
- /SDBytes undef
- }
- if
- end
- /cid_SD_BYTES exch def
- /cid_SUBR_COUNT exch def
- /cid_SUBR_MAP_OFFSET exch def
- /cid_SUBRS exch def
- cid_SUBR_COUNT 0 gt
- {
- GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
- 0 cid_SD_BYTES ct_cvnsi
- 0 1 cid_SUBR_COUNT 1 sub
- {
- exch 1 index
- 1 add
- cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
- GlyphData exch cid_SD_BYTES ct_GetInterval
- 0 cid_SD_BYTES ct_cvnsi
- cid_SUBRS 4 2 roll
- GlyphData exch
- 4 index
- 1 index
- sub
- ct_GetInterval
- dup length string copy put
- }
- for
- pop
- }
- if
- }
- {pop}
- ifelse
- }
- forall
- }
- if
- cleartomark pop pop
- end
- CIDFontName currentdict/CIDFont defineresource pop
- end end
- }
- stopped
- {cleartomark/StartData ct_reraise}
- if
- }bind def
- currentdict
- end def
- /ct_saveCIDInit
- {
- /CIDInit/ProcSet ct_resourcestatus
- {true}
- {/CIDInitC/ProcSet ct_resourcestatus}
- ifelse
- {
- pop pop
- /CIDInit/ProcSet findresource
- ct_UseNativeCapability?
- {pop null}
- {/CIDInit ct_CIDInit/ProcSet defineresource pop}
- ifelse
- }
- {/CIDInit ct_CIDInit/ProcSet defineresource pop null}
- ifelse
- ct_Vars exch/ct_oldCIDInit exch put
- }bind def
- /ct_restoreCIDInit
- {
- ct_Vars/ct_oldCIDInit get dup null ne
- {/CIDInit exch/ProcSet defineresource pop}
- {pop}
- ifelse
- }bind def
- /ct_BuildCharSetUp
- {
- 1 index
- begin
- CIDFont
- begin
- Adobe_CoolType_Utility/ct_BuildCharDict get
- begin
- /ct_dfCharCode exch def
- /ct_dfDict exch def
- CIDFirstByte ct_dfCharCode add
- dup CIDCount ge
- {pop 0}
- if
- /cid exch def
- {
- GlyphDirectory cid 2 copy known
- {get}
- {pop pop nullstring}
- ifelse
- dup length FDBytes sub 0 gt
- {
- dup
- FDBytes 0 ne
- {0 FDBytes ct_cvnsi}
- {pop 0}
- ifelse
- /fdIndex exch def
- dup length FDBytes sub FDBytes exch getinterval
- /charstring exch def
- exit
- }
- {
- pop
- cid 0 eq
- {/charstring nullstring def exit}
- if
- /cid 0 def
- }
- ifelse
- }
- loop
- }def
- /ct_SetCacheDevice
- {
- 0 0 moveto
- dup stringwidth
- 3 -1 roll
- true charpath
- pathbbox
- 0 -1000
- 7 index 2 div 880
- setcachedevice2
- 0 0 moveto
- }def
- /ct_CloneSetCacheProc
- {
- 1 eq
- {
- stringwidth
- pop -2 div -880
- 0 -1000 setcharwidth
- moveto
- }
- {
- usewidths?
- {
- currentfont/Widths get cid
- 2 copy known
- {get exch pop aload pop}
- {pop pop stringwidth}
- ifelse
- }
- {stringwidth}
- ifelse
- setcharwidth
- 0 0 moveto
- }
- ifelse
- }def
- /ct_Type3ShowCharString
- {
- ct_FDDict fdIndex 2 copy known
- {get}
- {
- currentglobal 3 1 roll
- 1 index gcheck setglobal
- ct_Type1FontTemplate dup maxlength dict copy
- begin
- FDArray fdIndex get
- dup/FontMatrix 2 copy known
- {get}
- {pop pop ct_defaultFontMtx}
- ifelse
- /FontMatrix exch dup length array copy def
- /Private get
- /Private exch def
- /Widths rootfont/Widths get def
- /CharStrings 1 dict dup/.notdef
- <d841272cf18f54fc13>dup length string copy put def
- currentdict
- end
- /ct_Type1Font exch definefont
- dup 5 1 roll put
- setglobal
- }
- ifelse
- dup/CharStrings get 1 index/Encoding get
- ct_dfCharCode get charstring put
- rootfont/WMode 2 copy known
- {get}
- {pop pop 0}
- ifelse
- exch
- 1000 scalefont setfont
- ct_str1 0 ct_dfCharCode put
- ct_str1 exch ct_dfSetCacheProc
- ct_SyntheticBold
- {
- currentpoint
- ct_str1 show
- newpath
- moveto
- ct_str1 true charpath
- ct_StrokeWidth setlinewidth
- stroke
- }
- {ct_str1 show}
- ifelse
- }def
- /ct_Type4ShowCharString
- {
- ct_dfDict ct_dfCharCode charstring
- FDArray fdIndex get
- dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
- {ct_1000Mtx matrix concatmatrix concat}
- {pop}
- ifelse
- /Private get
- Adobe_CoolType_Utility/ct_Level2? get not
- {
- ct_dfDict/Private
- 3 -1 roll
- {put}
- 1183615869 internaldict/superexec get exec
- }
- if
- 1183615869 internaldict
- Adobe_CoolType_Utility/ct_Level2? get
- {1 index}
- {3 index/Private get mark 6 1 roll}
- ifelse
- dup/RunInt known
- {/RunInt get}
- {pop/CCRun}
- ifelse
- get exec
- Adobe_CoolType_Utility/ct_Level2? get not
- {cleartomark}
- if
- }bind def
- /ct_BuildCharIncremental
- {
- {
- Adobe_CoolType_Utility/ct_MakeOCF get begin
- ct_BuildCharSetUp
- ct_ShowCharString
- }
- stopped
- {stop}
- if
- end
- end
- end
- end
- }bind def
- /BaseFontNameStr(BF00)def
- /ct_Type1FontTemplate 14 dict
- begin
- /FontType 1 def
- /FontMatrix [0.001 0 0 0.001 0 0]def
- /FontBBox [-250 -250 1250 1250]def
- /Encoding ct_cHexEncoding def
- /PaintType 0 def
- currentdict
- end def
- /BaseFontTemplate 11 dict
- begin
- /FontMatrix [0.001 0 0 0.001 0 0]def
- /FontBBox [-250 -250 1250 1250]def
- /Encoding ct_cHexEncoding def
- /BuildChar/ct_BuildCharIncremental load def
- ct_Clone?
- {
- /FontType 3 def
- /ct_ShowCharString/ct_Type3ShowCharString load def
- /ct_dfSetCacheProc/ct_CloneSetCacheProc load def
- /ct_SyntheticBold false def
- /ct_StrokeWidth 1 def
- }
- {
- /FontType 4 def
- /Private 1 dict dup/lenIV 4 put def
- /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def
- /PaintType 0 def
- /ct_ShowCharString/ct_Type4ShowCharString load def
- }
- ifelse
- /ct_str1 1 string def
- currentdict
- end def
- /BaseFontDictSize BaseFontTemplate length 5 add def
- /ct_matrixeq
- {
- true 0 1 5
- {
- dup 4 index exch get exch 3 index exch get eq and
- dup not
- {exit}
- if
- }
- for
- exch pop exch pop
- }bind def
- /ct_makeocf
- {
- 15 dict
- begin
- exch/WMode exch def
- exch/FontName exch def
- /FontType 0 def
- /FMapType 2 def
- dup/FontMatrix known
- {dup/FontMatrix get/FontMatrix exch def}
- {/FontMatrix matrix def}
- ifelse
- /bfCount 1 index/CIDCount get 256 idiv 1 add
- dup 256 gt{pop 256}if def
- /Encoding
- 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for
- bfCount 1 255{2 copy bfCount put pop}for
- def
- /FDepVector bfCount dup 256 lt{1 add}if array def
- BaseFontTemplate BaseFontDictSize dict copy
- begin
- /CIDFont exch def
- CIDFont/FontBBox known
- {CIDFont/FontBBox get/FontBBox exch def}
- if
- CIDFont/CDevProc known
- {CIDFont/CDevProc get/CDevProc exch def}
- if
- currentdict
- end
- BaseFontNameStr 3(0)putinterval
- 0 1 bfCount dup 256 eq{1 sub}if
- {
- FDepVector exch
- 2 index BaseFontDictSize dict copy
- begin
- dup/CIDFirstByte exch 256 mul def
- FontType 3 eq
- {/ct_FDDict 2 dict def}
- if
- currentdict
- end
- 1 index 16
- BaseFontNameStr 2 2 getinterval cvrs pop
- BaseFontNameStr exch definefont
- put
- }
- for
- ct_Clone?
- {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def}
- if
- FontName
- currentdict
- end
- definefont
- ct_Clone?
- {
- gsave
- dup 1000 scalefont setfont
- ct_BuildCharDict
- begin
- /usewidths? false def
- currentfont/Widths get
- begin
- exch/CIDFont get/GlyphDirectory get
- {
- pop
- dup charcode exch 1 index 0 2 index 256 idiv put
- 1 index exch 1 exch 256 mod put
- stringwidth 2 array astore def
- }
- forall
- end
- /usewidths? true def
- end
- grestore
- }
- {exch pop}
- ifelse
- }bind def
- currentglobal true setglobal
- /ct_ComposeFont
- {
- ct_UseNativeCapability?
- {
- 2 index/CMap ct_resourcestatus
- {pop pop exch pop}
- {
- /CIDInit/ProcSet findresource
- begin
- 12 dict
- begin
- begincmap
- /CMapName 3 index def
- /CMapVersion 1.000 def
- /CMapType 1 def
- exch/WMode exch def
- /CIDSystemInfo 3 dict dup
- begin
- /Registry(Adobe)def
- /Ordering
- CMapName ct_mkocfStr100 cvs
- (Adobe-)search
- {
- pop pop
- (-)search
- {
- dup length string copy
- exch pop exch pop
- }
- {pop(Identity)}
- ifelse
- }
- {pop (Identity)}
- ifelse
- def
- /Supplement 0 def
- end def
- 1 begincodespacerange
- <0000><FFFF>
- endcodespacerange
- 1 begincidrange
- <0000><FFFF>0
- endcidrange
- endcmap
- CMapName currentdict/CMap defineresource pop
- end
- end
- }
- ifelse
- composefont
- }
- {
- 3 2 roll pop
- 0 get/CIDFont findresource
- ct_makeocf
- }
- ifelse
- }bind def
- setglobal
- /ct_MakeIdentity
- {
- ct_UseNativeCapability?
- {
- 1 index/CMap ct_resourcestatus
- {pop pop}
- {
- /CIDInit/ProcSet findresource begin
- 12 dict begin
- begincmap
- /CMapName 2 index def
- /CMapVersion 1.000 def
- /CMapType 1 def
- /CIDSystemInfo 3 dict dup
- begin
- /Registry(Adobe)def
- /Ordering
- CMapName ct_mkocfStr100 cvs
- (Adobe-)search
- {
- pop pop
- (-)search
- {dup length string copy exch pop exch pop}
- {pop(Identity)}
- ifelse
- }
- {pop(Identity)}
- ifelse
- def
- /Supplement 0 def
- end def
- 1 begincodespacerange
- <0000><FFFF>
- endcodespacerange
- 1 begincidrange
- <0000><FFFF>0
- endcidrange
- endcmap
- CMapName currentdict/CMap defineresource pop
- end
- end
- }
- ifelse
- composefont
- }
- {
- exch pop
- 0 get/CIDFont findresource
- ct_makeocf
- }
- ifelse
- }bind def
- currentdict readonly pop
- end
- end
-%%EndResource
-setglobal
-%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0
-%%Copyright: Copyright 1987-2004 Adobe Systems Incorporated.
-%%Version: 1.0 0
-userdict/ct_T42Dict 15 dict put
-ct_T42Dict begin
-/Is2015?
-{
- version
- cvi
- 2015
- ge
-}bind def
-/AllocGlyphStorage
-{
- Is2015?
- {
- pop
- }
- {
- {string}forall
- }ifelse
-}bind def
-/Type42DictBegin
-{
-25 dict begin
- /FontName exch def
- /CharStrings 256 dict
-begin
- /.notdef 0 def
- currentdict
-end def
- /Encoding exch def
- /PaintType 0 def
- /FontType 42 def
- /FontMatrix[1 0 0 1 0 0]def
- 4 array astore cvx/FontBBox exch def
- /sfnts
-}bind def
-/Type42DictEnd
-{
- currentdict dup/FontName get exch definefont end
-ct_T42Dict exch
-dup/FontName get exch put
-}bind def
-/RD{string currentfile exch readstring pop}executeonly def
-/PrepFor2015
-{
-Is2015?
-{
- /GlyphDirectory
- 16
- dict def
- sfnts 0 get
- dup
- 2 index
- (glyx)
- putinterval
- 2 index
- (locx)
- putinterval
- pop
- pop
-}
-{
- pop
- pop
-}ifelse
-}bind def
-/AddT42Char
-{
-Is2015?
-{
- /GlyphDirectory get
- begin
- def
- end
- pop
- pop
-}
-{
- /sfnts get
- 4 index
- get
- 3 index
- 2 index
- putinterval
- pop
- pop
- pop
- pop
-}ifelse
-}bind def
-/T0AddT42Mtx2
-{
-/CIDFont findresource/Metrics2 get begin def end
-}bind def
-end
-%%EndResource
-currentglobal true setglobal
-%%BeginFile: MMFauxFont.prc
-%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
-%%All Rights Reserved.
-userdict /ct_EuroDict 10 dict put
-ct_EuroDict begin
-/ct_CopyFont
-{
- { 1 index /FID ne {def} {pop pop} ifelse} forall
-} def
-/ct_GetGlyphOutline
-{
- gsave
- initmatrix newpath
- exch findfont dup
- length 1 add dict
- begin
- ct_CopyFont
- /Encoding Encoding dup length array copy
- dup
- 4 -1 roll
- 0 exch put
- def
- currentdict
- end
- /ct_EuroFont exch definefont
- 1000 scalefont setfont
- 0 0 moveto
- [
- <00> stringwidth
- <00> false charpath
- pathbbox
- [
- {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall
- grestore
- counttomark 8 add
-}
-def
-/ct_MakeGlyphProc
-{
- ] cvx
- /ct_PSBuildGlyph cvx
- ] cvx
-} def
-/ct_PSBuildGlyph
-{
- gsave
- 8 -1 roll pop
- 7 1 roll
- 6 -2 roll ct_FontMatrix transform 6 2 roll
- 4 -2 roll ct_FontMatrix transform 4 2 roll
- ct_FontMatrix transform
- currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
- dup 9 1 roll
- {
- currentdict /StrokeWidth 2 copy known
- {
- get 2 div
- 0 ct_FontMatrix dtransform pop
- 5 1 roll
- 4 -1 roll 4 index sub
- 4 1 roll
- 3 -1 roll 4 index sub
- 3 1 roll
- exch 4 index add exch
- 4 index add
- 5 -1 roll pop
- }
- {
- pop pop
- }
- ifelse
- }
- if
- setcachedevice
- ct_FontMatrix concat
- ct_PSPathOps begin
- exec
- end
- {
- currentdict /StrokeWidth 2 copy known
- { get }
- { pop pop 0 }
- ifelse
- setlinewidth stroke
- }
- {
- fill
- }
- ifelse
- grestore
-} def
-/ct_PSPathOps 4 dict dup begin
- /m {moveto} def
- /l {lineto} def
- /c {curveto} def
- /cp {closepath} def
-end
-def
-/ct_matrix1000 [1000 0 0 1000 0 0] def
-/ct_AddGlyphProc
-{
- 2 index findfont dup length 4 add dict
- begin
- ct_CopyFont
- /CharStrings CharStrings dup length 1 add dict copy
- begin
- 3 1 roll def
- currentdict
- end
- def
- /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def
- /ct_PSBuildGlyph /ct_PSBuildGlyph load def
- /ct_PSPathOps /ct_PSPathOps load def
- currentdict
- end
- definefont pop
-}
-def
-systemdict /languagelevel known
-{
- /ct_AddGlyphToPrinterFont {
- 2 copy
- ct_GetGlyphOutline 3 add -1 roll restore
- ct_MakeGlyphProc
- ct_AddGlyphProc
- } def
-}
-{
- /ct_AddGlyphToPrinterFont {
- pop pop restore
- Adobe_CTFauxDict /$$$FONTNAME get
- /Euro
- Adobe_CTFauxDict /$$$SUBSTITUTEBASE get
- ct_EuroDict exch get
- ct_AddGlyphProc
- } def
-} ifelse
-/AdobeSansMM
-{
-556 0 24 -19 541 703
- {
- 541 628 m
- 510 669 442 703 354 703 c
- 201 703 117 607 101 444 c
- 50 444 l
- 25 372 l
- 97 372 l
- 97 301 l
- 49 301 l
- 24 229 l
- 103 229 l
- 124 67 209 -19 350 -19 c
- 435 -19 501 25 509 32 c
- 509 131 l
- 492 105 417 60 343 60 c
- 267 60 204 127 197 229 c
- 406 229 l
- 430 301 l
- 191 301 l
- 191 372 l
- 455 372 l
- 479 444 l
- 194 444 l
- 201 531 245 624 348 624 c
- 433 624 484 583 509 534 c
- cp
- 556 0 m
- }
-ct_PSBuildGlyph
-} def
-/AdobeSerifMM
-{
-500 0 10 -12 484 692
- {
- 347 298 m
- 171 298 l
- 170 310 170 322 170 335 c
- 170 362 l
- 362 362 l
- 374 403 l
- 172 403 l
- 184 580 244 642 308 642 c
- 380 642 434 574 457 457 c
- 481 462 l
- 474 691 l
- 449 691 l
- 433 670 429 657 410 657 c
- 394 657 360 692 299 692 c
- 204 692 94 604 73 403 c
- 22 403 l
- 10 362 l
- 70 362 l
- 69 352 69 341 69 330 c
- 69 319 69 308 70 298 c
- 22 298 l
- 10 257 l
- 73 257 l
- 97 57 216 -12 295 -12 c
- 364 -12 427 25 484 123 c
- 458 142 l
- 425 101 384 37 316 37 c
- 256 37 189 84 173 257 c
- 335 257 l
- cp
- 500 0 m
- }
-ct_PSBuildGlyph
-} def
-end
-%%EndFile
-setglobal
-Adobe_CoolType_Core begin /$None SetSubstituteStrategy end
-%%BeginResource: procset Adobe_AGM_Image 1.0 0
-%%Version: 1.0 0
-%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
-systemdict/setpacking known
-{
- currentpacking
- true setpacking
-}if
-userdict/Adobe_AGM_Image 71 dict dup begin put
-/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def
-/nd{
- null def
-}bind def
-/AGMIMG_&image nd
-/AGMIMG_&colorimage nd
-/AGMIMG_&imagemask nd
-/AGMIMG_mbuf()def
-/AGMIMG_ybuf()def
-/AGMIMG_kbuf()def
-/AGMIMG_c 0 def
-/AGMIMG_m 0 def
-/AGMIMG_y 0 def
-/AGMIMG_k 0 def
-/AGMIMG_tmp nd
-/AGMIMG_imagestring0 nd
-/AGMIMG_imagestring1 nd
-/AGMIMG_imagestring2 nd
-/AGMIMG_imagestring3 nd
-/AGMIMG_imagestring4 nd
-/AGMIMG_imagestring5 nd
-/AGMIMG_cnt nd
-/AGMIMG_fsave nd
-/AGMIMG_colorAry nd
-/AGMIMG_override nd
-/AGMIMG_name nd
-/AGMIMG_maskSource nd
-/AGMIMG_flushfilters nd
-/invert_image_samples nd
-/knockout_image_samples nd
-/img nd
-/sepimg nd
-/devnimg nd
-/idximg nd
-/ds
-{
- Adobe_AGM_Core begin
- Adobe_AGM_Image begin
- /AGMIMG_&image systemdict/image get def
- /AGMIMG_&imagemask systemdict/imagemask get def
- /colorimage where{
- pop
- /AGMIMG_&colorimage/colorimage ldf
- }if
- end
- end
-}def
-/ps
-{
- Adobe_AGM_Image begin
- /AGMIMG_ccimage_exists{/customcolorimage where
- {
- pop
- /Adobe_AGM_OnHost_Seps where
- {
- pop false
- }{
- /Adobe_AGM_InRip_Seps where
- {
- pop false
- }{
- true
- }ifelse
- }ifelse
- }{
- false
- }ifelse
- }bdf
- level2{
- /invert_image_samples
- {
- Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
- /Decode[Decode 1 get Decode 0 get]def
- }def
- /knockout_image_samples
- {
- Operator/imagemask ne{
- /Decode[1 1]def
- }if
- }def
- }{
- /invert_image_samples
- {
- {1 exch sub}currenttransfer addprocs settransfer
- }def
- /knockout_image_samples
- {
- {pop 1}currenttransfer addprocs settransfer
- }def
- }ifelse
- /img/imageormask ldf
- /sepimg/sep_imageormask ldf
- /devnimg/devn_imageormask ldf
- /idximg/indexed_imageormask ldf
- /_ctype 7 def
- currentdict{
- dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
- bind
- }if
- def
- }forall
-}def
-/pt
-{
- end
-}def
-/dt
-{
-}def
-/AGMIMG_flushfilters
-{
- dup type/arraytype ne
- {1 array astore}if
- dup 0 get currentfile ne
- {dup 0 get flushfile}if
- {
- dup type/filetype eq
- {
- dup status 1 index currentfile ne and
- {closefile}
- {pop}
- ifelse
- }{pop}ifelse
- }forall
-}def
-/AGMIMG_init_common
-{
- currentdict/T known{/ImageType/T ldf currentdict/T undef}if
- currentdict/W known{/Width/W ldf currentdict/W undef}if
- currentdict/H known{/Height/H ldf currentdict/H undef}if
- currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if
- currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if
- currentdict/D known{/Decode/D ldf currentdict/D undef}if
- currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if
- currentdict/O known{
- /Operator/O load 1 eq{
- /imagemask
- }{
- /O load 2 eq{
- /image
- }{
- /colorimage
- }ifelse
- }ifelse
- def
- currentdict/O undef
- }if
- currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if
- currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if
- currentdict/I known{/Interpolate/I ldf currentdict/I undef}if
- currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if
- /DataSource load xcheck not{
- DataSource type/arraytype eq{
- DataSource 0 get type/filetype eq{
- /_Filters DataSource def
- currentdict/MultipleDataSources known not{
- /DataSource DataSource dup length 1 sub get def
- }if
- }if
- }if
- currentdict/MultipleDataSources known not{
- /MultipleDataSources DataSource type/arraytype eq{
- DataSource length 1 gt
- }
- {false}ifelse def
- }if
- }if
- /NComponents Decode length 2 div def
- currentdict/SkipImageProc known not{/SkipImageProc{false}def}if
-}bdf
-/imageormask_sys
-{
- begin
- AGMIMG_init_common
- save mark
- level2{
- currentdict
- Operator/imagemask eq{
- AGMIMG_&imagemask
- }{
- use_mask{
- process_mask AGMIMG_&image
- }{
- AGMIMG_&image
- }ifelse
- }ifelse
- }{
- Width Height
- Operator/imagemask eq{
- Decode 0 get 1 eq Decode 1 get 0 eq and
- ImageMatrix/DataSource load
- AGMIMG_&imagemask
- }{
- BitsPerComponent ImageMatrix/DataSource load
- AGMIMG_&image
- }ifelse
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- cleartomark restore
- end
-}def
-/overprint_plate
-{
- currentoverprint{
- 0 get dup type/nametype eq{
- dup/DeviceGray eq{
- pop AGMCORE_black_plate not
- }{
- /DeviceCMYK eq{
- AGMCORE_is_cmyk_sep not
- }if
- }ifelse
- }{
- false exch
- {
- AGMOHS_sepink eq or
- }forall
- not
- }ifelse
- }{
- pop false
- }ifelse
-}def
-/process_mask
-{
- level3{
- dup begin
- /ImageType 1 def
- end
- 4 dict begin
- /DataDict exch def
- /ImageType 3 def
- /InterleaveType 3 def
- /MaskDict 9 dict begin
- /ImageType 1 def
- /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def
- /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def
- /ImageMatrix[Width 0 0 Height neg 0 Height]def
- /NComponents 1 def
- /BitsPerComponent 1 def
- /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def
- /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def
- currentdict end def
- currentdict end
- }if
-}def
-/use_mask
-{
- dup/Mask known {dup/Mask get}{false}ifelse
-}def
-/imageormask
-{
- begin
- AGMIMG_init_common
- SkipImageProc{
- currentdict consumeimagedata
- }
- {
- save mark
- level2 AGMCORE_host_sep not and{
- currentdict
- Operator/imagemask eq DeviceN_PS2 not and{
- imagemask
- }{
- AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{
- [/Separation/Black/DeviceGray{}]setcolorspace
- /Decode[Decode 1 get Decode 0 get]def
- }if
- use_mask{
- process_mask image
- }{
- DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
- {
- Names convert_to_process not{
- 2 dict begin
- /imageDict xdf
- /names_index 0 def
- gsave
- imageDict write_image_file{
- Names{
- dup(None)ne{
- [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace
- Operator imageDict read_image_file
- names_index 0 eq{true setoverprint}if
- /names_index names_index 1 add def
- }{
- pop
- }ifelse
- }forall
- close_image_file
- }if
- grestore
- end
- }{
- Operator/imagemask eq{
- imagemask
- }{
- image
- }ifelse
- }ifelse
- }{
- Operator/imagemask eq{
- imagemask
- }{
- image
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- }{
- Width Height
- Operator/imagemask eq{
- Decode 0 get 1 eq Decode 1 get 0 eq and
- ImageMatrix/DataSource load
- /Adobe_AGM_OnHost_Seps where{
- pop imagemask
- }{
- currentgray 1 ne{
- currentdict imageormask_sys
- }{
- currentoverprint not{
- 1 AGMCORE_&setgray
- currentdict imageormask_sys
- }{
- currentdict ignoreimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- BitsPerComponent ImageMatrix
- MultipleDataSources{
- 0 1 NComponents 1 sub{
- DataSource exch get
- }for
- }{
- /DataSource load
- }ifelse
- Operator/colorimage eq{
- AGMCORE_host_sep{
- MultipleDataSources level2 or NComponents 4 eq and{
- AGMCORE_is_cmyk_sep{
- MultipleDataSources{
- /DataSource DataSource 0 get xcheck
- {
- [
- DataSource 0 get/exec cvx
- DataSource 1 get/exec cvx
- DataSource 2 get/exec cvx
- DataSource 3 get/exec cvx
- /AGMCORE_get_ink_data cvx
- ]cvx
- }{
- DataSource aload pop AGMCORE_get_ink_data
- }ifelse def
- }{
- /DataSource
- Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
- /DataSource load
- filter_cmyk 0()/SubFileDecode filter def
- }ifelse
- /Decode[Decode 0 get Decode 1 get]def
- /MultipleDataSources false def
- /NComponents 1 def
- /Operator/image def
- invert_image_samples
- 1 AGMCORE_&setgray
- currentdict imageormask_sys
- }{
- currentoverprint not Operator/imagemask eq and{
- 1 AGMCORE_&setgray
- currentdict imageormask_sys
- }{
- currentdict ignoreimagedata
- }ifelse
- }ifelse
- }{
- MultipleDataSources NComponents AGMIMG_&colorimage
- }ifelse
- }{
- true NComponents colorimage
- }ifelse
- }{
- Operator/image eq{
- AGMCORE_host_sep{
- /DoImage true def
- currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse
- {
- AGMCORE_black_plate not Operator/imagemask ne and{
- /DoImage false def
- currentdict ignoreimagedata
- }if
- }if
- 1 AGMCORE_&setgray
- DoImage
- {currentdict imageormask_sys}if
- }{
- use_mask{
- process_mask image
- }{
- image
- }ifelse
- }ifelse
- }{
- Operator/knockout eq{
- pop pop pop pop pop
- currentcolorspace overprint_plate not{
- knockout_unitsq
- }if
- }if
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- cleartomark restore
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
-}def
-/sep_imageormask
-{
- /sep_colorspace_dict AGMCORE_gget begin
- CSA map_csa
- begin
- AGMIMG_init_common
- SkipImageProc{
- currentdict consumeimagedata
- }{
- save mark
- AGMCORE_avoid_L2_sep_space{
- /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
- }if
- AGMIMG_ccimage_exists
- MappedCSA 0 get/DeviceCMYK eq and
- currentdict/Components known and
- Name()ne and
- Name(All)ne and
- Operator/image eq and
- AGMCORE_producing_seps not and
- level2 not and
- {
- Width Height BitsPerComponent ImageMatrix
- [
- /DataSource load/exec cvx
- {
- 0 1 2 index length 1 sub{
- 1 index exch
- 2 copy get 255 xor put
- }for
- }/exec cvx
- ]cvx bind
- MappedCSA 0 get/DeviceCMYK eq{
- Components aload pop
- }{
- 0 0 0 Components aload pop 1 exch sub
- }ifelse
- Name findcmykcustomcolor
- customcolorimage
- }{
- AGMCORE_producing_seps not{
- level2{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{
- [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt
- /sep_tint AGMCORE_gget setcolor
- }if
- currentdict imageormask
- }{
- currentdict
- Operator/imagemask eq{
- imageormask
- }{
- sep_imageormask_lev1
- }ifelse
- }ifelse
- }{
- AGMCORE_host_sep{
- Operator/knockout eq{
- currentdict/ImageMatrix get concat
- knockout_unitsq
- }{
- currentgray 1 ne{
- AGMCORE_is_cmyk_sep Name(All)ne and{
- level2{
- Name AGMCORE_IsSeparationAProcessColor
- {
- Operator/imagemask eq{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
- /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor
- }if
- }{
- invert_image_samples
- }ifelse
- }{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
- [/Separation Name[/DeviceGray]
- {
- sep_colorspace_proc AGMCORE_get_ink_data
- 1 exch sub
- }bind
- ]AGMCORE_&setcolorspace
- /sep_tint AGMCORE_gget AGMCORE_&setcolor
- }if
- }ifelse
- currentdict imageormask_sys
- }{
- currentdict
- Operator/imagemask eq{
- imageormask_sys
- }{
- sep_image_lev1_sep
- }ifelse
- }ifelse
- }{
- Operator/imagemask ne{
- invert_image_samples
- }if
- currentdict imageormask_sys
- }ifelse
- }{
- currentoverprint not Name(All)eq or Operator/imagemask eq and{
- currentdict imageormask_sys
- }{
- currentoverprint not
- {
- gsave
- knockout_unitsq
- grestore
- }if
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
- currentcolorspace 0 get/Separation ne{
- [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt
- /sep_tint AGMCORE_gget setcolor
- }if
- }if
- currentoverprint
- MappedCSA 0 get/DeviceCMYK eq and
- Name AGMCORE_IsSeparationAProcessColor not and
- //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse
- Name(All)ne and{
- imageormask_l2_overprint
- }{
- currentdict imageormask
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- cleartomark restore
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
- end
-}def
-/colorSpaceElemCnt
-{
- mark currentcolor counttomark dup 2 add 1 roll cleartomark
-}bdf
-/devn_sep_datasource
-{
- 1 dict begin
- /dataSource xdf
- [
- 0 1 dataSource length 1 sub{
- dup currentdict/dataSource get/exch cvx/get cvx/exec cvx
- /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx
- }for
- ]cvx bind
- end
-}bdf
-/devn_alt_datasource
-{
- 11 dict begin
- /convProc xdf
- /origcolorSpaceElemCnt xdf
- /origMultipleDataSources xdf
- /origBitsPerComponent xdf
- /origDecode xdf
- /origDataSource xdf
- /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def
- /DataSource origMultipleDataSources
- {
- [
- BitsPerComponent 8 idiv origDecode length 2 idiv mul string
- 0 1 origDecode length 2 idiv 1 sub
- {
- dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch
- origDataSource exch get 0()/SubFileDecode filter
- BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx
- }for
- ]bind cvx
- }{origDataSource}ifelse 0()/SubFileDecode filter def
- [
- origcolorSpaceElemCnt string
- 0 2 origDecode length 2 sub
- {
- dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div
- 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx
- }for
- /convProc load/exec cvx
- origcolorSpaceElemCnt 1 sub -1 0
- {
- /dup cvx 2/add cvx/index cvx
- 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx
- }for
- ]bind cvx 0()/SubFileDecode filter
- end
-}bdf
-/devn_imageormask
-{
- /devicen_colorspace_dict AGMCORE_gget begin
- CSA map_csa
- 2 dict begin
- dup
- /srcDataStrs[3 -1 roll begin
- AGMIMG_init_common
- currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
- {
- Width Decode length 2 div mul cvi
- {
- dup 65535 gt{1 add 2 div cvi}{exit}ifelse
- }loop
- string
- }repeat
- end]def
- /dstDataStr srcDataStrs 0 get length string def
- begin
- AGMIMG_init_common
- SkipImageProc{
- currentdict consumeimagedata
- }{
- save mark
- AGMCORE_producing_seps not{
- level3 not{
- Operator/imagemask ne{
- /DataSource[[
- DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get
- devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def
- /MultipleDataSources true def
- /Decode colorSpaceElemCnt[exch{0 1}repeat]def
- }if
- }if
- currentdict imageormask
- }{
- AGMCORE_host_sep{
- Names convert_to_process{
- CSA get_csa_by_name 0 get/DeviceCMYK eq{
- /DataSource
- Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
- DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get
- devn_alt_datasource
- filter_cmyk 0()/SubFileDecode filter def
- /MultipleDataSources false def
- /Decode[1 0]def
- /DeviceGray setcolorspace
- currentdict imageormask_sys
- }{
- AGMCORE_report_unsupported_color_space
- AGMCORE_black_plate{
- /DataSource
- DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
- CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get
- devn_alt_datasource
- /MultipleDataSources false def
- /Decode colorSpaceElemCnt[exch{0 1}repeat]def
- currentdict imageormask_sys
- }{
- gsave
- knockout_unitsq
- grestore
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }
- {
- /devicen_colorspace_dict AGMCORE_gget/names_index known{
- Operator/imagemask ne{
- MultipleDataSources{
- /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def
- /MultipleDataSources false def
- }{
- /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def
- }ifelse
- invert_image_samples
- }if
- currentdict imageormask_sys
- }{
- currentoverprint not Operator/imagemask eq and{
- currentdict imageormask_sys
- }{
- currentoverprint not
- {
- gsave
- knockout_unitsq
- grestore
- }if
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- currentdict imageormask
- }ifelse
- }ifelse
- cleartomark restore
- }ifelse
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
- end
- end
-}def
-/imageormask_l2_overprint
-{
- currentdict
- currentcmykcolor add add add 0 eq{
- currentdict consumeimagedata
- }{
- level3{
- currentcmykcolor
- /AGMIMG_k xdf
- /AGMIMG_y xdf
- /AGMIMG_m xdf
- /AGMIMG_c xdf
- Operator/imagemask eq{
- [/DeviceN[
- AGMIMG_c 0 ne{/Cyan}if
- AGMIMG_m 0 ne{/Magenta}if
- AGMIMG_y 0 ne{/Yellow}if
- AGMIMG_k 0 ne{/Black}if
- ]/DeviceCMYK{}]setcolorspace
- AGMIMG_c 0 ne{AGMIMG_c}if
- AGMIMG_m 0 ne{AGMIMG_m}if
- AGMIMG_y 0 ne{AGMIMG_y}if
- AGMIMG_k 0 ne{AGMIMG_k}if
- setcolor
- }{
- /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
- [/Indexed
- [
- /DeviceN[
- AGMIMG_c 0 ne{/Cyan}if
- AGMIMG_m 0 ne{/Magenta}if
- AGMIMG_y 0 ne{/Yellow}if
- AGMIMG_k 0 ne{/Black}if
- ]
- /DeviceCMYK{
- AGMIMG_k 0 eq{0}if
- AGMIMG_y 0 eq{0 exch}if
- AGMIMG_m 0 eq{0 3 1 roll}if
- AGMIMG_c 0 eq{0 4 1 roll}if
- }
- ]
- 255
- {
- 255 div
- mark exch
- dup dup dup
- AGMIMG_k 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- AGMIMG_y 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- AGMIMG_m 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- AGMIMG_c 0 ne{
- /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
- counttomark 1 roll
- }{
- pop
- }ifelse
- counttomark 1 add -1 roll pop
- }
- ]setcolorspace
- }ifelse
- imageormask_sys
- }{
- write_image_file{
- currentcmykcolor
- 0 ne{
- [/Separation/Black/DeviceGray{}]setcolorspace
- gsave
- /Black
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- 0 ne{
- [/Separation/Yellow/DeviceGray{}]setcolorspace
- gsave
- /Yellow
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- 0 ne{
- [/Separation/Magenta/DeviceGray{}]setcolorspace
- gsave
- /Magenta
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- 0 ne{
- [/Separation/Cyan/DeviceGray{}]setcolorspace
- gsave
- /Cyan
- [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx]
- cvx modify_halftone_xfer
- Operator currentdict read_image_file
- grestore
- }if
- close_image_file
- }{
- imageormask
- }ifelse
- }ifelse
- }ifelse
-}def
-/indexed_imageormask
-{
- begin
- AGMIMG_init_common
- save mark
- currentdict
- AGMCORE_host_sep{
- Operator/knockout eq{
- /indexed_colorspace_dict AGMCORE_gget dup/CSA known{
- /CSA get get_csa_by_name
- }{
- /Names get
- }ifelse
- overprint_plate not{
- knockout_unitsq
- }if
- }{
- Indexed_DeviceN{
- /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{
- indexed_image_lev2_sep
- }{
- currentoverprint not{
- knockout_unitsq
- }if
- currentdict consumeimagedata
- }ifelse
- }{
- AGMCORE_is_cmyk_sep{
- Operator/imagemask eq{
- imageormask_sys
- }{
- level2{
- indexed_image_lev2_sep
- }{
- indexed_image_lev1_sep
- }ifelse
- }ifelse
- }{
- currentoverprint not{
- knockout_unitsq
- }if
- currentdict consumeimagedata
- }ifelse
- }ifelse
- }ifelse
- }{
- level2{
- Indexed_DeviceN{
- /indexed_colorspace_dict AGMCORE_gget begin
- }{
- /indexed_colorspace_dict AGMCORE_gget dup null ne
- {
- begin
- currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse
- get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and
- AGMCORE_in_rip_sep and{
- [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup]
- setcolorspace
- }if
- end
- }
- {pop}ifelse
- }ifelse
- imageormask
- Indexed_DeviceN{
- end
- }if
- }{
- Operator/imagemask eq{
- imageormask
- }{
- indexed_imageormask_lev1
- }ifelse
- }ifelse
- }ifelse
- cleartomark restore
- currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
- end
-}def
-/indexed_image_lev2_sep
-{
- /indexed_colorspace_dict AGMCORE_gget begin
- begin
- Indexed_DeviceN not{
- currentcolorspace
- dup 1/DeviceGray put
- dup 3
- currentcolorspace 2 get 1 add string
- 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
- {
- dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
- }for
- put setcolorspace
- }if
- currentdict
- Operator/imagemask eq{
- AGMIMG_&imagemask
- }{
- use_mask{
- process_mask AGMIMG_&image
- }{
- AGMIMG_&image
- }ifelse
- }ifelse
- end end
-}def
- /OPIimage
- {
- dup type/dicttype ne{
- 10 dict begin
- /DataSource xdf
- /ImageMatrix xdf
- /BitsPerComponent xdf
- /Height xdf
- /Width xdf
- /ImageType 1 def
- /Decode[0 1 def]
- currentdict
- end
- }if
- dup begin
- /NComponents 1 cdndf
- /MultipleDataSources false cdndf
- /SkipImageProc{false}cdndf
- /Decode[
- 0
- currentcolorspace 0 get/Indexed eq{
- 2 BitsPerComponent exp 1 sub
- }{
- 1
- }ifelse
- ]cdndf
- /Operator/image cdndf
- end
- /sep_colorspace_dict AGMCORE_gget null eq{
- imageormask
- }{
- gsave
- dup begin invert_image_samples end
- sep_imageormask
- grestore
- }ifelse
- }def
-/cachemask_level2
-{
- 3 dict begin
- /LZWEncode filter/WriteFilter xdf
- /readBuffer 256 string def
- /ReadFilter
- currentfile
- 0(%EndMask)/SubFileDecode filter
- /ASCII85Decode filter
- /RunLengthDecode filter
- def
- {
- ReadFilter readBuffer readstring exch
- WriteFilter exch writestring
- not{exit}if
- }loop
- WriteFilter closefile
- end
-}def
-/spot_alias
-{
- /mapto_sep_imageormask
- {
- dup type/dicttype ne{
- 12 dict begin
- /ImageType 1 def
- /DataSource xdf
- /ImageMatrix xdf
- /BitsPerComponent xdf
- /Height xdf
- /Width xdf
- /MultipleDataSources false def
- }{
- begin
- }ifelse
- /Decode[/customcolor_tint AGMCORE_gget 0]def
- /Operator/image def
- /SkipImageProc{false}def
- currentdict
- end
- sep_imageormask
- }bdf
- /customcolorimage
- {
- Adobe_AGM_Image/AGMIMG_colorAry xddf
- /customcolor_tint AGMCORE_gget
- <<
- /Name AGMIMG_colorAry 4 get
- /CSA[/DeviceCMYK]
- /TintMethod/Subtractive
- /TintProc null
- /MappedCSA null
- /NComponents 4
- /Components[AGMIMG_colorAry aload pop pop]
- >>
- setsepcolorspace
- mapto_sep_imageormask
- }ndf
- Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put
- /customcolorimage
- {
- Adobe_AGM_Image/AGMIMG_override false put
- current_spot_alias{dup 4 get map_alias}{false}ifelse
- {
- false set_spot_alias
- /customcolor_tint AGMCORE_gget exch setsepcolorspace
- pop
- mapto_sep_imageormask
- true set_spot_alias
- }{
- //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec
- }ifelse
- }bdf
-}def
-/snap_to_device
-{
- 6 dict begin
- matrix currentmatrix
- dup 0 get 0 eq 1 index 3 get 0 eq and
- 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
- {
- 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def
- 0 0 transform
- AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
- AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
- itransform/AGMIMG_llY exch def/AGMIMG_llX exch def
- 1 1 transform
- AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
- AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
- itransform/AGMIMG_urY exch def/AGMIMG_urX exch def
- [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat
- }{
- }ifelse
- end
-}def
-level2 not{
- /colorbuf
- {
- 0 1 2 index length 1 sub{
- dup 2 index exch get
- 255 exch sub
- 2 index
- 3 1 roll
- put
- }for
- }def
- /tint_image_to_color
- {
- begin
- Width Height BitsPerComponent ImageMatrix
- /DataSource load
- end
- Adobe_AGM_Image begin
- /AGMIMG_mbuf 0 string def
- /AGMIMG_ybuf 0 string def
- /AGMIMG_kbuf 0 string def
- {
- colorbuf dup length AGMIMG_mbuf length ne
- {
- dup length dup dup
- /AGMIMG_mbuf exch string def
- /AGMIMG_ybuf exch string def
- /AGMIMG_kbuf exch string def
- }if
- dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
- }
- addprocs
- {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage
- end
- }def
- /sep_imageormask_lev1
- {
- begin
- MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
- {
- 255 mul round cvi GrayLookup exch get
- }currenttransfer addprocs settransfer
- currentdict imageormask
- }{
- /sep_colorspace_dict AGMCORE_gget/Components known{
- MappedCSA 0 get/DeviceCMYK eq{
- Components aload pop
- }{
- 0 0 0 Components aload pop 1 exch sub
- }ifelse
- Adobe_AGM_Image/AGMIMG_k xddf
- Adobe_AGM_Image/AGMIMG_y xddf
- Adobe_AGM_Image/AGMIMG_m xddf
- Adobe_AGM_Image/AGMIMG_c xddf
- AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
- {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer
- currentdict imageormask
- }{
- currentcolortransfer
- {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll
- {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll
- {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll
- {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll
- setcolortransfer
- currentdict tint_image_to_color
- }ifelse
- }{
- MappedCSA 0 get/DeviceGray eq{
- {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer
- currentdict imageormask
- }{
- MappedCSA 0 get/DeviceCMYK eq{
- currentcolortransfer
- {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll
- setcolortransfer
- currentdict tint_image_to_color
- }{
- currentcolortransfer
- {pop 1}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll
- {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll
- setcolortransfer
- currentdict tint_image_to_color
- }ifelse
- }ifelse
- }ifelse
- }ifelse
- end
- }def
- /sep_image_lev1_sep
- {
- begin
- /sep_colorspace_dict AGMCORE_gget/Components known{
- Components aload pop
- Adobe_AGM_Image/AGMIMG_k xddf
- Adobe_AGM_Image/AGMIMG_y xddf
- Adobe_AGM_Image/AGMIMG_m xddf
- Adobe_AGM_Image/AGMIMG_c xddf
- {AGMIMG_c mul 1 exch sub}
- {AGMIMG_m mul 1 exch sub}
- {AGMIMG_y mul 1 exch sub}
- {AGMIMG_k mul 1 exch sub}
- }{
- {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
- {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
- {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
- {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
- }ifelse
- AGMCORE_get_ink_data currenttransfer addprocs settransfer
- currentdict imageormask_sys
- end
- }def
- /indexed_imageormask_lev1
- {
- /indexed_colorspace_dict AGMCORE_gget begin
- begin
- currentdict
- MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
- {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer
- imageormask
- }{
- MappedCSA 0 get/DeviceGray eq{
- {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer
- imageormask
- }{
- MappedCSA 0 get/DeviceCMYK eq{
- currentcolortransfer
- {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
- setcolortransfer
- tint_image_to_color
- }{
- currentcolortransfer
- {pop 1}exch addprocs 4 1 roll
- {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll
- {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll
- {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll
- setcolortransfer
- tint_image_to_color
- }ifelse
- }ifelse
- }ifelse
- end end
- }def
- /indexed_image_lev1_sep
- {
- /indexed_colorspace_dict AGMCORE_gget begin
- begin
- {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
- {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
- {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
- {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
- AGMCORE_get_ink_data currenttransfer addprocs settransfer
- currentdict imageormask_sys
- end end
- }def
-}if
-end
-systemdict/setpacking known
-{setpacking}if
-%%EndResource
-currentdict Adobe_AGM_Utils eq {end} if
-%%EndProlog
-%%BeginSetup
-Adobe_AGM_Utils begin
-2 2010 Adobe_AGM_Core/ds gx
-Adobe_CoolType_Core/ds get exec
-Adobe_AGM_Image/ds gx
-[/NamespacePush pdfmark_5
-[/_objdef {Doc_Metadata} /type /stream /OBJ pdfmark_5
-[{Doc_Metadata} 1281 (% &end XMP packet& %) ReadBypdfmark_5_string
-<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:xmp="http://ns.adobe.com/xap/1.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
- xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
- xmp:ModifyDate="2011-04-08T15:21:07-05:00"
- xmp:CreateDate="2011-04-08T15:21:07-05:00"
- xmp:MetadataDate="2011-04-08T15:21:07-05:00"
- xmp:CreatorTool="DVIPSONE 2.3.4.149 http://www.YandY.com"
- dc:format="application/pdf"
- xmpMM:DocumentID="uuid:4672a2a6-f2a2-46c1-a618-bae4e40b5b67"
- xmpMM:InstanceID="uuid:840d3c6d-0825-497a-9944-212dd7f55635"
- pdf:Producer="Acrobat Distiller 10.0.1 (Windows)">
- <dc:title>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">test03</rdf:li>
- </rdf:Alt>
- </dc:title>
- <dc:description>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">TeX output 2011.04.08:1517</rdf:li>
- </rdf:Alt>
- </dc:description>
- <dc:creator>
- <rdf:Seq>
- <rdf:li>Donald Story (Complimentary Copy) 4662 2009-10-23 13:17:17</rdf:li>
- </rdf:Seq>
- </dc:creator>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
+%!PS-Adobe-3.1 EPSF-3.0
+%ADO_DSC_Encoding: Windows Roman
+%%Title: graph.pdf
+%%Creator: Adobe Acrobat 10.0.1
+%%For: D. P. Story
+%%CreationDate: 4/8/2011, 3:22:12 PM
+%%BoundingBox: -1 0 257 195
+%%HiResBoundingBox: 0 0 256.7930 194.9510
+%%CropBox: 0 0 256.7930 194.9510
+%%LanguageLevel: 2
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentNeededFeatures: (atend)
+%%DocumentSuppliedFeatures: (atend)
+%%DocumentData: Clean7Bit
+%%Pages: (atend)
+%%DocumentProcessColors: Black
+%%DocumentCustomColors: (atend)
+%%EndComments
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset Adobe_AGM_Utils 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{currentpacking true setpacking}if
+userdict/Adobe_AGM_Utils 75 dict dup begin put
+/bdf
+{bind def}bind def
+/nd{null def}bdf
+/xdf
+{exch def}bdf
+/ldf
+{load def}bdf
+/ddf
+{put}bdf
+/xddf
+{3 -1 roll put}bdf
+/xpt
+{exch put}bdf
+/ndf
+{
+ exch dup where{
+ pop pop pop
+ }{
+ xdf
+ }ifelse
+}def
+/cdndf
+{
+ exch dup currentdict exch known{
+ pop pop
+ }{
+ exch def
+ }ifelse
+}def
+/gx
+{get exec}bdf
+/ps_level
+ /languagelevel where{
+ pop systemdict/languagelevel gx
+ }{
+ 1
+ }ifelse
+def
+/level2
+ ps_level 2 ge
+def
+/level3
+ ps_level 3 ge
+def
+/ps_version
+ {version cvr}stopped{-1}if
+def
+/set_gvm
+{currentglobal exch setglobal}bdf
+/reset_gvm
+{setglobal}bdf
+/makereadonlyarray
+{
+ /packedarray where{pop packedarray
+ }{
+ array astore readonly}ifelse
+}bdf
+/map_reserved_ink_name
+{
+ dup type/stringtype eq{
+ dup/Red eq{
+ pop(_Red_)
+ }{
+ dup/Green eq{
+ pop(_Green_)
+ }{
+ dup/Blue eq{
+ pop(_Blue_)
+ }{
+ dup()cvn eq{
+ pop(Process)
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+}bdf
+/AGMUTIL_GSTATE 22 dict def
+/get_gstate
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_clr_spc currentcolorspace def
+ /AGMUTIL_GSTATE_clr_indx 0 def
+ /AGMUTIL_GSTATE_clr_comps 12 array def
+ mark currentcolor counttomark
+ {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop
+ /AGMUTIL_GSTATE_fnt rootfont def
+ /AGMUTIL_GSTATE_lw currentlinewidth def
+ /AGMUTIL_GSTATE_lc currentlinecap def
+ /AGMUTIL_GSTATE_lj currentlinejoin def
+ /AGMUTIL_GSTATE_ml currentmiterlimit def
+ currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf
+ /AGMUTIL_GSTATE_sa currentstrokeadjust def
+ /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
+ /AGMUTIL_GSTATE_op currentoverprint def
+ /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
+ /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
+ currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf
+ cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf
+ /AGMUTIL_GSTATE_ht currenthalftone def
+ /AGMUTIL_GSTATE_flt currentflat def
+ end
+}def
+/set_gstate
+{
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_clr_spc setcolorspace
+ AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor
+ AGMUTIL_GSTATE_fnt setfont
+ AGMUTIL_GSTATE_lw setlinewidth
+ AGMUTIL_GSTATE_lc setlinecap
+ AGMUTIL_GSTATE_lj setlinejoin
+ AGMUTIL_GSTATE_ml setmiterlimit
+ AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
+ AGMUTIL_GSTATE_sa setstrokeadjust
+ AGMUTIL_GSTATE_clr_rnd setcolorrendering
+ AGMUTIL_GSTATE_op setoverprint
+ AGMUTIL_GSTATE_bg cvx setblackgeneration
+ AGMUTIL_GSTATE_ucr cvx setundercolorremoval
+ AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
+ AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
+ AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or
+ {
+ currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne
+ {
+ mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark
+ }if
+ }{
+ AGMUTIL_GSTATE_ht sethalftone
+ }ifelse
+ AGMUTIL_GSTATE_flt setflat
+ end
+}def
+/get_gstate_and_matrix
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_ctm matrix currentmatrix def
+ end
+ get_gstate
+}def
+/set_gstate_and_matrix
+{
+ set_gstate
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_ctm setmatrix
+ end
+}def
+/AGMUTIL_str256 256 string def
+/AGMUTIL_src256 256 string def
+/AGMUTIL_dst64 64 string def
+/AGMUTIL_srcLen nd
+/AGMUTIL_ndx nd
+/AGMUTIL_cpd nd
+/capture_cpd{
+ //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf
+}def
+/thold_halftone
+{
+ level3
+ {sethalftone currenthalftone}
+ {
+ dup/HalftoneType get 3 eq
+ {
+ sethalftone currenthalftone
+ }{
+ begin
+ Width Height mul{
+ Thresholds read{pop}if
+ }repeat
+ end
+ currenthalftone
+ }ifelse
+ }ifelse
+}def
+/rdcmntline
+{
+ currentfile AGMUTIL_str256 readline pop
+ (%)anchorsearch{pop}if
+}bdf
+/filter_cmyk
+{
+ dup type/filetype ne{
+ exch()/SubFileDecode filter
+ }{
+ exch pop
+ }
+ ifelse
+ [
+ exch
+ {
+ AGMUTIL_src256 readstring pop
+ dup length/AGMUTIL_srcLen exch def
+ /AGMUTIL_ndx 0 def
+ AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
+ 1 index exch get
+ AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
+ /AGMUTIL_ndx AGMUTIL_ndx 1 add def
+ }for
+ pop
+ AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
+ }
+ bind
+ /exec cvx
+ ]cvx
+}bdf
+/filter_indexed_devn
+{
+ cvi Names length mul names_index add Lookup exch get
+}bdf
+/filter_devn
+{
+ 4 dict begin
+ /srcStr xdf
+ /dstStr xdf
+ dup type/filetype ne{
+ 0()/SubFileDecode filter
+ }if
+ [
+ exch
+ [
+ /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx
+ currentdict/srcStr get/readstring cvx/pop cvx
+ /dup cvx/length cvx 0/gt cvx[
+ Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx
+ names_index Names length currentdict/srcStr get length 1 sub{
+ 1/index cvx/exch cvx/get cvx
+ currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx
+ Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx
+ }for
+ currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx
+ ]cvx/if cvx
+ /end cvx
+ ]cvx
+ bind
+ /exec cvx
+ ]cvx
+ end
+}bdf
+/AGMUTIL_imagefile nd
+/read_image_file
+{
+ AGMUTIL_imagefile 0 setfileposition
+ 10 dict begin
+ /imageDict xdf
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ /imbufIdx 0 def
+ /origDataSource imageDict/DataSource get def
+ /origMultipleDataSources imageDict/MultipleDataSources get def
+ /origDecode imageDict/Decode get def
+ /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def
+ imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ {
+ /imbufCnt imageDict/DataSource get length def
+ /imbufs imbufCnt array def
+ 0 1 imbufCnt 1 sub{
+ /imbufIdx xdf
+ imbufs imbufIdx imbufLen string put
+ imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put
+ }for
+ DeviceN_PS2{
+ imageDict begin
+ /DataSource[DataSource/devn_sep_datasource cvx]cvx def
+ /MultipleDataSources false def
+ /Decode[0 1]def
+ end
+ }if
+ }{
+ /imbuf imbufLen string def
+ Indexed_DeviceN level3 not and DeviceN_NoneName or{
+ /srcDataStrs[imageDict begin
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi string
+ }repeat
+ end]def
+ imageDict begin
+ /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def
+ /Decode[0 1]def
+ end
+ }{
+ imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put
+ imageDict/Decode[0 1]put
+ }ifelse
+ }ifelse
+ imageDict exch
+ load exec
+ imageDict/DataSource origDataSource put
+ imageDict/MultipleDataSources origMultipleDataSources put
+ imageDict/Decode origDecode put
+ end
+}bdf
+/write_image_file
+{
+ begin
+ {(AGMUTIL_imagefile)(w+)file}stopped{
+ false
+ }{
+ Adobe_AGM_Utils/AGMUTIL_imagefile xddf
+ 2 dict begin
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{
+ /imbuf imbufLen string def
+ }if
+ 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{
+ pop
+ MultipleDataSources{
+ 0 1 DataSource length 1 sub{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exch gx
+ }{
+ /filetype eq{
+ DataSource exch get imbuf readstring pop
+ }{
+ DataSource exch get
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }for
+ }{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exec
+ }{
+ /filetype eq{
+ DataSource imbuf readstring pop
+ }{
+ DataSource
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }ifelse
+ }for
+ end
+ true
+ }ifelse
+ end
+}bdf
+/close_image_file
+{
+ AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile
+}def
+statusdict/product known userdict/AGMP_current_show known not and{
+ /pstr statusdict/product get def
+ pstr(HP LaserJet 2200)eq
+ pstr(HP LaserJet 4000 Series)eq or
+ pstr(HP LaserJet 4050 Series )eq or
+ pstr(HP LaserJet 8000 Series)eq or
+ pstr(HP LaserJet 8100 Series)eq or
+ pstr(HP LaserJet 8150 Series)eq or
+ pstr(HP LaserJet 5000 Series)eq or
+ pstr(HP LaserJet 5100 Series)eq or
+ pstr(HP Color LaserJet 4500)eq or
+ pstr(HP Color LaserJet 4600)eq or
+ pstr(HP LaserJet 5Si)eq or
+ pstr(HP LaserJet 1200 Series)eq or
+ pstr(HP LaserJet 1300 Series)eq or
+ pstr(HP LaserJet 4100 Series)eq or
+ {
+ userdict/AGMP_current_show/show load put
+ userdict/show{
+ currentcolorspace 0 get
+ /Pattern eq
+ {false charpath f}
+ {AGMP_current_show}ifelse
+ }put
+ }if
+ currentdict/pstr undef
+}if
+/consumeimagedata
+{
+ begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known not
+ {/MultipleDataSources false def}if
+ MultipleDataSources
+ {
+ DataSource 0 get type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width cvi string def
+ 1 1 Height cvi
+ {
+ pop
+ 0 1 DataSource length 1 sub
+ {
+ DataSource exch get
+ flushbuffer readstring pop pop
+ }for
+ }for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and
+ {
+ Width Height mul cvi
+ {
+ 0 1 DataSource length 1 sub
+ {dup DataSource exch gx length exch 0 ne{pop}if}for
+ dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }
+ {
+ /DataSource load type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width Decode length 2 idiv mul cvi string def
+ 1 1 Height{pop DataSource flushbuffer readstring pop pop}for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and
+ {
+ Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul
+ {
+ DataSource length dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }ifelse
+ end
+}bdf
+/addprocs
+{
+ 2{/exec load}repeat
+ 3 1 roll
+ [5 1 roll]bind cvx
+}def
+/modify_halftone_xfer
+{
+ currenthalftone dup length dict copy begin
+ currentdict 2 index known{
+ 1 index load dup length dict copy begin
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end def
+ currentdict end sethalftone
+ }{
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end sethalftone
+ pop
+ }ifelse
+}def
+/clonearray
+{
+ dup xcheck exch
+ dup length array exch
+ Adobe_AGM_Core/AGMCORE_tmp -1 ddf
+ {
+ Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf
+ dup type/dicttype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get
+ exch
+ clonedict
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ dup type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get exch
+ clonearray
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ exch dup
+ Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put
+ }forall
+ exch{cvx}if
+}bdf
+/clonedict
+{
+ dup length dict
+ begin
+ {
+ dup type/dicttype eq
+ {clonedict}if
+ dup type/arraytype eq
+ {clonearray}if
+ def
+ }forall
+ currentdict
+ end
+}bdf
+/DeviceN_PS2
+{
+ /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and
+}bdf
+/Indexed_DeviceN
+{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne{
+ dup/CSDBase known{
+ /CSDBase get/CSD get_res/Names known
+ }{
+ pop false
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}bdf
+/DeviceN_NoneName
+{
+ /Names where{
+ pop
+ false Names
+ {
+ (None)eq or
+ }forall
+ }{
+ false
+ }ifelse
+}bdf
+/DeviceN_PS2_inRip_seps
+{
+ /AGMCORE_in_rip_sep where
+ {
+ pop dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and
+ {
+ /currentcolorspace exch AGMCORE_gput
+ false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+}bdf
+/base_colorspace_type
+{
+ dup type/arraytype eq{0 get}if
+}bdf
+/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+{
+ /pdfmark_5{cleartomark}bind def
+}{
+ /pdfmark_5{pdfmark}bind def
+}ifelse
+/ReadBypdfmark_5
+{
+ currentfile exch 0 exch/SubFileDecode filter
+ /currentdistillerparams where
+ {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+ {flushfile cleartomark}
+ {/PUT pdfmark}ifelse
+}bdf
+/ReadBypdfmark_5_string
+{
+ 2 dict begin
+ /makerString exch def string/tmpString exch def
+ {
+ currentfile tmpString readline not{pop exit}if
+ makerString anchorsearch
+ {
+ pop pop cleartomark exit
+ }{
+ 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5
+ }ifelse
+ }loop
+ end
+}bdf
+/xpdfm
+{
+ {
+ dup 0 get/Label eq
+ {
+ aload length[exch 1 add 1 roll/PAGELABEL
+ }{
+ aload pop
+ [{ThisPage}<<5 -2 roll>>/PUT
+ }ifelse
+ pdfmark_5
+ }forall
+}bdf
+/lmt{
+ dup 2 index le{exch}if pop dup 2 index ge{exch}if pop
+}bdf
+/int{
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop
+}bdf
+/ds{
+ Adobe_AGM_Utils begin
+}bdf
+/dt{
+ currentdict Adobe_AGM_Utils eq{
+ end
+ }if
+}bdf
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_AGM_Core 2.0 0
+%%Version: 2.0 0
+%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Core 209 dict dup begin put
+/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def
+/AGMCORE_str256 256 string def
+/AGMCORE_save nd
+/AGMCORE_graphicsave nd
+/AGMCORE_c 0 def
+/AGMCORE_m 0 def
+/AGMCORE_y 0 def
+/AGMCORE_k 0 def
+/AGMCORE_cmykbuf 4 array def
+/AGMCORE_screen[currentscreen]cvx def
+/AGMCORE_tmp 0 def
+/AGMCORE_&setgray nd
+/AGMCORE_&setcolor nd
+/AGMCORE_&setcolorspace nd
+/AGMCORE_&setcmykcolor nd
+/AGMCORE_cyan_plate nd
+/AGMCORE_magenta_plate nd
+/AGMCORE_yellow_plate nd
+/AGMCORE_black_plate nd
+/AGMCORE_plate_ndx nd
+/AGMCORE_get_ink_data nd
+/AGMCORE_is_cmyk_sep nd
+/AGMCORE_host_sep nd
+/AGMCORE_avoid_L2_sep_space nd
+/AGMCORE_distilling nd
+/AGMCORE_composite_job nd
+/AGMCORE_producing_seps nd
+/AGMCORE_ps_level -1 def
+/AGMCORE_ps_version -1 def
+/AGMCORE_environ_ok nd
+/AGMCORE_CSD_cache 0 dict def
+/AGMCORE_currentoverprint false def
+/AGMCORE_deltaX nd
+/AGMCORE_deltaY nd
+/AGMCORE_name nd
+/AGMCORE_sep_special nd
+/AGMCORE_err_strings 4 dict def
+/AGMCORE_cur_err nd
+/AGMCORE_current_spot_alias false def
+/AGMCORE_inverting false def
+/AGMCORE_feature_dictCount nd
+/AGMCORE_feature_opCount nd
+/AGMCORE_feature_ctm nd
+/AGMCORE_ConvertToProcess false def
+/AGMCORE_Default_CTM matrix def
+/AGMCORE_Default_PageSize nd
+/AGMCORE_Default_flatness nd
+/AGMCORE_currentbg nd
+/AGMCORE_currentucr nd
+/AGMCORE_pattern_paint_type 0 def
+/knockout_unitsq nd
+currentglobal true setglobal
+[/CSA/Gradient/Procedure]
+{
+ /Generic/Category findresource dup length dict copy/Category defineresource pop
+}forall
+setglobal
+/AGMCORE_key_known
+{
+ where{
+ /Adobe_AGM_Core_Id known
+ }{
+ false
+ }ifelse
+}ndf
+/flushinput
+{
+ save
+ 2 dict begin
+ /CompareBuffer 3 -1 roll def
+ /readbuffer 256 string def
+ mark
+ {
+ currentfile readbuffer{readline}stopped
+ {cleartomark mark}
+ {
+ not
+ {pop exit}
+ if
+ CompareBuffer eq
+ {exit}
+ if
+ }ifelse
+ }loop
+ cleartomark
+ end
+ restore
+}bdf
+/getspotfunction
+{
+ AGMCORE_screen exch pop exch pop
+ dup type/dicttype eq{
+ dup/HalftoneType get 1 eq{
+ /SpotFunction get
+ }{
+ dup/HalftoneType get 2 eq{
+ /GraySpotFunction get
+ }{
+ pop
+ {
+ abs exch abs 2 copy add 1 gt{
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ }{
+ dup mul exch dup mul add 1 exch sub
+ }ifelse
+ }bind
+ }ifelse
+ }ifelse
+ }if
+}def
+/np
+{newpath}bdf
+/clp_npth
+{clip np}def
+/eoclp_npth
+{eoclip np}def
+/npth_clp
+{np clip}def
+/graphic_setup
+{
+ /AGMCORE_graphicsave save store
+ concat
+ 0 setgray
+ 0 setlinecap
+ 0 setlinejoin
+ 1 setlinewidth
+ []0 setdash
+ 10 setmiterlimit
+ np
+ false setoverprint
+ false setstrokeadjust
+ //Adobe_AGM_Core/spot_alias gx
+ /Adobe_AGM_Image where{
+ pop
+ Adobe_AGM_Image/spot_alias 2 copy known{
+ gx
+ }{
+ pop pop
+ }ifelse
+ }if
+ /sep_colorspace_dict null AGMCORE_gput
+ 100 dict begin
+ /dictstackcount countdictstack def
+ /showpage{}def
+ mark
+}def
+/graphic_cleanup
+{
+ cleartomark
+ dictstackcount 1 countdictstack 1 sub{end}for
+ end
+ AGMCORE_graphicsave restore
+}def
+/compose_error_msg
+{
+ grestoreall initgraphics
+ /Helvetica findfont 10 scalefont setfont
+ /AGMCORE_deltaY 100 def
+ /AGMCORE_deltaX 310 def
+ clippath pathbbox np pop pop 36 add exch 36 add exch moveto
+ 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
+ 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
+ 0 AGMCORE_&setgray
+ gsave 1 AGMCORE_&setgray fill grestore
+ 1 setlinewidth gsave stroke grestore
+ currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
+ /AGMCORE_deltaY 12 def
+ /AGMCORE_tmp 0 def
+ AGMCORE_err_strings exch get
+ {
+ dup 32 eq
+ {
+ pop
+ AGMCORE_str256 0 AGMCORE_tmp getinterval
+ stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
+ {
+ currentpoint AGMCORE_deltaY sub exch pop
+ clippath pathbbox pop pop pop 44 add exch moveto
+ }if
+ AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show
+ 0 1 AGMCORE_str256 length 1 sub
+ {
+ AGMCORE_str256 exch 0 put
+ }for
+ /AGMCORE_tmp 0 def
+ }{
+ AGMCORE_str256 exch AGMCORE_tmp xpt
+ /AGMCORE_tmp AGMCORE_tmp 1 add def
+ }ifelse
+ }forall
+}bdf
+/AGMCORE_CMYKDeviceNColorspaces[
+ [/Separation/None/DeviceCMYK{0 0 0}]
+ [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind]
+ [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind]
+ [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind]
+ [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind]
+ [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind]
+ [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind]
+ [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind]
+ [/Separation(Cyan)/DeviceCMYK{0 0 0}]
+ [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind]
+ [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind]
+ [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind]
+ [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}]
+ [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind]
+ [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}]
+ [/DeviceCMYK]
+]def
+/ds{
+ Adobe_AGM_Core begin
+ /currentdistillerparams where
+ {
+ pop currentdistillerparams/CoreDistVersion get 5000 lt
+ {<</DetectBlends false>>setdistillerparams}if
+ }if
+ /AGMCORE_ps_version xdf
+ /AGMCORE_ps_level xdf
+ errordict/AGM_handleerror known not{
+ errordict/AGM_handleerror errordict/handleerror get put
+ errordict/handleerror{
+ Adobe_AGM_Core begin
+ $error/newerror get AGMCORE_cur_err null ne and{
+ $error/newerror false put
+ AGMCORE_cur_err compose_error_msg
+ }if
+ $error/newerror true put
+ end
+ errordict/AGM_handleerror get exec
+ }bind put
+ }if
+ /AGMCORE_environ_ok
+ ps_level AGMCORE_ps_level ge
+ ps_version AGMCORE_ps_version ge and
+ AGMCORE_ps_level -1 eq or
+ def
+ AGMCORE_environ_ok not
+ {/AGMCORE_cur_err/AGMCORE_bad_environ def}if
+ /AGMCORE_&setgray systemdict/setgray get def
+ level2{
+ /AGMCORE_&setcolor systemdict/setcolor get def
+ /AGMCORE_&setcolorspace systemdict/setcolorspace get def
+ }if
+ /AGMCORE_currentbg currentblackgeneration def
+ /AGMCORE_currentucr currentundercolorremoval def
+ /AGMCORE_Default_flatness currentflat def
+ /AGMCORE_distilling
+ /product where{
+ pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and
+ }{
+ false
+ }ifelse
+ def
+ /AGMCORE_GSTATE AGMCORE_key_known not{
+ /AGMCORE_GSTATE 21 dict def
+ /AGMCORE_tmpmatrix matrix def
+ /AGMCORE_gstack 32 array def
+ /AGMCORE_gstackptr 0 def
+ /AGMCORE_gstacksaveptr 0 def
+ /AGMCORE_gstackframekeys 14 def
+ /AGMCORE_&gsave/gsave ldf
+ /AGMCORE_&grestore/grestore ldf
+ /AGMCORE_&grestoreall/grestoreall ldf
+ /AGMCORE_&save/save ldf
+ /AGMCORE_&setoverprint/setoverprint ldf
+ /AGMCORE_gdictcopy{
+ begin
+ {def}forall
+ end
+ }def
+ /AGMCORE_gput{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ 3 1 roll
+ put
+ }def
+ /AGMCORE_gget{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ exch
+ get
+ }def
+ /gsave{
+ AGMCORE_&gsave
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /grestore{
+ AGMCORE_&grestore
+ AGMCORE_gstackptr 1 sub
+ dup AGMCORE_gstacksaveptr lt{1 add}if
+ dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known
+ {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse
+ /AGMCORE_gstackptr exch store
+ }def
+ /grestoreall{
+ AGMCORE_&grestoreall
+ /AGMCORE_gstackptr AGMCORE_gstacksaveptr store
+ }def
+ /save{
+ AGMCORE_&save
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ /AGMCORE_gstacksaveptr AGMCORE_gstackptr store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /setoverprint{
+ dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint
+ }def
+ 0 1 AGMCORE_gstack length 1 sub{
+ AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
+ }for
+ }if
+ level3/AGMCORE_&sysshfill AGMCORE_key_known not and
+ {
+ /AGMCORE_&sysshfill systemdict/shfill get def
+ /AGMCORE_&sysmakepattern systemdict/makepattern get def
+ /AGMCORE_&usrmakepattern/makepattern load def
+ }if
+ /currentcmykcolor[0 0 0 0]AGMCORE_gput
+ /currentstrokeadjust false AGMCORE_gput
+ /currentcolorspace[/DeviceGray]AGMCORE_gput
+ /sep_tint 0 AGMCORE_gput
+ /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput
+ /sep_colorspace_dict null AGMCORE_gput
+ /devicen_colorspace_dict null AGMCORE_gput
+ /indexed_colorspace_dict null AGMCORE_gput
+ /currentcolor_intent()AGMCORE_gput
+ /customcolor_tint 1 AGMCORE_gput
+ /absolute_colorimetric_crd null AGMCORE_gput
+ /relative_colorimetric_crd null AGMCORE_gput
+ /saturation_crd null AGMCORE_gput
+ /perceptual_crd null AGMCORE_gput
+ currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf
+ cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf
+ <<
+ /MaxPatternItem currentsystemparams/MaxPatternCache get
+ >>
+ setuserparams
+ end
+}def
+/ps
+{
+ /setcmykcolor where{
+ pop
+ Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put
+ }if
+ Adobe_AGM_Core begin
+ /setcmykcolor
+ {
+ 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput
+ 1 sub 4 1 roll
+ 3{
+ 3 index add neg dup 0 lt{
+ pop 0
+ }if
+ 3 1 roll
+ }repeat
+ setrgbcolor pop
+ }ndf
+ /currentcmykcolor
+ {
+ /currentcmykcolor AGMCORE_gget aload pop
+ }ndf
+ /setoverprint
+ {pop}ndf
+ /currentoverprint
+ {false}ndf
+ /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
+ /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
+ /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
+ /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
+ /AGMCORE_plate_ndx
+ AGMCORE_cyan_plate{
+ 0
+ }{
+ AGMCORE_magenta_plate{
+ 1
+ }{
+ AGMCORE_yellow_plate{
+ 2
+ }{
+ AGMCORE_black_plate{
+ 3
+ }{
+ 4
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_have_reported_unsupported_color_space false def
+ /AGMCORE_report_unsupported_color_space
+ {
+ AGMCORE_have_reported_unsupported_color_space false eq
+ {
+ (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)==
+ Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf
+ }if
+ }def
+ /AGMCORE_composite_job
+ AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
+ /AGMCORE_in_rip_sep
+ /AGMCORE_in_rip_sep where{
+ pop AGMCORE_in_rip_sep
+ }{
+ AGMCORE_distilling
+ {
+ false
+ }{
+ userdict/Adobe_AGM_OnHost_Seps known{
+ false
+ }{
+ level2{
+ currentpagedevice/Separations 2 copy known{
+ get
+ }{
+ pop pop false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
+ /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
+ /AGM_preserve_spots
+ /AGM_preserve_spots where{
+ pop AGM_preserve_spots
+ }{
+ AGMCORE_distilling AGMCORE_producing_seps or
+ }ifelse
+ def
+ /AGM_is_distiller_preserving_spotimages
+ {
+ currentdistillerparams/PreserveOverprintSettings known
+ {
+ currentdistillerparams/PreserveOverprintSettings get
+ {
+ currentdistillerparams/ColorConversionStrategy known
+ {
+ currentdistillerparams/ColorConversionStrategy get
+ /sRGB ne
+ }{
+ true
+ }ifelse
+ }{
+ false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }def
+ /convert_spot_to_process where{pop}{
+ /convert_spot_to_process
+ {
+ //Adobe_AGM_Core begin
+ dup map_alias{
+ /Name get exch pop
+ }if
+ dup dup(None)eq exch(All)eq or
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ gsave
+ 1 0 0 0 setcmykcolor currentgray 1 exch sub
+ 0 1 0 0 setcmykcolor currentgray 1 exch sub
+ 0 0 1 0 setcmykcolor currentgray 1 exch sub
+ 0 0 0 1 setcmykcolor currentgray 1 exch sub
+ add add add 0 eq
+ {
+ pop false
+ }{
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ }ifelse
+ grestore
+ }{
+ AGMCORE_distilling
+ {
+ pop AGM_is_distiller_preserving_spotimages not
+ }{
+ //Adobe_AGM_Core/AGMCORE_name xddf
+ false
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq
+ AGMUTIL_cpd/OverrideSeparations known and
+ {
+ AGMUTIL_cpd/OverrideSeparations get
+ {
+ /HqnSpots/ProcSet resourcestatus
+ {
+ pop pop pop true
+ }if
+ }if
+ }if
+ {
+ AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not
+ }{
+ gsave
+ [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace
+ false
+ AGMUTIL_cpd/SeparationColorNames 2 copy known
+ {
+ get
+ {AGMCORE_name eq or}forall
+ not
+ }{
+ pop pop pop true
+ }ifelse
+ grestore
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ }ifelse
+ /convert_to_process where{pop}{
+ /convert_to_process
+ {
+ dup length 0 eq
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ dup true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process and}ifelse
+ }
+ forall
+ {
+ true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ (Black)eq or and
+ }forall
+ not
+ }{pop false}ifelse
+ }{
+ false exch
+ {
+ /PhotoshopDuotoneList where{pop false}{true}ifelse
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process or}ifelse
+ }
+ {
+ convert_spot_to_process or
+ }
+ ifelse
+ }
+ forall
+ }ifelse
+ }ifelse
+ }def
+ }ifelse
+ /AGMCORE_avoid_L2_sep_space
+ version cvr 2012 lt
+ level2 and
+ AGMCORE_producing_seps not and
+ def
+ /AGMCORE_is_cmyk_sep
+ AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
+ def
+ /AGM_avoid_0_cmyk where{
+ pop AGM_avoid_0_cmyk
+ }{
+ AGM_preserve_spots
+ userdict/Adobe_AGM_OnHost_Seps known
+ userdict/Adobe_AGM_InRip_Seps known or
+ not and
+ }ifelse
+ {
+ /setcmykcolor[
+ {
+ 4 copy add add add 0 eq currentoverprint and{
+ pop 0.0005
+ }if
+ }/exec cvx
+ /AGMCORE_&setcmykcolor load dup type/operatortype ne{
+ /exec cvx
+ }if
+ ]cvx def
+ }if
+ /AGMCORE_IsSeparationAProcessColor
+ {
+ dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or
+ }def
+ AGMCORE_host_sep{
+ /setcolortransfer
+ {
+ AGMCORE_cyan_plate{
+ pop pop pop
+ }{
+ AGMCORE_magenta_plate{
+ 4 3 roll pop pop pop
+ }{
+ AGMCORE_yellow_plate{
+ 4 2 roll pop pop pop
+ }{
+ 4 1 roll pop pop pop
+ }ifelse
+ }ifelse
+ }ifelse
+ settransfer
+ }
+ def
+ /AGMCORE_get_ink_data
+ AGMCORE_cyan_plate{
+ {pop pop pop}
+ }{
+ AGMCORE_magenta_plate{
+ {4 3 roll pop pop pop}
+ }{
+ AGMCORE_yellow_plate{
+ {4 2 roll pop pop pop}
+ }{
+ {4 1 roll pop pop pop}
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_RemoveProcessColorNames
+ {
+ 1 dict begin
+ /filtername
+ {
+ dup/Cyan eq 1 index(Cyan)eq or
+ {pop(_cyan_)}if
+ dup/Magenta eq 1 index(Magenta)eq or
+ {pop(_magenta_)}if
+ dup/Yellow eq 1 index(Yellow)eq or
+ {pop(_yellow_)}if
+ dup/Black eq 1 index(Black)eq or
+ {pop(_black_)}if
+ }def
+ dup type/arraytype eq
+ {[exch{filtername}forall]}
+ {filtername}ifelse
+ end
+ }def
+ level3{
+ /AGMCORE_IsCurrentColor
+ {
+ dup AGMCORE_IsSeparationAProcessColor
+ {
+ AGMCORE_plate_ndx 0 eq
+ {dup(Cyan)eq exch/Cyan eq or}if
+ AGMCORE_plate_ndx 1 eq
+ {dup(Magenta)eq exch/Magenta eq or}if
+ AGMCORE_plate_ndx 2 eq
+ {dup(Yellow)eq exch/Yellow eq or}if
+ AGMCORE_plate_ndx 3 eq
+ {dup(Black)eq exch/Black eq or}if
+ AGMCORE_plate_ndx 4 eq
+ {pop false}if
+ }{
+ gsave
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ grestore
+ }ifelse
+ }def
+ /AGMCORE_filter_functiondatasource
+ {
+ 5 dict begin
+ /data_in xdf
+ data_in type/stringtype eq
+ {
+ /ncomp xdf
+ /comp xdf
+ /string_out data_in length ncomp idiv string def
+ 0 ncomp data_in length 1 sub
+ {
+ string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
+ }for
+ string_out
+ }{
+ string/string_in xdf
+ /string_out 1 string def
+ /component xdf
+ [
+ data_in string_in/readstring cvx
+ [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx
+ [/pop cvx()]cvx/ifelse cvx
+ ]cvx/ReusableStreamDecode filter
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingFunction
+ {
+ 2 dict begin
+ /paint? xdf
+ /channel xdf
+ dup type/dicttype eq
+ {
+ begin
+ FunctionType 0 eq
+ {
+ /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
+ currentdict/Decode known
+ {/Decode Decode channel 2 mul 2 getinterval def}if
+ paint? not
+ {/Decode[1 1]def}if
+ }if
+ FunctionType 2 eq
+ {
+ paint?
+ {
+ /C0[C0 channel get 1 exch sub]def
+ /C1[C1 channel get 1 exch sub]def
+ }{
+ /C0[1]def
+ /C1[1]def
+ }ifelse
+ }if
+ FunctionType 3 eq
+ {
+ /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def
+ }if
+ currentdict/Range known
+ {/Range[0 1]def}if
+ currentdict
+ end}{
+ channel get 0 paint? AGMCORE_separateShadingFunction
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShading
+ {
+ 3 -1 roll begin
+ currentdict/Function known
+ {
+ currentdict/Background known
+ {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
+ Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf
+ /ColorSpace[/DeviceGray]def
+ }{
+ ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }{
+ ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
+ }ifelse
+ ColorSpace 0 get/Separation eq
+ {
+ {
+ [1/exch cvx/sub cvx]cvx
+ }{
+ [/pop cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll put
+ pop
+ }{
+ {
+ [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx
+ }{
+ pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll bind put
+ }ifelse
+ ColorSpace 2/DeviceGray put
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingDict
+ {
+ dup/ColorSpace get
+ dup type/arraytype ne
+ {[exch]}if
+ dup 0 get/DeviceCMYK eq
+ {
+ exch begin
+ currentdict
+ AGMCORE_cyan_plate
+ {0 true}if
+ AGMCORE_magenta_plate
+ {1 true}if
+ AGMCORE_yellow_plate
+ {2 true}if
+ AGMCORE_black_plate
+ {3 true}if
+ AGMCORE_plate_ndx 4 eq
+ {0 false}if
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ currentdict
+ end exch
+ }if
+ dup 0 get/Separation eq
+ {
+ exch begin
+ ColorSpace 1 get dup/None ne exch/All ne and
+ {
+ ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /Separation
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }ifelse
+ }{
+ currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
+ 0 exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ }if
+ currentdict
+ end exch
+ }if
+ dup 0 get/DeviceN eq
+ {
+ exch begin
+ ColorSpace 1 get convert_to_process
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /DeviceN
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ /ColorSpace[/DeviceGray]def
+ }if
+ }ifelse
+ }{
+ currentdict
+ false -1 ColorSpace 1 get
+ {
+ AGMCORE_IsCurrentColor
+ {
+ 1 add
+ exch pop true exch exit
+ }if
+ 1 add
+ }forall
+ exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ currentdict
+ end exch
+ }if
+ dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not
+ {
+ exch begin
+ ColorSpace dup type/arraytype eq
+ {0 get}if
+ /DeviceGray ne
+ {
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ ColorSpace 0 get/CIEBasedA eq
+ {
+ /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def
+ }if
+ ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or
+ {
+ /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def
+ }if
+ ColorSpace 0 get/CIEBasedDEFG eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }if
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }if
+ currentdict
+ end exch
+ }if
+ pop
+ dup/AGMCORE_ignoreshade known
+ {
+ begin
+ /ColorSpace[/Separation(None)/DeviceGray{}]def
+ currentdict end
+ }if
+ }def
+ /shfill
+ {
+ AGMCORE_separateShadingDict
+ dup/AGMCORE_ignoreshade known
+ {pop}
+ {AGMCORE_&sysshfill}ifelse
+ }def
+ /makepattern
+ {
+ exch
+ dup/PatternType get 2 eq
+ {
+ clonedict
+ begin
+ /Shading Shading AGMCORE_separateShadingDict def
+ Shading/AGMCORE_ignoreshade known
+ currentdict end exch
+ {pop<</PatternType 1/PaintProc{pop}/BBox[0 0 1 1]/XStep 1/YStep 1/PaintType 1/TilingType 3>>}if
+ exch AGMCORE_&sysmakepattern
+ }{
+ exch AGMCORE_&usrmakepattern
+ }ifelse
+ }def
+ }if
+ }if
+ AGMCORE_in_rip_sep{
+ /setcustomcolor
+ {
+ exch aload pop
+ dup 7 1 roll inRip_spot_has_ink not {
+ 4{4 index mul 4 1 roll}
+ repeat
+ /DeviceCMYK setcolorspace
+ 6 -2 roll pop pop
+ }{
+ //Adobe_AGM_Core begin
+ /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf
+ end
+ [/Separation 4 -1 roll/DeviceCMYK
+ {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
+ ]
+ setcolorspace
+ }ifelse
+ setcolor
+ }ndf
+ /setseparationgray
+ {
+ [/Separation(All)/DeviceGray{}]setcolorspace_opt
+ 1 exch sub setcolor
+ }ndf
+ }{
+ /setseparationgray
+ {
+ AGMCORE_&setgray
+ }ndf
+ }ifelse
+ /findcmykcustomcolor
+ {
+ 5 makereadonlyarray
+ }ndf
+ /setcustomcolor
+ {
+ exch aload pop pop
+ 4{4 index mul 4 1 roll}repeat
+ setcmykcolor pop
+ }ndf
+ /has_color
+ /colorimage where{
+ AGMCORE_producing_seps{
+ pop true
+ }{
+ systemdict eq
+ }ifelse
+ }{
+ false
+ }ifelse
+ def
+ /map_index
+ {
+ 1 index mul exch getinterval{255 div}forall
+ }bdf
+ /map_indexed_devn
+ {
+ Lookup Names length 3 -1 roll cvi map_index
+ }bdf
+ /n_color_components
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop 1
+ }{
+ /DeviceCMYK eq{
+ 4
+ }{
+ 3
+ }ifelse
+ }ifelse
+ }bdf
+ level2{
+ /mo/moveto ldf
+ /li/lineto ldf
+ /cv/curveto ldf
+ /knockout_unitsq
+ {
+ 1 setgray
+ 0 0 1 1 rectfill
+ }def
+ level2/setcolorspace AGMCORE_key_known not and{
+ /AGMCORE_&&&setcolorspace/setcolorspace ldf
+ /AGMCORE_ReplaceMappedColor
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ dup 0 get dup/Separation eq
+ {
+ pop
+ dup length array copy
+ dup dup 1 get
+ current_spot_alias
+ {
+ dup map_alias
+ {
+ false set_spot_alias
+ dup 1 exch setsepcolorspace
+ true set_spot_alias
+ begin
+ /sep_colorspace_dict currentdict AGMCORE_gput
+ pop pop pop
+ [
+ /Separation Name
+ CSA map_csa
+ MappedCSA
+ /sep_colorspace_proc load
+ ]
+ dup Name
+ end
+ }if
+ }if
+ map_reserved_ink_name 1 xpt
+ }{
+ /DeviceN eq
+ {
+ dup length array copy
+ dup dup 1 get[
+ exch{
+ current_spot_alias{
+ dup map_alias{
+ /Name get exch pop
+ }if
+ }if
+ map_reserved_ink_name
+ }forall
+ ]1 xpt
+ }if
+ }ifelse
+ end
+ }if
+ }if
+ }def
+ /setcolorspace
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/Indexed eq
+ {
+ AGMCORE_distilling
+ {
+ /PhotoshopDuotoneList where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ {
+ aload pop 3 -1 roll
+ AGMCORE_ReplaceMappedColor
+ 3 1 roll 4 array astore
+ }if
+ }{
+ AGMCORE_ReplaceMappedColor
+ }ifelse
+ }if
+ DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if
+ }def
+ }if
+ }{
+ /adj
+ {
+ currentstrokeadjust{
+ transform
+ 0.25 sub round 0.25 add exch
+ 0.25 sub round 0.25 add exch
+ itransform
+ }if
+ }def
+ /mo{
+ adj moveto
+ }def
+ /li{
+ adj lineto
+ }def
+ /cv{
+ 6 2 roll adj
+ 6 2 roll adj
+ 6 2 roll adj curveto
+ }def
+ /knockout_unitsq
+ {
+ 1 setgray
+ 8 8 1[8 0 0 8 0 0]{<ffffffffffffffff>}image
+ }def
+ /currentstrokeadjust{
+ /currentstrokeadjust AGMCORE_gget
+ }def
+ /setstrokeadjust{
+ /currentstrokeadjust exch AGMCORE_gput
+ }def
+ /setcolorspace
+ {
+ /currentcolorspace exch AGMCORE_gput
+ }def
+ /currentcolorspace
+ {
+ /currentcolorspace AGMCORE_gget
+ }def
+ /setcolor_devicecolor
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop setgray
+ }{
+ /DeviceCMYK eq{
+ setcmykcolor
+ }{
+ setrgbcolor
+ }ifelse
+ }ifelse
+ }def
+ /setcolor
+ {
+ currentcolorspace 0 get
+ dup/DeviceGray ne{
+ dup/DeviceCMYK ne{
+ dup/DeviceRGB ne{
+ dup/Separation eq{
+ pop
+ currentcolorspace 3 gx
+ currentcolorspace 2 get
+ }{
+ dup/Indexed eq{
+ pop
+ currentcolorspace 3 get dup type/stringtype eq{
+ currentcolorspace 1 get n_color_components
+ 3 -1 roll map_index
+ }{
+ exec
+ }ifelse
+ currentcolorspace 1 get
+ }{
+ /AGMCORE_cur_err/AGMCORE_invalid_color_space def
+ AGMCORE_invalid_color_space
+ }ifelse
+ }ifelse
+ }if
+ }if
+ }if
+ setcolor_devicecolor
+ }def
+ }ifelse
+ /sop/setoverprint ldf
+ /lw/setlinewidth ldf
+ /lc/setlinecap ldf
+ /lj/setlinejoin ldf
+ /ml/setmiterlimit ldf
+ /dsh/setdash ldf
+ /sadj/setstrokeadjust ldf
+ /gry/setgray ldf
+ /rgb/setrgbcolor ldf
+ /cmyk[
+ /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx
+ /setcmykcolor load dup type/operatortype ne{/exec cvx}if
+ ]cvx bdf
+ level3 AGMCORE_host_sep not and{
+ /nzopmsc{
+ 6 dict begin
+ /kk exch def
+ /yy exch def
+ /mm exch def
+ /cc exch def
+ /sum 0 def
+ cc 0 ne{/sum sum 2#1000 or def cc}if
+ mm 0 ne{/sum sum 2#0100 or def mm}if
+ yy 0 ne{/sum sum 2#0010 or def yy}if
+ kk 0 ne{/sum sum 2#0001 or def kk}if
+ AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace
+ sum 0 eq{0}if
+ end
+ setcolor
+ }bdf
+ }{
+ /nzopmsc/cmyk ldf
+ }ifelse
+ /sep/setsepcolor ldf
+ /devn/setdevicencolor ldf
+ /idx/setindexedcolor ldf
+ /colr/setcolor ldf
+ /csacrd/set_csa_crd ldf
+ /sepcs/setsepcolorspace ldf
+ /devncs/setdevicencolorspace ldf
+ /idxcs/setindexedcolorspace ldf
+ /cp/closepath ldf
+ /clp/clp_npth ldf
+ /eclp/eoclp_npth ldf
+ /f/fill ldf
+ /ef/eofill ldf
+ /@/stroke ldf
+ /nclp/npth_clp ldf
+ /gset/graphic_setup ldf
+ /gcln/graphic_cleanup ldf
+ /ct/concat ldf
+ /cf/currentfile ldf
+ /fl/filter ldf
+ /rs/readstring ldf
+ /AGMCORE_def_ht currenthalftone def
+ /clonedict Adobe_AGM_Utils begin/clonedict load end def
+ /clonearray Adobe_AGM_Utils begin/clonearray load end def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+ /getrampcolor
+ {
+ /indx exch def
+ 0 1 NumComp 1 sub
+ {
+ dup
+ Samples exch get
+ dup type/stringtype eq{indx get}if
+ exch
+ Scaling exch get aload pop
+ 3 1 roll
+ mul add
+ }for
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /sssetbackground{
+ aload pop
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /RadialShade
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /r2 xdf
+ /c2y xdf
+ /c2x xdf
+ /r1 xdf
+ /c1y xdf
+ /c1x xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ c1x c2x eq
+ {
+ c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope c2y c1y sub c2x c1x sub div def
+ /theta slope 1 atan def
+ c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if
+ c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if
+ }ifelse
+ gsave
+ clippath
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax xdf
+ /xMax xdf
+ /yMin xdf
+ /xMin xdf
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ /max{2 copy gt{pop}{exch pop}ifelse}bdf
+ /min{2 copy lt{pop}{exch pop}ifelse}bdf
+ rampdict begin
+ 40 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
+ /c1y 0 def
+ /c1x 0 def
+ /c2x 0 def
+ ext0
+ {
+ 0 getrampcolor
+ c2y r2 add r1 sub 0.0001 lt
+ {
+ c1x c1y r1 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2y r1 add r2 le
+ {
+ c1x c1y r1 0 360 arc
+ fill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r1 neg def
+ /p1y c1y def
+ /p2x r1 def
+ /p2y c1y def
+ p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y p1x SS1 div neg def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y p2x SS2 div neg def
+ r1 r2 gt
+ {
+ /L1maxX p1x yMin p1y sub SS1 div add def
+ /L2maxX p2x yMin p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ c1x c2x sub dup mul
+ c1y c2y sub dup mul
+ add 0.5 exp
+ 0 dtransform
+ dup mul exch dup mul add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ /hires xdf
+ hires mul
+ /numpix xdf
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ /xInc c2x c1x sub numsteps div def
+ /yInc c2y c1y sub numsteps div def
+ /rInc r2 r1 sub numsteps div def
+ /cx c1x def
+ /cy c1y def
+ /radius r1 def
+ np
+ xInc 0 eq yInc 0 eq rInc 0 eq and and
+ {
+ 0 getrampcolor
+ cx cy radius 0 360 arc
+ stroke
+ NumSamples 1 sub getrampcolor
+ cx cy radius 72 hires div add 0 360 arc
+ 0 setlinewidth
+ stroke
+ }{
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ cx cy radius 0 360 arc
+ /cx cx xInc add def
+ /cy cy yInc add def
+ /radius radius rInc add def
+ cx cy radius 360 0 arcn
+ eofill
+ rampIndxInc add
+ }repeat
+ pop
+ }ifelse
+ ext1
+ {
+ c2y r2 add r1 lt
+ {
+ c2x c2y r2 0 360 arc
+ fill
+ }{
+ c2y r1 add r2 sub 0.0001 le
+ {
+ c2x c2y r2 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r2 neg def
+ /p1y c2y def
+ /p2x r2 def
+ /p2y c2y def
+ p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y c2y p1x SS1 div sub def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y c2y p2x SS2 div sub def
+ r1 r2 lt
+ {
+ /L1maxX p1x yMax p1y sub SS1 div add def
+ /L2maxX p2x yMax p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+ /GenStrips
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /y2 xdf
+ /x2 xdf
+ /y1 xdf
+ /x1 xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ x1 x2 eq
+ {
+ y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope y2 y1 sub x2 x1 sub div def
+ /theta slope 1 atan def
+ x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if
+ x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if
+ }
+ ifelse
+ gsave
+ clippath
+ x1 y1 translate
+ theta rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ rampdict begin
+ 20 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ x1 y1 translate
+ theta rotate
+ /xStart 0 def
+ /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
+ /ySpan yMax yMin sub def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ xStart 0 transform
+ xEnd 0 transform
+ 3 -1 roll
+ sub dup mul
+ 3 1 roll
+ sub dup mul
+ add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ mul
+ /numpix xdf
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ ext0
+ {
+ 0 getrampcolor
+ xMin xStart lt
+ {
+ xMin yMin xMin neg ySpan rectfill
+ }if
+ }if
+ /xInc xEnd xStart sub numsteps div def
+ /x xStart def
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ x yMin xInc ySpan rectfill
+ /x x xInc add def
+ rampIndxInc add
+ }repeat
+ pop
+ ext1{
+ xMax xEnd gt
+ {
+ xEnd yMin xMax xEnd sub ySpan rectfill
+ }if
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+}def
+/pt
+{
+ end
+}def
+/dt{
+}def
+/pgsv{
+ //Adobe_AGM_Core/AGMCORE_save save put
+}def
+/pgrs{
+ //Adobe_AGM_Core/AGMCORE_save get restore
+}def
+systemdict/findcolorrendering known{
+ /findcolorrendering systemdict/findcolorrendering get def
+}if
+systemdict/setcolorrendering known{
+ /setcolorrendering systemdict/setcolorrendering get def
+}if
+/test_cmyk_color_plate
+{
+ gsave
+ setcmykcolor currentgray 1 ne
+ grestore
+}def
+/inRip_spot_has_ink
+{
+ dup//Adobe_AGM_Core/AGMCORE_name xddf
+ convert_spot_to_process not
+}def
+/map255_to_range
+{
+ 1 index sub
+ 3 -1 roll 255 div mul add
+}def
+/set_csa_crd
+{
+ /sep_colorspace_dict null AGMCORE_gput
+ begin
+ CSA get_csa_by_name setcolorspace_opt
+ set_crd
+ end
+}
+def
+/map_csa
+{
+ currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse
+ {pop}{get_csa_by_name/MappedCSA xdf}ifelse
+}def
+/setsepcolor
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ dup/sep_tint exch AGMCORE_gput
+ TintProc
+ end
+}def
+/setdevicencolor
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ Names length copy
+ Names length 1 sub -1 0
+ {
+ /devicen_tints AGMCORE_gget 3 1 roll xpt
+ }for
+ TintProc
+ end
+}def
+/sep_colorspace_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ currentdict/Components known{
+ Components aload pop
+ TintMethod/Lab eq{
+ 2{AGMCORE_tmp mul NComponents 1 roll}repeat
+ LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
+ }{
+ TintMethod/Subtractive eq{
+ NComponents{
+ AGMCORE_tmp mul NComponents 1 roll
+ }repeat
+ }{
+ NComponents{
+ 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
+ }repeat
+ }ifelse
+ }ifelse
+ }{
+ ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
+ aload pop
+ }ifelse
+ end
+}def
+/sep_colorspace_gray_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
+ end
+}def
+/sep_proc_name
+{
+ dup 0 get
+ dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{
+ pop[/DeviceGray]
+ /sep_colorspace_gray_proc
+ }{
+ /sep_colorspace_proc
+ }ifelse
+}def
+/setsepcolorspace
+{
+ current_spot_alias{
+ dup begin
+ Name map_alias{
+ exch pop
+ }if
+ end
+ }if
+ dup/sep_colorspace_dict exch AGMCORE_gput
+ begin
+ CSA map_csa
+ /AGMCORE_sep_special Name dup()eq exch(All)eq or store
+ AGMCORE_avoid_L2_sep_space{
+ [/Indexed MappedCSA sep_proc_name 255 exch
+ {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx
+ ]setcolorspace_opt
+ /TintProc{
+ 255 mul round cvi setcolor
+ }bdf
+ }{
+ MappedCSA 0 get/DeviceCMYK eq
+ currentdict/Components known and
+ AGMCORE_sep_special not and{
+ /TintProc[
+ Components aload pop Name findcmykcustomcolor
+ /exch cvx/setcustomcolor cvx
+ ]cvx bdf
+ }{
+ AGMCORE_host_sep Name(All)eq and{
+ /TintProc{
+ 1 exch sub setseparationgray
+ }bdf
+ }{
+ AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and
+ AGMCORE_host_sep or
+ Name()eq and{
+ /TintProc[
+ MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{
+ cvx/setcmykcolor cvx
+ }{
+ cvx/setgray cvx
+ }ifelse
+ ]cvx bdf
+ }{
+ AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{
+ /TintProc[
+ /dup cvx
+ MappedCSA sep_proc_name cvx exch
+ 0 get/DeviceGray eq{
+ 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx
+ }if
+ /Name cvx/findcmykcustomcolor cvx/exch cvx
+ AGMCORE_host_sep{
+ AGMCORE_is_cmyk_sep
+ /Name cvx
+ /AGMCORE_IsSeparationAProcessColor load/exec cvx
+ /not cvx/and cvx
+ }{
+ Name inRip_spot_has_ink not
+ }ifelse
+ [
+ /pop cvx 1
+ ]cvx/if cvx
+ /setcustomcolor cvx
+ ]cvx bdf
+ }{
+ /TintProc{setcolor}bdf
+ [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ set_crd
+ setsepcolor
+ end
+}def
+/additive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1
+ 0 1 numarrays 1 sub
+ {
+ 1 exch add/index cvx
+ c1/get cvx/mul cvx
+ }for
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/subtractive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1 1
+ 0 1 numarrays 1 sub
+ {
+ 1 3 3 -1 roll add/index cvx
+ c1/get cvx/sub cvx/mul cvx
+ }for
+ /sub cvx
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/exec_tint_transform
+{
+ /TintProc[
+ /TintTransform cvx/setcolor cvx
+ ]cvx bdf
+ MappedCSA setcolorspace_opt
+}bdf
+/devn_makecustomcolor
+{
+ 2 dict begin
+ /names_index xdf
+ /Names xdf
+ 1 1 1 1 Names names_index get findcmykcustomcolor
+ /devicen_tints AGMCORE_gget names_index get setcustomcolor
+ Names length{pop}repeat
+ end
+}bdf
+/setdevicencolorspace
+{
+ dup/AliasedColorants known{false}{true}ifelse
+ current_spot_alias and{
+ 7 dict begin
+ /names_index 0 def
+ dup/names_len exch/Names get length def
+ /new_names names_len array def
+ /new_LookupTables names_len array def
+ /alias_cnt 0 def
+ dup/Names get
+ {
+ dup map_alias{
+ exch pop
+ dup/ColorLookup known{
+ dup begin
+ new_LookupTables names_index ColorLookup put
+ end
+ }{
+ dup/Components known{
+ dup begin
+ new_LookupTables names_index Components put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ new_names names_index 3 -1 roll/Name get put
+ /alias_cnt alias_cnt 1 add def
+ }{
+ /name xdf
+ new_names names_index name put
+ dup/LookupTables known{
+ dup begin
+ new_LookupTables names_index LookupTables names_index get put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ alias_cnt 0 gt{
+ /AliasedColorants true def
+ /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def
+ 0 1 names_len 1 sub{
+ /names_index xdf
+ new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{
+ /AliasedColorants false def
+ exit
+ }{
+ new_LookupTables names_index get 0 get null eq{
+ dup/Names get names_index get/name xdf
+ name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq
+ or or or not{
+ /AliasedColorants false def
+ exit
+ }if
+ }if
+ }ifelse
+ }for
+ lut_entry_len 1 eq{
+ /AliasedColorants false def
+ }if
+ AliasedColorants{
+ dup begin
+ /Names new_names def
+ /LookupTables new_LookupTables def
+ /AliasedColorants true def
+ /NComponents lut_entry_len def
+ /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def
+ /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def
+ currentdict/TTTablesIdx known not{
+ /TTTablesIdx -1 def
+ }if
+ end
+ }if
+ }if
+ end
+ }if
+ dup/devicen_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/AliasedColorants known{
+ AliasedColorants
+ }{
+ false
+ }ifelse
+ dup not{
+ CSA map_csa
+ }if
+ /TintTransform load type/nulltype eq or{
+ /TintTransform[
+ 0 1 Names length 1 sub
+ {
+ /TTTablesIdx TTTablesIdx 1 add def
+ dup LookupTables exch get dup 0 get null eq
+ {
+ 1 index
+ Names exch get
+ dup(Cyan)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0
+ }
+ {
+ dup(Magenta)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0/exch cvx 0 0
+ }{
+ (Yellow)eq
+ {
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 3 -1/roll cvx 0
+ }{
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0 4 -1/roll cvx
+ }ifelse
+ }ifelse
+ }ifelse
+ 5 -1/roll cvx/astore cvx
+ }{
+ dup length 1 sub
+ LookupTables length 4 -1 roll sub 1 add
+ /index cvx/mul cvx/round cvx/cvi cvx/get cvx
+ }ifelse
+ Names length TTTablesIdx add 1 add 1/roll cvx
+ }for
+ Names length[/pop cvx]cvx/repeat cvx
+ NComponents Names length
+ TintMethod/Subtractive eq
+ {
+ subtractive_blend
+ }{
+ additive_blend
+ }ifelse
+ ]cvx bdf
+ }if
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ exec_tint_transform
+ }
+ {
+ currentdict/AliasedColorants known{
+ AliasedColorants not
+ }{
+ false
+ }ifelse
+ 5 dict begin
+ /AvoidAliasedColorants xdf
+ /painted? false def
+ /names_index 0 def
+ /names_len Names length def
+ AvoidAliasedColorants{
+ /currentspotalias current_spot_alias def
+ false set_spot_alias
+ }if
+ Names{
+ AGMCORE_is_cmyk_sep{
+ dup(Cyan)eq AGMCORE_cyan_plate and exch
+ dup(Magenta)eq AGMCORE_magenta_plate and exch
+ dup(Yellow)eq AGMCORE_yellow_plate and exch
+ (Black)eq AGMCORE_black_plate and or or or{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ }if
+ painted?{exit}if
+ }{
+ 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ exit
+ }if
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ AvoidAliasedColorants{
+ currentspotalias set_spot_alias
+ }if
+ painted?{
+ /devicen_colorspace_dict AGMCORE_gget/names_index names_index put
+ }{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx
+ 0 0 0 0/setcmykcolor cvx
+ ]cvx ddf
+ }ifelse
+ end
+ }ifelse
+ }
+ {
+ AGMCORE_in_rip_sep{
+ Names convert_to_process not
+ }{
+ level3
+ }ifelse
+ {
+ [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt
+ /TintProc level3 not AGMCORE_in_rip_sep and{
+ [
+ Names/length cvx[/pop cvx]cvx/repeat cvx
+ ]cvx bdf
+ }{
+ {setcolor}bdf
+ }ifelse
+ }{
+ exec_tint_transform
+ }ifelse
+ }ifelse
+ set_crd
+ /AliasedColorants false def
+ end
+}def
+/setindexedcolorspace
+{
+ dup/indexed_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ currentdict devncs
+ }{
+ 1 currentdict sepcs
+ }ifelse
+ AGMCORE_host_sep{
+ 4 dict begin
+ /compCnt/Names where{pop Names length}{1}ifelse def
+ /NewLookup HiVal 1 add string def
+ 0 1 HiVal{
+ /tableIndex xdf
+ Lookup dup type/stringtype eq{
+ compCnt tableIndex map_index
+ }{
+ exec
+ }ifelse
+ /Names where{
+ pop setdevicencolor
+ }{
+ setsepcolor
+ }ifelse
+ currentgray
+ tableIndex exch
+ 255 mul cvi
+ NewLookup 3 1 roll put
+ }for
+ [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt
+ end
+ }{
+ level3
+ {
+ currentdict/Names known{
+ [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt
+ }{
+ [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt
+ }ifelse
+ }{
+ [/Indexed MappedCSA HiVal
+ [
+ currentdict/Names known{
+ Lookup dup type/stringtype eq
+ {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx}
+ {/exec cvx}ifelse
+ /TintTransform load/exec cvx
+ }{
+ Lookup dup type/stringtype eq
+ {/exch cvx/get cvx 255/div cvx}
+ {/exec cvx}ifelse
+ CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx
+ }ifelse
+ ]cvx
+ ]setcolorspace_opt
+ }ifelse
+ }ifelse
+ end
+ set_crd
+ }
+ {
+ CSA map_csa
+ AGMCORE_host_sep level2 not and{
+ 0 0 0 0 setcmykcolor
+ }{
+ [/Indexed MappedCSA
+ level2 not has_color not and{
+ dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{
+ pop[/DeviceGray]
+ }if
+ HiVal GrayLookup
+ }{
+ HiVal
+ currentdict/RangeArray known{
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ Lookup exch
+ dup HiVal gt{
+ pop HiVal
+ }if
+ NComponents mul NComponents getinterval{}forall
+ NComponents 1 sub -1 0{
+ RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
+ NComponents 1 roll
+ }for
+ end
+ }bind
+ }{
+ Lookup
+ }ifelse
+ }ifelse
+ ]setcolorspace_opt
+ set_crd
+ }ifelse
+ }ifelse
+ end
+}def
+/setindexedcolor
+{
+ AGMCORE_host_sep{
+ /indexed_colorspace_dict AGMCORE_gget
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ map_indexed_devn
+ devn
+ }
+ {
+ Lookup 1 3 -1 roll map_index
+ sep
+ }ifelse
+ end
+ }{
+ Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll
+ map_index
+ MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse
+ }ifelse
+ end
+ }{
+ level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{
+ /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin
+ map_indexed_devn
+ devn
+ end
+ }
+ {
+ setcolor
+ }ifelse
+ }ifelse
+}def
+/ignoreimagedata
+{
+ currentoverprint not{
+ gsave
+ dup clonedict begin
+ 1 setgray
+ /Decode[0 1]def
+ /DataSource<FF>def
+ /MultipleDataSources false def
+ /BitsPerComponent 8 def
+ currentdict end
+ systemdict/image gx
+ grestore
+ }if
+ consumeimagedata
+}def
+/add_res
+{
+ dup/CSD eq{
+ pop
+ //Adobe_AGM_Core begin
+ /AGMCORE_CSD_cache load 3 1 roll put
+ end
+ }{
+ defineresource pop
+ }ifelse
+}def
+/del_res
+{
+ {
+ aload pop exch
+ dup/CSD eq{
+ pop
+ {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall
+ }{
+ exch
+ {1 index undefineresource}forall
+ pop
+ }ifelse
+ }forall
+}def
+/get_res
+{
+ dup/CSD eq{
+ pop
+ dup type dup/nametype eq exch/stringtype eq or{
+ AGMCORE_CSD_cache exch get
+ }if
+ }{
+ findresource
+ }ifelse
+}def
+/get_csa_by_name
+{
+ dup type dup/nametype eq exch/stringtype eq or{
+ /CSA get_res
+ }if
+}def
+/paintproc_buf_init
+{
+ /count get 0 0 put
+}def
+/paintproc_buf_next
+{
+ dup/count get dup 0 get
+ dup 3 1 roll
+ 1 add 0 xpt
+ get
+}def
+/cachepaintproc_compress
+{
+ 5 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ /string_size 16000 def
+ /readbuffer string_size string def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ /LZWFilter
+ {
+ exch
+ dup length 0 eq{
+ pop
+ }{
+ ppdict dup length 1 sub 3 -1 roll put
+ }ifelse
+ {string_size}{0}ifelse string
+ }/LZWEncode filter def
+ {
+ ReadFilter readbuffer readstring
+ exch LZWFilter exch writestring
+ not{exit}if
+ }loop
+ LZWFilter closefile
+ ppdict
+ end
+}def
+/cachepaintproc
+{
+ 2 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ {
+ ReadFilter 16000 string readstring exch
+ ppdict dup length 1 sub 3 -1 roll put
+ not{exit}if
+ }loop
+ ppdict dup dup length 1 sub()put
+ end
+}def
+/make_pattern
+{
+ exch clonedict exch
+ dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
+ exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub
+ exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub
+ matrix translate exch matrix concatmatrix
+ 1 index begin
+ BBox 0 get XStep div cvi XStep mul/xshift exch neg def
+ BBox 1 get YStep div cvi YStep mul/yshift exch neg def
+ BBox 0 get xshift add
+ BBox 1 get yshift add
+ BBox 2 get xshift add
+ BBox 3 get yshift add
+ 4 array astore
+ /BBox exch def
+ [xshift yshift/translate load null/exec load]dup
+ 3/PaintProc load put cvx/PaintProc exch def
+ end
+ gsave 0 setgray
+ makepattern
+ grestore
+}def
+/set_pattern
+{
+ dup/PatternType get 1 eq{
+ dup/PaintType get 1 eq{
+ currentoverprint sop[/DeviceGray]setcolorspace 0 setgray
+ }if
+ }if
+ setpattern
+}def
+/setcolorspace_opt
+{
+ dup currentcolorspace eq{pop}{setcolorspace}ifelse
+}def
+/updatecolorrendering
+{
+ currentcolorrendering/RenderingIntent known{
+ currentcolorrendering/RenderingIntent get
+ }
+ {
+ Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd AGMCORE_gget dup null eq
+ }
+ {
+ /perceptual_crd AGMCORE_gget dup null eq
+ }ifelse
+ }ifelse
+ }ifelse
+ {
+ pop null
+ }
+ {
+ /RenderingIntent known{null}{Intent}ifelse
+ }ifelse
+ }ifelse
+ Intent ne{
+ Intent/ColorRendering{findresource}stopped
+ {
+ pop pop systemdict/findcolorrendering known
+ {
+ Intent findcolorrendering
+ {
+ /ColorRendering findresource true exch
+ }
+ {
+ /ColorRendering findresource
+ product(Xerox Phaser 5400)ne
+ exch
+ }ifelse
+ dup Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Perceptual eq
+ {
+ /perceptual_crd exch AGMCORE_gput
+ }
+ {
+ pop
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ 1 index{exch}{pop}ifelse
+ }
+ {false}ifelse
+ }
+ {true}ifelse
+ {
+ dup begin
+ currentdict/TransformPQR known{
+ currentdict/TransformPQR get aload pop
+ 3{{}eq 3 1 roll}repeat or or
+ }
+ {true}ifelse
+ currentdict/MatrixPQR known{
+ currentdict/MatrixPQR get aload pop
+ 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq
+ and and and and and and and and
+ }
+ {true}ifelse
+ end
+ or
+ {
+ clonedict begin
+ /TransformPQR[
+ {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div
+ 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div
+ 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div
+ 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind
+ ]def
+ /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def
+ /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def
+ currentdict end
+ }if
+ setcolorrendering_opt
+ }if
+ }if
+}def
+/set_crd
+{
+ AGMCORE_host_sep not level2 and{
+ currentdict/ColorRendering known{
+ ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if
+ }{
+ currentdict/Intent known{
+ updatecolorrendering
+ }if
+ }ifelse
+ currentcolorspace dup type/arraytype eq
+ {0 get}if
+ /DeviceRGB eq
+ {
+ currentdict/UCR known
+ {/UCR}{/AGMCORE_currentucr}ifelse
+ load setundercolorremoval
+ currentdict/BG known
+ {/BG}{/AGMCORE_currentbg}ifelse
+ load setblackgeneration
+ }if
+ }if
+}def
+/set_ucrbg
+{
+ dup null eq {pop /AGMCORE_currentbg load}{/Procedure get_res}ifelse
+ dup currentblackgeneration eq {pop}{setblackgeneration}ifelse
+ dup null eq {pop /AGMCORE_currentucr load}{/Procedure get_res}ifelse
+ dup currentundercolorremoval eq {pop}{setundercolorremoval}ifelse
+}def
+/setcolorrendering_opt
+{
+ dup currentcolorrendering eq{
+ pop
+ }{
+ product(HP Color LaserJet 2605)anchorsearch{
+ pop pop pop
+ }{
+ pop
+ clonedict
+ begin
+ /Intent Intent def
+ currentdict
+ end
+ setcolorrendering
+ }ifelse
+ }ifelse
+}def
+/cpaint_gcomp
+{
+ convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
+ {
+ (%end_cpaint_gcomp)flushinput
+ }if
+}def
+/cpaint_gsep
+{
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get
+ {
+ (%end_cpaint_gsep)flushinput
+ }if
+}def
+/cpaint_gend
+{np}def
+/T1_path
+{
+ currentfile token pop currentfile token pop mo
+ {
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 exch rlineto
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 rlineto
+ }loop
+}def
+/T1_gsave
+ level3
+ {/clipsave}
+ {/gsave}ifelse
+ load def
+/T1_grestore
+ level3
+ {/cliprestore}
+ {/grestore}ifelse
+ load def
+/set_spot_alias_ary
+{
+ dup inherit_aliases
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
+}def
+/set_spot_normalization_ary
+{
+ dup inherit_aliases
+ dup length
+ /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if
+ array
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf
+ /AGMCORE_SpotAliasAry where{
+ pop
+ AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval
+ AGMCORE_SpotAliasAry length
+ }{0}ifelse
+ AGMCORE_SpotAliasAry2 3 1 roll exch putinterval
+ true set_spot_alias
+}def
+/inherit_aliases
+{
+ {dup/Name get map_alias{/CSD put}{pop}ifelse}forall
+}def
+/set_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias 3 -1 roll put
+ }{
+ pop
+ }ifelse
+}def
+/current_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias get
+ }{
+ false
+ }ifelse
+}def
+/map_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ /AGMCORE_name xdf
+ false
+ AGMCORE_SpotAliasAry2{
+ dup/Name get AGMCORE_name eq{
+ /CSD get/CSD get_res
+ exch pop true
+ exit
+ }{
+ pop
+ }ifelse
+ }forall
+ end
+ }{
+ pop false
+ }ifelse
+}bdf
+/spot_alias
+{
+ true set_spot_alias
+ /AGMCORE_&setcustomcolor AGMCORE_key_known not{
+ //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put
+ }if
+ /customcolor_tint 1 AGMCORE_gput
+ //Adobe_AGM_Core begin
+ /setcustomcolor
+ {
+ //Adobe_AGM_Core begin
+ dup/customcolor_tint exch AGMCORE_gput
+ 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not
+ current_spot_alias and{1 index 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /sep_colorspace_dict AGMCORE_gget null ne
+ {/sep_colorspace_dict AGMCORE_gget/ForeignContent known not}{false}ifelse
+ 3 1 roll 2 index{
+ exch pop/sep_tint AGMCORE_gget exch
+ }if
+ mark 3 1 roll
+ setsepcolorspace
+ counttomark 0 ne{
+ setsepcolor
+ }if
+ pop
+ not{/sep_tint 1.0 AGMCORE_gput/sep_colorspace_dict AGMCORE_gget/ForeignContent true put}if
+ pop
+ true set_spot_alias
+ }{
+ AGMCORE_&setcustomcolor
+ }ifelse
+ end
+ }bdf
+ end
+}def
+/begin_feature
+{
+ Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
+ count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
+ {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
+}def
+/end_feature
+{
+ 2 dict begin
+ /spd/setpagedevice load def
+ /setpagedevice{get_gstate spd set_gstate}def
+ stopped{$error/newerror false put}if
+ end
+ count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
+ countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
+ {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
+}def
+/set_negative
+{
+ //Adobe_AGM_Core begin
+ /AGMCORE_inverting exch def
+ level2{
+ currentpagedevice/NegativePrint known AGMCORE_distilling not and{
+ currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{
+ true begin_feature true{
+ <</NegativePrint//Adobe_AGM_Core/AGMCORE_inverting get>>setpagedevice
+ }end_feature
+ }if
+ /AGMCORE_inverting false def
+ }if
+ }if
+ AGMCORE_inverting{
+ [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
+ AGMCORE_distilling{
+ erasepage
+ }{
+ gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse
+ /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore
+ }ifelse
+ }if
+ end
+}def
+/lw_save_restore_override{
+ /md where{
+ pop
+ md begin
+ initializepage
+ /initializepage{}def
+ /pmSVsetup{}def
+ /endp{}def
+ /pse{}def
+ /psb{}def
+ /orig_showpage where
+ {pop}
+ {/orig_showpage/showpage load def}
+ ifelse
+ /showpage{orig_showpage gR}def
+ end
+ }if
+}def
+/pscript_showpage_override{
+ /NTPSOct95 where
+ {
+ begin
+ showpage
+ save
+ /showpage/restore load def
+ /restore{exch pop}def
+ end
+ }if
+}def
+/driver_media_override
+{
+ /md where{
+ pop
+ md/initializepage known{
+ md/initializepage{}put
+ }if
+ md/rC known{
+ md/rC{4{pop}repeat}put
+ }if
+ }if
+ /mysetup where{
+ /mysetup[1 0 0 1 0 0]put
+ }if
+ Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put
+ level2
+ {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
+}def
+/capture_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put
+ }if
+ }if
+}def
+/restore_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup known{
+ Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put
+ Adobe_AGM_Core/save_mysetup undef
+ }if
+ }if
+ }if
+}def
+/driver_check_media_override
+{
+ /PrepsDict where
+ {pop}
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
+ }if
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix
+ }if
+ }ifelse
+}def
+AGMCORE_err_strings begin
+ /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def
+ /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def
+ /AGMCORE_invalid_color_space(This job contains an invalid color space. )def
+end
+/set_def_ht
+{AGMCORE_def_ht sethalftone}def
+/set_def_flat
+{AGMCORE_Default_flatness setflat}def
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Core 2.31 0
+%%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved.
+%%Version: 2.31 0
+10 dict begin
+/Adobe_CoolType_Passthru currentdict def
+/Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def
+Adobe_CoolType_Core_Defined
+ {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def}
+if
+userdict/Adobe_CoolType_Core 70 dict dup begin put
+/Adobe_CoolType_Version 2.31 def
+/Level2?
+ systemdict/languagelevel known dup
+ {pop systemdict/languagelevel get 2 ge}
+ if def
+Level2? not
+ {
+ /currentglobal false def
+ /setglobal/pop load def
+ /gcheck{pop false}bind def
+ /currentpacking false def
+ /setpacking/pop load def
+ /SharedFontDirectory 0 dict def
+ }
+if
+currentpacking
+true setpacking
+currentglobal false setglobal
+userdict/Adobe_CoolType_Data 2 copy known not
+ {2 copy 10 dict put}
+if
+get
+ begin
+ /@opStackCountByLevel 32 dict def
+ /@opStackLevel 0 def
+ /@dictStackCountByLevel 32 dict def
+ /@dictStackLevel 0 def
+ end
+setglobal
+currentglobal true setglobal
+userdict/Adobe_CoolType_GVMFonts known not
+ {userdict/Adobe_CoolType_GVMFonts 10 dict put}
+if
+setglobal
+currentglobal false setglobal
+userdict/Adobe_CoolType_LVMFonts known not
+ {userdict/Adobe_CoolType_LVMFonts 10 dict put}
+if
+setglobal
+/ct_VMDictPut
+ {
+ dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse
+ 3 1 roll put
+ }bind def
+/ct_VMDictUndef
+ {
+ dup Adobe_CoolType_GVMFonts exch known
+ {Adobe_CoolType_GVMFonts exch undef}
+ {
+ dup Adobe_CoolType_LVMFonts exch known
+ {Adobe_CoolType_LVMFonts exch undef}
+ {pop}
+ ifelse
+ }ifelse
+ }bind def
+/ct_str1 1 string def
+/ct_xshow
+{
+ /_ct_na exch def
+ /_ct_i 0 def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ {
+ pop pop
+ ct_str1 exch 0 exch put
+ ct_str1 show
+ {_ct_na _ct_i get}stopped
+ {pop pop}
+ {
+ _ct_x _ct_y moveto
+ 0
+ rmoveto
+ }
+ ifelse
+ /_ct_i _ct_i 1 add def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ }
+ exch
+ @cshow
+}bind def
+/ct_yshow
+{
+ /_ct_na exch def
+ /_ct_i 0 def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ {
+ pop pop
+ ct_str1 exch 0 exch put
+ ct_str1 show
+ {_ct_na _ct_i get}stopped
+ {pop pop}
+ {
+ _ct_x _ct_y moveto
+ 0 exch
+ rmoveto
+ }
+ ifelse
+ /_ct_i _ct_i 1 add def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ }
+ exch
+ @cshow
+}bind def
+/ct_xyshow
+{
+ /_ct_na exch def
+ /_ct_i 0 def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ {
+ pop pop
+ ct_str1 exch 0 exch put
+ ct_str1 show
+ {_ct_na _ct_i get}stopped
+ {pop pop}
+ {
+ {_ct_na _ct_i 1 add get}stopped
+ {pop pop pop}
+ {
+ _ct_x _ct_y moveto
+ rmoveto
+ }
+ ifelse
+ }
+ ifelse
+ /_ct_i _ct_i 2 add def
+ currentpoint
+ /_ct_y exch def
+ /_ct_x exch def
+ }
+ exch
+ @cshow
+}bind def
+/xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def
+/ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def
+/xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def
+currentglobal true setglobal
+/ct_T3Defs
+{
+/BuildChar
+{
+ 1 index/Encoding get exch get
+ 1 index/BuildGlyph get exec
+}bind def
+/BuildGlyph
+{
+ exch begin
+ GlyphProcs exch get exec
+ end
+}bind def
+}bind def
+setglobal
+/@_SaveStackLevels
+ {
+ Adobe_CoolType_Data
+ begin
+ /@vmState currentglobal def false setglobal
+ @opStackCountByLevel
+ @opStackLevel
+ 2 copy known not
+ {
+ 2 copy
+ 3 dict dup/args
+ 7 index
+ 5 add array put
+ put get
+ }
+ {
+ get dup/args get dup length 3 index lt
+ {
+ dup length 5 add array exch
+ 1 index exch 0 exch putinterval
+ 1 index exch/args exch put
+ }
+ {pop}
+ ifelse
+ }
+ ifelse
+ begin
+ count 1 sub
+ 1 index lt
+ {pop count}
+ if
+ dup/argCount exch def
+ dup 0 gt
+ {
+ args exch 0 exch getinterval
+ astore pop
+ }
+ {pop}
+ ifelse
+ count
+ /restCount exch def
+ end
+ /@opStackLevel @opStackLevel 1 add def
+ countdictstack 1 sub
+ @dictStackCountByLevel exch @dictStackLevel exch put
+ /@dictStackLevel @dictStackLevel 1 add def
+ @vmState setglobal
+ end
+ }bind def
+/@_RestoreStackLevels
+ {
+ Adobe_CoolType_Data
+ begin
+ /@opStackLevel @opStackLevel 1 sub def
+ @opStackCountByLevel @opStackLevel get
+ begin
+ count restCount sub dup 0 gt
+ {{pop}repeat}
+ {pop}
+ ifelse
+ args 0 argCount getinterval{}forall
+ end
+ /@dictStackLevel @dictStackLevel 1 sub def
+ @dictStackCountByLevel @dictStackLevel get
+ end
+ countdictstack exch sub dup 0 gt
+ {{end}repeat}
+ {pop}
+ ifelse
+ }bind def
+/@_PopStackLevels
+ {
+ Adobe_CoolType_Data
+ begin
+ /@opStackLevel @opStackLevel 1 sub def
+ /@dictStackLevel @dictStackLevel 1 sub def
+ end
+ }bind def
+/@Raise
+ {
+ exch cvx exch errordict exch get exec
+ stop
+ }bind def
+/@ReRaise
+ {
+ cvx $error/errorname get errordict exch get exec
+ stop
+ }bind def
+/@Stopped
+ {
+ 0 @#Stopped
+ }bind def
+/@#Stopped
+ {
+ @_SaveStackLevels
+ stopped
+ {@_RestoreStackLevels true}
+ {@_PopStackLevels false}
+ ifelse
+ }bind def
+/@Arg
+ {
+ Adobe_CoolType_Data
+ begin
+ @opStackCountByLevel @opStackLevel 1 sub get
+ begin
+ args exch
+ argCount 1 sub exch sub get
+ end
+ end
+ }bind def
+currentglobal true setglobal
+/CTHasResourceForAllBug
+ Level2?
+ {
+ 1 dict dup
+ /@shouldNotDisappearDictValue true def
+ Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put
+ begin
+ count @_SaveStackLevels
+ {(*){pop stop}128 string/Category resourceforall}
+ stopped pop
+ @_RestoreStackLevels
+ currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll
+ {
+ /@shouldNotDisappearDictValue known
+ {
+ {
+ end
+ currentdict 1 index eq
+ {pop exit}
+ if
+ }
+ loop
+ }
+ if
+ }
+ {
+ pop
+ end
+ }
+ ifelse
+ }
+ {false}
+ ifelse
+ def
+true setglobal
+/CTHasResourceStatusBug
+ Level2?
+ {
+ mark
+ {/steveamerige/Category resourcestatus}
+ stopped
+ {cleartomark true}
+ {cleartomark currentglobal not}
+ ifelse
+ }
+ {false}
+ ifelse
+ def
+setglobal
+/CTResourceStatus
+ {
+ mark 3 1 roll
+ /Category findresource
+ begin
+ ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec
+ {cleartomark false}
+ {{3 2 roll pop true}{cleartomark false}ifelse}
+ ifelse
+ end
+ }bind def
+/CTWorkAroundBugs
+ {
+ Level2?
+ {
+ /cid_PreLoad/ProcSet resourcestatus
+ {
+ pop pop
+ currentglobal
+ mark
+ {
+ (*)
+ {
+ dup/CMap CTHasResourceStatusBug
+ {CTResourceStatus}
+ {resourcestatus}
+ ifelse
+ {
+ pop dup 0 eq exch 1 eq or
+ {
+ dup/CMap findresource gcheck setglobal
+ /CMap undefineresource
+ }
+ {
+ pop CTHasResourceForAllBug
+ {exit}
+ {stop}
+ ifelse
+ }
+ ifelse
+ }
+ {pop}
+ ifelse
+ }
+ 128 string/CMap resourceforall
+ }
+ stopped
+ {cleartomark}
+ stopped pop
+ setglobal
+ }
+ if
+ }
+ if
+ }bind def
+/ds
+ {
+ Adobe_CoolType_Core
+ begin
+ CTWorkAroundBugs
+ /mo/moveto load def
+ /nf/newencodedfont load def
+ /msf{makefont setfont}bind def
+ /uf{dup undefinefont ct_VMDictUndef}bind def
+ /ur/undefineresource load def
+ /chp/charpath load def
+ /awsh/awidthshow load def
+ /wsh/widthshow load def
+ /ash/ashow load def
+ /@xshow/xshow load def
+ /@yshow/yshow load def
+ /@xyshow/xyshow load def
+ /@cshow/cshow load def
+ /sh/show load def
+ /rp/repeat load def
+ /.n/.notdef def
+ end
+ currentglobal false setglobal
+ userdict/Adobe_CoolType_Data 2 copy known not
+ {2 copy 10 dict put}
+ if
+ get
+ begin
+ /AddWidths? false def
+ /CC 0 def
+ /charcode 2 string def
+ /@opStackCountByLevel 32 dict def
+ /@opStackLevel 0 def
+ /@dictStackCountByLevel 32 dict def
+ /@dictStackLevel 0 def
+ /InVMFontsByCMap 10 dict def
+ /InVMDeepCopiedFonts 10 dict def
+ end
+ setglobal
+ }bind def
+/dt
+ {
+ currentdict Adobe_CoolType_Core eq
+ {end}
+ if
+ }bind def
+/ps
+ {
+ Adobe_CoolType_Core begin
+ Adobe_CoolType_GVMFonts begin
+ Adobe_CoolType_LVMFonts begin
+ SharedFontDirectory begin
+ }bind def
+/pt
+ {
+ end
+ end
+ end
+ end
+ }bind def
+/unload
+ {
+ systemdict/languagelevel known
+ {
+ systemdict/languagelevel get 2 ge
+ {
+ userdict/Adobe_CoolType_Core 2 copy known
+ {undef}
+ {pop pop}
+ ifelse
+ }
+ if
+ }
+ if
+ }bind def
+/ndf
+ {
+ 1 index where
+ {pop pop pop}
+ {dup xcheck{bind}if def}
+ ifelse
+ }def
+/findfont systemdict
+ begin
+ userdict
+ begin
+ /globaldict where{/globaldict get begin}if
+ dup where pop exch get
+ /globaldict where{pop end}if
+ end
+ end
+Adobe_CoolType_Core_Defined
+ {/systemfindfont exch def}
+ {
+ /findfont 1 index def
+ /systemfindfont exch def
+ }
+ifelse
+/undefinefont
+ {pop}ndf
+/copyfont
+ {
+ currentglobal 3 1 roll
+ 1 index gcheck setglobal
+ dup null eq{0}{dup length}ifelse
+ 2 index length add 1 add dict
+ begin
+ exch
+ {
+ 1 index/FID eq
+ {pop pop}
+ {def}
+ ifelse
+ }
+ forall
+ dup null eq
+ {pop}
+ {{def}forall}
+ ifelse
+ currentdict
+ end
+ exch setglobal
+ }bind def
+/copyarray
+ {
+ currentglobal exch
+ dup gcheck setglobal
+ dup length array copy
+ exch setglobal
+ }bind def
+/newencodedfont
+ {
+ currentglobal
+ {
+ SharedFontDirectory 3 index known
+ {SharedFontDirectory 3 index get/FontReferenced known}
+ {false}
+ ifelse
+ }
+ {
+ FontDirectory 3 index known
+ {FontDirectory 3 index get/FontReferenced known}
+ {
+ SharedFontDirectory 3 index known
+ {SharedFontDirectory 3 index get/FontReferenced known}
+ {false}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ dup
+ {
+ 3 index findfont/FontReferenced get
+ 2 index dup type/nametype eq
+ {findfont}
+ if ne
+ {pop false}
+ if
+ }
+ if
+ dup
+ {
+ 1 index dup type/nametype eq
+ {findfont}
+ if
+ dup/CharStrings known
+ {
+ /CharStrings get length
+ 4 index findfont/CharStrings get length
+ ne
+ {
+ pop false
+ }
+ if
+ }
+ {pop}
+ ifelse
+ }
+ if
+ {
+ pop
+ 1 index findfont
+ /Encoding get exch
+ 0 1 255
+ {2 copy get 3 index 3 1 roll put}
+ for
+ pop pop pop
+ }
+ {
+ currentglobal
+ 4 1 roll
+ dup type/nametype eq
+ {findfont}
+ if
+ dup gcheck setglobal
+ dup dup maxlength 2 add dict
+ begin
+ exch
+ {
+ 1 index/FID ne
+ 2 index/Encoding ne and
+ {def}
+ {pop pop}
+ ifelse
+ }
+ forall
+ /FontReferenced exch def
+ /Encoding exch dup length array copy def
+ /FontName 1 index dup type/stringtype eq{cvn}if def dup
+ currentdict
+ end
+ definefont ct_VMDictPut
+ setglobal
+ }
+ ifelse
+ }bind def
+/SetSubstituteStrategy
+ {
+ $SubstituteFont
+ begin
+ dup type/dicttype ne
+ {0 dict}
+ if
+ currentdict/$Strategies known
+ {
+ exch $Strategies exch
+ 2 copy known
+ {
+ get
+ 2 copy maxlength exch maxlength add dict
+ begin
+ {def}forall
+ {def}forall
+ currentdict
+ dup/$Init known
+ {dup/$Init get exec}
+ if
+ end
+ /$Strategy exch def
+ }
+ {pop pop pop}
+ ifelse
+ }
+ {pop pop}
+ ifelse
+ end
+ }bind def
+/scff
+ {
+ $SubstituteFont
+ begin
+ dup type/stringtype eq
+ {dup length exch}
+ {null}
+ ifelse
+ /$sname exch def
+ /$slen exch def
+ /$inVMIndex
+ $sname null eq
+ {
+ 1 index $str cvs
+ dup length $slen sub $slen getinterval cvn
+ }
+ {$sname}
+ ifelse def
+ end
+ {findfont}
+ @Stopped
+ {
+ dup length 8 add string exch
+ 1 index 0(BadFont:)putinterval
+ 1 index exch 8 exch dup length string cvs putinterval cvn
+ {findfont}
+ @Stopped
+ {pop/Courier findfont}
+ if
+ }
+ if
+ $SubstituteFont
+ begin
+ /$sname null def
+ /$slen 0 def
+ /$inVMIndex null def
+ end
+ }bind def
+/isWidthsOnlyFont
+ {
+ dup/WidthsOnly known
+ {pop pop true}
+ {
+ dup/FDepVector known
+ {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}
+ {
+ dup/FDArray known
+ {/FDArray get{isWidthsOnlyFont dup{exit}if}forall}
+ {pop}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }bind def
+/ct_StyleDicts 4 dict dup begin
+ /Adobe-Japan1 4 dict dup begin
+ Level2?
+ {
+ /Serif
+ /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus
+ {pop pop/HeiseiMin-W3}
+ {
+ /CIDFont/Category resourcestatus
+ {
+ pop pop
+ /HeiseiMin-W3/CIDFont resourcestatus
+ {pop pop/HeiseiMin-W3}
+ {/Ryumin-Light}
+ ifelse
+ }
+ {/Ryumin-Light}
+ ifelse
+ }
+ ifelse
+ def
+ /SansSerif
+ /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus
+ {pop pop/HeiseiKakuGo-W5}
+ {
+ /CIDFont/Category resourcestatus
+ {
+ pop pop
+ /HeiseiKakuGo-W5/CIDFont resourcestatus
+ {pop pop/HeiseiKakuGo-W5}
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ ifelse
+ def
+ /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus
+ {pop pop/HeiseiMaruGo-W4}
+ {
+ /CIDFont/Category resourcestatus
+ {
+ pop pop
+ /HeiseiMaruGo-W4/CIDFont resourcestatus
+ {pop pop/HeiseiMaruGo-W4}
+ {
+ /Jun101-Light-RKSJ-H/Font resourcestatus
+ {pop pop/Jun101-Light}
+ {SansSerif}
+ ifelse
+ }
+ ifelse
+ }
+ {
+ /Jun101-Light-RKSJ-H/Font resourcestatus
+ {pop pop/Jun101-Light}
+ {SansSerif}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ /RoundSansSerif exch def
+ /Default Serif def
+ }
+ {
+ /Serif/Ryumin-Light def
+ /SansSerif/GothicBBB-Medium def
+ {
+ (fonts/Jun101-Light-83pv-RKSJ-H)status
+ }stopped
+ {pop}{
+ {pop pop pop pop/Jun101-Light}
+ {SansSerif}
+ ifelse
+ /RoundSansSerif exch def
+ }ifelse
+ /Default Serif def
+ }
+ ifelse
+ end
+ def
+ /Adobe-Korea1 4 dict dup begin
+ /Serif/HYSMyeongJo-Medium def
+ /SansSerif/HYGoThic-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-GB1 4 dict dup begin
+ /Serif/STSong-Light def
+ /SansSerif/STHeiti-Regular def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-CNS1 4 dict dup begin
+ /Serif/MKai-Medium def
+ /SansSerif/MHei-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+end
+def
+Level2?{currentglobal true setglobal}if
+/ct_BoldRomanWidthProc
+ {
+ stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth
+ 0 0
+ }bind def
+/ct_Type0WidthProc
+ {
+ dup stringwidth 0 0 moveto
+ 2 index true charpath pathbbox
+ 0 -1
+ 7 index 2 div .88
+ setcachedevice2
+ pop
+ 0 0
+ }bind def
+/ct_Type0WMode1WidthProc
+ {
+ dup stringwidth
+ pop 2 div neg -0.88
+ 2 copy
+ moveto
+ 0 -1
+ 5 -1 roll true charpath pathbbox
+ setcachedevice
+ }bind def
+/cHexEncoding
+[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
+/ct_BoldBaseFont
+ 11 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /Encoding cHexEncoding def
+ /_setwidthProc/ct_BoldRomanWidthProc load def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bind def
+ currentdict
+ end
+def
+systemdict/composefont known
+{
+/ct_DefineIdentity-H
+{
+ /Identity-H/CMap resourcestatus
+ {
+ pop pop
+ }
+ {
+ /CIDInit/ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo 3 dict dup begin
+ /Registry(Adobe)def
+ /Ordering(Identity)def
+ /Supplement 0 def
+ end def
+ /CMapName/Identity-H def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ ifelse
+}
+def
+/ct_BoldBaseCIDFont
+ 11 dict begin
+ /CIDFontType 1 def
+ /CIDFontName/ct_BoldBaseCIDFont def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_setwidthProc/ct_Type0WidthProc load def
+ /_bcstr2 2 string def
+ /BuildGlyph
+ {
+ exch begin
+ _basefont setfont
+ _bcstr2 1 2 index 256 mod put
+ _bcstr2 0 3 -1 roll 256 idiv put
+ _bcstr2 dup _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bind def
+ currentdict
+ end
+def
+}if
+Level2?{setglobal}if
+/ct_CopyFont{
+ {
+ 1 index/FID ne 2 index/UniqueID ne and
+ {def}{pop pop}ifelse
+ }forall
+}bind def
+/ct_Type0CopyFont
+{
+ exch
+ dup length dict
+ begin
+ ct_CopyFont
+ [
+ exch
+ FDepVector
+ {
+ dup/FontType get 0 eq
+ {
+ 1 index ct_Type0CopyFont
+ /_ctType0 exch definefont
+ }
+ {
+ /_ctBaseFont exch
+ 2 index exec
+ }
+ ifelse
+ exch
+ }
+ forall
+ pop
+ ]
+ /FDepVector exch def
+ currentdict
+ end
+}bind def
+/ct_MakeBoldFont
+{
+ dup/ct_SyntheticBold known
+ {
+ dup length 3 add dict begin
+ ct_CopyFont
+ /ct_StrokeWidth .03 0 FontMatrix idtransform pop def
+ /ct_SyntheticBold true def
+ currentdict
+ end
+ definefont
+ }
+ {
+ dup dup length 3 add dict
+ begin
+ ct_CopyFont
+ /PaintType 2 def
+ /StrokeWidth .03 0 FontMatrix idtransform pop def
+ /dummybold currentdict
+ end
+ definefont
+ dup/FontType get dup 9 ge exch 11 le and
+ {
+ ct_BoldBaseCIDFont
+ dup length 3 add dict copy begin
+ dup/CIDSystemInfo get/CIDSystemInfo exch def
+ ct_DefineIdentity-H
+ /_Type0Identity/Identity-H 3 -1 roll[exch]composefont
+ /_basefont exch def
+ /_Type0Identity/Identity-H 3 -1 roll[exch]composefont
+ /_basefonto exch def
+ currentdict
+ end
+ /CIDFont defineresource
+ }
+ {
+ ct_BoldBaseFont
+ dup length 3 add dict copy begin
+ /_basefont exch def
+ /_basefonto exch def
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+}bind def
+/ct_MakeBold{
+ 1 index
+ 1 index
+ findfont
+ currentglobal 5 1 roll
+ dup gcheck setglobal
+ dup
+ /FontType get 0 eq
+ {
+ dup/WMode known{dup/WMode get 1 eq}{false}ifelse
+ version length 4 ge
+ and
+ {version 0 4 getinterval cvi 2015 ge}
+ {true}
+ ifelse
+ {/ct_Type0WidthProc}
+ {/ct_Type0WMode1WidthProc}
+ ifelse
+ ct_BoldBaseFont/_setwidthProc 3 -1 roll load put
+ {ct_MakeBoldFont}ct_Type0CopyFont definefont
+ }
+ {
+ dup/_fauxfont known not 1 index/SubstMaster known not and
+ {
+ ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put
+ ct_MakeBoldFont
+ }
+ {
+ 2 index 2 index eq
+ {exch pop }
+ {
+ dup length dict begin
+ ct_CopyFont
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ pop pop pop
+ setglobal
+}bind def
+/?str1 256 string def
+/?set
+ {
+ $SubstituteFont
+ begin
+ /$substituteFound false def
+ /$fontname 1 index def
+ /$doSmartSub false def
+ end
+ dup
+ findfont
+ $SubstituteFont
+ begin
+ $substituteFound
+ {false}
+ {
+ dup/FontName known
+ {
+ dup/FontName get $fontname eq
+ 1 index/DistillerFauxFont known not and
+ /currentdistillerparams where
+ {pop false 2 index isWidthsOnlyFont not and}
+ if
+ }
+ {false}
+ ifelse
+ }
+ ifelse
+ exch pop
+ /$doSmartSub true def
+ end
+ {
+ 5 1 roll pop pop pop pop
+ findfont
+ }
+ {
+ 1 index
+ findfont
+ dup/FontType get 3 eq
+ {
+ 6 1 roll pop pop pop pop pop false
+ }
+ {pop true}
+ ifelse
+ {
+ $SubstituteFont
+ begin
+ pop pop
+ /$styleArray 1 index def
+ /$regOrdering 2 index def
+ pop pop
+ 0 1 $styleArray length 1 sub
+ {
+ $styleArray exch get
+ ct_StyleDicts $regOrdering
+ 2 copy known
+ {
+ get
+ exch 2 copy known not
+ {pop/Default}
+ if
+ get
+ dup type/nametype eq
+ {
+ ?str1 cvs length dup 1 add exch
+ ?str1 exch(-)putinterval
+ exch dup length exch ?str1 exch 3 index exch putinterval
+ add ?str1 exch 0 exch getinterval cvn
+ }
+ {
+ pop pop/Unknown
+ }
+ ifelse
+ }
+ {
+ pop pop pop pop/Unknown
+ }
+ ifelse
+ }
+ for
+ end
+ findfont
+ }if
+ }
+ ifelse
+ currentglobal false setglobal 3 1 roll
+ null copyfont definefont pop
+ setglobal
+ }bind def
+setpacking
+userdict/$SubstituteFont 25 dict put
+1 dict
+ begin
+ /SubstituteFont
+ dup $error exch 2 copy known
+ {get}
+ {pop pop{pop/Courier}bind}
+ ifelse def
+ /currentdistillerparams where dup
+ {
+ pop pop
+ currentdistillerparams/CannotEmbedFontPolicy 2 copy known
+ {get/Error eq}
+ {pop pop false}
+ ifelse
+ }
+ if not
+ {
+ countdictstack array dictstack 0 get
+ begin
+ userdict
+ begin
+ $SubstituteFont
+ begin
+ /$str 128 string def
+ /$fontpat 128 string def
+ /$slen 0 def
+ /$sname null def
+ /$match false def
+ /$fontname null def
+ /$substituteFound false def
+ /$inVMIndex null def
+ /$doSmartSub true def
+ /$depth 0 def
+ /$fontname null def
+ /$italicangle 26.5 def
+ /$dstack null def
+ /$Strategies 10 dict dup
+ begin
+ /$Type3Underprint
+ {
+ currentglobal exch false setglobal
+ 11 dict
+ begin
+ /UseFont exch
+ $WMode 0 ne
+ {
+ dup length dict copy
+ dup/WMode $WMode put
+ /UseFont exch definefont
+ }
+ if def
+ /FontName $fontname dup type/stringtype eq{cvn}if def
+ /FontType 3 def
+ /FontMatrix[.001 0 0 .001 0 0]def
+ /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def
+ /FontBBox[0 0 0 0]def
+ /CCInfo 7 dict dup
+ begin
+ /cc null def
+ /x 0 def
+ /y 0 def
+ end def
+ /BuildChar
+ {
+ exch
+ begin
+ CCInfo
+ begin
+ 1 string dup 0 3 index put exch pop
+ /cc exch def
+ UseFont 1000 scalefont setfont
+ cc stringwidth/y exch def/x exch def
+ x y setcharwidth
+ $SubstituteFont/$Strategy get/$Underprint get exec
+ 0 0 moveto cc show
+ x y moveto
+ end
+ end
+ }bind def
+ currentdict
+ end
+ exch setglobal
+ }bind def
+ /$GetaTint
+ 2 dict dup
+ begin
+ /$BuildFont
+ {
+ dup/WMode known
+ {dup/WMode get}
+ {0}
+ ifelse
+ /$WMode exch def
+ $fontname exch
+ dup/FontName known
+ {
+ dup/FontName get
+ dup type/stringtype eq{cvn}if
+ }
+ {/unnamedfont}
+ ifelse
+ exch
+ Adobe_CoolType_Data/InVMDeepCopiedFonts get
+ 1 index/FontName get known
+ {
+ pop
+ Adobe_CoolType_Data/InVMDeepCopiedFonts get
+ 1 index get
+ null copyfont
+ }
+ {$deepcopyfont}
+ ifelse
+ exch 1 index exch/FontBasedOn exch put
+ dup/FontName $fontname dup type/stringtype eq{cvn}if put
+ definefont
+ Adobe_CoolType_Data/InVMDeepCopiedFonts get
+ begin
+ dup/FontBasedOn get 1 index def
+ end
+ }bind def
+ /$Underprint
+ {
+ gsave
+ x abs y abs gt
+ {/y 1000 def}
+ {/x -1000 def 500 120 translate}
+ ifelse
+ Level2?
+ {
+ [/Separation(All)/DeviceCMYK{0 0 0 1 pop}]
+ setcolorspace
+ }
+ {0 setgray}
+ ifelse
+ 10 setlinewidth
+ x .8 mul
+ [7 3]
+ {
+ y mul 8 div 120 sub x 10 div exch moveto
+ 0 y 4 div neg rlineto
+ dup 0 rlineto
+ 0 y 4 div rlineto
+ closepath
+ gsave
+ Level2?
+ {.2 setcolor}
+ {.8 setgray}
+ ifelse
+ fill grestore
+ stroke
+ }
+ forall
+ pop
+ grestore
+ }bind def
+ end def
+ /$Oblique
+ 1 dict dup
+ begin
+ /$BuildFont
+ {
+ currentglobal exch dup gcheck setglobal
+ null copyfont
+ begin
+ /FontBasedOn
+ currentdict/FontName known
+ {
+ FontName
+ dup type/stringtype eq{cvn}if
+ }
+ {/unnamedfont}
+ ifelse
+ def
+ /FontName $fontname dup type/stringtype eq{cvn}if def
+ /currentdistillerparams where
+ {pop}
+ {
+ /FontInfo currentdict/FontInfo known
+ {FontInfo null copyfont}
+ {2 dict}
+ ifelse
+ dup
+ begin
+ /ItalicAngle $italicangle def
+ /FontMatrix FontMatrix
+ [1 0 ItalicAngle dup sin exch cos div 1 0 0]
+ matrix concatmatrix readonly
+ end
+ 4 2 roll def
+ def
+ }
+ ifelse
+ FontName currentdict
+ end
+ definefont
+ exch setglobal
+ }bind def
+ end def
+ /$None
+ 1 dict dup
+ begin
+ /$BuildFont{}bind def
+ end def
+ end def
+ /$Oblique SetSubstituteStrategy
+ /$findfontByEnum
+ {
+ dup type/stringtype eq{cvn}if
+ dup/$fontname exch def
+ $sname null eq
+ {$str cvs dup length $slen sub $slen getinterval}
+ {pop $sname}
+ ifelse
+ $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval
+ /$match false def
+ $SubstituteFont/$dstack countdictstack array dictstack put
+ mark
+ {
+ $fontpat 0 $slen 7 add getinterval
+ {/$match exch def exit}
+ $str filenameforall
+ }
+ stopped
+ {
+ cleardictstack
+ currentdict
+ true
+ $SubstituteFont/$dstack get
+ {
+ exch
+ {
+ 1 index eq
+ {pop false}
+ {true}
+ ifelse
+ }
+ {begin false}
+ ifelse
+ }
+ forall
+ pop
+ }
+ if
+ cleartomark
+ /$slen 0 def
+ $match false ne
+ {$match(fonts/)anchorsearch pop pop cvn}
+ {/Courier}
+ ifelse
+ }bind def
+ /$ROS 1 dict dup
+ begin
+ /Adobe 4 dict dup
+ begin
+ /Japan1 [/Ryumin-Light/HeiseiMin-W3
+ /GothicBBB-Medium/HeiseiKakuGo-W5
+ /HeiseiMaruGo-W4/Jun101-Light]def
+ /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def
+ /GB1 [/STSong-Light/STHeiti-Regular]def
+ /CNS1 [/MKai-Medium/MHei-Medium]def
+ end def
+ end def
+ /$cmapname null def
+ /$deepcopyfont
+ {
+ dup/FontType get 0 eq
+ {
+ 1 dict dup/FontName/copied put copyfont
+ begin
+ /FDepVector FDepVector copyarray
+ 0 1 2 index length 1 sub
+ {
+ 2 copy get $deepcopyfont
+ dup/FontName/copied put
+ /copied exch definefont
+ 3 copy put pop pop
+ }
+ for
+ def
+ currentdict
+ end
+ }
+ {$Strategies/$Type3Underprint get exec}
+ ifelse
+ }bind def
+ /$buildfontname
+ {
+ dup/CIDFont findresource/CIDSystemInfo get
+ begin
+ Registry length Ordering length Supplement 8 string cvs
+ 3 copy length 2 add add add string
+ dup 5 1 roll dup 0 Registry putinterval
+ dup 4 index(-)putinterval
+ dup 4 index 1 add Ordering putinterval
+ 4 2 roll add 1 add 2 copy(-)putinterval
+ end
+ 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch
+ anchorsearch
+ {pop pop 3 2 roll putinterval cvn/$cmapname exch def}
+ {pop pop pop pop pop}
+ ifelse
+ length
+ $str 1 index(-)putinterval 1 add
+ $str 1 index $cmapname $fontpat cvs putinterval
+ $cmapname length add
+ $str exch 0 exch getinterval cvn
+ }bind def
+ /$findfontByROS
+ {
+ /$fontname exch def
+ $ROS Registry 2 copy known
+ {
+ get Ordering 2 copy known
+ {get}
+ {pop pop[]}
+ ifelse
+ }
+ {pop pop[]}
+ ifelse
+ false exch
+ {
+ dup/CIDFont resourcestatus
+ {
+ pop pop
+ save
+ 1 index/CIDFont findresource
+ dup/WidthsOnly known
+ {dup/WidthsOnly get}
+ {false}
+ ifelse
+ exch pop
+ exch restore
+ {pop}
+ {exch pop true exit}
+ ifelse
+ }
+ {pop}
+ ifelse
+ }
+ forall
+ {$str cvs $buildfontname}
+ {
+ false(*)
+ {
+ save exch
+ dup/CIDFont findresource
+ dup/WidthsOnly known
+ {dup/WidthsOnly get not}
+ {true}
+ ifelse
+ exch/CIDSystemInfo get
+ dup/Registry get Registry eq
+ exch/Ordering get Ordering eq and and
+ {exch restore exch pop true exit}
+ {pop restore}
+ ifelse
+ }
+ $str/CIDFont resourceforall
+ {$buildfontname}
+ {$fontname $findfontByEnum}
+ ifelse
+ }
+ ifelse
+ }bind def
+ end
+ end
+ currentdict/$error known currentdict/languagelevel known and dup
+ {pop $error/SubstituteFont known}
+ if
+ dup
+ {$error}
+ {Adobe_CoolType_Core}
+ ifelse
+ begin
+ {
+ /SubstituteFont
+ /CMap/Category resourcestatus
+ {
+ pop pop
+ {
+ $SubstituteFont
+ begin
+ /$substituteFound true def
+ dup length $slen gt
+ $sname null ne or
+ $slen 0 gt and
+ {
+ $sname null eq
+ {dup $str cvs dup length $slen sub $slen getinterval cvn}
+ {$sname}
+ ifelse
+ Adobe_CoolType_Data/InVMFontsByCMap get
+ 1 index 2 copy known
+ {
+ get
+ false exch
+ {
+ pop
+ currentglobal
+ {
+ GlobalFontDirectory 1 index known
+ {exch pop true exit}
+ {pop}
+ ifelse
+ }
+ {
+ FontDirectory 1 index known
+ {exch pop true exit}
+ {
+ GlobalFontDirectory 1 index known
+ {exch pop true exit}
+ {pop}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ forall
+ }
+ {pop pop false}
+ ifelse
+ {
+ exch pop exch pop
+ }
+ {
+ dup/CMap resourcestatus
+ {
+ pop pop
+ dup/$cmapname exch def
+ /CMap findresource/CIDSystemInfo get{def}forall
+ $findfontByROS
+ }
+ {
+ 128 string cvs
+ dup(-)search
+ {
+ 3 1 roll search
+ {
+ 3 1 roll pop
+ {dup cvi}
+ stopped
+ {pop pop pop pop pop $findfontByEnum}
+ {
+ 4 2 roll pop pop
+ exch length
+ exch
+ 2 index length
+ 2 index
+ sub
+ exch 1 sub -1 0
+ {
+ $str cvs dup length
+ 4 index
+ 0
+ 4 index
+ 4 3 roll add
+ getinterval
+ exch 1 index exch 3 index exch
+ putinterval
+ dup/CMap resourcestatus
+ {
+ pop pop
+ 4 1 roll pop pop pop
+ dup/$cmapname exch def
+ /CMap findresource/CIDSystemInfo get{def}forall
+ $findfontByROS
+ true exit
+ }
+ {pop}
+ ifelse
+ }
+ for
+ dup type/booleantype eq
+ {pop}
+ {pop pop pop $findfontByEnum}
+ ifelse
+ }
+ ifelse
+ }
+ {pop pop pop $findfontByEnum}
+ ifelse
+ }
+ {pop pop $findfontByEnum}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ {//SubstituteFont exec}
+ ifelse
+ /$slen 0 def
+ end
+ }
+ }
+ {
+ {
+ $SubstituteFont
+ begin
+ /$substituteFound true def
+ dup length $slen gt
+ $sname null ne or
+ $slen 0 gt and
+ {$findfontByEnum}
+ {//SubstituteFont exec}
+ ifelse
+ end
+ }
+ }
+ ifelse
+ bind readonly def
+ Adobe_CoolType_Core/scfindfont/systemfindfont load put
+ }
+ {
+ /scfindfont
+ {
+ $SubstituteFont
+ begin
+ dup systemfindfont
+ dup/FontName known
+ {dup/FontName get dup 3 index ne}
+ {/noname true}
+ ifelse
+ dup
+ {
+ /$origfontnamefound 2 index def
+ /$origfontname 4 index def/$substituteFound true def
+ }
+ if
+ exch pop
+ {
+ $slen 0 gt
+ $sname null ne
+ 3 index length $slen gt or and
+ {
+ pop dup $findfontByEnum findfont
+ dup maxlength 1 add dict
+ begin
+ {1 index/FID eq{pop pop}{def}ifelse}
+ forall
+ currentdict
+ end
+ definefont
+ dup/FontName known{dup/FontName get}{null}ifelse
+ $origfontnamefound ne
+ {
+ $origfontname $str cvs print
+ ( substitution revised, using )print
+ dup/FontName known
+ {dup/FontName get}{(unspecified font)}
+ ifelse
+ $str cvs print(.\n)print
+ }
+ if
+ }
+ {exch pop}
+ ifelse
+ }
+ {exch pop}
+ ifelse
+ end
+ }bind def
+ }
+ ifelse
+ end
+ end
+ Adobe_CoolType_Core_Defined not
+ {
+ Adobe_CoolType_Core/findfont
+ {
+ $SubstituteFont
+ begin
+ $depth 0 eq
+ {
+ /$fontname 1 index dup type/stringtype ne{$str cvs}if def
+ /$substituteFound false def
+ }
+ if
+ /$depth $depth 1 add def
+ end
+ scfindfont
+ $SubstituteFont
+ begin
+ /$depth $depth 1 sub def
+ $substituteFound $depth 0 eq and
+ {
+ $inVMIndex null ne
+ {dup $inVMIndex $AddInVMFont}
+ if
+ $doSmartSub
+ {
+ currentdict/$Strategy known
+ {$Strategy/$BuildFont get exec}
+ if
+ }
+ if
+ }
+ if
+ end
+ }bind put
+ }
+ if
+ }
+ if
+ end
+/$AddInVMFont
+ {
+ exch/FontName 2 copy known
+ {
+ get
+ 1 dict dup begin exch 1 index gcheck def end exch
+ Adobe_CoolType_Data/InVMFontsByCMap get exch
+ $DictAdd
+ }
+ {pop pop pop}
+ ifelse
+ }bind def
+/$DictAdd
+ {
+ 2 copy known not
+ {2 copy 4 index length dict put}
+ if
+ Level2? not
+ {
+ 2 copy get dup maxlength exch length 4 index length add lt
+ 2 copy get dup length 4 index length add exch maxlength 1 index lt
+ {
+ 2 mul dict
+ begin
+ 2 copy get{forall}def
+ 2 copy currentdict put
+ end
+ }
+ {pop}
+ ifelse
+ }
+ if
+ get
+ begin
+ {def}
+ forall
+ end
+ }bind def
+end
+end
+%%EndResource
+currentglobal true setglobal
+%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
+%%Copyright: Copyright 1987-2006 Adobe Systems Incorporated.
+%%Version: 1.23 0
+systemdict/languagelevel known dup
+ {currentglobal false setglobal}
+ {false}
+ifelse
+exch
+userdict/Adobe_CoolType_Utility 2 copy known
+ {2 copy get dup maxlength 27 add dict copy}
+ {27 dict}
+ifelse put
+Adobe_CoolType_Utility
+ begin
+ /@eexecStartData
+ <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
+ 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
+ 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def
+ /@recognizeCIDFont null def
+ /ct_Level2? exch def
+ /ct_Clone? 1183615869 internaldict dup
+ /CCRun known not
+ exch/eCCRun known not
+ ct_Level2? and or def
+ct_Level2?
+ {globaldict begin currentglobal true setglobal}
+if
+ /ct_AddStdCIDMap
+ ct_Level2?
+ {{
+ mark
+ Adobe_CoolType_Utility/@recognizeCIDFont currentdict put
+ {
+ ((Hex)57 StartData
+ 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
+ 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
+ d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
+ cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec
+ }
+ stopped
+ {
+ cleartomark
+ Adobe_CoolType_Utility/@recognizeCIDFont get
+ countdictstack dup array dictstack
+ exch 1 sub -1 0
+ {
+ 2 copy get 3 index eq
+ {1 index length exch sub 1 sub{end}repeat exit}
+ {pop}
+ ifelse
+ }
+ for
+ pop pop
+ Adobe_CoolType_Utility/@eexecStartData get eexec
+ }
+ {cleartomark}
+ ifelse
+ }}
+ {{
+ Adobe_CoolType_Utility/@eexecStartData get eexec
+ }}
+ ifelse bind def
+userdict/cid_extensions known
+dup{cid_extensions/cid_UpdateDB known and}if
+ {
+ cid_extensions
+ begin
+ /cid_GetCIDSystemInfo
+ {
+ 1 index type/stringtype eq
+ {exch cvn exch}
+ if
+ cid_extensions
+ begin
+ dup load 2 index known
+ {
+ 2 copy
+ cid_GetStatusInfo
+ dup null ne
+ {
+ 1 index load
+ 3 index get
+ dup null eq
+ {pop pop cid_UpdateDB}
+ {
+ exch
+ 1 index/Created get eq
+ {exch pop exch pop}
+ {pop cid_UpdateDB}
+ ifelse
+ }
+ ifelse
+ }
+ {pop cid_UpdateDB}
+ ifelse
+ }
+ {cid_UpdateDB}
+ ifelse
+ end
+ }bind def
+ end
+ }
+if
+ct_Level2?
+ {end setglobal}
+if
+ /ct_UseNativeCapability? systemdict/composefont known def
+ /ct_MakeOCF 35 dict def
+ /ct_Vars 25 dict def
+ /ct_GlyphDirProcs 6 dict def
+ /ct_BuildCharDict 15 dict dup
+ begin
+ /charcode 2 string def
+ /dst_string 1500 string def
+ /nullstring()def
+ /usewidths? true def
+ end def
+ ct_Level2?{setglobal}{pop}ifelse
+ ct_GlyphDirProcs
+ begin
+ /GetGlyphDirectory
+ {
+ systemdict/languagelevel known
+ {pop/CIDFont findresource/GlyphDirectory get}
+ {
+ 1 index/CIDFont findresource/GlyphDirectory
+ get dup type/dicttype eq
+ {
+ dup dup maxlength exch length sub 2 index lt
+ {
+ dup length 2 index add dict copy 2 index
+ /CIDFont findresource/GlyphDirectory 2 index put
+ }
+ if
+ }
+ if
+ exch pop exch pop
+ }
+ ifelse
+ +
+ }def
+ /+
+ {
+ systemdict/languagelevel known
+ {
+ currentglobal false setglobal
+ 3 dict begin
+ /vm exch def
+ }
+ {1 dict begin}
+ ifelse
+ /$ exch def
+ systemdict/languagelevel known
+ {
+ vm setglobal
+ /gvm currentglobal def
+ $ gcheck setglobal
+ }
+ if
+ ?{$ begin}if
+ }def
+ /?{$ type/dicttype eq}def
+ /|{
+ userdict/Adobe_CoolType_Data known
+ {
+ Adobe_CoolType_Data/AddWidths? known
+ {
+ currentdict Adobe_CoolType_Data
+ begin
+ begin
+ AddWidths?
+ {
+ Adobe_CoolType_Data/CC 3 index put
+ ?{def}{$ 3 1 roll put}ifelse
+ CC charcode exch 1 index 0 2 index 256 idiv put
+ 1 index exch 1 exch 256 mod put
+ stringwidth 2 array astore
+ currentfont/Widths get exch CC exch put
+ }
+ {?{def}{$ 3 1 roll put}ifelse}
+ ifelse
+ end
+ end
+ }
+ {?{def}{$ 3 1 roll put}ifelse} ifelse
+ }
+ {?{def}{$ 3 1 roll put}ifelse}
+ ifelse
+ }def
+ /!
+ {
+ ?{end}if
+ systemdict/languagelevel known
+ {gvm setglobal}
+ if
+ end
+ }def
+ /:{string currentfile exch readstring pop}executeonly def
+ end
+ ct_MakeOCF
+ begin
+ /ct_cHexEncoding
+ [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+ /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+ /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+ /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+ /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+ /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+ /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+ /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+ /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+ /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+ /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+ /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+ /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+ /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
+ /ct_CID_STR_SIZE 8000 def
+ /ct_mkocfStr100 100 string def
+ /ct_defaultFontMtx[.001 0 0 .001 0 0]def
+ /ct_1000Mtx[1000 0 0 1000 0 0]def
+ /ct_raise{exch cvx exch errordict exch get exec stop}bind def
+ /ct_reraise
+ {cvx $error/errorname get(Error: )print dup( )cvs print
+ errordict exch get exec stop
+ }bind def
+ /ct_cvnsi
+ {
+ 1 index add 1 sub 1 exch 0 4 1 roll
+ {
+ 2 index exch get
+ exch 8 bitshift
+ add
+ }
+ for
+ exch pop
+ }bind def
+ /ct_GetInterval
+ {
+ Adobe_CoolType_Utility/ct_BuildCharDict get
+ begin
+ /dst_index 0 def
+ dup dst_string length gt
+ {dup string/dst_string exch def}
+ if
+ 1 index ct_CID_STR_SIZE idiv
+ /arrayIndex exch def
+ 2 index arrayIndex get
+ 2 index
+ arrayIndex ct_CID_STR_SIZE mul
+ sub
+ {
+ dup 3 index add 2 index length le
+ {
+ 2 index getinterval
+ dst_string dst_index 2 index putinterval
+ length dst_index add/dst_index exch def
+ exit
+ }
+ {
+ 1 index length 1 index sub
+ dup 4 1 roll
+ getinterval
+ dst_string dst_index 2 index putinterval
+ pop dup dst_index add/dst_index exch def
+ sub
+ /arrayIndex arrayIndex 1 add def
+ 2 index dup length arrayIndex gt
+ {arrayIndex get}
+ {
+ pop
+ exit
+ }
+ ifelse
+ 0
+ }
+ ifelse
+ }
+ loop
+ pop pop pop
+ dst_string 0 dst_index getinterval
+ end
+ }bind def
+ ct_Level2?
+ {
+ /ct_resourcestatus
+ currentglobal mark true setglobal
+ {/unknowninstancename/Category resourcestatus}
+ stopped
+ {cleartomark setglobal true}
+ {cleartomark currentglobal not exch setglobal}
+ ifelse
+ {
+ {
+ mark 3 1 roll/Category findresource
+ begin
+ ct_Vars/vm currentglobal put
+ ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec
+ {cleartomark false}
+ {{3 2 roll pop true}{cleartomark false}ifelse}
+ ifelse
+ ct_Vars/vm get setglobal
+ end
+ }
+ }
+ {{resourcestatus}}
+ ifelse bind def
+ /CIDFont/Category ct_resourcestatus
+ {pop pop}
+ {
+ currentglobal true setglobal
+ /Generic/Category findresource
+ dup length dict copy
+ dup/InstanceType/dicttype put
+ /CIDFont exch/Category defineresource pop
+ setglobal
+ }
+ ifelse
+ ct_UseNativeCapability?
+ {
+ /CIDInit/ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CIDSystemInfo 3 dict dup begin
+ /Registry(Adobe)def
+ /Ordering(Identity)def
+ /Supplement 0 def
+ end def
+ /CMapName/Identity-H def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ if
+ }
+ {
+ /ct_Category 2 dict begin
+ /CIDFont 10 dict def
+ /ProcSet 2 dict def
+ currentdict
+ end
+ def
+ /defineresource
+ {
+ ct_Category 1 index 2 copy known
+ {
+ get
+ dup dup maxlength exch length eq
+ {
+ dup length 10 add dict copy
+ ct_Category 2 index 2 index put
+ }
+ if
+ 3 index 3 index put
+ pop exch pop
+ }
+ {pop pop/defineresource/undefined ct_raise}
+ ifelse
+ }bind def
+ /findresource
+ {
+ ct_Category 1 index 2 copy known
+ {
+ get
+ 2 index 2 copy known
+ {get 3 1 roll pop pop}
+ {pop pop/findresource/undefinedresource ct_raise}
+ ifelse
+ }
+ {pop pop/findresource/undefined ct_raise}
+ ifelse
+ }bind def
+ /resourcestatus
+ {
+ ct_Category 1 index 2 copy known
+ {
+ get
+ 2 index known
+ exch pop exch pop
+ {
+ 0 -1 true
+ }
+ {
+ false
+ }
+ ifelse
+ }
+ {pop pop/findresource/undefined ct_raise}
+ ifelse
+ }bind def
+ /ct_resourcestatus/resourcestatus load def
+ }
+ ifelse
+ /ct_CIDInit 2 dict
+ begin
+ /ct_cidfont_stream_init
+ {
+ {
+ dup(Binary)eq
+ {
+ pop
+ null
+ currentfile
+ ct_Level2?
+ {
+ {cid_BYTE_COUNT()/SubFileDecode filter}
+ stopped
+ {pop pop pop}
+ if
+ }
+ if
+ /readstring load
+ exit
+ }
+ if
+ dup(Hex)eq
+ {
+ pop
+ currentfile
+ ct_Level2?
+ {
+ {null exch/ASCIIHexDecode filter/readstring}
+ stopped
+ {pop exch pop(>)exch/readhexstring}
+ if
+ }
+ {(>)exch/readhexstring}
+ ifelse
+ load
+ exit
+ }
+ if
+ /StartData/typecheck ct_raise
+ }
+ loop
+ cid_BYTE_COUNT ct_CID_STR_SIZE le
+ {
+ 2 copy cid_BYTE_COUNT string exch exec
+ pop
+ 1 array dup
+ 3 -1 roll
+ 0 exch put
+ }
+ {
+ cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
+ dup array exch 2 sub 0 exch 1 exch
+ {
+ 2 copy
+ 5 index
+ ct_CID_STR_SIZE
+ string
+ 6 index exec
+ pop
+ put
+ pop
+ }
+ for
+ 2 index
+ cid_BYTE_COUNT ct_CID_STR_SIZE mod string
+ 3 index exec
+ pop
+ 1 index exch
+ 1 index length 1 sub
+ exch put
+ }
+ ifelse
+ cid_CIDFONT exch/GlyphData exch put
+ 2 index null eq
+ {
+ pop pop pop
+ }
+ {
+ pop/readstring load
+ 1 string exch
+ {
+ 3 copy exec
+ pop
+ dup length 0 eq
+ {
+ pop pop pop pop pop
+ true exit
+ }
+ if
+ 4 index
+ eq
+ {
+ pop pop pop pop
+ false exit
+ }
+ if
+ }
+ loop
+ pop
+ }
+ ifelse
+ }bind def
+ /StartData
+ {
+ mark
+ {
+ currentdict
+ dup/FDArray get 0 get/FontMatrix get
+ 0 get 0.001 eq
+ {
+ dup/CDevProc known not
+ {
+ /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known
+ {get}
+ {
+ pop pop
+ {pop pop pop pop pop 0 -1000 7 index 2 div 880}
+ }
+ ifelse
+ def
+ }
+ if
+ }
+ {
+ /CDevProc
+ {
+ pop pop pop pop pop
+ 0
+ 1 cid_temp/cid_CIDFONT get
+ /FDArray get 0 get
+ /FontMatrix get 0 get div
+ 7 index 2 div
+ 1 index 0.88 mul
+ }def
+ }
+ ifelse
+ /cid_temp 15 dict def
+ cid_temp
+ begin
+ /cid_CIDFONT exch def
+ 3 copy pop
+ dup/cid_BYTE_COUNT exch def 0 gt
+ {
+ ct_cidfont_stream_init
+ FDArray
+ {
+ /Private get
+ dup/SubrMapOffset known
+ {
+ begin
+ /Subrs SubrCount array def
+ Subrs
+ SubrMapOffset
+ SubrCount
+ SDBytes
+ ct_Level2?
+ {
+ currentdict dup/SubrMapOffset undef
+ dup/SubrCount undef
+ /SDBytes undef
+ }
+ if
+ end
+ /cid_SD_BYTES exch def
+ /cid_SUBR_COUNT exch def
+ /cid_SUBR_MAP_OFFSET exch def
+ /cid_SUBRS exch def
+ cid_SUBR_COUNT 0 gt
+ {
+ GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
+ 0 cid_SD_BYTES ct_cvnsi
+ 0 1 cid_SUBR_COUNT 1 sub
+ {
+ exch 1 index
+ 1 add
+ cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
+ GlyphData exch cid_SD_BYTES ct_GetInterval
+ 0 cid_SD_BYTES ct_cvnsi
+ cid_SUBRS 4 2 roll
+ GlyphData exch
+ 4 index
+ 1 index
+ sub
+ ct_GetInterval
+ dup length string copy put
+ }
+ for
+ pop
+ }
+ if
+ }
+ {pop}
+ ifelse
+ }
+ forall
+ }
+ if
+ cleartomark pop pop
+ end
+ CIDFontName currentdict/CIDFont defineresource pop
+ end end
+ }
+ stopped
+ {cleartomark/StartData ct_reraise}
+ if
+ }bind def
+ currentdict
+ end def
+ /ct_saveCIDInit
+ {
+ /CIDInit/ProcSet ct_resourcestatus
+ {true}
+ {/CIDInitC/ProcSet ct_resourcestatus}
+ ifelse
+ {
+ pop pop
+ /CIDInit/ProcSet findresource
+ ct_UseNativeCapability?
+ {pop null}
+ {/CIDInit ct_CIDInit/ProcSet defineresource pop}
+ ifelse
+ }
+ {/CIDInit ct_CIDInit/ProcSet defineresource pop null}
+ ifelse
+ ct_Vars exch/ct_oldCIDInit exch put
+ }bind def
+ /ct_restoreCIDInit
+ {
+ ct_Vars/ct_oldCIDInit get dup null ne
+ {/CIDInit exch/ProcSet defineresource pop}
+ {pop}
+ ifelse
+ }bind def
+ /ct_BuildCharSetUp
+ {
+ 1 index
+ begin
+ CIDFont
+ begin
+ Adobe_CoolType_Utility/ct_BuildCharDict get
+ begin
+ /ct_dfCharCode exch def
+ /ct_dfDict exch def
+ CIDFirstByte ct_dfCharCode add
+ dup CIDCount ge
+ {pop 0}
+ if
+ /cid exch def
+ {
+ GlyphDirectory cid 2 copy known
+ {get}
+ {pop pop nullstring}
+ ifelse
+ dup length FDBytes sub 0 gt
+ {
+ dup
+ FDBytes 0 ne
+ {0 FDBytes ct_cvnsi}
+ {pop 0}
+ ifelse
+ /fdIndex exch def
+ dup length FDBytes sub FDBytes exch getinterval
+ /charstring exch def
+ exit
+ }
+ {
+ pop
+ cid 0 eq
+ {/charstring nullstring def exit}
+ if
+ /cid 0 def
+ }
+ ifelse
+ }
+ loop
+ }def
+ /ct_SetCacheDevice
+ {
+ 0 0 moveto
+ dup stringwidth
+ 3 -1 roll
+ true charpath
+ pathbbox
+ 0 -1000
+ 7 index 2 div 880
+ setcachedevice2
+ 0 0 moveto
+ }def
+ /ct_CloneSetCacheProc
+ {
+ 1 eq
+ {
+ stringwidth
+ pop -2 div -880
+ 0 -1000 setcharwidth
+ moveto
+ }
+ {
+ usewidths?
+ {
+ currentfont/Widths get cid
+ 2 copy known
+ {get exch pop aload pop}
+ {pop pop stringwidth}
+ ifelse
+ }
+ {stringwidth}
+ ifelse
+ setcharwidth
+ 0 0 moveto
+ }
+ ifelse
+ }def
+ /ct_Type3ShowCharString
+ {
+ ct_FDDict fdIndex 2 copy known
+ {get}
+ {
+ currentglobal 3 1 roll
+ 1 index gcheck setglobal
+ ct_Type1FontTemplate dup maxlength dict copy
+ begin
+ FDArray fdIndex get
+ dup/FontMatrix 2 copy known
+ {get}
+ {pop pop ct_defaultFontMtx}
+ ifelse
+ /FontMatrix exch dup length array copy def
+ /Private get
+ /Private exch def
+ /Widths rootfont/Widths get def
+ /CharStrings 1 dict dup/.notdef
+ <d841272cf18f54fc13>dup length string copy put def
+ currentdict
+ end
+ /ct_Type1Font exch definefont
+ dup 5 1 roll put
+ setglobal
+ }
+ ifelse
+ dup/CharStrings get 1 index/Encoding get
+ ct_dfCharCode get charstring put
+ rootfont/WMode 2 copy known
+ {get}
+ {pop pop 0}
+ ifelse
+ exch
+ 1000 scalefont setfont
+ ct_str1 0 ct_dfCharCode put
+ ct_str1 exch ct_dfSetCacheProc
+ ct_SyntheticBold
+ {
+ currentpoint
+ ct_str1 show
+ newpath
+ moveto
+ ct_str1 true charpath
+ ct_StrokeWidth setlinewidth
+ stroke
+ }
+ {ct_str1 show}
+ ifelse
+ }def
+ /ct_Type4ShowCharString
+ {
+ ct_dfDict ct_dfCharCode charstring
+ FDArray fdIndex get
+ dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
+ {ct_1000Mtx matrix concatmatrix concat}
+ {pop}
+ ifelse
+ /Private get
+ Adobe_CoolType_Utility/ct_Level2? get not
+ {
+ ct_dfDict/Private
+ 3 -1 roll
+ {put}
+ 1183615869 internaldict/superexec get exec
+ }
+ if
+ 1183615869 internaldict
+ Adobe_CoolType_Utility/ct_Level2? get
+ {1 index}
+ {3 index/Private get mark 6 1 roll}
+ ifelse
+ dup/RunInt known
+ {/RunInt get}
+ {pop/CCRun}
+ ifelse
+ get exec
+ Adobe_CoolType_Utility/ct_Level2? get not
+ {cleartomark}
+ if
+ }bind def
+ /ct_BuildCharIncremental
+ {
+ {
+ Adobe_CoolType_Utility/ct_MakeOCF get begin
+ ct_BuildCharSetUp
+ ct_ShowCharString
+ }
+ stopped
+ {stop}
+ if
+ end
+ end
+ end
+ end
+ }bind def
+ /BaseFontNameStr(BF00)def
+ /ct_Type1FontTemplate 14 dict
+ begin
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]def
+ /FontBBox [-250 -250 1250 1250]def
+ /Encoding ct_cHexEncoding def
+ /PaintType 0 def
+ currentdict
+ end def
+ /BaseFontTemplate 11 dict
+ begin
+ /FontMatrix [0.001 0 0 0.001 0 0]def
+ /FontBBox [-250 -250 1250 1250]def
+ /Encoding ct_cHexEncoding def
+ /BuildChar/ct_BuildCharIncremental load def
+ ct_Clone?
+ {
+ /FontType 3 def
+ /ct_ShowCharString/ct_Type3ShowCharString load def
+ /ct_dfSetCacheProc/ct_CloneSetCacheProc load def
+ /ct_SyntheticBold false def
+ /ct_StrokeWidth 1 def
+ }
+ {
+ /FontType 4 def
+ /Private 1 dict dup/lenIV 4 put def
+ /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def
+ /PaintType 0 def
+ /ct_ShowCharString/ct_Type4ShowCharString load def
+ }
+ ifelse
+ /ct_str1 1 string def
+ currentdict
+ end def
+ /BaseFontDictSize BaseFontTemplate length 5 add def
+ /ct_matrixeq
+ {
+ true 0 1 5
+ {
+ dup 4 index exch get exch 3 index exch get eq and
+ dup not
+ {exit}
+ if
+ }
+ for
+ exch pop exch pop
+ }bind def
+ /ct_makeocf
+ {
+ 15 dict
+ begin
+ exch/WMode exch def
+ exch/FontName exch def
+ /FontType 0 def
+ /FMapType 2 def
+ dup/FontMatrix known
+ {dup/FontMatrix get/FontMatrix exch def}
+ {/FontMatrix matrix def}
+ ifelse
+ /bfCount 1 index/CIDCount get 256 idiv 1 add
+ dup 256 gt{pop 256}if def
+ /Encoding
+ 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for
+ bfCount 1 255{2 copy bfCount put pop}for
+ def
+ /FDepVector bfCount dup 256 lt{1 add}if array def
+ BaseFontTemplate BaseFontDictSize dict copy
+ begin
+ /CIDFont exch def
+ CIDFont/FontBBox known
+ {CIDFont/FontBBox get/FontBBox exch def}
+ if
+ CIDFont/CDevProc known
+ {CIDFont/CDevProc get/CDevProc exch def}
+ if
+ currentdict
+ end
+ BaseFontNameStr 3(0)putinterval
+ 0 1 bfCount dup 256 eq{1 sub}if
+ {
+ FDepVector exch
+ 2 index BaseFontDictSize dict copy
+ begin
+ dup/CIDFirstByte exch 256 mul def
+ FontType 3 eq
+ {/ct_FDDict 2 dict def}
+ if
+ currentdict
+ end
+ 1 index 16
+ BaseFontNameStr 2 2 getinterval cvrs pop
+ BaseFontNameStr exch definefont
+ put
+ }
+ for
+ ct_Clone?
+ {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def}
+ if
+ FontName
+ currentdict
+ end
+ definefont
+ ct_Clone?
+ {
+ gsave
+ dup 1000 scalefont setfont
+ ct_BuildCharDict
+ begin
+ /usewidths? false def
+ currentfont/Widths get
+ begin
+ exch/CIDFont get/GlyphDirectory get
+ {
+ pop
+ dup charcode exch 1 index 0 2 index 256 idiv put
+ 1 index exch 1 exch 256 mod put
+ stringwidth 2 array astore def
+ }
+ forall
+ end
+ /usewidths? true def
+ end
+ grestore
+ }
+ {exch pop}
+ ifelse
+ }bind def
+ currentglobal true setglobal
+ /ct_ComposeFont
+ {
+ ct_UseNativeCapability?
+ {
+ 2 index/CMap ct_resourcestatus
+ {pop pop exch pop}
+ {
+ /CIDInit/ProcSet findresource
+ begin
+ 12 dict
+ begin
+ begincmap
+ /CMapName 3 index def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ exch/WMode exch def
+ /CIDSystemInfo 3 dict dup
+ begin
+ /Registry(Adobe)def
+ /Ordering
+ CMapName ct_mkocfStr100 cvs
+ (Adobe-)search
+ {
+ pop pop
+ (-)search
+ {
+ dup length string copy
+ exch pop exch pop
+ }
+ {pop(Identity)}
+ ifelse
+ }
+ {pop (Identity)}
+ ifelse
+ def
+ /Supplement 0 def
+ end def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ ifelse
+ composefont
+ }
+ {
+ 3 2 roll pop
+ 0 get/CIDFont findresource
+ ct_makeocf
+ }
+ ifelse
+ }bind def
+ setglobal
+ /ct_MakeIdentity
+ {
+ ct_UseNativeCapability?
+ {
+ 1 index/CMap ct_resourcestatus
+ {pop pop}
+ {
+ /CIDInit/ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /CMapName 2 index def
+ /CMapVersion 1.000 def
+ /CMapType 1 def
+ /CIDSystemInfo 3 dict dup
+ begin
+ /Registry(Adobe)def
+ /Ordering
+ CMapName ct_mkocfStr100 cvs
+ (Adobe-)search
+ {
+ pop pop
+ (-)search
+ {dup length string copy exch pop exch pop}
+ {pop(Identity)}
+ ifelse
+ }
+ {pop(Identity)}
+ ifelse
+ def
+ /Supplement 0 def
+ end def
+ 1 begincodespacerange
+ <0000><FFFF>
+ endcodespacerange
+ 1 begincidrange
+ <0000><FFFF>0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ }
+ ifelse
+ composefont
+ }
+ {
+ exch pop
+ 0 get/CIDFont findresource
+ ct_makeocf
+ }
+ ifelse
+ }bind def
+ currentdict readonly pop
+ end
+ end
+%%EndResource
+setglobal
+%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0
+%%Copyright: Copyright 1987-2004 Adobe Systems Incorporated.
+%%Version: 1.0 0
+userdict/ct_T42Dict 15 dict put
+ct_T42Dict begin
+/Is2015?
+{
+ version
+ cvi
+ 2015
+ ge
+}bind def
+/AllocGlyphStorage
+{
+ Is2015?
+ {
+ pop
+ }
+ {
+ {string}forall
+ }ifelse
+}bind def
+/Type42DictBegin
+{
+25 dict begin
+ /FontName exch def
+ /CharStrings 256 dict
+begin
+ /.notdef 0 def
+ currentdict
+end def
+ /Encoding exch def
+ /PaintType 0 def
+ /FontType 42 def
+ /FontMatrix[1 0 0 1 0 0]def
+ 4 array astore cvx/FontBBox exch def
+ /sfnts
+}bind def
+/Type42DictEnd
+{
+ currentdict dup/FontName get exch definefont end
+ct_T42Dict exch
+dup/FontName get exch put
+}bind def
+/RD{string currentfile exch readstring pop}executeonly def
+/PrepFor2015
+{
+Is2015?
+{
+ /GlyphDirectory
+ 16
+ dict def
+ sfnts 0 get
+ dup
+ 2 index
+ (glyx)
+ putinterval
+ 2 index
+ (locx)
+ putinterval
+ pop
+ pop
+}
+{
+ pop
+ pop
+}ifelse
+}bind def
+/AddT42Char
+{
+Is2015?
+{
+ /GlyphDirectory get
+ begin
+ def
+ end
+ pop
+ pop
+}
+{
+ /sfnts get
+ 4 index
+ get
+ 3 index
+ 2 index
+ putinterval
+ pop
+ pop
+ pop
+ pop
+}ifelse
+}bind def
+/T0AddT42Mtx2
+{
+/CIDFont findresource/Metrics2 get begin def end
+}bind def
+end
+%%EndResource
+currentglobal true setglobal
+%%BeginFile: MMFauxFont.prc
+%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
+%%All Rights Reserved.
+userdict /ct_EuroDict 10 dict put
+ct_EuroDict begin
+/ct_CopyFont
+{
+ { 1 index /FID ne {def} {pop pop} ifelse} forall
+} def
+/ct_GetGlyphOutline
+{
+ gsave
+ initmatrix newpath
+ exch findfont dup
+ length 1 add dict
+ begin
+ ct_CopyFont
+ /Encoding Encoding dup length array copy
+ dup
+ 4 -1 roll
+ 0 exch put
+ def
+ currentdict
+ end
+ /ct_EuroFont exch definefont
+ 1000 scalefont setfont
+ 0 0 moveto
+ [
+ <00> stringwidth
+ <00> false charpath
+ pathbbox
+ [
+ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall
+ grestore
+ counttomark 8 add
+}
+def
+/ct_MakeGlyphProc
+{
+ ] cvx
+ /ct_PSBuildGlyph cvx
+ ] cvx
+} def
+/ct_PSBuildGlyph
+{
+ gsave
+ 8 -1 roll pop
+ 7 1 roll
+ 6 -2 roll ct_FontMatrix transform 6 2 roll
+ 4 -2 roll ct_FontMatrix transform 4 2 roll
+ ct_FontMatrix transform
+ currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
+ dup 9 1 roll
+ {
+ currentdict /StrokeWidth 2 copy known
+ {
+ get 2 div
+ 0 ct_FontMatrix dtransform pop
+ 5 1 roll
+ 4 -1 roll 4 index sub
+ 4 1 roll
+ 3 -1 roll 4 index sub
+ 3 1 roll
+ exch 4 index add exch
+ 4 index add
+ 5 -1 roll pop
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ if
+ setcachedevice
+ ct_FontMatrix concat
+ ct_PSPathOps begin
+ exec
+ end
+ {
+ currentdict /StrokeWidth 2 copy known
+ { get }
+ { pop pop 0 }
+ ifelse
+ setlinewidth stroke
+ }
+ {
+ fill
+ }
+ ifelse
+ grestore
+} def
+/ct_PSPathOps 4 dict dup begin
+ /m {moveto} def
+ /l {lineto} def
+ /c {curveto} def
+ /cp {closepath} def
+end
+def
+/ct_matrix1000 [1000 0 0 1000 0 0] def
+/ct_AddGlyphProc
+{
+ 2 index findfont dup length 4 add dict
+ begin
+ ct_CopyFont
+ /CharStrings CharStrings dup length 1 add dict copy
+ begin
+ 3 1 roll def
+ currentdict
+ end
+ def
+ /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def
+ /ct_PSBuildGlyph /ct_PSBuildGlyph load def
+ /ct_PSPathOps /ct_PSPathOps load def
+ currentdict
+ end
+ definefont pop
+}
+def
+systemdict /languagelevel known
+{
+ /ct_AddGlyphToPrinterFont {
+ 2 copy
+ ct_GetGlyphOutline 3 add -1 roll restore
+ ct_MakeGlyphProc
+ ct_AddGlyphProc
+ } def
+}
+{
+ /ct_AddGlyphToPrinterFont {
+ pop pop restore
+ Adobe_CTFauxDict /$$$FONTNAME get
+ /Euro
+ Adobe_CTFauxDict /$$$SUBSTITUTEBASE get
+ ct_EuroDict exch get
+ ct_AddGlyphProc
+ } def
+} ifelse
+/AdobeSansMM
+{
+556 0 24 -19 541 703
+ {
+ 541 628 m
+ 510 669 442 703 354 703 c
+ 201 703 117 607 101 444 c
+ 50 444 l
+ 25 372 l
+ 97 372 l
+ 97 301 l
+ 49 301 l
+ 24 229 l
+ 103 229 l
+ 124 67 209 -19 350 -19 c
+ 435 -19 501 25 509 32 c
+ 509 131 l
+ 492 105 417 60 343 60 c
+ 267 60 204 127 197 229 c
+ 406 229 l
+ 430 301 l
+ 191 301 l
+ 191 372 l
+ 455 372 l
+ 479 444 l
+ 194 444 l
+ 201 531 245 624 348 624 c
+ 433 624 484 583 509 534 c
+ cp
+ 556 0 m
+ }
+ct_PSBuildGlyph
+} def
+/AdobeSerifMM
+{
+500 0 10 -12 484 692
+ {
+ 347 298 m
+ 171 298 l
+ 170 310 170 322 170 335 c
+ 170 362 l
+ 362 362 l
+ 374 403 l
+ 172 403 l
+ 184 580 244 642 308 642 c
+ 380 642 434 574 457 457 c
+ 481 462 l
+ 474 691 l
+ 449 691 l
+ 433 670 429 657 410 657 c
+ 394 657 360 692 299 692 c
+ 204 692 94 604 73 403 c
+ 22 403 l
+ 10 362 l
+ 70 362 l
+ 69 352 69 341 69 330 c
+ 69 319 69 308 70 298 c
+ 22 298 l
+ 10 257 l
+ 73 257 l
+ 97 57 216 -12 295 -12 c
+ 364 -12 427 25 484 123 c
+ 458 142 l
+ 425 101 384 37 316 37 c
+ 256 37 189 84 173 257 c
+ 335 257 l
+ cp
+ 500 0 m
+ }
+ct_PSBuildGlyph
+} def
+end
+%%EndFile
+setglobal
+Adobe_CoolType_Core begin /$None SetSubstituteStrategy end
+%%BeginResource: procset Adobe_AGM_Image 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Image 71 dict dup begin put
+/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def
+/nd{
+ null def
+}bind def
+/AGMIMG_&image nd
+/AGMIMG_&colorimage nd
+/AGMIMG_&imagemask nd
+/AGMIMG_mbuf()def
+/AGMIMG_ybuf()def
+/AGMIMG_kbuf()def
+/AGMIMG_c 0 def
+/AGMIMG_m 0 def
+/AGMIMG_y 0 def
+/AGMIMG_k 0 def
+/AGMIMG_tmp nd
+/AGMIMG_imagestring0 nd
+/AGMIMG_imagestring1 nd
+/AGMIMG_imagestring2 nd
+/AGMIMG_imagestring3 nd
+/AGMIMG_imagestring4 nd
+/AGMIMG_imagestring5 nd
+/AGMIMG_cnt nd
+/AGMIMG_fsave nd
+/AGMIMG_colorAry nd
+/AGMIMG_override nd
+/AGMIMG_name nd
+/AGMIMG_maskSource nd
+/AGMIMG_flushfilters nd
+/invert_image_samples nd
+/knockout_image_samples nd
+/img nd
+/sepimg nd
+/devnimg nd
+/idximg nd
+/ds
+{
+ Adobe_AGM_Core begin
+ Adobe_AGM_Image begin
+ /AGMIMG_&image systemdict/image get def
+ /AGMIMG_&imagemask systemdict/imagemask get def
+ /colorimage where{
+ pop
+ /AGMIMG_&colorimage/colorimage ldf
+ }if
+ end
+ end
+}def
+/ps
+{
+ Adobe_AGM_Image begin
+ /AGMIMG_ccimage_exists{/customcolorimage where
+ {
+ pop
+ /Adobe_AGM_OnHost_Seps where
+ {
+ pop false
+ }{
+ /Adobe_AGM_InRip_Seps where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }ifelse
+ }{
+ false
+ }ifelse
+ }bdf
+ level2{
+ /invert_image_samples
+ {
+ Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
+ /Decode[Decode 1 get Decode 0 get]def
+ }def
+ /knockout_image_samples
+ {
+ Operator/imagemask ne{
+ /Decode[1 1]def
+ }if
+ }def
+ }{
+ /invert_image_samples
+ {
+ {1 exch sub}currenttransfer addprocs settransfer
+ }def
+ /knockout_image_samples
+ {
+ {pop 1}currenttransfer addprocs settransfer
+ }def
+ }ifelse
+ /img/imageormask ldf
+ /sepimg/sep_imageormask ldf
+ /devnimg/devn_imageormask ldf
+ /idximg/indexed_imageormask ldf
+ /_ctype 7 def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+}def
+/pt
+{
+ end
+}def
+/dt
+{
+}def
+/AGMIMG_flushfilters
+{
+ dup type/arraytype ne
+ {1 array astore}if
+ dup 0 get currentfile ne
+ {dup 0 get flushfile}if
+ {
+ dup type/filetype eq
+ {
+ dup status 1 index currentfile ne and
+ {closefile}
+ {pop}
+ ifelse
+ }{pop}ifelse
+ }forall
+}def
+/AGMIMG_init_common
+{
+ currentdict/T known{/ImageType/T ldf currentdict/T undef}if
+ currentdict/W known{/Width/W ldf currentdict/W undef}if
+ currentdict/H known{/Height/H ldf currentdict/H undef}if
+ currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if
+ currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if
+ currentdict/D known{/Decode/D ldf currentdict/D undef}if
+ currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if
+ currentdict/O known{
+ /Operator/O load 1 eq{
+ /imagemask
+ }{
+ /O load 2 eq{
+ /image
+ }{
+ /colorimage
+ }ifelse
+ }ifelse
+ def
+ currentdict/O undef
+ }if
+ currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if
+ currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if
+ currentdict/I known{/Interpolate/I ldf currentdict/I undef}if
+ currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if
+ /DataSource load xcheck not{
+ DataSource type/arraytype eq{
+ DataSource 0 get type/filetype eq{
+ /_Filters DataSource def
+ currentdict/MultipleDataSources known not{
+ /DataSource DataSource dup length 1 sub get def
+ }if
+ }if
+ }if
+ currentdict/MultipleDataSources known not{
+ /MultipleDataSources DataSource type/arraytype eq{
+ DataSource length 1 gt
+ }
+ {false}ifelse def
+ }if
+ }if
+ /NComponents Decode length 2 div def
+ currentdict/SkipImageProc known not{/SkipImageProc{false}def}if
+}bdf
+/imageormask_sys
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ level2{
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ AGMIMG_&imagemask
+ }{
+ BitsPerComponent ImageMatrix/DataSource load
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ cleartomark restore
+ end
+}def
+/overprint_plate
+{
+ currentoverprint{
+ 0 get dup type/nametype eq{
+ dup/DeviceGray eq{
+ pop AGMCORE_black_plate not
+ }{
+ /DeviceCMYK eq{
+ AGMCORE_is_cmyk_sep not
+ }if
+ }ifelse
+ }{
+ false exch
+ {
+ AGMOHS_sepink eq or
+ }forall
+ not
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}def
+/process_mask
+{
+ level3{
+ dup begin
+ /ImageType 1 def
+ end
+ 4 dict begin
+ /DataDict exch def
+ /ImageType 3 def
+ /InterleaveType 3 def
+ /MaskDict 9 dict begin
+ /ImageType 1 def
+ /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def
+ /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def
+ /ImageMatrix[Width 0 0 Height neg 0 Height]def
+ /NComponents 1 def
+ /BitsPerComponent 1 def
+ /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def
+ /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def
+ currentdict end def
+ currentdict end
+ }if
+}def
+/use_mask
+{
+ dup/Mask known {dup/Mask get}{false}ifelse
+}def
+/imageormask
+{
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }
+ {
+ save mark
+ level2 AGMCORE_host_sep not and{
+ currentdict
+ Operator/imagemask eq DeviceN_PS2 not and{
+ imagemask
+ }{
+ AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ /Decode[Decode 1 get Decode 0 get]def
+ }if
+ use_mask{
+ process_mask image
+ }{
+ DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
+ {
+ Names convert_to_process not{
+ 2 dict begin
+ /imageDict xdf
+ /names_index 0 def
+ gsave
+ imageDict write_image_file{
+ Names{
+ dup(None)ne{
+ [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace
+ Operator imageDict read_image_file
+ names_index 0 eq{true setoverprint}if
+ /names_index names_index 1 add def
+ }{
+ pop
+ }ifelse
+ }forall
+ close_image_file
+ }if
+ grestore
+ end
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ /Adobe_AGM_OnHost_Seps where{
+ pop imagemask
+ }{
+ currentgray 1 ne{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ BitsPerComponent ImageMatrix
+ MultipleDataSources{
+ 0 1 NComponents 1 sub{
+ DataSource exch get
+ }for
+ }{
+ /DataSource load
+ }ifelse
+ Operator/colorimage eq{
+ AGMCORE_host_sep{
+ MultipleDataSources level2 or NComponents 4 eq and{
+ AGMCORE_is_cmyk_sep{
+ MultipleDataSources{
+ /DataSource DataSource 0 get xcheck
+ {
+ [
+ DataSource 0 get/exec cvx
+ DataSource 1 get/exec cvx
+ DataSource 2 get/exec cvx
+ DataSource 3 get/exec cvx
+ /AGMCORE_get_ink_data cvx
+ ]cvx
+ }{
+ DataSource aload pop AGMCORE_get_ink_data
+ }ifelse def
+ }{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ /DataSource load
+ filter_cmyk 0()/SubFileDecode filter def
+ }ifelse
+ /Decode[Decode 0 get Decode 1 get]def
+ /MultipleDataSources false def
+ /NComponents 1 def
+ /Operator/image def
+ invert_image_samples
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }{
+ MultipleDataSources NComponents AGMIMG_&colorimage
+ }ifelse
+ }{
+ true NComponents colorimage
+ }ifelse
+ }{
+ Operator/image eq{
+ AGMCORE_host_sep{
+ /DoImage true def
+ currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse
+ {
+ AGMCORE_black_plate not Operator/imagemask ne and{
+ /DoImage false def
+ currentdict ignoreimagedata
+ }if
+ }if
+ 1 AGMCORE_&setgray
+ DoImage
+ {currentdict imageormask_sys}if
+ }{
+ use_mask{
+ process_mask image
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/knockout eq{
+ pop pop pop pop pop
+ currentcolorspace overprint_plate not{
+ knockout_unitsq
+ }if
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/sep_imageormask
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_avoid_L2_sep_space{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ }if
+ AGMIMG_ccimage_exists
+ MappedCSA 0 get/DeviceCMYK eq and
+ currentdict/Components known and
+ Name()ne and
+ Name(All)ne and
+ Operator/image eq and
+ AGMCORE_producing_seps not and
+ level2 not and
+ {
+ Width Height BitsPerComponent ImageMatrix
+ [
+ /DataSource load/exec cvx
+ {
+ 0 1 2 index length 1 sub{
+ 1 index exch
+ 2 copy get 255 xor put
+ }for
+ }/exec cvx
+ ]cvx bind
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Name findcmykcustomcolor
+ customcolorimage
+ }{
+ AGMCORE_producing_seps not{
+ level2{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{
+ [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ currentdict imageormask
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask
+ }{
+ sep_imageormask_lev1
+ }ifelse
+ }ifelse
+ }{
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ currentdict/ImageMatrix get concat
+ knockout_unitsq
+ }{
+ currentgray 1 ne{
+ AGMCORE_is_cmyk_sep Name(All)ne and{
+ level2{
+ Name AGMCORE_IsSeparationAProcessColor
+ {
+ Operator/imagemask eq{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor
+ }if
+ }{
+ invert_image_samples
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ [/Separation Name[/DeviceGray]
+ {
+ sep_colorspace_proc AGMCORE_get_ink_data
+ 1 exch sub
+ }bind
+ ]AGMCORE_&setcolorspace
+ /sep_tint AGMCORE_gget AGMCORE_&setcolor
+ }if
+ }ifelse
+ currentdict imageormask_sys
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ sep_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask ne{
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }ifelse
+ }{
+ currentoverprint not Name(All)eq or Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ currentcolorspace 0 get/Separation ne{
+ [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ }if
+ currentoverprint
+ MappedCSA 0 get/DeviceCMYK eq and
+ Name AGMCORE_IsSeparationAProcessColor not and
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse
+ Name(All)ne and{
+ imageormask_l2_overprint
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+}def
+/colorSpaceElemCnt
+{
+ mark currentcolor counttomark dup 2 add 1 roll cleartomark
+}bdf
+/devn_sep_datasource
+{
+ 1 dict begin
+ /dataSource xdf
+ [
+ 0 1 dataSource length 1 sub{
+ dup currentdict/dataSource get/exch cvx/get cvx/exec cvx
+ /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx
+ }for
+ ]cvx bind
+ end
+}bdf
+/devn_alt_datasource
+{
+ 11 dict begin
+ /convProc xdf
+ /origcolorSpaceElemCnt xdf
+ /origMultipleDataSources xdf
+ /origBitsPerComponent xdf
+ /origDecode xdf
+ /origDataSource xdf
+ /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def
+ /DataSource origMultipleDataSources
+ {
+ [
+ BitsPerComponent 8 idiv origDecode length 2 idiv mul string
+ 0 1 origDecode length 2 idiv 1 sub
+ {
+ dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch
+ origDataSource exch get 0()/SubFileDecode filter
+ BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx
+ }for
+ ]bind cvx
+ }{origDataSource}ifelse 0()/SubFileDecode filter def
+ [
+ origcolorSpaceElemCnt string
+ 0 2 origDecode length 2 sub
+ {
+ dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div
+ 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx
+ }for
+ /convProc load/exec cvx
+ origcolorSpaceElemCnt 1 sub -1 0
+ {
+ /dup cvx 2/add cvx/index cvx
+ 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx
+ }for
+ ]bind cvx 0()/SubFileDecode filter
+ end
+}bdf
+/devn_imageormask
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ 2 dict begin
+ dup
+ /srcDataStrs[3 -1 roll begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi
+ {
+ dup 65535 gt{1 add 2 div cvi}{exit}ifelse
+ }loop
+ string
+ }repeat
+ end]def
+ /dstDataStr srcDataStrs 0 get length string def
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_producing_seps not{
+ level3 not{
+ Operator/imagemask ne{
+ /DataSource[[
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def
+ /MultipleDataSources true def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ }if
+ }if
+ currentdict imageormask
+ }{
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ CSA get_csa_by_name 0 get/DeviceCMYK eq{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ filter_cmyk 0()/SubFileDecode filter def
+ /MultipleDataSources false def
+ /Decode[1 0]def
+ /DeviceGray setcolorspace
+ currentdict imageormask_sys
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate{
+ /DataSource
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ /MultipleDataSources false def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ currentdict imageormask_sys
+ }{
+ gsave
+ knockout_unitsq
+ grestore
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }
+ {
+ /devicen_colorspace_dict AGMCORE_gget/names_index known{
+ Operator/imagemask ne{
+ MultipleDataSources{
+ /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def
+ /MultipleDataSources false def
+ }{
+ /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def
+ }ifelse
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+ end
+}def
+/imageormask_l2_overprint
+{
+ currentdict
+ currentcmykcolor add add add 0 eq{
+ currentdict consumeimagedata
+ }{
+ level3{
+ currentcmykcolor
+ /AGMIMG_k xdf
+ /AGMIMG_y xdf
+ /AGMIMG_m xdf
+ /AGMIMG_c xdf
+ Operator/imagemask eq{
+ [/DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]/DeviceCMYK{}]setcolorspace
+ AGMIMG_c 0 ne{AGMIMG_c}if
+ AGMIMG_m 0 ne{AGMIMG_m}if
+ AGMIMG_y 0 ne{AGMIMG_y}if
+ AGMIMG_k 0 ne{AGMIMG_k}if
+ setcolor
+ }{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ [/Indexed
+ [
+ /DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]
+ /DeviceCMYK{
+ AGMIMG_k 0 eq{0}if
+ AGMIMG_y 0 eq{0 exch}if
+ AGMIMG_m 0 eq{0 3 1 roll}if
+ AGMIMG_c 0 eq{0 4 1 roll}if
+ }
+ ]
+ 255
+ {
+ 255 div
+ mark exch
+ dup dup dup
+ AGMIMG_k 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_y 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_m 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_c 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ counttomark 1 add -1 roll pop
+ }
+ ]setcolorspace
+ }ifelse
+ imageormask_sys
+ }{
+ write_image_file{
+ currentcmykcolor
+ 0 ne{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ gsave
+ /Black
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Yellow/DeviceGray{}]setcolorspace
+ gsave
+ /Yellow
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Magenta/DeviceGray{}]setcolorspace
+ gsave
+ /Magenta
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Cyan/DeviceGray{}]setcolorspace
+ gsave
+ /Cyan
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ close_image_file
+ }{
+ imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+}def
+/indexed_imageormask
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ currentdict
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ /indexed_colorspace_dict AGMCORE_gget dup/CSA known{
+ /CSA get get_csa_by_name
+ }{
+ /Names get
+ }ifelse
+ overprint_plate not{
+ knockout_unitsq
+ }if
+ }{
+ Indexed_DeviceN{
+ /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{
+ indexed_image_lev2_sep
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }{
+ AGMCORE_is_cmyk_sep{
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ level2{
+ indexed_image_lev2_sep
+ }{
+ indexed_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ level2{
+ Indexed_DeviceN{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ }{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne
+ {
+ begin
+ currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse
+ get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and
+ AGMCORE_in_rip_sep and{
+ [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup]
+ setcolorspace
+ }if
+ end
+ }
+ {pop}ifelse
+ }ifelse
+ imageormask
+ Indexed_DeviceN{
+ end
+ }if
+ }{
+ Operator/imagemask eq{
+ imageormask
+ }{
+ indexed_imageormask_lev1
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/indexed_image_lev2_sep
+{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ Indexed_DeviceN not{
+ currentcolorspace
+ dup 1/DeviceGray put
+ dup 3
+ currentcolorspace 2 get 1 add string
+ 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
+ {
+ dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
+ }for
+ put setcolorspace
+ }if
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ end end
+}def
+ /OPIimage
+ {
+ dup type/dicttype ne{
+ 10 dict begin
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /ImageType 1 def
+ /Decode[0 1 def]
+ currentdict
+ end
+ }if
+ dup begin
+ /NComponents 1 cdndf
+ /MultipleDataSources false cdndf
+ /SkipImageProc{false}cdndf
+ /Decode[
+ 0
+ currentcolorspace 0 get/Indexed eq{
+ 2 BitsPerComponent exp 1 sub
+ }{
+ 1
+ }ifelse
+ ]cdndf
+ /Operator/image cdndf
+ end
+ /sep_colorspace_dict AGMCORE_gget null eq{
+ imageormask
+ }{
+ gsave
+ dup begin invert_image_samples end
+ sep_imageormask
+ grestore
+ }ifelse
+ }def
+/cachemask_level2
+{
+ 3 dict begin
+ /LZWEncode filter/WriteFilter xdf
+ /readBuffer 256 string def
+ /ReadFilter
+ currentfile
+ 0(%EndMask)/SubFileDecode filter
+ /ASCII85Decode filter
+ /RunLengthDecode filter
+ def
+ {
+ ReadFilter readBuffer readstring exch
+ WriteFilter exch writestring
+ not{exit}if
+ }loop
+ WriteFilter closefile
+ end
+}def
+/spot_alias
+{
+ /mapto_sep_imageormask
+ {
+ dup type/dicttype ne{
+ 12 dict begin
+ /ImageType 1 def
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /MultipleDataSources false def
+ }{
+ begin
+ }ifelse
+ /Decode[/customcolor_tint AGMCORE_gget 0]def
+ /Operator/image def
+ /SkipImageProc{false}def
+ currentdict
+ end
+ sep_imageormask
+ }bdf
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_colorAry xddf
+ /customcolor_tint AGMCORE_gget
+ <<
+ /Name AGMIMG_colorAry 4 get
+ /CSA[/DeviceCMYK]
+ /TintMethod/Subtractive
+ /TintProc null
+ /MappedCSA null
+ /NComponents 4
+ /Components[AGMIMG_colorAry aload pop pop]
+ >>
+ setsepcolorspace
+ mapto_sep_imageormask
+ }ndf
+ Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_override false put
+ current_spot_alias{dup 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /customcolor_tint AGMCORE_gget exch setsepcolorspace
+ pop
+ mapto_sep_imageormask
+ true set_spot_alias
+ }{
+ //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec
+ }ifelse
+ }bdf
+}def
+/snap_to_device
+{
+ 6 dict begin
+ matrix currentmatrix
+ dup 0 get 0 eq 1 index 3 get 0 eq and
+ 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
+ {
+ 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def
+ 0 0 transform
+ AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ itransform/AGMIMG_llY exch def/AGMIMG_llX exch def
+ 1 1 transform
+ AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ itransform/AGMIMG_urY exch def/AGMIMG_urX exch def
+ [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat
+ }{
+ }ifelse
+ end
+}def
+level2 not{
+ /colorbuf
+ {
+ 0 1 2 index length 1 sub{
+ dup 2 index exch get
+ 255 exch sub
+ 2 index
+ 3 1 roll
+ put
+ }for
+ }def
+ /tint_image_to_color
+ {
+ begin
+ Width Height BitsPerComponent ImageMatrix
+ /DataSource load
+ end
+ Adobe_AGM_Image begin
+ /AGMIMG_mbuf 0 string def
+ /AGMIMG_ybuf 0 string def
+ /AGMIMG_kbuf 0 string def
+ {
+ colorbuf dup length AGMIMG_mbuf length ne
+ {
+ dup length dup dup
+ /AGMIMG_mbuf exch string def
+ /AGMIMG_ybuf exch string def
+ /AGMIMG_kbuf exch string def
+ }if
+ dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
+ }
+ addprocs
+ {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage
+ end
+ }def
+ /sep_imageormask_lev1
+ {
+ begin
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {
+ 255 mul round cvi GrayLookup exch get
+ }currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
+ {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ currentcolortransfer
+ {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ /sep_image_lev1_sep
+ {
+ begin
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ Components aload pop
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ {AGMIMG_c mul 1 exch sub}
+ {AGMIMG_m mul 1 exch sub}
+ {AGMIMG_y mul 1 exch sub}
+ {AGMIMG_k mul 1 exch sub}
+ }{
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
+ }ifelse
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end
+ }def
+ /indexed_imageormask_lev1
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ currentdict
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ end end
+ }def
+ /indexed_image_lev1_sep
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end end
+ }def
+}if
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndProlog
+%%BeginSetup
+Adobe_AGM_Utils begin
+2 2010 Adobe_AGM_Core/ds gx
+Adobe_CoolType_Core/ds get exec
+Adobe_AGM_Image/ds gx
+[/NamespacePush pdfmark_5
+[/_objdef {Doc_Metadata} /type /stream /OBJ pdfmark_5
+[{Doc_Metadata} 1281 (% &end XMP packet& %) ReadBypdfmark_5_string
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
+ xmp:ModifyDate="2011-04-08T15:21:07-05:00"
+ xmp:CreateDate="2011-04-08T15:21:07-05:00"
+ xmp:MetadataDate="2011-04-08T15:21:07-05:00"
+ xmp:CreatorTool="DVIPSONE 2.3.4.149 http://www.YandY.com"
+ dc:format="application/pdf"
+ xmpMM:DocumentID="uuid:4672a2a6-f2a2-46c1-a618-bae4e40b5b67"
+ xmpMM:InstanceID="uuid:840d3c6d-0825-497a-9944-212dd7f55635"
+ pdf:Producer="Acrobat Distiller 10.0.1 (Windows)">
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">test03</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ <dc:description>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">TeX output 2011.04.08:1517</rdf:li>
+ </rdf:Alt>
+ </dc:description>
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li>Donald Story (Complimentary Copy) 4662 2009-10-23 13:17:17</rdf:li>
+ </rdf:Seq>
+ </dc:creator>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
@@ -7988,1171 +7988,1171 @@ Adobe_AGM_Image/ds gx
-<?xpacket end='w'?>
-
-
-% &end XMP packet& %
-
-[{Doc_Metadata} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark_5
-[/Document 1 dict begin /Metadata {Doc_Metadata} def currentdict end /BDC pdfmark_5
-[/NamespacePop pdfmark_5
-currentdict Adobe_AGM_Utils eq {end} if
-%%EndSetup
-%%Page: 1 1
-%%EndPageComments
-%%BeginPageSetup
-Adobe_AGM_Utils begin
-Adobe_AGM_Core/ps gx
-Adobe_AGM_Core/capture_mysetup gx
-Adobe_AGM_Utils/capture_cpd gx
-Adobe_CoolType_Core/ps get exec
-Adobe_AGM_Image/ps gx
-%%EndPageSetup
-1 -1 scale 0 -194.951 translate
-pgsv
-[1 0 0 1 0 0 ]ct
-gsave
-np
-gsave
--7.62939e-6 0 mo
--7.62939e-6 194.951 li
-256.793 194.951 li
-256.793 0 li
-cp
-clp
-false sop
-/0
-<<
-/Name (Black)
-/0
-[/DeviceCMYK] /CSA add_res
-/CSA /0 get_csa_by_name
-/MappedCSA /0 /CSA get_res
-/TintMethod /Subtractive
-/TintProc null
-/NComponents 4
-/Components [ 0 0 0 1 ]
->>
-/CSD add_res
-1 /0 /CSD get_res sepcs
-1 sep
-%ADOBeginSubsetFont: GLAAAA+CMR10 Initial
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-13 dict dup begin
-/FontType 1 def
-/FontName /GLAAAA+CMR10 def
-/FontInfo 8 dict dup begin
-/Notice (Copyright (c) 1988 - 1994 Blue Sky Research and Y&Y, Inc. http://www.YandY.com) def
-/Weight (Medium) def
-/ItalicAngle 0 def
-/BaseFontName (CMR10) def
-/WasEmbedded true def
-end def
-/PaintType 0 def
-/FontMatrix [0.001 0 0 0.001 0 0] def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 51 /three put
-dup 53 /five put
-dup 65 /A put
-dup 67 /C put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 97 /a put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 111 /o put
-dup 123 /endash put
-def
-/UniqueID 5000793 def
-/FontBBox {-40 -250 1009 969} def
-end
-systemdict begin
-dup /Private
-13 dict dup begin
-/|- {def} def
-/| {put} def
-/BlueValues [-22 -0 683 705 431 448 666 677] def
-/OtherBlues [-206 -194] def
-/BlueScale 0.04379 def
-/StdHW [31] def
-/StdVW [69] def
-/StemSnapH [22 31] def
-/StemSnapV [69 89] def
-/password 5839 def
-/MinFeature {16 16} def
-/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
-systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
-/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
-/Subrs 5 array
-dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
-dup 1 <1C60D8A8C9C3D06D9E> |
-dup 2 <1C60D8A8C9C202D79A> |
-dup 3 <1C60D8A849> |
-dup 4 <1C60D8A8CC3674F41144B13B77> |
-def
-put
-dup /CharStrings
-23 dict dup begin
-/slash <1C60D8A8C9B7A73DB56225352A24C6E389DE2B55CA06CAB1D904D74F
-E21B6520E910DE6837DBFFB95567192F781E541A03B8446689265DEAE7140ED2
-3D1C3943714CDFC12315> |-
-/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
-2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
-1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
-892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
-232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
-/one <1C60D8A8C9B7A73DC579B9CE13A4EA8C203AFC890ABD6F58341B006CF1
-BDD8FED3A7238E01F751FEAC75885229C293891E5636AD630D9C884528B6FEF0
-0728A740ED77D054B4743ECA5E3947520FEF6B23D548765D11> |-
-/three <1C60D8A8C9B7A73D3B2B97DEB4C7BDB68E0D63865C8BF294429AD1BA
-AE59A25299F9306A9E28AA5C0C0AF9F97F56096DB0FD0EC440ACCE834B0BA539
-2FD94D026768A961AA5D1A88FAE30F2B2033E77AFAB55B0B9C8092CD226DD9EF
-EEAAF5CD5AE79D6DDEC4C37DC43DE3B85DD2A2EC4DC0C9F349D5E8F9F615782E
-DC8C53805553FD3C0007C1818BF3D99AB659A079ED36132BBDC613CA63D7A0FE
-429706DBC6BA998CE56A89C002758EF37F90A390F83B3DFE49D312FA66FDF2F1
-6212D1503559B35FC2DB8BD5A49535> |-
-/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
-CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
-B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
-7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
-F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
-7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
-F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
-A> |-
-/A <1C60D8A8C9B08A9501CDAE1251A61DF6E2312CA41635F6CE1D00B63E171C
-70F84D42F62A21A6DD37D84C279E3FAE908D39B730ACD671ED9E277ACFE833A1
-1F48F076C9803DC08258033731BCBCE19DF3B81C1C298B382A15FAC94387A992
-AD9631716A7ED4F711137D6C851AE1C8DCBBFBCF7274E882226E58958CE6283A
-197E7FAE3A2D0F6C24FA411BECFB36A10FF2A923EA89ABEFAD5AB23D600F> |-
-/C <1C60D8A8C9B08A9454CA4C75C5C983901A105955FD02AB95A1C2D2A205D6
-C9A19566388580DAF81E45849DB37660797B67B5A88B6906602915C5F5C9B0EC
-D18BF9F52BC4BC58CA3DC88745B8BAABAD3D92E461BFB415E7240305CDDA1D0D
-B5D35FEBC75FFD4C053E78B6CA772ACEB0C2FF98C08B672F492F305E0C5F3841
-918729B4AEB78A65C2A83364408240D8D653DA56F4DCB028D3D78F3C2D6BC7> |-
-/I <1C60D8A8C9B08A9591900960B3FA4612DFF926AB21A530E1912F33677612
-AC06B324D812E42049FF4946BE5E0FFA24FA0C62F2839FF2110EEC7EE0A42476
-46E6F699D4C8BECE1825B3A661611E4D55F40F2E64FACB836D4D0C9780F60650
-FBF10E0D42> |-
-/L <1C60D8A8C9B08A9504870DC577BFF1117CB147078FC0444648398262998D
-8061E386D366188391878ADBE16C10A3B1BC6A93F56BD64AE45F8370470F419D
-A43CBACE3D7B1152502CD0CF1468D72D3CB197A29E71D336CDA7D6BAA426EC1B
-681825BDDC37329099DC579F155C> |-
-/M <1C60D8A8C9B08A94284A0D047609A407E661A852E250B140B4157477FB2A
-AE2E22210B2D780B692B0718211E5BD86C3DCF8087849BEE2B9F6D1D8621E40C
-8FBE892AC1B23002BF18819E26C6741335DF8DA8AC82506D7051C0505D48DDFA
-17EE84A06E07C05EBAC6174D600BACE071866247BE6C83F4CF28F6D6EE6A6CF8
-A788C4FFFDBDCA978C2B0B201753D21CB7AF0542C690ECE8E7EDBE1B1FB29939
-734E35E0ECCA8BA7FAEB58AC205A8A82A94C960A65> |-
-/N <1C60D8A8C9B08A9501CDAE1251A61DF6E23FBE9059A2A88492E84D61402E
-80BD80B5057FF8914FA4679EB3900C60B246DA77BF837041B1C053FCD543E3D1
-D259FCE953A74E40366D604A99F9233772AC97F872D505329B1446640ABD99E4
-AC723C39DD6EA376A043CE3633F04D9BC6DEFE2E1A831DBB9C16F90A966DFA0F
-3802BB1EB0AA3DAEB0E864B9D3CC3E14AE1E9219B48660289CF348B4E280> |-
-/O <1C60D8A8C9B08A946182837629000F56F09862ED5AA400F2B4EB929FCD0B
-6F40CAF45238A67BE496742823610F15AF19832E8EC09C64557C48DB0BC41E07
-C1B98081893CB2216BAE4CCECC72A02E2F6B8D0FE8B2E6548D00AAA585F02486
-772A4FC1258C2982A5ECEC> |-
-/P <1C60D8A8C9B08A94478101EE5603CAF9EA65868978F157B7D9DB71203FAD
-46B85DF1A1E477012038D20B3756C0124AD7E2F6ACCB98150AB793091E3E7A8F
-3C0AE6FC8D7A5031BB678671889D46F3A15BD495F1AB5B7C8F63325E15B44523
-174D09593A38714FEB5177883F725186FE6BF7095A24CD9EDEFA3551580A0E2B
-0B49AC2002> |-
-/S <1C60D8A8C9B08A95C5897169EED99899F86A6DCF3CD291B001131D3BCB45
-BF71748507542417352D5B30F63C60EB90DCF55005F88E95175B21D3219CD9E9
-2E89E417B177D285600845553F66626D2225552D23A7697637BDCEEECAEA18AB
-42A896E96FF5B3536CC368A5F7504B6C75D962A4B5F9534F79AC78DC99848461
-42257A40DE257430C92806EBA73FF7D93DF0A6C207299E2D17F4071F9096D016
-163F4D3EC1889ADA266D3682F2D99904573A5022A10E61069737F2D55F919F95
-A33DB6DD2667321E4727855B58DBF4B1E5A294928E6CEABFBD34F296C1B758> |-
-/T <1C60D8A8C9B08A9454CA4C75C5C97DCE7AB32777FAAECD12647866E7CB3F
-CCDC541E37F2225E520DEDE695980D4012AD5B972BDABC7E7E5410E71AC63692
-4E778B3131B6C4D1E76F8C4592AC311A2107F53DC1850538C9E487E6D5DBDFE8
-027D7126BA9ED8B24E7379B57E474ACD298BF6B3700CC970D80111DD98EFC872
-C24D0DA3C75DDDFD177C6D15> |-
-/U <1C60D8A8C9B08A9501CDAE1251A6E3AF1199B24D30F25809B39A0DD6474A
-CF1BFDB89F5985BBB0F2E5FE7296314FDA462BECDBDEA31B3750001975D37A8B
-F31F224CAB5093B8997B856DAE5F9007E1497BEED45CA8AC033A65F773653762
-77BFCDF39A2D8F1BC8E5626BEEEF5D670E87E32F25C0530E88A4E2B9AD6D8333
-3A6C173F8B22714E74A224AD610C2B1EAB> |-
-/a <1C60D8A8C9B7A73DCB03313BCF7AD8C8EE234E5372D46A65E92A78F4B7E0
-2ECC58F71EE6C027AD4D56C5E4DE1AF1031295DC17C0E7AC8D8358634F9A19B0
-2A110E5539C10136C68E0D2CBEA6658A501D9D73323861F8C29EB92F9080ACC3
-E236C5F14389534682EC2925F59CD4A215569A7BD7B9F7827A30BA75EB840535
-B2A2C8F92AD166CE93D277314A4C690C47DB847F73BFE1049631CDDB9124FD76
-2753AA8DB187C216AFB74F76299B3C51610D74CF31321BBFEB5CFCA7D213C896
-D1B8E57EFC05695F2F73> |-
-/e <1C60D8A8C9B08A95B1F07368C45D8D2AF4BC97E4CB216B20786BB8409E5C
-B0892E60E7F0AD9AC8433678C58AAD59736BF9700A3AEB0B5352F4A898A5EEFB
-C72A64BFB45B917D9879BD0577DAB96A0E86BECAB5E8A8A051E5E40886D5A00C
-EC53E0A3265FC74195574846689BF9F38086985C2DD3223390D51155F707CE86
-59EC1C65A75BE9A0BA862DB1A00FF6A01FCED7E6> |-
-/f <1C60D8A8C9B08A956BA65798425CE9B0A78F07A04AF2F8524751F181F94C
-EF756ACD6AB92BD09462A05FB08A9160A0AB5267B62445F916DEFC1DAF3F1FB4
-B3761F71CBE3290960500C788D04CB45BB0A2825753AA6E46495F35A08389AAA
-C80F35ADADFB7ACE340FEC03C9E5F9A50A8AD731E7A553A32F387574697F9CAB
-2E100B6DD6E3525398F6> |-
-/g <1C60D8A8C9B7A73DB58EA28807584EB19BC6EA1448A12312E623B90358A1
-63CFC67672A34CC74B0AEAADF24229DF1CCAA1488AE3E348FE2ACD572EA487EC
-9D77FBB0710AB421B03DD5B8AE5519B5C269E9648E819E7ECE806EEF16A6618D
-07D9AAB350E57F26F5259E8FCF9E5C2D96BBEAD16502F9E7819E854042DDB2BC
-674C39681CC2E5224219582BC7B59BBAEF869C9DF91CA7770A97BAD53C3C3A99
-175BA8F0A5744B5969D3BC15831A95918F7C707E41F5D87B8DB2D57378BC9C29
-7DAE69E4BF438246E63F565B22D86CBE28DEF748262FB9FF82A88935451D6280
-A28F1AD964E6E476D5779321E42D3A86BE41122F1BED36C3DC47E1E01C225345
-98D0431873197ABE1C8EC03B4011E4B26D249635BDBABB8E5B69BE07AFA65F88
-EAF6> |-
-/o <1C60D8A8C9B7A73DCEB07E09D16841D605E4F67059E6B258F546B80703E4
-CDAF20027B900118209D5372F965F2045D50C02A29110A048C891DEBA3210CDF
-C5CDE2309C0CDE0E4855E9F6D8954C4C68826A14AD2E4C6227A036D85D304D6A
-96FEAA92DEC3CD1B9F4AD57B5F1EBAB070FE911461A7D5B958F5> |-
-/endash <1C60D8A8C9B7A73DB9B60A0DBA4B5FB3A045D6B65F12EE5E3DC48D3
-43D8E> |-
-/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
-end put
-end
-dup /FontName get exch definefont pop
-end
-%ADOEndSubsetFont
-/YNDRLJ+CMR10 /GLAAAA+CMR10 findfont ct_VMDictPut
-/YNDRLJ+CMR10*1
-[47{/.notdef}rp /slash /zero /one /.notdef /three /.notdef /five
-11{/.notdef}rp /A /.notdef /C 5{/.notdef}rp /I 2{/.notdef}rp /L
-/M /N /O /P 2{/.notdef}rp /S /T /U
-11{/.notdef}rp /a 3{/.notdef}rp /e /f /g 7{/.notdef}rp /o
-11{/.notdef}rp /endash 132{/.notdef}rp]
-YNDRLJ+CMR10 nf
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
--31.697 -36.8879 mo
-(MAC1105/T3{Page5of10{SOLUTIONS)
-[9.13578 7.19498 7.193 4.9813 4.9813 4.9813 4.98129 4.98131 7.19299 92.4629 8.30183 6.50756
-4.98131 4.98129 7.74393 8.30185 4.98129 6.36908 4.98129 8.30182 195.931 5.53922 7.75089 6.22662
-7.47195 7.19296 3.59644 7.75098 7.47192 0 ]xsh
-%ADOBeginSubsetFont: GISAAA+CMBX10 Initial
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-13 dict dup begin
-/FontType 1 def
-/FontName /GISAAA+CMBX10 def
-/FontInfo 8 dict dup begin
-/Notice (Copyright (c) 1988 - 1994 Blue Sky Research and Y&Y, Inc. http://www.YandY.com) def
-/Weight (Bold) def
-/ItalicAngle 0 def
-/BaseFontName (CMBX10) def
-/WasEmbedded true def
-end def
-/PaintType 0 def
-/FontMatrix [0.001 0 0 0.001 0 0] def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 46 /period put
-dup 56 /eight put
-def
-/UniqueID 5000768 def
-/FontBBox {-301 -250 1164 946} def
-end
-systemdict begin
-dup /Private
-14 dict dup begin
-/|- {def} def
-/| {put} def
-/BlueValues [-11 -0 686 697 444 453 655 676] def
-/OtherBlues [-201 -194] def
-/BlueScale 0.04379 def
-/StdHW [47] def
-/StdVW [114] def
-/StemSnapH [40 47] def
-/StemSnapV [114 142] def
-/ForceBold true def
-/password 5839 def
-/MinFeature {16 16} def
-/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
-systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
-/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
-/Subrs 5 array
-dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
-dup 1 <1C60D8A8C9C3D06D9E> |
-dup 2 <1C60D8A8C9C202D79A> |
-dup 3 <1C60D8A849> |
-dup 4 <1C60D8A8CC3674F41144B13B77> |
-def
-put
-dup /CharStrings
-3 dict dup begin
-/period <1C60D8A8C9B08A9560D4C2F3A74D92838E83B7DC14B89478B799496
-0CFDC6D2144A34A20CA36052335682902BE7739DD> |-
-/eight <1C60D8A8C9B7FCB6A4EC6CCC71FFBC41969F86A86636A65E5BD14FD4
-EBD93FCE205F86ECC615335CAFE8E2240019DB970894F9979E3FDF252D8A9472
-1B680E23D2DF204A99891D5AD0E347695938A6FCE4923A098978EC0AC2A3894C
-8A94767FEBA61293F9C489BAC7A89726BFA765D56F2D198E99D500D81046ACE1
-5301FD9FB36D2F2E4EAA017CCF306EAEC8E157B40FDE6DC2FA713180A587E730
-6AD0870F441697503D> |-
-/.notdef <1C60D8A8C9B08A95899606B6B060A7> |-
-end put
-end
-dup /FontName get exch definefont pop
-end
-%ADOEndSubsetFont
-/YNDRLK+CMBX10 /GISAAA+CMBX10 findfont ct_VMDictPut
-/YNDRLK+CMBX10*1
-[46{/.notdef}rp /period 9{/.notdef}rp /eight 199{/.notdef}rp]
-YNDRLK+CMBX10 nf
-YNDRLK+CMBX10*1 [9.9626 0 0 -9.9626 0 0 ]msf
--25.9685 -7.00012 mo
-(8.)
-[5.72846 0 ]xsh
-249.382 99.488 mo
-253.706 97.944 li
-249.382 96.4 li
-251.112 97.944 li
-f
-gsave
-253.705 187.944 mo
-1.70499 187.944 li
-1.70499 7.94397 li
-253.705 7.94397 li
-cp
-clp
-.797 lw
-0 lc
-0 lj
-10 ml
-[] 0 dsh
-false sadj
-1.70499 97.944 mo
-251.111 97.944 li
-@
-grestore
-.399 lw
-0 lc
-0 lj
-10 ml
-[] 0 dsh
-false sadj
-127.705 101.929 mo
-127.705 93.959 li
-@
-155.705 101.929 mo
-155.705 93.959 li
-@
-183.705 101.929 mo
-183.705 93.959 li
-@
-211.705 101.929 mo
-211.705 93.959 li
-@
-239.705 101.929 mo
-239.705 93.959 li
-@
-127.705 101.929 mo
-127.705 93.959 li
-@
-99.705 101.929 mo
-99.705 93.959 li
-@
-71.705 101.929 mo
-71.705 93.959 li
-@
-43.705 101.929 mo
-43.705 93.959 li
-@
-15.705 101.929 mo
-15.705 93.959 li
-@
-129.25 12.268 mo
-127.706 7.94403 li
-126.162 12.268 li
-127.706 10.5391 li
-f
-.797 lw
-127.705 187.944 mo
-127.705 10.538 li
-@
-.399 lw
-123.72 97.944 mo
-131.69 97.944 li
-@
-123.72 77.944 mo
-131.69 77.944 li
-@
-123.72 57.944 mo
-131.69 57.944 li
-@
-123.72 37.944 mo
-131.69 37.944 li
-@
-123.72 17.944 mo
-131.69 17.944 li
-@
-123.72 97.944 mo
-131.69 97.944 li
-@
-123.72 117.944 mo
-131.69 117.944 li
-@
-123.72 137.944 mo
-131.69 137.944 li
-@
-123.72 157.944 mo
-131.69 157.944 li
-@
-123.72 177.944 mo
-131.69 177.944 li
-@
-%ADOBeginSubsetFont: GLAAAA+CMR10 AddGlyphs
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-systemdict begin
-YNDRLJ+CMR10 dup
-/Private get dup rcheck
-{begin true}{pop false}ifelse exch
-/CharStrings get begin
-systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
-/two <1C60D8A8C9B7A73DC50B0411757B441481CCF7EF812EEB9B3F6A07BD51
-606BCA866C4BD24CA34E86B9CA5A529B664F3EEDB6B4AF8A2B994DB57B49473E
-162231CB943675FE63E9B92B8AEBB62FB22456EC4173C66EF6C2F34FFEC22ACA
-E77FFFAAD70F3754CADC0D2CF63CB6D286D930AEA5A613E5AB9CB004BEAEBADD
-D070EDAF4FF25FDB6421F540D58D2C7A3FC40290CBCF831BE1B89B7F> |-
-/four <1C60D8A8C9B7A73DC579B9C1587087D4749982A674065FCDD01CF53F5
-4AF89DAF22339F0A467CE8D8CC25949B03A9DEFE86592098644AED5891ABD8D0
-71237FB9B66EF7648D767508B0BB1075A0AC676C770BFE6D0E818B53FD7884E4
-D8E6A983234A6E833EF72FF7FE587> |-
-systemdict /gcheck known {setglobal} if end {end} if
-end
-YNDRLJ+CMR10 /Encoding get
-dup 50 /two put
-dup 52 /four put
-pop
-%ADOEndSubsetFont
-/YNDRLJ+CMR10*1
-[47{/.notdef}rp /slash /zero /one /two /three /four /five
-11{/.notdef}rp /A /.notdef /C 5{/.notdef}rp /I 2{/.notdef}rp /L
-/M /N /O /P 2{/.notdef}rp /S /T /U
-11{/.notdef}rp /a 3{/.notdef}rp /e /f /g 7{/.notdef}rp /o
-11{/.notdef}rp /endash 132{/.notdef}rp]
-YNDRLJ+CMR10 nf
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-113.758 81.1542 mo
-(1)sh
-113.758 61.1542 mo
-(2)sh
-113.758 41.1543 mo
-(3)sh
-113.758 21.1544 mo
-(4)sh
-%ADOBeginSubsetFont: BUZAAA+CMSY10 Initial
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-13 dict dup begin
-/FontType 1 def
-/FontName /BUZAAA+CMSY10 def
-/FontInfo 8 dict dup begin
-/Notice (Copyright (c) 1996 Y&Y, Inc. All Right Reserved. http://www.YandY.com) def
-/Weight (Medium) def
-/ItalicAngle -14.035 def
-/BaseFontName (CMSY10) def
-/WasEmbedded true def
-end def
-/PaintType 0 def
-/FontMatrix [0.001 0 0 0.001 0 0] def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 161 /minus put
-def
-/UniqueID 5096651 def
-/FontBBox {-29 -960 1116 775} def
-end
-systemdict begin
-dup /Private
-13 dict dup begin
-/|- {def} def
-/| {put} def
-/BlueValues [-24 -0 683 705] def
-/OtherBlues [-135 -124] def
-/BlueScale 0.04379 def
-/StdHW [40] def
-/StdVW [40] def
-/StemSnapH [40 56] def
-/StemSnapV [40 56] def
-/password 5839 def
-/MinFeature {16 16} def
-/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
-systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
-/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
-/Subrs 5 array
-dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
-dup 1 <1C60D8A8C9C3D06D9E> |
-dup 2 <1C60D8A8C9C202D79A> |
-dup 3 <1C60D8A849> |
-dup 4 <1C60D8A8CC3674F41144B13B77> |
-def
-put
-dup /CharStrings
-2 dict dup begin
-/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB4D11AB8A6B
-5589D8B615C840A4D8FD35DE7CD09D4C55DA8FE732830DDE> |-
-/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
-end put
-end
-dup /FontName get exch definefont pop
-end
-%ADOEndSubsetFont
-/YNDRLL+CMSY10 /BUZAAA+CMSY10 findfont ct_VMDictPut
-/YNDRLL+CMSY10*1
-[161{/.notdef}rp /minus 94{/.notdef}rp]
-YNDRLL+CMSY10 nf
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-106.009 120.739 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-113.758 120.739 mo
-(1)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-106.009 140.738 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-113.758 140.738 mo
-(2)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-106.009 160.738 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-113.758 160.738 mo
-(3)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-106.009 180.738 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-113.758 180.738 mo
-(4)sh
-153.215 113.33 mo
-(1234)
-[27.9999 27.9999 27.9999 0 ]xsh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-93.3403 113.33 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-101.089 113.33 mo
-(1)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-65.3404 113.33 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-73.0894 113.33 mo
-(2)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-37.3406 113.33 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-45.0895 113.33 mo
-(3)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-9.34069 113.33 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-17.0896 113.33 mo
-(4)sh
-.797 lw
-1 lc
-[0 2 ] 1 dsh
-true sadj
-15.705 178.944 mo
-15.705 16.944 li
-43.705 178.944 mo
-43.705 16.944 li
-71.705 178.944 mo
-71.705 16.944 li
-99.705 178.944 mo
-99.705 16.944 li
-127.705 178.944 mo
-127.705 16.944 li
-155.705 178.944 mo
-155.705 16.944 li
-183.705 178.944 mo
-183.705 16.944 li
-211.705 178.944 mo
-211.705 16.944 li
-239.705 178.944 mo
-239.705 16.944 li
-@
-[0 2.8 ] 1.4 dsh
-14.305 177.944 mo
-241.105 177.944 li
-14.305 157.944 mo
-241.105 157.944 li
-14.305 137.944 mo
-241.105 137.944 li
-14.305 117.944 mo
-241.105 117.944 li
-14.305 97.944 mo
-241.105 97.944 li
-14.305 77.944 mo
-241.105 77.944 li
-14.305 57.944 mo
-241.105 57.944 li
-14.305 37.944 mo
-241.105 37.944 li
-14.305 17.944 mo
-241.105 17.944 li
-@
-gsave
-253.705 187.944 mo
-1.70499 187.944 li
-1.70499 7.94397 li
-253.705 7.94397 li
-cp
-clp
-0 lc
-[] 0 dsh
-false sadj
-1.70499 -2737.06 mo
-4.24998 -2552.98 li
-6.79598 -2376.98 li
-9.34098 -2208.89 li
-13.759 -1924.66 18.654 -1640.43 24.614 -1356.22 cv
-27.16 -1238.41 li
-29.705 -1127.06 li
-34.562 -922.47 39.996 -717.87 47.523 -513.361 cv
-50.069 -447.207 li
-52.614 -385.893 li
-55.159 -329.236 li
-57.705 -277.057 li
-61.675 -200.65 66.029 -124.124 72.978 -47.9209 cv
-75.523 -22.0378 li
-78.069 .810059 li
-80.614 20.802 li
-83.159 38.1201 li
-85.705 52.9441 li
-88.25 65.4531 li
-90.796 75.8291 li
-93.341 84.251 li
-95.887 90.9001 li
-98.432 95.957 li
-100.978 99.6001 li
-103.523 102.012 li
-106.069 103.372 li
-108.614 103.861 li
-115.605 104.102 121.972 97.1501 128.978 98.03 cv
-131.523 98.7891 li
-134.069 100.48 li
-136.614 103.282 li
-139.159 107.377 li
-141.705 112.944 li
-144.25 120.164 li
-146.796 129.217 li
-149.341 140.284 li
-151.887 153.545 li
-154.432 169.18 li
-156.978 187.369 li
-159.523 208.293 li
-162.069 232.132 li
-164.614 259.067 li
-167.159 289.277 li
-177.002 416.085 182.398 543.453 187.523 670.524 cv
-190.069 738.33 li
-192.614 811.215 li
-195.159 889.359 li
-197.705 972.942 li
-206.34 1268.27 212.532 1563.68 218.069 1859.07 cv
-220.614 1999.72 li
-223.159 2147.62 li
-232.552 2709.84 239.689 3272.1 246.069 3834.36 cv
-248.614 4064.6 li
-251.159 4304.06 li
-253.705 4552.94 li
-@
-grestore
-%ADOBeginSubsetFont: GISAAA+CMBX10 AddGlyphs
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-systemdict begin
-YNDRLK+CMBX10 dup
-/Private get dup rcheck
-{begin true}{pop false}ifelse exch
-/CharStrings get begin
-systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
-/A <1C60D8A8C9B08A941DDBC3AF1C109AC61AF06DEF14497758E2577FC09808
-E2F83FED36FAC5C5DF9845F9151204EBE19A62A093C0C714296A8AEB5EA72983
-7304C560208E23A9B00E450B7895C64B840FF7B8D2624ED826E8D6D1CB5BC276
-3958AE415A241BD617EA928FD9818043D58C39BCDA5256A3F17DFF2FADD0CDFE
-4A5999053732F0E5CE29974C519106> |-
-/W <1C60D8A8C9B08A949EE89938EFD2B089915D4CA87E50351E8DD3F3914A85
-384965AB9720D1BDB02951199DD63BE938B296E11B8132C78ABED307E15E2C96
-04E0EEA5C8FB1D25F45078482232C4120E0C6D7ECC100B9CF59823239764E960
-AC203F05154297337EBEC8D426CABE71C6D1BABE3D2EE87EB4EC26DC5A175D2E
-1776DC7CB846E1C76A588A844BC3111554540D100610F9152C35EB0670475763
-7F97762997D01BB6BF9BF94F9DBF981A5DB94B101F849599A265> |-
-/a <1C60D8A8C9B08A95C60527548E754D765DB4EDA6BA0D2CC6D8A620394D95
-5731400D0093175DD4FDCB6F936DAB2E93BD9C1B54BF99F619E92F88F8093B57
-6575F38778E5971C238BB03705C8902A6FCFED1FF202619A2D8A4C3FD818942E
-E7E0400EE37C1268C755A54355454E010823DC11303C9CDCFFF1370DF47DDE8E
-0505D81ACB493683AAFD9A5B8B94F66FF9ECA66884B26F31C72D900D51753830
-4DA83D95E97AC104F2FDC53254E575E01E9C7E8025E9> |-
-/e <1C60D8A8C9B08A95D1DE8AA71D3914AC9DDC5BFDDE55301EE17DAE184B08
-E53C36FBF9A44FDF3309DBE08895DBFECCF103737D7326528346FD01CD1D9FC3
-874638E8C50ADE3B494897353EB3188B512405DD1BA5DA59E8C179230F7C8D15
-AFCEA2228DAC03C77D614B36A41126CE831B41CDF160A67B175BB36C52353A72
-5460F4256C> |-
-/k <1C60D8A8C9B08A95F1118A977C6242CC6F5E327BF4A2BCE6E631EAC27F33
-5285F637895192724CE2C53641A392411149B8A3F127ECD7DEB11923D35A35EC
-238223B6B1C9CF9675A0C83B3A0C95C18823DF1B6F368BBFEEE7185E77AE9040
-378C34B27A11D9EE3C9721E2EAFF82B925C0F3ABE698646F0C4A57CEC100EA29
-86134B063D8450710541B66D42FC62B89A6AB4B6D6C05FC0E5F8EF9F1253768A
-DA78BF283C77228ACE6FD83E9384> |-
-/o <1C60D8A8C9B7FCB6A15C803B3B972EE31F5A721ABF9B8490D1BCABFAF507
-3D6D0835AA64493F9EC5B8BAE86BFF5C8028599ED438B3807899BF98EB3DF2EE
-9BBE5DC52FDB77ACA45EA052A40521B13F529CBBBB8B40F192297C658BE1CF97
-9B5618AA4355B6A77C9FC09641> |-
-/r <1C60D8A8C9B08A95A5BEE1199161ADD44E1E8B27A5C75D09130CF9546F37
-4B2A22381A06BD734F2C4BF093B03F9AF2D0D4C8BE8AA6899632B1BDCEA5F8FA
-27D0647BB27FC7927912A6761C3F8A51172D73B92082F06EFA277243DBD96EE1
-6421DB7B86390678EAD31E9D8E521BD186BAE7A8A68851384DC5E4933D7D1C5E
-E5A527356EDB77> |-
-systemdict /gcheck known {setglobal} if end {end} if
-end
-YNDRLK+CMBX10 /Encoding get
-dup 65 /A put
-dup 87 /W put
-dup 97 /a put
-dup 101 /e put
-dup 107 /k put
-dup 111 /o put
-dup 114 /r put
-pop
-%ADOEndSubsetFont
-/YNDRLK+CMBX10*1
-[46{/.notdef}rp /period 9{/.notdef}rp /eight 8{/.notdef}rp /A 21{/.notdef}rp /W
-9{/.notdef}rp /a 3{/.notdef}rp /e 5{/.notdef}rp /k 3{/.notdef}rp /o
-2{/.notdef}rp /r 141{/.notdef}rp]
-YNDRLK+CMBX10 nf
-YNDRLK+CMBX10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-324.775 14.8624 mo
-(WorkArea)
-[10.8911 5.72845 4.72226 9.86591 8.65753 4.72226 5.25021 0 ]xsh
-%ADOBeginSubsetFont: BUZAAA+CMSY10 AddGlyphs
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-systemdict begin
-YNDRLL+CMSY10 dup
-/Private get dup rcheck
-{begin true}{pop false}ifelse exch
-/CharStrings get begin
-systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
-/bullet <1C60D8A8C9B7A73D8D0B3FCDAA7E46FB68E7B1A6E412E25369E4ABB
-A70D277941C6A488EED866AD61E359C443EB0FEA5> |-
-systemdict /gcheck known {setglobal} if end {end} if
-end
-YNDRLL+CMSY10 /Encoding get
-dup 178 /bullet put
-pop
-%ADOEndSubsetFont
-/YNDRLL+CMSY10*1
-[161{/.notdef}rp /minus 16{/.notdef}rp /bullet 77{/.notdef}rp]
-YNDRLL+CMSY10 nf
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-283.593 34.7875 mo
-(\262)sh
-%ADOBeginSubsetFont: GLAAAA+CMR10 AddGlyphs
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-systemdict begin
-YNDRLJ+CMR10 dup
-/Private get dup rcheck
-{begin true}{pop false}ifelse exch
-/CharStrings get begin
-systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
-/parenleft <1C60D8A8C9B08A958B2129D6E9761120E2D623F206A8BB61D8ED
-90A20EE239C62172B553BFF416342D6CD99C95C515CA225C40039DBAF08CE4F0
-55B08F39C15D29C99EF3EDD066CCCEF8932365A3BB1620FA5F0BCE8AF21A5BDE
-C0FFD55FA45F247FC811007CB408F0DCDD3AE01E3246> |-
-/parenright <1C60D8A8C9B08A958B2129D6E9761120E2D623F206A8A207F03
-DEA8F466C0D4F860EDF515D421F89285FC2D8EC76F5E903EDE1B5CFFAEC5DEA9
-22C7FC4A51953A99A5FB1F96793348D816F60492670058F4DEA6D328AB20FBAD
-B3C1B57A79D8CCD13A3C6D068BAD5F09F347ED0C895> |-
-/hyphen <1C60D8A8C9B08A959E2F69652E8B76AC2AC5B4F1FA8662A86AEED57
-846929C2FBC07360B> |-
-/colon <1C60D8A8C9B08A95708109816759149241680C741B6923EBD56E6248
-E5269499A7D548A5AC3ECB516C4A5048666940A11AD8CB54F4BA847274447EEB
-614F54B956BBCFCAD8E88A403FBD4464DA283ACB> |-
-/semicolon <1C60D8A8C9B08A9570810981675918D0BCF1CD202F5F8524F1CF
-461D4270459E44DB560BC854C3F48DFD92347C27A6AAF0E2B1A04AFEB82D8D46
-6FB78A9BF2E74CE09AE4A8F352791B5C7110FA6307B2916ECC9F5904CC094CEE
-59D67B4016AFD5BCFCA64E9EC736BD726D1A09B76CECE761EBE5219FDE764D2A
-9C6D289DBA39E76263> |-
-/equal <1C60D8A8C9B08A946182837629008D945C50B3BD77B79680F3B07BDA
-6301D2521ADF665EADEA779B8650AC6CDB556621631497A3BE00C67036F6EB06
-05A36A2C0EE306396247E4A79F8EFAE500D78B59605F041F11> |-
-/b <1C60D8A8C9B08A95C5897169EED96641DA8B10CA087E6B7A5588052BABB7
-BC0836B12A49068694BF7254A2B820A876E020738250AC32ED44C3A7F2C5F700
-C2D03E307AFB7135F6415FEEB6D856569E9D5429B4DD3F524606607A7502F4FA
-00BE0184FC677554B2B6367E60A281A4837A2231515AF09B33399B7D5C3D2E8F
-3A2971F2933C4A4CAAA727A80DBDC9692BD6B38D543D422C14068650D2C61B6B
-E587855459543E451B14A31F96D9B341DFF415> |-
-/d <1C60D8A8C9B08A95C5897169EED96D33CB6A9013DDE3D04C2845E595598F
-3E2E6D79295DF7CC9B6C00D2CF2AC2502697856E5474C945441376692CB09ED9
-25CE9D4F710C7DE089B5E658450CEECC611DD1F25787624443E710373775DB0D
-7A6478B3FD4F82DF4FC109429D4EADCED1BD77A35BF25A1C1E584B0EB23CE621
-6847A21EE88B35D72221C7F9F0705E61C9F9C0A224456A04D3E81DE0BD98422F
-FA8C7335713899937F5FFEC7771BB8FDAEE53DE3E6> |-
-/h <1C60D8A8C9B08A95C5897169EED9664BED359D179BDDBB0B44F78A354068
-F188259C421AB0565D2C93368C7FE6E0A9F40BB196D1F23D06A9B4099431512B
-C136412B8071F881A48FA8A97D03ACD06EBB8221F2FCB171D9A905549A8F7881
-2735FA48F2EC00ACCEB309920B412B3F60D0173EF224E4CB3F5C1DAD9CC6147F
-9ADED8EC6C9533B7B1AABCF5D1E9B7F36A2D4B8D2B26EAE8EA> |-
-/i <1C60D8A8C9B08A9570810981675968AD25F24D2B3EAE33A4AEDADBE9B65D
-A53E9F2E54B16133284CA9914BED3880C793207FBDC7926300AD07E6E54407B5
-1EA082FB5EE3816A6A23A8296A947037E4E873086619D7E86B5A60AFA576E554
-D14C9B74D403098ADE85F71880A3E75D7FC1> |-
-/k <1C60D8A8C9B08A95D222871B45C8170346D4B3692EE324314ECB68C750E8
-0C39C0E118E6175CCD69769E2118B02E8AEF864A1ADB8D0BF5A5FFDD4A9B9B6C
-C867F43FFF5A7BBEB959851C5A4053DF1F3B8EBF64DEEC6B682D7055139D4103
-B0A63AD1D8193F253FA365D16CC3EC1AC7C7AEA533CCF6F8272FF6B8CD1FC7B4
-0DE006133FBB2B23E8E1776C461B4D8ABE09C8DE32B25BAD44EC36CACD378C29
-9496103B1CB809290EFAF69E7582E8754F6B25D7A0FD> |-
-/l <1C60D8A8C9B08A9570810981675968AD25F317189905083B97CD6CD1B880
-05B79B666989E13C0F8D0889AD0162C7E87274D188EBBD1A911FDD0B6E360AA1
-C515725198B9106B157680FC> |-
-/n <1C60D8A8C9B08A95C5897169EED9664BED359D179BD38846B55E34D4CAA6
-E85E9CF3F20D5FF6B35F1C9AAE2A542B7B24E087B6004A4C7219997095CC0DD0
-7A15DB83B5FEAD13F209441FFD364AD3DBF6E16129F3599BACA005A523490ABC
-41E4DF320ACE384037EE1D352E3FAD8A9E2CECBD75A999F7B655F4FFBFAC6FFF
-84029A8DF710DBB0D7CD4C1D20367E79BC4E3121199FA9593C876B29EA793F10
-2A1E36BE8056D0377A> |-
-/p <1C60D8A8C9B08A95C5897169EED91609D9E4D5F91353B4B61FEC4EAC5FAD
-7B5032144CF9ADF0F974C4F1789F7935ECC14F06F084A964A5CA17285CA0C9EC
-1B8F57A0E66AEAF75BA11AE734E6416585ED4DB12A3372EA2BA1BABC0DE7BE87
-584CD6EA8819CE99CB18F04E8ECD619D7E02CDE60A0AA18597DE62AF13ABCC5A
-5F1D59EBFBBEF560144EF0DCE1B387B4BC40F158468D6A4DE477659B50190482
-6F081FC4942E5187D9F03F6D1BD471F55D6300> |-
-/r <1C60D8A8C9B08A9584DCB847BA986212E50A0E258C2648145E7BCFAC2BA8
-6C36E84B654FABD35F6BE558D4B54676EA44C57F6EF668BC4866822048422FD6
-D8B608EB2C1C67EC3EE3CEBDD94E9A9214F99F9DA8EE2F6900EB47053AC763EE
-DABCA0360701D8CB383B9ECCD7B848D18CFB88761A167471DE407F7BED4BC50B
-779C4D57BF133C3E4777AA4605171C6D> |-
-/s <1C60D8A8C9B08A9586D4F7B21AA9B0967A13D9D7A42FE5E3505E2F3EE7CA
-FF99F258F00E5A08E889C3CC5D8ACF7164CD2AC0013AEF91C534D4ACEB36DB05
-CE0E820904C7EB6E6797C2D5FB5E96476FD3694427C3F770022BFE939EC57571
-FAC1F965E0A7F32B36C86522DA3AFB3A309E4B5D72F0E56F1BEB5C7254CECC22
-9B1219F95DA80187F2FFAF15E03AF5B396BE650B53989F1A64B4AA9655D1019B
-496166D38FC8961ACDA2D0B1533422796A114C02DCAA98A8558155EE2C970442
-944A032E8A6A4004C15A48F9176AE45E44068C23BC> |-
-/t <1C60D8A8C9B08A958B2129D6E9766AD6B3247B9CBDFB0724765D43ED23A7
-B2BC7B24077C209594776C48799589E3DF7269407A6893D4C106057122D99E3F
-649ACAFBE1812EEAA6C4DCDDD716BEB7694626BFFCAE715C15EF0FD8CE9F6FE4
-E96B03> |-
-/u <1C60D8A8C9B08A95C5897169EED96D33CB6A8CCD6F539BADC574F30FA019
-2FAAA0351E8C93175F4B6BE4D2DCA8A13E4F01BEC5788441B5C71C1247369B6B
-73137454B1C207EA4F43D533FE87512BAD8DD4F3DBBECD9A7A1CE3F33A4D3F31
-6952FDB339B4B6A937009D6EC9821D8553981B7D8AABC3E750369071> |-
-/v <1C60D8A8C9B08A95D222871B45C81C126204E8A3F3EFC2EBF937B1E5F2B8
-737EDCCFF78DB8693FA0E7B559CFAC0A233112105FC1A8807ADD3013D4AE86C4
-38318F1223CADD606642DF7E9A8EE9BE743E975DA759D856D52F7E927FE33606
-3979ED38AB2E1EA4CB4F371A1EB04E6C5B864C9DB5271435AB2DE7D9DE15A6B1
-D9E3FD555F015DADE467> |-
-systemdict /gcheck known {setglobal} if end {end} if
-end
-YNDRLJ+CMR10 /Encoding get
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 45 /hyphen put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 61 /equal put
-dup 98 /b put
-dup 100 /d put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 110 /n put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-pop
-%ADOEndSubsetFont
-/YNDRLJ+CMR10*1
-[40{/.notdef}rp /parenleft /parenright 3{/.notdef}rp /hyphen /.notdef /slash /zero
-/one /two /three /four /five 4{/.notdef}rp /colon /semicolon
-/.notdef /equal 3{/.notdef}rp /A /.notdef /C 5{/.notdef}rp /I
-2{/.notdef}rp /L /M /N /O /P 2{/.notdef}rp /S
-/T /U 11{/.notdef}rp /a /b /.notdef /d /e
-/f /g /h /i /.notdef /k /l /.notdef
-/n /o /p /.notdef /r /s /t /u
-/v 4{/.notdef}rp /endash 132{/.notdef}rp]
-YNDRLJ+CMR10 nf
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-293.556 34.7875 mo
-(Theend-behaviorislike)
-[7.19299 5.53922 7.24979 4.4234 5.53918 5.53922 3.31747 5.81616 4.4234 5.53918 4.70435 5.26025
-2.76959 4.98129 6.73172 2.76962 6.75162 2.76959 2.76962 4.98328 0 ]xsh
-%ADOBeginSubsetFont: WRBBAA+CMMI10 Initial
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-13 dict dup begin
-/FontType 1 def
-/FontName /WRBBAA+CMMI10 def
-/FontInfo 8 dict dup begin
-/Notice (Copyright (c) 1988 - 1996 Blue Sky Research and Y&Y, Inc. (978) 371-3286) def
-/Weight (Medium) def
-/ItalicAngle -14.04 def
-/BaseFontName (CMMI10) def
-/WasEmbedded true def
-end def
-/PaintType 0 def
-/FontMatrix [0.001 0 0 0.001 0 0] def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 120 /x put
-dup 121 /y put
-def
-/UniqueID 5087385 def
-/FontBBox {-32 -250 1048 750} def
-end
-systemdict begin
-dup /Private
-12 dict dup begin
-/|- {def} def
-/| {put} def
-/BlueValues [-22 -0 683 705 431 442 453 466] def
-/OtherBlues [-205 -194] def
-/BlueScale 0.04379 def
-/StdHW [31] def
-/StdVW [72] def
-/StemSnapH [25 31] def
-/password 5839 def
-/MinFeature {16 16} def
-/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
-systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
-/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
-/Subrs 5 array
-dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
-dup 1 <1C60D8A8C9C3D06D9E> |
-dup 2 <1C60D8A8C9C202D79A> |
-dup 3 <1C60D8A849> |
-dup 4 <1C60D8A8CC3674F41144B13B77> |
-def
-put
-dup /CharStrings
-3 dict dup begin
-/x <1C60D8A8C9B08A95C3B1459DC8650F9F96183FC46268F5BDA744B05C84F8
-C7E5FE6BFCA9D4C8BD3488080E8FC96F34EA177DCAE190D27F37102D2F45514A
-ECF6E4A3B2E6F401810D0AF13E4BDFDB8118476E04C9DD93F8884F46C9ABEE13
-C8E7992449902F6BC3D518B2A70293976C8BCE67ED913D975C52E884BF7F46CE
-8DF8170D79262260A6CB5A6A088C0A964E0271DA63944ABA9C96D1AA58CB590F
-97DC9C8372606676C2CA18B1A9303EBF11B510FAB8A33E9B530D274E48DD09EE
-8829EC16181BBC16C4E81343ACB5386F22A9C0CA2C23959102E833> |-
-/y <1C60D8A8C9B08A95A3A690DEE11C2ACFF7516D4A7CDA884FB3B130648C63
-2F41B68B5E071E6BAD692658125A4CE9A4427A55054BF5DABFF855AF9D186215
-1F50AD5D2EE36E064C9718B8694EF83525324184D7DD07A10B9FD203C707D849
-3E926469CD1C36E94D5785557A2D95B556774E51CEFBAE2CC8AB735FFF293AFE
-FA32B8D1FD5C52EC860AA6EC20816B24BD1EB69FE8581708322D6F09A08B3182
-91EF57EAE554A00C60D585B786E53371A6D3FB2D8729C3F2C51DB65ABF8CA421
-EEB103AED2CB924D829D66429CF6664CDEAFEEC4AD07C95E7FE8BCAB5D2A1AD6
-731779D5> |-
-/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
-end put
-end
-dup /FontName get exch definefont pop
-end
-%ADOEndSubsetFont
-/YNDRLM+CMMI10 /WRBBAA+CMMI10 findfont ct_VMDictPut
-/YNDRLM+CMMI10*1
-[120{/.notdef}rp /x /y 134{/.notdef}rp]
-YNDRLM+CMMI10 nf
-YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-399.866 34.7875 mo
-(y)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-407.875 34.7875 mo
-(=)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-418.391 34.7875 mo
-(\241)sh
-YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-426.14 34.7875 mo
-(x)sh
-%ADOBeginSubsetFont: KEDBAA+CMR7 Initial
-%ADOt1write: (1.0.24)
-%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
-13 dict dup begin
-/FontType 1 def
-/FontName /KEDBAA+CMR7 def
-/FontInfo 8 dict dup begin
-/Notice (Copyright (c) 1988 - 1992 Blue Sky Research and Y&Y, Inc. http://www.YandY.com) def
-/Weight (Medium) def
-/ItalicAngle 0 def
-/BaseFontName (CMR7) def
-/WasEmbedded true def
-end def
-/PaintType 0 def
-/FontMatrix [0.001 0 0 0.001 0 0] def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 51 /three put
-def
-/UniqueID 5000790 def
-/FontBBox {-286 -250 1122 967} def
-end
-systemdict begin
-dup /Private
-13 dict dup begin
-/|- {def} def
-/| {put} def
-/BlueValues [-20 -0 683 703 431 446 664 674] def
-/OtherBlues [-205 -194] def
-/BlueScale 0.04379 def
-/StdHW [36] def
-/StdVW [79] def
-/StemSnapH [28 36] def
-/StemSnapV [79 95] def
-/password 5839 def
-/MinFeature {16 16} def
-/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
-systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
-/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
-/Subrs 5 array
-dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
-dup 1 <1C60D8A8C9C3D06D9E> |
-dup 2 <1C60D8A8C9C202D79A> |
-dup 3 <1C60D8A849> |
-dup 4 <1C60D8A8CC3674F41144B13B77> |
-def
-put
-dup /CharStrings
-2 dict dup begin
-/three <1C60D8A8C9B08A95C25148D4A67F69EFB9DDFA5ECA5AE37566D87066
-172F8CABE2B2CB84CA762EB5E603C8A9A699CCCFA6A0578E3DA76E6C9E7B5A84
-45F01D818A380DD4AC46AFDB5422B8800FEF2E8AFDA86EDD8199C34D64992E4F
-43992CF1D54B07E3F575480A9A0B868375A4E2A9893BE0AEBB713690AB6C5B93
-E6D8D619357F90F56F58A8525CC0A1BD91DA9365507B440F549B60D4E7E5CBB3
-769D4C82F061F9E20A25AD23418551374D804A6B25C8CE003D> |-
-/.notdef <1C60D8A8C9B08A958AA685092D4752> |-
-end put
-end
-dup /FontName get exch definefont pop
-end
-%ADOEndSubsetFont
-/YNDRLN+CMR7 /KEDBAA+CMR7 findfont ct_VMDictPut
-/YNDRLN+CMR7*1
-[51{/.notdef}rp /three 204{/.notdef}rp]
-YNDRLN+CMR7 nf
-YNDRLN+CMR7*1 [6.9738 0 0 -6.9738 0 0 ]msf
-431.835 30.6743 mo
-(3)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-283.593 54.713 mo
-(\262)sh
-YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-293.556 54.713 mo
-(x)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-299.25 54.713 mo
-(-int:)
-[3.31747 2.76959 5.26224 3.87555 0 ]xsh
-YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-325.685 54.713 mo
-(x)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-337.496 54.713 mo
-(=0\(even\);)
-[13.868 10.3123 3.87552 4.4234 4.98328 4.4234 5.53922 3.87552 0 ]xsh
-YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-397.897 54.713 mo
-(x)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-409.708 54.713 mo
-(=)sh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-423.574 54.713 mo
-(\241)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-431.323 54.713 mo
-(1)sh
-293.557 66.6682 mo
-(\(odd\))
-[3.87552 5.25827 5.53922 5.53918 0 ]xsh
-YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-283.594 86.5933 mo
-(\262)sh
-YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-293.557 86.5933 mo
-(y)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-298.799 86.5933 mo
-(-int:)
-[3.31747 2.76959 5.26224 3.87555 0 ]xsh
-YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-321.623 86.5933 mo
-(y)sh
-YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
-329.971 86.5933 mo
-(=0\(passesthroughori-)
-[10.8572 8.50607 3.87552 5.53922 4.98129 3.92523 3.92523 4.4234 7.45001 3.87552 5.53922 3.9053
-4.98129 5.53922 4.98129 9.06396 4.98132 3.90533 2.76959 0 ]xsh
-293.557 98.5485 mo
-(gin\))
-[4.98129 2.76962 5.53918 0 ]xsh
-grestore
-grestore
-pgrs
-%%PageTrailer
-[
-[/CSA [/0 ]]
-[/CSD [/0 ]]
-] del_res
-/YNDRLM+CMMI10*1 uf
-/YNDRLM+CMMI10 uf
-/WRBBAA+CMMI10 uf
-/YNDRLN+CMR7*1 uf
-/YNDRLN+CMR7 uf
-/KEDBAA+CMR7 uf
-/YNDRLJ+CMR10*1 uf
-/YNDRLJ+CMR10 uf
-/GLAAAA+CMR10 uf
-/YNDRLL+CMSY10*1 uf
-/YNDRLL+CMSY10 uf
-/BUZAAA+CMSY10 uf
-/YNDRLK+CMBX10*1 uf
-/YNDRLK+CMBX10 uf
-/GISAAA+CMBX10 uf
-Adobe_AGM_Image/pt gx
-Adobe_CoolType_Core/pt get exec
-Adobe_AGM_Core/restore_mysetup gx
-Adobe_AGM_Core/pt gx
-currentdict Adobe_AGM_Utils eq {end} if
-%%Trailer
-Adobe_AGM_Utils begin
-[/EMC pdfmark_5
-currentdict Adobe_AGM_Utils eq {end} if
-Adobe_AGM_Image/dt get exec
-Adobe_CoolType_Core/dt get exec
-Adobe_AGM_Core/dt get exec
-%%Pages: 1
-%%DocumentNeededResources:
-%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0
-%%+ procset Adobe_CoolType_Utility_T42 1.0 0
-%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
-%%+ procset Adobe_CoolType_Core 2.31 0
-%%+ procset Adobe_AGM_Core 2.0 0
-%%+ procset Adobe_AGM_Utils 1.0 0
-%%DocumentNeededFeatures:
-%%DocumentSuppliedFeatures:
-%%DocumentCustomColors:
-%%CMYKCustomColor:
-%%RGBCustomColor:
-%%EOF
+<?xpacket end='w'?>
+
+
+% &end XMP packet& %
+
+[{Doc_Metadata} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark_5
+[/Document 1 dict begin /Metadata {Doc_Metadata} def currentdict end /BDC pdfmark_5
+[/NamespacePop pdfmark_5
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndSetup
+%%Page: 1 1
+%%EndPageComments
+%%BeginPageSetup
+Adobe_AGM_Utils begin
+Adobe_AGM_Core/ps gx
+Adobe_AGM_Core/capture_mysetup gx
+Adobe_AGM_Utils/capture_cpd gx
+Adobe_CoolType_Core/ps get exec
+Adobe_AGM_Image/ps gx
+%%EndPageSetup
+1 -1 scale 0 -194.951 translate
+pgsv
+[1 0 0 1 0 0 ]ct
+gsave
+np
+gsave
+-7.62939e-6 0 mo
+-7.62939e-6 194.951 li
+256.793 194.951 li
+256.793 0 li
+cp
+clp
+false sop
+/0
+<<
+/Name (Black)
+/0
+[/DeviceCMYK] /CSA add_res
+/CSA /0 get_csa_by_name
+/MappedCSA /0 /CSA get_res
+/TintMethod /Subtractive
+/TintProc null
+/NComponents 4
+/Components [ 0 0 0 1 ]
+>>
+/CSD add_res
+1 /0 /CSD get_res sepcs
+1 sep
+%ADOBeginSubsetFont: GLAAAA+CMR10 Initial
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+13 dict dup begin
+/FontType 1 def
+/FontName /GLAAAA+CMR10 def
+/FontInfo 8 dict dup begin
+/Notice (Copyright (c) 1988 - 1994 Blue Sky Research and Y&Y, Inc. http://www.YandY.com) def
+/Weight (Medium) def
+/ItalicAngle 0 def
+/BaseFontName (CMR10) def
+/WasEmbedded true def
+end def
+/PaintType 0 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 51 /three put
+dup 53 /five put
+dup 65 /A put
+dup 67 /C put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 97 /a put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 111 /o put
+dup 123 /endash put
+def
+/UniqueID 5000793 def
+/FontBBox {-40 -250 1009 969} def
+end
+systemdict begin
+dup /Private
+13 dict dup begin
+/|- {def} def
+/| {put} def
+/BlueValues [-22 -0 683 705 431 448 666 677] def
+/OtherBlues [-206 -194] def
+/BlueScale 0.04379 def
+/StdHW [31] def
+/StdVW [69] def
+/StemSnapH [22 31] def
+/StemSnapV [69 89] def
+/password 5839 def
+/MinFeature {16 16} def
+/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
+systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
+/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
+/Subrs 5 array
+dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
+dup 1 <1C60D8A8C9C3D06D9E> |
+dup 2 <1C60D8A8C9C202D79A> |
+dup 3 <1C60D8A849> |
+dup 4 <1C60D8A8CC3674F41144B13B77> |
+def
+put
+dup /CharStrings
+23 dict dup begin
+/slash <1C60D8A8C9B7A73DB56225352A24C6E389DE2B55CA06CAB1D904D74F
+E21B6520E910DE6837DBFFB95567192F781E541A03B8446689265DEAE7140ED2
+3D1C3943714CDFC12315> |-
+/zero <1C60D8A8C9B7A73D3B2D32309B1F5D5A32FC3614834F8BC61B6EB92C1
+2484BD76628737DA40CF9DA1C97CCDAFB1D1B732C642F74A7C41B7D3AC6DAF8D
+1E760692B6EBD2417EF1893A4AA0B1CF049D4C54D830CEC073A9153D451FAD42
+892B0930AEE4FE18588336BFDAD60D8A4F4CFFED76F103FB9BBD8A33EFBA3F18
+232B88D88FE54E17260FA3E2CC29DEC0CB72B88DC816FF5> |-
+/one <1C60D8A8C9B7A73DC579B9CE13A4EA8C203AFC890ABD6F58341B006CF1
+BDD8FED3A7238E01F751FEAC75885229C293891E5636AD630D9C884528B6FEF0
+0728A740ED77D054B4743ECA5E3947520FEF6B23D548765D11> |-
+/three <1C60D8A8C9B7A73D3B2B97DEB4C7BDB68E0D63865C8BF294429AD1BA
+AE59A25299F9306A9E28AA5C0C0AF9F97F56096DB0FD0EC440ACCE834B0BA539
+2FD94D026768A961AA5D1A88FAE30F2B2033E77AFAB55B0B9C8092CD226DD9EF
+EEAAF5CD5AE79D6DDEC4C37DC43DE3B85DD2A2EC4DC0C9F349D5E8F9F615782E
+DC8C53805553FD3C0007C1818BF3D99AB659A079ED36132BBDC613CA63D7A0FE
+429706DBC6BA998CE56A89C002758EF37F90A390F83B3DFE49D312FA66FDF2F1
+6212D1503559B35FC2DB8BD5A49535> |-
+/five <1C60D8A8C9B7A73D3B2B97F19D54A2E00E7DDA8E72064220CB7581D13
+CEDF071F346430E40993A6297E3A2A6D6093205222D977AC7F7B65CC82B221D9
+B18ADEA5D4AF0261ABF060D3E283C7B3B5EB39FF499721FD51203AE59E3BEA25
+7DFD3E472FEF67221488EC8D1F355E2FAD057CA44A8B4BAD6C6C719C164907CB
+F9A6CC770DB0C7E58A37D2385E23F576BCFF94FFBFD8ADD4C5E6C32CD83ACEB7
+7472D00FE1A4DC66393A99AC6BBD252B04C98B710149EA42B66ACE89D4FC4393
+F3A09165DF477ABCB0E8A8DB21E4278CA219EBCC9B067F92619913BDBD1EF3C9
+A> |-
+/A <1C60D8A8C9B08A9501CDAE1251A61DF6E2312CA41635F6CE1D00B63E171C
+70F84D42F62A21A6DD37D84C279E3FAE908D39B730ACD671ED9E277ACFE833A1
+1F48F076C9803DC08258033731BCBCE19DF3B81C1C298B382A15FAC94387A992
+AD9631716A7ED4F711137D6C851AE1C8DCBBFBCF7274E882226E58958CE6283A
+197E7FAE3A2D0F6C24FA411BECFB36A10FF2A923EA89ABEFAD5AB23D600F> |-
+/C <1C60D8A8C9B08A9454CA4C75C5C983901A105955FD02AB95A1C2D2A205D6
+C9A19566388580DAF81E45849DB37660797B67B5A88B6906602915C5F5C9B0EC
+D18BF9F52BC4BC58CA3DC88745B8BAABAD3D92E461BFB415E7240305CDDA1D0D
+B5D35FEBC75FFD4C053E78B6CA772ACEB0C2FF98C08B672F492F305E0C5F3841
+918729B4AEB78A65C2A83364408240D8D653DA56F4DCB028D3D78F3C2D6BC7> |-
+/I <1C60D8A8C9B08A9591900960B3FA4612DFF926AB21A530E1912F33677612
+AC06B324D812E42049FF4946BE5E0FFA24FA0C62F2839FF2110EEC7EE0A42476
+46E6F699D4C8BECE1825B3A661611E4D55F40F2E64FACB836D4D0C9780F60650
+FBF10E0D42> |-
+/L <1C60D8A8C9B08A9504870DC577BFF1117CB147078FC0444648398262998D
+8061E386D366188391878ADBE16C10A3B1BC6A93F56BD64AE45F8370470F419D
+A43CBACE3D7B1152502CD0CF1468D72D3CB197A29E71D336CDA7D6BAA426EC1B
+681825BDDC37329099DC579F155C> |-
+/M <1C60D8A8C9B08A94284A0D047609A407E661A852E250B140B4157477FB2A
+AE2E22210B2D780B692B0718211E5BD86C3DCF8087849BEE2B9F6D1D8621E40C
+8FBE892AC1B23002BF18819E26C6741335DF8DA8AC82506D7051C0505D48DDFA
+17EE84A06E07C05EBAC6174D600BACE071866247BE6C83F4CF28F6D6EE6A6CF8
+A788C4FFFDBDCA978C2B0B201753D21CB7AF0542C690ECE8E7EDBE1B1FB29939
+734E35E0ECCA8BA7FAEB58AC205A8A82A94C960A65> |-
+/N <1C60D8A8C9B08A9501CDAE1251A61DF6E23FBE9059A2A88492E84D61402E
+80BD80B5057FF8914FA4679EB3900C60B246DA77BF837041B1C053FCD543E3D1
+D259FCE953A74E40366D604A99F9233772AC97F872D505329B1446640ABD99E4
+AC723C39DD6EA376A043CE3633F04D9BC6DEFE2E1A831DBB9C16F90A966DFA0F
+3802BB1EB0AA3DAEB0E864B9D3CC3E14AE1E9219B48660289CF348B4E280> |-
+/O <1C60D8A8C9B08A946182837629000F56F09862ED5AA400F2B4EB929FCD0B
+6F40CAF45238A67BE496742823610F15AF19832E8EC09C64557C48DB0BC41E07
+C1B98081893CB2216BAE4CCECC72A02E2F6B8D0FE8B2E6548D00AAA585F02486
+772A4FC1258C2982A5ECEC> |-
+/P <1C60D8A8C9B08A94478101EE5603CAF9EA65868978F157B7D9DB71203FAD
+46B85DF1A1E477012038D20B3756C0124AD7E2F6ACCB98150AB793091E3E7A8F
+3C0AE6FC8D7A5031BB678671889D46F3A15BD495F1AB5B7C8F63325E15B44523
+174D09593A38714FEB5177883F725186FE6BF7095A24CD9EDEFA3551580A0E2B
+0B49AC2002> |-
+/S <1C60D8A8C9B08A95C5897169EED99899F86A6DCF3CD291B001131D3BCB45
+BF71748507542417352D5B30F63C60EB90DCF55005F88E95175B21D3219CD9E9
+2E89E417B177D285600845553F66626D2225552D23A7697637BDCEEECAEA18AB
+42A896E96FF5B3536CC368A5F7504B6C75D962A4B5F9534F79AC78DC99848461
+42257A40DE257430C92806EBA73FF7D93DF0A6C207299E2D17F4071F9096D016
+163F4D3EC1889ADA266D3682F2D99904573A5022A10E61069737F2D55F919F95
+A33DB6DD2667321E4727855B58DBF4B1E5A294928E6CEABFBD34F296C1B758> |-
+/T <1C60D8A8C9B08A9454CA4C75C5C97DCE7AB32777FAAECD12647866E7CB3F
+CCDC541E37F2225E520DEDE695980D4012AD5B972BDABC7E7E5410E71AC63692
+4E778B3131B6C4D1E76F8C4592AC311A2107F53DC1850538C9E487E6D5DBDFE8
+027D7126BA9ED8B24E7379B57E474ACD298BF6B3700CC970D80111DD98EFC872
+C24D0DA3C75DDDFD177C6D15> |-
+/U <1C60D8A8C9B08A9501CDAE1251A6E3AF1199B24D30F25809B39A0DD6474A
+CF1BFDB89F5985BBB0F2E5FE7296314FDA462BECDBDEA31B3750001975D37A8B
+F31F224CAB5093B8997B856DAE5F9007E1497BEED45CA8AC033A65F773653762
+77BFCDF39A2D8F1BC8E5626BEEEF5D670E87E32F25C0530E88A4E2B9AD6D8333
+3A6C173F8B22714E74A224AD610C2B1EAB> |-
+/a <1C60D8A8C9B7A73DCB03313BCF7AD8C8EE234E5372D46A65E92A78F4B7E0
+2ECC58F71EE6C027AD4D56C5E4DE1AF1031295DC17C0E7AC8D8358634F9A19B0
+2A110E5539C10136C68E0D2CBEA6658A501D9D73323861F8C29EB92F9080ACC3
+E236C5F14389534682EC2925F59CD4A215569A7BD7B9F7827A30BA75EB840535
+B2A2C8F92AD166CE93D277314A4C690C47DB847F73BFE1049631CDDB9124FD76
+2753AA8DB187C216AFB74F76299B3C51610D74CF31321BBFEB5CFCA7D213C896
+D1B8E57EFC05695F2F73> |-
+/e <1C60D8A8C9B08A95B1F07368C45D8D2AF4BC97E4CB216B20786BB8409E5C
+B0892E60E7F0AD9AC8433678C58AAD59736BF9700A3AEB0B5352F4A898A5EEFB
+C72A64BFB45B917D9879BD0577DAB96A0E86BECAB5E8A8A051E5E40886D5A00C
+EC53E0A3265FC74195574846689BF9F38086985C2DD3223390D51155F707CE86
+59EC1C65A75BE9A0BA862DB1A00FF6A01FCED7E6> |-
+/f <1C60D8A8C9B08A956BA65798425CE9B0A78F07A04AF2F8524751F181F94C
+EF756ACD6AB92BD09462A05FB08A9160A0AB5267B62445F916DEFC1DAF3F1FB4
+B3761F71CBE3290960500C788D04CB45BB0A2825753AA6E46495F35A08389AAA
+C80F35ADADFB7ACE340FEC03C9E5F9A50A8AD731E7A553A32F387574697F9CAB
+2E100B6DD6E3525398F6> |-
+/g <1C60D8A8C9B7A73DB58EA28807584EB19BC6EA1448A12312E623B90358A1
+63CFC67672A34CC74B0AEAADF24229DF1CCAA1488AE3E348FE2ACD572EA487EC
+9D77FBB0710AB421B03DD5B8AE5519B5C269E9648E819E7ECE806EEF16A6618D
+07D9AAB350E57F26F5259E8FCF9E5C2D96BBEAD16502F9E7819E854042DDB2BC
+674C39681CC2E5224219582BC7B59BBAEF869C9DF91CA7770A97BAD53C3C3A99
+175BA8F0A5744B5969D3BC15831A95918F7C707E41F5D87B8DB2D57378BC9C29
+7DAE69E4BF438246E63F565B22D86CBE28DEF748262FB9FF82A88935451D6280
+A28F1AD964E6E476D5779321E42D3A86BE41122F1BED36C3DC47E1E01C225345
+98D0431873197ABE1C8EC03B4011E4B26D249635BDBABB8E5B69BE07AFA65F88
+EAF6> |-
+/o <1C60D8A8C9B7A73DCEB07E09D16841D605E4F67059E6B258F546B80703E4
+CDAF20027B900118209D5372F965F2045D50C02A29110A048C891DEBA3210CDF
+C5CDE2309C0CDE0E4855E9F6D8954C4C68826A14AD2E4C6227A036D85D304D6A
+96FEAA92DEC3CD1B9F4AD57B5F1EBAB070FE911461A7D5B958F5> |-
+/endash <1C60D8A8C9B7A73DB9B60A0DBA4B5FB3A045D6B65F12EE5E3DC48D3
+43D8E> |-
+/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
+end put
+end
+dup /FontName get exch definefont pop
+end
+%ADOEndSubsetFont
+/YNDRLJ+CMR10 /GLAAAA+CMR10 findfont ct_VMDictPut
+/YNDRLJ+CMR10*1
+[47{/.notdef}rp /slash /zero /one /.notdef /three /.notdef /five
+11{/.notdef}rp /A /.notdef /C 5{/.notdef}rp /I 2{/.notdef}rp /L
+/M /N /O /P 2{/.notdef}rp /S /T /U
+11{/.notdef}rp /a 3{/.notdef}rp /e /f /g 7{/.notdef}rp /o
+11{/.notdef}rp /endash 132{/.notdef}rp]
+YNDRLJ+CMR10 nf
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+-31.697 -36.8879 mo
+(MAC1105/T3{Page5of10{SOLUTIONS)
+[9.13578 7.19498 7.193 4.9813 4.9813 4.9813 4.98129 4.98131 7.19299 92.4629 8.30183 6.50756
+4.98131 4.98129 7.74393 8.30185 4.98129 6.36908 4.98129 8.30182 195.931 5.53922 7.75089 6.22662
+7.47195 7.19296 3.59644 7.75098 7.47192 0 ]xsh
+%ADOBeginSubsetFont: GISAAA+CMBX10 Initial
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+13 dict dup begin
+/FontType 1 def
+/FontName /GISAAA+CMBX10 def
+/FontInfo 8 dict dup begin
+/Notice (Copyright (c) 1988 - 1994 Blue Sky Research and Y&Y, Inc. http://www.YandY.com) def
+/Weight (Bold) def
+/ItalicAngle 0 def
+/BaseFontName (CMBX10) def
+/WasEmbedded true def
+end def
+/PaintType 0 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 46 /period put
+dup 56 /eight put
+def
+/UniqueID 5000768 def
+/FontBBox {-301 -250 1164 946} def
+end
+systemdict begin
+dup /Private
+14 dict dup begin
+/|- {def} def
+/| {put} def
+/BlueValues [-11 -0 686 697 444 453 655 676] def
+/OtherBlues [-201 -194] def
+/BlueScale 0.04379 def
+/StdHW [47] def
+/StdVW [114] def
+/StemSnapH [40 47] def
+/StemSnapV [114 142] def
+/ForceBold true def
+/password 5839 def
+/MinFeature {16 16} def
+/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
+systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
+/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
+/Subrs 5 array
+dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
+dup 1 <1C60D8A8C9C3D06D9E> |
+dup 2 <1C60D8A8C9C202D79A> |
+dup 3 <1C60D8A849> |
+dup 4 <1C60D8A8CC3674F41144B13B77> |
+def
+put
+dup /CharStrings
+3 dict dup begin
+/period <1C60D8A8C9B08A9560D4C2F3A74D92838E83B7DC14B89478B799496
+0CFDC6D2144A34A20CA36052335682902BE7739DD> |-
+/eight <1C60D8A8C9B7FCB6A4EC6CCC71FFBC41969F86A86636A65E5BD14FD4
+EBD93FCE205F86ECC615335CAFE8E2240019DB970894F9979E3FDF252D8A9472
+1B680E23D2DF204A99891D5AD0E347695938A6FCE4923A098978EC0AC2A3894C
+8A94767FEBA61293F9C489BAC7A89726BFA765D56F2D198E99D500D81046ACE1
+5301FD9FB36D2F2E4EAA017CCF306EAEC8E157B40FDE6DC2FA713180A587E730
+6AD0870F441697503D> |-
+/.notdef <1C60D8A8C9B08A95899606B6B060A7> |-
+end put
+end
+dup /FontName get exch definefont pop
+end
+%ADOEndSubsetFont
+/YNDRLK+CMBX10 /GISAAA+CMBX10 findfont ct_VMDictPut
+/YNDRLK+CMBX10*1
+[46{/.notdef}rp /period 9{/.notdef}rp /eight 199{/.notdef}rp]
+YNDRLK+CMBX10 nf
+YNDRLK+CMBX10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+-25.9685 -7.00012 mo
+(8.)
+[5.72846 0 ]xsh
+249.382 99.488 mo
+253.706 97.944 li
+249.382 96.4 li
+251.112 97.944 li
+f
+gsave
+253.705 187.944 mo
+1.70499 187.944 li
+1.70499 7.94397 li
+253.705 7.94397 li
+cp
+clp
+.797 lw
+0 lc
+0 lj
+10 ml
+[] 0 dsh
+false sadj
+1.70499 97.944 mo
+251.111 97.944 li
+@
+grestore
+.399 lw
+0 lc
+0 lj
+10 ml
+[] 0 dsh
+false sadj
+127.705 101.929 mo
+127.705 93.959 li
+@
+155.705 101.929 mo
+155.705 93.959 li
+@
+183.705 101.929 mo
+183.705 93.959 li
+@
+211.705 101.929 mo
+211.705 93.959 li
+@
+239.705 101.929 mo
+239.705 93.959 li
+@
+127.705 101.929 mo
+127.705 93.959 li
+@
+99.705 101.929 mo
+99.705 93.959 li
+@
+71.705 101.929 mo
+71.705 93.959 li
+@
+43.705 101.929 mo
+43.705 93.959 li
+@
+15.705 101.929 mo
+15.705 93.959 li
+@
+129.25 12.268 mo
+127.706 7.94403 li
+126.162 12.268 li
+127.706 10.5391 li
+f
+.797 lw
+127.705 187.944 mo
+127.705 10.538 li
+@
+.399 lw
+123.72 97.944 mo
+131.69 97.944 li
+@
+123.72 77.944 mo
+131.69 77.944 li
+@
+123.72 57.944 mo
+131.69 57.944 li
+@
+123.72 37.944 mo
+131.69 37.944 li
+@
+123.72 17.944 mo
+131.69 17.944 li
+@
+123.72 97.944 mo
+131.69 97.944 li
+@
+123.72 117.944 mo
+131.69 117.944 li
+@
+123.72 137.944 mo
+131.69 137.944 li
+@
+123.72 157.944 mo
+131.69 157.944 li
+@
+123.72 177.944 mo
+131.69 177.944 li
+@
+%ADOBeginSubsetFont: GLAAAA+CMR10 AddGlyphs
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+systemdict begin
+YNDRLJ+CMR10 dup
+/Private get dup rcheck
+{begin true}{pop false}ifelse exch
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/two <1C60D8A8C9B7A73DC50B0411757B441481CCF7EF812EEB9B3F6A07BD51
+606BCA866C4BD24CA34E86B9CA5A529B664F3EEDB6B4AF8A2B994DB57B49473E
+162231CB943675FE63E9B92B8AEBB62FB22456EC4173C66EF6C2F34FFEC22ACA
+E77FFFAAD70F3754CADC0D2CF63CB6D286D930AEA5A613E5AB9CB004BEAEBADD
+D070EDAF4FF25FDB6421F540D58D2C7A3FC40290CBCF831BE1B89B7F> |-
+/four <1C60D8A8C9B7A73DC579B9C1587087D4749982A674065FCDD01CF53F5
+4AF89DAF22339F0A467CE8D8CC25949B03A9DEFE86592098644AED5891ABD8D0
+71237FB9B66EF7648D767508B0BB1075A0AC676C770BFE6D0E818B53FD7884E4
+D8E6A983234A6E833EF72FF7FE587> |-
+systemdict /gcheck known {setglobal} if end {end} if
+end
+YNDRLJ+CMR10 /Encoding get
+dup 50 /two put
+dup 52 /four put
+pop
+%ADOEndSubsetFont
+/YNDRLJ+CMR10*1
+[47{/.notdef}rp /slash /zero /one /two /three /four /five
+11{/.notdef}rp /A /.notdef /C 5{/.notdef}rp /I 2{/.notdef}rp /L
+/M /N /O /P 2{/.notdef}rp /S /T /U
+11{/.notdef}rp /a 3{/.notdef}rp /e /f /g 7{/.notdef}rp /o
+11{/.notdef}rp /endash 132{/.notdef}rp]
+YNDRLJ+CMR10 nf
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+113.758 81.1542 mo
+(1)sh
+113.758 61.1542 mo
+(2)sh
+113.758 41.1543 mo
+(3)sh
+113.758 21.1544 mo
+(4)sh
+%ADOBeginSubsetFont: BUZAAA+CMSY10 Initial
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+13 dict dup begin
+/FontType 1 def
+/FontName /BUZAAA+CMSY10 def
+/FontInfo 8 dict dup begin
+/Notice (Copyright (c) 1996 Y&Y, Inc. All Right Reserved. http://www.YandY.com) def
+/Weight (Medium) def
+/ItalicAngle -14.035 def
+/BaseFontName (CMSY10) def
+/WasEmbedded true def
+end def
+/PaintType 0 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 161 /minus put
+def
+/UniqueID 5096651 def
+/FontBBox {-29 -960 1116 775} def
+end
+systemdict begin
+dup /Private
+13 dict dup begin
+/|- {def} def
+/| {put} def
+/BlueValues [-24 -0 683 705] def
+/OtherBlues [-135 -124] def
+/BlueScale 0.04379 def
+/StdHW [40] def
+/StdVW [40] def
+/StemSnapH [40 56] def
+/StemSnapV [40 56] def
+/password 5839 def
+/MinFeature {16 16} def
+/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
+systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
+/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
+/Subrs 5 array
+dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
+dup 1 <1C60D8A8C9C3D06D9E> |
+dup 2 <1C60D8A8C9C202D79A> |
+dup 3 <1C60D8A849> |
+dup 4 <1C60D8A8CC3674F41144B13B77> |
+def
+put
+dup /CharStrings
+2 dict dup begin
+/minus <1C60D8A8C9B08A946182837629008DF7702985522C1BEB4D11AB8A6B
+5589D8B615C840A4D8FD35DE7CD09D4C55DA8FE732830DDE> |-
+/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
+end put
+end
+dup /FontName get exch definefont pop
+end
+%ADOEndSubsetFont
+/YNDRLL+CMSY10 /BUZAAA+CMSY10 findfont ct_VMDictPut
+/YNDRLL+CMSY10*1
+[161{/.notdef}rp /minus 94{/.notdef}rp]
+YNDRLL+CMSY10 nf
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+106.009 120.739 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+113.758 120.739 mo
+(1)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+106.009 140.738 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+113.758 140.738 mo
+(2)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+106.009 160.738 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+113.758 160.738 mo
+(3)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+106.009 180.738 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+113.758 180.738 mo
+(4)sh
+153.215 113.33 mo
+(1234)
+[27.9999 27.9999 27.9999 0 ]xsh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+93.3403 113.33 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+101.089 113.33 mo
+(1)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+65.3404 113.33 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+73.0894 113.33 mo
+(2)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+37.3406 113.33 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+45.0895 113.33 mo
+(3)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+9.34069 113.33 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+17.0896 113.33 mo
+(4)sh
+.797 lw
+1 lc
+[0 2 ] 1 dsh
+true sadj
+15.705 178.944 mo
+15.705 16.944 li
+43.705 178.944 mo
+43.705 16.944 li
+71.705 178.944 mo
+71.705 16.944 li
+99.705 178.944 mo
+99.705 16.944 li
+127.705 178.944 mo
+127.705 16.944 li
+155.705 178.944 mo
+155.705 16.944 li
+183.705 178.944 mo
+183.705 16.944 li
+211.705 178.944 mo
+211.705 16.944 li
+239.705 178.944 mo
+239.705 16.944 li
+@
+[0 2.8 ] 1.4 dsh
+14.305 177.944 mo
+241.105 177.944 li
+14.305 157.944 mo
+241.105 157.944 li
+14.305 137.944 mo
+241.105 137.944 li
+14.305 117.944 mo
+241.105 117.944 li
+14.305 97.944 mo
+241.105 97.944 li
+14.305 77.944 mo
+241.105 77.944 li
+14.305 57.944 mo
+241.105 57.944 li
+14.305 37.944 mo
+241.105 37.944 li
+14.305 17.944 mo
+241.105 17.944 li
+@
+gsave
+253.705 187.944 mo
+1.70499 187.944 li
+1.70499 7.94397 li
+253.705 7.94397 li
+cp
+clp
+0 lc
+[] 0 dsh
+false sadj
+1.70499 -2737.06 mo
+4.24998 -2552.98 li
+6.79598 -2376.98 li
+9.34098 -2208.89 li
+13.759 -1924.66 18.654 -1640.43 24.614 -1356.22 cv
+27.16 -1238.41 li
+29.705 -1127.06 li
+34.562 -922.47 39.996 -717.87 47.523 -513.361 cv
+50.069 -447.207 li
+52.614 -385.893 li
+55.159 -329.236 li
+57.705 -277.057 li
+61.675 -200.65 66.029 -124.124 72.978 -47.9209 cv
+75.523 -22.0378 li
+78.069 .810059 li
+80.614 20.802 li
+83.159 38.1201 li
+85.705 52.9441 li
+88.25 65.4531 li
+90.796 75.8291 li
+93.341 84.251 li
+95.887 90.9001 li
+98.432 95.957 li
+100.978 99.6001 li
+103.523 102.012 li
+106.069 103.372 li
+108.614 103.861 li
+115.605 104.102 121.972 97.1501 128.978 98.03 cv
+131.523 98.7891 li
+134.069 100.48 li
+136.614 103.282 li
+139.159 107.377 li
+141.705 112.944 li
+144.25 120.164 li
+146.796 129.217 li
+149.341 140.284 li
+151.887 153.545 li
+154.432 169.18 li
+156.978 187.369 li
+159.523 208.293 li
+162.069 232.132 li
+164.614 259.067 li
+167.159 289.277 li
+177.002 416.085 182.398 543.453 187.523 670.524 cv
+190.069 738.33 li
+192.614 811.215 li
+195.159 889.359 li
+197.705 972.942 li
+206.34 1268.27 212.532 1563.68 218.069 1859.07 cv
+220.614 1999.72 li
+223.159 2147.62 li
+232.552 2709.84 239.689 3272.1 246.069 3834.36 cv
+248.614 4064.6 li
+251.159 4304.06 li
+253.705 4552.94 li
+@
+grestore
+%ADOBeginSubsetFont: GISAAA+CMBX10 AddGlyphs
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+systemdict begin
+YNDRLK+CMBX10 dup
+/Private get dup rcheck
+{begin true}{pop false}ifelse exch
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/A <1C60D8A8C9B08A941DDBC3AF1C109AC61AF06DEF14497758E2577FC09808
+E2F83FED36FAC5C5DF9845F9151204EBE19A62A093C0C714296A8AEB5EA72983
+7304C560208E23A9B00E450B7895C64B840FF7B8D2624ED826E8D6D1CB5BC276
+3958AE415A241BD617EA928FD9818043D58C39BCDA5256A3F17DFF2FADD0CDFE
+4A5999053732F0E5CE29974C519106> |-
+/W <1C60D8A8C9B08A949EE89938EFD2B089915D4CA87E50351E8DD3F3914A85
+384965AB9720D1BDB02951199DD63BE938B296E11B8132C78ABED307E15E2C96
+04E0EEA5C8FB1D25F45078482232C4120E0C6D7ECC100B9CF59823239764E960
+AC203F05154297337EBEC8D426CABE71C6D1BABE3D2EE87EB4EC26DC5A175D2E
+1776DC7CB846E1C76A588A844BC3111554540D100610F9152C35EB0670475763
+7F97762997D01BB6BF9BF94F9DBF981A5DB94B101F849599A265> |-
+/a <1C60D8A8C9B08A95C60527548E754D765DB4EDA6BA0D2CC6D8A620394D95
+5731400D0093175DD4FDCB6F936DAB2E93BD9C1B54BF99F619E92F88F8093B57
+6575F38778E5971C238BB03705C8902A6FCFED1FF202619A2D8A4C3FD818942E
+E7E0400EE37C1268C755A54355454E010823DC11303C9CDCFFF1370DF47DDE8E
+0505D81ACB493683AAFD9A5B8B94F66FF9ECA66884B26F31C72D900D51753830
+4DA83D95E97AC104F2FDC53254E575E01E9C7E8025E9> |-
+/e <1C60D8A8C9B08A95D1DE8AA71D3914AC9DDC5BFDDE55301EE17DAE184B08
+E53C36FBF9A44FDF3309DBE08895DBFECCF103737D7326528346FD01CD1D9FC3
+874638E8C50ADE3B494897353EB3188B512405DD1BA5DA59E8C179230F7C8D15
+AFCEA2228DAC03C77D614B36A41126CE831B41CDF160A67B175BB36C52353A72
+5460F4256C> |-
+/k <1C60D8A8C9B08A95F1118A977C6242CC6F5E327BF4A2BCE6E631EAC27F33
+5285F637895192724CE2C53641A392411149B8A3F127ECD7DEB11923D35A35EC
+238223B6B1C9CF9675A0C83B3A0C95C18823DF1B6F368BBFEEE7185E77AE9040
+378C34B27A11D9EE3C9721E2EAFF82B925C0F3ABE698646F0C4A57CEC100EA29
+86134B063D8450710541B66D42FC62B89A6AB4B6D6C05FC0E5F8EF9F1253768A
+DA78BF283C77228ACE6FD83E9384> |-
+/o <1C60D8A8C9B7FCB6A15C803B3B972EE31F5A721ABF9B8490D1BCABFAF507
+3D6D0835AA64493F9EC5B8BAE86BFF5C8028599ED438B3807899BF98EB3DF2EE
+9BBE5DC52FDB77ACA45EA052A40521B13F529CBBBB8B40F192297C658BE1CF97
+9B5618AA4355B6A77C9FC09641> |-
+/r <1C60D8A8C9B08A95A5BEE1199161ADD44E1E8B27A5C75D09130CF9546F37
+4B2A22381A06BD734F2C4BF093B03F9AF2D0D4C8BE8AA6899632B1BDCEA5F8FA
+27D0647BB27FC7927912A6761C3F8A51172D73B92082F06EFA277243DBD96EE1
+6421DB7B86390678EAD31E9D8E521BD186BAE7A8A68851384DC5E4933D7D1C5E
+E5A527356EDB77> |-
+systemdict /gcheck known {setglobal} if end {end} if
+end
+YNDRLK+CMBX10 /Encoding get
+dup 65 /A put
+dup 87 /W put
+dup 97 /a put
+dup 101 /e put
+dup 107 /k put
+dup 111 /o put
+dup 114 /r put
+pop
+%ADOEndSubsetFont
+/YNDRLK+CMBX10*1
+[46{/.notdef}rp /period 9{/.notdef}rp /eight 8{/.notdef}rp /A 21{/.notdef}rp /W
+9{/.notdef}rp /a 3{/.notdef}rp /e 5{/.notdef}rp /k 3{/.notdef}rp /o
+2{/.notdef}rp /r 141{/.notdef}rp]
+YNDRLK+CMBX10 nf
+YNDRLK+CMBX10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+324.775 14.8624 mo
+(WorkArea)
+[10.8911 5.72845 4.72226 9.86591 8.65753 4.72226 5.25021 0 ]xsh
+%ADOBeginSubsetFont: BUZAAA+CMSY10 AddGlyphs
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+systemdict begin
+YNDRLL+CMSY10 dup
+/Private get dup rcheck
+{begin true}{pop false}ifelse exch
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/bullet <1C60D8A8C9B7A73D8D0B3FCDAA7E46FB68E7B1A6E412E25369E4ABB
+A70D277941C6A488EED866AD61E359C443EB0FEA5> |-
+systemdict /gcheck known {setglobal} if end {end} if
+end
+YNDRLL+CMSY10 /Encoding get
+dup 178 /bullet put
+pop
+%ADOEndSubsetFont
+/YNDRLL+CMSY10*1
+[161{/.notdef}rp /minus 16{/.notdef}rp /bullet 77{/.notdef}rp]
+YNDRLL+CMSY10 nf
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+283.593 34.7875 mo
+(\262)sh
+%ADOBeginSubsetFont: GLAAAA+CMR10 AddGlyphs
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+systemdict begin
+YNDRLJ+CMR10 dup
+/Private get dup rcheck
+{begin true}{pop false}ifelse exch
+/CharStrings get begin
+systemdict /gcheck known {currentglobal currentdict gcheck setglobal} if
+/parenleft <1C60D8A8C9B08A958B2129D6E9761120E2D623F206A8BB61D8ED
+90A20EE239C62172B553BFF416342D6CD99C95C515CA225C40039DBAF08CE4F0
+55B08F39C15D29C99EF3EDD066CCCEF8932365A3BB1620FA5F0BCE8AF21A5BDE
+C0FFD55FA45F247FC811007CB408F0DCDD3AE01E3246> |-
+/parenright <1C60D8A8C9B08A958B2129D6E9761120E2D623F206A8A207F03
+DEA8F466C0D4F860EDF515D421F89285FC2D8EC76F5E903EDE1B5CFFAEC5DEA9
+22C7FC4A51953A99A5FB1F96793348D816F60492670058F4DEA6D328AB20FBAD
+B3C1B57A79D8CCD13A3C6D068BAD5F09F347ED0C895> |-
+/hyphen <1C60D8A8C9B08A959E2F69652E8B76AC2AC5B4F1FA8662A86AEED57
+846929C2FBC07360B> |-
+/colon <1C60D8A8C9B08A95708109816759149241680C741B6923EBD56E6248
+E5269499A7D548A5AC3ECB516C4A5048666940A11AD8CB54F4BA847274447EEB
+614F54B956BBCFCAD8E88A403FBD4464DA283ACB> |-
+/semicolon <1C60D8A8C9B08A9570810981675918D0BCF1CD202F5F8524F1CF
+461D4270459E44DB560BC854C3F48DFD92347C27A6AAF0E2B1A04AFEB82D8D46
+6FB78A9BF2E74CE09AE4A8F352791B5C7110FA6307B2916ECC9F5904CC094CEE
+59D67B4016AFD5BCFCA64E9EC736BD726D1A09B76CECE761EBE5219FDE764D2A
+9C6D289DBA39E76263> |-
+/equal <1C60D8A8C9B08A946182837629008D945C50B3BD77B79680F3B07BDA
+6301D2521ADF665EADEA779B8650AC6CDB556621631497A3BE00C67036F6EB06
+05A36A2C0EE306396247E4A79F8EFAE500D78B59605F041F11> |-
+/b <1C60D8A8C9B08A95C5897169EED96641DA8B10CA087E6B7A5588052BABB7
+BC0836B12A49068694BF7254A2B820A876E020738250AC32ED44C3A7F2C5F700
+C2D03E307AFB7135F6415FEEB6D856569E9D5429B4DD3F524606607A7502F4FA
+00BE0184FC677554B2B6367E60A281A4837A2231515AF09B33399B7D5C3D2E8F
+3A2971F2933C4A4CAAA727A80DBDC9692BD6B38D543D422C14068650D2C61B6B
+E587855459543E451B14A31F96D9B341DFF415> |-
+/d <1C60D8A8C9B08A95C5897169EED96D33CB6A9013DDE3D04C2845E595598F
+3E2E6D79295DF7CC9B6C00D2CF2AC2502697856E5474C945441376692CB09ED9
+25CE9D4F710C7DE089B5E658450CEECC611DD1F25787624443E710373775DB0D
+7A6478B3FD4F82DF4FC109429D4EADCED1BD77A35BF25A1C1E584B0EB23CE621
+6847A21EE88B35D72221C7F9F0705E61C9F9C0A224456A04D3E81DE0BD98422F
+FA8C7335713899937F5FFEC7771BB8FDAEE53DE3E6> |-
+/h <1C60D8A8C9B08A95C5897169EED9664BED359D179BDDBB0B44F78A354068
+F188259C421AB0565D2C93368C7FE6E0A9F40BB196D1F23D06A9B4099431512B
+C136412B8071F881A48FA8A97D03ACD06EBB8221F2FCB171D9A905549A8F7881
+2735FA48F2EC00ACCEB309920B412B3F60D0173EF224E4CB3F5C1DAD9CC6147F
+9ADED8EC6C9533B7B1AABCF5D1E9B7F36A2D4B8D2B26EAE8EA> |-
+/i <1C60D8A8C9B08A9570810981675968AD25F24D2B3EAE33A4AEDADBE9B65D
+A53E9F2E54B16133284CA9914BED3880C793207FBDC7926300AD07E6E54407B5
+1EA082FB5EE3816A6A23A8296A947037E4E873086619D7E86B5A60AFA576E554
+D14C9B74D403098ADE85F71880A3E75D7FC1> |-
+/k <1C60D8A8C9B08A95D222871B45C8170346D4B3692EE324314ECB68C750E8
+0C39C0E118E6175CCD69769E2118B02E8AEF864A1ADB8D0BF5A5FFDD4A9B9B6C
+C867F43FFF5A7BBEB959851C5A4053DF1F3B8EBF64DEEC6B682D7055139D4103
+B0A63AD1D8193F253FA365D16CC3EC1AC7C7AEA533CCF6F8272FF6B8CD1FC7B4
+0DE006133FBB2B23E8E1776C461B4D8ABE09C8DE32B25BAD44EC36CACD378C29
+9496103B1CB809290EFAF69E7582E8754F6B25D7A0FD> |-
+/l <1C60D8A8C9B08A9570810981675968AD25F317189905083B97CD6CD1B880
+05B79B666989E13C0F8D0889AD0162C7E87274D188EBBD1A911FDD0B6E360AA1
+C515725198B9106B157680FC> |-
+/n <1C60D8A8C9B08A95C5897169EED9664BED359D179BD38846B55E34D4CAA6
+E85E9CF3F20D5FF6B35F1C9AAE2A542B7B24E087B6004A4C7219997095CC0DD0
+7A15DB83B5FEAD13F209441FFD364AD3DBF6E16129F3599BACA005A523490ABC
+41E4DF320ACE384037EE1D352E3FAD8A9E2CECBD75A999F7B655F4FFBFAC6FFF
+84029A8DF710DBB0D7CD4C1D20367E79BC4E3121199FA9593C876B29EA793F10
+2A1E36BE8056D0377A> |-
+/p <1C60D8A8C9B08A95C5897169EED91609D9E4D5F91353B4B61FEC4EAC5FAD
+7B5032144CF9ADF0F974C4F1789F7935ECC14F06F084A964A5CA17285CA0C9EC
+1B8F57A0E66AEAF75BA11AE734E6416585ED4DB12A3372EA2BA1BABC0DE7BE87
+584CD6EA8819CE99CB18F04E8ECD619D7E02CDE60A0AA18597DE62AF13ABCC5A
+5F1D59EBFBBEF560144EF0DCE1B387B4BC40F158468D6A4DE477659B50190482
+6F081FC4942E5187D9F03F6D1BD471F55D6300> |-
+/r <1C60D8A8C9B08A9584DCB847BA986212E50A0E258C2648145E7BCFAC2BA8
+6C36E84B654FABD35F6BE558D4B54676EA44C57F6EF668BC4866822048422FD6
+D8B608EB2C1C67EC3EE3CEBDD94E9A9214F99F9DA8EE2F6900EB47053AC763EE
+DABCA0360701D8CB383B9ECCD7B848D18CFB88761A167471DE407F7BED4BC50B
+779C4D57BF133C3E4777AA4605171C6D> |-
+/s <1C60D8A8C9B08A9586D4F7B21AA9B0967A13D9D7A42FE5E3505E2F3EE7CA
+FF99F258F00E5A08E889C3CC5D8ACF7164CD2AC0013AEF91C534D4ACEB36DB05
+CE0E820904C7EB6E6797C2D5FB5E96476FD3694427C3F770022BFE939EC57571
+FAC1F965E0A7F32B36C86522DA3AFB3A309E4B5D72F0E56F1BEB5C7254CECC22
+9B1219F95DA80187F2FFAF15E03AF5B396BE650B53989F1A64B4AA9655D1019B
+496166D38FC8961ACDA2D0B1533422796A114C02DCAA98A8558155EE2C970442
+944A032E8A6A4004C15A48F9176AE45E44068C23BC> |-
+/t <1C60D8A8C9B08A958B2129D6E9766AD6B3247B9CBDFB0724765D43ED23A7
+B2BC7B24077C209594776C48799589E3DF7269407A6893D4C106057122D99E3F
+649ACAFBE1812EEAA6C4DCDDD716BEB7694626BFFCAE715C15EF0FD8CE9F6FE4
+E96B03> |-
+/u <1C60D8A8C9B08A95C5897169EED96D33CB6A8CCD6F539BADC574F30FA019
+2FAAA0351E8C93175F4B6BE4D2DCA8A13E4F01BEC5788441B5C71C1247369B6B
+73137454B1C207EA4F43D533FE87512BAD8DD4F3DBBECD9A7A1CE3F33A4D3F31
+6952FDB339B4B6A937009D6EC9821D8553981B7D8AABC3E750369071> |-
+/v <1C60D8A8C9B08A95D222871B45C81C126204E8A3F3EFC2EBF937B1E5F2B8
+737EDCCFF78DB8693FA0E7B559CFAC0A233112105FC1A8807ADD3013D4AE86C4
+38318F1223CADD606642DF7E9A8EE9BE743E975DA759D856D52F7E927FE33606
+3979ED38AB2E1EA4CB4F371A1EB04E6C5B864C9DB5271435AB2DE7D9DE15A6B1
+D9E3FD555F015DADE467> |-
+systemdict /gcheck known {setglobal} if end {end} if
+end
+YNDRLJ+CMR10 /Encoding get
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 45 /hyphen put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 98 /b put
+dup 100 /d put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 110 /n put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+pop
+%ADOEndSubsetFont
+/YNDRLJ+CMR10*1
+[40{/.notdef}rp /parenleft /parenright 3{/.notdef}rp /hyphen /.notdef /slash /zero
+/one /two /three /four /five 4{/.notdef}rp /colon /semicolon
+/.notdef /equal 3{/.notdef}rp /A /.notdef /C 5{/.notdef}rp /I
+2{/.notdef}rp /L /M /N /O /P 2{/.notdef}rp /S
+/T /U 11{/.notdef}rp /a /b /.notdef /d /e
+/f /g /h /i /.notdef /k /l /.notdef
+/n /o /p /.notdef /r /s /t /u
+/v 4{/.notdef}rp /endash 132{/.notdef}rp]
+YNDRLJ+CMR10 nf
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+293.556 34.7875 mo
+(Theend-behaviorislike)
+[7.19299 5.53922 7.24979 4.4234 5.53918 5.53922 3.31747 5.81616 4.4234 5.53918 4.70435 5.26025
+2.76959 4.98129 6.73172 2.76962 6.75162 2.76959 2.76962 4.98328 0 ]xsh
+%ADOBeginSubsetFont: WRBBAA+CMMI10 Initial
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+13 dict dup begin
+/FontType 1 def
+/FontName /WRBBAA+CMMI10 def
+/FontInfo 8 dict dup begin
+/Notice (Copyright (c) 1988 - 1996 Blue Sky Research and Y&Y, Inc. (978) 371-3286) def
+/Weight (Medium) def
+/ItalicAngle -14.04 def
+/BaseFontName (CMMI10) def
+/WasEmbedded true def
+end def
+/PaintType 0 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 120 /x put
+dup 121 /y put
+def
+/UniqueID 5087385 def
+/FontBBox {-32 -250 1048 750} def
+end
+systemdict begin
+dup /Private
+12 dict dup begin
+/|- {def} def
+/| {put} def
+/BlueValues [-22 -0 683 705 431 442 453 466] def
+/OtherBlues [-205 -194] def
+/BlueScale 0.04379 def
+/StdHW [31] def
+/StdVW [72] def
+/StemSnapH [25 31] def
+/password 5839 def
+/MinFeature {16 16} def
+/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
+systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
+/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
+/Subrs 5 array
+dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
+dup 1 <1C60D8A8C9C3D06D9E> |
+dup 2 <1C60D8A8C9C202D79A> |
+dup 3 <1C60D8A849> |
+dup 4 <1C60D8A8CC3674F41144B13B77> |
+def
+put
+dup /CharStrings
+3 dict dup begin
+/x <1C60D8A8C9B08A95C3B1459DC8650F9F96183FC46268F5BDA744B05C84F8
+C7E5FE6BFCA9D4C8BD3488080E8FC96F34EA177DCAE190D27F37102D2F45514A
+ECF6E4A3B2E6F401810D0AF13E4BDFDB8118476E04C9DD93F8884F46C9ABEE13
+C8E7992449902F6BC3D518B2A70293976C8BCE67ED913D975C52E884BF7F46CE
+8DF8170D79262260A6CB5A6A088C0A964E0271DA63944ABA9C96D1AA58CB590F
+97DC9C8372606676C2CA18B1A9303EBF11B510FAB8A33E9B530D274E48DD09EE
+8829EC16181BBC16C4E81343ACB5386F22A9C0CA2C23959102E833> |-
+/y <1C60D8A8C9B08A95A3A690DEE11C2ACFF7516D4A7CDA884FB3B130648C63
+2F41B68B5E071E6BAD692658125A4CE9A4427A55054BF5DABFF855AF9D186215
+1F50AD5D2EE36E064C9718B8694EF83525324184D7DD07A10B9FD203C707D849
+3E926469CD1C36E94D5785557A2D95B556774E51CEFBAE2CC8AB735FFF293AFE
+FA32B8D1FD5C52EC860AA6EC20816B24BD1EB69FE8581708322D6F09A08B3182
+91EF57EAE554A00C60D585B786E53371A6D3FB2D8729C3F2C51DB65ABF8CA421
+EEB103AED2CB924D829D66429CF6664CDEAFEEC4AD07C95E7FE8BCAB5D2A1AD6
+731779D5> |-
+/.notdef <1C60D8A8C9B08A959E2F69652E8B8F> |-
+end put
+end
+dup /FontName get exch definefont pop
+end
+%ADOEndSubsetFont
+/YNDRLM+CMMI10 /WRBBAA+CMMI10 findfont ct_VMDictPut
+/YNDRLM+CMMI10*1
+[120{/.notdef}rp /x /y 134{/.notdef}rp]
+YNDRLM+CMMI10 nf
+YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+399.866 34.7875 mo
+(y)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+407.875 34.7875 mo
+(=)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+418.391 34.7875 mo
+(\241)sh
+YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+426.14 34.7875 mo
+(x)sh
+%ADOBeginSubsetFont: KEDBAA+CMR7 Initial
+%ADOt1write: (1.0.24)
+%%Copyright: Copyright 2011 Adobe System Incorporated. All rights reserved.
+13 dict dup begin
+/FontType 1 def
+/FontName /KEDBAA+CMR7 def
+/FontInfo 8 dict dup begin
+/Notice (Copyright (c) 1988 - 1992 Blue Sky Research and Y&Y, Inc. http://www.YandY.com) def
+/Weight (Medium) def
+/ItalicAngle 0 def
+/BaseFontName (CMR7) def
+/WasEmbedded true def
+end def
+/PaintType 0 def
+/FontMatrix [0.001 0 0 0.001 0 0] def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 51 /three put
+def
+/UniqueID 5000790 def
+/FontBBox {-286 -250 1122 967} def
+end
+systemdict begin
+dup /Private
+13 dict dup begin
+/|- {def} def
+/| {put} def
+/BlueValues [-20 -0 683 703 431 446 664 674] def
+/OtherBlues [-205 -194] def
+/BlueScale 0.04379 def
+/StdHW [36] def
+/StdVW [79] def
+/StemSnapH [28 36] def
+/StemSnapV [79 95] def
+/password 5839 def
+/MinFeature {16 16} def
+/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
+systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
+/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
+/Subrs 5 array
+dup 0 <1C60D8A8CC31FE2BF6E07AA3E541E2> |
+dup 1 <1C60D8A8C9C3D06D9E> |
+dup 2 <1C60D8A8C9C202D79A> |
+dup 3 <1C60D8A849> |
+dup 4 <1C60D8A8CC3674F41144B13B77> |
+def
+put
+dup /CharStrings
+2 dict dup begin
+/three <1C60D8A8C9B08A95C25148D4A67F69EFB9DDFA5ECA5AE37566D87066
+172F8CABE2B2CB84CA762EB5E603C8A9A699CCCFA6A0578E3DA76E6C9E7B5A84
+45F01D818A380DD4AC46AFDB5422B8800FEF2E8AFDA86EDD8199C34D64992E4F
+43992CF1D54B07E3F575480A9A0B868375A4E2A9893BE0AEBB713690AB6C5B93
+E6D8D619357F90F56F58A8525CC0A1BD91DA9365507B440F549B60D4E7E5CBB3
+769D4C82F061F9E20A25AD23418551374D804A6B25C8CE003D> |-
+/.notdef <1C60D8A8C9B08A958AA685092D4752> |-
+end put
+end
+dup /FontName get exch definefont pop
+end
+%ADOEndSubsetFont
+/YNDRLN+CMR7 /KEDBAA+CMR7 findfont ct_VMDictPut
+/YNDRLN+CMR7*1
+[51{/.notdef}rp /three 204{/.notdef}rp]
+YNDRLN+CMR7 nf
+YNDRLN+CMR7*1 [6.9738 0 0 -6.9738 0 0 ]msf
+431.835 30.6743 mo
+(3)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+283.593 54.713 mo
+(\262)sh
+YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+293.556 54.713 mo
+(x)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+299.25 54.713 mo
+(-int:)
+[3.31747 2.76959 5.26224 3.87555 0 ]xsh
+YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+325.685 54.713 mo
+(x)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+337.496 54.713 mo
+(=0\(even\);)
+[13.868 10.3123 3.87552 4.4234 4.98328 4.4234 5.53922 3.87552 0 ]xsh
+YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+397.897 54.713 mo
+(x)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+409.708 54.713 mo
+(=)sh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+423.574 54.713 mo
+(\241)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+431.323 54.713 mo
+(1)sh
+293.557 66.6682 mo
+(\(odd\))
+[3.87552 5.25827 5.53922 5.53918 0 ]xsh
+YNDRLL+CMSY10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+283.594 86.5933 mo
+(\262)sh
+YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+293.557 86.5933 mo
+(y)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+298.799 86.5933 mo
+(-int:)
+[3.31747 2.76959 5.26224 3.87555 0 ]xsh
+YNDRLM+CMMI10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+321.623 86.5933 mo
+(y)sh
+YNDRLJ+CMR10*1 [9.9626 0 0 -9.9626 0 0 ]msf
+329.971 86.5933 mo
+(=0\(passesthroughori-)
+[10.8572 8.50607 3.87552 5.53922 4.98129 3.92523 3.92523 4.4234 7.45001 3.87552 5.53922 3.9053
+4.98129 5.53922 4.98129 9.06396 4.98132 3.90533 2.76959 0 ]xsh
+293.557 98.5485 mo
+(gin\))
+[4.98129 2.76962 5.53918 0 ]xsh
+grestore
+grestore
+pgrs
+%%PageTrailer
+[
+[/CSA [/0 ]]
+[/CSD [/0 ]]
+] del_res
+/YNDRLM+CMMI10*1 uf
+/YNDRLM+CMMI10 uf
+/WRBBAA+CMMI10 uf
+/YNDRLN+CMR7*1 uf
+/YNDRLN+CMR7 uf
+/KEDBAA+CMR7 uf
+/YNDRLJ+CMR10*1 uf
+/YNDRLJ+CMR10 uf
+/GLAAAA+CMR10 uf
+/YNDRLL+CMSY10*1 uf
+/YNDRLL+CMSY10 uf
+/BUZAAA+CMSY10 uf
+/YNDRLK+CMBX10*1 uf
+/YNDRLK+CMBX10 uf
+/GISAAA+CMBX10 uf
+Adobe_AGM_Image/pt gx
+Adobe_CoolType_Core/pt get exec
+Adobe_AGM_Core/restore_mysetup gx
+Adobe_AGM_Core/pt gx
+currentdict Adobe_AGM_Utils eq {end} if
+%%Trailer
+Adobe_AGM_Utils begin
+[/EMC pdfmark_5
+currentdict Adobe_AGM_Utils eq {end} if
+Adobe_AGM_Image/dt get exec
+Adobe_CoolType_Core/dt get exec
+Adobe_AGM_Core/dt get exec
+%%Pages: 1
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0
+%%+ procset Adobe_CoolType_Utility_T42 1.0 0
+%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
+%%+ procset Adobe_CoolType_Core 2.31 0
+%%+ procset Adobe_AGM_Core 2.0 0
+%%+ procset Adobe_AGM_Utils 1.0 0
+%%DocumentNeededFeatures:
+%%DocumentSuppliedFeatures:
+%%DocumentCustomColors:
+%%CMYKCustomColor:
+%%RGBCustomColor:
+%%EOF
diff --git a/macros/latex/contrib/eqexam/examples/hw.cfg.txt b/macros/latex/contrib/eqexam/examples/hw.cfg.txt
new file mode 100644
index 0000000000..57511627ea
--- /dev/null
+++ b/macros/latex/contrib/eqexam/examples/hw.cfg.txt
@@ -0,0 +1,12 @@
+\renewcommand\maketitledesign
+{%
+ \makebox[\textwidth]{\normalsize
+ \shortstack[l]{\strut\underbar{\websubject}\\\@date}\hfill
+ \shortstack[l]{\underbar{\webtitle}\\\strut}\hfill
+ \shortstack[l]{\strut\underbar{Due \theduedate}\\\webauthor}}%
+}
+\rhead{\webauthor}
+\def\exrtnlabelformat{$\square$}
+\def\exrtnlabelformatwp{}
+\def\eq@sqslrtnlabel{}
+\everymath{\displaystyle}
diff --git a/macros/latex/contrib/eqexam/examples/quiz.cfg.txt b/macros/latex/contrib/eqexam/examples/quiz.cfg.txt
new file mode 100644
index 0000000000..bc9a15aed6
--- /dev/null
+++ b/macros/latex/contrib/eqexam/examples/quiz.cfg.txt
@@ -0,0 +1,7 @@
+\renewcommand\maketitledesign
+{%
+ \makebox[\textwidth]{\normalsize
+ \shortstack[l]{\strut\websubject\\\webauthor, \@date}\hfill
+ \shortstack[l]{\webtitle\\\strut}\hfill
+ \shortstack[l]{\strut\eq@ExamName\\\eq@SID}}%
+}
diff --git a/macros/latex/contrib/eqexam/examples/quiz01.pdf b/macros/latex/contrib/eqexam/examples/quiz01.pdf
new file mode 100644
index 0000000000..0a09709eee
--- /dev/null
+++ b/macros/latex/contrib/eqexam/examples/quiz01.pdf
Binary files differ
diff --git a/macros/latex/contrib/eqexam/examples/selectversion_tst.pdf b/macros/latex/contrib/eqexam/examples/selectversion_tst.pdf
new file mode 100644
index 0000000000..4aab0f5127
--- /dev/null
+++ b/macros/latex/contrib/eqexam/examples/selectversion_tst.pdf
Binary files differ
diff --git a/macros/latex/contrib/eqexam/examples/test_matching.tex b/macros/latex/contrib/eqexam/examples/test_matching.tex
deleted file mode 100644
index 27317c656e..0000000000
--- a/macros/latex/contrib/eqexam/examples/test_matching.tex
+++ /dev/null
@@ -1,92 +0,0 @@
-\documentclass{article}
-\usepackage{amsmath}
-\usepackage{graphicx}
-\usepackage[forpaper,pointsonleft,
-% online,
-% compile with one of the following three options
- nosolutions,
-% answerkey,
-% vspacewithsolns
-]{eqexam}
-%\usepackage[forpaper,pointsonleft,nosolutions]{eqexam}
-%\usepackage[online,forpaper,pointsonleft,answerkey]{eqexam}
-
-\solAtEndFormatting{\eqequesitemsep{3pt}}
-
-
-\title[T1]{Test 1}
-\author{D. P. Story}
-\subject{A Matching Problem}
-\date{\thisterm, \the\year}
-\keywords{Test 1, Section 001}
-
-\university
-{%
- NORTHWEST FLORIDA STATE COLLEGE\\
- Department of Mathematics
-}
-\email{storyd@nwfsc.edu}
-
-\hfuzz = .7pt
-
-\begin{document}
-\maketitle
-
-
-\begin{exam}{Part1}
-
-\begin{instructions}
-Solve each of the problems without error. If you make an error,
-points will be subtracted from your total score.
-\end{instructions}
-
-
-\begin{problem*}[\auto]
-Match each of names on the left, with the corresponding names on the right.
-
-\begin{multicols}{2}
-\begin{parts}
-\item\label{dps}\PTs*{2}\fillin{.5in}{\ref{george}} Washington
-\ifkeyalt
-\begin{solution}[]
-\fillin{.5in}{\ref{george}} Washington
-\end{solution}
-\fi
-\item\PTs*{2}\fillin{.5in}{\ref{john}} Adams
-\ifkeyalt
-\begin{solution}[]
-\fillin{.5in}{\ref{john}} Adams
-\end{solution}
-\fi
-\item\PTs*{2}\fillin{.5in}{\ref{thomas}} Jefferson
-\ifkeyalt
-\begin{solution}[]
-\fillin{.5in}{\ref{thomas}} Jefferson
-\end{solution}
-\fi
-
-\columnbreak
-
-\renewcommand{\thepartno}{\Alph{partno}}
-\partsformat{\Alph{partno}.}
-
-% The above redefinitions are reset when we leave the group, when \end{parts}
-% is completed. If the original definitions are needed to be reset before then
-% execute the following commands: \defaultthepartno, \defaultpartsformat
-
-% \foritem{a} resets the partno counter back to 0, and displays (a), which
-% has been redefined to A.
-
-\foritem{a}\label{john} John
-
-\item\label{thomas} Thomas
-
-\item\label{george} George
-
-\end{parts}
-\end{multicols}
-\end{problem*}
-
-\end{exam}
-
-\end{document}
diff --git a/macros/latex/contrib/media9/ChangeLog b/macros/latex/contrib/media9/ChangeLog
index 6bd4daf164..318969b5e2 100644
--- a/macros/latex/contrib/media9/ChangeLog
+++ b/macros/latex/contrib/media9/ChangeLog
@@ -1,3 +1,8 @@
+2021-03-01
+ * v1.15 : media9.sty
+ * v0.46 : pdfbase.sty
+ * fix : fixing \pbs_pdfxform:nnnnn for dvips (\leavevmode inserted)
+
2021-01-25
* v1.14 : media9.sty
* v0.45 : pdfbase.sty
diff --git a/macros/latex/contrib/media9/doc/media9.pdf b/macros/latex/contrib/media9/doc/media9.pdf
index d65b9011c1..470c808a9c 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 acd4c76977..4d4c80f5cb 100644
--- a/macros/latex/contrib/media9/media9.sty
+++ b/macros/latex/contrib/media9/media9.sty
@@ -34,8 +34,8 @@
\RequirePackage{l3keys2e}
-\def\g@mix@date@tl{2021/01/25}
-\def\g@mix@version@tl{1.14}
+\def\g@mix@date@tl{2021/03/01}
+\def\g@mix@version@tl{1.15}
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesExplPackage{media9}{\g@mix@date@tl}{\g@mix@version@tl}
@@ -825,7 +825,7 @@
\mix_uriend:
\group_begin:
\mix_beginLTR:
- \leavevmode
+ \mode_leave_vertical:
%empty stream as appearance dummy
\cs_if_exist:NF\g_mix_appearance_tl{
\hbox_set:Nn\l_mix_poster_box{\phantom{\rule{1pt}{1pt}}}
@@ -2301,7 +2301,7 @@
\mix_uriend:
\group_begin:
\mix_beginLTR:
- \leavevmode
+ \mode_leave_vertical:
%reset various variables
\tl_gclear:N\g_mix_overbtn_tl
\tl_gclear:N\g_mix_downbtn_tl
diff --git a/macros/latex/contrib/media9/pdfbase.sty b/macros/latex/contrib/media9/pdfbase.sty
index 734e92331e..d4e7d79a68 100644
--- a/macros/latex/contrib/media9/pdfbase.sty
+++ b/macros/latex/contrib/media9/pdfbase.sty
@@ -152,8 +152,8 @@
\RequirePackage{l3keys2e}
-\def\g@pbs@date@tl{2021/01/25}
-\def\g@pbs@version@tl{0.45}
+\def\g@pbs@date@tl{2021/03/01}
+\def\g@pbs@version@tl{0.46}
\NeedsTeXFormat{LaTeX2e}[2020-10-01]
\ProvidesExplPackage{pdfbase}{\g@pbs@date@tl}{\g@pbs@version@tl}
@@ -337,13 +337,13 @@
}
\cs_new_protected:Nn\pbs_pdflink:nn{
- \leavevmode
+ \mode_leave_vertical:
\immediate\pdfstartlink~user~{
\cs_if_exist_use:N\ocgbase_insert_oc:~#1}#2\pdfendlink
}
\cs_new_protected:Nn\pbs_pdfdest:nnnn{
- \leavevmode
+ \mode_leave_vertical:
\str_case:nnTF{#2}{
{fit}{}
{fitb}{}
@@ -554,13 +554,13 @@
}
\cs_new_protected:Nn\pbs_pdflink:nn{
- \leavevmode
+ \mode_leave_vertical:
\special{pdf:bann~<<\cs_if_exist_use:N\ocgbase_insert_oc:~#1>>}#2
\special{pdf:eann}
}
\cs_new_protected:Nn\pbs_pdfdest:nnnn{
- \leavevmode
+ \mode_leave_vertical:
\str_case:nnTF{#2}{
{fit}{\tl_set:Nn\l_pbs_fittype_tl{/Fit}}
{fitb}{\tl_set:Nn\l_pbs_fittype_tl{/FitB}}
@@ -948,7 +948,7 @@
}
\cs_new_protected:Nn\pbs_pdflink:nn{
- \leavevmode
+ \mode_leave_vertical:
\cs_if_exist:NTF\pdfmark{
\pdfmark[#2]{pdfmark=/ANN,Raw={
\cs_if_exist_use:N\ocgbase_insert_oc:~#1}}
@@ -964,7 +964,7 @@
}
\cs_new_protected:Nn\pbs_pdfdest:nnnn{
- \leavevmode
+ \mode_leave_vertical:
\group_begin:
%write destination page number to aux
\iow_shipout_x:Nx\@mainaux{
@@ -1066,7 +1066,7 @@
}
\cs_new_protected_nopar:Nn\pbs_pdfxform:nnnnn{ % #1, #3 not used (resources
- % are managed automatically)
+ \mode_leave_vertical: % are managed automatically)
%rescale box to fit within the papersize while distilling
\tl_gset:cx{scale_{pbs@obj\int_use:N\g_pbs_obj_int}}{\fp_eval:n{min(1.0,
\dim_ratio:nn{\paperwidth}{\box_wd:N#5},
diff --git a/macros/latex/contrib/rec-thy/README b/macros/latex/contrib/rec-thy/README
index 0d4e624988..2524d9cc5e 100644
--- a/macros/latex/contrib/rec-thy/README
+++ b/macros/latex/contrib/rec-thy/README
@@ -37,3 +37,5 @@ Github URL: https://github.com/TruePath/Recursion-Theory-Latex-Package
05/08/2020 - v3.3 Fixed/added tweak to overline so it looks correct. Also added real symbols so that \subfunneq and \supfunneq can be defined appropriately. Fixed incorrect use of tiny in math mode.
06/01/2020 - v3.3.1 Fixed typo causing error under pdflatex.
06/04/2020 - v3.4 Eliminated dependence on undertilde which is missing from texlive
+v3.5 - Added \Hop command and misc code cleanup.
+v3.6 - Fixed \REA[n] so that dash is shorter. Added BeamerRequirements to add a block for requirements in beamer and fixed the requirements environment for beamer. Fixed \req* command. Improved syntax for \recfnl so it can accept a () delimited argument via the same standard as \REset and \recf. Improved \setcol to allow it to be used repeatedly without typesetting bugs. Changed the code and pair commands to use only a single angle bracket.
diff --git a/macros/latex/contrib/rec-thy/rec-thy.pdf b/macros/latex/contrib/rec-thy/rec-thy.pdf
index d466d49ff6..783a3ef95d 100644
--- a/macros/latex/contrib/rec-thy/rec-thy.pdf
+++ b/macros/latex/contrib/rec-thy/rec-thy.pdf
Binary files differ
diff --git a/macros/latex/contrib/rec-thy/rec-thy.sty b/macros/latex/contrib/rec-thy/rec-thy.sty
index a758fe43fc..b02e529891 100644
--- a/macros/latex/contrib/rec-thy/rec-thy.sty
+++ b/macros/latex/contrib/rec-thy/rec-thy.sty
@@ -1,7 +1,29 @@
-\NeedsTeXFormat{LaTeX2e}
+% \NeedsTeXFormat{LaTeX2e}
% Release Notes see README
-\def\recthyVersion{3.4}
-\ProvidesPackage{rec-thy}[2020/06/04 v\recthyVersion Provides commands for writing up recursion theory papers]
+\RequirePackage{expl3}
+\RequirePackage{ltxcmds}
+\RequirePackage{expl3}
+\RequirePackage{ifxetex,ifpdf}
+\RequirePackage{suffix}
+\RequirePackage{ifmtarg}
+\RequirePackage{xifthen}
+\RequirePackage{xkeyval}
+\RequirePackage{etoolbox}
+\RequirePackage{pict2e,picture}
+\RequirePackage{xparse}
+\def\recthyVersion{3.6}
+\ProvidesExplPackage
+ {rec-thy}
+ {2021/02/28}
+ {\recthyVersion}
+ {Provides commands for writing up recursion theory papers}
+
+
+
+\ExplSyntaxOff
+
+% \ProvidesExplPackage{rec-thy}{2020/06/04}{3.5}{Provides commands for writing up recursion theory papers} % Description
+% \ProvidesPackage{rec-thy}[2021/02/05 v\recthyVersion Provides commands for writing up recursion theory papers]
\makeatletter
% \newcommand*{\@curpack}{\@currname} %rec-thy.sty
\newcommand*{\@packinfo}[1]{\PackageInfo{rec-thy}{#1}}
@@ -15,18 +37,12 @@
% \ProvidesPackage{\@curpack} %file name is package name
-\RequirePackage{ltxcmds}
-\RequirePackage{ifxetex,ifpdf}
-\RequirePackage{suffix}
-\RequirePackage{ifmtarg}
-\RequirePackage{xifthen}
-\RequirePackage{xkeyval}
-\RequirePackage{etoolbox}
-\RequirePackage{pict2e,picture}
+
\robustify\(
\robustify\)
-\RequirePackage{xparse}
+
\AtBeginDocument{
+% \@ifundefined{hyperref}{\providecommand{\texorpdfstring}[2]{def} }
\ltx@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
\ltx@ifpackageloaded{amssymb}{}{\RequirePackage{amssymb}}
\ltx@ifpackageloaded{amsfonts}{}{\RequirePackage{amsfonts}}
@@ -46,9 +62,6 @@
}
% \ifxetex %workaround for bug...hopefully can dispense on later
-% \gdef\symbf#1{\symbf{#1}}
-% \fi
-% \global\let\symbf=\symbf
\ifxetex
\else
\def\symbf#1{\mathbf{#1}}
@@ -108,11 +121,13 @@
\newif\ifrecthy@noreqhelper \recthy@noreqhelperfalse
\newif\ifrecthy@nosubfun \recthy@nosubfunfalse
\newif\ifrecthy@nopfcases \@ifclassloaded{beamer}{\recthy@nopfcasestrue}{\recthy@nopfcasesfalse}
+\newif\ifrecthy@beamersupp \@ifclassloaded{beamer}{\recthy@beamersupptrue}{\recthy@beamersuppfalse}
\newif\ifrecthy@noprioritytrees \recthy@noprioritytreesfalse
\newif\ifrecthy@nosuppprioritytrees \recthy@nosuppprioritytreestrue
\newif\ifrecthy@hyperreqs \recthy@hyperreqstrue
\newif\ifrecthy@nooperators \recthy@nooperatorsfalse
\newif\ifrecthy@fix@typeset \recthy@fix@typesettrue
+\newif\ifrecthy@nodoubleangles \recthy@nodoubleanglesfalse
%\newif\ifrecthy@nomodule \recthy@nomodulefalse
\DeclareOptionX{nohyphenation}{\recthy@nohyphenationtrue}
@@ -142,10 +157,16 @@
\DeclareOptionX{nohyperreqs}{\recthy@hyperreqsfalse}
\DeclareOptionX{nooperators}{\recthy@nooperatorstrue}
\DeclareOptionX{compat31}{\recthy@compat@threeOne}
+\DeclareOptionX{compat35}{\recthy@compat@threeFive}
\DeclareOptionX{nofixtype}{\ifrecthy@fix@typesetfalse}
+\DeclareOptionX{nodoubleangles}{\ifrecthy@nodoubleanglestrue}
+
+
+\newcommand*{\recthy@rollback@threeTwo}{}
+\newcommand*{\recthy@rollback@threeSix}{}
+\newcommand*{\recthy@compat@threeFive}{\recthy@rollback@threeSix}
+\newcommand*{\recthy@compat@threeOne}{\recthy@compat@threeFive\recthy@rollback@threeTwo}
-\newcommand*{\recthy@compat@threeOne}{\recthy@rollback@threeTwo@threeOne@REA}
-\newcommand*{\recthy@rollback@threeTwo@threeOne@REA}{}
%\DeclareOptionX{nomodule}{\recthy@nomoduletrue}
\DeclareOptionX{degjoin}{\def\Tjoin{\Tdegjoin}}
@@ -391,16 +412,6 @@
\end{picture}%
}
-% \newcommand{\not@pnrelbar}{%
-% \linethickness{\dimen2}%
-% \sbox\z@{$\m@th\nprec$}%
-% \dimen@=1.1\ht\z@
-% \begin{picture}(\dimen@,.4ex)
-% \roundcap
-% \put(0,.2ex){\line(1,0){\dimen@}}
-% \put(\dimexpr 0.5\dimen@-.2ex\relax,0){\line(1,1){.4ex}}
-% \end{picture}%
-% }
\newcommand{\@snrelbar}{%
\linethickness{\dimen2}%
@@ -413,16 +424,6 @@
\end{picture}%
}
-% \newcommand{\not@snrelbar}{%
-% \linethickness{\dimen2}%
-% \sbox\z@{$\m@th\nsucc$}%
-% \dimen@=1.1\ht\z@
-% \begin{picture}(\dimen@,.4ex)
-% \roundcap
-% \put(0,.2ex){\line(1,0){\dimen@}}
-% \put(\dimexpr 0.5\dimen@-.2ex\relax,0){\line(1,1){.4ex}}
-% \end{picture}%
-% }
\newcommand{\@precneq}{\mathrel{\vcenter{\hbox{\text{\prec@neq}}}}}
\newcommand{\prec@neq}{%
@@ -435,16 +436,6 @@
}%
}
-% \newcommand{\@nprecneq}{\mathrel{\vcenter{\hbox{\text{\nprec@neq}}}}}
-% \newcommand{\nprec@neq}{%
-% \dimen2=\f@size\dimexpr.04pt\relax
-% \oalign{%
-% \noalign{\kern\dimexpr.2ex-.5\dimen2\relax}
-% $\m@th\nprec$\cr
-% \noalign{\kern-.5\dimen2}
-% \hidewidth\not@pnrelbar\hidewidth\cr
-% }%
-% }
\newcommand{\@succneq}{\mathrel{\vcenter{\hbox{\text{\succ@neq}}}}}
\newcommand{\succ@neq}{%
@@ -457,16 +448,6 @@
}%
}
-% \newcommand{\@nsuccneq}{\mathrel{\vcenter{\hbox{\text{\nsucc@neq}}}}}
-% \newcommand{\nsucc@neq}{%
-% \dimen2=\f@size\dimexpr.04pt\relax
-% \oalign{%
-% \noalign{\kern\dimexpr.2ex-.5\dimen2\relax}
-% $\m@th\nprec$\cr
-% \noalign{\kern-.5\dimen2}
-% \hidewidth\not@snrelbar\hidewidth\cr
-% }%
-% }
\NewDocumentCommand{\subfun}{o}{\prec\IfNoValueTF{#1}{}{_{#1}}}
\NewDocumentCommand{\supfun}{o}{\succ\IfNoValueTF{#1}{}{_{#1}}}
@@ -485,6 +466,10 @@
\let\@recthy@reqscr\mathscr
\DeclareOptionX{reqscr}[mathscr]{\letcs{\@recthy@reqscr}{#1}}
+% \DeclareOptionX{beamerreq}[@recthy@EmptyStr@Default]{\letcs{\@recthy@EmptyStr}{#1}}
+
+\newcommand*{\@pmg@saveeqstate}{\let\@origif@fleqn@pmg=\if@fleqn \let\@origiftagsleft@pmg=\iftagsleft@}
+\newcommand*{\@pmg@restoreeqstate}{ \let\if@fleqn=\@origif@fleqn@pmg\let\iftagsleft@=\@origiftagsleft@pmg}
\AtEndOfPackage{
@@ -492,40 +477,29 @@
\@packinfo{Not loading requirement assist.}
\else
\@packinfo{Loading requirement assist.}
- \newcommand*{\req@orig}[3][]{\ensuremath{\ifthenelse{\isempty{#1}}{\@recthy@reqscr{#2}_{#3}}{\@recthy@reqscr{#2}^{#1}_{#3}}}}
+ % \newcommand*{\req@beamer}[3][]{\ensuremath{\@recthy@reqscr{#2}^{#1}_{#3}}}
+ \newcommand*{\req@orig}[3]{\ensuremath{\@ifmtarg{#1}{\@recthy@reqscr{#2}_{#3}}{\@recthy@reqscr{#2}_{#3}^{#1}}}}
+ \NewDocumentCommand{\req@nohref}{sO{}mO{}m}{\req@orig{#2#4}{#3}{#5}}
+ \NewDocumentCommand{\req@href}{O{}mO{}m}{\hyperref[\detokenize{req:#2@#1#3}]{\req@orig{#1#3}{#2}{#4}}}
- \NewDocumentCommand{\req@href}{O{}mO{}m}{\@ifundefined{hyperref}{\req@orig[#1#3]{#2}{#4}}{\hyperref[\detokenize{req:#2@#1#3}]{\req@orig[#1#3]{#2}{#4}}}}
- \NewDocumentCommand{\req@nohref}{O{}mO{}m}{\req@orig[#1#3]{#2}{#4}}
+ \NewDocumentCommand\req@href@star{s}{\IfBooleanTF#1{\req@nohref}{\req@href}}
+ \newcommand{\req}{\req@nohref}
\ifrecthy@hyperreqs
- \let\req=\req@href
- \else
- \let\req=\req@nohref
+ \AtBeginDocument{\@ifundefined{hyperref}{}{\let\req=\req@href@star}}
\fi
- \WithSuffix\def\req*{\req@nohref}
- % \newsavebox{\@recthy@reqbox}
- % \def\defreq#1#2\par{
- % \begin{equation}\let\veqno\@@leqno%
- % \tag*{#1}%
- % \begin{lrbox}{\@recthy@reqbox}%
- % \begin{minipage}{\textwidth}#2\end{minipage}%
- % \end{lrbox}%
- % \makebox[0pt]{\usebox{\@recthy@reqbox}}%
- % \end{equation}}
+
\newtagform{colon}{}{:}
+ % \@ifclassloaded{beamer}{\def\setmmonefivecm{\@mathmargin{1.5cm}}}{\def\setmmonefivecm{\setlength\@mathmargin{1.5cm}}}%
\newenvironment{requirement}[1]{
- \let\@origif@fleqn@pmg=\if@fleqn
- \let\@origiftagsleft@pmg=\iftagsleft@
+ \@pmg@saveeqstate
\@fleqntrue
\setlength\@mathmargin{1.5cm}
\tagsleft@true
\usetagform{colon}
- % \let\maketag@@@orig@pmg=\maketag@@@
- % \def\maketag@@@#1{\hbox{\m@th\normalfont#1:}}
\begin{equation}\tag{#1}
}{
\end{equation}
- \let\if@fleqn=\@origif@fleqn@pmg
- \let\iftagsleft@=\@origiftagsleft@pmg
+ \@pmg@restoreeqstate
\usetagform{default}
% \let\maketag@@@=\maketag@@@orig@pmg
}
@@ -535,26 +509,54 @@
}{
\end{requirement}%
}
- % \NewDocumentEnvironment{require*}{O{}mO{}m}{
- % \begin{requirement}{\req@nohref[#1#3]{#2}{#4}}%
- % }{
- % \end{requirement}%
- % }
+ \NewDocumentEnvironment{require*}{O{}mO{}m}{
+ \begin{requirement}{\req@nohref[#1#3]{#2}{#4}}
+ }{
+ \end{requirement}%
+ }
+
+
+
\NewDocumentCommand{\refreq}{O{}mO{}}{\ref{\detokenize{req:#2@#1#3}}}
\NewDocumentCommand{\require@nested}{sO{}mO{}m}{
- \IfBooleanTF{#1}{\tag{\req@nohref[#2#4]{#3}{#5}}}{\tag{\req@nohref[#2#4]{#3}{#5}}\label{\detokenize{req:#3@#2#4}}}
+ \tag{\req@nohref[#2#4]{#3}{#5}}\IfBooleanTF{#1}{}{\label{\detokenize{req:#3@#2#4}}}
}
- % \newcommand*{\require@nested}{\require@nested@href}
- % \WithSuffix\def\require@nested*{\require@nested@nohref}
- % \NewDocumentEnvironment{require*}{O{}mO{}m}{
- % \tag{\req@nohref[#1#3]{#2}{#4}}%
- % }{}
- \NewDocumentEnvironment{requirements}{}{
- \let\@origif@fleqn@pmg=\if@fleqn
- \let\@origiftagsleft@pmg=\iftagsleft@
+
+\ifrecthy@beamersupp
+ \newtheorem{reqblock}{Requirements}
+ \let\OLDreqblock=\reqblock
+ \def\reqblock{%
+ \setbeamercolor{block title}{fg=white,bg=Maroon}%
+ \setbeamercolor{block body}{fg=black,bg=Maroon!10}\OLDreqblock
+ }
+
+ \NewDocumentCommand{\require@beamer}{sO{}mO{}m}{\tag{$\@ifmtarg{#2#4}{\mathscr{#3}_{#5}}{\mathscr{#3}_{#5}^{#2#4}}$} \IfBooleanTF{#1}{}{\label{\detokenize{req:#3@#2#4}}} & }
+
+ \NewDocumentEnvironment{BeamerRequirements}{d<>b}{\IfValueTF{#1}{\begin{reqblock}<#1>}{\begin{reqblock}}%
+ \vspace*{-.5cm}
+ \usetagform{colon} %
+ \let\myhalign\halign%
+ \def\halign{\let\mylb\\ \renewcommand{\\}{& \mylb}\myhalign}%
+ \let\require=\require@beamer %
+ \begin{flalign*}%
+ #2 &
+ \end{flalign*}%
+ \end{reqblock}}{}
+
+ \NewDocumentEnvironment{requirements}{b}{\usetagform{colon} %
+ \let\myhalign\halign%
+ \def\halign{\let\mylb\\ \renewcommand{\\}{& \mylb}\myhalign}%
+ \let\require=\require@beamer %
+ \begin{flalign*}%
+ #1 &
+ \end{flalign*}}{}
+ \else
+
+ \NewDocumentEnvironment{requirements}{}{
+ \@pmg@saveeqstate
\@fleqntrue
\setlength\@mathmargin{1.5cm}
\tagsleft@true
@@ -565,12 +567,14 @@
\gather
}{
\endgather
- \let\if@fleqn=\@origif@fleqn@pmg
- \let\iftagsleft@=\@origiftagsleft@pmg
+ \@pmg@restoreeqstate
\usetagform{default}
% \let\maketag@@@=\maketag@@@orig@pmg
}
+ \fi
+
+
\fi
}
@@ -663,15 +667,14 @@
\providecommand*{\restr}[1]{\mathpunct{\restriction_{#1}}}
\providecommand*{\ordpair}[2]{\left( #1, #2 \right) }
%%%%%%%%Function commands
- \let\recthy@rollback@threeTwo@threeOne@REA@mathsave=\recthy@rollback@threeTwo@threeOne@REA
- \renewcommand*{\recthy@rollback@threeTwo@threeOne@REA}{
+
+ \appto{\recthy@rollback@threeTwo}{
\providecommand*{\map}[2]{:##1\mapsto ##2}
\providecommand*{\functo}[3]{##1\map{##2}{##3}}
\ifdefined\funcomp
\else
\let\funcomp=\compfunc
\fi
- \recthy@rollback@threeTwo@threeOne@REA@mathsave
}
\providecommand*{\compfunc}{\mathbin{\circ}}
@@ -719,8 +722,8 @@
\fi
}
-\newcommand*{\@recthy@llangle}{\mathopen{\langle\!\langle}}
-\newcommand*{\@recthy@rrangle}{\mathclose{\rangle\!\rangle}}
+\newcommand*{\@recthy@llangle}{\langle\!\langle}
+\newcommand*{\@recthy@rrangle}{\rangle\!\rangle}
@@ -758,8 +761,11 @@
\newcommand*{\godelnum}[1]{\left\ulcorner #1 \right\urcorner}
\let\cornerquote=\godelnum
\let\gcode=\godelnum
- \recthy@strip{llangle}
- \recthy@strip{rrangle}
+ \ifrecthy@nodoubleangles
+ \else
+ \let\llangle=\@recthy@llangle
+ \let\rrangle=\@recthy@rrangle
+ \fi
\fi
}
@@ -779,9 +785,9 @@
\newcommand*{\@recthy@ComputablyEnumerable}{\@recthy@ensuretext{Computably enumerable}}
\def\@recthy@REA{REA}
\def\@recthy@CEA{CEA}
-
-\NewDocumentCommand{\REA}{d()o}{\ensuremath{\IfValueTF{#2}{#2-}{}\text{\@recthy@REA}\IfValueTF{#1}{[#1]}{}}}
-\NewDocumentCommand{\CEA}{d()o}{\ensuremath{\IfValueTF{#2}{#2-}{}\text{\@recthy@CEA}\IfValueTF{#1}{[#1]}{}}}
+\mathchardef\@recthy@mhyphen="2D % Define a "math hyphen"
+\NewDocumentCommand{\REA}{d()o}{\ensuremath{\IfValueTF{#2}{#2 \@recthy@mhyphen}{}\text{\@recthy@REA}\IfValueTF{#1}{(#1)}{}}}
+\NewDocumentCommand{\CEA}{d()o}{\ensuremath{\IfValueTF{#2}{#2 \@recthy@mhyphen}{}\text{\@recthy@CEA}\IfValueTF{#1}{(#1)}{}}}
% \newcommand*{\@recthy@REA}{\ensuremath{\text{REA}}}
% \WithSuffix\def\@recthy@REA[#1]{#1-\@recthy@REA\relax}
@@ -857,8 +863,6 @@
\newcommand*{\@recthy@nin}{\notin}
\newcommand*{\@recthy@powset}[1]{\mathcal{P}\left(#1\right)}
\newcommand*{\@recthy@eset}{\emptyset}
-% \newcommand*{\@recthy@setcmpminusSYM}{\backsim}
-% \newcommand*{\@recthy@setminuscmp}[1]{\mathop{\@recthy@setcmpminusSYM} #1}
\newcommand*{\@recthy@setovercmp}[1]{\overline{#1}}
\newcommand*{\@recthy@setsimcmp}[1]{\backsim #1}
\let\@recthy@setcmp=\@recthy@setovercmp
@@ -918,6 +922,8 @@
\let\forall@orig@recthy=\forall
\newcommand*{\exists@recthy}{\exists@orig@recthy}
\newcommand*{\forall@recthy}{\forall@orig@recthy}
+ % \NewDocumentCommand{\exists@paren@recthy}{O{}m}{\left(\exists@orig@recthy^{#1} #2 \right)\!}
+ % \NewDocumentCommand{\exists@brak@recthy}{O{}m}{\left[\exists@orig@recthy^{#1} #2 \right]\!}
\let\nexists@orig@recthy=\nexists
\newcommand*{\nexists@recthy}{\nexists@orig@recthy}
\let\nforall@orig@recthy=\nforall
@@ -925,7 +931,6 @@
\newcommand*{\existsuniq}{\exists@orig@recthy !}
\newcommand*{\nexistsuniq}{\nexists@orig@recthy !}
- \NewDocumentCommand{\axset}{D<>{}d()O{}d()}
\WithSuffix\def\existsuniq(#1){\left(\existsuniq #1 \right)\!}
\WithSuffix\def\nexistsuniq(#1){\left(\nexistsuniq #1 \right)\!}
\WithSuffix\def\existsuniq[#1]{\left[\existsuniq #1 \right]\!}
@@ -947,7 +952,9 @@
\WithSuffix\def\nexistsinf(#1){\left(\nexistsinf #1\right)\!}
\WithSuffix\def\nexistsinf[#1]{\left[\nexistsinf #1\right]\!}
+
\WithSuffix\def\exists@recthy(#1){\left(\exists #1 \right)\!}
+ % \NewDocumentCommand{\exists@recthy}{d()od()o}{\IfValueTF{#1}{\exists@paren@recthy{#1}}{\IfValueTF{#1}{\exists@brak@recthy{#2}} } }
\WithSuffix\def\forall@recthy(#1){\left(\forall #1 \right)\!}
\WithSuffix\def\nexists@recthy(#1){\left(\nexists #1 \right)\!}
\WithSuffix\def\exists@recthy[#1]{\left[\exists #1 \right]\!}
@@ -1001,51 +1008,8 @@
}
-%Strings
-\def\@recthy@concatSYM@Default{\widehat{\phantom{X}}}
-\def\@recthy@EmptyStr@Default{\mathopen{\langle}\mathclose{\rangle}}
-\let\@recthy@concatSYM\@recthy@concatSYM@Default
-\let\@recthy@EmptyStr\@recthy@EmptyStr@Default
-\DeclareOptionX{emptystr}[@recthy@EmptyStr@Default]{\letcs{\@recthy@EmptyStr}{#1}}
-\DeclareOptionX{concatsym}[@recthy@concatSYM@Default]{\letcs{\@recthy@concatSYM}{#1}}
-\newcommand*{\@recthy@pair}[2]{\mathopen{\@recthy@llangle} #1, #2 \mathclose{\@recthy@rrangle}}
-\NewDocumentCommand{\incompat@recthy}{o}{\mathrel{\mid}\IfValueTF{#1}{_{#1}}{}}
-\NewDocumentCommand{\compat@recthy}{o}{\mathrel{\not\mid}\IfValueTF{#1}{_{#1}}{}}
-
-\AtEndOfPackage{
-\ifrecthy@nostrings
- \@packinfo{No strings loading.}
-\else
- \@packinfo{Strings loading.}
- \newcommand*{\closedn}[1]{{#1}^\blacktriangledown}
- \newcommand*{\str}[1]{\mathopen{\langle}#1\mathclose{\rangle}}
- \newcommand*{\code}[1]{\mathopen{\@recthy@llangle}#1\mathclose{\@recthy@rrangle}}
- \newcommand*{\EmptyStr}{\@recthy@EmptyStr}
- \newcommand*{\estr}{\EmptyStr}
- \newcommand*{\decode}[2]{(#1)_{#2}}
- \let\godelpair=\@recthy@pair
- \let\gpair=\@recthy@pair
- \newcommand*{\concat}{\@recthy@concatSYM}
- \WithSuffix\def\concat[#1]{\concat\str{#1}}
- \newcommand*{\strpred}[1]{{#1}^{-}}
- \providecommand*{\lh}[2][]{\@recthy@abs{#2}_{#1}} %% Gives length of a string
-
- \providecommand*{\incompat}{\incompat@recthy} %incompatible stringes FIX SPACING
- \providecommand*{\incomp}{\incompat@recthy}
- \providecommand*{\compat}{\compat@recthy}
- \providecommand*{\nincompat}{\compat@recthy}
- \providecommand*{\nincomp}{\compat@recthy}
- \newcommand*{\setcol}[2]{{#1}^{[#2]}}
- \ifrecthy@nopair
- \@packinfo{No redefining pair.}
- \else
- \@packinfo{pair=godelpair.}
- \let\pair=\@recthy@pair
- \fi
-\fi
-}
\AtEndOfPackage{
\ifrecthy@notrees
@@ -1688,7 +1652,13 @@
% \newcommand*{\recf}[3][]{\@recthy@recfSYM^{#1}_{#2}\ifthenelse{\isempty{#3}}{}{\left(#3\right)}} %If give an empty arg just print function no parens
%\newcommand*{\brecf}[3][]{\brecfSYM^{#1}_{#2}\ifthenelse{\isempty{#3}}{}{\left(#3\right)}}
%\recfnl[d]{i}{Y}{x} gives i-th d-recursive functional operating on set Y and integer x
- \newcommand*{\recfnl}[4][]{\@recthy@recfnlSYM_{#2\ifthenelse{\isempty{#1}}{}{,{#1}} }%
+
+ \NewDocumentCommand{\recfnl@improved}{omm!g!d()}{{
+ \def\temp@pmg@arg{}
+ \IfValueTF{#4}{\ifthenelse{\isempty{#4}}{}{\def\temp@pmg@arg{; #4}}}{\IfValueTF{#5}{\ifthenelse{\isempty{#5}}{}{\def\temp@pmg@arg{; #5}}}}
+ \@recthy@recfnlSYM_{#2\IfValueT{#1}{, #1}}\ifthenelse{\isempty{#3}}{}{\!\left(#3\temp@pmg@arg \right)}
+ }}
+ \newcommand*{\recfnl@old}[4][]{\@recthy@recfnlSYM_{#2\ifthenelse{\isempty{#1}}{}{,{#1}} }%
\ifthenelse{\isempty{#4}}%
{\ifthenelse{\isempty{#3}}%
{}% No args then print no parents
@@ -1696,6 +1666,10 @@
}%If no oracle we just refer to the functional without any arguments
{\ifthenelse{\isempty{#3}}{(#4)}{(#3;#4)}%
}}
+ \let\recfnl=\recfnl@improved
+ \appto{\recthy@rollback@threeSix}{
+ \let\recfnl=\recfnl@old
+ }
\NewDocumentCommand{\recf}{od()md()}{
\@recthy@recfSYM_{#3\IfNoValueTF{#1}{}{\ifthenelse{\isempty{#3}}{}{, }{#1}}}\IfNoValueTF{#2}{}{^{#2}}\IfNoValueTF{#4}{}{(#4)}
}
@@ -1746,10 +1720,9 @@
% \NewDocumentCommand{\nconv}{o}{\mathpunct{\mkern-4mu{\arrownot\mkern 4mu \downarrow}_{#1}}}
\NewDocumentCommand{\nconv}{O{}}{\mathpunct{\mkern-4mu{\smallsetminus\mkern 4mu \downarrow}_{#1}}}
\newcommand*{\diverge}{\mathpunct{\uparrow}}
- % \newcommand*{\use}[2]{\mathscr{u}(#1\ifthenelse{\isempty{#2}}{}{,#2})}
\newcommand*{\use}[1]{\mathop{\@recthy@useSYM}\left[#1\right]}
% \newcommand*{\use}[1]{\ltx@ifpackageloaded{unicode-math}{\symbffrak{u}}{\mathfrak{u}}\left(#1\right)}
- % \NewDocumentCommand{\REset}{omd()}{
+ % \NewDocumentCommand{\REset}{D(){}omd()}{
% W_{#2\IfNoValueTF{#1}{}{, #1}}\IfNoValueTF{#3}{}{^{#3}}
% }
@@ -1764,20 +1737,27 @@
\fi}
\WithSuffix\def\@REsetbody(#1){\def\@PMG@parenarg{#1}\@REsetbody}
\WithSuffix\def\@REsetbody[#1]{\def\@PMG@braketarg{#1}\@REsetbody}
- \NewDocumentCommand{\REAop}{st+d()od()mm}{{\IfBooleanTF{#1}{\mathcal{J}}{\widehat{\mathcal{J}}}}^{\IfBooleanTF{#1}{\vphantom{x}^\dagger}{}#7}_{#6\IfValueTF{#4}{, #4}{}} \IfValueTF{#3}{\left(#3\right)}{\IfValueTF{#5}{\left(#5\right)}{}}}
- \NewDocumentCommand{\oneREAop}{st+d()od()m}{{\IfBooleanTF{#1}{\mathcal{J}}{\widehat{\mathcal{J}}}}^{\IfBooleanTF{#1}{\vphantom{x}^\dagger}{}}_{#6\IfValueTF{#4}{, #4}{}} \IfValueTF{#3}{\left(#3\right)}{\IfValueTF{#5}{\left(#5\right)}{}}}
+ \NewDocumentCommand{\Hop}{oD(){}mD(){}}{\mathcal{H}_{#3\IfValueTF{#1}{, #1}{}}\left(\ifthenelse{\isempty{#2#4}}{\eset}{#2#4} \right)}
+ \NewDocumentCommand{\REAop}{st+d()od()mm}{%
+ {\IfBooleanTF{#1}%
+ {\mathcal{J}}%
+ {\widehat{\mathcal{J}}}%
+ }^{%
+ \IfBooleanTF{#2}{\vphantom{x}^\dagger}{}%
+ #7}_{#6\IfValueTF{#4}{, #4}{}}%
+ \IfValueTF{#3}{\left(#3\right)}{\IfValueTF{#5}{\left(#5\right)}{}}%
+ }
+ \NewDocumentCommand{\oneREAop}{st+d()od()m}{{\IfBooleanTF{#1}{\mathcal{J}}{\widehat{\mathcal{J}}}}^{\IfBooleanTF{#1}{\vphantom{x}^\dagger}{}}_{#6\IfValueTF{#4}{, #4}{}} \IfValueTF{#3}{\left(#3\right)}{\IfValueTF{#5}{\left(#5\right)}{}}}
\let\iREAop=\oneREAop
\newcommand*{\entersat}[1]{\mathbin{\searrow_{#1}}}
% \newcommand*{\alphaREAop}[2][]{\mathcal{J}^{#2}_{#1}}
- \let\recthy@rollback@threeTwo@threeOne@REA@computationssave=\recthy@rollback@threeTwo@threeOne@REA
- \renewcommand*{\recthy@rollback@threeTwo@threeOne@REA}{
+ \appto{\recthy@rollback@threeTwo}{
\let\reaop=\REAop
\let\alphaREAop=\REAop
\let\aREAop=\alphaREAop
- \recthy@rollback@threeTwo@threeOne@REA@computationssave
}
@@ -1878,6 +1858,25 @@
}
+%Strings
+ \def\@recthy@concatSYM@Default{\widehat{\phantom{X}}}
+ \def\@recthy@EmptyStr@Default{\mathopen{\langle}\mathclose{\rangle}}
+ \let\@recthy@concatSYM\@recthy@concatSYM@Default
+ \let\@recthy@EmptyStr\@recthy@EmptyStr@Default
+
+ \DeclareOptionX{emptystr}[@recthy@EmptyStr@Default]{\letcs{\@recthy@EmptyStr}{#1}}
+ \DeclareOptionX{concatsym}[@recthy@concatSYM@Default]{\letcs{\@recthy@concatSYM}{#1}}
+ \newcommand*{\@recthy@pair}[2]{\mathopen{\langle} #1, #2 \mathclose{\rangle}}
+ \newcommand*{\@recthy@str}[1]{\mathopen{\langle}#1\mathclose{\rangle}}
+ \newcommand*{\@recthy@code}[1]{\mathopen{\langle}#1\mathclose{\rangle}}
+
+ \appto{\recthy@rollback@threeSix}{
+ \renewcommand*{\@recthy@pair}[2]{\mathopen{\@recthy@llangle} #1, #2 \mathclose{\@recthy@rrangle}}
+ \def\@recthy@EmptyStr@Default{\mathopen{\langle}\mathclose{\rangle}}
+ % \renewcommand*{\@recthy@str}[1]{\mathopen{\langle}#1\mathclose{\rangle}}
+ \renewcommand*{\@recthy@code}[1]{\mathopen{\@recthy@llangle}#1\mathclose{\@recthy@rrangle}}
+ \newcommand*{\closedn}[1]{{#1}^\blacktriangledown}
+ }
% \ProcessOptions*
% \ProcessOptionsX<\@recthy@family>
@@ -1886,6 +1885,62 @@
+\NewDocumentCommand{\incompat@recthy}{o}{\mathrel{\mid}\IfValueTF{#1}{_{#1}}{}}
+\NewDocumentCommand{\compat@recthy}{o}{\mathrel{\not\mid}\IfValueTF{#1}{_{#1}}{}}
+
+\ifrecthy@nostrings
+ \@packinfo{No strings loading.}
+\else
+ \@packinfo{Strings loading.}
+ \let\code=\@recthy@code
+ \let\str=\@recthy@str
+ \newcommand*{\EmptyStr}{\@recthy@EmptyStr}
+ \newcommand*{\estr}{\EmptyStr}
+ \newcommand*{\decode}[2]{(#1)_{#2}}
+ \let\godelpair=\@recthy@pair
+ \let\gpair=\@recthy@pair
+ \newcommand*{\concat}{\@recthy@concatSYM}
+ \WithSuffix\def\concat[#1]{\concat\str{#1}}
+ \newcommand*{\strpred}[1]{{#1}^{-}}
+ \providecommand*{\lh}[2][]{\@recthy@abs{#2}_{#1}} %% Gives length of a string
+
+ \providecommand*{\incompat}{\incompat@recthy} %incompatible stringes FIX SPACING
+ \providecommand*{\incomp}{\incompat@recthy}
+ \providecommand*{\compat}{\compat@recthy}
+ \providecommand*{\nincompat}{\compat@recthy}
+ \providecommand*{\nincomp}{\compat@recthy}
+ % \newcommand*{\setcol}[2]{{#1}^{[#2]}}
+ \ExplSyntaxOn %thx stackexghance
+ \NewDocumentCommand \setcol {m m}
+ {
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn { \tl_count:n {#1} } = 3 }
+ { \tl_if_head_eq_meaning_p:nN {#1} \setcol }
+ {
+ \pgerdes_setcol_special:nnnn #1 {#2}
+ }
+ {
+ \pgerdes_setcol_normal:nn {#1} {#2}
+ }
+ }
+ \cs_new:Npn \pgerdes_setcol_special:nnnn #1 #2 #3 #4
+ {
+ {#2} \sp { [#3] [#4] }
+ }
+ \cs_new:Npn \pgerdes_setcol_normal:nn #1 #2
+ {
+ {#1} \sp { [#2] }
+ }
+ \ExplSyntaxOff
+
+ \ifrecthy@nopair
+ \@packinfo{No redefining pair.}
+ \else
+ \@packinfo{pair=godelpair.}
+ \let\pair=\@recthy@pair
+ \fi
+\fi
+
diff --git a/macros/latex/contrib/rec-thy/rec-thy.tex b/macros/latex/contrib/rec-thy/rec-thy.tex
index e43e148ec3..a73dc445e8 100644
--- a/macros/latex/contrib/rec-thy/rec-thy.tex
+++ b/macros/latex/contrib/rec-thy/rec-thy.tex
@@ -49,7 +49,6 @@
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{xtab}
-\usepackage[suppPriorityTrees]{rec-thy}
\usepackage{suffix}
\usepackage{metalogo}
@@ -60,6 +59,17 @@
% Running Headers and footers
%\usepackage{fancyhdr}
\usepackage[parfill]{parskip}
+\usepackage{etoolbox}
+\makeatletter
+\patchcmd{\@maketitle}
+ {\ifx\@empty\@dedicatory}
+ {\ifx\@empty\@date \else {\vskip3ex \centering\footnotesize\@date\par\vskip1ex}\fi
+ \ifx\@empty\@dedicatory}
+ {}{}
+\patchcmd{\@adminfootnotes}
+ {\ifx\@empty\@date\else \@footnotetext{\@setdate}\fi}
+ {}{}{}
+\makeatother
%\usepackage{setspace}
% Multipart figures
@@ -78,7 +88,7 @@
%\usepackage[pdftex]{graphicx}
%\DeclareGraphicsExtensions{.pdf, .jpg, .tif}
-
+\usepackage[suppPriorityTrees]{rec-thy}
\title{The rec-thy Package}
\author{Peter M. Gerdes (gerdes@invariant.org)}
\date{\DateOfPackage{rec-thy}: Version \recthyVersion}
@@ -125,6 +135,7 @@ While the symbols used by default in the package are suggested for adoption to a
\item[recfsym] Sets the symbol used for recursive functions. Default is \( \phi \).
\item[usesym] Sets the symbol used for the use operator. Default is \( \symbffrak{u} \) where this is printed using \verb=\symbfrak= if unicode-math is loaded and with \verb=\mathfrak= otherwise.
\item[ballsymb] Sets the symbol used for the ball command. Default is \( \mathscr{B} \).
+ \item[nodoubleangles] Prevents redefinition of \verb=\rrangle= and \verb=\llangle= with versions that use the repeated angle brackets e.g., lets you use the weird XITS versions.
\end{itemize}
As an example of how to use these commands consider the following code changing the ball symbol to \( \mathbf{B} \).
@@ -193,10 +204,14 @@ To disable these commands pass the option \verb=nocomputations=. \\ To specify
\verb=\recfnl{e}{}{x}\nconv= & \( \recfnl{e}{}{x}\nconv \) &\multirow{2}{*}{Divergence} \\[6pt]
\tab \verb=\recfnl{e}{}{x}\nconv[s]= & \( \recfnl{e}{}{x}\nconv[s] \) & \\ \midrule
\verb=\use{\recfnl{e}{Y}{x}}= & \( \use{\recfnl{e}{Y}{x}} \) & Use of a computation. \\ \midrule
- \verb=\REset{e}= & \( \REset{e} \) & \multirow{4}{*}{c.e. sets} \\[6pt]
- \verb=\REset[s]{e}= & \( \REset[s]{e} \) & \\[6pt]
- \verb=\REset(X){e}= & \( \REset(X){e} \) & \\[6pt]
- \verb=\REset[s](X){e}= & \( \REset[s](X){e} \) & \\ \midrule
+ \verb=\REset{e}= & \( \REset{e} \) & \multirow{4}{*}{c.e. sets} \\[6pt]
+ \verb=\REset[s]{e}= & \( \REset[s]{e} \) & \\[6pt]
+ \verb=\REset(X){e}= & \( \REset(X){e} \) & \\[6pt]
+ \verb=\REset[s](X){e}= & \( \REset[s](X){e} \) & \\ \midrule
+ \verb=\Hop{e}(X)= & \( \Hop{e}(X) \) & \multirow{4}{*}{Hop sets} \\[6pt]
+ \verb=\Hop[s](X){e}= & \( \Hop[s](X){e} \) & \\[6pt]
+ \verb=\Hop[s]{e}= & \( \Hop[s]{e} \) & \\[6pt]
+ \verb=\Hop{e}= & \( \Hop{e} \) & \\ \midrule
\verb=\iREAop{e}(\eset)= & \multirow{2}{*}{\( \iREAop{e}(\eset) \)} &\multirow{2}{*}{1-REA operator} \\
\tab \verb=\oneREAop{e}(\eset)= & & \\ \midrule
% \verb=\alphaREAop{\alpha}(\eset)= & \multirow{2}{*}{\( \alphaREAop{\alpha}(\eset) \)} &\multirow{2}{*}{\( \alpha \)-REA operator} \\[6pt]
@@ -260,7 +275,7 @@ To disable these commands pass the option \verb=nodegrees=. \\
\makeatletter
\subsection{Requirement Assistance}
To disable these commands pass the option \verb=noreqhelper=. To disable the hyperlinked requirements pass \verb=nohyperreqs=\\
-Math mode is not required for \verb=\req{R}{e\}=
+Math mode is not required for \verb=\req{R}{e}=
\begin{tabular}{l | l | l}\toprule
\verb=\req{R}{e}= & \( \req{R}{e} \) & \multirow{3}{*}{Requirement } \\ \midrule
@@ -572,7 +587,7 @@ To disable these commands pass the option \verb=noforcing=.\\
\subsection{Syntax}
To disable these commands pass the option \verb=nosyntax=.\\ All syntax classes can be relativized with an optional argument in square brackets even when not listed below. Only the \( \Delta \) formula classes are listed below since the syntax is identical for \( \Sigma \) and \( \Pi \). Capitalizing the first letter gives the boldface version in all cases (except the computable infinitary formulas as this doesn't make sense). Not all formulas/abbreviations are demonstrated below given the huge number but the enough are included to make it clear what command is required to generate the desired formula class, e.g., substituting pi for delta does what you think it does.
-To change the syntax for the computable infinitary formulas you can pass the options \verb!cdeltasym=macroname!, \verb!csigmasym=macroname! and \verb!cpisym=macroname! where macroname is the name (without the leading \\) of the macro giving the desired symbol to use for the relevant class.
+To change the syntax for the computable infinitary formulas you can pass the options \verb!cdeltasym=macroname!, \verb!csigmasym=macroname! and \verb!cpisym=macroname! where macroname is the name (without the leading \verb=\=) of the macro giving the desired symbol to use for the relevant class.
\begin{xtabular}{l | l | l}\toprule
\verb=\Cdeltan[X]{\alpha}= & \( \Cdeltan[X]{2} \) & The computable \( \delta^{X}_\alpha \) formulas \\ \midrule
@@ -685,6 +700,8 @@ Finally to enable the mrref helper macros pass the option \verb=mrref=.\\ These
% TESTING: \verb=\fpmapsto=, \verb=\fpmapsfrom=, \verb=\ParFuncs{Y}{X}= and \verb=\FinParFuncs{Y}{X}=
\begin{itemize}
+ \item[3.6] Fixed \verb=\REA[n]= so that dash is shorter. Added BeamerRequirements to add a block for requirements in beamer and fixed the requirements environment for beamer. Fixed \verb=\req*= error. Improved syntax for \verb=\recfnl= so it can accept a parenthesis delimited argument as the oracle. Improved \verb=\setcol= to allow it to be used in a nested fashion without typesetting bugs. Changed the \verb=\code= and \verb=\pair= commands to use only a single angle bracket.
+ \item[3.5] Added \verb=\Hop= and misc code cleanup.
\item[3.4] Eliminated dependence on undertilde which is missing from texlive
\item[3.3.1] Fixed typo causing error under pdflatex.
\item[3.3] - Fixed/added tweak to overline so it looks correct. Also added real symbols so that \verb=\subfunneq= and \verb=\supfunneq= can be defined appropriately. Added \verb=\floor= and \verb=\ceil=. Note these aren't yet shown off in package doc. Fixed incorrect use of tiny in math mode.
diff --git a/macros/xetex/latex/xespotcolor/README b/macros/xetex/latex/xespotcolor/README
index 3b34d1e477..979d74385f 100644
--- a/macros/xetex/latex/xespotcolor/README
+++ b/macros/xetex/latex/xespotcolor/README
@@ -5,9 +5,12 @@ by Jens Elstner is a first attempt to introduce the use of
spot colors with pdfLaTeX. The xespotcolor package is a
reimplementation of this package so to be usable with
XeLaTeX or LaTeX+dvipdfmx. As such, it has the same user
-interface and the same capabilities. Version 2.0a adds
+interface and the same capabilities. Version 2.0a added
support for the xcolor package and so one can use
-spotcolors in TikZ pictures.
+spotcolors in TikZ pictures. In this version one can
+safely use spotcolors with the tcolorbox package and
+I have updated the package so to use the correct shipout
+hook provided by the LaTeX kernel.
Apostolos Syropoulos
-2016/03/22
+2021/03/01
diff --git a/macros/xetex/latex/xespotcolor/jatestspot.pdf b/macros/xetex/latex/xespotcolor/jatestspot.pdf
index c681db61f2..a7e22f6fc5 100644
--- a/macros/xetex/latex/xespotcolor/jatestspot.pdf
+++ b/macros/xetex/latex/xespotcolor/jatestspot.pdf
Binary files differ
diff --git a/macros/xetex/latex/xespotcolor/spotcolor-test.pdf b/macros/xetex/latex/xespotcolor/spotcolor-test.pdf
index 8e4de76e79..ef2b8390c2 100644
--- a/macros/xetex/latex/xespotcolor/spotcolor-test.pdf
+++ b/macros/xetex/latex/xespotcolor/spotcolor-test.pdf
Binary files differ
diff --git a/macros/xetex/latex/xespotcolor/xespotcolor.dtx b/macros/xetex/latex/xespotcolor/xespotcolor.dtx
index 88cf2450ed..570c1cc536 100644
--- a/macros/xetex/latex/xespotcolor/xespotcolor.dtx
+++ b/macros/xetex/latex/xespotcolor/xespotcolor.dtx
@@ -16,7 +16,7 @@
%%
%\iffalse
%
-% (c) Copyright 2014-2016 Apostolos Syropoulos
+% (c) Copyright 2014-2021 Apostolos Syropoulos
% This program can be redistributed and/or modified under the
% terms of the LaTeX Project Public License Distributed from
% http://www.latex-project.org/lppl.txt; either
@@ -29,12 +29,12 @@
% Apostolos Syropoulos (asyropoulos@yahoo.com)
%
%\fi
-% \CheckSum{184}
+% \CheckSum{187}
% \iffalse This is a Metacomment
%
%<xespotcolor, >\ProvidesFile{xesporcolor.sty}
%
-%<xespotcolor, > [2016/03/22 v2.0a Package `xespotcolor.sty']
+%<xespotcolor, > [2021/03/01 v2.1 Package `xespotcolor.sty']
%
% \begin{macrocode}
%<*driver>
@@ -58,7 +58,7 @@
% (Apostolos Syropoulos)\\
% Xanthi, Greece\\
% \texttt{asyropoulos@yahoo.com}}
-% \date{2016/03/22}
+% \date{2016/03/22\\updated 2021/03/01}
%\maketitle
% \begin{abstract}
% A spot color is one that is printed with its own ink. Typically, printers use spot colors
@@ -145,7 +145,7 @@
%<*xespotcolor>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xespotcolor}
- [2016/03/22 v.2.0a, Package for adding Spot Color support to LaTeX/XeLaTeX.]
+ [2021/03/01 v.2.1, Package for adding Spot Color support to LaTeX/XeLaTeX.]
% \end{macrocode}
% The package needs three packages in order to operate properly: the \textsf{graphics} package, the
% \textsf{everypage} package, and either the package \textsf{color} or the package \textsf{xcolor}.
@@ -153,10 +153,9 @@
% rely on package \textsf{xcolor}. Akira Kakuto has discovered that this package can be used with
% either \LaTeX\ or \XeLaTeX\ and the \texttt{dvipdfmx}/\texttt{xdvipdfmx} driver, respectively.
% However, in order to properly load the various packages it is necessary to know which typesetting
-% engine is being used. A simple solution is to use the \textsf{ifxetex} package:
+% engine is being used. A simple solution is to use the \textsf{iftex} package:
% \begin{macrocode}
-\RequirePackage{ifxetex}
-\RequirePackage{everypage}
+\RequirePackage{iftex}
% \end{macrocode}
% Before proceeding it is also necessary to know if the package \textsf{xcolor} has been loaded
% (package \textsf{color} is loaded by default). The following command check if \textsf{xcolor}
@@ -195,10 +194,11 @@
\@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}
\fi\fi
% \end{macrocode}
-% The following command should be executed only when using \textsf{TikZ}. Thus, always load this
-% package after loading package \textsf{TikZ}.
+% The following command should be executed only when using \textsf{TikZ} and/or \textsf{tcolorbox}. Thus, always
+% load this package after loading \textsf{TikZ} and/or \textsf{tcolorbox}.
% \begin{macrocode}
\@ifpackageloaded{tikz}{\global\pgf@sys@pdf@colorspaces@existsfalse}{}
+\@ifpackageloaded{tcolorbox}{\global\pgf@sys@pdf@colorspaces@existsfalse}{}
% \end{macrocode}
% The |\NewSpotColorSpace| command should be used to define a new color space for spot colors. The new color
% space can be any imaginable word! This color space is the place where a new spot color will live. The
@@ -272,11 +272,13 @@
%
% Command |\SetPageColorResource| is used by command |\SetPageColorSpace| to set the color space.
% The |\special| command below sets the page resources only for the current page. Since the color
-% space should be visible to every subsequent page, I have opted to use command the |\AddEverypageHook|
-% command provided by the \textsf{everypage} package.
+% space should be visible to every subsequent page, initially I had opted to use command the |\AddEverypageHook|
+% command provided by the \textsf{everypage} package. However, since the latest version of \LaTeX\ defines
+% hooks, I had to use the new \texttt{shipout/background} hook.
% \begin{macrocode}
\def\SetPageColorResource#1{%
- \AddEverypageHook{\special{pdf:put @resources <</ColorSpace <<#1>>>>}}%
+ \AddToHook{shipout/background}{\put(1in,-1in){%
+ \special{pdf:put @resources <</ColorSpace <<#1>>>>}}}%
}%
\def\SetPageColorSpace#1{%
\expandafter\SetPageColorResource\expandafter{\the\csname #1\endcsname}%
diff --git a/macros/xetex/latex/xespotcolor/xespotcolor.ins b/macros/xetex/latex/xespotcolor/xespotcolor.ins
index 87a72bfb1f..f0379837ac 100644
--- a/macros/xetex/latex/xespotcolor/xespotcolor.ins
+++ b/macros/xetex/latex/xespotcolor/xespotcolor.ins
@@ -1,9 +1,9 @@
-%% Copyright 2014-2016 Apostolos Syropoulos
+%% Copyright 2014-2021 Apostolos Syropoulos
%%
%% This file is part of the `xespotcolor' package.
%% You are not allowed to modify its contents.
%%
-\def\filedate{2016/03/22}
+\def\filedate{2021/03/01}
\def\batchfile{xespotcolor.ins}
\input docstrip.tex
@@ -24,7 +24,7 @@
\preamble
- (c) Copyright 2014-2016 Apostolos Syropoulos
+ (c) Copyright 2014-2021 Apostolos Syropoulos
This program can be redistributed and/or modified under the
terms of the LaTeX Project Public License Distributed from
http://www.latex-project.org/lppl.txt; either
diff --git a/macros/xetex/latex/xespotcolor/xespotcolor.pdf b/macros/xetex/latex/xespotcolor/xespotcolor.pdf
index 6df553415e..9925c3b168 100644
--- a/macros/xetex/latex/xespotcolor/xespotcolor.pdf
+++ b/macros/xetex/latex/xespotcolor/xespotcolor.pdf
Binary files differ
diff --git a/support/gregoriotex/CHANGELOG.md b/support/gregoriotex/CHANGELOG.md
index 89d74a76d6..ca3bf27c8c 100644
--- a/support/gregoriotex/CHANGELOG.md
+++ b/support/gregoriotex/CHANGELOG.md
@@ -2,6 +2,38 @@
All notable changes to this project will be documented in this file.
As of v3.0.0 this project adheres to [Semantic Versioning](http://semver.org/). It follows [some conventions](http://keepachangelog.com/).
+## [Unreleased][develop]
+
+
+## [Unreleased][CTAN]
+
+
+## [6.0.0-beta1] - 2021-02-23
+### Fixed
+- Fixed some problem in 900_gregorio.xml (Scribus render frame tool). First, the use of `filecontents` rather than `filecontents*` was leading to a comment header that made it impossible for Gregorio to find the gabc headers in the temporary score file. Further, some of the indenting (which makes the file more human readable) was leading to errors in the formatting of the created files because they are processed in a way which handles whitespace differently from XML. See [#1457](https://github.com/gregorio-project/gregorio/issues/1457).
+- `spacelinestext` is now based on the lyric font size instead of being a fixed distance. As a result, large lyrics should no longer overlap with low notes. See [#1261](https://github.com/gregorio-project/gregorio/issues/1261).
+- Added parenthesized figures for virgula (gabc: `` `?``), divisio minima (gabc: ` ,?`), flat (gabc: `x?`), natural (gabc: `y?`), and sharp (gabc: `#?`). See [#1475](https://github.com/gregorio-project/gregorio/issues/1475).
+- Staff line thickness is now set in gsp-default.tex. This corrects a problem with the staff lines changing thickness when the default spacing configuration is loaded while the staff size is something other than the default (17). See [#1461](https://github.com/gregorio-project/gregorio/issues/1461).
+- Corrected interaction issues between text styles and ligatures. The LaTeX commands like `\textit` insert italics correction, preventing ligatures being formed between their arguments if two occur sequentially. On the other hand the switches like `\itshape` do not. Since gregorio breaks up syllables around the vowel and then applies the formating commands to each part, this behavior showed up. We switch to using the switches to avoid this (except for underlining, for which a switch does not exist). We also fix this for color tags by loading `luacolor` which changes how the `\color` tag is implemented to allow ligatures to span groups. See [#1444](https://github.com/gregorio-project/gregorio/issues/1444).
+- A reuse of a save register led to the `\hyphenpenalty` not being restored correctly at the end of the score. All save registers are now clearly identified by when they are used so as to make it harder to accidentally use the wrong one. See [posts on mailing list](https://groups.google.com/g/gregorio-users/c/u3LmnGYnhwU).
+- Fixed an overly specific find/replace in snippets that that led to `\par` being able to slip into the snippet file under certain circumstances (and there by causing compilation to fail). See [#1497](https://github.com/gregorio-project/gregorio/issues/1497).
+- Updated to use iftex package (the sucessor to ifluatex). See [#1481](https://github.com/gregorio-project/gregorio/issues/1481).
+
+### Added
+- Default spacings are now designated internal and thus always loaded. `gsp-sample.tex` is added to the `doc` folder to show users how to create their own custom spacing configuration. As part of this change, spacing configuration files no longer need to be complete. Since the default configuration is always loaded at package startup, all needed penalties and spacings will be defined and the user's configuration file need only specify those whose value they wish to customize. Addresses issues raised in [#1460](https://github.com/gregorio-project/gregorio/issues/1460). **This is a change to the user interface and warrants a major release.**
+- Added additional message to verbose output of command-line tool to prevent confusion when a custom Latin vowel convention is found that the internal Latin rules will be used. See [#1470](https://github.com/gregorio-project/gregorio/issues/1470).
+- Added `$` in gabc text to prevent special interpretation of the character that follows. See [#1515](https://github.com/gregorio-project/gregorio/issues/1515)
+- GregorioTeX will now look in additional places for scores using. Users can specify paths to look in using `\gresetgregpath`. If scores are not found in the current working directory or the list of provided paths, we fall back on kpse to try and find them. See [#1395](https://github.com/gregorio-project/gregorio/issues/1395).
+- Added the ability to toggle the visibility of the translation and above lines text. See [user request on mailing list](https://groups.google.com/g/gregorio-users/c/J-V0dkBMevY).
+
+### Changed
+- The space between a non-punctum inclinatum and the upright punctum inclinatum is renamed to uprightpunctuminclinatumshift. This helps to better distinguish it from punctuminclinatumunisonshift (the space between two consecutive ascending or descending puncta inclinata on the same line). See [#1507](https://github.com/gregorio-project/gregorio/issues/1507).
+- `noteadditionalspacelinestext` now calculates the actual amount of additional space needed by low notes. To enable the old behavior (when `noteadditionalspacelinestext` is set by the user), use `\gresetnoteadditionalspacelinestext{manual}`. See [#1521](https://github.com/gregorio-project/gregorio/issues/1521) and [#1526](https://github.com/gregorio-project/gregorio/pull/1526).
+
+### Removed
+- `\gresethyphenprotrusion{percentage}`, supplanted by `\gresetprotrusionfactor{eolhyphen}{factor}`. Note that the value the new command takes is a factor rather than a percentage.
+
+
## [5.2.1] - 2019-04-06
### Fixed
- Project names with quotes in them no longer cause GregorioTeX to not be able to find the executable. See [#1416](https://github.com/gregorio-project/gregorio/issues/1416).
diff --git a/support/gregoriotex/COPYING.md b/support/gregoriotex/COPYING.md
index 91abac0e1f..9b83602d1a 100644
--- a/support/gregoriotex/COPYING.md
+++ b/support/gregoriotex/COPYING.md
@@ -1,6 +1,6 @@
#License of Gregorio
-The program Gregorio is Copyright (C) 2007-2019 The Gregorio Project,
+The program Gregorio is Copyright (C) 2007-2021 The Gregorio Project,
see [CONTRIBUTORS.md](CONTRIBUTORS.md) for authors. It is distributed
under the GPLv3 license, printed below.
diff --git a/support/gregoriotex/README.md b/support/gregoriotex/README.md
index 215993bdee..3b5d5543b7 100644
--- a/support/gregoriotex/README.md
+++ b/support/gregoriotex/README.md
@@ -10,7 +10,7 @@ Create a [LaTeX](http://en.wikipedia.org/wiki/LaTeX) file that will produce the
Compile the LaTeX file with LuaLaTeX, you get your score in PDF! You can change the LaTeX file to include other scores, create booklets, books, etc.
-You can also try it online [here](http://dev.illuminarepublications.com/gregorio/).
+You can also try it online [here](http://dev.illuminarepublications.com/).
## Installation
diff --git a/support/gregoriotex/UPGRADE.md b/support/gregoriotex/UPGRADE.md
index 88ec978324..cd67743238 100644
--- a/support/gregoriotex/UPGRADE.md
+++ b/support/gregoriotex/UPGRADE.md
@@ -4,8 +4,16 @@ This file contains instructions to upgrade to a new release of Gregorio. These
## Unreleased
+### Upright punctum inclinatum
+
Gregorio will now use an "upright" punctum inclinatum shape for a series of unison punctum inclinatum notes over a given syllable. When there is a single punctum inclinatum, Gregorio will use a heuristic to choose a shape. In any of these cases, if the result is not satisfactory, especially in context with nearby syllables, you may select a different shape by using `0` (for the descending shape) or `1` (for the ascending shape) after the capitalized letter indicating the punctum inclinatum. Forced selection of the upright shape is also possible by using `2` after the capitalized letter indicating the punctum inclinatum.
+### GABC escape character
+
+In GABC text, the dollar sign (`$`) is now an "escape character" which prevents any special interpretation of the single character which follows the `$`. This allows you to put things like parentheses in text (use `$(`), but it also prevents other special interpretation of the character that follows (e.g., `$:` prevents auto-protrusion for the colon and `$-` prevents hyphenation handling of the dash). In order to send a `$` to TeX, use `$$` to escape the dollar sign.
+
+If you had used the `$` for some reason in your GABC text, this change will break your score. You will need to change all `$` in your text to `$$` to retain the old behavior.
+
## 5.1
No additional steps are needed to upgrade from 5.0 to 5.1.
@@ -285,7 +293,7 @@ The `gregorio` executable now uses the `.gtex` extension by default (instead of
### Custom spacings
-If you are using custom spacings, please update the values of `interwordspacetext`, `intersyllablespacenotes` and `interwordspacenotes` to match their new definitions (in the comments in `gsp-default.tex`). Also note that `alterationspace` is now fixed and cannot take `plus` or `minus` values.
+If you are using custom spacings, please update the values of `interwordspacetext`, `intersyllablespacenotes` and `interwordspacenotes` to match their new definitions (in the comments in `gsp-sample.tex`). Also note that `alterationspace` is now fixed and cannot take `plus` or `minus` values.
### Euouae blocks
@@ -447,7 +455,7 @@ In version 2.4.2, an early version of the feature to auto-compile gabc score was
### Custom dimension changes
-If you use custom space definitions (`gsp-foo.tex`), the format have changed, and you must rewrite it completely. See the new `gsp-default.tex` for an example, and GregorioRef.pdf for documentation.
+If you use custom space definitions (`gsp-foo.tex`), the format have changed, and you must rewrite it completely. See the new `gsp-sample.tex` for an example, and GregorioRef.pdf for documentation.
### Color definition
diff --git a/support/gregoriotex/doc/Appendix_Font_Tables.tex b/support/gregoriotex/doc/Appendix_Font_Tables.tex
index daf52714c7..7ab9ef4661 100644
--- a/support/gregoriotex/doc/Appendix_Font_Tables.tex
+++ b/support/gregoriotex/doc/Appendix_Font_Tables.tex
@@ -1,7 +1,7 @@
% !TEX root = GregorioRef.tex
% !TEX program = LuaLaTeX+se
%
-% Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
diff --git a/support/gregoriotex/doc/Command_Index_User.tex b/support/gregoriotex/doc/Command_Index_User.tex
index 99c985f9ec..ccd0130ab4 100644
--- a/support/gregoriotex/doc/Command_Index_User.tex
+++ b/support/gregoriotex/doc/Command_Index_User.tex
@@ -1,7 +1,7 @@
% !TEX root = GregorioRef.tex
% !TEX program = LuaLaTeX+se
%
-% Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -94,7 +94,7 @@ Once you've included the package in your document (as explained above) the follo
\subsubsection{Including scores}
\macroname{\textbackslash gregorioscore}{[\optional{\#1}]\{\#2\}}{gregoriotex-main.tex}
-Macro for including scores. Works on both gabc and tex files.
+Macro for including scores. Works on both gabc and gtex files.
\begin{argtable}
\#1 & \texttt{n} & Optional. \#2 will be included as is. \\
@@ -150,6 +150,16 @@ When called with the optional argument \texttt{[f]} Gregorio\TeX\ will
compile the gabc file into a gtex file. This is similar to
\texttt{[a]} except the gabc is compiled every time.
+\macroname{\textbackslash gresetgregpath}{\{\#1\}}{gregoriotex-main.tex}
+Set a list of additional directories which should be searched for scores. Directories may be absolute or relative, but must end with a slash (\verb=/=) and enclosed in braces (\verb={}=), even if there is only one additional directory. For example, to look in a directory called “Scores” which is alongside the main project directory, one could use the following:
+
+\begin{latexcode}
+ \gresetgregpath{{../Scores/}}
+\end{latexcode}
+
+Note that these directories are not searched recursively. If you want to include subdirectories, then each subdirectory must be included individually.
+
+
\macroname{\textbackslash gresetcompilegabc}{\{\#1\}}{gregoriotex-main.tex}
A macro to change the behavior of the way Gregorio\TeX\ includes scores. This is similar to using the package options \verb=[forcecompile]=, \verb=[autocompile]=, and \verb=[nevercompile]=, but does not necessarly apply to the entire document.
@@ -166,17 +176,17 @@ without doing anything else.
\medskip This macro can be combined in the same document with different arguments to
switch between different behaviors: \par\medskip
\begin{latexcode}
- \usepackage{gregoriotex} % [nevercompile] is the default.
+ \usepackage{gregoriotex} % [autocompile] is the default.
----
- \gregorioscore{TecumPrincipium} % gabc never compiled.
- \gregorioscore[f]{TecumPrincipium} % gabc always compiled.
- \gregorioscore[a]{TecumPrincipium} % gabc auto compiled.
-
- \gresetcompilegabc{auto}
\gregorioscore{TecumPrincipium} % gabc auto compiled.
\gregorioscore[n]{TecumPrincipium} % gabc never compiled.
\gregorioscore[f]{TecumPrincipium} % gabc always compiled.
+ \gresetcompilegabc{never}
+ \gregorioscore{TecumPrincipium} % gabc never compiled.
+ \gregorioscore[f]{TecumPrincipium} % gabc always compiled.
+ \gregorioscore[a]{TecumPrincipium} % gabc auto compiled.
+
\gresetcompilegabc{force}
\gregorioscore{TecumPrincipium} % gabc always compiled.
\gregorioscore[n]{TecumPrincipium} % gabc never compiled.
@@ -251,17 +261,6 @@ Macro to adjust the thickness of the staff lines.
\subsubsection{Fine Tuning Dimensions}
In addition to providing control over the overall size of your scores, Gregorio\TeX\ allows you to fine tune the spacings around and between the various elements using the following functions.
-\macroname{\textbackslash grecreatedim}{\{\#1\}\{\#2\}\{\#3\}}{gregoriotex-spaces.tex}
-Macro to create one of Gregorio\TeX’s distances. Used to initialize distances in a space configuration file. For an example of such a file, please see \textit{gsp-default.tex}, which contains the default spacing configuration for Gregorio\TeX.
-
-\begin{argtable}
- \#1 & string & The name of the distance to be changed. See \nameref{distances} below.\\
- \#2 & string & The distance in string format. \textbf{Note:} You cannot use a length register for this argument. You \emph{must} use a string because of the way that Gregorio\TeX\ handles spaces.\\
- \#3 & \texttt{fixed} & Distance will not scale when staff size is changed.\\
- & \texttt{scalable} & Distance will scale when staff size is changed.\\
- & \texttt{inherited} & Distance will inherit its value from another distance. When this argument is used, then \#2 should be the name of another Gregorio\TeX\ distance.
-\end{argtable}
-
\macroname{\textbackslash grechangedim}{\{\#1\}\{\#2\}\{\#3\}}{gregoriotex-spaces.tex}
Macro to change one of Gregorio\TeX’s distances. This function will check to make sure the distance you are trying to change exists first.
@@ -322,7 +321,7 @@ Changes one of Gregorio\TeX’s counts or penalties for a given line in the next
\end{argtable}
\macroname{\textbackslash greloadspaceconf}{\{\#1\}}{gregoriotex-spaces.tex}
-Macro to load a space configuration file. Space configuration file names have the format \verb=gsp-identifier.tex= and must be in the same directory as your project or in your texmf directory.
+Macro to load a space configuration file. Space configuration file names have the format \verb=gsp-identifier.tex= and must be in the same directory as your project or in your texmf directory. See \verb=gsp-sample.tex= for an example file.
\begin{argtable}
\#1 & string & The identifier of the space configuration file.
@@ -330,13 +329,13 @@ Macro to load a space configuration file. Space configuration file names have t
Example:\par\medskip
\begin{latexcode}
- % loads gsp-default.tex, the default configuration file
+ % loads gregoriotex-gsp-default.tex, the default configuration file
\greloadspaceconf{default}
% loads a custom configuration called gsp-myspaces.tex
\greloadspaceconf{myspaces}
\end{latexcode}
-\macroname{\textbackslash greconffactor}{}{gsp-default.tex}
+\macroname{\textbackslash greconffactor}{}{gregoriotex-gsp-default.tex}
A count which indicates the staff size that a space configuration file is designed for. Each space configuration file must have this value set as Gregorio\TeX\ will compare it to the current staff size to determine if the configuration file being loaded needs to be rescaled.
\macroname{\textbackslash gresetlineheightexpansion}{\{\#1\}}{gregoriotex-main.tex}
@@ -400,6 +399,13 @@ staff). The \texttt{\textit{n}} should be set to indicate whether the
system should act as if the ledger line exists (\texttt{1}) or not
(\texttt{0}).
+\macroname{\textbackslash gresetnoteadditionalspacelinestext}{\{\#1\}}{gregoriotex-main.tex}
+Macro which determines how much additional space between the notes and the lyrics for really low notes.
+
+\begin{argtable}
+ \#1 & \texttt{automatic} & additional space between the notes and the lyrics is computed automatically (default)\\
+ & \texttt{manual} & additional space between the notes and the lyrics is based on the user setting of \texttt{noteadditionalspacelinestext} (a spacing adjustable using \verb=\grechangedim=)
+\end{argtable}
\subsubsection{Staff Lines}
@@ -461,6 +467,8 @@ Note that the font will be looked up by name through luaotfload, see the documen
& \texttt{granapadano} & Use the Grana Padano font.\\
\end{argtable}
+\textbf{Nota Bene:} The Gregorio and Grana Padano fonts are not included by default in a basic installation. To get them you need to download and install them from the \verb=supp-fonts-##.zip= file (where \#\# is the version number of your release). See \url{https://github.com/gregorio-project/gregorio/releases} for the list of releases.
+
\macroname{\textbackslash gresetgregoriofontscaled}{[\optional{\#1}]\{\#2\}\{\#3\}}{gregoriotex-main.tex}
This function is the same as above, with a third argument to scale the font. The fonts shipped with Gregorio do not need to use this function, but some custom fonts do. Note that you cannot use this to scale glyphs up or down, as they would not be placed correctly on the staff.
@@ -919,6 +927,22 @@ Sets the visibility of the lyrics.
& \texttt{invisible} & Lyrics are not visible.\\
\end{argtable}
+\macroname{\textbackslash gresettranslation}{\{\#1\}}{gregoriotex-main.tex}
+Sets the visibility of the translations.
+
+\begin{argtable}
+ \#1 & \texttt{visible} & Translations are visible (default).\\
+ & \texttt{invisible} & Translations are not visible.\\
+\end{argtable}
+
+\macroname{\textbackslash gresetabovelinestext}{\{\#1\}}{gregoriotex-main.tex}
+Sets the visibility of the above lines text.
+
+\begin{argtable}
+ \#1 & \texttt{visible} & Above lines text are visible (default).\\
+ & \texttt{invisible} & Above lines text are not visible.\\
+\end{argtable}
+
\subsubsection{Text Alignment}
Gregorio\TeX\ allows you to manipulate the global alignment behavior of some text elements using the following commands.
@@ -964,8 +988,8 @@ Macro to specify how the translation text should be aligned with it respective s
Macro to specify which line of the annotation should be used to determine its starting placement (i.e. before \texttt{annotationraise} is applied).
\begin{argtable}
- \#1 & \texttt{firstline} & Annotation placement is determined by the first line (default)\\
- & \texttt{lastline} & annotation placement is determined by the last line\\
+ \#1 & \texttt{topline} & Annotation placement is determined by the first line (default)\\
+ & \texttt{bottomline} & annotation placement is determined by the last line\\
\end{argtable}
\macroname{\textbackslash gresetannotationvalign}{\{\#1\}}{gregoriotex-main.tex}
@@ -1000,7 +1024,7 @@ protrusion factors will be used for various characters as well as for
\verb=<pr>= tags with no specified protrusion factor. A protrusion factor of 0
means no protrusion and 1 means full protrusion. Any floating-point value from
0 to 1 is allowed. All of these global protrusion factors may be set in
-gsp-default.tex or in your own \TeX\ files.
+a spacing configuration file (gsp-*.tex) or in the project \TeX\ file.
\begin{argtable}
\#1 & \texttt{,} & Sets the automatic protrusion factor for a comma at
@@ -1394,10 +1418,8 @@ baseline.
\end{gcount}
\begin{gcount}{noteadditionalspacelinestextthreshold}
-The number of low notes which will add on the
-\texttt{noteadditionalspacelinestext} space. For instance, with a threshold of
-\texttt{2}, every note below \texttt{c} will add {noteadditionalspacelinestext}
-space for each pitch needed below \texttt{c}, accounting for the various signs.
+The number of low notes which will add space between the lines and the lyrics. For instance, with a threshold of
+\texttt{2}, every note below \texttt{c} will add space for each pitch needed below \texttt{c}, accounting for the various signs.
\end{gcount}
\subsection{Distances}\label{distances}
@@ -1612,6 +1634,10 @@ Space between a punctum inclinatum and a no-bar (stemless) glyph three or four
pitches above.
\end{gdimension}
+\begin{gdimension}{uprightpunctuminclinatumshift}
+Space after after a non-punctum inclinatum and before the upright punctum inclinatum.
+\end{gdimension}
+
\begin{gdimension}{maximumspacewithoutdash}
Maximal space between two syllables for which we consider a dash is not needed.
\end{gdimension}
@@ -1699,11 +1725,6 @@ The space above the lines.
The space between the lines and the bottom of the text.
\end{gdimension}
-\begin{gdimension}{noteadditionalspacelinestext}
-The space added between the lines and the bottom of the text for every pitch
-below the \texttt{noteadditionalspacelinestextthreshold}.
-\end{gdimension}
-
\begin{gdimension}{spacebeneathtext}
The space beneath the text.
\end{gdimension}
@@ -1846,7 +1867,7 @@ This space is added before the final divisio final of a score (old bar spacing a
Spaces around bars when they are typeset inside a syllable. The \verb=@short=
suffix for virgula and divisio minima indicates the space used when the notes
-surrounding the bar are strictly lower than \texttt{g} (in a four-line score).
+surrounding the bar are strictly lower than \texttt{g} (in a four-line score).
For divisio minimis, the \verb=@short= suffix is for notes lower than
\texttt{h}. When applied to ``high'' positions (on the ledger line above
the staff), the \verb=@short= distances will be used for up to two pitches
@@ -1858,6 +1879,12 @@ higher.
\begin{gdimension}{bar@virgula@short}
\end{gdimension}
+\begin{gdimension}{bar@virgulaparen}
+\end{gdimension}
+
+\begin{gdimension}{bar@virgulaparen@short}
+\end{gdimension}
+
\begin{gdimension}{bar@minimis}
\end{gdimension}
@@ -1870,6 +1897,12 @@ higher.
\begin{gdimension}{bar@minima@short}
\end{gdimension}
+\begin{gdimension}{bar@minimaparen}
+\end{gdimension}
+
+\begin{gdimension}{bar@minimaparen@short}
+\end{gdimension}
+
\begin{gdimension}{bar@minor}
\end{gdimension}
@@ -1890,6 +1923,12 @@ Spaces around bars in standalone syllables, when these have text (new bar spacin
\begin{gdimension}{bar@virgula@standalone@text@short}
\end{gdimension}
+\begin{gdimension}{bar@virgulaparen@standalone@text}
+\end{gdimension}
+
+\begin{gdimension}{bar@virgulaparen@standalone@text@short}
+\end{gdimension}
+
\begin{gdimension}{bar@minimis@standalone@text}
\end{gdimension}
@@ -1902,6 +1941,12 @@ Spaces around bars in standalone syllables, when these have text (new bar spacin
\begin{gdimension}{bar@minima@standalone@text@short}
\end{gdimension}
+\begin{gdimension}{bar@minimaparen@standalone@text}
+\end{gdimension}
+
+\begin{gdimension}{bar@minimaparen@standalone@text@short}
+\end{gdimension}
+
\begin{gdimension}{bar@minor@standalone@text}
\end{gdimension}
@@ -1925,6 +1970,12 @@ Spaces around bars in standalone syllables, when these have no text (new bar spa
\begin{gdimension}{bar@virgula@standalone@notext@short}
\end{gdimension}
+\begin{gdimension}{bar@virgulaparen@standalone@notext}
+\end{gdimension}
+
+\begin{gdimension}{bar@virgulaparen@standalone@notext@short}
+\end{gdimension}
+
\begin{gdimension}{bar@minimis@standalone@notext}
\end{gdimension}
@@ -1937,6 +1988,12 @@ Spaces around bars in standalone syllables, when these have no text (new bar spa
\begin{gdimension}{bar@minima@standalone@notext@short}
\end{gdimension}
+\begin{gdimension}{bar@minimaparen@standalone@notext}
+\end{gdimension}
+
+\begin{gdimension}{bar@minimaparen@standalone@notext@short}
+\end{gdimension}
+
\begin{gdimension}{bar@minor@standalone@notext}
\end{gdimension}
@@ -2029,7 +2086,7 @@ The club penalty (determines how important it is to prevent orphans from occurri
The widow penalty (determines how important it is to prevent widows from occurring).
\end{gcount}
-\macroname{emergencystretch}{}{gsp-default.tex}
+\macroname{emergencystretch}{}{gregoriotex-gsp-default.tex}
The value of the last ditch stretch for overfull boxes. This should be set using \verb=\grechangedim=.
Default: \verb=\emergencystretch=
@@ -2038,27 +2095,27 @@ Default: \verb=\emergencystretch=
The end after bar penalty.
\end{gcount}
-\begin{gcount}{endafterbaraltpenalty}{}{gsp-default.tex}
+\begin{gcount}{endafterbaraltpenalty}{}{gregoriotex-gsp-default.tex}
The alternate end after bar penalty (used when there is no text under the bar).
\end{gcount}
-\begin{gcount}{endofelementpenalty}{}{gsp-default.tex}
+\begin{gcount}{endofelementpenalty}{}{gregoriotex-gsp-default.tex}
The end of element penalty.
\end{gcount}
-\begin{gcount}{endofsyllablepenalty}{}{gsp-default.tex}
+\begin{gcount}{endofsyllablepenalty}{}{gregoriotex-gsp-default.tex}
The end of element penalty.
\end{gcount}
-\begin{gcount}{endofwordpenalty}{}{gsp-default.tex}
+\begin{gcount}{endofwordpenalty}{}{gregoriotex-gsp-default.tex}
The end of element penalty.
\end{gcount}
-\begin{gcount}{hyphenpenalty}{}{gsp-default.tex}
+\begin{gcount}{hyphenpenalty}{}{gregoriotex-gsp-default.tex}
The hyphen penalty.
\end{gcount}
-\begin{gcount}{nobreakpenalty}{}{gsp-default.tex}
+\begin{gcount}{nobreakpenalty}{}{gregoriotex-gsp-default.tex}
Penalty to prevent a line break.
\end{gcount}
@@ -2070,7 +2127,7 @@ Penalty to force a line break.
The penalty applied after the final element of a score.
\end{gcount}
-\macroname{looseness}{}{gsp-default.tex}
+\macroname{looseness}{}{gregoriotex-gsp-default.tex}
The \TeX\ looseness within a score.
Default: \verb=\looseness=
@@ -2079,12 +2136,12 @@ Default: \verb=\looseness=
The \TeX\ tolerance within a score. See \url{https://en.wikibooks.org/wiki/TeX/tolerance} for an explanation of what tolerance is.
\end{gcount}
-\macroname{pretolerance}{}{gsp-default.tex}
+\macroname{pretolerance}{}{gregoriotex-gsp-default.tex}
The \TeX\ pretolerance within a score. See \url{https://en.wikibooks.org/wiki/TeX/pretolerance} for an explanation of what pretolerance is.
Default: $-1$ (Lua\TeX\ versions prior to 0.80) or \verb=\pretolerance= (versions after, and including, 0.80)]
-\textit{Nota bene:} For more details on why this is necessary see the comments in gsp-default.tex.
+\textit{Nota bene:} For more details on why this is necessary see the comments in gregoriotex-gsp-default.tex.
diff --git a/support/gregoriotex/doc/Command_Index_gregorio.tex b/support/gregoriotex/doc/Command_Index_gregorio.tex
index eaf0121293..d6eac996fc 100644
--- a/support/gregoriotex/doc/Command_Index_gregorio.tex
+++ b/support/gregoriotex/doc/Command_Index_gregorio.tex
@@ -1,7 +1,7 @@
% !TEX root = GregorioRef.tex
% !TEX program = LuaLaTeX+se
%
-% Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -118,7 +118,7 @@ Macro for typesetting a bar syllable.
& \texttt{1} & this syllable is the end of a word\\
\#5 & \TeX\ code & macros setting syllable letters for the next syllable\\
\#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
- \#7 & & alignment type of the first next glyph\\
+ \#7 & pair of integers & a pair containing alignment type and alteration type of the next glyph\\
\#8 &\TeX\ code & other macros (translation, double text, etc.) that don't fit in the limitation of the number of arguments\\
\#9 & \TeX\ code & The bar line (usually a \textit{writebar} call).
\end{argtable}
@@ -291,6 +291,28 @@ Macro to typeset a divisio minima on the ledger line above the staff.
& \texttt{1} & The notes around the bar are far, \verb=@short= versions of spaces will be used.\\
\end{argtable}
+\macroname{\textbackslash GreDivisioMinimaParen}{\#1\#2\#3}{gregoriotex-signs.tex}
+Macro to typeset a parenthesized divisio minima.
+
+\begin{argtable}
+ \#1 & \texttt{0} & There is no text under the bar.\\
+ & \texttt{1} & There is text under the bar.\\
+ \#2 & \TeX\ code & Macros which may happen before the skip but after the divisio minima (typically \verb=\grevepisema=).\\
+ \#3 & \texttt{0} & The notes around the bar are vertically close to the bar.\\
+ & \texttt{1} & The notes around the bar are far, \verb=@short= versions of spaces will be used.\\
+\end{argtable}
+
+\macroname{\textbackslash GreDivisioMinimaParenHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
+Macro to typeset a parenthesized divisio minima on the ledger line above the staff.
+
+\begin{argtable}
+ \#1 & \texttt{0} & There is no text under the bar.\\
+ & \texttt{1} & There is text under the bar.\\
+ \#2 & \TeX\ code & Macros which may happen before the skip but after the divisio minima (typically \verb=\grevepisema=).\\
+ \#3 & \texttt{0} & The notes around the bar are vertically close to the bar.\\
+ & \texttt{1} & The notes around the bar are far, \verb=@short= versions of spaces will be used.\\
+\end{argtable}
+
\macroname{\textbackslash GreDivisioMinimis}{\#1\#2\#3}{gregoriotex-signs.tex}
Macro to typeset a divisio ``minimis'' (eighth bar).
@@ -302,7 +324,7 @@ Macro to typeset a divisio ``minimis'' (eighth bar).
& \texttt{1} & The notes around the bar are far, \verb=@short= versions of spaces will be used.\\
\end{argtable}
-\macroname{\textbackslash GreDivisioMinimaHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
+\macroname{\textbackslash GreDivisioMinimisHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
Macro to typeset a divisio ``minimis'' (eighth bar) on the ledger line above the staff.
\begin{argtable}
@@ -464,10 +486,8 @@ after the centered letters.
\macroname{\textbackslash GreFirstSyllableInitial}{\#1}{gregoriotex-syllable.tex}
A macro which is called with the first letter of the first syllable which is
-not the initial of the score. If the \texttt{initial-style} is \texttt{0}, the
-first letter of the syllable will be passed. If the \texttt{initial-style} is
-\texttt{1} or \texttt{2}, the \emph{second} letter will be passed. This macro
-may be redefined to style the first letter appropriately.
+not the initial of the score. If there is no initial (\verb=\gresetinitiallines{0}= has been called), the
+first letter of the syllable will be passed. Otherwise, the \emph{second} letter will be passed.
\begin{argtable}
\#1 & string & The first letter of the first syllable which is not the
@@ -496,6 +516,18 @@ Macro to typeset a flat.
\#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
\end{argtable}
+\macroname{\textbackslash GreFlatParen}{\#1\#2\#3\#4\#5}{gregoriotex-signs.tex}
+Macro to typeset a parenthesized flat.
+
+\begin{argtable}
+ \#1 & integer & Height number of the flat.\\
+ \#2 & \texttt{0} & The flat is not part of the clef.\\
+ & \texttt{1} & The flat is part of the clef.\\
+ \#3 & \TeX\ code & signs to typeset before the glyph (typically additional bars, as they must be "behind" the glyph)\\
+ \#4 & \TeX\ code & signs to typeset after the glyph (almost all signs)\\
+ \#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
+\end{argtable}
+
\macroname{\textbackslash GreForceHyphen}{}{gregoriotex-syllable.tex}
Macro that indicates that a hyphen should be forced (if enabled) after the given syllable.
@@ -642,6 +674,18 @@ Same as \verb=\GreDivisioMinima= except inside a syllable.
\macroname{\textbackslash GreInDivisioMinimaHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
Same as \verb=\GreDivisioMinimaHigh= except inside a syllable.
+\macroname{\textbackslash GreInDivisioMinimaParen}{\#1\#2\#3}{gregoriotex-signs.tex}
+Same as \verb=\GreDivisioMinimaParen= except inside a syllable.
+
+\macroname{\textbackslash GreInDivisioMinimaParenHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
+Same as \verb=\GreDivisioMinimaParenHigh= except inside a syllable.
+
+\macroname{\textbackslash GreInDivisioMinimis}{\#1\#2\#3}{gregoriotex-signs.tex}
+Same as \verb=\GreDivisioMinimis= except inside a syllable.
+
+\macroname{\textbackslash GreInDivisioMinimisHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
+Same as \verb=\GreDivisioMinimisHigh= except inside a syllable.
+
\macroname{\textbackslash GreInDivisioMinor}{\#1\#2}{gregoriotex-signs.tex}
Same as \verb=\GreDivisioMinor= except inside a syllable.
@@ -663,6 +707,12 @@ Same as \verb=\GreVirgula= except inside a syllable.
\macroname{\textbackslash GreInVirgulaHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
Same as \verb=\GreVirgulaHigh= except inside a syllable.
+\macroname{\textbackslash GreInVirgulaParen}{\#1\#2\#3}{gregoriotex-signs.tex}
+Same as \verb=\GreVirgulaParen= except inside a syllable.
+
+\macroname{\textbackslash GreInVirgulaParenHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
+Same as \verb=\GreVirgulaParenHigh= except inside a syllable.
+
\macroname{\textbackslash GreItalic}{\#1}{gregoriotex.sty or gregoriotex.tex}
Makes argument (a string) italic. Accesses \LaTeX\ \verb=\textit= or
Plain \TeX\ \verb=\it= as appropriate. Corresponds to ``<i></i>'' tags
@@ -746,6 +796,18 @@ Macro to typeset a natural.
\#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
\end{argtable}
+\macroname{\textbackslash GreNaturalParen}{\#1\#2\#3\#4\#5}{gregoriotex-signs.tex}
+Macro to typeset a parenthesized natural.
+
+\begin{argtable}
+ \#1 & integer & Height number of the natural.\\
+ \#2 & \texttt{0} & The natural is not part of the clef.\\
+ & \texttt{1} & The natural is part of the clef (doesn't happen).\\
+ \#3 & \TeX\ code & signs to typeset before the glyph (typically additional bars, as they must be "behind" the glyph)\\
+ \#4 & \TeX\ code & signs to typeset after the glyph (almost all signs)\\
+ \#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
+\end{argtable}
+
\macroname{\textbackslash GreNewLine}{}{gregoriotex-main.tex}
Macro to call if you want to go to the next line.
@@ -1004,6 +1066,18 @@ Macro to typeset a sharp.
\#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
\end{argtable}
+\macroname{\textbackslash GreSharpParen}{\#1\#2\#3\#4\#5}{gregoriotex-signs.tex}
+Macro to typeset a parenthesized sharp.
+
+\begin{argtable}
+ \#1 & integer & Height number of the sharp.\\
+ \#2 & \texttt{0} & The sharp is not part of the clef.\\
+ & \texttt{1} & The sharp is part of the clef (doesn't happen).\\
+ \#3 & \TeX\ code & signs to typeset before the glyph (typically additional bars, as they must be "behind" the glyph)\\
+ \#4 & \TeX\ code & signs to typeset after the glyph (almost all signs)\\
+ \#5 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
+\end{argtable}
+
\macroname{\textbackslash GreSmallCaps}{\#1}{gregoriotex.sty and gregoriotex.tex}
Makes argument small capitals. Accesses \LaTeX\ \verb=\textsc= or
Plain \TeX\ \verb=\sc= as appropriate Corresponds to ``<sc></sc>'' tags
@@ -1056,7 +1130,7 @@ Macro to typeset the syllable.
& \texttt{1} & this syllable is the end of a word\\
\#5 & \TeX\ code & macros setting syllable letters for the next syllable\\
\#6 & string & the line, byte offset, and column address for textedit links when point-and-click is enabled\\
- \#7 & & alignment type of the first next glyph\\
+ \#7 & pair of integers & a pair containing alignment type and alteration type of the next glyph\\
\#8 &\TeX\ code & other macros (translation, double text, etc.) that don't fit in the limitation of the number of arguments\\
\#9 & Gregorio\TeX\ glyphs & all the notes
\end{argtable}
@@ -1162,6 +1236,28 @@ Macro to typeset a virgula on the ledger line above the staff.
& \texttt{1} & The notes around the bar are far, \verb=@short= versions of spaces will be used.\\
\end{argtable}
+\macroname{\textbackslash GreVirgulaParen}{\#1\#2\#3}{gregoriotex-signs.tex}
+Macro to typeset a parenthesized virgula.
+
+\begin{argtable}
+ \#1 & \texttt{0} & There is no text under the bar.\\
+ & \texttt{1} & There is text under the bar.\\
+ \#2 & code & Macros which may happen before the skip but after the virgula (typically \verb=\grevepisema=).\\
+ \#3 & \texttt{0} & The notes around the bar are vertically close to the bar.\\
+ & \texttt{1} & The notes around the bar are far, \verb=@short= versions of spaces will be used.\\
+\end{argtable}
+
+\macroname{\textbackslash GreVirgulaParenHigh}{\#1\#2\#3}{gregoriotex-signs.tex}
+Macro to typeset a parenthesized virgula on the ledger line above the staff.
+
+\begin{argtable}
+ \#1 & \texttt{0} & There is no text under the bar.\\
+ & \texttt{1} & There is text under the bar.\\
+ \#2 & code & Macros which may happen before the skip but after the virgula (typically \verb=\grevepisema=).\\
+ \#3 & \texttt{0} & The notes around the bar are vertically close to the bar.\\
+ & \texttt{1} & The notes around the bar are far, \verb=@short= versions of spaces will be used.\\
+\end{argtable}
+
\macroname{\textbackslash GreWriteTranslation}{\#1}{gregoriotex-main.tex}
Macro to typeset argument in the translation position.
diff --git a/support/gregoriotex/doc/Command_Index_internal.tex b/support/gregoriotex/doc/Command_Index_internal.tex
index ae844f2fc4..bf45e5d414 100644
--- a/support/gregoriotex/doc/Command_Index_internal.tex
+++ b/support/gregoriotex/doc/Command_Index_internal.tex
@@ -1,7 +1,7 @@
% !TEX root = GregorioRef.tex
% !TEX program = LuaLaTeX+se
%
-% Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -25,6 +25,8 @@ process the commands listed above. They should not appear in any user
document and are listed here for programmer documentation purposes
only.
+Sometimes it is necessary to temporarily change some register or macro for the purpose of some particular operation and then restore it to its previous value. In those case we define a \verb=\gre@saved@<moment>...= register or macro associated with it (\eg \verb=\gre@dimen@constantglyphraise= is saved just before a discretionary to \verb=\gre@saved@prediscretionary@dimen@constantglyphraise= and restored from it afterwards). These registers/macros are not listed in this documentation.
+
\macroname{\textbackslash gre@error}{\#1}{gregoriotex.sty \textup{and} gregoriotex.tex}
Prints an error to the \TeX\ output log.
@@ -74,6 +76,12 @@ deprecated usage is allowed. This is used to pass the value of
\macroname{\textbackslash gre@loadgregoriofont}{}{gregoriotex-main.tex}
Loads the chosen font for the neumes at the correct size.
+\macroname{\textbackslash gre@maketable}{\#1}{gregoriotex-main.tex}
+Helper to convert a \TeX\ list into a Lua table. Used to pass \verb=\gre@input@path= to Lua.
+
+\macroname{\textbackslash gre@input@path}{}{gregoriotex-main.tex}
+Macro holding the list of directories to be searched for scores. \verb=\input@path= gets aliased to this list when inside \verb=\gregorioscore=.
+
\macroname{\textbackslash gre@calculate@constantglyphraise}{}{gregoriotex-spaces.tex}
Macro to calculate \verb=\gre@constantglyphraise=
@@ -214,7 +222,7 @@ Rescales all the distances (and \texttt{stafflinefactor}) which are supposed to
\#2 & integer & the factor the distances are to be put into\\
\end{argtable}
-\macroname{\textbackslash gre@calculate@nextbegindifference}{\#1\#2\#3\#4\#5}{gregoriotex-spaces.tex}
+\macroname{\textbackslash gre@calculate@nextbegindifference}{\#1\#2\#3\#4\#5\#6}{gregoriotex-spaces.tex}
Macro to calculate \texttt{nextbegindifference}.
\begin{argtable}
@@ -222,9 +230,8 @@ Macro to calculate \texttt{nextbegindifference}.
\#2 & string & the first letters of the next syllable\\
\#3 & string & the middle letters of the next syllable (the vowel in Latin, the whole syllable in English)\\
\#4 & string & the end letters of the next syllable\\
- \#5 & $0 \le$ integer $\le 19$ & the type of notes alignment. See \Nameref{notesalign}.\\
- & $20 \le$ integer $\le 39$ & Same as below 20 except there is a flat before the notes. Subtract 20 to get the type of notes alignment.\\
- & $40 \le$ integer $\le 59$ & Same as below 20 except there is a natural before the notes. Subtract 40 to get the type of notes alignment.
+ \#5 & integer & the type of notes alignment. See \Nameref{notesalign}.\\
+ \#6 & integer & the type of alteration. See \Nameref{alterationtype}.\\
\end{argtable}
\macroname{\textbackslash gre@strip@pt}{\#1}{gregoriotex.sty \textup{and} gregoriotex.tex}
@@ -559,9 +566,6 @@ A count which keeps track of which line of the score we’re on.
\macroname{\textbackslash gre@lastoflinecount}{}{gregoriotex-main.tex}
Count to track where on the line we are. Values are \texttt{0} (we are not near the end of a line), \texttt{1} (we’re at the last syllable of the line), and \texttt{2} (we just set the last syllable of the line and so are at the first syllable of a new line).
-\macroname{\textbackslash gre@savedlastoflinecount}{}{gregoriotex-main.tex}
-A spot to save the \verb=\gre@lastoflinecount= so we can change it temporarily and revert to the saved value later.
-
\macroname{\textbackslash gre@newlinecommon}{\#1\#2}{gregoriotex-main.tex}
The macro which needs to be called each time a new lines is started.
@@ -610,9 +614,6 @@ Internal macro to set the first syllable text after all parts are known.
\macroname{\textbackslash gre@opening@syllabletext}{}{gregoriotex-syllable.tex}
Macro that stores the computed \TeX\ code for rendering the text of the first syllable.
-\macroname{\textbackslash gre@exhyphencharsave}{}{gregoriotex-main.tex}
-Macro for saving the ex hyphen character so that it can be restored at the end of the score.
-
\macroname{\textbackslash gre@factor}{}{gregoriotex-main.tex}
Count which stores the current staff size.
@@ -634,11 +635,12 @@ Macro to find the alignment center for a group of notes. The value is the dista
\#1 & Note alignment type & See \ref{notesalign}\\
\end{argtable}
-\macroname{\textbackslash gre@calculate@nextnotesaligncenter}{\#1}{gregoriotex-syllable.tex}
+\macroname{\textbackslash gre@calculate@nextnotesaligncenter}{\#1\#2}{gregoriotex-syllable.tex}
Same as previous, but for the next syllable.
\begin{argtable}
\#1 & Note alignment type & See \ref{notesalign}\\
+ \#1 & Alteration type & See \ref{alterationtype}\\
\end{argtable}
\macroname{\textbackslash gre@calculate@simplenotesaligncenter}{\#1\#2}{gregoriotex-syllable.tex}
@@ -845,6 +847,10 @@ Macro to write a bar.
& \texttt{16} & dotted major\\
& \texttt{17} & minimis (eighth bar)\\
& \texttt{18} & minimis (eighth bar) on ledger line above the staff\\
+ & \texttt{19} & parenthesized virgula\\
+ & \texttt{20} & parenthesized minima\\
+ & \texttt{21} & parenthesized virgula on ledger line above the staff\\
+ & \texttt{22} & parenthesized minima on ledger line above the staff\\
\#2 & \texttt{0} & in a syllable containing only this bar\\
& \texttt{1} & in a syllable containing other notes\\
\#3 & \texttt{0} & if there is no text underneath the bar\\
@@ -1044,6 +1050,10 @@ desired case.
& \texttt{20} & Space between a punctum inclinatum and a ``no-bar'' glyph two pitches above. \\
& \texttt{21} & Space between a punctum inclinatum and a ``no-bar'' glyph three or four pitches above \\
& \texttt{22} & Half-space. \\
+ & \texttt{23} & Space between two puncta inclinata on a unison. \\
+ & \texttt{24} & Space before a right-leaning puncta inclinatum when the pitch is ascending (up to 4 pitches away). \\
+ & \texttt{25} & Space before a left-leaning puncta inclinatum when the pitch is descending (up to 4 pitches away). \\
+ & \texttt{26} & Space after after a non-punctum inclinatum and before the upright punctum inclinatum. \\
\end{argtable}
\macroname{\textbackslash gre@nabcfontname}{}{gregoriotex-main.tex}
@@ -1095,19 +1105,6 @@ Performs \#1 if the syllable should be rewritten, else \#2.
\#2 & \TeX\ code & Code to perform when \emph{not} rewriting the syllable\\
\end{argtable}
-\macroname{\textbackslash gre@save@endsyllablepart}{}{gregoriotex-syllable.tex}
-Control sequence aliased to the carry-over syllable part to be moved to the next syllable.
-
-\macroname{\textbackslash gre@save@fixedtextformat}{\#1}{gregoriotex-syllable.tex}
-Control sequence aliased to the fixed text format for the carry-over syllable part to be moved to the next syllable.
-
-\begin{argtable}
- \#1 & string & The carry-over syllable part, as with \verb=\gre@fixednexttextformat=\\
-\end{argtable}
-
-\macroname{\textbackslash gre@save@pointandclick}{}{gregoriotex-syllable.tex}
-Control sequence aliased to the line:char:column of the point-and-click link for the carry-over syllable part to be moved to the next syllable\\
-
\macroname{\textbackslash gre@push@endsyllable}{\#1}{gregoriotex-syllable.tex}
Sets the save aliases to push the end-syllable part of the current syllable to the next syllable if necessary.
@@ -1212,7 +1209,7 @@ The pitch of the highest point of the current clef.
\macroname{\textbackslash gre@pitch@clefbottom}{}{gregoriotex-spaces.tex}
The pitch of the lowest point of the current clef.
-\macroname{\textbackslash gre@saveclefextrema}{\#1\#2}{gregoriotex-signs.tex}
+\macroname{\textbackslash gre@save@clefextrema}{\#1\#2}{gregoriotex-signs.tex}
Computes the pitches of the lowest and highest points of a clef and saves them
into \verb=\gre@pitch@cleftop= and \verb=\gre@pitch@clefbottom=.
@@ -1254,13 +1251,14 @@ Workhorse function behind \verb=\gresetgregoriofont=.
& \texttt{granapadano} & Use the Grana Padano font.\\
\end{argtable}
-\macroname{\textbackslash gre@syllable@end}{\#1\#2\#3}{gregoriotex-syllable.tex}
+\macroname{\textbackslash gre@syllable@end}{\#1\#2\#3\#4}{gregoriotex-syllable.tex}
Macro to make a few checks and call the right macros between \verb=\endbeforebar=, \verb=\endofword=, \verb=\endofsyllable=.
\begin{argtable}
- \#1 & & next syllable type (\#7 of \verb=\GreSyllable=)\\
- \#2 & string & next syllable text\\
- \#3 & \texttt{0} & this syllable is not the end of a word\\
+ \#1 & integer & the type of notes alignment of next syllable, from \#7 of \verb=\GreSyllable=. See \Nameref{notesalign}.\\
+ \#2 & integer & the type of alteration of next syllable, from \#7 of \verb=\GreSyllable=. See \Nameref{alterationtype}.\\
+ \#3 & string & next syllable text\\
+ \#4 & \texttt{0} & this syllable is not the end of a word\\
& \texttt{1} & this syllable is the end of a word\\
\end{argtable}
@@ -1378,7 +1376,7 @@ Macro for calculating the position of the elements of a bar syllable using the n
\begin{argtable}
\#1 & 0 & bar is not the end of a word\\
& 1 & bar is the end of a word\\
- \#2 & integer & alignment type of the first glyph in the next syllable. See \Nameref{notesalign}\\
+ \#2 & integer & alteration type of the first glyph in the next syllable. See \Nameref{alterationtype}\\
\end{argtable}
\macroname{\textbackslash gre@newlinearg}{}{gregoriotex-syllable.tex}
@@ -1387,9 +1385,6 @@ Macro for storing the argument for \verb=\gre@newlinecommon= when the line break
\macroname{\textbackslash gre@newlinecommondelayed}{}{gregoriotex-syllable.tex}
Macro used in place of \verb=\gre@newlinecommon= when the line break must be delayed.
-\macroname{\textbackslash gre@newlinecommonsaved}{}{gregoriotex-syllable.tex}
-Macro for storing original behavior of \verb=\gre@newlinecommon= so that it can be restored after the delayed line break takes effect.
-
\macroname{\textbackslash gre@punctum@mora}{\#1\#2\#3\#4}{gregoriotex-signs.tex}
Macro to typeset a punctum mora.
@@ -1451,6 +1446,22 @@ Prevents the current syllable from overlapping with the previous syllable.
File handle used to mark auto-compiled gabc files as dependencies for tools
like latexmk.
+\macroname{\textbackslash gre@arg@oftwo@first}{\#1\#2}{gregoriotex-syllable.tex}
+Evaluates to the first of its arguments.
+
+\begin{argtable}
+ \#1 & any & the first argument\\
+ \#2 & any & the second argument\\
+\end{argtable}
+
+\macroname{\textbackslash gre@arg@oftwo@second}{\#1\#2}{gregoriotex-syllable.tex}
+Evaluates to the second of its arguments.
+
+\begin{argtable}
+ \#1 & any & the first argument\\
+ \#2 & any & the second argument\\
+\end{argtable}
+
\subsection{Auxiliary File}
Gregorio\TeX\ creates its own auxiliary file (extension \texttt{gaux}) which it uses to store information between successive typesetting runs. This allows for such features as the dynamic interline spacing. The following functions are used to interact with that auxiliary file.
@@ -1508,18 +1519,36 @@ The flat character.
\macroname{\textbackslash gre@fontchar@flathole}{}{gregoriotex-chars.tex}
The flat hole character (\ie, the character needed to prevent lines from showing through the center of the flat).
+\macroname{\textbackslash gre@fontchar@flatparen}{}{gregoriotex-chars.tex}
+The parenthesized flat character.
+
+\macroname{\textbackslash gre@fontchar@flatparenhole}{}{gregoriotex-chars.tex}
+The parenthesized flat hole character (\ie, the character needed to prevent lines from showing through the center of the flat).
+
\macroname{\textbackslash gre@fontchar@natural}{}{gregoriotex-chars.tex}
The natural character.
\macroname{\textbackslash gre@fontchar@naturalhole}{}{gregoriotex-chars.tex}
The natural hole character (\ie, the character needed to prevent lines from showing through the center of the natural).
+\macroname{\textbackslash gre@fontchar@naturalparen}{}{gregoriotex-chars.tex}
+The parenthesized natural character.
+
+\macroname{\textbackslash gre@fontchar@naturalparenhole}{}{gregoriotex-chars.tex}
+The parenthesized natural hole character (\ie, the character needed to prevent lines from showing through the center of the natural).
+
\macroname{\textbackslash gre@fontchar@sharp}{}{gregoriotex-chars.tex}
The sharp character.
\macroname{\textbackslash gre@fontchar@sharphole}{}{gregoriotex-chars.tex}
The sharp hole character (\ie, the character needed to prevent lines from showing through the center of the sharp).
+\macroname{\textbackslash gre@fontchar@sharpparen}{}{gregoriotex-chars.tex}
+The parenthesized sharp character.
+
+\macroname{\textbackslash gre@fontchar@sharpparenhole}{}{gregoriotex-chars.tex}
+The parenthesized sharp hole character (\ie, the character needed to prevent lines from showing through the center of the sharp).
+
\macroname{\textbackslash gre@fontchar@incclef}{}{gregoriotex-chars.tex}
The \texttt{c}-clef which appears in the middle of a line.
@@ -1614,6 +1643,14 @@ lines for the staff.
Alias that will hold the character for the high virgula for the current number
of lines for the staff.
+\macroname{\textbackslash gre@char@bar@virgulaparen}{}{gregoriotex-main.tex}
+Alias that will hold the character for the parenthesized virgula for the current
+number of lines for the staff.
+
+\macroname{\textbackslash gre@char@bar@virgulaparenhigh}{}{gregoriotex-main.tex}
+Alias that will hold the character for the parenthesized high virgula for the
+current number of lines for the staff.
+
\macroname{\textbackslash gre@char@bar@divisiominimis}{}{gregoriotex-main.tex}
Alias that will hold the character for the divisio ``minimis'' (eighth bar) for
the current number of lines for the staff.
@@ -1630,6 +1667,14 @@ number of lines for the staff.
Alias that will hold the character for the high divisio minima for the current
number of lines for the staff.
+\macroname{\textbackslash gre@char@bar@divisiominimaparen}{}{gregoriotex-main.tex}
+Alias that will hold the character for the parenthesized divisio minima for the
+current number of lines for the staff.
+
+\macroname{\textbackslash gre@char@bar@divisiominimaparenhigh}{}{gregoriotex-main.tex}
+Alias that will hold the character for the parenthesized high divisio minima for
+the current number of lines for the staff.
+
\macroname{\textbackslash gre@char@bar@divisiominor}{}{gregoriotex-main.tex}
Alias that will hold the character for the divisio minor for the current
number of lines for the staff.
@@ -1898,9 +1943,6 @@ Boolean to disable the printing of punctum morae.
\macroname{\textbackslash ifgre@disablevepisema}{}{gregoriotex-signs.tex}
Boolean to disable the printing of vertical episemata.
-\macroname{\textbackslash ifgre@lastendswithmorasave}{}{gregoriotex-syllable.tex}
-Boolean for saving \verb=\ifgre@lastendswithmora= for later restoration.
-
\macroname{\textbackslash gre@lasteuouaeindex}{}{gregoriotex-main.tex}
Count which keeps track of the most recent euouae area.
@@ -1943,6 +1985,12 @@ Boolean indicating whether the first nabc voice should be shown.
\macroname{\textbackslash ifgre@showlyrics}{}{gregoriotex-syllable.tex}
Boolean indicating whether the lyrics should be shown.
+\macroname{\textbackslash ifgre@showtranslation}{}{gregoriotex-main.tex}
+Boolean indicating whether the translation should be shown.
+
+\macroname{\textbackslash ifgre@showabovelinestext}{}{gregoriotex-main.tex}
+Boolean indicating whether the above lines text should be shown.
+
\macroname{\textbackslash gre@initiallines}{}{gregoriotex-syllable.tex}
Number of lines the initial takes up. Currently limited to 0, 1, or 2. Not currently a count, but will be changed to one in 5.0.
@@ -1955,6 +2003,10 @@ Boolean indicating that the text of this syllable should not overlap any previou
\macroname{\textbackslash ifgre@evaluatingnextsyllable}{}{gregoriotex-syllable.tex}
Boolean indicating that some aspect of the next syllable is being evaluated in advance.
+\macroname{\textbackslash ifgre@noteadditionalspacelinestext}{}{gregoriotex-main.tex}
+Boolean indicating that the additional space needed between the notes and the lyrics due to really low notes should follow the user setting of noteadditionalspacelinestext (as opposed to being calculated automatically, the default).
+
+
\subsection{Boxes}
Boxes are used to store elements of the score before they are printed for the purposes of reusing them and/or measuring them in order to determine their appropriate placement.
@@ -2011,6 +2063,20 @@ Macros that store the protrusion factors created by
\subsection{Distances}
+
+\macroname{\textbackslash gre@createdim}{\{\#1\}\{\#2\}\{\#3\}}{gregoriotex-spaces.tex}
+Macro to create one of Gregorio\TeX’s distances. Used to initialize distances in \textit{gregoriotex-gsp-default.tex}.
+
+\begin{argtable}
+ \#1 & string & The name of the distance to be changed. See \nameref{distances} below.\\
+ \#2 & string & The distance in string format. \textbf{Note:} You cannot use a length register for this argument. You \emph{must} use a string because of the way that Gregorio\TeX\ handles spaces.\\
+ \#3 & \texttt{fixed} & Distance will not scale when staff size is changed.\\
+ & \texttt{scalable} & Distance will scale when staff size is changed.\\
+ & \texttt{inherited} & Distance will inherit its value from another distance. When this argument is used, then \#2 should be the name of another Gregorio\TeX\ distance.
+\end{argtable}
+
+
+
All of the distances listed in \nameref{distances} have an internal associated
with them, of the form of \verb=\gre@space@*@*=, which stores the value of the
distance (in string representation). The first wildcard is either
@@ -2019,10 +2085,6 @@ second is the name of the distance.
These additional distances are calculated by Gregorio based on the values for the user customizable distances and what may be going on in the score at the time of their use.
-In some cases it is necessary to temporarily manipulate some of these distances for the purpose of some particular operation and then restore them to their previous values. In that case the distance will have a \verb=\gre@saved@...= register associated with it (\eg \verb=\gre@dimen@constantglyphraise= is saved to and restored from \verb=\gre@saved@dimen@constantglyphraise=).
-
-We also have save registries for \verb=\baselineskip=, \verb=\lineskip=, \verb=\lineskiplimit=, \verb=\parskip=, and \verb=\parfillskip= so that we can modify the way line breaking decisions are handled inside a score without affecting the rest of the document.
-
\macroname{\textbackslash gre@dimen@morawidth}{}{gregoriotex-spaces.tex}
Width of a punctum mora (reinitialized at each score, lazily recomputed).
@@ -2231,58 +2293,6 @@ Macro called at the beginning of the score to swap text penalties for score pena
\macroname{\textbackslash gre@restorepenalties}{}{gregoriotex-spaces.tex}
Macro called at the end of the score to restore the text penalties.
-\macroname{\textbackslash gre@brokenpenaltysave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the broken penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@clubpenaltysave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the club penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@widowpenaltysave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the widow penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@emergencystretchsave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the emergency stretch so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@endafterbarpenaltysave}{}{gregoriotex-main.tex}
-A place to save the current value of the end after bar penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@endafterbaraltpenaltysave}{}{gregoriotex-main.tex}
-A place to save the current value of the alternate end after bar penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@endofelementpenaltysave}{}{gregoriotex-main.tex}
-A place to save the current value of the end of element penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@endofsyllablepenaltysave}{}{gregoriotex-main.tex}
-A place to save the current value of the end of syllable penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@endofwordpenaltysave}{}{gregoriotex-main.tex}
-A place to save the current value of the end of word penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@exhyphenpenaltysave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the ex hyphen penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@hyphenpenaltysave}{}{gregoriotex-main.tex \textup{and} gregoriotex-spaces.tex}
-A place to save the current value of the hyphen penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@nobreakpenaltysave}{}{gregoriotex-main.tex}
-A place to save the current value of the no break penalty so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@doublehyphendemeritssave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the double hyphen demerits so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@finalhyphendemeritssave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the final hyphen demerits so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@loosenesssave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the looseness so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@tolerancesave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the tolerance so that we can change it temporarily and then restore it later.
-
-\macroname{\textbackslash gre@pretolerancesave}{}{gregoriotex-spaces.tex}
-A place to save the current value of the pretolerance so that we can change it temporarily and then restore it later.
-
-
\subsection{Backwards compatibility}
Depending on version of Lua\TeX / \LaTeX, some primitives have different names
We define the following local aliases to account for this eventuality.
@@ -2355,8 +2365,24 @@ rather than have multiple definitions.
\texttt{12} & divisio minor\\
\texttt{13} & divisio maior\\
\texttt{14} & dominican bar\\
- \texttt{15} & divisio finalis\\
- \texttt{16} & no note
+ \texttt{15} & parenthesized virgula\\
+ \texttt{16} & parenthesized divisio minima\\
+ \texttt{17} & divisio finalis\\
+ \texttt{18} & no note
+ \end{tabulary}
+
+\subsection{Alteration Type}\label{alterationtype}
+\rowcolors{1}{lightgray}{lightgray}
+\begin{tabulary}{\textwidth}{cL}
+ \multicolumn{2}{c}{Integer with the following possibilities:} \\
+ \hline
+ \texttt{0} & no alteration\\
+ \texttt{1} & flat\\
+ \texttt{2} & natural\\
+ \texttt{3} & sharp\\
+ \texttt{4} & parenthesized flat\\
+ \texttt{5} & parenthesized natural\\
+ \texttt{6} & parenthesized sharp
\end{tabulary}
\subsection{Note Offset Specifier}\label{NoteOffset}
@@ -2393,7 +2419,9 @@ rather than have multiple definitions.
\item[TorcResDebilisNonAuctusSecondAnyWide] second note of a non-auctus torculus resupinus initio debilis with any first ambitus and a second ambitus of at least two
\item[FinalLineaPunctum] linea punctum (cavum) as last note
\item[BarStandard] standard bar
+ \item[BarParen] parenthesized bar
\item[BarVirgula] virgula
+ \item[BarVirgulaParen] parenthesized virgula
\item[BarDivisioFinalis] divisio finalis
\item[TorcResQuilismaNonAuctusSecondWideWide] second note of a non-auctus torculus resupinus starting with a quilisma, with a first and second ambitus of at least two
\item[TorcResOriscusNonAuctusSecondWideWide] second note of a non-auctus torculus resupinus starting with an oriscus, with a first and second ambitus of at least two
diff --git a/support/gregoriotex/doc/Gabc.tex b/support/gregoriotex/doc/Gabc.tex
index 3de2b36782..c76d7e4a78 100644
--- a/support/gregoriotex/doc/Gabc.tex
+++ b/support/gregoriotex/doc/Gabc.tex
@@ -1,7 +1,7 @@
% !TEX root = GregorioRef.tex
% !TEX program = LuaLaTeX+se
%
-% Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -91,7 +91,6 @@ Some headers have special meaning to Gregorio:
\end{lstlisting}
\item[author] The author of the piece, if known; of course, the author of most traditional chant is not known.
\item[language] The language of the lyrics.
-\item[oriscus-orientation] If \texttt{legacy}, the orientation of an unconnected oriscus must be set manually.
\item[mode] The mode of the piece. This should normally be an Arabic
number between 1 and 8, but may be any text required for unusual
cases. The mode number will be converted to roman numerals and
@@ -245,6 +244,11 @@ syllables. Spaces (end end-of-lines) in syllable text mark the end of words
and should be placed after the parenthesized notes section for the last
syllable of a given word.
+The special character \texttt{\$} is an ``escape'' character which causes the
+character which follows it to lose any special meaning. This can be used to
+insert parentheses in text (\ie, use \texttt{\$(}). In order to put a
+\texttt{\$} itself in text, escape it (\ie, use \texttt{\$\$}).
+
There are several markup-like codes that may be inserted into syllable text. We divide these into three categories: style tags, syllable controls, and other.
\paragraph{Style Tags}
@@ -491,7 +495,7 @@ Some examples:
g(g) g<sp>~~</sp>(g~) g<(g<) g>(g>) go(go) go<sp>~~</sp>(go~) gw(gw)
gv(gv) gV(gV) gs(gs) gs<(gs<) g=(g=)
( ) (z) ( )
- gr(gr) gR(gR) gr0(gr0) G(G) G0(G0) G1(G1) G~(G~) G>(G>) Gr(Gr) gx(gx)
+ gr(gr) gR(gR) gr0(gr0) G(G) G0(G0) G1(G1) G<sp>~~</sp>(G~) G>(G>) Gr(Gr) gx(gx)
g#(g#) gy(gy)
( )
}
@@ -1043,7 +1047,7 @@ code at the glyph level, or \texttt{[ev:}\textit{tex code}\texttt{]} to insert
Here, note, glyph, and element refer to how Gregorio understands the score.
-\subsubsection{Macros}
+\subsubsection{Macros}\label{usemacros}
Macros may be defined using the \texttt{def-m}\textit{n} headers, where
\textit{n} is 0--9, as described in the \nameref{headers} section above. Then
diff --git a/support/gregoriotex/doc/GregorioNabcRef.pdf b/support/gregoriotex/doc/GregorioNabcRef.pdf
index 08d750889e..60e80bf4cd 100644
--- a/support/gregoriotex/doc/GregorioNabcRef.pdf
+++ b/support/gregoriotex/doc/GregorioNabcRef.pdf
Binary files differ
diff --git a/support/gregoriotex/doc/GregorioNabcRef.tex b/support/gregoriotex/doc/GregorioNabcRef.tex
index 724fefac0b..e5ab81131e 100644
--- a/support/gregoriotex/doc/GregorioNabcRef.tex
+++ b/support/gregoriotex/doc/GregorioNabcRef.tex
@@ -1,6 +1,6 @@
% !TEX program = LuaLaTeX+se
%
-% Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
diff --git a/support/gregoriotex/doc/GregorioRef.lua b/support/gregoriotex/doc/GregorioRef.lua
index d1d10c6ca2..17266a76cc 100644
--- a/support/gregoriotex/doc/GregorioRef.lua
+++ b/support/gregoriotex/doc/GregorioRef.lua
@@ -1,4 +1,4 @@
--- Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+-- Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
--
-- This file is part of Gregorio.
--
@@ -124,6 +124,10 @@ local EXCLUDE = {
['VirgulaThree'] = true,
['VirgulaFive'] = true,
['VirgulaSix'] = true,
+ ['VirgulaParenTwo'] = true,
+ ['VirgulaParenThree'] = true,
+ ['VirgulaParenFive'] = true,
+ ['VirgulaParenSix'] = true,
['DivisioMinimisTwo'] = true,
['DivisioMinimisThree'] = true,
['DivisioMinimisFive'] = true,
@@ -132,6 +136,10 @@ local EXCLUDE = {
['DivisioMinimaThree'] = true,
['DivisioMinimaFive'] = true,
['DivisioMinimaSix'] = true,
+ ['DivisioMinimaParenTwo'] = true,
+ ['DivisioMinimaParenThree'] = true,
+ ['DivisioMinimaParenFive'] = true,
+ ['DivisioMinimaParenSix'] = true,
['DivisioMinorTwo'] = true,
['DivisioMinorThree'] = true,
['DivisioMinorFive'] = true,
@@ -191,12 +199,15 @@ local GABC = {
DivisioMaiorDottedFour = [[:?]],
DivisioMaiorDottedBackingFour = [[\excluded{:?}]],
DivisioMinimaFour = [[,]],
+ DivisioMinimaParenFour = [[,?]],
DivisioMinimisFour = [[\textasciicircum{}]],
DivisioMinorFour = [[;]],
FClefChange = [[f3]],
FClef = [[f3]],
Flat = [[gx]],
FlatHole = [[\excluded{gx}]],
+ FlatParen = [[gx?]],
+ FlatParenHole = [[\excluded{gx?}]],
Flexus = [[g&&&e]],
FlexusLongqueue = [[h&&&f]],
FlexusNobar = [[@h&&&f]],
@@ -213,6 +224,8 @@ local GABC = {
LineaPunctum = [[g&&&R]],
Natural = [[gy]],
NaturalHole = [[\excluded{gy}]],
+ NaturalParen = [[gy?]],
+ NaturalParenHole = [[\excluded{gy?}]],
OblatusAscendensOriscus = [[g&&&o1]],
OblatusDescendensOriscus = [[g&&&o0]],
OblatusFlexusOriscus = [[g&&&oe]],
@@ -255,6 +268,8 @@ local GABC = {
SemicirculusReversus = [[\excluded{g}r5]],
Sharp = [[g\#{}]],
SharpHole = [[\excluded{g\#{}}]],
+ SharpParen = [[g\#{}?]],
+ SharpParenHole = [[\excluded{g\#{}?}]],
StansPunctumInclinatum = [[G2&&&]],
StrophaAucta = [[g&&&s>]],
StrophaAuctaLongtail = [[h&&&s>]],
@@ -273,6 +288,7 @@ local GABC = {
VirgaReversaLongqueue = [[h&&&V]],
VirgaReversaOpenqueue = [[a&&&V]],
VirgulaFour = [[^^^^0060]],
+ VirgulaParenFour = [[^^^^0060?]],
}
local GABC_AMBITUS_ONE = {
diff --git a/support/gregoriotex/doc/GregorioRef.pdf b/support/gregoriotex/doc/GregorioRef.pdf
index 3628fc1052..3d5d6daa66 100644
--- a/support/gregoriotex/doc/GregorioRef.pdf
+++ b/support/gregoriotex/doc/GregorioRef.pdf
Binary files differ
diff --git a/support/gregoriotex/doc/GregorioRef.tex b/support/gregoriotex/doc/GregorioRef.tex
index dc897c7703..99e45ef111 100644
--- a/support/gregoriotex/doc/GregorioRef.tex
+++ b/support/gregoriotex/doc/GregorioRef.tex
@@ -1,6 +1,6 @@
% !TEX program = LuaLaTeX+se
%
-% Copyright (C) 2006-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2006-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -139,7 +139,7 @@
{\endtabularx\bigskip}
\makeatletter%
-\NewDocumentEnvironment{gdimension}{m}{\macroname{#1}{}{gsp-default.tex}}{%
+\NewDocumentEnvironment{gdimension}{m}{\macroname{#1}{}{gregoriotex-gsp-default.tex}}{%
\gre@rubberpermit{#1}%
\ifgre@rubber%
@@ -149,7 +149,7 @@
\fi%
}
-\NewDocumentEnvironment{gcount}{m}{\macroname{#1}{}{gsp-default.tex}}{%
+\NewDocumentEnvironment{gcount}{m}{\macroname{#1}{}{gregoriotex-gsp-default.tex}}{%
Default: \expandafter$\expandafter\the\csname gre@space@count@#1\endcsname$
}
@@ -183,7 +183,7 @@
\vspace{1cm}
- \large Version \textbf{5.2.1}, 6 April 2019 %% PARSE_VERSION_DATE
+ \large Version \textbf{6.0.0-beta1}, 23 February 2021 %% PARSE_VERSION_DATE
\vspace{1.5cm}
\end{center}
diff --git a/support/gregoriotex/doc/examples/debugging.tex b/support/gregoriotex/doc/examples/debugging.tex
new file mode 100644
index 0000000000..9aeee8d055
--- /dev/null
+++ b/support/gregoriotex/doc/examples/debugging.tex
@@ -0,0 +1,10 @@
+% !TEX program = LuaLaTeX+se
+\documentclass{article}
+
+\usepackage[debug]{gregoriotex}
+
+\listfiles
+
+\begin{document}
+Debugging document
+\end{document}
diff --git a/support/gregoriotex/doc/examples/main-lualatex.tex b/support/gregoriotex/doc/examples/main-lualatex.tex
index 018a0a06b3..9bbcb8552a 100644
--- a/support/gregoriotex/doc/examples/main-lualatex.tex
+++ b/support/gregoriotex/doc/examples/main-lualatex.tex
@@ -1,47 +1,47 @@
% !TEX program = LuaLaTeX+se
-% This is a simple template for a LuaLaTeX document using gregorio scores.
+% Simple template for using Gregorio scores in a LuaLaTeX document.
-\documentclass[11pt]{article} % use larger type; default would be 10pt
+\documentclass{scrartcl} % set document class: manual at https://ctan.org/pkg/koma-script
-% usual packages loading:
-\usepackage{fontspec}
-\usepackage{graphicx} % support the \includegraphics command and options
-\usepackage{geometry} % See geometry.pdf to learn the layout options. There are lots.
-\geometry{a4paper} % or letterpaper (US) or a5paper or....
-\usepackage{gregoriotex} % for gregorio score inclusion
-\usepackage{fullpage} % to reduce the margins
-\usepackage{libertine} % Decent (free) font for Gregorian, but should be changed if you have high standards
+% Load packages:
+\usepackage[osf,p]{libertine} % set font
+\usepackage{gregoriotex} % enable Gregorio score inclusion
+\usepackage[latin]{babel} % set language
-\begin{document}
+\setkomafont{section}{\normalfont\centering\huge\scshape} % section heading style
+\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
-% The title:
-\begin{center}\begin{huge}\textsc{Populus Sion}\end{huge}\end{center}
-% Here we set the space around the initial.
-% Please report to http://gregorio-project.github.io/gregoriotex/details.html for more details and options
+% Set the space around the initial:
+% See http://gregorio-project.github.io/gregoriotex/details.html for more details and options
\grechangedim{beforeinitialshift}{2.2mm}{scalable}
\grechangedim{afterinitialshift}{2.2mm}{scalable}
-% Here we set the initial font. Change 43 if you want a bigger initial.
+% Set the initial font (change 43 for a larger size):
\grechangestyle{initial}{\fontsize{43}{43}\selectfont}%
-% We set red lines here, comment it if you want black ones.
+% Make staff lines red; remove for black:
\gresetlinecolor{gregoriocolor}
-% We set VII above the initial manually
+% Use the "commentary" field of the score in the top right corner:
+\gresetheadercapture{commentary}{grecommentary}{string}
+
+% Format annotation above initial
\grechangestyle{annotation}{\small\bfseries}
-\greannotation{Intr.}
-\greannotation{\textsc{vii}}
-% We use the "commentary" field of the score in the top right corner:
-\gresetheadercapture{commentary}{grecommentary}{string}
+\begin{document}
+
+\section{Populus Sion}
+
+% Add VII above the initial manually:
+\greannotation{Intr.} % first line
+\greannotation{\textsc{vii}} % second line
-% and finally we include the scores. The file must be in the same directory as this one.
+% Include the score; the file must be in the same directory:
\gregorioscore[a]{PopulusSion}
-\bigskip
-\begin{center}\begin{huge}\textsc{Factus Est}\end{huge}\end{center}
+\section{Factus est}
\gregorioscore[a]{FactusEst}
diff --git a/support/gregoriotex/doc/gsp-sample.tex b/support/gregoriotex/doc/gsp-sample.tex
new file mode 100644
index 0000000000..79dc736f57
--- /dev/null
+++ b/support/gregoriotex/doc/gsp-sample.tex
@@ -0,0 +1,462 @@
+%GregorioTeX file.
+%
+% Copyright (C) 2010-2021 The Gregorio Project (see CONTRIBUTORS.md)
+%
+% This file is part of Gregorio.
+%
+% Gregorio is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% Gregorio is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with Gregorio. If not, see <http://www.gnu.org/licenses/>.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This file is an example of how the various penalties and spacings can be changed to tweak the
+%% overall look of a Gregorio score.
+%%
+%% When customizing this file to your own use, you do not need to include all the penalties and
+%% distances listed below. Those not included will fall back onto their default values.
+%%
+%% The name of all space configuration files should start with `gsp-` and end with `.tex`; what goes
+%% in between is up to you (so long as it doesn’t contain spaces). To load a space configuration
+%% file called `gsp-sample.tex`, use `\greloadspaceconf{sample}`. The defaults can be reloaded
+%% with `\greloadspaceconf{default}`.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% At the risk of oversimplifying, penalties affect line breaks: larger penalties indicate that line
+%% breaks should be less likely at the corresponding location, smaller penalties (including negative
+%% values) indicate that line breaks are more likely.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% penalty to force a break on a new line
+\grechangecount{newlinepenalty}{-10001}%
+% penalty to prevent a line break
+\grechangecount{nobreakpenalty}{10001}%
+% penalty at the end of a syllable which is the end of a word
+\grechangecount{endofwordpenalty}{-100}%
+% penalty at the end of a syllable which is not the end of a word
+\grechangecount{endofsyllablepenalty}{-50}%
+% penalty at the end of a syllable which is just a bar, with something printed
+% under it
+\grechangecount{endafterbarpenalty}{-200}%
+% penalty right after a bar with nothing printed
+\grechangecount{endafterbaraltpenalty}{-200}%
+% penalty at the end of the score
+\grechangecount{finalpenalty}{0}%
+% penalty at the end of a breakable neumatic element (typically at a space
+% between elements)
+\grechangecount{endofelementpenalty}{-50}%
+% hyphenpenalty will be used in discretionaries, in Gregorio this is used for
+% a bar with clef change for example. It also set \exhyphenpenalty. It should
+% be close to endafterbarpenalty
+\grechangecount{hyphenpenalty}{-200}%
+% broken penalty is the vertical penalty inserted after a break on a clef change
+% I'm not sure it should be set, but it might be useful...
+\grechangecount{brokenpenalty}{0}%
+
+%% These macro enable the tuning of linepenalty, tolerance, pretolerance
+%% and emergencystretch
+\grechangecount{looseness}{-1}%
+\grechangecount{tolerance}{9000}%
+% Workaround for bug 842 (http://tracker.luatex.org/view.php?id=842)
+% see http://tug.org/pipermail/luatex/2013-July/004516.html
+% The idea is that we use discretionaries (explicit hyphens, though more than hyphens in our case) for clef changes, and we need to give them a special penalty, which is not taken into account if pretolerance is > -1 on LuaTeX < 0.80. For a more detailed explanation see http://tug.org/pipermail/luatex/2013-July/004516.html.
+\ifnum\the\luatexversion < 78\relax %
+ \grechangecount{pretolerance}{-1}%
+\else %
+ \grechangecount{pretolerance}{\the\pretolerance}%
+\fi %
+\grechangedim{emergencystretch}{\the\emergencystretch}{scalable}%
+% By default, we don't care if a line of score is alone on the page,
+% if you think it is bad, you can modify the two following values. Assigning
+% 10000 to them will prevent all orphaned lines (this will certainly improve
+% some spacings a lot).
+\grechangecount{widowpenalty}{0}%
+\grechangecount{clubpenalty}{0}%
+
+
+%%%%%%%%%%%%%%%%%%%
+%%
+%% Protrusion factors indicate that certain characters are allowed to extend into the right hand
+%% margin when they occur at the end of the line. This allows you to create a more optically
+%% straight margin as the eye tends to discount some characters (mostly punctuation) when
+%% determining whether the end of several lines of text line up.
+%%
+%%%%%%%%%%%%%%%%%%%
+
+% protrusion factor for comma
+\gresetprotrusionfactor{,}{0}%
+% protrusion factor for semicolon
+\gresetprotrusionfactor{;}{0}%
+% protrusion factor for colon
+\gresetprotrusionfactor{:}{0}%
+% protrusion factor for period
+\gresetprotrusionfactor{.}{0}%
+% protrusion factor for hyphens added automatically in the Lua phase
+\gresetprotrusionfactor{eolhyphen}{0}%
+% protrusion factor used by <pr> without an argument
+\gresetprotrusionfactor{default}{1}%
+
+
+
+
+%%%%%%%%%%%%%%%%%%%
+%%
+%% The following spacings govern the distance between various elements (names are chosen to
+%% indicate when each spacing is used). The macro for changing distances is \grechangedim and
+%% it takes 3 arguments:
+%%
+%% (1) the name of the spacing to be changed
+%% (2) the value of the spacing
+%% (3) either `scalable` or `fixed` to indicate how the spacing should behave when
+%% `\grechangestaffsize` is invoked. If `scalable` then the spacing is proportionally rescaled;
+%% if `fixed` it will remain at its given value; if `inherited` then #2 should be the name of
+%% another spacing from which this spacing derives its value.
+%%
+%%%%%%%%%%%%%%%%%%%
+
+%This count tells gregoriotex what size staff the below values correspond to.
+%% The default staff size is 17. At this size the scores should be approximately the size usually
+%% seen in a gradual.
+%% If you’re creating your own space configuration file, you may set this to some other value,
+%% should you so desire.
+%% If the current staff size doesn’t match the value given here when the spacing file is loaded, then
+%% all scalable distances will be rescaled appropriately.
+\greconffactor=17%
+
+%How thick the lines should be. When set equal to \greconffactor (above) the staff lines will be their default thickness. Larger numbers result in thicker lines.
+\grechangestafflinethickness{17}%
+
+% the additional width of the additional lines (compared to the width of the glyph they're associated with)
+\grechangedim{additionallineswidth}{0.14584 cm}{scalable}%
+% width of the additional lines, used only for the custos (maybe should depend on the width of the custos...)
+% the width is the one for the custos at end of lines, the line for custos in the middle of a score is the same
+% multiplied by 2.
+\grechangedim{additionalcustoslineswidth}{0.09114 cm}{scalable}%
+% null space
+\grechangedim{zerowidthspace}{0 cm}{scalable}%
+% space between glyphs in the same element
+\grechangedim{interglyphspace}{0.06927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+% space between an alteration (flat or natural) and the next glyph
+\grechangedim{alterationspace}{0.07747 cm}{scalable}%
+% space between a clef and a flat (for clefs with flat)
+\grechangedim{clefflatspace}{0.05469 cm plus 0.00638 cm minus 0.00638 cm}{scalable}%
+% space before a choral sign
+\grechangedim{beforelowchoralsignspace}{0.04556 cm plus 0.00638 cm minus 0.00638 cm}{scalable}%
+% when bolshifts are enabled, minimal space between a clef at the beginning of the line and a leading alteration glyph (should be larger than clefflatspace so that a flatted clef can be distinguished from a flat which is part of the first glyph on a line, but also smaller than spaceafterlineclef, the distance from the clef to the first notes)
+\grechangedim{beforealterationspace}{0.1 cm}{scalable}%
+% half-space between elements
+\grechangedim{halfspace}{0.03463 cm plus 0.00091 cm minus 0.00182 cm}{scalable}%
+% space between elements
+\grechangedim{interelementspace}{0.06927 cm plus 0.00182 cm minus 0.00363 cm}{scalable}%
+% larger space between elements
+\grechangedim{largerspace}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
+% space between elements in ancient notation
+\grechangedim{nabcinterelementspace}{0.06927 cm plus 0.00182 cm minus 0.00363 cm}{scalable}%
+% larger space between elements in ancient notation
+\grechangedim{nabclargerspace}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
+% space between elements which has the size of a note
+\grechangedim{glyphspace}{0.21877 cm plus 0.01822 cm minus 0.01822 cm}{scalable}%
+% space before in-line custos
+\grechangedim{spacebeforeinlinecustos}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
+% space before end-of-line custos
+\grechangedim{spacebeforeeolcustos}{0.23 cm plus 0 cm minus 0 cm}{scalable}%
+% space before punctum mora and augmentum duplex
+\grechangedim{spacebeforesigns}{0.050 cm plus 0.004 cm minus 0.004 cm}{scalable}%
+% when a syllable is shifted left because of a preceding punctum mora, moraadjustmentbar is
+% also added. Use it to make the syllable a bit further from the punctum mora if you want.
+% This version is the general case.
+\grechangedim{moraadjustment}{0.050 cm}{scalable}%
+% This version is for when punctum mora is before a bar.
+\grechangedim{moraadjustmentbar}{0.050 cm}{scalable}%
+% space after punctum mora and augmentum duplex
+\grechangedim{spaceaftersigns}{0.08203 cm plus 0.0082 cm minus 0.0082 cm}{scalable}%
+% space after a clef at the beginning of a line
+\grechangedim{spaceafterlineclef}{0.23 cm plus 0 cm minus 0.01367 cm}{scalable}%
+% space after a clef at the beginning of a line, when the clef and first note are vertically distant
+\grechangedim{shortspaceafterlineclef}{0.18 cm plus 0 cm minus 0.01367 cm}{scalable}%
+% minimal space between notes of different words
+\grechangedim{interwordspacenotes}{0.29 cm plus 0.05 cm minus 0.05 cm}{scalable}%
+% minimal space between notes of the same syllable.
+\grechangedim{intersyllablespacenotes}{0.24 cm}{scalable}%
+% stretching added in the case where the text of two syllables of the same word are
+% separated with an automatic hyphen
+\grechangedim{intersyllablespacestretchhyphen}{0cm plus 0.05cm}{scalable}%
+% minimal space between letters of different words.
+\grechangedim{interwordspacetext}{0.17 cm plus 0.05 cm minus 0.05 cm}{scalable}%
+% Versions of interword spaces for euouae blocks
+\grechangedim{interwordspacenotes@euouae}{0.23 cm plus 0.1 cm minus 0.05 cm}{scalable}%
+\grechangedim{interwordspacetext@euouae}{0.21 cm plus 0.1 cm minus 0.05 cm}{scalable}%
+% versions of note spaces when the first note of the second syllable is an alteration
+% those are used in euouae blocks
+\grechangedim{interwordspacenotes@alteration}{0.1 cm plus 0.07 cm minus 0.01 cm}{scalable}%
+\grechangedim{intersyllablespacenotes@alteration}{0.1 cm}{scalable}%
+% space between notes of a bivirga or trivirga
+\grechangedim{bitrivirspace}{0.06927 cm plus 0.00182 cm minus 0.00546 cm}{scalable}%
+% space between notes of a bistropha or tristrophae
+\grechangedim{bitristrospace}{0.06927 cm plus 0.00182 cm minus 0.00546 cm}{scalable}%
+%
+%%%%%%%%%%%%%%%%%%%%
+% puncta inclinata %
+%%%%%%%%%%%%%%%%%%%%
+%
+% space between two descending punctum inclinatum
+\grechangedim{punctuminclinatumshift}{-0.03918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between two descending or ascending punctum inclinatum at the unison
+\grechangedim{punctuminclinatumunisonshift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
+% space before descending puncta inclinata
+\grechangedim{beforepunctainclinatashift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
+% space between a descending punctum inclinatum and a punctum inclinatum deminutus
+\grechangedim{punctuminclinatumanddebilisshift}{-0.02278 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between two punctum inclinatum deminutus
+\grechangedim{punctuminclinatumdebilisshift}{-0.00728 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between descending puncta inclinata, larger ambitus (range=3rd)
+\grechangedim{punctuminclinatumbigshift}{0.07565 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between descending puncta inclinata, larger ambitus (range=4th or 5th)
+\grechangedim{punctuminclinatummaxshift}{0.17865 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between two ascending punctum inclinatum
+\grechangedim{ascendingpunctuminclinatumshift}{-0.03918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between a punctum inclinatum and a punctum inclinatum deminutus, ascending
+\grechangedim{ascendingpunctuminclinatumanddebilisshift}{-0.02278 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between ascending puncta inclinata, larger ambitus (range=3rd)
+\grechangedim{ascendingpunctuminclinatumbigshift}{0.07565 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between ascending puncta inclinata, larger ambitus (range=4th or 5th)
+\grechangedim{ascendingpunctuminclinatummaxshift}{0.17865 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between a punctum inclinatum and a no-bar glyph one pitch below
+\grechangedim{descendinginclinatumtonobarshift}{-0.00073 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+% space between a punctum inclinatum and a no-bar glyph two pitches below
+\grechangedim{descendinginclinatumtonobarbigshift}{0.10927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+% space between a punctum inclinatum and a no-bar glyph three or four pitches below
+\grechangedim{descendinginclinatumtonobarmaxshift}{0.23927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+% space between a punctum inclinatum and a no-bar glyph one pitch above
+\grechangedim{ascendinginclinatumtonobarshift}{-0.02473 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+% space between a punctum inclinatum and a no-bar glyph two pitches above
+\grechangedim{ascendinginclinatumtonobarbigshift}{0.04427 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+% space between a punctum inclinatum and a no-bar glyph three or four pitches above
+\grechangedim{ascendinginclinatumtonobarmaxshift}{0.12927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+% space between two descending punctum inclinatum glyphs in an ascent
+\grechangedim{descendingpunctuminclinatumascendingshift}{-0.07918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% space between two ascending punctum inclinatum glyphs in an descent
+\grechangedim{ascendingpunctuminclinatumdescendingshift}{-0.07918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+% Space after after a non-punctum inclinatum and before the upright punctum inclinatum
+\grechangedim{uprightpunctuminclinatumshift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
+
+%
+%%%%%%%%
+% bars %
+%%%%%%%%
+%
+% bars inside syllables
+%
+\grechangedim{bar@virgula}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+% short versions are when the notes are very low (virgula, minima, and minimis only)
+\grechangedim{bar@virgula@short}{0.13 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\grechangedim{bar@minimis}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\grechangedim{bar@minimis@short}{0.12 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\grechangedim{bar@minima}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\grechangedim{bar@minima@short}{0.12 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\grechangedim{bar@minor}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+% dominican bars
+\grechangedim{bar@dominican}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\grechangedim{bar@maior}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\grechangedim{bar@finalis}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+% space added before the final divisio finalis (old bar spacing algorithm only)
+\grechangedim{bar@finalfinalis}{0.29169 cm plus 0.07292 cm minus 0.27345 cm}{scalable}%
+%
+% bars having their own syllable, with text associated (new bar spacing algorithm only)
+% plus or minus here will trigger some problems
+%
+\grechangedim{bar@virgula@standalone@text}{0.2323 cm}{scalable}%
+\grechangedim{bar@virgula@standalone@text@short}{0.19 cm}{scalable}%
+\grechangedim{bar@minimis@standalone@text}{0.2323 cm}{scalable}%
+\grechangedim{bar@minimis@standalone@text@short}{0.19 cm}{scalable}%
+\grechangedim{bar@minima@standalone@text}{0.2323 cm}{scalable}%
+\grechangedim{bar@minima@standalone@text@short}{0.19 cm}{scalable}%
+\grechangedim{bar@minor@standalone@text}{0.2323 cm}{scalable}%
+\grechangedim{bar@dominican@standalone@text}{0.2323 cm}{scalable}%
+\grechangedim{bar@maior@standalone@text}{0.2323 cm}{scalable}%
+\grechangedim{bar@finalis@standalone@text}{0.2323 cm}{scalable}%
+% actual space before divisio finalis, not additional one
+\grechangedim{bar@finalfinalis@standalone@text}{0.29169 cm}{scalable}%
+%
+% bars having their own syllable, with no text associated (new bar spacing algorithm only)
+%
+\grechangedim{bar@virgula@standalone@notext}{0.2 cm}{scalable}%
+\grechangedim{bar@virgula@standalone@notext@short}{0.19 cm}{scalable}%
+\grechangedim{bar@minimis@standalone@notext}{0.2 cm}{scalable}%
+\grechangedim{bar@minimis@standalone@notext@short}{0.19 cm}{scalable}%
+\grechangedim{bar@minima@standalone@notext}{0.2 cm}{scalable}%
+\grechangedim{bar@minima@standalone@notext@short}{0.19 cm}{scalable}%
+\grechangedim{bar@minor@standalone@notext}{0.2323 cm}{scalable}%
+\grechangedim{bar@dominican@standalone@notext}{0.2323 cm}{scalable}%
+\grechangedim{bar@maior@standalone@notext}{0.2323 cm}{scalable}%
+\grechangedim{bar@finalis@standalone@notext}{0.2323 cm}{scalable}%
+\grechangedim{bar@finalfinalis@standalone@notext}{0.29169 cm}{scalable}%
+%
+% minimal space between letters of different syllable texts for text around bars
+% (new bar spacing algorithm only)
+\grechangedim{interwordspacetext@bars}{0.18 cm}{scalable}%
+% minimal space between letters of different syllable texts for text around bars,
+% euouae context
+\grechangedim{interwordspacetext@bars@euouae}{0.18 cm}{scalable}%
+\grechangedim{interwordspacetext@bars@notext}{0.19 cm}{scalable}%
+% minimal space between letters of different syllable texts for text around bars,
+% euouae context
+\grechangedim{interwordspacetext@bars@notext@euouae}{0.18 cm}{scalable}%
+% rubber length that will be added around bars in new bar spacing algorithm
+\grechangedim{bar@rubber}{0 cm plus 0.025 cm minus 0.025 cm}{scalable}%
+% in the case of an alteration after a bar, the alteration will "protrude" left of this value
+% think of it as some kind of moraadjustmentbar
+\grechangedim{alterationadjustmentbar}{0.07 cm}{scalable}%
+% additional space that will appear around bars that are preceded by a custos and followed by a key.
+\grechangedim{spacearoundclefbars}{0.03645 cm plus 0.00455 cm minus 0.0009 cm}{scalable}%
+% space between the text of previous syllable and text associated with a bar (old bar spacing algorithm only)
+\grechangedim{textbartextspace}{0.24611 cm plus 0.13672 cm minus 0.04921 cm}{scalable}%
+% minimal space between a note and a bar (old algorithm only)
+\grechangedim{notebarspace}{0.31903 cm plus 0.27345 cm minus 0.02824 cm}{scalable}%
+% Maximum offset between a bar and its associated text when the text goes left of the bar (new bar spacing algorithm only)
+\grechangedim{maxbaroffsettextleft}{0.3 cm}{scalable}%
+% Same as maxbaroffsettextleft when text goes right of the bar
+\grechangedim{maxbaroffsettextright}{0.15 cm}{scalable}%
+% Maximum offset between a no-bar (i.e. something like `text()` in gabc) and its associated text when the text goes left of the no-bar (new bar spacing algorithm only)
+\grechangedim{maxbaroffsettextleft@nobar}{12 cm}{scalable}%
+% Same as maxbaroffsettextleft@nobar when text goes right of the no-bar
+\grechangedim{maxbaroffsettextright@nobar}{12 cm}{scalable}%
+% Space between the two bars of a divisio finalis
+% Maximum offset between a bar and its associated text when the text goes left of the bar and the bar terminates a line (i.e. something line `text(::z)` in gabc) (new bar spacing algorithm only)
+\grechangedim{maxbaroffsettextleft@eol}{0.0 cm}{scalable}%
+% Same as maxbaroffsettextleft@eol when text goes right of the bar
+\grechangedim{maxbaroffsettextright@eol}{0 cm}{scalable}%
+\grechangedim{divisiofinalissep}{0.1094 cm}{scalable}%
+%
+%
+% maximal space between two syllables for which we consider a dash is not needed
+\grechangedim{maximumspacewithoutdash}{0 cm}{scalable}%
+% an extensible space for the beginning of lines
+\grechangedim{afterclefnospace}{0 cm plus 0.27345 cm minus 0 cm}{scalable}%
+% space between the initial and the beginning of the score
+\grechangedim{afterinitialshift}{0.2 cm}{scalable}%
+% space before the initial
+\grechangedim{beforeinitialshift}{0.2 cm}{scalable}%
+% when bolshifts are enabled, minimum space between beginning of line and first syllable text
+\grechangedim{minimalspaceatlinebeginning}{0.05 cm}{scalable}%
+% space to force the initial width to. Ignored when 0.
+\grechangedim{manualinitialwidth}{0 cm}{scalable}%
+% minimum width of the initial. Ignored when manualinitialwidth is non-zero.
+\grechangedim{minimalinitialwidth}{0 cm}{scalable}%
+% distance to move the initial up by
+\grechangedim{initialraise}{0 cm}{scalable}%
+% Space between lines in the annotation
+\grechangedim{annotationseparation}{0.05 cm}{scalable}%
+% Amount to raise (positive) or lower (negative) the annotations from the default position
+\grechangedim{annotationraise}{-0.2 cm}{scalable}%
+% Space between lines in the commentary
+\grechangedim{commentaryseparation}{0.05 cm}{scalable}%
+% Amount to raise (positive) or lower (negative) the commentary from the default position (base line of bottom commentary aligned with top line of staff)
+\grechangedim{commentaryraise}{0.2 cm}{scalable}%
+% space at the beginning of the lines if there is no clef
+\grechangedim{noclefspace}{0.1 cm}{scalable}%
+% space around a clef change
+\grechangedim{clefchangespace}{0.27345 cm plus 0.14584 cm minus 0.01367 cm}{scalable}%
+% When \gre@clivisalignment is 2, this distance is the maximum length of the consonants after vowels for which the clivis will be aligned on its center.
+\grechangedim{clivisalignmentmin}{0.3 cm}{scalable}%
+
+%%%%%%%%%%%%%%%%%%
+% vertical spaces
+%%%%%%%%%%%%%%%%%%
+
+% the amount to shift down:
+% (a) low choral signs that are not lower than the note, regardless of whether
+% it's on a line or in a space
+% (b) high choral signs and low choral signs that are lower than the note which
+% are in a space
+\grechangedim{choralsigndownshift}{0.00911 cm}{scalable}%
+% the amount to shift up:
+% (a) high choral signs and low choral signs that are lower than the note which
+% are on a line
+\grechangedim{choralsignupshift}{0.04556 cm}{scalable}%
+% the space for the translation
+\grechangedim{translationheight}{0.5 cm}{scalable}%
+%the space above the lines
+\grechangedim{spaceabovelines}{0 cm}{scalable}%
+% this counter is the threshold above which we start accounting notes above
+% lines for additional space above lines. For instance with a threshold of
+% 2 and a staff of 4 lines, notes with a pitch of k and l will not interfere
+% with the space above lines
+\grechangecount{additionaltopspacethreshold}{2}%
+% same, for notes taken into account for alt text vertical position
+\grechangecount{additionaltopspacealtthreshold}{0}%
+% same, for notes taken into account for nabc vertical position
+\grechangecount{additionaltopspacenabcthreshold}{4}%
+%the space between the lines and the bottom of the text
+\grechangedim{spacelinestext}{0.60617 cm}{scalable}%
+% the per-note additional space between lines and the bottom of the text
+\grechangedim{noteadditionalspacelinestext}{0.14413 cm}{scalable}%
+% this counter is the number of low notes which will add on additional distance
+\grechangecount{noteadditionalspacelinestextthreshold}{2}%
+%the space beneath the text
+\grechangedim{spacebeneathtext}{0 cm}{scalable}%
+% height of the text above the note line
+\grechangedim{abovelinestextraise}{-0.1 cm}{scalable}%
+% height that is added at the top of the lines if there is text above the lines (it must be bigger than the text for it to be taken into consideration)
+\grechangedim{abovelinestextheight}{0.3 cm}{scalable}%
+% an additional shift you can give to the brace above the bars if you don't like it
+\grechangedim{braceshift}{0 cm}{scalable}%
+% a shift you can give to the accentus above the curly brace
+\grechangedim{curlybraceaccentusshift}{-0.05 cm}{scalable}%
+% the amount to shift the over slur up
+\grechangedim{overslurshift}{0.05000 cm}{scalable}%
+% the amount to shift the under slur up
+\grechangedim{underslurshift}{0.01000 cm}{scalable}%
+% shift for a horizontal episema over a note in a low position in the space
+\grechangedim{overhepisemalowshift}{0.02287 cm}{scalable}%
+% shift for a horizontal episema over a note in a high position in the space
+\grechangedim{overhepisemahighshift}{0.10066 cm}{scalable}%
+% shift for a horizontal episema under a note in a low position in the space
+\grechangedim{underhepisemalowshift}{0.02763 cm}{scalable}%
+% shift for a horizontal episema under a note in a high position in the space
+\grechangedim{underhepisemahighshift}{0.10981 cm}{scalable}%
+% shift for a horizontal episema in the middle of a space
+\grechangedim{hepisemamiddleshift}{0.07206 cm}{scalable}%
+% shift for a vertical episema in a low position in the space
+\grechangedim{vepisemalowshift}{-0.01262 cm}{scalable}%
+% shift for a vertical episema in a high position in the space
+\grechangedim{vepisemahighshift}{0.06634 cm}{scalable}%
+% shift for a punctum mora for a note on a line
+\grechangedim{linepunctummorashift}{-0.06314 cm}{scalable}%
+% shift for a punctum mora for a note in a space
+\grechangedim{spacepunctummorashift}{-0.02013 cm}{scalable}%
+% shift for a punctum mora for the second note (in a space) of a pes with ambitus one
+\grechangedim{spaceamonepespunctummorashift}{0.00183 cm}{scalable}%
+% shift for a punctum mora for the second note in a porrectus, on a line
+\grechangedim{lineporrectuspunctummorashift}{0.04575 cm}{scalable}%
+% shift for a punctum mora for the second note in a porrectus, in a space
+\grechangedim{spaceporrectuspunctummorashift}{0.00000 cm}{scalable}%
+% shift for a rare sign
+\grechangedim{raresignshift}{0.18302 cm}{scalable}%
+% up-shift for a bracket
+\grechangedim{bracketupshift}{0.03000 cm}{scalable}%
+% down-shift for a bracket
+\grechangedim{bracketdownshift}{0.04000 cm}{scalable}%
+%
+
+%%%%%%%%%%
+%% Line spacings
+%%%%%%%%%%
+\grechangedim{parskip}{1pt plus 1pt}{scalable}%
+\grechangedim{lineskip}{0pt plus 1pt}{scalable}%
+\grechangedim{baselineskip}{55pt plus 5pt minus 5pt}{scalable}%
+\grechangedim{lineskiplimit}{0pt}{scalable}%
diff --git a/support/gregoriotex/fonts/sources/convertsfdtottf.py b/support/gregoriotex/fonts/sources/convertsfdtottf.py
index cbd2790d9d..43b26fd27b 100644
--- a/support/gregoriotex/fonts/sources/convertsfdtottf.py
+++ b/support/gregoriotex/fonts/sources/convertsfdtottf.py
@@ -7,7 +7,7 @@
Python fontforge script to convert from fontforge's native sfd
to a TrueType font (ttf).
- Copyright (C) 2015-2019 The Gregorio Project (see CONTRIBUTORS.md)
+ Copyright (C) 2015-2021 The Gregorio Project (see CONTRIBUTORS.md)
This file is part of Gregorio.
diff --git a/support/gregoriotex/fonts/sources/greciliae-base.sfd b/support/gregoriotex/fonts/sources/greciliae-base.sfd
index aad62670ca..7e2fec7c97 100644
--- a/support/gregoriotex/fonts/sources/greciliae-base.sfd
+++ b/support/gregoriotex/fonts/sources/greciliae-base.sfd
@@ -3,7 +3,7 @@ FontName: greciliae
FullName: greciliae
FamilyName: greciliae
Weight: Medium
-Copyright: Greciliae font\nCopyright (C) 2007 Matthew Spencer with Reserved Font Name "Caeciliae",\nCopyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)\nwith Reserved Font Name "Greciliae".\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is also available with a FAQ at:\nhttp://scripts.sil.org/OFL
+Copyright: Greciliae font\nCopyright (C) 2007 Matthew Spencer with Reserved Font Name "Caeciliae",\nCopyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)\nwith Reserved Font Name "Greciliae".\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is also available with a FAQ at:\nhttp://scripts.sil.org/OFL
UComments: "2007-4-12: Created."
Version: 1.2
ItalicAngle: 0
@@ -20,7 +20,7 @@ OS2Version: 0
OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 1
CreationTime: 1176402534
-ModificationTime: 1533916122
+ModificationTime: 1572105938
OS2TypoAscent: 0
OS2TypoAOffset: 1
OS2TypoDescent: 0
@@ -43,7 +43,8 @@ NameList: Adobe Glyph List
DisplaySize: -96
AntiAlias: 1
FitToEm: 0
-WinInfo: 138 23 6
+WidthSeparation: 150
+WinInfo: 161 23 6
BeginPrivate: 0
EndPrivate
Grid
@@ -71,7 +72,7 @@ Grid
17.75 -700 l 0
EndSplineSet
TeXData: 1 0 0 346030 173015 115343 0 1048576 115343 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144
-BeginChars: 266 266
+BeginChars: 284 284
StartChar: Accentus
Encoding: 0 -1 0
@@ -2287,8 +2288,278 @@ SplineSet
EndSplineSet
EndChar
-StartChar: DivisioMinorTwo
+StartChar: DivisioMinimaParenTwo
Encoding: 92 -1 92
+Width: 259
+VWidth: 1418
+Flags: W
+VStem: 0 18<-162.059 -50.513> 120 19<-264.028 52.9844> 241 18<-162.059 -50.513>
+CounterMasks: 1 e0
+LayerCount: 2
+Fore
+SplineSet
+181 -275.569 m 5
+ 181 -275.569 241 -191.333 241 -106.29 c 4
+ 241 -21.2354 181.001 63.0215 181.001 63.0215 c 5
+ 181.001 63.0215 182.476 65.5684 184 66.5215 c 28
+ 185.727 67.6006 189.001 68.0215 189.001 68.0215 c 5
+ 189.001 68.0215 259 -18.0322 259 -106.29 c 4
+ 259 -194.537 189 -280.569 189 -280.569 c 5
+ 189 -280.569 185.727 -280.148 184 -279.069 c 28
+ 182.476 -278.116 181 -275.569 181 -275.569 c 5
+78 -275.569 m 5
+ 78 -275.569 76.5244 -278.116 75 -279.069 c 28
+ 73.2734 -280.148 70 -280.569 70 -280.569 c 5
+ 70 -280.569 0 -194.537 0 -106.29 c 4
+ 0 -18.0322 69.999 68.0215 69.999 68.0215 c 5
+ 69.999 68.0215 73.2734 67.6006 75 66.5215 c 28
+ 76.5244 65.5684 77.999 63.0215 77.999 63.0215 c 5
+ 77.999 63.0215 18 -21.2354 18 -106.29 c 4
+ 18 -191.333 78 -275.569 78 -275.569 c 5
+120 -258.872 m 9
+ 120 52.9844 l 25
+ 138.999 53.0215 l 25
+ 139 -265.569 l 17
+ 126.044 -265.435 122.435 -262.391 120 -258.872 c 9
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimaParenThree
+Encoding: 93 -1 93
+Width: 251
+VWidth: 1733
+Flags: W
+VStem: -8 18<152.941 264.487> 112 19<50.9717 367.984> 233 18<152.941 264.487>
+CounterMasks: 1 e0
+LayerCount: 2
+Fore
+SplineSet
+173 39.4307 m 1
+ 173 39.4307 233 123.667 233 208.71 c 0
+ 233 293.765 173.001 378.021 173.001 378.021 c 1
+ 173.001 378.021 174.476 380.568 176 381.521 c 24
+ 177.727 382.601 181.001 383.021 181.001 383.021 c 1
+ 181.001 383.021 251 296.968 251 208.71 c 0
+ 251 120.463 181 34.4307 181 34.4307 c 1
+ 181 34.4307 177.727 34.8516 176 35.9307 c 24
+ 174.476 36.8838 173 39.4307 173 39.4307 c 1
+70 39.4307 m 1
+ 70 39.4307 68.5244 36.8838 67 35.9307 c 24
+ 65.2734 34.8516 62 34.4307 62 34.4307 c 1
+ 62 34.4307 -8 120.463 -8 208.71 c 0
+ -8 296.968 61.999 383.021 61.999 383.021 c 1
+ 61.999 383.021 65.2734 382.601 67 381.521 c 24
+ 68.5244 380.568 69.999 378.021 69.999 378.021 c 1
+ 69.999 378.021 10 293.765 10 208.71 c 0
+ 10 123.667 70 39.4307 70 39.4307 c 1
+112 56.1279 m 9
+ 112 367.984 l 25
+ 130.999 368.021 l 25
+ 131 49.4307 l 17
+ 118.044 49.5654 114.435 52.6094 112 56.1279 c 9
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimaParenFour
+Encoding: 94 -1 94
+Width: 251
+VWidth: 2048
+Flags: W
+VStem: -8 18<467.941 579.487> 112 19<365.972 682.984> 233 18<467.941 579.487>
+CounterMasks: 1 e0
+LayerCount: 2
+Fore
+SplineSet
+173 354.431 m 1
+ 173 354.431 233 438.667 233 523.71 c 0
+ 233 608.765 173.001 693.021 173.001 693.021 c 1
+ 173.001 693.021 174.476 695.568 176 696.521 c 24
+ 177.727 697.601 181.001 698.021 181.001 698.021 c 1
+ 181.001 698.021 251 611.968 251 523.71 c 0
+ 251 435.463 181 349.431 181 349.431 c 1
+ 181 349.431 177.727 349.852 176 350.931 c 24
+ 174.476 351.884 173 354.431 173 354.431 c 1
+70 354.431 m 1
+ 70 354.431 68.5244 351.884 67 350.931 c 24
+ 65.2734 349.852 62 349.431 62 349.431 c 1
+ 62 349.431 -8 435.463 -8 523.71 c 0
+ -8 611.968 61.999 698.021 61.999 698.021 c 1
+ 61.999 698.021 65.2734 697.601 67 696.521 c 24
+ 68.5244 695.568 69.999 693.021 69.999 693.021 c 1
+ 69.999 693.021 10 608.765 10 523.71 c 0
+ 10 438.667 70 354.431 70 354.431 c 1
+112 371.128 m 9
+ 112 682.984 l 25
+ 130.999 683.021 l 25
+ 131 364.431 l 17
+ 118.044 364.565 114.435 367.609 112 371.128 c 9
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimaParenFive
+Encoding: 95 -1 95
+Width: 251
+VWidth: 2363
+Flags: W
+VStem: -8 18<782.941 894.487> 112 19<680.972 997.984> 233 18<782.941 894.487>
+CounterMasks: 1 e0
+LayerCount: 2
+Fore
+SplineSet
+173 669.431 m 1
+ 173 669.431 233 753.667 233 838.71 c 0
+ 233 923.765 173.001 1008.02 173.001 1008.02 c 1
+ 173.001 1008.02 174.476 1010.57 176 1011.52 c 24
+ 177.727 1012.6 181.001 1013.02 181.001 1013.02 c 1
+ 181.001 1013.02 251 926.968 251 838.71 c 0
+ 251 750.463 181 664.431 181 664.431 c 1
+ 181 664.431 177.727 664.852 176 665.931 c 24
+ 174.476 666.884 173 669.431 173 669.431 c 1
+70 669.431 m 1
+ 70 669.431 68.5244 666.884 67 665.931 c 24
+ 65.2734 664.852 62 664.431 62 664.431 c 1
+ 62 664.431 -8 750.463 -8 838.71 c 0
+ -8 926.968 61.999 1013.02 61.999 1013.02 c 1
+ 61.999 1013.02 65.2734 1012.6 67 1011.52 c 24
+ 68.5244 1010.57 69.999 1008.02 69.999 1008.02 c 1
+ 69.999 1008.02 10 923.765 10 838.71 c 0
+ 10 753.667 70 669.431 70 669.431 c 1
+112 686.128 m 9
+ 112 997.984 l 25
+ 130.999 998.021 l 25
+ 131 679.431 l 17
+ 118.044 679.565 114.435 682.609 112 686.128 c 9
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimaParenSix
+Encoding: 96 -1 96
+Width: 259
+VWidth: 2678
+Flags: W
+VStem: 0 18<1097.94 1209.49> 120 19<995.972 1312.98> 241 18<1097.94 1209.49>
+CounterMasks: 1 e0
+LayerCount: 2
+Fore
+SplineSet
+181 984.431 m 1
+ 181 984.431 241 1068.67 241 1153.71 c 0
+ 241 1238.76 181.001 1323.02 181.001 1323.02 c 1
+ 181.001 1323.02 182.476 1325.57 184 1326.52 c 24
+ 185.727 1327.6 189.001 1328.02 189.001 1328.02 c 1
+ 189.001 1328.02 259 1241.97 259 1153.71 c 0
+ 259 1065.46 189 979.431 189 979.431 c 1
+ 189 979.431 185.727 979.852 184 980.931 c 24
+ 182.476 981.884 181 984.431 181 984.431 c 1
+78 984.431 m 1
+ 78 984.431 76.5244 981.884 75 980.931 c 24
+ 73.2734 979.852 70 979.431 70 979.431 c 1
+ 70 979.431 0 1065.46 0 1153.71 c 0
+ 0 1241.97 69.999 1328.02 69.999 1328.02 c 1
+ 69.999 1328.02 73.2734 1327.6 75 1326.52 c 24
+ 76.5244 1325.57 77.999 1323.02 77.999 1323.02 c 1
+ 77.999 1323.02 18 1238.76 18 1153.71 c 0
+ 18 1068.67 78 984.431 78 984.431 c 1
+120 1001.13 m 9
+ 120 1312.98 l 25
+ 138.999 1313.02 l 25
+ 139 994.431 l 17
+ 126.044 994.565 122.435 997.609 120 1001.13 c 9
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimisTwo
+Encoding: 97 -1 97
+Width: 19
+VWidth: 1533
+Flags: HW
+HStem: 284.431 318.553
+VStem: 0 19<285.972 602.984>
+LayerCount: 2
+Fore
+SplineSet
+0 0.12793 m 13
+ 0 167.984 l 25
+ 18.999 168.021 l 25
+ 19 -6.56934 l 21
+ 6.04395 -6.43457 2.43457 -3.39062 0 0.12793 c 13
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimisThree
+Encoding: 98 -1 98
+Width: 19
+VWidth: 1733
+Flags: HW
+HStem: 49.431 318.553
+VStem: 0 19<50.972 367.984>
+LayerCount: 2
+Fore
+SplineSet
+0 315.128 m 13
+ 0 482.984 l 25
+ 18.999 483.021 l 25
+ 19 308.431 l 21
+ 6.04395 308.565 2.43457 311.609 0 315.128 c 13
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimisFour
+Encoding: 99 -1 99
+Width: 19
+VWidth: 2048
+Flags: HW
+HStem: 364.431 318.553
+VStem: 0 19<365.972 682.984>
+LayerCount: 2
+Fore
+SplineSet
+0 630.128 m 13
+ 0 797.984 l 25
+ 18.999 798.021 l 25
+ 19 623.431 l 21
+ 6.04395 623.565 2.43457 626.609 0 630.128 c 13
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimisFive
+Encoding: 100 -1 100
+Width: 19
+VWidth: 2363
+Flags: HW
+HStem: 679.431 318.553
+VStem: 0 19<680.972 997.984>
+LayerCount: 2
+Fore
+SplineSet
+0 945.128 m 13
+ 0 1112.98 l 25
+ 18.999 1113.02 l 25
+ 19 938.431 l 21
+ 6.04395 938.565 2.43457 941.609 0 945.128 c 13
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinimisSix
+Encoding: 101 -1 101
+Width: 19
+VWidth: 2678
+Flags: HW
+HStem: 994.431 318.553
+VStem: 0 19<995.972 1312.98>
+LayerCount: 2
+Fore
+SplineSet
+0 1260.13 m 13
+ 0 1427.98 l 25
+ 18.999 1428.02 l 25
+ 19 1253.43 l 21
+ 6.04395 1253.56 2.43457 1256.61 0 1260.13 c 13
+EndSplineSet
+EndChar
+
+StartChar: DivisioMinorTwo
+Encoding: 102 -1 102
Width: 19
VWidth: 2048
Flags: W
@@ -2306,7 +2577,7 @@ EndSplineSet
EndChar
StartChar: DivisioMinorThree
-Encoding: 93 -1 93
+Encoding: 103 -1 103
Width: 19
VWidth: 2048
Flags: W
@@ -2324,7 +2595,7 @@ EndSplineSet
EndChar
StartChar: DivisioMinorFour
-Encoding: 94 -1 94
+Encoding: 104 -1 104
Width: 19
VWidth: 2048
Flags: W
@@ -2342,7 +2613,7 @@ Validated: 1
EndChar
StartChar: DivisioMinorFive
-Encoding: 95 -1 95
+Encoding: 105 -1 105
Width: 19
VWidth: 2048
Flags: W
@@ -2359,7 +2630,7 @@ EndSplineSet
EndChar
StartChar: FClef
-Encoding: 96 -1 96
+Encoding: 106 -1 106
Width: 322
VWidth: 2503
Flags: W
@@ -2397,7 +2668,7 @@ Validated: 33
EndChar
StartChar: FClefChange
-Encoding: 97 -1 97
+Encoding: 107 -1 107
Width: 322
VWidth: 2503
Flags: W
@@ -2435,7 +2706,7 @@ Validated: 33
EndChar
StartChar: Flat
-Encoding: 98 -1 98
+Encoding: 108 -1 108
Width: 162
VWidth: 2587
Flags: W
@@ -2463,7 +2734,7 @@ Validated: 1
EndChar
StartChar: FlatHole
-Encoding: 99 -1 99
+Encoding: 109 -1 109
Width: 162
VWidth: 2587
Flags: W
@@ -2483,8 +2754,73 @@ EndSplineSet
Validated: 1
EndChar
+StartChar: FlatParen
+Encoding: 110 -1 110
+Width: 364
+VWidth: 2587
+Flags: W
+HStem: -47.4492 60.7002<164.901 261.809>
+VStem: 0 18<11.9414 123.487> 100.825 24.0498<59.035 321.285> 247.075 15.5996<18.0513 121.851> 346 18<11.9414 123.487>
+LayerCount: 2
+Fore
+SplineSet
+286 -101.569 m 5
+ 286 -101.569 346 -17.333 346 67.71 c 4
+ 346 152.765 286.001 237.021 286.001 237.021 c 5
+ 286.001 237.021 287.476 239.568 289 240.521 c 28
+ 290.727 241.601 294.001 242.021 294.001 242.021 c 5
+ 294.001 242.021 364 155.968 364 67.71 c 4
+ 364 -20.5371 294 -106.569 294 -106.569 c 5
+ 294 -106.569 290.727 -106.148 289 -105.069 c 28
+ 287.476 -104.116 286 -101.569 286 -101.569 c 5
+78 -101.569 m 5
+ 78 -101.569 76.5244 -104.116 75 -105.069 c 28
+ 73.2734 -106.148 70 -106.569 70 -106.569 c 5
+ 70 -106.569 0 -20.5371 0 67.71 c 4
+ 0 155.968 69.999 242.021 69.999 242.021 c 5
+ 69.999 242.021 73.2734 241.601 75 240.521 c 28
+ 76.5244 239.568 77.999 237.021 77.999 237.021 c 5
+ 77.999 237.021 18 152.765 18 67.71 c 4
+ 18 -17.333 78 -101.569 78 -101.569 c 5
+146.975 179.05 m 1
+ 209.245 179.05 262.675 136.151 262.675 107.551 c 0
+ 262.675 -5.11621 262.242 -47.4492 261.375 -47.4492 c 0
+ 197.242 -47.4492 145.675 -27.082 106.675 13.6514 c 1
+ 102.775 112.452 100.825 127.185 100.825 211.848 c 0
+ 100.825 240.067 101.042 267.502 101.475 294.151 c 0
+ 101.475 312.351 105.808 321.451 114.475 321.451 c 0
+ 121.408 321.451 124.875 312.784 124.875 295.451 c 2
+ 122.275 73.0508 l 1
+ 157.808 33.1836 191.607 13.251 223.675 13.251 c 0
+ 239.275 13.251 247.075 21.0508 247.075 36.6514 c 0
+ 247.075 64.7314 237.428 74.0947 191.175 101.85 c 2
+ 146.975 126.55 l 1
+ 146.975 179.05 l 1
+EndSplineSet
+EndChar
+
+StartChar: FlatParenHole
+Encoding: 111 -1 111
+Width: 364
+VWidth: 2587
+Flags: W
+HStem: 7.58594 128.413
+VStem: 116.035 137.28
+LayerCount: 2
+Fore
+SplineSet
+116.035 73.3662 m 1
+ 116.002 135.999 l 25
+ 143.204 132.215 l 1
+ 191.825 105.045 l 2
+ 242.703 74.5137 253.315 64.2148 253.315 33.3262 c 0
+ 253.315 16.166 244.735 7.58594 227.575 7.58594 c 0
+ 192.301 7.58594 116.035 73.3662 116.035 73.3662 c 1
+EndSplineSet
+EndChar
+
StartChar: hepisemaleft
-Encoding: 100 -1 100
+Encoding: 112 -1 112
Width: 1
VWidth: 2044
Flags: HW
@@ -2502,7 +2838,7 @@ EndSplineSet
EndChar
StartChar: hepisemaright
-Encoding: 101 -1 101
+Encoding: 113 -1 113
Width: 2
VWidth: 2044
Flags: HW
@@ -2520,7 +2856,7 @@ EndSplineSet
EndChar
StartChar: hepisema_base
-Encoding: 102 -1 102
+Encoding: 114 -1 114
Width: 1
VWidth: 2044
Flags: HW
@@ -2538,7 +2874,7 @@ EndSplineSet
EndChar
StartChar: idebilis
-Encoding: 103 -1 103
+Encoding: 115 -1 115
Width: 83
VWidth: 2605
Flags: W
@@ -2561,7 +2897,7 @@ Validated: 33
EndChar
StartChar: idebilis#Cavum
-Encoding: 104 -1 104
+Encoding: 116 -1 116
Width: 83
VWidth: 2605
Flags: HW
@@ -2581,7 +2917,7 @@ EndSplineSet
EndChar
StartChar: line2
-Encoding: 105 -1 105
+Encoding: 117 -1 117
Width: 18
VWidth: 2048
Flags: HW
@@ -2599,7 +2935,7 @@ EndSplineSet
EndChar
StartChar: line3
-Encoding: 106 -1 106
+Encoding: 118 -1 118
Width: 18
VWidth: 2048
Flags: HW
@@ -2617,7 +2953,7 @@ EndSplineSet
EndChar
StartChar: line4
-Encoding: 107 -1 107
+Encoding: 119 -1 119
Width: 18
VWidth: 2048
Flags: HW
@@ -2634,7 +2970,7 @@ EndSplineSet
EndChar
StartChar: line5
-Encoding: 108 -1 108
+Encoding: 120 -1 120
Width: 18
VWidth: 2048
Flags: HW
@@ -2651,7 +2987,7 @@ EndSplineSet
EndChar
StartChar: Linea
-Encoding: 109 -1 109
+Encoding: 121 -1 121
Width: 431
VWidth: 2612
Flags: W
@@ -2680,7 +3016,7 @@ Validated: 1
EndChar
StartChar: Linea#Cavum
-Encoding: 110 -1 110
+Encoding: 122 -1 122
Width: 431
VWidth: 2612
Flags: HW
@@ -2700,7 +3036,7 @@ EndSplineSet
EndChar
StartChar: LineaPunctum
-Encoding: 111 -1 111
+Encoding: 123 -1 123
Width: 266
VWidth: 2048
Flags: W
@@ -2735,7 +3071,7 @@ Validated: 1
EndChar
StartChar: LineaPunctum#Cavum
-Encoding: 112 -1 112
+Encoding: 124 -1 124
Width: 266
VWidth: 2048
Flags: W
@@ -2756,7 +3092,7 @@ Validated: 33
EndChar
StartChar: LineaPunctum#Cavum.caeciliae
-Encoding: 113 -1 113
+Encoding: 125 -1 125
Width: 266
VWidth: 2048
Flags: W
@@ -2774,7 +3110,7 @@ Validated: 1
EndChar
StartChar: mademinutus
-Encoding: 114 -1 114
+Encoding: 126 -1 126
Width: 168
VWidth: 2048
Flags: W
@@ -2800,7 +3136,7 @@ EndSplineSet
EndChar
StartChar: mademinutus#Cavum
-Encoding: 115 -1 115
+Encoding: 127 -1 127
Width: 168
VWidth: 2048
Flags: W
@@ -2822,7 +3158,7 @@ EndSplineSet
EndChar
StartChar: mdeminutus
-Encoding: 116 -1 116
+Encoding: 128 -1 128
Width: 168
VWidth: 2048
Flags: HW
@@ -2847,7 +3183,7 @@ EndSplineSet
EndChar
StartChar: mdeminutus#Cavum
-Encoding: 117 -1 117
+Encoding: 129 -1 129
Width: 168
VWidth: 2048
Flags: HW
@@ -2868,7 +3204,7 @@ EndSplineSet
EndChar
StartChar: mnbdeminutus
-Encoding: 118 -1 118
+Encoding: 130 -1 130
Width: 168
VWidth: 2048
Flags: HW
@@ -2892,7 +3228,7 @@ EndSplineSet
EndChar
StartChar: mnbdeminutus#Cavum
-Encoding: 119 -1 119
+Encoding: 131 -1 131
Width: 168
VWidth: 2048
Flags: HW
@@ -2914,7 +3250,7 @@ EndSplineSet
EndChar
StartChar: mnbpdeminutus
-Encoding: 120 -1 120
+Encoding: 132 -1 132
Width: 168
VWidth: 2048
Flags: W
@@ -2938,7 +3274,7 @@ Validated: 33
EndChar
StartChar: mnbpdeminutus#Cavum
-Encoding: 121 -1 121
+Encoding: 133 -1 133
Width: 168
VWidth: 2048
Flags: HW
@@ -2959,7 +3295,7 @@ EndSplineSet
EndChar
StartChar: mpdeminutus
-Encoding: 122 -1 122
+Encoding: 134 -1 134
Width: 168
VWidth: 2048
Flags: HW
@@ -2984,7 +3320,7 @@ EndSplineSet
EndChar
StartChar: mpdeminutus#Cavum
-Encoding: 123 -1 123
+Encoding: 135 -1 135
Width: 168
VWidth: 2048
Flags: HW
@@ -3005,7 +3341,7 @@ EndSplineSet
EndChar
StartChar: msdeminutus
-Encoding: 124 -1 124
+Encoding: 136 -1 136
Width: 168
VWidth: 2048
Flags: W
@@ -3031,7 +3367,7 @@ Validated: 1
EndChar
StartChar: msdeminutus#Cavum
-Encoding: 125 -1 125
+Encoding: 137 -1 137
Width: 168
VWidth: 2048
Flags: HW
@@ -3052,7 +3388,7 @@ EndSplineSet
EndChar
StartChar: Natural
-Encoding: 126 -1 126
+Encoding: 138 -1 138
Width: 108
Flags: W
VStem: 0 25.2002<7.7002 121.4 173.3 323.299> 84 24<-184.013 -35.5 18.5 128.9>
@@ -3088,7 +3424,7 @@ Validated: 1
EndChar
StartChar: NaturalHole
-Encoding: 127 -1 127
+Encoding: 139 -1 139
Width: 108
Flags: W
HStem: 1.64062 133.319
@@ -3105,8 +3441,78 @@ EndSplineSet
Validated: 1
EndChar
+StartChar: NaturalParen
+Encoding: 140 -1 140
+Width: 310
+Flags: W
+VStem: 0 18<11.9414 123.487> 101 25.2002<7.7002 121.4 173.3 323.299> 185 24<-184.013 -35.5 18.5 128.9> 292 18<11.9414 123.487>
+LayerCount: 2
+Fore
+SplineSet
+232 -101.569 m 5
+ 232 -101.569 292 -17.333 292 67.71 c 4
+ 292 152.765 232.001 237.021 232.001 237.021 c 5
+ 232.001 237.021 233.476 239.568 235 240.521 c 28
+ 236.727 241.601 240.001 242.021 240.001 242.021 c 5
+ 240.001 242.021 310 155.968 310 67.71 c 4
+ 310 -20.5371 240 -106.569 240 -106.569 c 5
+ 240 -106.569 236.727 -106.148 235 -105.069 c 28
+ 233.476 -104.116 232 -101.569 232 -101.569 c 5
+78 -101.569 m 5
+ 78 -101.569 76.5244 -104.116 75 -105.069 c 28
+ 73.2734 -106.148 70 -106.569 70 -106.569 c 5
+ 70 -106.569 0 -20.5371 0 67.71 c 4
+ 0 155.968 69.999 242.021 69.999 242.021 c 5
+ 69.999 242.021 73.2734 241.601 75 240.521 c 28
+ 76.5244 239.568 77.999 237.021 77.999 237.021 c 5
+ 77.999 237.021 18 152.765 18 67.71 c 4
+ 18 -17.333 78 -101.569 78 -101.569 c 5
+101 320.9 m 1
+ 105 322.5 109.199 323.3 113.6 323.3 c 0
+ 118 323.3 122.2 322.5 126.2 320.9 c 1
+ 126.2 232.1 l 1
+ 125 173.3 l 1
+ 155 178.1 l 2
+ 171.8 181.301 186.2 182.9 198.2 182.9 c 0
+ 202.199 182.9 204.6 180.899 205.4 176.9 c 2
+ 209 -178.3 l 1
+ 205.8 -182.3 202.199 -184.3 198.2 -184.3 c 0
+ 197.399 -184.3 192.6 -182.7 183.8 -179.5 c 1
+ 184.601 -178.699 185 -145.9 185 -81.0996 c 2
+ 185 -35.5 l 1
+ 113 -47.5 l 1
+ 107.399 -46.6992 104.2 -43.5 103.4 -37.9004 c 1
+ 103.4 92.9004 l 1
+ 102.2 214.1 l 1
+ 101 300.5 l 1
+ 101 320.9 l 1
+187.4 128.9 m 1
+ 125 119.3 l 2
+ 124.199 119.3 123.8 82.0996 123.8 7.7002 c 1
+ 187.4 18.5 l 1
+ 187.4 128.9 l 1
+EndSplineSet
+EndChar
+
+StartChar: NaturalParenHole
+Encoding: 141 -1 141
+Width: 310
+Flags: W
+HStem: 1.64062 133.319
+VStem: 120.62 69.96<13.5195 124.399>
+LayerCount: 2
+Fore
+SplineSet
+120.62 1.64062 m 5
+ 121.94 124.399 l 6
+ 190.58 134.96 l 5
+ 190.58 13.5195 l 1
+ 120.62 1.64062 l 5
+EndSplineSet
+EndChar
+
StartChar: OriscusDeminutus
-Encoding: 128 -1 128
+Encoding: 142 -1 142
Width: 168
VWidth: 0
Flags: W
@@ -3132,7 +3538,7 @@ Validated: 33
EndChar
StartChar: OriscusDeminutus#Cavum
-Encoding: 129 -1 129
+Encoding: 143 -1 143
Width: 168
VWidth: 0
Flags: HW
@@ -3156,7 +3562,7 @@ EndSplineSet
EndChar
StartChar: OriscusDeminutus#Cavum.caeciliae
-Encoding: 130 -1 130
+Encoding: 144 -1 144
Width: 168
VWidth: 2612
Flags: W
@@ -3179,7 +3585,7 @@ EndSplineSet
EndChar
StartChar: OriscusDeminutus.caeciliae
-Encoding: 131 -1 131
+Encoding: 145 -1 145
Width: 168
VWidth: 2612
Flags: W
@@ -3203,7 +3609,7 @@ Validated: 33
EndChar
StartChar: p2base
-Encoding: 132 -1 132
+Encoding: 146 -1 146
Width: 166
VWidth: 2613
Flags: HW
@@ -3230,7 +3636,7 @@ EndSplineSet
EndChar
StartChar: p2base#Cavum
-Encoding: 133 -1 133
+Encoding: 147 -1 147
Width: 166
VWidth: 2613
Flags: HW
@@ -3255,7 +3661,7 @@ EndSplineSet
EndChar
StartChar: pesdeminutus
-Encoding: 134 -1 134
+Encoding: 148 -1 148
Width: 166
VWidth: 2684
Flags: HW
@@ -3278,7 +3684,7 @@ EndSplineSet
EndChar
StartChar: pesdeminutus#Cavum
-Encoding: 135 -1 135
+Encoding: 149 -1 149
Width: 166
VWidth: 2684
Flags: HW
@@ -3299,7 +3705,7 @@ EndSplineSet
EndChar
StartChar: pesdeminutus_op
-Encoding: 136 -1 136
+Encoding: 150 -1 150
Width: 166
VWidth: 2684
Flags: W
@@ -3326,7 +3732,7 @@ Validated: 1
EndChar
StartChar: PesOneNothing
-Encoding: 137 -1 137
+Encoding: 151 -1 151
Width: 166
VWidth: 2613
Flags: W
@@ -3357,7 +3763,7 @@ EndSplineSet
EndChar
StartChar: PesOneNothing#Cavum
-Encoding: 138 -1 138
+Encoding: 152 -1 152
Width: 166
VWidth: 2613
Flags: HW
@@ -3389,7 +3795,7 @@ EndSplineSet
EndChar
StartChar: porrectus1
-Encoding: 139 -1 139
+Encoding: 153 -1 153
Width: 447
VWidth: 2553
Flags: HW
@@ -3411,7 +3817,7 @@ EndSplineSet
EndChar
StartChar: porrectus1#Cavum
-Encoding: 140 -1 140
+Encoding: 154 -1 154
Width: 447
VWidth: 2553
Flags: HW
@@ -3431,7 +3837,7 @@ EndSplineSet
EndChar
StartChar: porrectus2
-Encoding: 141 -1 141
+Encoding: 155 -1 155
Width: 547
VWidth: 2575
Flags: HW
@@ -3455,7 +3861,7 @@ EndSplineSet
EndChar
StartChar: porrectus2#Cavum
-Encoding: 142 -1 142
+Encoding: 156 -1 156
Width: 547
VWidth: 2575
Flags: HW
@@ -3477,7 +3883,7 @@ EndSplineSet
EndChar
StartChar: porrectus3
-Encoding: 143 -1 143
+Encoding: 157 -1 157
Width: 628
VWidth: 2556
Flags: HW
@@ -3502,7 +3908,7 @@ EndSplineSet
EndChar
StartChar: porrectus3#Cavum
-Encoding: 144 -1 144
+Encoding: 158 -1 158
Width: 628
VWidth: 2556
Flags: HW
@@ -3525,7 +3931,7 @@ EndSplineSet
EndChar
StartChar: porrectus4
-Encoding: 145 -1 145
+Encoding: 159 -1 159
Width: 704
VWidth: 2500
Flags: HW
@@ -3549,7 +3955,7 @@ EndSplineSet
EndChar
StartChar: porrectus4#Cavum
-Encoding: 146 -1 146
+Encoding: 160 -1 160
Width: 704
VWidth: 2500
Flags: HW
@@ -3571,7 +3977,7 @@ EndSplineSet
EndChar
StartChar: porrectus5
-Encoding: 147 -1 147
+Encoding: 161 -1 161
Width: 849
VWidth: 2048
Flags: HW
@@ -3595,7 +4001,7 @@ EndSplineSet
EndChar
StartChar: porrectus5#Cavum
-Encoding: 148 -1 148
+Encoding: 162 -1 162
Width: 849
VWidth: 2048
Flags: HW
@@ -3617,7 +4023,7 @@ EndSplineSet
EndChar
StartChar: porrectusam11
-Encoding: 149 -1 149
+Encoding: 163 -1 163
Width: 503
VWidth: 2553
Flags: HW
@@ -3639,7 +4045,7 @@ EndSplineSet
EndChar
StartChar: porrectusam11#Cavum
-Encoding: 150 -1 150
+Encoding: 164 -1 164
Width: 503
VWidth: 2553
Flags: HW
@@ -3659,7 +4065,7 @@ EndSplineSet
EndChar
StartChar: porrectusam12
-Encoding: 151 -1 151
+Encoding: 165 -1 165
Width: 628
VWidth: 2575
Flags: HW
@@ -3683,7 +4089,7 @@ EndSplineSet
EndChar
StartChar: porrectusam12#Cavum
-Encoding: 152 -1 152
+Encoding: 166 -1 166
Width: 628
VWidth: 2575
Flags: HW
@@ -3705,7 +4111,7 @@ EndSplineSet
EndChar
StartChar: porrectusam13
-Encoding: 153 -1 153
+Encoding: 167 -1 167
Width: 678
VWidth: 2556
Flags: HW
@@ -3729,7 +4135,7 @@ EndSplineSet
EndChar
StartChar: porrectusam13#Cavum
-Encoding: 154 -1 154
+Encoding: 168 -1 168
Width: 678
VWidth: 2556
Flags: HW
@@ -3752,7 +4158,7 @@ EndSplineSet
EndChar
StartChar: porrectusam14
-Encoding: 155 -1 155
+Encoding: 169 -1 169
Width: 721
VWidth: 2500
Flags: HW
@@ -3777,7 +4183,7 @@ EndSplineSet
EndChar
StartChar: porrectusam14#Cavum
-Encoding: 156 -1 156
+Encoding: 170 -1 170
Width: 721
VWidth: 2500
Flags: HW
@@ -3799,7 +4205,7 @@ EndSplineSet
EndChar
StartChar: porrectusam15
-Encoding: 157 -1 157
+Encoding: 171 -1 171
Width: 933
VWidth: 2048
Flags: HW
@@ -3824,7 +4230,7 @@ EndSplineSet
EndChar
StartChar: porrectusam15#Cavum
-Encoding: 158 -1 158
+Encoding: 172 -1 172
Width: 933
VWidth: 2048
Flags: HW
@@ -3846,7 +4252,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus1
-Encoding: 159 -1 159
+Encoding: 173 -1 173
Width: 503
VWidth: 2553
Flags: HW
@@ -3869,7 +4275,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus1#Cavum
-Encoding: 160 -1 160
+Encoding: 174 -1 174
Width: 503
VWidth: 2553
Flags: HW
@@ -3889,7 +4295,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus2
-Encoding: 161 -1 161
+Encoding: 175 -1 175
Width: 628
VWidth: 2575
Flags: HW
@@ -3911,7 +4317,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus2#Cavum
-Encoding: 162 -1 162
+Encoding: 176 -1 176
Width: 628
VWidth: 2575
Flags: HW
@@ -3933,7 +4339,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus3
-Encoding: 163 -1 163
+Encoding: 177 -1 177
Width: 628
VWidth: 2556
Flags: HW
@@ -3957,7 +4363,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus3#Cavum
-Encoding: 164 -1 164
+Encoding: 178 -1 178
Width: 628
VWidth: 2556
Flags: HW
@@ -3980,7 +4386,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus4
-Encoding: 165 -1 165
+Encoding: 179 -1 179
Width: 628
VWidth: 2500
Flags: HW
@@ -4003,7 +4409,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus4#Cavum
-Encoding: 166 -1 166
+Encoding: 180 -1 180
Width: 628
VWidth: 2500
Flags: HW
@@ -4025,7 +4431,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus5
-Encoding: 167 -1 167
+Encoding: 181 -1 181
Width: 931
VWidth: 2048
Flags: HW
@@ -4046,7 +4452,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexus5#Cavum
-Encoding: 168 -1 168
+Encoding: 182 -1 182
Width: 931
VWidth: 2048
Flags: HW
@@ -4063,7 +4469,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb1
-Encoding: 169 -1 169
+Encoding: 183 -1 183
Width: 503
VWidth: 2553
Flags: HW
@@ -4083,7 +4489,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb1#Cavum
-Encoding: 170 -1 170
+Encoding: 184 -1 184
Width: 503
VWidth: 2553
Flags: HW
@@ -4103,7 +4509,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb2
-Encoding: 171 -1 171
+Encoding: 185 -1 185
Width: 628
VWidth: 2575
Flags: HW
@@ -4123,7 +4529,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb2#Cavum
-Encoding: 172 -1 172
+Encoding: 186 -1 186
Width: 628
VWidth: 2575
Flags: HW
@@ -4145,7 +4551,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb3
-Encoding: 173 -1 173
+Encoding: 187 -1 187
Width: 628
VWidth: 2556
Flags: HW
@@ -4166,7 +4572,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb3#Cavum
-Encoding: 174 -1 174
+Encoding: 188 -1 188
Width: 628
VWidth: 2556
Flags: HW
@@ -4189,7 +4595,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb4
-Encoding: 175 -1 175
+Encoding: 189 -1 189
Width: 628
VWidth: 2500
Flags: HW
@@ -4209,7 +4615,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb4#Cavum
-Encoding: 176 -1 176
+Encoding: 190 -1 190
Width: 628
VWidth: 2500
Flags: HW
@@ -4231,7 +4637,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb5
-Encoding: 177 -1 177
+Encoding: 191 -1 191
Width: 931
VWidth: 2048
Flags: HW
@@ -4250,7 +4656,7 @@ EndSplineSet
EndChar
StartChar: porrectusflexusnb5#Cavum
-Encoding: 178 -1 178
+Encoding: 192 -1 192
Width: 931
VWidth: 2048
Flags: HW
@@ -4267,7 +4673,7 @@ EndSplineSet
EndChar
StartChar: Punctum
-Encoding: 179 -1 179
+Encoding: 193 -1 193
Width: 166
VWidth: 2612
Flags: HW
@@ -4287,7 +4693,7 @@ EndSplineSet
EndChar
StartChar: Punctum#Cavum
-Encoding: 180 -1 180
+Encoding: 194 -1 194
Width: 166
VWidth: 2612
Flags: W
@@ -4308,7 +4714,7 @@ Validated: 33
EndChar
StartChar: Punctum#Cavum.caeciliae
-Encoding: 181 -1 181
+Encoding: 195 -1 195
Width: 166
VWidth: 2612
Flags: W
@@ -4327,7 +4733,7 @@ Validated: 1
EndChar
StartChar: PunctumAscendens
-Encoding: 182 -1 182
+Encoding: 196 -1 196
Width: 166
VWidth: 1149
Flags: W
@@ -4349,7 +4755,7 @@ Validated: 1
EndChar
StartChar: PunctumAscendens#Cavum
-Encoding: 183 -1 183
+Encoding: 197 -1 197
Width: 166
VWidth: 1149
Flags: HW
@@ -4370,7 +4776,7 @@ EndSplineSet
EndChar
StartChar: PunctumAscendens_op
-Encoding: 184 -1 184
+Encoding: 198 -1 198
Width: 166
VWidth: 1149
Flags: HW
@@ -4394,7 +4800,7 @@ EndSplineSet
EndChar
StartChar: PunctumAuctusLineBL
-Encoding: 185 -1 185
+Encoding: 199 -1 199
Width: 166
VWidth: 2689
Flags: W
@@ -4418,7 +4824,7 @@ Validated: 1
EndChar
StartChar: PunctumAuctusLineBL#Cavum
-Encoding: 186 -1 186
+Encoding: 200 -1 200
Width: 166
VWidth: 2689
Flags: HW
@@ -4439,7 +4845,7 @@ EndSplineSet
EndChar
StartChar: PunctumAuctusLineBL_op
-Encoding: 187 -1 187
+Encoding: 201 -1 201
Width: 166
VWidth: 2689
Flags: W
@@ -4466,7 +4872,7 @@ Validated: 1
EndChar
StartChar: PunctumDeminutus
-Encoding: 188 -1 188
+Encoding: 202 -1 202
Width: 83
VWidth: 2612
Flags: W
@@ -4487,7 +4893,7 @@ Validated: 1
EndChar
StartChar: PunctumDeminutus#Cavum
-Encoding: 189 -1 189
+Encoding: 203 -1 203
Width: 83
VWidth: 2612
Flags: HW
@@ -4507,7 +4913,7 @@ EndSplineSet
EndChar
StartChar: PunctumDescendens
-Encoding: 190 -1 190
+Encoding: 204 -1 204
Width: 166
VWidth: 1342
Flags: W
@@ -4528,7 +4934,7 @@ Validated: 33
EndChar
StartChar: PunctumDescendens#Cavum
-Encoding: 191 -1 191
+Encoding: 205 -1 205
Width: 166
VWidth: 1342
Flags: HW
@@ -4549,7 +4955,7 @@ EndSplineSet
EndChar
StartChar: PunctumDescendens_op
-Encoding: 192 -1 192
+Encoding: 206 -1 206
Width: 166
VWidth: 1342
Flags: W
@@ -4573,7 +4979,7 @@ Validated: 33
EndChar
StartChar: PunctumInclinatumAuctus
-Encoding: 193 -1 193
+Encoding: 207 -1 207
Width: 185
VWidth: 0
Flags: HW
@@ -4595,7 +5001,7 @@ EndSplineSet
EndChar
StartChar: PunctumInclinatumAuctus#Cavum
-Encoding: 194 -1 194
+Encoding: 208 -1 208
Width: 185
VWidth: 0
Flags: W
@@ -4615,7 +5021,7 @@ Validated: 1
EndChar
StartChar: PunctumInclinatumAuctus#Cavum.caeciliae
-Encoding: 195 -1 195
+Encoding: 209 -1 209
Width: 185
VWidth: 2048
Flags: HW
@@ -4633,7 +5039,7 @@ EndSplineSet
EndChar
StartChar: PunctumInclinatumAuctus.caeciliae
-Encoding: 196 -1 196
+Encoding: 210 -1 210
Width: 185
VWidth: 2048
Flags: W
@@ -4657,7 +5063,7 @@ Validated: 33
EndChar
StartChar: PunctumInclinatumDeminutus
-Encoding: 197 -1 197
+Encoding: 211 -1 211
Width: 139
VWidth: 2649
Flags: W
@@ -4676,7 +5082,7 @@ Validated: 1
EndChar
StartChar: PunctumInclinatumDeminutus#Cavum
-Encoding: 198 -1 198
+Encoding: 212 -1 212
Width: 139
VWidth: 2649
Flags: HW
@@ -4694,7 +5100,7 @@ EndSplineSet
EndChar
StartChar: PunctumLineBL
-Encoding: 199 -1 199
+Encoding: 213 -1 213
Width: 166
VWidth: 2612
Flags: W
@@ -4717,7 +5123,7 @@ Validated: 1
EndChar
StartChar: PunctumLineBLBR
-Encoding: 200 -1 200
+Encoding: 214 -1 214
Width: 166
VWidth: 2612
Flags: HW
@@ -4741,7 +5147,7 @@ EndSplineSet
EndChar
StartChar: PunctumLineBR
-Encoding: 201 -1 201
+Encoding: 215 -1 215
Width: 166
VWidth: 2612
Flags: W
@@ -4764,7 +5170,7 @@ Validated: 1
EndChar
StartChar: PunctumLineTL
-Encoding: 202 -1 202
+Encoding: 216 -1 216
Width: 166
VWidth: 2612
Flags: W
@@ -4787,7 +5193,7 @@ Validated: 1
EndChar
StartChar: PunctumLineTLTR
-Encoding: 203 -1 203
+Encoding: 217 -1 217
Width: 166
VWidth: 2612
Flags: W
@@ -4812,7 +5218,7 @@ Validated: 1
EndChar
StartChar: PunctumLineTR
-Encoding: 204 -1 204
+Encoding: 218 -1 218
Width: 166
VWidth: 2612
Flags: W
@@ -4835,7 +5241,7 @@ Validated: 1
EndChar
StartChar: PunctumSmall
-Encoding: 205 -1 205
+Encoding: 219 -1 219
Width: 155
VWidth: 2537
Flags: HW
@@ -4857,7 +5263,7 @@ EndSplineSet
EndChar
StartChar: PunctumSmall#Cavum
-Encoding: 206 -1 206
+Encoding: 220 -1 220
Width: 155
VWidth: 2537
Flags: HW
@@ -4877,7 +5283,7 @@ EndSplineSet
EndChar
StartChar: queue
-Encoding: 207 -1 207
+Encoding: 221 -1 221
Width: 18
VWidth: 2048
Flags: HW
@@ -4896,7 +5302,7 @@ EndSplineSet
EndChar
StartChar: queuebase
-Encoding: 208 -1 208
+Encoding: 222 -1 222
Width: 18
VWidth: 2048
Flags: HW
@@ -4914,7 +5320,7 @@ EndSplineSet
EndChar
StartChar: Quilisma
-Encoding: 209 -1 209
+Encoding: 223 -1 223
Width: 166
VWidth: 2496
Flags: HW
@@ -4942,7 +5348,7 @@ EndSplineSet
EndChar
StartChar: Quilisma#Cavum
-Encoding: 210 -1 210
+Encoding: 224 -1 224
Width: 166
VWidth: 2496
Flags: HW
@@ -4970,7 +5376,7 @@ EndSplineSet
EndChar
StartChar: QuilismaLineTR
-Encoding: 211 -1 211
+Encoding: 225 -1 225
Width: 166
VWidth: 2496
Flags: W
@@ -5000,7 +5406,7 @@ Validated: 33
EndChar
StartChar: QuilismaPesOneNothing
-Encoding: 212 -1 212
+Encoding: 226 -1 226
Width: 166
VWidth: 2496
Flags: HW
@@ -5033,7 +5439,7 @@ EndSplineSet
EndChar
StartChar: QuilismaPesOneNothing#Cavum
-Encoding: 213 -1 213
+Encoding: 227 -1 227
Width: 166
VWidth: 2496
Flags: HW
@@ -5068,7 +5474,7 @@ EndSplineSet
EndChar
StartChar: rdeminutus
-Encoding: 214 -1 214
+Encoding: 228 -1 228
Width: 83
VWidth: 2605
Flags: W
@@ -5091,7 +5497,7 @@ Validated: 33
EndChar
StartChar: rdeminutus#Cavum
-Encoding: 215 -1 215
+Encoding: 229 -1 229
Width: 83
VWidth: 2605
Flags: HW
@@ -5111,7 +5517,7 @@ EndSplineSet
EndChar
StartChar: RoundBrace
-Encoding: 216 -1 216
+Encoding: 230 -1 230
Width: 937
VWidth: 2048
Flags: W
@@ -5137,7 +5543,7 @@ Validated: 1
EndChar
StartChar: RoundBraceDown
-Encoding: 217 -1 217
+Encoding: 231 -1 231
Width: 937
VWidth: 2048
Flags: W
@@ -5163,7 +5569,7 @@ Validated: 1
EndChar
StartChar: rqueue
-Encoding: 218 -1 218
+Encoding: 232 -1 232
Width: 18
VWidth: 2048
Flags: HW
@@ -5182,7 +5588,7 @@ EndSplineSet
EndChar
StartChar: rvbase
-Encoding: 219 -1 219
+Encoding: 233 -1 233
Width: 166
VWidth: 2637
Flags: HW
@@ -5206,7 +5612,7 @@ EndSplineSet
EndChar
StartChar: rvirgabase
-Encoding: 220 -1 220
+Encoding: 234 -1 234
Width: 166
VWidth: 2637
Flags: HW
@@ -5226,7 +5632,7 @@ EndSplineSet
EndChar
StartChar: Semicirculus
-Encoding: 221 -1 221
+Encoding: 235 -1 235
Width: 124
VWidth: 1606
Flags: W
@@ -5246,7 +5652,7 @@ Validated: 1
EndChar
StartChar: SemicirculusReversus
-Encoding: 222 -1 222
+Encoding: 236 -1 236
Width: 125
VWidth: 1583
Flags: W
@@ -5266,7 +5672,7 @@ Validated: 1
EndChar
StartChar: Sharp
-Encoding: 223 -1 223
+Encoding: 237 -1 237
Width: 258
VWidth: 2048
Flags: W
@@ -5330,7 +5736,7 @@ Validated: 1
EndChar
StartChar: Sharp.modern
-Encoding: 224 -1 224
+Encoding: 238 -1 238
Width: 162
Flags: W
VStem: 38.5 25.667<-193.491 -47.9297 9.49219 116.571 173.699 319.097> 98 25.5<-182.085 -38.8672 18.4727 125.112 182.473 330.499>
@@ -5388,7 +5794,7 @@ EndSplineSet
EndChar
StartChar: SharpHole
-Encoding: 225 -1 225
+Encoding: 239 -1 239
Width: 258
VWidth: 2048
Flags: W
@@ -5407,7 +5813,7 @@ Validated: 1
EndChar
StartChar: SharpHole.modern
-Encoding: 226 -1 226
+Encoding: 240 -1 240
Width: 162
Flags: HW
VStem: 38.5 25.667<-193.491 -47.9297 9.49219 116.571 173.699 319.097> 98 25.5<-182.085 -38.8672 18.4727 125.112 182.473 330.499>
@@ -5422,8 +5828,235 @@ SplineSet
EndSplineSet
EndChar
+StartChar: SharpParen
+Encoding: 241 -1 241
+Width: 428
+VWidth: 2048
+Flags: W
+VStem: 0 18<11.9414 123.487> 410 18<11.9414 123.487>
+LayerCount: 2
+Fore
+SplineSet
+350 -101.569 m 5
+ 350 -101.569 410 -17.333 410 67.71 c 4
+ 410 152.765 350.001 237.021 350.001 237.021 c 5
+ 350.001 237.021 351.476 239.568 353 240.521 c 28
+ 354.727 241.601 358.001 242.021 358.001 242.021 c 5
+ 358.001 242.021 428 155.968 428 67.71 c 4
+ 428 -20.5371 358 -106.569 358 -106.569 c 5
+ 358 -106.569 354.727 -106.148 353 -105.069 c 28
+ 351.476 -104.116 350 -101.569 350 -101.569 c 5
+78 -101.569 m 5
+ 78 -101.569 76.5244 -104.116 75 -105.069 c 28
+ 73.2734 -106.148 70 -106.569 70 -106.569 c 5
+ 70 -106.569 0 -20.5371 0 67.71 c 4
+ 0 155.968 69.999 242.021 69.999 242.021 c 5
+ 69.999 242.021 73.2734 241.601 75 240.521 c 28
+ 76.5244 239.568 77.999 237.021 77.999 237.021 c 5
+ 77.999 237.021 18 152.765 18 67.71 c 4
+ 18 -17.333 78 -101.569 78 -101.569 c 5
+85.2998 183 m 0
+ 85.2998 189.6 91.9004 196.2 98.5 196.2 c 0
+ 99.5996 196.2 105.1 195.1 108.4 190.7 c 2
+ 186.5 93.9004 l 1
+ 197.5 107.1 l 1
+ 143.6 175.3 l 2
+ 141.4 177.5 140.3 179.7 140.3 183 c 0
+ 140.3 189.6 146.9 196.2 153.5 196.2 c 0
+ 154.6 196.2 160.1 195.1 163.4 190.7 c 2
+ 214 128 l 1
+ 264.6 190.7 l 2
+ 267.9 195.1 273.4 196.2 274.5 196.2 c 0
+ 281.1 196.2 287.7 189.6 287.7 183 c 0
+ 287.7 179.7 286.6 177.5 284.4 175.3 c 2
+ 230.5 107.1 l 1
+ 241.5 93.9004 l 1
+ 319.6 190.7 l 2
+ 322.9 195.1 328.4 196.2 329.5 196.2 c 0
+ 336.1 196.2 342.7 189.6 342.7 183 c 0
+ 342.7 179.7 341.6 177.5 339.4 175.3 c 2
+ 258 73 l 1
+ 339.4 -29.2998 l 2
+ 341.6 -31.5 342.7 -33.7002 342.7 -37 c 0
+ 342.7 -43.5996 336.1 -50.2002 329.5 -50.2002 c 0
+ 328.4 -50.2002 322.9 -49.0996 319.6 -44.7002 c 2
+ 241.5 52.0996 l 1
+ 230.5 38.9004 l 1
+ 284.4 -29.2998 l 2
+ 286.6 -31.5 287.7 -33.7002 287.7 -37 c 0
+ 287.7 -43.5996 281.1 -50.2002 274.5 -50.2002 c 0
+ 273.4 -50.2002 267.9 -49.0996 264.6 -44.7002 c 2
+ 214 18 l 1
+ 163.4 -44.7002 l 2
+ 160.1 -49.0996 154.6 -50.2002 153.5 -50.2002 c 0
+ 146.9 -50.2002 140.3 -43.5996 140.3 -37 c 0
+ 140.3 -33.7002 141.4 -31.5 143.6 -29.2998 c 2
+ 197.5 38.9004 l 1
+ 186.5 52.0996 l 1
+ 108.4 -44.7002 l 2
+ 105.1 -49.0996 99.5996 -50.2002 98.5 -50.2002 c 0
+ 91.9004 -50.2002 85.2998 -43.5996 85.2998 -37 c 0
+ 85.2998 -33.7002 86.4004 -31.5 88.5996 -29.2998 c 2
+ 170 73 l 1
+ 88.5996 175.3 l 2
+ 86.4004 177.5 85.2998 179.7 85.2998 183 c 0
+214 58.7002 m 1
+ 225 73 l 1
+ 214 87.2998 l 1
+ 203 73 l 1
+ 214 58.7002 l 1
+EndSplineSet
+EndChar
+
+StartChar: SharpParen.modern
+Encoding: 242 -1 242
+Width: 332
+Flags: HW
+VStem: 0 18<11.9414 123.487> 123.5 25.667<-193.491 -47.9297 9.49219 116.571 173.699 319.097> 183 25.5<-182.085 -38.8672 18.4727 125.112 182.473 330.499> 314 18<11.9414 123.487>
+LayerCount: 2
+Fore
+SplineSet
+254 -101.569 m 1
+ 254 -101.569 314 -17.333 314 67.71 c 0
+ 314 152.765 254.001 237.021 254.001 237.021 c 1
+ 254.001 237.021 255.476 239.568 257 240.521 c 24
+ 258.727 241.601 262.001 242.021 262.001 242.021 c 1
+ 262.001 242.021 332 155.968 332 67.71 c 0
+ 332 -20.5371 262 -106.569 262 -106.569 c 1
+ 262 -106.569 258.727 -106.148 257 -105.069 c 24
+ 255.476 -104.116 254 -101.569 254 -101.569 c 1
+78 -101.569 m 5
+ 78 -101.569 76.5244 -104.116 75 -105.069 c 28
+ 73.2734 -106.148 70 -106.569 70 -106.569 c 5
+ 70 -106.569 0 -20.5371 0 67.71 c 4
+ 0 155.968 69.999 242.021 69.999 242.021 c 5
+ 69.999 242.021 73.2734 241.601 75 240.521 c 28
+ 76.5244 239.568 77.999 237.021 77.999 237.021 c 5
+ 77.999 237.021 18 152.765 18 67.71 c 4
+ 18 -17.333 78 -101.569 78 -101.569 c 5
+183 179.006 m 0
+ 183.3 307.7 l 1
+ 183.3 328.101 l 1
+ 187.3 329.7 191.499 330.5 195.899 330.5 c 0
+ 200.3 330.5 204.5 329.7 208.5 328.101 c 1
+ 208.5 182.473 l 0
+ 237 186.301 l 1
+ 242 182.25 245.5 181.69 247 174.19 c 1
+ 248 159.19 243.5 143.69 237.5 132.434 c 1
+ 208.5 128.192 l 0
+ 208.5 18.4727 l 0
+ 237 23.0508 l 1
+ 242 19 245.5 18.9404 247 11.4404 c 1
+ 248 -3.55957 243.5 -19.5596 237.5 -30.8164 c 1
+ 208.5 -34.8076 l 0
+ 208.501 -179.7 l 1
+ 204.501 -181.3 199.301 -182.1 194.9 -182.1 c 0
+ 190.5 -182.1 187.301 -181.3 183.301 -179.7 c 1
+ 183.301 -159.3 l 1
+ 183.5 -38.8672 l 0
+ 148.5 -43.8506 l 0
+ 148.2 -107.3 l 1
+ 148.2 -191.101 l 1
+ 144.2 -192.7 140 -193.5 135.6 -193.5 c 0
+ 131.199 -193.5 127 -192.7 123 -191.101 c 1
+ 123.5 -47.9297 l 0
+ 95 -53.0078 l 1
+ 90 -48.957 86.5 -47.3975 85 -39.8975 c 1
+ 84 -24.8975 88.5 -9.39746 94.5 1.85938 c 1
+ 123.5 5.85059 l 0
+ 123.5 116.571 l 0
+ 95 111.992 l 1
+ 90 116.043 86.5 116.603 85 124.103 c 1
+ 84 139.103 88.5 154.603 94.5 165.859 c 1
+ 123.5 169.851 l 0
+ 124 316.7 l 1
+ 128 318.3 132.199 319.1 136.6 319.1 c 0
+ 141 319.1 145.2 318.3 149.2 316.7 c 1
+ 149.2 232.899 l 1
+ 149 173.699 l 1
+ 183 179.006 l 0
+123.5 5.85059 m 0
+149.167 9.49219 m 0
+ 183.167 14.6846 l 0
+ 183.167 125.112 l 0
+ 149.25 119.892 l 0
+ 149.167 9.49219 l 0
+EndSplineSet
+EndChar
+
+StartChar: SharpParenHole
+Encoding: 243 -1 243
+Width: 428
+VWidth: 2048
+Flags: W
+HStem: 57.2705 31.459
+VStem: 201.9 24.1992
+LayerCount: 2
+Fore
+SplineSet
+214 57.2705 m 1
+ 201.9 73 l 1
+ 214 88.7295 l 1
+ 226.1 73 l 1
+ 214 57.2705 l 1
+EndSplineSet
+EndChar
+
+StartChar: SharpParenHole.modern
+Encoding: 244 -1 244
+Width: 332
+Flags: W
+HStem: 9.49219 115.62
+VStem: 149.167 34<14.6846 119.892>
+LayerCount: 2
+Fore
+SplineSet
+149.167 9.49219 m 0
+ 149.25 119.892 l 0
+ 183.167 125.112 l 0
+ 183.167 14.6846 l 0
+ 149.167 9.49219 l 0
+EndSplineSet
+EndChar
+
+StartChar: StansPunctumInclinatum
+Encoding: 245 -1 245
+Width: 185
+VWidth: 2612
+Flags: HW
+HStem: -59.373 255.694
+VStem: -0.0930023 185.306
+LayerCount: 2
+Fore
+SplineSet
+185.568 68 m 1
+ 93 -59.918 l 1
+ -0.31543 68 l 1
+ 93 196.93 l 1
+ 185.568 68 l 1
+EndSplineSet
+EndChar
+
+StartChar: StansPunctumInclinatum#Cavum
+Encoding: 246 -1 246
+Width: 185
+VWidth: 2612
+Flags: HW
+HStem: -21.0186 178.986
+VStem: 27.7031 129.714
+LayerCount: 2
+Fore
+SplineSet
+157.664 68 m 5
+ 93 -21.3965 l 1
+ 27.5449 68 l 5
+ 93 158.397 l 1
+ 157.664 68 l 5
+EndSplineSet
+EndChar
+
StartChar: Stropha
-Encoding: 227 -1 227
+Encoding: 247 -1 247
Width: 172
VWidth: 2048
Flags: HW
@@ -5447,7 +6080,7 @@ EndSplineSet
EndChar
StartChar: Stropha#Cavum
-Encoding: 228 -1 228
+Encoding: 248 -1 248
Width: 172
VWidth: 2048
Flags: HW
@@ -5468,7 +6101,7 @@ EndSplineSet
EndChar
StartChar: Stropha#Cavum.caeciliae
-Encoding: 229 -1 229
+Encoding: 249 -1 249
Width: 151
VWidth: 2686
Flags: HW
@@ -5489,7 +6122,7 @@ EndSplineSet
EndChar
StartChar: Stropha.caeciliae
-Encoding: 230 -1 230
+Encoding: 250 -1 250
Width: 151
VWidth: 2686
Flags: W
@@ -5512,7 +6145,7 @@ Validated: 1
EndChar
StartChar: StrophaAucta
-Encoding: 231 -1 231
+Encoding: 251 -1 251
Width: 172
VWidth: 2048
Flags: HW
@@ -5534,7 +6167,7 @@ EndSplineSet
EndChar
StartChar: StrophaAucta#Cavum
-Encoding: 232 -1 232
+Encoding: 252 -1 252
Width: 172
VWidth: 2048
Flags: HW
@@ -5555,7 +6188,7 @@ EndSplineSet
EndChar
StartChar: StrophaAucta#Cavum.caeciliae
-Encoding: 233 -1 233
+Encoding: 253 -1 253
Width: 151
VWidth: 2686
Flags: HW
@@ -5577,7 +6210,7 @@ EndSplineSet
EndChar
StartChar: StrophaAucta.caeciliae
-Encoding: 234 -1 234
+Encoding: 254 -1 254
Width: 151
VWidth: 2686
Flags: W
@@ -5600,7 +6233,7 @@ Validated: 33
EndChar
StartChar: StrophaAuctaLongtail
-Encoding: 235 -1 235
+Encoding: 255 -1 255
Width: 172
VWidth: 2048
Flags: HW
@@ -5622,7 +6255,7 @@ EndSplineSet
EndChar
StartChar: StrophaAuctaLongtail#Cavum
-Encoding: 236 -1 236
+Encoding: 256 -1 256
Width: 172
VWidth: 2048
Flags: HW
@@ -5643,7 +6276,7 @@ EndSplineSet
EndChar
StartChar: tmpglyph
-Encoding: 237 -1 237
+Encoding: 257 -1 257
Width: 18
VWidth: 2048
Flags: HW
@@ -5653,7 +6286,7 @@ LayerCount: 2
EndChar
StartChar: UpperPesOneNothing
-Encoding: 238 -1 238
+Encoding: 258 -1 258
Width: 166
VWidth: 2613
Flags: W
@@ -5685,7 +6318,7 @@ EndSplineSet
EndChar
StartChar: UpperPesOneNothing#Cavum
-Encoding: 239 -1 239
+Encoding: 259 -1 259
Width: 166
VWidth: 2613
Flags: W
@@ -5717,7 +6350,7 @@ EndSplineSet
EndChar
StartChar: VEpisema
-Encoding: 240 -1 240
+Encoding: 260 -1 260
Width: 34
VWidth: 2048
Flags: W
@@ -5738,7 +6371,7 @@ Validated: 1
EndChar
StartChar: VEpisema.circumflexus
-Encoding: 241 -1 241
+Encoding: 261 -1 261
Width: 108
VWidth: 2048
Flags: W
@@ -5762,7 +6395,7 @@ Validated: 33
EndChar
StartChar: virgabase
-Encoding: 242 -1 242
+Encoding: 262 -1 262
Width: 166
VWidth: 2637
Flags: HW
@@ -5784,7 +6417,7 @@ EndSplineSet
EndChar
StartChar: virgabase#Cavum
-Encoding: 243 -1 243
+Encoding: 263 -1 263
Width: 166
VWidth: 2637
Flags: HW
@@ -5804,7 +6437,7 @@ EndSplineSet
EndChar
StartChar: VirgaBaseLineBL
-Encoding: 244 -1 244
+Encoding: 264 -1 264
Width: 166
VWidth: 2637
Flags: HW
@@ -5828,7 +6461,7 @@ EndSplineSet
EndChar
StartChar: VirgaBaseLineBL#Cavum
-Encoding: 245 -1 245
+Encoding: 265 -1 265
Width: 166
VWidth: 2637
Flags: HW
@@ -5848,7 +6481,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaAscendens_op
-Encoding: 246 -1 246
+Encoding: 266 -1 266
Width: 166
VWidth: 2684
Flags: HW
@@ -5875,7 +6508,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaAscendens_op#Cavum
-Encoding: 247 -1 247
+Encoding: 267 -1 267
Width: 166
VWidth: 2684
Flags: W
@@ -5896,7 +6529,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaDescendens_op
-Encoding: 248 -1 248
+Encoding: 268 -1 268
Width: 168
VWidth: 2048
Flags: HW
@@ -5924,7 +6557,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaDescendens_op#Cavum
-Encoding: 249 -1 249
+Encoding: 269 -1 269
Width: 168
VWidth: 2048
Flags: HW
@@ -5945,7 +6578,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaLongqueueAscendens_op
-Encoding: 250 -1 250
+Encoding: 270 -1 270
Width: 166
VWidth: 2684
Flags: HW
@@ -5972,7 +6605,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaLongqueueDescendens_op
-Encoding: 251 -1 251
+Encoding: 271 -1 271
Width: 168
VWidth: 2048
Flags: HW
@@ -6001,7 +6634,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaOpenqueueAscendens_op
-Encoding: 252 -1 252
+Encoding: 272 -1 272
Width: 166
VWidth: 2684
Flags: HW
@@ -6028,7 +6661,7 @@ EndSplineSet
EndChar
StartChar: VirgaReversaOpenqueueDescendens_op
-Encoding: 253 -1 253
+Encoding: 273 -1 273
Width: 168
VWidth: 2048
Flags: W
@@ -6057,7 +6690,7 @@ EndSplineSet
EndChar
StartChar: VirgulaTwo
-Encoding: 254 -1 254
+Encoding: 274 -1 274
Width: 143
VWidth: 1788
Flags: HW
@@ -6079,7 +6712,7 @@ EndSplineSet
EndChar
StartChar: VirgulaThree
-Encoding: 255 -1 255
+Encoding: 275 -1 275
Width: 143
VWidth: 2103
Flags: HW
@@ -6101,7 +6734,7 @@ EndSplineSet
EndChar
StartChar: VirgulaFour
-Encoding: 256 -1 256
+Encoding: 276 -1 276
Width: 143
VWidth: 2418
Flags: W
@@ -6124,7 +6757,7 @@ Validated: 1
EndChar
StartChar: VirgulaFive
-Encoding: 257 -1 257
+Encoding: 277 -1 277
Width: 143
VWidth: 2733
Flags: HW
@@ -6146,7 +6779,7 @@ EndSplineSet
EndChar
StartChar: VirgulaSix
-Encoding: 258 -1 258
+Encoding: 278 -1 278
Width: 143
VWidth: 3048
Flags: HW
@@ -6167,129 +6800,203 @@ SplineSet
EndSplineSet
EndChar
-StartChar: StansPunctumInclinatum
-Encoding: 259 -1 259
-Width: 185
-VWidth: 2612
-Flags: HW
-HStem: -59.373 255.694
-VStem: -0.0930023 185.306
-LayerCount: 2
-Fore
-SplineSet
-185.568 68 m 1
- 93 -59.918 l 1
- -0.31543 68 l 1
- 93 196.93 l 1
- 185.568 68 l 1
-EndSplineSet
-EndChar
-
-StartChar: StansPunctumInclinatum#Cavum
-Encoding: 260 -1 260
-Width: 185
-VWidth: 2612
-Flags: HW
-HStem: -21.0186 178.986
-VStem: 27.7031 129.714
-LayerCount: 2
-Fore
-SplineSet
-157.664 68 m 5
- 93 -21.3965 l 1
- 27.5449 68 l 5
- 93 158.397 l 1
- 157.664 68 l 5
-EndSplineSet
-EndChar
-
-StartChar: DivisioMinimisTwo
-Encoding: 261 -1 261
-Width: 19
-VWidth: 1533
+StartChar: VirgulaParenTwo
+Encoding: 279 -1 279
+Width: 340
+VWidth: 1788
Flags: HW
-HStem: 284.431 318.553
-VStem: 0 19<285.972 602.984>
-LayerCount: 2
-Fore
-SplineSet
-0 0.12793 m 13
- 0 167.984 l 25
- 18.999 168.021 l 25
- 19 -6.56934 l 21
- 6.04395 -6.43457 2.43457 -3.39062 0 0.12793 c 13
-EndSplineSet
-EndChar
-
-StartChar: DivisioMinimisThree
-Encoding: 262 -1 262
-Width: 19
-VWidth: 1733
+HStem: -63.45 84.5<116.239 181.685>
+VStem: 201.15 55.8996<-187.09 -83.284>
+LayerCount: 2
+Fore
+SplineSet
+107.55 -34.8496 m 4
+ 107.55 9.87012 136.183 21.0498 168.65 21.0498 c 4
+ 195.23 21.0498 257.05 -2.5332 257.05 -102.45 c 4
+ 257.05 -192.583 203.75 -249.783 97.1504 -274.05 c 5
+ 94.8662 -271.766 91.9502 -261.704 91.9502 -258.45 c 4
+ 91.9502 -256.717 92.3828 -255.417 93.25 -254.55 c 5
+ 165.183 -222.482 201.15 -184.35 201.15 -140.15 c 4
+ 201.15 -78.79 163.433 -69.1816 130.95 -63.4502 c 4
+ 115.35 -61.7168 107.55 -52.1826 107.55 -34.8496 c 4
+262 -275.569 m 1
+ 262 -275.569 322 -191.333 322 -106.29 c 0
+ 322 -21.2354 262.001 63.0215 262.001 63.0215 c 1
+ 262.001 63.0215 263.476 65.5684 265 66.5215 c 24
+ 266.727 67.6006 270.001 68.0215 270.001 68.0215 c 1
+ 270.001 68.0215 340 -18.0322 340 -106.29 c 0
+ 340 -194.537 270 -280.569 270 -280.569 c 1
+ 270 -280.569 266.727 -280.148 265 -279.069 c 24
+ 263.476 -278.116 262 -275.569 262 -275.569 c 1
+78 -275.569 m 1
+ 78 -275.569 76.5244 -278.116 75 -279.069 c 24
+ 73.2734 -280.148 70 -280.569 70 -280.569 c 1
+ 70 -280.569 0 -194.537 0 -106.29 c 0
+ 0 -18.0322 69.999 68.0215 69.999 68.0215 c 1
+ 69.999 68.0215 73.2734 67.6006 75 66.5215 c 24
+ 76.5244 65.5684 77.999 63.0215 77.999 63.0215 c 1
+ 77.999 63.0215 18 -21.2354 18 -106.29 c 0
+ 18 -191.333 78 -275.569 78 -275.569 c 1
+EndSplineSet
+EndChar
+
+StartChar: VirgulaParenThree
+Encoding: 280 -1 280
+Width: 340
+VWidth: 2103
Flags: HW
-HStem: 49.431 318.553
-VStem: 0 19<50.972 367.984>
-LayerCount: 2
-Fore
-SplineSet
-0 315.128 m 13
- 0 482.984 l 25
- 18.999 483.021 l 25
- 19 308.431 l 21
- 6.04395 308.565 2.43457 311.609 0 315.128 c 13
-EndSplineSet
-EndChar
-
-StartChar: DivisioMinimisFour
-Encoding: 263 -1 263
-Width: 19
-VWidth: 2048
+HStem: -63.45 84.5<116.239 181.685>
+VStem: 201.15 55.8996<-187.09 -83.284>
+LayerCount: 2
+Fore
+SplineSet
+262 39.4307 m 1
+ 262 39.4307 322 123.667 322 208.71 c 0
+ 322 293.765 262.001 378.021 262.001 378.021 c 1
+ 262.001 378.021 263.476 380.568 265 381.521 c 24
+ 266.727 382.601 270.001 383.021 270.001 383.021 c 1
+ 270.001 383.021 340 296.968 340 208.71 c 0
+ 340 120.463 270 34.4307 270 34.4307 c 1
+ 270 34.4307 266.727 34.8516 265 35.9307 c 24
+ 263.476 36.8838 262 39.4307 262 39.4307 c 1
+78 39.4307 m 1
+ 78 39.4307 76.5244 36.8838 75 35.9307 c 24
+ 73.2734 34.8516 70 34.4307 70 34.4307 c 1
+ 70 34.4307 0 120.463 0 208.71 c 0
+ 0 296.968 69.999 383.021 69.999 383.021 c 1
+ 69.999 383.021 73.2734 382.601 75 381.521 c 24
+ 76.5244 380.568 77.999 378.021 77.999 378.021 c 1
+ 77.999 378.021 18 293.765 18 208.71 c 0
+ 18 123.667 78 39.4307 78 39.4307 c 1
+107.55 280.15 m 4
+ 107.55 324.87 136.183 336.05 168.65 336.05 c 0
+ 195.23 336.05 257.05 312.467 257.05 212.55 c 0
+ 257.05 122.417 203.75 65.2168 97.1504 40.9502 c 1
+ 94.8662 43.2344 91.9502 53.2959 91.9502 56.5498 c 0
+ 91.9502 58.2832 92.3828 59.583 93.25 60.4502 c 1
+ 165.183 92.5176 201.15 130.65 201.15 174.85 c 0
+ 201.15 236.21 163.433 245.818 130.95 251.55 c 0
+ 115.35 253.283 107.55 262.817 107.55 280.15 c 4
+EndSplineSet
+EndChar
+
+StartChar: VirgulaParenFour
+Encoding: 281 -1 281
+Width: 340
+VWidth: 2418
Flags: HW
-HStem: 364.431 318.553
-VStem: 0 19<365.972 682.984>
-LayerCount: 2
-Fore
-SplineSet
-0 630.128 m 13
- 0 797.984 l 25
- 18.999 798.021 l 25
- 19 623.431 l 21
- 6.04395 623.565 2.43457 626.609 0 630.128 c 13
-EndSplineSet
-EndChar
-
-StartChar: DivisioMinimisFive
-Encoding: 264 -1 264
-Width: 19
-VWidth: 2363
+HStem: -63.45 84.5<116.239 181.685>
+VStem: 201.15 55.8996<-187.09 -83.284>
+LayerCount: 2
+Fore
+SplineSet
+262 354.431 m 1
+ 262 354.431 322 438.667 322 523.71 c 0
+ 322 608.765 262.001 693.021 262.001 693.021 c 1
+ 262.001 693.021 263.476 695.568 265 696.521 c 24
+ 266.727 697.601 270.001 698.021 270.001 698.021 c 1
+ 270.001 698.021 340 611.968 340 523.71 c 0
+ 340 435.463 270 349.431 270 349.431 c 1
+ 270 349.431 266.727 349.852 265 350.931 c 24
+ 263.476 351.884 262 354.431 262 354.431 c 1
+78 354.431 m 1
+ 78 354.431 76.5244 351.884 75 350.931 c 24
+ 73.2734 349.852 70 349.431 70 349.431 c 1
+ 70 349.431 0 435.463 0 523.71 c 0
+ 0 611.968 69.999 698.021 69.999 698.021 c 1
+ 69.999 698.021 73.2734 697.601 75 696.521 c 24
+ 76.5244 695.568 77.999 693.021 77.999 693.021 c 1
+ 77.999 693.021 18 608.765 18 523.71 c 0
+ 18 438.667 78 354.431 78 354.431 c 1
+107.55 595.15 m 4
+ 107.55 639.87 136.183 651.05 168.65 651.05 c 0
+ 195.23 651.05 257.05 627.467 257.05 527.55 c 0
+ 257.05 437.417 203.75 380.217 97.1504 355.95 c 1
+ 94.8662 358.234 91.9502 368.296 91.9502 371.55 c 0
+ 91.9502 373.283 92.3828 374.583 93.25 375.45 c 1
+ 165.183 407.518 201.15 445.65 201.15 489.85 c 0
+ 201.15 551.21 163.433 560.818 130.95 566.55 c 4
+ 115.35 568.283 107.55 577.817 107.55 595.15 c 4
+EndSplineSet
+EndChar
+
+StartChar: VirgulaParenFive
+Encoding: 282 -1 282
+Width: 340
+VWidth: 2733
Flags: HW
-HStem: 679.431 318.553
-VStem: 0 19<680.972 997.984>
-LayerCount: 2
-Fore
-SplineSet
-0 945.128 m 13
- 0 1112.98 l 25
- 18.999 1113.02 l 25
- 19 938.431 l 21
- 6.04395 938.565 2.43457 941.609 0 945.128 c 13
-EndSplineSet
-EndChar
-
-StartChar: DivisioMinimisSix
-Encoding: 265 -1 265
-Width: 19
-VWidth: 2678
+HStem: -63.45 84.5<116.239 181.685>
+VStem: 201.15 55.8996<-187.09 -83.284>
+LayerCount: 2
+Fore
+SplineSet
+262 669.431 m 1
+ 262 669.431 322 753.667 322 838.71 c 0
+ 322 923.765 262.001 1008.02 262.001 1008.02 c 1
+ 262.001 1008.02 263.476 1010.57 265 1011.52 c 24
+ 266.727 1012.6 270.001 1013.02 270.001 1013.02 c 1
+ 270.001 1013.02 340 926.968 340 838.71 c 0
+ 340 750.463 270 664.431 270 664.431 c 1
+ 270 664.431 266.727 664.852 265 665.931 c 24
+ 263.476 666.884 262 669.431 262 669.431 c 1
+78 669.431 m 1
+ 78 669.431 76.5244 666.884 75 665.931 c 24
+ 73.2734 664.852 70 664.431 70 664.431 c 1
+ 70 664.431 0 750.463 0 838.71 c 0
+ 0 926.968 69.999 1013.02 69.999 1013.02 c 1
+ 69.999 1013.02 73.2734 1012.6 75 1011.52 c 24
+ 76.5244 1010.57 77.999 1008.02 77.999 1008.02 c 1
+ 77.999 1008.02 18 923.765 18 838.71 c 0
+ 18 753.667 78 669.431 78 669.431 c 1
+107.55 910.15 m 4
+ 107.55 954.87 136.183 966.05 168.65 966.05 c 0
+ 195.23 966.05 257.05 942.467 257.05 842.55 c 0
+ 257.05 752.417 203.75 695.217 97.1504 670.95 c 1
+ 94.8662 673.234 91.9502 683.296 91.9502 686.55 c 0
+ 91.9502 688.283 92.3828 689.583 93.25 690.45 c 1
+ 165.183 722.518 201.15 760.65 201.15 804.85 c 0
+ 201.15 866.21 163.433 875.818 130.95 881.55 c 0
+ 115.35 883.283 107.55 892.817 107.55 910.15 c 4
+EndSplineSet
+EndChar
+
+StartChar: VirgulaParenSix
+Encoding: 283 -1 283
+Width: 340
+VWidth: 3048
Flags: HW
-HStem: 994.431 318.553
-VStem: 0 19<995.972 1312.98>
-LayerCount: 2
-Fore
-SplineSet
-0 1260.13 m 13
- 0 1427.98 l 25
- 18.999 1428.02 l 25
- 19 1253.43 l 21
- 6.04395 1253.56 2.43457 1256.61 0 1260.13 c 13
+HStem: -63.45 84.5<116.239 181.685>
+VStem: 201.15 55.8996<-187.09 -83.284>
+LayerCount: 2
+Fore
+SplineSet
+262 984.431 m 1
+ 262 984.431 322 1068.67 322 1153.71 c 0
+ 322 1238.76 262.001 1323.02 262.001 1323.02 c 1
+ 262.001 1323.02 263.476 1325.57 265 1326.52 c 24
+ 266.727 1327.6 270.001 1328.02 270.001 1328.02 c 1
+ 270.001 1328.02 340 1241.97 340 1153.71 c 0
+ 340 1065.46 270 979.431 270 979.431 c 1
+ 270 979.431 266.727 979.852 265 980.931 c 24
+ 263.476 981.884 262 984.431 262 984.431 c 1
+78 984.431 m 1
+ 78 984.431 76.5244 981.884 75 980.931 c 24
+ 73.2734 979.852 70 979.431 70 979.431 c 1
+ 70 979.431 0 1065.46 0 1153.71 c 0
+ 0 1241.97 69.999 1328.02 69.999 1328.02 c 1
+ 69.999 1328.02 73.2734 1327.6 75 1326.52 c 24
+ 76.5244 1325.57 77.999 1323.02 77.999 1323.02 c 1
+ 77.999 1323.02 18 1238.76 18 1153.71 c 0
+ 18 1068.67 78 984.431 78 984.431 c 1
+107.55 1225.15 m 4
+ 107.55 1269.87 136.183 1281.05 168.65 1281.05 c 0
+ 195.23 1281.05 257.05 1257.47 257.05 1157.55 c 0
+ 257.05 1067.42 203.75 1010.22 97.1504 985.95 c 1
+ 94.8662 988.234 91.9502 998.296 91.9502 1001.55 c 0
+ 91.9502 1003.28 92.3828 1004.58 93.25 1005.45 c 1
+ 165.183 1037.52 201.15 1075.65 201.15 1119.85 c 0
+ 201.15 1181.21 163.433 1190.82 130.95 1196.55 c 0
+ 115.35 1198.28 107.55 1207.82 107.55 1225.15 c 4
EndSplineSet
EndChar
EndChars
diff --git a/support/gregoriotex/fonts/sources/gregall.sfd b/support/gregoriotex/fonts/sources/gregall.sfd
index 72edbd2172..4922571ef1 100644
--- a/support/gregoriotex/fonts/sources/gregall.sfd
+++ b/support/gregoriotex/fonts/sources/gregall.sfd
@@ -3,7 +3,7 @@ FontName: gregall
FullName: gregall
FamilyName: gregall
Weight: Book
-Copyright: gregall font, created with FontForge.\nCopyright (C) 2014-2019 Jakub Jelinek <jakub@redhat.com>\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\n\nSIL OPEN FONT LICENSE\n\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\n\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\n"Font Software" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n"Reserved Font Name" refers to any names specified as such after the\ncopyright statement(s).\n\n"Original Version" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n"Modified Version" refers to any derivative made by adding to, deleting,\nor substituting - in part or in whole - any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n"Author" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\n\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\n\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.
+Copyright: gregall font, created with FontForge.\nCopyright (C) 2014-2021 Jakub Jelinek <jakub@redhat.com>\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\n\nSIL OPEN FONT LICENSE\n\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\n\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\n"Font Software" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n"Reserved Font Name" refers to any names specified as such after the\ncopyright statement(s).\n\n"Original Version" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n"Modified Version" refers to any derivative made by adding to, deleting,\nor substituting - in part or in whole - any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n"Author" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\n\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\n\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.
Version: 0.1
ItalicAngle: 0
UnderlinePosition: -100
diff --git a/support/gregoriotex/fonts/sources/grelaon.sfd b/support/gregoriotex/fonts/sources/grelaon.sfd
index 3ccd4405c7..5f5a8275ab 100644
--- a/support/gregoriotex/fonts/sources/grelaon.sfd
+++ b/support/gregoriotex/fonts/sources/grelaon.sfd
@@ -3,7 +3,7 @@ FontName: grelaon
FullName: grelaon
FamilyName: grelaon
Weight: Book
-Copyright: grelaon font, created with FontForge.\nCopyright (C) 2016-2019 Jakub Jelinek <jakub@redhat.com>\n\nThe background images in font source are taken from the LAON_BM_ms239 manuscript with permission of Bibliotheque municipale de Laon,\nhttp://manuscrit.ville-laon.fr\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\n\nSIL OPEN FONT LICENSE\n\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\n\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\n"Font Software" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n"Reserved Font Name" refers to any names specified as such after the\ncopyright statement(s).\n\n"Original Version" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n"Modified Version" refers to any derivative made by adding to, deleting,\nor substituting - in part or in whole - any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n"Author" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\n\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\n\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.
+Copyright: grelaon font, created with FontForge.\nCopyright (C) 2016-2021 Jakub Jelinek <jakub@redhat.com>\n\nThe background images in font source are taken from the LAON_BM_ms239 manuscript with permission of Bibliotheque municipale de Laon,\nhttp://manuscrit.ville-laon.fr\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\n\nSIL OPEN FONT LICENSE\n\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\n\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\n"Font Software" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n"Reserved Font Name" refers to any names specified as such after the\ncopyright statement(s).\n\n"Original Version" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n"Modified Version" refers to any derivative made by adding to, deleting,\nor substituting - in part or in whole - any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n"Author" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\n\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\n\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.
Version: 0.1
ItalicAngle: 0
UnderlinePosition: -100
diff --git a/support/gregoriotex/fonts/sources/gresgmodern.sfd b/support/gregoriotex/fonts/sources/gresgmodern.sfd
index c769df7c02..724d3e71c1 100644
--- a/support/gregoriotex/fonts/sources/gresgmodern.sfd
+++ b/support/gregoriotex/fonts/sources/gresgmodern.sfd
@@ -3,7 +3,7 @@ FontName: gresgmodern
FullName: gresgmodern
FamilyName: gresgmodern
Weight: Normal
-Copyright: (c) 2011 Association Saint-Benoit, Notre-Dame de Bellaigue, FR 63330 VIRLET\n\n(c) 2014-2019 Jakub Jelinek <jakub@redhat.com>\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\n\nSIL OPEN FONT LICENSE\n\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\n\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\n"Font Software" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n"Reserved Font Name" refers to any names specified as such after the\ncopyright statement(s).\n\n"Original Version" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n"Modified Version" refers to any derivative made by adding to, deleting,\nor substituting - in part or in whole - any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n"Author" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\n\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\n\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.
+Copyright: (c) 2011 Association Saint-Benoit, Notre-Dame de Bellaigue, FR 63330 VIRLET\n\n(c) 2014-2021 Jakub Jelinek <jakub@redhat.com>\n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\n\nSIL OPEN FONT LICENSE\n\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\n\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\n"Font Software" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n"Reserved Font Name" refers to any names specified as such after the\ncopyright statement(s).\n\n"Original Version" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n"Modified Version" refers to any derivative made by adding to, deleting,\nor substituting - in part or in whole - any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n"Author" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\n\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\n\nTHE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.
Version: 0.3
ItalicAngle: 0
UnderlinePosition: -150
diff --git a/support/gregoriotex/fonts/sources/simplify.py b/support/gregoriotex/fonts/sources/simplify.py
index 53d105feb2..bb32ee186d 100644
--- a/support/gregoriotex/fonts/sources/simplify.py
+++ b/support/gregoriotex/fonts/sources/simplify.py
@@ -8,7 +8,7 @@
because simplification doesn't work in squarize.py due to bugs
in fontforge.
- Copyright (C) 2016-2019 The Gregorio Project (see CONTRIBUTORS.md)
+ Copyright (C) 2016-2021 The Gregorio Project (see CONTRIBUTORS.md)
This file is part of Gregorio.
diff --git a/support/gregoriotex/fonts/sources/squarize.py b/support/gregoriotex/fonts/sources/squarize.py
index 7a57a827f6..e40cc2ebdf 100644
--- a/support/gregoriotex/fonts/sources/squarize.py
+++ b/support/gregoriotex/fonts/sources/squarize.py
@@ -6,7 +6,7 @@
"""
Python fontforge script to build a square notation font.
- Copyright (C) 2013-2019 The Gregorio Project (see CONTRIBUTORS.md)
+ Copyright (C) 2013-2021 The Gregorio Project (see CONTRIBUTORS.md)
This file is part of Gregorio.
@@ -90,7 +90,7 @@ AMBITUS = {
14 : 'Fourteen',
}
-GREGORIO_VERSION = '5.2.1'
+GREGORIO_VERSION = '6.0.0-beta1'
# The unicode character at which we start our numbering:
# U+E000 is the start of the BMP Private Use Area
@@ -254,12 +254,27 @@ DIRECT_GLYPHS = {
'CClefChange' : False,
'FClefChange' : False,
'Flat' : False,
+ 'FlatHole' : False,
+ 'FlatParen' : False,
+ 'FlatParenHole' : False,
'Natural' : False,
+ 'NaturalHole' : False,
+ 'NaturalParen' : False,
+ 'NaturalParenHole' : False,
+ 'Sharp' : False,
+ 'SharpHole' : False,
+ 'SharpParen' : False,
+ 'SharpParenHole' : False,
'VirgulaTwo' : False,
'VirgulaThree' : False,
'VirgulaFour' : False,
'VirgulaFive' : False,
'VirgulaSix' : False,
+ 'VirgulaParenTwo' : False,
+ 'VirgulaParenThree' : False,
+ 'VirgulaParenFour' : False,
+ 'VirgulaParenFive' : False,
+ 'VirgulaParenSix' : False,
'DivisioMinimisTwo' : False,
'DivisioMinimisThree' : False,
'DivisioMinimisFour' : False,
@@ -270,6 +285,11 @@ DIRECT_GLYPHS = {
'DivisioMinimaFour' : False,
'DivisioMinimaFive' : False,
'DivisioMinimaSix' : False,
+ 'DivisioMinimaParenTwo' : False,
+ 'DivisioMinimaParenThree' : False,
+ 'DivisioMinimaParenFour' : False,
+ 'DivisioMinimaParenFive' : False,
+ 'DivisioMinimaParenSix' : False,
'DivisioMinorTwo' : False,
'DivisioMinorThree' : False,
'DivisioMinorFour' : False,
@@ -323,12 +343,8 @@ DIRECT_GLYPHS = {
'SemicirculusReversus' : False,
'PunctumAscendens' : True,
'PunctumDescendens' : True,
- 'FlatHole' : False,
- 'NaturalHole' : False,
'DivisioDominican' : False,
'DivisioDominicanAlt' : False,
- 'Sharp' : False,
- 'SharpHole' : False,
'Linea' : True,
'RoundBrace' : False,
'CurlyBrace' : False,
@@ -1098,8 +1114,13 @@ HEPISEMA_GLYPHS = {
'HEpisemaFlat': 'Flat',
'HEpisemaSharp': 'Sharp',
'HEpisemaNatural': 'Natural',
- 'HEpisemaBarStandard': 'DivisioMinima',
- 'HEpisemaBarVirgula': 'Virgula',
+ 'HEpisemaBarStandard': 'DivisioMinimaTwo',
+ 'HEpisemaBarVirgula': 'VirgulaTwo',
+ 'HEpisemaBarParen': 'DivisioMinimaParenTwo',
+ 'HEpisemaBarVirgulaParen': 'VirgulaParenTwo',
+ 'HEpisemaFlatParen': 'FlatParen',
+ 'HEpisemaSharpParen': 'SharpParen',
+ 'HEpisemaNaturalParen': 'NaturalParen',
}
def hepisema():
diff --git a/support/gregoriotex/fonts/sources/stemsschemas.py b/support/gregoriotex/fonts/sources/stemsschemas.py
index ca1975b0ff..eae24cb9c4 100644
--- a/support/gregoriotex/fonts/sources/stemsschemas.py
+++ b/support/gregoriotex/fonts/sources/stemsschemas.py
@@ -5,7 +5,7 @@
Companion to squarize.py, building the stem length config
according to various schemas.
- Copyright (C) 2016-2019 The Gregorio Project (see CONTRIBUTORS.md)
+ Copyright (C) 2016-2021 The Gregorio Project (see CONTRIBUTORS.md)
This file is part of Gregorio.
diff --git a/support/gregoriotex/fonts/truetype/greciliae-hole.ttf b/support/gregoriotex/fonts/truetype/greciliae-hole.ttf
index 8ab9d28b23..27e9c07c65 100644
--- a/support/gregoriotex/fonts/truetype/greciliae-hole.ttf
+++ b/support/gregoriotex/fonts/truetype/greciliae-hole.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/greciliae-hollow.ttf b/support/gregoriotex/fonts/truetype/greciliae-hollow.ttf
index fd32d093c1..d9b1606db9 100644
--- a/support/gregoriotex/fonts/truetype/greciliae-hollow.ttf
+++ b/support/gregoriotex/fonts/truetype/greciliae-hollow.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/greciliae-op-hole.ttf b/support/gregoriotex/fonts/truetype/greciliae-op-hole.ttf
index 3c97f9dd35..f6eb693162 100644
--- a/support/gregoriotex/fonts/truetype/greciliae-op-hole.ttf
+++ b/support/gregoriotex/fonts/truetype/greciliae-op-hole.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttf b/support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttf
index 10089f020f..7ca1259bc6 100644
--- a/support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttf
+++ b/support/gregoriotex/fonts/truetype/greciliae-op-hollow.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/greciliae-op.ttf b/support/gregoriotex/fonts/truetype/greciliae-op.ttf
index 128f7a9f17..e818005f9d 100644
--- a/support/gregoriotex/fonts/truetype/greciliae-op.ttf
+++ b/support/gregoriotex/fonts/truetype/greciliae-op.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/greciliae.ttf b/support/gregoriotex/fonts/truetype/greciliae.ttf
index b4ceda6c17..c6cdfe0528 100644
--- a/support/gregoriotex/fonts/truetype/greciliae.ttf
+++ b/support/gregoriotex/fonts/truetype/greciliae.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/greextra.ttf b/support/gregoriotex/fonts/truetype/greextra.ttf
index ff7953ba28..3f6f80dfd9 100644
--- a/support/gregoriotex/fonts/truetype/greextra.ttf
+++ b/support/gregoriotex/fonts/truetype/greextra.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/gregall.ttf b/support/gregoriotex/fonts/truetype/gregall.ttf
index a5bc576a8a..c8a7352ff8 100644
--- a/support/gregoriotex/fonts/truetype/gregall.ttf
+++ b/support/gregoriotex/fonts/truetype/gregall.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/grelaon.ttf b/support/gregoriotex/fonts/truetype/grelaon.ttf
index 0a041c5d18..3c98be7e9c 100644
--- a/support/gregoriotex/fonts/truetype/grelaon.ttf
+++ b/support/gregoriotex/fonts/truetype/grelaon.ttf
Binary files differ
diff --git a/support/gregoriotex/fonts/truetype/gresgmodern.ttf b/support/gregoriotex/fonts/truetype/gresgmodern.ttf
index 320e43e081..c46bd28842 100644
--- a/support/gregoriotex/fonts/truetype/gresgmodern.ttf
+++ b/support/gregoriotex/fonts/truetype/gresgmodern.ttf
Binary files differ
diff --git a/support/gregoriotex/tex/lualatex/gregoriosyms.sty b/support/gregoriotex/tex/lualatex/gregoriosyms.sty
index c766dc61bf..09f61a6ea0 100644
--- a/support/gregoriotex/tex/lualatex/gregoriosyms.sty
+++ b/support/gregoriotex/tex/lualatex/gregoriosyms.sty
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2008-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2008-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -19,13 +19,15 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gregoriosyms}
- [2019/04/06 v5.2.1 GregorioTeX symbols only.]% PARSE_VERSION_DATE_LTX
+ [2021/02/23 v6.0.0-beta1 GregorioTeX symbols only.]% PARSE_VERSION_DATE_LTX
+
+\RequirePackage{iftex}%
+\RequireLuaTeX
% If gregoriotex has been loaded, then we need to abort the loading process of this package here in order to avoid some conflicts.
\ifcsname gregoriotex@symbols@loaded\endcsname\endinput\fi%
\RequirePackage{kvoptions}%
-\RequirePackage{ifluatex}%
\RequirePackage{luatexbase}%
\RequirePackage{luaotfload}
\RequirePackage{luamplib}%
@@ -39,7 +41,7 @@
% The version of gregorio. All gregoriotex*.tex files must have the same.
% All gtex files must also have the same version.
-\xdef\gre@gregoriotexversion{5.2.1}% GREGORIO_VERSION - VersionManager.py
+\xdef\gre@gregoriotexversion{6.0.0-beta1}% GREGORIO_VERSION - VersionManager.py
\providecommand{\gre@declarefileversion}[2]{\relax}
diff --git a/support/gregoriotex/tex/lualatex/gregoriotex.sty b/support/gregoriotex/tex/lualatex/gregoriotex.sty
index 2b6d877024..6f8eff2456 100644
--- a/support/gregoriotex/tex/lualatex/gregoriotex.sty
+++ b/support/gregoriotex/tex/lualatex/gregoriotex.sty
@@ -1,6 +1,6 @@
%GregorioTeX LaTeX style.
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -19,14 +19,17 @@
\NeedsTeXFormat{LaTeX2e}%
\ProvidesPackage{gregoriotex}%
- [2019/04/06 v5.2.1 GregorioTeX system.]% PARSE_VERSION_DATE_LTX
+ [2021/02/23 v6.0.0-beta1 GregorioTeX system.]% PARSE_VERSION_DATE_LTX
+
+\RequirePackage{iftex}%
+\RequireLuaTeX
% If gregoriosyms has been loaded then there are going to be some conflicts in the definitions made in that package and this one. In order to provide for a more informative error message, we check for that conflict right away
\ifcsname gregoriotex@symbols@loaded\endcsname\gre@error{Loading gregoriotex after\MessageBreak gregoriosyms is not supported. Please remove the\MessageBreak loading of gregoriosyms (its contents are loaded\MessageBreak by gregoriotex)}\fi%
\RequirePackage{xcolor}%
+\RequirePackage{luacolor}%
\RequirePackage{kvoptions}%
-\RequirePackage{ifluatex}%
\RequirePackage{graphicx}% for \resizebox
\RequirePackage{luatexbase}%
\RequirePackage{luaotfload}%
@@ -102,22 +105,22 @@
%%%%%%%%%
\def\GreItalic#1{%
- \textit{#1}%
+ {\itshape #1}%
\relax %
}
\def\GreSmallCaps#1{%
- \textsc{#1}%
+ {\scshape #1}%
\relax %
}
\def\GreBold#1{%
- \textbf{#1}%
+ {\bfseries #1}%
\relax %
}
\def\GreTypewriter#1{%
- \texttt{#1}%
+ {\ttfamily #1}%
\relax %
}
diff --git a/support/gregoriotex/tex/luatex/gregorio-vowels.dat b/support/gregoriotex/tex/luatex/gregorio-vowels.dat
index f02943994c..0e0dacc52c 100644
--- a/support/gregoriotex/tex/luatex/gregorio-vowels.dat
+++ b/support/gregoriotex/tex/luatex/gregorio-vowels.dat
@@ -1,5 +1,5 @@
# Vowel rule file for Gregorio
-# Copyright (C) 2015-2019 The Gregorio Project (see CONTRIBUTORS.md)
+# Copyright (C) 2015-2021 The Gregorio Project (see CONTRIBUTORS.md)
#
# This file is part of Gregorio.
#
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-chars.tex b/support/gregoriotex/tex/luatex/gregoriotex-chars.tex
index 5b0c83ee4e..99c577d7a0 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-chars.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-chars.tex
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -17,7 +17,7 @@
% You should have received a copy of the GNU General Public License
% along with Gregorio. If not, see <http://www.gnu.org/licenses/>.
-\gre@declarefileversion{gregoriotex-chars.tex}{5.2.1}% GREGORIO_VERSION
+\gre@declarefileversion{gregoriotex-chars.tex}{6.0.0-beta1}% GREGORIO_VERSION
\def\gre@char@fuse@punctum@one{\GreFuseTwo{\GreCPLeadingPunctumOne}{\GreCPPunctum}}%
\def\gre@char@fuse@quilisma@one{\GreFuseTwo{\GreCPLeadingQuilismaOne}{\GreCPPunctum}}%
@@ -83,15 +83,26 @@
\gre@def@char@he{flat}{Flat}%
\gre@def@char@he{sharp}{Sharp}%
\gre@def@char@he{natural}{Natural}%
+\gre@def@char@he{flatparen}{FlatParen}%
+\gre@def@char@he{sharpparen}{SharpParen}%
+\gre@def@char@he{naturalparen}{NaturalParen}%
\gre@def@char@he{barstandard}{BarStandard}%
+\gre@def@char@he{barparen}{BarParen}%
\gre@def@char@he{barvirgula}{BarVirgula}%
+\gre@def@char@he{barvirgulaparen}{BarVirgulaParen}%
\def\gre@fontchar@flat{\gre@font@music\GreCPFlat}%
\def\gre@fontchar@flathole{\gre@font@music\GreCPFlatHole}%
+\def\gre@fontchar@flatparen{\gre@font@music\GreCPFlatParen}%
+\def\gre@fontchar@flatparenhole{\gre@font@music\GreCPFlatParenHole}%
\def\gre@fontchar@natural{\gre@font@music\GreCPNatural}%
\def\gre@fontchar@naturalhole{\gre@font@music\GreCPNaturalHole}%
+\def\gre@fontchar@naturalparen{\gre@font@music\GreCPNaturalParen}%
+\def\gre@fontchar@naturalparenhole{\gre@font@music\GreCPNaturalParenHole}%
\def\gre@fontchar@sharp{\gre@font@music\GreCPSharp}%
\def\gre@fontchar@sharphole{\gre@font@music\GreCPSharpHole}%
+\def\gre@fontchar@sharpparen{\gre@font@music\GreCPSharpParen}%
+\def\gre@fontchar@sharpparenhole{\gre@font@music\GreCPSharpParenHole}%
\def\gre@fontchar@cclef{\gre@font@music\GreCPCClef}%
\def\gre@fontchar@fclef{\gre@font@music\GreCPFClef}%
\def\gre@fontchar@incclef{\gre@font@music\GreCPCClefChange}%
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-common.tex b/support/gregoriotex/tex/luatex/gregoriotex-common.tex
index 3e63e95ab4..4801ea8c65 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-common.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-common.tex
@@ -1,6 +1,6 @@
%GregorioTeX common file (stuff needed by both gregoriotex and gregoriosyms)
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -17,8 +17,11 @@
% You should have received a copy of the GNU General Public License
% along with Gregorio. If not, see <http://www.gnu.org/licenses/>.
-\gre@declarefileversion{gregoriotex-commonx.tex}{5.2.1}% GREGORIO_VERSION
+\gre@declarefileversion{gregoriotex-common.tex}{6.0.0-beta1}% GREGORIO_VERSION
+\ifnum\luatexversion<76%
+ \gre@error{Error: this document must be compiled with LuaTeX (lualatex) 0.76 or later}%
+\fi%
%%%%%%%%%
%% Debugging
@@ -68,15 +71,27 @@
% #2 - the correct macro to use
\def\gre@deprecated#1#2{%
\ifgre@allowdeprecated%
- \gre@warning{#1\space is deprecated.\MessageBreak Use #2\space instead}%
+ \ifx&#2&%
+ \gre@warning{#1\space is deprecated and marked for removal}%
+ \else%
+ \gre@warning{#1\space is deprecated.\MessageBreak Use #2\space instead}%
+ \fi%
\else%
- \gre@error{#1\space is deprecated.\MessageBreak Use #2\space instead}%
+ \ifx&#2&%
+ \gre@error{#1\space is deprecated and marked for removal}%
+ \else%
+ \gre@error{#1\space is deprecated.\MessageBreak Use #2\space instead}%
+ \fi%
\fi%
\relax%
}%
\def\gre@obsolete#1#2{%
- \gre@error{#1\space is obsolete.\MessageBreak Use #2\space instead}%
+ \ifx&#2&%
+ \gre@error{#1\space is obsolete and no longer has any effect}%
+ \else%
+ \gre@error{#1\space is obsolete.\MessageBreak Use #2\space instead}%
+ \fi%
\relax%
}%
diff --git a/support/gregoriotex/tex/luatex/gsp-default.tex b/support/gregoriotex/tex/luatex/gregoriotex-gsp-default.tex
index 53f8f380d5..a5e8952bd7 100644
--- a/support/gregoriotex/tex/luatex/gsp-default.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-gsp-default.tex
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2010-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2010-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -19,6 +19,10 @@
% this file contains definitions of spaces and penalties
+% version check
+\gre@declarefileversion{gregoriotex-gsp-default.tex}{6.0.0-beta1}% GREGORIO_VERSION
+
+
%% First, the penalties
% penalty to force a break on a new line
@@ -59,7 +63,7 @@
\else %
\grechangecount{pretolerance}{\the\pretolerance}%
\fi %
-\grecreatedim{emergencystretch}{\the\emergencystretch}{scalable}%
+\gre@createdim{emergencystretch}{\the\emergencystretch}{scalable}%
% By default, we don't care if a line of score is alone on the page,
% if you think it is bad, you can modify the two following values. Assigning
% 10000 to them will prevent all orphaned lines (this will certainly improve
@@ -92,119 +96,122 @@
%% If you’re creating your own space configuration file, you may set this to some other value, should you so desire.
\greconffactor=17%
+%How thick the lines should be. When set equal to \greconffactor (above) the staff lines will be their default thickness. Larger numbers result in thicker lines.
+\grechangestafflinethickness{17}%
+
% the additional width of the additional lines (compared to the width of the glyph they're associated with)
-\grecreatedim{additionallineswidth}{0.14584 cm}{scalable}%
+\gre@createdim{additionallineswidth}{0.14584 cm}{scalable}%
% width of the additional lines, used only for the custos (maybe should depend on the width of the custos...)
% the width is the one for the custos at end of lines, the line for custos in the middle of a score is the same
% multiplied by 2.
-\grecreatedim{additionalcustoslineswidth}{0.09114 cm}{scalable}%
+\gre@createdim{additionalcustoslineswidth}{0.09114 cm}{scalable}%
% null space
-\grecreatedim{zerowidthspace}{0 cm}{scalable}%
+\gre@createdim{zerowidthspace}{0 cm}{scalable}%
% space between glyphs in the same element
-\grecreatedim{interglyphspace}{0.06927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{interglyphspace}{0.06927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
% space between an alteration (flat or natural) and the next glyph
-\grecreatedim{alterationspace}{0.07747 cm}{scalable}%
+\gre@createdim{alterationspace}{0.07747 cm}{scalable}%
% space between a clef and a flat (for clefs with flat)
-\grecreatedim{clefflatspace}{0.05469 cm plus 0.00638 cm minus 0.00638 cm}{scalable}%
+\gre@createdim{clefflatspace}{0.05469 cm plus 0.00638 cm minus 0.00638 cm}{scalable}%
% space before a choral sign
-\grecreatedim{beforelowchoralsignspace}{0.04556 cm plus 0.00638 cm minus 0.00638 cm}{scalable}%
+\gre@createdim{beforelowchoralsignspace}{0.04556 cm plus 0.00638 cm minus 0.00638 cm}{scalable}%
% when bolshifts are enabled, minimal space between a clef at the beginning of the line and a leading alteration glyph (should be larger than clefflatspace so that a flatted clef can be distinguished from a flat which is part of the first glyph on a line, but also smaller than spaceafterlineclef, the distance from the clef to the first notes)
-\grecreatedim{beforealterationspace}{0.1 cm}{scalable}%
+\gre@createdim{beforealterationspace}{0.1 cm}{scalable}%
% half-space between elements
-\grecreatedim{halfspace}{0.03463 cm plus 0.00091 cm minus 0.00182 cm}{scalable}%
+\gre@createdim{halfspace}{0.03463 cm plus 0.00091 cm minus 0.00182 cm}{scalable}%
% space between elements
-\grecreatedim{interelementspace}{0.06927 cm plus 0.00182 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{interelementspace}{0.06927 cm plus 0.00182 cm minus 0.00363 cm}{scalable}%
% larger space between elements
-\grecreatedim{largerspace}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
+\gre@createdim{largerspace}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
% space between elements in ancient notation
-\grecreatedim{nabcinterelementspace}{0.06927 cm plus 0.00182 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{nabcinterelementspace}{0.06927 cm plus 0.00182 cm minus 0.00363 cm}{scalable}%
% larger space between elements in ancient notation
-\grecreatedim{nabclargerspace}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
+\gre@createdim{nabclargerspace}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
% space between elements which has the size of a note
-\grecreatedim{glyphspace}{0.21877 cm plus 0.01822 cm minus 0.01822 cm}{scalable}%
+\gre@createdim{glyphspace}{0.21877 cm plus 0.01822 cm minus 0.01822 cm}{scalable}%
% space before in-line custos
-\grecreatedim{spacebeforeinlinecustos}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
+\gre@createdim{spacebeforeinlinecustos}{0.10938 cm plus 0.01822 cm minus 0.00911 cm}{scalable}%
% space before end-of-line custos
-\grecreatedim{spacebeforeeolcustos}{0.23 cm plus 0 cm minus 0 cm}{scalable}%
+\gre@createdim{spacebeforeeolcustos}{0.23 cm plus 0 cm minus 0 cm}{scalable}%
% space before punctum mora and augmentum duplex
-\grecreatedim{spacebeforesigns}{0.050 cm plus 0.004 cm minus 0.004 cm}{scalable}%
+\gre@createdim{spacebeforesigns}{0.050 cm plus 0.004 cm minus 0.004 cm}{scalable}%
% when a syllable is shifted left because of a preceding punctum mora, moraadjustmentbar is
% also added. Use it to make the syllable a bit further from the punctum mora if you want.
% This version is the general case.
-\grecreatedim{moraadjustment}{0.050 cm}{scalable}%
+\gre@createdim{moraadjustment}{0.050 cm}{scalable}%
% This version is for when punctum mora is before a bar.
-\grecreatedim{moraadjustmentbar}{0.050 cm}{scalable}%
+\gre@createdim{moraadjustmentbar}{0.050 cm}{scalable}%
% space after punctum mora and augmentum duplex
-\grecreatedim{spaceaftersigns}{0.08203 cm plus 0.0082 cm minus 0.0082 cm}{scalable}%
+\gre@createdim{spaceaftersigns}{0.08203 cm plus 0.0082 cm minus 0.0082 cm}{scalable}%
% space after a clef at the beginning of a line
-\grecreatedim{spaceafterlineclef}{0.23 cm plus 0 cm minus 0.01367 cm}{scalable}%
+\gre@createdim{spaceafterlineclef}{0.23 cm plus 0 cm minus 0.01367 cm}{scalable}%
% space after a clef at the beginning of a line, when the clef and first note are vertically distant
-\grecreatedim{shortspaceafterlineclef}{0.18 cm plus 0 cm minus 0.01367 cm}{scalable}%
+\gre@createdim{shortspaceafterlineclef}{0.18 cm plus 0 cm minus 0.01367 cm}{scalable}%
% minimal space between notes of different words
-\grecreatedim{interwordspacenotes}{0.29 cm plus 0.05 cm minus 0.05 cm}{scalable}%
+\gre@createdim{interwordspacenotes}{0.29 cm plus 0.05 cm minus 0.05 cm}{scalable}%
% minimal space between notes of the same syllable.
-\grecreatedim{intersyllablespacenotes}{0.24 cm}{scalable}%
+\gre@createdim{intersyllablespacenotes}{0.24 cm}{scalable}%
% stretching added in the case where the text of two syllables of the same word are
% separated with an automatic hyphen
-\grecreatedim{intersyllablespacestretchhyphen}{0cm plus 0.05cm}{scalable}%
+\gre@createdim{intersyllablespacestretchhyphen}{0cm plus 0.05cm}{scalable}%
% minimal space between letters of different words.
-\grecreatedim{interwordspacetext}{0.17 cm plus 0.05 cm minus 0.05 cm}{scalable}%
+\gre@createdim{interwordspacetext}{0.17 cm plus 0.05 cm minus 0.05 cm}{scalable}%
% Versions of interword spaces for euouae blocks
-\grecreatedim{interwordspacenotes@euouae}{0.23 cm plus 0.1 cm minus 0.05 cm}{scalable}%
-\grecreatedim{interwordspacetext@euouae}{0.21 cm plus 0.1 cm minus 0.05 cm}{scalable}%
+\gre@createdim{interwordspacenotes@euouae}{0.23 cm plus 0.1 cm minus 0.05 cm}{scalable}%
+\gre@createdim{interwordspacetext@euouae}{0.21 cm plus 0.1 cm minus 0.05 cm}{scalable}%
% versions of note spaces when the first note of the second syllable is an alteration
% those are used in euouae blocks
-\grecreatedim{interwordspacenotes@alteration}{0.1 cm plus 0.07 cm minus 0.01 cm}{scalable}%
-\grecreatedim{intersyllablespacenotes@alteration}{0.1 cm}{scalable}%
+\gre@createdim{interwordspacenotes@alteration}{0.1 cm plus 0.07 cm minus 0.01 cm}{scalable}%
+\gre@createdim{intersyllablespacenotes@alteration}{0.1 cm}{scalable}%
% space between notes of a bivirga or trivirga
-\grecreatedim{bitrivirspace}{0.06927 cm plus 0.00182 cm minus 0.00546 cm}{scalable}%
+\gre@createdim{bitrivirspace}{0.06927 cm plus 0.00182 cm minus 0.00546 cm}{scalable}%
% space between notes of a bistropha or tristrophae
-\grecreatedim{bitristrospace}{0.06927 cm plus 0.00182 cm minus 0.00546 cm}{scalable}%
+\gre@createdim{bitristrospace}{0.06927 cm plus 0.00182 cm minus 0.00546 cm}{scalable}%
%
%%%%%%%%%%%%%%%%%%%%
% puncta inclinata %
%%%%%%%%%%%%%%%%%%%%
%
% space between two descending punctum inclinatum
-\grecreatedim{punctuminclinatumshift}{-0.03918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{punctuminclinatumshift}{-0.03918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between two descending or ascending punctum inclinatum at the unison
-\grecreatedim{punctuminclinatumunisonshift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
+\gre@createdim{punctuminclinatumunisonshift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
% space before descending puncta inclinata
-\grecreatedim{beforepunctainclinatashift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
+\gre@createdim{beforepunctainclinatashift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
% space between a descending punctum inclinatum and a punctum inclinatum deminutus
-\grecreatedim{punctuminclinatumanddebilisshift}{-0.02278 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{punctuminclinatumanddebilisshift}{-0.02278 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between two punctum inclinatum deminutus
-\grecreatedim{punctuminclinatumdebilisshift}{-0.00728 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{punctuminclinatumdebilisshift}{-0.00728 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between descending puncta inclinata, larger ambitus (range=3rd)
-\grecreatedim{punctuminclinatumbigshift}{0.07565 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{punctuminclinatumbigshift}{0.07565 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between descending puncta inclinata, larger ambitus (range=4th or 5th)
-\grecreatedim{punctuminclinatummaxshift}{0.17865 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{punctuminclinatummaxshift}{0.17865 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between two ascending punctum inclinatum
-\grecreatedim{ascendingpunctuminclinatumshift}{-0.03918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{ascendingpunctuminclinatumshift}{-0.03918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between a punctum inclinatum and a punctum inclinatum deminutus, ascending
-\grecreatedim{ascendingpunctuminclinatumanddebilisshift}{-0.02278 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{ascendingpunctuminclinatumanddebilisshift}{-0.02278 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between ascending puncta inclinata, larger ambitus (range=3rd)
-\grecreatedim{ascendingpunctuminclinatumbigshift}{0.07565 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{ascendingpunctuminclinatumbigshift}{0.07565 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between ascending puncta inclinata, larger ambitus (range=4th or 5th)
-\grecreatedim{ascendingpunctuminclinatummaxshift}{0.17865 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{ascendingpunctuminclinatummaxshift}{0.17865 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between a punctum inclinatum and a no-bar glyph one pitch below
-\grecreatedim{descendinginclinatumtonobarshift}{-0.00073 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{descendinginclinatumtonobarshift}{-0.00073 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
% space between a punctum inclinatum and a no-bar glyph two pitches below
-\grecreatedim{descendinginclinatumtonobarbigshift}{0.10927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{descendinginclinatumtonobarbigshift}{0.10927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
% space between a punctum inclinatum and a no-bar glyph three or four pitches below
-\grecreatedim{descendinginclinatumtonobarmaxshift}{0.23927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{descendinginclinatumtonobarmaxshift}{0.23927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
% space between a punctum inclinatum and a no-bar glyph one pitch above
-\grecreatedim{ascendinginclinatumtonobarshift}{-0.02473 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{ascendinginclinatumtonobarshift}{-0.02473 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
% space between a punctum inclinatum and a no-bar glyph two pitches above
-\grecreatedim{ascendinginclinatumtonobarbigshift}{0.04427 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{ascendinginclinatumtonobarbigshift}{0.04427 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
% space between a punctum inclinatum and a no-bar glyph three or four pitches above
-\grecreatedim{ascendinginclinatumtonobarmaxshift}{0.12927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
+\gre@createdim{ascendinginclinatumtonobarmaxshift}{0.12927 cm plus 0.00363 cm minus 0.00363 cm}{scalable}%
% space between two descending punctum inclinatum glyphs in an ascent
-\grecreatedim{descendingpunctuminclinatumascendingshift}{-0.07918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{descendingpunctuminclinatumascendingshift}{-0.07918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between two ascending punctum inclinatum glyphs in an descent
-\grecreatedim{ascendingpunctuminclinatumdescendingshift}{-0.07918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{ascendingpunctuminclinatumdescendingshift}{-0.07918 cm plus 0.0009 cm minus 0.0009 cm}{scalable}%
% space between two unison punctum inclinatum glyphs (at the unison)
-\grecreatedim{unisonpunctuminclinatumshift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
+\gre@createdim{uprightpunctuminclinatumshift}{0.05286 cm plus 0.00728 cm minus 0.00455 cm}{scalable}%
%
%%%%%%%%
@@ -213,118 +220,130 @@
%
% bars inside syllables
%
-\grecreatedim{bar@virgula}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
% short versions are when the notes are very low (virgula, minima, and minimis only)
-\grecreatedim{bar@virgula@short}{0.13 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
-\grecreatedim{bar@minimis}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
-\grecreatedim{bar@minimis@short}{0.12 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
-\grecreatedim{bar@minima}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
-\grecreatedim{bar@minima@short}{0.12 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
-\grecreatedim{bar@minor}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@virgula}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@virgula@short}{0.13 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@virgulaparen}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@virgulaparen@short}{0.13 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@minimis}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@minimis@short}{0.12 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@minima}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@minima@short}{0.12 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@minimaparen}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@minimaparen@short}{0.12 cm plus 0.05 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@minor}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
% dominican bars
-\grecreatedim{bar@dominican}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
-\grecreatedim{bar@maior}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
-\grecreatedim{bar@finalis}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@dominican}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@maior}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
+\gre@createdim{bar@finalis}{0.1823 cm plus 0.22787 cm minus 0.00469 cm}{scalable}%
% space added before the final divisio finalis (old bar spacing algorithm only)
-\grecreatedim{bar@finalfinalis}{0.29169 cm plus 0.07292 cm minus 0.27345 cm}{scalable}%
+\gre@createdim{bar@finalfinalis}{0.29169 cm plus 0.07292 cm minus 0.27345 cm}{scalable}%
%
% bars having their own syllable, with text associated (new bar spacing algorithm only)
% plus or minus here will trigger some problems
%
-\grecreatedim{bar@virgula@standalone@text}{0.2323 cm}{scalable}%
-\grecreatedim{bar@virgula@standalone@text@short}{0.19 cm}{scalable}%
-\grecreatedim{bar@minimis@standalone@text}{0.2323 cm}{scalable}%
-\grecreatedim{bar@minimis@standalone@text@short}{0.19 cm}{scalable}%
-\grecreatedim{bar@minima@standalone@text}{0.2323 cm}{scalable}%
-\grecreatedim{bar@minima@standalone@text@short}{0.19 cm}{scalable}%
-\grecreatedim{bar@minor@standalone@text}{0.2323 cm}{scalable}%
-\grecreatedim{bar@dominican@standalone@text}{0.2323 cm}{scalable}%
-\grecreatedim{bar@maior@standalone@text}{0.2323 cm}{scalable}%
-\grecreatedim{bar@finalis@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@virgula@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@virgula@standalone@text@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@minimis@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@minimis@standalone@text@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@virgulaparen@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@virgulaparen@standalone@text@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@minima@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@minima@standalone@text@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@minor@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@dominican@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@maior@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@finalis@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@minimaparen@standalone@text}{0.2323 cm}{scalable}%
+\gre@createdim{bar@minimaparen@standalone@text@short}{0.19 cm}{scalable}%
% actual space before divisio finalis, not additional one
-\grecreatedim{bar@finalfinalis@standalone@text}{0.29169 cm}{scalable}%
+\gre@createdim{bar@finalfinalis@standalone@text}{0.29169 cm}{scalable}%
%
% bars having their own syllable, with no text associated (new bar spacing algorithm only)
%
-\grecreatedim{bar@virgula@standalone@notext}{0.2 cm}{scalable}%
-\grecreatedim{bar@virgula@standalone@notext@short}{0.19 cm}{scalable}%
-\grecreatedim{bar@minimis@standalone@notext}{0.2 cm}{scalable}%
-\grecreatedim{bar@minimis@standalone@notext@short}{0.19 cm}{scalable}%
-\grecreatedim{bar@minima@standalone@notext}{0.2 cm}{scalable}%
-\grecreatedim{bar@minima@standalone@notext@short}{0.19 cm}{scalable}%
-\grecreatedim{bar@minor@standalone@notext}{0.2323 cm}{scalable}%
-\grecreatedim{bar@dominican@standalone@notext}{0.2323 cm}{scalable}%
-\grecreatedim{bar@maior@standalone@notext}{0.2323 cm}{scalable}%
-\grecreatedim{bar@finalis@standalone@notext}{0.2323 cm}{scalable}%
-\grecreatedim{bar@finalfinalis@standalone@notext}{0.29169 cm}{scalable}%
+\gre@createdim{bar@virgula@standalone@notext}{0.2 cm}{scalable}%
+\gre@createdim{bar@virgula@standalone@notext@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@minimis@standalone@notext}{0.2 cm}{scalable}%
+\gre@createdim{bar@minimis@standalone@notext@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@virgulaparen@standalone@notext}{0.2 cm}{scalable}%
+\gre@createdim{bar@virgulaparen@standalone@notext@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@minima@standalone@notext}{0.2 cm}{scalable}%
+\gre@createdim{bar@minima@standalone@notext@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@minor@standalone@notext}{0.2323 cm}{scalable}%
+\gre@createdim{bar@dominican@standalone@notext}{0.2323 cm}{scalable}%
+\gre@createdim{bar@maior@standalone@notext}{0.2323 cm}{scalable}%
+\gre@createdim{bar@finalis@standalone@notext}{0.2323 cm}{scalable}%
+\gre@createdim{bar@minimaparen@standalone@notext}{0.2 cm}{scalable}%
+\gre@createdim{bar@minimaparen@standalone@notext@short}{0.19 cm}{scalable}%
+\gre@createdim{bar@finalfinalis@standalone@notext}{0.29169 cm}{scalable}%
%
% minimal space between letters of different syllable texts for text around bars
% (new bar spacing algorithm only)
-\grecreatedim{interwordspacetext@bars}{0.18 cm}{scalable}%
+\gre@createdim{interwordspacetext@bars}{0.18 cm}{scalable}%
% minimal space between letters of different syllable texts for text around bars,
% euouae context
-\grecreatedim{interwordspacetext@bars@euouae}{0.18 cm}{scalable}%
-\grecreatedim{interwordspacetext@bars@notext}{0.19 cm}{scalable}%
+\gre@createdim{interwordspacetext@bars@euouae}{0.18 cm}{scalable}%
+\gre@createdim{interwordspacetext@bars@notext}{0.19 cm}{scalable}%
% minimal space between letters of different syllable texts for text around bars,
% euouae context
-\grecreatedim{interwordspacetext@bars@notext@euouae}{0.18 cm}{scalable}%
+\gre@createdim{interwordspacetext@bars@notext@euouae}{0.18 cm}{scalable}%
% rubber length that will be added around bars in new bar spacing algorithm
-\grecreatedim{bar@rubber}{0 cm plus 0.025 cm minus 0.025 cm}{scalable}%
+\gre@createdim{bar@rubber}{0 cm plus 0.025 cm minus 0.025 cm}{scalable}%
% in the case of an alteration after a bar, the alteration will "protrude" left of this value
% think of it as some kind of moraadjustmentbar
-\grecreatedim{alterationadjustmentbar}{0.07 cm}{scalable}%
+\gre@createdim{alterationadjustmentbar}{0.07 cm}{scalable}%
% additional space that will appear around bars that are preceded by a custos and followed by a key.
-\grecreatedim{spacearoundclefbars}{0.03645 cm plus 0.00455 cm minus 0.0009 cm}{scalable}%
+\gre@createdim{spacearoundclefbars}{0.03645 cm plus 0.00455 cm minus 0.0009 cm}{scalable}%
% space between the text of previous syllable and text associated with a bar (old bar spacing algorithm only)
-\grecreatedim{textbartextspace}{0.24611 cm plus 0.13672 cm minus 0.04921 cm}{scalable}%
+\gre@createdim{textbartextspace}{0.24611 cm plus 0.13672 cm minus 0.04921 cm}{scalable}%
% minimal space between a note and a bar (old algorithm only)
-\grecreatedim{notebarspace}{0.31903 cm plus 0.27345 cm minus 0.02824 cm}{scalable}%
+\gre@createdim{notebarspace}{0.31903 cm plus 0.27345 cm minus 0.02824 cm}{scalable}%
% Maximum offset between a bar and its associated text when the text goes left of the bar (new bar spacing algorithm only)
-\grecreatedim{maxbaroffsettextleft}{0.3 cm}{scalable}%
+\gre@createdim{maxbaroffsettextleft}{0.3 cm}{scalable}%
% Same as maxbaroffsettextleft when text goes right of the bar
-\grecreatedim{maxbaroffsettextright}{0.15 cm}{scalable}%
+\gre@createdim{maxbaroffsettextright}{0.15 cm}{scalable}%
% Maximum offset between a no-bar (i.e. something like `text()` in gabc) and its associated text when the text goes left of the no-bar (new bar spacing algorithm only)
-\grecreatedim{maxbaroffsettextleft@nobar}{12 cm}{scalable}%
+\gre@createdim{maxbaroffsettextleft@nobar}{12 cm}{scalable}%
% Same as maxbaroffsettextleft@nobar when text goes right of the no-bar
-\grecreatedim{maxbaroffsettextright@nobar}{12 cm}{scalable}%
+\gre@createdim{maxbaroffsettextright@nobar}{12 cm}{scalable}%
% Space between the two bars of a divisio finalis
% Maximum offset between a bar and its associated text when the text goes left of the bar and the bar terminates a line (i.e. something line `text(::z)` in gabc) (new bar spacing algorithm only)
-\grecreatedim{maxbaroffsettextleft@eol}{0.0 cm}{scalable}%
+\gre@createdim{maxbaroffsettextleft@eol}{0.0 cm}{scalable}%
% Same as maxbaroffsettextleft@eol when text goes right of the bar
-\grecreatedim{maxbaroffsettextright@eol}{0 cm}{scalable}%
-\grecreatedim{divisiofinalissep}{0.1094 cm}{scalable}%
+\gre@createdim{maxbaroffsettextright@eol}{0 cm}{scalable}%
+\gre@createdim{divisiofinalissep}{0.1094 cm}{scalable}%
%
%
% maximal space between two syllables for which we consider a dash is not needed
-\grecreatedim{maximumspacewithoutdash}{0 cm}{scalable}%
+\gre@createdim{maximumspacewithoutdash}{0 cm}{scalable}%
% an extensible space for the beginning of lines
-\grecreatedim{afterclefnospace}{0 cm plus 0.27345 cm minus 0 cm}{scalable}%
+\gre@createdim{afterclefnospace}{0 cm plus 0.27345 cm minus 0 cm}{scalable}%
% space between the initial and the beginning of the score
-\grecreatedim{afterinitialshift}{0.2 cm}{scalable}%
+\gre@createdim{afterinitialshift}{0.2 cm}{scalable}%
% space before the initial
-\grecreatedim{beforeinitialshift}{0.2 cm}{scalable}%
+\gre@createdim{beforeinitialshift}{0.2 cm}{scalable}%
% when bolshifts are enabled, minimum space between beginning of line and first syllable text
-\grecreatedim{minimalspaceatlinebeginning}{0.05 cm}{scalable}%
+\gre@createdim{minimalspaceatlinebeginning}{0.05 cm}{scalable}%
% space to force the initial width to. Ignored when 0.
-\grecreatedim{manualinitialwidth}{0 cm}{scalable}%
+\gre@createdim{manualinitialwidth}{0 cm}{scalable}%
% minimum width of the initial. Ignored when manualinitialwidth is non-zero.
-\grecreatedim{minimalinitialwidth}{0 cm}{scalable}%
+\gre@createdim{minimalinitialwidth}{0 cm}{scalable}%
% distance to move the initial up by
-\grecreatedim{initialraise}{0 cm}{scalable}%
+\gre@createdim{initialraise}{0 cm}{scalable}%
% Space between lines in the annotation
-\grecreatedim{annotationseparation}{0.05 cm}{scalable}%
+\gre@createdim{annotationseparation}{0.05 cm}{scalable}%
% Amount to raise (positive) or lower (negative) the annotations from the default position
-\grecreatedim{annotationraise}{-0.2 cm}{scalable}%
+\gre@createdim{annotationraise}{-0.2 cm}{scalable}%
% Space between lines in the commentary
-\grecreatedim{commentaryseparation}{0.05 cm}{scalable}%
+\gre@createdim{commentaryseparation}{0.05 cm}{scalable}%
% Amount to raise (positive) or lower (negative) the commentary from the default position (base line of bottom commentary aligned with top line of staff)
-\grecreatedim{commentaryraise}{0.2 cm}{scalable}%
+\gre@createdim{commentaryraise}{0.2 cm}{scalable}%
% space at the beginning of the lines if there is no clef
-\grecreatedim{noclefspace}{0.1 cm}{scalable}%
+\gre@createdim{noclefspace}{0.1 cm}{scalable}%
% space around a clef change
-\grecreatedim{clefchangespace}{0.27345 cm plus 0.14584 cm minus 0.01367 cm}{scalable}%
+\gre@createdim{clefchangespace}{0.27345 cm plus 0.14584 cm minus 0.01367 cm}{scalable}%
% When \gre@clivisalignment is 2, this distance is the maximum length of the consonants after vowels for which the clivis will be aligned on its center.
-\grecreatedim{clivisalignmentmin}{0.3 cm}{scalable}%
+\gre@createdim{clivisalignmentmin}{0.3 cm}{scalable}%
%%%%%%%%%%%%%%%%%%
% vertical spaces
@@ -335,15 +354,15 @@
% it's on a line or in a space
% (b) high choral signs and low choral signs that are lower than the note which
% are in a space
-\grecreatedim{choralsigndownshift}{0.00911 cm}{scalable}%
+\gre@createdim{choralsigndownshift}{0.00911 cm}{scalable}%
% the amount to shift up:
% (a) high choral signs and low choral signs that are lower than the note which
% are on a line
-\grecreatedim{choralsignupshift}{0.04556 cm}{scalable}%
+\gre@createdim{choralsignupshift}{0.04556 cm}{scalable}%
% the space for the translation
-\grecreatedim{translationheight}{0.5 cm}{scalable}%
+\gre@createdim{translationheight}{0.5 cm}{scalable}%
%the space above the lines
-\grecreatedim{spaceabovelines}{0 cm}{scalable}%
+\gre@createdim{spaceabovelines}{0 cm}{scalable}%
% this counter is the threshold above which we start accounting notes above
% lines for additional space above lines. For instance with a threshold of
% 2 and a staff of 4 lines, notes with a pitch of k and l will not interfere
@@ -354,64 +373,64 @@
% same, for notes taken into account for nabc vertical position
\grechangecount{additionaltopspacenabcthreshold}{4}%
%the space between the lines and the bottom of the text
-\grecreatedim{spacelinestext}{0.60617 cm}{scalable}%
+\gre@createdim{spacelinestext}{3.48471ex}{fixed}%
%the per-note additional space between lines and the bottom of the text
-\grecreatedim{noteadditionalspacelinestext}{0.14413 cm}{scalable}%
+\gre@createdim{noteadditionalspacelinestext}{0.14413 cm}{scalable}%
% this counter is the number of low notes which will add on the
% noteadditionalspacelinestext. For instance, with a threshold of 2, every
% note below c will add noteadditionalspacelinestext space for each pitch needed
% below c, accounting for the various signs.
\grechangecount{noteadditionalspacelinestextthreshold}{2}%
%the space beneath the text
-\grecreatedim{spacebeneathtext}{0 cm}{scalable}%
+\gre@createdim{spacebeneathtext}{0 cm}{scalable}%
% height of the text above the note line
-\grecreatedim{abovelinestextraise}{-0.1 cm}{scalable}%
+\gre@createdim{abovelinestextraise}{-0.1 cm}{scalable}%
% height that is added at the top of the lines if there is text above the lines (it must be bigger than the text for it to be taken into consideration)
-\grecreatedim{abovelinestextheight}{0.3 cm}{scalable}%
+\gre@createdim{abovelinestextheight}{0.3 cm}{scalable}%
% an additional shift you can give to the brace above the bars if you don't like it
-\grecreatedim{braceshift}{0 cm}{scalable}%
+\gre@createdim{braceshift}{0 cm}{scalable}%
% a shift you can give to the accentus above the curly brace
-\grecreatedim{curlybraceaccentusshift}{-0.05 cm}{scalable}%
+\gre@createdim{curlybraceaccentusshift}{-0.05 cm}{scalable}%
% the amount to shift the over slur up
-\grecreatedim{overslurshift}{0.05000 cm}{scalable}%
+\gre@createdim{overslurshift}{0.05000 cm}{scalable}%
% the amount to shift the under slur up
-\grecreatedim{underslurshift}{0.01000 cm}{scalable}%
+\gre@createdim{underslurshift}{0.01000 cm}{scalable}%
% shift for a horizontal episema over a note in a low position in the space
-\grecreatedim{overhepisemalowshift}{0.02287 cm}{scalable}%
+\gre@createdim{overhepisemalowshift}{0.02287 cm}{scalable}%
% shift for a horizontal episema over a note in a high position in the space
-\grecreatedim{overhepisemahighshift}{0.10066 cm}{scalable}%
+\gre@createdim{overhepisemahighshift}{0.10066 cm}{scalable}%
% shift for a horizontal episema under a note in a low position in the space
-\grecreatedim{underhepisemalowshift}{0.02763 cm}{scalable}%
+\gre@createdim{underhepisemalowshift}{0.02763 cm}{scalable}%
% shift for a horizontal episema under a note in a high position in the space
-\grecreatedim{underhepisemahighshift}{0.10981 cm}{scalable}%
+\gre@createdim{underhepisemahighshift}{0.10981 cm}{scalable}%
% shift for a horizontal episema in the middle of a space
-\grecreatedim{hepisemamiddleshift}{0.07206 cm}{scalable}%
+\gre@createdim{hepisemamiddleshift}{0.07206 cm}{scalable}%
% shift for a vertical episema in a low position in the space
-\grecreatedim{vepisemalowshift}{-0.01262 cm}{scalable}%
+\gre@createdim{vepisemalowshift}{-0.01262 cm}{scalable}%
% shift for a vertical episema in a high position in the space
-\grecreatedim{vepisemahighshift}{0.06634 cm}{scalable}%
+\gre@createdim{vepisemahighshift}{0.06634 cm}{scalable}%
% shift for a punctum mora for a note on a line
-\grecreatedim{linepunctummorashift}{-0.06314 cm}{scalable}%
+\gre@createdim{linepunctummorashift}{-0.06314 cm}{scalable}%
% shift for a punctum mora for a note in a space
-\grecreatedim{spacepunctummorashift}{-0.02013 cm}{scalable}%
+\gre@createdim{spacepunctummorashift}{-0.02013 cm}{scalable}%
% shift for a punctum mora for the second note (in a space) of a pes with ambitus one
-\grecreatedim{spaceamonepespunctummorashift}{0.00183 cm}{scalable}%
+\gre@createdim{spaceamonepespunctummorashift}{0.00183 cm}{scalable}%
% shift for a punctum mora for the second note in a porrectus, on a line
-\grecreatedim{lineporrectuspunctummorashift}{0.04575 cm}{scalable}%
+\gre@createdim{lineporrectuspunctummorashift}{0.04575 cm}{scalable}%
% shift for a punctum mora for the second note in a porrectus, in a space
-\grecreatedim{spaceporrectuspunctummorashift}{0.00000 cm}{scalable}%
+\gre@createdim{spaceporrectuspunctummorashift}{0.00000 cm}{scalable}%
% shift for a rare sign
-\grecreatedim{raresignshift}{0.18302 cm}{scalable}%
+\gre@createdim{raresignshift}{0.18302 cm}{scalable}%
% up-shift for a bracket
-\grecreatedim{bracketupshift}{0.03000 cm}{scalable}%
+\gre@createdim{bracketupshift}{0.03000 cm}{scalable}%
% down-shift for a bracket
-\grecreatedim{bracketdownshift}{0.04000 cm}{scalable}%
+\gre@createdim{bracketdownshift}{0.04000 cm}{scalable}%
%
%%%%%%%%%%
%% Line spacings
%%%%%%%%%%
-\grecreatedim{parskip}{1pt plus 1pt}{scalable}%
-\grecreatedim{lineskip}{0pt plus 1pt}{scalable}%
-\grecreatedim{baselineskip}{55pt plus 5pt minus 5pt}{scalable}%
-\grecreatedim{lineskiplimit}{0pt}{scalable}%
+\gre@createdim{parskip}{1pt plus 1pt}{scalable}%
+\gre@createdim{lineskip}{0pt plus 1pt}{scalable}%
+\gre@createdim{baselineskip}{55pt plus 5pt minus 5pt}{scalable}%
+\gre@createdim{lineskiplimit}{0pt}{scalable}%
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-main.tex b/support/gregoriotex/tex/luatex/gregoriotex-main.tex
index 95b463c90c..c7f0f93506 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-main.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-main.tex
@@ -1,6 +1,6 @@
%GregorioTeX main file.
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -21,17 +21,7 @@
% The version of gregorio. All gregoriotex*.tex files must have the same.
% All gtex files must also have the same version.
-\xdef\gre@gregoriotexversion{5.2.1}% GREGORIO_VERSION - VersionManager.py
-
-\ifluatex%
- \ifnum\luatexversion<76%
- \gre@error{Error: this document must be compiled with LuaTeX (lualatex) 0.76 or later}%
- \fi%
-\else%
- \gre@error{Error: this document must be compiled with LuaTeX (lualatex)}%
-\fi%
-
-
+\xdef\gre@gregoriotexversion{6.0.0-beta1}% GREGORIO_VERSION - VersionManager.py
% first some macros to allow checks for version:
% Tests that all gregoriotex files are of the same version.
@@ -631,16 +621,6 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% macros for the score reference (unused)
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def\grescorereference#1{% OBSOLETE
- \gre@error{\protect\grescorereference\space is obsolete.\MessageBreak It does nothing; stop using it.}%
- \relax %
-}%
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% macros for the typesetting the things above the initial
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -750,14 +730,28 @@
% - typeset the text above the lines if relevant, and making sure we execute it only once
% - not do anything else
+\newif\ifgre@showabovelinestext%
+\gre@showabovelinestexttrue%
+
+\def\gresetabovelinestext#1{%
+ \IfStrEqCase{#1}{%
+ {visible}{\gre@showabovelinestexttrue}%
+ {invisible}{\gre@showabovelinestextfalse}%
+ }[% all other cases
+ \gre@error{Unknown option, "#1" for \protect\gresetabovelinestext\MessageBreak Possible options are: 'visible' and 'invisible'}%
+ ]%
+}%
+
\xdef\gre@currenttextabovelines{}%
\def\GreSetTextAboveLines#1{%
- \gdef\gre@currenttextabovelines{%
- \gre@typesettextabovelines{#1}{0}%
- \gdef\gre@currenttextabovelines{}%
- \relax %
- }%
+ \ifgre@showabovelinestext%
+ \gdef\gre@currenttextabovelines{%
+ \gre@typesettextabovelines{#1}{0}%
+ \gdef\gre@currenttextabovelines{}%
+ \relax %
+ }%
+ \fi%
}%
% typesets the text or nabc neumes above the line
@@ -1037,37 +1031,55 @@
]%
}%
+\newif\ifgre@showtranslation%
+\gre@showtranslationtrue%
+
+\def\gresettranslation#1{%
+ \IfStrEqCase{#1}{%
+ {visible}{\gre@showtranslationtrue}%
+ {invisible}{\gre@showtranslationfalse}%
+ }[% all other cases
+ \gre@error{Unknown option, "#1" for \protect\gresettranslation\MessageBreak Possible options are: 'visible' and 'invisible'}%
+ ]%
+}%
+
\def\GreWriteTranslation#1{%
- \ifgre@translationcentering %
- \setbox\gre@box@temp@width=\hbox{#1}%
- \gre@dimen@temp@five=\dimexpr((\wd\gre@box@syllabletext - \wd\gre@box@temp@width) / 2)\relax%
- \gre@mark@translation %
- \kern\gre@dimen@temp@five %
- \raise\gre@space@dimen@spacebeneathtext\hbox to 0pt{\vbox to 0pt{\vss\hbox to 0pt{\gre@style@translation#1\endgre@style@translation\hss}}}%
- \kern-\gre@dimen@temp@five %
- \else %
- \gre@mark@translation %
- \raise\gre@space@dimen@spacebeneathtext\hbox to 0pt{\vbox to 0pt{\vss\hbox to 0pt{\gre@style@translation#1\endgre@style@translation\hss}}}%
- \fi %
+ \ifgre@showtranslation%
+ \ifgre@translationcentering %
+ \setbox\gre@box@temp@width=\hbox{#1}%
+ \gre@dimen@temp@five=\dimexpr((\wd\gre@box@syllabletext - \wd\gre@box@temp@width) / 2)\relax%
+ \gre@mark@translation %
+ \kern\gre@dimen@temp@five %
+ \raise\gre@space@dimen@spacebeneathtext\hbox to 0pt{\vbox to 0pt{\vss\hbox to 0pt{\gre@style@translation#1\endgre@style@translation\hss}}}%
+ \kern-\gre@dimen@temp@five %
+ \else %
+ \gre@mark@translation %
+ \raise\gre@space@dimen@spacebeneathtext\hbox to 0pt{\vbox to 0pt{\vss\hbox to 0pt{\gre@style@translation#1\endgre@style@translation\hss}}}%
+ \fi %
+ \fi%
}%
\def\GreWriteTranslationWithCenterBeginning#1{%
- \ifgre@breakintranslation\else%
- \GreBeginNLBArea{0}{1}%
- \fi %
- \gre@attr@center=1\relax %
- \gre@mark@translation %
- \raise\gre@space@dimen@spacebeneathtext\hbox to 0pt{\kern 0pt\vbox to 0pt{\vss\hbox to 0pt{\gre@style@translation#1\endgre@style@translation\hss}}\kern 0pt}%
- \unsetluatexattribute{\gre@attr@center}%
- \relax %
+ \ifgre@showtranslation%
+ \ifgre@breakintranslation\else%
+ \GreBeginNLBArea{0}{1}%
+ \fi %
+ \gre@attr@center=1\relax %
+ \gre@mark@translation %
+ \raise\gre@space@dimen@spacebeneathtext\hbox to 0pt{\kern 0pt\vbox to 0pt{\vss\hbox to 0pt{\gre@style@translation#1\endgre@style@translation\hss}}\kern 0pt}%
+ \unsetluatexattribute{\gre@attr@center}%
+ \relax %
+ \fi%
}%
\newif\ifgre@mustdotranslationcenterend%
\gre@mustdotranslationcenterendfalse%
\def\GreTranslationCenterEnd{%
- \gre@mustdotranslationcenterendtrue%
- \relax %
+ \ifgre@showtranslation%
+ \gre@mustdotranslationcenterendtrue%
+ \relax %
+ \fi%
}%
\def\gre@dotranslationcenterend{%
@@ -1114,6 +1126,19 @@
]%
}%
+\newif\ifgre@noteadditionalspacelinestext%
+\def\gresetnoteadditionalspacelinestext#1{%
+ \IfStrEqCase{#1}{%
+ {automatic}%
+ {\gre@noteadditionalspacelinestextfalse}%
+ {manual}%
+ {\gre@noteadditionalspacelinestexttrue}%
+ }[% all other cases
+ \gre@error{Unrecognized option "#1" for \protect\gresetnoteadditionalspacelinestext\MessageBreak Possible options are: 'automatic' and 'manual'}%
+ ]%
+}%
+\gresetnoteadditionalspacelinestext{automatic}%default setting
+
% gre@attr@dash (see its definition in gregorio-syllable) is 0 when we are in a score, and unset when we are not
\newif\ifgre@beginningofscore%
@@ -1136,10 +1161,14 @@
\let\gre@pitch@overbrace\gre@pitch@i %
\let\gre@char@bar@virgula\GreCPVirgulaTwo %
\let\gre@char@bar@virgulahigh\GreCPVirgulaThree %
+ \let\gre@char@bar@virgulaparen\GreCPVirgulaParenTwo %
+ \let\gre@char@bar@virgulaparenhigh\GreCPVirgulaParenThree %
\let\gre@char@bar@divisiominimis\GreCPDivisioMinimisTwo %
\let\gre@char@bar@divisiominimishigh\GreCPDivisioMinimisThree %
\let\gre@char@bar@divisiominima\GreCPDivisioMinimaTwo %
\let\gre@char@bar@divisiominimahigh\GreCPDivisioMinimaThree %
+ \let\gre@char@bar@divisiominimaparen\GreCPDivisioMinimaParenTwo %
+ \let\gre@char@bar@divisiominimaparenhigh\GreCPDivisioMinimaParenThree %
\let\gre@char@bar@divisiominor\GreCPDivisioMinorTwo %
\let\gre@char@bar@divisiomaior\GreCPDivisioMaiorTwo %
\let\gre@char@bar@divisiomaiordotted\GreCPDivisioMaiorDottedTwo %
@@ -1155,10 +1184,14 @@
\let\gre@pitch@overbrace\gre@pitch@k %
\let\gre@char@bar@virgula\GreCPVirgulaThree %
\let\gre@char@bar@virgulahigh\GreCPVirgulaFour %
+ \let\gre@char@bar@virgulaparen\GreCPVirgulaParenThree %
+ \let\gre@char@bar@virgulaparenhigh\GreCPVirgulaParenFour %
\let\gre@char@bar@divisiominimis\GreCPDivisioMinimisThree %
\let\gre@char@bar@divisiominimishigh\GreCPDivisioMinimisFour %
\let\gre@char@bar@divisiominima\GreCPDivisioMinimaThree %
\let\gre@char@bar@divisiominimahigh\GreCPDivisioMinimaFour %
+ \let\gre@char@bar@divisiominimaparen\GreCPDivisioMinimaParenThree %
+ \let\gre@char@bar@divisiominimaparenhigh\GreCPDivisioMinimaParenFour %
\let\gre@char@bar@divisiominor\GreCPDivisioMinorThree %
\let\gre@char@bar@divisiomaior\GreCPDivisioMaiorThree %
\let\gre@char@bar@divisiomaiordotted\GreCPDivisioMaiorDottedThree %
@@ -1174,10 +1207,14 @@
\let\gre@pitch@overbrace\gre@pitch@m %
\let\gre@char@bar@virgula\GreCPVirgulaFour %
\let\gre@char@bar@virgulahigh\GreCPVirgulaFive %
+ \let\gre@char@bar@virgulaparen\GreCPVirgulaParenFour %
+ \let\gre@char@bar@virgulaparenhigh\GreCPVirgulaParenFive %
\let\gre@char@bar@divisiominimis\GreCPDivisioMinimisFour %
\let\gre@char@bar@divisiominimishigh\GreCPDivisioMinimisFive %
\let\gre@char@bar@divisiominima\GreCPDivisioMinimaFour %
\let\gre@char@bar@divisiominimahigh\GreCPDivisioMinimaFive %
+ \let\gre@char@bar@divisiominimaparen\GreCPDivisioMinimaParenFour %
+ \let\gre@char@bar@divisiominimaparenhigh\GreCPDivisioMinimaParenFive %
\let\gre@char@bar@divisiominor\GreCPDivisioMinorFour %
\let\gre@char@bar@divisiomaior\GreCPDivisioMaiorFour %
\let\gre@char@bar@divisiomaiordotted\GreCPDivisioMaiorDottedFour %
@@ -1193,10 +1230,14 @@
\let\gre@pitch@overbrace\gre@pitch@p %
\let\gre@char@bar@virgula\GreCPVirgulaFive %
\let\gre@char@bar@virgulahigh\GreCPVirgulaSix %
+ \let\gre@char@bar@virgulaparen\GreCPVirgulaParenFive %
+ \let\gre@char@bar@virgulaparenhigh\GreCPVirgulaParenSix %
\let\gre@char@bar@divisiominimis\GreCPDivisioMinimisFive %
\let\gre@char@bar@divisiominimishigh\GreCPDivisioMinimisSix %
\let\gre@char@bar@divisiominima\GreCPDivisioMinimaFive %
\let\gre@char@bar@divisiominimahigh\GreCPDivisioMinimaSix %
+ \let\gre@char@bar@divisiominimaparen\GreCPDivisioMinimaParenFive %
+ \let\gre@char@bar@divisiominimaparenhigh\GreCPDivisioMinimaParenSix %
\let\gre@char@bar@divisiominor\GreCPDivisioMinorFive %
\let\gre@char@bar@divisiomaior\GreCPDivisioMaiorFive %
\let\gre@char@bar@divisiomaiordotted\GreCPDivisioMaiorDottedFive %
@@ -1242,8 +1283,6 @@
\gre@computespaces%
\gre@cancelpenalties %
\gre@attr@dash=0\relax %
- \xdef\gre@exhyphencharsave{\the\exhyphenchar}%
- \exhyphenchar=-1\relax %
\gre@generatelines %
\noindent%
\gre@calculate@additionalspaces{#2}{#3}{#4}{#5}%
@@ -1294,7 +1333,6 @@
\gre@removetranslationspace %
\gre@normalinitial %
\gre@restorepenalties %
- \exhyphenchar=\gre@exhyphencharsave %
\gre@dimen@temp@one=0pt\relax%
\gre@dimen@temp@two=0pt\relax%
\gre@dimen@temp@three=0pt\relax%
@@ -1547,6 +1585,10 @@
%% 20: space between a punctum inclinatum and a "no-bar" glyph two pitches above
%% 21: space between a punctum inclinatum and a "no-bar" glyph three or four pitches above
%% 22: half-space
+%% 23: Space between two puncta inclinata on a unison
+%% 24: Space before a right-leaning puncta inclinatum when the pitch is ascending (up to 4 pitches away)
+%% 25: Space before a left-leaning puncta inclinatum when the pitch is descending (up to 4 pitches away)
+%% 26: Space after after a non-punctum inclinatum and before the upright punctum inclinatum
\def\gre@get@spaceskip#1{%
\gre@trace{gre@get@spaceskip{#1}}%
\ifcase#1%
@@ -1602,7 +1644,7 @@
\or% case 25
\gre@skip@temp@four = \gre@space@skip@ascendingpunctuminclinatumdescendingshift\relax%
\or% case 26
- \gre@skip@temp@four = \gre@space@skip@unisonpunctuminclinatumshift\relax%
+ \gre@skip@temp@four = \gre@space@skip@uprightpunctuminclinatumshift\relax%
\else%
\gre@error{Unrecognized spaceskip #1}%
\fi%
@@ -1625,13 +1667,13 @@
% 2: no line break area due to <nlba> tag
\xdef\gre@nlbstate{0}%
-\newcount\gre@nobreakpenaltysave%
-\newcount\gre@endofwordpenaltysave%
-\newcount\gre@endofsyllablepenaltysave%
-\newcount\gre@endafterbarpenaltysave%
-\newcount\gre@endafterbaraltpenaltysave%
-\newcount\gre@endofelementpenaltysave%
-%\newcount\gre@hyphenpenaltysave% in gregoriotex-spaces.tex
+\newcount\gre@saved@prenlba@nobreakpenalty%
+\newcount\gre@saved@prenlba@endofwordpenalty%
+\newcount\gre@saved@prenlba@endofsyllablepenalty%
+\newcount\gre@saved@prenlba@endafterbarpenalty%
+\newcount\gre@saved@prenlba@endafterbaraltpenalty%
+\newcount\gre@saved@prenlba@endofelementpenalty%
+\newcount\gre@saved@prenlba@hyphenpenalty%
% first argument is if if the nlba is starting in neumes or not
% second argument is if it is called from translation centering or not
\def\GreBeginNLBArea#1#2{%
@@ -1648,20 +1690,25 @@
\fi %
\fi %
\ifnum\gre@nlbinitialstate=0\relax %
- \global\gre@nobreakpenaltysave=\gre@space@count@nobreakpenalty\relax %
- \global\gre@endofwordpenaltysave=\gre@space@count@endofwordpenalty\relax %
- \global\gre@endofsyllablepenaltysave=\gre@space@count@endofsyllablepenalty\relax %
- \global\gre@endafterbarpenaltysave=\gre@space@count@endafterbarpenalty\relax %
- \global\gre@endafterbaraltpenaltysave=\gre@space@count@endafterbaraltpenalty\relax %
- \global\gre@endofelementpenaltysave=\gre@space@count@endofelementpenalty\relax %
- \global\gre@hyphenpenaltysave=\gre@space@count@hyphenpenalty\relax %
- %
+ \global\gre@saved@prenlba@nobreakpenalty=\gre@space@count@nobreakpenalty\relax %
\global\gre@space@count@nobreakpenalty=10001\relax %
+ %
+ \global\gre@saved@prenlba@endofwordpenalty=\gre@space@count@endofwordpenalty\relax %
\global\gre@space@count@endofwordpenalty=10001\relax %
+ %
+ \global\gre@saved@prenlba@endofsyllablepenalty=\gre@space@count@endofsyllablepenalty\relax %
\global\gre@space@count@endofsyllablepenalty=10001\relax %
+ %
+ \global\gre@saved@prenlba@endafterbarpenalty=\gre@space@count@endafterbarpenalty\relax %
\global\gre@space@count@endafterbarpenalty=10001\relax %
+ %
+ \global\gre@saved@prenlba@endafterbaraltpenalty=\gre@space@count@endafterbaraltpenalty\relax %
\global\gre@space@count@endafterbaraltpenalty=10001\relax %
+ %
+ \global\gre@saved@prenlba@endofelementpenalty=\gre@space@count@endofelementpenalty\relax %
\global\gre@space@count@endofelementpenalty=10001\relax %
+ %
+ \global\gre@saved@prenlba@hyphenpenalty=\gre@space@count@hyphenpenalty\relax %
\global\gre@space@count@hyphenpenalty=10001\relax %
\fi %
}%
@@ -1682,13 +1729,13 @@
% if gre@nlbstate is not 0, then nothing should happend
\ifnum\gre@nlbstate=0\relax %
\ifnum\gre@nlbinitialstate=0\else %
- \global\gre@space@count@nobreakpenalty=\gre@nobreakpenaltysave\relax %
- \global\gre@space@count@endofwordpenalty=\gre@endofwordpenaltysave\relax %
- \global\gre@space@count@endofsyllablepenalty=\gre@endofsyllablepenaltysave\relax %
- \global\gre@space@count@endafterbarpenalty=\gre@endafterbarpenaltysave\relax %
- \global\gre@space@count@endafterbaraltpenalty=\gre@endafterbaraltpenaltysave\relax %
- \global\gre@space@count@endofelementpenalty=\gre@endofelementpenaltysave\relax %
- \global\gre@space@count@hyphenpenalty=\gre@hyphenpenaltysave\relax %
+ \global\gre@space@count@nobreakpenalty=\gre@saved@prenlba@nobreakpenalty\relax %
+ \global\gre@space@count@endofwordpenalty=\gre@saved@prenlba@endofwordpenalty\relax %
+ \global\gre@space@count@endofsyllablepenalty=\gre@saved@prenlba@endofsyllablepenalty\relax %
+ \global\gre@space@count@endafterbarpenalty=\gre@saved@prenlba@endafterbarpenalty\relax %
+ \global\gre@space@count@endafterbaraltpenalty=\gre@saved@prenlba@endafterbaraltpenalty\relax %
+ \global\gre@space@count@endofelementpenalty=\gre@saved@prenlba@endofelementpenalty\relax %
+ \global\gre@space@count@hyphenpenalty=\gre@saved@prenlba@hyphenpenalty\relax %
\ifcase #1\relax % 0
\gre@penalty{\the\gre@space@count@endofelementpenalty}%
\or % 1
@@ -1769,25 +1816,34 @@
\gre@trace@end%
}%
+%% font calibration distances
+\newdimen\gre@dimen@stafflinethicknessbase%
+\newdimen\gre@dimen@glyphraisebase%
+\newdimen\gre@dimen@interstafflinedistancebase%
+\newdimen\gre@dimen@inclinatumonlinemoravshiftbase%
+\newdimen\gre@dimen@inclinatumonlinemorahshiftbase%
+\newdimen\gre@dimen@inclinatumofflinemorahshiftbase%
+
\def\gre@setgregoriofontscaled[#1]#2#3{%
\gre@trace{gre@setgregoriofontscaled[#1]{#2}{#3}}%
- \IfStrEq{#2}{parmesan}{%%% OBSOLETE
- \gre@obsolete{'parmesan' font}{'granapadano' font}%%% OBSOLETE
- }{%%% OBSOLETE
- % keep this section
- \if\relax\detokenize{#1}\relax %
- \xdef\gre@gregoriofontname{#2}%
- \expandafter\xdef\csname gre@fontfactor@#2\endcsname{#3}%
- \gre@loadgregoriofont%
- \gdef\GreCPVirgaReversaAscendensOnDLine##1{##1}%
- \else %
- \xdef\gre@gregoriofontname{#2-#1}%
- \expandafter\xdef\csname gre@fontfactor@#2-#1\endcsname{#3}%
- \gre@loadgregoriofont%
- \gdef\GreCPVirgaReversaAscendensOnDLine##1{\GreCPVirgaReversaLongqueueAscendens}%
- \fi %
- }%%% OBSOLETE
- \relax %
+ \if\relax\detokenize{#1}\relax %
+ \xdef\gre@gregoriofontname{#2}%
+ \expandafter\xdef\csname gre@fontfactor@#2\endcsname{#3}%
+ \gre@loadgregoriofont%
+ \gdef\GreCPVirgaReversaAscendensOnDLine##1{##1}%
+ \else %
+ \xdef\gre@gregoriofontname{#2-#1}%
+ \expandafter\xdef\csname gre@fontfactor@#2-#1\endcsname{#3}%
+ \gre@loadgregoriofont%
+ \gdef\GreCPVirgaReversaAscendensOnDLine##1{\GreCPVirgaReversaLongqueueAscendens}%
+ \fi %
+ % currently all fonts use the same calibration distances
+ \gre@dimen@stafflinethicknessbase=1500sp\relax %
+ \gre@dimen@glyphraisebase=-22000sp\relax%
+ \gre@dimen@interstafflinedistancebase=30000sp\relax%
+ \gre@dimen@inclinatumonlinemoravshiftbase=4500sp\relax%
+ \gre@dimen@inclinatumonlinemorahshiftbase=3700sp\relax%
+ \gre@dimen@inclinatumofflinemorahshiftbase=2500sp\relax%
\gre@trace@end%
}%
@@ -1840,7 +1896,6 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\grechangestyle#1#2{%
- \IfStrEq{#1}{biginitial}{\gre@obsolete{biginitial style}{initial style}}{}%%% OBSOLETE
\@ifnextchar[{\gre@changestyle{#1}{#2}}{\gre@changestyle{#1}{#2}[\relax]}%
}%
@@ -1877,6 +1932,20 @@
%% score including
%%%%%%%%%%%%%%%%%%%
+
+\def\gre@maketable#1{\ifx\relax#1\else,"#1"\expandafter\gre@maketable\fi}
+
+\def\gresetgregpath#1{%
+ \def\gre@input@path{#1}%
+ \directlua{
+ gre_input_path = {""\expandafter\gre@maketable\gre@input@path\relax}
+ }
+}
+
+\ifx\gre@input@path\@undefined
+ \let\gre@input@path\input@path
+\fi
+
% Flag to track compilation behavior
% 0 = never compile (default)
% 1 = auto compile (compile outdated scores and those lacking a compiled version)
@@ -1910,6 +1979,8 @@
% This forces gregoriotex to recompile the gabc file.
\def\gre@gregorioscore#1{%
+ \begingroup%
+ \let\input@path\gre@input@path%
\ifcase\gre@compilegabc% case 0, never compile
\gre@debugmsg{compile}{Refusing to compile #1}%
\input #1%
@@ -1921,6 +1992,7 @@
\directlua{gregoriotex.include_score([[#1]], true, \gre@allowdeprecated@asboolean)}%
\fi%
\relax%
+ \endgroup%
}%
% The internal macro called when \gregorioscore is called with the optional argument. Behavior is determined by the value of the argument:
@@ -1928,6 +2000,8 @@
% a - perform the checks to see if the score needs to be recompiled and do so only if necessary
% f - force the compilation of the score before including it
\def\gre@gregorioscore@option[#1]#2{%
+ \begingroup%
+ \let\input@path\gre@input@path%
\ifx #1n\relax%
\gre@debugmsg{compile}{Override not compiling #2}%
\input #2%
@@ -1945,6 +2019,7 @@
\fi%
\fi%
\relax%
+ \endgroup%
}%
% The main macro used by the user to input scores into the document.
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-nabc.lua b/support/gregoriotex/tex/luatex/gregoriotex-nabc.lua
index 8eb1b3e155..deeaf3ba34 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-nabc.lua
+++ b/support/gregoriotex/tex/luatex/gregoriotex-nabc.lua
@@ -1,6 +1,6 @@
--GregorioTeX Nabc Lua file.
--
---Copyright (C) 2014-2019 The Gregorio Project (see CONTRIBUTORS.md)
+--Copyright (C) 2014-2021 The Gregorio Project (see CONTRIBUTORS.md)
--
--This file is part of Gregorio.
--
@@ -20,7 +20,7 @@
-- this file contains lua functions used by GregorioTeX St. Gall ancient
-- neume support when called with LuaTeX.
--- GREGORIO_VERSION 5.2.1
+-- GREGORIO_VERSION 6.0.0-beta1
local catcode_at_letter = luatexbase.catcodetables['gre@atletter']
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-nabc.tex b/support/gregoriotex/tex/luatex/gregoriotex-nabc.tex
index 11949b5a7c..fa76832c43 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-nabc.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-nabc.tex
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2014-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2014-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -19,7 +19,7 @@
% this file contains macros for St. Gall ancient neume support
-\gre@declarefileversion{gregoriotex-nabc.tex}{5.2.1}% GREGORIO_VERSION
+\gre@declarefileversion{gregoriotex-nabc.tex}{6.0.0-beta1}% GREGORIO_VERSION
\xdef\gre@nabcfontname{gregall}%
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-signs.lua b/support/gregoriotex/tex/luatex/gregoriotex-signs.lua
index c52a25b113..25a2f85cbe 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-signs.lua
+++ b/support/gregoriotex/tex/luatex/gregoriotex-signs.lua
@@ -1,6 +1,6 @@
--GregorioTeX Signs Lua support file.
--
---Copyright (C) 2015-2019 The Gregorio Project (see CONTRIBUTORS.md)
+--Copyright (C) 2015-2021 The Gregorio Project (see CONTRIBUTORS.md)
--
--This file is part of Gregorio.
--
@@ -19,7 +19,7 @@
-- this file contains lua functions to support signs used by GregorioTeX.
--- GREGORIO_VERSION 5.2.1
+-- GREGORIO_VERSION 6.0.0-beta1
local err = gregoriotex.module.err
local warn = gregoriotex.module.warn
@@ -211,6 +211,18 @@ local offset_cases = {
case = 'BarDivisioFinalis',
v = [[\gre@vepisemaorrareaux{0}{\gre@fontchar@divisiofinalis}{1}{0}{#2}{#3}{#4}]],
},
+ -- parenthesized bar
+ {
+ case = 'BarParen',
+ v = [[\gre@vepisemaorrareaux{0}{\gre@char@bar@divisiominimaparen}{1}{0}{#2}{#3}{#4}]],
+ h = [[\gre@hepisorlineaux{\gre@char@bar@divisiominimaparen}{\gre@char@he@barparen{#4}}{2}{#3}]],
+ },
+ -- parenthesized virgula
+ {
+ case = 'BarVirgulaParen',
+ v = [[\gre@vepisemaorrareaux{0}{\gre@char@bar@virgulaparen}{1}{0}{#2}{#3}{#4}]],
+ h = [[\gre@hepisorlineaux{\gre@char@bar@virgulaparen}{\gre@char@he@barvirgulaparen{#4}}{2}{#3}]],
+ },
-- second note of a non-auctus torculus resupinus starting with a quilisma,
-- with a first and second ambitus of at least two
{
@@ -452,9 +464,27 @@ local offset_cases = {
-- natural
{
case = 'Natural',
- v = [[\gre@vepisemaorrareaux{0}{\GreCPNatual}{1}{0}{#2}{#3}{#4}]],
+ v = [[\gre@vepisemaorrareaux{0}{\GreCPNatural}{1}{0}{#2}{#3}{#4}]],
h = [[\gre@hepisorlineaux{\GreCPNatural}{\gre@char@he@natural{#4}}{2}{#3}]],
},
+ -- parenthesized flat
+ {
+ case = 'FlatParen',
+ v = [[\gre@vepisemaorrareaux{0}{\GreCPFlatParen}{1}{0}{#2}{#3}{#4}]],
+ h = [[\gre@hepisorlineaux{\GreCPFlatParen}{\gre@char@he@flatparen{#4}}{2}{#3}]],
+ },
+ -- parenthesized sharp
+ {
+ case = 'SharpParen',
+ v = [[\gre@vepisemaorrareaux{0}{\GreCPSharpParen}{1}{0}{#2}{#3}{#4}]],
+ h = [[\gre@hepisorlineaux{\GreCPSharpParen}{\gre@char@he@sharpparen{#4}}{2}{#3}]],
+ },
+ -- parenthesized natural
+ {
+ case = 'NaturalParen',
+ v = [[\gre@vepisemaorrareaux{0}{\GreCPNaturalParen}{1}{0}{#2}{#3}{#4}]],
+ h = [[\gre@hepisorlineaux{\GreCPNaturalParen}{\gre@char@he@naturalparen{#4}}{2}{#3}]],
+ },
}
local function emit_offset_macros()
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-signs.tex b/support/gregoriotex/tex/luatex/gregoriotex-signs.tex
index b5f68ebbcd..addcba3178 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-signs.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-signs.tex
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -22,7 +22,7 @@
\def\grebarbracewidth{.58879}%
-\gre@declarefileversion{gregoriotex-signs.tex}{5.2.1}% GREGORIO_VERSION
+\gre@declarefileversion{gregoriotex-signs.tex}{6.0.0-beta1}% GREGORIO_VERSION
\def\gre@usestylecommon{%
\gre@trace{gre@usestylecommon}%
@@ -238,8 +238,8 @@
\gre@trace@end%
}
-\def\gre@saveclefextrema#1#2{%
- \gre@trace{gre@saveclefextrema{#1}{#2}}%
+\def\gre@save@clefextrema#1#2{%
+ \gre@trace{gre@save@clefextrema{#1}{#2}}%
% compute the clef extrema
\ifcase#1\or % first@1
\global\let\gre@pitch@cleftop\gre@pitch@e %
@@ -308,7 +308,7 @@
\def\GreInitialClefPosition#1#2{%
\gre@trace{GreInitialClefPosition{#1}{#2}}%
\ifgre@showclef %
- \gre@saveclefextrema{#1}{#2}%
+ \gre@save@clefextrema{#1}{#2}%
\fi %
\gre@trace@end%
}%
@@ -325,7 +325,7 @@
%% #8: if 3, it means that we must not put a flat after the secondary clef, otherwise it's the height of the flat
\def\gre@typeclef#1#2#3#4#5#6#7#8{%
\gre@trace{gre@typeclef{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
- \gre@saveclefextrema{#2}{#7}%
+ \gre@save@clefextrema{#2}{#7}%
\gre@boxclef{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
\ifcase#3%
\gre@update@clefwidth@current{\wd\gre@box@temp@width}%
@@ -1210,12 +1210,12 @@
% here we shift a bit left in the case where we have a punctum inclinatum on a line
\ifnum#4=1\relax %
\ifgre@isonaline %
- \gre@dimen@temp@three=\dimexpr(3700sp * \gre@factor)\relax %
+ \gre@dimen@temp@three=\dimexpr(\gre@dimen@inclinatumonlinemorahshiftbase * \gre@factor)\relax %
\kern-\gre@dimen@temp@three %
- \gre@dimen@temp@three=\dimexpr(4500sp * \gre@factor)\relax%
+ \gre@dimen@temp@three=\dimexpr(\gre@dimen@inclinatumonlinemoravshiftbase * \gre@factor)\relax%
\advance\gre@dimen@glyphraisevalue by -\gre@dimen@temp@three %
\else %
- \gre@dimen@temp@three=\dimexpr(2500sp * \gre@factor)\relax %
+ \gre@dimen@temp@three=\dimexpr(\gre@dimen@inclinatumofflinemorahshiftbase * \gre@factor)\relax %
\advance\gre@dimen@glyphraisevalue by -\gre@dimen@temp@three %
\fi %
\fi %
@@ -1538,6 +1538,7 @@
\setbox\gre@box@temp@sign=\hbox{\gre@font@music#2}%
% we set tempwidth to half a punctum malus half the sign width, so that the centers are aligned
\gre@dimen@temp@two=\wd\gre@box@temp@sign %
+ \gre@debugmsg{general}{gre@dimen@temp@two = \the\gre@dimen@temp@two}%
\ifcase#4%
%case of hepisema
\raise \gre@dimen@glyphraisevalue \copy\gre@box@temp@sign %
@@ -1840,6 +1841,34 @@
\gre@trace@end%
}%
+\def\GreInVirgulaParen#1#2#3{%
+ \gre@trace{GreInVirgulaParen{#1}{#2}{#3}}%
+ \gre@writebar{19}{1}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
+\def\GreVirgulaParen#1#2#3{%
+ \gre@trace{GreVirgulaParen{#1}{#2}{#3}}%
+ \gre@writebar{19}{0}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
+\def\GreInVirgulaParenHigh#1#2#3{%
+ \gre@trace{GreInVirgulaParenHigh{#1}{#2}{#3}}%
+ \gre@writebar{21}{1}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
+\def\GreVirgulaParenHigh#1#2#3{%
+ \gre@trace{GreVirgulaParenHigh{#1}{#2}{#3}}%
+ \gre@writebar{21}{0}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
\def\GreInDivisioMinimis#1#2#3{%
\gre@trace{GreInDivisioMinimis{#1}{#2}{#3}}%
\gre@writebar{17}{1}{#1}{#2}{#3}%
@@ -1896,6 +1925,34 @@
\gre@trace@end%
}%
+\def\GreInDivisioMinimaParen#1#2#3{%
+ \gre@trace{GreInDivisioMinimaParen{#1}{#2}{#3}}%
+ \gre@writebar{20}{1}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
+\def\GreDivisioMinimaParen#1#2#3{%
+ \gre@trace{GreDivisioMinimaParen{#1}{#2}{#3}}%
+ \gre@writebar{20}{0}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
+\def\GreInDivisioMinimaParenHigh#1#2#3{%
+ \gre@trace{GreInDivisioMinimaHigh{#1}{#2}{#3}}%
+ \gre@writebar{22}{1}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
+\def\GreDivisioMinimaParenHigh#1#2#3{%
+ \gre@trace{GreDivisioMinimaHigh{#1}{#2}{#3}}%
+ \gre@writebar{22}{0}{#1}{#2}{#3}%
+ \relax%
+ \gre@trace@end%
+}%
+
\def\GreInDivisioMinor#1#2{%
\gre@trace{GreInDivisioMinor{#1}{#2}}%
\gre@writebar{2}{1}{#1}{#2}{0}%
@@ -2100,7 +2157,15 @@
\newskip\gre@skip@bar@lastskip% skip after last bar
%a macro to write a bar
-%% 1: the type of the bar : 0 for virgula, 1 for minima 2 for minor, 3 for major, 4 for finalis and 5 for the last finalis, 6 to 13 for dominican bars, 14 for high virgula, 15 for high minima, 16 for dotted maior, 17 for minimis, 18 for high minimis
+%% 1: the type of the bar : 0 for virgula, 1 for minima, 2 for minor,
+%% 3 for major, 4 for finalis, 5 for the last finalis,
+%% 6 to 13 for dominican bars, 14 for high virgula,
+%% 15 for high minima, 16 for dotted maior,
+%% 17 for minimis, 18 for high minimis,
+%% 19 for parenthesized virgula,
+%% 20 for parenthesized minima,
+%% 21 for high parenthesized virgula,
+%% 22 for high parenthesized minima,
%% 2: is 0 if it is in a syllable containing only this bar, 1 otherwise
%% 3: is 0 if there's no text under the bar or 1 if there is text under the bar
%% 4: macros that may happen before the skip after the bar (typically GreVEpisema)
@@ -2428,6 +2493,66 @@
\gre@skip@temp@four = \csname gre@space@skip@bar@minimis\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
\gre@hskip\gre@skip@temp@four %
\fi %
+ \or % 19 : parenthesized virgula
+ \ifnum\gre@count@temp@one=1\relax %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@virgulaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \GreNoBreak %
+ \fi %
+ \setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@virgulaparen}%
+ \raise\gre@dimen@glyphraisevalue\hbox{\gre@font@music\gre@char@bar@virgulaparen}%
+ #4\relax %
+ \ifnum\gre@count@temp@one=1\relax %
+ \GreNoBreak %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@virgulaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \fi %
+ \or % 20 : parenthesized minima
+ \ifnum\gre@count@temp@one=1\relax %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@minimaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \GreNoBreak %
+ \fi %
+ \setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@divisiominimaparen}%
+ \raise\gre@dimen@glyphraisevalue\hbox{\gre@font@music\gre@char@bar@divisiominimaparen}%
+ #4\relax %
+ \ifnum\gre@count@temp@one=1\relax %
+ \GreNoBreak %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@minimaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \fi %
+ \or % 21 : parenthesized high virgula
+ \ifnum\gre@count@temp@one=1\relax %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@virgulaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \GreNoBreak %
+ \fi %
+ \GreGlyphHeights{\gre@pitch@ledger@above}{\gre@pitch@ledger@above}%
+ \setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@virgulaparenhigh}%
+ \raise\gre@dimen@glyphraisevalue\hbox{\gre@font@music\gre@char@bar@virgulaparenhigh}%
+ \GreAdditionalLine{\GreOCaseBarVirgulaParen}{0}{2}%
+ #4\relax %
+ \ifnum\gre@count@temp@one=1\relax %
+ \GreNoBreak %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@virgulaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \fi %
+ \or % 22 : parenthesized high minima
+ \ifnum\gre@count@temp@one=1\relax %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@minimaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \GreNoBreak %
+ \fi %
+ \GreGlyphHeights{\gre@pitch@ledger@above}{\gre@pitch@ledger@above}%
+ \setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@divisiominimaparenhigh}%
+ \raise\gre@dimen@glyphraisevalue\hbox{\gre@font@music\gre@char@bar@divisiominimaparenhigh}%
+ \GreAdditionalLine{\GreOCaseBarParen}{0}{2}%
+ #4\relax %
+ \ifnum\gre@count@temp@one=1\relax %
+ \GreNoBreak %
+ \gre@skip@temp@four = \csname gre@space@skip@bar@minimaparen\gre@bar@space@suffix{#2}{#3}{#5}\endcsname\relax%
+ \gre@hskip\gre@skip@temp@four %
+ \fi %
\fi %
\global\gre@skip@bar@lastskip=\gre@skip@temp@four %
\gre@debugmsg{spacing}{Width of bar just printed: \the\wd\gre@box@temp@width}%
@@ -2470,7 +2595,7 @@
%macro to end a line with a divisio finalis
\def\GreFinalDivisioFinalis#1{%
\gre@trace{GreFinalDivisioFinalis{#1}}%
- \GreBarSyllable{\GreSetThisSyllable{}{}{}{}{}}{}{}{1}{\GreSetNextSyllable{}{}{}{}{}\GreLastOfLine}{}{16}{}{%
+ \GreBarSyllable{\GreSetThisSyllable{}{}{}{}{}}{}{}{1}{\GreSetNextSyllable{}{}{}{}{}\GreLastOfLine}{}{{16}{0}}{}{%
\ifgre@newbarspacing\else %
\gre@hskip\gre@space@skip@bar@finalfinalis %
\GreNoBreak %
@@ -2486,7 +2611,7 @@
%macro to end a line with a divisio maior
\def\GreFinalDivisioMaior#1{%
\gre@trace{GreFinalDivisioMaior{#1}}%
- \GreBarSyllable{\GreSetThisSyllable{}{}{}{}{}}{}{}{1}{\GreSetNextSyllable{}{}{}{}{}\GreLastOfLine}{}{16}{}{%
+ \GreBarSyllable{\GreSetThisSyllable{}{}{}{}{}}{}{}{1}{\GreSetNextSyllable{}{}{}{}{}\GreLastOfLine}{}{{16}{0}}{}{%
\GreLastOfScore %
\GreDivisioMaior{0}{}%
#1%
@@ -2551,16 +2676,13 @@
\gre@trace{gre@fillhole{#1}{#2}}%
\ifgre@boxing\else %
\global\gre@count@lastglyphiscavum=1\relax %
- \setbox\gre@box@temp@sign=\hbox{#1}%
+ \setbox\gre@box@temp@sign=\hbox to 0pt {%
+ {\color{grebackgroundcolor}#1}%
+ \rule{0pt}{0pt}% this trick prevents the color from leaking out of this box
+ \hss}%
+ \luacolorProcessBox\gre@box@temp@sign%
\ifcase#2\raise \gre@dimen@glyphraisevalue\fi%
- \hbox to 0pt{%
- {%
- \color{grebackgroundcolor}%
- \copy\gre@box@temp@sign %
- }%
- %\pdfliteral{}% this is a ugly hack for old versions of LuaTeX to work
- \hss %
- }%
+ \copy\gre@box@temp@sign%
\GreNoBreak %
\fi %
\relax %
@@ -2631,6 +2753,15 @@
\gre@trace@end%
}%
+% Same as the one before, but for parenthesized flats.
+
+\def\GreFlatParen#1#2#3#4#5{%
+ \gre@trace{GreFlatParen{#1}{#2}{#3}{#4}{#5}}%
+ \gre@alteration{#1}{\gre@fontchar@flatparen}{\gre@fontchar@flatparenhole}{#2}{#3}{#4}{#5}%
+ \relax%
+ \gre@trace@end%
+}%
+
% Same as the one before, but for naturals.
\def\GreNatural#1#2#3#4#5{%
@@ -2640,6 +2771,15 @@
\gre@trace@end%
}%
+% Same as the one before, but for parenthesized naturals.
+
+\def\GreNaturalParen#1#2#3#4#5{%
+ \gre@trace{GreNaturalParen{#1}{#2}{#3}{#4}{#5}}%
+ \gre@alteration{#1}{\gre@fontchar@naturalparen}{\gre@fontchar@naturalparenhole}{#2}{#3}{#4}{#5}%
+ \relax%
+ \gre@trace@end%
+}%
+
% Same as the one before, but for sharps.
\def\GreSharp#1#2#3#4#5{%
@@ -2649,6 +2789,15 @@
\gre@trace@end%
}%
+% Same as the one before, but for sharps.
+
+\def\GreSharpParen#1#2#3#4#5{%
+ \gre@trace{GreSharpParem{#1}{#2}{#3}{#4}{#5}}%
+ \gre@alteration{#1}{\gre@fontchar@sharpparen}{\gre@fontchar@sharpparenhole}{#2}{#3}{#4}{#5}%
+ \relax%
+ \gre@trace@end%
+}%
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% macros for typesetting punctum cavum
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-spaces.tex b/support/gregoriotex/tex/luatex/gregoriotex-spaces.tex
index c9a0df14f6..a0fcc077b9 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-spaces.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-spaces.tex
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -19,7 +19,7 @@
% this file contains definitions of spaces
-\gre@declarefileversion{gregoriotex-spaces.tex}{5.2.1}% GREGORIO_VERSION
+\gre@declarefileversion{gregoriotex-spaces.tex}{6.0.0-beta1}% GREGORIO_VERSION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% macros for tuning penalties
@@ -35,77 +35,95 @@
-\newcount\gre@hyphenpenaltysave%
-\newcount\gre@exhyphenpenaltysave%
-\newcount\gre@doublehyphendemeritssave%
-\newcount\gre@finalhyphendemeritssave%
-\newcount\gre@brokenpenaltysave%
-\newcount\gre@loosenesssave%
-\newcount\gre@tolerancesave%
-\newcount\gre@pretolerancesave%
-\newskip\gre@emergencystretchsave%
-\newcount\gre@widowpenaltysave%
-\newcount\gre@clubpenaltysave%
-\newskip\gre@saved@parskip%
-\newskip\gre@saved@lineskip%
-\newskip\gre@saved@baselineskip%
-\newskip\gre@saved@lineskiplimit%
+\newcount\gre@saved@prescore@hyphenpenalty%
+\newcount\gre@saved@prescore@exhyphenpenalty%
+\newcount\gre@saved@prescore@exhyphenchar%
+\newcount\gre@saved@prescore@doublehyphendemerits%
+\newcount\gre@saved@prescore@finalhyphendemerits%
+\newcount\gre@saved@prescore@brokenpenalty%
+\newcount\gre@saved@prescore@looseness%
+\newcount\gre@saved@prescore@tolerance%
+\newcount\gre@saved@prescore@pretolerance%
+\newskip\gre@saved@prescore@emergencystretch%
+\newcount\gre@saved@prescore@widowpenalty%
+\newcount\gre@saved@prescore@clubpenalty%
+\newskip\gre@saved@prescore@parskip%
+\newskip\gre@saved@prescore@lineskip%
+\newskip\gre@saved@prescore@baselineskip%
+\newskip\gre@saved@prescore@lineskiplimit%
%% The following macros cancel some useless penalties, and reinstates them
%% at the end of a score
\def\gre@cancelpenalties{%
\gre@trace{gre@cancelpenalties}%
- \global\gre@hyphenpenaltysave=\hyphenpenalty\relax %
- \global\gre@exhyphenpenaltysave=\exhyphenpenalty\relax %
- \global\gre@doublehyphendemeritssave=\doublehyphendemerits\relax %
- \global\gre@finalhyphendemeritssave=\finalhyphendemerits\relax %
- \global\gre@brokenpenaltysave=\brokenpenalty\relax %
- \global\gre@loosenesssave=\looseness\relax %
- \global\gre@tolerancesave=\tolerance\relax %
- \global\gre@pretolerancesave=\pretolerance\relax %
- \global\gre@emergencystretchsave=\emergencystretch\relax %
- \global\gre@widowpenaltysave=\widowpenalty\relax %
- \global\gre@clubpenaltysave=\clubpenalty\relax %
- %
- \global\gre@saved@parskip=\parskip%
- \global\gre@saved@lineskip=\lineskip%
- \global\gre@saved@baselineskip=\baselineskip%
- \global\gre@saved@lineskiplimit=\lineskiplimit%
+ \global\gre@saved@prescore@hyphenpenalty=\hyphenpenalty\relax %
\hyphenpenalty=\gre@space@count@hyphenpenalty %
+ %
+ \global\gre@saved@prescore@exhyphenpenalty=\exhyphenpenalty\relax %
\exhyphenpenalty=\gre@space@count@hyphenpenalty %
+ %
+ \global\gre@saved@prescore@exhyphenchar=\exhyphenchar\relax %
+ \exhyphenchar=-1\relax%
+ %
+ \global\gre@saved@prescore@doublehyphendemerits=\doublehyphendemerits\relax %
\doublehyphendemerits=0\relax %
+ %
+ \global\gre@saved@prescore@finalhyphendemerits=\finalhyphendemerits\relax %
\finalhyphendemerits=0\relax %
+ %
+ \global\gre@saved@prescore@brokenpenalty=\brokenpenalty\relax %
\brokenpenalty=\gre@space@count@brokenpenalty %
+ %
+ \global\gre@saved@prescore@looseness=\looseness\relax %
\looseness=\gre@space@count@looseness %
+ %
+ \global\gre@saved@prescore@tolerance=\tolerance\relax %
\tolerance=\gre@space@count@tolerance %
+ %
+ \global\gre@saved@prescore@pretolerance=\pretolerance\relax %
\pretolerance=\gre@space@count@pretolerance %
+ %
+ \global\gre@saved@prescore@emergencystretch=\emergencystretch\relax %
\emergencystretch=\gre@space@skip@emergencystretch\relax %
+ %
+ \global\gre@saved@prescore@widowpenalty=\widowpenalty\relax %
\widowpenalty=\gre@space@count@widowpenalty %
+ %
+ \global\gre@saved@prescore@clubpenalty=\clubpenalty\relax %
\clubpenalty=\gre@space@count@clubpenalty %
+ %
+ \global\gre@saved@prescore@parskip=\parskip%
\parskip=\gre@space@skip@parskip%
+ %
+ \global\gre@saved@prescore@lineskip=\lineskip%
\lineskip=\gre@space@skip@lineskip%
+ %
+ \global\gre@saved@prescore@baselineskip=\baselineskip%
\baselineskip=\gre@space@skip@baselineskip%
+ %
+ \global\gre@saved@prescore@lineskiplimit=\lineskiplimit%
\lineskiplimit=\gre@space@skip@lineskiplimit%
\gre@trace@end%
}%
\def\gre@restorepenalties{%
\gre@trace{gre@restorepenalties}%
- \hyphenpenalty=\gre@hyphenpenaltysave %
- \exhyphenpenalty=\gre@exhyphenpenaltysave %
- \doublehyphendemerits=\gre@doublehyphendemeritssave %
- \finalhyphendemerits=\gre@finalhyphendemeritssave %
- \brokenpenalty=\gre@brokenpenaltysave %
- \looseness=\gre@loosenesssave %
- \tolerance=\gre@tolerancesave %
- \pretolerance=\gre@pretolerancesave %
- \emergencystretch=\gre@emergencystretchsave %
- \widowpenalty=\gre@widowpenaltysave %
- \clubpenalty=\gre@clubpenaltysave %
- \parskip=\gre@saved@parskip%
- \lineskip=\gre@saved@lineskip%
- \baselineskip=\gre@saved@baselineskip%
- \lineskiplimit=\gre@saved@lineskiplimit%
+ \hyphenpenalty=\gre@saved@prescore@hyphenpenalty %
+ \exhyphenpenalty=\gre@saved@prescore@exhyphenpenalty %
+ \exhyphenchar=\gre@saved@prescore@exhyphenchar %
+ \doublehyphendemerits=\gre@saved@prescore@doublehyphendemerits %
+ \finalhyphendemerits=\gre@saved@prescore@finalhyphendemerits %
+ \brokenpenalty=\gre@saved@prescore@brokenpenalty %
+ \looseness=\gre@saved@prescore@looseness %
+ \tolerance=\gre@saved@prescore@tolerance %
+ \pretolerance=\gre@saved@prescore@pretolerance %
+ \emergencystretch=\gre@saved@prescore@emergencystretch %
+ \widowpenalty=\gre@saved@prescore@widowpenalty %
+ \clubpenalty=\gre@saved@prescore@clubpenalty %
+ \parskip=\gre@saved@prescore@parskip%
+ \lineskip=\gre@saved@prescore@lineskip%
+ \baselineskip=\gre@saved@prescore@baselineskip%
+ \lineskiplimit=\gre@saved@prescore@lineskiplimit%
\gre@trace@end%
}%
@@ -114,7 +132,7 @@
%% macros for the typesetting of spaces
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Independent default distances are defined in gsp-default.tex. The distances defined here are calculated from those distances.
+% Independent default distances are defined in gregoriotex-gsp-default.tex. The distances defined here are calculated from those distances.
%%%%%%%%%%%%%%%%%
%% Global distances
@@ -148,35 +166,29 @@
% Messing with the staff line thickness directly is messy, so we provide the following interface to make life easier on the user:
% stafflineheight is the height of a staff line
-% = 1500 * stafflinefactor
+% = gre@dimen@stafflinethicknessbase * stafflinefactor
\newdimen\gre@dimen@stafflineheight\relax%
\def\gre@calculate@stafflineheight{%
\gre@trace{gre@calculate@stafflineheight}%
- \global\gre@dimen@stafflineheight=\dimexpr(1500 sp * \gre@stafflinefactor)\relax %
+ \global\gre@dimen@stafflineheight=\dimexpr(\gre@dimen@stafflinethicknessbase * \gre@stafflinefactor)\relax %
\gre@trace@end%
}%
% interstafflinespace is the space between two lines of staff
-% = (30000 - (stafflineheight/gre@factor - 1500)) * gre@factor = 31500 * gre@factor - stafflineheight
+% = (gre@dimen@interstafflinedistancebase + gre@dimen@stafflinethicknessbase) * gre@factor - gre@dimen@stafflinethicknessbase * gre@stafflinefactor
\newdimen\gre@dimen@interstafflinespace\relax%
\def\gre@calculate@interstafflinespace{%
\gre@trace{gre@calculate@interstafflinespace}%
- \global\gre@dimen@interstafflinespace=\dimexpr((31500sp * \gre@factor) %
- - \gre@dimen@stafflineheight)\relax%
+ \global\gre@dimen@interstafflinespace=\dimexpr((\gre@dimen@interstafflinedistancebase + \gre@dimen@stafflinethicknessbase) * \gre@factor - \gre@dimen@stafflinethicknessbase * \gre@stafflinefactor)\relax%
\gre@trace@end%
}%
% a distance to help place glyphs when the lines are not their default thickness
-% = (stafflineheight/gre@factor - 1500sp)/2 * gre@factor
+% = gre@dimen@stafflinethicknessbase * (gre@stafflinefactor - gre@factor) / 2
\newdimen\gre@dimen@stafflinediff\relax%
\def\gre@calculate@stafflinediff{%
\gre@trace{gre@calculate@stafflinediff}%
- \global\gre@dimen@stafflinediff = \dimexpr(%
- ( ( ( \gre@dimen@stafflineheight %
- / \gre@factor)%
- - 1500sp)%
- / 2)%
- * \gre@factor)\relax%
+ \global\gre@dimen@stafflinediff = \dimexpr( \gre@dimen@stafflinethicknessbase * (\gre@stafflinefactor - \gre@factor) / 2 )\relax%
\gre@trace@end%
}%
@@ -187,7 +199,7 @@
\newif\ifgre@scale@stafflinefactor%
\gre@scale@stafflinefactortrue
-% a macro for setting the thickness of the staff lines. This changes the stafflinefactor and then adjusts the spaces that are affected by the thicker staff lines.
+% a macro for setting the thickness of the staff lines. The changes to stafflinefactor will be automatically picked up when the staff lines are redrawn
\def\grechangestafflinethickness#1{%
\xdef\gre@stafflinefactor{#1}%
\relax %
@@ -199,7 +211,7 @@
% to calculate that, we take the bottom of the third line : it is at 200 in the fonts, and it must be at grespacelinestext + grespacebeneathtext + 2*greinterstafflinespace + 2*grestafflineheight + translationheight
\def\gre@calculate@constantglyphraise{%
\gre@trace{gre@calculate@constantglyphraise}%
- \global\gre@dimen@constantglyphraise = \dimexpr((-22000 sp * \gre@factor) %
+ \global\gre@dimen@constantglyphraise = \dimexpr((\gre@dimen@glyphraisebase * \gre@factor) %
+ \gre@dimen@additionalbottomspace %
+ \gre@space@dimen@spacebeneathtext %
+ \gre@space@dimen@spacelinestext %
@@ -563,10 +575,9 @@
\hbox to \gre@dimen@temp@four{#2\hss}%
}%
-\def\gresethyphenprotrusion#1{% DEPRECATED for removal in 5.1
- \gre@deprecated{\protect\gresethyphenprotrusion{percentage}}{\protect\gresetprotrusionfactor{eolhyphen}{factor}}% DEPRECATED for removal in 5.1
- \gresetprotrusionfactor{eolhyphen}{\directlua{tex.print(string.format(string.char(37)..'g', #1 / 100.0))}}% DEPRECATED for removal in 5.1
-}% DEPRECATED for removal in 5.1
+\def\gresethyphenprotrusion#1{% OBSOLETE
+ \gre@obsolete{\protect\gresethyphenprotrusion{percentage}}{\protect\gresetprotrusionfactor{eolhyphen}{factor}}% OBSOLETE
+}% OBSOLETE
% dimen keeping the shift computed with next function
\newdimen\gre@dimen@eolshift
@@ -794,7 +805,7 @@
\fi%
\fi%
\global\advance\gre@count@temp@three by -8 %
- \global\gre@dimen@glyphraisevalue = \dimexpr(15750 sp * \gre@factor * \gre@count@temp@three)\relax %
+ \global\gre@dimen@glyphraisevalue = \dimexpr(((\gre@dimen@interstafflinedistancebase + \gre@dimen@stafflinethicknessbase) / 2 ) * \gre@factor * \gre@count@temp@three)\relax %
\ifcase#2 %
\or\or\or%3: if it is a vertical episema on a line, we shift it a bit higher, so that it's more beautiful
\ifgre@isonaline%
@@ -898,16 +909,6 @@
% the one taken into account for above lines nabc height
\newdimen\gre@dimen@additionaltopspacenabc\relax%
-% backup demensions for the previous
-\newdimen\gre@saved@dimen@additionalbottomspace\relax%
-\newdimen\gre@saved@dimen@additionaltopspace\relax%
-\newdimen\gre@saved@dimen@additionaltopspacealt\relax%
-\newdimen\gre@saved@dimen@additionaltopspacenabc\relax%
-\newdimen\gre@saved@dimen@currenttranslationheight\relax%
-\newdimen\gre@saved@dimen@textlower\relax%
-\newdimen\gre@saved@dimen@currentabovelinestextheight\relax%
-\newdimen\gre@saved@dimen@constantglyphraise\relax%
-
\newcount\gre@space@count@additionaltopspacethreshold\relax%
\gre@space@count@additionaltopspacethreshold=2
@@ -939,29 +940,40 @@
\gre@trace@end%
}%
+% some backup demensions for use around discretionaries
+\newdimen\gre@saved@prediscretionary@dimen@additionalbottomspace\relax%
+\newdimen\gre@saved@prediscretionary@dimen@additionaltopspace\relax%
+\newdimen\gre@saved@prediscretionary@dimen@additionaltopspacealt\relax%
+\newdimen\gre@saved@prediscretionary@dimen@additionaltopspacenabc\relax%
+\newdimen\gre@saved@prediscretionary@dimen@currenttranslationheight\relax%
+\newdimen\gre@saved@prediscretionary@dimen@textlower\relax%
+\newdimen\gre@saved@prediscretionary@dimen@currentabovelinestextheight\relax%
+\newdimen\gre@saved@prediscretionary@dimen@constantglyphraise\relax%
+
+
\def\gre@save@additionalspaces{%
\gre@trace{gre@save@additionalspaces}%
- \global\gre@saved@dimen@additionalbottomspace=\gre@dimen@additionalbottomspace\relax%
- \global\gre@saved@dimen@additionaltopspace=\gre@dimen@additionaltopspace\relax%
- \global\gre@saved@dimen@additionaltopspacealt=\gre@dimen@additionaltopspacealt\relax%
- \global\gre@saved@dimen@additionaltopspacenabc=\gre@dimen@additionaltopspacenabc\relax%
- \global\gre@saved@dimen@currenttranslationheight=\gre@dimen@currenttranslationheight\relax%
- \global\gre@saved@dimen@textlower=\gre@dimen@textlower\relax%
- \global\gre@saved@dimen@currentabovelinestextheight=\gre@dimen@currentabovelinestextheight\relax%
- \global\gre@saved@dimen@constantglyphraise=\gre@dimen@constantglyphraise\relax%
+ \global\gre@saved@prediscretionary@dimen@additionalbottomspace=\gre@dimen@additionalbottomspace\relax%
+ \global\gre@saved@prediscretionary@dimen@additionaltopspace=\gre@dimen@additionaltopspace\relax%
+ \global\gre@saved@prediscretionary@dimen@additionaltopspacealt=\gre@dimen@additionaltopspacealt\relax%
+ \global\gre@saved@prediscretionary@dimen@additionaltopspacenabc=\gre@dimen@additionaltopspacenabc\relax%
+ \global\gre@saved@prediscretionary@dimen@currenttranslationheight=\gre@dimen@currenttranslationheight\relax%
+ \global\gre@saved@prediscretionary@dimen@textlower=\gre@dimen@textlower\relax%
+ \global\gre@saved@prediscretionary@dimen@currentabovelinestextheight=\gre@dimen@currentabovelinestextheight\relax%
+ \global\gre@saved@prediscretionary@dimen@constantglyphraise=\gre@dimen@constantglyphraise\relax%
\gre@trace@end%
}%
\def\gre@restore@additionalspaces{%
\gre@trace{gre@restore@additionalspaces}%
- \global\gre@dimen@additionalbottomspace=\gre@saved@dimen@additionalbottomspace\relax%
- \global\gre@dimen@additionaltopspace=\gre@saved@dimen@additionaltopspace\relax%
- \global\gre@dimen@additionaltopspacealt=\gre@saved@dimen@additionaltopspacealt\relax%
- \global\gre@dimen@additionaltopspacenabc=\gre@saved@dimen@additionaltopspacenabc\relax%
- \global\gre@dimen@currenttranslationheight=\gre@saved@dimen@currenttranslationheight\relax%
- \global\gre@dimen@textlower=\gre@saved@dimen@textlower\relax%
- \global\gre@dimen@currentabovelinestextheight=\gre@saved@dimen@currentabovelinestextheight\relax%
- \global\gre@dimen@constantglyphraise=\gre@saved@dimen@constantglyphraise\relax%
+ \global\gre@dimen@additionalbottomspace=\gre@saved@prediscretionary@dimen@additionalbottomspace\relax%
+ \global\gre@dimen@additionaltopspace=\gre@saved@prediscretionary@dimen@additionaltopspace\relax%
+ \global\gre@dimen@additionaltopspacealt=\gre@saved@prediscretionary@dimen@additionaltopspacealt\relax%
+ \global\gre@dimen@additionaltopspacenabc=\gre@saved@prediscretionary@dimen@additionaltopspacenabc\relax%
+ \global\gre@dimen@currenttranslationheight=\gre@saved@prediscretionary@dimen@currenttranslationheight\relax%
+ \global\gre@dimen@textlower=\gre@saved@prediscretionary@dimen@textlower\relax%
+ \global\gre@dimen@currentabovelinestextheight=\gre@saved@prediscretionary@dimen@currentabovelinestextheight\relax%
+ \global\gre@dimen@constantglyphraise=\gre@saved@prediscretionary@dimen@constantglyphraise\relax%
\gre@trace@end%
}%
@@ -977,28 +989,32 @@
\gre@num@max{#1}{\gre@pitch@cleftop}%
\gre@count@temp@one=\numexpr(\gre@count@temp@one - \gre@pitch@adjust@top - \gre@space@count@additionaltopspacethreshold)\relax %
\ifnum\gre@count@temp@one>0\relax %
- \global\gre@dimen@additionaltopspace=\dimexpr(15750 sp * \gre@count@temp@one * \gre@factor)\relax %
+ \global\gre@dimen@additionaltopspace=\dimexpr(((\gre@dimen@interstafflinedistancebase + \gre@dimen@stafflinethicknessbase) / 2 ) * \gre@count@temp@one * \gre@factor)\relax %
\else %
\global\gre@dimen@additionaltopspace=0 sp%
\fi %
\gre@num@max{#1}{\gre@pitch@cleftop}%
\gre@count@temp@one=\numexpr(\gre@count@temp@one - \gre@pitch@adjust@top - \gre@space@count@additionaltopspacealtthreshold)\relax %
\ifnum\gre@count@temp@one>0\relax %
- \global\gre@dimen@additionaltopspacealt=\dimexpr(15750 sp * \gre@count@temp@one * \gre@factor)\relax %
+ \global\gre@dimen@additionaltopspacealt=\dimexpr(((\gre@dimen@interstafflinedistancebase + \gre@dimen@stafflinethicknessbase) / 2 ) * \gre@count@temp@one * \gre@factor)\relax %
\else %
\global\gre@dimen@additionaltopspacealt=0 sp%
\fi %
\gre@num@max{#1}{\gre@pitch@cleftop}%
\gre@count@temp@one=\numexpr(\gre@count@temp@one - \gre@pitch@adjust@top - \gre@space@count@additionaltopspacenabcthreshold)\relax %
\ifnum\gre@count@temp@one>0\relax %
- \global\gre@dimen@additionaltopspacenabc=\dimexpr(15750 sp * \gre@count@temp@one * \gre@factor)\relax %
+ \global\gre@dimen@additionaltopspacenabc=\dimexpr(((\gre@dimen@interstafflinedistancebase + \gre@dimen@stafflinethicknessbase) / 2 ) * \gre@count@temp@one * \gre@factor)\relax %
\else %
\global\gre@dimen@additionaltopspacenabc=0 sp%
\fi %
\gre@num@min{#2}{\gre@pitch@clefbottom}%
\gre@count@temp@one=\numexpr(\gre@pitch@adjust@bottom - \gre@count@temp@one)\relax %
\ifnum\gre@count@temp@one>0\relax %
- \global\gre@dimen@additionalbottomspace=\dimexpr(\gre@space@dimen@noteadditionalspacelinestext * \gre@count@temp@one)\relax %
+ \ifgre@noteadditionalspacelinestext%
+ \global\gre@dimen@additionalbottomspace=\dimexpr(\gre@space@dimen@noteadditionalspacelinestext * \gre@count@temp@one)\relax%
+ \else%
+ \global\gre@dimen@additionalbottomspace=\dimexpr(((\gre@dimen@interstafflinedistancebase + \gre@dimen@stafflinethicknessbase) / 2 ) * \gre@factor * \gre@count@temp@one)\relax%
+ \fi%
\else %
\global\gre@dimen@additionalbottomspace=0 sp%
\fi %
@@ -1028,7 +1044,7 @@
\def\gre@calculate@textaligncenter#1#2#3#4{%
\gre@trace{gre@calculate@textaligncenter{#1}{#2}{#3}{#4}}%
\ifnum#4=0\relax%
- \gre@widthof{\gre@save@fixedtextformat{#1}\gre@fixedtextformat{#2#3}}%
+ \gre@widthof{\gre@saved@syllable@fixedtextformat{#1}\gre@fixedtextformat{#2#3}}%
\else %
\gre@widthof{\gre@fixedtextformat{#1}\gre@fixednexttextformat{#2#3}}%
\fi %
@@ -1100,8 +1116,9 @@
%% 3 : the middle letters of the next syllable
%% 4 : the end letters of the next syllable
%% 5 : the type of notes alignment
-\def\gre@calculate@nextbegindifference#1#2#3#4#5{%
- \gre@trace{gre@calculate@nextbegindifference{#1}{#2}{#3}{#4}{#5}}%
+%% 6 : alteration type (see gre@calculate@nextnotesaligncenter)
+\def\gre@calculate@nextbegindifference#1#2#3#4#5#6{%
+ \gre@trace{gre@calculate@nextbegindifference{#1}{#2}{#3}{#4}{#5}{#6}}%
\ifnum\gre@lastoflinecount=1\relax %
\global\gre@skip@nextbegindifference=0pt\relax%
\else %
@@ -1112,7 +1129,7 @@
\global\gre@skip@nextbegindifference=-\gre@dimen@textaligncenter\relax%
% caution: calculate@nextnotesaligncenter needs a properly set \gre@dimen@textaligncenter
% (corresponding to the text align center of the next syllable)
- \gre@calculate@nextnotesaligncenter{#5}% idem
+ \gre@calculate@nextnotesaligncenter{#5}{#6}% idem
\global\advance\gre@skip@nextbegindifference by \the\gre@dimen@notesaligncenter\relax%
\global\gre@dimen@textaligncenter=\gre@dimen@temp@two %
\global\gre@dimen@notesaligncenter=\gre@dimen@temp@four %
@@ -1176,7 +1193,7 @@
%
%In the new algorithm the bar and the text are set independently of each other based purely on the positions of the corresponding element in the previous and next syllable
% #1 is #4 from \GreBarSyllable (1 if bar is end of word, 0 if not)
-% #2 is #7 from \GreBarSyllable (alignment type of first next glyph)
+% #2 is #7:2 from \GreBarSyllable (alteration type of first next glyph)
\def\gre@calculate@barposition#1#2{%
\gre@trace{gre@calculate@barposition{#1}{#2}}%
% we start by finding the distance between the text and notes of the previous and the next syllable (as if this syllable didn't exist, for the moment)
@@ -1384,7 +1401,7 @@
\global\gre@skip@adjustednextbegindifference=\gre@skip@nextbegindifference %
% gre@skip@alterationshift is 0 or the punctum mora shift
\global\gre@skip@alterationshift=0pt\relax %
- \ifnum#1>19\ifnum\gre@insidediscretionary=0\relax % next is a flat, we're not in a clef change
+ \ifnum#1>0\ifnum\gre@insidediscretionary=0\relax % next is a flat, we're not in a clef change
\advance\gre@skip@adjustednextbegindifference by -\gre@space@dimen@alterationadjustmentbar %
\global\gre@skip@alterationshift=\gre@space@dimen@alterationadjustmentbar\relax %
\gre@debugmsg{barspacing}{adjustment for alteration: \gre@space@dimen@alterationadjustmentbar}%
@@ -1548,7 +1565,7 @@
%% This macro creates one dim (#1), setting its value to #2 and sets whether it should scale when the \gre@factor changes (#3, scalable or fixed). Checks that #1 can accept the kind of distance given in #2.
%% Note: the distances created by this function are stored as strings, not skip or dimension registers. This allows the user to specify a distance in em or ex units even though the font parameters may not be the same at the time the distance is specified and the time the distance is used.
\newif\ifgre@checklength%
-\def\grecreatedim#1#2#3{%
+\def\gre@createdim#1#2#3{%
\csname newif\expandafter\endcsname\csname ifgre@scale@#1\endcsname%
\IfStrEqCase{#3}{%
{scalable}%
@@ -1558,7 +1575,7 @@
{inherited}%
{\grescaledim{#1}{false}}%
}[% all other cases
- \gre@error{Unrecognized option "#3" for \protect\grecreatedim\MessageBreak Possible options are: 'scalable' and 'fixed'}%
+ \gre@error{Unrecognized option "#3" for \protect\gre@createdim\MessageBreak Possible options are: 'scalable' and 'fixed' and 'inherited'}%
]%
\gre@dimension{#1}{#2}{#3}%
}%
@@ -1599,31 +1616,16 @@
% all other cases
}[\gre@error{Unrecognized option "#3" for \protect\grechangedim\MessageBreak Possible options are: 'scalable', 'fixed', and 'inherited'}]%
\gre@dimension{#1}{#2}{#3}%
+ %If we are calling grechangedim from a space configuration file (greconffactor is not 0)
+ % and the space configuration file is designed for a \gre@factor other than the current
+ % one, then we need to rescale the distance being changed.
+ \ifnum\greconffactor=0\else%
+ \ifnum\the\gre@factor=\greconffactor\else%
+ \gre@changeonedimenfactor{#1}{\greconffactor}{\gre@factor} %
+ \fi%
+ \fi%
\else%
- \IfStrEqCase{#1}{% OBSOLETE
- {spacearoundsmallbars}% OBSOLETE
- {% OBSOLETE
- \gre@obsolete{spacearoundsmallbars}{bar@virgula or bar@minima}% OBSOLETE
- }% OBSOLETE
- {spacearoundminor}% OBSOLETE
- {% OBSOLETE
- \gre@obsolete{spacearoundminor}{bar@minor}% OBSOLETE
- }% OBSOLETE
- {spacearoundmaior}% OBSOLETE
- {% OBSOLETE
- \gre@obsolete{spacearoundmaior}{bar@maior}% OBSOLETE
- }% OBSOLETE
- {spacearoundfinalis}% OBSOLETE
- {% OBSOLETE
- \gre@obsolete{spacearoundfinalis}{bar@finalis}% OBSOLETE
- }% OBSOLETE
- {spacebeforefinalfinalis}% OBSOLETE
- {% OBSOLETE
- \gre@obsolete{spacebeforfinalfinalis}{bar@finalfinalis}% OBSOLETE
- }% OBSOLETE
- }[% OBSOLETE
- \gre@error{#1 is not a recognized distance.}% keep this line
- ]% OBSOLETE
+ \gre@error{#1 is not a recognized distance.}%
\fi%
}%
@@ -1802,13 +1804,24 @@
\newcount\greconffactor%
\def\greloadspaceconf#1{%
- \input gsp-#1.tex\relax %
- \ifnum\greconffactor=0\relax%
- \gre@error{gsp-#1.tex does not have an assigned staff size.\MessageBreak Please edit it to define \protect\greconffactor}%
- \fi %
- \ifnum\the\gre@factor=\greconffactor\else %If the space configuration file is designed for a \gre@factor other than the current one, then we need to rescale the distances.
- \gre@changedimenfactor{\greconffactor}{\gre@factor} %
- \fi%
+ \IfStrEq{#1}{default}{% load default spacings
+ \ifx\@onlypreamble\@notprerr%
+ \gre@debugmsg{preamble}{Not in preamble}%
+ \makeatletter%
+ \else%
+ \gre@debugmsg{preamble}{In preamble}%
+ \fi%
+ \input gregoriotex-gsp-default.tex%
+ \gre@changedimenfactor{\greconffactor}{\gre@factor}%
+ \ifx\@onlypreamble\@notprerr%
+ \makeatother%
+ \fi%
+ }{% load a custom spacing
+ \input gsp-#1.tex\relax %
+ \ifnum\greconffactor=0\relax%
+ \gre@error{gsp-#1.tex does not have an assigned staff size.\MessageBreak Please edit it to define \protect\greconffactor}%
+ \fi %
+ }
\greconffactor=0%
\relax %
}%
@@ -1896,11 +1909,13 @@
% Math
\gre@rubberpermit{#1}%
\ifgre@rubber%
+ \gre@debugmsg{gsp}{scaling a rubber}%
% if we have a rubber allowed length we create a temporary skip
\let\gre@scaledist\gre@skip@temp@one%
\edef\gre@convert{\csname gre@space@skip@#1\endcsname}%
\gre@scaledist=\glueexpr(\gre@convert * \number#3 / \number#2)\relax %
\else%
+ \gre@debugmsg{gsp}{scaling a fixed distance}%
% otherwise we create a temporary dimen
\let\gre@scaledist\gre@dimen@temp@one%
\edef\gre@convert{\csname gre@space@dimen@#1\endcsname}%
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-syllable.tex b/support/gregoriotex/tex/luatex/gregoriotex-syllable.tex
index 137a6f901f..afff36cd64 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-syllable.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-syllable.tex
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -19,7 +19,7 @@
% this file contains definitions of the glyphs and the syllables
-\gre@declarefileversion{gregoriotex-syllable.tex}{5.2.1}% GREGORIO_VERSION
+\gre@declarefileversion{gregoriotex-syllable.tex}{6.0.0-beta1}% GREGORIO_VERSION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% macros for the typesetting of the different glyphs
@@ -180,77 +180,54 @@
% this function is quite simple, it just sets \gre@box@temp@width with a box of the good width, watch the next function for the complete thing
% we define the different alignments possible, of course they depend on the font
% the first 10 (0-9) possible values are the same as in glyph
-%% 0: one-note glyph or more than two notes glyph except porrectus : here we must put the aligncenter in the middle of the first note
-%% 1: two notes glyph (podatus is considered as a one-note glyph) : here we put the aligncenter in the middle of the glyph
-%% 2: porrectus : has a special align center
-%% 3: initio-debilis : same as 1 but the first note is much smaller
-%% 4: case of a glyph starting with a quilisma
-%% 5: case of a glyph starting with an oriscus
-%% 6: case of a punctum inclinatum
-%% 7: case of a stropha
-%% 8: flexus with an ambitus of one
-%% 9: flexus deminutus
-%% 10: virgula
-%% 11: divisio minima
-%% 12: divisio minor
-%% 13: divisio maior
-%% 14: dominican bar
-%% 15 : divisio finalis
-%% 16 : no note
+% see the cases below
% there is a tricky here : if notesaligncenter is not 0, it means that there is a flat before, so we simply add notes aligncenter
% #2 is 0 if we are in the context of current syllable, 1 if we are in the context of next syllable
\def\gre@calculate@simplenotesaligncenter#1#2{%
\gre@trace{gre@calculate@simplenotesaligncenter{#1}{#2}}%
- \ifcase#1%
- %case of punctum
+ \ifcase#1% 0: punctum
+ % one-note glyph or more than two notes glyph except porrectus : here
+ % we must put the aligncenter in the middle of the first note
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPPunctum}%
- \or%
- %case of flexus
+ \or% 1: flexus
+ % two notes glyph (podatus is considered as a one-note glyph) : here
+ % we put the aligncenter in the middle of the glyph
\gre@handleclivisspecialalignment{\gre@font@music\GreCPPesQuadratumLongqueueThreeNothing}{\gre@font@music\GreCPPunctum}{#2}%
- \or%
- %case of porrectus (we consider it to have the same alignment as punctum)
+ \or% 2: porrectus
+ % we consider it to have the same alignment as punctum
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPPunctum}%
- \or%
- %case of a initio debilis
+ \or% 3: initio debilis
+ % same as 1 but the first note is much smaller
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPPunctumDeminutus}%
- \or %
- %case of a quilisma
+ \or% 4: glyph starting with a quilisma
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPQuilisma}%
- \or %
- %case of an oriscus
+ \or% 5: glyph starting with an oriscus
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPAscendensOriscus}%
- \or %
- %case of a punctum inclinatum
+ \or% 6: punctum inclinatum
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPDescendensPunctumInclinatum}%
- \or %
- %case of a stropha
+ \or% 7: stropha
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPStropha}%
- \or %
- % case of flexus with ambitus of one
+ \or% 8: flexus with ambitus of one
\gre@handleclivisspecialalignment{\gre@font@music\GreCPPesQuadratumLongqueueOneNothing}{\gre@font@music\GreCPPunctum}{#2}%
- \or %
- % case of flexus deminutus
+ \or% 9: flexus deminutus
\gre@handleclivisspecialalignment{\gre@font@music\GreCPFlexusTwoDeminutus}{\gre@font@music\GreCPPunctum}{#2}%
- \or %
- % case of virgula
+ \or% 10: virgula
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@virgula}%
- \or %
- % case of divisio minima
+ \or% 11: divisio minima
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@divisiominima}%
- \or %
- % case of divisio minor
+ \or% 12: divisio minor
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@divisiominor}%
- \or %
- % case of divisio maior
+ \or% 13: divisio maior
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@divisiomaior}%
- \or %
- % case of dominican bar
+ \or% 14: dominican bar
\global\setbox\gre@box@temp@width=\hbox{\gre@font@music\GreCPDivisioDominican}%
- \or %
- % case of divisiofinalis
+ \or% 15: parenthesized virgula
+ \global\setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@virgulaparen}%
+ \or% 16: parenthesized divisio minima
+ \global\setbox\gre@box@temp@width=\hbox{\gre@font@music\gre@char@bar@divisiominimaparen}%
+ \or% 17: divisio finalis
\global\setbox\gre@box@temp@width=\hbox{\gre@fontchar@divisiofinalis}%
- \or %
- % case of no note
+ \or% 18: no note
\ifgre@newbarspacing%
\global\setbox\gre@box@temp@width=\hbox{}%
\else%
@@ -326,36 +303,33 @@
\gre@trace@end%
}%
-% this is the function that we call when we try to determine the next aligncenter of the notes. In this case we call this function with normal arguments if there is no flat nor natural ; we call it with argument + 20 if there is a flat and argument + 40 if there is a natural, +60 with a sharp
-\def\gre@calculate@nextnotesaligncenter#1{%
- \gre@trace{gre@calculate@nextnotesaligncenter{#1}}%
- \ifnum#1<20\relax %
- \gre@calculate@simplenotesaligncenter{#1}{1}%
- \gre@dimen@temp@five=\dimexpr(\wd\gre@box@temp@width / 2)\relax %
- \global\gre@dimen@notesaligncenter=\gre@dimen@temp@five %
- \else %\ifnum#1<20
- \gre@count@temp@three=#1 %
- \ifnum#1<40\relax%
- \advance\gre@count@temp@three by -20\relax %
- \gre@calculate@simplenotesaligncenter{\gre@count@temp@three}{1}%
- \gre@dimen@temp@five=\dimexpr(\wd\gre@box@temp@width / 2)\relax %
- \setbox\gre@box@temp@width=\hbox{\gre@fontchar@flat}%
- \else%\ifnum#1<40
- \ifnum#1<60\relax%
- \advance\gre@count@temp@three by -40\relax %
- \gre@calculate@simplenotesaligncenter{\gre@count@temp@three}{1}%
- \gre@dimen@temp@five=\dimexpr(\wd\gre@box@temp@width / 2)\relax %
- \setbox\gre@box@temp@width=\hbox{\gre@fontchar@natural}%
- \else%\ifnum#1<60
- \advance\gre@count@temp@three by -60\relax %
- \gre@calculate@simplenotesaligncenter{\gre@count@temp@three}{1}%
- \gre@dimen@temp@five=\dimexpr(\wd\gre@box@temp@width / 2)\relax %
- \setbox\gre@box@temp@width=\hbox{\gre@fontchar@sharp}%
- \fi%
- \fi %
+% this is the function that we call when we try to determine the next aligncenter of the notes.
+% #1 is the note type
+% #2 is the alteration style : 0 = none, 1 = flat, 2 = natural, 3 = sharp,
+% 4 = parenthesized flat, 5 = parenthesized natural,
+% 6 = parenthesized flat
+\def\gre@calculate@nextnotesaligncenter#1#2{%
+ \gre@trace{gre@calculate@nextnotesaligncenter{#1}{#2}}%
+ \gre@calculate@simplenotesaligncenter{#1}{1}%
+ \gre@dimen@temp@five=\dimexpr(\wd\gre@box@temp@width / 2)\relax %
+ \ifcase#2\relax% 0 - none
+ \or % 1 - flat
+ \setbox\gre@box@temp@width=\hbox{\gre@fontchar@flat}%
+ \or % 2 - natural
+ \setbox\gre@box@temp@width=\hbox{\gre@fontchar@natural}%
+ \or % 3 - sharp
+ \setbox\gre@box@temp@width=\hbox{\gre@fontchar@sharp}%
+ \or % 4 - parenthesized flat
+ \setbox\gre@box@temp@width=\hbox{\gre@fontchar@flatparen}%
+ \or % 5 - parenthesized natural
+ \setbox\gre@box@temp@width=\hbox{\gre@fontchar@naturalparen}%
+ \or % 6 - parenthesized sharp
+ \setbox\gre@box@temp@width=\hbox{\gre@fontchar@sharpparen}%
+ \fi %
+ \ifnum#2>0\relax %
\advance\gre@dimen@temp@five by \dimexpr(\wd\gre@box@temp@width+\gre@space@dimen@alterationspace)\relax %
- \global\gre@dimen@notesaligncenter=\gre@dimen@temp@five %
\fi %
+ \global\gre@dimen@notesaligncenter=\gre@dimen@temp@five %
\relax %
\gre@trace@end%
}%
@@ -397,8 +371,8 @@
\global\gre@count@lastglyphiscavum=0\relax %
\global\gre@firstglyphtrue%
\global\gre@boxingtrue%
- \let\ifgre@lastendswithmorasave\ifgre@lastendswithmora%
- \xdef\gre@savedlastoflinecount{\number\gre@lastoflinecount\relax }%
+ \let\ifgre@saved@prenotes@lastendswithmora\ifgre@lastendswithmora%
+ \xdef\gre@saved@prenotes@lastoflinecount{\number\gre@lastoflinecount\relax }%
\ifgre@shownotes%
\setbox\gre@box@syllablenotes=\hbox{#1}%
\else%
@@ -406,7 +380,6 @@
\fi%
\gre@debugmsg{spacing}{Width of notes: \the\wd\gre@box@syllablenotes}%
\global\gre@boxingfalse%
- \global\gre@lastoflinecount=\gre@savedlastoflinecount\relax %
\global\gre@firstglyphtrue%
% now gre@lastendswithmora is true if this syllable ends with a
% punctum mora, but we still want to keep gre@lastendswithmora if we
@@ -419,7 +392,8 @@
\else %
\gre@thisendswithmorafalse %
\fi %
- \let\ifgre@lastendswithmora\ifgre@lastendswithmorasave %
+ \let\ifgre@lastendswithmora\ifgre@saved@prenotes@lastendswithmora%
+ \global\gre@lastoflinecount=\gre@saved@prenotes@lastoflinecount\relax %
\global\gre@count@lastglyphiscavum=0\relax %
\global\gre@skip@bar@lastskip=0pt\relax %
\global\gre@endofscorefalse %
@@ -773,18 +747,18 @@
\gre@trace@end%
}%
-\let\gre@save@endsyllablepart\gre@nothing\relax %
-\let\gre@save@fixedtextformat\gre@textnormal\relax %
-\let\gre@save@pointandclick\gre@nothing\relax %
+\let\gre@saved@syllable@endsyllablepart\gre@nothing\relax %
+\let\gre@saved@syllable@fixedtextformat\gre@textnormal\relax %
+\let\gre@saved@syllable@pointandclick\gre@nothing\relax %
\def\gre@push@endsyllable#1{%
\gre@trace{gre@push@endsyllable{#1}}%
- \let\gre@save@endsyllablepart\gre@nothing\relax %
- \let\gre@save@fixedtextformat\gre@textnormal\relax %
- \let\gre@save@pointandclick\gre@nothing\relax %
+ \let\gre@saved@syllable@endsyllablepart\gre@nothing\relax %
+ \let\gre@saved@syllable@fixedtextformat\gre@textnormal\relax %
+ \let\gre@saved@syllable@pointandclick\gre@nothing\relax %
\gre@if@rewritesyllable{%
- \let\gre@save@endsyllablepart\gre@endsyllablepart\relax %
- \let\gre@save@fixedtextformat\gre@fixedtextformat\relax %
- \xdef\gre@save@pointandclick{#1}%
+ \let\gre@saved@syllable@endsyllablepart\gre@endsyllablepart\relax %
+ \let\gre@saved@syllable@fixedtextformat\gre@fixedtextformat\relax %
+ \xdef\gre@saved@syllable@pointandclick{#1}%
}{}%
\relax %
\gre@trace@end%
@@ -792,15 +766,15 @@
\def\gre@emit@syllabletext#1{%
\gre@trace{gre@emit@syllabletext{#1}}%
- \ifx\gre@save@endsyllablepart\gre@nothing %
+ \ifx\gre@saved@syllable@endsyllablepart\gre@nothing %
\gre@fixedtextformat{#1}%
\else %
- \ifx\gre@save@fixedtextformat\gre@fixedtextformat %
+ \ifx\gre@saved@syllable@fixedtextformat\gre@fixedtextformat %
\gre@debugmsg{syllablerewriting}{merging format when prepending previous last syllable part}%
- \gre@fixedtextformat{\gre@pointandclick{\gre@save@endsyllablepart}{\gre@save@pointandclick}#1}%
+ \gre@fixedtextformat{\gre@pointandclick{\gre@saved@syllable@endsyllablepart}{\gre@saved@syllable@pointandclick}#1}%
\else %
\gre@debugmsg{syllablerewriting}{prepending previous last syllable part}%
- \gre@save@fixedtextformat{\gre@pointandclick{\gre@save@endsyllablepart}{\gre@save@pointandclick}}%
+ \gre@saved@syllable@fixedtextformat{\gre@pointandclick{\gre@saved@syllable@endsyllablepart}{\gre@saved@syllable@pointandclick}}%
\gre@fixedtextformat{#1}%
\fi %
\fi %
@@ -833,6 +807,9 @@
\gre@textclearedtrue%
}%
+\def\gre@arg@oftwo@first#1#2{#1}%
+\def\gre@arg@oftwo@second#1#2{#2}%
+
%% general macro : it will typeset the syllable : arguments are :
% #1 : macro setting the letters of this syllable
% #2 : reserved (unused)
@@ -843,7 +820,7 @@
% the three next parameters are to put an hyphen if necessary, they can be empty for end of words
% #5 : macros setting next syllable letters of the next syllable
% #6 : the line:char:column for a textedit link
-% #7 : alignment type of the first next glyph
+% #7 : alignment type of the first next glyph (this is a pair: alignment type and alteration type)
% #8 : other macros (translation, double text, etc.) that don't fit in the limitation of the number of arguments
%% with a special option for #7 : if it is a bar, we don't put a space at the end
%% at the end we wall \greendofword or \gre@endofsyllable with #7, to reduce the space in case of a flat or natural
@@ -878,7 +855,7 @@
#1%
\gre@firstglyphtrue%
\gre@dimen@bolextra = 0pt\relax%
- \gre@calculate@textaligncenter{\gre@save@endsyllablepart}{\gre@firstsyllablepart}{\gre@middlesyllablepart}{0}% we first get the width between the alignment point and the end of the syllable
+ \gre@calculate@textaligncenter{\gre@saved@syllable@endsyllablepart}{\gre@firstsyllablepart}{\gre@middlesyllablepart}{0}% we first get the width between the alignment point and the end of the syllable
\gre@syllablenotes{#9}% we put the notes in a box, so that we have the width of it
% now we calculate the begin difference, that is to say \gre@dimen@notesaligncenter - \gre@dimen@textaligncenter
\gre@dimen@begindifference=\dimexpr(\gre@dimen@notesaligncenter - \gre@dimen@textaligncenter)\relax %
@@ -927,7 +904,7 @@
% by default, gre@attr@dash will be 2
\gre@attr@dash=2\relax %
#5%
- \gre@calculate@nextbegindifference{\gre@emit@endsyllablepartfornextsyllable}{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart}}{\gre@evaluatenextsyllable{\gre@nextmiddlesyllablepart}}{\gre@evaluatenextsyllable{\gre@nextendsyllablepart}}{#7}%
+ \gre@calculate@nextbegindifference{\gre@emit@endsyllablepartfornextsyllable}{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart}}{\gre@evaluatenextsyllable{\gre@nextmiddlesyllablepart}}{\gre@evaluatenextsyllable{\gre@nextendsyllablepart}}#7%
\gre@unsetfixednexttextformat %
\ifgre@showlyrics%
\setbox\gre@box@syllabletext=\hbox{%
@@ -947,13 +924,14 @@
\gre@calculate@enddifference{\wd\gre@box@syllablenotes}{\wd\gre@box@syllabletext}{\gre@dimen@textaligncenter}{\gre@dimen@notesaligncenter}{1}%
% gre@count@temp@one holds 0 if next is a not bar, 1 if it is
\gre@count@temp@one=0%
- \ifnum#7>9\relax %
- \ifnum#7<20\relax %
+ \ifnum\gre@arg@oftwo@second#7=0\relax %
+ \ifnum\gre@arg@oftwo@first#7>9\relax %
\gre@count@temp@one=1\relax %
- \else %
- \gre@count@temp@one=2\relax %
\fi %
+ \else %
+ \gre@count@temp@one=2\relax %
\fi %
+ \gre@debugmsg{spacing}{ gre@count@temp@one = \the\gre@count@temp@one}%
\gre@calculate@syllablefinalskip{#4}{\gre@count@temp@one}%
\ifcase#4 %
% we enter here if the end of word is 0, so we must determine if we need to type a dash here
@@ -1013,7 +991,7 @@
\fi%
\fi %
% recomputing end difference and final skip with the final hyphen
- \gre@calculate@nextbegindifference{\gre@emit@endsyllablepartfornextsyllable}{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart}}{\gre@evaluatenextsyllable{\gre@nextmiddlesyllablepart}}{\gre@evaluatenextsyllable{\gre@nextendsyllablepart}}{#7}%
+ \gre@calculate@nextbegindifference{\gre@emit@endsyllablepartfornextsyllable}{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart}}{\gre@evaluatenextsyllable{\gre@nextmiddlesyllablepart}}{\gre@evaluatenextsyllable{\gre@nextendsyllablepart}}#7%
\gre@calculate@enddifference{\wd\gre@box@syllablenotes}{\wd\gre@box@syllabletext}{\gre@dimen@textaligncenter}{\gre@dimen@notesaligncenter}{0}%
\gre@calculate@syllablefinalskip{#4}{\gre@count@temp@one}%
\else %
@@ -1084,7 +1062,7 @@
\GreNoBreak %
\fi%
% we call end of syllable
- \gre@syllable@end{#7}{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart\gre@nextmiddlesyllablepart\gre@nextendsyllablepart}}{#4}%
+ \gre@syllable@end#7{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart\gre@nextmiddlesyllablepart\gre@nextendsyllablepart}}{#4}%
\gre@push@endsyllable{#6}\relax %
\global\gre@dimen@notesaligncenter=0pt\relax% very important, see flat and natural
\gre@unsetfixedtextformat %
@@ -1123,15 +1101,16 @@
%% @desc Macro to make a few checks and call the right macros between
%% \endbeforebar, \endofword, \endofsyllable
-%% @arg#1 next syllable type (#7 of \GreSyllable)
-%% @arg#2 next syllable text
-%% @arg#3 end of word or not (#4 of \GreSyllable)
-\def\gre@syllable@end#1#2#3{%
- \gre@trace{gre@syllable@end{#1}{#2}{#3}}%
+%% @arg#1 next syllable alignment type (#7:1 of \GreSyllable)
+%% @arg#2 next syllable alteration type (#7:2 of \GreSyllable)
+%% @arg#3 next syllable text
+%% @arg#4 end of word or not (#4 of \GreSyllable)
+\def\gre@syllable@end#1#2#3#4{%
+ \gre@trace{gre@syllable@end{#1}{#2}{#3}{#4}}%
% gre@count@temp@one holds 0 if next is a not bar, 1 if it is
\gre@count@temp@one=0%
- \ifnum#1>9\relax %
- \ifnum#1<20\relax %
+ \ifnum#2=0\relax %
+ \ifnum#1>9\relax %
\gre@count@temp@one=1%
\fi %
\fi %
@@ -1141,7 +1120,7 @@
\gre@endofsyllable{0}{1}{1}%
\else %
% otherwise we call it with 1 only if there is no letters after (we can see it with nextbegindifference)
- \setbox\gre@box@temp@width=\hbox{#2}%
+ \setbox\gre@box@temp@width=\hbox{#3}%
\ifdim\wd\gre@box@temp@width=0pt\relax%
\gre@endofsyllable{0}{1}{1}%
\else %
@@ -1152,8 +1131,8 @@
\ifnum\gre@lastoflinecount=1\relax %
\global\gre@lastoflinecount=2\relax %
\fi %
- \gre@debugmsg{syllablespacing}{ calling endofsyllable with #3}%
- \gre@endofsyllable{1}{#3}{0}%
+ \gre@debugmsg{syllablespacing}{ calling endofsyllable with #4}%
+ \gre@endofsyllable{1}{#4}{0}%
\fi %
\gre@trace@end%
}
@@ -1243,6 +1222,7 @@
%a macro to typeset a syllable with only a bar inside
\def\GreBarSyllable#1#2#3#4#5#6#7#8#9{%
+ \gre@trace{GreBarSyllable{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}%
\gre@textclearedfalse%
\gre@debugmsg{general}{}%
\gre@debugmsg{general}{New bar syllable}%
@@ -1255,7 +1235,7 @@
% there are two different cases that have almost nothing in common : the case where there is something written under the bar, and the case where there is nothing.
% first of all we need to calculate previousenddifference, begindifference, enddifference and nextbegindifference.
#1%
- \gre@calculate@textaligncenter{\gre@save@endsyllablepart}{\gre@firstsyllablepart}{\gre@middlesyllablepart}{0}%
+ \gre@calculate@textaligncenter{\gre@saved@syllable@endsyllablepart}{\gre@firstsyllablepart}{\gre@middlesyllablepart}{0}%
\ifgre@showlyrics%
\setbox\gre@box@syllabletext=\hbox{%
\IfSubStr{\gre@debug}{,barspacing,}%
@@ -1272,7 +1252,7 @@
\setbox\gre@box@syllabletext=\box\voidb@x%
\fi%
\gre@debugmsg{barspacing}{Width of bar text: \the\wd\gre@box@syllabletext}%
- \global\let\gre@newlinecommonsaved\gre@newlinecommon %
+ \global\let\gre@saved@prelinedelay@newlinecommon\gre@newlinecommon %
\global\let\gre@newlinecommon\gre@newlinecommondelayed %
\xdef\gre@newlinearg{-1}%
\gre@syllablenotes{#9}%
@@ -1281,7 +1261,7 @@
\gre@dimen@begindifference=\dimexpr(\gre@dimen@notesaligncenter - \gre@dimen@textaligncenter)\relax%
\gre@calculate@enddifference{\wd\gre@box@syllablenotes}{\wd\gre@box@syllabletext}{\gre@dimen@textaligncenter}{\gre@dimen@notesaligncenter}{1}%
#5%
- \gre@calculate@nextbegindifference{\gre@emit@endsyllablepartfornextsyllable}{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart}}{\gre@evaluatenextsyllable{\gre@nextmiddlesyllablepart}}{\gre@evaluatenextsyllable{\gre@nextendsyllablepart}}{#7}%
+ \gre@calculate@nextbegindifference{\gre@emit@endsyllablepartfornextsyllable}{\gre@evaluatenextsyllable{\gre@nextfirstsyllablepart}}{\gre@evaluatenextsyllable{\gre@nextmiddlesyllablepart}}{\gre@evaluatenextsyllable{\gre@nextendsyllablepart}}#7%
\gre@unsetfixednexttextformat %
\gre@debugmsg{barspacing}{previousenddifference: \the\gre@dimen@previousenddifference}%
\gre@debugmsg{barspacing}{begindifference: \the\gre@dimen@begindifference}%
@@ -1291,7 +1271,7 @@
%
% New bar spacing algorithm
%
- \gre@calculate@barposition{#4}{#7}%
+ \gre@calculate@barposition{#4}{\gre@arg@oftwo@second#7}%
\ifgre@textcleared%
\gre@clearsyllable{bar}%
\fi%
@@ -1335,7 +1315,7 @@
{\raise 12pt\hbox to 0pt{\rule{0.4pt}{12pt}\hss}}%
{}% do nothing if not debugging
\fi%
- \global\let\gre@newlinecommon\gre@newlinecommonsaved %
+ \global\let\gre@newlinecommon\gre@saved@prelinedelay@newlinecommon %
\GreNoBreak%
% get into position to place the penalty
\ifdim\gre@dimen@enddifference < 0pt\relax%
@@ -1418,7 +1398,7 @@
\gre@clearsyllable{bar}%
\fi%
% then we check if there is something to write
- \global\let\gre@newlinecommon\gre@newlinecommonsaved %
+ \global\let\gre@newlinecommon\gre@saved@prelinedelay@newlinecommon %
\gre@debugmsg{ifdim}{ wd(gre@box@syllabletext) = 0pt}%
\ifdim\wd\gre@box@syllabletext = 0 pt\relax %
% the most difficult case : when there is nothing to write
@@ -1544,6 +1524,7 @@
\gre@localrightbox{}%
\fi\fi %
\relax%
+ \gre@trace@end%
}
\newif\ifgre@newbarspacing%
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-symbols.lua b/support/gregoriotex/tex/luatex/gregoriotex-symbols.lua
index 8e9f0a3194..19f915f105 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-symbols.lua
+++ b/support/gregoriotex/tex/luatex/gregoriotex-symbols.lua
@@ -1,6 +1,6 @@
--GregorioTeX Symbols Lua support file.
--
---Copyright (C) 2016-2019 The Gregorio Project (see CONTRIBUTORS.md)
+--Copyright (C) 2016-2021 The Gregorio Project (see CONTRIBUTORS.md)
--
--This file is part of Gregorio.
--
@@ -19,7 +19,7 @@
-- this file contains lua functions to support signs used by GregorioTeX.
--- GREGORIO_VERSION 5.2.1
+-- GREGORIO_VERSION 6.0.0-beta1
local err = gregoriotex.module.err
local warn = gregoriotex.module.warn
diff --git a/support/gregoriotex/tex/luatex/gregoriotex-symbols.tex b/support/gregoriotex/tex/luatex/gregoriotex-symbols.tex
index 61478295e0..d99afede5d 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex-symbols.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex-symbols.tex
@@ -1,6 +1,6 @@
%GregorioTeX file.
%
-% Copyright (C) 2007-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2007-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -22,7 +22,7 @@
\ifcsname gregoriotex@symbols@loaded\endcsname\endinput\fi%
\def\gregoriotex@symbols@loaded{}%
-\gre@declarefileversion{gregoriotex-symbols.tex}{5.2.1}% GREGORIO_VERSION
+\gre@declarefileversion{gregoriotex-symbols.tex}{6.0.0-beta1}% GREGORIO_VERSION
\RequireLuaModule{gregoriotex}%
diff --git a/support/gregoriotex/tex/luatex/gregoriotex.lua b/support/gregoriotex/tex/luatex/gregoriotex.lua
index f3ad902b5a..e16f193552 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex.lua
+++ b/support/gregoriotex/tex/luatex/gregoriotex.lua
@@ -1,6 +1,6 @@
--GregorioTeX Lua file.
--
---Copyright (C) 2008-2019 The Gregorio Project (see CONTRIBUTORS.md)
+--Copyright (C) 2008-2021 The Gregorio Project (see CONTRIBUTORS.md)
--
--This file is part of Gregorio.
--
@@ -24,16 +24,16 @@ local hpack, traverse, traverse_id, has_attribute, count, remove, insert_after,
gregoriotex = gregoriotex or {}
local gregoriotex = gregoriotex
-local internalversion = '5.2.1' -- GREGORIO_VERSION (comment used by VersionManager.py)
+local internalversion = '6.0.0-beta1' -- GREGORIO_VERSION (comment used by VersionManager.py)
local err, warn, info, log = luatexbase.provides_module({
name = "gregoriotex",
- version = '5.2.1', -- GREGORIO_VERSION
+ version = '6.0.0-beta1', -- GREGORIO_VERSION
greinternalversion = internalversion,
- date = "2019/04/06", -- GREGORIO_DATE_LTX
+ date = "2021/02/23", -- GREGORIO_DATE_LTX
description = "GregorioTeX module.",
author = "The Gregorio Project (see CONTRIBUTORS.md)",
- copyright = "2008-2019 - The Gregorio Project",
+ copyright = "2008-2021 - The Gregorio Project",
license = "GPLv3+",
})
@@ -146,7 +146,7 @@ local function gregorio_exe()
local exe_version
-- first look for one with the exact version
- real_gregorio_exe = 'gregorio-5_2_1' -- FILENAME_VERSION
+ real_gregorio_exe = 'gregorio-6_0_0-beta1' -- FILENAME_VERSION
local cmd = string.format([[%s -o "%%s" "%s"]], real_gregorio_exe,
test_snippet_filename)
exe_version = get_prog_output(cmd, '*line')
@@ -769,11 +769,10 @@ local function clean_old_gtex_files(file_withdir)
string.find(os.getenv("PATH"),";",1,true)
if onwindows then
sep = "\\"
- dirpath = string.match(file_withdir, "(.*)"..sep)
else
sep = "/"
- dirpath = string.match(file_withdir, "(.*)"..sep)
end
+ dirpath = string.match(file_withdir, "(.*)"..sep)
if dirpath then -- dirpath is nil if current directory
filename = "^"..file_withdir:match(".*/".."(.*)").."%-%d+_%d+_%d+[-%a%d]*%.gtex$"
for a in lfs.dir(dirpath) do
@@ -854,6 +853,37 @@ local function compile_gabc(gabc_file, gtex_file, glog_file, allow_deprecated)
end
end
+local function locate_file(filename)
+ local result
+ if not gre_input_path then
+ gre_input_path = {""}
+ end
+ for i,k in pairs(gre_input_path) do
+ log("Looking in %s", k)
+ if lfs.isfile(k .. filename) then
+ result = k..filename
+ if result == filename then
+ log("Found %s directly", filename)
+ else
+ log("Found %s in %s", filename, k)
+ end
+ break
+ end
+ end
+ if not result then
+ result = kpse.find_file(filename)
+ if result then
+ log("Found %s at\n%s using kpsewhich", filename, result)
+ if string.match(result," ") then
+ warn("%s contains a space in the path\nTeX will likely complain about this", filename)
+ end
+ else
+ log("Cannot find %s", filename)
+ end
+ end
+ return result
+end
+
local function include_score(input_file, force_gabccompile, allow_deprecated)
if string.match(input_file, "[#%%]") then
err("GABC filename contains invalid character(s): # %%\n"
@@ -872,15 +902,17 @@ local function include_score(input_file, force_gabccompile, allow_deprecated)
end
local cleaned_filename = input_name:gsub("[%s%+%&%*%?$@:;!\"\'`]", "-")
- local gabc_file = string.format("%s%s.gabc", file_dir, input_name)
- local gtex_file = string.format("%s%s-%s.gtex", file_dir, cleaned_filename,
+ local gabc_filename = string.format("%s%s.gabc", file_dir, input_name)
+ local gabc_file = locate_file(gabc_filename)
+ local gtex_filename = string.format("%s%s-%s.gtex", file_dir, cleaned_filename,
internalversion:gsub("%.", "_"))
+ local gtex_file = locate_file(gtex_filename)
local glog_file = string.format("%s%s-%s.glog", file_dir, cleaned_filename,
internalversion:gsub("%.", "_"))
- if not lfs.isfile(gtex_file) then
+ if not gtex_file then
clean_old_gtex_files(file_dir..cleaned_filename)
- log("The file %s does not exist. Searching for a gabc file", gtex_file)
- if lfs.isfile(gabc_file) then
+ log("The file %s does not exist. Will use gabc file", gtex_filename)
+ if gabc_file then
local gabc = io.open(gabc_file, 'r')
if gabc == nil then
err("\n Unable to open %s", gabc_file)
@@ -888,14 +920,18 @@ local function include_score(input_file, force_gabccompile, allow_deprecated)
else
gabc:close()
end
- compile_gabc(gabc_file, gtex_file, glog_file, allow_deprecated)
- tex.print(string.format([[\input %s\relax]], gtex_file))
+ compile_gabc(gabc_file, gtex_filename, glog_file, allow_deprecated)
+ tex.print(string.format([[\input %s\relax]], gtex_filename))
return
else
- err("The file %s does not exist.", gabc_file)
+ err("The file %s does not exist", gabc_filename)
return
end
end
+ if not gabc_file then
+ tex.print(string.format([[\input %s\relax]], gtex_file))
+ return
+ end
local gtex_timestamp = lfs.attributes(gtex_file).modification
local gabc_timestamp = lfs.attributes(gabc_file).modification
-- open the gabc file for reading so that LuaTeX records input from it
@@ -930,7 +966,7 @@ local function direct_gabc(gabc, header, allow_deprecated)
local f = io.open(snippet_filename, 'w')
-- trims spaces on both ends (trim6 from http://lua-users.org/wiki/StringTrim)
gabc = gabc:match('^()%s*$') and '' or gabc:match('^%s*(.*%S)')
- f:write('name:direct-gabc;\n'..(header or '')..'\n%%\n'..gabc:gsub('\\par ', '\n'))
+ f:write('name:direct-gabc;\n'..(header or '')..'\n%%\n'..gabc:gsub('\\par', '\n'))
f:close()
local cmd = string.format([[%s -W %s-o "%%s" -l "%s" "%s"]], gregorio_exe(),
deprecated, snippet_logname, snippet_filename)
@@ -959,8 +995,10 @@ local function direct_gabc(gabc, header, allow_deprecated)
end
glog:close()
end
- os.remove(snippet_filename)
- os.remove(snippet_logname)
+ if not (debug_types_activated['snippet'] or debug_types_activated['all']) then
+ os.remove(snippet_filename)
+ os.remove(snippet_logname)
+ end
end
local function get_gregoriotexluaversion()
diff --git a/support/gregoriotex/tex/luatex/gregoriotex.tex b/support/gregoriotex/tex/luatex/gregoriotex.tex
index a00003eba2..e50be69975 100644
--- a/support/gregoriotex/tex/luatex/gregoriotex.tex
+++ b/support/gregoriotex/tex/luatex/gregoriotex.tex
@@ -1,6 +1,6 @@
% GregorioTeX boostrap file for Plain TeX
%
-% Copyright (C) 2015-2019 The Gregorio Project (see CONTRIBUTORS.md)
+% Copyright (C) 2015-2021 The Gregorio Project (see CONTRIBUTORS.md)
%
% This file is part of Gregorio.
%
@@ -21,13 +21,14 @@
% This file needs to be marked with the version number. For now I've done this with the following comment, but we should check to see if PlainTeX has something similar to the version declaration of LaTeX and use that if it does.
-% [2019/04/06 v5.2.1 GregorioTeX system.]% PARSE_VERSION_DATE_LTX
+% [2021/02/23 v6.0.0-beta1 GregorioTeX system.]% PARSE_VERSION_DATE_LTX
+\input iftex.sty
+\RequireLuaTeX%
\edef\greoldcatcode{\the\catcode`@}
\catcode`\@=11
-\input ifluatex.sty%
\input luatexbase.sty%
\input luamplib.sty%
\input luaotfload.sty%
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 2789b8848d..e344b434da 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1614460473
+date=1614633262
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=7b4a400cfa34fd4a3c2a204650bfc315
+lstdigest=f5994e0e0ce41ab66ac64dd03f1f57f6
numpkg=4055
relstate=next
-version=7728
+version=7730
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: jr/6EsLNXbI3CfHQgtexuYv6Wkw6ZF3oityTyZ7J7M7ot5ZNnKpPYoOPw/MinVYDIi7z16PCYa9Q6kM3BCCiUnq61rzVoTmMOzBUnUBkSX+h+jJQ7p26Lg4Yg6fo/Bfce5AHUV3rRgcN0SPd1FOuZZyXYPjPpjAp272kOgdsWRgUvlhGZ7UHauY7dOof0m9vGshiuTu4w3J1rRTjnxXk8JutGjyFvID/KiawMudL8YCrMZfcrc/jyIVcR6lggAnkeEwhRtzNViX5pdq2xWL9SI7k6XKLUd8T3g5bEN/V3D2sFzTDh8Ae/ITDmBl43nkpLIrnqIvBsl3ca5ukxhiIRQ==
+;;;; signature/miktex: mG82pUJ5FrnZyA8pSn6I1ofYT3830fH0seXTasRy9rzVdabq5TqvSQUMO6nUlJGBigy06nOWKTc9rpCAafv5BbbDG9j5JlsF5sd0aGXpEpR9wNLDZVmGXAsqwPZS6jKvlls3Ky+ZXEj6y97rZToC5tOuJLYW5MbE/8TVc5/0mlOY17Zz6fjdQC3K+CMPyb2t2gVzIPh4CGtqCqaDKPbNRy6bBiErFikBEk0CUm1A32toB5YHVXR+kcKqSBVYT5TcGNVqjjOvcZ3qWXc8YGH0agh96qDYoYpaWIBb/5h6V1O6x5lpBhzDnoJW7mybYgc3vZf9DTsNsE/2FBGnWgT0mg==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 1dc75c1c63..4f095c91f3 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1614460290
+date=1614633074
lastupd=acrotex asmeconf biblatex-ext circuitikz easybook elpres embrac eq-pin2corr eq-save isodoc mcf2graph newcomputermodern spath3 tasks tikzmark xint asymptote knuth-lib miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9
-lstdigest=45665b6c6f088e4626768bf38d58c8d4
+lstdigest=23c4848f56b70f23d30bff06a4b89091
numpkg=4055
relstate=stable
-version=7728
+version=7730
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: m5bSdDWTHWTBJ+3KyJy+/giK5EqxgAghQPI435VI8S/QkD0BBquO/h5XR/NjjIpJVnk45TXn0asXOjLDzTCeEZvm1dprQ0u9PhxNcl8BRy/d6KKFvpsmDawNC87y1le+4Yd9AFXosrTn+JIkxq/mDhmhGQNc/wglprNBSdhLDmybP5m+IJjEVRago+W+jmFxciZJ7/hTz1BtGBwukQtMmbUHL10xmuhzXeQvwJZsAviEzQ7grZyz/8E0LR3F/HiO2TZAFPw3A4uJqlA692QaTKMkmRsDn0Y4ilO6j441brVyRdBfEYxbUyn8QuyF70V6bDqzH1c9jj8p6C1ED6DI7A==
+;;;; signature/miktex: F47syoTZyv5IhxwulUsH9/SUmtVvEbQcuxUNUdCiCiCYTc4+BUvm5aiydBY4sR/OGmHakWelAAhRPbaw7+UE7rqB/YY71kLbJrPQ+P6f50bujIVvmBeUWvMyDeC/hnQxNBNEWsLOtrmUVhDHghfkOt35Bj+VOfRBipfXBMLBPFRQ4o7KFgr0F8m3/Wk65WnviPdOBmzu1EI/BNK80cM3W2/JbnRkE5Uy9m2YkOnAjiCvJ3o/eSJwZrkOjde6uchkMFIpGMJSwW/AhiSaZ8A7qoCt4edRK6irVh1VxoEMlhdiVQwp5Vti9C88Ob1UhETXEVfZdRbAFODf/dr8ULFBfQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index d2442e536e..d099d8cd44 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,21 @@
W32TeX (x86 & x64) ChangeLog
+[2021/02/28]
+(01) context.tar.xz
+ ConTeXt version: 2021.02.27 19:27.
+(02) biblatex-biber.tar.xz
+ Update biblatex-ext.
+(03) latex-dev.tar.xz
+ Add latex-firstaid-dev. Update latex-tools-dev.
+(04) ltxpkgs.tar.xz
+ Update chemfig, nameauth and schemata.
+(05) pstricks.tar.xz
+ Update pst-optexp.
+(06) web2c-lib.tar.xz
+ Update babel/german.
+(07) win64/context-w64.tar.xz
+ Update mtxrun.lua.
+
[2021/02/27]
(01) aleph-w32.tar.xz
Update format files.
diff --git a/timestamp b/timestamp
index 9e5358fc4e..84a7524125 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:
-2021-03-01-02-02
+2021-03-02-02-02
diff --git a/web/c_cpp/cweb/Makefile b/web/c_cpp/cweb/Makefile
index 1367d00892..0c20d83c10 100644
--- a/web/c_cpp/cweb/Makefile
+++ b/web/c_cpp/cweb/Makefile
@@ -1,6 +1,6 @@
# This file is part of CWEB.
# It is distributed WITHOUT ANY WARRANTY, express or implied.
-# Version 3.64 --- February 2002
+# Version 4.2 --- February 2021
# Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -63,8 +63,10 @@ RM= /bin/rm
CP= /bin/cp
# uncomment the second line if you use pdftex to bypass .dvi files
+# uncomment the third line if you use xetex to bypass .dvi files
PDFTEX = dvipdfm
#PDFTEX = pdftex
+#PDFTEX = xetex
########## You shouldn't have to change anything after this point #######
@@ -105,6 +107,7 @@ ALL = common.w ctangle.w cweave.w prod.w \
case "$(PDFTEX)" in \
dvipdfm ) tex "\let\pdf+ \input $*"; dvipdfm $* ;; \
pdftex ) pdftex $* ;; \
+ xetex ) xetex $* ;; \
esac
all: ctangle cweave
@@ -125,7 +128,7 @@ SAVEctangle.c:
SAVEcommon.c:
$(CP) common.c SAVEcommon.c
-common.c: common.w $(CCHANGES)
+common.c: common.w $(CCHANGES) common.h
$(CTANGLE) common $(CCHANGES)
common.o: common.c
@@ -134,13 +137,13 @@ common.o: common.c
ctangle: ctangle.o common.o
$(CC) $(LINKFLAGS) -o ctangle ctangle.o common.o
-ctangle.c: ctangle.w $(TCHANGES)
+ctangle.c: ctangle.w $(TCHANGES) common.h
$(CTANGLE) ctangle $(TCHANGES)
cweave: cweave.o common.o
$(CC) $(LINKFLAGS) -o cweave cweave.o common.o
-cweave.c: cweave.w $(WCHANGES)
+cweave.c: cweave.w $(WCHANGES) common.h prod.w
$(CTANGLE) cweave $(WCHANGES)
doc: $(SOURCES:.w=.dvi)
diff --git a/web/c_cpp/cweb/README b/web/c_cpp/cweb/README
index 6429dabfa8..081dc5aa0b 100644
--- a/web/c_cpp/cweb/README
+++ b/web/c_cpp/cweb/README
@@ -1,7 +1,7 @@
% This file is part of CWEB.
% The CWEB programs by Silvio Levy are based on programs by D. E. Knuth.
% They are distributed WITHOUT ANY WARRANTY, express or implied.
-% This README file last updated January 2016 by Don Knuth
+% This README file last updated February 2021 by Andreas Scherer
% Copyright (C) 1987,1990,1993,2000,2016 Silvio Levy and Donald E. Knuth
@@ -18,9 +18,13 @@
% there will verify and forward bug reports.
%
% DEK takes no responsibility for the changefiles; they should be
-% maintained independently. His job is to correct errors in
-% ctangle.w, cweave.w, prod.w, common.w, cwebmac.tex, cwebman.tex,
-% and in the files of examples/*.w, nothing more.
+% maintained independently. He even transferred the job to correct errors
+% in ctangle.w, cweave.w, prod.w, common.w, cwebmac.tex, cwebman.tex,
+% and in the files of examples/*.w to Andreas Scherer in 2021.
+% Further significant developments, including versions that neither
+% Don Knuth nor Silvio Levy themselves do maintain, are ongoing.
+% All of the really current news about CWEB is, in fact, now to be found
+% on the CWEB development page https://github.com/ascherer/cweb.
This directory contains the following files:
@@ -30,6 +34,7 @@ comm-amiga.ch
comm-bs.ch
comm-mac.ch
comm-man.ch
+comm-os2.ch
comm-pc.ch
comm-ql.ch
comm-vms.ch
@@ -68,7 +73,7 @@ The files common.c and ctangle.c are used for bootstrapping.
The file cweb.1 is a manual page.
The file cweb.el is suggested for GNU-Emacs users.
The file c++lib.w is for C++ users (say `@i c++lib.w' at beginning of program).
-The files *-man.ch are used if you want to make the full 239-page CWEB manual.
+The files *-man.ch are used if you want to make the full 240-page CWEB manual.
The files *-bs.ch are used instead of *-pc.ch if you are doing BIG programs.
You can use makefile.bs to make CWEB with *-bs.ch.
The files *-ql.ch are for QDOS/SMSQ systems; see readme.ql for further info.
@@ -102,9 +107,3 @@ Note that change files for VMS, AMIGA, MAC, and PCs are provided. When you
are first bootstrapping to a new system, you may need to edit common.c and
ctangle.c by hand, but the vast majority of the change-file changes are
minor refinements that are not necessary for a rudimentary ctangle.
-
------------------------------------------
-These archival sources are maintained only to the extent of fixing
-significant bugs that were unintended at the time of writing.
-A multi-decade ongoing project to improve and extend CWEB can be found at
- https://github.com/ascherer/cwebbin
diff --git a/web/c_cpp/cweb/comm-amiga.ch b/web/c_cpp/cweb/comm-amiga.ch
index 57e65d1ccd..f17c2d333b 100644
--- a/web/c_cpp/cweb/comm-amiga.ch
+++ b/web/c_cpp/cweb/comm-amiga.ch
@@ -4,14 +4,14 @@ This is the change file for CWEB's COMMON on the Amiga
With Lattice C 5.1, use compilation switches -b0 -r0, and ignore the
compiler warnings. With SAS 6.0, use compilation switches Code=far Data=far.
-@x section 69
+@x section 75
An omitted change file argument means that |"/dev/null"| should be used,
@y
An omitted change file argument means that |"nil:"| should be used,
@z
-@x section 70
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
+@x section 76
+ strcpy(change_file_name,"/dev/null");
@y
- if (found_change<=0) strcpy(change_file_name,"nil:");
+ strcpy(change_file_name,"nil:");
@z
diff --git a/web/c_cpp/cweb/comm-bs.ch b/web/c_cpp/cweb/comm-bs.ch
index 26f79b160d..b01b86799d 100644
--- a/web/c_cpp/cweb/comm-bs.ch
+++ b/web/c_cpp/cweb/comm-bs.ch
@@ -12,55 +12,68 @@ by using "huge" pointers.
(This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94;
revised 24 Jul 94.)
+(Update attempt by Andreas Scherer, 31 Jan 2021. Good luck!)
-@x Section 23.
- cur_file_name[l]='/'; /* \UNIX/ pathname separator */
-@y
- cur_file_name[l]='/'; /* A valid {\mc MSDOS} pathname separator */
-@z
+@x Section 6.
+ for section names */
-@x Section 27.
-@d max_names 4000 /* number of identifiers, strings, section names;
- must be less than 10240 */
-
-@<Definitions that...@>=
+@<Common code...@>=
typedef struct name_info {
char *byte_start; /* beginning of the name in |byte_mem| */
- @<More elements of |name_info| structure@>@;
+ struct name_info *link;
+ union {
+ struct name_info *Rlink; /* right link in binary search tree for section
+ names */
+ char Ilk; /* used by identifiers in \.{CWEAVE} only */
+ } dummy;
+ void *equiv_or_xref; /* info corresponding to names */
} name_info; /* contains information about an identifier or section name */
-typedef name_info *name_pointer; /* pointer into array of |name_info|s */
-char byte_mem[max_bytes]; /* characters of names */
-char *byte_mem_end = byte_mem+max_bytes-1; /* end of |byte_mem| */
-name_info name_dir[max_names]; /* information about names */
-name_pointer name_dir_end = name_dir+max_names-1; /* end of |name_dir| */
+typedef name_info *name_pointer; /* pointer into array of \&{name\_info}s */
+typedef name_pointer *hash_pointer;
+extern char byte_mem[]; /* characters of names */
+extern char *byte_mem_end; /* end of |byte_mem| */
@y
-@d max_names 4000 /* number of identifiers, strings, section names;
- must be less than 10240 */
+ for section names */
@f huge extern
-@<Definitions that...@>=
+@<Common code...@>=
typedef struct name_info {
char huge* byte_start; /* beginning of the name in |byte_mem| */
- @<More elements of |name_info| structure@>@;
+ struct name_info *link;
+ union {
+ struct name_info *Rlink; /* right link in binary search tree for section
+ names */
+ char Ilk; /* used by identifiers in \.{CWEAVE} only */
+ } dummy;
+ union {
+ void huge* equiv_member;
+ void huge* xref_member;
+ } ptr_union; /* info corresponding to names */
} name_info; /* contains information about an identifier or section name */
-typedef name_info *name_pointer; /* pointer into array of |name_info|s */
-char huge byte_mem[max_bytes]; /* characters of names */
-char huge* byte_mem_end; /* end of |byte_mem| */
-name_info name_dir[max_names]; /* information about names */
-name_pointer name_dir_end = name_dir+max_names-1;
+typedef name_info *name_pointer; /* pointer into array of \&{name\_info}s */
+typedef name_pointer *hash_pointer;
+extern char huge byte_mem[]; /* characters of names */
+extern char huge* byte_mem_end; /* end of |byte_mem| */
+@z
+
+
+@x Section 39.
+ cur_file_name[l]='/'; /* \UNIX/ pathname separator */
+@y
+ cur_file_name[l]='/'; /* A valid {\mc MSDOS} pathname separator */
@z
-@x Section 29.
+@x Section 44.
char *byte_ptr; /* first unused position in |byte_mem| */
@y
char huge* byte_ptr; /* first unused position in |byte_mem| */
@z
-@x Section 30.
+@x Section 45.
@ @<Init...@>=
name_dir->byte_start=byte_ptr=byte_mem; /* position zero in both arrays */
name_ptr=name_dir+1; /* |name_dir[0]| will be used only for error recovery */
@@ -74,156 +87,137 @@ byte_mem_end = byte_mem+max_bytes-1;
@z
-@x Section 42.
+@x Section 52.
void
-print_section_name(p)
-name_pointer p;
+print_section_name(
+name_pointer p)
{
char *ss, *s = first_chunk(p);
@y
void
-print_section_name(p)
-name_pointer p;
+print_section_name(
+name_pointer p)
{
char huge* ss, huge* s = first_chunk(p);
@z
-@x Section 43.
+@x Section 53.
void
-sprint_section_name(dest,p)
- char*dest;
- name_pointer p;
+sprint_section_name(
+ char *dest,
+ name_pointer p)
{
char *ss, *s = first_chunk(p);
@y
void
-sprint_section_name(dest,p)
- char*dest;
- name_pointer p;
+sprint_section_name(
+ char huge* dest,
+ name_pointer p)
{
char huge* ss, huge* s = first_chunk(p);
@z
-@x Section 44.
+@x Section 54.
void
-print_prefix_name(p)
-name_pointer p;
+print_prefix_name(
+name_pointer p)
{
char *s = first_chunk(p);
@y
void
-print_prefix_name(p)
-name_pointer p;
+print_prefix_name(
+name_pointer p)
{
char huge* s = first_chunk(p);
@z
-@x Section 47.
-name_pointer
-add_section_name(par,c,first,last,ispref) /* install a new node in the tree */
-name_pointer par; /* parent of new node */
-int c; /* right or left? */
-char *first; /* first character of section name */
-char *last; /* last character of section name, plus one */
-int ispref; /* are we adding a prefix or a full name? */
+@x Section 57.
+static name_pointer
+add_section_name(@t\1\1@> /* install a new node in the tree */
+name_pointer par, /* parent of new node */
+int c, /* right or left? */
+char *first, /* first character of section name */
+char *last, /* last character of section name, plus one */
+int ispref@t\2\2@>) /* are we adding a prefix or a full name? */
{
name_pointer p=name_ptr; /* new node */
char *s=first_chunk(p);
@y
-name_pointer
-add_section_name(par,c,first,last,ispref) /* install a new node in the tree */
-name_pointer par; /* parent of new node */
-int c; /* right or left? */
-char *first; /* first character of section name */
-char *last; /* last character of section name, plus one */
-int ispref; /* are we adding a prefix or a full name? */
+static name_pointer
+add_section_name(@t\1\1@> /* install a new node in the tree */
+name_pointer par, /* parent of new node */
+int c, /* right or left? */
+char huge* first, /* first character of section name */
+char huge* last, /* last character of section name, plus one */
+int ispref@t\2\2@>) /* are we adding a prefix or a full name? */
{
name_pointer p=name_ptr; /* new node */
char huge* s=first_chunk(p);
@z
-@x Section 48.
-void
-extend_section_name(p,first,last,ispref)
-name_pointer p; /* name to be extended */
-char *first; /* beginning of extension text */
-char *last; /* one beyond end of extension text */
-int ispref; /* are we adding a prefix or a full name? */
+@x Section 58.
+static void
+extend_section_name(@t\1\1@>
+name_pointer p, /* name to be extended */
+char *first, /* beginning of extension text */
+char *last, /* one beyond end of extension text */
+int ispref@t\2\2@>) /* are we adding a prefix or a full name? */
{
char *s;
@y
-void
-extend_section_name(p,first,last,ispref)
-name_pointer p; /* name to be extended */
-char *first; /* beginning of extension text */
-char *last; /* one beyond end of extension text */
-int ispref; /* are we adding a prefix or a full name? */
+static void
+extend_section_name(@t\1\1@>
+name_pointer p, /* name to be extended */
+char huge* first, /* beginning of extension text */
+char huge* last, /* one beyond end of extension text */
+int ispref@t\2\2@>) /* are we adding a prefix or a full name? */
{
char huge* s;
@z
-@x Section 54.
-int section_name_cmp(pfirst,len,r)
-char **pfirst; /* pointer to beginning of comparison string */
-int len; /* length of string */
-name_pointer r; /* section name being compared */
+@x Section 64.
+static int section_name_cmp(@t\1\1@>
+char **pfirst, /* pointer to beginning of comparison string */
+int len, /* length of string */
+name_pointer r@t\2\2@>) /* section name being compared */
{
char *first=*pfirst; /* beginning of comparison string */
name_pointer q=r+1; /* access to subsequent chunks */
char *ss, *s=first_chunk(r);
@y
-int section_name_cmp(pfirst,len,r)
-char **pfirst; /* pointer to beginning of comparison string */
-int len; /* length of string */
-name_pointer r; /* section name being compared */
+static int section_name_cmp(@t\1\1@>
+char huge** pfirst, /* pointer to beginning of comparison string */
+int len, /* length of string */
+name_pointer r@t\2\2@>) /* section name being compared */
{
- char *first=*pfirst; /* beginning of comparison string */
+ char huge* first=*pfirst; /* beginning of comparison string */
name_pointer q=r+1; /* access to subsequent chunks */
char huge* ss, huge* s=first_chunk(r);
@z
-@x Section 55.
-source files, respectively; here we just declare a common field
-|equiv_or_xref| as a pointer to a |char|.
-
-@<More elements of |name...@>=
-char *equiv_or_xref; /* info corresponding to names */
+@x Section 75.
+An omitted change file argument means that |"/dev/null"| should be used,
@y
-source files, respectively. Here we just declare a common field
-|ptr_union| as a union of pointers to |char|, which happen to have
-different addressing attributes.
-
-@<More elements of |name...@>=
-union {
- char *equiv_member;
- char huge* xref_member;
-} ptr_union; /* info corresponding to names */
+An omitted change file argument means that |"NUL"| should be used,
@z
-@x Section 69.
-An omitted change file argument means that |"/dev/null"| should be used,
+@x Section 76.
+ strcpy(change_file_name,"/dev/null");
@y
-An omitted change file argument means that |"NUL"| should be used,
+ strcpy(change_file_name,"NUL");
@z
-@x Section 70.
+@x Section 76.
else if (*s=='/') dot_pos=NULL,name_pos=++s;
@y
else if (*s == ':' || *s == '\\' || *s == '/')
dot_pos=NULL,name_pos=++s;
@z
-
-
-@x Section 70.
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
-@y
- if (found_change<=0) strcpy(change_file_name,"NUL");
-@z
diff --git a/web/c_cpp/cweb/comm-mac.ch b/web/c_cpp/cweb/comm-mac.ch
index b9bd408655..aa3a77fed4 100644
--- a/web/c_cpp/cweb/comm-mac.ch
+++ b/web/c_cpp/cweb/comm-mac.ch
@@ -4,23 +4,26 @@ No changes to CTANGLE or CWEAVE are needed.
(Contributed 13 Oct 2000 by AndPio@aol.com; slightly edited by Don Knuth)
@x in limbo, change the title page document to specify Mac version
- \centerline{(Version 3.64)}
+ \centerline{(Version 4.2)}
@y
- \centerline{(Version 3.64 for MacOS)}
+ \centerline{(Version 4.2 for MacOS)}
@z
-@x section 9: Make input_ln accept \n, \r, \n\r, or \r\n as line endings
+@x sections 23/24: Make input_ln accept \n, \r, \n\r, or \r\n as line endings
@ In the unlikely event that your standard I/O library does not
support |feof|, |getc|, and |ungetc| you may have to change things here.
@^system dependencies@>
-@c
-int input_ln(fp) /* copies a line into |buffer| or returns 0 */
-FILE *fp; /* what file to read from */
+@<Predecl...@>=
+static boolean input_ln(FILE *);@/
+
+@ @c
+static boolean input_ln(@t\1\1@> /* copies a line into |buffer| or returns |false| */
+FILE *fp@t\2\2@>) /* what file to read from */
{
register int c=EOF; /* character read; initialized so some compilers won't complain */
register char *k; /* where next character goes */
- if (feof(fp)) return(0); /* we have hit end-of-file */
+ if (feof(fp)) return false; /* we have hit end-of-file */
limit = k = buffer; /* beginning of buffer */
while (k<=buffer_end && (c=getc(fp)) != EOF && c!='\n')
if ((*(k++) = c) != ' ') limit = k;
@@ -28,10 +31,10 @@ FILE *fp; /* what file to read from */
if ((c=getc(fp))!=EOF && c!='\n') {
ungetc(c,fp); loc=buffer; err_print("! Input line too long");
@.Input line too long@>
- }
- if (c==EOF && limit==buffer) return(0); /* there was nothing after
+ }
+ if (c==EOF && limit==buffer) return false; /* there was nothing after
the last newline */
- return(1);
+ return true;
}
@y
@ In the unlikely event that your standard I/O library does not
@@ -42,27 +45,30 @@ line endings, so that \.{CWEB} will works with ASCII files stored in
\UNIX/, {\mc DOS} or {\mc MAC} format.
@^system dependencies@>
-@c
-int input_ln(fp) /* copies a line into |buffer| or returns 0 */
-FILE *fp; /* what file to read from */
+@<Predecl...@>=
+static boolean input_ln(FILE *);@/
+
+@ @c
+static boolean input_ln(@t\1\1@> /* copies a line into |buffer| or returns |false| */
+FILE *fp@t\2\2@>) /* what file to read from */
{
register int c=EOF; /* character read; initialized so some compilers won't complain */
register char *k; /* where next character goes */
- if (feof(fp)) return(0); /* we have hit end-of-file */
+ if (feof(fp)) return false; /* we have hit end-of-file */
limit = k = buffer; /* beginning of buffer */
- while (1) {
+ while (true) {
c = getc(fp);
- if (c==EOF) return (limit!=buffer); /* 0, if there was nothing after
+ if (c==EOF) return limit!=buffer; /* |false|, if there was nothing after
the last newline */
else if (c=='\n' || c=='\r') { /* we have hit end-of-line */
int d = getc(fp);
if (c+d!='\n'+'\r') /* no combination |"\n\r"| or |"\r\n"| */
ungetc(d,fp);
- return (1);
+ return true;
}
else if (k>buffer_end) {
ungetc(c,fp); loc=buffer; err_print("! Input line too long");
- return (1);
+ return true;
@.Input line too long@>
}
else
@@ -71,17 +77,17 @@ FILE *fp; /* what file to read from */
}
@z
-@x section 12, simply return if no change file was specified
+@x section 28, simply return if no change file was specified
change_limit=change_buffer; /* this value is used if the change file ends */
- @<Skip over comment lines in the change file; |return| if end of file@>;
+ @<Skip over comment lines in the change file; |return| if end of file@>@;
@y
change_limit=change_buffer; /* this value is used if the change file ends */
if (change_file_name[0] == '\0') /* no change file specified */
return; /* so we have reached the end of that file */
- @<Skip over comment lines in the change file; |return| if end of file@>;
+ @<Skip over comment lines in the change file; |return| if end of file@>@;
@z
-@x section 19, don't try to open a change file if none was specified
+@x section 36, don't try to open a change file if none was specified
if ((change_file=fopen(change_file_name,"r"))==NULL)
fatal("! Cannot open change file ", change_file_name);
@y
@@ -91,7 +97,7 @@ else if ((change_file=fopen(change_file_name,"r"))==NULL)
fatal("! Cannot open change file ", change_file_name);
@z
-@x section 22, declare colon as Mac's path separator
+@x section 39, declare colon as Mac's path separator
(Colon-separated paths are not supported.)
The remainder of the \.{@@i} line after the file name is ignored.
@@ -104,38 +110,37 @@ The remainder of the \.{@@i} line after the file name is ignored.
@d PATH_SEP ':' /* MacOS pathname separator */
@^system dependencies@>
@z
-
-@x section 23, use the path separator constant
+@x section 39, use the path separator constant
cur_file_name[l]='/'; /* \UNIX/ pathname separator */
@y
cur_file_name[l]=PATH_SEP; /* pathname separator */
@z
-@x section 69, explain the convention for omitted change files
+@x section 75, explain the convention for omitted change files
An omitted change file argument means that |"/dev/null"| should be used,
@y
An omitted change file argument means that no change file should be used,
@z
-@x section 70, use the Metrowerks |ccommand| to access command lines
+@x section 76, make change file name empty when it is unspecified
+ strcpy(change_file_name,"/dev/null");
+@y
+ change_file_name[0]='\0'; /* empty string */
+@z
+@x section 76, use the Metrowerks |ccommand| to access command lines
while (--argc > 0) {
@y
argc = ccommand (&argv); /* use Mac interface to command line */
@^system dependencies@>
while (--argc > 0) {
@z
-@x section 70, use the path separator constant
+@x section 76, use the path separator constant
else if (*s=='/') dot_pos=NULL,name_pos=++s;
@y
else if (*s==PATH_SEP) dot_pos=NULL,name_pos=++s;
@z
-@x section 70, make change file name empty when it is unspecified
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
-@y
- if (found_change<=0) change_file_name[0]='\0'; /* empty string */
-@z
-@x section 82, insert an extra module before the index
+@x section 85, insert an extra module before the index
@** Index.
@y by putting the new module here, we preserve all the previous section numbers
@ We assume an interface to \CEE/ command-line emulation as supplied by
diff --git a/web/c_cpp/cweb/comm-os2.ch b/web/c_cpp/cweb/comm-os2.ch
index 5e20a6706c..2b85f8b1f6 100644
--- a/web/c_cpp/cweb/comm-os2.ch
+++ b/web/c_cpp/cweb/comm-os2.ch
@@ -4,21 +4,21 @@ This is the change file for CWEB's COMMON under OS/2
These changes tested with WATCOM C v10.0a.
No changes to CTANGLE or CWEAVE are needed with OS/2.
-@x section 69
+@x section 75
An omitted change file argument means that |"/dev/null"| should be used,
@y
An omitted change file argument means that |"NUL"| should be used,
@z
-@x section 70 (this change copied from comm-pc.ch)
- else if (*s=='/') dot_pos=NULL,name_pos=++s;
+@x section 76
+ strcpy(change_file_name,"/dev/null");
@y
- else if (*s == ':' || *s == '\\' || *s == '/')
- dot_pos=NULL,name_pos=++s;
+ strcpy(change_file_name,"NUL");
@z
-@x section 70
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
+@x section 76 (this change copied from comm-pc.ch)
+ else if (*s=='/') dot_pos=NULL,name_pos=++s;
@y
- if (found_change<=0) strcpy(change_file_name,"NUL");
+ else if (*s == ':' || *s == '\\' || *s == '/')
+ dot_pos=NULL,name_pos=++s;
@z
diff --git a/web/c_cpp/cweb/comm-pc.ch b/web/c_cpp/cweb/comm-pc.ch
index e69bafb524..5f7d9c42ff 100644
--- a/web/c_cpp/cweb/comm-pc.ch
+++ b/web/c_cpp/cweb/comm-pc.ch
@@ -4,30 +4,30 @@ This is the change file for CWEB's COMMON under DOS
Changes necessary for compiling with Borland C/C++
Use compilation switches -mc -w-pro -Ff=5000
-Note: The change to section 27 is not necessary if using a compiler
+Note: The change to section 16 is not necessary if using a compiler
that allows >64K arrays.
-@x section 27
-@d max_bytes 90000 /* the number of bytes in identifiers,
+@x section 16
+@d max_bytes 1000000 /* the number of bytes in identifiers,
@y
@d max_bytes (unsigned)60000 /* the number of bytes in identifiers,
@z
-@x section 69
+@x section 75
An omitted change file argument means that |"/dev/null"| should be used,
@y
An omitted change file argument means that |"NUL"| should be used,
@z
-@x section 70 (this change copied from comm-bs.ch, July 94)
- else if (*s=='/') dot_pos=NULL,name_pos=++s;
+@x section 76
+ strcpy(change_file_name,"/dev/null");
@y
- else if (*s == ':' || *s == '\\' || *s == '/')
- dot_pos=NULL,name_pos=++s;
+ strcpy(change_file_name,"NUL");
@z
-@x section 70
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
+@x section 76 (this change copied from comm-bs.ch, July 94)
+ else if (*s=='/') dot_pos=NULL,name_pos=++s;
@y
- if (found_change<=0) strcpy(change_file_name,"NUL");
+ else if (*s == ':' || *s == '\\' || *s == '/')
+ dot_pos=NULL,name_pos=++s;
@z
diff --git a/web/c_cpp/cweb/comm-ql.ch b/web/c_cpp/cweb/comm-ql.ch
index 8859e215b2..c03b9185cb 100644
--- a/web/c_cpp/cweb/comm-ql.ch
+++ b/web/c_cpp/cweb/comm-ql.ch
@@ -10,61 +10,39 @@ ex <dev_>cc;'-v -h -c -=500000 -DCWEBINPUTS=flp2_ common_c'
@x
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (Version 3.64)}
+\def\title{Common code for CTANGLE and CWEAVE (Version 4.2)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 3.64)}
+ \centerline{(Version 4.2)}
\vfill}
\def\botofcontents{\vfill
\noindent
@y
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (QL Version 3.64)}
+\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.2)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 3.64)}
+ \centerline{(Version 4.2)}
\vfill}
\def\botofcontents{\vfill
\noindent
@z
-@x
-The line number of each open file is also kept for error reporting and
-for the benefit of \.{CTANGLE}.
-
-@f line x /* make |line| an unreserved word */
-@d max_include_depth 10 /* maximum number of source files open
- simultaneously, not counting the change file */
-@d max_file_name_length 60
-@d cur_file file[include_depth] /* current file */
-@d cur_file_name file_name[include_depth] /* current file name */
-@d cur_line line[include_depth] /* number of current line in current file */
-@d web_file file[0] /* main source file */
-@d web_file_name file_name[0] /* main source file name */
-@y
-The line number of each open file is also kept for error reporting and
-for the benefit of \.{CTANGLE}.
For use on QDOS/SMSQ systems the variable |max_file_name_length| is shortened
to 42 characters, i.e. 5 characters for the device name, 36 characters
for the file name plus one character as string terminator. (Note that
(current) QDOS/SMSQ file systems have a limitation of 36 characters as
maximum length for a file name.
-
-@f line x /* make |line| an unreserved word */
-@d max_include_depth 10 /* maximum number of source files open
- simultaneously, not counting the change file */
+@x
+@d max_file_name_length 1024
+@y
@d max_file_name_length 42
-@d cur_file file[include_depth] /* current file */
-@d cur_file_name file_name[include_depth] /* current file name */
-@d cur_line line[include_depth] /* number of current line in current file */
-@d web_file file[0] /* main source file */
-@d web_file_name file_name[0] /* main source file name */
@z
@@ -90,99 +68,6 @@ when no changes are desired.
@^system dependencies@>
If there's a third file name, it will be the output file.
-
-@<Pred...@>=
-void scan_args();
-
-@ @c
-void
-scan_args()
-{
- char *dot_pos; /* position of |'.'| in the argument */
- char *name_pos; /* file name beginning, sans directory */
- register char *s; /* register for scanning strings */
- boolean found_web=0,found_change=0,found_out=0;
- /* have these names have been seen? */
- boolean flag_change;
-
- while (--argc > 0) {
- if ((**(++argv)=='-'||**argv=='+')&&*(*argv+1)) @<Handle flag argument@>@;
- else {
- s=name_pos=*argv;@+dot_pos=NULL;
- while (*s) {
- if (*s=='.') dot_pos=s++;
- else if (*s=='/') dot_pos=NULL,name_pos=++s;
- else s++;
- }
- if (!found_web) @<Make
- |web_file_name|, |tex_file_name| and |C_file_name|@>@;
- else if (!found_change) @<Make |change_file_name| from |fname|@>@;
- else if (!found_out) @<Override |tex_file_name| and |C_file_name|@>@;
- else @<Print usage error message and quit@>;
- }
- }
- if (!found_web) @<Print usage error message and quit@>;
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
-}
-
-@ We use all of |*argv| for the |web_file_name| if there is a |'.'| in it,
-otherwise we add |".w"|. If this file can't be opened, we prepare an
-|alt_web_file_name| by adding |"web"| after the dot.
-The other file names come from adding other things
-after the dot. We must check that there is enough room in
-|web_file_name| and the other arrays for the argument.
-
-@<Make |web_file_name|...@>=
-{
- if (s-*argv > max_file_name_length-5)
- @<Complain about argument length@>;
- if (dot_pos==NULL)
- sprintf(web_file_name,"%s.w",*argv);
- else {
- strcpy(web_file_name,*argv);
- *dot_pos=0; /* string now ends where the dot was */
- }
- sprintf(alt_web_file_name,"%s.web",*argv);
- sprintf(tex_file_name,"%s.tex",name_pos); /* strip off directory name */
- sprintf(idx_file_name,"%s.idx",name_pos);
- sprintf(scn_file_name,"%s.scn",name_pos);
- sprintf(C_file_name,"%s.c",name_pos);
- found_web=1;
-}
-
-@ @<Make |change_file_name|...@>=
-{
- if (strcmp(*argv,"-")==0) found_change=-1;
- else {
- if (s-*argv > max_file_name_length-4)
- @<Complain about argument length@>;
- if (dot_pos==NULL)
- sprintf(change_file_name,"%s.ch",*argv);
- else strcpy(change_file_name,*argv);
- found_change=1;
- }
-}
-
-@ @<Override...@>=
-{
- if (s-*argv > max_file_name_length-5)
- @<Complain about argument length@>;
- if (dot_pos==NULL) {
- sprintf(tex_file_name,"%s.tex",*argv);
- sprintf(idx_file_name,"%s.idx",*argv);
- sprintf(scn_file_name,"%s.scn",*argv);
- sprintf(C_file_name,"%s.c",*argv);
- } else {
- strcpy(tex_file_name,*argv);
- strcpy(C_file_name,*argv);
- if (flags['x']) { /* indexes will be generated */
- *dot_pos=0;
- sprintf(idx_file_name,"%s.idx",*argv);
- sprintf(scn_file_name,"%s.scn",*argv);
- }
- }
- found_out=1;
-}
@y
@ We now must look at the command line arguments and set the file names
accordingly. At least one file name must be present: the \.{CWEB}
@@ -204,41 +89,42 @@ always use the {\em full} name (i.e. with full path). Fortunately the
routine has been written to search for the last ``dot'', so the altered
version will search for the last |"_"| (including directory separators),
so we have what we want.
+@z
-@<Pred...@>=
-void scan_args();
-@ @c
-void
-scan_args()
-{
+@x
+ char *dot_pos; /* position of |'.'| in the argument */
+@y
char *dot_pos; /* position of |'_'| in the argument */
- char *name_pos; /* file name beginning, sans directory */
- register char *s; /* register for scanning strings */
- boolean found_web=0,found_change=0,found_out=0;
- /* have these names have been seen? */
- boolean flag_change;
-
- while (--argc > 0) {
- if ((**(++argv)=='-'||**argv=='+')&&*(*argv+1)) @<Handle flag argument@>@;
- else {
- s=name_pos=*argv;@+dot_pos=NULL;
- while (*s) {
+@z
+
+
+@x
+ strcpy(change_file_name,"/dev/null");
+@y
+ strcpy(change_file_name,"NUL");
+@z
+
+
+@x
+ if (*s=='.') dot_pos=s++;
+ else if (*s=='/') dot_pos=NULL,name_pos=++s;
+ else s++;
+@y
if (*s=='_') dot_pos=s++;
else if (*s=='_') dot_pos=NULL,name_pos=++s;
else s++;
- }
- if (!found_web) @<Make
- |web_file_name|, |tex_file_name| and |C_file_name|@>@;
- else if (!found_change) @<Make |change_file_name| from |fname|@>@;
- else if (!found_out) @<Override |tex_file_name| and |C_file_name|@>@;
- else @<Print usage error message and quit@>;
- }
- }
- if (!found_web) @<Print usage error message and quit@>;
- if (found_change<=0) strcpy(change_file_name,"NUL");
-}
+@z
+
+@x
+@ We use all of |*argv| for the |web_file_name| if there is a |'.'| in it,
+otherwise we add |".w"|. If this file can't be opened, we prepare an
+|alt_web_file_name| by adding |"web"| after the dot.
+The other file names come from adding other things
+after the dot. We must check that there is enough room in
+|web_file_name| and the other arrays for the argument.
+@y
@ We use all of |*argv| for the |web_file_name| if there is a |'_'| in it,
otherwise we add |"_w"|. If this file can't be opened, we prepare an
|alt_web_file_name| by adding |"web"| after the dot.
@@ -250,7 +136,28 @@ If you've read the section before carefully you'll have noticed, that
QDOS/SMSQ file names contain almost a |"_"|, so this routine will not work,
i.e. you'll {\em have} to add the |"_w"| always. Nevertheless I adapted
the routine as if it would work.
+@z
+
+@x
+@<Make |web_file_name|...@>=
+{
+ if (s-*argv > max_file_name_length-5)
+ @<Complain about argument length@>@;
+ if (dot_pos==NULL)
+ sprintf(web_file_name,"%s.w",*argv);
+ else {
+ strcpy(web_file_name,*argv);
+ *dot_pos=0; /* string now ends where the dot was */
+ }
+ sprintf(alt_web_file_name,"%s.web",*argv);
+ sprintf(tex_file_name,"%s.tex",name_pos); /* strip off directory name */
+ sprintf(idx_file_name,"%s.idx",name_pos);
+ sprintf(scn_file_name,"%s.scn",name_pos);
+ sprintf(C_file_name,"%s.c",name_pos);
+ found_web=true;
+}
+@y
@<Make |web_file_name|...@>=
{
if (s-*argv > max_file_name_length-5)
@@ -266,22 +173,60 @@ the routine as if it would work.
sprintf(idx_file_name,"%s_idx",name_pos);
sprintf(scn_file_name,"%s_scn",name_pos);
sprintf(C_file_name,"%s_c",name_pos);
- found_web=1;
+ found_web=true;
}
+@z
+
+@x
@ @<Make |change_file_name|...@>=
{
- if (strcmp(*argv,"-")==0) found_change=-1;
- else {
+ if (strcmp(*argv,"-")!=0) {
+ if (s-*argv > max_file_name_length-4)
+ @<Complain about argument length@>@;
+ if (dot_pos==NULL)
+ sprintf(change_file_name,"%s.ch",*argv);
+ else strcpy(change_file_name,*argv);
+ }
+ found_change=true;
+}
+@y
+@ @<Make |change_file_name|...@>=
+{
+ if (strcmp(*argv,"-")!=0) {
if (s-*argv > max_file_name_length-4)
@<Complain about argument length@>;
if (dot_pos==NULL)
sprintf(change_file_name,"%s_ch",*argv);
else strcpy(change_file_name,*argv);
- found_change=1;
+ found_change=true;
}
}
+@z
+
+@x
+@ @<Override...@>=
+{
+ if (s-*argv > max_file_name_length-5)
+ @<Complain about argument length@>@;
+ if (dot_pos==NULL) {
+ sprintf(tex_file_name,"%s.tex",*argv);
+ sprintf(idx_file_name,"%s.idx",*argv);
+ sprintf(scn_file_name,"%s.scn",*argv);
+ sprintf(C_file_name,"%s.c",*argv);
+ } else {
+ strcpy(tex_file_name,*argv);
+ strcpy(C_file_name,*argv);
+ if (make_xrefs) { /* indexes will be generated */
+ *dot_pos=0;
+ sprintf(idx_file_name,"%s.idx",*argv);
+ sprintf(scn_file_name,"%s.scn",*argv);
+ }
+ }
+ found_out=true;
+}
+@y
@ @<Override...@>=
{
if (s-*argv > max_file_name_length-5)
@@ -294,13 +239,13 @@ the routine as if it would work.
} else {
strcpy(tex_file_name,*argv);
strcpy(C_file_name,*argv);
- if (flags['x']) { /* indexes will be generated */
+ if (make_xrefs) { /* indexes will be generated */
*dot_pos=0;
sprintf(idx_file_name,"%s_idx",*argv);
sprintf(scn_file_name,"%s_scn",*argv);
}
}
- found_out=1;
+ found_out=true;
}
@z
diff --git a/web/c_cpp/cweb/comm-vms.ch b/web/c_cpp/cweb/comm-vms.ch
index cd5fe52439..caf8ecef79 100644
--- a/web/c_cpp/cweb/comm-vms.ch
+++ b/web/c_cpp/cweb/comm-vms.ch
@@ -13,19 +13,26 @@ modified:
(only the two changes by BL are necessary for initial bootstrapping
via hand-editing of common.c)
-@x section 5 (01-FEB-1992 ST)
-#include <ctype.h>
+@x section 3 (01-FEB-1992 ST)
+#include <ctype.h> /* definition of |@!isalpha|, |@!isdigit| and so on */
+#include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
+#include <stddef.h> /* definition of |@!ptrdiff_t| */
+#include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
+#include <stdio.h> /* definition of |@!printf| and friends */
+#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@y
-#include ctype /* VMS searches Textlibraries faster */
+#include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
+ /* VMS searches text libraries faster */
+#include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
+#include stddef /* definition of |@!ptrdiff_t| */
+#include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
+#include stdlib /* definition of |@!getenv| and |@!exit| */
+#include stdio /* definition of |@!printf| and friends */
+#include string /* definition of |@!strlen|, |@!strcmp| and so on */
@z
-@x section 8 (01-FEB-1992 ST)
-#include <stdio.h>
-@y
-#include stdio /* VMS searches Textlibraries faster */
-@z
-
-@x section 61 (01-FEB-1992 ST)
+@x section 68 (01-FEB-1992 ST)
programs are started. Here, for instance, we pass the operating system
a status of 0 if and only if only harmless messages were printed.
@y
@@ -37,9 +44,9 @@ A suitable status to signal an error condition to VAX/VMS could be
print |"%SYSTEM-F-ABORT, abort"|, if |history > harmless_message|.
@z
-@x section 61 (1987 BL) (01-FEB-1992 ST) (11-JAN-1993 DEK)
- if (history > harmless_message) return(1);
- else return(0);
+@x section 68 (1987 BL) (01-FEB-1992 ST) (11-JAN-1993 DEK)
+ if (history > harmless_message) return EXIT_FAILURE;
+ else return EXIT_SUCCESS;
@y
/*
VAX/VMS and UNIX have different error status conventions.
@@ -52,7 +59,7 @@ print |"%SYSTEM-F-ABORT, abort"|, if |history > harmless_message|.
else exit(SS$_NORMAL);
@z
-@x section 69 (01-FEB-1992 ST)
+@x section 75 (01-FEB-1992 ST)
An omitted change file argument means that |"/dev/null"| should be used,
when no changes are desired.
@y
@@ -60,14 +67,14 @@ An omitted change file argument means that the
null device |"NL:"| should be used, when no changes are desired.
@z
-@x section 70 (1987 BL) (01-FEB-1992 ST) (05-APR-1992 DEK)
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
+@x section 76 (1987 BL) (01-FEB-1992 ST) (05-APR-1992 DEK)
+ strcpy(change_file_name,"/dev/null");
@y
- if (found_change<=) strcpy(change_file_name,"NL:");
+ strcpy(change_file_name,"NL:");
/* {\tt NL:} is the VAX/VMS notation for {\tt /dev/null} */
@z
-@x section 82 (01-FEB-1992 ST)
+@x section 85 (01-FEB-1992 ST)
@** Index.
@y
@* VAX/VMS specific code.
diff --git a/web/c_cpp/cweb/comm-w32.ch b/web/c_cpp/cweb/comm-w32.ch
index b300f496d2..d256cedf12 100644
--- a/web/c_cpp/cweb/comm-w32.ch
+++ b/web/c_cpp/cweb/comm-w32.ch
@@ -35,60 +35,32 @@ Admittedly, this is not vital for cweb, except that I build the whole texlive
set of programs using the __fastcall convention.
@x
-@<Include files@>=
-#include <ctype.h>
+extern boolean names_match(name_pointer,const char *,size_t,eight_bits);@/
@y
-@<Include files@>=
-#include <ctype.h>
-#include <string.h>
+extern boolean __cdecl names_match(name_pointer,const char *,size_t,eight_bits);@/
@z
@x
-@ @<Predec...@>=
-extern int names_match();
+extern void init_p(name_pointer,eight_bits);@/
@y
-@ @<Predec...@>=
-extern int __cdecl names_match();
+extern void __cdecl init_p(name_pointer,eight_bits);@/
@z
-@x
-@<Pred...@>=
-void init_p();
+@x section 75
+An omitted change file argument means that |"/dev/null"| should be used,
@y
-@<Pred...@>=
-void __cdecl init_p();
+An omitted change file argument means that |"NUL"| should be used,
@z
-@x section 69
-An omitted change file argument means that |"/dev/null"| should be used,
+@x section 76
+ strcpy(change_file_name,"/dev/null");
@y
-An omitted change file argument means that |"NUL"| should be used,
+ strcpy(change_file_name,"NUL");
@z
-@x section 70 (this change copied from comm-bs.ch, July 94)
+@x section 76 (this change copied from comm-bs.ch, July 94)
else if (*s=='/') dot_pos=NULL,name_pos=++s;
@y
else if (*s == ':' || *s == '\\' || *s == '/')
dot_pos=NULL,name_pos=++s;
@z
-
-@x section 70
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
-@y
- if (found_change<=0) strcpy(change_file_name,"NUL");
-@z
-
-@x
-@ We predeclare several standard system functions here instead of including
-their system header files, because the names of the header files are not as
-standard as the names of the functions. (For example, some \CEE/ environments
-have \.{<string.h>} where others have \.{<strings.h>}.)
-
-@<Predecl...@>=
-extern int strlen(); /* length of string */
-extern int strcmp(); /* compare strings lexicographically */
-extern char* strcpy(); /* copy one string to another */
-extern int strncmp(); /* compare up to $n$ string characters */
-extern char* strncpy(); /* copy up to $n$ string characters */
-@y
-@z
diff --git a/web/c_cpp/cweb/common.c b/web/c_cpp/cweb/common.c
index 2bf7a9d4a8..7dd0f0c083 100644
--- a/web/c_cpp/cweb/common.c
+++ b/web/c_cpp/cweb/common.c
@@ -1,26 +1,22 @@
/*1:*/
-#line 58 "common.w"
+#line 66 "common.w"
-/*5:*/
-#line 102 "common.w"
-
-#include <ctype.h>
-
-/*:5*//*8:*/
-#line 165 "common.w"
-
-#include <stdio.h>
-
-/*:8*//*22:*/
-#line 471 "common.w"
+/*3:*/
+#line 46 "common.h"
+#include <ctype.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
-/*:22*/
-#line 59 "common.w"
+/*:3*/
+#line 67 "common.w"
-#define ctangle 0
-#define cweave 1 \
+#define ctangle false
+#define cweave true \
#define and_and 04
#define lt_lt 020
@@ -28,7 +24,7 @@
#define plus_plus 013
#define minus_minus 01
#define minus_gt 031
-#define not_eq 032
+#define non_eq 032
#define lt_eq 034
#define gt_eq 035
#define eq_eq 036
@@ -38,23 +34,65 @@
#define period_ast 026
#define minus_gt_ast 027 \
-#define buf_size 100
-#define longest_name 10000
-#define long_buf_size (buf_size+longest_name)
-#define xisspace(c) (isspace(c) &&((unsigned char) c<0200) )
-#define xisupper(c) (isupper(c) &&((unsigned char) c<0200) ) \
+#define xisalpha(c) (isalpha((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisdigit(c) (isdigit((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisspace(c) (isspace((eight_bits) c) &&((eight_bits) c<0200) )
+#define xislower(c) (islower((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisupper(c) (isupper((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisxdigit(c) (isxdigit((eight_bits) c) &&((eight_bits) c<0200) ) \
#define max_include_depth 10 \
-#define max_file_name_length 60
+#define max_file_name_length 1024
#define cur_file file[include_depth]
#define cur_file_name file_name[include_depth]
#define cur_line line[include_depth]
#define web_file file[0]
#define web_file_name file_name[0] \
+#define length(c) (size_t) ((c+1) ->byte_start-(c) ->byte_start)
+#define print_id(c) term_write((c) ->byte_start,length((c) ) )
+#define llink link
+#define rlink dummy.Rlink
+#define root name_dir->rlink \
+ \
+
+#define spotless 0
+#define harmless_message 1
+#define error_message 2
+#define fatal_message 3
+#define mark_harmless {if(history==spotless) history= harmless_message;}
+#define mark_error history= error_message
+#define confusion(s) fatal("! This can't happen: ",s) \
+ \
+
+#define show_banner flags['b']
+#define show_progress flags['p']
+#define show_stats flags['s']
+#define show_happiness flags['h']
+#define make_xrefs flags['x'] \
+
+#define update_terminal fflush(stdout)
+#define new_line putchar('\n')
+#define putxchar putchar
+#define term_write(a,b) fflush(stdout) ,fwrite(a,sizeof(char) ,b,stdout)
+#define C_printf(c,a) fprintf(C_file,c,a)
+#define C_putc(c) putc(c,C_file) \
+
+#define max_bytes 1000000 \
+
+#define max_toks 1000000
+#define max_names 10239 \
+
+#define max_sections 4000
+#define max_texts 10239
+#define longest_name 10000
+#define stack_size 500
+#define buf_size 1000
+#define long_buf_size (buf_size+longest_name) \
+
#define lines_dont_match (change_limit-change_buffer!=limit-buffer|| \
-strncmp(buffer,change_buffer,limit-buffer) ) \
+strncmp(buffer,change_buffer,(size_t) (limit-buffer) ) ) \
#define if_section_start_make_pending(b) {*limit= '!'; \
for(loc= buffer;xisspace(*loc) ;loc++) ; \
@@ -62,30 +100,14 @@ for(loc= buffer;xisspace(*loc) ;loc++) ; \
if(*loc=='@'&&(xisspace(*(loc+1) ) ||*(loc+1) =='*') ) change_pending= b; \
} \
-#define max_sections 2000 \
- \
-
#define too_long() {include_depth--; \
err_print("! Include file name too long") ;goto restart;} \
-#define max_bytes 90000 \
-
-#define max_names 4000 \
- \
-
-#define length(c) (c+1) ->byte_start-(c) ->byte_start
-#define print_id(c) term_write((c) ->byte_start,length((c) ) ) \
-
-#define hash_size 353 \
-
-#define llink link
-#define rlink dummy.Rlink
-#define root name_dir->rlink \
- \
+#define hash_size 8501 \
#define first_chunk(p) ((p) ->byte_start+2)
-#define prefix_length(p) (int) ((unsigned char) *((p) ->byte_start) *256+ \
-(unsigned char) *((p) ->byte_start+1) )
+#define prefix_length(p) (int) ((eight_bits) *((p) ->byte_start) *256+ \
+(eight_bits) *((p) ->byte_start+1) )
#define set_prefix_length(p,m) (*((p) ->byte_start) = (m) /256, \
*((p) ->byte_start+1) = (m) %256) \
@@ -97,48 +119,140 @@ err_print("! Include file name too long") ;goto restart;} \
#define bad_extension 5 \
-#define spotless 0
-#define harmless_message 1
-#define error_message 2
-#define fatal_message 3
-#define mark_harmless {if(history==spotless) history= harmless_message;}
-#define mark_error history= error_message \
+#define flag_change (**argv!='-')
-#define confusion(s) fatal("! This can't happen: ",s) \
- \
+#line 68 "common.w"
-#define show_banner flags['b']
-#define show_progress flags['p']
-#define show_stats flags['s']
-#define show_happiness flags['h'] \
+/*2:*/
+#line 37 "common.h"
-#define update_terminal fflush(stdout) \
+typedef bool boolean;
+typedef uint8_t eight_bits;
+typedef uint16_t sixteen_bits;
+extern boolean program;
+extern int phase;
-#define new_line putchar('\n')
-#define putxchar putchar
-#define term_write(a,b) fflush(stdout) ,fwrite(a,sizeof(char) ,b,stdout)
-#define C_printf(c,a) fprintf(C_file,c,a)
-#define C_putc(c) putc(c,C_file) \
+/*:2*//*4:*/
+#line 74 "common.h"
+extern char section_text[];
+extern char*section_text_end;
+extern char*id_first;
+extern char*id_loc;
-#line 60 "common.w"
+/*:4*//*5:*/
+#line 88 "common.h"
-/*2:*/
-#line 73 "common.w"
+extern char buffer[];
+extern char*buffer_end;
+extern char*loc;
+extern char*limit;
+
+/*:5*//*6:*/
+#line 105 "common.h"
+
+extern int include_depth;
+extern FILE*file[];
+extern FILE*change_file;
+extern char file_name[][max_file_name_length];
+
+extern char change_file_name[];
+extern int line[];
+extern int change_line;
+extern int change_depth;
+extern boolean input_has_ended;
+extern boolean changing;
+extern boolean web_file_open;
+
+/*:6*//*8:*/
+#line 125 "common.h"
+
+extern sixteen_bits section_count;
+extern boolean changed_section[];
+extern boolean change_pending;
+extern boolean print_where;
+
+/*:8*//*9:*/
+#line 139 "common.h"
+
+typedef struct name_info{
+char*byte_start;
+struct name_info*link;
+union{
+struct name_info*Rlink;
+
+char Ilk;
+}dummy;
+void*equiv_or_xref;
+}name_info;
+typedef name_info*name_pointer;
+typedef name_pointer*hash_pointer;
+extern char byte_mem[];
+extern char*byte_mem_end;
+extern char*byte_ptr;
+extern name_info name_dir[];
+extern name_pointer name_dir_end;
+extern name_pointer name_ptr;
+extern name_pointer hash[];
+extern hash_pointer hash_end;
+extern hash_pointer h;
+
+/*:9*//*11:*/
+#line 183 "common.h"
+
+extern int history;
+
+/*:11*//*13:*/
+#line 199 "common.h"
+
+extern int argc;
+extern char**argv;
+extern char C_file_name[];
+extern char tex_file_name[];
+extern char idx_file_name[];
+extern char scn_file_name[];
+extern boolean flags[];
+
+/*:13*//*14:*/
+#line 215 "common.h"
+
+extern FILE*C_file;
+extern FILE*tex_file;
+extern FILE*idx_file;
+extern FILE*scn_file;
+extern FILE*active_file;
+
+/*:14*/
+#line 69 "common.w"
+
+/*18:*/
+#line 83 "common.w"
-typedef short boolean;
boolean program;
-/*:2*//*7:*/
-#line 159 "common.w"
+/*:18*//*19:*/
+#line 92 "common.w"
+
+int phase;
+
+/*:19*//*21:*/
+#line 130 "common.w"
+
+char section_text[longest_name+1];
+char*section_text_end= section_text+longest_name;
+char*id_first;
+char*id_loc;
+
+/*:21*//*22:*/
+#line 150 "common.w"
char buffer[long_buf_size];
char*buffer_end= buffer+buf_size-2;
-char*limit= buffer;
char*loc= buffer;
+char*limit= buffer;
-/*:7*//*10:*/
-#line 214 "common.w"
+/*:22*//*25:*/
+#line 194 "common.w"
int include_depth;
FILE*file[max_include_depth];
@@ -146,79 +260,57 @@ FILE*change_file;
char file_name[max_include_depth][max_file_name_length];
char change_file_name[max_file_name_length];
-char alt_web_file_name[max_file_name_length];
+static char alt_web_file_name[max_file_name_length];
int line[max_include_depth];
int change_line;
int change_depth;
boolean input_has_ended;
boolean changing;
-boolean web_file_open= 0;
+boolean web_file_open= false;
-/*:10*//*20:*/
-#line 418 "common.w"
+/*:25*//*26:*/
+#line 220 "common.w"
+
+static char change_buffer[buf_size];
+static char*change_limit;
+
+/*:26*//*37:*/
+#line 399 "common.w"
-typedef unsigned short sixteen_bits;
sixteen_bits section_count;
boolean changed_section[max_sections];
boolean change_pending;
-boolean print_where= 0;
+boolean print_where= false;
-/*:20*//*27:*/
-#line 594 "common.w"
+/*:37*//*43:*/
+#line 596 "common.w"
-typedef struct name_info{
-char*byte_start;
-/*31:*/
-#line 631 "common.w"
-
-struct name_info*link;
-
-/*:31*//*40:*/
-#line 730 "common.w"
-
-union{
-struct name_info*Rlink;
-
-char Ilk;
-}dummy;
-
-/*:40*//*55:*/
-#line 1062 "common.w"
-
-char*equiv_or_xref;
-
-/*:55*/
-#line 597 "common.w"
-
-}name_info;
-typedef name_info*name_pointer;
char byte_mem[max_bytes];
char*byte_mem_end= byte_mem+max_bytes-1;
name_info name_dir[max_names];
name_pointer name_dir_end= name_dir+max_names-1;
-/*:27*//*29:*/
-#line 617 "common.w"
+/*:43*//*44:*/
+#line 607 "common.w"
-name_pointer name_ptr;
char*byte_ptr;
+name_pointer name_ptr;
-/*:29*//*32:*/
-#line 644 "common.w"
+/*:44*//*46:*/
+#line 627 "common.w"
-typedef name_pointer*hash_pointer;
name_pointer hash[hash_size];
hash_pointer hash_end= hash+hash_size-1;
hash_pointer h;
-/*:32*//*56:*/
-#line 1082 "common.w"
+/*:46*//*65:*/
+#line 1014 "common.w"
int history= spotless;
-/*:56*//*67:*/
-#line 1220 "common.w"
+/*:65*//*73:*/
+#line 1135 "common.w"
int argc;
char**argv;
@@ -228,8 +320,8 @@ char idx_file_name[max_file_name_length];
char scn_file_name[max_file_name_length];
boolean flags[128];
-/*:67*//*77:*/
-#line 1370 "common.w"
+/*:73*//*83:*/
+#line 1282 "common.w"
FILE*C_file;
FILE*tex_file;
@@ -237,138 +329,133 @@ FILE*idx_file;
FILE*scn_file;
FILE*active_file;
-/*:77*/
-#line 61 "common.w"
-
-/*3:*/
-#line 83 "common.w"
-int phase;
-
-/*:3*//*11:*/
-#line 240 "common.w"
-
-char change_buffer[buf_size];
-char*change_limit;
-
-/*:11*/
-#line 62 "common.w"
-
-/*33:*/
-#line 650 "common.w"
-
-extern int names_match();
+/*:83*/
+#line 70 "common.w"
-/*:33*//*38:*/
-#line 703 "common.w"
+/*7:*/
+#line 119 "common.h"
-void init_p();
+extern boolean get_line(void);
+extern void check_complete(void);
+extern void reset_input(void);
-/*:38*//*46:*/
-#line 852 "common.w"
+/*:7*//*10:*/
+#line 162 "common.h"
-extern void init_node();
+extern boolean names_match(name_pointer,const char*,size_t,eight_bits);
+extern name_pointer id_lookup(const char*,const char*,char);
-/*:46*//*53:*/
-#line 1017 "common.w"
+extern name_pointer section_lookup(char*,char*,int);
+extern void init_node(name_pointer);
+extern void init_p(name_pointer,eight_bits);
+extern void print_prefix_name(name_pointer);
+extern void print_section_name(name_pointer);
+extern void sprint_section_name(char*,name_pointer);
-int section_name_cmp();
+/*:10*//*12:*/
+#line 186 "common.h"
-/*:53*//*57:*/
-#line 1092 "common.w"
+extern int wrap_up(void);
+extern void err_print(const char*);
+extern void fatal(const char*,const char*);
+extern void overflow(const char*);
-void err_print();
+/*:12*//*15:*/
+#line 223 "common.h"
-/*:57*//*60:*/
-#line 1140 "common.w"
+extern void common_init(void);
+extern void print_stats(void);
-int wrap_up();
-extern void print_stats();
+/*:15*//*24:*/
+#line 180 "common.w"
+static boolean input_ln(FILE*);
-/*:60*//*63:*/
-#line 1173 "common.w"
+/*:24*//*28:*/
+#line 241 "common.w"
+static void prime_the_change_buffer(void);
-void fatal(),overflow();
+/*:28*//*33:*/
+#line 340 "common.w"
+static void check_change(void);
-/*:63*//*69:*/
-#line 1251 "common.w"
+/*:33*//*55:*/
+#line 774 "common.w"
-void scan_args();
+static int web_strcmp(char*,int,char*,int);
+static name_pointer add_section_name(name_pointer,int,char*,char*,int);
+static void extend_section_name(name_pointer,char*,char*,int);
-/*:69*//*81:*/
-#line 1411 "common.w"
+/*:55*//*64:*/
+#line 1002 "common.w"
+static int section_name_cmp(char**,int,name_pointer);
-extern int strlen();
-extern int strcmp();
-extern char*strcpy();
-extern int strncmp();
-extern char*strncpy();
+/*:64*//*76:*/
+#line 1197 "common.w"
+static void scan_args(void);
-/*:81*/
-#line 63 "common.w"
+/*:76*/
+#line 71 "common.w"
-/*:1*//*4:*/
-#line 89 "common.w"
+/*:1*//*20:*/
+#line 99 "common.w"
void
-common_init()
+common_init(void)
{
-/*30:*/
-#line 621 "common.w"
+/*45:*/
+#line 611 "common.w"
name_dir->byte_start= byte_ptr= byte_mem;
name_ptr= name_dir+1;
name_ptr->byte_start= byte_mem;
+root= NULL;
-/*:30*//*34:*/
-#line 655 "common.w"
+/*:45*//*47:*/
+#line 634 "common.w"
for(h= hash;h<=hash_end;*h++= NULL);
-/*:34*//*41:*/
-#line 737 "common.w"
+/*:47*/
+#line 103 "common.w"
-root= NULL;
+/*74:*/
+#line 1148 "common.w"
-/*:41*/
-#line 93 "common.w"
-;
-/*68:*/
-#line 1233 "common.w"
+show_banner= show_happiness= show_progress= make_xrefs= true;
+show_stats= false;
-show_banner= show_happiness= show_progress= 1;
+/*:74*/
+#line 104 "common.w"
-/*:68*/
-#line 94 "common.w"
-;
-/*78:*/
-#line 1377 "common.w"
+/*84:*/
+#line 1289 "common.w"
scan_args();
if(program==ctangle){
-if((C_file= fopen(C_file_name,"w"))==NULL)
+if((C_file= fopen(C_file_name,"wb"))==NULL)
fatal("! Cannot open output file ",C_file_name);
}
else{
-if((tex_file= fopen(tex_file_name,"w"))==NULL)
+if((tex_file= fopen(tex_file_name,"wb"))==NULL)
fatal("! Cannot open output file ",tex_file_name);
}
-/*:78*/
-#line 95 "common.w"
-;
+/*:84*/
+#line 105 "common.w"
+
}
-/*:4*//*9:*/
-#line 172 "common.w"
+/*:20*//*23:*/
+#line 160 "common.w"
-int input_ln(fp)
-FILE*fp;
+static boolean input_ln(
+FILE*fp)
{
register int c= EOF;
register char*k;
-if(feof(fp))return(0);
+if(feof(fp))return false;
limit= k= buffer;
while(k<=buffer_end&&(c= getc(fp))!=EOF&&c!='\n')
if((*(k++)= c)!=' ')limit= k;
@@ -377,27 +464,27 @@ if((c= getc(fp))!=EOF&&c!='\n'){
ungetc(c,fp);loc= buffer;err_print("! Input line too long");
}
-if(c==EOF&&limit==buffer)return(0);
+if(c==EOF&&limit==buffer)return false;
-return(1);
+return true;
}
-/*:9*//*12:*/
-#line 251 "common.w"
+/*:23*//*27:*/
+#line 231 "common.w"
-void
-prime_the_change_buffer()
+static void
+prime_the_change_buffer(void)
{
change_limit= change_buffer;
-/*13:*/
-#line 265 "common.w"
+/*29:*/
+#line 247 "common.w"
-while(1){
+while(true){
change_line++;
if(!input_ln(change_file))return;
if(limit<buffer+2)continue;
if(buffer[0]!='@')continue;
-if(xisupper(buffer[1]))buffer[1]= tolower(buffer[1]);
+if(xisupper(buffer[1]))buffer[1]= tolower((eight_bits)buffer[1]);
if(buffer[1]=='x')break;
if(buffer[1]=='y'||buffer[1]=='z'||buffer[1]=='i'){
loc= buffer+2;
@@ -406,11 +493,11 @@ err_print("! Missing @x in change file");
}
}
-/*:13*/
-#line 256 "common.w"
-;
-/*14:*/
-#line 282 "common.w"
+/*:29*/
+#line 236 "common.w"
+
+/*30:*/
+#line 264 "common.w"
do{
change_line++;
@@ -421,47 +508,47 @@ return;
}
}while(limit==buffer);
-/*:14*/
-#line 257 "common.w"
-;
-/*15:*/
-#line 292 "common.w"
+/*:30*/
+#line 237 "common.w"
+
+/*31:*/
+#line 274 "common.w"
{
-change_limit= change_buffer+(limit-buffer);
-strncpy(change_buffer,buffer,limit-buffer+1);
+change_limit= change_buffer+(ptrdiff_t)(limit-buffer);
+strncpy(change_buffer,buffer,(size_t)(limit-buffer+1));
}
-/*:15*/
-#line 258 "common.w"
-;
+/*:31*/
+#line 238 "common.w"
+
}
-/*:12*//*16:*/
-#line 320 "common.w"
+/*:27*//*32:*/
+#line 302 "common.w"
-void
-check_change()
+static void
+check_change(void)
{
int n= 0;
if(lines_dont_match)return;
-change_pending= 0;
+change_pending= false;
if(!changed_section[section_count]){
-if_section_start_make_pending(1);
-if(!change_pending)changed_section[section_count]= 1;
+if_section_start_make_pending(true);
+if(!change_pending)changed_section[section_count]= true;
}
-while(1){
-changing= 1;print_where= 1;change_line++;
+while(true){
+changing= true;print_where= true;change_line++;
if(!input_ln(change_file)){
err_print("! Change file ended before @y");
-change_limit= change_buffer;changing= 0;
+change_limit= change_buffer;changing= false;
return;
}
if(limit> buffer+1&&buffer[0]=='@'){
-char xyz_code= xisupper(buffer[1])?tolower(buffer[1]):buffer[1];
-/*17:*/
-#line 358 "common.w"
+char xyz_code= xisupper(buffer[1])?tolower((eight_bits)buffer[1]):buffer[1];
+/*34:*/
+#line 342 "common.w"
if(xyz_code=='x'||xyz_code=='z'){
loc= buffer+2;err_print("! Where is the matching @y?");
@@ -478,27 +565,27 @@ change_depth= include_depth;
return;
}
-/*:17*/
-#line 342 "common.w"
-;
+/*:34*/
+#line 324 "common.w"
+
}
-/*15:*/
-#line 292 "common.w"
+/*31:*/
+#line 274 "common.w"
{
-change_limit= change_buffer+(limit-buffer);
-strncpy(change_buffer,buffer,limit-buffer+1);
+change_limit= change_buffer+(ptrdiff_t)(limit-buffer);
+strncpy(change_buffer,buffer,(size_t)(limit-buffer+1));
}
-/*:15*/
-#line 344 "common.w"
-;
-changing= 0;cur_line++;
+/*:31*/
+#line 326 "common.w"
+
+changing= false;cur_line++;
while(!input_ln(cur_file)){
if(include_depth==0){
err_print("! CWEB file ended during a change");
-input_has_ended= 1;return;
+input_has_ended= true;return;
}
include_depth--;cur_line++;
}
@@ -506,15 +593,15 @@ if(lines_dont_match)n++;
}
}
-/*:16*//*18:*/
-#line 378 "common.w"
+/*:32*//*35:*/
+#line 362 "common.w"
void
-reset_input()
+reset_input(void)
{
limit= buffer;loc= buffer+1;buffer[0]= ' ';
-/*19:*/
-#line 393 "common.w"
+/*36:*/
+#line 377 "common.w"
if((web_file= fopen(web_file_name,"r"))==NULL){
strcpy(web_file_name,alt_web_file_name);
@@ -523,28 +610,28 @@ fatal("! Cannot open input file ",web_file_name);
}
-web_file_open= 1;
+web_file_open= true;
if((change_file= fopen(change_file_name,"r"))==NULL)
fatal("! Cannot open change file ",change_file_name);
-/*:19*/
-#line 383 "common.w"
-;
+/*:36*/
+#line 367 "common.w"
+
include_depth= 0;cur_line= 0;change_line= 0;
change_depth= include_depth;
changing= 1;prime_the_change_buffer();changing= !changing;
-limit= buffer;loc= buffer+1;buffer[0]= ' ';input_has_ended= 0;
+limit= buffer;loc= buffer+1;buffer[0]= ' ';input_has_ended= false;
}
-/*:18*//*21:*/
-#line 426 "common.w"
+/*:35*//*38:*/
+#line 406 "common.w"
-int get_line()
+boolean get_line(void)
{
restart:
if(changing&&include_depth==change_depth)
-/*25:*/
-#line 537 "common.w"
+/*41:*/
+#line 514 "common.w"
{
change_line++;
if(!input_ln(change_file)){
@@ -554,37 +641,37 @@ buffer[0]= '@';buffer[1]= 'z';limit= buffer+2;
}
if(limit> buffer){
if(change_pending){
-if_section_start_make_pending(0);
+if_section_start_make_pending(false);
if(change_pending){
-changed_section[section_count]= 1;change_pending= 0;
+changed_section[section_count]= true;change_pending= false;
}
}
*limit= ' ';
if(buffer[0]=='@'){
-if(xisupper(buffer[1]))buffer[1]= tolower(buffer[1]);
+if(xisupper(buffer[1]))buffer[1]= tolower((eight_bits)buffer[1]);
if(buffer[1]=='x'||buffer[1]=='y'){
loc= buffer+2;
err_print("! Where is the matching @z?");
}
else if(buffer[1]=='z'){
-prime_the_change_buffer();changing= !changing;print_where= 1;
+prime_the_change_buffer();changing= !changing;print_where= true;
}
}
}
}
-/*:25*/
-#line 431 "common.w"
-;
+/*:41*/
+#line 411 "common.w"
+
if(!changing||include_depth> change_depth){
-/*24:*/
-#line 520 "common.w"
+/*40:*/
+#line 497 "common.w"
{
cur_line++;
while(!input_ln(cur_file)){
-print_where= 1;
-if(include_depth==0){input_has_ended= 1;break;}
+print_where= true;
+if(include_depth==0){input_has_ended= true;break;}
else{
fclose(cur_file);include_depth--;
if(changing&&include_depth==change_depth)break;
@@ -597,12 +684,12 @@ if(buffer[0]==change_buffer[0])
if(change_limit> change_buffer)check_change();
}
-/*:24*/
-#line 433 "common.w"
-;
+/*:40*/
+#line 413 "common.w"
+
if(changing&&include_depth==change_depth)goto restart;
}
-if(input_has_ended)return 0;
+if(input_has_ended)return false;
loc= buffer;*limit= ' ';
if(buffer[0]=='@'&&(buffer[1]=='i'||buffer[1]=='I')){
loc= buffer+2;*limit= '"';
@@ -618,8 +705,8 @@ err_print("! Too many nested includes");
goto restart;
}
include_depth++;
-/*23:*/
-#line 474 "common.w"
+/*39:*/
+#line 451 "common.w"
{
char temp_file_name[max_file_name_length];
char*cur_file_name_end= cur_file_name+max_file_name_length-1;
@@ -636,7 +723,7 @@ if(k> cur_file_name_end)too_long();
*k= '\0';
if((cur_file= fopen(cur_file_name,"r"))!=NULL){
-cur_line= 0;print_where= 1;
+cur_line= 0;print_where= true;
goto restart;
}
kk= getenv("CWEBINPUTS");
@@ -659,61 +746,61 @@ for(;k>=cur_file_name;k--)*(k+l+1)= *k;
strcpy(cur_file_name,temp_file_name);
cur_file_name[l]= '/';
if((cur_file= fopen(cur_file_name,"r"))!=NULL){
-cur_line= 0;print_where= 1;
+cur_line= 0;print_where= true;
goto restart;
}
}
include_depth--;err_print("! Cannot open include file");goto restart;
}
-/*:23*/
-#line 452 "common.w"
-;
+/*:39*/
+#line 432 "common.w"
+
}
-return 1;
+return true;
}
-/*:21*//*26:*/
-#line 569 "common.w"
+/*:38*//*42:*/
+#line 546 "common.w"
void
-check_complete(){
+check_complete(void){
if(change_limit!=change_buffer){
-strncpy(buffer,change_buffer,change_limit-change_buffer+1);
-limit= buffer+(int)(change_limit-change_buffer);
-changing= 1;change_depth= include_depth;loc= buffer;
+strncpy(buffer,change_buffer,(size_t)(change_limit-change_buffer+1));
+limit= buffer+(ptrdiff_t)(change_limit-change_buffer);
+changing= true;change_depth= include_depth;loc= buffer;
err_print("! Change file entry did not match");
}
}
-/*:26*//*35:*/
-#line 660 "common.w"
+/*:42*//*48:*/
+#line 639 "common.w"
name_pointer
-id_lookup(first,last,t)
-char*first;
-char*last;
-char t;
+id_lookup(
+const char*first,
+const char*last,
+char t)
{
-char*i= first;
+const char*i= first;
int h;
int l;
name_pointer p;
if(last==NULL)for(last= first;*last!='\0';last++);
-l= last-first;
-/*36:*/
-#line 683 "common.w"
+l= (int)(last-first);
+/*49:*/
+#line 662 "common.w"
-h= (unsigned char)*i;
-while(++i<last)h= (h+h+(int)((unsigned char)*i))%hash_size;
+h= (eight_bits)*i;
+while(++i<last)h= (h+h+(int)((eight_bits)*i))%hash_size;
-/*:36*/
-#line 673 "common.w"
-;
-/*37:*/
-#line 691 "common.w"
+/*:49*/
+#line 652 "common.w"
+
+/*50:*/
+#line 670 "common.w"
p= hash[h];
while(p&&!names_match(p,first,l,t))p= p->link;
@@ -722,53 +809,53 @@ p= name_ptr;
p->link= hash[h];hash[h]= p;
}
-/*:37*/
-#line 674 "common.w"
-;
-if(p==name_ptr)/*39:*/
-#line 706 "common.w"
+/*:50*/
+#line 653 "common.w"
+
+if(p==name_ptr)/*51:*/
+#line 681 "common.w"
{
if(byte_ptr+l> byte_mem_end)overflow("byte memory");
if(name_ptr>=name_dir_end)overflow("name");
strncpy(byte_ptr,first,l);
(++name_ptr)->byte_start= byte_ptr+= l;
-if(program==cweave)init_p(p,t);
+init_p(p,t);
}
-/*:39*/
-#line 675 "common.w"
-;
-return(p);
+/*:51*/
+#line 654 "common.w"
+
+return p;
}
-/*:35*//*42:*/
-#line 764 "common.w"
+/*:48*//*52:*/
+#line 713 "common.w"
void
-print_section_name(p)
-name_pointer p;
+print_section_name(
+name_pointer p)
{
char*ss,*s= first_chunk(p);
name_pointer q= p+1;
while(p!=name_dir){
ss= (p+1)->byte_start-1;
if(*ss==' '&&ss>=s){
-term_write(s,ss-s);p= q->link;q= p;
+term_write(s,(size_t)(ss-s));p= q->link;q= p;
}else{
-term_write(s,ss+1-s);p= name_dir;q= NULL;
+term_write(s,(size_t)(ss+1-s));p= name_dir;q= NULL;
}
s= p->byte_start;
}
if(q)term_write("...",3);
}
-/*:42*//*43:*/
-#line 783 "common.w"
+/*:52*//*53:*/
+#line 732 "common.w"
void
-sprint_section_name(dest,p)
-char*dest;
-name_pointer p;
+sprint_section_name(
+char*dest,
+name_pointer p)
{
char*ss,*s= first_chunk(p);
name_pointer q= p+1;
@@ -779,18 +866,18 @@ p= q->link;q= p;
}else{
ss++;p= name_dir;
}
-strncpy(dest,s,ss-s),dest+= ss-s;
+strncpy(dest,s,(size_t)(ss-s)),dest+= ss-s;
s= p->byte_start;
}
*dest= '\0';
}
-/*:43*//*44:*/
-#line 804 "common.w"
+/*:53*//*54:*/
+#line 753 "common.w"
void
-print_prefix_name(p)
-name_pointer p;
+print_prefix_name(
+name_pointer p)
{
char*s= first_chunk(p);
int l= prefix_length(p);
@@ -798,12 +885,14 @@ term_write(s,l);
if(s+l<(p+1)->byte_start)term_write("...",3);
}
-/*:44*//*45:*/
-#line 825 "common.w"
+/*:54*//*56:*/
+#line 779 "common.w"
-int web_strcmp(j,j_len,k,k_len)
-char*j,*k;
-int j_len,k_len;
+static int web_strcmp(
+char*j,
+int j_len,
+char*k,
+int k_len)
{
char*j1= j+j_len,*k1= k+k_len;
while(k<k1&&j<j1&&*j==*k)k++,j++;
@@ -814,20 +903,20 @@ else if(*j<*k)return less;
else return greater;
}
-/*:45*//*47:*/
-#line 855 "common.w"
+/*:56*//*57:*/
+#line 808 "common.w"
-name_pointer
-add_section_name(par,c,first,last,ispref)
-name_pointer par;
-int c;
-char*first;
-char*last;
-int ispref;
+static name_pointer
+add_section_name(
+name_pointer par,
+int c,
+char*first,
+char*last,
+int ispref)
{
name_pointer p= name_ptr;
char*s= first_chunk(p);
-int name_len= last-first+ispref;
+int name_len= (int)(last-first)+ispref;
if(s+name_len> byte_mem_end)overflow("byte memory");
if(name_ptr+1>=name_dir_end)overflow("name");
(++name_ptr)->byte_start= byte_ptr= s+name_len;
@@ -845,19 +934,19 @@ init_node(p);
return par==NULL?(root= p):c==less?(par->llink= p):(par->rlink= p);
}
-/*:47*//*48:*/
-#line 884 "common.w"
+/*:57*//*58:*/
+#line 837 "common.w"
-void
-extend_section_name(p,first,last,ispref)
-name_pointer p;
-char*first;
-char*last;
-int ispref;
+static void
+extend_section_name(
+name_pointer p,
+char*first,
+char*last,
+int ispref)
{
char*s;
name_pointer q= p+1;
-int name_len= last-first+ispref;
+int name_len= (int)(last-first)+ispref;
if(name_ptr>=name_dir_end)overflow("name");
while(q->link!=name_dir)q= q->link;
q->link= name_ptr;
@@ -869,13 +958,13 @@ strncpy(s,first,name_len);
if(ispref)*(byte_ptr-1)= ' ';
}
-/*:48*//*49:*/
-#line 912 "common.w"
+/*:58*//*59:*/
+#line 865 "common.w"
name_pointer
-section_lookup(first,last,ispref)
-char*first,*last;
-int ispref;
+section_lookup(
+char*first,char*last,
+int ispref)
{
int c= 0;
name_pointer p= root;
@@ -883,9 +972,9 @@ name_pointer q= NULL;
name_pointer r= NULL;
name_pointer par= NULL;
-int name_len= last-first+1;
-/*50:*/
-#line 936 "common.w"
+int name_len= (int)(last-first)+1;
+/*60:*/
+#line 889 "common.w"
while(p){
c= web_strcmp(first,name_len,first_chunk(p),prefix_length(p));
@@ -895,10 +984,10 @@ par= p;
p= (c==less?p->llink:p->rlink);
}else{
if(r!=NULL){
-printf("\n! Ambiguous prefix: matches <");
+fputs("\n! Ambiguous prefix: matches <",stdout);
print_prefix_name(p);
-printf(">\n and <");
+fputs(">\n and <",stdout);
print_prefix_name(r);
err_print(">");
return name_dir;
@@ -911,26 +1000,26 @@ if(p==NULL)
p= q,q= NULL;
}
-/*:50*/
-#line 926 "common.w"
-;
-/*51:*/
-#line 961 "common.w"
+/*:60*/
+#line 879 "common.w"
+
+/*61:*/
+#line 914 "common.w"
if(r==NULL)
return add_section_name(par,c,first,last+1,ispref);
-/*:51*/
-#line 927 "common.w"
-;
-/*52:*/
-#line 969 "common.w"
+/*:61*/
+#line 880 "common.w"
+
+/*62:*/
+#line 922 "common.w"
switch(section_name_cmp(&first,name_len,r)){
case prefix:
if(!ispref){
-printf("\n! New name is a prefix of <");
+fputs("\n! New name is a prefix of <",stdout);
print_section_name(r);
err_print(">");
@@ -942,71 +1031,71 @@ case extension:if(!ispref||first<=last)
extend_section_name(r,first,last+1,ispref);
return r;
case bad_extension:
-printf("\n! New name extends <");
+fputs("\n! New name extends <",stdout);
print_section_name(r);
err_print(">");
return r;
default:
-printf("\n! Section name incompatible with <");
+fputs("\n! Section name incompatible with <",stdout);
print_prefix_name(r);
-printf(">,\n which abbreviates <");
+fputs(">,\n which abbreviates <",stdout);
print_section_name(r);
err_print(">");
return r;
}
-/*:52*/
-#line 928 "common.w"
-;
+/*:62*/
+#line 881 "common.w"
+
}
-/*:49*//*54:*/
-#line 1020 "common.w"
+/*:59*//*63:*/
+#line 970 "common.w"
-int section_name_cmp(pfirst,len,r)
-char**pfirst;
-int len;
-name_pointer r;
+static int section_name_cmp(
+char**pfirst,
+int len,
+name_pointer r)
{
char*first= *pfirst;
name_pointer q= r+1;
char*ss,*s= first_chunk(r);
int c;
int ispref;
-while(1){
+while(true){
ss= (r+1)->byte_start-1;
if(*ss==' '&&ss>=r->byte_start)ispref= 1,q= q->link;
else ispref= 0,ss++,q= name_dir;
switch(c= web_strcmp(first,len,s,ss-s)){
case equal:if(q==name_dir)
if(ispref){
-*pfirst= first+(ss-s);
+*pfirst= first+(ptrdiff_t)(ss-s);
return extension;
}else return equal;
else return(q->byte_start==(q+1)->byte_start)?equal:prefix;
case extension:
if(!ispref)return bad_extension;
first+= ss-s;
-if(q!=name_dir){len-= ss-s;s= q->byte_start;r= q;continue;}
+if(q!=name_dir){len-= (int)(ss-s);s= q->byte_start;r= q;continue;}
*pfirst= first;return extension;
default:return c;
}
}
}
-/*:54*//*58:*/
-#line 1095 "common.w"
+/*:63*//*66:*/
+#line 1024 "common.w"
void
-err_print(s)
-char*s;
+err_print(
+const char*s)
{
char*k,*l;
printf(*s=='!'?"\n%s":"%s",s);
-if(web_file_open)/*59:*/
-#line 1115 "common.w"
+if(web_file_open)/*67:*/
+#line 1044 "common.w"
{if(changing&&include_depth==change_depth)
printf(". (l. %d of change file)\n",change_line);
@@ -1025,85 +1114,83 @@ if(*limit=='|')putchar('|');
putchar(' ');
}
-/*:59*/
-#line 1102 "common.w"
-;
+/*:67*/
+#line 1031 "common.w"
+
update_terminal;mark_error;
}
-/*:58*//*61:*/
-#line 1150 "common.w"
+/*:66*//*68:*/
+#line 1076 "common.w"
-int wrap_up(){
-putchar('\n');
+int wrap_up(void){
+if(show_progress)new_line;
if(show_stats)
print_stats();
-/*62:*/
-#line 1160 "common.w"
+/*69:*/
+#line 1086 "common.w"
switch(history){
-case spotless:if(show_happiness)printf("(No errors were found.)\n");break;
+case spotless:if(show_happiness)puts("(No errors were found.)");break;
case harmless_message:
-printf("(Did you see the warning message above?)\n");break;
+puts("(Did you see the warning message above?)");break;
case error_message:
-printf("(Pardon me, but I think I spotted something wrong.)\n");break;
-case fatal_message:printf("(That was a fatal error, my friend.)\n");
+puts("(Pardon me, but I think I spotted something wrong.)");break;
+case fatal_message:puts("(That was a fatal error, my friend.)");
}
-/*:62*/
-#line 1155 "common.w"
-;
-if(history> harmless_message)return(1);
-else return(0);
+/*:69*/
+#line 1081 "common.w"
+
+if(history> harmless_message)return EXIT_FAILURE;
+else return EXIT_SUCCESS;
}
-/*:61*//*64:*/
-#line 1179 "common.w"
+/*:68*//*70:*/
+#line 1102 "common.w"
void
-fatal(s,t)
-char*s,*t;
+fatal(
+const char*s,const char*t)
{
-if(*s)printf(s);
+if(*s)err_print(s);
err_print(t);
history= fatal_message;exit(wrap_up());
}
-/*:64*//*65:*/
-#line 1190 "common.w"
+/*:70*//*71:*/
+#line 1113 "common.w"
void
-overflow(t)
-char*t;
+overflow(
+const char*t)
{
printf("\n! Sorry, %s capacity exceeded",t);fatal("","");
}
-/*:65*//*70:*/
-#line 1254 "common.w"
+/*:71*//*75:*/
+#line 1167 "common.w"
-void
-scan_args()
+static void
+scan_args(void)
{
char*dot_pos;
char*name_pos;
register char*s;
-boolean found_web= 0,found_change= 0,found_out= 0;
+boolean found_web= false,found_change= false,found_out= false;
-boolean flag_change;
+strcpy(change_file_name,"/dev/null");
while(--argc> 0){
-if((**(++argv)=='-'||**argv=='+')&&*(*argv+1))/*74:*/
-#line 1344 "common.w"
+if((**(++argv)=='-'||**argv=='+')&&*(*argv+1))/*80:*/
+#line 1258 "common.w"
{
-if(**argv=='-')flag_change= 0;
-else flag_change= 1;
for(dot_pos= *argv+1;*dot_pos> '\0';dot_pos++)
-flags[*dot_pos]= flag_change;
+flags[(eight_bits)*dot_pos]= flag_change;
}
-/*:74*/
-#line 1266 "common.w"
+/*:80*/
+#line 1179 "common.w"
else{
s= name_pos= *argv;dot_pos= NULL;
@@ -1112,19 +1199,19 @@ if(*s=='.')dot_pos= s++;
else if(*s=='/')dot_pos= NULL,name_pos= ++s;
else s++;
}
-if(!found_web)/*71:*/
-#line 1292 "common.w"
+if(!found_web)/*77:*/
+#line 1206 "common.w"
{
if(s-*argv> max_file_name_length-5)
-/*76:*/
-#line 1364 "common.w"
+/*82:*/
+#line 1276 "common.w"
fatal("! Filename too long\n",*argv);
-/*:76*/
-#line 1295 "common.w"
-;
+/*:82*/
+#line 1209 "common.w"
+
if(dot_pos==NULL)
sprintf(web_file_name,"%s.w",*argv);
else{
@@ -1136,50 +1223,49 @@ sprintf(tex_file_name,"%s.tex",name_pos);
sprintf(idx_file_name,"%s.idx",name_pos);
sprintf(scn_file_name,"%s.scn",name_pos);
sprintf(C_file_name,"%s.c",name_pos);
-found_web= 1;
+found_web= true;
}
-/*:71*/
-#line 1275 "common.w"
+/*:77*/
+#line 1188 "common.w"
-else if(!found_change)/*72:*/
-#line 1310 "common.w"
+else if(!found_change)/*78:*/
+#line 1224 "common.w"
{
-if(strcmp(*argv,"-")==0)found_change= -1;
-else{
+if(strcmp(*argv,"-")!=0){
if(s-*argv> max_file_name_length-4)
-/*76:*/
-#line 1364 "common.w"
+/*82:*/
+#line 1276 "common.w"
fatal("! Filename too long\n",*argv);
-/*:76*/
-#line 1315 "common.w"
-;
+/*:82*/
+#line 1228 "common.w"
+
if(dot_pos==NULL)
sprintf(change_file_name,"%s.ch",*argv);
else strcpy(change_file_name,*argv);
-found_change= 1;
}
+found_change= true;
}
-/*:72*/
-#line 1276 "common.w"
+/*:78*/
+#line 1189 "common.w"
-else if(!found_out)/*73:*/
-#line 1323 "common.w"
+else if(!found_out)/*79:*/
+#line 1236 "common.w"
{
if(s-*argv> max_file_name_length-5)
-/*76:*/
-#line 1364 "common.w"
+/*82:*/
+#line 1276 "common.w"
fatal("! Filename too long\n",*argv);
-/*:76*/
-#line 1326 "common.w"
-;
+/*:82*/
+#line 1239 "common.w"
+
if(dot_pos==NULL){
sprintf(tex_file_name,"%s.tex",*argv);
sprintf(idx_file_name,"%s.idx",*argv);
@@ -1188,20 +1274,20 @@ sprintf(C_file_name,"%s.c",*argv);
}else{
strcpy(tex_file_name,*argv);
strcpy(C_file_name,*argv);
-if(flags['x']){
+if(make_xrefs){
*dot_pos= 0;
sprintf(idx_file_name,"%s.idx",*argv);
sprintf(scn_file_name,"%s.scn",*argv);
}
}
-found_out= 1;
+found_out= true;
}
-/*:73*/
-#line 1277 "common.w"
+/*:79*/
+#line 1190 "common.w"
-else/*75:*/
-#line 1352 "common.w"
+else/*81:*/
+#line 1264 "common.w"
{
if(program==ctangle)
@@ -1214,13 +1300,13 @@ else fatal(
,"");
}
-/*:75*/
-#line 1278 "common.w"
-;
+/*:81*/
+#line 1191 "common.w"
+
}
}
-if(!found_web)/*75:*/
-#line 1352 "common.w"
+if(!found_web)/*81:*/
+#line 1264 "common.w"
{
if(program==ctangle)
@@ -1233,10 +1319,9 @@ else fatal(
,"");
}
-/*:75*/
-#line 1281 "common.w"
-;
-if(found_change<=0)strcpy(change_file_name,"/dev/null");
+/*:81*/
+#line 1194 "common.w"
+
}
-/*:70*/
+/*:75*/
diff --git a/web/c_cpp/cweb/common.h b/web/c_cpp/cweb/common.h
index d6c0bfb601..425239f1c7 100644
--- a/web/c_cpp/cweb/common.h
+++ b/web/c_cpp/cweb/common.h
@@ -2,7 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 3.64 --- February 2017 (works also with later versions)
+% Version 4.2 --- February 2021 (works also with later versions)
% Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
@@ -15,25 +15,42 @@
% entire resulting derived work is distributed under the terms of a
% permission notice identical to this one.
-% Please send comments, suggestions, etc. to levy@@math.berkeley.edu.
+% Amendments to 'common.h' resulting in this updated version were created
+% by numerous collaborators over the course of many years.
+
+% Please send comments, suggestions, etc. to tex-k@@tug.org.
% The next few sections contain stuff from the file |"common.w"| that has
% to be included in both |"ctangle.w"| and |"cweave.w"|. It appears in this
-% file |"common.h"|, which needs to be updated when |"common.w"| changes.
+% file |"common.h"|, which is also included in |"common.w"| to propagate
+% possible changes from this single source consistently.
First comes general stuff:
-@d ctangle 0
-@d cweave 1
+@s boolean int
+@s uint8_t int
+@s uint16_t int
+
+@d ctangle false
+@d cweave true
-@<Common code for \.{CWEAVE} and \.{CTANGLE}@>=
-typedef short boolean;
-typedef char unsigned eight_bits;
+@<Common code...@>=
+typedef bool boolean;
+typedef uint8_t eight_bits;
+typedef uint16_t sixteen_bits;
extern boolean program; /* \.{CWEAVE} or \.{CTANGLE}? */
extern int phase; /* which phase are we in? */
-@ @<Include files@>=
-#include <stdio.h>
+@ Interface to the standard \CEE/ library:
+
+@<Include files@>=
+#include <ctype.h> /* definition of |@!isalpha|, |@!isdigit| and so on */
+#include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
+#include <stddef.h> /* definition of |@!ptrdiff_t| */
+#include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
+#include <stdio.h> /* definition of |@!printf| and friends */
+#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@ Code related to the character set:
@^ASCII code dependencies@>
@@ -44,7 +61,7 @@ extern int phase; /* which phase are we in? */
@d plus_plus 013 /* `\.{++}'\,; corresponds to MIT's {\tentex\char'13} */
@d minus_minus 01 /* `\.{--}'\,; corresponds to MIT's {\tentex\char'1} */
@d minus_gt 031 /* `\.{->}'\,; corresponds to MIT's {\tentex\char'31} */
-@d not_eq 032 /* `\.{!=}'\,; corresponds to MIT's {\tentex\char'32} */
+@d non_eq 032 /* `\.{!=}'\,; corresponds to MIT's {\tentex\char'32} */
@d lt_eq 034 /* `\.{<=}'\,; corresponds to MIT's {\tentex\char'34} */
@d gt_eq 035 /* `\.{>=}'\,; corresponds to MIT's {\tentex\char'35} */
@d eq_eq 036 /* `\.{==}'\,; corresponds to MIT's {\tentex\char'36} */
@@ -55,34 +72,69 @@ extern int phase; /* which phase are we in? */
@d minus_gt_ast 027 /* `\.{->*}'\,; corresponds to MIT's {\tentex\char'27} */
@<Common code...@>=
-char section_text[longest_name+1]; /* name being sought for */
-char *section_text_end = section_text+longest_name; /* end of |section_text| */
-char *id_first; /* where the current identifier begins in the buffer */
-char *id_loc; /* just after the current identifier in the buffer */
+extern char section_text[]; /* text being sought for */
+extern char *section_text_end; /* end of |section_text| */
+extern char *id_first; /* where the current identifier begins in the buffer */
+extern char *id_loc; /* just after the current identifier in the buffer */
@ Code related to input routines:
-
-@d xisalpha(c) (isalpha(c)&&((eight_bits)c<0200))
-@d xisdigit(c) (isdigit(c)&&((eight_bits)c<0200))
-@d xisspace(c) (isspace(c)&&((eight_bits)c<0200))
-@d xislower(c) (islower(c)&&((eight_bits)c<0200))
-@d xisupper(c) (isupper(c)&&((eight_bits)c<0200))
-@d xisxdigit(c) (isxdigit(c)&&((eight_bits)c<0200))
+@d xisalpha(c) (isalpha((eight_bits)c)&&((eight_bits)c<0200))
+@d xisdigit(c) (isdigit((eight_bits)c)&&((eight_bits)c<0200))
+@d xisspace(c) (isspace((eight_bits)c)&&((eight_bits)c<0200))
+@d xislower(c) (islower((eight_bits)c)&&((eight_bits)c<0200))
+@d xisupper(c) (isupper((eight_bits)c)&&((eight_bits)c<0200))
+@d xisxdigit(c) (isxdigit((eight_bits)c)&&((eight_bits)c<0200))
@<Common code...@>=
extern char buffer[]; /* where each line of input goes */
extern char *buffer_end; /* end of |buffer| */
-extern char *loc; /* points to the next character to be read from the buffer*/
+extern char *loc; /* points to the next character to be read from the buffer */
extern char *limit; /* points to the last character in the buffer */
+@ Code related to file handling:
+@f line x /* make |line| an unreserved word */
+@d max_include_depth 10 /* maximum number of source files open
+ simultaneously, not counting the change file */
+@d max_file_name_length 1024
+@d cur_file file[include_depth] /* current file */
+@d cur_file_name file_name[include_depth] /* current file name */
+@d cur_line line[include_depth] /* number of current line in current file */
+@d web_file file[0] /* main source file */
+@d web_file_name file_name[0] /* main source file name */
+
+@<Common code...@>=
+extern int include_depth; /* current level of nesting */
+extern FILE *file[]; /* stack of non-change files */
+extern FILE *change_file; /* change file */
+extern char file_name[][max_file_name_length];
+ /* stack of non-change file names */
+extern char change_file_name[]; /* name of change file */
+extern int line[]; /* number of current line in the stacked files */
+extern int change_line; /* number of current line in change file */
+extern int change_depth; /* where \.{@@y} originated during a change */
+extern boolean input_has_ended; /* if there is no more input */
+extern boolean changing; /* if the current line is from |change_file| */
+extern boolean web_file_open; /* if the web file is being read */
+
+@ @<Predecl...@>=
+extern boolean get_line(void); /* inputs the next line */
+extern void check_complete(void); /* checks that all changes were picked up */
+extern void reset_input(void); /* initialize to read the web file and change file */
+
+@ Code related to section numbers:
+@<Common code...@>=
+extern sixteen_bits section_count; /* the current section number */
+extern boolean changed_section[]; /* is the section changed? */
+extern boolean change_pending; /* is a decision about change still unclear? */
+extern boolean print_where; /* tells \.{CTANGLE} to print line and file info */
+
@ Code related to identifier and section name storage:
-@d length(c) (c+1)->byte_start-(c)->byte_start /* the length of a name */
+@d length(c) (size_t)((c+1)->byte_start-(c)->byte_start) /* the length of a name */
@d print_id(c) term_write((c)->byte_start,length((c))) /* print identifier */
@d llink link /* left link in binary search tree for section names */
@d rlink dummy.Rlink /* right link in binary search tree for section names */
@d root name_dir->rlink /* the root of the binary search tree
for section names */
-@d chunk_marker 0
@<Common code...@>=
typedef struct name_info {
@@ -93,22 +145,30 @@ typedef struct name_info {
names */
char Ilk; /* used by identifiers in \.{CWEAVE} only */
} dummy;
- char *equiv_or_xref; /* info corresponding to names */
+ void *equiv_or_xref; /* info corresponding to names */
} name_info; /* contains information about an identifier or section name */
typedef name_info *name_pointer; /* pointer into array of \&{name\_info}s */
typedef name_pointer *hash_pointer;
extern char byte_mem[]; /* characters of names */
extern char *byte_mem_end; /* end of |byte_mem| */
+extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_info name_dir[]; /* information about names */
extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
-extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_pointer hash[]; /* heads of hash lists */
extern hash_pointer hash_end; /* end of |hash| */
extern hash_pointer h; /* index into hash-head array */
-extern name_pointer id_lookup(); /* looks up a string in the identifier table */
-extern name_pointer section_lookup(); /* finds section name */
-extern void print_section_name(), sprint_section_name();
+
+@ @<Predecl...@>=
+extern boolean names_match(name_pointer,const char *,size_t,eight_bits);@/
+extern name_pointer id_lookup(const char *,const char *,char);
+ /* looks up a string in the identifier table */
+extern name_pointer section_lookup(char *,char *,int); /* finds section name */
+extern void init_node(name_pointer);@/
+extern void init_p(name_pointer,eight_bits);@/
+extern void print_prefix_name(name_pointer);@/
+extern void print_section_name(name_pointer);@/
+extern void sprint_section_name(char *,name_pointer);
@ Code related to error handling:
@d spotless 0 /* |history| value for normal jobs */
@@ -118,67 +178,39 @@ extern void print_section_name(), sprint_section_name();
@d mark_harmless {if (history==spotless) history=harmless_message;}
@d mark_error history=error_message
@d confusion(s) fatal("! This can't happen: ",s)
-
-@<Common...@>=
-extern history; /* indicates how bad this run was */
-extern err_print(); /* print error message and context */
-extern wrap_up(); /* indicate |history| and exit */
-extern void fatal(); /* issue error message and die */
-extern void overflow(); /* succumb because a table has overflowed */
-
-@ Code related to file handling:
-@f line x /* make |line| an unreserved word */
-@d max_file_name_length 60
-@d cur_file file[include_depth] /* current file */
-@d cur_file_name file_name[include_depth] /* current file name */
-@d web_file_name file_name[0] /* main source file name */
-@d cur_line line[include_depth] /* number of current line in current file */
+@.This can't happen@>
@<Common code...@>=
-extern include_depth; /* current level of nesting */
-extern FILE *file[]; /* stack of non-change files */
-extern FILE *change_file; /* change file */
-extern char C_file_name[]; /* name of |C_file| */
-extern char tex_file_name[]; /* name of |tex_file| */
-extern char idx_file_name[]; /* name of |idx_file| */
-extern char scn_file_name[]; /* name of |scn_file| */
-extern char file_name[][max_file_name_length];
- /* stack of non-change file names */
-extern char change_file_name[]; /* name of change file */
-extern line[]; /* number of current line in the stacked files */
-extern change_line; /* number of current line in change file */
-extern change_depth; /* where \.{@@y} originated during a change */
-extern boolean input_has_ended; /* if there is no more input */
-extern boolean changing; /* if the current line is from |change_file| */
-extern boolean web_file_open; /* if the web file is being read */
-extern reset_input(); /* initialize to read the web file and change file */
-extern get_line(); /* inputs the next line */
-extern check_complete(); /* checks that all changes were picked up */
+extern int history; /* indicates how bad this run was */
-@ Code related to section numbers:
-@<Common code...@>=
-typedef unsigned short sixteen_bits;
-extern sixteen_bits section_count; /* the current section number */
-extern boolean changed_section[]; /* is the section changed? */
-extern boolean change_pending; /* is a decision about change still unclear? */
-extern boolean print_where; /* tells \.{CTANGLE} to print line and file info */
+@ @<Predecl...@>=
+extern int wrap_up(void); /* indicate |history| and exit */
+extern void err_print(const char *); /* print error message and context */
+extern void fatal(const char *,const char *); /* issue error message and die */
+extern void overflow(const char *); /* succumb because a table has overflowed */
@ Code related to command line arguments:
@d show_banner flags['b'] /* should the banner line be printed? */
@d show_progress flags['p'] /* should progress reports be printed? */
+@d show_stats flags['s'] /* should statistics be printed at end of run? */
@d show_happiness flags['h'] /* should lack of errors be announced? */
+@d make_xrefs flags['x'] /* should cross references be output? */
@<Common code...@>=
extern int argc; /* copy of |ac| parameter to |main| */
extern char **argv; /* copy of |av| parameter to |main| */
+extern char C_file_name[]; /* name of |C_file| */
+extern char tex_file_name[]; /* name of |tex_file| */
+extern char idx_file_name[]; /* name of |idx_file| */
+extern char scn_file_name[]; /* name of |scn_file| */
extern boolean flags[]; /* an option for each 7-bit code */
-@ Code relating to output:
+@ Code related to output:
@d update_terminal fflush(stdout) /* empty the terminal output buffer */
@d new_line putchar('\n') @d putxchar putchar
@d term_write(a,b) fflush(stdout),fwrite(a,sizeof(char),b,stdout)
@d C_printf(c,a) fprintf(C_file,c,a)
-@d C_putc(c) putc(c,C_file)
+@d C_putc(c) putc(c,C_file) /* isn't \CEE/ wonderfully consistent? */
@<Common code...@>=
extern FILE *C_file; /* where output of \.{CTANGLE} goes */
@@ -188,6 +220,24 @@ extern FILE *scn_file; /* where list of sections from \.{CWEAVE} goes */
extern FILE *active_file; /* currently active file for \.{CWEAVE} output */
@ The procedure that gets everything rolling:
-
-@<Common code...@>=
-extern void common_init();
+@<Predecl...@>=
+extern void common_init(void);@/
+extern void print_stats(void);
+
+@ The following parameters were sufficient in the original \.{WEB} to
+handle \TEX/, so they should be sufficient for most applications of
+\.{CWEB}.
+
+@d max_bytes 1000000 /* the number of bytes in identifiers,
+ index entries, and section names */
+@d max_toks 1000000 /* number of bytes in compressed \CEE/ code */
+@d max_names 10239 /* number of identifiers, strings, section names;
+ must be less than 10240 */
+@d max_sections 4000 /* greater than the total number of sections */
+@d max_texts 10239 /* number of replacement texts, must be less than 10240 */
+@d longest_name 10000 /* file and section names and section texts shouldn't be longer than this */
+@d stack_size 500 /* number of simultaneous levels of macro expansion */
+@d buf_size 1000 /* maximum length of input line, plus one */
+@d long_buf_size (buf_size+longest_name) /* for \.{CWEAVE} */
+
+@ End of \.{COMMON} interface.
diff --git a/web/c_cpp/cweb/common.w b/web/c_cpp/cweb/common.w
index d8aacfb7b9..15e93c2c5e 100644
--- a/web/c_cpp/cweb/common.w
+++ b/web/c_cpp/cweb/common.w
@@ -2,7 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 3.64 --- January 2002
+% Version 4.2 --- February 2021
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -15,14 +15,19 @@
% entire resulting derived work is given a different name and distributed
% under the terms of a permission notice identical to this one.
+% Amendments to 'common.w' resulting in this updated version were created
+% by numerous collaborators over the course of many years.
+
+% Please send comments, suggestions, etc. to tex-k@@tug.org.
+
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (Version 3.64)}
+\def\title{Common code for CTANGLE and CWEAVE (Version 4.2)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 3.64)}
+ \centerline{(Version 4.2)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -41,7 +46,10 @@ under the terms of a permission notice identical to this one.
\pageno=\contentspagenumber \advance\pageno by 1
\let\maybe=\iftrue
-@s not_eq normal @q unreserve a C++ keyword @>
+
+@s boolean int
+@s uint8_t int
+@s uint16_t int
@** Introduction. This file contains code common
to both \.{CTANGLE} and \.{CWEAVE}, which roughly concerns the following
@@ -58,20 +66,21 @@ The file begins with a few basic definitions.
@c
@<Include files@>@/
@h
-@<Definitions that should agree with \.{CTANGLE} and \.{CWEAVE}@>@/
-@<Other definitions@>@/
-@<Predeclaration of procedures@>@/
+@<Common code for \.{CWEAVE} and \.{CTANGLE}@>@/
+@<Global variables@>@/
+@<Predeclaration of procedures@>
+
+@ The details will be filled in due course. The interface of this module
+is included first. It is also used by the main programs.
+
+@i common.h
@ In certain cases \.{CTANGLE} and \.{CWEAVE} should do almost, but not
quite, the same thing. In these cases we've written common code for
both, differentiating between the two by means of the global variable
|program|.
-@d ctangle 0
-@d cweave 1
-
-@<Definitions...@>=
-typedef short boolean;
+@<Global var...@>=
boolean program; /* \.{CWEAVE} or \.{CTANGLE}? */
@ \.{CWEAVE} operates in three phases: First it inputs the source
@@ -80,7 +89,8 @@ produces the \TEX/ output file, and finally it sorts and outputs the index.
Similarly, \.{CTANGLE} operates in two phases.
The global variable |phase| tells which phase we are in.
-@<Other...@>= int phase; /* which phase are we in? */
+@<Global var...@>=
+int phase; /* which phase are we in? */
@ There's an initialization procedure that gets both \.{CTANGLE} and
\.{CWEAVE} off to a good start. We will fill in the details of this
@@ -88,29 +98,26 @@ procedure later.
@c
void
-common_init()
+common_init(void)
{
- @<Initialize pointers@>;
- @<Set the default options common to \.{CTANGLE} and \.{CWEAVE}@>;
- @<Scan arguments and open output files@>;
+ @<Initialize pointers@>@;
+ @<Set the default options common to \.{CTANGLE} and \.{CWEAVE}@>@;
+ @<Scan arguments and open output files@>@;
}
@* The character set.
\.{CWEB} uses the conventions of \CEE/ programs found in the standard
\.{ctype.h} header file.
-@<Include files@>=
-#include <ctype.h>
+A few character pairs are encoded internally as single characters,
+using the definitions in the interface sections above. These definitions
+are consistent with an extension of ASCII code originally developed at
+MIT and explained in Appendix~C of {\sl The \TEX/book\/}; thus, users
+who have such a character set can type things like \.{\char'32} and
+\.{\char'4} instead of \.{!=} and \.{\&\&}. (However, their files will
+not be too portable until more people adopt the extended code.)
-@ A few character pairs are encoded internally as single characters,
-using the definitions below. These definitions are consistent with
-an extension of ASCII code originally developed at MIT and explained in
-Appendix~C of {\sl The \TEX/book\/}; thus, users who have such a
-character set can type things like \.{\char'32} and \.{\char'4} instead
-of \.{!=} and \.{\&\&}. (However, their files will not be too portable
-until more people adopt the extended code.)
-
-If the character set is not ASCII, the definitions given here may conflict
+If the character set is not ASCII, the definitions given may conflict
with existing characters; in such cases, other arbitrary codes should be
substituted. The indexes to \.{CTANGLE} and \.{CWEAVE} mention every
case where similar codes may have to be changed in order to
@@ -120,26 +127,16 @@ in those indexes.
@^ASCII code dependencies@>
@^system dependencies@>
-@d and_and 04 /* `\.{\&\&}'\,; corresponds to MIT's {\tentex\char'4} */
-@d lt_lt 020 /* `\.{<<}'\,; corresponds to MIT's {\tentex\char'20} */
-@d gt_gt 021 /* `\.{>>}'\,; corresponds to MIT's {\tentex\char'21} */
-@d plus_plus 013 /* `\.{++}'\,; corresponds to MIT's {\tentex\char'13} */
-@d minus_minus 01 /* `\.{--}'\,; corresponds to MIT's {\tentex\char'1} */
-@d minus_gt 031 /* `\.{->}'\,; corresponds to MIT's {\tentex\char'31} */
-@d not_eq 032 /* `\.{!=}'\,; corresponds to MIT's {\tentex\char'32} */
-@d lt_eq 034 /* `\.{<=}'\,; corresponds to MIT's {\tentex\char'34} */
-@d gt_eq 035 /* `\.{>=}'\,; corresponds to MIT's {\tentex\char'35} */
-@d eq_eq 036 /* `\.{==}'\,; corresponds to MIT's {\tentex\char'36} */
-@d or_or 037 /* `\.{\v\v}'\,; corresponds to MIT's {\tentex\char'37} */
-@d dot_dot_dot 016 /* `\.{...}'\,; corresponds to MIT's {\tentex\char'16} */
-@d colon_colon 06 /* `\.{::}'\,; corresponds to MIT's {\tentex\char'6} */
-@d period_ast 026 /* `\.{.*}'\,; corresponds to MIT's {\tentex\char'26} */
-@d minus_gt_ast 027 /* `\.{->*}'\,; corresponds to MIT's {\tentex\char'27} */
+@<Global var...@>=
+char section_text[longest_name+1]; /* text being sought for */
+char *section_text_end = section_text+longest_name; /* end of |section_text| */
+char *id_first; /* where the current identifier begins in the buffer */
+char *id_loc; /* just after the current identifier in the buffer */
@** Input routines. The lowest level of input to the \.{CWEB} programs
is performed by |input_ln|, which must be told which file to read from.
-The return value of |input_ln| is 1 if the read is successful and 0 if
-not (generally this means the file has ended). The conventions
+The return value of |input_ln| is |true| if the read is successful and
+|false| if not (generally this means the file has ended). The conventions
of \TEX/ are followed; i.e., the characters of the next line of the file
are copied into the |buffer| array,
and the global variable |limit| is set to the first unoccupied position.
@@ -150,32 +147,23 @@ Since |buf_size| is strictly less than |long_buf_size|,
some of \.{CWEB}'s routines use the fact that it is safe to refer to
|*(limit+2)| without overstepping the bounds of the array.
-@d buf_size 100 /* for \.{CWEAVE} and \.{CTANGLE} */
-@d longest_name 10000
-@d long_buf_size (buf_size+longest_name) /* for \.{CWEAVE} */
-@d xisspace(c) (isspace(c)&&((unsigned char)c<0200))
-@d xisupper(c) (isupper(c)&&((unsigned char)c<0200))
-
-@<Definitions...@>=
+@<Global var...@>=
char buffer[long_buf_size]; /* where each line of input goes */
char *buffer_end=buffer+buf_size-2; /* end of |buffer| */
-char *limit=buffer; /* points to the last character in the buffer */
char *loc=buffer; /* points to the next character to be read from the buffer */
-
-@ @<Include files@>=
-#include <stdio.h>
+char *limit=buffer; /* points to the last character in the buffer */
@ In the unlikely event that your standard I/O library does not
support |feof|, |getc|, and |ungetc| you may have to change things here.
@^system dependencies@>
@c
-int input_ln(fp) /* copies a line into |buffer| or returns 0 */
-FILE *fp; /* what file to read from */
+static boolean input_ln(@t\1\1@> /* copies a line into |buffer| or returns |false| */
+FILE *fp@t\2\2@>) /* what file to read from */
{
register int c=EOF; /* character read; initialized so some compilers won't complain */
register char *k; /* where next character goes */
- if (feof(fp)) return(0); /* we have hit end-of-file */
+ if (feof(fp)) return false; /* we have hit end-of-file */
limit = k = buffer; /* beginning of buffer */
while (k<=buffer_end && (c=getc(fp)) != EOF && c!='\n')
if ((*(k++) = c) != ' ') limit = k;
@@ -183,12 +171,14 @@ FILE *fp; /* what file to read from */
if ((c=getc(fp))!=EOF && c!='\n') {
ungetc(c,fp); loc=buffer; err_print("! Input line too long");
@.Input line too long@>
- }
- if (c==EOF && limit==buffer) return(0); /* there was nothing after
+ }
+ if (c==EOF && limit==buffer) return false; /* there was nothing after
the last newline */
- return(1);
+ return true;
}
+@ @<Predecl...@>=@+static boolean input_ln(FILE *);
+
@ Now comes the problem of deciding which file to read from next.
Recall that the actual text that \.{CWEB} should process comes from two
streams: a |web_file|, which can contain possibly nested include
@@ -201,32 +191,22 @@ from the |change_file|.
The line number of each open file is also kept for error reporting and
for the benefit of \.{CTANGLE}.
-@f line x /* make |line| an unreserved word */
-@d max_include_depth 10 /* maximum number of source files open
- simultaneously, not counting the change file */
-@d max_file_name_length 60
-@d cur_file file[include_depth] /* current file */
-@d cur_file_name file_name[include_depth] /* current file name */
-@d cur_line line[include_depth] /* number of current line in current file */
-@d web_file file[0] /* main source file */
-@d web_file_name file_name[0] /* main source file name */
-
-@<Definitions...@>=
+@<Global var...@>=
int include_depth; /* current level of nesting */
FILE *file[max_include_depth]; /* stack of non-change files */
FILE *change_file; /* change file */
char file_name[max_include_depth][max_file_name_length];
/* stack of non-change file names */
char change_file_name[max_file_name_length]; /* name of change file */
-char alt_web_file_name[max_file_name_length]; /* alternate name to try */
+static char alt_web_file_name[max_file_name_length]; /* alternate name to try */
int line[max_include_depth]; /* number of current line in the stacked files */
int change_line; /* number of current line in change file */
int change_depth; /* where \.{@@y} originated during a change */
boolean input_has_ended; /* if there is no more input */
boolean changing; /* if the current line is from |change_file| */
-boolean web_file_open=0; /* if the web file is being read */
+boolean web_file_open=false; /* if the web file is being read */
-@ When |changing==0|, the next line of |change_file| is kept in
+@ When |changing==false|, the next line of |change_file| is kept in
|change_buffer|, for purposes of comparison with the next
line of |cur_file|. After the change file has been completely input, we
set |change_limit=change_buffer|,
@@ -234,41 +214,43 @@ so that no further matches will be made.
Here's a shorthand expression for inequality between the two lines:
-@d lines_dont_match (change_limit-change_buffer != limit-buffer ||
- strncmp(buffer, change_buffer, limit-buffer))
+@d lines_dont_match (change_limit-change_buffer != limit-buffer || @|
+ strncmp(buffer, change_buffer, (size_t)(limit-buffer)))
-@<Other...@>=
-char change_buffer[buf_size]; /* next line of |change_file| */
-char *change_limit; /* points to the last character in |change_buffer| */
+@<Global var...@>=
+static char change_buffer[buf_size]; /* next line of |change_file| */
+static char *change_limit; /* points to the last character in |change_buffer| */
@ Procedure |prime_the_change_buffer|
sets |change_buffer| in preparation for the next matching operation.
Since blank lines in the change file are not used for matching, we have
|(change_limit==change_buffer && !changing)| if and only if
the change file is exhausted. This procedure is called only when
-|changing| is 1; hence error messages will be reported correctly.
+|changing| is |true|; hence error messages will be reported correctly.
@c
-void
-prime_the_change_buffer()
+static void
+prime_the_change_buffer(void)
{
change_limit=change_buffer; /* this value is used if the change file ends */
- @<Skip over comment lines in the change file; |return| if end of file@>;
- @<Skip to the next nonblank line; |return| if end of file@>;
- @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>;
+ @<Skip over comment lines in the change file; |return| if end of file@>@;
+ @<Skip to the next nonblank line; |return| if end of file@>@;
+ @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>@;
}
+@ @<Predecl...@>=@+static void prime_the_change_buffer(void);
+
@ While looking for a line that begins with \.{@@x} in the change file, we
allow lines that begin with \.{@@}, as long as they don't begin with \.{@@y},
\.{@@z}, or \.{@@i} (which would probably mean that the change file is fouled up).
@<Skip over comment lines in the change file...@>=
-while(1) {
+while(true) {
change_line++;
if (!input_ln(change_file)) return;
if (limit<buffer+2) continue;
if (buffer[0]!='@@') continue;
- if (xisupper(buffer[1])) buffer[1]=tolower(buffer[1]);
+ if (xisupper(buffer[1])) buffer[1]=tolower((eight_bits)buffer[1]);
if (buffer[1]=='x') break;
if (buffer[1]=='y' || buffer[1]=='z' || buffer[1]=='i') {
loc=buffer+2;
@@ -291,12 +273,12 @@ do {
@ @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>=
{
- change_limit=change_buffer+(limit-buffer);
- strncpy(change_buffer,buffer,limit-buffer+1);
+ change_limit=change_buffer+(ptrdiff_t)(limit-buffer);
+ strncpy(change_buffer,buffer,(size_t)(limit-buffer+1));
}
@ The following procedure is used to see if the next change entry should
-go into effect; it is called only when |changing| is 0.
+go into effect; it is called only when |changing| is |false|.
The idea is to test whether or not the current
contents of |buffer| matches the current contents of |change_buffer|.
If not, there's nothing more to do; but if so, a change is called for:
@@ -306,7 +288,7 @@ prepares to read the next line from |change_file|.
When a match is found, the current section is marked as changed unless
the first line after the \.{@@x} and after the \.{@@y} both start with
-either |'@@*'| or |'@@ '| (possibly preceded by whitespace).
+either `\.{@@*}' or `\.{@@\ }' (possibly preceded by whitespace).
This procedure is called only when |buffer<limit|, i.e., when the
current line is nonempty.
@@ -318,36 +300,36 @@ current line is nonempty.
}
@c
-void
-check_change() /* switches to |change_file| if the buffers match */
+static void
+check_change(void) /* switches to |change_file| if the buffers match */
{
int n=0; /* the number of discrepancies found */
if (lines_dont_match) return;
- change_pending=0;
+ change_pending=false;
if (!changed_section[section_count]) {
- if_section_start_make_pending(1);
- if (!change_pending) changed_section[section_count]=1;
+ if_section_start_make_pending(true);
+ if (!change_pending) changed_section[section_count]=true;
}
- while (1) {
- changing=1; print_where=1; change_line++;
+ while (true) {
+ changing=true; print_where=true; change_line++;
if (!input_ln(change_file)) {
err_print("! Change file ended before @@y");
@.Change file ended...@>
- change_limit=change_buffer; changing=0;
+ change_limit=change_buffer; changing=false;
return;
}
if (limit>buffer+1 && buffer[0]=='@@') {
- char xyz_code=xisupper(buffer[1])? tolower(buffer[1]): buffer[1];
+ char xyz_code=xisupper(buffer[1])? tolower((eight_bits)buffer[1]): buffer[1];
@<If the current line starts with \.{@@y},
- report any discrepancies and |return|@>;
+ report any discrepancies and |return|@>@;
}
- @<Move |buffer| and |limit|...@>;
- changing=0; cur_line++;
+ @<Move |buffer| and |limit|...@>@;
+ changing=false; cur_line++;
while (!input_ln(cur_file)) { /* pop the stack or quit */
if (include_depth==0) {
err_print("! CWEB file ended during a change");
@.CWEB file ended...@>
- input_has_ended=1; return;
+ input_has_ended=true; return;
}
include_depth--; cur_line++;
}
@@ -355,6 +337,8 @@ check_change() /* switches to |change_file| if the buffers match */
}
}
+@ @<Predecl...@>=@+static void check_change(void);
+
@ @<If the current line starts with \.{@@y}...@>=
if (xyz_code=='x' || xyz_code=='z') {
loc=buffer+2; err_print("! Where is the matching @@y?");
@@ -377,14 +361,14 @@ phases one and two of \.{CWEAVE}.
@c
void
-reset_input()
+reset_input(void)
{
limit=buffer; loc=buffer+1; buffer[0]=' ';
- @<Open input files@>;
+ @<Open input files@>@;
include_depth=0; cur_line=0; change_line=0;
change_depth=include_depth;
changing=1; prime_the_change_buffer(); changing=!changing;
- limit=buffer; loc=buffer+1; buffer[0]=' '; input_has_ended=0;
+ limit=buffer; loc=buffer+1; buffer[0]=' '; input_has_ended=false;
}
@ The following code opens the input files.
@@ -398,7 +382,7 @@ if ((web_file=fopen(web_file_name,"r"))==NULL) {
}
@.Cannot open input file@>
@.Cannot open change file@>
-web_file_open=1;
+web_file_open=true;
if ((change_file=fopen(change_file_name,"r"))==NULL)
fatal("! Cannot open change file ", change_file_name);
@@ -412,28 +396,24 @@ If we've just changed from the |cur_file| to the |change_file|, or if
the |cur_file| has changed, we tell \.{CTANGLE} to print this
information in the \CEE/ file by means of the |print_where| flag.
-@d max_sections 2000 /* number of identifiers, strings, section names;
- must be less than 10240 */
-
-@<Defin...@>=
-typedef unsigned short sixteen_bits;
+@<Global var...@>=
sixteen_bits section_count; /* the current section number */
boolean changed_section[max_sections]; /* is the section changed? */
boolean change_pending; /* if the current change is not yet recorded in
|changed_section[section_count]| */
-boolean print_where=0; /* should \.{CTANGLE} print line and file info? */
+boolean print_where=false; /* should \.{CTANGLE} print line and file info? */
@ @c
-int get_line() /* inputs the next line */
+boolean get_line(void) /* inputs the next line */
{
restart:
if (changing && include_depth==change_depth)
- @<Read from |change_file| and maybe turn off |changing|@>;
+ @<Read from |change_file| and maybe turn off |changing|@>@;
if (! changing || include_depth>change_depth) {
- @<Read from |cur_file| and maybe turn on |changing|@>;
+ @<Read from |cur_file| and maybe turn on |changing|@>@;
if (changing && include_depth==change_depth) goto restart;
}
- if (input_has_ended) return 0;
+ if (input_has_ended) return false;
loc=buffer; *limit=' ';
if (buffer[0]=='@@' && (buffer[1]=='i' || buffer[1]=='I')) {
loc=buffer+2; *limit='"';
@@ -449,9 +429,9 @@ int get_line() /* inputs the next line */
goto restart;
}
include_depth++; /* push input stack */
- @<Try to open include file, abort push if unsuccessful, go to |restart|@>;
+ @<Try to open include file, abort push if unsuccessful, go to |restart|@>@;
}
- return 1;
+ return true;
}
@ When an \.{@@i} line is found in the |cur_file|, we must temporarily
@@ -468,10 +448,7 @@ The remainder of the \.{@@i} line after the file name is ignored.
@d too_long() {include_depth--;
err_print("! Include file name too long"); goto restart;}
-@<Include...@>=
-#include <stdlib.h> /* declaration of |getenv| and |exit| */
-
-@ @<Try to open...@>= {
+@.CWEBINPUTS@>@<Try to open...@>= {
char temp_file_name[max_file_name_length];
char *cur_file_name_end=cur_file_name+max_file_name_length-1;
char *k=cur_file_name, *kk;
@@ -487,7 +464,7 @@ The remainder of the \.{@@i} line after the file name is ignored.
@.Include file name ...@>
*k='\0';
if ((cur_file=fopen(cur_file_name,"r"))!=NULL) {
- cur_line=0; print_where=1;
+ cur_line=0; print_where=true;
goto restart; /* success */
}
kk=getenv("CWEBINPUTS");
@@ -510,7 +487,7 @@ The remainder of the \.{@@i} line after the file name is ignored.
strcpy(cur_file_name,temp_file_name);
cur_file_name[l]='/'; /* \UNIX/ pathname separator */
if ((cur_file=fopen(cur_file_name,"r"))!=NULL) {
- cur_line=0; print_where=1;
+ cur_line=0; print_where=true;
goto restart; /* success */
}
}
@@ -520,8 +497,8 @@ The remainder of the \.{@@i} line after the file name is ignored.
@ @<Read from |cur_file|...@>= {
cur_line++;
while (!input_ln(cur_file)) { /* pop the stack or quit */
- print_where=1;
- if (include_depth==0) {input_has_ended=1; break;}
+ print_where=true;
+ if (include_depth==0) {input_has_ended=true; break;}
else {
fclose(cur_file); include_depth--;
if (changing && include_depth==change_depth) break;
@@ -543,21 +520,21 @@ The remainder of the \.{@@i} line after the file name is ignored.
}
if (limit>buffer) { /* check if the change has ended */
if (change_pending) {
- if_section_start_make_pending(0);
+ if_section_start_make_pending(false);
if (change_pending) {
- changed_section[section_count]=1; change_pending=0;
+ changed_section[section_count]=true; change_pending=false;
}
}
*limit=' ';
if (buffer[0]=='@@') {
- if (xisupper(buffer[1])) buffer[1]=tolower(buffer[1]);
+ if (xisupper(buffer[1])) buffer[1]=tolower((eight_bits)buffer[1]);
if (buffer[1]=='x' || buffer[1]=='y') {
loc=buffer+2;
err_print("! Where is the matching @@z?");
@.Where is the match...@>
}
else if (buffer[1]=='z') {
- prime_the_change_buffer(); changing=!changing; print_where=1;
+ prime_the_change_buffer(); changing=!changing; print_where=true;
}
}
}
@@ -568,11 +545,11 @@ had a line that didn't match any relevant line in |web_file|.
@c
void
-check_complete(){
- if (change_limit!=change_buffer) { /* |changing| is 0 */
- strncpy(buffer,change_buffer,change_limit-change_buffer+1);
- limit=buffer+(int)(change_limit-change_buffer);
- changing=1; change_depth=include_depth; loc=buffer;
+check_complete(void) {
+ if (change_limit!=change_buffer) { /* |changing| is |false| */
+ strncpy(buffer,change_buffer,(size_t)(change_limit-change_buffer+1));
+ limit=buffer+(ptrdiff_t)(change_limit-change_buffer);
+ changing=true; change_depth=include_depth; loc=buffer;
err_print("! Change file entry did not match");
@.Change file entry did not match@>
}
@@ -584,52 +561,58 @@ other strings in a large array of |char|s, called |byte_mem|.
Information about the names is kept in the array |name_dir|, whose
elements are structures of type |name_info|, containing a pointer into
the |byte_mem| array (the address where the name begins) and other data.
-A |name_pointer| variable is a pointer into |name_dir|.
-
-@d max_bytes 90000 /* the number of bytes in identifiers,
- index entries, and section names; must be less than $2^{24}$ */
-@d max_names 4000 /* number of identifiers, strings, section names;
- must be less than 10240 */
-
-@<Definitions that...@>=
-typedef struct name_info {
- char *byte_start; /* beginning of the name in |byte_mem| */
- @<More elements of |name_info| structure@>@;
-} name_info; /* contains information about an identifier or section name */
-typedef name_info *name_pointer; /* pointer into array of |name_info|s */
+A |name_pointer| variable is a pointer into |name_dir|. You find the
+complete layout of |name_info| in the interface sections above.
+
+The actual sequence of characters in the name pointed to by a |name_pointer
+p| appears in positions |p->byte_start| to |(p+1)->byte_start-1|, inclusive.
+
+The names of identifiers are found by computing a hash address |h| and
+then looking at strings of bytes signified by the |name_pointer|s
+|hash[h]|, |hash[h]->link|, |hash[h]->link->link|, \dots,
+until either finding the desired name or encountering the null pointer.
+
+The names of sections are stored in |byte_mem| together
+with the identifier names, but a hash table is not used for them because
+\.{CTANGLE} needs to be able to recognize a section name when given a prefix of
+that name. A conventional binary search tree is used to retrieve section names,
+with fields called |llink| and |rlink| (where |llink| takes the place
+of |link|). The root of this tree is stored in |name_dir->rlink|;
+this will be the only information in |name_dir[0]|.
+
+Since the space used by |rlink| has a different function for
+identifiers than for section names, we declare it as a |union|.
+
+The last component of |name_info| is different for \.{CTANGLE} and
+\.{CWEAVE}. In \.{CTANGLE}, if |p| is a pointer to a section name,
+|p->equiv| is a pointer to its replacement text, an element of the
+array |text_info|. In \.{CWEAVE}, on the other hand, if
+|p| points to an identifier, |p->xref| is a pointer to its
+list of cross-references, an element of the array |xmem|. The make-up
+of |text_info| and |xmem| is discussed in the \.{CTANGLE} and \.{CWEAVE}
+source files, respectively; here we just declare a common field
+|equiv_or_xref| as a pointer to |void|.
+
+@<Global var...@>=
char byte_mem[max_bytes]; /* characters of names */
char *byte_mem_end = byte_mem+max_bytes-1; /* end of |byte_mem| */
name_info name_dir[max_names]; /* information about names */
name_pointer name_dir_end = name_dir+max_names-1; /* end of |name_dir| */
-@ The actual sequence of characters in the name pointed to by a |name_pointer
-p| appears in positions |p->byte_start| to |(p+1)->byte_start-1|, inclusive.
-The |print_id| macro prints this text on the user's terminal.
-
-@d length(c) (c+1)->byte_start-(c)->byte_start /* the length of a name */
-@d print_id(c) term_write((c)->byte_start,length((c))) /* print identifier */
-
@ The first unused position in |byte_mem| and |name_dir| is
kept in |byte_ptr| and |name_ptr|, respectively. Thus we
usually have |name_ptr->byte_start==byte_ptr|, and certainly
we want to keep |name_ptr<=name_dir_end| and |byte_ptr<=byte_mem_end|.
-@<Defini...@>=
-name_pointer name_ptr; /* first unused position in |name_dir| */
+@<Global var...@>=
char *byte_ptr; /* first unused position in |byte_mem| */
+name_pointer name_ptr; /* first unused position in |name_dir| */
@ @<Init...@>=
name_dir->byte_start=byte_ptr=byte_mem; /* position zero in both arrays */
name_ptr=name_dir+1; /* |name_dir[0]| will be used only for error recovery */
name_ptr->byte_start=byte_mem; /* this makes name 0 of length zero */
-
-@ The names of identifiers are found by computing a hash address |h| and
-then looking at strings of bytes signified by the |name_pointer|s
-|hash[h]|, |hash[h]->link|, |hash[h]->link->link|, \dots,
-until either finding the desired name or encountering the null pointer.
-
-@<More elements of |name...@>=
-struct name_info *link;
+root=NULL; /* the binary search tree starts out with nothing in it */
@ The hash table itself
consists of |hash_size| entries of type |name_pointer|, and is
@@ -639,17 +622,13 @@ function |names_match|, which is slightly different in
\.{CWEAVE} and \.{CTANGLE}. If there is no match for the identifier,
it is inserted into the table.
-@d hash_size 353 /* should be prime */
+@d hash_size 8501 /* should be prime */
-@<Defini...@>=
-typedef name_pointer *hash_pointer;
+@<Global var...@>=
name_pointer hash[hash_size]; /* heads of hash lists */
hash_pointer hash_end = hash+hash_size-1; /* end of |hash| */
hash_pointer h; /* index into hash-head array */
-@ @<Predec...@>=
-extern int names_match();
-
@ Initially all the hash lists are empty.
@<Init...@>=
@@ -659,21 +638,21 @@ for (h=hash; h<=hash_end; *h++=NULL) ;
@c
name_pointer
-id_lookup(first,last,t) /* looks up a string in the identifier table */
-char *first; /* first character of string */
-char *last; /* last character of string plus one */
-char t; /* the |ilk|; used by \.{CWEAVE} only */
+id_lookup(@t\1\1@> /* looks up a string in the identifier table */
+const char *first, /* first character of string */
+const char *last, /* last character of string plus one */
+char t@t\2\2@>) /* the |ilk|; used by \.{CWEAVE} only */
{
- char *i=first; /* position in |buffer| */
+ const char *i=first; /* position in |buffer| */
int h; /* hash code */
int l; /* length of the given identifier */
name_pointer p; /* where the identifier is being sought */
if (last==NULL) for (last=first; *last!='\0'; last++);
- l=last-first; /* compute the length */
- @<Compute the hash code |h|@>;
- @<Compute the name location |p|@>;
- if (p==name_ptr) @<Enter a new name into the table at position |p|@>;
- return(p);
+ l=(int)(last-first); /* compute the length */
+ @<Compute the hash code |h|@>@;
+ @<Compute the name location |p|@>@;
+ if (p==name_ptr) @<Enter a new name into the table at position |p|@>@;
+ return p;
}
@ A simple hash code is used: If the sequence of
@@ -681,8 +660,8 @@ character codes is $c_1c_2\ldots c_n$, its hash value will be
$$(2^{n-1}c_1+2^{n-2}c_2+\cdots+c_n)\,\bmod\,|hash_size|.$$
@<Compute the hash...@>=
-h=(unsigned char)*i;
-while (++i<last) h=(h+h+(int)((unsigned char)*i)) % hash_size;
+h=(eight_bits)*i;
+while (++i<last) h=(h+h+(int)((eight_bits)*i)) % hash_size;
@^high-bit character handling@>
@ If the identifier is new, it will be placed in position |p=name_ptr|,
@@ -699,44 +678,14 @@ if (p==NULL) {
@ The information associated with a new identifier must be initialized
in a slightly different way in \.{CWEAVE} than in \.{CTANGLE}; hence the
|init_p| procedure.
-
-@<Pred...@>=
-void init_p();
-
-@ @<Enter a new name...@>= {
+@<Enter a new name...@>= {
if (byte_ptr+l>byte_mem_end) overflow("byte memory");
if (name_ptr>=name_dir_end) overflow("name");
strncpy(byte_ptr,first,l);
(++name_ptr)->byte_start=byte_ptr+=l;
- if (program==cweave) init_p(p,t);
+ init_p(p,t);
}
-@ The names of sections are stored in |byte_mem| together
-with the identifier names, but a hash table is not used for them because
-\.{CTANGLE} needs to be able to recognize a section name when given a prefix of
-that name. A conventional binary search tree is used to retrieve section names,
-with fields called |llink| and |rlink| (where |llink| takes the place
-of |link|). The root of this tree is stored in |name_dir->rlink|;
-this will be the only information in |name_dir[0]|.
-
-Since the space used by |rlink| has a different function for
-identifiers than for section names, we declare it as a |union|.
-
-@d llink link /* left link in binary search tree for section names */
-@d rlink dummy.Rlink /* right link in binary search tree for section names */
-@d root name_dir->rlink /* the root of the binary search tree
- for section names */
-
-@<More elements of |name...@>=
-union {
- struct name_info *Rlink; /* right link in binary search tree for section
- names */
- char Ilk; /* used by identifiers in \.{CWEAVE} only */
-} dummy;
-
-@ @<Init...@>=
-root=NULL; /* the binary search tree starts out with nothing in it */
-
@ If |p| is a |name_pointer| variable, as we have seen,
|p->byte_start| is the beginning of the area where the name
corresponding to |p| is stored. However, if |p| refers to a section
@@ -756,24 +705,24 @@ to additional chunks in the same way. Null links are represented by
|name_dir|.
@d first_chunk(p) ((p)->byte_start+2)
-@d prefix_length(p) (int)((unsigned char)*((p)->byte_start)*256 +
- (unsigned char)*((p)->byte_start+1))
+@d prefix_length(p) (int)((eight_bits)*((p)->byte_start)*256 +
+ (eight_bits)*((p)->byte_start+1))
@d set_prefix_length(p,m) (*((p)->byte_start)=(m)/256,
*((p)->byte_start+1)=(m)%256)
@c
void
-print_section_name(p)
-name_pointer p;
+print_section_name(
+name_pointer p)
{
char *ss, *s = first_chunk(p);
name_pointer q = p+1;
while (p!=name_dir) {
ss = (p+1)->byte_start-1;
if (*ss==' ' && ss>=s) {
- term_write(s,ss-s); p=q->link; q=p;
+ term_write(s,(size_t)(ss-s)); p=q->link; q=p;
} else {
- term_write(s,ss+1-s); p=name_dir; q=NULL;
+ term_write(s,(size_t)(ss+1-s)); p=name_dir; q=NULL;
}
s = p->byte_start;
}
@@ -782,9 +731,9 @@ name_pointer p;
@ @c
void
-sprint_section_name(dest,p)
- char*dest;
- name_pointer p;
+sprint_section_name(
+ char *dest,
+ name_pointer p)
{
char *ss, *s = first_chunk(p);
name_pointer q = p+1;
@@ -795,7 +744,7 @@ sprint_section_name(dest,p)
} else {
ss++; p=name_dir;
}
- strncpy(dest,s,ss-s), dest+=ss-s;
+ strncpy(dest,s,(size_t)(ss-s)), dest+=ss-s;
s = p->byte_start;
}
*dest='\0';
@@ -803,8 +752,8 @@ sprint_section_name(dest,p)
@ @c
void
-print_prefix_name(p)
-name_pointer p;
+print_prefix_name(
+name_pointer p)
{
char *s = first_chunk(p);
int l = prefix_length(p);
@@ -822,10 +771,17 @@ are null-terminated, and we keep an eye open for prefixes and extensions.
@d prefix 3 /* the first name is a proper prefix of the second */
@d extension 4 /* the first name is a proper extension of the second */
-@c
-int web_strcmp(j,j_len,k,k_len) /* fuller comparison than |strcmp| */
- char *j, *k; /* beginning of first and second strings */
- int j_len, k_len; /* length of strings */
+@<Predecl...@>=
+static int web_strcmp(char *,int,char *,int);@/
+static name_pointer add_section_name(name_pointer,int,char *,char *,int);@/
+static void extend_section_name(name_pointer,char *,char *,int);
+
+@ @c
+static int web_strcmp(@t\1\1@> /* fuller comparison than |strcmp| */
+ char *j, /* beginning of first string */
+ int j_len, /* length of first string */
+ char *k, /* beginning of second string */
+ int k_len@t\2\2@>) /* length of second string */
{
char *j1=j+j_len, *k1=k+k_len;
while (k<k1 && j<j1 && *j==*k) k++, j++;
@@ -849,21 +805,18 @@ differently in \.{CWEAVE} and \.{CTANGLE}; hence the
|init_node| procedure, which is defined differently in \.{cweave.w}
and \.{ctangle.w}.
-@<Prede...@>=
-extern void init_node();
-
-@ @c
-name_pointer
-add_section_name(par,c,first,last,ispref) /* install a new node in the tree */
-name_pointer par; /* parent of new node */
-int c; /* right or left? */
-char *first; /* first character of section name */
-char *last; /* last character of section name, plus one */
-int ispref; /* are we adding a prefix or a full name? */
+@c
+static name_pointer
+add_section_name(@t\1\1@> /* install a new node in the tree */
+name_pointer par, /* parent of new node */
+int c, /* right or left? */
+char *first, /* first character of section name */
+char *last, /* last character of section name, plus one */
+int ispref@t\2\2@>) /* are we adding a prefix or a full name? */
{
name_pointer p=name_ptr; /* new node */
char *s=first_chunk(p);
- int name_len=last-first+ispref; /* length of section name */
+ int name_len=(int)(last-first)+ispref; /* length of section name */
if (s+name_len>byte_mem_end) overflow("byte memory");
if (name_ptr+1>=name_dir_end) overflow("name");
(++name_ptr)->byte_start=byte_ptr=s+name_len;
@@ -882,16 +835,16 @@ int ispref; /* are we adding a prefix or a full name? */
}
@ @c
-void
-extend_section_name(p,first,last,ispref)
-name_pointer p; /* name to be extended */
-char *first; /* beginning of extension text */
-char *last; /* one beyond end of extension text */
-int ispref; /* are we adding a prefix or a full name? */
+static void
+extend_section_name(@t\1\1@>
+name_pointer p, /* name to be extended */
+char *first, /* beginning of extension text */
+char *last, /* one beyond end of extension text */
+int ispref@t\2\2@>) /* are we adding a prefix or a full name? */
{
char *s;
name_pointer q=p+1;
- int name_len=last-first+ispref;
+ int name_len=(int)(last-first)+ispref;
if (name_ptr>=name_dir_end) overflow("name");
while (q->link!=name_dir) q=q->link;
q->link=name_ptr;
@@ -911,9 +864,9 @@ exactly equals or is a prefix or extension of a name in the tree.
@c
name_pointer
-section_lookup(first,last,ispref) /* find or install section name in tree */
-char *first, *last; /* first and last characters of new name */
-int ispref; /* is the new name a prefix or a full name? */
+section_lookup(@t\1\1@> /* find or install section name in tree */
+char *first,char *last, /* first and last characters of new name */
+int ispref@t\2\2@>) /* is the new name a prefix or a full name? */
{
int c=0; /* comparison between two names; initialized so some compilers won't complain */
name_pointer p=root; /* current node of the search tree */
@@ -921,11 +874,11 @@ int ispref; /* is the new name a prefix or a full name? */
name_pointer r=NULL; /* where a match has been found */
name_pointer par=NULL; /* parent of |p|, if |r| is |NULL|;
otherwise parent of |r| */
- int name_len=last-first+1;
+ int name_len=(int)(last-first)+1;
@<Look for matches for new name among shortest prefixes, complaining
- if more than one is found@>;
- @<If no match found, add new name to tree@>;
- @<If one match found, check for compatibility and return match@>;
+ if more than one is found@>@;
+ @<If no match found, add new name to tree@>@;
+ @<If one match found, check for compatibility and return match@>@;
}
@ A legal new name matches an existing section name if and only if it
@@ -942,10 +895,10 @@ while (p) { /* compare shortest prefix of |p| with new name */
p=(c==less?p->llink:p->rlink);
} else { /* new name matches |p| */
if (r!=NULL) { /* and also |r|: illegal */
- printf("\n! Ambiguous prefix: matches <");
+ fputs("\n! Ambiguous prefix: matches <",stdout);
@.Ambiguous prefix ... @>
print_prefix_name(p);
- printf(">\n and <");
+ fputs(">\n and <",stdout);
print_prefix_name(r);
err_print(">");
return name_dir; /* the unsection */
@@ -971,7 +924,7 @@ switch(section_name_cmp(&first,name_len,r)) {
/* compare all of |r| with new name */
case prefix:
if (!ispref) {
- printf("\n! New name is a prefix of <");
+ fputs("\n! New name is a prefix of <",stdout);
@.New name is a prefix...@>
print_section_name(r);
err_print(">");
@@ -983,16 +936,16 @@ switch(section_name_cmp(&first,name_len,r)) {
extend_section_name(r,first,last+1,ispref);
return r;
case bad_extension:
- printf("\n! New name extends <");
+ fputs("\n! New name extends <",stdout);
@.New name extends...@>
print_section_name(r);
err_print(">");
return r;
default: /* no match: illegal */
- printf("\n! Section name incompatible with <");
+ fputs("\n! Section name incompatible with <",stdout);
@.Section name incompatible...@>
print_prefix_name(r);
- printf(">,\n which abbreviates <");
+ fputs(">,\n which abbreviates <",stdout);
print_section_name(r);
err_print(">");
return r;
@@ -1014,53 +967,39 @@ us to regard \.{@@<foo...@@>} as an ``extension'' of itself.
@d bad_extension 5
-@<Predec...@>=
-int section_name_cmp();
-
-@ @c
-int section_name_cmp(pfirst,len,r)
-char **pfirst; /* pointer to beginning of comparison string */
-int len; /* length of string */
-name_pointer r; /* section name being compared */
+@c
+static int section_name_cmp(@t\1\1@>
+char **pfirst, /* pointer to beginning of comparison string */
+int len, /* length of string */
+name_pointer r@t\2\2@>) /* section name being compared */
{
char *first=*pfirst; /* beginning of comparison string */
name_pointer q=r+1; /* access to subsequent chunks */
char *ss, *s=first_chunk(r);
int c; /* comparison */
int ispref; /* is chunk |r| a prefix? */
- while (1) {
+ while (true) {
ss=(r+1)->byte_start-1;
if (*ss==' ' && ss>=r->byte_start) ispref=1,q=q->link;
else ispref=0,ss++,q=name_dir;
switch(c=web_strcmp(first,len,s,ss-s)) {
case equal: if (q==name_dir)
if (ispref) {
- *pfirst=first+(ss-s);
+ *pfirst=first+(ptrdiff_t)(ss-s);
return extension; /* null extension */
} else return equal;
else return (q->byte_start==(q+1)->byte_start)? equal: prefix;
case extension:
if (!ispref) return bad_extension;
first += ss-s;
- if (q!=name_dir) {len -= ss-s; s=q->byte_start; r=q; continue;}
+ if (q!=name_dir) {len -= (int)(ss-s); s=q->byte_start; r=q; continue;}
*pfirst=first; return extension;
default: return c;
}
}
}
-@ The last component of |name_info| is different for \.{CTANGLE} and
-\.{CWEAVE}. In \.{CTANGLE}, if |p| is a pointer to a section name,
-|p->equiv| is a pointer to its replacement text, an element of the
-array |text_info|. In \.{CWEAVE}, on the other hand, if
-|p| points to an identifier, |p->xref| is a pointer to its
-list of cross-references, an element of the array |xmem|. The make-up
-of |text_info| and |xmem| is discussed in the \.{CTANGLE} and \.{CWEAVE}
-source files, respectively; here we just declare a common field
-|equiv_or_xref| as a pointer to a |char|.
-
-@<More elements of |name...@>=
-char *equiv_or_xref; /* info corresponding to names */
+@ @<Predec...@>=@+static int section_name_cmp(char **,int,name_pointer);
@** Reporting errors to the user.
A global variable called |history| will contain one of four values
@@ -1072,14 +1011,7 @@ terminated abnormally. The value of |history| does not influence the
behavior of the program; it is simply computed for the convenience
of systems that might want to use such information.
-@d spotless 0 /* |history| value for normal jobs */
-@d harmless_message 1 /* |history| value when non-serious info was printed */
-@d error_message 2 /* |history| value when an error was noted */
-@d fatal_message 3 /* |history| value when we had to stop prematurely */
-@d mark_harmless {if (history==spotless) history=harmless_message;}
-@d mark_error history=error_message
-
-@<Definit...@>=
+@<Global var...@>=
int history=spotless; /* indicates how bad this run was */
@ The command `|err_print("! Error message")|' will report a syntax error to
@@ -1089,17 +1021,14 @@ Note that no period follows the error message, since the error routine
will automatically supply a period. A newline is automatically supplied
if the string begins with |"!"|.
-@<Predecl...@>=
-void err_print();
-
-@ @c
+@c
void
-err_print(s) /* prints `\..' and location of error message */
-char *s;
+err_print(@t\1\1@> /* prints `\..' and location of error message */
+const char *s@t\2\2@>)
{
char *k,*l; /* pointers into |buffer| */
printf(*s=='!'? "\n%s" : "%s",s);
- if(web_file_open) @<Print error location based on input buffer@>;
+ if(web_file_open) @<Print error location based on input buffer@>@;
update_terminal; mark_error;
}
@@ -1135,52 +1064,46 @@ up and quit as graciously as possible. This is done by calling the
function |wrap_up| at the end of the code.
\.{CTANGLE} and \.{CWEAVE} have their own notions about how to
-print the job statistics.
+print the job statistics. See the function(s) |print_stats| in the
+interface above and in the index.
-@<Prede...@>=
-int wrap_up();
-extern void print_stats();
-
-@ Some implementations may wish to pass the |history| value to the
+Some implementations may wish to pass the |history| value to the
operating system so that it can be used to govern whether or not other
programs are started. Here, for instance, we pass the operating system
a status of 0 if and only if only harmless messages were printed.
@^system dependencies@>
@c
-int wrap_up() {
- putchar('\n');
+int wrap_up(void) {
+ if (show_progress) new_line;
if (show_stats)
print_stats(); /* print statistics about memory usage */
- @<Print the job |history|@>;
- if (history > harmless_message) return(1);
- else return(0);
+ @<Print the job |history|@>@;
+ if (history > harmless_message) return EXIT_FAILURE;
+ else return EXIT_SUCCESS;
}
@ @<Print the job |history|@>=
switch (history) {
-case spotless: if (show_happiness) printf("(No errors were found.)\n"); break;
+case spotless: if (show_happiness) puts("(No errors were found.)"); break;
case harmless_message:
- printf("(Did you see the warning message above?)\n"); break;
+ puts("(Did you see the warning message above?)"); break;
case error_message:
- printf("(Pardon me, but I think I spotted something wrong.)\n"); break;
-case fatal_message: printf("(That was a fatal error, my friend.)\n");
+ puts("(Pardon me, but I think I spotted something wrong.)"); break;
+case fatal_message: puts("(That was a fatal error, my friend.)");
} /* there are no other cases */
@ When there is no way to recover from an error, the |fatal| subroutine is
invoked. This happens most often when |overflow| occurs.
-@<Predec...@>=
-void fatal(), overflow();
-
-@ The two parameters to |fatal| are strings that are essentially
+The two parameters to |fatal| are strings that are essentially
concatenated to print the final error message.
@c void
-fatal(s,t)
- char *s,*t;
+fatal(
+ const char *s,const char *t)
{
- if (*s) printf(s);
+ if (*s) err_print(s);
err_print(t);
history=fatal_message; exit(wrap_up());
}
@@ -1188,8 +1111,8 @@ fatal(s,t)
@ An overflow stop occurs if \.{CWEB}'s tables aren't large enough.
@c void
-overflow(t)
- char *t;
+overflow(
+ const char *t)
{
printf("\n! Sorry, %s capacity exceeded",t); fatal("","");
}
@@ -1200,9 +1123,6 @@ and \.{CWEB} prints an error message that is really for the \.{CWEB}
maintenance person, not the user. In such cases the program says
|confusion("indication of where we are")|.
-@d confusion(s) fatal("! This can't happen: ",s)
-@.This can't happen@>
-
@** Command line arguments.
The user calls \.{CWEAVE} and \.{CTANGLE} with arguments on the command line.
These are either file names or flags to be turned off (beginning with |"-"|)
@@ -1212,12 +1132,7 @@ of the program. The various file name variables contain strings with
the names of those files. Most of the 128 flags are undefined but available
for future extensions.
-@d show_banner flags['b'] /* should the banner line be printed? */
-@d show_progress flags['p'] /* should progress reports be printed? */
-@d show_stats flags['s'] /* should statistics be printed at end of run? */
-@d show_happiness flags['h'] /* should lack of errors be announced? */
-
-@<Defin...@>=
+@<Global var...@>=
int argc; /* copy of |ac| parameter to |main| */
char **argv; /* copy of |av| parameter to |main| */
char C_file_name[max_file_name_length]; /* name of |C_file| */
@@ -1226,12 +1141,13 @@ char idx_file_name[max_file_name_length]; /* name of |idx_file| */
char scn_file_name[max_file_name_length]; /* name of |scn_file| */
boolean flags[128]; /* an option for each 7-bit code */
-@ The |flags| will be initially zero. Some of them are set to~1 before
-scanning the arguments; if additional flags are 1 by default they
+@ The |flags| will be initially |false|. Some of them are set to~|true| before
+scanning the arguments; if additional flags are |true| by default they
should be set before calling |common_init|.
@<Set the default options common to \.{CTANGLE} and \.{CWEAVE}@>=
-show_banner=show_happiness=show_progress=1;
+show_banner=show_happiness=show_progress=make_xrefs=true;@/
+show_stats=false;
@ We now must look at the command line arguments and set the file names
accordingly. At least one file name must be present: the \.{CWEB}
@@ -1248,20 +1164,17 @@ when no changes are desired.
If there's a third file name, it will be the output file.
-@<Pred...@>=
-void scan_args();
-
-@ @c
-void
-scan_args()
+@c
+static void
+scan_args(void)
{
char *dot_pos; /* position of |'.'| in the argument */
char *name_pos; /* file name beginning, sans directory */
register char *s; /* register for scanning strings */
- boolean found_web=0,found_change=0,found_out=0;
+ boolean found_web=false,found_change=false,found_out=false;
/* have these names been seen? */
- boolean flag_change;
+ strcpy(change_file_name,"/dev/null");
while (--argc > 0) {
if ((**(++argv)=='-'||**argv=='+')&&*(*argv+1)) @<Handle flag argument@>@;
else {
@@ -1275,13 +1188,14 @@ scan_args()
|web_file_name|, |tex_file_name|, and |C_file_name|@>@;
else if (!found_change) @<Make |change_file_name| from |fname|@>@;
else if (!found_out) @<Override |tex_file_name| and |C_file_name|@>@;
- else @<Print usage error message and quit@>;
+ else @<Print usage error message and quit@>@;
}
}
- if (!found_web) @<Print usage error message and quit@>;
- if (found_change<=0) strcpy(change_file_name,"/dev/null");
+ if (!found_web) @<Print usage error message and quit@>@;
}
+@ @<Pred...@>=@+static void scan_args(void);
+
@ We use all of |*argv| for the |web_file_name| if there is a |'.'| in it,
otherwise we add |".w"|. If this file can't be opened, we prepare an
|alt_web_file_name| by adding |"web"| after the dot.
@@ -1292,7 +1206,7 @@ after the dot. We must check that there is enough room in
@<Make |web_file_name|...@>=
{
if (s-*argv > max_file_name_length-5)
- @<Complain about argument length@>;
+ @<Complain about argument length@>@;
if (dot_pos==NULL)
sprintf(web_file_name,"%s.w",*argv);
else {
@@ -1304,26 +1218,25 @@ after the dot. We must check that there is enough room in
sprintf(idx_file_name,"%s.idx",name_pos);
sprintf(scn_file_name,"%s.scn",name_pos);
sprintf(C_file_name,"%s.c",name_pos);
- found_web=1;
+ found_web=true;
}
@ @<Make |change_file_name|...@>=
{
- if (strcmp(*argv,"-")==0) found_change=-1;
- else {
+ if (strcmp(*argv,"-")!=0) {
if (s-*argv > max_file_name_length-4)
- @<Complain about argument length@>;
+ @<Complain about argument length@>@;
if (dot_pos==NULL)
sprintf(change_file_name,"%s.ch",*argv);
else strcpy(change_file_name,*argv);
- found_change=1;
}
+ found_change=true;
}
@ @<Override...@>=
{
if (s-*argv > max_file_name_length-5)
- @<Complain about argument length@>;
+ @<Complain about argument length@>@;
if (dot_pos==NULL) {
sprintf(tex_file_name,"%s.tex",*argv);
sprintf(idx_file_name,"%s.idx",*argv);
@@ -1332,21 +1245,20 @@ after the dot. We must check that there is enough room in
} else {
strcpy(tex_file_name,*argv);
strcpy(C_file_name,*argv);
- if (flags['x']) { /* indexes will be generated */
+ if (make_xrefs) { /* indexes will be generated */
*dot_pos=0;
sprintf(idx_file_name,"%s.idx",*argv);
sprintf(scn_file_name,"%s.scn",*argv);
}
}
- found_out=1;
+ found_out=true;
}
-@ @<Handle flag...@>=
+@ @d flag_change (**argv!='-')
+@<Handle flag...@>=
{
- if (**argv=='-') flag_change=0;
- else flag_change=1;
for(dot_pos=*argv+1;*dot_pos>'\0';dot_pos++)
- flags[*dot_pos]=flag_change;
+ flags[(eight_bits)*dot_pos]=flag_change;
}
@ @<Print usage error message and quit@>=
@@ -1367,7 +1279,7 @@ else fatal(
@** Output. Here is the code that opens the output file:
@^system dependencies@>
-@<Defin...@>=
+@<Global var...@>=
FILE *C_file; /* where output of \.{CTANGLE} goes */
FILE *tex_file; /* where output of \.{CWEAVE} goes */
FILE *idx_file; /* where index from \.{CWEAVE} goes */
@@ -1377,42 +1289,13 @@ FILE *active_file; /* currently active file for \.{CWEAVE} output */
@ @<Scan arguments and open output files@>=
scan_args();
if (program==ctangle) {
- if ((C_file=fopen(C_file_name,"w"))==NULL)
+ if ((C_file=fopen(C_file_name,"wb"))==NULL)
fatal("! Cannot open output file ", C_file_name);
@.Cannot open output file@>
}
else {
- if ((tex_file=fopen(tex_file_name,"w"))==NULL)
+ if ((tex_file=fopen(tex_file_name,"wb"))==NULL)
fatal("! Cannot open output file ", tex_file_name);
}
-@ The |update_terminal| procedure is called when we want
-to make sure that everything we have output to the terminal so far has
-actually left the computer's internal buffers and been sent.
-@^system dependencies@>
-
-@d update_terminal fflush(stdout) /* empty the terminal output buffer */
-
-@ Terminal output uses |putchar| and |putc| when we have to
-translate from \.{CWEB}'s code into the external character code,
-and |printf| when we just want to print strings.
-Several macros make other kinds of output convenient.
-@^system dependencies@>
-@d new_line putchar('\n') @d putxchar putchar
-@d term_write(a,b) fflush(stdout),fwrite(a,sizeof(char),b,stdout)
-@d C_printf(c,a) fprintf(C_file,c,a)
-@d C_putc(c) putc(c,C_file) /* isn't \CEE/ wonderfully consistent? */
-
-@ We predeclare several standard system functions here instead of including
-their system header files, because the names of the header files are not as
-standard as the names of the functions. (For example, some \CEE/ environments
-have \.{<string.h>} where others have \.{<strings.h>}.)
-
-@<Predecl...@>=
-extern int strlen(); /* length of string */
-extern int strcmp(); /* compare strings lexicographically */
-extern char* strcpy(); /* copy one string to another */
-extern int strncmp(); /* compare up to $n$ string characters */
-extern char* strncpy(); /* copy up to $n$ string characters */
-
@** Index.
diff --git a/web/c_cpp/cweb/ctang-bs.ch b/web/c_cpp/cweb/ctang-bs.ch
index c4062c4064..55cc27cd00 100644
--- a/web/c_cpp/cweb/ctang-bs.ch
+++ b/web/c_cpp/cweb/ctang-bs.ch
@@ -17,64 +17,17 @@ by using "huge" pointers.
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 3.64)\n"
+@d banner "This is CTANGLE (Version 4.2)"
@y
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 3.64pc/big)\n"
-@z
-
-
-@x Section 4.
-@ The following parameters were sufficient in the original \.{TANGLE} to
-handle \TEX/,
-so they should be sufficient for most applications of \.{CTANGLE}.
-If you change |max_bytes|, |max_names| or |hash_size| you should also
-change them in the file |"common.w"|.
-
-@d max_bytes 90000 /* the number of bytes in identifiers,
- index entries, and section names; used in |"common.w"| */
-@d max_toks 270000 /* number of bytes in compressed \CEE/ code */
-@d max_names 4000 /* number of identifiers, strings, section names;
- must be less than 10240; used in |"common.w"| */
-@d max_texts 2500 /* number of replacement texts, must be less than 10240 */
-@d hash_size 353 /* should be prime; used in |"common.w"| */
-@d longest_name 10000 /* section names shouldn't be longer than this */
-@d stack_size 50 /* number of simultaneous levels of macro expansion */
-@d buf_size 100 /* for \.{CWEAVE} and \.{CTANGLE} */
-@y
-@ The following parameters were sufficient in the original \.{TANGLE} to
-handle \TEX/,
-so they should be sufficient for most applications of \.{CTANGLE}.
-If you change |max_bytes|, |max_names| or |hash_size| you should also
-change them in the file |"common.w"|.
-
-(This is a modified version of \.{CTANGLE}, and in fact one of the parameters
-has been reduced in value. The parameter |max_toks|
-has been reduced from 270000 [which
-was sufficient to handle \TEX/] to
-170000, so that \.{CTANGLE}
-may be run on {\mc MSDOS}
-systems that are tight on memory. Consider, for
-instance, an 80286-based machine with several TSRs and drivers, trying
-to run \.{CTANGLE} from a makefile.)
-
-@d max_bytes 90000 /* the number of bytes in identifiers,
- index entries, and section names; used in |"common.w"| */
-@d max_toks 170000 /* number of bytes in compressed \CEE/ code */
-@d max_names 4000 /* number of identifiers, strings, section names;
- must be less than 10240; used in |"common.w"| */
-@d max_texts 2500 /* number of replacement texts, must be less than 10240 */
-@d hash_size 353 /* should be prime; used in |"common.w"| */
-@d longest_name 10000 /* section names shouldn't be longer than this */
-@d stack_size 50 /* number of simultaneous levels of macro expansion */
-@d buf_size 100 /* for \.{CWEAVE} and \.{CTANGLE} */
+@d banner "This is CTANGLE (Version 4.2pc/big)"
@z
@x Section 9.
-@d chunk_marker 0
+ for section names */
@<Common code...@>=
typedef struct name_info {
@@ -85,24 +38,21 @@ typedef struct name_info {
names */
char Ilk; /* used by identifiers in \.{CWEAVE} only */
} dummy;
- char *equiv_or_xref; /* info corresponding to names */
+ void *equiv_or_xref; /* info corresponding to names */
} name_info; /* contains information about an identifier or section name */
typedef name_info *name_pointer; /* pointer into array of \&{name\_info}s */
typedef name_pointer *hash_pointer;
extern char byte_mem[]; /* characters of names */
extern char *byte_mem_end; /* end of |byte_mem| */
+extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_info name_dir[]; /* information about names */
extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
-extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_pointer hash[]; /* heads of hash lists */
extern hash_pointer hash_end; /* end of |hash| */
extern hash_pointer h; /* index into hash-head array */
-extern name_pointer id_lookup(); /* looks up a string in the identifier table */
-extern name_pointer section_lookup(); /* finds section name */
-extern void print_section_name(), sprint_section_name();
@y
-@d chunk_marker 0
+ for section names */
@f huge extern
@@ -131,9 +81,49 @@ extern char huge* byte_ptr; /* first unused position in |byte_mem| */
extern name_pointer hash[]; /* heads of hash lists */
extern hash_pointer hash_end; /* end of |hash| */
extern hash_pointer h; /* index into hash-head array */
-extern name_pointer id_lookup(); /* looks up a string in the identifier table */
-extern name_pointer section_lookup(); /* finds section name */
-extern void print_section_name(), sprint_section_name();
+@z
+
+
+@x Section 17.
+@ The following parameters were sufficient in the original \.{WEB} to
+handle \TEX/, so they should be sufficient for most applications of
+\.{CWEB}.
+
+@d max_bytes 1000000 /* the number of bytes in identifiers,
+ index entries, and section names */
+@d max_toks 1000000 /* number of bytes in compressed \CEE/ code */
+@d max_names 10239 /* number of identifiers, strings, section names;
+ must be less than 10240 */
+@d max_sections 4000 /* greater than the total number of sections */
+@d max_texts 10239 /* number of replacement texts, must be less than 10240 */
+@d longest_name 10000 /* file and section names and section texts shouldn't be longer than this */
+@d stack_size 500 /* number of simultaneous levels of macro expansion */
+@d buf_size 1000 /* maximum length of input line, plus one */
+@y
+@ The following parameters were sufficient in the original \.{WEB} to
+handle \TEX/, so they should be sufficient for most applications of
+\.{CWEB}.
+
+(This is a modified version of \.{CTANGLE}, and in fact one of the parameters
+has been reduced in value. The parameter |max_toks|
+has been reduced from 270000 [which
+was sufficient to handle \TEX/] to
+170000, so that \.{CTANGLE}
+may be run on {\mc MSDOS}
+systems that are tight on memory. Consider, for
+instance, an 80286-based machine with several TSRs and drivers, trying
+to run \.{CTANGLE} from a makefile.)
+
+@d max_bytes 90000 /* the number of bytes in identifiers,
+ index entries, and section names */
+@d max_toks 170000 /* number of bytes in compressed \CEE/ code */
+@d max_names 4000 /* number of identifiers, strings, section names;
+ must be less than 10240 */
+@d max_sections 4000 /* greater than the total number of sections */
+@d max_texts 2500 /* number of replacement texts, must be less than 10240 */
+@d longest_name 10000 /* file and section names and section texts shouldn't be longer than this */
+@d stack_size 50 /* number of simultaneous levels of macro expansion */
+@d buf_size 100 /* for \.{CWEAVE} */
@z
@@ -151,13 +141,13 @@ typedef text *text_pointer;
@x Section 17.
-eight_bits tok_mem[max_toks];
-eight_bits *tok_mem_end=tok_mem+max_toks-1;
-eight_bits *tok_ptr; /* first unused position in |tok_mem| */
+static eight_bits tok_mem[max_toks];
+static eight_bits *tok_mem_end=tok_mem+max_toks-1;
+static eight_bits *tok_ptr; /* first unused position in |tok_mem| */
@y
-eight_bits huge tok_mem[max_toks];
-eight_bits huge* tok_mem_end;
-eight_bits huge* tok_ptr; /* first unused position in |tok_mem| */
+static eight_bits huge tok_mem[max_toks];
+static eight_bits huge* tok_mem_end;
+static eight_bits huge* tok_ptr; /* first unused position in |tok_mem| */
@z
@@ -190,8 +180,8 @@ text_ptr=text_info+1; text_ptr->tok_start=tok_mem;
@x Section 49.
-out_char(cur_char)
-eight_bits cur_char;
+out_char(
+eight_bits cur_char)
{
char *j, *k; /* pointer into |byte_mem| */
@y
diff --git a/web/c_cpp/cweb/ctang-pc.ch b/web/c_cpp/cweb/ctang-pc.ch
index 67f32fae0c..ddf281b3fc 100644
--- a/web/c_cpp/cweb/ctang-pc.ch
+++ b/web/c_cpp/cweb/ctang-pc.ch
@@ -9,16 +9,16 @@ that allows >64K arrays. If you need lots of bytes and toks, try the
alternate change files with -bs suffix instead of -pc.
@x section 1
-@d banner "This is CTANGLE (Version 3.64)\n"
+@d banner "This is CTANGLE (Version 4.2)"
@y
-@d banner "This is CTANGLE (Version 3.64pc)\n"
+@d banner "This is CTANGLE (Version 4.2pc)"
@z
@x section 4
-@d max_bytes 90000 /* the number of bytes in identifiers,
- index entries, and section names; used in |"common.w"| */
-@d max_toks 270000 /* number of bytes in compressed \CEE/ code */
+@d max_bytes 1000000 /* the number of bytes in identifiers,
+ index entries, and section names */
+@d max_toks 1000000 /* number of bytes in compressed \CEE/ code */
@y (note that CWEAVE itself needs only about 42K toks)
@d max_bytes (unsigned)60000 /* the number of bytes in identifiers,
- index entries, and section names; used in |"common.w"| */
+ index entries, and section names */
@d max_toks (unsigned)60000 /* number of bytes in compressed \CEE/ code */
@z
diff --git a/web/c_cpp/cweb/ctang-ql.ch b/web/c_cpp/cweb/ctang-ql.ch
index a0920243a9..64f0e81a72 100644
--- a/web/c_cpp/cweb/ctang-ql.ch
+++ b/web/c_cpp/cweb/ctang-ql.ch
@@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c -=500000 ctangle_c"
@x
-\def\title{CTANGLE (Version 3.64)}
+\def\title{CTANGLE (Version 4.2)}
@y
-\def\title{CTANGLE (QL Version 3.64)}
+\def\title{CTANGLE (QL Version 4.2)}
@z
@x section 1
-@d banner "This is CTANGLE (Version 3.64)\n"
+@d banner "This is CTANGLE (Version 4.2)"
@y
-@d banner "This is CTANGLE (QL Version 3.64)\n"
+@d banner "This is CTANGLE (QL Version 4.2)"
@z
@x
diff --git a/web/c_cpp/cweb/ctang-vms.ch b/web/c_cpp/cweb/ctang-vms.ch
index 7e538abc27..5686c66b9a 100644
--- a/web/c_cpp/cweb/ctang-vms.ch
+++ b/web/c_cpp/cweb/ctang-vms.ch
@@ -10,26 +10,26 @@ created:
(these changes not necessary for initial bootstrapping)
@x section 1 (01-FEB-1992 ST)
-@d banner "This is CTANGLE (Version 3.64)\n"
+@d banner "This is CTANGLE (Version 4.2)"
@y
-@d banner "This is CTANGLE (VAX/VMS Version 3.64)\n"
+@d banner "This is CTANGLE (VAX/VMS Version 4.2)"
@z
-@x section 6 (from common.h) (01-FEB-1992 ST)
-#include <stdio.h>
+@x section 3 (01-FEB-1992 ST)
+#include <ctype.h> /* definition of |@!isalpha|, |@!isdigit| and so on */
+#include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
+#include <stddef.h> /* definition of |@!ptrdiff_t| */
+#include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
+#include <stdio.h> /* definition of |@!printf| and friends */
+#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@y
-#include stdio /* VMS searches Textlibraries faster */
-@z
-
-@x section 62 (01-FEB-1992 ST)
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-@y
-#include ctype /* definition of |isalpha|, |isdigit| and so on */
+#include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
/* VMS searches text libraries faster */
-@z
-
-@x section 63 (01-FEB-1992 ST)
-@d isxalpha(c) ((c)=='_') /* non-alpha character allowed in identifier */
-@y
-@d isxalpha(c) ((c)=='_' || (c)=='$') /* non-alpha characters allowed in id */
+#include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
+#include stddef /* definition of |@!ptrdiff_t| */
+#include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
+#include stdlib /* definition of |@!getenv| and |@!exit| */
+#include stdio /* definition of |@!printf| and friends */
+#include string /* definition of |@!strlen|, |@!strcmp| and so on */
@z
diff --git a/web/c_cpp/cweb/ctang-w32.ch b/web/c_cpp/cweb/ctang-w32.ch
index 523985ce3d..1c687e5eb6 100644
--- a/web/c_cpp/cweb/ctang-w32.ch
+++ b/web/c_cpp/cweb/ctang-w32.ch
@@ -4,63 +4,41 @@ This is the change file for CWEB's CTANGLE under Win32
Changes necessary for compiling with Borland C/C++
@x section 1
-@d banner "This is CTANGLE (Version 3.64)\n"
+@d banner "This is CTANGLE (Version 4.2)"
@y
-@d banner "This is CTANGLE (Version 3.64win32)\n"
+@d banner "This is CTANGLE (Version 4.2win32)"
@z
@x
-@ We predeclare several standard system functions here instead of including
-their system header files, because the names of the header files are not as
-standard as the names of the functions. (For example, some \CEE/ environments
-have \.{<string.h>} where others have \.{<strings.h>}.)
-
-@<Predecl...@>=
-extern int strlen(); /* length of string */
-extern int strcmp(); /* compare strings lexicographically */
-extern char* strcpy(); /* copy one string to another */
-extern int strncmp(); /* compare up to $n$ string characters */
-extern char* strncpy(); /* copy up to $n$ string characters */
-@y
-@z
-
-@x
-int names_match(p,first,l)
-name_pointer p; /* points to the proposed match */
-char *first; /* position of first character of string */
+boolean names_match(@t\1\1@>
+name_pointer p, /* points to the proposed match */
+const char *first, /* position of first character of string */
+size_t l, /* length of identifier */
+eight_bits t@t\2\2@>) /* not used by \.{TANGLE} */
@y
-int __cdecl names_match(p,first,l)
-name_pointer p; /* points to the proposed match */
-char *first; /* position of first character of string */
+boolean __cdecl names_match(@t\1\1@>
+name_pointer p, /* points to the proposed match */
+const char *first, /* position of first character of string */
+size_t l, /* length of identifier */
+eight_bits t@t\2\2@>) /* not used by \.{TANGLE} */
@z
@x
void
-init_node(node)
-name_pointer node;
+init_node(
+name_pointer node)
{
- node->equiv=(char *)text_info;
+ node->equiv=(void *)text_info;
}
void
-init_p() {}
+init_p(name_pointer p,eight_bits t) {@+(void)p;@+(void)t;@+}
@y
void
-init_node(node)
-name_pointer node;
+init_node(
+name_pointer node)
{
- node->equiv=(char *)text_info;
+ node->equiv=(void *)text_info;
}
void __cdecl
-init_p() {}
-@z
-
-@x
-@ @<Include...@>=
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-#include <stdlib.h> /* definition of |exit| */
-@y
-@ @<Include...@>=
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-#include <stdlib.h> /* definition of |exit| */
-#include <string.h>
+init_p(name_pointer p,eight_bits t) {@+(void)p;@+(void)t;@+}
@z
diff --git a/web/c_cpp/cweb/ctangle.c b/web/c_cpp/cweb/ctangle.c
index b7a1b553ce..d955da9d57 100644
--- a/web/c_cpp/cweb/ctangle.c
+++ b/web/c_cpp/cweb/ctangle.c
@@ -1,35 +1,24 @@
/*1:*/
-#line 64 "ctangle.w"
-
-/*6:*/
-#line 35 "common.h"
-
-#include <stdio.h>
+#line 66 "ctangle.w"
-/*:6*//*62:*/
-#line 888 "ctangle.w"
+/*4:*/
+#line 46 "common.h"
#include <ctype.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
-/*:62*/
-#line 65 "ctangle.w"
-
-#define banner "This is CTANGLE (Version 3.64)\n" \
-
-#define max_bytes 90000 \
-
-#define max_toks 270000
-#define max_names 4000 \
+/*:4*/
+#line 67 "ctangle.w"
-#define max_texts 2500
-#define hash_size 353
-#define longest_name 10000
-#define stack_size 50
-#define buf_size 100 \
+#define banner "This is CTANGLE (Version 4.2)" \
-#define ctangle 0
-#define cweave 1 \
+#define ctangle false
+#define cweave true \
#define and_and 04
#define lt_lt 020
@@ -37,7 +26,7 @@
#define plus_plus 013
#define minus_minus 01
#define minus_gt 031
-#define not_eq 032
+#define non_eq 032
#define lt_eq 034
#define gt_eq 035
#define eq_eq 036
@@ -47,20 +36,28 @@
#define period_ast 026
#define minus_gt_ast 027 \
-#define xisalpha(c) (isalpha(c) &&((eight_bits) c<0200) )
-#define xisdigit(c) (isdigit(c) &&((eight_bits) c<0200) )
-#define xisspace(c) (isspace(c) &&((eight_bits) c<0200) )
-#define xislower(c) (islower(c) &&((eight_bits) c<0200) )
-#define xisupper(c) (isupper(c) &&((eight_bits) c<0200) )
-#define xisxdigit(c) (isxdigit(c) &&((eight_bits) c<0200) ) \
+#define xisalpha(c) (isalpha((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisdigit(c) (isdigit((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisspace(c) (isspace((eight_bits) c) &&((eight_bits) c<0200) )
+#define xislower(c) (islower((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisupper(c) (isupper((eight_bits) c) &&((eight_bits) c<0200) )
+#define xisxdigit(c) (isxdigit((eight_bits) c) &&((eight_bits) c<0200) ) \
-#define length(c) (c+1) ->byte_start-(c) ->byte_start
+#define max_include_depth 10 \
+
+#define max_file_name_length 1024
+#define cur_file file[include_depth]
+#define cur_file_name file_name[include_depth]
+#define cur_line line[include_depth]
+#define web_file file[0]
+#define web_file_name file_name[0] \
+
+#define length(c) (size_t) ((c+1) ->byte_start-(c) ->byte_start)
#define print_id(c) term_write((c) ->byte_start,length((c) ) )
#define llink link
#define rlink dummy.Rlink
#define root name_dir->rlink \
-
-#define chunk_marker 0 \
+ \
#define spotless 0
#define harmless_message 1
@@ -69,16 +66,13 @@
#define mark_harmless {if(history==spotless) history= harmless_message;}
#define mark_error history= error_message
#define confusion(s) fatal("! This can't happen: ",s) \
-
-#define max_file_name_length 60
-#define cur_file file[include_depth]
-#define cur_file_name file_name[include_depth]
-#define web_file_name file_name[0]
-#define cur_line line[include_depth] \
+ \
#define show_banner flags['b']
#define show_progress flags['p']
-#define show_happiness flags['h'] \
+#define show_stats flags['s']
+#define show_happiness flags['h']
+#define make_xrefs flags['x'] \
#define update_terminal fflush(stdout)
#define new_line putchar('\n')
@@ -87,6 +81,18 @@
#define C_printf(c,a) fprintf(C_file,c,a)
#define C_putc(c) putc(c,C_file) \
+#define max_bytes 1000000 \
+
+#define max_toks 1000000
+#define max_names 10239 \
+
+#define max_sections 4000
+#define max_texts 10239
+#define longest_name 10000
+#define stack_size 500
+#define buf_size 1000
+#define long_buf_size (buf_size+longest_name) \
+
#define equiv equiv_or_xref \
#define section_flag max_texts \
@@ -128,43 +134,68 @@
#define isxalpha(c) ((c) =='_'||(c) =='$') \
-#define ishigh(c) ((unsigned char) (c) > 0177) \
+#define ishigh(c) ((eight_bits) (c) > 0177) \
\
-#define compress(c) if(loc++<=limit) return(c) \
+#define compress(c) if(loc++<=limit) return c \
#define macro 0
#define app_repl(c) {if(tok_ptr==tok_mem_end) overflow("token") ;*tok_ptr++= c;} \
-#line 66 "ctangle.w"
+#line 68 "ctangle.w"
-/*5:*/
-#line 29 "common.h"
+/*3:*/
+#line 37 "common.h"
-typedef short boolean;
-typedef char unsigned eight_bits;
+typedef bool boolean;
+typedef uint8_t eight_bits;
+typedef uint16_t sixteen_bits;
extern boolean program;
extern int phase;
-/*:5*//*7:*/
-#line 57 "common.h"
+/*:3*//*5:*/
+#line 74 "common.h"
-char section_text[longest_name+1];
-char*section_text_end= section_text+longest_name;
-char*id_first;
-char*id_loc;
+extern char section_text[];
+extern char*section_text_end;
+extern char*id_first;
+extern char*id_loc;
-/*:7*//*8:*/
-#line 72 "common.h"
+/*:5*//*6:*/
+#line 88 "common.h"
extern char buffer[];
extern char*buffer_end;
extern char*loc;
extern char*limit;
-/*:8*//*9:*/
-#line 87 "common.h"
+/*:6*//*7:*/
+#line 105 "common.h"
+
+extern int include_depth;
+extern FILE*file[];
+extern FILE*change_file;
+extern char file_name[][max_file_name_length];
+
+extern char change_file_name[];
+extern int line[];
+extern int change_line;
+extern int change_depth;
+extern boolean input_has_ended;
+extern boolean changing;
+extern boolean web_file_open;
+
+/*:7*//*9:*/
+#line 125 "common.h"
+
+extern sixteen_bits section_count;
+extern boolean changed_section[];
+extern boolean change_pending;
+extern boolean print_where;
+
+/*:9*//*10:*/
+#line 139 "common.h"
typedef struct name_info{
char*byte_start;
@@ -174,73 +205,38 @@ struct name_info*Rlink;
char Ilk;
}dummy;
-char*equiv_or_xref;
+void*equiv_or_xref;
}name_info;
typedef name_info*name_pointer;
typedef name_pointer*hash_pointer;
extern char byte_mem[];
extern char*byte_mem_end;
+extern char*byte_ptr;
extern name_info name_dir[];
extern name_pointer name_dir_end;
extern name_pointer name_ptr;
-extern char*byte_ptr;
extern name_pointer hash[];
extern hash_pointer hash_end;
extern hash_pointer h;
-extern name_pointer id_lookup();
-extern name_pointer section_lookup();
-extern void print_section_name(),sprint_section_name();
-/*:9*//*10:*/
-#line 122 "common.h"
+/*:10*//*12:*/
+#line 183 "common.h"
-extern history;
-extern err_print();
-extern wrap_up();
-extern void fatal();
-extern void overflow();
+extern int history;
-/*:10*//*11:*/
-#line 137 "common.h"
+/*:12*//*14:*/
+#line 199 "common.h"
-extern include_depth;
-extern FILE*file[];
-extern FILE*change_file;
+extern int argc;
+extern char**argv;
extern char C_file_name[];
extern char tex_file_name[];
extern char idx_file_name[];
extern char scn_file_name[];
-extern char file_name[][max_file_name_length];
-
-extern char change_file_name[];
-extern line[];
-extern change_line;
-extern change_depth;
-extern boolean input_has_ended;
-extern boolean changing;
-extern boolean web_file_open;
-extern reset_input();
-extern get_line();
-extern check_complete();
-
-/*:11*//*12:*/
-#line 159 "common.h"
-
-typedef unsigned short sixteen_bits;
-extern sixteen_bits section_count;
-extern boolean changed_section[];
-extern boolean change_pending;
-extern boolean print_where;
-
-/*:12*//*13:*/
-#line 171 "common.h"
-
-extern int argc;
-extern char**argv;
extern boolean flags[];
-/*:13*//*14:*/
-#line 183 "common.h"
+/*:14*//*15:*/
+#line 215 "common.h"
extern FILE*C_file;
extern FILE*tex_file;
@@ -248,17 +244,11 @@ extern FILE*idx_file;
extern FILE*scn_file;
extern FILE*active_file;
-/*:14*//*15:*/
-#line 192 "common.h"
-
-extern void common_init();
-#line 128 "ctangle.w"
-
/*:15*/
-#line 67 "ctangle.w"
+#line 69 "ctangle.w"
-/*16:*/
-#line 152 "ctangle.w"
+/*19:*/
+#line 122 "ctangle.w"
typedef struct{
eight_bits*tok_start;
@@ -266,8 +256,8 @@ sixteen_bits text_link;
}text;
typedef text*text_pointer;
-/*:16*//*27:*/
-#line 296 "ctangle.w"
+/*:19*//*31:*/
+#line 269 "ctangle.w"
typedef struct{
eight_bits*end_field;
@@ -278,170 +268,219 @@ sixteen_bits section_field;
}output_state;
typedef output_state*stack_pointer;
-/*:27*/
-#line 68 "ctangle.w"
+/*:31*/
+#line 70 "ctangle.w"
-/*17:*/
-#line 159 "ctangle.w"
+/*20:*/
+#line 129 "ctangle.w"
-text text_info[max_texts];
-text_pointer text_info_end= text_info+max_texts-1;
-text_pointer text_ptr;
-eight_bits tok_mem[max_toks];
-eight_bits*tok_mem_end= tok_mem+max_toks-1;
-eight_bits*tok_ptr;
+static text text_info[max_texts];
+static text_pointer text_info_end= text_info+max_texts-1;
+static text_pointer text_ptr;
+static eight_bits tok_mem[max_toks];
+static eight_bits*tok_mem_end= tok_mem+max_toks-1;
+static eight_bits*tok_ptr;
-/*:17*//*23:*/
-#line 227 "ctangle.w"
+/*:20*//*26:*/
+#line 198 "ctangle.w"
-text_pointer last_unnamed;
+static text_pointer last_unnamed;
-/*:23*//*28:*/
-#line 312 "ctangle.w"
+/*:26*//*32:*/
+#line 285 "ctangle.w"
-output_state cur_state;
+static output_state cur_state;
-output_state stack[stack_size+1];
-stack_pointer stack_ptr;
-stack_pointer stack_end= stack+stack_size;
+static output_state stack[stack_size+1];
+static stack_pointer stack_end= stack+stack_size;
+static stack_pointer stack_ptr;
-/*:28*//*32:*/
-#line 384 "ctangle.w"
+/*:32*//*37:*/
+#line 361 "ctangle.w"
-int cur_val;
+static int cur_val;
-/*:32*//*36:*/
-#line 473 "ctangle.w"
+/*:37*//*42:*/
+#line 452 "ctangle.w"
-eight_bits out_state;
-boolean protect;
+static eight_bits out_state;
+static boolean protect;
-/*:36*//*38:*/
-#line 502 "ctangle.w"
+/*:42*//*45:*/
+#line 483 "ctangle.w"
-name_pointer output_files[max_files];
-name_pointer*cur_out_file,*end_output_files,*an_output_file;
-char cur_section_name_char;
-char output_file_name[longest_name];
+static name_pointer output_files[max_files];
+static name_pointer*cur_out_file,*end_output_files,*an_output_file;
+static char cur_section_name_char;
+static char output_file_name[longest_name+1];
-/*:38*//*45:*/
-#line 599 "ctangle.w"
+/*:45*//*52:*/
+#line 582 "ctangle.w"
-boolean output_defs_seen= 0;
+static boolean output_defs_seen= false;
-/*:45*//*51:*/
-#line 710 "ctangle.w"
+/*:52*//*57:*/
+#line 691 "ctangle.w"
-char translit[128][translit_length];
+static char translit[128][translit_length];
-/*:51*//*56:*/
-#line 789 "ctangle.w"
+/*:57*//*62:*/
+#line 770 "ctangle.w"
-eight_bits ccode[256];
+static eight_bits ccode[256];
-/*:56*//*59:*/
-#line 845 "ctangle.w"
+/*:62*//*66:*/
+#line 830 "ctangle.w"
-boolean comment_continues= 0;
+static boolean comment_continues= false;
-/*:59*//*61:*/
-#line 884 "ctangle.w"
+/*:66*//*68:*/
+#line 869 "ctangle.w"
-name_pointer cur_section_name;
-int no_where;
+static name_pointer cur_section_name;
+static boolean no_where;
-/*:61*//*75:*/
-#line 1195 "ctangle.w"
+/*:68*//*82:*/
+#line 1182 "ctangle.w"
-text_pointer cur_text;
-eight_bits next_control;
+static text_pointer cur_text;
+static eight_bits next_control;
-/*:75*//*82:*/
-#line 1353 "ctangle.w"
+/*:82*/
+#line 71 "ctangle.w"
-extern sixteen_bits section_count;
+/*8:*/
+#line 119 "common.h"
-/*:82*/
-#line 69 "ctangle.w"
+extern boolean get_line(void);
+extern void check_complete(void);
+extern void reset_input(void);
-/*2:*/
-#line 77 "ctangle.w"
+/*:8*//*11:*/
+#line 162 "common.h"
-extern int strlen();
-extern int strcmp();
-extern char*strcpy();
-extern int strncmp();
-extern char*strncpy();
+extern boolean names_match(name_pointer,const char*,size_t,eight_bits);
+extern name_pointer id_lookup(const char*,const char*,char);
-/*:2*//*41:*/
-#line 533 "ctangle.w"
+extern name_pointer section_lookup(char*,char*,int);
+extern void init_node(name_pointer);
+extern void init_p(name_pointer,eight_bits);
+extern void print_prefix_name(name_pointer);
+extern void print_section_name(name_pointer);
+extern void sprint_section_name(char*,name_pointer);
-void phase_two();
+/*:11*//*13:*/
+#line 186 "common.h"
-/*:41*//*46:*/
-#line 602 "ctangle.w"
+extern int wrap_up(void);
+extern void err_print(const char*);
+extern void fatal(const char*,const char*);
+extern void overflow(const char*);
-void output_defs();
+/*:13*//*16:*/
+#line 223 "common.h"
-/*:46*//*48:*/
-#line 648 "ctangle.w"
+extern void common_init(void);
+extern void print_stats(void);
-static void out_char();
+/*:16*//*30:*/
+#line 241 "ctangle.w"
+static void store_two_bytes(sixteen_bits);
-/*:48*//*90:*/
-#line 1460 "ctangle.w"
+/*:30*//*35:*/
+#line 324 "ctangle.w"
-void phase_one();
+static void push_level(name_pointer);
+static void pop_level(boolean);
-/*:90*//*92:*/
-#line 1478 "ctangle.w"
+/*:35*//*39:*/
+#line 397 "ctangle.w"
+static void get_output(void);
-void skip_limbo();
+/*:39*//*44:*/
+#line 473 "ctangle.w"
+static void flush_buffer(void);
-/*:92*/
-#line 70 "ctangle.w"
+/*:44*//*49:*/
+#line 549 "ctangle.w"
+static void phase_two(void);
+
+/*:49*//*53:*/
+#line 585 "ctangle.w"
+
+static void output_defs(void);
+static void out_char(eight_bits);
+
+/*:53*//*65:*/
+#line 810 "ctangle.w"
+static eight_bits skip_ahead(void);
+static boolean skip_comment(boolean);
-/*:1*//*3:*/
-#line 91 "ctangle.w"
+/*:65*//*70:*/
+#line 924 "ctangle.w"
+static eight_bits get_next(void);
+
+/*:70*//*84:*/
+#line 1208 "ctangle.w"
+static void scan_repl(eight_bits);
+
+/*:84*//*91:*/
+#line 1379 "ctangle.w"
+static void scan_section(void);
+
+/*:91*//*99:*/
+#line 1460 "ctangle.w"
+static void phase_one(void);
+
+/*:99*//*101:*/
+#line 1494 "ctangle.w"
+static void skip_limbo(void);
+
+/*:101*/
+#line 72 "ctangle.w"
-int main(ac,av)
-int ac;
-char**av;
+
+/*:1*//*2:*/
+#line 81 "ctangle.w"
+
+int main(
+int ac,
+char**av)
{
argc= ac;argv= av;
program= ctangle;
-/*18:*/
-#line 167 "ctangle.w"
+/*21:*/
+#line 137 "ctangle.w"
text_info->tok_start= tok_ptr= tok_mem;
text_ptr= text_info+1;text_ptr->tok_start= tok_mem;
-/*:18*//*20:*/
-#line 177 "ctangle.w"
+/*:21*//*23:*/
+#line 147 "ctangle.w"
-name_dir->equiv= (char*)text_info;
+init_node(name_dir);
-/*:20*//*24:*/
-#line 230 "ctangle.w"
+/*:23*//*27:*/
+#line 201 "ctangle.w"
last_unnamed= text_info;text_info->text_link= 0;
-/*:24*//*39:*/
-#line 512 "ctangle.w"
+/*:27*//*46:*/
+#line 493 "ctangle.w"
cur_out_file= end_output_files= output_files+max_files;
-/*:39*//*52:*/
-#line 713 "ctangle.w"
+/*:46*//*58:*/
+#line 694 "ctangle.w"
{
int i;
-for(i= 0;i<128;i++)sprintf(translit[i],"X%02X",(unsigned)(128+i));
+for(i= 0;i<128;i++)sprintf(translit[i],"X%02X",(unsigned int)(128+i));
}
-/*:52*//*57:*/
-#line 792 "ctangle.w"
+/*:58*//*63:*/
+#line 773 "ctangle.w"
{
int c;
for(c= 0;c<256;c++)ccode[c]= ignore;
@@ -460,62 +499,63 @@ ccode['<']= ccode['(']= section_name;
ccode['\'']= ord;
}
-/*:57*//*71:*/
-#line 1116 "ctangle.w"
+/*:63*//*78:*/
+#line 1103 "ctangle.w"
section_text[0]= ' ';
-/*:71*/
-#line 98 "ctangle.w"
-;
+/*:78*/
+#line 88 "ctangle.w"
+
common_init();
-if(show_banner)printf(banner);
+if(show_banner)puts(banner);
phase_one();
phase_two();
return wrap_up();
}
-/*:3*//*21:*/
-#line 183 "ctangle.w"
+/*:2*//*24:*/
+#line 153 "ctangle.w"
-int names_match(p,first,l)
-name_pointer p;
-char*first;
-int l;
-{
-if(length(p)!=l)return 0;
+boolean names_match(
+name_pointer p,
+const char*first,
+size_t l,
+eight_bits t)
+{(void)t;
+if(length(p)!=l)return false;
return!strncmp(first,p->byte_start,l);
}
-/*:21*//*22:*/
-#line 198 "ctangle.w"
+/*:24*//*25:*/
+#line 169 "ctangle.w"
void
-init_node(node)
-name_pointer node;
+init_node(
+name_pointer node)
{
-node->equiv= (char*)text_info;
+node->equiv= (void*)text_info;
}
void
-init_p(){}
+init_p(name_pointer p,eight_bits t){(void)p;(void)t;}
-/*:22*//*26:*/
-#line 260 "ctangle.w"
+/*:25*//*29:*/
+#line 231 "ctangle.w"
-void
-store_two_bytes(x)
-sixteen_bits x;
+static void
+store_two_bytes(
+sixteen_bits x)
{
if(tok_ptr+2> tok_mem_end)overflow("token");
*tok_ptr++= x>>8;
*tok_ptr++= x&0377;
}
-/*:26*//*30:*/
-#line 336 "ctangle.w"
+/*:29*//*34:*/
+#line 309 "ctangle.w"
-void
-push_level(p)
-name_pointer p;
+static void
+push_level(
+name_pointer p)
{
if(stack_ptr==stack_end)overflow("stack");
*stack_ptr= cur_state;
@@ -527,12 +567,12 @@ cur_section= 0;
}
}
-/*:30*//*31:*/
-#line 355 "ctangle.w"
+/*:34*//*36:*/
+#line 332 "ctangle.w"
-void
-pop_level(flag)
-int flag;
+static void
+pop_level(
+boolean flag)
{
if(flag&&cur_repl->text_link<section_flag){
cur_repl= cur_repl->text_link+text_info;
@@ -543,17 +583,17 @@ stack_ptr--;
if(stack_ptr> stack)cur_state= *stack_ptr;
}
-/*:31*//*33:*/
-#line 391 "ctangle.w"
+/*:36*//*38:*/
+#line 368 "ctangle.w"
-void
-get_output()
+static void
+get_output(void)
{
sixteen_bits a;
restart:if(stack_ptr==stack)return;
if(cur_byte==cur_end){
cur_val= -((int)cur_section);
-pop_level(1);
+pop_level(true);
if(cur_val==0)goto restart;
out_char(section_number);return;
}
@@ -566,23 +606,23 @@ a= (a-0200)*0400+*cur_byte++;
switch(a/024000){
case 0:cur_val= a;out_char(identifier);break;
case 1:if(a==output_defs_flag)output_defs();
-else/*34:*/
-#line 423 "ctangle.w"
+else/*40:*/
+#line 402 "ctangle.w"
{
a-= 024000;
-if((a+name_dir)->equiv!=(char*)text_info)push_level(a+name_dir);
+if((a+name_dir)->equiv!=(void*)text_info)push_level(a+name_dir);
else if(a!=0){
-printf("\n! Not present: <");
+fputs("\n! Not present: <",stdout);
print_section_name(a+name_dir);err_print(">");
}
goto restart;
}
-/*:34*/
-#line 412 "ctangle.w"
-;
+/*:40*/
+#line 389 "ctangle.w"
+
break;
default:cur_val= a-050000;if(cur_val> 0)cur_section= cur_val;
out_char(section_number);
@@ -590,11 +630,11 @@ out_char(section_number);
}
}
-/*:33*//*37:*/
-#line 481 "ctangle.w"
+/*:38*//*43:*/
+#line 460 "ctangle.w"
-void
-flush_buffer()
+static void
+flush_buffer(void)
{
C_putc('\n');
if(cur_line%100==0&&show_progress){
@@ -605,33 +645,33 @@ update_terminal;
cur_line++;
}
-/*:37*//*42:*/
-#line 536 "ctangle.w"
+/*:43*//*48:*/
+#line 514 "ctangle.w"
-void
-phase_two(){
-web_file_open= 0;
+static void
+phase_two(void){
+web_file_open= false;
cur_line= 1;
-/*29:*/
-#line 325 "ctangle.w"
+/*33:*/
+#line 298 "ctangle.w"
stack_ptr= stack+1;cur_name= name_dir;cur_repl= text_info->text_link+text_info;
cur_byte= cur_repl->tok_start;cur_end= (cur_repl+1)->tok_start;cur_section= 0;
-/*:29*/
-#line 541 "ctangle.w"
-;
-/*44:*/
-#line 595 "ctangle.w"
+/*:33*/
+#line 519 "ctangle.w"
+
+/*51:*/
+#line 578 "ctangle.w"
if(!output_defs_seen)
output_defs();
-/*:44*/
-#line 542 "ctangle.w"
-;
+/*:51*/
+#line 520 "ctangle.w"
+
if(text_info->text_link==0&&cur_out_file==end_output_files){
-printf("\n! No program text was specified.");mark_harmless;
+fputs("\n! No program text was specified.",stdout);mark_harmless;
}
else{
@@ -641,7 +681,7 @@ printf("\nWriting the output file (%s):",C_file_name);
}
else{
if(show_progress){
-printf("\nWriting the output files:");
+fputs("\nWriting the output files:",stdout);
printf(" (%s)",C_file_name);
update_terminal;
@@ -650,17 +690,17 @@ if(text_info->text_link==0)goto writeloop;
}
while(stack_ptr> stack)get_output();
flush_buffer();
-writeloop:/*43:*/
-#line 572 "ctangle.w"
+writeloop:/*50:*/
+#line 555 "ctangle.w"
for(an_output_file= end_output_files;an_output_file> cur_out_file;){
an_output_file--;
sprint_section_name(output_file_name,*an_output_file);
fclose(C_file);
-C_file= fopen(output_file_name,"w");
-if(C_file==0)fatal("! Cannot open output file:",output_file_name);
+C_file= fopen(output_file_name,"wb");
+if(C_file==0)fatal("! Cannot open output file ",output_file_name);
-printf("\n(%s)",output_file_name);update_terminal;
+if(show_progress){printf("\n(%s)",output_file_name);update_terminal;}
cur_line= 1;
stack_ptr= stack+1;
cur_name= (*an_output_file);
@@ -671,18 +711,21 @@ while(stack_ptr> stack)get_output();
flush_buffer();
}
-/*:43*/
-#line 563 "ctangle.w"
-;
-if(show_happiness)printf("\nDone.");
+/*:50*/
+#line 541 "ctangle.w"
+
+if(show_happiness){
+if(show_progress)new_line;
+fputs("Done.",stdout);
+}
}
}
-/*:42*//*47:*/
-#line 605 "ctangle.w"
+/*:48*//*54:*/
+#line 589 "ctangle.w"
-void
-output_defs()
+static void
+output_defs(void)
{
sixteen_bits a;
push_level(NULL);
@@ -692,7 +735,7 @@ cur_byte= cur_text->tok_start;
cur_end= (cur_text+1)->tok_start;
C_printf("%s","#define ");
out_state= normal;
-protect= 1;
+protect= true;
while(cur_byte<cur_end){
a= *cur_byte++;
if(cur_byte==cur_end&&a=='\n')break;
@@ -712,18 +755,18 @@ cur_val= a-050000;cur_section= cur_val;out_char(section_number);
}
}
-protect= 0;
+protect= false;
flush_buffer();
}
-pop_level(0);
+pop_level(false);
}
-/*:47*//*49:*/
-#line 651 "ctangle.w"
+/*:54*//*55:*/
+#line 632 "ctangle.w"
static void
-out_char(cur_char)
-eight_bits cur_char;
+out_char(
+eight_bits cur_char)
{
char*j,*k;
restart:
@@ -731,26 +774,26 @@ switch(cur_char){
case'\n':if(protect&&out_state!=verbatim)C_putc(' ');
if(protect||out_state==verbatim)C_putc('\\');
flush_buffer();if(out_state!=verbatim)out_state= normal;break;
-/*53:*/
-#line 719 "ctangle.w"
+/*59:*/
+#line 700 "ctangle.w"
case identifier:
if(out_state==num_or_id)C_putc(' ');
j= (cur_val+name_dir)->byte_start;
k= (cur_val+name_dir+1)->byte_start;
while(j<k){
-if((unsigned char)(*j)<0200)C_putc(*j);
+if((eight_bits)(*j)<0200)C_putc(*j);
-else C_printf("%s",translit[(unsigned char)(*j)-0200]);
+else C_printf("%s",translit[(eight_bits)(*j)-0200]);
j++;
}
out_state= num_or_id;break;
-/*:53*/
-#line 662 "ctangle.w"
-;
-/*54:*/
-#line 732 "ctangle.w"
+/*:59*/
+#line 643 "ctangle.w"
+
+/*60:*/
+#line 713 "ctangle.w"
case section_number:
if(cur_val> 0)C_printf("/*%d:*/",cur_val);
@@ -776,11 +819,11 @@ C_printf("%s","\"\n");
}
break;
-/*:54*/
-#line 663 "ctangle.w"
-;
-/*50:*/
-#line 681 "ctangle.w"
+/*:60*/
+#line 644 "ctangle.w"
+
+/*56:*/
+#line 662 "ctangle.w"
case plus_plus:C_putc('+');C_putc('+');out_state= normal;break;
case minus_minus:C_putc('-');C_putc('-');out_state= normal;break;
@@ -790,7 +833,7 @@ case eq_eq:C_putc('=');C_putc('=');out_state= normal;break;
case lt_lt:C_putc('<');C_putc('<');out_state= normal;break;
case gt_eq:C_putc('>');C_putc('=');out_state= normal;break;
case lt_eq:C_putc('<');C_putc('=');out_state= normal;break;
-case not_eq:C_putc('!');C_putc('=');out_state= normal;break;
+case non_eq:C_putc('!');C_putc('=');out_state= normal;break;
case and_and:C_putc('&');C_putc('&');out_state= normal;break;
case or_or:C_putc('|');C_putc('|');out_state= normal;break;
case dot_dot_dot:C_putc('.');C_putc('.');C_putc('.');out_state= normal;
@@ -800,9 +843,9 @@ case period_ast:C_putc('.');C_putc('*');out_state= normal;break;
case minus_gt_ast:C_putc('-');C_putc('>');C_putc('*');out_state= normal;
break;
-/*:50*/
-#line 664 "ctangle.w"
-;
+/*:56*/
+#line 645 "ctangle.w"
+
case'=':case'>':C_putc(cur_char);C_putc(' ');
out_state= normal;break;
case join:out_state= unbreakable;break;
@@ -819,74 +862,74 @@ default:C_putc(cur_char);out_state= normal;break;
}
}
-/*:49*//*58:*/
-#line 813 "ctangle.w"
+/*:55*//*64:*/
+#line 794 "ctangle.w"
-eight_bits
-skip_ahead()
+static eight_bits
+skip_ahead(void)
{
eight_bits c;
-while(1){
-if(loc> limit&&(get_line()==0))return(new_section);
+while(true){
+if(loc> limit&&(get_line()==false))return new_section;
*(limit+1)= '@';
while(*loc!='@')loc++;
if(loc<=limit){
loc++;c= ccode[(eight_bits)*loc];loc++;
-if(c!=ignore||*(loc-1)=='>')return(c);
+if(c!=ignore||*(loc-1)=='>')return c;
}
}
}
-/*:58*//*60:*/
-#line 848 "ctangle.w"
+/*:64*//*67:*/
+#line 833 "ctangle.w"
-int skip_comment(is_long_comment)
-boolean is_long_comment;
+static boolean skip_comment(
+boolean is_long_comment)
{
char c;
-while(1){
+while(true){
if(loc> limit){
if(is_long_comment){
-if(get_line())return(comment_continues= 1);
+if(get_line())return comment_continues= true;
else{
err_print("! Input ended in mid-comment");
-return(comment_continues= 0);
+return comment_continues= false;
}
}
-else return(comment_continues= 0);
+else return comment_continues= false;
}
c= *(loc++);
if(is_long_comment&&c=='*'&&*loc=='/'){
-loc++;return(comment_continues= 0);
+loc++;return comment_continues= false;
}
if(c=='@'){
if(ccode[(eight_bits)*loc]==new_section){
err_print("! Section name ended in mid-comment");loc--;
-return(comment_continues= 0);
+return comment_continues= false;
}
else loc++;
}
}
}
-/*:60*//*63:*/
-#line 900 "ctangle.w"
+/*:67*//*69:*/
+#line 881 "ctangle.w"
-eight_bits
-get_next()
+static eight_bits
+get_next(void)
{
static int preprocessing= 0;
eight_bits c;
-while(1){
+while(true){
if(loc> limit){
if(preprocessing&&*(limit-1)!='\\')preprocessing= 0;
-if(get_line()==0)return(new_section);
+if(get_line()==false)return new_section;
else if(print_where&&!no_where){
-print_where= 0;
-/*77:*/
-#line 1225 "ctangle.w"
+print_where= false;
+/*85:*/
+#line 1214 "ctangle.w"
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
@@ -897,25 +940,25 @@ id_first= cur_file_name;
store_two_bytes((sixteen_bits)cur_line);
}
id_loc= id_first+strlen(id_first);
-{int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200);
-app_repl(a%0400);}
+{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
+app_repl(a_l%0400);}
+
+/*:85*/
+#line 893 "ctangle.w"
-/*:77*/
-#line 912 "ctangle.w"
-;
}
-else return('\n');
+else return'\n';
}
c= *loc;
if(comment_continues||(c=='/'&&(*(loc+1)=='*'||*(loc+1)=='/'))){
skip_comment(comment_continues||*(loc+1)=='*');
-if(comment_continues)return('\n');
+if(comment_continues)return'\n';
else continue;
}
loc++;
-if(xisdigit(c)||c=='.')/*66:*/
-#line 978 "ctangle.w"
+if(xisdigit(c)||c=='.')/*73:*/
+#line 964 "ctangle.w"
{
id_first= loc-1;
if(*id_first=='.'&&!xisdigit(*loc))goto mistake;
@@ -936,29 +979,32 @@ while(xisdigit(*loc))loc++;
found:while(*loc=='u'||*loc=='U'||*loc=='l'||*loc=='L'
||*loc=='f'||*loc=='F')loc++;
id_loc= loc;
-return(constant);
+return constant;
}
-/*:66*/
-#line 924 "ctangle.w"
+/*:73*/
+#line 905 "ctangle.w"
-else if(c=='\''||c=='"'||(c=='L'&&(*loc=='\''||*loc=='"')))
-/*67:*/
-#line 1006 "ctangle.w"
+else if(c=='\''||c=='"'
+||((c=='L'||c=='u'||c=='U')&&(*loc=='\''||*loc=='"'))
+||((c=='u'&&*loc=='8')&&(*(loc+1)=='\''||*(loc+1)=='"')))
+/*74:*/
+#line 992 "ctangle.w"
{
char delim= c;
id_first= section_text+1;
id_loc= section_text;*++id_loc= delim;
-if(delim=='L'){
+if(delim=='L'||delim=='u'||delim=='U'){
+if(delim=='u'&&*loc=='8'){*++id_loc= *loc++;}
delim= *loc++;*++id_loc= delim;
}
-while(1){
+while(true){
if(loc>=limit){
if(*(limit-1)!='\\'){
err_print("! String didn't end");loc= limit;break;
}
-if(get_line()==0){
+if(get_line()==false){
err_print("! Input ended in middle of string");loc= buffer;break;
}
@@ -977,32 +1023,33 @@ c= *loc++;
if(++id_loc<=section_text_end)*id_loc= c;
}
if(id_loc>=section_text_end){
-printf("\n! String too long: ");
+fputs("\n! String too long: ",stdout);
term_write(section_text+1,25);
err_print("...");
}
id_loc++;
-return(string);
+return string;
}
-/*:67*/
-#line 926 "ctangle.w"
+/*:74*/
+#line 909 "ctangle.w"
else if(isalpha(c)||isxalpha(c)||ishigh(c))
-/*65:*/
-#line 972 "ctangle.w"
+/*72:*/
+#line 957 "ctangle.w"
{
id_first= --loc;
-while(isalpha(*++loc)||isdigit(*loc)||isxalpha(*loc)||ishigh(*loc));
-id_loc= loc;return(identifier);
+while(isalpha((eight_bits)*++loc)||isdigit((eight_bits)*loc)
+||isxalpha((eight_bits)*loc)||ishigh((eight_bits)*loc));
+id_loc= loc;return identifier;
}
-/*:65*/
-#line 928 "ctangle.w"
+/*:72*/
+#line 911 "ctangle.w"
-else if(c=='@')/*68:*/
-#line 1050 "ctangle.w"
+else if(c=='@')/*75:*/
+#line 1037 "ctangle.w"
{
c= ccode[(eight_bits)*loc++];
switch(c){
@@ -1017,23 +1064,23 @@ err_print("! Double @ should be used in control text");
continue;
case section_name:
cur_section_name_char= *(loc-1);
-/*70:*/
-#line 1098 "ctangle.w"
+/*77:*/
+#line 1085 "ctangle.w"
{
char*k;
-/*72:*/
-#line 1118 "ctangle.w"
+/*79:*/
+#line 1105 "ctangle.w"
k= section_text;
-while(1){
-if(loc> limit&&get_line()==0){
+while(true){
+if(loc> limit&&get_line()==false){
err_print("! Input ended in section name");
loc= buffer+1;break;
}
c= *loc;
-/*73:*/
-#line 1142 "ctangle.w"
+/*80:*/
+#line 1129 "ctangle.w"
if(c=='@'){
c= *(loc+1);
@@ -1051,9 +1098,9 @@ err_print("! Nesting of section names not allowed");break;
*(++k)= '@';loc++;
}
-/*:73*/
-#line 1127 "ctangle.w"
-;
+/*:80*/
+#line 1114 "ctangle.w"
+
loc++;if(k<section_text_end)k++;
if(xisspace(c)){
c= ' ';if(*(k-1)==' ')k--;
@@ -1061,22 +1108,22 @@ c= ' ';if(*(k-1)==' ')k--;
*k= c;
}
if(k>=section_text_end){
-printf("\n! Section name too long: ");
+fputs("\n! Section name too long: ",stdout);
term_write(section_text+1,25);
printf("...");mark_harmless;
}
if(*k==' '&&k> section_text)k--;
-/*:72*/
-#line 1100 "ctangle.w"
-;
+/*:79*/
+#line 1087 "ctangle.w"
+
if(k-section_text> 3&&strncmp(k-2,"...",3)==0)
cur_section_name= section_lookup(section_text+1,k-3,1);
else cur_section_name= section_lookup(section_text+1,k,0);
if(cur_section_name_char=='(')
-/*40:*/
-#line 516 "ctangle.w"
+/*47:*/
+#line 497 "ctangle.w"
{
for(an_output_file= cur_out_file;
@@ -1091,31 +1138,31 @@ overflow("output files");
}
}
-/*:40*/
-#line 1106 "ctangle.w"
-;
-return(section_name);
+/*:47*/
+#line 1093 "ctangle.w"
+
+return section_name;
}
-/*:70*/
-#line 1064 "ctangle.w"
-;
-case string:/*74:*/
-#line 1164 "ctangle.w"
+/*:77*/
+#line 1051 "ctangle.w"
+
+case string:/*81:*/
+#line 1151 "ctangle.w"
{
id_first= loc++;*(limit+1)= '@';*(limit+2)= '>';
while(*loc!='@'||*(loc+1)!='>')loc++;
if(loc>=limit)err_print("! Verbatim string didn't end");
id_loc= loc;loc+= 2;
-return(string);
+return string;
}
-/*:74*/
-#line 1065 "ctangle.w"
-;
-case ord:/*69:*/
-#line 1077 "ctangle.w"
+/*:81*/
+#line 1052 "ctangle.w"
+
+case ord:/*76:*/
+#line 1064 "ctangle.w"
id_first= loc;
if(*loc=='\\'){
@@ -1135,32 +1182,32 @@ err_print("! String didn't end");loc= limit-1;break;
}
}
loc++;
-return(ord);
+return ord;
+
+/*:76*/
+#line 1053 "ctangle.w"
-/*:69*/
-#line 1066 "ctangle.w"
-;
-default:return(c);
+default:return c;
}
}
-/*:68*/
-#line 929 "ctangle.w"
+/*:75*/
+#line 912 "ctangle.w"
else if(xisspace(c)){
if(!preprocessing||loc> limit)continue;
-else return(' ');
+else return' ';
}
else if(c=='#'&&loc==buffer+1)preprocessing= 1;
-mistake:/*64:*/
-#line 950 "ctangle.w"
+mistake:/*71:*/
+#line 935 "ctangle.w"
switch(c){
case'+':if(*loc=='+')compress(plus_plus);break;
case'-':if(*loc=='-'){compress(minus_minus);}
-else if(*loc=='>')if(*(loc+1)=='*'){loc++;compress(minus_gt_ast);}
-else compress(minus_gt);break;
+else{if(*loc=='>'){if(*(loc+1)=='*'){loc++;compress(minus_gt_ast);}
+else compress(minus_gt);}}break;
case'.':if(*loc=='*'){compress(period_ast);}
else if(*loc=='.'&&*(loc+1)=='.'){
loc++;compress(dot_dot_dot);
@@ -1174,26 +1221,26 @@ case'<':if(*loc=='='){compress(lt_eq);}
else if(*loc=='<')compress(lt_lt);break;
case'&':if(*loc=='&')compress(and_and);break;
case'|':if(*loc=='|')compress(or_or);break;
-case'!':if(*loc=='=')compress(not_eq);break;
+case'!':if(*loc=='=')compress(non_eq);break;
}
-/*:64*/
-#line 936 "ctangle.w"
+/*:71*/
+#line 919 "ctangle.w"
-return(c);
+return c;
}
}
-/*:63*//*76:*/
-#line 1199 "ctangle.w"
+/*:69*//*83:*/
+#line 1186 "ctangle.w"
-void
-scan_repl(t)
-eight_bits t;
+static void
+scan_repl(
+eight_bits t)
{
sixteen_bits a;
-if(t==section_name){/*77:*/
-#line 1225 "ctangle.w"
+if(t==section_name){/*85:*/
+#line 1214 "ctangle.w"
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
@@ -1204,23 +1251,23 @@ id_first= cur_file_name;
store_two_bytes((sixteen_bits)cur_line);
}
id_loc= id_first+strlen(id_first);
-{int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200);
-app_repl(a%0400);}
+{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
+app_repl(a_l%0400);}
-/*:77*/
-#line 1205 "ctangle.w"
-;}
-while(1)switch(a= get_next()){
-/*78:*/
-#line 1238 "ctangle.w"
+/*:85*/
+#line 1192 "ctangle.w"
+}
+while(true)switch(a= get_next()){
+/*86:*/
+#line 1227 "ctangle.w"
case identifier:a= id_lookup(id_first,id_loc,0)-name_dir;
app_repl((a/0400)+0200);
app_repl(a%0400);break;
case section_name:if(t!=section_name)goto done;
else{
-/*79:*/
-#line 1271 "ctangle.w"
+/*87:*/
+#line 1260 "ctangle.w"
{
char*try_loc= loc;
while(*try_loc==' '&&try_loc<limit)try_loc++;
@@ -1232,14 +1279,14 @@ if(*try_loc=='=')err_print("! Missing `@ ' before a named section");
}
-/*:79*/
-#line 1244 "ctangle.w"
-;
+/*:87*/
+#line 1233 "ctangle.w"
+
a= cur_section_name-name_dir;
app_repl((a/0400)+0250);
app_repl(a%0400);
-/*77:*/
-#line 1225 "ctangle.w"
+/*85:*/
+#line 1214 "ctangle.w"
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
@@ -1250,22 +1297,22 @@ id_first= cur_file_name;
store_two_bytes((sixteen_bits)cur_line);
}
id_loc= id_first+strlen(id_first);
-{int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200);
-app_repl(a%0400);}
+{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
+app_repl(a_l%0400);}
-/*:77*/
-#line 1248 "ctangle.w"
-;break;
+/*:85*/
+#line 1237 "ctangle.w"
+break;
}
case output_defs_code:if(t!=section_name)err_print("! Misplaced @h");
else{
-output_defs_seen= 1;
+output_defs_seen= true;
a= output_defs_flag;
app_repl((a/0400)+0200);
app_repl(a%0400);
-/*77:*/
-#line 1225 "ctangle.w"
+/*85:*/
+#line 1214 "ctangle.w"
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
@@ -1276,17 +1323,17 @@ id_first= cur_file_name;
store_two_bytes((sixteen_bits)cur_line);
}
id_loc= id_first+strlen(id_first);
-{int a= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a/0400)+0200);
-app_repl(a%0400);}
+{int a_l= id_lookup(id_first,id_loc,0)-name_dir;app_repl((a_l/0400)+0200);
+app_repl(a_l%0400);}
+
+/*:85*/
+#line 1246 "ctangle.w"
-/*:77*/
-#line 1257 "ctangle.w"
-;
}
break;
case constant:case string:
-/*80:*/
-#line 1282 "ctangle.w"
+/*88:*/
+#line 1271 "ctangle.w"
app_repl(a);
while(id_first<id_loc){
@@ -1299,12 +1346,12 @@ app_repl(*id_first++);
}
app_repl(a);break;
-/*:80*/
-#line 1261 "ctangle.w"
-;
+/*:88*/
+#line 1250 "ctangle.w"
+
case ord:
-/*81:*/
-#line 1298 "ctangle.w"
+/*89:*/
+#line 1287 "ctangle.w"
{
int c= (eight_bits)*id_first;
if(c=='\\'){
@@ -1330,12 +1377,12 @@ case'x':
if(xisdigit(*(id_first+1)))c= *(++id_first)-'0';
else if(xisxdigit(*(id_first+1))){
++id_first;
-c= toupper(*id_first)-'A'+10;
+c= toupper((eight_bits)*id_first)-'A'+10;
}
if(xisdigit(*(id_first+1)))c= 16*c+*(++id_first)-'0';
else if(xisxdigit(*(id_first+1))){
++id_first;
-c= 16*c+toupper(*id_first)-'A'+10;
+c= 16*c+toupper((eight_bits)*id_first)-'A'+10;
}
break;
case'\\':c= '\\';break;
@@ -1354,9 +1401,9 @@ app_repl(constant);
}
break;
-/*:81*/
-#line 1263 "ctangle.w"
-;
+/*:89*/
+#line 1252 "ctangle.w"
+
case definition:case format_code:case begin_C:if(t!=section_name)goto done;
else{
err_print("! @d, @f and @c are ignored in C text");continue;
@@ -1364,8 +1411,8 @@ err_print("! @d, @f and @c are ignored in C text");continue;
}
case new_section:goto done;
-/*:78*/
-#line 1210 "ctangle.w"
+/*:86*/
+#line 1197 "ctangle.w"
case')':app_repl(a);
if(t==macro)app_repl(' ');
@@ -1377,23 +1424,23 @@ if(text_ptr> text_info_end)overflow("text");
cur_text= text_ptr;(++text_ptr)->tok_start= tok_ptr;
}
-/*:76*//*83:*/
-#line 1360 "ctangle.w"
+/*:83*//*90:*/
+#line 1346 "ctangle.w"
-void
-scan_section()
+static void
+scan_section(void)
{
name_pointer p;
text_pointer q;
sixteen_bits a;
-section_count++;no_where= 1;
+section_count++;no_where= true;
if(*(loc-1)=='*'&&show_progress){
printf("*%d",section_count);update_terminal;
}
next_control= 0;
-while(1){
-/*84:*/
-#line 1399 "ctangle.w"
+while(true){
+/*92:*/
+#line 1387 "ctangle.w"
while(next_control<definition)
@@ -1401,12 +1448,12 @@ if((next_control= skip_ahead())==section_name){
loc-= 2;next_control= get_next();
}
-/*:84*/
-#line 1374 "ctangle.w"
-;
+/*:92*/
+#line 1360 "ctangle.w"
+
if(next_control==definition){
-/*85:*/
-#line 1406 "ctangle.w"
+/*93:*/
+#line 1394 "ctangle.w"
{
while((next_control= get_next())=='\n');
if(next_control!=identifier){
@@ -1421,11 +1468,11 @@ if(*loc!='('){
app_repl(string);app_repl(' ');app_repl(string);
}
scan_repl(macro);
-cur_text->text_link= 0;
+cur_text->text_link= macro;
}
-/*:85*/
-#line 1376 "ctangle.w"
+/*:93*/
+#line 1362 "ctangle.w"
continue;
}
@@ -1434,41 +1481,41 @@ p= name_dir;break;
}
if(next_control==section_name){
p= cur_section_name;
-/*86:*/
-#line 1431 "ctangle.w"
+/*94:*/
+#line 1419 "ctangle.w"
while((next_control= get_next())=='+');
if(next_control!='='&&next_control!=eq_eq)
continue;
-/*:86*/
-#line 1384 "ctangle.w"
-;
+/*:94*/
+#line 1370 "ctangle.w"
+
break;
}
return;
}
-no_where= print_where= 0;
-/*87:*/
-#line 1436 "ctangle.w"
+no_where= print_where= false;
+/*95:*/
+#line 1424 "ctangle.w"
-/*88:*/
-#line 1441 "ctangle.w"
+/*96:*/
+#line 1429 "ctangle.w"
store_two_bytes((sixteen_bits)(0150000+section_count));
-/*:88*/
-#line 1437 "ctangle.w"
-;
+/*:96*/
+#line 1425 "ctangle.w"
+
scan_repl(section_name);
-/*89:*/
-#line 1445 "ctangle.w"
+/*97:*/
+#line 1433 "ctangle.w"
if(p==name_dir||p==0){
(last_unnamed)->text_link= cur_text-text_info;last_unnamed= cur_text;
}
-else if(p->equiv==(char*)text_info)p->equiv= (char*)cur_text;
+else if(p->equiv==(void*)text_info)p->equiv= (void*)cur_text;
else{
q= (text_pointer)p->equiv;
@@ -1479,20 +1526,20 @@ q->text_link= cur_text-text_info;
cur_text->text_link= section_flag;
-/*:89*/
-#line 1439 "ctangle.w"
-;
+/*:97*/
+#line 1427 "ctangle.w"
+
+
+/*:95*/
+#line 1376 "ctangle.w"
-/*:87*/
-#line 1390 "ctangle.w"
-;
}
-/*:83*//*91:*/
-#line 1463 "ctangle.w"
+/*:90*//*98:*/
+#line 1448 "ctangle.w"
-void
-phase_one(){
+static void
+phase_one(void){
phase= 1;
section_count= 0;
reset_input();
@@ -1502,23 +1549,23 @@ check_complete();
phase= 2;
}
-/*:91*//*93:*/
-#line 1481 "ctangle.w"
+/*:98*//*100:*/
+#line 1465 "ctangle.w"
-void
-skip_limbo()
+static void
+skip_limbo(void)
{
char c;
-while(1){
-if(loc> limit&&get_line()==0)return;
+while(true){
+if(loc> limit&&get_line()==false)return;
*(limit+1)= '@';
while(*loc!='@')loc++;
if(loc++<=limit){
c= *loc++;
if(ccode[(eight_bits)c]==new_section)break;
switch(ccode[(eight_bits)c]){
-case translit_code:/*94:*/
-#line 1510 "ctangle.w"
+case translit_code:/*102:*/
+#line 1496 "ctangle.w"
while(xisspace(*loc)&&loc<limit)loc++;
loc+= 3;
@@ -1527,7 +1574,7 @@ if(loc> limit||!xisxdigit(*(loc-3))||!xisxdigit(*(loc-2))
err_print("! Improper hex number following @l");
else{
-unsigned i;
+unsigned int i;
char*beg;
sscanf(loc-3,"%x",&i);
while(xisspace(*loc)&&loc<limit)loc++;
@@ -1537,14 +1584,14 @@ if(loc-beg>=translit_length)
err_print("! Replacement string in @l too long");
else{
-strncpy(translit[i-0200],beg,loc-beg);
+strncpy(translit[i-0200],beg,(size_t)(loc-beg));
translit[i-0200][loc-beg]= '\0';
}
}
-/*:94*/
-#line 1494 "ctangle.w"
-;break;
+/*:102*/
+#line 1478 "ctangle.w"
+break;
case format_code:case'@':break;
case control_text:if(c=='q'||c=='Q'){
while((c= skip_ahead())=='@');
@@ -1560,20 +1607,20 @@ default:err_print("! Double @ should be used in limbo");
}
}
-/*:93*//*95:*/
-#line 1536 "ctangle.w"
+/*:100*//*103:*/
+#line 1522 "ctangle.w"
void
-print_stats(){
-printf("\nMemory usage statistics:\n");
+print_stats(void){
+puts("\nMemory usage statistics:");
printf("%ld names (out of %ld)\n",
-(long)(name_ptr-name_dir),(long)max_names);
+(ptrdiff_t)(name_ptr-name_dir),(long)max_names);
printf("%ld replacement texts (out of %ld)\n",
-(long)(text_ptr-text_info),(long)max_texts);
+(ptrdiff_t)(text_ptr-text_info),(long)max_texts);
printf("%ld bytes (out of %ld)\n",
-(long)(byte_ptr-byte_mem),(long)max_bytes);
+(ptrdiff_t)(byte_ptr-byte_mem),(long)max_bytes);
printf("%ld tokens (out of %ld)\n",
-(long)(tok_ptr-tok_mem),(long)max_toks);
+(ptrdiff_t)(tok_ptr-tok_mem),(long)max_toks);
}
-/*:95*/
+/*:103*/
diff --git a/web/c_cpp/cweb/ctangle.w b/web/c_cpp/cweb/ctangle.w
index 130800210e..e7e2d311fe 100644
--- a/web/c_cpp/cweb/ctangle.w
+++ b/web/c_cpp/cweb/ctangle.w
@@ -2,9 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 3.64 --- February 2002
-% (same as Version 3.5 except for minor corrections)
-% (also quotes backslashes in file names of #line directives)
+% Version 4.2 --- February 2021
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -17,6 +15,11 @@
% entire resulting derived work is given a different name and distributed
% under the terms of a permission notice identical to this one.
+% Amendments to 'ctangle.w' resulting in this updated version were created
+% by numerous collaborators over the course of many years.
+
+% Please send comments, suggestions, etc. to tex-k@@tug.org.
+
% Here is TeX material that gets inserted after \input cwebmac
\def\hang{\hangindent 3em\indent\ignorespaces}
\def\pb{$\.|\ldots\.|$} % C brackets (|...|)
@@ -24,11 +27,11 @@
\mathchardef\RA="3221 % right arrow
\mathchardef\BA="3224 % double arrow
-\def\title{CTANGLE (Version 3.64)}
+\def\title{CTANGLE (Version 4.2)}
\def\topofcontents{\null\vfill
\centerline{\titlefont The {\ttitlefont CTANGLE} processor}
\vskip 15pt
- \centerline{(Version 3.64)}
+ \centerline{(Version 4.2)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -46,7 +49,6 @@ under the terms of a permission notice identical to this one.
}
\pageno=\contentspagenumber \advance\pageno by 1
\let\maybe=\iftrue
-@s not_eq normal @q unreserve a C++ keyword @>
@** Introduction.
This is the \.{CTANGLE} program by Silvio Levy and Donald E. Knuth,
@@ -59,27 +61,15 @@ Joachim Schrod, Lee Wittenberg, and others who have contributed improvements.
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 3.64)\n"
+@d banner "This is CTANGLE (Version 4.2)"
@c
@<Include files@>@/
@h
@<Common code for \.{CWEAVE} and \.{CTANGLE}@>@/
@<Typedef declarations@>@/
-@<Global variables@>@/
-@<Predeclaration of procedures@>@/
-
-@ We predeclare several standard system functions here instead of including
-their system header files, because the names of the header files are not as
-standard as the names of the functions. (For example, some \CEE/ environments
-have \.{<string.h>} where others have \.{<strings.h>}.)
-
-@<Predecl...@>=
-extern int strlen(); /* length of string */
-extern int strcmp(); /* compare strings lexicographically */
-extern char* strcpy(); /* copy one string to another */
-extern int strncmp(); /* compare up to $n$ string characters */
-extern char* strncpy(); /* copy up to $n$ string characters */
+@<Private variables@>@/
+@<Predeclaration of procedures@>
@ \.{CTANGLE} has a fairly straightforward outline. It operates in
two phases: First it reads the source file, saving the \CEE/ code in
@@ -89,40 +79,24 @@ Please read the documentation for \.{common}, the set of routines common
to \.{CTANGLE} and \.{CWEAVE}, before proceeding further.
@c
-int main (ac, av)
-int ac;
-char **av;
+int main (
+int ac,
+char **av)
{
argc=ac; argv=av;
program=ctangle;
- @<Set initial values@>;
+ @<Set initial values@>@;
common_init();
- if (show_banner) printf(banner); /* print a ``banner line'' */
+ if (show_banner) puts(banner); /* print a ``banner line'' */
phase_one(); /* read all the user's text and compress it into |tok_mem| */
phase_two(); /* output the contents of the compressed tables */
return wrap_up(); /* and exit gracefully */
}
-@ The following parameters were sufficient in the original \.{TANGLE} to
-handle \TEX/,
-so they should be sufficient for most applications of \.{CTANGLE}.
-If you change |max_bytes|, |max_names|, or |hash_size| you should also
-change them in the file |"common.w"|.
-
-@d max_bytes 90000 /* the number of bytes in identifiers,
- index entries, and section names; used in |"common.w"| */
-@d max_toks 270000 /* number of bytes in compressed \CEE/ code */
-@d max_names 4000 /* number of identifiers, strings, section names;
- must be less than 10240; used in |"common.w"| */
-@d max_texts 2500 /* number of replacement texts, must be less than 10240 */
-@d hash_size 353 /* should be prime; used in |"common.w"| */
-@d longest_name 10000 /* section names and strings shouldn't be longer than this */
-@d stack_size 50 /* number of simultaneous levels of macro expansion */
-@d buf_size 100 /* for \.{CWEAVE} and \.{CTANGLE} */
-
@ The next few sections contain stuff from the file |"common.w"| that must
be included in both |"ctangle.w"| and |"cweave.w"|. It appears in
-file |"common.h"|, which needs to be updated when |"common.w"| changes.
+file |"common.h"|, which is also included in |"common.w"| to propagate
+possible changes from this \.{COMMON} interface consistently.
@i common.h
@@ -137,7 +111,7 @@ A \&{text} variable is a structure containing a pointer into
|tok_mem|, which tells where the corresponding text starts, and an
integer |text_link|, which, as we shall see later, is used to connect
pieces of text that have the same name. All the \&{text}s are stored in
-the array |text_info|, and we use a |text_pointer| variable to refer
+the array |text_info|, and we use a \&{text\_pointer} variable to refer
to them.
The first position of |tok_mem| that is unoccupied by
@@ -145,10 +119,6 @@ replacement text is called |tok_ptr|, and the first unused location of
|text_info| is called |text_ptr|. Thus we usually have the identity
|text_ptr->tok_start==tok_ptr|.
-If your machine does not support |unsigned char| you should change
-the definition of \&{eight\_bits} to |unsigned short|.
-@^system dependencies@>
-
@<Typed...@>=
typedef struct {
eight_bits *tok_start; /* pointer into |tok_mem| */
@@ -156,13 +126,13 @@ typedef struct {
} text;
typedef text *text_pointer;
-@ @<Glob...@>=
-text text_info[max_texts];
-text_pointer text_info_end=text_info+max_texts-1;
-text_pointer text_ptr; /* first unused position in |text_info| */
-eight_bits tok_mem[max_toks];
-eight_bits *tok_mem_end=tok_mem+max_toks-1;
-eight_bits *tok_ptr; /* first unused position in |tok_mem| */
+@ @<Private...@>=
+static text text_info[max_texts];
+static text_pointer text_info_end=text_info+max_texts-1;
+static text_pointer text_ptr; /* first unused position in |text_info| */
+static eight_bits tok_mem[max_toks];
+static eight_bits *tok_mem_end=tok_mem+max_toks-1;
+static eight_bits *tok_ptr; /* first unused position in |tok_mem| */
@ @<Set init...@>=
text_info->tok_start=tok_ptr=tok_mem;
@@ -175,18 +145,19 @@ replacement text, an element of the array |text_info|.
@d equiv equiv_or_xref /* info corresponding to names */
@ @<Set init...@>=
-name_dir->equiv=(char *)text_info; /* the undefined section has no replacement text */
+init_node(name_dir); /* the undefined section has no replacement text */
@ Here's the procedure that decides whether a name of length |l|
starting at position |first| equals the identifier pointed to by |p|:
@c
-int names_match(p,first,l)
-name_pointer p; /* points to the proposed match */
-char *first; /* position of first character of string */
-int l; /* length of identifier */
-{
- if (length(p)!=l) return 0;
+boolean names_match(@t\1\1@>
+name_pointer p, /* points to the proposed match */
+const char *first, /* position of first character of string */
+size_t l, /* length of identifier */
+eight_bits t@t\2\2@>) /* not used by \.{TANGLE} */
+{@+(void)t;
+ if (length(p)!=l) return false;
return !strncmp(first,p->byte_start,l);
}
@@ -197,13 +168,13 @@ the loader won't complain of its absence.
@c
void
-init_node(node)
-name_pointer node;
+init_node(
+name_pointer node)
{
- node->equiv=(char *)text_info;
+ node->equiv=(void *)text_info;
}
void
-init_p() {}
+init_p(name_pointer p,eight_bits t) {@+(void)p;@+(void)t;@+}
@* Tokens.
Replacement texts, which represent \CEE/ code in a compressed format,
@@ -224,8 +195,8 @@ The replacement text pointer for the first unnamed section appears in
@d section_flag max_texts /* final |text_link| in section replacement texts */
-@<Glob...@>=
-text_pointer last_unnamed; /* most recent replacement text of unnamed section */
+@<Private...@>=
+static text_pointer last_unnamed; /* most recent replacement text of unnamed section */
@ @<Set init...@>= last_unnamed=text_info; text_info->text_link=0;
@@ -258,15 +229,17 @@ construction or numerical constant.
|tok_mem| when a replacement text is being generated.
@c
-void
-store_two_bytes(x)
-sixteen_bits x;
+static void
+store_two_bytes(
+sixteen_bits x)
{
if (tok_ptr+2>tok_mem_end) overflow("token");
*tok_ptr++=x>>8; /* store high byte */
*tok_ptr++=x&0377; /* store low byte */
}
+@ @<Predecl...@>=@+static void store_two_bytes(sixteen_bits);
+
@** Stacks for output. The output process uses a stack to keep track
of what is going on at different ``levels'' as the sections are being
written out. Entries on this stack have five parts:
@@ -309,12 +282,12 @@ typedef output_state *stack_pointer;
@d cur_repl cur_state.repl_field /* pointer to current replacement text */
@d cur_section cur_state.section_field /* current section number being expanded */
-@<Global...@>=
-output_state cur_state; /* |cur_end|, |cur_byte|, |cur_name|, |cur_repl|,
+@<Private...@>=
+static output_state cur_state; /* |cur_end|, |cur_byte|, |cur_name|, |cur_repl|,
and |cur_section| */
-output_state stack[stack_size+1]; /* info for non-current levels */
-stack_pointer stack_ptr; /* first unused location in the output state stack */
-stack_pointer stack_end=stack+stack_size; /* end of |stack| */
+static output_state stack[stack_size+1]; /* info for non-current levels */
+static stack_pointer stack_end=stack+stack_size; /* end of |stack| */
+static stack_pointer stack_ptr; /* first unused location in the output state stack */
@ To get the output process started, we will perform the following
initialization steps. We may assume that |text_info->text_link| is nonzero,
@@ -334,9 +307,9 @@ We assume that the \CEE/ compiler can copy structures.
@^system dependencies@>
@c
-void
-push_level(p) /* suspends the current level */
-name_pointer p;
+static void
+push_level(@t\1\1@> /* suspends the current level */
+name_pointer p@t\2\2@>)
{
if (stack_ptr==stack_end) overflow("stack");
*stack_ptr=cur_state;
@@ -348,14 +321,18 @@ name_pointer p;
}
}
+@ @<Predecl...@>=
+static void push_level(name_pointer);@/
+static void pop_level(boolean);
+
@ When we come to the end of a replacement text, the |pop_level| subroutine
does the right thing: It either moves to the continuation of this replacement
text or returns the state to the most recently stacked level.
@c
-void
-pop_level(flag) /* do this when |cur_byte| reaches |cur_end| */
-int flag; /* |flag==0| means we are in |output_defs| */
+static void
+pop_level(@t\1\1@> /* do this when |cur_byte| reaches |cur_end| */
+boolean flag@t\2\2@>) /* |flag==false| means we are in |output_defs| */
{
if (flag && cur_repl->text_link<section_flag) { /* link to a continuation */
cur_repl=cur_repl->text_link+text_info; /* stay on the same level */
@@ -381,22 +358,22 @@ if the next output is an identifier, in which case
@d section_number 0201 /* code returned by |get_output| for section numbers */
@d identifier 0202 /* code returned by |get_output| for identifiers */
-@<Global...@>=
-int cur_val; /* additional information corresponding to output token */
+@<Private...@>=
+static int cur_val; /* additional information corresponding to output token */
@ If |get_output| finds that no more output remains, it returns with
|stack_ptr==stack|.
@^high-bit character handling@>
@c
-void
-get_output() /* sends next token to |out_char| */
+static void
+get_output(void) /* sends next token to |out_char| */
{
sixteen_bits a; /* value of current byte */
restart: if (stack_ptr==stack) return;
if (cur_byte==cur_end) {
cur_val=-((int)cur_section); /* cast needed because of sign extension */
- pop_level(1);
+ pop_level(true);
if (cur_val==0) goto restart;
out_char(section_number); return;
}
@@ -409,7 +386,7 @@ get_output() /* sends next token to |out_char| */
switch (a/024000) { /* |024000==(0250-0200)*0400| */
case 0: cur_val=a; out_char(identifier); break;
case 1: if (a==output_defs_flag) output_defs();
- else @<Expand section |a-024000|, |goto restart|@>;
+ else @<Expand section |a-024000|, |goto restart|@>@;
break;
default: cur_val=a-050000; if (cur_val>0) cur_section=cur_val;
out_char(section_number);
@@ -417,15 +394,17 @@ get_output() /* sends next token to |out_char| */
}
}
+@ @<Predecl...@>=@+static void get_output(void);
+
@ The user may have forgotten to give any \CEE/ text for a section name,
or the \CEE/ text may have been associated with a different name by mistake.
@<Expand section |a-...@>=
{
a-=024000;
- if ((a+name_dir)->equiv!=(char *)text_info) push_level(a+name_dir);
+ if ((a+name_dir)->equiv!=(void *)text_info) push_level(a+name_dir);
else if (a!=0) {
- printf("\n! Not present: <");
+ fputs("\n! Not present: <",stdout);
print_section_name(a+name_dir); err_print(">");
@.Not present: <section name>@>
}
@@ -461,7 +440,7 @@ strings, verbatim constructions and numerical constants.
\yskip\hang |normal| means none of the above.
-\yskip\noindent Furthermore, if the variable |protect| is positive, newlines
+\yskip\noindent Furthermore, if the variable |protect| is |true|, newlines
are preceded by a `\.\\'.
@d normal 0 /* non-unusual state */
@@ -470,17 +449,17 @@ are preceded by a `\.\\'.
@d unbreakable 3 /* state associated with \.{@@\&} */
@d verbatim 4 /* state in the middle of a string */
-@<Global...@>=
-eight_bits out_state; /* current status of partial output */
-boolean protect; /* should newline characters be quoted? */
+@<Private...@>=
+static eight_bits out_state; /* current status of partial output */
+static boolean protect; /* should newline characters be quoted? */
@ Here is a routine that is invoked when we want to output the current line.
During the output process, |cur_line| equals the number of the next line
to be output.
@c
-void
-flush_buffer() /* writes one line to output file */
+static void
+flush_buffer(void) /* writes one line to output file */
{
C_putc('\n');
if (cur_line % 100 == 0 && show_progress) {
@@ -491,6 +470,8 @@ flush_buffer() /* writes one line to output file */
cur_line++;
}
+@ @<Predecl...@>=@+static void flush_buffer(void);
+
@ Second, we have modified the original \.{TANGLE} so that it will write output
on multiple files.
If a section name is introduced in at least one place by \.{@@(}
@@ -499,11 +480,11 @@ All these special sections are saved on a stack, |output_files|.
We write them out after we've done the unnamed section.
@d max_files 256
-@<Glob...@>=
-name_pointer output_files[max_files];
-name_pointer *cur_out_file, *end_output_files, *an_output_file;
-char cur_section_name_char; /* is it |'<'| or |'('| */
-char output_file_name[longest_name]; /* name of the file */
+@<Private...@>=
+static name_pointer output_files[max_files];
+static name_pointer *cur_out_file, *end_output_files, *an_output_file;
+static char cur_section_name_char; /* is it |'<'| or |'('| */
+static char output_file_name[longest_name+1]; /* name of the file */
@ We make |end_output_files| point just beyond the end of
|output_files|. The stack pointer
@@ -530,18 +511,15 @@ complain we're out of room@>=
@* The big output switch. Here then is the routine that does the
output.
-@<Predecl...@>=
-void phase_two();
-
-@ @c
-void
-phase_two () {
- web_file_open=0;
+@c
+static void
+phase_two (void) {
+ web_file_open=false;
cur_line=1;
- @<Initialize the output stacks@>;
- @<Output macro definitions if appropriate@>;
+ @<Initialize the output stacks@>@;
+ @<Output macro definitions if appropriate@>@;
if (text_info->text_link==0 && cur_out_file==end_output_files) {
- printf("\n! No program text was specified."); mark_harmless;
+ fputs("\n! No program text was specified.",stdout); mark_harmless;
@.No program text...@>
}
else {
@@ -551,7 +529,7 @@ phase_two () {
}
else {
if (show_progress) {
- printf("\nWriting the output files:");
+ fputs("\nWriting the output files:",stdout);
@.Writing the output...@>
printf(" (%s)",C_file_name);
update_terminal;
@@ -560,11 +538,16 @@ phase_two () {
}
while (stack_ptr>stack) get_output();
flush_buffer();
-writeloop: @<Write all the named output files@>;
- if(show_happiness) printf("\nDone.");
+writeloop: @<Write all the named output files@>@;
+ if (show_happiness) {
+ if (show_progress) new_line;
+ fputs("Done.",stdout);
+ }
}
}
+@ @<Predecl...@>=@+static void phase_two(void);
+
@ To write the named output files, we proceed as for the unnamed
section.
The only subtlety is that we have to open each one.
@@ -574,10 +557,10 @@ for (an_output_file=end_output_files; an_output_file>cur_out_file;) {
an_output_file--;
sprint_section_name(output_file_name,*an_output_file);
fclose(C_file);
- C_file=fopen(output_file_name,"w");
- if (C_file ==0) fatal("! Cannot open output file:",output_file_name);
+ C_file=fopen(output_file_name,"wb");
+ if (C_file ==0) fatal("! Cannot open output file ",output_file_name);
@.Cannot open output file@>
- printf("\n(%s)",output_file_name); update_terminal;
+ if (show_progress) { printf("\n(%s)",output_file_name); update_terminal; }
cur_line=1;
stack_ptr=stack+1;
cur_name= (*an_output_file);
@@ -596,15 +579,16 @@ that refer to macros, preceded by the \.{\#define} preprocessor command.
if (!output_defs_seen)
output_defs();
-@ @<Glob...@>=
-boolean output_defs_seen=0;
+@ @<Private...@>=
+static boolean output_defs_seen=false;
@ @<Predecl...@>=
-void output_defs();
+static void output_defs(void);@/
+static void out_char(eight_bits);
@ @c
-void
-output_defs()
+static void
+output_defs(void)
{
sixteen_bits a;
push_level(NULL);
@@ -614,7 +598,7 @@ output_defs()
cur_end=(cur_text+1)->tok_start;
C_printf("%s","#define ");
out_state=normal;
- protect=1; /* newlines should be preceded by |'\\'| */
+ protect=true; /* newlines should be preceded by |'\\'| */
while (cur_byte<cur_end) {
a=*cur_byte++;
if (cur_byte==cur_end && a=='\n') break; /* disregard a final newline */
@@ -634,10 +618,10 @@ output_defs()
/* no other cases */
}
}
- protect=0;
+ protect=false;
flush_buffer();
}
- pop_level(0);
+ pop_level(false);
}
@ A many-way switch is used to send the output. Note that this function
@@ -645,13 +629,10 @@ is not called if |out_state==verbatim|, except perhaps with arguments
|'\n'| (protect the newline), |string| (end the string), or |constant|
(end the constant).
-@<Predecl...@>=
-static void out_char();
-
-@ @c
+@c
static void
-out_char(cur_char)
-eight_bits cur_char;
+out_char(
+eight_bits cur_char)
{
char *j, *k; /* pointer into |byte_mem| */
restart:
@@ -659,9 +640,9 @@ restart:
case '\n': if (protect && out_state!=verbatim) C_putc(' ');
if (protect || out_state==verbatim) C_putc('\\');
flush_buffer(); if (out_state!=verbatim) out_state=normal; break;
- @/@t\4@>@<Case of an identifier@>;
- @/@t\4@>@<Case of a section number@>;
- @/@t\4@>@<Cases like \.{!=}@>;
+ @/@t\4@>@<Case of an identifier@>@;
+ @/@t\4@>@<Case of a section number@>@;
+ @/@t\4@>@<Cases like \.{!=}@>@;
case '=': case '>': C_putc(cur_char); C_putc(' ');
out_state=normal; break;
case join: out_state=unbreakable; break;
@@ -679,22 +660,22 @@ restart:
}
@ @<Cases like \.{!=}@>=
-case plus_plus: C_putc('+'); C_putc('+'); out_state=normal; break;
-case minus_minus: C_putc('-'); C_putc('-'); out_state=normal; break;
-case minus_gt: C_putc('-'); C_putc('>'); out_state=normal; break;
-case gt_gt: C_putc('>'); C_putc('>'); out_state=normal; break;
-case eq_eq: C_putc('='); C_putc('='); out_state=normal; break;
-case lt_lt: C_putc('<'); C_putc('<'); out_state=normal; break;
-case gt_eq: C_putc('>'); C_putc('='); out_state=normal; break;
-case lt_eq: C_putc('<'); C_putc('='); out_state=normal; break;
-case not_eq: C_putc('!'); C_putc('='); out_state=normal; break;
-case and_and: C_putc('&'); C_putc('&'); out_state=normal; break;
-case or_or: C_putc('|'); C_putc('|'); out_state=normal; break;
-case dot_dot_dot: C_putc('.'); C_putc('.'); C_putc('.'); out_state=normal;
+case plus_plus: C_putc('+');@+C_putc('+'); out_state=normal; break;
+case minus_minus: C_putc('-');@+C_putc('-'); out_state=normal; break;
+case minus_gt: C_putc('-');@+C_putc('>'); out_state=normal; break;
+case gt_gt: C_putc('>');@+C_putc('>'); out_state=normal; break;
+case eq_eq: C_putc('=');@+C_putc('='); out_state=normal; break;
+case lt_lt: C_putc('<');@+C_putc('<'); out_state=normal; break;
+case gt_eq: C_putc('>');@+C_putc('='); out_state=normal; break;
+case lt_eq: C_putc('<');@+C_putc('='); out_state=normal; break;
+case non_eq: C_putc('!');@+C_putc('='); out_state=normal; break;
+case and_and: C_putc('&');@+C_putc('&'); out_state=normal; break;
+case or_or: C_putc('|');@+C_putc('|'); out_state=normal; break;
+case dot_dot_dot: C_putc('.');@+C_putc('.');@+C_putc('.'); out_state=normal;
break;
-case colon_colon: C_putc(':'); C_putc(':'); out_state=normal; break;
-case period_ast: C_putc('.'); C_putc('*'); out_state=normal; break;
-case minus_gt_ast: C_putc('-'); C_putc('>'); C_putc('*'); out_state=normal;
+case colon_colon: C_putc(':');@+C_putc(':'); out_state=normal; break;
+case period_ast: C_putc('.');@+C_putc('*'); out_state=normal; break;
+case minus_gt_ast: C_putc('-');@+C_putc('>');@+C_putc('*'); out_state=normal;
break;
@ When an identifier is output to the \CEE/ file, characters in the
@@ -707,13 +688,13 @@ This makes debugging a lot less confusing.
@d translit_length 10
-@<Glo...@>=
-char translit[128][translit_length];
+@<Private...@>=
+static char translit[128][translit_length];
@ @<Set init...@>=
{
int i;
- for (i=0;i<128;i++) sprintf(translit[i],"X%02X",(unsigned)(128+i));
+ for (i=0;i<128;i++) sprintf(translit[i],"X%02X",(unsigned int)(128+i));
}
@ @<Case of an identifier@>=
@@ -722,9 +703,9 @@ case identifier:
j=(cur_val+name_dir)->byte_start;
k=(cur_val+name_dir+1)->byte_start;
while (j<k) {
- if ((unsigned char)(*j)<0200) C_putc(*j);
+ if ((eight_bits)(*j)<0200) C_putc(*j);
@^high-bit character handling@>
- else C_printf("%s",translit[(unsigned char)(*j)-0200]);
+ else C_printf("%s",translit[(eight_bits)(*j)-0200]);
j++;
}
out_state=num_or_id; break;
@@ -786,8 +767,8 @@ milestones.
@d section_name 0311 /* control code for `\.{@@<}' */
@d new_section 0312 /* control code for `\.{@@\ }' and `\.{@@*}' */
-@<Global...@>=
-eight_bits ccode[256]; /* meaning of a char following \.{@@} */
+@<Private...@>=
+static eight_bits ccode[256]; /* meaning of a char following \.{@@} */
@ @<Set ini...@>= {
int c; /* must be |int| so the |for| loop will end */
@@ -811,21 +792,25 @@ eight_bits ccode[256]; /* meaning of a char following \.{@@} */
until finding the next non-ignorable control code, which it returns.
@c
-eight_bits
-skip_ahead() /* skip to next control code */
+static eight_bits
+skip_ahead(void) /* skip to next control code */
{
eight_bits c; /* control code found */
- while (1) {
- if (loc>limit && (get_line()==0)) return(new_section);
+ while (true) {
+ if (loc>limit && (get_line()==false)) return new_section;
*(limit+1)='@@';
while (*loc!='@@') loc++;
if (loc<=limit) {
loc++; c=ccode[(eight_bits)*loc]; loc++;
- if (c!=ignore || *(loc-1)=='>') return(c);
+ if (c!=ignore || *(loc-1)=='>') return c;
}
}
}
+@ @<Predecl...@>=
+static eight_bits skip_ahead(void);@/
+static boolean skip_comment(boolean);
+
@ The |skip_comment| procedure reads through the input at somewhat high
speed in order to pass over comments, which \.{CTANGLE} does not transmit
to the output. If the comment is introduced by \.{/*}, |skip_comment|
@@ -842,35 +827,35 @@ the two types of comments.
If |skip_comment| comes to the end of the section, it prints an error message.
No comment, long or short, is allowed to contain `\.{@@\ }' or `\.{@@*}'.
-@<Global...@>=
-boolean comment_continues=0; /* are we scanning a comment? */
+@<Private...@>=
+static boolean comment_continues=false; /* are we scanning a comment? */
@ @c
-int skip_comment(is_long_comment) /* skips over comments */
-boolean is_long_comment;
+static boolean skip_comment(@t\1\1@> /* skips over comments */
+boolean is_long_comment@t\2\2@>)
{
char c; /* current character */
- while (1) {
+ while (true) {
if (loc>limit) {
if (is_long_comment) {
- if(get_line()) return(comment_continues=1);
+ if(get_line()) return comment_continues=true;
else{
err_print("! Input ended in mid-comment");
@.Input ended in mid-comment@>
- return(comment_continues=0);
+ return comment_continues=false;
}
}
- else return(comment_continues=0);
+ else return comment_continues=false;
}
c=*(loc++);
if (is_long_comment && c=='*' && *loc=='/') {
- loc++; return(comment_continues=0);
+ loc++; return comment_continues=false;
}
if (c=='@@') {
if (ccode[(eight_bits)*loc]==new_section) {
err_print("! Section name ended in mid-comment"); loc--;
@.Section name ended in mid-comment@>
- return(comment_continues=0);
+ return comment_continues=false;
}
else loc++;
}
@@ -881,48 +866,46 @@ boolean is_long_comment;
@d constant 03
-@<Global...@>=
-name_pointer cur_section_name; /* name of section just scanned */
-int no_where; /* suppress |print_where|? */
-
-@ @<Include...@>=
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-#include <stdlib.h> /* definition of |exit| */
+@<Private...@>=
+static name_pointer cur_section_name; /* name of section just scanned */
+static boolean no_where; /* suppress |print_where|? */
@ As one might expect, |get_next| consists mostly of a big switch
that branches to the various special cases that can arise.
@d isxalpha(c) ((c)=='_' || (c)=='$')
/* non-alpha characters allowed in identifier */
-@d ishigh(c) ((unsigned char)(c)>0177)
+@d ishigh(c) ((eight_bits)(c)>0177)
@^high-bit character handling@>
@c
-eight_bits
-get_next() /* produces the next input token */
+static eight_bits
+get_next(void) /* produces the next input token */
{
static int preprocessing=0;
eight_bits c; /* the current character */
- while (1) {
+ while (true) {
if (loc>limit) {
if (preprocessing && *(limit-1)!='\\') preprocessing=0;
- if (get_line()==0) return(new_section);
+ if (get_line()==false) return new_section;
else if (print_where && !no_where) {
- print_where=0;
- @<Insert the line number into |tok_mem|@>;
+ print_where=false;
+ @<Insert the line number into |tok_mem|@>@;
}
- else return ('\n');
+ else return '\n';
}
c=*loc;
if (comment_continues || (c=='/' && (*(loc+1)=='*' || *(loc+1)=='/'))) {
skip_comment(comment_continues||*(loc+1)=='*');
/* scan to end of comment or newline */
- if (comment_continues) return('\n');
+ if (comment_continues) return '\n';
else continue;
}
loc++;
if (xisdigit(c) || c=='.') @<Get a constant@>@;
- else if (c=='\'' || c=='"' || (c=='L'&&(*loc=='\'' || *loc=='"')))
+ else if (c=='\'' || c=='"'@|
+ || ((c=='L' || c=='u' || c=='U')&&(*loc=='\'' || *loc=='"'))@|
+ || ((c=='u' && *loc=='8')&&(*(loc+1)=='\'' || *(loc+1)=='"')))
@<Get a string@>@;
else if (isalpha(c) || isxalpha(c) || ishigh(c))
@<Get an identifier@>@;
@@ -930,14 +913,16 @@ get_next() /* produces the next input token */
else if (xisspace(c)) {
if (!preprocessing || loc>limit) continue;
/* we don't want a blank after a final backslash */
- else return(' '); /* ignore spaces and tabs, unless preprocessing */
+ else return ' '; /* ignore spaces and tabs, unless preprocessing */
}
else if (c=='#' && loc==buffer+1) preprocessing=1;
mistake: @<Compress two-symbol operator@>@;
- return(c);
+ return c;
}
}
+@ @<Predecl...@>=@+static eight_bits get_next(void);
+
@ The following code assigns values to the combinations \.{++},
\.{--}, \.{->}, \.{>=}, \.{<=}, \.{==}, \.{<<}, \.{>>}, \.{!=}, \.{||} and
\.{\&\&}, and to the \CPLUSPLUS/
@@ -945,14 +930,14 @@ combinations \.{...}, \.{::}, \.{.*} and \.{->*}.
The compound assignment operators (e.g., \.{+=}) are
treated as separate tokens.
-@d compress(c) if (loc++<=limit) return(c)
+@d compress(c) if (loc++<=limit) return c
@<Compress tw...@>=
switch(c) {
case '+': if (*loc=='+') compress(plus_plus); break;
case '-': if (*loc=='-') {compress(minus_minus);}
- else if (*loc=='>') if (*(loc+1)=='*') {loc++; compress(minus_gt_ast);}
- else compress(minus_gt); break;
+ else { if (*loc=='>') { if (*(loc+1)=='*') {loc++; compress(minus_gt_ast);}
+ else compress(minus_gt); } } break;
case '.': if (*loc=='*') {compress(period_ast);}
else if (*loc=='.' && *(loc+1)=='.') {
loc++; compress(dot_dot_dot);
@@ -966,13 +951,14 @@ switch(c) {
else if (*loc=='<') compress(lt_lt); break;
case '&': if (*loc=='&') compress(and_and); break;
case '|': if (*loc=='|') compress(or_or); break;
- case '!': if (*loc=='=') compress(not_eq); break;
+ case '!': if (*loc=='=') compress(non_eq); break;
}
@ @<Get an identifier@>= {
id_first=--loc;
- while (isalpha(*++loc) || isdigit(*loc) || isxalpha(*loc) || ishigh(*loc));
- id_loc=loc; return(identifier);
+ while (isalpha((eight_bits)*++loc) || isdigit((eight_bits)*loc) @|
+ || isxalpha((eight_bits)*loc) || ishigh((eight_bits)*loc));
+ id_loc=loc; return identifier;
}
@ @<Get a constant@>= {
@@ -995,7 +981,7 @@ switch(c) {
found: while (*loc=='u' || *loc=='U' || *loc=='l' || *loc=='L'
|| *loc=='f' || *loc=='F') loc++;
id_loc=loc;
- return(constant);
+ return constant;
}
@ \CEE/ strings and character constants, delimited by double and single
@@ -1007,16 +993,17 @@ convention, but do not allow the string to be longer than |longest_name|.
char delim = c; /* what started the string */
id_first = section_text+1;
id_loc = section_text; *++id_loc=delim;
- if (delim=='L') { /* wide character constant */
+ if (delim=='L' || delim=='u' || delim=='U') { /* wide character constant */
+ if (delim=='u' && *loc=='8') { *++id_loc=*loc++; }
delim=*loc++; *++id_loc=delim;
}
- while (1) {
+ while (true) {
if (loc>=limit) {
if(*(limit-1)!='\\') {
err_print("! String didn't end"); loc=limit; break;
@.String didn't end@>
}
- if(get_line()==0) {
+ if(get_line()==false) {
err_print("! Input ended in middle of string"); loc=buffer; break;
@.Input ended in middle of string@>
}
@@ -1035,13 +1022,13 @@ convention, but do not allow the string to be longer than |longest_name|.
if (++id_loc<=section_text_end) *id_loc=c;
}
if (id_loc>=section_text_end) {
- printf("\n! String too long: ");
+ fputs("\n! String too long: ",stdout);
@.String too long@>
term_write(section_text+1,25);
err_print("...");
}
id_loc++;
- return(string);
+ return string;
}
@ After an \.{@@} sign has been scanned, the next character tells us
@@ -1061,10 +1048,10 @@ whether there is more work to do.
continue;
case section_name:
cur_section_name_char=*(loc-1);
- @<Scan the section name and make |cur_section_name| point to it@>;
- case string: @<Scan a verbatim string@>;
- case ord: @<Scan an ASCII constant@>;
- default: return(c);
+ @<Scan the section name and make |cur_section_name| point to it@>@;
+ case string: @<Scan a verbatim string@>@;
+ case ord: @<Scan an ASCII constant@>@;
+ default: return c;
}
}
@@ -1093,18 +1080,18 @@ thus, \.{@@'\\nopq'} gives the same result as \.{@@'\\n'}.
}
}
loc++;
- return(ord);
+ return ord;
@ @<Scan the section name...@>= {
char *k; /* pointer into |section_text| */
- @<Put section name into |section_text|@>;
+ @<Put section name into |section_text|@>@;
if (k-section_text>3 && strncmp(k-2,"...",3)==0)
cur_section_name=section_lookup(section_text+1,k-3,1); /* 1 means is a prefix */
else cur_section_name=section_lookup(section_text+1,k,0);
if (cur_section_name_char=='(')
@<If it's not there, add |cur_section_name| to the output file stack, or
- complain we're out of room@>;
- return(section_name);
+ complain we're out of room@>@;
+ return section_name;
}
@ Section names are placed into the |section_text| array with consecutive spaces,
@@ -1117,14 +1104,14 @@ character of the name.)
@ @<Put section name...@>=
k=section_text;
-while (1) {
- if (loc>limit && get_line()==0) {
+while (true) {
+ if (loc>limit && get_line()==false) {
err_print("! Input ended in section name");
@.Input ended in section name@>
loc=buffer+1; break;
}
c=*loc;
- @<If end of name or erroneous nesting, |break|@>;
+ @<If end of name or erroneous nesting, |break|@>@;
loc++; if (k<section_text_end) k++;
if (xisspace(c)) {
c=' '; if (*(k-1)==' ') k--;
@@ -1132,7 +1119,7 @@ while (1) {
*k=c;
}
if (k>=section_text_end) {
- printf("\n! Section name too long: ");
+ fputs("\n! Section name too long: ",stdout);
@.Section name too long@>
term_write(section_text+1,25);
printf("..."); mark_harmless;
@@ -1167,7 +1154,7 @@ buffer. We also set |loc| to the position just after the ending delimiter.
if (loc>=limit) err_print("! Verbatim string didn't end");
@.Verbatim string didn't end@>
id_loc=loc; loc+=2;
- return(string);
+ return string;
}
@* Scanning a macro definition.
@@ -1192,18 +1179,18 @@ acted, |cur_text| will point to the replacement text just generated, and
@d macro 0
@d app_repl(c) {if (tok_ptr==tok_mem_end) overflow("token"); *tok_ptr++=c;}
-@<Global...@>=
-text_pointer cur_text; /* replacement text formed by |scan_repl| */
-eight_bits next_control;
+@<Private...@>=
+static text_pointer cur_text; /* replacement text formed by |scan_repl| */
+static eight_bits next_control;
@ @c
-void
-scan_repl(t) /* creates a replacement text */
-eight_bits t;
+static void
+scan_repl(@t\1\1@> /* creates a replacement text */
+eight_bits t@t\2\2@>)
{
sixteen_bits a; /* the current token */
- if (t==section_name) {@<Insert the line number into |tok_mem|@>;}
- while (1) switch (a=get_next()) {
+ if (t==section_name) {@<Insert the line number into |tok_mem|@>@;}
+ while (true) switch (a=get_next()) {
@<In cases that |a| is a non-|char| token (|identifier|,
|section_name|, etc.), either process it and change |a| to a byte
that should be stored, or |continue| if |a| should be ignored,
@@ -1218,6 +1205,8 @@ eight_bits t;
cur_text=text_ptr; (++text_ptr)->tok_start=tok_ptr;
}
+@ @<Predecl...@>=@+static void scan_repl(eight_bits);
+
@ Here is the code for the line number: first a |sixteen_bits| equal
to |0150000|; then the numeric line number; then a pointer to the
file name.
@@ -1232,8 +1221,8 @@ if (changing && include_depth==change_depth) { /* correction made Feb 2017 */
store_two_bytes((sixteen_bits)cur_line);
}
id_loc=id_first+strlen(id_first);
-{int a=id_lookup(id_first,id_loc,0)-name_dir; app_repl((a / 0400)+0200);
- app_repl(a % 0400);}
+{int a_l=id_lookup(id_first,id_loc,0)-name_dir; app_repl((a_l / 0400)+0200);
+ app_repl(a_l % 0400);}
@ @<In cases that |a| is...@>=
case identifier: a=id_lookup(id_first,id_loc,0)-name_dir;
@@ -1241,26 +1230,26 @@ case identifier: a=id_lookup(id_first,id_loc,0)-name_dir;
app_repl(a % 0400); break;
case section_name: if (t!=section_name) goto done;
else {
- @<Was an `@@' missed here?@>;
+ @<Was an `\.{@@}' missed here?@>@;
a=cur_section_name-name_dir;
app_repl((a / 0400)+0250);
app_repl(a % 0400);
- @<Insert the line number into |tok_mem|@>; break;
+ @<Insert the line number into |tok_mem|@>@; break;
}
case output_defs_code: if (t!=section_name) err_print("! Misplaced @@h");
@.Misplaced @@h@>
else {
- output_defs_seen=1;
+ output_defs_seen=true;
a=output_defs_flag;
app_repl((a / 0400)+0200);
app_repl(a % 0400);
- @<Insert the line number into |tok_mem|@>;
+ @<Insert the line number into |tok_mem|@>@;
}
break;
case constant: case string:
- @<Copy a string or verbatim construction or numerical constant@>;
+ @<Copy a string or verbatim construction or numerical constant@>@;
case ord:
- @<Copy an ASCII constant@>;
+ @<Copy an ASCII constant@>@;
case definition: case format_code: case begin_C: if (t!=section_name) goto done;
else {
err_print("! @@d, @@f and @@c are ignored in C text"); continue;
@@ -1268,7 +1257,7 @@ case definition: case format_code: case begin_C: if (t!=section_name) goto done;
}
case new_section: goto done;
-@ @<Was an `@@'...@>= {
+@ @<Was an `\.{@@}'...@>= {
char *try_loc=loc;
while (*try_loc==' ' && try_loc<limit) try_loc++;
if (*try_loc=='+' && try_loc<limit) try_loc++;
@@ -1320,12 +1309,12 @@ code internally.
if (xisdigit(*(id_first+1))) c=*(++id_first)-'0';
else if (xisxdigit(*(id_first+1))) {
++id_first;
- c=toupper(*id_first)-'A'+10;
+ c=toupper((eight_bits)*id_first)-'A'+10;
}
if (xisdigit(*(id_first+1))) c=16*c+*(++id_first)-'0';
else if (xisxdigit(*(id_first+1))) {
++id_first;
- c=16*c+toupper(*id_first)-'A'+10;
+ c=16*c+toupper((eight_bits)*id_first)-'A'+10;
}
break;
case '\\':c='\\';@+break;
@@ -1350,28 +1339,25 @@ sensed in the input, and it proceeds until the end of that section. It
uses |section_count| to keep track of the current section number; with luck,
\.{CWEAVE} and \.{CTANGLE} will both assign the same numbers to sections.
-@<Global...@>=
-extern sixteen_bits section_count; /* the current section number */
-
-@ The body of |scan_section| is a loop where we look for control codes
+The body of |scan_section| is a loop where we look for control codes
that are significant to \.{CTANGLE}: those
that delimit a definition, the \CEE/ part of a module, or a new module.
@c
-void
-scan_section()
+static void
+scan_section(void)
{
name_pointer p; /* section name for the current section */
text_pointer q; /* text for the current section */
sixteen_bits a; /* token for left-hand side of definition */
- section_count++; @+ no_where=1;
+ section_count++; @+ no_where=true;
if (*(loc-1)=='*' && show_progress) { /* starred section */
printf("*%d",section_count); update_terminal;
}
next_control=0;
- while (1) {
+ while (true) {
@<Skip ahead until |next_control| corresponds to \.{@@d}, \.{@@<},
- \.{@@\ } or the like@>;
+ \.{@@\ } or the like@>@;
if (next_control == definition) { /* \.{@@d} */
@<Scan a definition@>@;
continue;
@@ -1381,15 +1367,17 @@ scan_section()
}
if (next_control == section_name) { /* \.{@@<} or \.{@@(} */
p=cur_section_name;
- @<If section is not being defined, |continue| @>;
+ @<If section is not being defined, |continue| @>@;
break;
}
return; /* \.{@@\ } or \.{@@*} */
}
- no_where=print_where=0;
- @<Scan the \CEE/ part of the current section@>;
+ no_where=print_where=false;
+ @<Scan the \CEE/ part of the current section@>@;
}
+@ @<Predecl...@>=@+static void scan_section(void);
+
@ At the top of this loop, if |next_control==section_name|, the
section name has already been scanned (see |@<Get control code
and...@>|). Thus, if we encounter |next_control==section_name| in the
@@ -1404,7 +1392,7 @@ while (next_control<definition)
}
@ @<Scan a definition@>= {
- while ((next_control=get_next())=='\n'); /*allow newline before definition */
+ while ((next_control=get_next())=='\n'); /* allow newline before definition */
if (next_control!=identifier) {
err_print("! Definition flushed, must start with identifier");
@.Definition flushed...@>
@@ -1417,7 +1405,7 @@ while (next_control<definition)
app_repl(string); app_repl(' '); app_repl(string);
}
scan_repl(macro);
- cur_text->text_link=0; /* |text_link==0| characterizes a macro */
+ cur_text->text_link=macro;
}
@ If the section name is not followed by \.{=} or \.{+=}, no \CEE/
@@ -1434,9 +1422,9 @@ if (next_control!='=' && next_control!=eq_eq)
continue;
@ @<Scan the \CEE/...@>=
-@<Insert the section number into |tok_mem|@>;
+@<Insert the section number into |tok_mem|@>@;
scan_repl(section_name); /* now |cur_text| points to the replacement text */
-@<Update the data structure so that the replacement text is accessible@>;
+@<Update the data structure so that the replacement text is accessible@>@;
@ @<Insert the section number...@>=
store_two_bytes((sixteen_bits)(0150000+section_count));
@@ -1446,7 +1434,7 @@ store_two_bytes((sixteen_bits)(0150000+section_count));
if (p==name_dir||p==0) { /* unnamed section, or bad section name */
(last_unnamed)->text_link=cur_text-text_info; last_unnamed=cur_text;
}
-else if (p->equiv==(char *)text_info) p->equiv=(char *)cur_text;
+else if (p->equiv==(void *)text_info) p->equiv=(void *)cur_text;
/* first section of this name */
else {
q=(text_pointer)p->equiv;
@@ -1457,12 +1445,9 @@ else {
cur_text->text_link=section_flag;
/* mark this replacement text as a nonmacro */
-@ @<Predec...@>=
-void phase_one();
-
@ @c
-void
-phase_one() {
+static void
+phase_one(void) {
phase=1;
section_count=0;
reset_input();
@@ -1472,26 +1457,25 @@ phase_one() {
phase=2;
}
+@ @<Predec...@>=@+static void phase_one(void);
+
@ Only a small subset of the control codes is legal in limbo, so limbo
processing is straightforward.
-@<Predecl...@>=
-void skip_limbo();
-
-@ @c
-void
-skip_limbo()
+@c
+static void
+skip_limbo(void)
{
char c;
- while (1) {
- if (loc>limit && get_line()==0) return;
+ while (true) {
+ if (loc>limit && get_line()==false) return;
*(limit+1)='@@';
while (*loc!='@@') loc++;
if (loc++<=limit) {
c=*loc++;
if (ccode[(eight_bits)c]==new_section) break;
switch (ccode[(eight_bits)c]) {
- case translit_code: @<Read in transliteration of a character@>; break;
+ case translit_code: @<Read in transliteration of a character@>@; break;
case format_code: case '@@': break;
case control_text: if (c=='q' || c=='Q') {
while ((c=skip_ahead())=='@@');
@@ -1507,6 +1491,8 @@ skip_limbo()
}
}
+@ @<Predecl...@>=@+static void skip_limbo(void);
+
@ @<Read in transliteration of a character@>=
while(xisspace(*loc)&&loc<limit) loc++;
loc+=3;
@@ -1515,7 +1501,7 @@ skip_limbo()
err_print("! Improper hex number following @@l");
@.Improper hex number...@>
else {
- unsigned i;
+ unsigned int i;
char *beg;
sscanf(loc-3,"%x",&i);
while(xisspace(*loc)&&loc<limit) loc++;
@@ -1525,26 +1511,26 @@ skip_limbo()
err_print("! Replacement string in @@l too long");
@.Replacement string in @@l...@>
else{
- strncpy(translit[i-0200],beg,loc-beg);
+ strncpy(translit[i-0200],beg,(size_t)(loc-beg));
translit[i-0200][loc-beg]='\0';
}
}
-@ Because on some systems the difference between two pointers is a |long|
+@ Because on some systems the difference between two pointers is a |ptrdiff_t|
but not an |int|, we use \.{\%ld} to print these quantities.
@c
void
-print_stats() {
- printf("\nMemory usage statistics:\n");
+print_stats(void) {
+ puts("\nMemory usage statistics:");
printf("%ld names (out of %ld)\n",
- (long)(name_ptr-name_dir),(long)max_names);
+ (ptrdiff_t)(name_ptr-name_dir),(long)max_names);
printf("%ld replacement texts (out of %ld)\n",
- (long)(text_ptr-text_info),(long)max_texts);
+ (ptrdiff_t)(text_ptr-text_info),(long)max_texts);
printf("%ld bytes (out of %ld)\n",
- (long)(byte_ptr-byte_mem),(long)max_bytes);
+ (ptrdiff_t)(byte_ptr-byte_mem),(long)max_bytes);
printf("%ld tokens (out of %ld)\n",
- (long)(tok_ptr-tok_mem),(long)max_toks);
+ (ptrdiff_t)(tok_ptr-tok_mem),(long)max_toks);
}
@** Index.
diff --git a/web/c_cpp/cweb/cweav-bs.ch b/web/c_cpp/cweb/cweav-bs.ch
index 8c4c1fe8ff..bf2752881e 100644
--- a/web/c_cpp/cweb/cweav-bs.ch
+++ b/web/c_cpp/cweb/cweav-bs.ch
@@ -20,17 +20,17 @@ This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94.
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 3.64)\n"
+@d banner "This is CWEAVE (Version 4.2)"
@y
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 3.64pc/big)\n"
+@d banner "This is CWEAVE (Version 4.2pc/big)"
@z
-@x Section 9.
-@d chunk_marker 0
+@x Section 7.
+ for section names */
@<Common code...@>=
typedef struct name_info {
@@ -41,24 +41,21 @@ typedef struct name_info {
names */
char Ilk; /* used by identifiers in \.{CWEAVE} only */
} dummy;
- char *equiv_or_xref; /* info corresponding to names */
+ void *equiv_or_xref; /* info corresponding to names */
} name_info; /* contains information about an identifier or section name */
typedef name_info *name_pointer; /* pointer into array of \&{name\_info}s */
typedef name_pointer *hash_pointer;
extern char byte_mem[]; /* characters of names */
extern char *byte_mem_end; /* end of |byte_mem| */
+extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_info name_dir[]; /* information about names */
extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
-extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_pointer hash[]; /* heads of hash lists */
extern hash_pointer hash_end; /* end of |hash| */
extern hash_pointer h; /* index into hash-head array */
-extern name_pointer id_lookup(); /* looks up a string in the identifier table */
-extern name_pointer section_lookup(); /* finds section name */
-extern void print_section_name(), sprint_section_name();
@y
-@d chunk_marker 0
+ for section names */
@f huge extern
@@ -87,13 +84,10 @@ extern char huge* byte_ptr; /* first unused position in |byte_mem| */
extern name_pointer hash[]; /* heads of hash lists */
extern hash_pointer hash_end; /* end of |hash| */
extern hash_pointer h; /* index into hash-head array */
-extern name_pointer id_lookup(); /* looks up a string in the identifier table */
-extern name_pointer section_lookup(); /* finds section name */
-extern void print_section_name(), sprint_section_name();
@z
-@x Section 18.
+@x Section 22.
typedef struct xref_info {
sixteen_bits num; /* section number plus zero or |def_flag| */
struct xref_info *xlink; /* pointer to the previous cross-reference */
@@ -108,81 +102,54 @@ typedef xref_info huge* xref_pointer;
@z
-@x Section 19.
-xref_info xmem[max_refs]; /* contains cross-reference information */
-xref_pointer xmem_end = xmem+max_refs-1;
+@x Section 23.
+static xref_info xmem[max_refs]; /* contains cross-reference information */
+static xref_pointer xmem_end = xmem+max_refs-1;
@y
-xref_info huge xmem[max_refs]; /* contains cross-reference information */
-xref_pointer xmem_end;
+static xref_info huge xmem[max_refs]; /* contains cross-reference information */
+static xref_pointer xmem_end;
@z
-@x Section 20.
+@x Section 24.
@d xref equiv_or_xref
@y
@d xref ptr_union.xref_member
@z
-@x Section 20.
-xref_ptr=xmem; name_dir->xref=(char*)xmem; xref_switch=0; section_xref_switch=0;
+@x Section 24.
+xref_ptr=xmem; init_node(name_dir); xref_switch=0; section_xref_switch=0;
xmem->num=0; /* sentinel value */
@y
xmem_end = xmem + max_refs - 1;
-xref_ptr=xmem; name_dir->xref=(char*)xmem; xref_switch=0; section_xref_switch=0;
+xref_ptr=xmem; init_node(name_dir); xref_switch=0; section_xref_switch=0;
xmem->num=0; /* sentinel value */
@z
-@x Section 21.
- append_xref(m); xref_ptr->xlink=q; p->xref=(char*)xref_ptr;
-@y
- append_xref(m); xref_ptr->xlink=q; p->xref=(char huge*)xref_ptr;
-@z
-
-
-@x Section 22.
- if (r==xmem) p->xref=(char*)xref_ptr;
-@y
- if (r==xmem) p->xref=(char huge*)xref_ptr;
-@z
-
-
-@x Section 23.
- q=(xref_pointer)p->xref;
- if (q->num==file_flag) return;
- append_xref(file_flag);
- xref_ptr->xlink = q;
- p->xref = (char *)xref_ptr;
+@x Section 30. (to please Borland's C++, version 4.02)
+static token tok_mem[max_toks]; /* tokens */
+static token_pointer tok_mem_end = tok_mem+max_toks-1; /* end of |tok_mem| */
+static token_pointer tok_ptr; /* first unused position in |tok_mem| */
+static token_pointer max_tok_ptr; /* largest value of |tok_ptr| */
+static token_pointer tok_start[max_texts]; /* directory into |tok_mem| */
+static text_pointer tok_start_end = tok_start+max_texts-1; /* end of |tok_start| */
+static text_pointer text_ptr; /* first unused position in |tok_start| */
@y
- q=(xref_pointer)p->xref;
- if (q->num==file_flag) return;
- append_xref(file_flag);
- xref_ptr->xlink = q;
- p->xref = (char huge*)xref_ptr;
+static token tok_mem[max_toks]; /* tokens */
+static token_pointer tok_mem_end; /* end of |tok_mem| */
+static token_pointer tok_ptr; /* first unused position in |tok_mem| */
+static token_pointer max_tok_ptr; /* largest value of |tok_ptr| */
+static token_pointer tok_start[max_texts]; /* directory into |tok_mem| */
+static text_pointer tok_start_end; /* end of |tok_start| */
+static text_pointer text_ptr; /* first unused position in |tok_start| */
@z
-@x Section 25. (to please Borland's C++, version 4.02)
-token tok_mem[max_toks]; /* tokens */
-token_pointer tok_mem_end = tok_mem+max_toks-1; /* end of |tok_mem| */
-token_pointer tok_start[max_texts]; /* directory into |tok_mem| */
-token_pointer tok_ptr; /* first unused position in |tok_mem| */
-text_pointer text_ptr; /* first unused position in |tok_start| */
-text_pointer tok_start_end = tok_start+max_texts-1; /* end of |tok_start| */
-token_pointer max_tok_ptr; /* largest value of |tok_ptr| */
-@y
-token tok_mem[max_toks]; /* tokens */
-token_pointer tok_mem_end; /* end of |tok_mem| */
-token_pointer tok_start[max_texts]; /* directory into |tok_mem| */
-token_pointer tok_ptr; /* first unused position in |tok_mem| */
-text_pointer text_ptr; /* first unused position in |tok_start| */
-text_pointer tok_start_end; /* end of |tok_start| */
-token_pointer max_tok_ptr; /* largest value of |tok_ptr| */
-@z
-
-@x Section 26. (goes with the previous change)
-tok_start[1]=tok_mem+1;
-max_tok_ptr=tok_mem+1; max_text_ptr=tok_start+1;
+@x Section 31. (goes with the previous change)
+tok_ptr=max_tok_ptr=tok_mem+1;@/
+tok_start[0]=tok_start[1]=tok_mem+1;@/
+text_ptr=max_text_ptr=tok_start+1;
@y
tok_start[1]=tok_mem+1;
tok_mem_end=tok_mem+max_toks-1;
@@ -191,27 +158,20 @@ max_tok_ptr=tok_mem+1; max_text_ptr=tok_start+1;
@z
-@x Section 27.
- p->ilk=t; p->xref=(char*)xmem;
-@y
- p->ilk=t; p->xref=(char huge*)xmem;
-@z
-
-
-@x Section 27.
- p->xref=(char*)xmem;
+@x Section 32.
+ p->xref=(void *)xmem;
@y
- p->xref=(char huge*)xmem;
+ p->xref=(void huge*)xmem;
@z
-@x Section 70.
+@x Section 74.
if (unindexed(lhs)) { /* retain only underlined entries */
xref_pointer q,r=NULL;
for (q=(xref_pointer)lhs->xref;q>xmem;q=q->xlink)
if (q->num<def_flag)
if (r) r->xlink=q->xlink;
- else lhs->xref=(char*)q->xlink;
+ else lhs->xref=(void *)q->xlink;
else r=q;
}
@y
@@ -220,13 +180,13 @@ max_tok_ptr=tok_mem+1; max_text_ptr=tok_start+1;
for (q=(xref_pointer)lhs->xref;q>xmem;q=q->xlink)
if (q->num<def_flag)
if (r) r->xlink=q->xlink;
- else lhs->xref=(char huge*)q->xlink;
+ else lhs->xref=(void huge*)q->xlink;
else r=q;
}
@z
-@x Section 87.
+@x Section 93.
char *k, *k_end=(p+1)->byte_start; /* pointers into |byte_mem| */
out('{');
for (k=p->byte_start; k<k_end; k++) {
@@ -237,66 +197,40 @@ max_tok_ptr=tok_mem+1; max_text_ptr=tok_start+1;
@z
-@x Section 116.
- append_xref(0); /* this number doesn't matter */
- xref_ptr->xlink=(xref_pointer)p->xref; r=xref_ptr;
- p->xref=(char*)xref_ptr;
- while (r->xlink!=q) {r->num=r->xlink->num; r=r->xlink;}
- r->num=m; /* everything from |q| on is left undisturbed */
-@y
- append_xref(0); /* this number doesn't matter */
- xref_ptr->xlink=(xref_pointer)p->xref; r=xref_ptr;
- p->xref=(char huge*)xref_ptr;
- while (r->xlink!=q) {r->num=r->xlink->num; r=r->xlink;}
- r->num=m; /* everything from |q| on is left undisturbed */
-@z
-
-
-@x Section 163.
-@ @<Change |pp| to $\max...@>=
-@y
-@ @<Change |pp| to $\max...@>=
-#ifdef __MSDOS__
-if (d<0 && pp+d>pp) pp=scrap_base; /* segmented architecture caused wrap */
-else
-#endif
-@z
-
-
-@x Section 194.
+@x Section 209.
char *p; /* index into |byte_mem| */
@y
char huge *p; /* index into |byte_mem| */
@z
-@x Section 229.
- if (cur_name->xref!=(char*)xmem) {
+@x Section 244.
+ if (cur_name->xref!=(void *)xmem) {
@y
- if (cur_name->xref!=(char huge*)xmem) {
+ if (cur_name->xref!=(void huge*)xmem) {
@z
-@x Section 232.
-char *cur_byte; /* index into |byte_mem| */
+@x Section 246.
+static char *cur_byte; /* index into |byte_mem| */
@y
-char huge* cur_byte; /* index into |byte_mem| */
+static char huge* cur_byte; /* index into |byte_mem| */
@z
-@x Section 241.
+@x Section 255.
switch (cur_name->ilk) {
- case normal: if (is_tiny(cur_name)) out_str("\\|");
+ case normal: case func_template: if (is_tiny(cur_name)) out_str("\\|");
else {char *j;
@y
switch (cur_name->ilk) {
- case normal: if (is_tiny(cur_name)) out_str("\\|");
+ case normal: case func_template: if (is_tiny(cur_name)) out_str("\\|");
else {char huge* j;
@z
-@x Section 241.
- case custom: case quoted: {char *j; out_str("$\\");
+@x Section 255.
+ case custom: {char *j; out_str("$\\");
@y
- case custom: case quoted: {char huge* j; out_str("$\\");
+ case custom: {char huge* j; out_str("$\\");
@z
diff --git a/web/c_cpp/cweb/cweav-pc.ch b/web/c_cpp/cweb/cweav-pc.ch
index 28cd94f5a3..b37f9f2ec3 100644
--- a/web/c_cpp/cweb/cweav-pc.ch
+++ b/web/c_cpp/cweb/cweav-pc.ch
@@ -11,29 +11,18 @@ that allows >64K arrays. (If you need lots more bytes, try the alternate
change files that have -bs in their name instead of -pc.)
@x section 1
-@d banner "This is CWEAVE (Version 3.64)\n"
+@d banner "This is CWEAVE (Version 4.2)"
@y
-@d banner "This is CWEAVE (Version 3.64pc)\n"
+@d banner "This is CWEAVE (Version 4.2pc)"
@z
@x section 4
-@d max_bytes 90000 /* the number of bytes in identifiers,
+@d max_bytes 1000000 /* the number of bytes in identifiers,
@y
@d max_bytes (unsigned)60000 /* the number of bytes in identifiers,
@z
@x
-@d max_refs 20000 /* number of cross-references; must be less than 65536 */
+@d max_refs 65535 /* number of cross-references; must be less than 65536 */
@y
@d max_refs 10000 /* number of cross-references; must be less than 65536 */
@z
-
-@x section 163
-@ @<Change |pp| to $\max...@>=
-@y
-@ @<Change |pp| to $\max...@>=
-#ifdef __MSDOS__
-if (d<0 && pp+d>pp) pp=scrap_base; /* segmented architecture caused wrap */
-else
-#endif
-@z
-
diff --git a/web/c_cpp/cweb/cweav-ql.ch b/web/c_cpp/cweb/cweav-ql.ch
index 3e37ba2352..28053eb158 100644
--- a/web/c_cpp/cweb/cweav-ql.ch
+++ b/web/c_cpp/cweb/cweav-ql.ch
@@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c =500000 cweave_c"
@x
-\def\title{CWEAVE (Version 3.64)}
+\def\title{CWEAVE (Version 4.2)}
@y
-\def\title{CWEAVE (QL Version 3.64)}
+\def\title{CWEAVE (QL Version 4.2)}
@z
@x section 1
-@d banner "This is CWEAVE (Version 3.64)\n"
+@d banner "This is CWEAVE (Version 4.2)"
@y
-@d banner "This is CWEAVE (QL Version 3.64)\n"
+@d banner "This is CWEAVE (QL Version 4.2)"
@z
@x
diff --git a/web/c_cpp/cweb/cweav-vms.ch b/web/c_cpp/cweb/cweav-vms.ch
index b6f46559cc..7d80d57c1e 100644
--- a/web/c_cpp/cweb/cweav-vms.ch
+++ b/web/c_cpp/cweb/cweav-vms.ch
@@ -13,25 +13,26 @@ modified:
(also modified by Don Knuth to keep version numbers uptodate)
@x section 1 (01-FEB-1992 ST)
-@d banner "This is CWEAVE (Version 3.64)\n"
+@d banner "This is CWEAVE (Version 4.2)"
@y
-@d banner "This is CWEAVE (VAX/VMS Version 3.64)\n"
+@d banner "This is CWEAVE (VAX/VMS Version 4.2)"
@z
-@x section 6 (from common.h) (01-FEB-1992 ST)
-#include <stdio.h>
+@x section 3 (01-FEB-1992 ST)
+#include <ctype.h> /* definition of |@!isalpha|, |@!isdigit| and so on */
+#include <stdbool.h> /* definition of |@!bool|, |@!true| and |@!false| */
+#include <stddef.h> /* definition of |@!ptrdiff_t| */
+#include <stdint.h> /* definition of |@!uint8_t| and |@!uint16_t| */
+#include <stdlib.h> /* definition of |@!getenv| and |@!exit| */
+#include <stdio.h> /* definition of |@!printf| and friends */
+#include <string.h> /* definition of |@!strlen|, |@!strcmp| and so on */
@y
-#include stdio /* VMS searches Textlibraries faster */
-@z
-
-@x section 38 (1991 JM) (01-FEB-1992 ST)
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-@y
-#include ctype /* VMS searches Textlibraries faster */
-@z
-
-@x section 39 (01-FEB-1992 ST)
-@d isxalpha(c) ((c)=='_') /* non-alpha character allowed in identifier */
-@y
-@d isxalpha(c) ((c)=='_' || (c)=='$') /* non-alpha characters allowed in id */
+#include ctype /* definition of |@!isalpha|, |@!isdigit| and so on */
+ /* VMS searches text libraries faster */
+#include stdbool /* definition of |@!bool|, |@!true| and |@!false| */
+#include stddef /* definition of |@!ptrdiff_t| */
+#include stdint /* definition of |@!uint8_t| and |@!uint16_t| */
+#include stdlib /* definition of |@!getenv| and |@!exit| */
+#include stdio /* definition of |@!printf| and friends */
+#include string /* definition of |@!strlen|, |@!strcmp| and so on */
@z
diff --git a/web/c_cpp/cweb/cweav-w32.ch b/web/c_cpp/cweb/cweav-w32.ch
index 26825b0bfd..346d00771a 100644
--- a/web/c_cpp/cweb/cweav-w32.ch
+++ b/web/c_cpp/cweb/cweav-w32.ch
@@ -2,51 +2,33 @@ This is the change file for CWEB's CWEAVE under Win32
(Contributed by Fabrice Popineau, February 2002)
@x section 1
-@d banner "This is CWEAVE (Version 3.64)\n"
+@d banner "This is CWEAVE (Version 4.2)"
@y
-@d banner "This is CWEAVE (Version 3.64win32)\n"
+@d banner "This is CWEAVE (Version 4.2win32)"
@z
@x
-@ We predeclare several standard system functions here instead of including
-their system header files, because the names of the header files are not as
-standard as the names of the functions. (For example, some \CEE/ environments
-have \.{<string.h>} where others have \.{<strings.h>}.)
-
-@<Predecl...@>=
-extern int strlen(); /* length of string */
-extern int strcmp(); /* compare strings lexicographically */
-extern char* strcpy(); /* copy one string to another */
-extern int strncmp(); /* compare up to $n$ string characters */
-extern char* strncpy(); /* copy up to $n$ string characters */
-@y
-@z
-
-@x
-int names_match(p,first,l,t)
-name_pointer p; /* points to the proposed match */
+boolean names_match(@t\1\1@>
+name_pointer p, /* points to the proposed match */
+const char *first, /* position of first character of string */
+size_t l, /* length of identifier */
+eight_bits t@t\2\2@>) /* desired |ilk| */
@y
-int __cdecl names_match(p,first,l,t)
-name_pointer p; /* points to the proposed match */
+boolean __cdecl names_match(@t\1\1@>
+name_pointer p, /* points to the proposed match */
+const char *first, /* position of first character of string */
+size_t l, /* length of identifier */
+eight_bits t@t\2\2@>) /* desired |ilk| */
@z
@x
void
-init_p(p,t)
-name_pointer p;
+init_p(
+name_pointer p,
+eight_bits t)
@y
void __cdecl
-init_p(p,t)
-name_pointer p;
-@z
-
-@x
-@ @<Include...@>=
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-#include <stdlib.h> /* definition of |exit| */
-@y
-@ @<Include...@>=
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-#include <stdlib.h> /* definition of |exit| */
-#include <string.h> /* definition of |strncmp| and |strncpy| */
+init_p(
+name_pointer p,
+eight_bits t)
@z
diff --git a/web/c_cpp/cweb/cweave.w b/web/c_cpp/cweb/cweave.w
index e06762b1fc..a8e31055b2 100644
--- a/web/c_cpp/cweb/cweave.w
+++ b/web/c_cpp/cweb/cweave.w
@@ -2,10 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 3.64 --- February 2002
-% (essentially the same as version 3.6, which added
-% recently introduced features of standard C++ to version 3.4)
-% (In November 2016 I made minor adjustments but changed no code -- DEK)
+% Version 4.2 --- February 2021
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -18,6 +15,11 @@
% entire resulting derived work is given a different name and distributed
% under the terms of a permission notice identical to this one.
+% Amendments to 'cweave.w' resulting in this updated version were created
+% by numerous collaborators over the course of many years.
+
+% Please send comments, suggestions, etc. to tex-k@@tug.org.
+
% Here is TeX material that gets inserted after \input cwebmac
\def\hang{\hangindent 3em\indent\ignorespaces}
\def\pb{$\.|\ldots\.|$} % C brackets (|...|)
@@ -30,11 +32,11 @@
\def\skipxTeX{\\{skip\_\TEX/}}
\def\copyxTeX{\\{copy\_\TEX/}}
-\def\title{CWEAVE (Version 3.64)}
+\def\title{CWEAVE (Version 4.2)}
\def\topofcontents{\null\vfill
\centerline{\titlefont The {\ttitlefont CWEAVE} processor}
\vskip 15pt
- \centerline{(Version 3.64)}
+ \centerline{(Version 4.2)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -52,7 +54,6 @@ under the terms of a permission notice identical to this one.
}
\pageno=\contentspagenumber \advance\pageno by 1
\let\maybe=\iftrue
-@s not_eq normal @q unreserve a C++ keyword @>
@** Introduction.
This is the \.{CWEAVE} program by Silvio Levy and Donald E. Knuth,
@@ -66,27 +67,15 @@ Crusius, and others who have contributed improvements.
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 3.64)\n"
+@d banner "This is CWEAVE (Version 4.2)"
@c @<Include files@>@/
@h
@<Common code for \.{CWEAVE} and \.{CTANGLE}@>@/
@<Typedef declarations@>@/
-@<Global variables@>@/
+@<Private variables@>@/
@<Predeclaration of procedures@>
-@ We predeclare several standard system functions here instead of including
-their system header files, because the names of the header files are not as
-standard as the names of the functions. (For example, some \CEE/ environments
-have \.{<string.h>} where others have \.{<strings.h>}.)
-
-@<Predecl...@>=
-extern int strlen(); /* length of string */
-extern int strcmp(); /* compare strings lexicographically */
-extern char* strcpy(); /* copy one string to another */
-extern int strncmp(); /* compare up to $n$ string characters */
-extern char* strncpy(); /* copy up to $n$ string characters */
-
@ \.{CWEAVE} has a fairly straightforward outline. It operates in
three phases: First it inputs the source file and stores cross-reference
data, then it inputs the source once again and produces the \TEX/ output
@@ -96,52 +85,40 @@ Please read the documentation for \.{common}, the set of routines common
to \.{CTANGLE} and \.{CWEAVE}, before proceeding further.
@c
-int main (ac, av)
-int ac; /* argument count */
-char **av; /* argument values */
+int main (@t\1\1@>
+int ac, /* argument count */
+char **av@t\2\2@>) /* argument values */
{
argc=ac; argv=av;
program=cweave;
- make_xrefs=force_lines=make_pb=1; /* controlled by command-line options */
+ @<Set initial values@>@;
common_init();
- @<Set initial values@>;
- if (show_banner) printf(banner); /* print a ``banner line'' */
- @<Store all the reserved words@>;
+ @<Start \TEX/ output@>@;
+ if (show_banner) puts(banner); /* print a ``banner line'' */
+ @<Store all the reserved words@>@;
phase_one(); /* read all the user's text and store the cross-references */
phase_two(); /* read all the text again and translate it to \TEX/ form */
phase_three(); /* output the cross-reference index */
+ if (tracing==2 && !show_progress) new_line;
return wrap_up(); /* and exit gracefully */
}
+@ The next few sections contain stuff from the file |"common.w"| that must
+be included in both |"ctangle.w"| and |"cweave.w"|. It appears in
+file |"common.h"|, which is also included in |"common.w"| to propagate
+possible changes from this \.{COMMON} interface consistently.
+
+@i common.h
+
@ The following parameters were sufficient in the original \.{WEAVE} to
handle \TEX/, so they should be sufficient for most applications of \.{CWEAVE}.
-If you change |max_bytes|, |max_names|, |hash_size|, or |buf_size|
-you have to change them also in the file |"common.w"|.
-
-@d max_bytes 90000 /* the number of bytes in identifiers,
- index entries, and section names */
-@d max_names 4000 /* number of identifiers, strings, section names;
- must be less than 10240; used in |"common.w"| */
-@d max_sections 2000 /* greater than the total number of sections */
-@d hash_size 353 /* should be prime */
-@d buf_size 100 /* maximum length of input line, plus one */
-@d longest_name 10000 /* section names and strings shouldn't be longer than this */
-@d long_buf_size (buf_size+longest_name)
+
@d line_length 80 /* lines of \TEX/ output have at most this many characters;
should be less than 256 */
-@d max_refs 20000 /* number of cross-references; must be less than 65536 */
-@d max_toks 20000 /* number of symbols in \CEE/ texts being parsed;
- must be less than 65536 */
-@d max_texts 4000 /* number of phrases in \CEE/ texts being parsed;
+@d max_refs 65535 /* number of cross-references; must be less than 65536 */
+@d max_texts 10239 /* number of phrases in \CEE/ texts being parsed;
must be less than 10240 */
-@d max_scraps 2000 /* number of tokens in \CEE/ texts being parsed */
-@d stack_size 400 /* number of simultaneous output levels */
-
-@ The next few sections contain stuff from the file |"common.w"| that must
-be included in both |"ctangle.w"| and |"cweave.w"|. It appears in
-file |"common.h"|, which needs to be updated when |"common.w"| changes.
-
-@i common.h
+@d max_scraps 10000 /* number of tokens in \CEE/ texts being parsed */
@* Data structures exclusive to {\tt CWEAVE}.
As explained in \.{common.w}, the field of a |name_info| structure
@@ -205,8 +182,8 @@ is the total number of sections that have started. Sections which have
been altered by a change file entry have their |changed_section| flag
turned on during the first phase.
-@<Global...@>=
-boolean change_exists; /* has any section changed? */
+@<Private...@>=
+static boolean change_exists; /* has any section changed? */
@ The other large memory area in \.{CWEAVE} keeps the cross-reference data.
All uses of the name |p| are recorded in a linked list beginning at
@@ -237,11 +214,11 @@ typedef struct xref_info {
} xref_info;
typedef xref_info *xref_pointer;
-@ @<Global...@>=
-xref_info xmem[max_refs]; /* contains cross-reference information */
-xref_pointer xmem_end = xmem+max_refs-1;
-xref_pointer xref_ptr; /* the largest occupied position in |xmem| */
-sixteen_bits xref_switch,section_xref_switch; /* either zero or |def_flag| */
+@ @<Private...@>=
+static xref_info xmem[max_refs]; /* contains cross-reference information */
+static xref_pointer xmem_end = xmem+max_refs-1;
+static xref_pointer xref_ptr; /* the largest occupied position in |xmem| */
+static sixteen_bits xref_switch,section_xref_switch; /* either zero or |def_flag| */
@ A section that is used for multi-file output (with the \.{@@(} feature)
has a special first cross-reference whose |num| field is |file_flag|.
@@ -252,7 +229,7 @@ has a special first cross-reference whose |num| field is |file_flag|.
@d xref equiv_or_xref
@<Set init...@>=
-xref_ptr=xmem; name_dir->xref=(char*)xmem; xref_switch=0; section_xref_switch=0;
+xref_ptr=xmem; init_node(name_dir); xref_switch=0; section_xref_switch=0;
xmem->num=0; /* sentinel value */
@ A new cross-reference for an identifier is formed by calling |new_xref|,
@@ -266,16 +243,20 @@ If one were careful, one could probably make more changes around section
@d append_xref(c) if (xref_ptr==xmem_end) overflow("cross-reference");
else (++xref_ptr)->num=c;
-@d no_xref (flags['x']==0)
-@d make_xrefs flags['x'] /* should cross references be output? */
+@d no_xref (!make_xrefs)
@d is_tiny(p) ((p+1)->byte_start==(p)->byte_start+1)
@d unindexed(a) (a<res_wd_end && a->ilk>=custom)
/* tells if uses of a name are to be indexed */
-@c
-void
-new_xref(p)
-name_pointer p;
+@<Predecl...@>=
+static void new_xref(name_pointer);@/
+static void new_section_xref(name_pointer);@/
+static void set_file_flag(name_pointer);
+
+@ @c
+static void
+new_xref(
+name_pointer p)
{
xref_pointer q; /* pointer to previous cross-reference */
sixteen_bits m, n; /* new and previous cross-reference value */
@@ -289,7 +270,7 @@ name_pointer p;
q->num=m; return;
}
}
- append_xref(m); xref_ptr->xlink=q; p->xref=(char*)xref_ptr;
+ append_xref(m); xref_ptr->xlink=q; update_node(p);
}
@ The cross-reference lists for section names are slightly different.
@@ -304,9 +285,9 @@ the length of the list, under foreseeable uses of \.{CWEAVE} this inefficiency
is insignificant.
@c
-void
-new_section_xref(p)
-name_pointer p;
+static void
+new_section_xref(
+name_pointer p)
{
xref_pointer q,r; /* pointers to previous cross-references */
q=(xref_pointer)p->xref; r=xmem;
@@ -316,7 +297,7 @@ name_pointer p;
return; /* don't duplicate entries */
append_xref(section_count+section_xref_switch);
xref_ptr->xlink=q; section_xref_switch=0;
- if (r==xmem) p->xref=(char*)xref_ptr;
+ if (r==xmem) update_node(p);
else r->xlink=xref_ptr;
}
@@ -324,23 +305,23 @@ name_pointer p;
|file_flag|. Here's how that flag gets put~in.
@c
-void
-set_file_flag(p)
-name_pointer p;
+static void
+set_file_flag(
+name_pointer p)
{
xref_pointer q;
q=(xref_pointer)p->xref;
if (q->num==file_flag) return;
append_xref(file_flag);
xref_ptr->xlink = q;
- p->xref = (char *)xref_ptr;
+ update_node(p);
}
@ A third large area of memory is used for sixteen-bit `tokens', which appear
in short lists similar to the strings of characters in |byte_mem|. Token lists
are used to contain the result of \CEE/ code translated into \TEX/ form;
-further details about them will be explained later. A |text_pointer| variable
-is an index into |tok_start|.
+further details about them will be explained later. A \&{text\_pointer}
+variable is an index into |tok_start|.
@<Typed...@>=
typedef sixteen_bits token;
@@ -352,49 +333,58 @@ that is unoccupied by replacement text is called |tok_ptr|, and the first
unused location of |tok_start| is called |text_ptr|.
Thus, we usually have |*text_ptr==tok_ptr|.
-@<Global...@>=
-token tok_mem[max_toks]; /* tokens */
-token_pointer tok_mem_end = tok_mem+max_toks-1; /* end of |tok_mem| */
-token_pointer tok_start[max_texts]; /* directory into |tok_mem| */
-token_pointer tok_ptr; /* first unused position in |tok_mem| */
-text_pointer text_ptr; /* first unused position in |tok_start| */
-text_pointer tok_start_end = tok_start+max_texts-1; /* end of |tok_start| */
-token_pointer max_tok_ptr; /* largest value of |tok_ptr| */
-text_pointer max_text_ptr; /* largest value of |text_ptr| */
+@<Private...@>=
+static token tok_mem[max_toks]; /* tokens */
+static token_pointer tok_mem_end = tok_mem+max_toks-1; /* end of |tok_mem| */
+static token_pointer tok_ptr; /* first unused position in |tok_mem| */
+static token_pointer max_tok_ptr; /* largest value of |tok_ptr| */
+static token_pointer tok_start[max_texts]; /* directory into |tok_mem| */
+static text_pointer tok_start_end = tok_start+max_texts-1; /* end of |tok_start| */
+static text_pointer text_ptr; /* first unused position in |tok_start| */
+static text_pointer max_text_ptr; /* largest value of |text_ptr| */
@ @<Set init...@>=
-tok_ptr=tok_mem+1; text_ptr=tok_start+1; tok_start[0]=tok_mem+1;
-tok_start[1]=tok_mem+1;
-max_tok_ptr=tok_mem+1; max_text_ptr=tok_start+1;
+tok_ptr=max_tok_ptr=tok_mem+1;@/
+tok_start[0]=tok_start[1]=tok_mem+1;@/
+text_ptr=max_text_ptr=tok_start+1;
@ Here are the three procedures needed to complete |id_lookup|:
@c
-int names_match(p,first,l,t)
-name_pointer p; /* points to the proposed match */
-char *first; /* position of first character of string */
-int l; /* length of identifier */
-eight_bits t; /* desired ilk */
+boolean names_match(@t\1\1@>
+name_pointer p, /* points to the proposed match */
+const char *first, /* position of first character of string */
+size_t l, /* length of identifier */
+eight_bits t@t\2\2@>) /* desired |ilk| */
{
- if (length(p)!=l) return 0;
- if (p->ilk!=t && !(t==normal && abnormal(p))) return 0;
+ if (length(p)!=l) return false;
+ if (p->ilk!=t && !(t==normal && abnormal(p))) return false;
return !strncmp(first,p->byte_start,l);
}
void
-init_p(p,t)
-name_pointer p;
-eight_bits t;
+init_p(
+name_pointer p,
+eight_bits t)
{
- p->ilk=t; p->xref=(char*)xmem;
+ p->ilk=t; init_node(p);
}
void
-init_node(p)
-name_pointer p;
+init_node(
+name_pointer p)
{
- p->xref=(char*)xmem;
+ p->xref=(void *)xmem;
}
+static void
+update_node(
+name_pointer p)
+{
+ p->xref=(void *)xref_ptr;
+}
+
+@ @<Predecl...@>=@+static void update_node(name_pointer p);
+
@ We have to get \CEE/'s
reserved words into the hash table, and the simplest way to do this is
to insert them every time \.{CWEAVE} is run. Fortunately there are relatively
@@ -499,8 +489,7 @@ id_lookup("volatile",NULL,const_like);
id_lookup("wchar_t",NULL,raw_int);
id_lookup("while",NULL,for_like);
id_lookup("xor",NULL,alfop);
-id_lookup("xor_eq",NULL,alfop);
-res_wd_end=name_ptr;
+id_lookup("xor_eq",NULL,alfop);@+ res_wd_end=name_ptr;
id_lookup("TeX",NULL,custom);
id_lookup("make_pair",NULL,func_template);
@@ -556,8 +545,8 @@ scanning routines.
@ Control codes are converted to \.{CWEAVE}'s internal
representation by means of the table |ccode|.
-@<Global...@>=
-eight_bits ccode[256]; /* meaning of a char following \.{@@} */
+@<Private...@>=
+static eight_bits ccode[256]; /* meaning of a char following \.{@@} */
@ @<Set ini...@>=
{int c; for (c=0; c<256; c++) ccode[c]=0;}
@@ -598,19 +587,20 @@ operation appears in limbo, we want to use it to adjust the default
interpretation of identifiers.
@<Predec...@>=
-void skip_limbo();
+static void skip_limbo(void);@/
+static eight_bits skip_TeX(void);
@ @c
-void
-skip_limbo() {
- while(1) {
- if (loc>limit && get_line()==0) return;
+static void
+skip_limbo(void) {
+ while(true) {
+ if (loc>limit && get_line()==false) return;
*(limit+1)='@@';
- while (*loc!='@@') loc++; /* look for '@@', then skip two chars */
+ while (*loc!='@@') loc++; /* look for `\.{@@}', then skip two chars */
if (loc++ <=limit) { int c=ccode[(eight_bits)*loc++];
if (c==new_section) return;
if (c==noop) skip_restricted();
- else if (c==format_code) @<Process simple format in limbo@>;
+ else if (c==format_code) @<Process simple format in limbo@>@;
}
}
}
@@ -623,15 +613,15 @@ assumed to exist at the very end of the file.
@f skip_TeX TeX
@c
-unsigned
-skip_TeX() /* skip past pure \TEX/ code */
+static eight_bits
+skip_TeX(void) /* skip past pure \TEX/ code */
{
- while (1) {
- if (loc>limit && get_line()==0) return(new_section);
+ while (true) {
+ if (loc>limit && get_line()==false) return new_section;
*(limit+1)='@@';
while (*loc!='@@' && *loc!='|') loc++;
- if (*loc++ =='|') return('|');
- if (loc<=limit) return(ccode[(eight_bits)*(loc++)]);
+ if (*loc++ =='|') return '|';
+ if (loc<=limit) return ccode[(eight_bits)*(loc++)];
}
}
@@ -675,13 +665,9 @@ it sets |xref_switch| to |def_flag| and goes on to the next token.
@d string 0201 /* \CEE/ string */
@d identifier 0202 /* \CEE/ identifier or reserved word */
-@<Global...@>=
-name_pointer cur_section; /* name of section just scanned */
-char cur_section_char; /* the character just before that name */
-
-@ @<Include...@>=
-#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */
-#include <stdlib.h> /* definition of |exit| */
+@<Private...@>=
+static name_pointer cur_section; /* name of section just scanned */
+static char cur_section_char; /* the character just before that name */
@ As one might expect, |get_next| consists mostly of a big switch
that branches to the various special cases that can arise.
@@ -693,31 +679,33 @@ compilers even allow the dollar sign.
@d ishigh(c) ((eight_bits)(c)>0177)
@^high-bit character handling@>
-@<Predecl...@>=
-eight_bits get_next();
-
-@ @c
-eight_bits
-get_next() /* produces the next input token */
-{@+eight_bits c; /* the current character */
- while (1) {
- @<Check if we're at the end of a preprocessor command@>;
- if (loc>limit && get_line()==0) return(new_section);
+@c
+static eight_bits
+get_next(void) /* produces the next input token */
+{
+ eight_bits c; /* the current character */
+ while (true) {
+ @<Check if we're at the end of a preprocessor command@>@;
+ if (loc>limit && get_line()==false) return new_section;
c=*(loc++);
if (xisdigit(c) || c=='.') @<Get a constant@>@;
- else if (c=='\'' || c=='"' || (c=='L'&&(*loc=='\'' || *loc=='"'))@|
- || (c=='<' && sharp_include_line==1))
+ else if (c=='\'' || c=='"'@|
+ || ((c=='L' || c=='u' || c=='U')&&(*loc=='\'' || *loc=='"'))@|
+ || ((c=='u' && *loc=='8')&&(*(loc+1)=='\'' || *(loc+1)=='"'))@|
+ || (c=='<' && sharp_include_line==true))
@<Get a string@>@;
else if (xisalpha(c) || isxalpha(c) || ishigh(c))
@<Get an identifier@>@;
else if (c=='@@') @<Get control code and possible section name@>@;
else if (xisspace(c)) continue; /* ignore spaces and tabs */
- if (c=='#' && loc==buffer+1) @<Raise preprocessor flag@>;
+ if (c=='#' && loc==buffer+1) @<Raise preprocessor flag@>@;
mistake: @<Compress two-symbol operator@>@;
- return(c);
+ return c;
}
}
+@ @<Predecl...@>=@+static eight_bits get_next(void);
+
@ Because preprocessor commands do not fit in with the rest of the syntax
of \CEE/,
we have to deal with them separately. One solution is to enclose such
@@ -731,25 +719,25 @@ for |ord|, since |get_next| changes |ord| into a string.
@d left_preproc ord /* begins a preprocessor command */
@d right_preproc 0217 /* ends a preprocessor command */
-@<Glob...@>=
-boolean preprocessing=0; /* are we scanning a preprocessor command? */
+@<Private...@>=
+static boolean preprocessing=false; /* are we scanning a preprocessor command? */
@ @<Raise prep...@>= {
- preprocessing=1;
- @<Check if next token is |include|@>;
- return (left_preproc);
+ preprocessing=true;
+ @<Check if next token is |include|@>@;
+ return left_preproc;
}
@ An additional complication is the freakish use of \.< and \.> to delimit
a file name in lines that start with \.{\#include}. We must treat this file
name as a string.
-@<Glob...@>=
-boolean sharp_include_line=0; /* are we scanning a |#include| line? */
+@<Private...@>=
+static boolean sharp_include_line=false; /* are we scanning a \&{\#include} line? */
@ @<Check if next token is |include|@>=
while (loc<=buffer_end-7 && xisspace(*loc)) loc++;
-if (loc<=buffer_end-6 && strncmp(loc,"include",7)==0) sharp_include_line=1;
+if (loc<=buffer_end-6 && strncmp(loc,"include",7)==0) sharp_include_line=true;
@ When we get to the end of a preprocessor line,
we lower the flag and send a code |right_preproc|, unless
@@ -757,10 +745,10 @@ the last character was a \.\\.
@<Check if we're at...@>=
while (loc==limit-1 && preprocessing && *loc=='\\')
- if (get_line()==0) return(new_section); /* still in preprocessor mode */
+ if (get_line()==false) return new_section; /* still in preprocessor mode */
if (loc>=limit && preprocessing) {
- preprocessing=sharp_include_line=0;
- return(right_preproc);
+ preprocessing=sharp_include_line=false;
+ return right_preproc;
}
@ The following code assigns values to the combinations \.{++},
@@ -770,7 +758,7 @@ combinations \.{...}, \.{::}, \.{.*} and \.{->*}.
The compound assignment operators (e.g., \.{+=}) are
treated as separate tokens.
-@d compress(c) if (loc++<=limit) return(c)
+@d compress(c) if (loc++<=limit) return c
@<Compress tw...@>=
switch(c) {
@@ -778,8 +766,8 @@ switch(c) {
else if (*loc=='/') compress(begin_short_comment); break;
case '+': if (*loc=='+') compress(plus_plus); break;
case '-': if (*loc=='-') {compress(minus_minus);}
- else if (*loc=='>') if (*(loc+1)=='*') {loc++; compress(minus_gt_ast);}
- else compress(minus_gt); break;
+ else { if (*loc=='>') { if (*(loc+1)=='*') {loc++; compress(minus_gt_ast);}
+ else compress(minus_gt); } } break;
case '.': if (*loc=='*') {compress(period_ast);}
else if (*loc=='.' && *(loc+1)=='.') {
loc++; compress(dot_dot_dot);
@@ -793,13 +781,14 @@ switch(c) {
else if (*loc=='<') compress(lt_lt); break;
case '&': if (*loc=='&') compress(and_and); break;
case '|': if (*loc=='|') compress(or_or); break;
- case '!': if (*loc=='=') compress(not_eq); break;
+ case '!': if (*loc=='=') compress(non_eq); break;
}
@ @<Get an identifier@>= {
id_first=--loc;
- while (isalpha(*++loc) || isdigit(*loc) || isxalpha(*loc) || ishigh(*loc));
- id_loc=loc; return(identifier);
+ while (isalpha((eight_bits)*++loc) || isdigit((eight_bits)*loc) @|
+ || isxalpha((eight_bits)*loc) || ishigh((eight_bits)*loc));
+ id_loc=loc; return identifier;
}
@ Different conventions are followed by \TEX/ and \CEE/ to express octal
@@ -833,9 +822,9 @@ are pointers into the array |section_text|, not into |buffer|.
}
while (*loc=='u' || *loc=='U' || *loc=='l' || *loc=='L'
|| *loc=='f' || *loc=='F') {
- *id_loc++='$'; *id_loc++=toupper(*loc); loc++;
+ *id_loc++='$'; *id_loc++=toupper((eight_bits)*loc); loc++;
}
- return(constant);
+ return constant;
}
@ \CEE/ strings and character constants, delimited by double and single
@@ -849,17 +838,18 @@ convention, but do not allow the string to be longer than |longest_name|.
id_loc = section_text;
if (delim=='\'' && *(loc-2)=='@@') {*++id_loc='@@'; *++id_loc='@@';}
*++id_loc=delim;
- if (delim=='L') { /* wide character constant */
+ if (delim=='L' || delim=='u' || delim=='U') { /* wide character constant */
+ if (delim=='u' && *loc=='8') { *++id_loc=*loc++; }
delim=*loc++; *++id_loc=delim;
}
- if (delim=='<') delim='>'; /* for file names in |#include| lines */
- while (1) {
+ if (delim=='<') delim='>'; /* for file names in \&{\#include} lines */
+ while (true) {
if (loc>=limit) {
if(*(limit-1)!='\\') {
err_print("! String didn't end"); loc=limit; break;
@.String didn't end@>
}
- if(get_line()==0) {
+ if(get_line()==false) {
err_print("! Input ended in middle of string"); loc=buffer; break;
@.Input ended in middle of string@>
}
@@ -868,20 +858,20 @@ convention, but do not allow the string to be longer than |longest_name|.
if (++id_loc<=section_text_end) *id_loc=c;
break;
}
- if (c=='\\') if (loc>=limit) continue;
- else if (++id_loc<=section_text_end) {
+ if (c=='\\') { if (loc>=limit) continue;
+ else { if (++id_loc<=section_text_end) {
*id_loc = '\\'; c=*loc++;
- }
+ } } }
if (++id_loc<=section_text_end) *id_loc=c;
}
if (id_loc>=section_text_end) {
- printf("\n! String too long: ");
+ fputs("\n! String too long: ",stdout);
@.String too long@>
term_write(section_text+1,25);
printf("..."); mark_error;
}
id_loc++;
- return(string);
+ return string;
}
@ After an \.{@@} sign has been scanned, the next character tells us
@@ -894,13 +884,13 @@ whether there is more work to do.
@.Use @@l in limbo...@>
case underline: xref_switch=def_flag; continue;
case trace: tracing=c-'0'; continue;
- case xref_roman: case xref_wildcard: case xref_typewriter:
- case noop: case TeX_string: c=ccode[c]; skip_restricted(); return(c);
+ case xref_roman: case xref_wildcard: case xref_typewriter: case noop:
+ case TeX_string: c=ccode[(eight_bits)c]; skip_restricted(); return c;
case section_name:
- @<Scan the section name and make |cur_section| point to it@>;
- case verbatim: @<Scan a verbatim string@>;
- case ord: @<Get a string@>;
- default: return(ccode[(eight_bits)c]);
+ @<Scan the section name and make |cur_section| point to it@>@;
+ case verbatim: @<Scan a verbatim string@>@;
+ case ord: @<Get a string@>@;
+ default: return ccode[(eight_bits)c];
}
}
@@ -910,11 +900,11 @@ because the section name might (for example) follow \&{int}.
@<Scan the section name...@>= {
char *k; /* pointer into |section_text| */
cur_section_char=*(loc-1);
- @<Put section name into |section_text|@>;
+ @<Put section name into |section_text|@>@;
if (k-section_text>3 && strncmp(k-2,"...",3)==0)
cur_section=section_lookup(section_text+1,k-3,1); /* 1 indicates a prefix */
else cur_section=section_lookup(section_text+1,k,0);
- xref_switch=0; return(section_name);
+ xref_switch=0; return section_name;
}
@ Section names are placed into the |section_text| array with consecutive spaces,
@@ -927,14 +917,14 @@ character of the name.)
@ @<Put section name...@>=
k=section_text;
-while (1) {
- if (loc>limit && get_line()==0) {
+while (true) {
+ if (loc>limit && get_line()==false) {
err_print("! Input ended in section name");
@.Input ended in section name@>
loc=buffer+1; break;
}
c=*loc;
- @<If end of name or erroneous control code, |break|@>;
+ @<If end of name or erroneous control code, |break|@>@;
loc++; if (k<section_text_end) k++;
if (xisspace(c)) {
c=' '; if (*(k-1)==' ') k--;
@@ -942,7 +932,7 @@ while (1) {
*k=c;
}
if (k>=section_text_end) {
- printf("\n! Section name too long: ");
+ fputs("\n! Section name too long: ",stdout);
@.Section name too long@>
term_write(section_text+1,25);
printf("..."); mark_harmless;
@@ -968,12 +958,9 @@ if (c=='@@') {
@ This function skips over a restricted context at relatively high speed.
-@<Predecl...@>=
-void skip_restricted();
-
-@ @c
-void
-skip_restricted()
+@c
+static void
+skip_restricted(void)
{
id_first=loc; *(limit+1)='@@';
false_alarm:
@@ -991,6 +978,8 @@ false_alarm:
}
}
+@ @<Predecl...@>=@+static void skip_restricted(void);
+
@ At the present point in the program we
have |*(loc-1)==verbatim|; we set |id_first| to the beginning
of the string itself, and |id_loc| to its ending-plus-one location in the
@@ -1002,7 +991,7 @@ buffer. We also set |loc| to the position just after the ending delimiter.
if (loc>=limit) err_print("! Verbatim string didn't end");
@.Verbatim string didn't end@>
id_loc=loc; loc+=2;
- return (verbatim);
+ return verbatim;
}
@** Phase one processing.
@@ -1015,41 +1004,40 @@ The global variable |next_control| often contains the most recent output of
|get_next|; in interesting cases, this will be the control code that
ended a section or part of a section.
-@<Global...@>=
-eight_bits next_control; /* control code waiting to be acting upon */
+@<Private...@>=
+static eight_bits next_control; /* control code waiting to be acting upon */
@ The overall processing strategy in phase one has the following
straightforward outline.
-@<Predecl...@>=
-void phase_one();
-
-@ @c
-void
-phase_one() {
+@c
+static void
+phase_one(void) {
phase=1; reset_input(); section_count=0;
- skip_limbo(); change_exists=0;
+ skip_limbo(); change_exists=false;
while (!input_has_ended)
- @<Store cross-reference data for the current section@>;
+ @<Store cross-reference data for the current section@>@;
changed_section[section_count]=change_exists;
/* the index changes if anything does */
phase=2; /* prepare for second phase */
- @<Print error messages about unused or undefined section names@>;
+ @<Print error messages about unused or undefined section names@>@;
}
+@ @<Predecl...@>=@+static void phase_one(void);
+
@ @<Store cross-reference data...@>=
{
if (++section_count==max_sections) overflow("section number");
changed_section[section_count]=changing;
- /* it will become 1 if any line changes */
+ /* it will become |true| if any line changes */
if (*(loc-1)=='*' && show_progress) {
printf("*%d",section_count);
update_terminal; /* print a progress report */
}
- @<Store cross-references in the \TEX/ part of a section@>;
- @<Store cross-references in the definition part of a section@>;
- @<Store cross-references in the \CEE/ part of a section@>;
- if (changed_section[section_count]) change_exists=1;
+ @<Store cross-references in the \TEX/ part of a section@>@;
+ @<Store cross-references in the definition part of a section@>@;
+ @<Store cross-references in the \CEE/ part of a section@>@;
+ if (changed_section[section_count]) change_exists=true;
}
@ The |C_xref| subroutine stores references to identifiers in
@@ -1074,12 +1062,13 @@ the relations |xref_roman==identifier+roman| and |xref_wildcard==identifier
as well as |normal==0|.
@<Predecl...@>=
-void C_xref();
+static void C_xref(eight_bits);@/
+static void outer_xref(void);
@ @c
-void
-C_xref( spec_ctrl ) /* makes cross-references for \CEE/ identifiers */
- eight_bits spec_ctrl;
+static void
+C_xref(@t\1\1@> /* makes cross-references for \CEE/ identifiers */
+ eight_bits spec_ctrl@t\2\2@>)
{
name_pointer p; /* a referenced name */
while (next_control<format_code || next_control==spec_ctrl) {
@@ -1101,12 +1090,9 @@ C_xref( spec_ctrl ) /* makes cross-references for \CEE/ identifiers */
with |next_control!='|'| and ends with |next_control>=format_code|. Thus, it
handles \CEE/ text with embedded comments.
-@<Predecl...@>=
-void outer_xref();
-
-@ @c
-void
-outer_xref() /* extension of |C_xref| */
+@c
+static void
+outer_xref(void) /* extension of |C_xref| */
{
int bal; /* brace level in comment */
while (next_control<format_code)
@@ -1129,7 +1115,7 @@ enclosed in \.{@@\^}$\,\ldots\,$\.{@@>} or \.{@@.}$\,\ldots\,$\.{@@>}
or \.{@@:}$\,\ldots\,$\.{@@>}.
@<Store cross-references in the \T...@>=
-while (1) {
+while (true) {
switch (next_control=skip_TeX()) {
case translit_code: err_print("! Use @@l in limbo only"); continue;
@.Use @@l in limbo...@>
@@ -1171,9 +1157,9 @@ entirely, even if it contains \pb\ constructions.
The variables |lhs| and |rhs| point to the respective identifiers involved
in a format definition.
-@<Global...@>=
-name_pointer lhs, rhs; /* pointers to |byte_start| for format identifiers */
-name_pointer res_wd_end; /* pointer to the first nonreserved identifier */
+@<Private...@>=
+static name_pointer lhs, rhs; /* pointers to |byte_start| for format identifiers */
+static name_pointer res_wd_end; /* pointer to the first nonreserved identifier */
@ When we get to the following code we have |next_control>=format_code|.
@@ -1182,7 +1168,7 @@ while (next_control<=definition) { /* |format_code| or |definition| */
if (next_control==definition) {
xref_switch=def_flag; /* implied \.{@@!} */
next_control=get_next();
- } else @<Process a format definition@>;
+ } else @<Process a format definition@>@;
outer_xref();
}
@@ -1205,7 +1191,7 @@ discover should be unindexed.
for (q=(xref_pointer)lhs->xref;q>xmem;q=q->xlink)
if (q->num<def_flag)
if (r) r->xlink=q->xlink;
- else lhs->xref=(char*)q->xlink;
+ else lhs->xref=(void *)q->xlink;
else r=q;
}
next_control=get_next();
@@ -1255,41 +1241,42 @@ if (next_control<=section_name) { /* |begin_C| or |section_name| */
section name was both defined and used. The variable |cur_xref| will point
to cross-references for the current section name of interest.
-@<Global...@>=
-xref_pointer cur_xref; /* temporary cross-reference pointer */
-boolean an_output; /* did |file_flag| precede |cur_xref|? */
+@<Private...@>=
+static xref_pointer cur_xref; /* temporary cross-reference pointer */
+static boolean an_output; /* did |file_flag| precede |cur_xref|? */
@ The following recursive procedure
walks through the tree of section names and prints out anomalies.
@^recursion@>
-@<Predecl...@>=
-void section_check();
-
-@ @c
-void
-section_check(p)
-name_pointer p; /* print anomalies in subtree |p| */
+@c
+static void
+section_check(
+name_pointer p) /* print anomalies in subtree |p| */
{
if (p) {
section_check(p->llink);
cur_xref=(xref_pointer)p->xref;
- if (cur_xref->num==file_flag) {an_output=1; cur_xref=cur_xref->xlink;}
- else an_output=0;
+ if (cur_xref->num==file_flag) {an_output=true; cur_xref=cur_xref->xlink;}
+ else an_output=false;
if (cur_xref->num <def_flag) {
- printf("\n! Never defined: <"); print_section_name(p); putchar('>'); mark_harmless;
+ fputs("\n! Never defined: <",stdout);
+ print_section_name(p); putchar('>'); mark_harmless;
@.Never defined: <section name>@>
}
while (cur_xref->num >=cite_flag) cur_xref=cur_xref->xlink;
if (cur_xref==xmem && !an_output) {
- printf("\n! Never used: <"); print_section_name(p); putchar('>'); mark_harmless;
+ fputs("\n! Never used: <",stdout);
+ print_section_name(p); putchar('>'); mark_harmless;
@.Never used: <section name>@>
}
section_check(p->rlink);
}
}
-@ @<Print error messages about un...@>=section_check(root)
+@ @<Predecl...@>=@+static void section_check(name_pointer);
+
+@ @<Print error messages about un...@>=section_check(root);
@* Low-level output routines.
The \TEX/ output is supposed to appear in lines at most |line_length|
@@ -1297,17 +1284,17 @@ characters long, so we place it into an output buffer. During the output
process, |out_line| will hold the current line number of the line about to
be output.
-@<Global...@>=
-char out_buf[line_length+1]; /* assembled characters */
-char *out_ptr; /* last character in |out_buf| */
-char *out_buf_end = out_buf+line_length; /* end of |out_buf| */
-int out_line; /* number of next line to be output */
+@<Private...@>=
+static char out_buf[line_length+1]; /* assembled characters */
+static char *out_buf_end = out_buf+line_length; /* end of |out_buf| */
+static char *out_ptr; /* last character in |out_buf| */
+static int out_line; /* number of next line to be output */
@ The |flush_buffer| routine empties the buffer up to a given breakpoint,
and moves any remaining characters to the beginning of the next line.
-If the |per_cent| parameter is 1 a |'%'| is appended to the line
+If the |per_cent| parameter is |true|, a |'%'| is appended to the line
that is being output; in this case the breakpoint |b| should be strictly
-less than |out_buf_end|. If the |per_cent| parameter is |0|,
+less than |out_buf_end|. If the |per_cent| parameter is |false|,
trailing blanks are suppressed.
The characters emptied from the buffer form a new line of output;
if the |carryover| parameter is true, a |"%"| in that line will be
@@ -1317,13 +1304,18 @@ of commented-out text).
@d c_line_write(c) fflush(active_file),fwrite(out_buf+1,sizeof(char),c,active_file)
@d tex_putc(c) putc(c,active_file)
@d tex_new_line putc('\n',active_file)
-@d tex_printf(c) fprintf(active_file,c)
+@d tex_printf(c) fprintf(active_file,"%s",c)
+@d tex_puts(c) fputs(c,active_file)
-@c
-void
-flush_buffer(b,per_cent,carryover)
-char *b; /* outputs from |out_buf+1| to |b|,where |b<=out_ptr| */
-boolean per_cent,carryover;
+@<Predecl...@>=
+static void flush_buffer(char *,boolean,boolean);@/
+static void finish_line(void);
+
+@ @c
+static void
+flush_buffer(@t\1\1@>
+char *b, /* outputs from |out_buf+1| to |b|, where |b<=out_ptr| */
+boolean per_cent,boolean carryover@t\2\2@>)
{
char *j; j=b; /* pointer into |out_buf| */
if (! per_cent) /* remove trailing blanks */
@@ -1336,7 +1328,7 @@ boolean per_cent,carryover;
if (*j--=='%' && (j==out_buf || *j!='\\')) {
*b--='%'; break;
}
- if (b<out_ptr) strncpy(out_buf+1,b+1,out_ptr-b);
+ if (b<out_ptr) memcpy(out_buf+1,b+1,(size_t)(out_ptr-b));
out_ptr-=b-out_buf;
}
@@ -1349,15 +1341,15 @@ will not be copied. The |finish_line| routine is called just before
been emitted during the output of translated \CEE/ text.
@c
-void
-finish_line() /* do this at the end of a line */
+static void
+finish_line(void) /* do this at the end of a line */
{
char *k; /* pointer into |buffer| */
- if (out_ptr>out_buf) flush_buffer(out_ptr,0,0);
+ if (out_ptr>out_buf) flush_buffer(out_ptr,false,false);
else {
for (k=buffer; k<=limit; k++)
if (!(xisspace(*k))) return;
- flush_buffer(out_buf,0,0);
+ flush_buffer(out_buf,false,false);
}
}
@@ -1366,7 +1358,7 @@ beginning of phase two. We initialize the output variables in a slightly
tricky way so that the first line of the output file will be
`\.{\\input cwebmac}'.
-@<Set init...@>=
+@<Start \TEX/...@>=
out_ptr=out_buf+1; out_line=1; active_file=tex_file;
*out_ptr='c'; tex_printf("\\input cwebma");
@@ -1380,10 +1372,14 @@ A line break will occur at a space or after a single-nonletter
@d out(c) {if (out_ptr>=out_buf_end) break_out(); *(++out_ptr)=c;}
-@c
-void
-out_str(s) /* output characters from |s| to end of string */
-char *s;
+@<Predecl...@>=
+static void out_str(const char *);@/
+static void break_out(void);
+
+@ @c
+static void
+out_str(@t\1\1@> /* output characters from |s| to end of string */
+const char*s@t\2\2@>)
{
while (*s) out(*s++);
}
@@ -1399,21 +1395,18 @@ out_buf[0]='\\';
preceded by another backslash. In the latter case, a |'%'| is output at
the break.
-@<Predecl...@>=
-void break_out();
-
-@ @c
-void
-break_out() /* finds a way to break the output line */
+@c
+static void
+break_out(void) /* finds a way to break the output line */
{
char *k=out_ptr; /* pointer into |out_buf| */
- while (1) {
- if (k==out_buf) @<Print warning message, break the line, |return|@>;
+ while (true) {
+ if (k==out_buf) @<Print warning message, break the line, |return|@>@;
if (*k==' ') {
- flush_buffer(k,0,1); return;
+ flush_buffer(k,false,true); return;
}
if (*(k--)=='\\' && *k!='\\') { /* we've decreased |k| */
- flush_buffer(k,1,1); return;
+ flush_buffer(k,true,true); return;
}
}
}
@@ -1429,7 +1422,7 @@ line by putting a |'%'| just before the last character.
@.Line had to be broken@>
term_write(out_buf+1, out_ptr-out_buf-1);
new_line; mark_harmless;
- flush_buffer(out_ptr-1,1,1); return;
+ flush_buffer(out_ptr-1,true,true); return;
}
@ Here is a macro that outputs a section number in decimal notation.
@@ -1437,10 +1430,14 @@ The number to be converted by |out_section| is known to be less than
|def_flag|, so it cannot have more than five decimal digits. If
the section is changed, we output `\.{\\*}' just after the number.
-@c
-void
-out_section(n)
-sixteen_bits n;
+@<Predecl...@>=
+static void out_section(sixteen_bits);@/
+static void out_name(name_pointer,boolean);
+
+@ @c
+static void
+out_section(
+sixteen_bits n)
{
char s[6];
sprintf(s,"%d",n); out_str(s);
@@ -1452,10 +1449,10 @@ sixteen_bits n;
entry, enclosing it in braces.
@c
-void
-out_name(p,quote_xalpha)
-name_pointer p;
-boolean quote_xalpha;
+static void
+out_name(
+name_pointer p,
+boolean quote_xalpha)
{
char *k, *k_end=(p+1)->byte_start; /* pointers into |byte_mem| */
out('{');
@@ -1469,11 +1466,9 @@ boolean quote_xalpha;
}
@* Routines that copy \TEX/ material.
-During phase two, we use subroutines |copy_limbo|, |copy_TeX|, and
-|copy_comment| in place of the analogous |skip_limbo|, |skip_TeX|, and
-|skip_comment| that were used in phase one. (Well, |copy_comment|
-was actually written in such a way that it functions as |skip_comment|
-in phase one.)
+During phase two, we use the subroutines |copy_limbo| and |copy_TeX| (and
+|copy_comment|) in place of the analogous |skip_limbo| and |skip_TeX|
+that were used in phase one.
The |copy_limbo| routine, for example, takes \TEX/ material that is not
part of any section and transcribes it almost verbatim to the output file.
@@ -1481,13 +1476,18 @@ The use of `\.{@@}' signs is severely restricted in such material:
`\.{@@@@}' pairs are replaced by singletons; `\.{@@l}' and `\.{@@q}' and
`\.{@@s}' are interpreted.
-@c
-void
-copy_limbo()
+@<Predecl...@>=
+static void copy_limbo(void);@/
+static eight_bits copy_TeX(void);@/
+static int copy_comment(boolean,int);
+
+@ @c
+static void
+copy_limbo(void)
{
char c;
- while (1) {
- if (loc>limit && (finish_line(), get_line()==0)) return;
+ while (true) {
+ if (loc>limit && (finish_line(), get_line()==false)) return;
*(limit+1)='@@';
while (*loc!='@@') out(*(loc++));
if (loc++<=limit) {
@@ -1515,21 +1515,21 @@ way. It returns the next control code or `\.{\v}' found in the input.
We don't copy spaces or tab marks into the beginning of a line. This
makes the test for empty lines in |finish_line| work.
-@ @f copy_TeX TeX
+@f copy_TeX TeX
@c
-eight_bits
-copy_TeX()
+static eight_bits
+copy_TeX(void)
{
char c; /* current character being copied */
- while (1) {
- if (loc>limit && (finish_line(), get_line()==0)) return(new_section);
+ while (true) {
+ if (loc>limit && (finish_line(), get_line()==false)) return new_section;
*(limit+1)='@@';
while ((c=*(loc++))!='|' && c!='@@') {
out(c);
if (out_ptr==out_buf+1 && (xisspace(c))) out_ptr--;
}
- if (c=='|') return('|');
- if (loc<=limit) return(ccode[(eight_bits)*(loc++)]);
+ if (c=='|') return '|';
+ if (loc<=limit) return ccode[(eight_bits)*(loc++)];
}
}
@@ -1545,19 +1545,16 @@ one further token without overflow.
@d app_tok(c) {if (tok_ptr+2>tok_mem_end) overflow("token"); *(tok_ptr++)=c;}
-@<Predec...@>=
-int copy_comment();
-
-@ @c
-int copy_comment(is_long_comment,bal) /* copies \TEX/ code in comments */
-boolean is_long_comment; /* is this a traditional \CEE/ comment? */
-int bal; /* brace balance */
+@c
+static int copy_comment(@t\1\1@> /* copies \TeX\ code in comments */
+boolean is_long_comment, /* is this a traditional \CEE/ comment? */
+int bal@t\2\2@>) /* brace balance */
{
char c; /* current character being copied */
- while (1) {
+ while (true) {
if (loc>limit) {
if (is_long_comment) {
- if (get_line()==0) {
+ if (get_line()==false) {
err_print("! Input ended in mid-comment");
@.Input ended in mid-comment@>
loc=buffer+1; goto done;
@@ -1570,13 +1567,13 @@ int bal; /* brace balance */
}
}
c=*(loc++);
- if (c=='|') return(bal);
- if (is_long_comment) @<Check for end of comment@>;
+ if (c=='|') return bal;
+ if (is_long_comment) @<Check for end of comment@>@;
if (phase==2) {
if (ishigh(c)) app_tok(quoted_char);
app_tok(c);
}
- @<Copy special things when |c=='@@', '\\'|@>;
+ @<Copy special things when |c=='@@', '\\'|@>@;
if (c=='{') bal++;
else if (c=='}') {
if(bal>1) bal--;
@@ -1586,7 +1583,7 @@ int bal; /* brace balance */
}
}
}
-done:@<Clear |bal| and |return|@>;
+done:@<Clear |bal| and |return|@>@;
}
@ @<Check for end of comment@>=
@@ -1605,15 +1602,15 @@ if (c=='@@') {
loc-=2; if (phase==2) *(tok_ptr-1)=' '; goto done;
}
}
-else if (c=='\\' && *loc!='@@')
- if (phase==2) app_tok(*(loc++))@; else loc++;
+else { if (c=='\\' && *loc!='@@') {
+ if (phase==2) app_tok(*(loc++))@; else loc++; } }
@ We output
enough right braces to keep \TEX/ happy.
@<Clear |bal|...@>=
if (phase==2) while (bal-- >0) app_tok('}');
-return(0);
+return 0;
@** Parsing.
The most intricate part of \.{CWEAVE} is its mechanism for converting
@@ -1660,9 +1657,12 @@ In the \TEX/ file, this will specify an optional line break after the
comma, with penalty 90.
At each opportunity the longest possible production is applied. For
-example, if the current sequence of scraps is |int_like| |cast|
-|lbrace|, rule 31 is applied; but if the sequence is |int_like| |cast|
-followed by anything other than |lbrace|, rule 32 takes effect.
+example, if the current sequence of scraps is |if_clause| |stmt|
+|else_like| |if_like|, rule 63 is applied; but if the sequence is
+|if_clause| |stmt| |else_like| followed by anything other than
+|if_like|, rule 64 takes effect; and if the sequence is |if_clause|
+|stmt| followed by anything other than |else_like|, rule 65 takes
+effect.
Translation rules such as `$E_1C\,\\{opt}9\,E_2$' above use subscripts
to distinguish between translations of scraps whose categories have the
@@ -1711,13 +1711,11 @@ same initial letter; these subscripts are assigned from left to right.
@d begin_arg 61 /* \.{@@[} */
@d end_arg 62 /* \.{@@]} */
-@<Glo...@>=
-char cat_name[256][12];
-eight_bits cat_index;
+@<Private...@>=
+static char cat_name[256][12];
@ @<Set in...@>=
- for (cat_index=0;cat_index<255;cat_index++)
- strcpy(cat_name[cat_index],"UNKNOWN");
+{int c; for (c=0;c<256;c++) strcpy(cat_name[c],"UNKNOWN");}
@.UNKNOWN@>
strcpy(cat_name[exp],"exp");
strcpy(cat_name[unop],"unop");
@@ -1781,13 +1779,15 @@ eight_bits cat_index;
@ This code allows \.{CWEAVE} to display its parsing steps.
@c
-void
-print_cat(c) /* symbolic printout of a category */
-eight_bits c;
+static void
+print_cat(@t\1\1@> /* symbolic printout of a category */
+eight_bits c@t\2\2@>)
{
- printf(cat_name[c]);
+ fputs(cat_name[c],stdout);
}
+@ @<Predecl...@>=@+static void print_cat(eight_bits);
+
@ The token lists for translated \TEX/ output contain some special control
symbols as well as ordinary characters. These control symbols are
interpreted by \.{CWEAVE} before they are written to the output file.
@@ -2098,15 +2098,15 @@ typedef scrap *scrap_pointer;
@ @d trans trans_plus.Trans /* translation texts of scraps */
-@<Global...@>=
-scrap scrap_info[max_scraps]; /* memory array for scraps */
-scrap_pointer scrap_info_end=scrap_info+max_scraps -1; /* end of |scrap_info| */
-scrap_pointer pp; /* current position for reducing productions */
-scrap_pointer scrap_base; /* beginning of the current scrap sequence */
-scrap_pointer scrap_ptr; /* ending of the current scrap sequence */
-scrap_pointer lo_ptr; /* last scrap that has been examined */
-scrap_pointer hi_ptr; /* first scrap that has not been examined */
-scrap_pointer max_scr_ptr; /* largest value assumed by |scrap_ptr| */
+@<Private...@>=
+static scrap scrap_info[max_scraps]; /* memory array for scraps */
+static scrap_pointer scrap_info_end=scrap_info+max_scraps-1; /* end of |scrap_info| */
+static scrap_pointer scrap_base; /* beginning of the current scrap sequence */
+static scrap_pointer scrap_ptr; /* ending of the current scrap sequence */
+static scrap_pointer max_scr_ptr; /* largest value assumed by |scrap_ptr| */
+static scrap_pointer pp; /* current position for reducing productions */
+static scrap_pointer lo_ptr; /* last scrap that has been examined */
+static scrap_pointer hi_ptr; /* first scrap that has not been examined */
@ @<Set init...@>=
scrap_base=scrap_info+1;
@@ -2136,9 +2136,9 @@ translated without line-break controls.
@d inner_tok_flag 5*id_flag /* signifies a token list in `\pb' */
@c
-void
-print_text(p) /* prints a token list for debugging; not used in |main| */
-text_pointer p;
+static void
+print_text(@t\1\1@> /* prints a token list for debugging; not used in |main| */
+text_pointer p@t\2\2@>)
{
token_pointer j; /* index into |tok_mem| */
sixteen_bits r; /* remainder of token after the flag has been stripped off */
@@ -2154,12 +2154,14 @@ text_pointer p;
break; /* |section_flag| */
case 4: printf("[[%d]]",r); break; /* |tok_flag| */
case 5: printf("|[[%d]]|",r); break; /* |inner_tok_flag| */
- default: @<Print token |r| in symbolic form@>;
+ default: @<Print token |r| in symbolic form@>@;
}
}
- fflush(stdout);
+ update_terminal;
}
+@ @<Predecl...@>=@+static void print_text(text_pointer p);
+
@ @<Print token |r|...@>=
switch (r) {
case math_rel: printf("\\mathrel{"@q}@>); break;
@@ -2173,7 +2175,7 @@ switch (r) {
case force: printf("[force]"); break;
case big_force: printf("[fforce]"); break;
case preproc_line: printf("[preproc]"); break;
- case quoted_char: j++; printf("[%o]",(unsigned)*j); break;
+ case quoted_char: j++; printf("[%o]",(unsigned int)*j); break;
case end_translation: printf("[quit]"); break;
case inserted: printf("[inserted]"); break;
default: putxchar(r);
@@ -2219,7 +2221,7 @@ example, `|squash(pp,3,exp,-2,3)|' is an abbreviation for `\\{app3}|(pp);
reduce(pp,3,exp,-2,3)|'.
A couple more words of explanation:
-Both |big_app| and |app| append a token (while |big_app1| to |big_app4|
+Both |big_app| and |app| append a token (while |big_app1| to |big_app3|
append the specified number of scrap translations) to the current token list.
The difference between |big_app| and |app| is simply that |big_app|
checks whether there can be a conflict between math and non-math
@@ -2253,24 +2255,28 @@ productions as they were listed earlier.
@d maybe_math 0 /* works in either horizontal or math mode */
@d big_app2(a) big_app1(a);big_app1(a+1)
@d big_app3(a) big_app2(a);big_app1(a+2)
-@d big_app4(a) big_app3(a);big_app1(a+3)
-@d app(a) *(tok_ptr++)=a
-@d app1(a) *(tok_ptr++)=tok_flag+(int)((a)->trans-tok_start)
+@d app(a) *(tok_ptr++)=(token)(a)
+@d app1(a) *(tok_ptr++)=(token)(tok_flag+(int)((a)->trans-tok_start))
+
+@<Private...@>=
+static int cur_mathness, init_mathness;
-@<Global...@>=
-int cur_mathness, init_mathness;
+@ @<Predecl...@>=
+static void app_str(const char *);@/
+static void big_app(token);@/
+static void big_app1(scrap_pointer);
@ @c
-void
-app_str(s)
-char *s;
+static void
+app_str(
+const char *s)
{
while (*s) app_tok(*(s++));
}
-void
-big_app(a)
-token a;
+static void
+big_app(
+token a)
{
if (a==' ' || (a>=big_cancel && a<=big_force)) /* non-math token */ {
if (cur_mathness==maybe_math) init_mathness=no_math;
@@ -2285,9 +2291,9 @@ token a;
app(a);
}
-void
-big_app1(a)
-scrap_pointer a;
+static void
+big_app1(
+scrap_pointer a)
{
switch (a->mathness % 4) { /* left boundary */
case (no_math):
@@ -2316,11 +2322,11 @@ code needs to be provided with a proper environment.
@d lhs_not_simple (pp->cat!=public_like
&& pp->cat!=semi
&& pp->cat!=prelangle
- && pp->cat!=prerangle
+ && pp->cat!=prerangle @|
&& pp->cat!=template_like
&& pp->cat!=new_like
&& pp->cat!=new_exp
- && pp->cat!=ftemplate
+ && pp->cat!=ftemplate @|
&& pp->cat!=raw_ubin
&& pp->cat!=const_like
&& pp->cat!=raw_int
@@ -2336,53 +2342,53 @@ code needs to be provided with a proper environment.
else if (cat3==insert) squash(pp+2,2,(pp+2)->cat,0,0);
else
switch (pp->cat) {
- case exp: @<Cases for |exp|@>; @+break;
- case lpar: @<Cases for |lpar|@>; @+break;
- case unop: @<Cases for |unop|@>; @+break;
- case ubinop: @<Cases for |ubinop|@>; @+break;
- case binop: @<Cases for |binop|@>; @+break;
- case cast: @<Cases for |cast|@>; @+break;
- case sizeof_like: @<Cases for |sizeof_like|@>; @+break;
- case int_like: @<Cases for |int_like|@>; @+break;
- case public_like: @<Cases for |public_like|@>; @+break;
- case colcol: @<Cases for |colcol|@>; @+break;
- case decl_head: @<Cases for |decl_head|@>; @+break;
- case decl: @<Cases for |decl|@>; @+break;
- case base: @<Cases for |base|@>; @+break;
- case struct_like: @<Cases for |struct_like|@>; @+break;
- case struct_head: @<Cases for |struct_head|@>; @+break;
- case fn_decl: @<Cases for |fn_decl|@>; @+break;
- case function: @<Cases for |function|@>; @+break;
- case lbrace: @<Cases for |lbrace|@>; @+break;
- case if_like: @<Cases for |if_like|@>; @+break;
- case else_like: @<Cases for |else_like|@>; @+break;
- case else_head: @<Cases for |else_head|@>; @+break;
- case if_clause: @<Cases for |if_clause|@>; @+break;
- case if_head: @<Cases for |if_head|@>; @+break;
- case do_like: @<Cases for |do_like|@>; @+break;
- case case_like: @<Cases for |case_like|@>; @+break;
- case catch_like: @<Cases for |catch_like|@>; @+break;
- case tag: @<Cases for |tag|@>; @+break;
- case stmt: @<Cases for |stmt|@>; @+break;
- case semi: @<Cases for |semi|@>; @+break;
- case lproc: @<Cases for |lproc|@>; @+break;
- case section_scrap: @<Cases for |section_scrap|@>; @+break;
- case insert: @<Cases for |insert|@>; @+break;
- case prelangle: @<Cases for |prelangle|@>; @+break;
- case prerangle: @<Cases for |prerangle|@>; @+break;
- case langle: @<Cases for |langle|@>; @+break;
- case template_like: @<Cases for |template_like|@>; @+break;
- case new_like: @<Cases for |new_like|@>; @+break;
- case new_exp: @<Cases for |new_exp|@>; @+break;
- case ftemplate: @<Cases for |ftemplate|@>; @+break;
- case for_like: @<Cases for |for_like|@>; @+break;
- case raw_ubin: @<Cases for |raw_ubin|@>; @+break;
- case const_like: @<Cases for |const_like|@>; @+break;
- case raw_int: @<Cases for |raw_int|@>; @+break;
- case operator_like: @<Cases for |operator_like|@>; @+break;
- case typedef_like: @<Cases for |typedef_like|@>; @+break;
- case delete_like: @<Cases for |delete_like|@>; @+break;
- case question: @<Cases for |question|@>; @+break;
+ case exp: @<Cases for |exp|@>@; @+break;
+ case lpar: @<Cases for |lpar|@>@; @+break;
+ case unop: @<Cases for |unop|@>@; @+break;
+ case ubinop: @<Cases for |ubinop|@>@; @+break;
+ case binop: @<Cases for |binop|@>@; @+break;
+ case cast: @<Cases for |cast|@>@; @+break;
+ case sizeof_like: @<Cases for |sizeof_like|@>@; @+break;
+ case int_like: @<Cases for |int_like|@>@; @+break;
+ case public_like: @<Cases for |public_like|@>@; @+break;
+ case colcol: @<Cases for |colcol|@>@; @+break;
+ case decl_head: @<Cases for |decl_head|@>@; @+break;
+ case decl: @<Cases for |decl|@>@; @+break;
+ case base: @<Cases for |base|@>@; @+break;
+ case struct_like: @<Cases for |struct_like|@>@; @+break;
+ case struct_head: @<Cases for |struct_head|@>@; @+break;
+ case fn_decl: @<Cases for |fn_decl|@>@; @+break;
+ case function: @<Cases for |function|@>@; @+break;
+ case lbrace: @<Cases for |lbrace|@>@; @+break;
+ case if_like: @<Cases for |if_like|@>@; @+break;
+ case else_like: @<Cases for |else_like|@>@; @+break;
+ case else_head: @<Cases for |else_head|@>@; @+break;
+ case if_clause: @<Cases for |if_clause|@>@; @+break;
+ case if_head: @<Cases for |if_head|@>@; @+break;
+ case do_like: @<Cases for |do_like|@>@; @+break;
+ case case_like: @<Cases for |case_like|@>@; @+break;
+ case catch_like: @<Cases for |catch_like|@>@; @+break;
+ case tag: @<Cases for |tag|@>@; @+break;
+ case stmt: @<Cases for |stmt|@>@; @+break;
+ case semi: @<Cases for |semi|@>@; @+break;
+ case lproc: @<Cases for |lproc|@>@; @+break;
+ case section_scrap: @<Cases for |section_scrap|@>@; @+break;
+ case insert: @<Cases for |insert|@>@; @+break;
+ case prelangle: @<Cases for |prelangle|@>@; @+break;
+ case prerangle: @<Cases for |prerangle|@>@; @+break;
+ case langle: @<Cases for |langle|@>@; @+break;
+ case template_like: @<Cases for |template_like|@>@; @+break;
+ case new_like: @<Cases for |new_like|@>@; @+break;
+ case new_exp: @<Cases for |new_exp|@>@; @+break;
+ case ftemplate: @<Cases for |ftemplate|@>@; @+break;
+ case for_like: @<Cases for |for_like|@>@; @+break;
+ case raw_ubin: @<Cases for |raw_ubin|@>@; @+break;
+ case const_like: @<Cases for |const_like|@>@; @+break;
+ case raw_int: @<Cases for |raw_int|@>@; @+break;
+ case operator_like: @<Cases for |operator_like|@>@; @+break;
+ case typedef_like: @<Cases for |typedef_like|@>@; @+break;
+ case delete_like: @<Cases for |delete_like|@>@; @+break;
+ case question: @<Cases for |question|@>@; @+break;
}
pp++; /* if no match was found, we move to the right */
}
@@ -2404,17 +2410,23 @@ of identifiers in case labels.
If the first identifier is the keyword `\&{operator}', we give up;
users who want to index definitions of overloaded \CPLUSPLUS/ operators
should say, for example, `\.{@@!@@\^\\\&\{operator\} \$+\{=\}\$@@>}' (or,
-more properly alphebetized,
+more properly alpha\-betized,
`\.{@@!@@:operator+=\}\{\\\&\{operator\} \$+\{=\}\$@@>}').
@d no_ident_found (token_pointer)0 /* distinct from any identifier token */
@d case_found (token_pointer)1 /* likewise */
@d operator_found (token_pointer)2 /* likewise */
-@c
-token_pointer
-find_first_ident(p)
-text_pointer p;
+@<Predecl...@>=
+static token_pointer find_first_ident(text_pointer);@/
+static void make_reserved(scrap_pointer);@/
+static void make_underlined(scrap_pointer);@/
+static void underline_xref(name_pointer);
+
+@ @c
+static token_pointer
+find_first_ident(
+text_pointer p)
{
token_pointer q; /* token to be returned */
token_pointer j; /* token being looked at */
@@ -2444,11 +2456,11 @@ occurrence of the identifier that we're making reserved; hence
the |for| loop below.
@c
-void
-make_reserved(p) /* make the first identifier in |p->trans| like |int| */
-scrap_pointer p;
+static void
+make_reserved(@t\1\1@> /* make the first identifier in |p->trans| like |int| */
+scrap_pointer p@t\2\2@>)
{
- sixteen_bits tok_value; /* the name of this identifier, plus its flag*/
+ sixteen_bits tok_value; /* the name of this identifier, plus its flag */
token_pointer tok_loc; /* pointer to |tok_value| */
if ((tok_loc=find_first_ident(p->trans))<=operator_found)
return; /* this should not happen */
@@ -2475,10 +2487,10 @@ of a function, we find out that the identifier is being defined only after
it has been swallowed up by an |exp|.
@c
-void
-make_underlined(p)
+static void
+make_underlined(@t\1\1@>
/* underline the entry for the first identifier in |p->trans| */
-scrap_pointer p;
+scrap_pointer p@t\2\2@>)
{
token_pointer tok_loc; /* where the first identifier appears */
if ((tok_loc=find_first_ident(p->trans))<=operator_found)
@@ -2492,13 +2504,10 @@ because this would just make a new cross-reference at the end of the list.
We actually have to search through the list for the existing
cross-reference.
-@<Predecl...@>=
-void underline_xref();
-
-@ @c
-void
-underline_xref(p)
-name_pointer p;
+@c
+static void
+underline_xref(
+name_pointer p)
{
xref_pointer q=(xref_pointer)p->xref; /* pointer to cross-reference being examined */
xref_pointer r; /* temporary pointer for permuting cross-references */
@@ -2515,7 +2524,7 @@ name_pointer p;
else if (n>=def_flag && n<m) break;
q=q->xlink;
}
- @<Insert new cross-reference at |q|, not at beginning of list@>;
+ @<Insert new cross-reference at |q|, not at beginning of list@>@;
}
@ We get to this section only when the identifier is one letter long,
@@ -2528,7 +2537,7 @@ to insert the new cross-reference not at the beginning of the list
@<Insert new cross-reference at |q|...@>=
append_xref(0); /* this number doesn't matter */
xref_ptr->xlink=(xref_pointer)p->xref; r=xref_ptr;
- p->xref=(char*)xref_ptr;
+ update_node(p);
while (r->xlink!=q) {r->num=r->xlink->num; r=r->xlink;}
r->num=m; /* everything from |q| on is left undisturbed */
@@ -2818,7 +2827,11 @@ else if (cat1==stmt||cat1==decl||cat1==function) {
grouped together on the same line.
@d force_lines flags['f'] /* should each statement be on its own line? */
-@<Cases for |stmt|@>=
+
+@<Set init...@>=
+force_lines=true;
+
+@ @<Cases for |stmt|@>=
if (cat1==stmt||cat1==decl||cat1==function) {
big_app1(pp);
if (cat1==function) big_app(big_force);
@@ -3000,12 +3013,16 @@ too large, since it is assumed that this test was done beforehand.
@d freeze_text *(++text_ptr)=tok_ptr
-@c
-void
-reduce(j,k,c,d,n)
-scrap_pointer j;
-eight_bits c;
-short k, d, n;
+@<Predecl...@>=
+static void reduce(scrap_pointer,short,eight_bits,short,short);@/
+static void squash(scrap_pointer,short,eight_bits,short,short);
+
+@ @c
+static void
+reduce(
+scrap_pointer j, short k,
+eight_bits c,
+short d, short n)
{
scrap_pointer i, i1; /* pointers into scrap memory */
j->cat=c; j->trans=text_ptr;
@@ -3019,7 +3036,7 @@ short k, d, n;
lo_ptr=lo_ptr-k+1;
}
pp=(pp+d<scrap_base? scrap_base: pp+d);
- @<Print a snapshot of the scrap list if debugging @>;
+ @<Print a snapshot of the scrap list if debugging @>@;
pp--; /* we next say |pp++| */
}
@@ -3027,16 +3044,16 @@ short k, d, n;
takes advantage of the simplification that occurs when |k==1|.
@c
-void
-squash(j,k,c,d,n)
-scrap_pointer j;
-eight_bits c;
-short k, d, n;
+static void
+squash(
+scrap_pointer j, short k,
+eight_bits c,
+short d, short n)
{
scrap_pointer i; /* pointers into scrap memory */
if (k==1) {
j->cat=c; pp=(pp+d<scrap_base? scrap_base: pp+d);
- @<Print a snapshot...@>;
+ @<Print a snapshot...@>@;
pp--; /* we next say |pp++| */
return;
}
@@ -3058,8 +3075,8 @@ than to squeeze the last bit of space from the memory arrays.
@d safe_scrap_incr 10
@<Reduce the scraps using the productions until no more rules apply@>=
-while (1) {
- @<Make sure the entries |pp| through |pp+3| of |cat| are defined@>;
+while (true) {
+ @<Make sure the entries |pp| through |pp+3| of |cat| are defined@>@;
if (tok_ptr+safe_tok_incr>tok_mem_end) {
if (tok_ptr>max_tok_ptr) max_tok_ptr=tok_ptr;
overflow("token");
@@ -3070,7 +3087,7 @@ while (1) {
}
if (pp>lo_ptr) break;
init_mathness=cur_mathness=maybe_math;
- @<Match a production...@>;
+ @<Match a production...@>@;
}
@ If we get to the end of the scrap list, category codes equal to zero are
@@ -3090,22 +3107,22 @@ current stack categories will be printed out when |tracing| is set to 2;
a sequence of two or more irreducible scraps will be printed out when
|tracing| is set to 1.
-@<Global...@>=
-int tracing; /* can be used to show parsing details */
+@<Private...@>=
+static int tracing; /* can be used to show parsing details */
@ @<Print a snapsh...@>=
-{ scrap_pointer k; /* pointer into |scrap_info| */
+{ scrap_pointer k_l; /* pointer into |scrap_info| */
if (tracing==2) {
printf("\n%d:",n);
- for (k=scrap_base; k<=lo_ptr; k++) {
- if (k==pp) putxchar('*'); else putxchar(' ');
- if (k->mathness %4 == yes_math) putchar('+');
- else if (k->mathness %4 == no_math) putchar('-');
- print_cat(k->cat);
- if (k->mathness /4 == yes_math) putchar('+');
- else if (k->mathness /4 == no_math) putchar('-');
+ for (k_l=scrap_base; k_l<=lo_ptr; k_l++) {
+ if (k_l==pp) putxchar('*'); else putxchar(' ');
+ if (k_l->mathness %4 == yes_math) putchar('+');
+ else if (k_l->mathness %4 == no_math) putchar('-');
+ print_cat(k_l->cat);
+ if (k_l->mathness /4 == yes_math) putchar('+');
+ else if (k_l->mathness /4 == no_math) putchar('-');
}
- if (hi_ptr<=scrap_ptr) printf("..."); /* indicate that more is coming */
+ if (hi_ptr<=scrap_ptr) fputs("...",stdout); /* indicate that more is coming */
}
}
@@ -3123,24 +3140,26 @@ since |translate| might add a new text and a new scrap before it checks
for overflow.
@c
-text_pointer
-translate() /* converts a sequence of scraps */
+static text_pointer
+translate(void) /* converts a sequence of scraps */
{
scrap_pointer i, /* index into |cat| */
j; /* runs through final scraps */
pp=scrap_base; lo_ptr=pp-1; hi_ptr=pp;
- @<If tracing, print an indication of where we are@>;
- @<Reduce the scraps...@>;
- @<Combine the irreducible scraps that remain@>;
+ @<If tracing, print an indication of where we are@>@;
+ @<Reduce the scraps...@>@;
+ @<Combine the irreducible scraps that remain@>@;
}
+@ @<Predecl...@>=@+static text_pointer translate(void);
+
@ If the initial sequence of scraps does not reduce to a single scrap,
we concatenate the translations of all remaining scraps, separated by
blank spaces, with dollar signs surrounding the translations of scraps
where appropriate.
@<Combine the irreducible...@>= {
- @<If semi-tracing, show the irreducible scraps@>;
+ @<If semi-tracing, show the irreducible scraps@>@;
for (j=scrap_base; j<=lo_ptr; j++) {
if (j!=scrap_base) app(' ');
if (j->mathness % 4 == yes_math) app('$');
@@ -3148,7 +3167,7 @@ where appropriate.
if (j->mathness / 4 == yes_math) app('$');
if (tok_ptr+6>tok_mem_end) overflow("token");
}
- freeze_text; return(text_ptr-1);
+ freeze_text; return text_ptr-1;
}
@ @<If semi-tracing, show the irreducible scraps@>=
@@ -3188,19 +3207,21 @@ what it reads are appended into the |cat| and |trans| arrays, and |scrap_ptr|
is advanced.
@c
-void
-C_parse(spec_ctrl) /* creates scraps from \CEE/ tokens */
- eight_bits spec_ctrl;
+static void
+C_parse(@t\1\1@> /* creates scraps from \CEE/ tokens */
+ eight_bits spec_ctrl@t\2\2@>)
{
int count; /* characters remaining before string break */
while (next_control<format_code || next_control==spec_ctrl) {
- @<Append the scrap appropriate to |next_control|@>;
+ @<Append the scrap appropriate to |next_control|@>@;
next_control=get_next();
if (next_control=='|' || next_control==begin_comment ||
next_control==begin_short_comment) return;
}
}
+@ @<Predecl...@>=@+static void C_parse(eight_bits);
+
@ The following macro is used to append a scrap whose tokens have just
been appended:
@@ -3211,76 +3232,77 @@ been appended:
}
@ @<Append the scr...@>=
-@<Make sure that there is room for the new scraps, tokens, and texts@>;
+@<Make sure that there is room for the new scraps, tokens, and texts@>@;
switch (next_control) {
case section_name:
app(section_flag+(int)(cur_section-name_dir));
app_scrap(section_scrap,maybe_math);
app_scrap(exp,yes_math);@+break;
- case string: case constant: case verbatim: @<Append a string or constant@>;
- @+break;
- case identifier: app_cur_id(1);@+break;
- case TeX_string: @<Append a \TEX/ string, without forming a scrap@>;@+break;
+ case string: case constant: case verbatim:
+ @<Append a string or constant@>@;@+break;
+ case identifier: app_cur_id(true);@+break;
+ case TeX_string:
+ @<Append a \TEX/ string, without forming a scrap@>@;@+break;
case '/': case '.':
- app(next_control); app_scrap(binop,yes_math);@+break;
+ app(next_control);@+app_scrap(binop,yes_math);@+break;
case '<': app_str("\\langle");@+app_scrap(prelangle,yes_math);@+break;
@.\\langle@>
case '>': app_str("\\rangle");@+app_scrap(prerangle,yes_math);@+break;
@.\\rangle@>
- case '=': app_str("\\K"); app_scrap(binop,yes_math);@+break;
+ case '=': app_str("\\K");@+app_scrap(binop,yes_math);@+break;
@.\\K@>
- case '|': app_str("\\OR"); app_scrap(binop,yes_math);@+break;
+ case '|': app_str("\\OR");@+app_scrap(binop,yes_math);@+break;
@.\\OR@>
- case '^': app_str("\\XOR"); app_scrap(binop,yes_math);@+break;
+ case '^': app_str("\\XOR");@+app_scrap(binop,yes_math);@+break;
@.\\XOR@>
- case '%': app_str("\\MOD"); app_scrap(binop,yes_math);@+break;
+ case '%': app_str("\\MOD");@+app_scrap(binop,yes_math);@+break;
@.\\MOD@>
- case '!': app_str("\\R"); app_scrap(unop,yes_math);@+break;
+ case '!': app_str("\\R");@+app_scrap(unop,yes_math);@+break;
@.\\R@>
- case '~': app_str("\\CM"); app_scrap(unop,yes_math);@+break;
+ case '~': app_str("\\CM");@+app_scrap(unop,yes_math);@+break;
@.\\CM@>
- case '+': case '-': app(next_control); app_scrap(ubinop,yes_math);@+break;
- case '*': app(next_control); app_scrap(raw_ubin,yes_math);@+break;
- case '&': app_str("\\AND"); app_scrap(raw_ubin,yes_math);@+break;
+ case '+': case '-': app(next_control);@+app_scrap(ubinop,yes_math);@+break;
+ case '*': app(next_control);@+app_scrap(raw_ubin,yes_math);@+break;
+ case '&': app_str("\\AND");@+app_scrap(raw_ubin,yes_math);@+break;
@.\\AND@>
- case '?': app_str("\\?"); app_scrap(question,yes_math);@+break;
+ case '?': app_str("\\?");@+app_scrap(question,yes_math);@+break;
@.\\?@>
- case '#': app_str("\\#"); app_scrap(ubinop,yes_math);@+break;
+ case '#': app_str("\\#");@+app_scrap(ubinop,yes_math);@+break;
@.\\\#@>
case ignore: case xref_roman: case xref_wildcard:
case xref_typewriter: case noop:@+break;
- case '(': case '[': app(next_control); app_scrap(lpar,maybe_math);@+break;
- case ')': case ']': app(next_control); app_scrap(rpar,maybe_math);@+break;
- case '{': app_str("\\{"@q}@>); app_scrap(lbrace,yes_math);@+break;
+ case '(': case '[': app(next_control);@+app_scrap(lpar,maybe_math);@+break;
+ case ')': case ']': app(next_control);@+app_scrap(rpar,maybe_math);@+break;
+ case '{': app_str("\\{"@q}@>);@+app_scrap(lbrace,yes_math);@+break;
@.\\\{@>@q}@>
- case '}': app_str(@q{@>"\\}"); app_scrap(rbrace,yes_math);@+break;
+ case '}': app_str(@q{@>"\\}");@+app_scrap(rbrace,yes_math);@+break;
@q{@>@.\\\}@>
- case ',': app(','); app_scrap(comma,yes_math);@+break;
- case ';': app(';'); app_scrap(semi,maybe_math);@+break;
- case ':': app(':'); app_scrap(colon,no_math);@+break;@/
+ case ',': app(',');@+app_scrap(comma,yes_math);@+break;
+ case ';': app(';');@+app_scrap(semi,maybe_math);@+break;
+ case ':': app(':');@+app_scrap(colon,no_math);@+break;@/
@t\4@> @<Cases involving nonstandard characters@>@;
- case thin_space: app_str("\\,"); app_scrap(insert,maybe_math);@+break;
+ case thin_space: app_str("\\,");@+app_scrap(insert,maybe_math);@+break;
@.\\,@>
- case math_break: app(opt); app_str("0");
+ case math_break: app(opt);@+app_str("0");@+
app_scrap(insert,maybe_math);@+break;
- case line_break: app(force); app_scrap(insert,no_math);@+break;
- case left_preproc: app(force); app(preproc_line);
- app_str("\\#"); app_scrap(lproc,no_math);@+break;
+ case line_break: app(force);@+app_scrap(insert,no_math);@+break;
+ case left_preproc: app(force);@+app(preproc_line);@+app_str("\\#");
+ app_scrap(lproc,no_math);@+break;
@.\\\#@>
- case right_preproc: app(force); app_scrap(rproc,no_math);@+break;
- case big_line_break: app(big_force); app_scrap(insert,no_math);@+break;
- case no_line_break: app(big_cancel); app(noop); app(break_space);
- app(noop); app(big_cancel);
+ case right_preproc: app(force);@+app_scrap(rproc,no_math);@+break;
+ case big_line_break: app(big_force);@+app_scrap(insert,no_math);@+break;
+ case no_line_break: app(big_cancel);@+app(noop);@+app(break_space);@+
+ app(noop);@+app(big_cancel);
app_scrap(insert,no_math);@+break;
case pseudo_semi: app_scrap(semi,maybe_math);@+break;
case macro_arg_open: app_scrap(begin_arg,maybe_math);@+break;
case macro_arg_close: app_scrap(end_arg,maybe_math);@+break;
- case join: app_str("\\J"); app_scrap(insert,no_math);@+break;
+ case join: app_str("\\J");@+app_scrap(insert,no_math);@+break;
@.\\J@>
- case output_defs_code: app(force); app_str("\\ATH"); app(force);
+ case output_defs_code: app(force);@+app_str("\\ATH");@+app(force);
app_scrap(insert,no_math);@+break;
@.\\ATH@>
- default: app(inserted); app(next_control);
+ default: app(inserted);@+app(next_control);
app_scrap(insert,maybe_math);@+break;
}
@@ -3299,7 +3321,7 @@ standard ones. They are converted to \TEX/ control sequences so that it is
possible to keep \.{CWEAVE} from outputting unusual |char| codes.
@<Cases involving nonstandard...@>=
-case not_eq: app_str("\\I");@+app_scrap(binop,yes_math);@+break;
+case non_eq: app_str("\\I");@+app_scrap(binop,yes_math);@+break;
@.\\I@>
case lt_eq: app_str("\\Z");@+app_scrap(binop,yes_math);@+break;
@.\\Z@>
@@ -3416,15 +3438,17 @@ while (id_first<id_loc)
app(@q{@>'}');
@ The function |app_cur_id| appends the current identifier to the
-token list; it also builds a new scrap if |scrapping==1|.
+token list; it also builds a new scrap if |scrapping==true|.
@<Predec...@>=
-void app_cur_id();
+static void app_cur_id(boolean);@/
+static text_pointer C_translate(void);@/
+static void outer_parse(void);
@ @c
-void
-app_cur_id(scrapping)
-boolean scrapping; /* are we making this into a scrap? */
+static void
+app_cur_id(@t\1\1@>
+boolean scrapping@t\2\2@>) /* are we making this into a scrap? */
{
name_pointer p=id_lookup(id_first,id_loc,normal);
if (p->ilk<=custom) { /* not a reserved word */
@@ -3447,8 +3471,8 @@ that text. If scraps exist in |scrap_info|, they are
unaffected by this translation process.
@c
-text_pointer
-C_translate()
+static text_pointer
+C_translate(void)
{
text_pointer p; /* points to the translation */
scrap_pointer save_base; /* holds original value of |scrap_base| */
@@ -3461,7 +3485,7 @@ C_translate()
p=translate(); /* make the translation */
if (scrap_ptr>max_scr_ptr) max_scr_ptr=scrap_ptr;
scrap_ptr=scrap_base-1; scrap_base=save_base; /* scrap the scraps */
- return(p);
+ return p;
}
@ The |outer_parse| routine is to |C_parse| as |outer_xref|
@@ -3476,9 +3500,12 @@ program text.
@d make_pb flags['e']
-@c
-void
-outer_parse() /* makes scraps from \CEE/ tokens and comments */
+@<Set init...@>=
+make_pb=true;
+
+@ @c
+static void
+outer_parse(void) /* makes scraps from \CEE/ tokens and comments */
{
int bal; /* brace level in comment */
text_pointer p, q; /* partial comments */
@@ -3487,7 +3514,7 @@ outer_parse() /* makes scraps from \CEE/ tokens and comments */
C_parse(ignore);
else {
boolean is_long_comment=(next_control==begin_comment);
- @<Make sure that there is room for the new...@>;
+ @<Make sure that there is room for the new...@>@;
app(cancel); app(inserted);
if (is_long_comment) app_str("\\C{"@q}@>);
@.\\C@>
@@ -3568,12 +3595,12 @@ typedef output_state *stack_pointer;
@d cur_mode cur_state.mode_field /* current mode of interpretation */
@d init_stack stack_ptr=stack;cur_mode=outer /* initialize the stack */
-@<Global...@>=
-output_state cur_state; /* |cur_end|, |cur_tok|, |cur_mode| */
-output_state stack[stack_size]; /* info for non-current levels */
-stack_pointer stack_ptr; /* first unused location in the output state stack */
-stack_pointer stack_end=stack+stack_size-1; /* end of |stack| */
-stack_pointer max_stack_ptr; /* largest value assumed by |stack_ptr| */
+@<Private...@>=
+static output_state cur_state; /* |cur_end|, |cur_tok|, |cur_mode| */
+static output_state stack[stack_size]; /* info for non-current levels */
+static stack_pointer stack_end=stack+stack_size-1; /* end of |stack| */
+static stack_pointer stack_ptr; /* first unused location in the output state stack */
+static stack_pointer max_stack_ptr; /* largest value assumed by |stack_ptr| */
@ @<Set init...@>=
max_stack_ptr=stack;
@@ -3582,10 +3609,14 @@ max_stack_ptr=stack;
is called; it saves the old level of output and gets a new one going.
The value of |cur_mode| is not changed.
-@c
-void
-push_level(p) /* suspends the current level */
-text_pointer p;
+@<Predecl...@>=
+static void push_level(text_pointer);@/
+static void pop_level(void);
+
+@ @c
+static void
+push_level(@t\1\1@> /* suspends the current level */
+text_pointer p@t\2\2@>)
{
if (stack_ptr==stack_end) overflow("stack");
if (stack_ptr>stack) { /* save current state */
@@ -3603,8 +3634,8 @@ force when the current level was begun. This subroutine will never be
called when |stack_ptr==1|.
@c
-void
-pop_level()
+static void
+pop_level(void)
{
cur_end=(--stack_ptr)->end_field;
cur_tok=stack_ptr->tok_field; cur_mode=stack_ptr->mode_field;
@@ -3618,15 +3649,20 @@ by a complex routine that might generate additional levels of output).
In these cases |cur_name| points to the identifier or section name in
question.
-@<Global...@>=
-name_pointer cur_name;
+@<Private...@>=
+static name_pointer cur_name;
@ @d res_word 0201 /* returned by |get_output| for reserved words */
@d section_code 0200 /* returned by |get_output| for section names */
-@c
-eight_bits
-get_output() /* returns the next token of output */
+@<Predecl...@>=
+static eight_bits get_output(void);@/
+static void output_C(void);@/
+static void make_output(void);
+
+@ @c
+static eight_bits
+get_output(void) /* returns the next token of output */
{
sixteen_bits a; /* current item read from |tok_mem| */
restart: while (cur_tok==cur_end) pop_level();
@@ -3634,16 +3670,16 @@ get_output() /* returns the next token of output */
if (a>=0400) {
cur_name=a % id_flag + name_dir;
switch (a / id_flag) {
- case 2: return(res_word); /* |a==res_flag+cur_name| */
- case 3: return(section_code); /* |a==section_flag+cur_name| */
+ case 2: return res_word ; /* |a==res_flag+cur_name| */
+ case 3: return section_code ; /* |a==section_flag+cur_name| */
case 4: push_level(a % id_flag + tok_start); goto restart;
/* |a==tok_flag+cur_name| */
case 5: push_level(a % id_flag + tok_start); cur_mode=inner; goto restart;
/* |a==inner_tok_flag+cur_name| */
- default: return(identifier); /* |a==id_flag+cur_name| */
+ default: return identifier; /* |a==id_flag+cur_name| */
}
}
- return(a);
+ return (eight_bits)a;
}
@ The real work associated with token output is done by |make_output|.
@@ -3662,8 +3698,8 @@ while outputting the name of a section.
@^recursion@>
@c
-void
-output_C() /* outputs the current token list */
+static void
+output_C(void) /* outputs the current token list */
{
token_pointer save_tok_ptr;
text_pointer save_text_ptr;
@@ -3684,17 +3720,14 @@ output_C() /* outputs the current token list */
@ Here is \.{CWEAVE}'s major output handler.
-@<Predecl...@>=
-void make_output();
-
-@ @c
-void
-make_output() /* outputs the equivalents of tokens */
+@c
+static void
+make_output(void) /* outputs the equivalents of tokens */
{
- eight_bits a, /* current output byte */
+ eight_bits a=0, /* current output byte */
b; /* next output byte */
int c; /* count of |indent| and |outdent| tokens */
- char scratch[longest_name]; /* scratch area for section names */
+ char scratch[longest_name+1]; /* scratch area for section names */
char *k, *k_limit; /* indices into |scratch| */
char *j; /* index into |buffer| */
char *p; /* index into |byte_mem| */
@@ -3704,28 +3737,28 @@ make_output() /* outputs the equivalents of tokens */
boolean save_mode; /* value of |cur_mode| before a sequence of breaks */
app(end_translation); /* append a sentinel */
freeze_text; push_level(text_ptr-1);
- while (1) {
+ while (true) {
a=get_output();
reswitch: switch(a) {
case end_translation: return;
- case identifier: case res_word: @<Output an identifier@>; break;
- case section_code: @<Output a section name@>; break;
+ case identifier: case res_word: @<Output an identifier@>@; break;
+ case section_code: @<Output a section name@>@; break;
case math_rel: out_str("\\MRL{"@q}@>);
@.\\MRL@>
case noop: case inserted: break;
case cancel: case big_cancel: c=0; b=a;
- while (1) {
+ while (true) {
a=get_output();
if (a==inserted) continue;
if ((a<indent && !(b==big_cancel&&a==' ')) || a>big_force) break;
if (a==indent) c++; else if (a==outdent) c--;
else if (a==opt) a=get_output();
}
- @<Output saved |indent| or |outdent| tokens@>;
+ @<Output saved |indent| or |outdent| tokens@>@;
goto reswitch;
case indent: case outdent: case opt: case backup: case break_space:
case force: case big_force: case preproc_line: @<Output a control,
- look ahead in case of line breaks, possibly |goto reswitch|@>; break;
+ look ahead in case of line breaks, possibly |goto reswitch|@>@; break;
case quoted_char: out(*(cur_tok++));
case qualifier: break;
default: out(a); /* otherwise |a| is an ordinary character */
@@ -3767,7 +3800,7 @@ if (is_tiny(cur_name)) {
out('\\');
out((cur_name->byte_start)[0]);
}
-else out_name(cur_name,1);
+else out_name(cur_name,true);
@ The current mode does not affect the behavior of \.{CWEAVE}'s output routine
except when we are outputting control tokens.
@@ -3783,7 +3816,7 @@ if (a<break_space || a==preproc_line) {
@.\\8@>
if (a==opt) {
b=get_output(); /* |opt| is followed by a digit */
- if (b!='0' || force_lines==0) out(b)@;
+ if (b!='0' || force_lines==false) out(b)@;
else out_str("{-1}"); /* |force_lines| encourages more \.{@@\v} breaks */
}
} else if (a==opt) b=get_output(); /* ignore digit following |opt| */
@@ -3798,18 +3831,18 @@ is suppressed (i.e., a line break that follows `\.{\\Y\\B}').
@<Look ahead for st...@>= {
b=a; save_mode=cur_mode; c=0;
- while (1) {
+ while (true) {
a=get_output();
if (a==inserted) continue;
if (a==cancel || a==big_cancel) {
- @<Output saved |indent| or |outdent| tokens@>;
+ @<Output saved |indent| or |outdent| tokens@>@;
goto reswitch; /* |cancel| overrides everything */
}
if ((a!=' ' && a<indent) || a==backup || a>big_force) {
if (save_mode==outer) {
if (out_ptr>out_buf+3 && strncmp(out_ptr-3,"\\Y\\B",4)==0)
goto reswitch;
- @<Output saved |indent| or |outdent| tokens@>;
+ @<Output saved |indent| or |outdent| tokens@>@;
out('\\'); out(b-cancel+'0');
@.\\5@>
@.\\6@>
@@ -3843,8 +3876,8 @@ input buffer and the translation process uses the end of the active
out_str("\\X");
@.\\X@>
cur_xref=(xref_pointer)cur_name->xref;
- if (cur_xref->num==file_flag) {an_output=1; cur_xref=cur_xref->xlink;}
- else an_output=0;
+ if (cur_xref->num==file_flag) {an_output=true; cur_xref=cur_xref->xlink;}
+ else an_output=false;
if (cur_xref->num>=def_flag) {
out_section(cur_xref->num-def_flag);
if (phase==3) {
@@ -3860,7 +3893,7 @@ input buffer and the translation process uses the end of the active
out(':');
if (an_output) out_str("\\.{"@q}@>);
@.\\.@>
- @<Output the text of the section name@>;
+ @<Output the text of the section name@>@;
if (an_output) out_str(@q{@>" }");
out_str("\\X");
}
@@ -3872,7 +3905,7 @@ k_limit=scratch+strlen(scratch);
cur_section_name=cur_name;
while (k<k_limit) {
b=*(k++);
- if (b=='@@') @<Skip next character, give error if not `\.{@@}'@>;
+ if (b=='@@') @<Skip next character, give error if not `\.{@@}'@>@;
if (an_output)
switch (b) {
case ' ':case '\\':case '#':case '%':case '$':case '^':
@@ -3891,18 +3924,18 @@ while (k<k_limit) {
@.\\\_@>
default: out(b);
}
- else if (b!='|') out(b)@;
+ else { if (b!='|') out(b)@;
else {
- @<Copy the \CEE/ text into the |buffer| array@>;
+ @<Copy the \CEE/ text into the |buffer| array@>@;
save_loc=loc; save_limit=limit; loc=limit+2; limit=j+1;
*limit='|'; output_C();
loc=save_loc; limit=save_limit;
- }
+ } }
}
@ @<Skip next char...@>=
if (*k++!='@@') {
- printf("\n! Illegal control code in section name: <");
+ fputs("\n! Illegal control code in section name: <",stdout);
@.Illegal control code...@>
print_section_name(cur_section_name); printf("> "); mark_error;
}
@@ -3915,9 +3948,9 @@ equals the delimiter that began the string being copied.
@<Copy the \CEE/ text into...@>=
j=limit+1; *j='|'; delim=0;
-while (1) {
+while (true) {
if (k>=k_limit) {
- printf("\n! C text in section name didn't end: <");
+ fputs("\n! C text in section name didn't end: <",stdout);
@.C text...didn't end@>
print_section_name(cur_section_name); printf("> "); mark_error; break;
}
@@ -3925,9 +3958,9 @@ while (1) {
if (b=='@@' || (b=='\\' && delim!=0))
@<Copy a quoted character into the buffer@>@;
else {
- if (b=='\'' || b=='"')
+ if (b=='\'' || b=='"') {
if (delim==0) delim=b;
- else if (delim==b) delim=0;
+ else if (delim==b) delim=0; }
if (b!='|' || delim!=0) {
if (j>buffer+long_buf_size-3) overflow("buffer");
*(++j)=b;
@@ -3948,19 +3981,18 @@ is analogous to phase one, except that more work is involved because we must
actually output the \TEX/ material instead of merely looking at the
\.{CWEB} specifications.
-@<Predecl...@>=
-void phase_two();
-
-@ @c
-void
-phase_two() {
-reset_input(); if (show_progress) printf("\nWriting the output file...");
+@c
+static void
+phase_two(void) {
+reset_input(); if (show_progress) fputs("\nWriting the output file...",stdout);
@.Writing the output file...@>
-section_count=0; format_visible=1; copy_limbo();
-finish_line(); flush_buffer(out_buf,0,0); /* insert a blank line, it looks nice */
-while (!input_has_ended) @<Translate the current section@>;
+section_count=0; format_visible=true; copy_limbo();
+finish_line(); flush_buffer(out_buf,false,false); /* insert a blank line, it looks nice */
+while (!input_has_ended) @<Translate the current section@>@;
}
+@ @<Predecl...@>=@+static void phase_two(void);
+
@ The output file will contain the control sequence \.{\\Y} between non-null
sections of a section, e.g., between the \TEX/ and definition parts if both
are nonempty. This puts a little white space between the parts when they are
@@ -3972,27 +4004,27 @@ and `|emit_space_if_needed|' are able to handle the situation:
@d save_position save_line=out_line; save_place=out_ptr
@d emit_space_if_needed if (save_line!=out_line || save_place!=out_ptr)
out_str("\\Y");
- space_checked=1
+ space_checked=true;
@.\\Y@>
-@<Global...@>=
-int save_line; /* former value of |out_line| */
-char *save_place; /* former value of |out_ptr| */
-int sec_depth; /* the integer, if any, following \.{@@*} */
-boolean space_checked; /* have we done |emit_space_if_needed|? */
-boolean format_visible; /* should the next format declaration be output? */
-boolean doing_format=0; /* are we outputting a format declaration? */
-boolean group_found=0; /* has a starred section occurred? */
+@<Private...@>=
+static int save_line; /* former value of |out_line| */
+static char *save_place; /* former value of |out_ptr| */
+static int sec_depth; /* the integer, if any, following \.{@@*} */
+static boolean space_checked; /* have we done |emit_space_if_needed|? */
+static boolean format_visible; /* should the next format declaration be output? */
+static boolean doing_format=false; /* are we outputting a format declaration? */
+static boolean group_found=false; /* has a starred section occurred? */
@ @<Translate the current section@>= {
section_count++;
- @<Output the code for the beginning of a new section@>;
+ @<Output the code for the beginning of a new section@>@;
save_position;
- @<Translate the \TEX/ part of the current section@>;
- @<Translate the definition part of the current section@>;
- @<Translate the \CEE/ part of the current section@>;
- @<Show cross-references to this section@>;
- @<Output the code for the end of a section@>;
+ @<Translate the \TEX/ part of the current section@>@;
+ @<Translate the definition part of the current section@>@;
+ @<Translate the \CEE/ part of the current section@>@;
+ @<Show cross-references to this section@>@;
+ @<Output the code for the end of a section@>@;
}
@ Sections beginning with the \.{CWEB} control sequence `\.{@@\ }' start in the
@@ -4016,7 +4048,7 @@ else {
sec_depth = sec_depth*10 + (*loc) -'0';
}
while (*loc == ' ') loc++; /* remove spaces before group title */
- group_found=1;
+ group_found=true;
out_str("\\N");
@.\\N@>
{@+ char s[32];@+sprintf(s,"{%d}",sec_depth+1);@+out_str(s);@+}
@@ -4052,13 +4084,13 @@ index entries are not copied and \CEE/ text within \pb\ is translated.
the token memory is in its initial empty state.
@<Translate the d...@>=
-space_checked=0;
+space_checked=false;
while (next_control<=definition) { /* |format_code| or |definition| */
init_stack;
if (next_control==definition) @<Start a macro definition@>@;
- else @<Start a format definition@>;
- outer_parse(); finish_C(format_visible); format_visible=1;
- doing_format=0;
+ else @<Start a format definition@>@;
+ outer_parse(); finish_C(format_visible); format_visible=true;
+ doing_format=false;
}
@ The |finish_C| procedure outputs the translation of the current
@@ -4071,13 +4103,10 @@ takes place, so that the translation will normally end with \.{\\6} or
\.{\\7} (the \TEX/ macros for |force| and |big_force|). This \.{\\6} or
\.{\\7} is replaced by the concluding \.{\\par} or by \.{\\Y\\par}.
-@<Predecl...@>=
-void finish_C();
-
-@ @c
-void
-finish_C(visible) /* finishes a definition or a \CEE/ part */
- boolean visible; /* nonzero if we should produce \TEX/ output */
+@c
+static void
+finish_C(@t\1\1@> /* finishes a definition or a \CEE/ part */
+ boolean visible@t\2\2@>) /* nonzero if we should produce \TeX\ output */
{
text_pointer p; /* translation of the scraps */
if (visible) {
@@ -4085,13 +4114,15 @@ finish_C(visible) /* finishes a definition or a \CEE/ part */
p=translate();
@.\\B@>
app(tok_flag+(int)(p-tok_start)); make_output(); /* output the list */
- if (out_ptr>out_buf+1)
- if (*(out_ptr-1)=='\\')
+ if (out_ptr>out_buf+1) {
+ if (*(out_ptr-1)=='\\') {
@.\\6@>
@.\\7@>
@.\\Y@>
if (*out_ptr=='6') out_ptr-=2;
else if (*out_ptr=='7') *out_ptr='Y';
+ }
+ }
out_str("\\par"); finish_line();
}
if (text_ptr>max_text_ptr) max_text_ptr=text_ptr;
@@ -4101,6 +4132,8 @@ finish_C(visible) /* finishes a definition or a \CEE/ part */
/* forget the tokens and the scraps */
}
+@ @<Predecl...@>=@+static void finish_C(boolean);
+
@ Keeping in line with the conventions of the \CEE/ preprocessor (and
otherwise contrary to the rules of \.{CWEB}) we distinguish here
between the case that `\.(' immediately follows an identifier and the
@@ -4118,11 +4151,11 @@ it starts after we scan the matching `\.)'.
err_print("! Improper macro definition");
@.Improper macro definition@>
else {
- app('$'); app_cur_id(0);
+ app('$'); app_cur_id(false);
if (*loc=='(')
reswitch: switch (next_control=get_next()) {
case '(': case ',': app(next_control); goto reswitch;
- case identifier: app_cur_id(0); goto reswitch;
+ case identifier: app_cur_id(false); goto reswitch;
case ')': app(next_control); next_control=get_next(); break;
default: err_print("! Improper macro definition"); break;
}
@@ -4133,8 +4166,8 @@ it starts after we scan the matching `\.)'.
}
@ @<Start a format...@>= {
- doing_format=1;
- if(*(loc-1)=='s' || *(loc-1)=='S') format_visible=0;
+ doing_format=true;
+ if(*(loc-1)=='s' || *(loc-1)=='S') format_visible=false;
if(!space_checked){emit_space_if_needed;save_position;}
app_str("\\F"); /* this will produce `\&{format }' */
@.\\F@>
@@ -4158,8 +4191,8 @@ it starts after we scan the matching `\.)'.
|next_control>=begin_C|. We will make the global variable |this_section|
point to the current section name, if it has a name.
-@<Global...@>=
-name_pointer this_section; /* the current section name, or zero */
+@<Private...@>=
+static name_pointer this_section; /* the current section name, or zero */
@ @<Translate the \CEE/...@>=
this_section=name_dir;
@@ -4169,13 +4202,13 @@ if (next_control<=section_name) {
else {
this_section=cur_section;
@<Check that '=' or '==' follows this section name, and
- emit the scraps to start the section definition@>;
+ emit the scraps to start the section definition@>@;
}
while (next_control<=section_name) {
outer_parse();
- @<Emit the scrap for a section name if present@>;
+ @<Emit the scrap for a section name if present@>@;
}
- finish_C(1);
+ finish_C(true);
}
@ The title of the section and an $\E$ or $\mathrel+\E$ are made
@@ -4196,8 +4229,8 @@ cur_xref=(xref_pointer)this_section->xref;
if(cur_xref->num==file_flag) cur_xref=cur_xref->xlink;
app_str("${}");
if (cur_xref->num!=section_count+def_flag) {
- app_str("\\mathrel+"); /*section name is multiply defined*/
- this_section=name_dir; /*so we won't give cross-reference info here*/
+ app_str("\\mathrel+"); /* section name is multiply defined */
+ this_section=name_dir; /* so we won't give cross-reference info here */
}
app_str("\\E"); /* output an equivalence sign */
@.\\E@>
@@ -4223,8 +4256,8 @@ after the section ends.
@<Show cross...@>=
if (this_section>name_dir) {
cur_xref=(xref_pointer)this_section->xref;
- if (cur_xref->num==file_flag){an_output=1;cur_xref=cur_xref->xlink;}
- else an_output=0;
+ if (cur_xref->num==file_flag){an_output=true;cur_xref=cur_xref->xlink;}
+ else an_output=false;
if (cur_xref->num>def_flag)
cur_xref=cur_xref->xlink; /* bypass current section number */
footnote(def_flag); footnote(cite_flag); footnote(0);
@@ -4242,13 +4275,10 @@ leaves |cur_xref| pointing to the first element not printed. Typical outputs:
Note that the output of \.{CWEAVE} is not English-specific; users may
supply new definitions for the macros \.{\\A}, \.{\\As}, etc.
-@<Predecl...@>=
-void footnote();
-
-@ @c
-void
-footnote(flag) /* outputs section cross-references */
-sixteen_bits flag;
+@c
+static void
+footnote(@t\1\1@> /* outputs section cross-references */
+sixteen_bits flag@t\2\2@>)
{
xref_pointer q; /* cross-reference pointer variable */
if (cur_xref->num<=flag) return;
@@ -4257,17 +4287,19 @@ sixteen_bits flag;
@.\\Q@>
@.\\U@>
out(flag==0? 'U': flag==cite_flag? 'Q': 'A');
- @<Output all the section numbers on the reference list |cur_xref|@>;
+ @<Output all the section numbers on the reference list |cur_xref|@>@;
out('.');
}
+@ @<Predecl...@>=@+static void footnote(sixteen_bits);
+
@ The following code distinguishes three cases, according as the number
of cross-references is one, two, or more than two. Variable |q| points
to the first cross-reference, and the last link is a zero.
@<Output all the section numbers...@>=
q=cur_xref; if (q->xlink->num>flag) out('s'); /* plural */
-while (1) {
+while (true) {
out_section(cur_xref->num-flag);
cur_xref=cur_xref->xlink; /* point to the next cross-reference to output */
if (cur_xref->num<=flag) break;
@@ -4281,7 +4313,7 @@ while (1) {
@ @<Output the code for the end of a section@>=
out_str("\\fi"); finish_line();
@.\\fi@>
-flush_buffer(out_buf,0,0); /* insert a blank line, it looks nice */
+flush_buffer(out_buf,false,false); /* insert a blank line, it looks nice */
@** Phase three processing.
We are nearly finished! \.{CWEAVE}'s only remaining task is to write out the
@@ -4291,12 +4323,9 @@ If the user has set the |no_xref| flag (the \.{-x} option on the command line),
just finish off the page, omitting the index, section name list, and table of
contents.
-@<Predecl...@>=
-void phase_three();
-
-@ @c
-void
-phase_three() {
+@c
+static void
+phase_three(void) {
if (no_xref) {
finish_line();
out_str("\\end");
@@ -4304,29 +4333,29 @@ if (no_xref) {
finish_line();
}
else {
- phase=3; if (show_progress) printf("\nWriting the index...");
+ phase=3; if (show_progress) fputs("\nWriting the index...",stdout);
@.Writing the index...@>
finish_line();
- if ((idx_file=fopen(idx_file_name,"w"))==NULL)
+ if ((idx_file=fopen(idx_file_name,"wb"))==NULL)
fatal("! Cannot open index file ",idx_file_name);
@.Cannot open index file@>
if (change_exists) {
- @<Tell about changed sections@>; finish_line(); finish_line();
+ @<Tell about changed sections@>@; finish_line(); finish_line();
}
out_str("\\inx"); finish_line();
@.\\inx@>
active_file=idx_file; /* change active file to the index file */
- @<Do the first pass of sorting@>;
- @<Sort and output the index@>;
+ @<Do the first pass of sorting@>@;
+ @<Sort and output the index@>@;
finish_line(); fclose(active_file); /* finished with |idx_file| */
active_file=tex_file; /* switch back to |tex_file| for a tic */
out_str("\\fin"); finish_line();
@.\\fin@>
- if ((scn_file=fopen(scn_file_name,"w"))==NULL)
+ if ((scn_file=fopen(scn_file_name,"wb"))==NULL)
fatal("! Cannot open section file ",scn_file_name);
@.Cannot open section file@>
active_file=scn_file; /* change active file to section listing file */
- @<Output all the section names@>;
+ @<Output all the section names@>@;
finish_line(); fclose(active_file); /* finished with |scn_file| */
active_file=tex_file;
if (group_found) out_str("\\con");@+else out_str("\\end");
@@ -4335,15 +4364,20 @@ else {
finish_line();
fclose(active_file);
}
-if (show_happiness) printf("\nDone.");
+if (show_happiness) {
+ if (show_progress) new_line;
+ fputs("Done.",stdout);
+}
check_complete(); /* was all of the change file used? */
}
+@ @<Predecl...@>=@+static void phase_three(void);
+
@ Just before the index comes a list of all the changed sections, including
the index section itself.
-@<Global...@>=
-sixteen_bits k_section; /* runs through the sections */
+@<Private...@>=
+static sixteen_bits k_section; /* runs through the sections */
@ @<Tell about changed sections@>= {
/* remember that the index is already marked as changed */
@@ -4362,28 +4396,28 @@ sixteen_bits k_section; /* runs through the sections */
@ A left-to-right radix sorting method is used, since this makes it easy to
adjust the collating sequence and since the running time will be at worst
proportional to the total length of all entries in the index. We put the
-identifiers into 102 different lists based on their first characters.
+identifiers into different lists based on their first characters.
(Uppercase letters are put into the same list as the corresponding lowercase
letters, since we want to have `$t<\\{TeX}<\&{to}$'.) The
list for character |c| begins at location |bucket[c]| and continues through
the |blink| array.
-@<Global...@>=
-name_pointer bucket[256];
-name_pointer next_name; /* successor of |cur_name| when sorting */
-name_pointer blink[max_names]; /* links in the buckets */
+@<Private...@>=
+static name_pointer bucket[256];
+static name_pointer next_name; /* successor of |cur_name| when sorting */
+static name_pointer blink[max_names]; /* links in the buckets */
@ To begin the sorting, we go through all the hash lists and put each entry
having a nonempty cross-reference list into the proper bucket.
@<Do the first pass...@>= {
int c;
-for (c=0; c<=255; c++) bucket[c]=NULL;
+for (c=0; c<256; c++) bucket[c]=NULL;
for (h=hash; h<=hash_end; h++) {
next_name=*h;
while (next_name) {
cur_name=next_name; next_name=cur_name->link;
- if (cur_name->xref!=(char*)xmem) {
+ if (cur_name->xref!=(void *)xmem) {
c=(eight_bits)((cur_name->byte_start)[0]);
if (xisupper(c)) c=tolower(c);
blink[cur_name-name_dir]=bucket[c]; bucket[c]=cur_name;
@@ -4401,7 +4435,7 @@ present; the lists are output in reverse order (first |sort_ptr|, then
|k| characters of all entries on this list are known to be equal we have
|depth[j]==k|.
-@ @<Rest of |trans_plus| union@>=
+@<Rest of |trans_plus| union@>=
name_pointer Head;
@ @d depth cat /* reclaims memory that is no longer needed for parsing */
@@ -4411,11 +4445,11 @@ name_pointer Head;
@d sort_ptr scrap_ptr /* ditto */
@d max_sorts max_scraps /* ditto */
-@<Global...@>=
-eight_bits cur_depth; /* depth of current buckets */
-char *cur_byte; /* index into |byte_mem| */
-sixteen_bits cur_val; /* current cross-reference number */
-sort_pointer max_sort_ptr; /* largest value of |sort_ptr| */
+@<Private...@>=
+static eight_bits cur_depth; /* depth of current buckets */
+static char *cur_byte; /* index into |byte_mem| */
+static sixteen_bits cur_val; /* current cross-reference number */
+static sort_pointer max_sort_ptr; /* largest value of |sort_ptr| */
@ @<Set init...@>=
max_sort_ptr=scrap_info;
@@ -4423,8 +4457,8 @@ max_sort_ptr=scrap_info;
@ The desired alphabetic order is specified by the |collate| array; namely,
$|collate|[0]<|collate|[1]<\cdots<|collate|[100]$.
-@<Global...@>=
-eight_bits collate[102+128]; /* collation order */
+@<Private...@>=
+static eight_bits collate[101+128]; /* collation order */
@^high-bit character handling@>
@ We use the order $\hbox{null}<\.\ <\hbox{other characters}<{}$\.\_${}<
@@ -4438,29 +4472,41 @@ some \CEE/ compilers choke on long strings.
@<Set init...@>=
collate[0]=0;
-strcpy(collate+1," \1\2\3\4\5\6\7\10\11\12\13\14\15\16\17");
+memcpy((char *)collate+1,
+ " \1\2\3\4\5\6\7\10\11\12\13\14\15\16\17",16);
/* 16 characters + 1 = 17 */
-strcpy(collate+17,"\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37");
+memcpy((char *)collate+17,
+ "\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37",16);
/* 16 characters + 17 = 33 */
-strcpy(collate+33,"!\42#$%&'()*+,-./:;<=>?@@[\\]^`{|}~_");
+memcpy((char *)collate+33,
+ "!\42#$%&'()*+,-./:;<=>?@@[\\]^`{|}~_",32);
/* 32 characters + 33 = 65 */
-strcpy(collate+65,"abcdefghijklmnopqrstuvwxyz0123456789");
+memcpy((char *)collate+65,
+ "abcdefghijklmnopqrstuvwxyz0123456789",36);
/* (26 + 10) characters + 65 = 101 */
-strcpy(collate+101,"\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217");
+memcpy((char *)collate+101,
+ "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217",16);
/* 16 characters + 101 = 117 */
-strcpy(collate+117,"\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237");
+memcpy((char *)collate+117,
+ "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237",16);
/* 16 characters + 117 = 133 */
-strcpy(collate+133,"\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257");
+memcpy((char *)collate+133,
+ "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257",16);
/* 16 characters + 133 = 149 */
-strcpy(collate+149,"\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277");
+memcpy((char *)collate+149,
+ "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277",16);
/* 16 characters + 149 = 165 */
-strcpy(collate+165,"\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317");
+memcpy((char *)collate+165,
+ "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317",16);
/* 16 characters + 165 = 181 */
-strcpy(collate+181,"\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337");
+memcpy((char *)collate+181,
+ "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337",16);
/* 16 characters + 181 = 197 */
-strcpy(collate+197,"\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357");
+memcpy((char *)collate+197,
+ "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357",16);
/* 16 characters + 197 = 213 */
-strcpy(collate+213,"\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377");
+memcpy((char *)collate+213,
+ "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377",16);
/* 16 characters + 213 = 229 */
@ Procedure |unbucket| goes through the buckets and adds nonempty lists
@@ -4471,16 +4517,13 @@ regarded as identical.
@d infinity 255 /* $\infty$ (approximately) */
-@<Predecl...@>=
-void unbucket();
-
-@ @c
-void
-unbucket(d) /* empties buckets having depth |d| */
-eight_bits d;
+@c
+static void
+unbucket(@t\1\1@> /* empties buckets having depth |d| */
+eight_bits d@t\2\2@>)
{
int c; /* index into |bucket|; cannot be a simple |char| because of sign
- comparison below*/
+ comparison below */
for (c=100+128; c>= 0; c--) if (bucket[collate[c]]) {
@^high-bit character handling@>
if (sort_ptr>=scrap_info_end) overflow("sorting");
@@ -4492,13 +4535,15 @@ eight_bits d;
}
}
+@ @<Predecl...@>=@+static void unbucket(eight_bits);
+
@ @<Sort and output...@>=
sort_ptr=scrap_info; unbucket(1);
while (sort_ptr>scrap_info) {
cur_depth=sort_ptr->depth;
if (blink[sort_ptr->head-name_dir]==0 || cur_depth==infinity)
@<Output index entries for the list at |sort_ptr|@>@;
- else @<Split the list at |sort_ptr| into further lists@>;
+ else @<Split the list at |sort_ptr| into further lists@>@;
}
@ @<Split the list...@>= {
@@ -4522,8 +4567,8 @@ while (sort_ptr>scrap_info) {
do {
out_str("\\I");
@.\\I@>
- @<Output the name at |cur_name|@>;
- @<Output the cross-references at |cur_name|@>;
+ @<Output the name at |cur_name|@>@;
+ @<Output the cross-references at |cur_name|@>@;
cur_name=blink[cur_name-name_dir];
} while (cur_name);
--sort_ptr;
@@ -4546,7 +4591,7 @@ lowcase: out_str("\\\\");
@.\\9@>
case typewriter: out_str("\\.");
@.\\.@>
- case roman: not_an_identifier: out_name(cur_name,0); goto name_done;
+ case roman: not_an_identifier: out_name(cur_name,false); goto name_done;
case custom: {char *j; out_str("$\\");
for (j=cur_name->byte_start;j<(cur_name+1)->byte_start;j++)
out(*j=='_'? 'x': *j=='$'? 'X': *j);
@@ -4556,14 +4601,14 @@ lowcase: out_str("\\\\");
default: out_str("\\&");
@.\\\&@>
}
-out_name(cur_name,1);
+out_name(cur_name,true);
name_done:@;
@ Section numbers that are to be underlined are enclosed in
`\.{\\[}$\,\ldots\,$\.]'.
@<Output the cross-references...@>=
-@<Invert the cross-reference list at |cur_name|, making |cur_xref| the head@>;
+@<Invert the cross-reference list at |cur_name|, making |cur_xref| the head@>@;
do {
out_str(", "); cur_val=cur_xref->num;
if (cur_val<def_flag) out_section(cur_val);
@@ -4576,8 +4621,8 @@ out('.'); finish_line();
@ List inversion is best thought of as popping elements off one stack and
pushing them onto another. In this case |cur_xref| will be the head of
the stack that we push things onto.
-@<Global...@>=
-xref_pointer next_xref, this_xref;
+@<Private...@>=
+static xref_pointer next_xref, this_xref;
/* pointer variables for rearranging a list */
@ @<Invert the cross-reference list at |cur_name|, making |cur_xref| the head@>=
@@ -4591,13 +4636,10 @@ do {
prints them.
@^recursion@>
-@<Predecl...@>=
-void section_print();
-
-@ @c
-void
-section_print(p) /* print all section names in subtree |p| */
-name_pointer p;
+@c
+static void
+section_print(@t\1\1@> /* print all section names in subtree |p| */
+name_pointer p@t\2\2@>)
{
if (p) {
section_print(p->llink); out_str("\\I");
@@ -4611,34 +4653,36 @@ name_pointer p;
}
}
-@ @<Output all the section names@>=section_print(root)
+@ @<Predecl...@>=@+static void section_print(name_pointer);
+
+@ @<Output all the section names@>=section_print(root);
-@ Because on some systems the difference between two pointers is a |long|
+@ Because on some systems the difference between two pointers is a |ptrdiff_t|
rather than an |int|, we use \.{\%ld} to print these quantities.
@c
void
-print_stats() {
- printf("\nMemory usage statistics:\n");
+print_stats(void) {
+ puts("\nMemory usage statistics:");
@.Memory usage statistics:@>
printf("%ld names (out of %ld)\n",
- (long)(name_ptr-name_dir),(long)max_names);
+ (ptrdiff_t)(name_ptr-name_dir),(long)max_names);
printf("%ld cross-references (out of %ld)\n",
- (long)(xref_ptr-xmem),(long)max_refs);
+ (ptrdiff_t)(xref_ptr-xmem),(long)max_refs);
printf("%ld bytes (out of %ld)\n",
- (long)(byte_ptr-byte_mem),(long)max_bytes);
- printf("Parsing:\n");
+ (ptrdiff_t)(byte_ptr-byte_mem),(long)max_bytes);
+ puts("Parsing:");
printf("%ld scraps (out of %ld)\n",
- (long)(max_scr_ptr-scrap_info),(long)max_scraps);
+ (ptrdiff_t)(max_scr_ptr-scrap_info),(long)max_scraps);
printf("%ld texts (out of %ld)\n",
- (long)(max_text_ptr-tok_start),(long)max_texts);
+ (ptrdiff_t)(max_text_ptr-tok_start),(long)max_texts);
printf("%ld tokens (out of %ld)\n",
- (long)(max_tok_ptr-tok_mem),(long)max_toks);
+ (ptrdiff_t)(max_tok_ptr-tok_mem),(long)max_toks);
printf("%ld levels (out of %ld)\n",
- (long)(max_stack_ptr-stack),(long)stack_size);
- printf("Sorting:\n");
+ (ptrdiff_t)(max_stack_ptr-stack),(long)stack_size);
+ puts("Sorting:");
printf("%ld levels (out of %ld)\n",
- (long)(max_sort_ptr-scrap_info),(long)max_scraps);
+ (ptrdiff_t)(max_sort_ptr-scrap_info),(long)max_scraps);
}
@** Index.
diff --git a/web/c_cpp/cweb/cweb.1 b/web/c_cpp/cweb/cweb.1
index ad41c427ea..a9aa69bf43 100644
--- a/web/c_cpp/cweb/cweb.1
+++ b/web/c_cpp/cweb/cweb.1
@@ -1,4 +1,4 @@
-.TH CWEB 1L 2002-Apr-13
+.TH CWEB 1 2018-Dec-16
.
.SH NAME
ctangle, cweave \- translate CWEB to C and/or TeX
@@ -10,14 +10,14 @@ ctangle, cweave \- translate CWEB to C and/or TeX
.B \-bhp
] [
.B +s
-] webfile[.w] [changefile[.ch]] [outputfile[.c]]
+] webfile[.w] [{changefile[.ch]|-} [outputfile[.c]]]
.br
.B cweave
[
.B \-befhpx
] [
.B +s
-] webfile[.w] [changefile[.ch]] [outputfile[.tex]]
+] webfile[.w] [{changefile[.ch]|-} [outputfile[.tex]]]
.ad
.
.SH DESCRIPTION
@@ -78,8 +78,7 @@ If you say -bhp, you get nothing but error messages.
.PP
The
.B +s
-option prints statistics about memory usage at the end of a run
-(assuming that the programs have been compiled with the -DSTAT switch).
+option prints statistics about memory usage at the end of a run.
.PP
There are three other options applicable to
.I cweave
@@ -99,20 +98,15 @@ and similar programs.
means omit the index and table of contents.
.
.SH FILES
+The location of the files mentioned below varies from system to system.
.TP
-/usr/local/lib/tex/inputs/cwebmac.tex
+cwebmac.tex
TeX macros used by cweave output.
.TP
-/usr/local/src/cweb/cwebman.tex
+cwebman.tex
The user manual.
.TP
-/usr/local/src/cweb/examples/wc.w
-An introductory example.
-.TP
-/usr/local/src/cweb/examples/wmerge.w
-Patch program based on CWEB-style change files.
-.TP
-/usr/local/lib/cweb
+/usr/lib/cweb
Directory for cweb "include" files.
.
.SH "SEE ALSO"
diff --git a/web/c_cpp/cweb/cwebmac.tex b/web/c_cpp/cweb/cwebmac.tex
index 60f86ce5a9..385dc474e7 100644
--- a/web/c_cpp/cweb/cwebmac.tex
+++ b/web/c_cpp/cweb/cwebmac.tex
@@ -1,19 +1,20 @@
% standard macros for CWEB listings (in addition to plain.tex)
-% Version 3.70 --- July 2017
+% Version 4.2 --- February 2021
\ifx\renewenvironment\undefined\else\endinput\fi % LaTeX will use other macros
-\xdef\fmtversion{\fmtversion+CWEB3.70}
-\chardef\cwebversion=3 \chardef\cwebrevision=70
+\xdef\fmtversion{\fmtversion+CWEB4.2}
+\chardef\cwebversion=4 \chardef\cwebrevision=1
\newif\ifpdf
\ifx\pdf+\pdftrue\fi
% Uncomment the following line if you want PDF goodies to be the default
%\ifx\pdf-\else\pdftrue\fi
\def\pdflinkcolor{0 0 1} % the RGB values for hyperlink color
+\ifx\undefined\XeTeXrevision\else\pdftrue\fi % XeTeX produces PDF output
\newif\ifpdftex
\ifx\pdfoutput\undefined \pdftexfalse \else\ifnum\pdfoutput=0 \pdftexfalse
%\else \pdftextrue \pdfoutput=1 \input pdfcolor \let\setcolor\pdfsetcolor \fi\fi
\else \pdftextrue \pdfoutput=1 % changed in 3.69
\def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
- \def\Blue{\pdfliteral{0 0 1 rg 0 0 1 RG}}
+ \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
\fi\fi
\newif\ifacro \ifpdf\acrotrue\fi \ifpdftex\acrotrue\fi
@@ -281,12 +282,10 @@
\def\stsec{\rightskip=0pt % get out of C mode (cf. \B)
\sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50
\noindent{\let\*=\lapstar\bf\secstar.\quad}%
- \ifpdftex\smash{\raise\baselineskip\hbox to0pt{%
-% \let\*=\empty\pdfdest num \secstar fith}} % bad space in versions < 3.68
- \let\*=\empty\pdfdest num \secstar fith}}% changed in version 3.68
- \else\ifpdf\smash{\raise\baselineskip\hbox to0pt{%
- \let\*=\empty\special{%
- pdf: dest (\romannumeral\secstar) [ @thispage /FitH @ypos ]}}}\fi\fi}
+ \ifacro \smash{\raise\baselineskip\hbox to0pt{\let\*=\empty
+ \ifpdftex \pdfdest num \secstar fith%
+ \else \special{pdf: dest (\romannumeral\secstar)
+ [ @thispage /FitH @ypos ]}\fi}}\fi}
\let\startsection=\stsec
\def\defin#1{\global\advance\ind by 2 \1\&{#1 } } % begin `define' or `format'
\def\A{\note{See also section}} % xref for doubly defined section name
diff --git a/web/c_cpp/cweb/cwebman.tex b/web/c_cpp/cweb/cwebman.tex
index 2e4ec65ea5..df652232b7 100644
--- a/web/c_cpp/cweb/cwebman.tex
+++ b/web/c_cpp/cweb/cwebman.tex
@@ -36,7 +36,7 @@
\def\lheader{\mainfont\the\pageno\hfill\sc\runninghead\hfill}
\def\rheader{\hfill\sc\runninghead\hfill\mainfont\the\pageno}
-\def\runninghead{{\tentt CWEB} USER MANUAL (VERSION 3.64)}
+\def\runninghead{{\tentt CWEB} USER MANUAL (VERSION 4.2)}
% This verbatim mode assumes that ! marks are !! in the text being copied.
\def\verbatim{\begingroup
@@ -50,7 +50,7 @@
\null\vfill
\centerline{\titlefont The {\ttitlefont CWEB} System of
Structured Documentation}
-\vskip 18pt\centerline{(Version 3.64 --- February 2002)}
+\vskip 18pt\centerline{(Version 4.2 --- February 2021)}
\vskip 24pt
\centerline{\authorfont Donald E. Knuth and Silvio Levy}
\vfill
@@ -87,6 +87,10 @@ for their own personal use.
Internet page \.{http://www-cs-faculty.stanford.edu/\char`\~knuth/cweb.html}
contains current info about \.{CWEB} and related topics.
+\smallskip\noindent
+From there you can also reach the \.{CWEB} development page
+\.{https://github.com/ascherer/cweb} with the really current news.
+
\pageno=0 \titletrue\eject
\titletrue
@@ -103,7 +107,7 @@ adapted to \CEE/ by Silvio Levy. Since its creation in 1987, \.{CWEB}
has been revised and enhanced in various ways, by both Knuth and Levy.
We now believe that its evolution is near an end; however, bug
reports, suggestions and comments are still welcome, and
-should be sent to Levy (\.{levy@math.berkeley.edu}).
+should be sent to the \TeX-related mailing list \.{tex-k@tug.org}.
Readers who are familiar with Knuth's memo ``The \.{WEB} System of Structured
Documentation'' will be able
@@ -394,15 +398,15 @@ $$\hbox{ If \\{pa} is declared as `\&{int} ${}{*}\\{pa}$',
the assignment $\\{pa}\K{\AND}\|a[\T{0}]$ makes \\{pa}
point to the zeroth element of \|a.}$$
The \TEX/ text would look like this in your \.{CWEB} file:
-$$\lpile{\.{If |pa| is declared as `|int *pa|', the}\cr
-\.{assignment |pa=\&a[0]| makes |pa| point
-to the zeroth element of |a|.}\cr}$$
-And \.{CWEAVE} translates this into something you are glad you didn't have
-to type:
-$$\lpile{\.{If \\\\\{pa\} is declared as
- `\\\&\{int\} \$\{\}\{*\}\\\\\{pa\}\$',}\cr
-\.{the assignment \$\\\\\{pa\}\\K\{\\AND\}\\|a[\\T\{0\}]\$}\cr
-\.{makes \\\\\{pa\} point to the zeroth element of \\|a.}\cr}$$
+$$\lpile{\.{If |pa| is declared as `|int *pa|', the assignment}\cr
+\.{|pa=\&a[0]| makes |pa| point to the zeroth element of |a|.}\cr}$$
+And \.{CWEAVE} translates this into something
+you are glad you didn't have to type:
+$$\lpile{\.{If \\PB\{\\\\\{pa\}\} is declared as `\\PB\{\\\&\{int\}
+ \$\{\}\{*\}\\\\\{pa\}\$\}', the}\cr
+\.{assignment \\PB\{\$\\\\\{pa\}\\K\{\\AND\}\\|a[\\T\{0\}]\$\}
+ makes \\PB\{\\\\\{pa\}\} point}\cr
+\.{to the zeroth element of \\PB\{\\|a\}.}\cr}$$
Incidentally, the cross-reference index that \.{CWEAVE} would make, in
the presence of a comment like this, would include
the current section number as one of the index entries for \\{pa},
@@ -521,7 +525,7 @@ specifically below.
\@@ [LTMCrc] A double \.@ denotes the single character `\.@'. This is
the only control code that is legal everywhere.
Note that you must use this convention if you are giving an internet
-email address in a \.{CWEB} file (e.g., \.{levy@@math.berkeley.edu}).
+email address in a \.{CWEB} file (e.g., \.{tex-k@@tug.org}).
\subsec
Here are the codes that introduce the \TEX/ part of a section.
@@ -1007,7 +1011,7 @@ part of a \.{struct}, even though \CEE/ does allow this.
\section Running the programs.
The \UNIX/ command line for \.{CTANGLE} is
-$$\.{ctangle [options] web\_file[.w] [\{change\_file[.ch]|-\} [out\_file]]}$$
+$$\.{ctangle [options] webfile[.w] [\{changefile[.ch]|-\} [outfile[.c]]]}$$
and the same conventions apply to \.{CWEAVE}. If `\.-' or no change file is
specified, the change file is null. The extensions \.{.w} and \.{.ch}
are appended only if the given file names contain no dot. If the
@@ -1038,7 +1042,7 @@ by default.)
\option e Enclose \CEE/ material formatted by \.{CWEAVE} in
brackets \.{\\PB\{...\}}, so that special hooks can be used.
-(Off by default; has no effect on \.{CTANGLE}.)
+(On by default; has no effect on \.{CTANGLE}.)
\option f Force line breaks after each \CEE/ statement formatted
by \.{CWEAVE}. (On by default; \.{-f} saves paper but looks less \CEE/-like
@@ -1151,6 +1155,8 @@ for the macros that make this work.)
Alternatively, thanks to H\`an Th\^e\kern-.3em\raise.3ex\hbox{\'{}} Th\`anh
and Andreas Scherer, you can generate \.{cob.pdf} in one step by simply
saying `\.{pdftex}~\.{cob}'.
+A third way to create PDF output from \.{CWEB} input is to say
+`\.{xetex}~\.{cob}'.
A more elaborate system called \.{CTWILL}, which extends the usual cross
references of \.{CWEAVE} by preparing links from the uses of identifiers
@@ -1184,17 +1190,16 @@ appendices D, E, and~F, which exhibit the complete source code for
This appendix consists
of four listings. The first shows the \.{CWEB} input that
-generated sections 12--15 of the file \.{common.w}, which contains
+generated sections 27--31 of the file \.{common.w}, which contains
routines common to \.{CWEAVE} and \.{CTANGLE}.
Note that some of the lines are indented to show the program structure;
the indentation is ignored by \.{CWEAVE} and \.{CTANGLE}, but users find
that \.{CWEB} files are quite readable if they have some such indentation.
-The second and third listings
-show corresponding parts
-of the \CEE/ code output by \.{CTANGLE} and of
-the corresponding \TEX/ code output by \.{CWEAVE}, when run on \.{common.w}.
-The fourth listing shows how that output looks when printed out.
+The second and third listings show corresponding parts of
+the \CEE/ code output by \.{CTANGLE} and of
+the \TEX/ code output by \.{CWEAVE}, when run on \.{common.w}.
+The fourth listing shows how that output looks in print.
\vskip 6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
@@ -1204,16 +1209,19 @@ sets |change_buffer| in preparation for the next matching operation.
Since blank lines in the change file are not used for matching, we have
|(change_limit==change_buffer && !!changing)| if and only if
the change file is exhausted. This procedure is called only when
-|changing| is 1; hence error messages will be reported correctly.
+|changing| is |true|; hence error messages will be reported correctly.
+
+@<Predecl...@>=
+static void prime_the_change_buffer(void);@/
-@c
-void
-prime_the_change_buffer()
+@ @c
+static void
+prime_the_change_buffer(void)
{
change_limit=change_buffer; /* this value is used if the change file ends */
- @<Skip over comment lines in the change file; |return| if end of file@>;
- @<Skip to the next nonblank line; |return| if end of file@>;
- @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>;
+ @<Skip over comment lines in the change file; |return| if end of file@>@;
+ @<Skip to the next nonblank line; |return| if end of file@>@;
+ @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>@;
}
@ While looking for a line that begins with \.{@@x} in the change file, we
@@ -1221,12 +1229,12 @@ allow lines that begin with \.{@@}, as long as they don't begin with \.{@@y},
\.{@@z}, or \.{@@i} (which would probably mean that the change file is fouled up).
@<Skip over comment lines in the change file...@>=
-while(1) {
+while(true) {
change_line++;
if (!!input_ln(change_file)) return;
if (limit<buffer+2) continue;
if (buffer[0]!!='@@') continue;
- if (xisupper(buffer[1])) buffer[1]=tolower(buffer[1]);
+ if (xisupper(buffer[1])) buffer[1]=tolower((eight_bits)buffer[1]);
if (buffer[1]=='x') break;
if (buffer[1]=='y' || buffer[1]=='z' || buffer[1]=='i') {
loc=buffer+2;
@@ -1249,10 +1257,9 @@ do {
@ @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>=
{
- change_limit=change_buffer-buffer+limit;
- strncpy(change_buffer,buffer,limit-buffer+1);
+ change_limit=change_buffer+(ptrdiff_t)(limit-buffer);
+ strncpy(change_buffer,buffer,(size_t)(limit-buffer+1));
}
-
!endgroup
\endgroup
\vfill\eject
@@ -1260,28 +1267,28 @@ do {
\def\runninghead{APPENDIX A --- TRANSLATION BY {\tentt CTANGLE}}
Here's the portion of the \CEE/ code generated by \.{CTANGLE} that corresponds
-to the source on the preceding page. Notice that sections~13, 14 and~15
-have been tangled into section~12.
+to the source on the preceding page. Notice that sections~29, 30 and~31
+have been tangled into section~28.
\vskip6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
\verbatim
-/*:9*//*12:*/
-#line 247 "common.w"
+/*:24*//*28:*/
+#line 234 "common.w"
-void
-prime_the_change_buffer()
+static void
+prime_the_change_buffer(void)
{
change_limit= change_buffer;
-/*13:*/
-#line 261 "common.w"
+/*29:*/
+#line 248 "common.w"
-while(1){
+while(true){
change_line++;
if(!!input_ln(change_file))return;
if(limit<buffer+2)continue;
if(buffer[0]!!='@')continue;
-if(xisupper(buffer[1]))buffer[1]= tolower(buffer[1]);
+if(xisupper(buffer[1]))buffer[1]= tolower((eight_bits)buffer[1]);
if(buffer[1]=='x')break;
if(buffer[1]=='y'||buffer[1]=='z'||buffer[1]=='i'){
loc= buffer+2;
@@ -1290,11 +1297,11 @@ err_print("!! Missing @x in change file");
}
}
-/*:13*/
-#line 252 "common.w"
-;
-/*14:*/
-#line 278 "common.w"
+/*:29*/
+#line 239 "common.w"
+
+/*30:*/
+#line 265 "common.w"
do{
change_line++;
@@ -1305,23 +1312,23 @@ return;
}
}while(limit==buffer);
-/*:14*/
-#line 253 "common.w"
-;
-/*15:*/
-#line 288 "common.w"
+/*:30*/
+#line 240 "common.w"
+
+/*31:*/
+#line 275 "common.w"
{
-change_limit= change_buffer-buffer+limit;
-strncpy(change_buffer,buffer,limit-buffer+1);
+change_limit= change_buffer+(ptrdiff_t)(limit-buffer);
+strncpy(change_buffer,buffer,(size_t)(limit-buffer+1));
}
-/*:15*/
-#line 254 "common.w"
-;
+/*:31*/
+#line 241 "common.w"
+
}
-/*:12*//*16:*/
+/*:28*//*33:*/
!endgroup
\endgroup
\vfill\eject
@@ -1329,37 +1336,43 @@ strncpy(change_buffer,buffer,limit-buffer+1);
\def\runninghead{APPENDIX A --- TRANSLATION BY {\tentt CWEAVE}}
Here is the corresponding excerpt from \.{common.tex}.
+(Code for section 31 is omitted for space reasons.)
\vskip6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
\verbatim
-\M{12}Procedure \PB{\\{prime\_the\_change\_buffer}}
+\M{27}Procedure \PB{\\{prime\_the\_change\_buffer}}
sets \PB{\\{change\_buffer}} in preparation for the next matching operation.
Since blank lines in the change file are not used for matching, we have
\PB{$(\\{change\_limit}\E\\{change\_buffer}\W\R\\{changing})$} if and only if
the change file is exhausted. This procedure is called only when
-\PB{\\{changing}} is 1; hence error messages will be reported correctly.
-!vskip-.5!baselineskip
-\Y\B\&{void} \\{prime\_the\_change\_buffer}(\,)\1\1\2\2\6
+\PB{\\{changing}} is \PB{\\{true}}; hence error messages will be reported
+correctly.
+
+\Y\B\4\X7:Predeclaration of procedures\X${}\mathrel+\E{}$\6
+\&{static} \&{void} \\{prime\_the\_change\_buffer}(\&{void});\par
+\fi
+
+\M{28}\B\&{static} \&{void} \\{prime\_the\_change\_buffer}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
${}\\{change\_limit}\K\\{change\_buffer}{}$;\C{ this value is used if the
change file ends }\6
-\X13:Skip over comment lines in the change file; \PB{\&{return}} if end of file%
-\X;\6
-\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X;\6
-\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}} and %
-\PB{\\{change\_limit}}\X;\6
+\X29:Skip over comment lines in the change file; \PB{\&{return}} if end of file%
+\X\6
+\X30:Skip to the next nonblank line; \PB{\&{return}} if end of file\X\6
+\X31:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}} and %
+\PB{\\{change\_limit}}\X\6
\4${}\}{}$\2\par
\fi
-!vskip-.5!baselineskip
-\M{13}While looking for a line that begins with \.{@x} in the change file, we
+
+\M{29}While looking for a line that begins with \.{@x} in the change file, we
allow lines that begin with \.{@}, as long as they don't begin with \.{@y},
\.{@z}, or \.{@i} (which would probably mean that the change file is fouled
up).
-!vskip-.5!baselineskip
-\Y\B\4\X13:Skip over comment lines in the change file; \PB{\&{return}} if end
+
+\Y\B\4\X29:Skip over comment lines in the change file; \PB{\&{return}} if end
of file\X${}\E{}$\6
-\&{while} (\T{1})\5
+\&{while} (\\{true})\5
${}\{{}$\1\6
${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\R\\{input\_ln}(\\{change\_file})){}$\1\5
@@ -1369,7 +1382,7 @@ ${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\\{buffer}[\T{0}]\I\.{'@'}){}$\1\5
\&{continue};\2\6
\&{if} (\\{xisupper}(\\{buffer}[\T{1}]))\1\5
-${}\\{buffer}[\T{1}]\K\\{tolower}(\\{buffer}[\T{1}]);{}$\2\6
+${}\\{buffer}[\T{1}]\K\\{tolower}{}$((\&{eight\_bits}) \\{buffer}[\T{1}]);\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'x'}){}$\1\5
\&{break};\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'y'}\V\\{buffer}[\T{1}]\E\.{'z'}\V\\{buffer}[%
@@ -1379,11 +1392,11 @@ ${}\\{loc}\K\\{buffer}+\T{2};{}$\6
\\{err\_print}(\.{"!!\ Missing\ @x\ in\ cha}\)\.{nge\ file"});\6
\4${}\}{}$\2\6
\4${}\}{}$\2\par
-\U12.\fi
-!vskip-.5!baselineskip
-\M{14}Here we are looking at lines following the \.{@x}.
-!vskip-.5!baselineskip
-\Y\B\4\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X${}%
+\U28.\fi
+
+\M{30}Here we are looking at lines following the \.{@x}.
+
+\Y\B\4\X30:Skip to the next nonblank line; \PB{\&{return}} if end of file\X${}%
\E{}$\6
\&{do}\5
${}\{{}$\1\6
@@ -1395,16 +1408,7 @@ ${}\{{}$\1\6
\4${}\}{}$\2\6
\4${}\}{}$\2\5
\&{while} ${}(\\{limit}\E\\{buffer}){}$;\par
-\U12.\fi
-!vskip-.5!baselineskip
-\M{15}\B\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}}
-and \PB{\\{change\_limit}}\X${}\E{}$\6
-${}\{{}$\1\6
-${}\\{change\_limit}\K\\{change\_buffer}-\\{buffer}+\\{limit};{}$\6
-${}\\{strncpy}(\\{change\_buffer},\39\\{buffer},\39\\{limit}-\\{buffer}+%
-\T{1});{}$\6
-\4${}\}{}$\2\par
-\Us12\ET16.\fi
+\U28.\fi
!endgroup
\endgroup
\vfil\eject
@@ -1412,33 +1416,41 @@ ${}\\{strncpy}(\\{change\_buffer},\39\\{buffer},\39\\{limit}-\\{buffer}+%
\def\runninghead{APPENDIX A --- FINAL DOCUMENT}
And here's what the same excerpt looks like when typeset.
+(Can you spot the typographical nicety used in the \.{CWEB} code?)
+\let\K=\leftarrow
-\M{12}Procedure \PB{\\{prime\_the\_change\_buffer}}
+\M{27}Procedure \PB{\\{prime\_the\_change\_buffer}}
sets \PB{\\{change\_buffer}} in preparation for the next matching operation.
Since blank lines in the change file are not used for matching, we have
\PB{$(\\{change\_limit}\E\\{change\_buffer}\W\R\\{changing})$} if and only if
the change file is exhausted. This procedure is called only when
-\PB{\\{changing}} is 1; hence error messages will be reported correctly.
+\PB{\\{changing}} is \PB{\\{true}}; hence error messages will be reported
+correctly.
-\Y\B\&{void} \\{prime\_the\_change\_buffer}(\,)\1\1\2\2\6
+\Y\B\4\X7:Predeclaration of procedures\X${}\mathrel+\E{}$\6
+\&{static} \&{void} \\{prime\_the\_change\_buffer}(\&{void});\par
+\fi
+
+\M{28}\B\&{static} \&{void} \\{prime\_the\_change\_buffer}(\&{void})\1\1\2\2\6
${}\{{}$\1\6
${}\\{change\_limit}\K\\{change\_buffer}{}$;\C{ this value is used if the
change file ends }\6
-\X13:Skip over comment lines in the change file; \PB{\&{return}} if end of file%
-\X;\6
-\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X;\6
-\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}} and %
-\PB{\\{change\_limit}}\X;\6
+\X29:Skip over comment lines in the change file; \PB{\&{return}} if end of file%
+\X\6
+\X30:Skip to the next nonblank line; \PB{\&{return}} if end of file\X\6
+\X31:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}} and %
+\PB{\\{change\_limit}}\X\6
\4${}\}{}$\2\par
\fi
-\M{13}While looking for a line that begins with \.{@x} in the change file, we
+\M{29}While looking for a line that begins with \.{@x} in the change file, we
allow lines that begin with \.{@}, as long as they don't begin with \.{@y},
-\.{@z}, or \.{@i} (which would probably mean that the change file is fouled up).
+\.{@z}, or \.{@i} (which would probably mean that the change file is fouled
+up).
-\Y\B\4\X13:Skip over comment lines in the change file; \PB{\&{return}} if end
+\Y\B\4\X29:Skip over comment lines in the change file; \PB{\&{return}} if end
of file\X${}\E{}$\6
-\&{while} (\T{1})\5
+\&{while} (\\{true})\5
${}\{{}$\1\6
${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\R\\{input\_ln}(\\{change\_file})){}$\1\5
@@ -1448,7 +1460,7 @@ ${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\\{buffer}[\T{0}]\I\.{'@'}){}$\1\5
\&{continue};\2\6
\&{if} (\\{xisupper}(\\{buffer}[\T{1}]))\1\5
-${}\\{buffer}[\T{1}]\K\\{tolower}(\\{buffer}[\T{1}]);{}$\2\6
+${}\\{buffer}[\T{1}]\K\\{tolower}{}$((\&{eight\_bits}) \\{buffer}[\T{1}]);\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'x'}){}$\1\5
\&{break};\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'y'}\V\\{buffer}[\T{1}]\E\.{'z'}\V\\{buffer}[%
@@ -1458,11 +1470,11 @@ ${}\\{loc}\K\\{buffer}+\T{2};{}$\6
\\{err\_print}(\.{"!\ Missing\ @x\ in\ cha}\)\.{nge\ file"});\6
\4${}\}{}$\2\6
\4${}\}{}$\2\par
-\U12.\fi
+\U28.\fi
-\M{14}Here we are looking at lines following the \.{@x}.
+\M{30}Here we are looking at lines following the \.{@x}.
-\Y\B\4\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X${}%
+\Y\B\4\X30:Skip to the next nonblank line; \PB{\&{return}} if end of file\X${}%
\E{}$\6
\&{do}\5
${}\{{}$\1\6
@@ -1474,17 +1486,17 @@ ${}\{{}$\1\6
\4${}\}{}$\2\6
\4${}\}{}$\2\5
\&{while} ${}(\\{limit}\E\\{buffer}){}$;\par
-\U12.\fi
+\U28.\fi
-\M{15}\B\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}}
+\M{31}\B\X31:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}}
and \PB{\\{change\_limit}}\X${}\E{}$\6
${}\{{}$\1\6
-${}\\{change\_limit}\K\\{change\_buffer}-\\{buffer}+\\{limit};{}$\6
-${}\\{strncpy}(\\{change\_buffer},\39\\{buffer},\39\\{limit}-\\{buffer}+%
-\T{1});{}$\6
+${}\\{change\_limit}\K\\{change\_buffer}+(\&{ptrdiff\_t})(\\{limit}-%
+\\{buffer});{}$\6
+${}\\{strncpy}(\\{change\_buffer},\39\\{buffer},\39(\&{size\_t})(\\{limit}-%
+\\{buffer}+\T{1}));{}$\6
\4${}\}{}$\2\par
-\Us12\ET16.\fi
-
+\Us28\ET33.\fi
\vfil\eject\titletrue
\rightskip=0pt % get out of C mode (cf. \B)
\sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50
@@ -1579,7 +1591,7 @@ $$\lpile{\.{\\def\\topofcontents\{\\null\\vfill}\cr
\.{ { }\\titlefalse \% include headline on the contents page}\cr
\.{ { }\\def\\rheader\{\\mainfont The \{\\tt CWEAVE\}{ }processor\\hfil\}}\cr
\.{ { }\\centerline\{\\titlefont The \{\\ttitlefont CWEAVE\}{ }processor\}}\cr
- \.{ { }\\vskip 15pt \\centerline\{(Version 3.64)\}{ }\\vfill\}}\cr}$$
+ \.{ { }\\vskip 15pt \\centerline\{(Version 4.2)\}{ }\\vfill\}}\cr}$$
Redefining \.{\\rheader}, which is the headline for right-hand pages,
suffices in this case to put the desired information at the top of the
contents page.
@@ -1704,9 +1716,8 @@ with which one can say things like the following, anywhere in the \TeX\ parts
or the \CEE/ comments of a \.{CWEB} file:
$$\vbox{\halign{\.{#}\hfil\cr
You can send email to
- \\pdfURL\{the author\}\{mailto:andreas.scherer@@pobox.com\}\cr
-or visit \\pdfURL\{his home page\}\{http://www.pobox.com/%
- \\TILDE/scherer\}.\cr}}$$
+ \\pdfURL\{the author\}\{mailto:andreas\\UNDER/github@@freenet.de\}\cr
+or visit \\pdfURL\{his home page\}\{https://github.com/ascherer\}\cr}}$$
In a {\mc PDF} document, the first argument will appear in blue as
clickable text; the Acrobat reader, if correctly configured, will then
redirect those links to the user's browser and open either the
diff --git a/web/pwebmac/README.md b/web/pwebmac/README.md
index 5c3399b280..cfd345d978 100644
--- a/web/pwebmac/README.md
+++ b/web/pwebmac/README.md
@@ -3,8 +3,8 @@
The original [WEB](https://ctan.org/pkg/web) system by Donald Knuth has the
macros `webmac.tex` that produce DVI output only; for historic reasons, it
will never be modified (apart from catastrophic errors).
-Hàn Thế Thành has modified these macros in his `pdfwebmac.tex` for PDF output
-(only) with [pdfTeX](https://ctan.org/pkg/pdftex).
+Hàn Thế Thành has modified these macros in his (outdated?) `pdfwebmac.tex` for
+PDF output (only) with [pdfTeX](https://ctan.org/pkg/pdftex).
Jonathan Kew's [XeTeX](https://ctan.org/pkg/xetex) has similar macros
`xewebmac.tex` by Khaled Hosny that _modify_ `webmac.tex` for PDF output;
these macros can only be used with a specific “TeX engine” each.
@@ -29,4 +29,4 @@ clickable links and bookmarks (depending on your PDF viewer).
The `pwebmac` package is free software and may be used without constraints.
-This is version “4.5.7” of the `pwebmac` package — 2021-02-11, AS.
+This is version “4.6” of the `pwebmac` package — 2021-03-01, AS.
diff --git a/web/pwebmac/index.md b/web/pwebmac/index.md
index b7584641ce..e80680479c 100644
--- a/web/pwebmac/index.md
+++ b/web/pwebmac/index.md
@@ -1,6 +1,8 @@
---
title: C/WEB programs in “\TeX\ Live 2021”
colorlinks: true
+filecolor: blue
+urlcolor: blue
---
\raggedright
\vspace{-2\baselineskip}
diff --git a/web/pwebmac/makeall b/web/pwebmac/makeall
index b67a8af154..fbe95ae54d 100755
--- a/web/pwebmac/makeall
+++ b/web/pwebmac/makeall
@@ -235,6 +235,11 @@ FI
then $f $f # run TeX twice
else $TEX $f # run TeX twice
fi
+
+ # run TEX.WEB three times to fix table-of-contents
+ if [ tex = $f ]
+ then $TEX $f
+ fi
fi
# only XeTeX can process XETEX.WEB
@@ -353,6 +358,15 @@ then
$PAX "$OUTDIR/cweb.tar.gz" -s ,^,cweb/, \
cwebman.pdf common.pdf ctangle.pdf cweave.pdf ctwill.pdf
fi
+
+ # Notes to self:
+ # (1) Create a user-friendly central entrypoint with
+ # (a) pandoc index.md -o index.pdf
+ # (b) pandoc index.md -o index.tex;
+ # pandoc index.tex -s -o index.html;
+ # rm index.tex
+ # (2) Prepare a super-tarball from all the contents of these
+ # individual tarballs with 'pax -wzf knuth-lib.tar.gz'.
fi
exit 0
diff --git a/web/pwebmac/trapman.ch b/web/pwebmac/trapman.ch
new file mode 100644
index 0000000000..2467983cfe
--- /dev/null
+++ b/web/pwebmac/trapman.ch
@@ -0,0 +1,23 @@
+@x l.355
+\verbatim{trapin.log}
+@y
+\verbatim{mftrapin.log}
+@z
+
+@x l.365
+\verbatim{trap.log}
+@y
+\verbatim{mftrap.log}
+@z
+
+@x l.389
+\verbatim{trap.pl}
+@y
+\verbatim{mftrap.pl}
+@z
+
+@x l.398
+\verbatim{trap.fot}
+@y
+\verbatim{mftrap.fot}
+@z
diff --git a/web/pwebmac/webman.ch b/web/pwebmac/webman.ch
new file mode 100644
index 0000000000..af8b2e88ff
--- /dev/null
+++ b/web/pwebmac/webman.ch
@@ -0,0 +1,198 @@
+@x l.2
+\input webmac
+@y
+\input pwebmac
+\ifacro
+ \pdfpagewidth=\pagewidth \advance\pdfpagewidth by 2cm
+ \pdfpageheight=\pageheight \advance\pdfpageheight by 3cm
+ \ifpdftex \pdfhorigin=1cm \pdfvorigin=1cm
+ \else \advance\pdfpageheight by 1cm \global\pageshift=-1.54cm
+ \global\hoffset=-1.54cm \global\voffset=-1.54cm \fi
+\else\pageno=1\fi
+@z
+
+@x l.16
+\outer\def\section #1.{\penalty-50\vskip 12pt plus 3pt minus 3pt
+ \noindent{\bf #1.}\quad\ignorespaces}
+@y
+\newcount\destcount \destcount=1\relax
+
+\def\bkminfo{}
+\outer\def\section #1.{\penalty-50\vskip 12pt plus 3pt minus 3pt
+ \noindent\ifacro\vbox to 0pt{\kern-2.5ex\relax
+ \ifpdftex\pdfdest num \destcount fitbh\relax
+ \else\special{pdf: dest (\the\destcount) [ @thispage /FitBH @ypos ]}\fi
+ \def\.##1{##1}%
+ \ifx\bkminfo\empty\def\sectitle{#1}\else\def\sectitle{#1 (\bkminfo)}\fi
+ \ifpdftex\pdfoutline goto num \destcount {\sectitle}\relax
+ \else\special{pdf: outline 0 << /Title (\sectitle)
+ /A << /S /GoTo /D (\the\destcount) >> >>}\fi
+ \gdef\bkminfo{}%
+ \global\advance\destcount by 1\relax
+ \kern2.5ex\relax
+ }\fi{\bf #1.}\quad\ignorespaces}
+
+\def\appA{7}
+\def\appB{8}
+\def\appC{9}
+\def\appD{0}
+\def\appE{0}
+\def\appF{10}
+\def\appG{11}
+\def\appH{12}
+
+\def\Appendix#1{\leavevmode
+ \ifnum\csname app#1\endcsname>0 %
+ \ifacro\ifpdftex
+ \pdfstartlink attr{/Border[0 0 0]} goto num\csname app#1\endcsname\relax
+ \PDFlinkcolor\hbox{Appendix}~#1\Black
+ \pdfendlink
+ \else
+ \setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{\hbox{Appendix}~#1}%
+ \special{pdf: ec}}\special{pdf: ann width \thewidth height \theheight
+ depth \thedepth << /Type /Annot /Subtype /Link /Border [0 0 0]
+ /A << /S /GoTo /D (\csname app#1\endcsname) >> >>}\box0\relax
+ \fi\else Appendix~#1\fi
+ \else Appendix~#1\fi}
+@z
+
+@x
+program for \.{TANGLE}, in the appendix, gives precise details about this
+@y
+program for \.{TANGLE}, in \pdfURL{Appendix~E}{tangle.pdf},
+gives precise details about this
+@z
+
+@x l.626
+outputs of \.{WEAVE} and \.{TANGLE} (see Appendix~C\null). Meta-comments
+@y
+outputs of \.{WEAVE} (see \Appendix B\null) and \.{TANGLE}
+(see \Appendix C\null). Meta-comments
+@z
+
+@x l.893
+examples of ``real'' programs. Appendix~A shows the \.{WEB} input that
+generated modules 55--59 of the \.{WEAVE} program; Appendix~B shows the
+corresponding \TeX\ code output by \.{WEAVE}; and Appendix~C shows excerpts
+@y
+examples of ``real'' programs. \Appendix A shows the \.{WEB} input that
+generated modules 55--59 of the \.{WEAVE} program; \Appendix B shows the
+corresponding \TeX\ code output by \.{WEAVE}; and \Appendix C shows excerpts
+@z
+
+@x l.900
+report, in Appendices D and~E. The reader should first compare Appendix~A
+to the corresponding portion of Appendix~D; then the same material should
+be compared to Appendices B and~C. Finally, if time permits, the reader may
+enjoy studying the complete programs in Appendices D and~E, since \.{WEAVE}
+@y
+report, in Appendices \pdfURL{D}{weave.pdf} and~\pdfURL{E}{tangle.pdf}.
+The reader should first compare \Appendix A to the corresponding portion of
+\pdfURL{Appendix~D}{weave.pdf}; then the same material should be compared to
+\Appendix B and \Appendix C. Finally, if time permits, the reader may enjoy
+studying the complete programs in Appendices \pdfURL{D}{weave.pdf}
+and~\pdfURL{E}{tangle.pdf}, since \.{WEAVE}
+@z
+
+@x l.908
+Finally, Appendix F is the `\.{webmac}' file that sets \TeX\ up to accept
+the output of \.{WEAVE}; Appendix~G discusses how to use some of its macros
+to vary the output formats; and Appendix~H discusses what needs to be done
+@y
+Finally, \Appendix F is the `\.{webmac}' file that sets \TeX\ up to accept
+the output of \.{WEAVE}; \Appendix G discusses how to use some of its macros
+to vary the output formats; and \Appendix H discusses what needs to be done
+@z
+
+@x l.913
+The programs in Appendices D and E will optionally keep statistics on
+@y
+The programs in Appendices \pdfURL{D}{weave.pdf} and \pdfURL{E}{tangle.pdf}
+will optionally keep statistics on
+@z
+
+@x l.989
+\section Appendix A.
+This excerpt from \.{WEAVE.WEB} produced modules 55--59 in Appendix~D.
+@y
+\def\bkminfo{WEB file format}
+\section Appendix A.
+This excerpt from \.{WEAVE.WEB} produced modules 55--59 in
+\pdfURL{Appendix~D}{weave.pdf}.
+@z
+
+@x l.1061
+\section Appendix B.
+This excerpt from \.{WEAVE.TEX} corresponds to Appendix A.
+@y
+\def\bkminfo{Translations by WEAVE}
+\section Appendix B.
+This excerpt from \.{WEAVE.TEX} corresponds to \Appendix A.
+@z
+
+@x l.1143
+\section Appendix C.
+@y
+\def\bkminfo{Translation by TANGLE}
+\section Appendix C.
+@z
+
+@x l.1425
+in small caps. For example, Appendix~D was produced after saying
+@y
+in small caps. For example, \pdfURL{Appendix~D}{weave.pdf} was produced
+after saying
+@z
+
+@x l.1468
+\.{\\pageno=\\contentspagenumber} \.{\\advance\\pageno by 1}'. (Appendix~D
+@y
+\.{\\pageno=\\contentspagenumber} \.{\\advance\\pageno by 1}'.
+(\pdfURL{Appendix~D}{weave.pdf}
+@z
+
+@x l.1479
+For example, Appendix~D was produced with the following definitions:
+@y
+For example, \pdfURL{Appendix~D}{weave.pdf} was produced with the following
+definitions:
+@z
+
+@x l.1491
+for every starred module. For example, when Appendix~D was being generated,
+@y
+for every starred module. For example, when \pdfURL{Appendix~D}{weave.pdf}
+was being generated,
+@z
+
+@x l.1583
+dependencies'' in the index of Appendix~E above, and figure out what changes
+@y
+dependencies'' in the index of \pdfURL{Appendix~E}{tangle.pdf} above,
+and figure out what changes
+@z
+
+@x l.1609
+the index to Appendix~D.
+@y
+the index to \pdfURL{Appendix~D}{weave.pdf}.
+@z
+
+@x l.1616
+Appendix~E. This listing will incorporate your changes.
+@y
+\pdfURL{Appendix~E}{tangle.pdf}. This listing will incorporate your changes.
+@z
+
+@x l.1620
+Appendix~D that incorporates your changes.
+@y
+\pdfURL{Appendix~D}{weave.pdf} that incorporates your changes.
+@z
+
+@x l.1666
+computer by following Appendices D and E. Then you have to simulate the
+@y
+computer by following Appendices \pdfURL{D}{weave.pdf}
+and~\pdfURL{E}{tangle.pdf}. Then you have to simulate the
+@z