summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-05-02 03:02:55 +0000
committerNorbert Preining <norbert@preining.info>2024-05-02 03:02:55 +0000
commit68c5442089b7c2e61ee14fc3efed490e291a244a (patch)
tree91d0e68d495b53cb52bb60a3e234da061741067d
parent6ac3dbed4b71022bd6bb0cc25e8fc3df81198498 (diff)
CTAN sync 202405020302
-rw-r--r--FILES.byname551
-rw-r--r--FILES.byname.gzbin2648924 -> 2648835 bytes
-rw-r--r--FILES.last07days382
-rw-r--r--biblio/ctan-bibdata/ctan.bib35
-rw-r--r--fonts/baskervaldx/README5
-rw-r--r--fonts/baskervaldx/opentype/Baskervaldx-Bol.otfbin66300 -> 66716 bytes
-rw-r--r--fonts/baskervaldx/opentype/Baskervaldx-BolIta.otfbin64636 -> 65008 bytes
-rw-r--r--fonts/baskervaldx/opentype/Baskervaldx-Ita.otfbin61752 -> 62124 bytes
-rw-r--r--fonts/baskervaldx/opentype/Baskervaldx-Reg.otfbin63260 -> 63596 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx32
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin640970 -> 640970 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex4
-rw-r--r--macros/latex/contrib/mathgreeks/README.md30
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.dtx1309
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.ins56
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.pdfbin0 -> 1650679 bytes
-rw-r--r--macros/latex/contrib/osda/README.md4
-rw-r--r--macros/latex/contrib/osda/example.pngbin162079 -> 186840 bytes
-rw-r--r--macros/latex/contrib/osda/osda.dtx111
-rw-r--r--macros/latex/contrib/osda/osda.ins4
-rw-r--r--macros/latex/contrib/osda/osda.pdfbin192843 -> 219701 bytes
-rw-r--r--macros/luatex/generic/luamplib/Makefile2
-rw-r--r--macros/luatex/generic/luamplib/NEWS53
-rw-r--r--macros/luatex/generic/luamplib/luamplib.dtx482
-rw-r--r--macros/luatex/generic/luamplib/luamplib.pdfbin170094 -> 175518 bytes
-rw-r--r--macros/luatex/generic/luamplib/test-luamplib-latex.tex4
-rw-r--r--macros/luatex/generic/luamplib/test-luamplib-plain.tex79
-rw-r--r--support/texlab/CHANGELOG.md36
-rw-r--r--support/texlab/Cargo.lock247
-rw-r--r--support/texlab/Cargo.toml2
-rw-r--r--support/texlab/README.md10
-rw-r--r--support/texlab/crates/base-db/Cargo.toml6
-rw-r--r--support/texlab/crates/base-db/src/deps.rs2
-rw-r--r--support/texlab/crates/base-db/src/deps/discover.rs4
-rw-r--r--support/texlab/crates/base-db/src/deps/graph.rs8
-rw-r--r--support/texlab/crates/base-db/src/deps/root.rs40
-rw-r--r--support/texlab/crates/base-db/src/document.rs7
-rw-r--r--support/texlab/crates/base-db/src/semantics.rs9
-rw-r--r--support/texlab/crates/base-db/src/semantics/tex.rs29
-rw-r--r--support/texlab/crates/base-db/src/util.rs2
-rw-r--r--support/texlab/crates/base-db/src/util/expand.rs31
-rw-r--r--support/texlab/crates/base-db/src/workspace.rs20
-rw-r--r--support/texlab/crates/bibfmt/Cargo.toml2
-rw-r--r--support/texlab/crates/bibtex-utils/Cargo.toml6
-rw-r--r--support/texlab/crates/citeproc/Cargo.toml6
-rw-r--r--support/texlab/crates/commands/Cargo.toml10
-rw-r--r--support/texlab/crates/completion-data/Cargo.toml6
-rw-r--r--support/texlab/crates/completion/Cargo.toml4
-rw-r--r--support/texlab/crates/completion/src/providers/include.rs13
-rw-r--r--support/texlab/crates/completion/src/tests.rs46
-rw-r--r--support/texlab/crates/definition/Cargo.toml2
-rw-r--r--support/texlab/crates/definition/src/command.rs28
-rw-r--r--support/texlab/crates/definition/src/tests.rs16
-rw-r--r--support/texlab/crates/diagnostics/Cargo.toml8
-rw-r--r--support/texlab/crates/diagnostics/src/citations.rs2
-rw-r--r--support/texlab/crates/diagnostics/src/manager.rs14
-rw-r--r--support/texlab/crates/distro/Cargo.toml2
-rw-r--r--support/texlab/crates/folding/Cargo.toml2
-rw-r--r--support/texlab/crates/highlights/Cargo.toml2
-rw-r--r--support/texlab/crates/hover/Cargo.toml2
-rw-r--r--support/texlab/crates/inlay-hints/Cargo.toml2
-rw-r--r--support/texlab/crates/ipc/Cargo.toml21
-rw-r--r--support/texlab/crates/ipc/src/lib.rs54
-rw-r--r--support/texlab/crates/links/Cargo.toml2
-rw-r--r--support/texlab/crates/parser/Cargo.toml9
-rw-r--r--support/texlab/crates/parser/src/bibtex.rs4
-rw-r--r--support/texlab/crates/parser/src/config.rs9
-rw-r--r--support/texlab/crates/parser/src/latex.rs22
-rw-r--r--support/texlab/crates/parser/src/latex/lexer/commands.rs31
-rw-r--r--support/texlab/crates/parser/src/latex/lexer/types.rs3
-rw-r--r--support/texlab/crates/parser/src/latex/tests.rs251
-rw-r--r--support/texlab/crates/parser/src/latexmkrc.rs185
-rw-r--r--support/texlab/crates/references/Cargo.toml1
-rw-r--r--support/texlab/crates/references/src/command.rs52
-rw-r--r--support/texlab/crates/references/src/lib.rs2
-rw-r--r--support/texlab/crates/references/src/tests.rs31
-rw-r--r--support/texlab/crates/symbols/Cargo.toml8
-rw-r--r--support/texlab/crates/syntax/Cargo.toml2
-rw-r--r--support/texlab/crates/syntax/src/latex/cst.rs35
-rw-r--r--support/texlab/crates/syntax/src/latex/kind.rs3
-rw-r--r--support/texlab/crates/texlab/Cargo.toml13
-rw-r--r--support/texlab/crates/texlab/src/main.rs67
-rw-r--r--support/texlab/crates/texlab/src/server.rs102
-rw-r--r--support/texlab/crates/texlab/src/server/options.rs136
-rw-r--r--support/texlab/crates/texlab/src/util.rs2
-rw-r--r--support/texlab/crates/texlab/src/util/client_flags.rs3
-rw-r--r--support/texlab/crates/texlab/src/util/from_proto.rs150
-rw-r--r--support/texlab/texlab.116
-rw-r--r--support/texlab/texlab.pdfbin26268 -> 26307 bytes
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl3
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb135
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc16
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2567944 -> 2566056 bytes
-rw-r--r--timestamp2
96 files changed, 3999 insertions, 1144 deletions
diff --git a/FILES.byname b/FILES.byname
index 02441ad1a3..eb7c227528 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2076,12 +2076,12 @@
2024/04/21 | 1837 | biblio/citation-style-language/README.md
2024/04/21 | 12878 | biblio/citation-style-language/vancouver.csl
2024/04/21 | 4553350 | biblio/citation-style-language.zip
-2024/04/30 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/05/01 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2024/04/30 | 2863840 | biblio/ctan-bibdata/ctan.bib
-2024/04/30 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/05/01 | 2863845 | biblio/ctan-bibdata/ctan.bib
+2024/05/01 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2024/04/30 | 4120725 | biblio/ctan-bibdata.zip
+2024/05/01 | 4120737 | biblio/ctan-bibdata.zip
2023/02/23 | 3126 | biblio/pbibtex/pbibtex-base/cpp.awk
2023/02/23 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2023/02/23 | 22362 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -5443,7 +5443,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
-2024/04/30 | 97090 | FILES.last07days
+2024/05/01 | 106214 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -13906,11 +13906,11 @@
2020/12/05 | 3020 | fonts/baskervaldx/enc/zbv_zey2cz.enc
2020/12/05 | 3238 | fonts/baskervaldx/enc/zbv_zkqdv4.enc
2024/01/01 | 21932 | fonts/baskervaldx/map/Baskervaldx.map
-2020/11/06 | 64636 | fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf
-2020/11/06 | 66300 | fonts/baskervaldx/opentype/Baskervaldx-Bol.otf
-2020/11/06 | 61752 | fonts/baskervaldx/opentype/Baskervaldx-Ita.otf
-2020/11/06 | 63260 | fonts/baskervaldx/opentype/Baskervaldx-Reg.otf
-2024/01/01 | 3391 | fonts/baskervaldx/README
+2024/05/01 | 65008 | fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf
+2024/05/01 | 66716 | fonts/baskervaldx/opentype/Baskervaldx-Bol.otf
+2024/05/01 | 62124 | fonts/baskervaldx/opentype/Baskervaldx-Ita.otf
+2024/05/01 | 63596 | fonts/baskervaldx/opentype/Baskervaldx-Reg.otf
+2024/05/01 | 3479 | fonts/baskervaldx/README
2020/11/06 | 196 | fonts/baskervaldx/tex/baskervaldx.fontspec
2020/11/08 | 4430 | fonts/baskervaldx/tex/Baskervaldx.sty
2014/03/31 | 3303 | fonts/baskervaldx/tex/LY1Baskervaldx-LF.fd
@@ -14372,7 +14372,7 @@
2020/11/06 | 544 | fonts/baskervaldx/vf/Baskervaldx-Reg-tosf-ts1.vf
2014/11/26 | 1312 | fonts/baskervaldx/vf/zbvbmi.vf
2014/11/26 | 1300 | fonts/baskervaldx/vf/zbvmi.vf
-2024/01/01 | 2222183 | fonts/baskervaldx.zip
+2024/05/01 | 2223006 | fonts/baskervaldx.zip
2019/05/14 | 179065 | fonts/baskervillef/doc/baskervillef-doc.pdf
2017/10/25 | 10892 | fonts/baskervillef/doc/baskervillef-doc.tex
2016/11/18 | 2766 | fonts/baskervillef/doc/FONTLOG.txt
@@ -207029,7 +207029,7 @@
2016/09/02 | 108688 | install/macros/luatex/generic/cstypo.tds.zip
2015/10/01 | 154538 | install/macros/luatex/generic/ctablestack.tds.zip
2023/08/20 | 288576 | install/macros/luatex/generic/lualibs.tds.zip
-2024/04/25 | 227049 | install/macros/luatex/generic/luamplib.tds.zip
+2024/05/01 | 234962 | install/macros/luatex/generic/luamplib.tds.zip
2024/02/28 | 1996110 | install/macros/luatex/generic/luaotfload.tds.zip
2015/10/04 | 277014 | install/macros/luatex/generic/luatexbase.tds.zip
2024/03/11 | 1408589 | install/macros/luatex/generic/lua-widow-control.tds.zip
@@ -232522,12 +232522,12 @@
2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt
2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README
2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip
-2024/04/28 | 81999 | macros/latex/contrib/easybook/easybook.dtx
+2024/05/01 | 82187 | macros/latex/contrib/easybook/easybook.dtx
2024/01/04 | 2081 | macros/latex/contrib/easybook/easybook.ins
-2024/04/28 | 640970 | macros/latex/contrib/easybook/easybook.pdf
-2024/04/28 | 102253 | macros/latex/contrib/easybook/easybook.tex
+2024/05/01 | 640970 | macros/latex/contrib/easybook/easybook.pdf
+2024/05/01 | 102253 | macros/latex/contrib/easybook/easybook.tex
2024/01/03 | 801 | macros/latex/contrib/easybook/README.md
-2024/04/29 | 688576 | macros/latex/contrib/easybook.zip
+2024/05/01 | 688606 | macros/latex/contrib/easybook.zip
2009/06/17 | 82589 | macros/latex/contrib/easy/doc/docbib.pdf
2009/06/17 | 78378 | macros/latex/contrib/easy/doc/docbmat.pdf
2009/06/17 | 99132 | macros/latex/contrib/easy/doc/doceqn.pdf
@@ -242323,6 +242323,11 @@
2023/09/11 | 118518 | macros/latex/contrib/mathfont/mathfont_user_guide.pdf
2023/09/11 | 5407 | macros/latex/contrib/mathfont/README.txt
2023/09/11 | 967104 | macros/latex/contrib/mathfont.zip
+2024/04/30 | 48008 | macros/latex/contrib/mathgreeks/mathgreeks.dtx
+2024/04/26 | 2054 | macros/latex/contrib/mathgreeks/mathgreeks.ins
+2024/04/30 | 1650679 | macros/latex/contrib/mathgreeks/mathgreeks.pdf
+2024/04/30 | 973 | macros/latex/contrib/mathgreeks/README.md
+2024/05/01 | 1647966 | macros/latex/contrib/mathgreeks.zip
2016/02/22 | 17992 | macros/latex/contrib/mathpartir/COPYING
2016/02/24 | 38822 | macros/latex/contrib/mathpartir/mathpartir.dtx
2016/02/22 | 2555 | macros/latex/contrib/mathpartir/mathpartir.ins
@@ -244958,12 +244963,12 @@
2002/03/14 | 24656 | macros/latex/contrib/osa/optics_letters/sample.eps
2004/08/25 | 630 | macros/latex/contrib/osa/README
2005/07/25 | 557508 | macros/latex/contrib/osa.zip
-2023/04/04 | 162079 | macros/latex/contrib/osda/example.png
-2023/04/04 | 27773 | macros/latex/contrib/osda/osda.dtx
-2023/04/04 | 2634 | macros/latex/contrib/osda/osda.ins
-2023/04/04 | 192843 | macros/latex/contrib/osda/osda.pdf
-2023/04/04 | 2819 | macros/latex/contrib/osda/README.md
-2023/04/05 | 344168 | macros/latex/contrib/osda.zip
+2024/05/01 | 186840 | macros/latex/contrib/osda/example.png
+2024/05/01 | 30737 | macros/latex/contrib/osda/osda.dtx
+2024/05/01 | 2644 | macros/latex/contrib/osda/osda.ins
+2024/05/01 | 219701 | macros/latex/contrib/osda/osda.pdf
+2024/05/01 | 2824 | macros/latex/contrib/osda/README.md
+2024/05/01 | 393694 | macros/latex/contrib/osda.zip
2022/11/22 | 17926 | macros/latex/contrib/oststud/hsrstud-classes.dtx
2023/05/25 | 127670 | macros/latex/contrib/oststud/hsrstud-classes.pdf
2022/11/22 | 14749 | macros/latex/contrib/oststud/hsrstud.dtx
@@ -258623,14 +258628,14 @@
2023/08/20 | 3334 | macros/luatex/generic/lualibs/NEWS
2023/08/20 | 4823 | macros/luatex/generic/lualibs/README.md
2023/08/20 | 282788 | macros/luatex/generic/lualibs.zip
-2024/04/25 | 111628 | macros/luatex/generic/luamplib/luamplib.dtx
-2024/04/25 | 170094 | macros/luatex/generic/luamplib/luamplib.pdf
-2024/04/25 | 2790 | macros/luatex/generic/luamplib/Makefile
-2024/04/25 | 13519 | macros/luatex/generic/luamplib/NEWS
-2024/04/25 | 2058 | macros/luatex/generic/luamplib/README
-2024/04/25 | 6474 | macros/luatex/generic/luamplib/test-luamplib-latex.tex
-2024/04/25 | 3896 | macros/luatex/generic/luamplib/test-luamplib-plain.tex
-2024/04/25 | 209327 | macros/luatex/generic/luamplib.zip
+2024/05/01 | 117568 | macros/luatex/generic/luamplib/luamplib.dtx
+2024/05/01 | 175518 | macros/luatex/generic/luamplib/luamplib.pdf
+2024/05/01 | 2836 | macros/luatex/generic/luamplib/Makefile
+2024/05/01 | 15071 | macros/luatex/generic/luamplib/NEWS
+2024/05/01 | 2058 | macros/luatex/generic/luamplib/README
+2024/05/01 | 6645 | macros/luatex/generic/luamplib/test-luamplib-latex.tex
+2024/05/01 | 6038 | macros/luatex/generic/luamplib/test-luamplib-plain.tex
+2024/05/01 | 216767 | macros/luatex/generic/luamplib.zip
2024/02/28 | 18714 | macros/luatex/generic/luaotfload/COPYING
2024/02/28 | 40007 | macros/luatex/generic/luaotfload/filegraph.pdf
2024/02/28 | 8597 | macros/luatex/generic/luaotfload/filegraph.tex
@@ -300926,217 +300931,221 @@
1994/01/18 | 7272 | support/tex-it/texitrc.unx
1994/01/18 | 25068 | support/tex-it/texit.tex
2006/03/12 | 50172 | support/tex-it.zip
-2024/03/27 | 45571 | support/texlab/Cargo.lock
-2024/03/27 | 347 | support/texlab/Cargo.toml
-2024/03/27 | 36161 | support/texlab/CHANGELOG.md
-2024/03/27 | 181 | support/texlab/CONTRIBUTING.md
-2024/03/27 | 555 | support/texlab/crates/base-db/Cargo.toml
-2024/03/27 | 4387 | support/texlab/crates/base-db/src/config.rs
-2024/03/27 | 58486 | support/texlab/crates/base-db/src/data.rs
-2024/03/27 | 3453 | support/texlab/crates/base-db/src/deps/discover.rs
-2024/03/27 | 7392 | support/texlab/crates/base-db/src/deps/graph.rs
-2024/03/27 | 1077 | support/texlab/crates/base-db/src/deps/project.rs
-2024/03/27 | 4791 | support/texlab/crates/base-db/src/deps/root.rs
-2024/03/27 | 209 | support/texlab/crates/base-db/src/deps.rs
-2024/03/27 | 6222 | support/texlab/crates/base-db/src/document.rs
-2024/03/27 | 584 | support/texlab/crates/base-db/src/lib.rs
-2024/03/27 | 1266 | support/texlab/crates/base-db/src/semantics/auxiliary.rs
-2024/03/27 | 2781 | support/texlab/crates/base-db/src/semantics/bib.rs
-2024/03/27 | 1112 | support/texlab/crates/base-db/src/semantics.rs
-2024/03/27 | 11450 | support/texlab/crates/base-db/src/semantics/tex.rs
-2024/03/27 | 5910 | support/texlab/crates/base-db/src/util/label.rs
-2024/03/27 | 5576 | support/texlab/crates/base-db/src/util/queries.rs
-2024/03/27 | 445 | support/texlab/crates/base-db/src/util/regex_filter.rs
-2024/03/27 | 176 | support/texlab/crates/base-db/src/util.rs
-2024/03/27 | 4916 | support/texlab/crates/base-db/src/workspace.rs
-2024/03/27 | 352 | support/texlab/crates/bibfmt/Cargo.toml
-2024/03/27 | 6870 | support/texlab/crates/bibfmt/src/lib.rs
-2024/03/27 | 3486 | support/texlab/crates/bibfmt/src/tests.rs
-2024/03/27 | 492 | support/texlab/crates/bibtex-utils/Cargo.toml
-2024/03/27 | 2125 | support/texlab/crates/bibtex-utils/src/field/author.rs
-2024/03/27 | 2716 | support/texlab/crates/bibtex-utils/src/field/date.rs
-2024/03/27 | 1677 | support/texlab/crates/bibtex-utils/src/field/number.rs
-2024/03/27 | 196 | support/texlab/crates/bibtex-utils/src/field.rs
-2024/03/27 | 8723 | support/texlab/crates/bibtex-utils/src/field/text.rs
-2024/03/27 | 15 | support/texlab/crates/bibtex-utils/src/lib.rs
-2024/03/27 | 522 | support/texlab/crates/citeproc/Cargo.toml
-2024/03/27 | 22284 | support/texlab/crates/citeproc/src/driver.rs
-2024/03/27 | 5274 | support/texlab/crates/citeproc/src/entry.rs
-2024/03/27 | 949 | support/texlab/crates/citeproc/src/lib.rs
-2024/03/27 | 1760 | support/texlab/crates/citeproc/src/output.rs
-2024/03/27 | 15776 | support/texlab/crates/citeproc/src/tests.rs
-2024/03/27 | 559 | support/texlab/crates/commands/Cargo.toml
-2024/03/27 | 3926 | support/texlab/crates/commands/src/build.rs
-2024/03/27 | 987 | support/texlab/crates/commands/src/change_env.rs
-2024/03/27 | 1739 | support/texlab/crates/commands/src/clean.rs
-2024/03/27 | 1668 | support/texlab/crates/commands/src/dep_graph.rs
-2024/03/27 | 3093 | support/texlab/crates/commands/src/find_envs.rs
-2024/03/27 | 3939 | support/texlab/crates/commands/src/fwd_search.rs
-2024/03/27 | 389 | support/texlab/crates/commands/src/lib.rs
-2024/03/27 | 1583 | support/texlab/crates/commands/src/placeholders.rs
-2024/03/27 | 1033 | support/texlab/crates/completion/benches/bench_main.rs
-2024/03/27 | 691 | support/texlab/crates/completion/Cargo.toml
-2024/03/27 | 356 | support/texlab/crates/completion-data/Cargo.toml
-2024/03/27 | 6970534 | support/texlab/crates/completion-data/data/completion.json.gz
-2024/03/27 | 3265 | support/texlab/crates/completion-data/src/lib.rs
-2024/03/27 | 6588 | support/texlab/crates/completion/src/lib.rs
-2024/03/27 | 2493 | support/texlab/crates/completion/src/providers/argument.rs
-2024/03/27 | 2276 | support/texlab/crates/completion/src/providers/citations.rs
-2024/03/27 | 1553 | support/texlab/crates/completion/src/providers/color_model.rs
-2024/03/27 | 2107 | support/texlab/crates/completion/src/providers/color.rs
-2024/03/27 | 4824 | support/texlab/crates/completion/src/providers/command.rs
-2024/03/27 | 1118 | support/texlab/crates/completion/src/providers/entry_type.rs
-2024/03/27 | 4297 | support/texlab/crates/completion/src/providers/environment.rs
-2024/03/27 | 2369 | support/texlab/crates/completion/src/providers/field.rs
-2024/03/27 | 2612 | support/texlab/crates/completion/src/providers/glossary.rs
-2024/03/27 | 2481 | support/texlab/crates/completion/src/providers/import.rs
-2024/03/27 | 4828 | support/texlab/crates/completion/src/providers/include.rs
-2024/03/27 | 1636 | support/texlab/crates/completion/src/providers/label_def.rs
-2024/03/27 | 3511 | support/texlab/crates/completion/src/providers/label_ref.rs
-2024/03/27 | 779 | support/texlab/crates/completion/src/providers.rs
-2024/03/27 | 3301 | support/texlab/crates/completion/src/providers/tikz_library.rs
-2024/03/27 | 44449 | support/texlab/crates/completion/src/tests.rs
-2024/03/27 | 1459 | support/texlab/crates/completion/src/util/builder.rs
-2024/03/27 | 1025 | support/texlab/crates/completion/src/util/matchers.rs
-2024/03/27 | 2320 | support/texlab/crates/completion/src/util/patterns.rs
-2024/03/27 | 967 | support/texlab/crates/completion/src/util.rs
-2024/03/27 | 378 | support/texlab/crates/definition/Cargo.toml
-2024/03/27 | 880 | support/texlab/crates/definition/src/citation.rs
-2024/03/27 | 1384 | support/texlab/crates/definition/src/command.rs
-2024/03/27 | 1237 | support/texlab/crates/definition/src/include.rs
-2024/03/27 | 1175 | support/texlab/crates/definition/src/label.rs
-2024/03/27 | 1125 | support/texlab/crates/definition/src/lib.rs
-2024/03/27 | 1077 | support/texlab/crates/definition/src/string_ref.rs
-2024/03/27 | 2601 | support/texlab/crates/definition/src/tests.rs
-2024/03/27 | 576 | support/texlab/crates/diagnostics/Cargo.toml
-2024/03/27 | 2209 | support/texlab/crates/diagnostics/src/build_log.rs
-2024/03/27 | 3883 | support/texlab/crates/diagnostics/src/chktex.rs
-2024/03/27 | 2476 | support/texlab/crates/diagnostics/src/citations.rs
-2024/03/27 | 2652 | support/texlab/crates/diagnostics/src/grammar/bib.rs
-2024/03/27 | 26 | support/texlab/crates/diagnostics/src/grammar.rs
-2024/03/27 | 3636 | support/texlab/crates/diagnostics/src/grammar/tex.rs
-2024/03/27 | 2504 | support/texlab/crates/diagnostics/src/labels.rs
-2024/03/27 | 165 | support/texlab/crates/diagnostics/src/lib.rs
-2024/03/27 | 3586 | support/texlab/crates/diagnostics/src/manager.rs
-2024/03/27 | 5801 | support/texlab/crates/diagnostics/src/tests.rs
-2024/03/27 | 2364 | support/texlab/crates/diagnostics/src/types.rs
-2024/03/27 | 227 | support/texlab/crates/distro/Cargo.toml
-2024/03/27 | 2075 | support/texlab/crates/distro/src/file_name_db.rs
-2024/03/27 | 710 | support/texlab/crates/distro/src/kpsewhich.rs
-2024/03/27 | 1287 | support/texlab/crates/distro/src/language.rs
-2024/03/27 | 2543 | support/texlab/crates/distro/src/lib.rs
-2024/03/27 | 2467 | support/texlab/crates/distro/src/miktex.rs
-2024/03/27 | 820 | support/texlab/crates/distro/src/texlive.rs
-2024/03/27 | 355 | support/texlab/crates/folding/Cargo.toml
-2024/03/27 | 3225 | support/texlab/crates/folding/src/lib.rs
-2024/03/27 | 1698 | support/texlab/crates/folding/src/tests.rs
-2024/03/27 | 326 | support/texlab/crates/highlights/Cargo.toml
-2024/03/27 | 806 | support/texlab/crates/highlights/src/label.rs
-2024/03/27 | 613 | support/texlab/crates/highlights/src/lib.rs
-2024/03/27 | 901 | support/texlab/crates/highlights/src/tests.rs
-2024/03/27 | 483 | support/texlab/crates/hover/Cargo.toml
-2024/03/27 | 1261 | support/texlab/crates/hover/src/citation.rs
-2024/03/27 | 541 | support/texlab/crates/hover/src/entry_type.rs
-2024/03/27 | 617 | support/texlab/crates/hover/src/field_type.rs
-2024/03/27 | 850 | support/texlab/crates/hover/src/label.rs
-2024/03/27 | 1057 | support/texlab/crates/hover/src/lib.rs
-2024/03/27 | 725 | support/texlab/crates/hover/src/package.rs
-2024/03/27 | 1095 | support/texlab/crates/hover/src/string_ref.rs
-2024/03/27 | 7827 | support/texlab/crates/hover/src/tests.rs
-2024/03/27 | 348 | support/texlab/crates/inlay-hints/Cargo.toml
-2024/03/27 | 1798 | support/texlab/crates/inlay-hints/src/label.rs
-2024/03/27 | 827 | support/texlab/crates/inlay-hints/src/lib.rs
-2024/03/27 | 3525 | support/texlab/crates/inlay-hints/src/tests.rs
-2024/03/27 | 233 | support/texlab/crates/line-index/Cargo.toml
-2024/03/27 | 6528 | support/texlab/crates/line-index/src/lib.rs
-2024/03/27 | 303 | support/texlab/crates/links/Cargo.toml
-2024/03/27 | 766 | support/texlab/crates/links/src/include.rs
-2024/03/27 | 264 | support/texlab/crates/links/src/lib.rs
-2024/03/27 | 1146 | support/texlab/crates/links/src/tests.rs
-2024/03/27 | 376 | support/texlab/crates/parser/Cargo.toml
-2024/03/27 | 11103 | support/texlab/crates/parser/src/bibtex.rs
-2024/03/27 | 158845 | support/texlab/crates/parser/src/bibtex/tests.rs
-2024/03/27 | 5385 | support/texlab/crates/parser/src/build_log.rs
-2024/03/27 | 44454 | support/texlab/crates/parser/src/build_log/tests.rs
-2024/03/27 | 3659 | support/texlab/crates/parser/src/config.rs
-2024/03/27 | 5209 | support/texlab/crates/parser/src/latex/lexer/commands.rs
-2024/03/27 | 2040 | support/texlab/crates/parser/src/latex/lexer.rs
-2024/03/27 | 3056 | support/texlab/crates/parser/src/latex/lexer/types.rs
-2024/03/27 | 1780 | support/texlab/crates/parser/src/latexmkrc.rs
-2024/03/27 | 35680 | support/texlab/crates/parser/src/latex.rs
-2024/03/27 | 102697 | support/texlab/crates/parser/src/latex/tests.rs
-2024/03/27 | 202 | support/texlab/crates/parser/src/lib.rs
-2024/03/27 | 336 | support/texlab/crates/references/Cargo.toml
-2024/03/27 | 1498 | support/texlab/crates/references/src/entry.rs
-2024/03/27 | 988 | support/texlab/crates/references/src/label.rs
-2024/03/27 | 1139 | support/texlab/crates/references/src/lib.rs
-2024/03/27 | 1329 | support/texlab/crates/references/src/string_def.rs
-2024/03/27 | 3018 | support/texlab/crates/references/src/tests.rs
-2024/03/27 | 353 | support/texlab/crates/rename/Cargo.toml
-2024/03/27 | 1240 | support/texlab/crates/rename/src/command.rs
-2024/03/27 | 1510 | support/texlab/crates/rename/src/entry.rs
-2024/03/27 | 848 | support/texlab/crates/rename/src/label.rs
-2024/03/27 | 1046 | support/texlab/crates/rename/src/lib.rs
-2024/03/27 | 1247 | support/texlab/crates/rename/src/tests.rs
-2024/03/27 | 499 | support/texlab/crates/symbols/Cargo.toml
-2024/03/27 | 1974 | support/texlab/crates/symbols/src/document/bib.rs
-2024/03/27 | 1574 | support/texlab/crates/symbols/src/document.rs
-2024/03/27 | 14338 | support/texlab/crates/symbols/src/document/tests.rs
-2024/03/27 | 9121 | support/texlab/crates/symbols/src/document/tex.rs
-2024/03/27 | 175 | support/texlab/crates/symbols/src/lib.rs
-2024/03/27 | 2610 | support/texlab/crates/symbols/src/types.rs
-2024/03/27 | 1321 | support/texlab/crates/symbols/src/workspace.rs
-2024/03/27 | 5655 | support/texlab/crates/symbols/src/workspace/sort.rs
-2024/03/27 | 9194 | support/texlab/crates/symbols/src/workspace/tests.rs
-2024/03/27 | 227 | support/texlab/crates/syntax/Cargo.toml
-2024/03/27 | 6963 | support/texlab/crates/syntax/src/bibtex/cst.rs
-2024/03/27 | 616 | support/texlab/crates/syntax/src/bibtex/kind.rs
-2024/03/27 | 694 | support/texlab/crates/syntax/src/bibtex.rs
-2024/03/27 | 18098 | support/texlab/crates/syntax/src/latex/cst.rs
-2024/03/27 | 1708 | support/texlab/crates/syntax/src/latex/kind.rs
-2024/03/27 | 128 | support/texlab/crates/syntax/src/latexmkrc.rs
-2024/03/27 | 689 | support/texlab/crates/syntax/src/latex.rs
-2024/03/27 | 504 | support/texlab/crates/syntax/src/lib.rs
-2024/03/27 | 330 | support/texlab/crates/test-utils/Cargo.toml
-2024/03/27 | 5283 | support/texlab/crates/test-utils/src/fixture.rs
-2024/03/27 | 17 | support/texlab/crates/test-utils/src/lib.rs
-2024/03/27 | 444 | support/texlab/crates/texlab/benches/bench_main.rs
-2024/03/27 | 1829 | support/texlab/crates/texlab/Cargo.toml
-2024/03/27 | 3457 | support/texlab/crates/texlab/src/client.rs
-2024/03/27 | 16158 | support/texlab/crates/texlab/src/features/completion.rs
-2024/03/27 | 533 | support/texlab/crates/texlab/src/features/definition.rs
-2024/03/27 | 566 | support/texlab/crates/texlab/src/features/folding.rs
-2024/03/27 | 804 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
-2024/03/27 | 2129 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs
-2024/03/27 | 1119 | support/texlab/crates/texlab/src/features/formatting.rs
-2024/03/27 | 505 | support/texlab/crates/texlab/src/features/highlight.rs
-2024/03/27 | 334 | support/texlab/crates/texlab/src/features/hover.rs
-2024/03/27 | 460 | support/texlab/crates/texlab/src/features/inlay_hint.rs
-2024/03/27 | 467 | support/texlab/crates/texlab/src/features/link.rs
-2024/03/27 | 409 | support/texlab/crates/texlab/src/features/reference.rs
-2024/03/27 | 760 | support/texlab/crates/texlab/src/features/rename.rs
-2024/03/27 | 197 | support/texlab/crates/texlab/src/features.rs
-2024/03/27 | 927 | support/texlab/crates/texlab/src/features/symbols.rs
-2024/03/27 | 122 | support/texlab/crates/texlab/src/lib.rs
-2024/03/27 | 1727 | support/texlab/crates/texlab/src/main.rs
-2024/03/27 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs
-2024/03/27 | 2609 | support/texlab/crates/texlab/src/server/extensions.rs
-2024/03/27 | 9034 | support/texlab/crates/texlab/src/server/options.rs
-2024/03/27 | 1412 | support/texlab/crates/texlab/src/server/progress.rs
-2024/03/27 | 40007 | support/texlab/crates/texlab/src/server.rs
-2024/03/27 | 1713 | support/texlab/crates/texlab/src/util/client_flags.rs
-2024/03/27 | 6723 | support/texlab/crates/texlab/src/util/from_proto.rs
-2024/03/27 | 1732 | support/texlab/crates/texlab/src/util/line_index_ext.rs
-2024/03/27 | 2265 | support/texlab/crates/texlab/src/util/lsp_enums.rs
-2024/03/27 | 1535 | support/texlab/crates/texlab/src/util.rs
-2024/03/27 | 18115 | support/texlab/crates/texlab/src/util/to_proto.rs
-2024/03/27 | 380190 | support/texlab/images/demo.gif
-2024/03/27 | 35149 | support/texlab/LICENSE
-2024/03/27 | 3828 | support/texlab/README.md
-2024/03/27 | 616 | support/texlab/texlab.1
-2024/03/27 | 26268 | support/texlab/texlab.pdf
-2024/03/27 | 2586 | support/texlab/texlab.tex
-2024/03/28 | 7587289 | support/texlab.zip
+2024/05/01 | 47434 | support/texlab/Cargo.lock
+2024/05/01 | 347 | support/texlab/Cargo.toml
+2024/05/01 | 38362 | support/texlab/CHANGELOG.md
+2024/05/01 | 181 | support/texlab/CONTRIBUTING.md
+2024/05/01 | 597 | support/texlab/crates/base-db/Cargo.toml
+2024/05/01 | 4387 | support/texlab/crates/base-db/src/config.rs
+2024/05/01 | 58486 | support/texlab/crates/base-db/src/data.rs
+2024/05/01 | 3453 | support/texlab/crates/base-db/src/deps/discover.rs
+2024/05/01 | 7469 | support/texlab/crates/base-db/src/deps/graph.rs
+2024/05/01 | 1077 | support/texlab/crates/base-db/src/deps/project.rs
+2024/05/01 | 5343 | support/texlab/crates/base-db/src/deps/root.rs
+2024/05/01 | 219 | support/texlab/crates/base-db/src/deps.rs
+2024/05/01 | 6380 | support/texlab/crates/base-db/src/document.rs
+2024/05/01 | 584 | support/texlab/crates/base-db/src/lib.rs
+2024/05/01 | 1266 | support/texlab/crates/base-db/src/semantics/auxiliary.rs
+2024/05/01 | 2781 | support/texlab/crates/base-db/src/semantics/bib.rs
+2024/05/01 | 1439 | support/texlab/crates/base-db/src/semantics.rs
+2024/05/01 | 11233 | support/texlab/crates/base-db/src/semantics/tex.rs
+2024/05/01 | 930 | support/texlab/crates/base-db/src/util/expand.rs
+2024/05/01 | 5910 | support/texlab/crates/base-db/src/util/label.rs
+2024/05/01 | 5576 | support/texlab/crates/base-db/src/util/queries.rs
+2024/05/01 | 445 | support/texlab/crates/base-db/src/util/regex_filter.rs
+2024/05/01 | 222 | support/texlab/crates/base-db/src/util.rs
+2024/05/01 | 5357 | support/texlab/crates/base-db/src/workspace.rs
+2024/05/01 | 352 | support/texlab/crates/bibfmt/Cargo.toml
+2024/05/01 | 6870 | support/texlab/crates/bibfmt/src/lib.rs
+2024/05/01 | 3486 | support/texlab/crates/bibfmt/src/tests.rs
+2024/05/01 | 492 | support/texlab/crates/bibtex-utils/Cargo.toml
+2024/05/01 | 2125 | support/texlab/crates/bibtex-utils/src/field/author.rs
+2024/05/01 | 2716 | support/texlab/crates/bibtex-utils/src/field/date.rs
+2024/05/01 | 1677 | support/texlab/crates/bibtex-utils/src/field/number.rs
+2024/05/01 | 196 | support/texlab/crates/bibtex-utils/src/field.rs
+2024/05/01 | 8723 | support/texlab/crates/bibtex-utils/src/field/text.rs
+2024/05/01 | 15 | support/texlab/crates/bibtex-utils/src/lib.rs
+2024/05/01 | 522 | support/texlab/crates/citeproc/Cargo.toml
+2024/05/01 | 22284 | support/texlab/crates/citeproc/src/driver.rs
+2024/05/01 | 5274 | support/texlab/crates/citeproc/src/entry.rs
+2024/05/01 | 949 | support/texlab/crates/citeproc/src/lib.rs
+2024/05/01 | 1760 | support/texlab/crates/citeproc/src/output.rs
+2024/05/01 | 15776 | support/texlab/crates/citeproc/src/tests.rs
+2024/05/01 | 559 | support/texlab/crates/commands/Cargo.toml
+2024/05/01 | 3926 | support/texlab/crates/commands/src/build.rs
+2024/05/01 | 987 | support/texlab/crates/commands/src/change_env.rs
+2024/05/01 | 1739 | support/texlab/crates/commands/src/clean.rs
+2024/05/01 | 1668 | support/texlab/crates/commands/src/dep_graph.rs
+2024/05/01 | 3093 | support/texlab/crates/commands/src/find_envs.rs
+2024/05/01 | 3939 | support/texlab/crates/commands/src/fwd_search.rs
+2024/05/01 | 389 | support/texlab/crates/commands/src/lib.rs
+2024/05/01 | 1583 | support/texlab/crates/commands/src/placeholders.rs
+2024/05/01 | 1033 | support/texlab/crates/completion/benches/bench_main.rs
+2024/05/01 | 692 | support/texlab/crates/completion/Cargo.toml
+2024/05/01 | 356 | support/texlab/crates/completion-data/Cargo.toml
+2024/05/01 | 6970534 | support/texlab/crates/completion-data/data/completion.json.gz
+2024/05/01 | 3265 | support/texlab/crates/completion-data/src/lib.rs
+2024/05/01 | 6588 | support/texlab/crates/completion/src/lib.rs
+2024/05/01 | 2493 | support/texlab/crates/completion/src/providers/argument.rs
+2024/05/01 | 2276 | support/texlab/crates/completion/src/providers/citations.rs
+2024/05/01 | 1553 | support/texlab/crates/completion/src/providers/color_model.rs
+2024/05/01 | 2107 | support/texlab/crates/completion/src/providers/color.rs
+2024/05/01 | 4824 | support/texlab/crates/completion/src/providers/command.rs
+2024/05/01 | 1118 | support/texlab/crates/completion/src/providers/entry_type.rs
+2024/05/01 | 4297 | support/texlab/crates/completion/src/providers/environment.rs
+2024/05/01 | 2369 | support/texlab/crates/completion/src/providers/field.rs
+2024/05/01 | 2612 | support/texlab/crates/completion/src/providers/glossary.rs
+2024/05/01 | 2481 | support/texlab/crates/completion/src/providers/import.rs
+2024/05/01 | 4895 | support/texlab/crates/completion/src/providers/include.rs
+2024/05/01 | 1636 | support/texlab/crates/completion/src/providers/label_def.rs
+2024/05/01 | 3511 | support/texlab/crates/completion/src/providers/label_ref.rs
+2024/05/01 | 779 | support/texlab/crates/completion/src/providers.rs
+2024/05/01 | 3301 | support/texlab/crates/completion/src/providers/tikz_library.rs
+2024/05/01 | 45655 | support/texlab/crates/completion/src/tests.rs
+2024/05/01 | 1459 | support/texlab/crates/completion/src/util/builder.rs
+2024/05/01 | 1025 | support/texlab/crates/completion/src/util/matchers.rs
+2024/05/01 | 2320 | support/texlab/crates/completion/src/util/patterns.rs
+2024/05/01 | 967 | support/texlab/crates/completion/src/util.rs
+2024/05/01 | 378 | support/texlab/crates/definition/Cargo.toml
+2024/05/01 | 880 | support/texlab/crates/definition/src/citation.rs
+2024/05/01 | 1804 | support/texlab/crates/definition/src/command.rs
+2024/05/01 | 1237 | support/texlab/crates/definition/src/include.rs
+2024/05/01 | 1175 | support/texlab/crates/definition/src/label.rs
+2024/05/01 | 1125 | support/texlab/crates/definition/src/lib.rs
+2024/05/01 | 1077 | support/texlab/crates/definition/src/string_ref.rs
+2024/05/01 | 2741 | support/texlab/crates/definition/src/tests.rs
+2024/05/01 | 576 | support/texlab/crates/diagnostics/Cargo.toml
+2024/05/01 | 2209 | support/texlab/crates/diagnostics/src/build_log.rs
+2024/05/01 | 3883 | support/texlab/crates/diagnostics/src/chktex.rs
+2024/05/01 | 2499 | support/texlab/crates/diagnostics/src/citations.rs
+2024/05/01 | 2652 | support/texlab/crates/diagnostics/src/grammar/bib.rs
+2024/05/01 | 26 | support/texlab/crates/diagnostics/src/grammar.rs
+2024/05/01 | 3636 | support/texlab/crates/diagnostics/src/grammar/tex.rs
+2024/05/01 | 2504 | support/texlab/crates/diagnostics/src/labels.rs
+2024/05/01 | 165 | support/texlab/crates/diagnostics/src/lib.rs
+2024/05/01 | 4049 | support/texlab/crates/diagnostics/src/manager.rs
+2024/05/01 | 5801 | support/texlab/crates/diagnostics/src/tests.rs
+2024/05/01 | 2364 | support/texlab/crates/diagnostics/src/types.rs
+2024/05/01 | 227 | support/texlab/crates/distro/Cargo.toml
+2024/05/01 | 2075 | support/texlab/crates/distro/src/file_name_db.rs
+2024/05/01 | 710 | support/texlab/crates/distro/src/kpsewhich.rs
+2024/05/01 | 1287 | support/texlab/crates/distro/src/language.rs
+2024/05/01 | 2543 | support/texlab/crates/distro/src/lib.rs
+2024/05/01 | 2467 | support/texlab/crates/distro/src/miktex.rs
+2024/05/01 | 820 | support/texlab/crates/distro/src/texlive.rs
+2024/05/01 | 355 | support/texlab/crates/folding/Cargo.toml
+2024/05/01 | 3225 | support/texlab/crates/folding/src/lib.rs
+2024/05/01 | 1698 | support/texlab/crates/folding/src/tests.rs
+2024/05/01 | 326 | support/texlab/crates/highlights/Cargo.toml
+2024/05/01 | 806 | support/texlab/crates/highlights/src/label.rs
+2024/05/01 | 613 | support/texlab/crates/highlights/src/lib.rs
+2024/05/01 | 901 | support/texlab/crates/highlights/src/tests.rs
+2024/05/01 | 483 | support/texlab/crates/hover/Cargo.toml
+2024/05/01 | 1261 | support/texlab/crates/hover/src/citation.rs
+2024/05/01 | 541 | support/texlab/crates/hover/src/entry_type.rs
+2024/05/01 | 617 | support/texlab/crates/hover/src/field_type.rs
+2024/05/01 | 850 | support/texlab/crates/hover/src/label.rs
+2024/05/01 | 1057 | support/texlab/crates/hover/src/lib.rs
+2024/05/01 | 725 | support/texlab/crates/hover/src/package.rs
+2024/05/01 | 1095 | support/texlab/crates/hover/src/string_ref.rs
+2024/05/01 | 7827 | support/texlab/crates/hover/src/tests.rs
+2024/05/01 | 348 | support/texlab/crates/inlay-hints/Cargo.toml
+2024/05/01 | 1798 | support/texlab/crates/inlay-hints/src/label.rs
+2024/05/01 | 827 | support/texlab/crates/inlay-hints/src/lib.rs
+2024/05/01 | 3525 | support/texlab/crates/inlay-hints/src/tests.rs
+2024/05/01 | 366 | support/texlab/crates/ipc/Cargo.toml
+2024/05/01 | 1330 | support/texlab/crates/ipc/src/lib.rs
+2024/05/01 | 233 | support/texlab/crates/line-index/Cargo.toml
+2024/05/01 | 6528 | support/texlab/crates/line-index/src/lib.rs
+2024/05/01 | 303 | support/texlab/crates/links/Cargo.toml
+2024/05/01 | 766 | support/texlab/crates/links/src/include.rs
+2024/05/01 | 264 | support/texlab/crates/links/src/lib.rs
+2024/05/01 | 1146 | support/texlab/crates/links/src/tests.rs
+2024/05/01 | 429 | support/texlab/crates/parser/Cargo.toml
+2024/05/01 | 11103 | support/texlab/crates/parser/src/bibtex.rs
+2024/05/01 | 158845 | support/texlab/crates/parser/src/bibtex/tests.rs
+2024/05/01 | 5385 | support/texlab/crates/parser/src/build_log.rs
+2024/05/01 | 44454 | support/texlab/crates/parser/src/build_log/tests.rs
+2024/05/01 | 3974 | support/texlab/crates/parser/src/config.rs
+2024/05/01 | 5963 | support/texlab/crates/parser/src/latex/lexer/commands.rs
+2024/05/01 | 2040 | support/texlab/crates/parser/src/latex/lexer.rs
+2024/05/01 | 3085 | support/texlab/crates/parser/src/latex/lexer/types.rs
+2024/05/01 | 5525 | support/texlab/crates/parser/src/latexmkrc.rs
+2024/05/01 | 36105 | support/texlab/crates/parser/src/latex.rs
+2024/05/01 | 105072 | support/texlab/crates/parser/src/latex/tests.rs
+2024/05/01 | 202 | support/texlab/crates/parser/src/lib.rs
+2024/05/01 | 357 | support/texlab/crates/references/Cargo.toml
+2024/05/01 | 1818 | support/texlab/crates/references/src/command.rs
+2024/05/01 | 1498 | support/texlab/crates/references/src/entry.rs
+2024/05/01 | 988 | support/texlab/crates/references/src/label.rs
+2024/05/01 | 1189 | support/texlab/crates/references/src/lib.rs
+2024/05/01 | 1329 | support/texlab/crates/references/src/string_def.rs
+2024/05/01 | 3337 | support/texlab/crates/references/src/tests.rs
+2024/05/01 | 353 | support/texlab/crates/rename/Cargo.toml
+2024/05/01 | 1240 | support/texlab/crates/rename/src/command.rs
+2024/05/01 | 1510 | support/texlab/crates/rename/src/entry.rs
+2024/05/01 | 848 | support/texlab/crates/rename/src/label.rs
+2024/05/01 | 1046 | support/texlab/crates/rename/src/lib.rs
+2024/05/01 | 1247 | support/texlab/crates/rename/src/tests.rs
+2024/05/01 | 499 | support/texlab/crates/symbols/Cargo.toml
+2024/05/01 | 1974 | support/texlab/crates/symbols/src/document/bib.rs
+2024/05/01 | 1574 | support/texlab/crates/symbols/src/document.rs
+2024/05/01 | 14338 | support/texlab/crates/symbols/src/document/tests.rs
+2024/05/01 | 9121 | support/texlab/crates/symbols/src/document/tex.rs
+2024/05/01 | 175 | support/texlab/crates/symbols/src/lib.rs
+2024/05/01 | 2610 | support/texlab/crates/symbols/src/types.rs
+2024/05/01 | 1321 | support/texlab/crates/symbols/src/workspace.rs
+2024/05/01 | 5655 | support/texlab/crates/symbols/src/workspace/sort.rs
+2024/05/01 | 9194 | support/texlab/crates/symbols/src/workspace/tests.rs
+2024/05/01 | 227 | support/texlab/crates/syntax/Cargo.toml
+2024/05/01 | 6963 | support/texlab/crates/syntax/src/bibtex/cst.rs
+2024/05/01 | 616 | support/texlab/crates/syntax/src/bibtex/kind.rs
+2024/05/01 | 694 | support/texlab/crates/syntax/src/bibtex.rs
+2024/05/01 | 18868 | support/texlab/crates/syntax/src/latex/cst.rs
+2024/05/01 | 1740 | support/texlab/crates/syntax/src/latex/kind.rs
+2024/05/01 | 128 | support/texlab/crates/syntax/src/latexmkrc.rs
+2024/05/01 | 689 | support/texlab/crates/syntax/src/latex.rs
+2024/05/01 | 504 | support/texlab/crates/syntax/src/lib.rs
+2024/05/01 | 330 | support/texlab/crates/test-utils/Cargo.toml
+2024/05/01 | 5283 | support/texlab/crates/test-utils/src/fixture.rs
+2024/05/01 | 17 | support/texlab/crates/test-utils/src/lib.rs
+2024/05/01 | 444 | support/texlab/crates/texlab/benches/bench_main.rs
+2024/05/01 | 1855 | support/texlab/crates/texlab/Cargo.toml
+2024/05/01 | 3457 | support/texlab/crates/texlab/src/client.rs
+2024/05/01 | 16158 | support/texlab/crates/texlab/src/features/completion.rs
+2024/05/01 | 533 | support/texlab/crates/texlab/src/features/definition.rs
+2024/05/01 | 566 | support/texlab/crates/texlab/src/features/folding.rs
+2024/05/01 | 804 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
+2024/05/01 | 2129 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs
+2024/05/01 | 1119 | support/texlab/crates/texlab/src/features/formatting.rs
+2024/05/01 | 505 | support/texlab/crates/texlab/src/features/highlight.rs
+2024/05/01 | 334 | support/texlab/crates/texlab/src/features/hover.rs
+2024/05/01 | 460 | support/texlab/crates/texlab/src/features/inlay_hint.rs
+2024/05/01 | 467 | support/texlab/crates/texlab/src/features/link.rs
+2024/05/01 | 409 | support/texlab/crates/texlab/src/features/reference.rs
+2024/05/01 | 760 | support/texlab/crates/texlab/src/features/rename.rs
+2024/05/01 | 197 | support/texlab/crates/texlab/src/features.rs
+2024/05/01 | 927 | support/texlab/crates/texlab/src/features/symbols.rs
+2024/05/01 | 122 | support/texlab/crates/texlab/src/lib.rs
+2024/05/01 | 3412 | support/texlab/crates/texlab/src/main.rs
+2024/05/01 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs
+2024/05/01 | 2609 | support/texlab/crates/texlab/src/server/extensions.rs
+2024/05/01 | 4391 | support/texlab/crates/texlab/src/server/options.rs
+2024/05/01 | 1412 | support/texlab/crates/texlab/src/server/progress.rs
+2024/05/01 | 41951 | support/texlab/crates/texlab/src/server.rs
+2024/05/01 | 1837 | support/texlab/crates/texlab/src/util/client_flags.rs
+2024/05/01 | 11354 | support/texlab/crates/texlab/src/util/from_proto.rs
+2024/05/01 | 1732 | support/texlab/crates/texlab/src/util/line_index_ext.rs
+2024/05/01 | 2265 | support/texlab/crates/texlab/src/util/lsp_enums.rs
+2024/05/01 | 1554 | support/texlab/crates/texlab/src/util.rs
+2024/05/01 | 18115 | support/texlab/crates/texlab/src/util/to_proto.rs
+2024/05/01 | 380190 | support/texlab/images/demo.gif
+2024/05/01 | 35149 | support/texlab/LICENSE
+2024/05/01 | 3838 | support/texlab/README.md
+2024/05/01 | 849 | support/texlab/texlab.1
+2024/05/01 | 26307 | support/texlab/texlab.pdf
+2024/05/01 | 2586 | support/texlab/texlab.tex
+2024/05/01 | 7594533 | support/texlab.zip
2011/11/27 | 456 | support/texlipse/plugin/1.5.0/README.TXT
2011/11/27 | 1726937 | support/texlipse/plugin/1.5.0/texlipse_1.5.0 src.zip
1999/01/30 | 6077 | support/texlist/README
@@ -310964,9 +310973,9 @@
2024/04/19 | 862356 | systems/texlive/tlnet/archive/l3backend-dev.doc.r70977.tar.xz
2024/04/19 | 16132 | systems/texlive/tlnet/archive/l3backend-dev.r70977.tar.xz
2024/04/19 | 33820 | systems/texlive/tlnet/archive/l3backend-dev.source.r70977.tar.xz
-2024/04/19 | 863240 | systems/texlive/tlnet/archive/l3backend.doc.r70992.tar.xz
-2024/04/19 | 16280 | systems/texlive/tlnet/archive/l3backend.r70992.tar.xz
-2024/04/19 | 33840 | systems/texlive/tlnet/archive/l3backend.source.r70992.tar.xz
+2024/05/01 | 862492 | systems/texlive/tlnet/archive/l3backend.doc.r71139.tar.xz
+2024/05/01 | 16264 | systems/texlive/tlnet/archive/l3backend.r71139.tar.xz
+2024/05/01 | 33800 | systems/texlive/tlnet/archive/l3backend.source.r71139.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/l3build.aarch64-linux.r46894.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/l3build.amd64-freebsd.r46894.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/l3build.amd64-netbsd.r46894.tar.xz
@@ -310991,9 +311000,9 @@
2024/04/19 | 12063500 | systems/texlive/tlnet/archive/l3kernel-dev.doc.r70976.tar.xz
2024/04/19 | 180216 | systems/texlive/tlnet/archive/l3kernel-dev.r70976.tar.xz
2024/04/19 | 622280 | systems/texlive/tlnet/archive/l3kernel-dev.source.r70976.tar.xz
-2024/04/19 | 11960172 | systems/texlive/tlnet/archive/l3kernel.doc.r70992.tar.xz
-2024/04/19 | 179808 | systems/texlive/tlnet/archive/l3kernel.r70992.tar.xz
-2024/04/19 | 620604 | systems/texlive/tlnet/archive/l3kernel.source.r70992.tar.xz
+2024/05/01 | 12057768 | systems/texlive/tlnet/archive/l3kernel.doc.r71140.tar.xz
+2024/05/01 | 180332 | systems/texlive/tlnet/archive/l3kernel.r71140.tar.xz
+2024/05/01 | 622336 | systems/texlive/tlnet/archive/l3kernel.source.r71140.tar.xz
2024/03/15 | 1457040 | systems/texlive/tlnet/archive/l3packages.doc.r70637.tar.xz
2024/03/15 | 20352 | systems/texlive/tlnet/archive/l3packages.r70637.tar.xz
2024/03/15 | 27244 | systems/texlive/tlnet/archive/l3packages.source.r70637.tar.xz
@@ -312237,9 +312246,9 @@
2023/09/08 | 469960 | systems/texlive/tlnet/archive/marginnote.doc.r68204.tar.xz
2023/09/08 | 3312 | systems/texlive/tlnet/archive/marginnote.r68204.tar.xz
2023/09/08 | 10208 | systems/texlive/tlnet/archive/marginnote.source.r68204.tar.xz
-2024/04/05 | 1272140 | systems/texlive/tlnet/archive/markdown.doc.r70856.tar.xz
-2024/04/05 | 64764 | systems/texlive/tlnet/archive/markdown.r70856.tar.xz
-2024/04/05 | 128636 | systems/texlive/tlnet/archive/markdown.source.r70856.tar.xz
+2024/05/01 | 1288664 | systems/texlive/tlnet/archive/markdown.doc.r71137.tar.xz
+2024/05/01 | 65524 | systems/texlive/tlnet/archive/markdown.r71137.tar.xz
+2024/05/01 | 130124 | systems/texlive/tlnet/archive/markdown.source.r71137.tar.xz
2019/02/28 | 426608 | systems/texlive/tlnet/archive/marvosym.doc.r29349.tar.xz
2019/02/28 | 133476 | systems/texlive/tlnet/archive/marvosym.r29349.tar.xz
2019/02/28 | 1256 | systems/texlive/tlnet/archive/marvosym.source.r29349.tar.xz
@@ -313233,9 +313242,9 @@
2023/10/04 | 24400 | systems/texlive/tlnet/archive/nlctdoc.r68448.tar.xz
2021/03/14 | 63444 | systems/texlive/tlnet/archive/nl-interval.doc.r58328.tar.xz
2021/03/14 | 1588 | systems/texlive/tlnet/archive/nl-interval.r58328.tar.xz
-2019/02/28 | 443656 | systems/texlive/tlnet/archive/nmbib.doc.r37984.tar.xz
-2019/02/28 | 9092 | systems/texlive/tlnet/archive/nmbib.r37984.tar.xz
-2019/02/28 | 11372 | systems/texlive/tlnet/archive/nmbib.source.r37984.tar.xz
+2024/05/01 | 457208 | systems/texlive/tlnet/archive/nmbib.doc.r71138.tar.xz
+2024/05/01 | 9076 | systems/texlive/tlnet/archive/nmbib.r71138.tar.xz
+2024/05/01 | 11956 | systems/texlive/tlnet/archive/nmbib.source.r71138.tar.xz
2021/06/23 | 103384 | systems/texlive/tlnet/archive/nndraw.doc.r59674.tar.xz
2021/06/23 | 2216 | systems/texlive/tlnet/archive/nndraw.r59674.tar.xz
2021/06/23 | 3276 | systems/texlive/tlnet/archive/nndraw.source.r59674.tar.xz
@@ -316670,7 +316679,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2024/04/30 | 434884 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71135.tar.xz
+2024/05/01 | 434928 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71141.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -316692,7 +316701,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2024/04/30 | 114164 | systems/texlive/tlnet/archive/texlive-scripts.r71135.tar.xz
+2024/05/01 | 114160 | systems/texlive/tlnet/archive/texlive-scripts.r71141.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2024/04/14 | 60548 | systems/texlive/tlnet/archive/texlive-scripts.windows.r70934.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -318614,16 +318623,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2024/04/11 | 125030 | systems/texlive/tlnet/install-tl
-2024/04/30 | 5751626 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2024/04/30 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2024/04/30 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/05/01 | 5750939 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/05/01 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/05/01 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2024/04/13 | 5743 | systems/texlive/tlnet/install-tl-windows.bat
-2024/04/30 | 27718774 | systems/texlive/tlnet/install-tl-windows.exe
-2024/04/30 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2024/04/30 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/04/30 | 34426289 | systems/texlive/tlnet/install-tl.zip
-2024/04/30 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/04/30 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/05/01 | 27720263 | systems/texlive/tlnet/install-tl-windows.exe
+2024/05/01 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/05/01 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/05/01 | 34426306 | systems/texlive/tlnet/install-tl.zip
+2024/05/01 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/05/01 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2024/03/13 | 1229 | systems/texlive/tlnet/README.md
2024/03/13 | 0 | systems/texlive/tlnet/TEXLIVE_2024
2024/01/02 | 9011 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -318633,7 +318642,7 @@
2024/01/02 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2024/01/16 | 50726 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2024/04/30 | 7160 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/05/01 | 7278 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/03/15 | 229654 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -318675,12 +318684,12 @@
2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2024/01/31 | 5840 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2024/04/30 | 19435199 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2024/04/30 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/05/01 | 19435212 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/05/01 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2024/04/29 | 87676 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2024/04/30 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2024/04/30 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/04/30 | 2566316 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/05/01 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/05/01 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/05/01 | 2567944 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2023/06/11 | 42749 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -330156,7 +330165,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2024/05/01 | 186 | timestamp
+2024/05/02 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 8b89bef700..fb6b227449 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 27a01be07a..c4c10b9ab0 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,46 +1,308 @@
+2024/05/01 | 988 | support/texlab/crates/references/src/label.rs
+2024/05/01 | 987 | support/texlab/crates/commands/src/change_env.rs
+2024/05/01 | 967 | support/texlab/crates/completion/src/util.rs
+2024/05/01 | 949 | support/texlab/crates/citeproc/src/lib.rs
+2024/05/01 | 930 | support/texlab/crates/base-db/src/util/expand.rs
+2024/05/01 | 927 | support/texlab/crates/texlab/src/features/symbols.rs
+2024/05/01 | 9194 | support/texlab/crates/symbols/src/workspace/tests.rs
+2024/05/01 | 9121 | support/texlab/crates/symbols/src/document/tex.rs
+2024/05/01 | 9076 | systems/texlive/tlnet/archive/nmbib.r71138.tar.xz
+2024/05/01 | 901 | support/texlab/crates/highlights/src/tests.rs
+2024/05/01 | 880 | support/texlab/crates/definition/src/citation.rs
+2024/05/01 | 8723 | support/texlab/crates/bibtex-utils/src/field/text.rs
+2024/05/01 | 862492 | systems/texlive/tlnet/archive/l3backend.doc.r71139.tar.xz
+2024/05/01 | 850 | support/texlab/crates/hover/src/label.rs
+2024/05/01 | 849 | support/texlab/texlab.1
+2024/05/01 | 848 | support/texlab/crates/rename/src/label.rs
+2024/05/01 | 827 | support/texlab/crates/inlay-hints/src/lib.rs
+2024/05/01 | 82187 | macros/latex/contrib/easybook/easybook.dtx
+2024/05/01 | 820 | support/texlab/crates/distro/src/texlive.rs
+2024/05/01 | 806 | support/texlab/crates/highlights/src/label.rs
+2024/05/01 | 804 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
+2024/05/01 | 7827 | support/texlab/crates/hover/src/tests.rs
+2024/05/01 | 779 | support/texlab/crates/completion/src/providers.rs
+2024/05/01 | 766 | support/texlab/crates/links/src/include.rs
+2024/05/01 | 760 | support/texlab/crates/texlab/src/features/rename.rs
+2024/05/01 | 7594533 | support/texlab.zip
+2024/05/01 | 7469 | support/texlab/crates/base-db/src/deps/graph.rs
+2024/05/01 | 7278 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2024/05/01 | 725 | support/texlab/crates/hover/src/package.rs
+2024/05/01 | 710 | support/texlab/crates/distro/src/kpsewhich.rs
+2024/05/01 | 6970534 | support/texlab/crates/completion-data/data/completion.json.gz
+2024/05/01 | 6963 | support/texlab/crates/syntax/src/bibtex/cst.rs
+2024/05/01 | 694 | support/texlab/crates/syntax/src/bibtex.rs
+2024/05/01 | 692 | support/texlab/crates/completion/Cargo.toml
+2024/05/01 | 689 | support/texlab/crates/syntax/src/latex.rs
+2024/05/01 | 688606 | macros/latex/contrib/easybook.zip
+2024/05/01 | 6870 | support/texlab/crates/bibfmt/src/lib.rs
+2024/05/01 | 66716 | fonts/baskervaldx/opentype/Baskervaldx-Bol.otf
+2024/05/01 | 6645 | macros/luatex/generic/luamplib/test-luamplib-latex.tex
+2024/05/01 | 6588 | support/texlab/crates/completion/src/lib.rs
+2024/05/01 | 65524 | systems/texlive/tlnet/archive/markdown.r71137.tar.xz
+2024/05/01 | 6528 | support/texlab/crates/line-index/src/lib.rs
+2024/05/01 | 65008 | fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf
+2024/05/01 | 640970 | macros/latex/contrib/easybook/easybook.pdf
+2024/05/01 | 6380 | support/texlab/crates/base-db/src/document.rs
+2024/05/01 | 63596 | fonts/baskervaldx/opentype/Baskervaldx-Reg.otf
+2024/05/01 | 622336 | systems/texlive/tlnet/archive/l3kernel.source.r71140.tar.xz
+2024/05/01 | 62124 | fonts/baskervaldx/opentype/Baskervaldx-Ita.otf
+2024/05/01 | 617 | support/texlab/crates/hover/src/field_type.rs
+2024/05/01 | 616 | support/texlab/crates/syntax/src/bibtex/kind.rs
+2024/05/01 | 613 | support/texlab/crates/highlights/src/lib.rs
+2024/05/01 | 6038 | macros/luatex/generic/luamplib/test-luamplib-plain.tex
+2024/05/01 | 597 | support/texlab/crates/base-db/Cargo.toml
+2024/05/01 | 5963 | support/texlab/crates/parser/src/latex/lexer/commands.rs
+2024/05/01 | 5910 | support/texlab/crates/base-db/src/util/label.rs
+2024/05/01 | 584 | support/texlab/crates/base-db/src/lib.rs
+2024/05/01 | 58486 | support/texlab/crates/base-db/src/data.rs
+2024/05/01 | 5801 | support/texlab/crates/diagnostics/src/tests.rs
+2024/05/01 | 576 | support/texlab/crates/diagnostics/Cargo.toml
+2024/05/01 | 5750939 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2024/05/01 | 566 | support/texlab/crates/texlab/src/features/folding.rs
+2024/05/01 | 5655 | support/texlab/crates/symbols/src/workspace/sort.rs
+2024/05/01 | 559 | support/texlab/crates/commands/Cargo.toml
+2024/05/01 | 5576 | support/texlab/crates/base-db/src/util/queries.rs
+2024/05/01 | 5525 | support/texlab/crates/parser/src/latexmkrc.rs
+2024/05/01 | 541 | support/texlab/crates/hover/src/entry_type.rs
+2024/05/01 | 5385 | support/texlab/crates/parser/src/build_log.rs
+2024/05/01 | 5357 | support/texlab/crates/base-db/src/workspace.rs
+2024/05/01 | 5343 | support/texlab/crates/base-db/src/deps/root.rs
+2024/05/01 | 533 | support/texlab/crates/texlab/src/features/definition.rs
+2024/05/01 | 5283 | support/texlab/crates/test-utils/src/fixture.rs
+2024/05/01 | 5274 | support/texlab/crates/citeproc/src/entry.rs
+2024/05/01 | 522 | support/texlab/crates/citeproc/Cargo.toml
+2024/05/01 | 505 | support/texlab/crates/texlab/src/features/highlight.rs
+2024/05/01 | 504 | support/texlab/crates/syntax/src/lib.rs
+2024/05/01 | 499 | support/texlab/crates/symbols/Cargo.toml
+2024/05/01 | 492 | support/texlab/crates/bibtex-utils/Cargo.toml
+2024/05/01 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2024/05/01 | 4895 | support/texlab/crates/completion/src/providers/include.rs
+2024/05/01 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2024/05/01 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2024/05/01 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2024/05/01 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2024/05/01 | 483 | support/texlab/crates/hover/Cargo.toml
+2024/05/01 | 4824 | support/texlab/crates/completion/src/providers/command.rs
+2024/05/01 | 47434 | support/texlab/Cargo.lock
+2024/05/01 | 467 | support/texlab/crates/texlab/src/features/link.rs
+2024/05/01 | 460 | support/texlab/crates/texlab/src/features/inlay_hint.rs
+2024/05/01 | 457208 | systems/texlive/tlnet/archive/nmbib.doc.r71138.tar.xz
+2024/05/01 | 45655 | support/texlab/crates/completion/src/tests.rs
+2024/05/01 | 445 | support/texlab/crates/base-db/src/util/regex_filter.rs
+2024/05/01 | 444 | support/texlab/crates/texlab/benches/bench_main.rs
+2024/05/01 | 44454 | support/texlab/crates/parser/src/build_log/tests.rs
+2024/05/01 | 4391 | support/texlab/crates/texlab/src/server/options.rs
+2024/05/01 | 4387 | support/texlab/crates/base-db/src/config.rs
+2024/05/01 | 434928 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71141.tar.xz
+2024/05/01 | 429 | support/texlab/crates/parser/Cargo.toml
+2024/05/01 | 4297 | support/texlab/crates/completion/src/providers/environment.rs
+2024/05/01 | 41951 | support/texlab/crates/texlab/src/server.rs
+2024/05/01 | 4120737 | biblio/ctan-bibdata.zip
+2024/05/01 | 409 | support/texlab/crates/texlab/src/features/reference.rs
+2024/05/01 | 4049 | support/texlab/crates/diagnostics/src/manager.rs
+2024/05/01 | 3974 | support/texlab/crates/parser/src/config.rs
+2024/05/01 | 3939 | support/texlab/crates/commands/src/fwd_search.rs
+2024/05/01 | 393694 | macros/latex/contrib/osda.zip
+2024/05/01 | 3926 | support/texlab/crates/commands/src/build.rs
+2024/05/01 | 389 | support/texlab/crates/commands/src/lib.rs
+2024/05/01 | 3883 | support/texlab/crates/diagnostics/src/chktex.rs
+2024/05/01 | 3838 | support/texlab/README.md
+2024/05/01 | 38362 | support/texlab/CHANGELOG.md
+2024/05/01 | 380190 | support/texlab/images/demo.gif
+2024/05/01 | 378 | support/texlab/crates/definition/Cargo.toml
+2024/05/01 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2024/05/01 | 366 | support/texlab/crates/ipc/Cargo.toml
+2024/05/01 | 3636 | support/texlab/crates/diagnostics/src/grammar/tex.rs
+2024/05/01 | 36105 | support/texlab/crates/parser/src/latex.rs
+2024/05/01 | 357 | support/texlab/crates/references/Cargo.toml
+2024/05/01 | 356 | support/texlab/crates/completion-data/Cargo.toml
+2024/05/01 | 355 | support/texlab/crates/folding/Cargo.toml
+2024/05/01 | 353 | support/texlab/crates/rename/Cargo.toml
+2024/05/01 | 352 | support/texlab/crates/bibfmt/Cargo.toml
+2024/05/01 | 3525 | support/texlab/crates/inlay-hints/src/tests.rs
+2024/05/01 | 35149 | support/texlab/LICENSE
+2024/05/01 | 3511 | support/texlab/crates/completion/src/providers/label_ref.rs
+2024/05/01 | 348 | support/texlab/crates/inlay-hints/Cargo.toml
+2024/05/01 | 3486 | support/texlab/crates/bibfmt/src/tests.rs
+2024/05/01 | 347 | support/texlab/Cargo.toml
+2024/05/01 | 3479 | fonts/baskervaldx/README
+2024/05/01 | 3457 | support/texlab/crates/texlab/src/client.rs
+2024/05/01 | 3453 | support/texlab/crates/base-db/src/deps/discover.rs
+2024/05/01 | 34426306 | systems/texlive/tlnet/install-tl.zip
+2024/05/01 | 3412 | support/texlab/crates/texlab/src/main.rs
+2024/05/01 | 33800 | systems/texlive/tlnet/archive/l3backend.source.r71139.tar.xz
+2024/05/01 | 334 | support/texlab/crates/texlab/src/features/hover.rs
+2024/05/01 | 3337 | support/texlab/crates/references/src/tests.rs
+2024/05/01 | 330 | support/texlab/crates/test-utils/Cargo.toml
+2024/05/01 | 3301 | support/texlab/crates/completion/src/providers/tikz_library.rs
+2024/05/01 | 326 | support/texlab/crates/highlights/Cargo.toml
+2024/05/01 | 3265 | support/texlab/crates/completion-data/src/lib.rs
+2024/05/01 | 3225 | support/texlab/crates/folding/src/lib.rs
+2024/05/01 | 3093 | support/texlab/crates/commands/src/find_envs.rs
+2024/05/01 | 3085 | support/texlab/crates/parser/src/latex/lexer/types.rs
+2024/05/01 | 30737 | macros/latex/contrib/osda/osda.dtx
+2024/05/01 | 303 | support/texlab/crates/links/Cargo.toml
+2024/05/01 | 2863845 | biblio/ctan-bibdata/ctan.bib
+2024/05/01 | 2836 | macros/luatex/generic/luamplib/Makefile
+2024/05/01 | 2824 | macros/latex/contrib/osda/README.md
+2024/05/01 | 2781 | support/texlab/crates/base-db/src/semantics/bib.rs
+2024/05/01 | 27720263 | systems/texlive/tlnet/install-tl-windows.exe
+2024/05/01 | 2741 | support/texlab/crates/definition/src/tests.rs
+2024/05/01 | 2716 | support/texlab/crates/bibtex-utils/src/field/date.rs
+2024/05/01 | 26 | support/texlab/crates/diagnostics/src/grammar.rs
+2024/05/01 | 2652 | support/texlab/crates/diagnostics/src/grammar/bib.rs
+2024/05/01 | 264 | support/texlab/crates/links/src/lib.rs
+2024/05/01 | 2644 | macros/latex/contrib/osda/osda.ins
+2024/05/01 | 26307 | support/texlab/texlab.pdf
+2024/05/01 | 2612 | support/texlab/crates/completion/src/providers/glossary.rs
+2024/05/01 | 2610 | support/texlab/crates/symbols/src/types.rs
+2024/05/01 | 2609 | support/texlab/crates/texlab/src/server/extensions.rs
+2024/05/01 | 2586 | support/texlab/texlab.tex
+2024/05/01 | 2567944 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2024/05/01 | 2543 | support/texlab/crates/distro/src/lib.rs
+2024/05/01 | 2504 | support/texlab/crates/diagnostics/src/labels.rs
+2024/05/01 | 2499 | support/texlab/crates/diagnostics/src/citations.rs
+2024/05/01 | 2493 | support/texlab/crates/completion/src/providers/argument.rs
+2024/05/01 | 2481 | support/texlab/crates/completion/src/providers/import.rs
+2024/05/01 | 2467 | support/texlab/crates/distro/src/miktex.rs
+2024/05/01 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs
+2024/05/01 | 2369 | support/texlab/crates/completion/src/providers/field.rs
+2024/05/01 | 2364 | support/texlab/crates/diagnostics/src/types.rs
+2024/05/01 | 234962 | install/macros/luatex/generic/luamplib.tds.zip
+2024/05/01 | 233 | support/texlab/crates/line-index/Cargo.toml
+2024/05/01 | 2320 | support/texlab/crates/completion/src/util/patterns.rs
+2024/05/01 | 227 | support/texlab/crates/syntax/Cargo.toml
+2024/05/01 | 227 | support/texlab/crates/distro/Cargo.toml
+2024/05/01 | 2276 | support/texlab/crates/completion/src/providers/citations.rs
+2024/05/01 | 2265 | support/texlab/crates/texlab/src/util/lsp_enums.rs
+2024/05/01 | 222 | support/texlab/crates/base-db/src/util.rs
+2024/05/01 | 22284 | support/texlab/crates/citeproc/src/driver.rs
+2024/05/01 | 2223006 | fonts/baskervaldx.zip
+2024/05/01 | 2209 | support/texlab/crates/diagnostics/src/build_log.rs
+2024/05/01 | 219 | support/texlab/crates/base-db/src/deps.rs
+2024/05/01 | 219701 | macros/latex/contrib/osda/osda.pdf
+2024/05/01 | 216767 | macros/luatex/generic/luamplib.zip
+2024/05/01 | 2129 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs
+2024/05/01 | 2125 | support/texlab/crates/bibtex-utils/src/field/author.rs
+2024/05/01 | 2107 | support/texlab/crates/completion/src/providers/color.rs
+2024/05/01 | 2075 | support/texlab/crates/distro/src/file_name_db.rs
+2024/05/01 | 2058 | macros/luatex/generic/luamplib/README
+2024/05/01 | 2040 | support/texlab/crates/parser/src/latex/lexer.rs
+2024/05/01 | 202 | support/texlab/crates/parser/src/lib.rs
+2024/05/01 | 197 | support/texlab/crates/texlab/src/features.rs
+2024/05/01 | 1974 | support/texlab/crates/symbols/src/document/bib.rs
+2024/05/01 | 196 | support/texlab/crates/bibtex-utils/src/field.rs
+2024/05/01 | 19435212 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2024/05/01 | 18868 | support/texlab/crates/syntax/src/latex/cst.rs
+2024/05/01 | 186840 | macros/latex/contrib/osda/example.png
+2024/05/01 | 1855 | support/texlab/crates/texlab/Cargo.toml
+2024/05/01 | 1837 | support/texlab/crates/texlab/src/util/client_flags.rs
+2024/05/01 | 181 | support/texlab/CONTRIBUTING.md
+2024/05/01 | 1818 | support/texlab/crates/references/src/command.rs
+2024/05/01 | 18115 | support/texlab/crates/texlab/src/util/to_proto.rs
+2024/05/01 | 1804 | support/texlab/crates/definition/src/command.rs
+2024/05/01 | 180332 | systems/texlive/tlnet/archive/l3kernel.r71140.tar.xz
+2024/05/01 | 17 | support/texlab/crates/test-utils/src/lib.rs
+2024/05/01 | 1798 | support/texlab/crates/inlay-hints/src/label.rs
+2024/05/01 | 1760 | support/texlab/crates/citeproc/src/output.rs
+2024/05/01 | 175 | support/texlab/crates/symbols/src/lib.rs
+2024/05/01 | 175518 | macros/luatex/generic/luamplib/luamplib.pdf
+2024/05/01 | 1740 | support/texlab/crates/syntax/src/latex/kind.rs
+2024/05/01 | 1739 | support/texlab/crates/commands/src/clean.rs
+2024/05/01 | 1732 | support/texlab/crates/texlab/src/util/line_index_ext.rs
+2024/05/01 | 1698 | support/texlab/crates/folding/src/tests.rs
+2024/05/01 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2024/05/01 | 1677 | support/texlab/crates/bibtex-utils/src/field/number.rs
+2024/05/01 | 1668 | support/texlab/crates/commands/src/dep_graph.rs
+2024/05/01 | 165 | support/texlab/crates/diagnostics/src/lib.rs
+2024/05/01 | 1647966 | macros/latex/contrib/mathgreeks.zip
+2024/05/01 | 1636 | support/texlab/crates/completion/src/providers/label_def.rs
+2024/05/01 | 16264 | systems/texlive/tlnet/archive/l3backend.r71139.tar.xz
+2024/05/01 | 16158 | support/texlab/crates/texlab/src/features/completion.rs
+2024/05/01 | 15 | support/texlab/crates/bibtex-utils/src/lib.rs
+2024/05/01 | 158845 | support/texlab/crates/parser/src/bibtex/tests.rs
+2024/05/01 | 1583 | support/texlab/crates/commands/src/placeholders.rs
+2024/05/01 | 15776 | support/texlab/crates/citeproc/src/tests.rs
+2024/05/01 | 1574 | support/texlab/crates/symbols/src/document.rs
+2024/05/01 | 1554 | support/texlab/crates/texlab/src/util.rs
+2024/05/01 | 1553 | support/texlab/crates/completion/src/providers/color_model.rs
+2024/05/01 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2024/05/01 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2024/05/01 | 1510 | support/texlab/crates/rename/src/entry.rs
+2024/05/01 | 15071 | macros/luatex/generic/luamplib/NEWS
+2024/05/01 | 1498 | support/texlab/crates/references/src/entry.rs
+2024/05/01 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2024/05/01 | 1459 | support/texlab/crates/completion/src/util/builder.rs
+2024/05/01 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2024/05/01 | 1439 | support/texlab/crates/base-db/src/semantics.rs
+2024/05/01 | 14338 | support/texlab/crates/symbols/src/document/tests.rs
+2024/05/01 | 1412 | support/texlab/crates/texlab/src/server/progress.rs
+2024/05/01 | 1330 | support/texlab/crates/ipc/src/lib.rs
+2024/05/01 | 1329 | support/texlab/crates/references/src/string_def.rs
+2024/05/01 | 1321 | support/texlab/crates/symbols/src/workspace.rs
+2024/05/01 | 130124 | systems/texlive/tlnet/archive/markdown.source.r71137.tar.xz
+2024/05/01 | 128 | support/texlab/crates/syntax/src/latexmkrc.rs
+2024/05/01 | 1288664 | systems/texlive/tlnet/archive/markdown.doc.r71137.tar.xz
+2024/05/01 | 1287 | support/texlab/crates/distro/src/language.rs
+2024/05/01 | 1266 | support/texlab/crates/base-db/src/semantics/auxiliary.rs
+2024/05/01 | 1261 | support/texlab/crates/hover/src/citation.rs
+2024/05/01 | 1247 | support/texlab/crates/rename/src/tests.rs
+2024/05/01 | 1240 | support/texlab/crates/rename/src/command.rs
+2024/05/01 | 1237 | support/texlab/crates/definition/src/include.rs
+2024/05/01 | 122 | support/texlab/crates/texlab/src/lib.rs
+2024/05/01 | 12057768 | systems/texlive/tlnet/archive/l3kernel.doc.r71140.tar.xz
+2024/05/01 | 11956 | systems/texlive/tlnet/archive/nmbib.source.r71138.tar.xz
+2024/05/01 | 1189 | support/texlab/crates/references/src/lib.rs
+2024/05/01 | 1175 | support/texlab/crates/definition/src/label.rs
+2024/05/01 | 117568 | macros/luatex/generic/luamplib/luamplib.dtx
+2024/05/01 | 1146 | support/texlab/crates/links/src/tests.rs
+2024/05/01 | 114160 | systems/texlive/tlnet/archive/texlive-scripts.r71141.tar.xz
+2024/05/01 | 11354 | support/texlab/crates/texlab/src/util/from_proto.rs
+2024/05/01 | 1125 | support/texlab/crates/definition/src/lib.rs
+2024/05/01 | 11233 | support/texlab/crates/base-db/src/semantics/tex.rs
+2024/05/01 | 1119 | support/texlab/crates/texlab/src/features/formatting.rs
+2024/05/01 | 1118 | support/texlab/crates/completion/src/providers/entry_type.rs
+2024/05/01 | 11103 | support/texlab/crates/parser/src/bibtex.rs
+2024/05/01 | 1095 | support/texlab/crates/hover/src/string_ref.rs
+2024/05/01 | 1077 | support/texlab/crates/definition/src/string_ref.rs
+2024/05/01 | 1077 | support/texlab/crates/base-db/src/deps/project.rs
+2024/05/01 | 1057 | support/texlab/crates/hover/src/lib.rs
+2024/05/01 | 105072 | support/texlab/crates/parser/src/latex/tests.rs
+2024/05/01 | 1046 | support/texlab/crates/rename/src/lib.rs
+2024/05/01 | 1033 | support/texlab/crates/completion/benches/bench_main.rs
+2024/05/01 | 1025 | support/texlab/crates/completion/src/util/matchers.rs
+2024/05/01 | 102253 | macros/latex/contrib/easybook/easybook.tex
2024/04/30 | 9855 | macros/generic/markdown/examples/optex.tex
+2024/04/30 | 973 | macros/latex/contrib/mathgreeks/README.md
2024/04/30 | 970881 | macros/generic/markdown/markdown.dtx
2024/04/30 | 908694 | macros/latex/required/l3backend.zip
2024/04/30 | 875516 | systems/texlive/tlnet/archive/piton.doc.r71132.tar.xz
2024/04/30 | 817152 | systems/texlive/tlnet/archive/tkz-elements.doc.r71130.tar.xz
2024/04/30 | 75 | macros/generic/markdown/examples/scientists.csv
2024/04/30 | 751192 | systems/texlive/tlnet/archive/bithesis.doc.r71133.tar.xz
-2024/04/30 | 7160 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2024/04/30 | 667248 | systems/texlive/tlnet/archive/easybook.doc.r71125.tar.xz
2024/04/30 | 6600 | systems/texlive/tlnet/archive/fontscale.r71126.tar.xz
2024/04/30 | 640 | systems/texlive/tlnet/archive/collection-games.r71129.tar.xz
-2024/04/30 | 5751626 | systems/texlive/tlnet/install-tl-unx.tar.gz
2024/04/30 | 57044 | systems/texlive/tlnet/archive/piton.source.r71132.tar.xz
2024/04/30 | 563504 | systems/texlive/tlnet/archive/jsonparse.doc.r71127.tar.xz
2024/04/30 | 494 | macros/latex/contrib/nmbib/README
-2024/04/30 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2024/04/30 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2024/04/30 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2024/04/30 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2024/04/30 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2024/04/30 | 488292 | macros/latex/contrib/nmbib.zip
+2024/04/30 | 48008 | macros/latex/contrib/mathgreeks/mathgreeks.dtx
2024/04/30 | 4772 | systems/texlive/tlnet/archive/jsonparse.r71127.tar.xz
2024/04/30 | 4681 | macros/generic/markdown/markdown.css
2024/04/30 | 462284 | systems/texlive/tlnet/archive/rpgicons.doc.r71129.tar.xz
2024/04/30 | 45803 | macros/generic/markdown/CHANGES.md
2024/04/30 | 4405 | macros/generic/markdown/docstrip.cfg
-2024/04/30 | 434884 | systems/texlive/tlnet/archive/texlive-scripts.doc.r71135.tar.xz
2024/04/30 | 43473 | macros/latex/contrib/nmbib/nmbib.dtx
2024/04/30 | 42280 | systems/texlive/tlnet/archive/tkz-euclide.r71131.tar.xz
-2024/04/30 | 4120725 | biblio/ctan-bibdata.zip
2024/04/30 | 385624 | systems/texlive/tlnet/archive/profmaquette.doc.r71128.tar.xz
2024/04/30 | 3832 | macros/generic/markdown/examples/example.md
-2024/04/30 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2024/04/30 | 368243 | macros/latex/contrib/nmbib/nmbib.pdf
-2024/04/30 | 34426289 | systems/texlive/tlnet/install-tl.zip
2024/04/30 | 31 | macros/generic/markdown/VERSION
2024/04/30 | 2928 | systems/texlive/tlnet/archive/ruscap.r71123.tar.xz
2024/04/30 | 29248 | systems/texlive/tlnet/archive/epstopdf.doc.r71134.tar.xz
-2024/04/30 | 2863840 | biblio/ctan-bibdata/ctan.bib
-2024/04/30 | 27718774 | systems/texlive/tlnet/install-tl-windows.exe
2024/04/30 | 27488 | systems/texlive/tlnet/archive/bithesis.source.r71133.tar.xz
2024/04/30 | 2577 | macros/latex/contrib/nmbib/nmbibtex.1
-2024/04/30 | 2566316 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2024/04/30 | 24912 | systems/texlive/tlnet/archive/profmaquette.r71128.tar.xz
2024/04/30 | 2416 | systems/texlive/tlnet/archive/beamertheme-tcolorbox.r71124.tar.xz
2024/04/30 | 22881 | macros/generic/markdown/libraries/markdown-tinyyaml.lua
@@ -52,26 +314,20 @@
2024/04/30 | 2040 | systems/texlive/tlnet/archive/collection-fontsextra.r71123.tar.xz
2024/04/30 | 2037 | macros/generic/markdown/examples/latex-luatex.tex
2024/04/30 | 19864 | systems/texlive/tlnet/archive/piton.r71132.tar.xz
-2024/04/30 | 19435199 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2024/04/30 | 17852 | systems/texlive/tlnet/archive/easybook.r71125.tar.xz
2024/04/30 | 17780 | systems/texlive/tlnet/archive/rpgicons.r71129.tar.xz
2024/04/30 | 17740 | systems/texlive/tlnet/archive/easybook.source.r71125.tar.xz
2024/04/30 | 173452 | systems/texlive/tlnet/archive/beamertheme-tcolorbox.doc.r71124.tar.xz
-2024/04/30 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2024/04/30 | 1650 | macros/generic/markdown/markdown.ins
+2024/04/30 | 1650679 | macros/latex/contrib/mathgreeks/mathgreeks.pdf
2024/04/30 | 1611830 | install/macros/generic/markdown.tds.zip
-2024/04/30 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
2024/04/30 | 1534 | macros/latex/contrib/nmbib/Makefile
-2024/04/30 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2024/04/30 | 1514264 | macros/generic/markdown.zip
2024/04/30 | 14884 | systems/texlive/tlnet/archive/epstopdf.r71134.tar.xz
-2024/04/30 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2024/04/30 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2024/04/30 | 14104136 | macros/latex/required/l3kernel.zip
2024/04/30 | 140951 | macros/generic/markdown/markdown.png
2024/04/30 | 123584 | systems/texlive/tlnet/archive/fontscale.doc.r71126.tar.xz
2024/04/30 | 1159976 | systems/texlive/tlnet/archive/tkz-euclide.doc.r71131.tar.xz
-2024/04/30 | 114164 | systems/texlive/tlnet/archive/texlive-scripts.r71135.tar.xz
2024/04/30 | 1116505 | macros/generic/markdown/markdown.pdf
2024/04/30 | 10752 | systems/texlive/tlnet/archive/ruscap.doc.r71123.tar.xz
2024/04/30 | 1037601 | macros/generic/markdown/markdown.html
@@ -136,7 +392,6 @@
2024/04/29 | 707227 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
2024/04/29 | 698640 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
2024/04/29 | 69672 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2024/04/29 | 688576 | macros/latex/contrib/easybook.zip
2024/04/29 | 67935 | systems/win32/miktex/tm/packages/esindex__doc.tar.lzma
2024/04/29 | 67447 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
2024/04/29 | 6690 | systems/win32/miktex/tm/packages/esindex__source.tar.lzma
@@ -429,7 +684,6 @@
2024/04/28 | 8346 | support/latexindent/LatexIndent/Environment.pm
2024/04/28 | 8313 | indexing/makeindexk/c-auto.in
2024/04/28 | 824 | fonts/ruscap/quo-usque-tandem.tex
-2024/04/28 | 81999 | macros/latex/contrib/easybook/easybook.dtx
2024/04/28 | 8190 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/1807312ebea5621aee9385c6b7807f5536960db9a9933aeede02876972767ef7-primary.xml.gz
2024/04/28 | 813 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
2024/04/28 | 8080 | dviware/dvidvi/config.h.in
@@ -454,7 +708,6 @@
2024/04/28 | 6654 | macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex
2024/04/28 | 6620 | support/latexindent/LatexIndent/OptionalArgument.pm
2024/04/28 | 6616 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
-2024/04/28 | 640970 | macros/latex/contrib/easybook/easybook.pdf
2024/04/28 | 6391 | support/latexindent/LatexIndent/Else.pm
2024/04/28 | 6353 | macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty
2024/04/28 | 6285 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/ca865dd3f0d4a4aa142192bc753e1fd853df4bb246a9be02d1eb1d65de6b8eed-filelists.xml.gz
@@ -636,7 +889,6 @@
2024/04/28 | 10980 | macros/latex/contrib/esindex/esindex.sty
2024/04/28 | 10648 | support/latexindent/LatexIndent/Command.pm
2024/04/28 | 104057 | macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.zip
-2024/04/28 | 102253 | macros/latex/contrib/easybook/easybook.tex
2024/04/28 | 1018 | systems/win32/miktex/setup/rpm/fedora/39/repodata/34476d93085a47247dfa95dfd6b6a580cd4c4a78324b8add4f6d22e1c966fabc-other.sqlite.bz2
2024/04/27 | 959 | macros/luatex/latex/novel/lualatex/novel-JC200103.clo
2024/04/27 | 9581272 | systems/win32/miktex/tm/packages/profcollege__doc.tar.lzma
@@ -1077,6 +1329,7 @@
2024/04/26 | 21452 | macros/latex/contrib/profcollege/latex/PfCFactorisation.tex
2024/04/26 | 2081 | macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
2024/04/26 | 2072 | macros/latex/contrib/profcollege/latex/PfCBonSortie.tex
+2024/04/26 | 2054 | macros/latex/contrib/mathgreeks/mathgreeks.ins
2024/04/26 | 205196 | systems/texlive/tlnet/archive/tikzmarmots.doc.r71076.tar.xz
2024/04/26 | 20355 | macros/latex/contrib/profcollege/latex/PfCRose.tex
2024/04/26 | 19160 | macros/latex/contrib/profcollege/latex/PfCPattern.tex
@@ -1158,8 +1411,6 @@
2024/04/25 | 6553 | graphics/pgf/contrib/tikzmarmots/tikzmarmots-v1.sty
2024/04/25 | 652342 | info/biblio/printing-history.bib
2024/04/25 | 6485 | graphics/pgf/contrib/jigsaw/jigsaw-doc.tex
-2024/04/25 | 6474 | macros/luatex/generic/luamplib/test-luamplib-latex.tex
-2024/04/25 | 628771 | support/TeX4ht/source/tex4ht-html4.tex
2024/04/25 | 6260 | graphics/pgf/contrib/jigsaw/jigsaw-doc-settings.sty
2024/04/25 | 6176 | graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc-settings.sty
2024/04/25 | 602 | graphics/pgf/contrib/tikzmarmots/tikzlibrarymarmots.code.tex
@@ -1172,21 +1423,14 @@
2024/04/25 | 4310552 | systems/texlive/tlnet/archive/junicode.doc.r71060.tar.xz
2024/04/25 | 3928 | systems/texlive/tlnet/archive/spbmark.r71067.tar.xz
2024/04/25 | 38 | graphics/pgf/contrib/jigsaw/DEPENDS.txt
-2024/04/25 | 3896 | macros/luatex/generic/luamplib/test-luamplib-plain.tex
2024/04/25 | 3680 | graphics/pgf/contrib/jigsaw/jigsaw.sty
2024/04/25 | 3481 | info/biblio/sgml.ltx
2024/04/25 | 309812 | systems/texlive/tlnet/archive/ibarra.doc.r71059.tar.xz
2024/04/25 | 2876 | info/biblio/printing-history.ltx
2024/04/25 | 2848 | info/biblio/typeset.ltx
-2024/04/25 | 2790 | macros/luatex/generic/luamplib/Makefile
2024/04/25 | 2687329 | info/biblio/sgml.bib
-2024/04/25 | 252181 | support/TeX4ht/source/ChangeLog
-2024/04/25 | 227049 | install/macros/luatex/generic/luamplib.tds.zip
-2024/04/25 | 209327 | macros/luatex/generic/luamplib.zip
2024/04/25 | 208537 | graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.pdf
2024/04/25 | 207622 | graphics/pgf/contrib/tikzmarmots.zip
-2024/04/25 | 2058 | macros/luatex/generic/luamplib/README
-2024/04/25 | 170094 | macros/luatex/generic/luamplib/luamplib.pdf
2024/04/25 | 15 | graphics/pgf/contrib/tikzmarmots/DEPENDS.txt
2024/04/25 | 158028 | systems/texlive/tlnet/archive/cormorantgaramond.doc.r71057.tar.xz
2024/04/25 | 1527480 | systems/texlive/tlnet/archive/libertine.doc.r71061.tar.xz
@@ -1195,80 +1439,10 @@
2024/04/25 | 144480 | systems/texlive/tlnet/archive/exercisesheets.doc.r71063.tar.xz
2024/04/25 | 13898536 | systems/texlive/tlnet/archive/libertine.r71061.tar.xz
2024/04/25 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r71072.tar.xz
-2024/04/25 | 13519 | macros/luatex/generic/luamplib/NEWS
2024/04/25 | 1303 | graphics/pgf/contrib/tikzmarmots/README.md
2024/04/25 | 1285832 | systems/texlive/tlnet/archive/siunitx.doc.r71066.tar.xz
2024/04/25 | 12520 | systems/texlive/tlnet/archive/exercisesheets.r71063.tar.xz
2024/04/25 | 123104 | systems/texlive/tlnet/archive/siunitx.source.r71066.tar.xz
2024/04/25 | 1204396 | info/biblio/typeset.bib
-2024/04/25 | 1190315 | support/TeX4ht/source/tex4ht-4ht.tex
2024/04/25 | 1178 | graphics/pgf/contrib/jigsaw/README.md
2024/04/25 | 1140668 | systems/texlive/tlnet/archive/tex4ht.r71072.tar.xz
-2024/04/25 | 111628 | macros/luatex/generic/luamplib/luamplib.dtx
-2024/04/24 | 95175 | macros/latex/contrib/spbmark/spbmark.pdf
-2024/04/24 | 9443 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
-2024/04/24 | 90816 | systems/texlive/tlnet/archive/nicematrix.source.r71053.tar.xz
-2024/04/24 | 902271 | macros/latex/contrib/fancyhdr.zip
-2024/04/24 | 8856 | macros/latex/contrib/siunitx/siunitx-command.dtx
-2024/04/24 | 80821 | macros/latex/contrib/siunitx/CHANGELOG.md
-2024/04/24 | 784 | systems/texlive/tlnet/archive/visualfaq-fr.r71053.tar.xz
-2024/04/24 | 7751 | macros/latex/contrib/exercisesheets/examples/exshexample.tex
-2024/04/24 | 750 | support/texshop/README.txt
-2024/04/24 | 703738 | macros/latex/contrib/siunitx/siunitx.pdf
-2024/04/24 | 69594467 | support/texshop/texshop533.zip
-2024/04/24 | 683 | macros/latex/contrib/exercisesheets/README
-2024/04/24 | 680076 | systems/texlive/tlnet/archive/atkinson.doc.r71048.tar.xz
-2024/04/24 | 645251 | macros/latex/contrib/siunitx/siunitx-code.pdf
-2024/04/24 | 62270 | macros/latex/contrib/exercisesheets/exercisesheets.sty
-2024/04/24 | 615932 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r71053.tar.xz
-2024/04/24 | 5816 | macros/latex/contrib/siunitx/siunitx-locale.dtx
-2024/04/24 | 55713 | macros/latex/contrib/siunitx/siunitx-table.dtx
-2024/04/24 | 48364 | macros/latex/contrib/exercisesheets/exercisesheets-doc.tex
-2024/04/24 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
-2024/04/24 | 4717868 | systems/texlive/tlnet/archive/visualfaq-fr.doc.r71053.tar.xz
-2024/04/24 | 4574 | support/texshop/texshop533.html
-2024/04/24 | 43854 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2024/04/24 | 4352 | systems/texlive/tlnet/archive/luacensor.r71053.tar.xz
-2024/04/24 | 42040 | systems/texlive/tlnet/archive/nicematrix.r71053.tar.xz
-2024/04/24 | 39313 | macros/latex/contrib/siunitx/siunitx-complex.dtx
-2024/04/24 | 37988 | macros/latex/contrib/siunitx/siunitx-print.dtx
-2024/04/24 | 3682 | macros/latex/contrib/siunitx/siunitx.ins
-2024/04/24 | 34652 | systems/texlive/tlnet/archive/gelasio.doc.r71047.tar.xz
-2024/04/24 | 337124 | systems/texlive/tlnet/archive/atkinson.r71048.tar.xz
-2024/04/24 | 325292 | systems/texlive/tlnet/archive/csquotes.doc.r71053.tar.xz
-2024/04/24 | 31797 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
-2024/04/24 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
-2024/04/24 | 3032 | systems/texlive/tlnet/archive/haranoaji.doc.r71053.tar.xz
-2024/04/24 | 2941 | macros/latex/contrib/siunitx/siunitx-binary.dtx
-2024/04/24 | 2894 | macros/latex/contrib/exercisesheets/examples/exshexample-embedded.tex
-2024/04/24 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
-2024/04/24 | 272 | systems/texlive/tlnet/archive/texlive-en.r71042.tar.xz
-2024/04/24 | 2621 | macros/latex/contrib/siunitx/siunitx-code.tex
-2024/04/24 | 26182876 | systems/texlive/tlnet/archive/haranoaji.r71053.tar.xz
-2024/04/24 | 22217 | macros/latex/contrib/siunitx/siunitx.dtx
-2024/04/24 | 20580217 | fonts/libertine.zip
-2024/04/24 | 19015 | macros/latex/contrib/spbmark/spbmark.tex
-2024/04/24 | 1894240 | systems/texlive/tlnet/archive/texlive-en.doc.r71042.tar.xz
-2024/04/24 | 18426 | macros/latex/contrib/siunitx/siunitx-angle.dtx
-2024/04/24 | 18152 | systems/texlive/tlnet/archive/csquotes.r71053.tar.xz
-2024/04/24 | 1790216 | fonts/ibarra.zip
-2024/04/24 | 17550 | macros/latex/contrib/spbmark/spbmark.sty
-2024/04/24 | 173 | macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex1.tex
-2024/04/24 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
-2024/04/24 | 168519 | macros/latex/contrib/siunitx/siunitx.tex
-2024/04/24 | 164096 | systems/texlive/tlnet/archive/luacensor.doc.r71053.tar.xz
-2024/04/24 | 163202 | macros/latex/contrib/siunitx/siunitx-number.dtx
-2024/04/24 | 159160 | macros/latex/contrib/exercisesheets.zip
-2024/04/24 | 1590764 | install/macros/latex/contrib/siunitx.tds.zip
-2024/04/24 | 1565068 | systems/texlive/tlnet/archive/gelasio.r71047.tar.xz
-2024/04/24 | 1543185 | macros/latex/contrib/siunitx.zip
-2024/04/24 | 15296 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
-2024/04/24 | 1349156 | systems/texlive/tlnet/archive/nicematrix.doc.r71053.tar.xz
-2024/04/24 | 131935734 | fonts/junicode.zip
-2024/04/24 | 128498 | macros/latex/contrib/exercisesheets/exercisesheets-doc.pdf
-2024/04/24 | 12748 | systems/texlive/tlnet/archive/commutative-diagrams.r71053.tar.xz
-2024/04/24 | 123 | macros/latex/contrib/exercisesheets/examples/exercises/exshexample-ex2.lua
-2024/04/24 | 1166 | macros/latex/contrib/siunitx/README.md
-2024/04/24 | 11252 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
-2024/04/24 | 104102 | macros/latex/contrib/siunitx/siunitx-unit.dtx
-2024/04/24 | 102486 | macros/latex/contrib/spbmark.zip
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index ec81a57f46..19bb749c85 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 01-05-2024, 02:00:03
+%% created at 02-05-2024, 02:00:04
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -5680,8 +5680,8 @@
title = {The \texttt{baskervaldx} package},
subtitle = {Extension and modification of BaskervaldADF with \LaTeX{} support},
author = {Michael Sharpe},
- date = {2024-01-01},
- version = {1.077},
+ date = {2024-05-01},
+ version = {1.078},
license = {gpl2+,lppl1.3},
mirror = {https://mirror.ctan.org/fonts/baskervaldx},
url = {https://ctan.org/pkg/baskervaldx},
@@ -20838,8 +20838,8 @@
title = {The \texttt{easybook} package},
subtitle = {Easily typesetting Chinese theses or books},
author = {Qu Yi},
- date = {2024-04-29},
- version = {2024bc},
+ date = {2024-05-01},
+ version = {2024be},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/easybook},
url = {https://ctan.org/pkg/easybook},
@@ -42561,8 +42561,8 @@
title = {The \texttt{luamplib} package},
subtitle = {Use LuaTeX’s built-in MetaPost interpreter},
author = {Hans Hagen and Taco Hoekwater and Élie Roux and Manuel Pégourié-Gonnard and Philipp Gesang and Dohyun Kim},
- date = {2024-04-25},
- version = {2.28.2},
+ date = {2024-05-01},
+ version = {2.29.0},
license = {gpl2},
mirror = {https://mirror.ctan.org/macros/luatex/generic/luamplib},
url = {https://ctan.org/pkg/luamplib},
@@ -44268,6 +44268,17 @@
url = {https://ctan.org/pkg/mathgifg},
}
+@manual{ctan-mathgreeks,
+ title = {The \texttt{mathgreeks} package},
+ subtitle = {Use Greek letters fonts in math mode},
+ author = {Antoine Missier},
+ date = {2024-05-01},
+ version = {1.0},
+ license = {lppl1.3c},
+ mirror = {https://mirror.ctan.org/macros/latex/contrib/mathgreeks},
+ url = {https://ctan.org/pkg/mathgreeks},
+}
+
@manual{ctan-mathinst,
title = {The \texttt{mathinst} package},
subtitle = {Merge font families to create mathematical font sets},
@@ -51227,8 +51238,8 @@
title = {The \texttt{OSDA} package},
subtitle = {Commands for Proceedings of the Workshop on Open-Source Design Automation},
author = {Christian Krieg},
- date = {2023-04-08},
- version = {1.2.0},
+ date = {2024-05-01},
+ version = {1.4.0},
license = {lppl1.3,other-nonfree},
mirror = {https://mirror.ctan.org/macros/latex/contrib/osda},
url = {https://ctan.org/pkg/osda},
@@ -69236,9 +69247,9 @@
@manual{ctan-texlab,
title = {The \texttt{TeXLab} package},
subtitle = {LaTeX Language Server},
- author = {Eric Förster},
- date = {2024-03-28},
- version = {5.14.1},
+ author = {Eric Förster and Patrick Förster},
+ date = {2024-05-01},
+ version = {5.16.0},
license = {gpl3},
mirror = {https://mirror.ctan.org/support/texlab},
url = {https://ctan.org/pkg/texlab},
diff --git a/fonts/baskervaldx/README b/fonts/baskervaldx/README
index b299e985a4..1a3a5e2f65 100644
--- a/fonts/baskervaldx/README
+++ b/fonts/baskervaldx/README
@@ -12,7 +12,10 @@ NOTICE.txt;
http://www.ctan.org/license/lppl1.3
for the details of that license.
-Current version: 1.077, 2024/01/01
+Current version: 1.078, 2024/04/30
+
+Changes in version 1.078
+Added text items to c2sc table and removed symbols from smcp.
Changes in version 1.077
Corrected a typo in the last line of Baskervaldx.map. (Thanks Clerk Ma.)
diff --git a/fonts/baskervaldx/opentype/Baskervaldx-Bol.otf b/fonts/baskervaldx/opentype/Baskervaldx-Bol.otf
index c1bd79b794..2fe73094bc 100644
--- a/fonts/baskervaldx/opentype/Baskervaldx-Bol.otf
+++ b/fonts/baskervaldx/opentype/Baskervaldx-Bol.otf
Binary files differ
diff --git a/fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf b/fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf
index a5444ece1a..cb4e3f6bbc 100644
--- a/fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf
+++ b/fonts/baskervaldx/opentype/Baskervaldx-BolIta.otf
Binary files differ
diff --git a/fonts/baskervaldx/opentype/Baskervaldx-Ita.otf b/fonts/baskervaldx/opentype/Baskervaldx-Ita.otf
index 95afc3c694..5aea9af0ec 100644
--- a/fonts/baskervaldx/opentype/Baskervaldx-Ita.otf
+++ b/fonts/baskervaldx/opentype/Baskervaldx-Ita.otf
Binary files differ
diff --git a/fonts/baskervaldx/opentype/Baskervaldx-Reg.otf b/fonts/baskervaldx/opentype/Baskervaldx-Reg.otf
index f90531df7e..ed00ad3385 100644
--- a/fonts/baskervaldx/opentype/Baskervaldx-Reg.otf
+++ b/fonts/baskervaldx/opentype/Baskervaldx-Reg.otf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 14f666ba70..fcfd0a1e77 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -14,8 +14,7 @@
% This work has the LPPL maintenance status `maintained'.
%<*class>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/04/28}{2024bc}
+\ProvidesExplClass{easybook}{2024/05/01}{2024be}
{Easily typesetting Chinese theses or books}
\bool_new:N \l__eb_compile_draft_bool
@@ -47,7 +46,12 @@
unknown .code:n = \clist_gput_right:NV \g__eb_doc_options_clist \CurrentOption
}
-\ProcessKeysOptions{easybook}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybook] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybook}
+ }
\PassOptionsToPackage{no-math,quiet,CJKmath}{xeCJK}
\eb_put_ctexbook:V \g__eb_doc_options_clist
\LoadClass[UTF8]{ctexbook}
@@ -296,8 +300,8 @@
%</class>
%<*package>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/04/28}{2024bc}
+\RequirePackage{etoolbox}
+\ProvidesExplPackage{easybase}{2024/05/01}{2024be}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -421,7 +425,12 @@
\PassOptionsToPackage{list = off}{bicaption}
\PassOptionsToPackage{svgnames}{xcolor}
\PassOptionsToPackage{many}{tcolorbox}
-\ProcessKeysOptions{easybase}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybase] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybase}
+ }
\PassOptionsToPackage{\g__eb_ctex_options_clist}{ctex}
\IfClassLoadedTF{ctexbook}{}
{
@@ -1149,14 +1158,15 @@
{
\bool_if:NTF \l__eb_normal_footnote_bool
{
- \bool_if:NT \l__eb_fnmarktext_format_match_bool
+ \bool_if:NTF \l__eb_fnmarktext_format_match_bool
{ \tl_clear:N \l__eb_fnmarktext_format_tl }
+ { \spbset{spcmd = { }} }
}
{
- \bool_if:NT \l__eb_fncustom_format_match_bool
+ \bool_if:NTF \l__eb_fncustom_format_match_bool
{ \tl_clear:N \l__eb_fnmarktext_format_tl }
+ { \spbset{spcmd = { }} }
}
- \bool_if:NF \l__eb_fnmarktext_format_match_bool { \spbset{spcmd = { }} }
\eb@font@footnote
}
\cs_new_protected:Npn \defupfntmark #1
@@ -1727,7 +1737,7 @@
\ifbool{@filesw}
{
\tl_if_exist:cF { tf@#1 }
- {\iow_new:c { tf@#1 }\iow_open:cn { tf@#1 } { \jobname.#1 }}
+ { \iow_new:c { tf@#1 }\iow_open:cn { tf@#1 } { \jobname.#1 } }
}
{}
}
@@ -2527,7 +2537,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/28}{2024bc}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/05/01}{2024be}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index e2270fd55d..7ba31f65c1 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index 20a5a1233a..7820c2a137 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024bc,
- date = 2024/04/28,
+ version = v2024be,
+ date = 2024/05/01,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
diff --git a/macros/latex/contrib/mathgreeks/README.md b/macros/latex/contrib/mathgreeks/README.md
new file mode 100644
index 0000000000..971fa77dc7
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/README.md
@@ -0,0 +1,30 @@
+# Math Greek letters - The mathgreeks package
+
+
+## Presentation
+
+The purpose of this package is to provide access to numerous Greek letter fonts
+for math mode, without altering other mathematical characters and symbols
+and without loading whole extensions that provide these fonts.
+Moreover, the chosen font or shape can be changed dynamically throughout the document.
+
+
+## Installation
+
+- run LaTeX on mathgreeks.ins, you obtain the file mathgreeks.sty;
+- if then you run LuaLaTeX on mathgreeks.dtx you get the file mathgreeks.pdf which is also in the archive;
+- if you run pdfLaTex on mathgreeks.dtx you get a shorter version of this pdf file without the examples using fontspec or unicode-math;
+- put the files mathgreeks.sty and mathgreeks.pdf in your TeX Directory Structure.
+
+
+## Author
+
+Antoine Missier
+
+Email: antoine.missier@ac-toulouse.fr
+
+
+## License
+
+Released under the LaTeX Project Public License v1.3 or later.
+See http://www.latex-project.org/lppl.txt
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.dtx b/macros/latex/contrib/mathgreeks/mathgreeks.dtx
new file mode 100644
index 0000000000..5cdb03dda1
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.dtx
@@ -0,0 +1,1309 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%
+% This file 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
+% 2005/12/01 or later.
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{mathgreeks.dtx}
+%</driver>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{mathgreeks}
+ [2024/04/30 v1.0 .dtx Math Greek letters]
+%</package>
+%<*driver>
+\documentclass[11pt]{article}
+%\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+\usepackage{doc}
+\usepackage{geometry}
+\usepackage[savegreeks,otherfonts]{mathgreeks}
+\usepackage{sectsty}
+\usepackage{xcolor}
+\usepackage{spacingtricks}
+\usepackage{metalogo}
+%\usepackage{supertabular}
+\usepackage{tabls}
+\usepackage{multirow}
+\usepackage{ifluatex}
+\ifluatex
+ \usepackage{unicode-math}
+ \setmainfont{XCharter}
+\else
+ \usepackage{charter}
+\fi
+\geometry{scale=0.73,vmarginratio=3:4,heightrounded}
+\MakeShortVerb{"}
+\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
+\allsectionsfont{\color{darkbrown}}
+\newcommand\bs{\textbackslash}
+\DisableCrossrefs
+%\CodelineIndex
+%\RecordChanges
+\OnlyDescription
+\usepackage{hyperref}
+\title{The \textsf{mathgreeks} package}
+\author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
+\date{\filedate, \fileversion}
+\hypersetup{%
+ colorlinks,
+ linkcolor=blue,
+ citecolor=red,
+ pdftitle={mathgreeks},
+ pdfsubject={LaTeX package},
+ pdfauthor={Antoine Missier}
+}
+
+\begin{document}
+\DocInput{mathgreeks.dtx}
+%\PrintChanges
+%\PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1060}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v1.0}{2024/04/30}{Initial version}
+%
+% \GetFileInfo{mathgreeks.sty}
+%
+% \maketitle
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% The purpose of this package is to provide access to numerous Greek letter fonts
+% for math mode, without altering other mathematical characters and symbols
+% and without loading whole extensions that provide these fonts.
+%
+% The commands "\italpha", "\itbeta"\ldots\ produce the italic forms of the chosen font,
+% and "\upalpha", "\upbeta" \ldots\ produce the upright forms.
+% Style options allow choosing between italic or upright forms for the basic commands
+% "\alpha", "\beta"\ldots
+% Only letters whose glyph differs from the corresponding Roman letter
+% will be defined this way.
+% Therefore, the package does not provide a command "\omicron",
+% whose letter is identical to the Roman `o', and only a few uppercase letters are defined:
+% "\Gamma", "\Delta", "\Theta"\ldots
+%
+% \medskip
+% An ISO recommendation, rarely followed, is to typeset uppercase
+% Greek letters in italic shape, as for other variables~\cite{ICTNS}.
+% This is automatically achieved, for some particular fonts, with packages
+% such as \textsf{fixmath} by Walter Schmidt~\cite{FIXM},
+% \mbox{\textsf{isomath}} by Günter Milde~\cite{ISOM}
+% or \textsf{pm-isomath} by Claudio Beccari~\cite{PMISO} and optionally with some others
+% (such as \textsf{mathpazo} or \textsf{mathptmx} with the option \texttt{slantedGreek}).
+% When running through \LuaLaTeX\ or \XeLaTeX\ you can also get this result
+% with the option \mbox{\texttt{math-style=ISO}} provided
+% by the \textsf{unicode-math} package~\cite{UNIC}.
+%
+% Furthermore there are several packages that provide the uppercase Greek letters
+% in italic and have also options to typeset the lowercase Greek
+% letters in upright shape.
+% Notably, let us mention
+% \mbox{\textsf{mathdesign}}~\cite{DESIGN},
+% \mbox{\textsf{kpfonts}}~\cite{KPF},
+% \mbox{\textsf{fourier}}~\cite{FOUR}, but also
+% \mbox{\textsf{pxgreeks}} (using \textsf{pxfonts}~\cite{PX}), \mbox{\textsf{txgreeks}}
+% (using \textsf{txfonts}~\cite{TX}),
+% \mbox{\textsf{libertinust1math}}~\cite{LIB}, \mbox{\textsf{libgreek}}, etc.
+% A special mention goes to \textsf{lgrmath} of Jean-François Burnol~\cite{LGR}
+% which allows the use of any Greek LGR-encoded font in math mode,
+% an idea taken up in \textsf{mathgreeks}.
+% Also note \textsf{newtxmath}~\cite{NTX} which has several font options.
+% For upright lowercase letters, we have the nice \textsf{upgreek}~\cite{GREEK} package.
+%
+% \medskip
+% The interest of \textsf{mathgreeks} lies in being able to choose the Greek letters font
+% from one of these packages or from a TrueType or OpenType font installed on your computer.
+% The package sets Greek letters in the desired font and shape
+% and enables to change font or shape dynamically within the document.
+%
+% \section{Options and settings}
+%
+% \subsection{Package options}
+%
+% When calling the package, there are three types of options:
+% \begin{itemize}
+% \item Font options,
+% \item Shape options (the style),
+% \item Additional options.
+% \end{itemize}
+% These options use the `\texttt{key=value}' mechanism.
+% When a default value is set, the key can be used without specifying a value
+% (which will then be the default value).
+% Some keys represent booleans with the default value being `\texttt{true}'.
+%
+% \bigskip
+% The first table, in two parts, presents the different keys corresponding to font options,
+% the list of possible values (complete when it is reduced).
+% The default value is indicated in bold, the second part consist in boolean options.
+% Results are presented in section~\ref{examples}.
+%
+% \begin{table}[h]
+% \begin{center}\ttfamily
+% \begin{tabular}{ll}
+% \hline
+% \vstrut{2ex}\normalfont{Option} & \normalfont{Values} \\
+% \hline
+% lgrmath & Alegreya-LF, Cochineal-LF, \textbf{fcm}\ldots \\
+% fontspec & FreeSerif, \textbf{GFS Didot}, Cambria\ldots \\
+% unicode-math & \textbf{Latin Modern Math}, STIX Two Math\ldots \\
+% upgreek & Euler, \textbf{Symbol}, Symbolsmallscale \\
+% mathdesign & Utopia, Garamond, \textbf{Charter} \\
+% kpfonts & \textbf{normal}, light \\
+% \hline
+% \end{tabular}
+% \hspace{1cm}
+% \begin{tabular}{l}
+% \hline
+% \vstrut{2ex}\normalfont{Booleans} \\
+% \hline
+% fourier \\
+% pxfonts \\
+% txfonts \\
+% libertinus \\
+% concrete \\
+% cmbright \\
+% \hline
+% \end{tabular}
+% \end{center}
+% \caption{font options\label{table:font}}
+% \end{table}
+% The \texttt{fontspec} and \texttt{unicode-math} options require loading
+% the corresponding packages, and these can only work when running through
+% \LuaLaTeX\ (or \XeLaTeX).
+% The fontspec option allows for the use of most TrueType or OpenType
+% fonts installed on your computer,
+% those that have Greek letters.
+%
+% When calling "\boldmath" (outside the math environment), you get the letters in bold face,
+% but the command "\mathbf" doesn't work here.
+%
+% \bigskip
+% The second table below presents the shape options. If the shape option
+% is not specified, the italic shape is chosen by default, meaning that the commands
+% "\alpha", "\beta", \ldots, "\Delta", "\Gamma"\ldots will produce the same result
+% as the corresponding "\it"\meta{letter} commands.
+%
+% \begin{table}[h]
+% \begin{center}
+% \begin{tabular}{ll}
+% \hline
+% \vstrut{2ex}\normalfont{Option} & \normalfont{Description} \\
+% \hline
+% \texttt{greekup} & lowercase letters in upright shape \\
+% \texttt{Greekup} & uppercase letters in upright shape \\
+% \texttt{TeX} & lowercase=italic, uppercase=upright \\
+% \texttt{ISO} & lowercase=italic, uppercase=italic \\
+% \texttt{upright} & lowercase=upright, uppercase=upright \\
+% \texttt{style} & possible values: \texttt{TeX}, \texttt{ISO}, \texttt{upright} \\
+% \hline
+% \end{tabular}
+% \end{center}
+% \caption{shape options\label{table:shape}}
+% \end{table}
+%
+% \begin{itemize}
+% \item Except for \texttt{style}, all these options are booleans.
+% \item The \texttt{Greekup} option est initialized to \texttt{true} (corresponding
+% to the \texttt{TeX} style).
+% \item The \texttt{style=ISO} option produces the same result as the simple
+% \texttt{ISO} option, and the same applies to the other two styles
+% (\texttt{TeX}, \texttt{upright}).
+% \item To get lowercase letters in upright shape and uppercase letters in italic,
+% activate \begin{center}\texttt{greekup=true,Greekup=false}.\end{center}
+% \end{itemize}
+%
+% \smallskip
+% The following list presents the additional options, which are also booleans:
+% \begin{description}
+% \item[\texttt{savegreeks}] Saves the letters corresponding to the original commands
+% "\alpha", "\beta"\ldots so that they remain accessible through the commands
+% "\backalpha", "\backbeta"\ldots
+% \item[\texttt{otherfonts}] Allows dynamic font switching (see next section)
+% for later use of \texttt{lgrmath}, \texttt{fourier}, \texttt{libertinus} or \texttt{upgreek}.
+% \item[\texttt{lowercase}] This option is initialized to \texttt{true};
+% \texttt{lowercase=false} allows keeping the original lowercase Greek letters
+% without redefining the commands "\alpha", "\beta"\ldots
+% \item[\texttt{uppercase}] This option is initialized to \texttt{true};
+% \texttt{uppercase=false} allows keeping the original uppercase Greek letters
+% without redefining the commands "\Gamma", "\Delta"\ldots
+% \end{description}
+%
+% \subsection{Dynamic settings commands}
+%
+% There are two command for dynamic settings:
+% \begin{description}
+% \item[] "\setmathgreeks"
+% This command takes a mandatory parameter which is a list of
+% `\texttt{key=value}' settings among the shape options presented
+% in table~\ref{table:shape} (the other options are not usable in this command).
+% This allows modifying these settings in the body of the document,
+% with a global effect, or local if the command is called in an environment
+% or a group (delimited by braces).
+%
+% \item[] "\mathgreeksfont"
+% This command allows modifying the font of Greek letters throughout the document,
+% with a global or local effect.
+% The possible options fall into two categories:
+% \begin{center}
+% \texttt{fontspec}, \texttt{unicode-math}, \\
+% \texttt{enc}, \texttt{fam}, \texttt{series}, \texttt{shape}.
+% \end{center}
+% The \texttt{fontspec} and \texttt{unicode-math} options are identical
+% to those in table~\ref{table:font}.
+% The other previous font options (\texttt{lgrmath}, \texttt{mathdesign}, etc.)\@
+% are not usable in "\mathgreeksfont".
+% However, these fonts can be obtained by specifying the encoding (option \texttt{enc}),
+% family (option \texttt{fam}), series and shape: the New Font Selection Scheme (NFSS).
+% The series defines the `boldness' and has a default value: \texttt{series=m} (medium).
+% For the shape, the default value is \texttt{shape=it};
+% \texttt{enc} and \texttt{fam} have no default value.
+% For example,
+% \begin{center}
+% "\mathgreeksfont{enc=OML,fam=mdbch,shape=n}"
+% \end{center}
+% will produce upright letters from the Charter font provided by \textsf{mathdesign}.
+% For each font option seen previously,
+% the following examples (section~\ref{examples}) indicates
+% the values to give to \texttt{enc}, \texttt{fam}, and \texttt{shape}.
+% The font definition by NFSS attributes will not produce specific commands for italics
+% "\it"\meta{letter} or for upright letters "\up"\meta{letter}.
+% Only the commands "\alpha", "\beta"\ldots will be redefined according to the
+% selected shape.
+%
+% If you use the \texttt{fontspec} or \texttt{unicode-math} option,
+% these second kind of options have no effect.
+%
+% Notice that the encoding obtained by the package font options is faster, moreover
+% the command "\boldmath" doesn't work anymore
+% when changing the font with \texttt{enc}, \texttt{fam} and \texttt{shape},
+% but you can obtain the boldface
+% letters with \texttt{series=b}, or \texttt{series=bx} (bold extended).
+%
+% \end{description}
+%
+% \section{Examples} \label{examples}
+% \begin{description}
+% \item[] "\greektable"
+% The examples in this section are obtained with the "\greektable" command.
+% This command generates a table with two rows: the first contains the lowercase letters
+% obtained with "\alpha", \ldots, "\omega", and the second contains variants
+% "\varepsilon", "\vartheta"\ldots of certain letters as well as the uppercase letters
+% obtained with "\Gamma", "\Delta", \ldots, "\Omega"
+% (for those who differ from their Latin equivalent).
+% \end{description}
+%
+% \subsection{PostScript font options}
+%
+% The \texttt{upgreek} option, as its name suggests, produces only upright letters,
+% and the \texttt{Euler} font does not have the variants "\varrho" and "\varsigma".
+% The \texttt{Symbolsmallscale} font is identical to Symbol but reduced in size by 90\,\%.
+% \texttt{mathdesign=Garamond} yields a virtual font
+% that may not always work.
+%
+% \newlength\legendwidth
+% \setlength\legendwidth{3.2cm}
+% \newcommand*\doublerows[1]{\multirow{2}{\legendwidth}[-1.5ex]{\bfseries#1}}
+
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% \makebox[\legendwidth][l]{\textbf{upgreek=...}} & \makebox[8.4cm]{Résult}
+% & \makebox[1cm]{enc} & \makebox[1cm]{fam} & shape \\
+% \hline
+% \textbf{Symbol}
+% & \mathgreeksfont{enc=U,fam=psy,shape=n}\greektable
+% & U & psy & n \\
+% \hline
+% \textbf{Symbolsmallscale}
+% & \mathgreeksfont{enc=U,fam=fsy,shape=n} \greektable
+% & U & fsy & n \\
+% \hline
+% \textbf{Euler}
+% & \mathgreeksfont{enc=U,fam=eur,shape=n} \greektable
+% & U & eur & n \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% \textbf{mathdesign=...} & \makebox[8.4cm]{Résult} & enc & fam & shape \\
+% \hline
+% \doublerows{Utopia}
+% & \mathgreeksfont{enc=OML,fam=mdput} \greektable
+% & OML & mdput & it \\
+% & \mathgreeksfont{enc=OML,fam=mdput,shape=n} \greektable
+% & OML & mdput & n \\
+% \hline
+% \doublerows{Garamond}
+% & \mathgreeksfont{enc=OML,fam=mdugm} \greektable
+% & OML & mdugm & it \\
+% & \mathgreeksfont{enc=OML,fam=mdugm,shape=n} \greektable
+% & OML & mdugm & n \\
+% \hline
+% \doublerows{Charter}
+% & \mathgreeksfont{enc=OML,fam=mdbch} \greektable
+% & OML & mdbch & it \\
+% & \mathgreeksfont{enc=OML,fam=mdbch,shape=n} \greektable
+% & OML & mdbch & n \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% \textbf{kpfonts=...} & \makebox[8.4cm]{Résult} & enc & fam & shape \\
+% \hline
+% \doublerows{normal}
+% & \mathgreeksfont{enc=OML,fam=jkp} \greektable
+% & OML & jkp & it \\
+% & \mathgreeksfont{enc=U,fam=jkpmia} \greektable
+% & U & jkpmia & it \\
+% \hline
+% \doublerows{light}
+% & \mathgreeksfont{enc=OML,fam=jkpl} \greektable
+% & OML & jkpl & it \\
+% & \mathgreeksfont{enc=U,fam=jkplmia} \greektable
+% & U & jkplmia & it \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% Boolean options & \makebox[8.2cm]{Résult} & enc & fam & shape \\
+% \hline
+% \doublerows{fourier}
+% & \mathgreeksfont{enc=FML,fam=futmi} \greektable
+% & FML & futmi & it \\
+% & \mathgreeksfont{enc=FML,fam=futm} \greektable
+% & FML & futm & it \\
+% \hline
+% % \doublerows{pxfonts}
+% & \mathgreeksfont{enc=OML,fam=pxmi} \greektable
+% & OML & pxmi & it \\
+% & \mathgreeksfont{enc=U,fam=pxmia} \greektable
+% & U & pxmia & it \\
+% \hline
+% \doublerows{txfonts}
+% & \mathgreeksfont{enc=OML,fam=txmi} \greektable
+% & OML & txmi & it \\
+% & \mathgreeksfont{enc=U,fam=txmia} \greektable
+% & U & txmia & it \\
+% \hline
+% \doublerows{libertinus}
+% & \mathgreeksfont{enc=LS1,fam=libertinust1math} \greektable
+% & LS1 & * & it \\
+% & \mathgreeksfont{enc=LS1,fam=libertinust1math,shape=n} \greektable
+% & LS1 & * & n \\
+% \hline
+% \textbf{concrete}
+% & \mathgreeksfont{enc=OML,fam=ccm} \greektable
+% & OML & ccl & it \\
+% \hline
+% \textbf{cmbright}
+% & \mathgreeksfont{enc=OML,fam=cmbrm} \greektable
+% & OML & cmbrm & it \\
+% \hline
+% \end{tabular}
+% \end{center}
+% \emph{* The asterisk for the} \texttt{libertinus} \emph{value corresponds to the}
+% \texttt{libertinust1math} \emph{family, a name too long to appear in this table.}
+%
+% \subsection{The \texttt{lgrmath} option}
+%
+% The \texttt{lgrmath} option, inspired by the eponymous package developed by J.F. Burnol,
+% has a large number of possible values. We present here only a few.
+% The documentation of the \textsf{lgrmath} package~\cite{LGR} explains how
+% to list and consult the fonts available on your distribution with the LGR encoding.
+% One can also consult with profit the documentation of \textsf{cb-fonts}\cite{CB},
+% the Greek fonts of Claudio Beccari.
+%
+% With the \texttt{lgrmath} option, the alternative commands for the variants
+% produce the same glyphs as those of the normal letters except for "\varsigma".
+%
+% We have not presented here the third column previously indicating the values for
+% \texttt{enc}, \texttt{fam}, and \texttt{shape} because, for this entire section,
+% we have \texttt{enc=LGR}, \texttt{fam=\meta{font-name}}, the name of the font presented,
+% and \texttt{shape=it}, for the italic shape, or \texttt{shape=n}, for the upright shape.
+% Example:
+% \begin{center}
+% "\mathgreeksfont{enc=LGR,fam=Alegreya-LF,shape=n}"
+% \end{center}
+%
+%\setlength\legendwidth{4cm}
+% \newcommand\lgrtbl[1]{%
+% \doublerows{#1}
+% & \mathgreeksfont{enc=LGR,fam=#1} \greektable \\
+% & \mathgreeksfont{enc=LGR,fam=#1,shape=n} \greektable \\
+% \hline
+% }
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{lgrmath=...} & Résult \\
+% \hline
+% \lgrtbl{Alegreya-LF}
+% \lgrtbl{Cochineal-LF}
+% \lgrtbl{LibertinusSans-LF}
+% \lgrtbl{NotoSerif-LF}
+% \lgrtbl{NotoSans-LF}
+% \lgrtbl{droidserif}
+% \lgrtbl{fcm}
+% \lgrtbl{gentium}
+% \lgrtbl{llcmss}
+% \end{tabular}
+% \end{center}
+%
+% \ifluatex
+% \subsection{The \texttt{fontspec} option}
+%
+% Most TrueType or OpenType fonts can be used here.
+% ^^A Needs the \textsf{fontspec} package and must be run through \LuaLaTeX\ or \XeLaTeX.
+% Some of the fonts below are not free, and some do not have the variants
+% "\varepsilon"\ldots for example Arial, Times New Roman.
+%
+% \newcommand\fontspectbl[2][fontspec]{%
+% \doublerows{#2}
+% & \mathgreeksfont{#1=#2}
+% \setmathgreeks{style=ISO} \greektable \\
+% & \mathgreeksfont{fontspec=#2}
+% \setmathgreeks{style=upright} \greektable \\
+% \hline
+% }
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{fontspec=...} & Résult \\
+% \hline
+% \fontspectbl{DejaVu Serif}
+% \fontspectbl{DejaVu Sans}
+% \fontspectbl{FreeSerif}
+% \fontspectbl{FreeSans}
+% \fontspectbl{GFS Artemisia}
+% \fontspectbl{GFS Didot}
+% \fontspectbl{Liberation Serif}
+% \fontspectbl{Liberation Sans}
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{fontspec=...} & Résult \\
+% \hline
+% \fontspectbl{Linux Libertine O}
+% ^^A\fontspectbl{Linux Biolinum O}
+% \fontspectbl{Arial}
+% \fontspectbl{Cambria}
+% \fontspectbl{Palatino Linotype}
+% \fontspectbl{Times New Roman}
+% \end{tabular}
+% \end{center}
+%
+%
+% \subsection{The \texttt{unicode-math} option}
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{unicode-math=...} & Résult \\
+% \hline
+% \fontspectbl[unicode-math]{Latin Modern Math}
+% \fontspectbl[unicode-math]{STIX Two Math}
+% \fontspectbl[unicode-math]{Fira Math}
+% \end{tabular}
+% \end{center}
+%
+% \else
+% \typeout{This is a short version of the documentation.
+% Use LuaLaTeX to get the complete version}
+% \fi
+%
+% \StopEventually{
+% \begin{thebibliography}{20}
+% \begin{raggedright}
+% \bibitem{ICTNS} \emph{On the Use of Italic and up Fonts for Symbols in Scientific Text},
+% I.M.~Mills and W.V.~Metanomski, ICTNS (Interdivisional Committee
+% on Terminology, Nomenclature and Symbols), dec 1999,
+% \url{https://old.iupac.org/standing/idcns/italic-roman_dec99.pdf}.
+% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
+% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
+% Khaled Hosny, and others, CTAN, v0.8r 2023/08/13.
+% \bibitem{FSPEC} \emph{The \textsf{fontspec} package -- Font selection for \XeLaTeX\
+% and \LuaLaTeX}, Will Robertson, CTAN, v2.9b 2024/04/27.
+% \bibitem{FIXM} \emph{The \textsf{fixmath} package for \LaTeXe}, Walter Schmidt,
+% CTAN, v0.9 2000/04/11.
+% \bibitem{ISOM} \emph{\textsf{isomath} -- Mathematical style for science and technology},
+% Günter Milde, CTAN, v0.6.1 2012/09/04.
+% \bibitem{PMISO} \emph{\textsf{PM-ISOmath}, The Poor Man ISO math bundle},
+% the \textsf{pm-isomath} package by Claudio Beccari, CTAN, v1.2.00 2021/08/04.
+% \bibitem{GREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt,
+% CTAN, v2.0 2003/02/12.
+% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
+% Paul Pichaureau, CTAN, v2.31 2013/08/29.
+% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
+% Christophe Caignaert, CTAN, v3.34 20/09/2022.
+% \bibitem{FOUR} \textsf{Fourier-GUT\hspace{-0.1em}\emph{enberg}},
+% Michel Bovani, CTAN, v1.3 2005/01/30.
+% \bibitem{PX} \emph{\textsf{PX Fonts} -- Palatino-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/14.
+% \bibitem{TX} \emph{\textsf{TX Fonts} -- Times-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/15.
+% \bibitem{CB} \emph{The CB Greek fonts}, Claudio Beccari, CTAN, 2008/01/01.
+% \bibitem{PXG} \emph{The \textsf{pxgreeks} package}, Jean-François Burnol,
+% CTAN v1.0 2011/03/16.
+% \bibitem{TXG} \emph{The \textsf{txgreeks} package}, Jean-François Burnol,
+% CTAN v1.0 2011/03/16.
+% \bibitem{LIBG} \emph{The \textsf{libgreek} package}, Jean-François Burnol,
+% CTAN v1.1 2022/11/11.
+% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN, v1.0 2022/11/16.
+% \bibitem{NTX} \emph{New TX font package}, Micahel Sharpe, CTAN, v1.735 2024/03/01.
+% \bibitem{LIB} \emph{The LibertinusT1 Math Package}, Michael Sharpe, CTAN,
+% v2.0.4 2024/01/14.
+% \bibitem{CHEM} \emph{\textsf{chemgreek} -- Upright Greek letters in chemistry},
+% Clemens Niederberger, CTAN, v1.1a 2020/01/16.
+% \end{raggedright}
+% \end{thebibliography}
+%}
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+\RequirePackage{kvoptions}
+%\SetupKeyvalOptions{family=mgr} % mathgreeks by default
+
+\DeclareStringOption{lgrmath}[fcm]
+\newif\ifmathgreeks@lgrmath
+\AddToKeyvalOption*{lgrmath}{\mathgreeks@lgrmathtrue}
+\DeclareStringOption{fontspec}[GFS Didot]
+\newif\ifmathgreeks@fontspec
+\AddToKeyvalOption*{fontspec}{\mathgreeks@fontspectrue}
+\newif\ifmathgreeks@unicodemath
+\define@key{mathgreeks}{unicode-math}[Latin Modern Math]{
+ \newcommand*{\mathgreeks@unicodemath}{#1}
+ \mathgreeks@unicodemathtrue}
+\DeclareStringOption{upgreek}[Symbol]
+\newif\ifmathgreeks@upgreek
+\AddToKeyvalOption*{upgreek}{\mathgreeks@upgreektrue
+ \mathgreeks@Greekuptrue\mathgreeks@greekuptrue}
+\DeclareStringOption{mathdesign}[Charter]
+\newif\ifmathgreeks@mathdesign
+\AddToKeyvalOption*{mathdesign}{\mathgreeks@mathdesigntrue}
+\DeclareBoolOption{fourier}% false by default
+\DeclareStringOption{kpfonts}[normal]
+\newif\ifmathgreeks@kpfonts
+\AddToKeyvalOption*{kpfonts}{\mathgreeks@kpfontstrue}
+\DeclareBoolOption{pxfonts}
+\DeclareBoolOption{txfonts}
+\DeclareBoolOption{libertinus}
+\DeclareBoolOption{concrete}
+\DeclareBoolOption{cmbright}
+
+\DeclareBoolOption{savegreeks}
+\DeclareBoolOption{otherfonts}
+\DeclareBoolOption[true]{lowercase}
+\DeclareBoolOption[true]{uppercase}
+
+% dynamic options
+\DeclareBoolOption[true]{Greekup}
+\DeclareBoolOption{greekup}
+\DeclareBoolOption{upright}
+\AddToKeyvalOption*{upright}{\mathgreeks@Greekuptrue
+ \mathgreeks@greekuptrue}
+\DeclareBoolOption{ISO}
+\AddToKeyvalOption*{ISO}{\mathgreeks@Greekupfalse
+ \mathgreeks@greekupfalse}
+\DeclareBoolOption{TeX}
+\AddToKeyvalOption*{TeX}{\mathgreeks@Greekuptrue
+ \mathgreeks@greekupfalse}
+\DeclareStringOption{style}
+\AddToKeyvalOption*{style}{\setkeys{mathgreeks}{\mathgreeks@style}}
+
+\DeclareDefaultOption{\PackageError{mathgreeks}{%
+ Option key `\CurrentOptionKey' undefined}{}}
+\ProcessLocalKeyvalOptions* % \setkeys is done here
+
+\RequirePackage{etoolbox} % provides \AtEndPreamble
+
+\newif\ifkp@upRm % from kpgonts, bugs if after \ifmathgreeks@kpfonts
+\newif\iflibus@sansmath % from libertinust1math
+\newif\ifmathgreeks@Symbol % for codes definition
+\newif\ifmathgreeks@itgreek % for fonts without upright shape
+\newif\ifmathgreeks@font % if font option at package call
+\mathgreeks@fonttrue
+
+
+%%%%%%%%%%%%%%%% INITIAL SETTINGS %%%%%%%%%%%%%%%
+
+\ifmathgreeks@otherfonts
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareFontSubstitution{FML}{futm}{m}{it}
+ \DeclareFontEncoding{LS1}{}{}
+ \DeclareFontSubstitution{LS1}{libertinust1math}{m}{n}
+
+ % from the upgreek package
+ \DeclareFontFamily{U}{eur}{\skewchar\font'177}
+ \DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+ \DeclareFontShape{U}{eur}{b}{n}{%
+ <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
+ \DeclareFontFamily{U}{fsy}{}
+ \DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
+
+\fi
+
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{lgrmath}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{fontspec}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{unicodemath}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{upgreek}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{mathdesign}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{fourier}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{kpfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{pxfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{txfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{savegreeks}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{otherfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{lowercase}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{uppercase}
+
+
+\AtEndPreamble{\AtBeginDocument{
+ \@ifundefined{text}{\RequirePackage{amstext}}{}
+
+ \ifmathgreeks@lgrmath
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareSymbolFont{mgr@it}{LGR}{\mathgreeks@lgrmath}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{LGR}{\mathgreeks@lgrmath}{b}{it}
+ \DeclareSymbolFont{mgr@up}{LGR}{\mathgreeks@lgrmath}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{LGR}{\mathgreeks@lgrmath}{b}{n}
+
+ \else\ifmathgreeks@fontspec
+ \@ifpackageloaded{fontspec}{}{
+ \PackageError{mathgreeks}{`fontspec' or `unicodemath'
+ options need the fontspec package\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \newfontfamily\MathGreeksFont{\mathgreeks@fontspec}%
+ [NFSSFamily=mgru]
+ \DeclareSymbolFont{mgr@it}{TU}{mgru}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{TU}{mgru}{b}{it}
+ \DeclareSymbolFont{mgr@up}{TU}{mgru}{m}{n}
+ \SetSymbolFont{mgr@it}{bold}{TU}{mgru}{b}{n}
+
+ \else\ifmathgreeks@unicodemath
+ \@ifpackageloaded{unicode-math}{}{
+ \PackageError{mathgreeks}{`unicodemath' option needs
+ the unicode-math package\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \setmathfont{\mathgreeks@unicodemath}[range=it/{greek,Greek}]
+ \setmathfont{\mathgreeks@unicodemath}[range=up/{greek,Greek}]
+ \mathgreeks@fontspectrue % for \mgr@CodeGreeks
+ \let\mgr@UnicodeGreek\mgr@UnicodemathGreek
+
+ \else\ifmathgreeks@upgreek
+ \ifdefstring{\mathgreeks@upgreek}{Euler}{
+ \DeclareFontFamily{U}{eur}{\skewchar\font'177}
+ \DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+ \DeclareFontShape{U}{eur}{b}{n}{%
+ <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
+ \DeclareSymbolFont{mgr@up}{U}{eur}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{U}{eur}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@upgreek}{Symbol}{
+ \DeclareSymbolFont{mgr@up}{U}{psy}{m}{n} % no bold face
+ \mathgreeks@Symboltrue
+ }{
+ \ifdefstring{\mathgreeks@upgreek}{Symbolsmallscale}{
+ \DeclareFontFamily{U}{fsy}{}
+ \DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
+ \DeclareSymbolFont{mgr@up}{U}{fsy}{m}{n}
+ \mathgreeks@Symboltrue
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@upgreek' with `upgreek' key}{With `upgreek'
+ possible values are: Euler, Symbol, Symbolsmallscale.}
+ }}}
+
+ \else\ifmathgreeks@mathdesign
+ \ifdefstring{\mathgreeks@mathdesign}{Utopia}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdput}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdput}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdput}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdput}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@mathdesign}{Garamond}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdugm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdugm}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdugm}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdugm}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@mathdesign}{Charter}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdbch}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdbch}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdbch}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdbch}{b}{n}
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@mathdesign' with `mathdesign' key}{With
+ `mathdesign' possible values are:
+ Utopia, Garamond, Charter.}
+ }}}
+
+ \else\ifmathgreeks@fourier
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareFontSubstitution{FML}{futm}{m}{it}
+ \DeclareSymbolFont{mgr@it}{FML}{futmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{FML}{futmi}{b}{it}
+ \DeclareSymbolFont{mgr@up}{FML}{futm}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{FML}{futm}{b}{it}
+
+ \else\ifmathgreeks@kpfonts
+ \ifdefstring{\mathgreeks@kpfonts}{normal}{
+ \DeclareSymbolFont{mgr@it}{OML}{jkp}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{jkp}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{jkpmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{jkpmia}{bx}{it}
+ }{
+ \ifdefstring{\mathgreeks@kpfonts}{light}{
+ \DeclareSymbolFont{mgr@it}{OML}{jkpl}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{jkpl}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{jkplmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{jkplmia}{bx}{it}
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@kpfonts' with `kpfonts' key}{With
+ `kpfonts' possible values are: normal, light.}
+ }}
+
+ \else\ifmathgreeks@pxfonts % no font option specified
+ \DeclareSymbolFont{mgr@it}{OML}{pxmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{pxmi}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{pxmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{pxmia}{bx}{it}
+
+ \else\ifmathgreeks@txfonts
+ \DeclareSymbolFont{mgr@it}{OML}{txmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{txmi}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{txmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{txmia}{bx}{it}
+
+ \else\ifmathgreeks@libertinus
+ \DeclareFontEncoding{LS1}{}{}
+ \DeclareFontSubstitution{LS1}{libertinust1math}{m}{n}
+ \DeclareSymbolFont{mgr@it}{LS1}{libertinust1math}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{LS1}{libertinust1math}{m}{it}
+ \DeclareSymbolFont{mgr@up}{LS1}{libertinust1math}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{LS1}{libertinust1math}{m}{n}
+
+ \else\ifmathgreeks@concrete
+ \DeclareSymbolFont{mgr@it}{OML}{ccm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{ccm}{b}{it}
+ \mathgreeks@itgreektrue
+
+ \else\ifmathgreeks@cmbright
+ \DeclareSymbolFont{mgr@it}{OML}{cmbrm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{cmbrm}{b}{it}
+ \mathgreeks@itgreektrue
+
+ \else
+ \PackageWarningNoLine{mathgreeks}{No font option specified}
+ \mathgreeks@fontfalse
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+
+ \ifmathgreeks@savegreeks \SaveGreeks \fi
+
+ \ifmathgreeks@font
+ \ifmathgreeks@upgreek
+ \mathgreeks@Greekuptrue \mathgreeks@greekuptrue
+ \PackageWarningNoLine{mathgreeks}{Commands \string \italpha,
+ \string\itbeta... \MessageBreak
+ not available with the `upgreek' option}
+ \else
+ \mgr@CodeGreeks{it}
+ \fi
+ \ifmathgreeks@itgreek
+ \mathgreeks@Greekupfalse \mathgreeks@greekupfalse
+ \PackageWarningNoLine{mathgreeks}{Commands \string \upalpha,
+ \string\upbeta... \MessageBreak
+ not available with `concrete' or 'cmbright}
+ \else
+ \mgr@CodeGreeks{up}
+ \fi
+ \mgr@DefaultGreeks
+ \fi
+}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% MACROS %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\setmathgreeks#1{\setkeys{mathgreeks}{#1}\unskip
+ \ifmathgreeks@upgreek
+ \mathgreeks@Greekuptrue
+ \mathgreeks@greekuptrue
+ \PackageWarning{mathgreeks}{Style is set to `upright'
+ \MessageBreak with the `upgreek' option}
+ \fi
+ \mgr@DefaultGreeks\ignorespaces
+}
+
+
+\def\re@DeclareMathSymbol#1#2#3#4{% from kpfonts, pxfonts, txfonts
+ \let#1=\undefined
+ \DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+%\def\re@DeclareMathSymbol#1#2#3#4{% from newtxmath
+%\if\relax\noexpand#1\let#1=\undefined \fi
+%\DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+\newcommand{\mgr@CodeGreek}[3]{% #1 = it or up
+ \expandafter\re@DeclareMathSymbol\csname#1#2\endcsname%
+ {\mathalpha}{mgr@#1}{#3}
+}
+
+\newcommand{\mgr@UnicodeGreek}[3]{%
+ \expandafter\Umathchardef\csname#1#2\endcsname="7 % mathalpha
+ \csname symmgr@#1\endcsname #3
+}
+
+\def\mgr@UnicodemathGreek#1#2#3{\unskip
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\csname sym#1\endcsname{\symbol{#3}}}\ignorespaces
+}
+
+\newcommand{\mgr@CodeGreeks}[1]{% #1 = it or up
+ \ifmathgreeks@lgrmath % LGR encoding
+ \mgr@CodeGreek{#1}{Gamma}{71}
+ \mgr@CodeGreek{#1}{Delta}{68}
+ \mgr@CodeGreek{#1}{Theta}{74}
+ \mgr@CodeGreek{#1}{Lambda}{76}
+ \mgr@CodeGreek{#1}{Xi}{88}
+ \mgr@CodeGreek{#1}{Pi}{80}
+ \mgr@CodeGreek{#1}{Sigma}{83}
+ \mgr@CodeGreek{#1}{Upsilon}{85}
+ \mgr@CodeGreek{#1}{Phi}{70}
+ \mgr@CodeGreek{#1}{Psi}{89}
+ \mgr@CodeGreek{#1}{Omega}{87}
+ \mgr@CodeGreek{#1}{alpha}{97}
+ \mgr@CodeGreek{#1}{beta}{98}
+ \mgr@CodeGreek{#1}{gamma}{103}
+ \mgr@CodeGreek{#1}{delta}{100}
+ \mgr@CodeGreek{#1}{epsilon}{101}
+ \mgr@CodeGreek{#1}{zeta}{122}
+ \mgr@CodeGreek{#1}{eta}{104}
+ \mgr@CodeGreek{#1}{theta}{106}
+ \mgr@CodeGreek{#1}{iota}{105}
+ \mgr@CodeGreek{#1}{kappa}{107}
+ \mgr@CodeGreek{#1}{lambda}{108}
+ \mgr@CodeGreek{#1}{mu}{109}
+ \mgr@CodeGreek{#1}{nu}{110}
+ \mgr@CodeGreek{#1}{xi}{120}
+ \mgr@CodeGreek{#1}{pi}{112}
+ \mgr@CodeGreek{#1}{rho}{114}
+ \mgr@CodeGreek{#1}{sigma}{115}
+ \mgr@CodeGreek{#1}{tau}{116}
+ \mgr@CodeGreek{#1}{upsilon}{117}
+ \mgr@CodeGreek{#1}{phi}{102}
+ \mgr@CodeGreek{#1}{chi}{113}
+ \mgr@CodeGreek{#1}{psi}{121}
+ \mgr@CodeGreek{#1}{omega}{119}
+ \mgr@CodeGreek{#1}{varepsilon}{101} % = epsilon
+ \mgr@CodeGreek{#1}{vartheta}{106} % = theta
+ \mgr@CodeGreek{#1}{varpi}{112} % = pi
+ \mgr@CodeGreek{#1}{varrho}{114} % = rho
+ \mgr@CodeGreek{#1}{varsigma}{99}
+ \mgr@CodeGreek{#1}{varphi}{102} % = phi
+ \else\ifmathgreeks@fontspec % unicode encoding
+ \mgr@UnicodeGreek{#1}{Gamma}{"0393}
+ \mgr@UnicodeGreek{#1}{Delta}{"0394}
+ \mgr@UnicodeGreek{#1}{Theta}{"0398}
+ \mgr@UnicodeGreek{#1}{Lambda}{"039B}
+ \mgr@UnicodeGreek{#1}{Xi}{"039E}
+ \mgr@UnicodeGreek{#1}{Pi}{"03A0}
+ \mgr@UnicodeGreek{#1}{Sigma}{"03A3}
+ \mgr@UnicodeGreek{#1}{Upsilon}{"03A5}
+ \mgr@UnicodeGreek{#1}{Phi}{"03A6}
+ \mgr@UnicodeGreek{#1}{Psi}{"03A8}
+ \mgr@UnicodeGreek{#1}{Omega}{"03A9}
+ \mgr@UnicodeGreek{#1}{alpha}{"03B1}
+ \mgr@UnicodeGreek{#1}{beta}{"03B2}
+ \mgr@UnicodeGreek{#1}{gamma}{"03B3}
+ \mgr@UnicodeGreek{#1}{delta}{"03B4}
+ \mgr@UnicodeGreek{#1}{epsilon}{"03B5}
+ \mgr@UnicodeGreek{#1}{zeta}{"03B6}
+ \mgr@UnicodeGreek{#1}{eta}{"03B7}
+ \mgr@UnicodeGreek{#1}{theta}{"03B8}
+ \mgr@UnicodeGreek{#1}{iota}{"03B9}
+ \mgr@UnicodeGreek{#1}{kappa}{"03BA}
+ \mgr@UnicodeGreek{#1}{lambda}{"03BB}
+ \mgr@UnicodeGreek{#1}{mu}{"03BC}
+ \mgr@UnicodeGreek{#1}{nu}{"03BD}
+ \mgr@UnicodeGreek{#1}{xi}{"03BE} % not omicron
+ \mgr@UnicodeGreek{#1}{pi}{"03C0}
+ \mgr@UnicodeGreek{#1}{rho}{"03C1}
+ \mgr@UnicodeGreek{#1}{sigma}{"03C3}
+ \mgr@UnicodeGreek{#1}{tau}{"03C4}
+ \mgr@UnicodeGreek{#1}{upsilon}{"03C5}
+ \mgr@UnicodeGreek{#1}{phi}{"03C6}
+ \mgr@UnicodeGreek{#1}{chi}{"03C7}
+ \mgr@UnicodeGreek{#1}{psi}{"03C8}
+ \mgr@UnicodeGreek{#1}{omega}{"03C9}
+ \mgr@UnicodeGreek{#1}{varepsilon}{"03F5}
+ \mgr@UnicodeGreek{#1}{vartheta}{"03D1}
+ \mgr@UnicodeGreek{#1}{varpi}{"03D6}
+ \mgr@UnicodeGreek{#1}{varrho}{"03F1}
+ \mgr@UnicodeGreek{#1}{varsigma}{"03C2}
+ \mgr@UnicodeGreek{#1}{varphi}{"03D5}
+ \else\ifmathgreeks@Symbol % Symbol encoding
+ \mgr@CodeGreek{#1}{Gamma}{`G}
+ \mgr@CodeGreek{#1}{Delta}{`D}
+ \mgr@CodeGreek{#1}{Theta}{`Q}
+ \mgr@CodeGreek{#1}{Lambda}{`L}
+ \mgr@CodeGreek{#1}{Xi}{`X}
+ \mgr@CodeGreek{#1}{Pi}{`P}
+ \mgr@CodeGreek{#1}{Sigma}{`S}
+ \mgr@CodeGreek{#1}{Upsilon}{`U}
+ \mgr@CodeGreek{#1}{Phi}{`F}
+ \mgr@CodeGreek{#1}{Psi}{`Y}
+ \mgr@CodeGreek{#1}{Omega}{`W}
+ \mgr@CodeGreek{#1}{alpha}{`a}
+ \mgr@CodeGreek{#1}{beta}{`b}
+ \mgr@CodeGreek{#1}{gamma}{`g}
+ \mgr@CodeGreek{#1}{delta}{`d}
+ \mgr@CodeGreek{#1}{epsilon}{`e}
+ \mgr@CodeGreek{#1}{zeta}{`z}
+ \mgr@CodeGreek{#1}{eta}{`h}
+ \mgr@CodeGreek{#1}{theta}{`q}
+ \mgr@CodeGreek{#1}{iota}{`i}
+ \mgr@CodeGreek{#1}{kappa}{`k}
+ \mgr@CodeGreek{#1}{lambda}{`l}
+ \mgr@CodeGreek{#1}{mu}{`m}
+ \mgr@CodeGreek{#1}{nu}{`n}
+ \mgr@CodeGreek{#1}{xi}{`x}
+ \mgr@CodeGreek{#1}{pi}{`p}
+ \mgr@CodeGreek{#1}{rho}{`r}
+ \mgr@CodeGreek{#1}{sigma}{`s}
+ \mgr@CodeGreek{#1}{tau}{`t}
+ \mgr@CodeGreek{#1}{upsilon}{`u}
+ \mgr@CodeGreek{#1}{phi}{`f}
+ \mgr@CodeGreek{#1}{chi}{`c}
+ \mgr@CodeGreek{#1}{psi}{`y}
+ \mgr@CodeGreek{#1}{omega}{`w}
+ \mgr@CodeGreek{#1}{varepsilon}{`u} % = epsilon
+ \mgr@CodeGreek{#1}{vartheta}{`J}
+ \mgr@CodeGreek{#1}{varpi}{`v}
+ \mgr@CodeGreek{#1}{varrho}{`r} % = rho
+ \mgr@CodeGreek{#1}{varsigma}{`s} % = sigma
+ \mgr@CodeGreek{#1}{varphi}{`j}
+ \else % OML (or U) encoding
+ \mgr@CodeGreek{#1}{Gamma}{"00}
+ \mgr@CodeGreek{#1}{Delta}{"01}
+ \mgr@CodeGreek{#1}{Theta}{"02}
+ \mgr@CodeGreek{#1}{Lambda}{"03}
+ \mgr@CodeGreek{#1}{Xi}{"04}
+ \mgr@CodeGreek{#1}{Pi}{"05}
+ \mgr@CodeGreek{#1}{Sigma}{"06}
+ \mgr@CodeGreek{#1}{Upsilon}{"07}
+ \mgr@CodeGreek{#1}{Phi}{"08}
+ \mgr@CodeGreek{#1}{Psi}{"09}
+ \mgr@CodeGreek{#1}{Omega}{"0A}
+ \mgr@CodeGreek{#1}{alpha}{"0B}
+ \mgr@CodeGreek{#1}{beta}{"0C}
+ \mgr@CodeGreek{#1}{gamma}{"0D}
+ \mgr@CodeGreek{#1}{delta}{"0E}
+ \mgr@CodeGreek{#1}{epsilon}{"0F}
+ \mgr@CodeGreek{#1}{zeta}{"10}
+ \mgr@CodeGreek{#1}{eta}{"11}
+ \mgr@CodeGreek{#1}{theta}{"12}
+ \mgr@CodeGreek{#1}{iota}{"13}
+ \mgr@CodeGreek{#1}{kappa}{"14}
+ \mgr@CodeGreek{#1}{lambda}{"15}
+ \mgr@CodeGreek{#1}{mu}{"16}
+ \mgr@CodeGreek{#1}{nu}{"17}
+ \mgr@CodeGreek{#1}{xi}{"18}
+ \mgr@CodeGreek{#1}{pi}{"19}
+ \mgr@CodeGreek{#1}{rho}{"1A}
+ \mgr@CodeGreek{#1}{sigma}{"1B}
+ \mgr@CodeGreek{#1}{tau}{"1C}
+ \mgr@CodeGreek{#1}{upsilon}{"1D}
+ \mgr@CodeGreek{#1}{phi}{"1E}
+ \mgr@CodeGreek{#1}{chi}{"1F}
+ \mgr@CodeGreek{#1}{psi}{"20}
+ \mgr@CodeGreek{#1}{omega}{"21}
+ \mgr@CodeGreek{#1}{varepsilon}{"22}
+ \mgr@CodeGreek{#1}{vartheta}{"23}
+ \mgr@CodeGreek{#1}{varpi}{"24}
+ \mgr@CodeGreek{#1}{varrho}{"25}
+ \mgr@CodeGreek{#1}{varsigma}{"26}
+ \mgr@CodeGreek{#1}{varphi}{"27}
+ %\mgr@CodeGreek{#1}{varkappa}{"FE}
+ \fi\fi\fi
+}
+
+\newcommand\mgr@DefaultGreeks{%
+ \ifmathgreeks@uppercase
+ \ifmathgreeks@Greekup
+ \let\Gamma\upGamma
+ \let\Delta\upDelta
+ \let\Theta\upTheta
+ \let\Lambda\upLambda
+ \let\Xi\upXi
+ \let\Pi\upPi
+ \let\Sigma\upSigma
+ \let\Upsilon\upUpsilon
+ \let\Phi\upPhi
+ \let\Psi\upPsi
+ \let\Omega\upOmega
+ \else
+ \let\Gamma\itGamma
+ \let\Delta\itDelta
+ \let\Theta\itTheta
+ \let\Lambda\itLambda
+ \let\Xi\itXi
+ \let\Pi\itPi
+ \let\Sigma\itSigma
+ \let\Upsilon\itUpsilon
+ \let\Phi\itPhi
+ \let\Psi\itPsi
+ \let\Omega\itOmega
+ \fi\fi
+ \ifmathgreeks@lowercase
+ \ifmathgreeks@greekup
+ \let\alpha\upalpha
+ \let\beta\upbeta
+ \let\gamma\upgamma
+ \let\delta\updelta
+ \let\epsilon\upepsilon
+ \let\zeta\upzeta
+ \let\eta\upeta
+ \let\theta\uptheta
+ \let\iota\upiota
+ \let\kappa\upkappa
+ \let\lambda\uplambda
+ \let\mu\upmu
+ \let\nu\upnu
+ \let\xi\upxi
+ \let\pi\uppi
+ \let\rho\uprho
+ \let\sigma\upsigma
+ \let\tau\uptau
+ \let\upsilon\upupsilon
+ \let\phi\upphi
+ \let\chi\upchi
+ \let\psi\uppsi
+ \let\omega\upomega
+ \let\varepsilon\upvarepsilon
+ \let\vartheta\upvartheta
+ \let\varpi\upvarpi
+ \let\varrho\upvarrho
+ \let\varsigma\upvarsigma
+ \let\varphi\upvarphi
+ \else
+ \let\alpha\italpha
+ \let\beta\itbeta
+ \let\gamma\itgamma
+ \let\delta\itdelta
+ \let\epsilon\itepsilon
+ \let\zeta\itzeta
+ \let\eta\iteta
+ \let\theta\ittheta
+ \let\iota\itiota
+ \let\kappa\itkappa
+ \let\lambda\itlambda
+ \let\mu\itmu
+ \let\nu\itnu
+ \let\xi\itxi
+ \let\pi\itpi
+ \let\rho\itrho
+ \let\sigma\itsigma
+ \let\tau\ittau
+ \let\upsilon\itupsilon
+ \let\phi\itphi
+ \let\chi\itchi
+ \let\psi\itpsi
+ \let\omega\itomega
+ \let\varepsilon\itvarepsilon
+ \let\vartheta\itvartheta
+ \let\varpi\itvarpi
+ \let\varrho\itvarrho
+ \let\varsigma\itvarsigma
+ \let\varphi\itvarphi
+ \fi\fi
+}
+
+\providecommand\SaveGreeks{%
+ \let\backGamma\Gamma
+ \let\backDelta\Delta
+ \let\backTheta\Theta
+ \let\backLambda\Lambda
+ \let\backXi\Xi
+ \let\backPi\Pi
+ \let\backSigma\Sigma
+ \let\backUpsilon\Upsilon
+ \let\backPhi\Phi
+ \let\backPsi\Psi
+ \let\backOmega\Omega
+ \let\backalpha\alpha
+ \let\backbeta\beta
+ \let\backgamma\gamma
+ \let\backdelta\delta
+ \let\backepsilon\epsilon
+ \let\backzeta\zeta
+ \let\backeta\eta
+ \let\backtheta\theta
+ \let\backiota\iota
+ \let\backkappa\kappa
+ \let\backlambda\lambda
+ \let\backmu\mu
+ \let\backnu\nu
+ \let\backxi\xi
+ \let\backpi\pi
+ \let\backrho\rho
+ \let\backsigma\sigma
+ \let\backtau\tau
+ \let\backupsilon\upsilon
+ \let\backphi\phi
+ \let\backchi\chi
+ \let\backpsi\psi
+ \let\backomega\omega
+ \let\backvarepsilon\varepsilon
+ \let\backvartheta\vartheta
+ \let\backvarpi\varpi
+ \let\backvarrtho\varrho
+ \let\backvarsigma\varsigma
+ \let\backvarphi\varphi
+}
+
+
+%%%%%%%%%%%%%% Macros for changing font dynamically %%%%%%%%%%%%%
+
+\newif\ifmgrfont@unicodemath
+\define@key{mgrfont}{unicode-math}[Latin Modern Math]{%
+ \def\mgrfont@unicodemath{#1}\mgrfont@unicodemathtrue}
+\newif\ifmgrfont@fontspec
+\define@key{mgrfont}{fontspec}[GFS Didot]{%
+ \def\mgrfont@fontspec{#1}\mgrfont@fontspectrue}
+\define@key{mgrfont}{enc}{\def\mgrfont@enc{#1}}
+\define@key{mgrfont}{fam}{\def\mgrfont@fam{#1}}
+\newcommand*\mgrfont@series{m} % default value
+\define@key{mgrfont}{series}{\renewcommand*\mgrfont@series{#1}}
+\newcommand*\mgrfont@shape{it} % default value
+\define@key{mgrfont}{shape}{\renewcommand*\mgrfont@shape{#1}}
+
+\def\mathgreeksfont#1{%
+ \mgrfont@unicodemathfalse
+ \mgrfont@fontspecfalse
+ \renewcommand*\mgrfont@series{m}
+ \renewcommand*\mgrfont@shape{it}
+ \mathgreeks@lgrmathfalse
+ \mathgreeks@fontspecfalse
+ \mathgreeks@Symbolfalse
+ \mathgreeks@upgreekfalse
+ \setkeys{mgrfont}{#1}
+ \ifmgrfont@unicodemath
+ \setmathfont{\mgrfont@unicodemath}[range=it/{greek,Greek}]
+ \setmathfont{\mgrfont@unicodemath}[range=up/{greek,Greek}]
+ \let\mgr@UnicodeGreek\mgr@UnicodemathGreek
+ \mathgreeks@fontspectrue % for \mgr@CodeGreeks
+ \mgr@CodeGreeks{it}
+ \mgr@CodeGreeks{up}
+ \mgr@DefaultGreeks
+ \else\ifmgrfont@fontspec
+ \let\MathGreeksFont\relax
+ \newfontfamily\MathGreeksFont{\mgrfont@fontspec}
+ \let\mgr@UnicodeGreek\mgr@NewUnicodeGreek
+ \mathgreeks@fontspectrue
+ \mgr@CodeGreeks{it}
+ \mgr@CodeGreeks{up}
+ \mgr@DefaultGreeks
+ \else
+ \let\mgr@CodeGreek\mgr@NewCodeGreek
+ \ifdefstring{\mgrfont@enc}{LGR}{
+ \mathgreeks@lgrmathtrue
+ }{
+ \ifdefstring{\mgrfont@fam}{psy}{
+ \mathgreeks@Symboltrue
+ }{
+ \ifdefstring{\mgrfont@fam}{fsy}{
+ \mathgreeks@Symboltrue
+ }{
+ }}}
+ \mgr@CodeGreeks{}
+ \fi\fi
+}
+
+\def\mgr@NewCodeGreek#1#2#3{\unskip
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\mathalpha{\text{\usefont{\mgrfont@enc}{\mgrfont@fam}
+ {\mgrfont@series}{\mgrfont@shape}\symbol{#3}}
+ }}\ignorespaces
+}
+
+\def\mgr@NewUnicodeGreek#1#2#3{\unskip % only with fontspec
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\mathalpha{\text{\csname#1shape\endcsname%
+ \MathGreeksFont\symbol{#3}}
+ }}\ignorespaces
+}
+
+\providecommand\greektable{
+ $\begin{array}{c}
+ \begin{array}{*{23}{@{\;}c}@{\;}}
+ \alpha & \beta & \gamma & \delta & \epsilon & \zeta & \eta &
+ \theta & \iota & \kappa & \lambda & \mu & \nu & \xi & \pi &
+ \rho & \sigma & \tau & \upsilon & \phi & \chi & \psi & \omega
+ \end{array}
+ \\
+ \begin{array}{*{18}{@{\;}c}@{\;}}
+ \varepsilon & \vartheta & \varpi & \varrho & \varsigma & \varphi
+ & | &
+ \Gamma & \Delta & \Theta & \Lambda & \Xi & \Pi & \Sigma &
+ \Upsilon & \Phi & \Psi & \Omega
+ \end{array}
+ \end{array}$
+}
+
+% \end{macrocode}
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.ins b/macros/latex/contrib/mathgreeks/mathgreeks.ins
new file mode 100644
index 0000000000..a1a8f6786b
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.ins
@@ -0,0 +1,56 @@
+%%
+%% Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%%
+%% This file 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
+%% 2005/12/01 or later.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/mathgreeks}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+
+This file 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
+2005/12/01 or later.
+
+\endpreamble
+
+\generate{\file{mathgreeks.sty}{\from{mathgreeks.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* mathgreeks.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* mathgreeks.dtx through LuaLaTeX *}
+\Msg{* (or LaTeX for a shorter version). *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.pdf b/macros/latex/contrib/mathgreeks/mathgreeks.pdf
new file mode 100644
index 0000000000..03ca96ca9d
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.pdf
Binary files differ
diff --git a/macros/latex/contrib/osda/README.md b/macros/latex/contrib/osda/README.md
index 03de404407..07396d51d5 100644
--- a/macros/latex/contrib/osda/README.md
+++ b/macros/latex/contrib/osda/README.md
@@ -28,7 +28,7 @@ above.
```
\usepackage[
- 2023,
+ 2024,
cc-by,
pages={1}{6},
url=https://osda.ws/r/aaVHo,
@@ -59,7 +59,7 @@ pdflatex osda.dtx
## License information
-Copyright 2023 by Christian Krieg (christian@osda.ws)
+Copyright 2023-2024 by Christian Krieg (christian@osda.ws)
This work (excluding the OSDA logo) may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3 of this
diff --git a/macros/latex/contrib/osda/example.png b/macros/latex/contrib/osda/example.png
index 4f8b01b361..2b1a2f49b1 100644
--- a/macros/latex/contrib/osda/example.png
+++ b/macros/latex/contrib/osda/example.png
Binary files differ
diff --git a/macros/latex/contrib/osda/osda.dtx b/macros/latex/contrib/osda/osda.dtx
index b0ad170e90..7406112206 100644
--- a/macros/latex/contrib/osda/osda.dtx
+++ b/macros/latex/contrib/osda/osda.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
% osda.ins
-% Copyright 2023 by Christian Krieg (christian@osda.ws)
+% Copyright 2023-2024 by Christian Krieg (christian@osda.ws)
%
% This work (excluding the OSDA logo) may be distributed and/or modified under
% the conditions of the LaTeX Project Public License, either version 1.3 of this
@@ -29,7 +29,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{osda}
%<*package>
- [2023/04/03 v1.2.0 OSDA copyright notice generator]
+ [2024/05/01 v1.4.0 OSDA copyright notice generator]
%</package>
%
%<*driver>
@@ -52,7 +52,7 @@
moredelim=**[is][\ttfamily\bfseries\color{red}]{(*}{*)},
}
\usepackage[
- 2023,
+ 2024,
cc-by,
pages={1}{6},
url=https://osda.ws/r/0slLz,
@@ -93,6 +93,11 @@
% \changes{v1.0.0}{2023/03/30}{Initial version}
% \changes{v1.1.0}{2023/04/03}{Adding 'auto' option}
% \changes{v1.2.0}{2023/04/03}{Updating README}
+% \changes{v1.3.0}{2023/04/04}{
+% Adding presets for the years 2019 and 2020,
+% adding inline OSDA logo
+% }
+% \changes{v1.4.0}{2024/05/01}{Adding preset for 2020}
%
% \GetFileInfo{osda.sty}
%
@@ -107,7 +112,7 @@
% \author{Christian Krieg\\ Workshop on Open-Source Design Automation (OSDA) \\
% \texttt{christian@osda.ws}
% }
-% \date{April 03, 2023}
+% \date{May 01, 2024}
%
% \newcommand{\Example}{\vspace{1em}\noindent\textbf{Example:}\vspace{1em}}
%
@@ -139,7 +144,7 @@
% \begin{lstlisting}[gobble=6,float=tb,label=lst:usage-example,caption={An
% example for the most-frequent use case to use this package}]
% \usepackage[
-% 2023,
+% 2024,
% cc-by,
% pages={1}{6},
% url=https://osda.ws/r/0slLz,
@@ -190,7 +195,7 @@
% setting package options}]
% \usepackage[auto=false]{osda}
% \osdaset{
-% 2023,
+% 2024,
% cc-by,
% pages={1}{6},
% url=https://osda.ws/r/0slLz,
@@ -237,10 +242,13 @@
% example is given in \Cref{lst:option-year}.
%
% \begin{lstlisting}[gobble=6, label=lst:option-year, caption={Setting all
-% workshop-related options for the year 2023}]
-% \osdaset{2023}
+% workshop-related options for the year 2024}]
+% \osdaset{2024}
% \end{lstlisting}
%
+% Currently, presets for the following years are available:
+% |2024|, |2023|, |2020|, |2019|
+%
% \subsection{Paper license}
%
% \DescribeMacro{cc-by}
@@ -436,6 +444,36 @@
% \end{tabular}
% \end{table}
%
+% \section{Useful commands}
+%
+% \subsection{Inline logo}
+%
+% \DescribeMacro{\osda}
+% This command prints the OSDA logo inline as shown in the following examples at
+% different font sizes (\Cref{lst:inline-logo}):
+%
+% \begin{lstlisting}[gobble=6, label=lst:inline-logo, caption={Inline OSDA logo}]
+% Hello there, \osda{} is the place to be
+%
+% {\large I agree, \osda{} is the place to be!}
+%
+% {\small I agree, \osda{} is the place to be!}
+%
+% {\Huge I agree, \osda{} is the place to be!}
+%
+% {\tiny I agree, \osda{} is the place to be!}
+% \end{lstlisting}
+%
+% Hello there, \osda{} is the place to be
+%
+% {\large I agree, \osda{} is the place to be!}
+%
+% {\small I agree, \osda{} is the place to be!}
+%
+% {\Huge I agree, \osda{} is the place to be!}
+%
+% {\tiny I agree, \osda{} is the place to be!}
+%
%
% \StopEventually{}
%
@@ -560,6 +598,19 @@
%
% Default values for specific editions of OSDA
%
+ 2024/.style={
+ proceedings/title = Proceedings of the 4th Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 4th,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Valencia,
+ location/country = Spain,
+ date/month = March,
+ date/day = 25,
+ date/year = 2024,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
2023/.style={
proceedings/title = Proceedings of the 3rd Workshop on Open-Source Design Automation (OSDA),
workshop/counter = 3rd,
@@ -573,6 +624,32 @@
hostconference/longname = {Design, Automation, and Test in Europe Conference},
hostconference/acronym = DATE,
},
+ 2020/.style={
+ proceedings/title = Proceedings of the 2nd Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 2nd,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Grenoble,
+ location/country = France,
+ date/month = March,
+ date/day = 13,
+ date/year = 2020,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
+ 2019/.style={
+ proceedings/title = Proceedings of the 1st Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 1st,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Florence,
+ location/country = Italy,
+ date/month = March,
+ date/day = 29,
+ date/year = 2019,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
%
% Licenses
%
@@ -737,6 +814,24 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\osda}
+%%
+%% |\osda|
+%%
+%% This command prints the OSDA logo inline at a height of 1ex
+%%
+%% Usage:
+%%
+%% |\osda{}|
+%%
+% \begin{macrocode}
+%
+\newcommand{\osda}{\raisebox{.6\baselineskip}{\osdalogo{.7\baselineskip}}}
+%
+% \end{macrocode}
+% \end{macro}
+%
+%
% \begin{macro}{\osdanotice}
%%
%% |\osdanotice|
diff --git a/macros/latex/contrib/osda/osda.ins b/macros/latex/contrib/osda/osda.ins
index a76841c47b..21524ff0ac 100644
--- a/macros/latex/contrib/osda/osda.ins
+++ b/macros/latex/contrib/osda/osda.ins
@@ -1,5 +1,5 @@
%% osda.ins
-%% Copyright 2023 by Christian Krieg <christian@osda.ws>
+%% Copyright 2023-2024 by Christian Krieg <christian@osda.ws>
%%
%% This work (excluding the OSDA logo) may be distributed and/or modified under
%% the conditions of the LaTeX Project Public License, either version 1.3
@@ -29,7 +29,7 @@
This is a generated file.
-Copyright (C) 2023 by Christian Krieg <christian@osda.ws>
+Copyright (C) 2023-2024 by Christian Krieg <christian@osda.ws>
This work (excluding the OSDA logo) may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/osda/osda.pdf b/macros/latex/contrib/osda/osda.pdf
index 51bdfa0b02..5399ddcda0 100644
--- a/macros/latex/contrib/osda/osda.pdf
+++ b/macros/latex/contrib/osda/osda.pdf
Binary files differ
diff --git a/macros/luatex/generic/luamplib/Makefile b/macros/luatex/generic/luamplib/Makefile
index f4d638764e..f41c9a6339 100644
--- a/macros/luatex/generic/luamplib/Makefile
+++ b/macros/luatex/generic/luamplib/Makefile
@@ -36,7 +36,7 @@ world: all ctan
.PHONY: all doc unpack ctan tds check world
%.pdf: %.dtx
- latexmk -lualatex -recorder- -silent $< >/dev/null
+ @texfot --quiet --tee=/dev/null --ignore "^Overfull" --ignore "^Underfull" lualatex -recorder $<
$(UNPACKED): $(DTX)
luatex -interaction=batchmode $< >/dev/null
diff --git a/macros/luatex/generic/luamplib/NEWS b/macros/luatex/generic/luamplib/NEWS
index f0dd1cf2f4..87f52a0066 100644
--- a/macros/luatex/generic/luamplib/NEWS
+++ b/macros/luatex/generic/luamplib/NEWS
@@ -1,5 +1,48 @@
History of the luamplib package
+2024/05/01 2.29.0
+
+ * provide new TeX macros to reduce typing toil.
+
+ \mpfig ... \endmpfig is roughly the abbreviation of
+ \begin{mplibcode}[@mpfig]
+ beginfig(0)
+ token list declared by \everymplib[@mpfig]
+ ...
+ token list declared by \everyendmplib[@mpfig]
+ endfig;
+ \end{mplibcode}
+
+ \mpfig* ... \endmpfig is roughly the abbreviation of
+ \begin{mplibcode}[@mpfig]
+ ...
+ \end{mplibcode}
+
+ These macros are protected and unexpandable.
+ In these macros \mpliblegacybehavior{false} is forcibly declared.
+ As both share the same instance name, MetaPost codes are inherited among them.
+ The instance name (default: @mpfig) can be changed by redefining `\mpfiginstancename'.
+
+ * instance names are allowed in plain TeX as well. The syntax is:
+
+ \mplibcode[name] ... \endmplibcode
+ \everymplib[name]{ ... }
+ \everyendmplib[name]{ ... }
+
+ These macros are now protected and unexpandable.
+
+ * provide new MetaPost operators `mplibtexcolor' and `mplibrgbtexcolor'
+ which convert TeX color expressions to MetaPost color expressions.
+ The latter one forces rgb model results (#112). For instance,
+
+ mplibtexcolor "olive" % => (0, 0, 1, 0.5)
+ mplibrgbtexcolor "olive" % => (0.5, 0.5, 0)
+
+ As spot colors are always forced to cmyk or rgb model, it is not
+ recommended to use these operators for them.
+
+ * write down MetaPost messages into the log file
+
2024/04/25 2.28.2
* direction of figure box is explicitly declared as TLT (#129)
* figure box materials are emitted in one go at the end of the figure
@@ -72,11 +115,11 @@
2024/03/01 2.26.0
* when \mplibcachedir{<dir>} is not set, default cache directory will
be in the following order:
- $TEXMFVAR/luamplib_cache
- $TEXMF_OUTPUT_DIRECTORY/luamplib_cache
- ./luamplib_cache
- $TEXMFOUTPUT/luamplib_cache
- .
+ $TEXMFVAR/luamplib_cache
+ $TEXMF_OUTPUT_DIRECTORY/luamplib_cache
+ ./luamplib_cache
+ $TEXMFOUTPUT/luamplib_cache
+ .
2024/01/25 2.25.3
* protect "..." even if textextlabel is disabled (revert part of v2.25.0)
diff --git a/macros/luatex/generic/luamplib/luamplib.dtx b/macros/luatex/generic/luamplib/luamplib.dtx
index 283120c622..52b35b8acb 100644
--- a/macros/luatex/generic/luamplib/luamplib.dtx
+++ b/macros/luatex/generic/luamplib/luamplib.dtx
@@ -85,7 +85,7 @@ See source file '\inFileName' for licencing and contact information.
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{luamplib.drv}%
- [2024/04/25 v2.28.2 Interface for using the mplib library]%
+ [2024/05/01 v2.29.0 Interface for using the mplib library]%
\documentclass{ltxdoc}
\usepackage{metalogo,multicol,mdwlist,fancyvrb,xspace}
\usepackage[x11names]{xcolor}
@@ -153,7 +153,7 @@ See source file '\inFileName' for licencing and contact information.
% \author{Hans Hagen, Taco Hoekwater, Elie Roux, Philipp Gesang and Kim Dohyun\\
% Maintainer: LuaLaTeX Maintainers ---
% Support: \email{lualatex-dev@tug.org}}
-% \date{2024/04/25 v2.28.2}
+% \date{2024/05/01 v2.29.0}
%
% \maketitle
%
@@ -209,6 +209,41 @@ See source file '\inFileName' for licencing and contact information.
% setting. (Actually these commands redefine |\prependtomplibbox|. You
% can define this command with anything suitable before a box.)
%
+% \paragraph{\cs{mpfig} \ldots\ \cs{endmpfig}}
+% Since v2.29 we provide unexpandable \TeX\ macros |\mpfig ... \endmpfig| and its starred version
+% |\mpfig* ... \endmpfig| to save typing toil.
+% The first is roughly the same as follows:
+% \begin{verbatim}
+% \begin{mplibcode}[@mpfig]
+% beginfig(0)
+% token list declared by \everymplib[@mpfig]
+% ...
+% token list declared by \everyendmplib[@mpfig]
+% endfig;
+% \end{mplibcode}
+% \end{verbatim}
+% and the starred version is roughly the same as follows:
+% \begin{verbatim}
+% \begin{mplibcode}[@mpfig]
+% ...
+% \end{mplibcode}
+% \end{verbatim}
+% In these macros |\mpliblegacybehavior{disable}| (see below)
+% is forcibly declared.
+% And as both share the same instance name, metapost codes are inherited among them.
+% A simple example:
+% \begin{verbatim}
+% \mpfig* input boxes \endmpfig
+% \everymplib[@mpfig]{ drawoptions(withcolor .5[red,white]); }
+% \mpfig circleit.a(btex Box 1 etex); drawboxed(a); \endmpfig
+% \end{verbatim}
+% The instance name (default: |@mpfig|) can be changed by redefining
+% \cs{mpfiginstancename}, after which a new MPlib instance will start and
+% code inheritance too will begin anew. |\let\mpfiginstancename\empty| will
+% prevent code inheritance if |\mplibcodeinherit{true}| (see below) is not declared.\footnote{%
+% As for user setting values, |enable|, |true|, |yes| are identical, and
+% |disable|, |false|, |no| are identical.}
+%
% \paragraph{\cs{mpliblegacybehavior\{enable\}}}
% By default, |\mpliblegacybehavior{enable}| is already declared,
% in which case
@@ -326,9 +361,10 @@ See source file '\inFileName' for licencing and contact information.
% each code chunks being treated as an independent instance, and never
% affected by previous code chunks.
%
-% \paragraph{Separate instances for \LaTeX{} environment}
+% \paragraph{Separate instances for \LaTeX{} and plain \TeX}
% v2.22 has added the support for several named MetaPost instances
% in \LaTeX{} |mplibcode| environment.
+% (And since v2.29 plain \TeX\ users can use this functionality as well.)
% Syntax is like so:
% \begin{verbatim}
% \begin{mplibcode}[instanceName]
@@ -378,7 +414,8 @@ See source file '\inFileName' for licencing and contact information.
% \endmplibcode
% \end{verbatim}
% Generally speaking, it is recommended to turn |mplibglobaltextext|
-% always on, because it has the advantage of more efficient processing.
+% always on, because it has the advantage of reusing metapost pictures
+% among code chunks sharing the same mplib instance.
% But everything has its downside: it will waste more memory resources.
%
% \paragraph{\cs{mplibverbatim}}
@@ -423,6 +460,19 @@ See source file '\inFileName' for licencing and contact information.
% As backslashes (|\|) should be escaped by users, it would be easier to use
% slashes (|/|) instead.
%
+% \paragraph{\texttt{mplibtexcolor}, \texttt{mplibrgbtexcolor}}
+% |mplibtexcolor| is a metapost operator that converts a \TeX\ color expression
+% to a MetaPost color expression. For instance:
+% \begin{verbatim}
+% color col; col := mplibtexcolor "olive!50";
+% \end{verbatim}
+% The result may vary in its color model (gray/rgb/cmyk)
+% according to the given \TeX\ color. (Spot colors are forced to
+% cmyk model, so this operator is not recommended for spot colors.)
+% Therefore the example shown above would raise a metapost error:
+% |cmykcolor col;| should have been declared.
+% By contrast, |mplibrgbtexcolor| always returns rgb model expressions.
+%
% \paragraph{\texttt{mplibgraphictext}}
% For some amusement, luamplib provides its own metapost operator
% |mplibgraphictext|, the effect of which is similar to that of
@@ -476,8 +526,8 @@ See source file '\inFileName' for licencing and contact information.
luatexbase.provides_module {
name = "luamplib",
- version = "2.28.2",
- date = "2024/04/25",
+ version = "2.29.0",
+ date = "2024/05/01",
description = "Lua package to typeset Metapost with LuaTeX's MPLib.",
}
@@ -821,9 +871,8 @@ luamplib.setformat = setformat
% v2.9 has introduced the concept of ``code inherit''
% \begin{macrocode}
luamplib.codeinherit = false
-
local mplibinstances = {}
-local instancename
+local has_instancename = false
local function reporterror (result, prevlog)
if not result then
@@ -913,7 +962,7 @@ end
% Here, excute each |mplibcode| data,
% ie |\begin{mplibcode} ... \end{mplibcode}|.
% \begin{macrocode}
-local function process (data)
+local function process (data, instancename)
% \end{macrocode}
%
% The workaround of issue \#70 seems to be unnecessary, as we use
@@ -927,6 +976,7 @@ local function process (data)
local currfmt
if instancename and instancename ~= "" then
currfmt = instancename
+ has_instancename = true
else
currfmt = tableconcat{
currentformat,
@@ -934,12 +984,10 @@ local function process (data)
tostring(luamplib.textextlabel),
tostring(luamplib.legacy_verbatimtex),
}
+ has_instancename = false
end
local mpx = mplibinstances[currfmt]
- local standalone = false
- if currfmt ~= instancename then
- standalone = not luamplib.codeinherit
- end
+ local standalone = not (has_instancename or luamplib.codeinherit)
if mpx and standalone then
mpx:finish()
end
@@ -1006,10 +1054,7 @@ end
% Boxes of an instance will also be global, so that
% their tex boxes can be shared among instances of the same name.
% \begin{macrocode}
-local texboxes = {
- locals = {}, localid = 4096,
- globals = {}, globalid = 0,
-}
+local texboxes = { globalid = 0, localid = 4096 }
% \end{macrocode}
% For conversion of |sp| to |bp|.
% \begin{macrocode}
@@ -1021,32 +1066,21 @@ withprescript "mplibtexboxid=%i:%f:%f")'
local function process_tex_text (str)
if str then
- local boxtable, global
- if instancename and instancename ~= ""
- or luamplib.globaltextext or luamplib.codeinherit then
- boxtable, global = texboxes.globals, "\\global"
+ local global = (has_instancename or luamplib.globaltextext or luamplib.codeinherit)
+ and "\\global" or ""
+ local tex_box_id
+ if global == "" then
+ tex_box_id = texboxes.localid + 1
+ texboxes.localid = tex_box_id
else
- boxtable, global = texboxes.locals, ""
- end
- local tex_box_id = boxtable[str]
- local box = tex_box_id and texgetbox(tex_box_id)
- if not box then
- if global == "" then
- tex_box_id = texboxes.localid + 1
- texboxes.localid = tex_box_id
- else
- local boxid = texboxes.globalid + 1
- texboxes.globalid = boxid
- run_tex_code(format(
- [[\expandafter\newbox\csname luamplib.box.%s\endcsname]], boxid))
- tex_box_id = tex.getcount'allocationnumber'
- end
- if str:find"^[%s%w%{%}%$%^%_]*$" then -- the same cs may expand differently
- boxtable[str] = tex_box_id
- end
- run_tex_code(format("%s\\setbox%i\\hbox{%s}", global, tex_box_id, str))
- box = texgetbox(tex_box_id)
+ local boxid = texboxes.globalid + 1
+ texboxes.globalid = boxid
+ run_tex_code(format(
+ [[\expandafter\newbox\csname luamplib.box.%s\endcsname]], boxid))
+ tex_box_id = tex.getcount'allocationnumber'
end
+ run_tex_code(format("%s\\setbox%i\\hbox{%s}", global, tex_box_id, str))
+ local box = texgetbox(tex_box_id)
local wd = box.width / factor
local ht = box.height / factor
local dp = box.depth / factor
@@ -1146,6 +1180,33 @@ luamplib.outlinecolor = function (str, filldraw)
return format('%s"nn"; %s"%s}{%s";', nn, cc, md, tableconcat(t,','))
end
+luamplib.gettexcolor = function (str, rgb)
+ local res = process_color(str, "metapost")
+ if res:find" cs " or res:find"@pdf.obj" then
+ if not rgb then
+ warn("%s is a spot color. Forced to CMYK", str)
+ end
+ run_tex_code({
+ "\\color_export:nnN{",
+ str,
+ "}{",
+ rgb and "space-sep-rgb" or "space-sep-cmyk",
+ "}\\mplib_@tempa",
+ },ccexplat)
+ return get_macro"mplib_@tempa":explode()
+ end
+ local t = colorsplit(res)
+ if #t == 3 or not rgb then return t end
+ run_tex_code({ -- force to rgb
+ "\\color_export:nnnN{",
+ #t == 4 and "cmyk" or "gray",
+ "}{",
+ tableconcat(t,","),
+ "}{space-sep-rgb}\\mplib_@tempa",
+ },ccexplat)
+ return get_macro"mplib_@tempa":explode()
+end
+
luamplib.shadecolor = function (str)
local res = process_color(str, "shade")
if res:find" cs " or res:find"@pdf.obj" then -- spot color shade: l3 only
@@ -1259,11 +1320,6 @@ local tex_code_pre_mplib = {}
luamplib.figid = 1
luamplib.in_the_fig = false
-local function legacy_mplibcode_reset ()
- tex_code_pre_mplib = {}
- luamplib.figid = 1
-end
-
local function process_verbatimtex_prefig (str)
if str then
tex_code_pre_mplib[luamplib.figid] = str
@@ -1297,7 +1353,6 @@ mp.mf_path_reset = mp.mf_path_reset or function() end
mp.mf_finish_saving_data = mp.mf_finish_saving_data or function() end
mp.report = mp.report or info
-
% \end{macrocode}
%
% metafun 2021-03-09 changes crashes luamplib.
@@ -1411,6 +1466,9 @@ def rawtextext (expr t) = runscript("luamplibtext{"&t&"}") enddef;
def mplibcolor (expr t) = runscript("luamplibcolor{"&t&"}") enddef;
def mplibdimen (expr t) = runscript("luamplibdimen{"&t&"}") enddef;
def VerbatimTeX (expr t) = runscript("luamplibverbtex{"&t&"}") enddef;
+def message expr t =
+ if string t: runscript("mp.report[=["&t&"]=]") else: errmessage "Not a string" fi
+enddef;
if known context_mlib:
defaultfont := "cmtt10";
let infont = normalinfont;
@@ -1445,6 +1503,12 @@ def externalfigure primary filename =
draw rawtextext("\includegraphics{"& filename &"}")
enddef;
def TEX = textext enddef;
+def mplibtexcolor primary c =
+ runscript("return luamplib.gettexcolor('"& c &"')")
+enddef;
+def mplibrgbtexcolor primary c =
+ runscript("return luamplib.gettexcolor('"& c &"','rgb')")
+enddef;
def mplibgraphictext primary t =
begingroup;
mplibgraphictext_ (t)
@@ -1556,23 +1620,22 @@ local function unprotect_expansion (str)
end
end
-luamplib.everymplib = { [""] = "" }
-luamplib.everyendmplib = { [""] = "" }
+luamplib.everymplib = setmetatable({ [""] = "" },{ __index = function(t) return t[""] end })
+luamplib.everyendmplib = setmetatable({ [""] = "" },{ __index = function(t) return t[""] end })
-local function process_mplibcode (data, instance)
- instancename = instance
- texboxes.locals, texboxes.localid = {}, 4096
+local function process_mplibcode (data, instancename)
+ texboxes.localid = 4096
% \end{macrocode}
%
-% This is needed for legacy behavior regarding |verbatimtex|
+% This is needed for legacy behavior
% \begin{macrocode}
- legacy_mplibcode_reset()
+ if luamplib.legacy_verbatimtex then
+ luamplib.figid, tex_code_pre_mplib = 1, {}
+ end
- local everymplib = luamplib.everymplib[instancename] or
- luamplib.everymplib[""]
- local everyendmplib = luamplib.everyendmplib[instancename] or
- luamplib.everyendmplib[""]
+ local everymplib = luamplib.everymplib[instancename]
+ local everyendmplib = luamplib.everyendmplib[instancename]
data = format("\n%s\n%s\n%s\n",everymplib, data, everyendmplib)
:gsub("\r","\n")
@@ -1618,7 +1681,7 @@ local function process_mplibcode (data, instance)
end)
end
- process(data)
+ process(data, instancename)
end
luamplib.process_mplibcode = process_mplibcode
@@ -1820,7 +1883,37 @@ end
% \end{macrocode}
%
-% Colors and Transparency
+% Colors
+% \begin{macrocode}
+local prev_override_color
+local function do_preobj_CR(object,prescript)
+ local override = prescript and prescript.MPlibOverrideColor
+ if override then
+ if pdfmode then
+ pdf_literalcode(override)
+ override = nil
+ else
+ put2output("\\special{%s}",override)
+ prev_override_color = override
+ end
+ else
+ local cs = object.color
+ if cs and #cs > 0 then
+ pdf_literalcode(luamplib.colorconverter(cs))
+ prev_override_color = nil
+ elseif not pdfmode then
+ override = prev_override_color
+ if override then
+ put2output("\\special{%s}",override)
+ end
+ end
+ end
+ return override
+end
+
+% \end{macrocode}
+%
+% For transparency and shading
% \begin{macrocode}
local pdfmanagement = is_defined'pdfmanagement_add:nnn'
local pdfobjs, pdfetcs = {}, {}
@@ -1851,7 +1944,7 @@ end
% \end{macrocode}
%
-% transparency
+% Transparency
% \begin{macrocode}
local transparancy_modes = { [0] = "Normal",
"Normal", "Multiply", "Screen", "Overlay",
@@ -1937,45 +2030,15 @@ end
local function do_preobj_TR(prescript)
local opaq = prescript and prescript.tr_transparency
- local tron_no, troff_no
+ local tron_no
if opaq then
local mode = prescript.tr_alternative or 1
mode = transparancy_modes[tonumber(mode)]
- troff_no = update_tr_res("Normal", 1)
- tron_no = update_tr_res(mode, opaq)
+ tron_no = update_tr_res(mode, opaq)
+ start_pdf_code()
pdf_literalcode("/MPlibTr%i gs",tron_no)
end
- return troff_no
-end
-
-% \end{macrocode}
-%
-% color
-% \begin{macrocode}
-local prev_override_color
-local function do_preobj_CR(object,prescript)
- local override = prescript and prescript.MPlibOverrideColor
- if override then
- if pdfmode then
- pdf_literalcode(override)
- override = nil
- else
- put2output("\\special{%s}",override)
- prev_override_color = override
- end
- else
- local cs = object.color
- if cs and #cs > 0 then
- pdf_literalcode(luamplib.colorconverter(cs))
- prev_override_color = nil
- elseif not pdfmode then
- override = prev_override_color
- if override then
- put2output("\\special{%s}",override)
- end
- end
- end
- return override
+ return tron_no
end
% \end{macrocode}
@@ -2213,22 +2276,6 @@ end
% \end{macrocode}
%
-% color stuffs at the end of object
-% \begin{macrocode}
-local function do_postobj_color(tr,over,sh)
- if sh then
- pdf_literalcode("W n /MPlibSh%s sh Q",sh)
- end
- if over then
- put2output"\\special{pdf:ec}"
- end
- if tr then
- pdf_literalcode("/MPlibTr%i gs",tr)
- end
-end
-
-% \end{macrocode}
-%
% Finally, flush figures by inserting PDF literals.
% \begin{macrocode}
local function flush(result,flusher)
@@ -2257,9 +2304,7 @@ local function flush(result,flusher)
% \begin{macrocode}
else
% \end{macrocode}
-% For collecting pdf materials and
-% for legacy behavior. Insert `pre-fig' \TeX\ code here, and
-% prepare a table for `in-fig' codes.
+% For legacy behavior, insert `pre-fig' \TeX\ code here.
% \begin{macrocode}
if tex_code_pre_mplib[f] then
put2output(tex_code_pre_mplib[f])
@@ -2274,14 +2319,13 @@ local function flush(result,flusher)
local objecttype = object.type
% \end{macrocode}
%
-% The following 7 lines are part of |btex...etex| patch.
+% The following 6 lines are part of |btex...etex| patch.
% Again, colors are processed at this stage.
% \begin{macrocode}
local prescript = object.prescript
prescript = prescript and script2table(prescript) -- prescript is now a table
- local tr_opaq = do_preobj_TR(prescript)
- local cr_over = do_preobj_CR(object,prescript)
- local shade_no = do_preobj_SH(object,prescript)
+ local cr_over = do_preobj_CR(object,prescript) -- color
+ local tr_opaq = do_preobj_TR(prescript) -- opacity
if prescript and prescript.mplibtexboxid then
put_tex_boxes(object,prescript)
elseif objecttype == "start_bounds" or objecttype == "stop_bounds" then --skip
@@ -2332,6 +2376,11 @@ local function flush(result,flusher)
savedhtap[#savedhtap+1] = object.htap or false
end
else
+% \end{macrocode}
+% Removed from ConTeXt general: color stuff.
+% Added instead : shading stuff
+% \begin{macrocode}
+ local shade_no = do_preobj_SH(object,prescript) -- shading
local ml = object.miterlimit
if ml and ml ~= miterlimit then
miterlimit = ml
@@ -2394,8 +2443,7 @@ local function flush(result,flusher)
flushnormalpath(path,open)
end
% \end{macrocode}
-%
-% Change from ConTeXt general: there was color stuffs.
+% Shading seems to conflict with these ops
% \begin{macrocode}
if not shade_no then -- conflict with shading
if objecttype == "fill" then
@@ -2447,18 +2495,28 @@ local function flush(result,flusher)
stop_pdf_code()
end
end
- end
- end
% \end{macrocode}
%
-% Added to ConTeXt general: color stuff.
-% And execute legacy |verbatimtex| code.
+% Added to ConTeXt general: post-object color and shading stuff.
% \begin{macrocode}
- do_postobj_color(tr_opaq,cr_over,shade_no)
+ if shade_no then -- shading
+ pdf_literalcode("W n /MPlibSh%s sh Q",shade_no)
+ end
+ end
+ end
+ if tr_opaq then -- opacity
+ stop_pdf_code()
+ end
+ if cr_over then -- color
+ put2output"\\special{pdf:ec}"
+ end
end
end
stop_pdf_code()
pdf_stopfigure()
+% \end{macrocode}
+% output collected materials to PDF, plus legacy |verbatimtex| code.
+% \begin{macrocode}
for _,v in ipairs(figcontents) do
if type(v) == "table" then
texsprint"\\mplibtoPDF{"; texsprint(v[1], v[2]); texsprint"}"
@@ -2511,7 +2569,7 @@ luamplib.colorconverter = colorconverter
\else
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{luamplib}
- [2024/04/25 v2.28.2 mplib package for LuaTeX]
+ [2024/05/01 v2.29.0 mplib package for LuaTeX]
\ifx\newluafunction\@undefined
\input ltluatex
\fi
@@ -2549,12 +2607,12 @@ luamplib.colorconverter = colorconverter
\ifcsname PackageInfo\endcsname
\PackageInfo{luamplib}{only dvipdfmx is supported currently}
\else
- \write128{luamplib Info: only dvipdfmx is supported currently}
+ \immediate\write-1{luamplib Info: only dvipdfmx is supported currently}
\fi
\fi
% \end{macrocode}
%
-% Make |mplibcode| typesetted always in horizontal mode.
+% To make |mplibcode| typeset always in horizontal mode.
% \begin{macrocode}
\def\mplibforcehmode{\let\prependtomplibbox\leavevmode}
\def\mplibnoforcehmode{\let\prependtomplibbox\relax}
@@ -2575,47 +2633,122 @@ luamplib.colorconverter = colorconverter
\def\mplibputtextbox#1{\vbox to 0pt{\vss\hbox to 0pt{\raise\dp#1\copy#1\hss}}}
% \end{macrocode}
%
-% The Plain-specific stuff.
+% simple way to use mplib:
+% |\mpfig draw fullcircle scaled 10; \endmpfig|
% \begin{macrocode}
-\unless\ifcsname ver@luamplib.sty\endcsname
-\def\mplibcode{%
+\def\mpfiginstancename{@mpfig}
+\protected\def\mpfig{%
\begingroup
+ \futurelet\nexttok\mplibmpfigbranch
+}
+\def\mplibmpfigbranch{%
+ \ifx *\nexttok
+ \expandafter\mplibprempfig
+ \else
+ \expandafter\mplibmainmpfig
+ \fi
+}
+\def\mplibmainmpfig{%
\begingroup
\mplibsetupcatcodes
- \mplibdocode
+ \mplibdomainmpfig
}
-\long\def\mplibdocode#1\endmplibcode{%
+\long\def\mplibdomainmpfig#1\endmpfig{%
\endgroup
- \directlua{luamplib.process_mplibcode([===[\unexpanded{#1}]===],"")}%
+ \directlua{
+ local legacy = luamplib.legacy_verbatimtex
+ local everympfig = luamplib.everymplib["\mpfiginstancename"] or ""
+ local everyendmpfig = luamplib.everyendmplib["\mpfiginstancename"] or ""
+ luamplib.legacy_verbatimtex = false
+ luamplib.everymplib["\mpfiginstancename"] = ""
+ luamplib.everyendmplib["\mpfiginstancename"] = ""
+ luamplib.process_mplibcode(
+ "beginfig(0) "..everympfig.." "..[===[\unexpanded{#1}]===].." "..everyendmpfig.." endfig;",
+ "\mpfiginstancename")
+ luamplib.legacy_verbatimtex = legacy
+ luamplib.everymplib["\mpfiginstancename"] = everympfig
+ luamplib.everyendmplib["\mpfiginstancename"] = everyendmpfig
+ }%
\endgroup
}
-\else
-% \end{macrocode}
-%
-% The \LaTeX-specific part: a new environment.
-% \begin{macrocode}
-\newenvironment{mplibcode}[1][]{%
- \global\def\currentmpinstancename{#1}%
- \mplibtmptoks{}\ltxdomplibcode
-}{}
-\def\ltxdomplibcode{%
+\def\mplibprempfig#1{%
\begingroup
\mplibsetupcatcodes
- \ltxdomplibcodeindeed
+ \mplibdoprempfig
}
-\def\mplib@mplibcode{mplibcode}
-\long\def\ltxdomplibcodeindeed#1\end#2{%
+\long\def\mplibdoprempfig#1\endmpfig{%
+ \endgroup
+ \directlua{
+ local legacy = luamplib.legacy_verbatimtex
+ local everympfig = luamplib.everymplib["\mpfiginstancename"]
+ local everyendmpfig = luamplib.everyendmplib["\mpfiginstancename"]
+ luamplib.legacy_verbatimtex = false
+ luamplib.everymplib["\mpfiginstancename"] = ""
+ luamplib.everyendmplib["\mpfiginstancename"] = ""
+ luamplib.process_mplibcode([===[\unexpanded{#1}]===],"\mpfiginstancename")
+ luamplib.legacy_verbatimtex = legacy
+ luamplib.everymplib["\mpfiginstancename"] = everympfig
+ luamplib.everyendmplib["\mpfiginstancename"] = everyendmpfig
+ }%
\endgroup
- \mplibtmptoks\expandafter{\the\mplibtmptoks#1}%
- \def\mplibtemp@a{#2}%
- \ifx\mplib@mplibcode\mplibtemp@a
- \directlua{luamplib.process_mplibcode([===[\the\mplibtmptoks]===],"\currentmpinstancename")}%
- \end{mplibcode}%
- \else
- \mplibtmptoks\expandafter{\the\mplibtmptoks\end{#2}}%
- \expandafter\ltxdomplibcode
- \fi
}
+\protected\def\endmpfig{endmpfig}
+% \end{macrocode}
+%
+% The Plain-specific stuff.
+% \begin{macrocode}
+\unless\ifcsname ver@luamplib.sty\endcsname
+ \def\mplibcodegetinstancename[#1]{\gdef\currentmpinstancename{#1}\mplibcodeindeed}
+ \protected\def\mplibcode{%
+ \begingroup
+ \futurelet\nexttok\mplibcodebranch
+ }
+ \def\mplibcodebranch{%
+ \ifx [\nexttok
+ \expandafter\mplibcodegetinstancename
+ \else
+ \global\let\currentmpinstancename\empty
+ \expandafter\mplibcodeindeed
+ \fi
+ }
+ \def\mplibcodeindeed{%
+ \begingroup
+ \mplibsetupcatcodes
+ \mplibdocode
+ }
+ \long\def\mplibdocode#1\endmplibcode{%
+ \endgroup
+ \directlua{luamplib.process_mplibcode([===[\unexpanded{#1}]===],"\currentmpinstancename")}%
+ \endgroup
+ }
+ \protected\def\endmplibcode{endmplibcode}
+\else
+% \end{macrocode}
+%
+% The \LaTeX-specific part: a new environment.
+% \begin{macrocode}
+ \newenvironment{mplibcode}[1][]{%
+ \global\def\currentmpinstancename{#1}%
+ \mplibtmptoks{}\ltxdomplibcode
+ }{}
+ \def\ltxdomplibcode{%
+ \begingroup
+ \mplibsetupcatcodes
+ \ltxdomplibcodeindeed
+ }
+ \def\mplib@mplibcode{mplibcode}
+ \long\def\ltxdomplibcodeindeed#1\end#2{%
+ \endgroup
+ \mplibtmptoks\expandafter{\the\mplibtmptoks#1}%
+ \def\mplibtemp@a{#2}%
+ \ifx\mplib@mplibcode\mplibtemp@a
+ \directlua{luamplib.process_mplibcode([===[\the\mplibtmptoks]===],"\currentmpinstancename")}%
+ \end{mplibcode}%
+ \else
+ \mplibtmptoks\expandafter{\the\mplibtmptoks\end{#2}}%
+ \expandafter\ltxdomplibcode
+ \fi
+ }
\fi
% \end{macrocode}
%
@@ -2652,17 +2785,17 @@ luamplib.colorconverter = colorconverter
% |luamplib.every(end)mplib| tables
%
% \begin{macrocode}
-\protected\def\everymplib{%
- \begingroup
- \mplibsetupcatcodes
- \mplibdoeverymplib
-}
-\protected\def\everyendmplib{%
- \begingroup
- \mplibsetupcatcodes
- \mplibdoeveryendmplib
-}
\ifcsname ver@luamplib.sty\endcsname
+ \protected\def\everymplib{%
+ \begingroup
+ \mplibsetupcatcodes
+ \mplibdoeverymplib
+ }
+ \protected\def\everyendmplib{%
+ \begingroup
+ \mplibsetupcatcodes
+ \mplibdoeveryendmplib
+ }
\newcommand\mplibdoeverymplib[2][]{%
\endgroup
\directlua{
@@ -2676,16 +2809,29 @@ luamplib.colorconverter = colorconverter
}%
}
\else
+ \def\mplibgetinstancename[#1]{\def\currentmpinstancename{#1}}
+ \protected\def\everymplib#1#{%
+ \ifx\empty#1\empty \mplibgetinstancename[]\else \mplibgetinstancename#1\fi
+ \begingroup
+ \mplibsetupcatcodes
+ \mplibdoeverymplib
+ }
\long\def\mplibdoeverymplib#1{%
\endgroup
\directlua{
- luamplib.everymplib[""] = [===[\unexpanded{#1}]===]
+ luamplib.everymplib["\currentmpinstancename"] = [===[\unexpanded{#1}]===]
}%
}
+ \protected\def\everyendmplib#1#{%
+ \ifx\empty#1\empty \mplibgetinstancename[]\else \mplibgetinstancename#1\fi
+ \begingroup
+ \mplibsetupcatcodes
+ \mplibdoeveryendmplib
+ }
\long\def\mplibdoeveryendmplib#1{%
\endgroup
\directlua{
- luamplib.everyendmplib[""] = [===[\unexpanded{#1}]===]
+ luamplib.everyendmplib["\currentmpinstancename"] = [===[\unexpanded{#1}]===]
}%
}
\fi
diff --git a/macros/luatex/generic/luamplib/luamplib.pdf b/macros/luatex/generic/luamplib/luamplib.pdf
index 6d410a4c26..a8cc10a03b 100644
--- a/macros/luatex/generic/luamplib/luamplib.pdf
+++ b/macros/luatex/generic/luamplib/luamplib.pdf
Binary files differ
diff --git a/macros/luatex/generic/luamplib/test-luamplib-latex.tex b/macros/luatex/generic/luamplib/test-luamplib-latex.tex
index a077f67736..52af10d72b 100644
--- a/macros/luatex/generic/luamplib/test-luamplib-latex.tex
+++ b/macros/luatex/generic/luamplib/test-luamplib-latex.tex
@@ -197,6 +197,10 @@ fill unitsquare xyscaled (\mpdim\textwidth,1cm)
;
endfig;
\end{mplibcode}%
+\leavevmode
+\everymplib[@mpfig]{ drawoptions(withcolor red); }%
+\mpfig* input boxes \endmpfig
+\mpfig circleit.a(btex\tracingcommands0 Box 1 etex); drawboxed(a); \endmpfig
\tracingcommands0
\vskip 2\baselineskip
diff --git a/macros/luatex/generic/luamplib/test-luamplib-plain.tex b/macros/luatex/generic/luamplib/test-luamplib-plain.tex
index 20773b280f..84d7041a8d 100644
--- a/macros/luatex/generic/luamplib/test-luamplib-plain.tex
+++ b/macros/luatex/generic/luamplib/test-luamplib-plain.tex
@@ -163,4 +163,83 @@ diameter:\Dia bp.%
rotatedlabel.top(textext("Rotated!"), origin, 45);
endfig;
\endmplibcode
+\par
+\mplibsetformat{metafun}%
+\mplibcode
+beginfig(1)
+fill unitsquare xyscaled (\mpdim\hsize, 1cm)
+ withshademethod "linear"
+ withshadevector (0,1)
+ withshadestep (
+ withshadefraction .5
+ withshadecolors (red,blue)
+ )
+ withshadestep (
+ withshadefraction 1
+ withshadecolors (blue,green)
+ )
+ ;
+endfig;
+\endmplibcode
+\everymplib[@mpfig]{ drawoptions(withcolor red); }%
+\mpfig* input boxes \endmpfig
+\mpfig circleit.a(btex\tracingcommands0 Box 1 etex); drawboxed(a); \endmpfig
+\tracingcommands0
+
+\vskip 2\baselineskip
+\mplibcodeinherit{disable}
+\everymplib[instanceOne]{beginfig(1);}
+\everyendmplib[instanceOne]{endfig;}
+
+\mplibcode[instanceOne]
+ picture TeX;
+ TeX := btex \TeX etex;
+a := 1cm;
+draw fullcircle scaled a;
+draw btex a circle with $d=a$ etex shifted (a,0);
+draw TeX;
+\endmplibcode
+Current instance name is: \currentmpinstancename \vskip 2\baselineskip
+
+\mplibcode[instanceTwo]
+beginfig(1);
+if not known a:
+ draw btex code is not inherited from an instance with a different name etex;
+else:
+ errmessage("Variable was inherited from a different instance");
+fi;
+endfig;
+\endmplibcode
+Current instance name is: \currentmpinstancename \vskip 2\baselineskip
+
+\mplibcode
+beginfig(1);
+if not known a:
+ draw btex code is not inherited if instance name is not listed etex;
+else:
+ errmessage("Variable was inherited from a different instance");
+fi;
+a := 1cm;
+endfig;
+\endmplibcode
+Current instance name is: \currentmpinstancename (should be empty) \vskip 2\baselineskip
+
+\mplibcode
+beginfig(1);
+if not known a:
+ draw btex code is not inherited if mplibcodeinherit is disabled and instance name is not explicitly set etex;
+else:
+ errmessage("Variable was inherited when code inheritance is turned off and instance name is not set");
+fi;
+endfig;
+\endmplibcode
+Current instance name is: \currentmpinstancename (should be empty) \vskip 2\baselineskip
+
+\mplibcode[instanceOne]
+draw unitsquare scaled a;
+draw btex a square with side $=a$, inherited from the same instance etex shifted (3/2a, 1/2a);
+ draw TeX;
+\endmplibcode
+Current instance name is: \currentmpinstancename \vskip 2\baselineskip
+
\bye
diff --git a/support/texlab/CHANGELOG.md b/support/texlab/CHANGELOG.md
index 4b3705b115..0a3b5ed683 100644
--- a/support/texlab/CHANGELOG.md
+++ b/support/texlab/CHANGELOG.md
@@ -5,6 +5,42 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [5.16.0] - 2024-05-01
+
+### Added
+
+- Add `texlab.experimental.labelDefinitionCommands` setting to customize the list of `\label`-like commands
+ ([#1093](https://github.com/latex-lsp/texlab/issues/1093))
+- Extend list of commands treated as command definitions and environment definitions ([#1087](https://github.com/latex-lsp/texlab/pull/1087))
+- Allow the server to trigger the forward search in an editor-agnostic way:
+ Running `texlab inverse-search --input <FILE> --line <LINE>` will open the specified document in the editor if the client supports it
+ ([#1091](https://github.com/latex-lsp/texlab/issues/1091))
+
+### Fixed
+
+- Fix detection of log dir when using `latexmkrc` (use `$aux_dir` instead of `$out_dir`) ([#1079](https://github.com/latex-lsp/texlab/pull/1079))
+- Fix extracting `$aux_dir` and `$out_dir` from `latexmkrc` ([#1079](https://github.com/latex-lsp/texlab/pull/1079))
+- Add support for extracting `$aux_dir` and `$out_dir` from `latexmk >= v4.85` (([#1079](https://github.com/latex-lsp/texlab/pull/1079)))
+- Improve log file change detection under Windows
+- Cleanup diagnostics of deleted files
+- Let `\declaretheorem` accept a list of environment names instead of just a single name ([#1075](https://github.com/latex-lsp/texlab/issues/1075))
+- Use configured directories if not set explicitly by `latexmkrc` file ([#1095](https://github.com/latex-lsp/texlab/issues/1095))
+
+## [5.15.0] - 2024-04-21
+
+### Added
+
+- Replace tilde (`~`), environment variables, `${userHome}`, `${workspaceFolder}` in options
+- Replace tidle (`~`) and environment variables in `\include`-like commands
+- Add "Go To Definition" support for user-defined commands with `\def` and `\let` ([#1081](https://github.com/latex-lsp/texlab/issues/1081))
+- Add "Find all References" for commands ([#1082](https://github.com/latex-lsp/texlab/issues/1082))
+- Support more macros for defining commands ([#1083](https://github.com/latex-lsp/texlab/issues/1083))
+
+### Fixed
+
+- Avoid panicking when malformed URIs are sent to the server ([#1078](https://github.com/latex-lsp/texlab/issues/1078))
+- Don't report errors for citations with macro arguments ([#1080](https://github.com/latex-lsp/texlab/issues/1080))
+
## [5.14.1] - 2024-03-27
### Fixed
diff --git a/support/texlab/Cargo.lock b/support/texlab/Cargo.lock
index 5f84112903..80599217fd 100644
--- a/support/texlab/Cargo.lock
+++ b/support/texlab/Cargo.lock
@@ -73,9 +73,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.75"
+version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
[[package]]
name = "autocfg"
@@ -90,7 +90,7 @@ dependencies = [
"bibtex-utils",
"dirs",
"distro",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"line-index",
"log",
"notify",
@@ -100,7 +100,9 @@ dependencies = [
"regex",
"rowan",
"rustc-hash",
+ "shellexpand",
"syntax",
+ "titlecase",
"url",
]
@@ -128,7 +130,7 @@ dependencies = [
"chrono",
"expect-test",
"human_name",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"parser",
"rowan",
"rustc-hash",
@@ -150,9 +152,9 @@ checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
name = "bstr"
-version = "1.9.0"
+version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc"
+checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706"
dependencies = [
"memchr",
"regex-automata",
@@ -172,6 +174,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]]
+name = "castaway"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -221,7 +232,7 @@ dependencies = [
"bibtex-utils",
"expect-test",
"isocountry",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"parser",
"rowan",
"rustc-hash",
@@ -233,9 +244,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.5.3"
+version = "4.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813"
+checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0"
dependencies = [
"clap_builder",
"clap_derive",
@@ -255,9 +266,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.5.3"
+version = "4.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90239a040c80f5e14809ca132ddc4176ab33d5e17e49691793296e3fcb34d72f"
+checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64"
dependencies = [
"heck",
"proc-macro2",
@@ -287,7 +298,7 @@ dependencies = [
"crossbeam-channel",
"distro",
"expect-test",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"libc",
"log",
"rowan",
@@ -299,6 +310,20 @@ dependencies = [
]
[[package]]
+name = "compact_str"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
+dependencies = [
+ "castaway",
+ "cfg-if",
+ "itoa",
+ "ryu",
+ "serde",
+ "static_assertions",
+]
+
+[[package]]
name = "completion"
version = "0.0.0"
dependencies = [
@@ -322,7 +347,7 @@ name = "completion-data"
version = "0.0.0"
dependencies = [
"flate2",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"once_cell",
"rustc-hash",
"serde",
@@ -424,7 +449,7 @@ name = "definition"
version = "0.0.0"
dependencies = [
"base-db",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"rowan",
"rustc-hash",
"syntax",
@@ -439,7 +464,7 @@ dependencies = [
"encoding_rs",
"encoding_rs_io",
"expect-test",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"line-index",
"log",
"multimap",
@@ -495,9 +520,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "encoding_rs"
-version = "0.8.33"
+version = "0.8.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
dependencies = [
"cfg-if",
]
@@ -523,9 +548,9 @@ dependencies = [
[[package]]
name = "expect-test"
-version = "1.4.1"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30d9eafeadd538e68fb28016364c9732d78e420b9ff8853fa5e4058861e9f8d3"
+checksum = "9e0be0a561335815e06dab7c62e50353134c796e7a6155402a64bcff66b6a5e0"
dependencies = [
"dissimilar",
"once_cell",
@@ -569,9 +594,9 @@ dependencies = [
[[package]]
name = "flate2"
-version = "1.0.28"
+version = "1.0.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+checksum = "4556222738635b7a3417ae6130d8f52201e45a0c4d1a907f0826383adb5f85e7"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -682,16 +707,16 @@ dependencies = [
[[package]]
name = "human_name"
-version = "2.0.2"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71b68533610561604eed4d26b480b5fecfba40514672f961d6669825be847fda"
+checksum = "7d40d3a11bc31949eb1d5070deb0cbb481bbd17d9423ecd3afdb3db5d81499b9"
dependencies = [
+ "compact_str",
"crossbeam-utils",
"phf",
"phf_codegen",
"serde",
"serde_json",
- "smallstr",
"smallvec",
"unicode-case-mapping",
"unicode-normalization",
@@ -741,6 +766,19 @@ dependencies = [
]
[[package]]
+name = "ipc"
+version = "0.0.0"
+dependencies = [
+ "crossbeam-channel",
+ "expect-test",
+ "log",
+ "parser",
+ "serde",
+ "serde_json",
+ "uds_windows",
+]
+
+[[package]]
name = "is-terminal"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -772,9 +810,9 @@ dependencies = [
[[package]]
name = "itertools"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
dependencies = [
"either",
]
@@ -786,12 +824,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
-name = "joinery"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72167d68f5fce3b8655487b8038691a3c9984ee769590f93f2a631f4ad64e4f5"
-
-[[package]]
name = "js-sys"
version = "0.3.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -873,32 +905,33 @@ checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
[[package]]
name = "logos"
-version = "0.13.0"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c000ca4d908ff18ac99b93a062cb8958d331c3220719c52e77cb19cc6ac5d2c1"
+checksum = "161971eb88a0da7ae0c333e1063467c5b5727e7fb6b710b8db4814eade3a42e8"
dependencies = [
"logos-derive",
]
[[package]]
name = "logos-codegen"
-version = "0.13.0"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68"
+checksum = "8e31badd9de5131fdf4921f6473d457e3dd85b11b7f091ceb50e4df7c3eeb12a"
dependencies = [
"beef",
"fnv",
+ "lazy_static",
"proc-macro2",
"quote",
- "regex-syntax 0.6.29",
+ "regex-syntax",
"syn",
]
[[package]]
name = "logos-derive"
-version = "0.13.0"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbfc0d229f1f42d790440136d941afd806bc9e949e2bcb8faa813b0f00d1267e"
+checksum = "1c2a69b3eb68d5bd595107c9ee58d7e07fe2bb5e360cc85b0f084dedac80de0a"
dependencies = [
"logos-codegen",
]
@@ -917,9 +950,9 @@ dependencies = [
[[package]]
name = "lsp-types"
-version = "0.95.0"
+version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "158c1911354ef73e8fe42da6b10c0484cb65c7f1007f28022e847706c1ab6984"
+checksum = "8e34d33a8e9b006cd3fc4fe69a921affa097bae4bb65f76271f4644f9a334365"
dependencies = [
"bitflags 1.3.2",
"serde",
@@ -944,6 +977,12 @@ dependencies = [
]
[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
name = "miniz_oxide"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -974,6 +1013,16 @@ dependencies = [
]
[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
name = "notify"
version = "6.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1071,16 +1120,25 @@ name = "parser"
version = "0.0.0"
dependencies = [
"expect-test",
+ "log",
"logos",
"once_cell",
+ "pathdiff",
"regex",
"rowan",
"rustc-hash",
"syntax",
"tempfile",
+ "versions",
]
[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
name = "percent-encoding"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1187,9 +1245,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
[[package]]
name = "rayon"
-version = "1.8.1"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
dependencies = [
"either",
"rayon-core",
@@ -1240,41 +1298,36 @@ version = "0.0.0"
dependencies = [
"base-db",
"rowan",
+ "rustc-hash",
"syntax",
"test-utils",
]
[[package]]
name = "regex"
-version = "1.10.2"
+version = "1.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
- "regex-syntax 0.8.2",
+ "regex-syntax",
]
[[package]]
name = "regex-automata"
-version = "0.4.3"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.8.2",
+ "regex-syntax",
]
[[package]]
name = "regex-syntax"
-version = "0.6.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
-
-[[package]]
-name = "regex-syntax"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
@@ -1323,6 +1376,12 @@ dependencies = [
]
[[package]]
+name = "rustversion"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47"
+
+[[package]]
name = "ryu"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1345,18 +1404,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "serde"
-version = "1.0.195"
+version = "1.0.199"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02"
+checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.195"
+version = "1.0.199"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c"
+checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc"
dependencies = [
"proc-macro2",
"quote",
@@ -1365,9 +1424,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.114"
+version = "1.0.116"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
+checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
dependencies = [
"itoa",
"ryu",
@@ -1396,19 +1455,19 @@ dependencies = [
]
[[package]]
-name = "siphasher"
-version = "0.3.11"
+name = "shellexpand"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b"
+dependencies = [
+ "dirs",
+]
[[package]]
-name = "smallstr"
-version = "0.3.0"
+name = "siphasher"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63b1aefdf380735ff8ded0b15f31aab05daf1f70216c01c02a12926badd1df9d"
-dependencies = [
- "smallvec",
-]
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
[[package]]
name = "smallvec"
@@ -1417,6 +1476,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
name = "strsim"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1429,7 +1494,7 @@ dependencies = [
"base-db",
"distro",
"expect-test",
- "itertools 0.12.0",
+ "itertools 0.12.1",
"line-index",
"regex",
"rowan",
@@ -1454,7 +1519,7 @@ dependencies = [
name = "syntax"
version = "0.0.0"
dependencies = [
- "itertools 0.12.0",
+ "itertools 0.12.1",
"rowan",
]
@@ -1483,7 +1548,7 @@ dependencies = [
[[package]]
name = "texlab"
-version = "5.14.1"
+version = "5.16.0"
dependencies = [
"anyhow",
"base-db",
@@ -1503,6 +1568,7 @@ dependencies = [
"highlights",
"hover",
"inlay-hints",
+ "ipc",
"line-index",
"links",
"log",
@@ -1535,18 +1601,18 @@ checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
[[package]]
name = "thiserror"
-version = "1.0.58"
+version = "1.0.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
+checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.58"
+version = "1.0.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
+checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66"
dependencies = [
"proc-macro2",
"quote",
@@ -1599,16 +1665,25 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "titlecase"
-version = "2.2.1"
+version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38397a8cdb017cfeb48bf6c154d6de975ac69ffeed35980fde199d2ee0842042"
+checksum = "bb3223c7b6ee54ec8521af7b060ad616cb90a66d0b94d05af340de30cf02c514"
dependencies = [
- "joinery",
- "lazy_static",
"regex",
]
[[package]]
+name = "uds_windows"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
+dependencies = [
+ "memoffset",
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
name = "unicode-bidi"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1666,6 +1741,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
+name = "versions"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38a8931f8d167b6448076020e70b9de46dcf5ea1731212481a092d0071c4ac5b"
+dependencies = [
+ "itertools 0.12.1",
+ "nom",
+]
+
+[[package]]
name = "walkdir"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/support/texlab/Cargo.toml b/support/texlab/Cargo.toml
index eeda5ec243..3894cb649f 100644
--- a/support/texlab/Cargo.toml
+++ b/support/texlab/Cargo.toml
@@ -9,7 +9,7 @@ authors = [
"Patrick Förster <patrick.foerster@outlook.de>",
]
edition = "2021"
-rust-version = "1.74"
+rust-version = "1.75"
[profile.release]
lto = "thin"
diff --git a/support/texlab/README.md b/support/texlab/README.md
index 8e90b7064b..ae63109f10 100644
--- a/support/texlab/README.md
+++ b/support/texlab/README.md
@@ -1,7 +1,5 @@
[![CI](https://github.com/latex-lsp/texlab/workflows/CI/badge.svg)](https://github.com/latex-lsp/texlab/actions)
-[![Coverage](https://codecov.io/gh/latex-lsp/texlab/branch/master/graph/badge.svg)](https://codecov.io/gh/latex-lsp/texlab)
[![Wiki](https://img.shields.io/badge/docs-Wiki-success)](https://github.com/latex-lsp/texlab/wiki)
-
[![GitHub release](https://img.shields.io/github/release/latex-lsp/texlab?label=github)](https://github.com/latex-lsp/texlab/releases)
[![CTAN](https://img.shields.io/ctan/v/texlab)](https://ctan.org/pkg/texlab)
@@ -81,3 +79,11 @@ in the project folder.
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.
+
+## Maintainers
+
+- Patrick Förster (patrick.foerster@outlook.de)
+
+## License
+
+[GPL-3.0](https://choosealicense.com/licenses/gpl-3.0/)
diff --git a/support/texlab/crates/base-db/Cargo.toml b/support/texlab/crates/base-db/Cargo.toml
index 010c83d0e4..ca477c496c 100644
--- a/support/texlab/crates/base-db/Cargo.toml
+++ b/support/texlab/crates/base-db/Cargo.toml
@@ -10,17 +10,19 @@ rust-version.workspace = true
bibtex-utils = { path = "../bibtex-utils" }
dirs = "5.0.1"
distro = { path = "../distro" }
-itertools = "0.12.0"
+itertools = "0.12.1"
line-index = { path = "../line-index" }
log = "0.4.21"
notify = "6.0.1"
once_cell = "1.19.0"
parser = { path = "../parser" }
percent-encoding = "2.3.0"
-regex = "1.10.2"
+regex = "1.10.4"
rowan = "0.15.15"
rustc-hash = "1.1.0"
+shellexpand = "3.1.0"
syntax = { path = "../syntax" }
+titlecase = "3.0.0"
url = "2.5.0"
[lib]
diff --git a/support/texlab/crates/base-db/src/deps.rs b/support/texlab/crates/base-db/src/deps.rs
index 06689a0df2..f501d04935 100644
--- a/support/texlab/crates/base-db/src/deps.rs
+++ b/support/texlab/crates/base-db/src/deps.rs
@@ -5,7 +5,7 @@ mod root;
pub use self::{
discover::{discover, watch},
- graph::{DirectLinkData, Edge, EdgeData, Graph},
+ graph::{DirectLinkData, Edge, EdgeData, Graph, HOME_DIR},
project::{parents, Project},
root::ProjectRoot,
};
diff --git a/support/texlab/crates/base-db/src/deps/discover.rs b/support/texlab/crates/base-db/src/deps/discover.rs
index 06905905a5..cbcab4d8fb 100644
--- a/support/texlab/crates/base-db/src/deps/discover.rs
+++ b/support/texlab/crates/base-db/src/deps/discover.rs
@@ -84,7 +84,7 @@ fn discover_parents(workspace: &mut Workspace, checked_paths: &mut FxHashSet<Pat
continue;
}
- if workspace.lookup_path(&file).is_none() && file.exists() {
+ if workspace.lookup_file(&file).is_none() && file.exists() {
changed |= workspace.load(&file, lang).is_ok();
checked_paths.insert(file);
}
@@ -107,7 +107,7 @@ fn discover_children(workspace: &mut Workspace, checked_paths: &mut FxHashSet<Pa
for file in files {
let language = Language::from_path(&file).unwrap_or(Language::Tex);
- if workspace.lookup_path(&file).is_none() && file.exists() {
+ if workspace.lookup_file(&file).is_none() && file.exists() {
changed |= workspace.load(&file, language).is_ok();
checked_paths.insert(file);
}
diff --git a/support/texlab/crates/base-db/src/deps/graph.rs b/support/texlab/crates/base-db/src/deps/graph.rs
index a90d8fa204..e07368d078 100644
--- a/support/texlab/crates/base-db/src/deps/graph.rs
+++ b/support/texlab/crates/base-db/src/deps/graph.rs
@@ -7,11 +7,11 @@ use percent_encoding::percent_decode_str;
use rustc_hash::FxHashSet;
use url::Url;
-use crate::{semantics, Document, Workspace};
+use crate::{semantics, util, Document, Workspace};
use super::ProjectRoot;
-pub(crate) static HOME_DIR: Lazy<Option<PathBuf>> = Lazy::new(dirs::home_dir);
+pub static HOME_DIR: Lazy<Option<PathBuf>> = Lazy::new(dirs::home_dir);
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
pub struct Edge {
@@ -158,7 +158,9 @@ impl Graph {
for target_uri in file_names
.iter()
- .flat_map(|file_name| start.root.src_dir.join(file_name))
+ .flat_map(|file_name| {
+ util::expand_relative_path(&file_name, &start.root.src_dir, workspace.folders())
+ })
.chain(distro_files)
{
match workspace.lookup(&target_uri) {
diff --git a/support/texlab/crates/base-db/src/deps/root.rs b/support/texlab/crates/base-db/src/deps/root.rs
index 442d6f9e35..a8cec6604a 100644
--- a/support/texlab/crates/base-db/src/deps/root.rs
+++ b/support/texlab/crates/base-db/src/deps/root.rs
@@ -1,6 +1,6 @@
use url::Url;
-use crate::{DocumentData, Workspace};
+use crate::{util, DocumentData, Workspace};
use super::graph::HOME_DIR;
@@ -74,6 +74,7 @@ impl ProjectRoot {
}
pub fn from_latexmkrc(workspace: &Workspace, dir: &Url) -> Option<Self> {
+ let config = workspace.config();
let rcfile = workspace
.iter()
.filter(|document| document.dir == *dir)
@@ -81,20 +82,30 @@ impl ProjectRoot {
let compile_dir = dir.clone();
let src_dir = dir.clone();
- let aux_dir = rcfile
+
+ let aux_dir_rc = rcfile
.aux_dir
.as_ref()
- .and_then(|path| append_dir(dir, path).ok())
- .unwrap_or_else(|| dir.clone());
+ .and_then(|path| append_dir(dir, path, workspace).ok());
- let out_dir = rcfile
+ let out_dir_rc = rcfile
.out_dir
.as_ref()
- .and_then(|path| append_dir(dir, path).ok())
+ .and_then(|path| append_dir(dir, path, workspace).ok());
+
+ let aux_dir = aux_dir_rc
+ .clone()
+ .or_else(|| append_dir(dir, &config.build.aux_dir, workspace).ok())
+ .unwrap_or_else(|| dir.clone());
+
+ let log_dir = aux_dir_rc
+ .or_else(|| append_dir(dir, &config.build.log_dir, workspace).ok())
+ .unwrap_or_else(|| dir.clone());
+
+ let pdf_dir = out_dir_rc
+ .or_else(|| append_dir(dir, &config.build.pdf_dir, workspace).ok())
.unwrap_or_else(|| dir.clone());
- let log_dir = out_dir.clone();
- let pdf_dir = out_dir;
let additional_files = vec![];
Some(Self {
@@ -124,9 +135,12 @@ impl ProjectRoot {
let compile_dir = dir.clone();
let src_dir = dir.clone();
let config = workspace.config();
- let aux_dir = append_dir(dir, &config.build.aux_dir).unwrap_or_else(|_| dir.clone());
- let log_dir = append_dir(dir, &config.build.log_dir).unwrap_or_else(|_| dir.clone());
- let pdf_dir = append_dir(dir, &config.build.pdf_dir).unwrap_or_else(|_| dir.clone());
+ let aux_dir =
+ append_dir(dir, &config.build.aux_dir, workspace).unwrap_or_else(|_| dir.clone());
+ let log_dir =
+ append_dir(dir, &config.build.log_dir, workspace).unwrap_or_else(|_| dir.clone());
+ let pdf_dir =
+ append_dir(dir, &config.build.pdf_dir, workspace).unwrap_or_else(|_| dir.clone());
let additional_files = vec![];
Self {
@@ -140,13 +154,13 @@ impl ProjectRoot {
}
}
-fn append_dir(dir: &Url, path: &str) -> Result<Url, url::ParseError> {
+fn append_dir(dir: &Url, path: &str, workspace: &Workspace) -> Result<Url, url::ParseError> {
let mut path = String::from(path);
if !path.ends_with('/') {
path.push('/');
}
- dir.join(&path)
+ util::expand_relative_path(&path, dir, workspace.folders())
}
impl std::fmt::Debug for ProjectRoot {
diff --git a/support/texlab/crates/base-db/src/document.rs b/support/texlab/crates/base-db/src/document.rs
index 25607a1bf5..7a388129fd 100644
--- a/support/texlab/crates/base-db/src/document.rs
+++ b/support/texlab/crates/base-db/src/document.rs
@@ -77,7 +77,12 @@ impl Document {
}
Language::Root => DocumentData::Root,
Language::Latexmkrc => {
- let data = parser::parse_latexmkrc(&text).unwrap_or_default();
+ let data = path
+ .as_deref()
+ .and_then(|path| path.parent())
+ .and_then(|dir| parser::parse_latexmkrc(&text, dir).ok())
+ .unwrap_or_default();
+
DocumentData::Latexmkrc(data)
}
Language::Tectonic => DocumentData::Tectonic,
diff --git a/support/texlab/crates/base-db/src/semantics.rs b/support/texlab/crates/base-db/src/semantics.rs
index f83d758cf7..a2f0de291f 100644
--- a/support/texlab/crates/base-db/src/semantics.rs
+++ b/support/texlab/crates/base-db/src/semantics.rs
@@ -1,3 +1,5 @@
+use rowan::{TextLen, TextRange};
+
pub mod auxiliary;
pub mod bib;
pub mod tex;
@@ -19,6 +21,13 @@ impl Span {
range: rowan::TextRange::empty(offset),
}
}
+
+ pub fn command<L: rowan::Language>(token: &rowan::SyntaxToken<L>) -> Self {
+ let range = token.text_range();
+ let range = TextRange::new(range.start() + "\\".text_len(), range.end());
+ let text = String::from(&token.text()[1..]);
+ Self::new(text, range)
+ }
}
impl std::fmt::Debug for Span {
diff --git a/support/texlab/crates/base-db/src/semantics/tex.rs b/support/texlab/crates/base-db/src/semantics/tex.rs
index 659ec8c166..1ad8969a80 100644
--- a/support/texlab/crates/base-db/src/semantics/tex.rs
+++ b/support/texlab/crates/base-db/src/semantics/tex.rs
@@ -1,6 +1,7 @@
-use rowan::{ast::AstNode, TextLen, TextRange};
+use rowan::{ast::AstNode, TextRange};
use rustc_hash::FxHashSet;
use syntax::latex::{self, HasBrack, HasCurly};
+use titlecase::titlecase;
use super::Span;
@@ -26,10 +27,7 @@ impl Semantics {
}
latex::SyntaxElement::Token(token) => {
if token.kind() == latex::COMMAND_NAME {
- let range = token.text_range();
- let range = TextRange::new(range.start() + "\\".text_len(), range.end());
- let text = String::from(&token.text()[1..]);
- self.commands.push(Span { range, text });
+ self.commands.push(Span::command(&token));
}
}
};
@@ -257,18 +255,15 @@ impl Semantics {
}
fn process_theorem_definition(&mut self, theorem_def: latex::TheoremDefinition) {
- let Some(name) = theorem_def.name().and_then(|name| name.key()) else {
- return;
- };
-
- let Some(heading) = theorem_def.heading() else {
- return;
- };
-
- self.theorem_definitions.push(TheoremDefinition {
- name: Span::from(&name),
- heading,
- });
+ for name in theorem_def.names() {
+ let name = Span::from(&name);
+ let heading = theorem_def
+ .heading()
+ .unwrap_or_else(|| titlecase(&name.text));
+
+ self.theorem_definitions
+ .push(TheoremDefinition { name, heading });
+ }
}
fn process_graphics_path(&mut self, graphics_path: latex::GraphicsPath) {
diff --git a/support/texlab/crates/base-db/src/util.rs b/support/texlab/crates/base-db/src/util.rs
index 068a0c9b2a..789eee9c85 100644
--- a/support/texlab/crates/base-db/src/util.rs
+++ b/support/texlab/crates/base-db/src/util.rs
@@ -1,8 +1,10 @@
+mod expand;
mod label;
pub mod queries;
mod regex_filter;
pub use self::{
+ expand::expand_relative_path,
label::{render_label, FloatKind, RenderedLabel, RenderedObject},
regex_filter::filter_regex_patterns,
};
diff --git a/support/texlab/crates/base-db/src/util/expand.rs b/support/texlab/crates/base-db/src/util/expand.rs
new file mode 100644
index 0000000000..a315737115
--- /dev/null
+++ b/support/texlab/crates/base-db/src/util/expand.rs
@@ -0,0 +1,31 @@
+use std::{borrow::Cow, path::PathBuf};
+
+use url::Url;
+
+use crate::deps::HOME_DIR;
+
+pub fn expand_relative_path(
+ path: &str,
+ current_dir: &Url,
+ workspace_folders: &[PathBuf],
+) -> Result<Url, url::ParseError> {
+ let home_dir = HOME_DIR.as_ref().and_then(|dir| dir.to_str());
+
+ let workspace_folder = workspace_folders.iter().find_map(|folder| {
+ let current_dir = current_dir.to_file_path().ok()?;
+ if current_dir.starts_with(folder) {
+ Some(folder.to_str()?)
+ } else {
+ None
+ }
+ });
+
+ let expand_var = |variable: &str| match variable {
+ "userHome" => home_dir.map(Cow::Borrowed),
+ "workspaceFolder" => Some(Cow::Borrowed(workspace_folder.unwrap_or("."))),
+ _ => std::env::var(variable).ok().map(Cow::Owned),
+ };
+
+ let path = shellexpand::full_with_context_no_errors(&path, || home_dir, expand_var);
+ current_dir.join(&path)
+}
diff --git a/support/texlab/crates/base-db/src/workspace.rs b/support/texlab/crates/base-db/src/workspace.rs
index 1afd4712e9..75674dcf8d 100644
--- a/support/texlab/crates/base-db/src/workspace.rs
+++ b/support/texlab/crates/base-db/src/workspace.rs
@@ -29,11 +29,22 @@ impl Workspace {
self.documents.get(key)
}
- pub fn lookup_path(&self, path: &Path) -> Option<&Document> {
+ pub fn lookup_file(&self, path: &Path) -> Option<&Document> {
self.iter()
.find(|document| document.path.as_deref() == Some(path))
}
+ pub fn lookup_file_or_dir<'a>(
+ &'a self,
+ file_or_dir: &'a Path,
+ ) -> impl Iterator<Item = &'a Document> + '_ {
+ self.iter().filter(move |doc| {
+ doc.path
+ .as_deref()
+ .map_or(false, |p| p.starts_with(file_or_dir))
+ })
+ }
+
pub fn iter(&self) -> impl Iterator<Item = &Document> + '_ {
self.documents.iter()
}
@@ -50,6 +61,10 @@ impl Workspace {
&self.graphs
}
+ pub fn folders(&self) -> &[PathBuf] {
+ &self.folders
+ }
+
pub fn open(
&mut self,
uri: Url,
@@ -90,7 +105,7 @@ impl Workspace {
Owner::Server
};
- if let Some(document) = self.lookup_path(path) {
+ if let Some(document) = self.lookup_file(path) {
if document.text == text {
return Ok(());
}
@@ -173,6 +188,7 @@ impl Workspace {
}
pub fn remove(&mut self, uri: &Url) {
+ log::info!("Removing moved or deleted document: {uri}");
self.documents.remove(uri);
}
diff --git a/support/texlab/crates/bibfmt/Cargo.toml b/support/texlab/crates/bibfmt/Cargo.toml
index 686e871d58..a712908d7d 100644
--- a/support/texlab/crates/bibfmt/Cargo.toml
+++ b/support/texlab/crates/bibfmt/Cargo.toml
@@ -15,5 +15,5 @@ line-index = { path = "../line-index" }
doctest = false
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
parser = { path = "../parser" }
diff --git a/support/texlab/crates/bibtex-utils/Cargo.toml b/support/texlab/crates/bibtex-utils/Cargo.toml
index f0158c18a6..97e13517f5 100644
--- a/support/texlab/crates/bibtex-utils/Cargo.toml
+++ b/support/texlab/crates/bibtex-utils/Cargo.toml
@@ -8,8 +8,8 @@ rust-version.workspace = true
[dependencies]
chrono = { version = "0.4.26", default-features = false, features = ["std"] }
-human_name = "2.0.2"
-itertools = "0.12.0"
+human_name = "2.0.3"
+itertools = "0.12.1"
rowan = "0.15.15"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
@@ -19,5 +19,5 @@ unicode-normalization = "0.1.23"
doctest = false
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
parser = { path = "../parser" }
diff --git a/support/texlab/crates/citeproc/Cargo.toml b/support/texlab/crates/citeproc/Cargo.toml
index bfc24fc83d..9e187f88e6 100644
--- a/support/texlab/crates/citeproc/Cargo.toml
+++ b/support/texlab/crates/citeproc/Cargo.toml
@@ -10,11 +10,11 @@ rust-version.workspace = true
bibtex-utils = { path = "../bibtex-utils" }
base-db = { path = "../base-db" }
isocountry = "0.3.2"
-itertools = "0.12.0"
+itertools = "0.12.1"
rowan = "0.15.15"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
-titlecase = "2.2.1"
+titlecase = "3.0.0"
unicode-normalization = "0.1.23"
url = "2.5.0"
@@ -22,5 +22,5 @@ url = "2.5.0"
doctest = false
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
parser = { path = "../parser" }
diff --git a/support/texlab/crates/commands/Cargo.toml b/support/texlab/crates/commands/Cargo.toml
index bebcde27af..c726e5f0d5 100644
--- a/support/texlab/crates/commands/Cargo.toml
+++ b/support/texlab/crates/commands/Cargo.toml
@@ -7,22 +7,22 @@ edition.workspace = true
rust-version.workspace = true
[dependencies]
-anyhow = "1.0.72"
+anyhow = "1.0.82"
base-db = { path = "../base-db" }
-bstr = "1.9.0"
+bstr = "1.9.1"
crossbeam-channel = "0.5.12"
-itertools = "0.12.0"
+itertools = "0.12.1"
libc = "0.2.153"
log = "0.4.21"
rowan = "0.15.15"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
-thiserror = "1.0.58"
+thiserror = "1.0.59"
url = "2.5.0"
[dev-dependencies]
distro = { path = "../distro" }
-expect-test = "1.4.1"
+expect-test = "1.5.0"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/completion-data/Cargo.toml b/support/texlab/crates/completion-data/Cargo.toml
index 37ecf1b3cf..59b707e474 100644
--- a/support/texlab/crates/completion-data/Cargo.toml
+++ b/support/texlab/crates/completion-data/Cargo.toml
@@ -7,12 +7,12 @@ edition.workspace = true
rust-version.workspace = true
[dependencies]
-flate2 = "1.0.28"
-itertools = "0.12.0"
+flate2 = "1.0.29"
+itertools = "0.12.1"
once_cell = "1.19.0"
rustc-hash = "1.1.0"
serde = { version = "1.0.195", features = ["derive"] }
-serde_json = "1.0.114"
+serde_json = "1.0.115"
[lib]
doctest = false
diff --git a/support/texlab/crates/completion/Cargo.toml b/support/texlab/crates/completion/Cargo.toml
index fbdd2d7201..e28e04dfc7 100644
--- a/support/texlab/crates/completion/Cargo.toml
+++ b/support/texlab/crates/completion/Cargo.toml
@@ -11,7 +11,7 @@ base-db = { path = "../base-db" }
completion-data = { path = "../completion-data" }
fuzzy-matcher = { version = "0.3.7", features = ["compact"] }
line-index = { path = "../line-index" }
-rayon = "1.8.1"
+rayon = "1.10.0"
rowan = "0.15.15"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
@@ -20,7 +20,7 @@ url = "2.5.0"
[dev-dependencies]
criterion = "0.5.1"
distro = { path = "../distro" }
-expect-test = "1.4.1"
+expect-test = "1.5.0"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/completion/src/providers/include.rs b/support/texlab/crates/completion/src/providers/include.rs
index 6246624733..60c432d097 100644
--- a/support/texlab/crates/completion/src/providers/include.rs
+++ b/support/texlab/crates/completion/src/providers/include.rs
@@ -1,11 +1,11 @@
use std::{
- fs,
+ fs::{self},
path::{Path, PathBuf},
};
use base_db::{
deps::{self, ProjectRoot},
- DocumentData, FeatureParams,
+ util, DocumentData, FeatureParams,
};
use rowan::{ast::AstNode, TextLen, TextRange};
use syntax::latex;
@@ -121,10 +121,8 @@ fn current_dir(
.map_or(params.document, Clone::clone);
let root = ProjectRoot::walk_and_find(workspace, &parent.dir);
- let path = root.src_dir.to_file_path().ok()?;
-
- let mut path = PathBuf::from(path.to_str()?.replace('\\', "/"));
+ let mut path = PathBuf::new();
if let Some(graphics_path) = graphics_path {
path.push(graphics_path);
}
@@ -136,7 +134,10 @@ fn current_dir(
}
}
- Some(path)
+ let current_dir =
+ util::expand_relative_path(path.to_str()?, &root.src_dir, workspace.folders()).ok()?;
+
+ current_dir.to_file_path().ok()
}
fn is_included(file: &Path, allowed_extensions: &[&str]) -> bool {
diff --git a/support/texlab/crates/completion/src/tests.rs b/support/texlab/crates/completion/src/tests.rs
index f41c9f5e6b..c6bed6e08e 100644
--- a/support/texlab/crates/completion/src/tests.rs
+++ b/support/texlab/crates/completion/src/tests.rs
@@ -1677,6 +1677,52 @@ fn theorem_end() {
}
#[test]
+fn theorem_begin_multiple() {
+ check(
+ r#"
+%! main.tex
+\declaretheorem[sibling=table, style=thmbox]{def1, def2, def3, def4, def5}
+\begin{def
+ |
+ ^^^"#,
+ expect![[r#"
+ [
+ Environment(
+ EnvironmentData {
+ name: "def1",
+ package: "<user>",
+ },
+ ),
+ Environment(
+ EnvironmentData {
+ name: "def2",
+ package: "<user>",
+ },
+ ),
+ Environment(
+ EnvironmentData {
+ name: "def3",
+ package: "<user>",
+ },
+ ),
+ Environment(
+ EnvironmentData {
+ name: "def4",
+ package: "<user>",
+ },
+ ),
+ Environment(
+ EnvironmentData {
+ name: "def5",
+ package: "<user>",
+ },
+ ),
+ ]
+ "#]],
+ );
+}
+
+#[test]
fn tikz_library_open_brace() {
check(
r#"
diff --git a/support/texlab/crates/definition/Cargo.toml b/support/texlab/crates/definition/Cargo.toml
index d8c4aa3a49..63ba15c308 100644
--- a/support/texlab/crates/definition/Cargo.toml
+++ b/support/texlab/crates/definition/Cargo.toml
@@ -13,7 +13,7 @@ rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
[dev-dependencies]
-itertools = "0.12.0"
+itertools = "0.12.1"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/definition/src/command.rs b/support/texlab/crates/definition/src/command.rs
index d618ca9ddf..3681cdbaa0 100644
--- a/support/texlab/crates/definition/src/command.rs
+++ b/support/texlab/crates/definition/src/command.rs
@@ -1,5 +1,5 @@
use base_db::DocumentData;
-use rowan::ast::AstNode;
+use rowan::{ast::AstNode, TextRange};
use syntax::latex;
use crate::DefinitionContext;
@@ -24,18 +24,16 @@ pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
let results = data
.root_node()
.descendants()
- .filter_map(latex::CommandDefinition::cast)
- .filter(|def| {
- def.name()
- .and_then(|name| name.command())
- .map_or(false, |node| node.text() == name.text())
+ .filter_map(|node| {
+ process_old_definition(node.clone()).or_else(|| process_new_definition(node))
})
- .filter_map(|def| {
+ .filter(|(_, command)| command.text() == name.text())
+ .filter_map(|(target_range, command)| {
Some(DefinitionResult {
origin_selection_range,
target: document,
- target_range: latex::small_range(&def),
- target_selection_range: def.name()?.command()?.text_range(),
+ target_range,
+ target_selection_range: command.text_range(),
})
});
@@ -44,3 +42,15 @@ pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
Some(())
}
+
+fn process_old_definition(node: latex::SyntaxNode) -> Option<(TextRange, latex::SyntaxToken)> {
+ let node = latex::OldCommandDefinition::cast(node)?;
+ let name = node.name()?;
+ Some((latex::small_range(&node), name))
+}
+
+fn process_new_definition(node: latex::SyntaxNode) -> Option<(TextRange, latex::SyntaxToken)> {
+ let node = latex::NewCommandDefinition::cast(node)?;
+ let name = node.name()?.command()?;
+ Some((latex::small_range(&node), name))
+}
diff --git a/support/texlab/crates/definition/src/tests.rs b/support/texlab/crates/definition/src/tests.rs
index 54b0e38f30..26f7c0dc3a 100644
--- a/support/texlab/crates/definition/src/tests.rs
+++ b/support/texlab/crates/definition/src/tests.rs
@@ -36,7 +36,21 @@ fn check(input: &str) {
}
#[test]
-fn test_command_definition() {
+fn test_old_command_definition() {
+ check(
+ r#"
+%! main.tex
+\def\foo{foo}
+ ^^^^
+^^^^^^^^
+\foo
+ |
+^^^^"#,
+ )
+}
+
+#[test]
+fn test_new_command_definition() {
check(
r#"
%! main.tex
diff --git a/support/texlab/crates/diagnostics/Cargo.toml b/support/texlab/crates/diagnostics/Cargo.toml
index 5a2a7a7e28..1cb09fdec9 100644
--- a/support/texlab/crates/diagnostics/Cargo.toml
+++ b/support/texlab/crates/diagnostics/Cargo.toml
@@ -8,21 +8,21 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
-encoding_rs = "0.8.33"
+encoding_rs = "0.8.34"
encoding_rs_io = "0.1.7"
-itertools = "0.12.0"
+itertools = "0.12.1"
line-index = { path = "../line-index" }
log = "0.4.21"
multimap = "0.10.0"
once_cell = "1.19.0"
-regex = "1.10.2"
+regex = "1.10.4"
rowan = "0.15.15"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
url = "2.5.0"
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/diagnostics/src/citations.rs b/support/texlab/crates/diagnostics/src/citations.rs
index 84b9a10b1c..0f09f589be 100644
--- a/support/texlab/crates/diagnostics/src/citations.rs
+++ b/support/texlab/crates/diagnostics/src/citations.rs
@@ -24,7 +24,7 @@ pub fn detect_undefined_citations<'a>(
for citation in &data.semantics.citations {
let name = citation.name_text();
- if name != "*" && !entries.contains(name) {
+ if name != "*" && !entries.contains(name) && !name.contains("#") {
let diagnostic = Diagnostic::Tex(citation.name.range, TexError::UndefinedCitation);
results
.entry(document.uri.clone())
diff --git a/support/texlab/crates/diagnostics/src/manager.rs b/support/texlab/crates/diagnostics/src/manager.rs
index 81347410c1..3573bc40f2 100644
--- a/support/texlab/crates/diagnostics/src/manager.rs
+++ b/support/texlab/crates/diagnostics/src/manager.rs
@@ -1,6 +1,6 @@
use base_db::{deps::Project, util::filter_regex_patterns, Document, Owner, Workspace};
use multimap::MultiMap;
-use rustc_hash::FxHashMap;
+use rustc_hash::{FxHashMap, FxHashSet};
use url::Url;
use crate::types::Diagnostic;
@@ -33,6 +33,18 @@ impl Manager {
self.chktex.insert(uri, diagnostics);
}
+ /// Removes stale diagnostics for documents that are no longer part of the workspace.
+ pub fn cleanup(&mut self, workspace: &Workspace) {
+ let uris = workspace
+ .iter()
+ .map(|doc| &doc.uri)
+ .collect::<FxHashSet<_>>();
+
+ self.grammar.retain(|uri, _| uris.contains(uri));
+ self.chktex.retain(|uri, _| uris.contains(uri));
+ self.build_log.retain(|uri, _| uris.contains(uri));
+ }
+
/// Returns all filtered diagnostics for the given workspace.
pub fn get(&self, workspace: &Workspace) -> FxHashMap<Url, Vec<Diagnostic>> {
let mut results: FxHashMap<Url, Vec<Diagnostic>> = FxHashMap::default();
diff --git a/support/texlab/crates/distro/Cargo.toml b/support/texlab/crates/distro/Cargo.toml
index c3a03105c7..eefcea2b49 100644
--- a/support/texlab/crates/distro/Cargo.toml
+++ b/support/texlab/crates/distro/Cargo.toml
@@ -7,7 +7,7 @@ edition.workspace = true
rust-version.workspace = true
[dependencies]
-anyhow = "1.0.72"
+anyhow = "1.0.82"
rustc-hash = "1.1.0"
[lib]
diff --git a/support/texlab/crates/folding/Cargo.toml b/support/texlab/crates/folding/Cargo.toml
index 500e80f5b2..684ddeb1b9 100644
--- a/support/texlab/crates/folding/Cargo.toml
+++ b/support/texlab/crates/folding/Cargo.toml
@@ -12,7 +12,7 @@ rowan = "0.15.15"
syntax = { path = "../syntax" }
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/highlights/Cargo.toml b/support/texlab/crates/highlights/Cargo.toml
index a7f58d1d19..785c282e3a 100644
--- a/support/texlab/crates/highlights/Cargo.toml
+++ b/support/texlab/crates/highlights/Cargo.toml
@@ -11,7 +11,7 @@ base-db = { path = "../base-db" }
rowan = "0.15.15"
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/hover/Cargo.toml b/support/texlab/crates/hover/Cargo.toml
index ebc2522c08..946ed734fe 100644
--- a/support/texlab/crates/hover/Cargo.toml
+++ b/support/texlab/crates/hover/Cargo.toml
@@ -15,7 +15,7 @@ rowan = "0.15.15"
syntax = { path = "../syntax" }
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/inlay-hints/Cargo.toml b/support/texlab/crates/inlay-hints/Cargo.toml
index 5547f5649a..ede4ca6188 100644
--- a/support/texlab/crates/inlay-hints/Cargo.toml
+++ b/support/texlab/crates/inlay-hints/Cargo.toml
@@ -13,7 +13,7 @@ rustc-hash = "1.1.0"
[dev-dependencies]
test-utils = { path = "../test-utils" }
-expect-test = "1.4.1"
+expect-test = "1.5.0"
[lib]
doctest = false
diff --git a/support/texlab/crates/ipc/Cargo.toml b/support/texlab/crates/ipc/Cargo.toml
new file mode 100644
index 0000000000..ae31dcaf55
--- /dev/null
+++ b/support/texlab/crates/ipc/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "ipc"
+version = "0.0.0"
+license.workspace = true
+authors.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+
+[dependencies]
+crossbeam-channel = "0.5.12"
+serde = "1.0.199"
+serde_json = "1.0.116"
+log = "0.4.21"
+uds_windows = "1.1.0"
+
+[lib]
+doctest = false
+
+[dev-dependencies]
+expect-test = "1.5.0"
+parser = { path = "../parser" }
diff --git a/support/texlab/crates/ipc/src/lib.rs b/support/texlab/crates/ipc/src/lib.rs
new file mode 100644
index 0000000000..3da3239064
--- /dev/null
+++ b/support/texlab/crates/ipc/src/lib.rs
@@ -0,0 +1,54 @@
+use std::{
+ io::{self, BufRead, BufReader, BufWriter, Read},
+ path::PathBuf,
+};
+
+use serde::{de::DeserializeOwned, Serialize};
+
+#[cfg(unix)]
+use std::os::unix::net::{UnixListener, UnixStream};
+
+#[cfg(windows)]
+use uds_windows::{UnixListener, UnixStream};
+
+fn socket_path() -> PathBuf {
+ std::env::temp_dir().join("texlab.sock")
+}
+
+pub fn send_request<T: Serialize>(msg: T) -> io::Result<()> {
+ let stream = UnixStream::connect(socket_path())?;
+ let mut conn = BufWriter::new(stream);
+ serde_json::to_writer(&mut conn, &msg)?;
+ Ok(())
+}
+
+pub fn spawn_server<T, F>(mut event_handler: F) -> io::Result<()>
+where
+ T: DeserializeOwned,
+ F: FnMut(T) + Send + 'static,
+{
+ let socket_path = socket_path();
+ let _ = std::fs::remove_file(&socket_path);
+ let listener = UnixListener::bind(socket_path)?;
+
+ std::thread::spawn(move || {
+ for conn in listener.incoming().flatten() {
+ let _ = handle_request(conn, &mut event_handler);
+ }
+ });
+
+ Ok(())
+}
+
+fn handle_request<T, F>(conn: impl Read, event_handler: &mut F) -> io::Result<()>
+where
+ T: DeserializeOwned,
+ F: FnMut(T),
+{
+ let mut conn = BufReader::new(conn);
+ let mut line = String::new();
+ conn.read_line(&mut line)?;
+ let msg = serde_json::from_str(&line)?;
+ event_handler(msg);
+ Ok(())
+}
diff --git a/support/texlab/crates/links/Cargo.toml b/support/texlab/crates/links/Cargo.toml
index d3df0c95f8..74378483a9 100644
--- a/support/texlab/crates/links/Cargo.toml
+++ b/support/texlab/crates/links/Cargo.toml
@@ -11,7 +11,7 @@ base-db = { path = "../base-db" }
[dev-dependencies]
test-utils = { path = "../test-utils" }
-expect-test = "1.4.1"
+expect-test = "1.5.0"
[lib]
doctest = false
diff --git a/support/texlab/crates/parser/Cargo.toml b/support/texlab/crates/parser/Cargo.toml
index 0fd8889899..39fa34ef63 100644
--- a/support/texlab/crates/parser/Cargo.toml
+++ b/support/texlab/crates/parser/Cargo.toml
@@ -7,16 +7,19 @@ edition.workspace = true
rust-version.workspace = true
[dependencies]
-logos = "0.13.0"
+log = "0.4.21"
+logos = "0.14.0"
once_cell = "1.19.0"
-regex = "1.10.2"
+pathdiff = "0.2.1"
+regex = "1.10.4"
rowan = "0.15.15"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
tempfile = "3.10.1"
+versions = "6.2.0"
[dev-dependencies]
-expect-test = "1.4.1"
+expect-test = "1.5.0"
[lib]
doctest = false
diff --git a/support/texlab/crates/parser/src/bibtex.rs b/support/texlab/crates/parser/src/bibtex.rs
index fda0d4a0ad..e2cde27dec 100644
--- a/support/texlab/crates/parser/src/bibtex.rs
+++ b/support/texlab/crates/parser/src/bibtex.rs
@@ -325,7 +325,7 @@ enum ValueToken {
#[token("\"")]
Quote,
- #[regex(r"\d+", priority = 2)]
+ #[regex(r"\d+", priority = 3)]
Integer,
#[regex(r#"[^\s"\{\},#]+"#)]
@@ -349,7 +349,7 @@ enum ContentToken {
#[token("\"")]
Quote,
- #[regex(r"\d+", priority = 2)]
+ #[regex(r"\d+", priority = 3)]
Integer,
#[token(r#"~"#)]
diff --git a/support/texlab/crates/parser/src/config.rs b/support/texlab/crates/parser/src/config.rs
index 6537d21b0d..f81083f132 100644
--- a/support/texlab/crates/parser/src/config.rs
+++ b/support/texlab/crates/parser/src/config.rs
@@ -7,6 +7,7 @@ pub struct SyntaxConfig {
pub enum_environments: FxHashSet<String>,
pub verbatim_environments: FxHashSet<String>,
pub citation_commands: FxHashSet<String>,
+ pub label_definition_commands: FxHashSet<String>,
pub label_reference_commands: FxHashSet<String>,
}
@@ -32,6 +33,11 @@ impl Default for SyntaxConfig {
.map(ToString::to_string)
.collect();
+ let label_definition_commands = DEFAULT_LABEL_DEFINITION_COMMANDS
+ .iter()
+ .map(ToString::to_string)
+ .collect();
+
let label_reference_commands = DEFAULT_LABEL_REFERENCE_COMMANDS
.iter()
.map(ToString::to_string)
@@ -43,6 +49,7 @@ impl Default for SyntaxConfig {
enum_environments,
verbatim_environments,
citation_commands,
+ label_definition_commands,
label_reference_commands,
}
}
@@ -163,6 +170,8 @@ static DEFAULT_CITATION_COMMANDS: &[&str] = &[
"citeA*",
];
+static DEFAULT_LABEL_DEFINITION_COMMANDS: &[&str] = &["label"];
+
static DEFAULT_LABEL_REFERENCE_COMMANDS: &[&str] = &[
"ref",
"vref",
diff --git a/support/texlab/crates/parser/src/latex.rs b/support/texlab/crates/parser/src/latex.rs
index a114d3ecba..669ba82f99 100644
--- a/support/texlab/crates/parser/src/latex.rs
+++ b/support/texlab/crates/parser/src/latex.rs
@@ -139,7 +139,8 @@ impl<'a> Parser<'a> {
CommandName::LabelReference => self.label_reference(),
CommandName::LabelReferenceRange => self.label_reference_range(),
CommandName::LabelNumber => self.label_number(),
- CommandName::CommandDefinition => self.command_definition(),
+ CommandName::OldCommandDefinition => self.old_command_definition(),
+ CommandName::NewCommandDefinition => self.new_command_definition(),
CommandName::MathOperator => self.math_operator(),
CommandName::GlossaryEntryDefinition => self.glossary_entry_definition(),
CommandName::GlossaryEntryReference => self.glossary_entry_reference(),
@@ -907,8 +908,21 @@ impl<'a> Parser<'a> {
self.builder.finish_node();
}
- fn command_definition(&mut self) {
- self.builder.start_node(COMMAND_DEFINITION.into());
+ fn old_command_definition(&mut self) {
+ self.builder.start_node(OLD_COMMAND_DEFINITION.into());
+ self.eat();
+ self.trivia();
+
+ if let Some(Token::CommandName(_)) = self.lexer.peek() {
+ self.eat();
+ self.trivia();
+ }
+
+ self.builder.finish_node();
+ }
+
+ fn new_command_definition(&mut self) {
+ self.builder.start_node(NEW_COMMAND_DEFINITION.into());
self.eat();
self.trivia();
@@ -1071,7 +1085,7 @@ impl<'a> Parser<'a> {
}
if self.lexer.peek() == Some(Token::LCurly) {
- self.curly_group_word();
+ self.curly_group_word_list();
}
self.builder.finish_node();
diff --git a/support/texlab/crates/parser/src/latex/lexer/commands.rs b/support/texlab/crates/parser/src/latex/lexer/commands.rs
index 95eef4becd..4d1a7ca320 100644
--- a/support/texlab/crates/parser/src/latex/lexer/commands.rs
+++ b/support/texlab/crates/parser/src/latex/lexer/commands.rs
@@ -29,15 +29,26 @@ pub fn classify(name: &str, config: &SyntaxConfig) -> CommandName {
"import" | "subimport" | "inputfrom" | "subinputfrom" | "subincludefrom" => {
CommandName::Import
}
- "label" => CommandName::LabelDefinition,
"crefrange" | "crefrange*" | "Crefrange" | "Crefrange*" => CommandName::LabelReferenceRange,
"newlabel" => CommandName::LabelNumber,
+ "def" | "let" => CommandName::OldCommandDefinition,
"newcommand"
| "newcommand*"
| "renewcommand"
| "renewcommand*"
| "DeclareRobustCommand"
- | "DeclareRobustCommand*" => CommandName::CommandDefinition,
+ | "DeclareRobustCommand*"
+ | "NewDocumentCommand"
+ | "RenewDocumentCommand"
+ | "ProvideDocumentCommand"
+ | "DeclareDocumentCommand"
+ | "NewExpandableDocumentCommand"
+ | "RenewExpandableDocumentCommand"
+ | "ProvideExpandableDocumentCommand"
+ | "DeclareExpandableDocumentCommand"
+ | "NewCommandCopy"
+ | "RenewCommandCopy"
+ | "DeclareCommandCopy" => CommandName::NewCommandDefinition,
"DeclareMathOperator" | "DeclareMathOperator*" => CommandName::MathOperator,
"newglossaryentry" => CommandName::GlossaryEntryDefinition,
"gls" | "Gls" | "GLS" | "glspl" | "Glspl" | "GLSpl" | "glsdisp" | "glslink" | "glstext"
@@ -70,14 +81,24 @@ pub fn classify(name: &str, config: &SyntaxConfig) -> CommandName {
"definecolor" => CommandName::ColorDefinition,
"definecolorset" => CommandName::ColorSetDefinition,
"usepgflibrary" | "usetikzlibrary" => CommandName::TikzLibraryImport,
- "newenvironment" | "newenvironment*" | "renewenvironment" | "renewenvironment*" => {
- CommandName::EnvironmentDefinition
- }
+ "newenvironment"
+ | "newenvironment*"
+ | "renewenvironment"
+ | "renewenvironment*"
+ | "NewDocumentEnvironment"
+ | "RenewDocumentEnvironment"
+ | "ProvideDocumentEnvironment"
+ | "DeclareDocumentEnvironment"
+ | "NewEnvironmentCopy"
+ | "RenewEnvironmentCopy"
+ | "DeclareEnvironmentCopy" => CommandName::EnvironmentDefinition,
"graphicspath" => CommandName::GraphicsPath,
"iffalse" => CommandName::BeginBlockComment,
"fi" => CommandName::EndBlockComment,
"verb" => CommandName::VerbatimBlock,
+
_ if config.citation_commands.contains(name) => CommandName::Citation,
+ _ if config.label_definition_commands.contains(name) => CommandName::LabelDefinition,
_ if config.label_reference_commands.contains(name) => CommandName::LabelReference,
_ => CommandName::Generic,
}
diff --git a/support/texlab/crates/parser/src/latex/lexer/types.rs b/support/texlab/crates/parser/src/latex/lexer/types.rs
index 27ae874d9d..896ce01c05 100644
--- a/support/texlab/crates/parser/src/latex/lexer/types.rs
+++ b/support/texlab/crates/parser/src/latex/lexer/types.rs
@@ -119,7 +119,8 @@ pub enum CommandName {
LabelReference,
LabelReferenceRange,
LabelNumber,
- CommandDefinition,
+ OldCommandDefinition,
+ NewCommandDefinition,
MathOperator,
GlossaryEntryDefinition,
GlossaryEntryReference,
diff --git a/support/texlab/crates/parser/src/latex/tests.rs b/support/texlab/crates/parser/src/latex/tests.rs
index 9c086c43fd..2c9dc9335f 100644
--- a/support/texlab/crates/parser/src/latex/tests.rs
+++ b/support/texlab/crates/parser/src/latex/tests.rs
@@ -560,21 +560,21 @@ fn test_command_definition_no_argc() {
check(
r#"\newcommand{\foo}{foo}"#,
expect![[r#"
- ROOT@0..22
- PREAMBLE@0..22
- COMMAND_DEFINITION@0..22
- COMMAND_NAME@0..11 "\\newcommand"
- CURLY_GROUP_COMMAND@11..17
- L_CURLY@11..12 "{"
- COMMAND_NAME@12..16 "\\foo"
- R_CURLY@16..17 "}"
- CURLY_GROUP@17..22
- L_CURLY@17..18 "{"
- TEXT@18..21
- WORD@18..21 "foo"
- R_CURLY@21..22 "}"
+ ROOT@0..22
+ PREAMBLE@0..22
+ NEW_COMMAND_DEFINITION@0..22
+ COMMAND_NAME@0..11 "\\newcommand"
+ CURLY_GROUP_COMMAND@11..17
+ L_CURLY@11..12 "{"
+ COMMAND_NAME@12..16 "\\foo"
+ R_CURLY@16..17 "}"
+ CURLY_GROUP@17..22
+ L_CURLY@17..18 "{"
+ TEXT@18..21
+ WORD@18..21 "foo"
+ R_CURLY@21..22 "}"
- "#]],
+ "#]],
);
}
@@ -583,16 +583,16 @@ fn test_command_definition_no_impl() {
check(
r#"\newcommand{\foo}"#,
expect![[r#"
- ROOT@0..17
- PREAMBLE@0..17
- COMMAND_DEFINITION@0..17
- COMMAND_NAME@0..11 "\\newcommand"
- CURLY_GROUP_COMMAND@11..17
- L_CURLY@11..12 "{"
- COMMAND_NAME@12..16 "\\foo"
- R_CURLY@16..17 "}"
+ ROOT@0..17
+ PREAMBLE@0..17
+ NEW_COMMAND_DEFINITION@0..17
+ COMMAND_NAME@0..11 "\\newcommand"
+ CURLY_GROUP_COMMAND@11..17
+ L_CURLY@11..12 "{"
+ COMMAND_NAME@12..16 "\\foo"
+ R_CURLY@16..17 "}"
- "#]],
+ "#]],
);
}
@@ -601,15 +601,15 @@ fn test_command_definition_no_impl_error() {
check(
r#"\newcommand{\foo"#,
expect![[r#"
- ROOT@0..16
- PREAMBLE@0..16
- COMMAND_DEFINITION@0..16
- COMMAND_NAME@0..11 "\\newcommand"
- CURLY_GROUP_COMMAND@11..16
- L_CURLY@11..12 "{"
- COMMAND_NAME@12..16 "\\foo"
+ ROOT@0..16
+ PREAMBLE@0..16
+ NEW_COMMAND_DEFINITION@0..16
+ COMMAND_NAME@0..11 "\\newcommand"
+ CURLY_GROUP_COMMAND@11..16
+ L_CURLY@11..12 "{"
+ COMMAND_NAME@12..16 "\\foo"
- "#]],
+ "#]],
);
}
@@ -618,31 +618,31 @@ fn test_command_definition_optional() {
check(
r#"\newcommand{\foo}[1][def]{#1}"#,
expect![[r##"
- ROOT@0..29
- PREAMBLE@0..29
- COMMAND_DEFINITION@0..29
- COMMAND_NAME@0..11 "\\newcommand"
- CURLY_GROUP_COMMAND@11..17
- L_CURLY@11..12 "{"
- COMMAND_NAME@12..16 "\\foo"
- R_CURLY@16..17 "}"
- BRACK_GROUP_WORD@17..20
- L_BRACK@17..18 "["
- KEY@18..19
- WORD@18..19 "1"
- R_BRACK@19..20 "]"
- BRACK_GROUP@20..25
- L_BRACK@20..21 "["
- TEXT@21..24
- WORD@21..24 "def"
- R_BRACK@24..25 "]"
- CURLY_GROUP@25..29
- L_CURLY@25..26 "{"
- TEXT@26..28
- WORD@26..28 "#1"
- R_CURLY@28..29 "}"
+ ROOT@0..29
+ PREAMBLE@0..29
+ NEW_COMMAND_DEFINITION@0..29
+ COMMAND_NAME@0..11 "\\newcommand"
+ CURLY_GROUP_COMMAND@11..17
+ L_CURLY@11..12 "{"
+ COMMAND_NAME@12..16 "\\foo"
+ R_CURLY@16..17 "}"
+ BRACK_GROUP_WORD@17..20
+ L_BRACK@17..18 "["
+ KEY@18..19
+ WORD@18..19 "1"
+ R_BRACK@19..20 "]"
+ BRACK_GROUP@20..25
+ L_BRACK@20..21 "["
+ TEXT@21..24
+ WORD@21..24 "def"
+ R_BRACK@24..25 "]"
+ CURLY_GROUP@25..29
+ L_CURLY@25..26 "{"
+ TEXT@26..28
+ WORD@26..28 "#1"
+ R_CURLY@28..29 "}"
- "##]],
+ "##]],
);
}
@@ -651,27 +651,27 @@ fn test_command_definition_simple() {
check(
r#"\newcommand[1]{\id}{#1}"#,
expect![[r##"
- ROOT@0..23
- PREAMBLE@0..23
- COMMAND_DEFINITION@0..19
- COMMAND_NAME@0..11 "\\newcommand"
- BRACK_GROUP_WORD@11..14
- L_BRACK@11..12 "["
- KEY@12..13
- WORD@12..13 "1"
- R_BRACK@13..14 "]"
- CURLY_GROUP@14..19
- L_CURLY@14..15 "{"
- GENERIC_COMMAND@15..18
- COMMAND_NAME@15..18 "\\id"
- R_CURLY@18..19 "}"
- CURLY_GROUP@19..23
- L_CURLY@19..20 "{"
- TEXT@20..22
- WORD@20..22 "#1"
- R_CURLY@22..23 "}"
+ ROOT@0..23
+ PREAMBLE@0..23
+ NEW_COMMAND_DEFINITION@0..19
+ COMMAND_NAME@0..11 "\\newcommand"
+ BRACK_GROUP_WORD@11..14
+ L_BRACK@11..12 "["
+ KEY@12..13
+ WORD@12..13 "1"
+ R_BRACK@13..14 "]"
+ CURLY_GROUP@14..19
+ L_CURLY@14..15 "{"
+ GENERIC_COMMAND@15..18
+ COMMAND_NAME@15..18 "\\id"
+ R_CURLY@18..19 "}"
+ CURLY_GROUP@19..23
+ L_CURLY@19..20 "{"
+ TEXT@20..22
+ WORD@20..22 "#1"
+ R_CURLY@22..23 "}"
- "##]],
+ "##]],
);
}
@@ -682,7 +682,7 @@ fn test_command_definition_with_begin() {
expect![[r#"
ROOT@0..80
PREAMBLE@0..80
- COMMAND_DEFINITION@0..80
+ NEW_COMMAND_DEFINITION@0..80
COMMAND_NAME@0..11 "\\newcommand"
CURLY_GROUP_COMMAND@11..35
L_CURLY@11..12 "{"
@@ -2446,11 +2446,11 @@ fn test_issue_745() {
GENERIC_COMMAND@50..64
COMMAND_NAME@50..63 "\\ExplSyntaxOn"
LINE_BREAK@63..64 "\n"
- GENERIC_COMMAND@64..223
+ ENVIRONMENT_DEFINITION@64..200
COMMAND_NAME@64..87 "\\NewDocumentEnvironment"
- CURLY_GROUP@87..96
+ CURLY_GROUP_WORD@87..96
L_CURLY@87..88 "{"
- TEXT@88..95
+ KEY@88..95
WORD@88..95 "exptblr"
R_CURLY@95..96 "}"
CURLY_GROUP@96..107
@@ -2515,21 +2515,21 @@ fn test_issue_745() {
R_CURLY@194..195 "}"
LINE_BREAK@195..196 "\n"
WHITESPACE@196..200 " "
- CURLY_GROUP@200..223
- L_CURLY@200..201 "{"
- LINE_BREAK@201..202 "\n"
- WHITESPACE@202..206 " "
- GENERIC_COMMAND@206..221
- COMMAND_NAME@206..210 "\\end"
- CURLY_GROUP@210..221
- L_CURLY@210..211 "{"
- TEXT@211..215
- WORD@211..215 "tblr"
- R_CURLY@215..216 "}"
- LINE_BREAK@216..217 "\n"
- WHITESPACE@217..221 " "
- R_CURLY@221..222 "}"
- LINE_BREAK@222..223 "\n"
+ CURLY_GROUP@200..223
+ L_CURLY@200..201 "{"
+ LINE_BREAK@201..202 "\n"
+ WHITESPACE@202..206 " "
+ GENERIC_COMMAND@206..221
+ COMMAND_NAME@206..210 "\\end"
+ CURLY_GROUP@210..221
+ L_CURLY@210..211 "{"
+ TEXT@211..215
+ WORD@211..215 "tblr"
+ R_CURLY@215..216 "}"
+ LINE_BREAK@216..217 "\n"
+ WHITESPACE@217..221 " "
+ R_CURLY@221..222 "}"
+ LINE_BREAK@222..223 "\n"
GENERIC_COMMAND@223..239
COMMAND_NAME@223..237 "\\ExplSyntaxOff"
LINE_BREAK@237..239 "\n\n"
@@ -2681,7 +2681,7 @@ fn test_issue_857() {
expect![[r#"
ROOT@0..55
PREAMBLE@0..55
- COMMAND_DEFINITION@0..11
+ NEW_COMMAND_DEFINITION@0..11
COMMAND_NAME@0..11 "\\newcommand"
GENERIC_COMMAND@11..17
COMMAND_NAME@11..14 "\\ö"
@@ -2689,7 +2689,7 @@ fn test_issue_857() {
L_CURLY@14..15 "{"
R_CURLY@15..16 "}"
LINE_BREAK@16..17 "\n"
- COMMAND_DEFINITION@17..38
+ NEW_COMMAND_DEFINITION@17..38
COMMAND_NAME@17..28 "\\newcommand"
CURLY_GROUP_COMMAND@28..35
L_CURLY@28..29 "{"
@@ -2699,7 +2699,7 @@ fn test_issue_857() {
L_CURLY@35..36 "{"
R_CURLY@36..37 "}"
LINE_BREAK@37..38 "\n"
- COMMAND_DEFINITION@38..49
+ NEW_COMMAND_DEFINITION@38..49
COMMAND_NAME@38..49 "\\newcommand"
GENERIC_COMMAND@49..55
COMMAND_NAME@49..53 "\\123"
@@ -3536,7 +3536,7 @@ fn test_theorem_definition_thmtools() {
TEXT@32..35
WORD@32..35 "bar"
R_BRACK@35..36 "]"
- CURLY_GROUP_WORD@36..41
+ CURLY_GROUP_WORD_LIST@36..41
L_CURLY@36..37 "{"
KEY@37..40
WORD@37..40 "baz"
@@ -3547,6 +3547,61 @@ fn test_theorem_definition_thmtools() {
}
#[test]
+fn test_theorem_definition_thmtools_multiple() {
+ check(
+ r#"\declaretheorem[sibling=table, style=thmbox]{definition, theorem, lemma, corollary, proposition}"#,
+ expect![[r#"
+ ROOT@0..96
+ PREAMBLE@0..96
+ THEOREM_DEFINITION_THMTOOLS@0..96
+ COMMAND_NAME@0..15 "\\declaretheorem"
+ BRACK_GROUP_KEY_VALUE@15..44
+ L_BRACK@15..16 "["
+ KEY_VALUE_BODY@16..43
+ KEY_VALUE_PAIR@16..29
+ KEY@16..23
+ WORD@16..23 "sibling"
+ EQUALITY_SIGN@23..24 "="
+ VALUE@24..29
+ TEXT@24..29
+ WORD@24..29 "table"
+ COMMA@29..30 ","
+ WHITESPACE@30..31 " "
+ KEY_VALUE_PAIR@31..43
+ KEY@31..36
+ WORD@31..36 "style"
+ EQUALITY_SIGN@36..37 "="
+ VALUE@37..43
+ TEXT@37..43
+ WORD@37..43 "thmbox"
+ R_BRACK@43..44 "]"
+ CURLY_GROUP_WORD_LIST@44..96
+ L_CURLY@44..45 "{"
+ KEY@45..55
+ WORD@45..55 "definition"
+ COMMA@55..56 ","
+ WHITESPACE@56..57 " "
+ KEY@57..64
+ WORD@57..64 "theorem"
+ COMMA@64..65 ","
+ WHITESPACE@65..66 " "
+ KEY@66..71
+ WORD@66..71 "lemma"
+ COMMA@71..72 ","
+ WHITESPACE@72..73 " "
+ KEY@73..82
+ WORD@73..82 "corollary"
+ COMMA@82..83 ","
+ WHITESPACE@83..84 " "
+ KEY@84..95
+ WORD@84..95 "proposition"
+ R_CURLY@95..96 "}"
+
+ "#]],
+ );
+}
+
+#[test]
fn test_command_subscript() {
check(
r#"\foo_bar \foo_\bar"#,
diff --git a/support/texlab/crates/parser/src/latexmkrc.rs b/support/texlab/crates/parser/src/latexmkrc.rs
index 63c92bd353..6013a5f646 100644
--- a/support/texlab/crates/parser/src/latexmkrc.rs
+++ b/support/texlab/crates/parser/src/latexmkrc.rs
@@ -1,52 +1,157 @@
+use std::path::{Path, PathBuf};
+
use syntax::latexmkrc::LatexmkrcData;
-use tempfile::tempdir;
-
-pub fn parse_latexmkrc(_input: &str) -> std::io::Result<LatexmkrcData> {
- let temp_dir = tempdir()?;
- let non_existent_tex = temp_dir.path().join("NONEXISTENT.tex");
-
- // Run `latexmk -dir-report $TMPDIR/NONEXISTENT.tex` to obtain out_dir
- // and aux_dir values. We pass nonexistent file to prevent latexmk from
- // building anything, since we need this invocation only to extract the
- // -dir-report variables.
- //
- // In the future, latexmk plans to implement -dir-report-only option and we
- // won't have to resort to this hack with NONEXISTENT.tex.
- let output = std::process::Command::new("latexmk")
- .arg("-dir-report")
- .arg(non_existent_tex)
- .output()?;
- let stderr = String::from_utf8_lossy(&output.stderr);
+mod v483 {
+ use std::path::Path;
+
+ use syntax::latexmkrc::LatexmkrcData;
+ use tempfile::tempdir;
+
+ use crate::latexmkrc::change_root;
+
+ pub fn parse_latexmkrc(input: &str, src_dir: &Path) -> std::io::Result<LatexmkrcData> {
+ let temp_dir = tempdir()?;
+ let non_existent_tex = temp_dir.path().join("NONEXISTENT.tex");
+ std::fs::write(temp_dir.path().join(".latexmkrc"), input)?;
+
+ // Run `latexmk -dir-report $TMPDIR/NONEXISTENT.tex` to obtain out_dir
+ // and aux_dir values. We pass nonexistent file to prevent latexmk from
+ // building anything, since we need this invocation only to extract the
+ // -dir-report variables.
+ //
+ // In later versions, latexmk provides the -dir-report-only option and we
+ // won't have to resort to this hack with NONEXISTENT.tex.
+ let output = std::process::Command::new("latexmk")
+ .arg("-dir-report")
+ .arg(non_existent_tex)
+ .current_dir(temp_dir.path())
+ .output()?;
+
+ let stderr = String::from_utf8_lossy(&output.stderr);
+
+ let (aux_dir, out_dir) = stderr.lines().find_map(extract_dirs).ok_or_else(|| {
+ std::io::Error::new(
+ std::io::ErrorKind::InvalidData,
+ "Normalized aux and out dir were not found in latexmk output",
+ )
+ })?;
+
+ let aux_dir = change_root(src_dir, temp_dir.path(), &aux_dir);
+ let out_dir = change_root(src_dir, temp_dir.path(), &out_dir);
+ Ok(LatexmkrcData { aux_dir, out_dir })
+ }
+
+ /// Extracts $aux_dir and $out_dir from lines of the form
+ ///
+ /// Latexmk: Normalized aux dir and out dir: '$aux_dir', '$out_dir'
+ fn extract_dirs(line: &str) -> Option<(String, String)> {
+ let mut it = line
+ .strip_prefix("Latexmk: Normalized aux dir and out dir: ")?
+ .split(", ");
+
+ let aux_dir = it.next()?.strip_prefix('\'')?.strip_suffix('\'')?;
+ let out_dir = it.next()?.strip_prefix('\'')?.strip_suffix('\'')?;
+
+ // Ensure there's no more data
+ if it.next().is_some() {
+ return None;
+ }
+
+ Some((String::from(aux_dir), String::from(out_dir)))
+ }
+}
+
+mod v484 {
+ use std::{path::Path, str::Lines};
+
+ use syntax::latexmkrc::LatexmkrcData;
+ use tempfile::tempdir;
- let (aux_dir, out_dir) = stderr.lines().find_map(extract_dirs).ok_or_else(|| {
- std::io::Error::new(
- std::io::ErrorKind::InvalidData,
- "Normalized aux and out dir were not found in latexmk output",
- )
- })?;
+ use super::change_root;
- Ok(LatexmkrcData {
- aux_dir: Some(aux_dir),
- out_dir: Some(out_dir),
- })
+ pub fn parse_latexmkrc(input: &str, src_dir: &Path) -> std::io::Result<LatexmkrcData> {
+ let temp_dir = tempdir()?;
+ std::fs::write(temp_dir.path().join(".latexmkrc"), input)?;
+
+ // Create an empty dummy TeX file to let latexmk continue
+ std::fs::write(temp_dir.path().join("dummy.tex"), "")?;
+
+ // Run `latexmk -dir-report-only` to obtain out_dir and aux_dir values.
+ let output = std::process::Command::new("latexmk")
+ .arg("-dir-report-only")
+ .current_dir(temp_dir.path())
+ .output()?;
+
+ let stdout = String::from_utf8_lossy(&output.stdout);
+
+ let (aux_dir, out_dir) = extract_dirs(stdout.lines()).ok_or_else(|| {
+ std::io::Error::new(
+ std::io::ErrorKind::InvalidData,
+ "Normalized aux and out dir were not found in latexmk output",
+ )
+ })?;
+
+ let aux_dir = change_root(src_dir, temp_dir.path(), &aux_dir);
+ let out_dir = change_root(src_dir, temp_dir.path(), &out_dir);
+
+ Ok(LatexmkrcData { aux_dir, out_dir })
+ }
+
+ /// Extracts $aux_dir and $out_dir from lines of the form
+ ///
+ /// Latexmk: Normalized aux dir and out dirs:
+ /// '$aux_dir', '$out_dir', [...]
+ fn extract_dirs(lines: Lines) -> Option<(String, String)> {
+ let mut it = lines
+ .skip_while(|line| !line.starts_with("Latexmk: Normalized aux dir and out dirs:"))
+ .nth(1)?
+ .split(",");
+
+ let aux_dir = it.next()?.trim().strip_prefix('\'')?.strip_suffix('\'')?;
+
+ it.next(); // Skip the old 'outdir' option.
+
+ let out_dir = it.next()?.trim().strip_prefix('\'')?.strip_suffix('\'')?;
+
+ // Ensure there's no more data
+ if it.next().is_some() {
+ return None;
+ }
+
+ Some((String::from(aux_dir), String::from(out_dir)))
+ }
}
-/// Extracts $aux_dir and $out_dir from lines of the form
-///
-/// Latexmk: Normalized aux dir and out dir: '$aux_dir', '$out_dir'
-fn extract_dirs(line: &str) -> Option<(String, String)> {
- let mut it = line
- .strip_prefix("Latexmk: Normalized aux dir and out dir: ")?
- .split(", ");
+pub fn parse_latexmkrc(input: &str, src_dir: &Path) -> std::io::Result<LatexmkrcData> {
+ let output = std::process::Command::new("latexmk")
+ .arg("--version")
+ .output()?;
+
+ let version = String::from_utf8(output.stdout)
+ .ok()
+ .as_ref()
+ .and_then(|line| Some((line.find("Version")?, line)))
+ .and_then(|(i, line)| line[i..].trim_end().strip_prefix("Version "))
+ .and_then(|text| versions::Versioning::new(text));
- let aux_dir = it.next()?.strip_prefix('\'')?.strip_suffix('\'')?;
- let out_dir = it.next()?.strip_prefix('\'')?.strip_suffix('\'')?;
+ let result = if version.map_or(false, |v| v >= versions::Versioning::new("4.84").unwrap()) {
+ v484::parse_latexmkrc(input, src_dir)
+ } else {
+ v483::parse_latexmkrc(input, src_dir)
+ };
+
+ log::debug!("Latexmkrc parsing result: src_dir={src_dir:?}, output={result:?}");
+ result
+}
- // Ensure there's no more data
- if it.next().is_some() {
+fn change_root(src_dir: &Path, tmp_dir: &Path, out_dir: &str) -> Option<String> {
+ let out_dir = tmp_dir.join(out_dir);
+ let relative_to_tmp = pathdiff::diff_paths(out_dir, tmp_dir)?;
+ let relative_to_src = pathdiff::diff_paths(src_dir.join(relative_to_tmp), src_dir)?;
+ if relative_to_src == PathBuf::new() {
return None;
}
- Some((String::from(aux_dir), String::from(out_dir)))
+ Some(relative_to_src.to_str()?.to_string())
}
diff --git a/support/texlab/crates/references/Cargo.toml b/support/texlab/crates/references/Cargo.toml
index b2d80d49ee..e78e84ea4c 100644
--- a/support/texlab/crates/references/Cargo.toml
+++ b/support/texlab/crates/references/Cargo.toml
@@ -9,6 +9,7 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
rowan = "0.15.15"
+rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
[dev-dependencies]
diff --git a/support/texlab/crates/references/src/command.rs b/support/texlab/crates/references/src/command.rs
new file mode 100644
index 0000000000..712da20b73
--- /dev/null
+++ b/support/texlab/crates/references/src/command.rs
@@ -0,0 +1,52 @@
+use base_db::{semantics::Span, DocumentLocation};
+use rowan::ast::AstNode;
+use rustc_hash::FxHashSet;
+use syntax::latex;
+
+use crate::{Reference, ReferenceContext, ReferenceKind};
+
+pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
+ let data = context.params.feature.document.data.as_tex()?;
+ let token = data
+ .root_node()
+ .token_at_offset(context.params.offset)
+ .find(|token| token.kind() == latex::COMMAND_NAME)?;
+
+ let project = &context.params.feature.project;
+
+ for document in &project.documents {
+ if let Some(data) = document.data.as_tex() {
+ let defs: FxHashSet<Span> = data
+ .root_node()
+ .descendants()
+ .filter_map(|node| {
+ latex::OldCommandDefinition::cast(node.clone())
+ .and_then(|node| node.name())
+ .or_else(|| {
+ latex::NewCommandDefinition::cast(node)
+ .and_then(|node| node.name())
+ .and_then(|group| group.command())
+ })
+ .map(|name| Span::command(&name))
+ })
+ .collect();
+
+ for command in &data.semantics.commands {
+ if command.text == &token.text()[1..] {
+ let kind = if defs.contains(command) {
+ ReferenceKind::Definition
+ } else {
+ ReferenceKind::Reference
+ };
+
+ context.results.push(Reference {
+ location: DocumentLocation::new(document, command.range),
+ kind,
+ });
+ }
+ }
+ }
+ }
+
+ Some(())
+}
diff --git a/support/texlab/crates/references/src/lib.rs b/support/texlab/crates/references/src/lib.rs
index 23dbd7e0ae..7d14a20d25 100644
--- a/support/texlab/crates/references/src/lib.rs
+++ b/support/texlab/crates/references/src/lib.rs
@@ -1,3 +1,4 @@
+mod command;
mod entry;
mod label;
mod string_def;
@@ -39,6 +40,7 @@ pub fn find_all<'a>(params: &ReferenceParams<'a>) -> Vec<DocumentLocation<'a>> {
entry::find_all(&mut context);
label::find_all(&mut context);
string_def::find_all(&mut context);
+ command::find_all(&mut context);
context
.results
diff --git a/support/texlab/crates/references/src/tests.rs b/support/texlab/crates/references/src/tests.rs
index a21a3ce551..845282afb0 100644
--- a/support/texlab/crates/references/src/tests.rs
+++ b/support/texlab/crates/references/src/tests.rs
@@ -229,3 +229,34 @@ fn test_string_definition_include_decl() {
true,
);
}
+
+#[test]
+fn test_new_command_definition() {
+ check(
+ r#"
+%! main.tex
+\foo
+ |
+ ^^^
+
+\newcommand{\foo}{foo}
+"#,
+ false,
+ );
+}
+
+#[test]
+fn test_new_command_definition_include_decl() {
+ check(
+ r#"
+%! main.tex
+\foo
+ |
+ ^^^
+
+\newcommand{\foo}{foo}
+ ^^^
+"#,
+ true,
+ );
+}
diff --git a/support/texlab/crates/symbols/Cargo.toml b/support/texlab/crates/symbols/Cargo.toml
index d297703d3b..65db0fc0bd 100644
--- a/support/texlab/crates/symbols/Cargo.toml
+++ b/support/texlab/crates/symbols/Cargo.toml
@@ -12,14 +12,14 @@ doctest = false
[dependencies]
base-db = { path = "../base-db" }
distro = { path = "../distro" }
-itertools = "0.12.0"
+itertools = "0.12.1"
line-index = { path = "../line-index" }
rowan = "0.15.15"
syntax = { path = "../syntax" }
-titlecase = "2.2.1"
+titlecase = "3.0.0"
url = "2.5.0"
[dev-dependencies]
-regex = "1.10.2"
+regex = "1.10.4"
test-utils = { path = "../test-utils" }
-expect-test = "1.4.1"
+expect-test = "1.5.0"
diff --git a/support/texlab/crates/syntax/Cargo.toml b/support/texlab/crates/syntax/Cargo.toml
index aaad7e973e..a2d3d866b6 100644
--- a/support/texlab/crates/syntax/Cargo.toml
+++ b/support/texlab/crates/syntax/Cargo.toml
@@ -7,7 +7,7 @@ edition.workspace = true
rust-version.workspace = true
[dependencies]
-itertools = "0.12.0"
+itertools = "0.12.1"
rowan = "0.15.15"
[lib]
diff --git a/support/texlab/crates/syntax/src/latex/cst.rs b/support/texlab/crates/syntax/src/latex/cst.rs
index 95aa1e4667..f16d703162 100644
--- a/support/texlab/crates/syntax/src/latex/cst.rs
+++ b/support/texlab/crates/syntax/src/latex/cst.rs
@@ -555,8 +555,19 @@ impl TheoremDefinition {
self.syntax().first_token()
}
- pub fn name(&self) -> Option<CurlyGroupWord> {
- self.syntax().children().find_map(CurlyGroupWord::cast)
+ pub fn names(&self) -> impl Iterator<Item = Key> {
+ self.syntax()
+ .children()
+ .find_map(CurlyGroupWordList::cast)
+ .into_iter()
+ .flat_map(|group| group.keys())
+ .chain(
+ self.syntax()
+ .children()
+ .find_map(CurlyGroupWord::cast)
+ .into_iter()
+ .filter_map(|group| group.key()),
+ )
}
pub fn heading(&self) -> Option<String> {
@@ -581,9 +592,25 @@ impl TheoremDefinition {
}
}
-cst_node!(CommandDefinition, COMMAND_DEFINITION, MATH_OPERATOR);
+cst_node!(OldCommandDefinition, OLD_COMMAND_DEFINITION);
+
+impl OldCommandDefinition {
+ pub fn command(&self) -> Option<SyntaxToken> {
+ self.syntax().first_token()
+ }
+
+ pub fn name(&self) -> Option<SyntaxToken> {
+ self.syntax()
+ .children_with_tokens()
+ .skip(1)
+ .filter_map(|elem| elem.into_token())
+ .find(|token| token.kind() == COMMAND_NAME)
+ }
+}
+
+cst_node!(NewCommandDefinition, NEW_COMMAND_DEFINITION, MATH_OPERATOR);
-impl CommandDefinition {
+impl NewCommandDefinition {
pub fn command(&self) -> Option<SyntaxToken> {
self.syntax().first_token()
}
diff --git a/support/texlab/crates/syntax/src/latex/kind.rs b/support/texlab/crates/syntax/src/latex/kind.rs
index 39e2837932..8b649b1f31 100644
--- a/support/texlab/crates/syntax/src/latex/kind.rs
+++ b/support/texlab/crates/syntax/src/latex/kind.rs
@@ -66,7 +66,8 @@ pub enum SyntaxKind {
LABEL_REFERENCE,
LABEL_REFERENCE_RANGE,
LABEL_NUMBER,
- COMMAND_DEFINITION,
+ OLD_COMMAND_DEFINITION,
+ NEW_COMMAND_DEFINITION,
MATH_OPERATOR,
GLOSSARY_ENTRY_DEFINITION,
GLOSSARY_ENTRY_REFERENCE,
diff --git a/support/texlab/crates/texlab/Cargo.toml b/support/texlab/crates/texlab/Cargo.toml
index 8fe5d4fbbe..4c142a2229 100644
--- a/support/texlab/crates/texlab/Cargo.toml
+++ b/support/texlab/crates/texlab/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "texlab"
description = "LaTeX Language Server"
-version = "5.14.1"
+version = "5.16.0"
license.workspace = true
readme = "README.md"
authors.workspace = true
@@ -22,11 +22,11 @@ test = false
doctest = false
[dependencies]
-anyhow = "1.0.75"
+anyhow = "1.0.82"
base-db = { path = "../base-db" }
bibfmt = { path = "../bibfmt" }
citeproc = { path = "../citeproc" }
-clap = { version = "4.5.3", features = ["derive"] }
+clap = { version = "4.5.4", features = ["derive"] }
commands = { path = "../commands" }
completion = { path = "../completion" }
completion-data = { path = "../completion-data" }
@@ -39,22 +39,23 @@ folding = { path = "../folding" }
highlights = { path = "../highlights" }
hover = { path = "../hover" }
inlay-hints = { path = "../inlay-hints" }
+ipc = { path = "../ipc" }
line-index = { path = "../line-index" }
links = { path = "../links" }
log = "0.4.21"
lsp-server = "0.7.6"
-lsp-types = "0.95.0"
+lsp-types = "0.95.1"
notify = "6.1.1"
notify-debouncer-full = "0.3.1"
parking_lot = "0.12.1"
parser = { path = "../parser" }
references = { path = "../references" }
-regex = "1.10.2"
+regex = "1.10.4"
rename = { path = "../rename" }
rowan = "0.15.15"
rustc-hash = "1.1.0"
serde = "1.0.195"
-serde_json = "1.0.114"
+serde_json = "1.0.115"
serde_regex = "1.1.0"
serde_repr = "0.1.18"
symbols = { path = "../symbols" }
diff --git a/support/texlab/crates/texlab/src/main.rs b/support/texlab/crates/texlab/src/main.rs
index 08977ae96a..ceca02b7f7 100644
--- a/support/texlab/crates/texlab/src/main.rs
+++ b/support/texlab/crates/texlab/src/main.rs
@@ -1,9 +1,10 @@
use std::{fs::OpenOptions, io, path::PathBuf};
use anyhow::Result;
-use clap::{ArgAction, Parser};
+use clap::{ArgAction, Parser, Subcommand};
use log::LevelFilter;
use lsp_server::Connection;
+use lsp_types::Url;
use texlab::Server;
/// An implementation of the Language Server Protocol for LaTeX
@@ -21,20 +22,72 @@ struct Opts {
/// Write the logging output to FILE
#[clap(long, name = "FILE", value_parser)]
log_file: Option<PathBuf>,
+
+ #[clap(subcommand)]
+ command: Option<Command>,
+}
+
+#[derive(Debug, Subcommand)]
+enum Command {
+ /// Runs the language server in a editor context using STDIN and STDOUT.
+ Run,
+
+ /// Opens a document at a specific line.
+ ///
+ /// This command can be used to implement inverse search in an editor-agnostic way.
+ InverseSearch(InverseSearchOpts),
+}
+
+/// Options for the inverse search subcommand.
+#[derive(Debug, Parser)]
+struct InverseSearchOpts {
+ /// The path to the document to open.
+ #[clap(short, long, name = "FILE", value_parser)]
+ input: PathBuf,
+
+ /// The zero-based line number of the document to jump to.
+ #[clap(short, long)]
+ line: u32,
}
fn main() -> Result<()> {
let opts = Opts::parse();
- setup_logger(opts);
+ setup_logger(&opts);
+
+ match opts.command.unwrap_or(Command::Run) {
+ Command::Run => {
+ let (connection, threads) = Connection::stdio();
+ Server::exec(connection)?;
+ threads.join()?;
+ }
+ Command::InverseSearch(opts) => {
+ let Some(uri) = opts
+ .input
+ .canonicalize()
+ .ok()
+ .and_then(|path| Url::from_file_path(path).ok())
+ else {
+ eprintln!("Failed to convert input path to a URI.");
+ std::process::exit(-1);
+ };
+
+ let params = lsp_types::TextDocumentPositionParams::new(
+ lsp_types::TextDocumentIdentifier::new(uri),
+ lsp_types::Position::new(opts.line, 0),
+ );
- let (connection, threads) = Connection::stdio();
- Server::exec(connection)?;
- threads.join()?;
+ if let Err(why) = ipc::send_request(params) {
+ eprintln!("Failed to send inverse search request to the main instance. Is the server running?");
+ eprintln!("Details: {why:?}");
+ std::process::exit(-1);
+ }
+ }
+ }
Ok(())
}
-fn setup_logger(opts: Opts) {
+fn setup_logger(opts: &Opts) {
let verbosity_level = if !opts.quiet {
match opts.verbosity {
0 => LevelFilter::Error,
@@ -52,7 +105,7 @@ fn setup_logger(opts: Opts) {
.level(verbosity_level)
.chain(io::stderr());
- let logger = match opts.log_file {
+ let logger = match &opts.log_file {
Some(log_file) => logger.chain(
OpenOptions::new()
.write(true)
diff --git a/support/texlab/crates/texlab/src/server.rs b/support/texlab/crates/texlab/src/server.rs
index 70b9a03022..ef70c42c71 100644
--- a/support/texlab/crates/texlab/src/server.rs
+++ b/support/texlab/crates/texlab/src/server.rs
@@ -11,7 +11,7 @@ use std::{
};
use anyhow::Result;
-use base_db::{deps, Config, Owner, Workspace};
+use base_db::{deps, Owner, Workspace};
use commands::{BuildCommand, CleanCommand, CleanTarget, ForwardSearch};
use crossbeam_channel::{Receiver, Sender};
use distro::{Distro, Language};
@@ -51,6 +51,7 @@ enum InternalMessage {
Diagnostics,
ChktexFinished(Url, Vec<diagnostics::Diagnostic>),
ForwardSearch(Url, Option<Position>),
+ InverseSearch(TextDocumentPositionParams),
}
pub struct Server {
@@ -242,7 +243,7 @@ impl Server {
for document in checked_paths
.iter()
- .filter_map(|path| workspace.lookup_path(path))
+ .filter_map(|path| workspace.lookup_file(path))
{
self.diagnostic_manager.update_syntax(&workspace, document);
}
@@ -319,7 +320,7 @@ impl Server {
fn update_options(&mut self, options: Options) {
let mut workspace = self.workspace.write();
- workspace.set_config(Config::from(options));
+ workspace.set_config(from_proto::config(options));
self.watcher.watch(&mut workspace);
}
@@ -794,30 +795,50 @@ impl Server {
let mut changed = false;
let mut workspace = self.workspace.write();
+
match event.kind {
notify::EventKind::Remove(_) | notify::EventKind::Modify(ModifyKind::Name(_)) => {
- for path in event.paths {
- if let Some(document) = workspace.lookup_path(&path) {
- if document.owner == Owner::Server {
- let uri = document.uri.clone();
- workspace.remove(&uri);
- changed = true;
- }
- }
+ let affected_uris = event
+ .paths
+ .iter()
+ .flat_map(|file_or_dir| workspace.lookup_file_or_dir(file_or_dir))
+ .filter(|doc| doc.owner == Owner::Server)
+ .map(|doc| doc.uri.clone())
+ .collect::<Vec<_>>();
+
+ for uri in affected_uris {
+ workspace.remove(&uri);
+ changed = true;
}
}
notify::EventKind::Create(_) | notify::EventKind::Modify(_) => {
- for path in event.paths {
- if workspace
- .lookup_path(&path)
- .map_or(true, |document| document.owner == Owner::Server)
- {
- if let Some(language) = Language::from_path(&path) {
- changed |= workspace.load(&path, language).is_ok();
-
- if let Some(document) = workspace.lookup_path(&path) {
- self.diagnostic_manager.update_syntax(&workspace, document);
- }
+ for file_or_dir in event.paths {
+ let affected_paths = if file_or_dir.is_dir() {
+ changed = true;
+ workspace
+ .lookup_file_or_dir(&file_or_dir)
+ .filter_map(|doc| doc.path.clone())
+ .collect::<Vec<_>>()
+ } else {
+ vec![file_or_dir]
+ };
+
+ for path in affected_paths {
+ if !workspace
+ .lookup_file(&path)
+ .map_or(true, |doc| doc.owner == Owner::Server)
+ {
+ continue;
+ }
+
+ let Some(language) = Language::from_path(&path) else {
+ continue;
+ };
+
+ changed |= workspace.load(&path, language).is_ok();
+
+ if let Some(document) = workspace.lookup_file(&path) {
+ self.diagnostic_manager.update_syntax(&workspace, document);
}
}
}
@@ -825,9 +846,10 @@ impl Server {
notify::EventKind::Any | notify::EventKind::Access(_) | notify::EventKind::Other => {}
};
- drop(workspace);
if changed {
- self.publish_diagnostics_with_delay();
+ self.diagnostic_manager.cleanup(&workspace);
+ drop(workspace);
+ self.update_workspace();
}
}
@@ -921,6 +943,27 @@ impl Server {
Ok(results)
}
+ fn inverse_search(&self, params: TextDocumentPositionParams) -> Result<()> {
+ if !self.client_flags.show_document {
+ log::warn!("Inverse search request received although the client does not support window/showDocument: {params:?}");
+ }
+
+ let position = lsp_types::Position::new(params.position.line, 0);
+ let params = lsp_types::ShowDocumentParams {
+ uri: params.text_document.uri,
+ take_focus: Some(true),
+ external: Some(false),
+ selection: Some(lsp_types::Range::new(position, position)),
+ };
+
+ let client = self.client.clone();
+ self.pool.execute(move || {
+ let _ = client.send_request::<ShowDocument>(params);
+ });
+
+ Ok(())
+ }
+
fn parse_command_params<T: DeserializeOwned>(
&self,
params: Vec<serde_json::Value>,
@@ -934,6 +977,13 @@ impl Server {
Ok(value)
}
+ fn setup_ipc_server(&mut self) {
+ let sender = self.internal_tx.clone();
+ let _ = ipc::spawn_server(move |params: TextDocumentPositionParams| {
+ let _ = sender.send(InternalMessage::InverseSearch(params));
+ });
+ }
+
fn process_messages(&mut self) -> Result<()> {
loop {
crossbeam_channel::select! {
@@ -1038,6 +1088,9 @@ impl Server {
InternalMessage::ForwardSearch(uri, position) => {
self.forward_search(None, uri, position)?;
}
+ InternalMessage::InverseSearch(params) => {
+ self.inverse_search(params)?;
+ }
};
}
};
@@ -1060,6 +1113,7 @@ impl Server {
self.register_configuration();
self.pull_options();
+ self.setup_ipc_server();
self.process_messages()?;
self.pool.join();
Ok(())
diff --git a/support/texlab/crates/texlab/src/server/options.rs b/support/texlab/crates/texlab/src/server/options.rs
index 60c0bf90f7..02200392f6 100644
--- a/support/texlab/crates/texlab/src/server/options.rs
+++ b/support/texlab/crates/texlab/src/server/options.rs
@@ -1,6 +1,3 @@
-use std::time::Duration;
-
-use base_db::{Config, Formatter, SynctexConfig};
use regex::Regex;
use serde::{Deserialize, Serialize};
@@ -128,6 +125,7 @@ pub struct ExperimentalOptions {
pub enum_environments: Vec<String>,
pub verbatim_environments: Vec<String>,
pub citation_commands: Vec<String>,
+ pub label_definition_commands: Vec<String>,
pub label_reference_commands: Vec<String>,
}
@@ -159,135 +157,3 @@ impl Default for CompletionMatcher {
Self::FuzzyIgnoreCase
}
}
-
-impl From<Options> for Config {
- fn from(value: Options) -> Self {
- let mut config = Config::default();
- config.root_dir = value.root_directory;
-
- config.build.program = value.build.executable.unwrap_or(config.build.program);
- config.build.args = value.build.args.unwrap_or(config.build.args);
- config.build.on_save = value.build.on_save;
- config.build.forward_search_after = value.build.forward_search_after;
-
- config.build.aux_dir = value
- .build
- .aux_directory
- .or_else(|| value.aux_directory.clone())
- .unwrap_or_else(|| String::from("."));
-
- config.build.pdf_dir = value
- .build
- .pdf_directory
- .or(value.aux_directory)
- .unwrap_or_else(|| String::from("."));
-
- config.build.log_dir = value
- .build
- .log_directory
- .unwrap_or_else(|| config.build.pdf_dir.clone());
-
- config.build.output_filename = value.build.filename;
-
- config.diagnostics.allowed_patterns = value
- .diagnostics
- .allowed_patterns
- .into_iter()
- .map(|pattern| pattern.0)
- .collect();
-
- config.diagnostics.ignored_patterns = value
- .diagnostics
- .ignored_patterns
- .into_iter()
- .map(|pattern| pattern.0)
- .collect();
-
- config.diagnostics.delay = value
- .diagnostics_delay
- .map_or(config.diagnostics.delay, Duration::from_millis);
-
- config.diagnostics.chktex.on_open = value.chktex.on_open_and_save;
- config.diagnostics.chktex.on_save = value.chktex.on_open_and_save;
- config.diagnostics.chktex.on_edit = value.chktex.on_edit;
- config.diagnostics.chktex.additional_args =
- value.chktex.additional_args.unwrap_or_default();
-
- config.formatting.tex_formatter = match value.latex_formatter {
- LatexFormatter::None => Formatter::Null,
- LatexFormatter::Texlab => Formatter::Server,
- LatexFormatter::Latexindent => Formatter::LatexIndent,
- };
-
- config.formatting.bib_formatter = match value.bibtex_formatter {
- BibtexFormatter::None => Formatter::Null,
- BibtexFormatter::Texlab => Formatter::Server,
- BibtexFormatter::Latexindent => Formatter::LatexIndent,
- };
-
- config.formatting.line_length =
- value
- .formatter_line_length
- .map_or(80, |len| if len < 0 { usize::MAX } else { len as usize });
-
- config.formatting.latex_indent.local = value.latexindent.local;
- config.formatting.latex_indent.modify_line_breaks = value.latexindent.modify_line_breaks;
-
- config.synctex = value
- .forward_search
- .executable
- .zip(value.forward_search.args)
- .map(|(program, args)| SynctexConfig { program, args });
-
- config.symbols.allowed_patterns = value
- .symbols
- .allowed_patterns
- .into_iter()
- .map(|pattern| pattern.0)
- .collect();
-
- config.symbols.ignored_patterns = value
- .symbols
- .ignored_patterns
- .into_iter()
- .map(|pattern| pattern.0)
- .collect();
-
- config.inlay_hints.label_definitions = value.inlay_hints.label_definitions.unwrap_or(true);
- config.inlay_hints.label_references = value.inlay_hints.label_references.unwrap_or(true);
-
- config.completion.matcher = match value.completion.matcher {
- CompletionMatcher::Fuzzy => base_db::MatchingAlgo::Skim,
- CompletionMatcher::FuzzyIgnoreCase => base_db::MatchingAlgo::SkimIgnoreCase,
- CompletionMatcher::Prefix => base_db::MatchingAlgo::Prefix,
- CompletionMatcher::PrefixIgnoreCase => base_db::MatchingAlgo::PrefixIgnoreCase,
- };
-
- config
- .syntax
- .math_environments
- .extend(value.experimental.math_environments);
-
- config
- .syntax
- .enum_environments
- .extend(value.experimental.enum_environments);
-
- config
- .syntax
- .verbatim_environments
- .extend(value.experimental.verbatim_environments);
-
- config
- .syntax
- .citation_commands
- .extend(value.experimental.citation_commands);
-
- config
- .syntax
- .label_reference_commands
- .extend(value.experimental.label_reference_commands);
-
- config
- }
-}
diff --git a/support/texlab/crates/texlab/src/util.rs b/support/texlab/crates/texlab/src/util.rs
index c40ba8b51a..d9ec5a2fb1 100644
--- a/support/texlab/crates/texlab/src/util.rs
+++ b/support/texlab/crates/texlab/src/util.rs
@@ -22,7 +22,7 @@ pub fn normalize_uri(uri: &mut lsp_types::Url) {
}
fn fix_drive_letter(text: &str) -> Option<String> {
- if !text.is_ascii() {
+ if !text.is_ascii() || text.len() == 0 {
return None;
}
diff --git a/support/texlab/crates/texlab/src/util/client_flags.rs b/support/texlab/crates/texlab/src/util/client_flags.rs
index e5813e4f02..842dbb1eae 100644
--- a/support/texlab/crates/texlab/src/util/client_flags.rs
+++ b/support/texlab/crates/texlab/src/util/client_flags.rs
@@ -37,4 +37,7 @@ pub struct ClientFlags {
/// If `true`, the server can report progress using `WorkDoneProgress`.
pub progress: bool,
+
+ /// If `true`, the server can let the client open a document using `window/showDocument`.
+ pub show_document: bool,
}
diff --git a/support/texlab/crates/texlab/src/util/from_proto.rs b/support/texlab/crates/texlab/src/util/from_proto.rs
index e05d317dfe..db4f3a5b39 100644
--- a/support/texlab/crates/texlab/src/util/from_proto.rs
+++ b/support/texlab/crates/texlab/src/util/from_proto.rs
@@ -1,4 +1,6 @@
-use base_db::{FeatureParams, Workspace};
+use std::time::Duration;
+
+use base_db::{Config, FeatureParams, Formatter, SynctexConfig, Workspace};
use completion::CompletionParams;
use definition::DefinitionParams;
use highlights::HighlightParams;
@@ -8,7 +10,10 @@ use references::ReferenceParams;
use rename::RenameParams;
use rowan::TextSize;
-use crate::features::completion::ResolveInfo;
+use crate::{
+ features::completion::ResolveInfo,
+ server::options::{BibtexFormatter, CompletionMatcher, LatexFormatter, Options},
+};
use super::{line_index_ext::LineIndexExt, ClientFlags};
@@ -94,6 +99,12 @@ pub fn client_flags(
.and_then(|cap| cap.work_done_progress)
.unwrap_or(false);
+ let show_document = capabilities
+ .window
+ .as_ref()
+ .and_then(|cap| cap.show_document.as_ref())
+ .map_or(false, |cap| cap.support);
+
ClientFlags {
hierarchical_document_symbols,
completion_markdown,
@@ -106,6 +117,7 @@ pub fn client_flags(
definition_link,
folding_custom_kinds,
progress,
+ show_document,
}
}
@@ -221,3 +233,137 @@ pub fn completion_resolve_info(item: &mut lsp_types::CompletionItem) -> Option<R
.take()
.and_then(|data| serde_json::from_value(data).ok())
}
+
+pub fn config(value: Options) -> Config {
+ let mut config = Config::default();
+ config.root_dir = value.root_directory;
+
+ config.build.program = value.build.executable.unwrap_or(config.build.program);
+ config.build.args = value.build.args.unwrap_or(config.build.args);
+ config.build.on_save = value.build.on_save;
+ config.build.forward_search_after = value.build.forward_search_after;
+
+ config.build.aux_dir = value
+ .build
+ .aux_directory
+ .or_else(|| value.aux_directory.clone())
+ .unwrap_or_else(|| String::from("."));
+
+ config.build.pdf_dir = value
+ .build
+ .pdf_directory
+ .or(value.aux_directory)
+ .unwrap_or_else(|| String::from("."));
+
+ config.build.log_dir = value
+ .build
+ .log_directory
+ .unwrap_or_else(|| config.build.pdf_dir.clone());
+
+ config.build.output_filename = value.build.filename;
+
+ config.diagnostics.allowed_patterns = value
+ .diagnostics
+ .allowed_patterns
+ .into_iter()
+ .map(|pattern| pattern.0)
+ .collect();
+
+ config.diagnostics.ignored_patterns = value
+ .diagnostics
+ .ignored_patterns
+ .into_iter()
+ .map(|pattern| pattern.0)
+ .collect();
+
+ config.diagnostics.delay = value
+ .diagnostics_delay
+ .map_or(config.diagnostics.delay, Duration::from_millis);
+
+ config.diagnostics.chktex.on_open = value.chktex.on_open_and_save;
+ config.diagnostics.chktex.on_save = value.chktex.on_open_and_save;
+ config.diagnostics.chktex.on_edit = value.chktex.on_edit;
+ config.diagnostics.chktex.additional_args = value.chktex.additional_args.unwrap_or_default();
+
+ config.formatting.tex_formatter = match value.latex_formatter {
+ LatexFormatter::None => Formatter::Null,
+ LatexFormatter::Texlab => Formatter::Server,
+ LatexFormatter::Latexindent => Formatter::LatexIndent,
+ };
+
+ config.formatting.bib_formatter = match value.bibtex_formatter {
+ BibtexFormatter::None => Formatter::Null,
+ BibtexFormatter::Texlab => Formatter::Server,
+ BibtexFormatter::Latexindent => Formatter::LatexIndent,
+ };
+
+ config.formatting.line_length =
+ value
+ .formatter_line_length
+ .map_or(80, |len| if len < 0 { usize::MAX } else { len as usize });
+
+ config.formatting.latex_indent.local = value.latexindent.local;
+ config.formatting.latex_indent.modify_line_breaks = value.latexindent.modify_line_breaks;
+
+ config.synctex = value
+ .forward_search
+ .executable
+ .zip(value.forward_search.args)
+ .map(|(program, args)| SynctexConfig { program, args });
+
+ config.symbols.allowed_patterns = value
+ .symbols
+ .allowed_patterns
+ .into_iter()
+ .map(|pattern| pattern.0)
+ .collect();
+
+ config.symbols.ignored_patterns = value
+ .symbols
+ .ignored_patterns
+ .into_iter()
+ .map(|pattern| pattern.0)
+ .collect();
+
+ config.inlay_hints.label_definitions = value.inlay_hints.label_definitions.unwrap_or(true);
+ config.inlay_hints.label_references = value.inlay_hints.label_references.unwrap_or(true);
+
+ config.completion.matcher = match value.completion.matcher {
+ CompletionMatcher::Fuzzy => base_db::MatchingAlgo::Skim,
+ CompletionMatcher::FuzzyIgnoreCase => base_db::MatchingAlgo::SkimIgnoreCase,
+ CompletionMatcher::Prefix => base_db::MatchingAlgo::Prefix,
+ CompletionMatcher::PrefixIgnoreCase => base_db::MatchingAlgo::PrefixIgnoreCase,
+ };
+
+ config
+ .syntax
+ .math_environments
+ .extend(value.experimental.math_environments);
+
+ config
+ .syntax
+ .enum_environments
+ .extend(value.experimental.enum_environments);
+
+ config
+ .syntax
+ .verbatim_environments
+ .extend(value.experimental.verbatim_environments);
+
+ config
+ .syntax
+ .citation_commands
+ .extend(value.experimental.citation_commands);
+
+ config
+ .syntax
+ .label_definition_commands
+ .extend(value.experimental.label_definition_commands);
+
+ config
+ .syntax
+ .label_reference_commands
+ .extend(value.experimental.label_reference_commands);
+
+ config
+}
diff --git a/support/texlab/texlab.1 b/support/texlab/texlab.1
index 00148f341b..2d4e412dc9 100644
--- a/support/texlab/texlab.1
+++ b/support/texlab/texlab.1
@@ -1,12 +1,22 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1.
-.TH TEXLAB "1" "March 2024" "texlab 5.14.1" "User Commands"
+.TH TEXLAB "1" "May 2024" "texlab 5.16.0" "User Commands"
.SH NAME
-texlab \- manual page for texlab 5.14.1
+texlab \- manual page for texlab 5.16.0
.SH SYNOPSIS
.B texlab
-[\fI\,OPTIONS\/\fR]
+[\fI\,OPTIONS\/\fR] [\fI\,COMMAND\/\fR]
.SH DESCRIPTION
An implementation of the Language Server Protocol for LaTeX
+.SS "Commands:"
+.TP
+run
+Runs the language server in a editor context using STDIN and STDOUT
+.TP
+inverse\-search
+Opens a document at a specific line
+.TP
+help
+Print this message or the help of the given subcommand(s)
.SH OPTIONS
.TP
\fB\-v\fR, \fB\-\-verbosity\fR...
diff --git a/support/texlab/texlab.pdf b/support/texlab/texlab.pdf
index 87a904383d..fe59b1f434 100644
--- a/support/texlab/texlab.pdf
+++ b/support/texlab/texlab.pdf
Binary files differ
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index d8da0c33d9..e45ccfd0c4 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -179,9 +179,6 @@ $mirrors = {
'https://mirror.quantum5.ca/CTAN/' => 1,
'https://muug.ca/mirror/ctan/' => 1,
},
- 'Costa Rica' => {
- 'https://mirrors.ucr.ac.cr/CTAN/' => 1,
- },
'USA' => {
'http://mirrors.ibiblio.org/pub/mirrors/CTAN/' => 1,
'https://ctan.math.illinois.edu/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index a01f8c7f09..69f02a6d3e 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2024
-depend revision/71141
+depend revision/71149
name 00texlive.image
category TLCore
-revision 71129
+revision 71147
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -2894,6 +2894,7 @@ runfiles size=14471
tlpkg/tlpsrc/mathfam256.tlpsrc
tlpkg/tlpsrc/mathfixs.tlpsrc
tlpkg/tlpsrc/mathfont.tlpsrc
+ tlpkg/tlpsrc/mathgreeks.tlpsrc
tlpkg/tlpsrc/mathlig.tlpsrc
tlpkg/tlpsrc/mathpartir.tlpsrc
tlpkg/tlpsrc/mathpazo.tlpsrc
@@ -3261,6 +3262,7 @@ runfiles size=14471
tlpkg/tlpsrc/orientation.tlpsrc
tlpkg/tlpsrc/orkhun.tlpsrc
tlpkg/tlpsrc/oscola.tlpsrc
+ tlpkg/tlpsrc/osda.tlpsrc
tlpkg/tlpsrc/oststud.tlpsrc
tlpkg/tlpsrc/oswald.tlpsrc
tlpkg/tlpsrc/ot-tableau.tlpsrc
@@ -4889,7 +4891,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 71141
+revision 71149
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -32360,7 +32362,7 @@ catalogue-version 1.016
name baskervaldx
category Package
-revision 69273
+revision 71145
shortdesc Extension and modification of BaskervaldADF with LaTeX support
relocated 1
longdesc Extends and modifies the BaskervaldADF font (a Baskerville
@@ -32368,10 +32370,10 @@ longdesc substitute) with more accented glyphs, with small caps and
longdesc oldstyle figures in all shapes. Includes OpenType and
longdesc PostScript fonts, as well as LaTeX support files.
execute addMap Baskervaldx.map
-containersize 679616
-containerchecksum f78b61573fc99c6696dd9aac4f108f473996c5e67223e721db88f355b2e55a68f2b8a21c7bf994f2ee36a8fa465b55b970d65407b1ecfe1ffd7e00061bb70753
-doccontainersize 209632
-doccontainerchecksum 8d1b8a3e12b958fe5dee50255c291ebe8ed75e8733a28a5fda7c927a9253e0d94e68b51e81ce8805e3c3855893f53947429fa9684c99925d80176522c72119e9
+containersize 679904
+containerchecksum 8ef914386a6aed11cec27d54020a6f2161f4398cc4b30e6b1095d8800b10d6ceae97bd8e8bd9b8e9b820b121cc19e17c2eb12ff7c17c4a6f62a4f53b5c4d6405
+doccontainersize 209664
+doccontainerchecksum a4d81dd0addb5cd47bd4234f6127e9331352acb85c8bcb7109f77249f4a36fbcafd5ab44a20af67bb8aab1e8c6890d1c5baa36ac2e37cb53b0a3e792891a0a48
docfiles size=65
RELOC/doc/fonts/baskervaldx/COPYING
RELOC/doc/fonts/baskervaldx/NOTICE.txt
@@ -32948,7 +32950,7 @@ runfiles size=1347
catalogue-ctan /fonts/baskervaldx
catalogue-license gpl2+ lppl1.3
catalogue-topics font font-body font-proportional font-serif font-otf font-type1 font-supp font-t1enc
-catalogue-version 1.077
+catalogue-version 1.078
name baskervillef
category Package
@@ -72086,7 +72088,7 @@ containerchecksum 889eae40b82f31c7c4b3a17740399c763dabec7986fcb39261b252afff69a0
name collection-latexextra
category Collection
-revision 71063
+revision 71146
shortdesc LaTeX additional packages
relocated 1
longdesc A very large collection of add-on packages for LaTeX.
@@ -72970,6 +72972,7 @@ depend mathastext
depend mathexam
depend mathfam256
depend mathfont
+depend mathgreeks
depend maybemath
depend mcaption
depend mceinleger
@@ -73637,8 +73640,8 @@ depend zref-clever
depend zref-vario
depend zwgetfdate
depend zwpagelayout
-containersize 7168
-containerchecksum 3e9bde7d81824e7f4b861d66b5f842832ab307090bfe002dbf46d0ed99c82a2ee87a1c8d11661b3fe7257ad15d81ec980f7692983bcddfc8fcf94bb6caeae3fd
+containersize 7180
+containerchecksum 21c35eccd9815f588a9b7e40a91dd70c845826ad55bd132e230d8e27898465b6ee1585ef5e34aa76e0fa2a37dc5b8172b4b743f67e43f2e4e26d879806831a1b
name collection-latexrecommended
category Collection
@@ -74738,7 +74741,7 @@ containerchecksum 508276fe37018f3d9773fc7cda0cb37edcdd28e9cf8ab54ed5be16b07c2066
name collection-publishers
category Collection
-revision 70716
+revision 71147
shortdesc Publisher styles, theses, etc.
relocated 1
depend aastex
@@ -74910,6 +74913,7 @@ depend nwafuthesis
depend nwejm
depend onrannual
depend opteng
+depend osda
depend oststud
depend oup-authoring-template
depend philosophersimprint
@@ -75034,8 +75038,8 @@ depend yathesis
depend yazd-thesis
depend yb-book
depend york-thesis
-containersize 1768
-containerchecksum fe365d313dbed773be8561aad3586103c1673b8ee9a2a5c7dee094210b5e19017bd3b3065cb867e1c0ac87198d46d78cb328392026d75daee5afef2d7ad1d032
+containersize 1764
+containerchecksum 1d6efc18a59c185e21b631eac7879c17918e59d6fd367ae8e218427cfa925c2695ca74b9dfca151da6c4edd4c828ee5b6c4e9459c059e098798a85f935b425d1
name collection-texworks
category Collection
@@ -205181,29 +205185,29 @@ catalogue-version 1.1
name luamplib
category Package
-revision 71078
+revision 71148
shortdesc Use LuaTeX's built-in MetaPost interpreter
relocated 1
longdesc The package enables the user to specify MetaPost diagrams
longdesc (which may include colour specifications from the color or
longdesc xcolor packages) into a document, using LuaTeX's built-in
longdesc MetaPost library. The facility is only available in PDF mode.
-containersize 14968
-containerchecksum 47b1bbf65f91fe33f26e0dca8c480e37c20976193654c3e30572f601a9f16f2f6d6434ad290f87312dd1b8e9d9591834e900547cbf6f4ecb2cbd23b0a58a2f8c
-doccontainersize 174304
-doccontainerchecksum fd4d91b257cc35819808daf27dc300c33ab68ca82305fe3e2f95b46c444e475f39a2436ea279291c743a54733adffe0bca80ae2b91fa2a8da151c5c6b4d678c0
-docfiles size=50
+containersize 15404
+containerchecksum 67ede73fd899e1b19af1471b796a0792fe95091e4963e5dafd52bc79730fb5bee4974e01c042c4bd5a2bcd96a08d60d7a8abe3304ba7a96bae093e3528f82fa5
+doccontainersize 180072
+doccontainerchecksum 150f4381faf969f177dabe1b3ac16f291e284cad2d94c27aa45830cc2c14f79b1c6e9fa2a5bc51c227d3014767b16858834fbdfe032865872b9a43981e9f8b61
+docfiles size=52
RELOC/doc/luatex/luamplib/NEWS
RELOC/doc/luatex/luamplib/README details="Readme"
RELOC/doc/luatex/luamplib/luamplib.pdf details="Package documentation"
RELOC/doc/luatex/luamplib/test-luamplib-latex.tex
RELOC/doc/luatex/luamplib/test-luamplib-plain.tex
-srccontainersize 31068
-srccontainerchecksum 2b84fd7af564862d0030dbdc12a44bfe6f491e7bfdb46bac54f8d4c22b0cee1cac35cfbc2d21ab747fdfed31a32d13e4cbc20e44a10cc39d4f6f7a351a51bdc9
-srcfiles size=29
+srccontainersize 32176
+srccontainerchecksum 0f444c36d4a793c9fce2035d11b80d65bc22d99f159fb9df6ffd33039c770c78c75093bb0a36903dc1d61a279c841809cc9467f6fd0297ffeb941673ffeebef9
+srcfiles size=30
RELOC/source/luatex/luamplib/Makefile
RELOC/source/luatex/luamplib/luamplib.dtx
-runfiles size=16
+runfiles size=17
RELOC/tex/luatex/luamplib/luamplib.lua
RELOC/tex/luatex/luamplib/luamplib.sty
catalogue-contact-bugs https://github.com/lualatex/luamplib/issues
@@ -205211,7 +205215,7 @@ catalogue-contact-repository https://github.com/lualatex/luamplib
catalogue-ctan /macros/luatex/generic/luamplib
catalogue-license gpl2
catalogue-topics mp-use graphics-in-tex luatex
-catalogue-version 2.28.2
+catalogue-version 2.29.0
name luanumint
category Package
@@ -211799,6 +211803,35 @@ catalogue-license lppl1.3c
catalogue-topics font-mgmt font-use maths
catalogue-version 2.3
+name mathgreeks
+category Package
+revision 71146
+shortdesc Use Greek letters fonts in math mode
+relocated 1
+longdesc The purpose of this package is to provide access to numerous
+longdesc Greek letter fonts for math mode, without altering other
+longdesc mathematical characters and symbols and without loading whole
+longdesc extensions that provide these fonts. Moreover, the chosen font
+longdesc or shape can be changed dynamically throughout the document.
+containersize 5176
+containerchecksum b77789c62b1fa172a66c949a4033df010457e171ef4344c74fa99cc6c6866715ac26ce9638981b6f48252eae5127cea1578b74fccace882e70de7fe9542dc93a
+doccontainersize 1640440
+doccontainerchecksum a37d57ec7e6b06cbbc7b399e688e1c3407131781bebe01b9876a98ee1288cc0c8405af8bd0b1e333b520f3c229140d8c950bc4d42dc2ec67809574c0b40837ce
+docfiles size=404
+ RELOC/doc/latex/mathgreeks/README.md details="Readme"
+ RELOC/doc/latex/mathgreeks/mathgreeks.pdf details="Package documentation"
+srccontainersize 11740
+srccontainerchecksum 2799cd57321aa0f5baa840d52f374e2604dd5d52f9485a6356e775c955c03198f9510dfefe302eedc3f328277aa7b870c31a9135728636add7924464bacaeb86
+srcfiles size=13
+ RELOC/source/latex/mathgreeks/mathgreeks.dtx
+ RELOC/source/latex/mathgreeks/mathgreeks.ins
+runfiles size=7
+ RELOC/tex/latex/mathgreeks/mathgreeks.sty
+catalogue-ctan /macros/latex/contrib/mathgreeks
+catalogue-license lppl1.3c
+catalogue-topics font-supp-maths
+catalogue-version 1.0
+
name mathlig
category Package
revision 54244
@@ -249892,6 +249925,46 @@ catalogue-license lppl1.3
catalogue-topics legal biblatex
catalogue-version 1.7
+name osda
+category Package
+revision 71147
+shortdesc Commands for Proceedings of the Workshop on Open-Source Design Automation
+relocated 1
+longdesc This package automatically places a copyright notice as an
+longdesc un-numbered footnote on the title page of a document that calls
+longdesc \maketitle, indicating the information on the workshop where
+longdesc the paper was presented, along with additional information on
+longdesc the host conference, the license under which the document is
+longdesc published, and a link to the corresponding web page of the
+longdesc paper. The generated copyright notice contains a logo of the
+longdesc workshop, and a QR code that points to the paper's web page (to
+longdesc lead to further material). For cases when the copyright notice
+longdesc is not automatically set in the title page's footnote, the
+longdesc copyright notice can be set manually as well.
+containersize 5360
+containerchecksum d7cfd315d963f0e5889265a03278de20b0510e8ea957d0de3b5a986d796506a4474011d8169b0b12410f42c759a854be2077ec0830d9c5157917498dc99706c8
+doccontainersize 371836
+doccontainerchecksum 055d31d2873d1bf3493d64476e6521b4c98a7e36d081743ef692f7cd571de33a4ed791550ac93b4466630078d22ea0ed3b883acfa504a1f2c8a77d5fff730bec
+docfiles size=101
+ RELOC/doc/latex/osda/README.md details="Readme"
+ RELOC/doc/latex/osda/example.png
+ RELOC/doc/latex/osda/osda.pdf details="Package documentation"
+srccontainersize 9348
+srccontainerchecksum b418ba437b5d90c16a84c8e09da63f1fb5f5ab2838aea80fc816b24f5db289277928e38b60970fca27dad3df3cb34fc18fe713e326f40af6e070f032027095b9
+srcfiles size=9
+ RELOC/source/latex/osda/osda.dtx
+ RELOC/source/latex/osda/osda.ins
+runfiles size=4
+ RELOC/tex/latex/osda/osda.sty
+catalogue-contact-bugs https://osda.ws/r/vZnf4
+catalogue-contact-development https://osda.ws/r/AGryr
+catalogue-contact-home https://osda.ws/r/ir2rh
+catalogue-contact-repository https://osda.ws/r/X0mQT
+catalogue-ctan /macros/latex/contrib/osda
+catalogue-license lppl1.3 other-nonfree
+catalogue-topics journalpub footnote
+catalogue-version 1.4.0
+
name oststud
category Package
revision 67217
@@ -326611,7 +326684,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 71141
+revision 71149
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -326619,10 +326692,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 114160
-containerchecksum 8e8620d16579cace450f8cb4d851e6e66434e4e410d553f0bf41fd6faf812b2094241d01e0783d5abe53fa3b15004b150a21a2ef4f0c06c8ae2072f2e1377d06
-doccontainersize 434928
-doccontainerchecksum ed5d48fdca274eac080d6375527673165cdc32a1ae1ff3ea18a5effedf48e99f6372f1ad5b52f487a5a673cbbe1744b2438c3641292e9e40cc38acb05a596d7a
+containersize 114152
+containerchecksum 12d7ceb2d4dcd15f1e441c719b801cff9dddd825f4cffdce66b5a7ba1f0d48b02301772bf34af435537c60ddd102eeeef2fe4375d7637610854c25666a84f273
+doccontainersize 434876
+doccontainerchecksum 973555b478538d5dab01f1d84c78b1c11264306637f50a3f67abf5187de4909b6940d88e4725d03efc02055f9bd6d200564e2bb046c1fb6039e6472f9800f011
docfiles size=568
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 6048059dab..8a02a94e76 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-bfa55ba0eb6377442178c1d4accca41c texlive.tlpdb
+9488bd9351b0da1e06bf3ecfaedc00e3 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 2898d4e7dc..735f1fc875 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-a474c68c08bee72e89078dc8786728eed112f469ea84e2af4e7b44b17a5a89b29cb56813a52692020dd71fb399adcb9a0d0340259922ea7e7687c443e986b8e1 texlive.tlpdb
+a9fd2258de11cba5e0af6235cbf9aae98b4ac3cb2a2b3dea5e75604bd8f3e031d3e480be2ac8ece28324461fbeaf5a75ec20a16de553dd3b4e4f7dee37cc088a texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 4e0b93bf27..e04fa04cb7 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmYxgycACgkQTOGHfhlD
-jHBrOgf9FqZJ3IO23LlFTM4HfKcJxJOXB/sFfQmhhKa+znIvzVBSKhubbuUw7CGQ
-22dhx55r9r5KvnIWG22J2+/llffHKgtCoKPRzIrmtQWVZ8ZNPEXa5BzCfC9Fi45+
-Qj5/0gol9VAvdpItkvs0s3ScWcG11k/oJ0gNF7q8IxJKq314r2A2LBGH+P4ltyot
-ZRxo8M6gOJEQIIrKVqt1C9fMktNiRVQBhU7o7rQEbADzmZ4HCAmyC2bqbC2aSIpG
-2IngENNkSbUGJNRrXt5xez4KhfWb3ttJrz1LPCZD8xL+/xH+2Qb4wY+buVQxiV+v
-4A5Zi82483wdbypqMVXdgNtAoyhvRQ==
-=eKPI
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmYy1NMACgkQTOGHfhlD
+jHBkxwgAvt2ZhgOHOVbPX41m4+YP4aAgLns8J/RpMEbXAr3VNWm9Jn0H80JIs5GU
+q4eCpFCTMNTwDQiAo0Ts3rxK43RrcTM+wx3Zg2ZgpIPsBvdPo7QPM0iOZr9br4Vx
+1eHmoHz5RrGW7CCRy8qxWTSMY3PIdhMRQ7SlIuSr2Xu0qrz+thzc0FoTspLWjmXP
++t06xAorR6YDJT2i07w7hgcPs6bHeR27Y9ZGEZDGmmKP3XEwE4qm2Hc8KEzi/IcD
+hfyPV/Sz4L5jQXTJxFgCdKjrbYsEeUmLV/DAF9Q8sTaQUkZfY6EI3Vqhjr8kjquf
+knYf2iOeMJjJr/snhxSq1GCur37tsA==
+=n2l3
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 1de5844fdc..4c42b217ca 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/timestamp b/timestamp
index a274dd6c15..02187e566d 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:
-2024-05-01-02-02
+2024-05-02-02-02